gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit b18e789fe817861c8b70ceb6785dcb391f88bc27
parent bc21d9b8b059630eeac31a954d30b56f97d38cf2
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Wed, 17 Apr 2024 01:19:45 +0200

remove obsolete files

Diffstat:
Dsource/mqLib/am29f.cpp | 136-------------------------------------------------------------------------------
Dsource/mqLib/am29f.h | 64----------------------------------------------------------------
Dsource/mqLib/dspBootCode.h | 46----------------------------------------------
Dsource/mqLib/lcdfonts.cpp | 2673-------------------------------------------------------------------------------
Dsource/mqLib/lcdfonts.h | 6------
Dsource/mqLib/mqmidi.cpp | 84-------------------------------------------------------------------------------
Dsource/mqLib/mqmidi.h | 44--------------------------------------------
7 files changed, 0 insertions(+), 3053 deletions(-)

diff --git a/source/mqLib/am29f.cpp b/source/mqLib/am29f.cpp @@ -1,136 +0,0 @@ -#include "am29f.h" - -#include <cassert> - -#include "mqmc.h" - -#include "../mc68k/logging.h" - -Am29f::Am29f(uint8_t* _buffer, const size_t _size, bool _useWriteEnable, bool _bitreversedCmdAddr): m_buffer(_buffer), m_size(_size), m_useWriteEnable(_useWriteEnable), m_bitreverseCmdAddr(_bitreversedCmdAddr) -{ - auto br = [&](uint16_t x) - { - return m_bitreverseCmdAddr ? static_cast<uint16_t>(bitreverse(x) >> 4) : x; - }; - - // Chip Erase - m_commands.push_back({{{br(0x555),0xAA}, {br(0x2AA),0x55}, {br(0x555),0x80}, {br(0x555),0xAA}, {br(0x2AA),0x55}, {br(0x555),0x10}}}); - - // Sector Erase - m_commands.push_back({{{br(0x555),0xAA}, {br(0x2AA),0x55}, {br(0x555),0x80}, {br(0x555),0xAA}, {br(0x2AA),0x55}}}); - - // Program - m_commands.push_back({{{br(0x555),0xAA}, {br(0x2AA),0x55}, {br(0x555),0xA0}}}); -} - -void Am29f::write(const uint32_t _addr, const uint16_t _data) -{ - const auto reset = [this]() - { - m_currentBusCycle = 0; - m_currentCommand = -1; - }; - - if(!writeEnabled()) - { - reset(); - return; - } - - bool anyMatch = false; - - const auto d = _data & 0xff; - - for (size_t i=0; i<m_commands.size(); ++i) - { - auto& cycles = m_commands[i].cycles; - - if(m_currentBusCycle < cycles.size()) - { - const auto& c = cycles[m_currentBusCycle]; - - if(c.addr == _addr && c.data == d) - { - anyMatch = true; - - if(m_currentBusCycle == cycles.size() - 1) - m_currentCommand = static_cast<int32_t>(i); - } - } - } - - if(!anyMatch) - { - if(m_currentCommand >= 0) - { - const auto c = static_cast<CommandType>(m_currentCommand); - - execCommand(c, _addr, _data); - } - - reset(); - } - else - { - ++m_currentBusCycle; - } -} - -void Am29f::execCommand(const CommandType _command, uint32_t _addr, const uint16_t _data) -{ - switch (_command) - { - case CommandType::ChipErase: - assert(false); - break; - case CommandType::SectorErase: - { - size_t sectorSizekB = 0; - switch (_addr) - { - case 0x00000: sectorSizekB = 16; break; - case 0x04000: - case 0x06000: sectorSizekB = 8; break; - case 0x08000: sectorSizekB = 32; break; - case 0x10000: - case 0x20000: - case 0x30000: - case 0x40000: - case 0x50000: - case 0x60000: - case 0x70000: sectorSizekB = 64; break; - case 0x78000: - case 0x7A000: - case 0x7C000: - // mq sends erase commands for a flash with top boot block even though a chip with bottom boot block is installed - _addr = 0x70000; - sectorSizekB = 64; - break; - default: - MCLOG("Unable to erase sector at " << MCHEX(_addr) << ", out of bounds!"); - return; - } - - MCLOG("Erasing Sector at " << MCHEX(_addr) << ", size " << MCHEX(1024 * sectorSizekB)); - for(size_t i = _addr; i< _addr + sectorSizekB * 1024; ++i) - m_buffer[i] = 0xff; - } - break; - case CommandType::Program: - { - if(_addr >= m_size) - return; - MCLOG("Programming word at " << MCHEX(_addr) << ", value " << MCHEXN(_data, 4)); - const auto old = mqLib::MqMc::readW(m_buffer, _addr); - // "A bit cannot be programmed from a 0 back to a 1" - const auto v = _data & old; - mqLib::MqMc::writeW(m_buffer, _addr, v); -// assert(v == _data); - break; - } - case CommandType::Invalid: - default: - assert(false); - break; - } -} diff --git a/source/mqLib/am29f.h b/source/mqLib/am29f.h @@ -1,64 +0,0 @@ -#pragma once - -#include <cstdint> -#include <cstddef> -#include <vector> - -class Am29f -{ -public: - struct BusCycle - { - uint16_t addr; - uint8_t data; - }; - - struct Command - { - std::vector<BusCycle> cycles; - }; - - enum class CommandType - { - Invalid = -1, - ChipErase, - SectorErase, - Program, - }; - - explicit Am29f(uint8_t* _buffer, size_t _size, bool _useWriteEnable, bool _bitreversedCmdAddr); - - void writeEnable(bool _writeEnable) - { - m_writeEnable = _writeEnable; - } - - void write(uint32_t _addr, uint16_t _data); - -private: - bool writeEnabled() const - { - return !m_useWriteEnable || m_writeEnable; - } - - static constexpr uint16_t bitreverse(uint16_t x) - { - x = ((x & 0xaaaau) >> 1) | static_cast<uint16_t>((x & 0x5555u) << 1); - x = ((x & 0xccccu) >> 2) | static_cast<uint16_t>((x & 0x3333u) << 2); - x = ((x & 0xf0f0u) >> 4) | static_cast<uint16_t>((x & 0x0f0fu) << 4); - - return ((x & 0xff00) >> 8) | static_cast<uint16_t>((x & 0x00ff) << 8); - } - - void execCommand(CommandType _command, uint32_t _addr, uint16_t _data); - - uint8_t* m_buffer; - const size_t m_size; - const bool m_useWriteEnable; - const bool m_bitreverseCmdAddr; - - std::vector<Command> m_commands; - bool m_writeEnable = false; - uint32_t m_currentBusCycle = 0; - int32_t m_currentCommand = -1; -}; diff --git a/source/mqLib/dspBootCode.h b/source/mqLib/dspBootCode.h @@ -1,46 +0,0 @@ -#pragma once - -#include <cstdint> - -namespace mqLib -{ - static constexpr uint32_t g_dspBootCode[] = - { - 0x350013, 0x0afa23, 0xff0035, 0x0afa22, - 0xff000e, 0x0afa01, 0xff0022, 0x0afa20, - 0xff005e, 0x61f400, 0xff1000, 0x050c8f, - 0x0afa00, 0xff0021, 0x31a900, 0x0afa01, - 0xff0012, 0x0ad161, 0x04d191, 0x019191, - 0xff0013, 0x044894, 0x019191, 0xff0016, - 0x045094, 0x221100, 0x06c800, 0xff001f, - 0x019191, 0xff001c, 0x009814, 0x000000, - 0x050c5a, 0x050c5d, 0x62f400, 0xd00000, - 0x08f4b8, 0xd00409, 0x060680, 0xff0029, - 0x07da8a, 0x0c1c10, 0x219000, 0x219100, - 0x06c800, 0xff0033, 0x060380, 0xff0031, - 0x07da8a, 0x0c1c10, 0x07588c, 0x000000, - 0x050c46, 0x0afa02, 0xff005c, 0x0afa01, - 0xff003e, 0x0afa00, 0xff0046, 0x08f484, - 0x000038, 0x050c0b, 0x0afa20, 0xff0043, - 0x08f484, 0x005018, 0x050c06, 0x08f484, - 0x000218, 0x050c03, 0x08f484, 0x001c1e, - 0x0a8426, 0x0a8380, 0xff0049, 0x084806, - 0x0a8380, 0xff004c, 0x085006, 0x221100, - 0x06c800, 0xff0059, 0x0a83a0, 0xff0058, - 0x0a8383, 0xff0052, 0x00008c, 0x050c03, - 0x085846, 0x000000, 0x0000b9, 0x0ae180, - 0x0afa01, 0xff005f, 0x050c00, 0x66f41b, - 0xff0090, 0x0503a6, 0x04cfdd, 0x013f03, - 0x013e23, 0x045517, 0x060980, 0xff008b, - 0x07de85, 0x07de84, 0x07de86, 0x300013, - 0x70f400, 0x001600, 0x06d820, 0x4258a2, - 0x320013, 0x72f400, 0x000c00, 0x06da20, - 0x075a86, 0x300013, 0x06d800, 0xff007d, - 0x54e000, 0x200063, 0x200018, 0x5cd800, - 0x200043, 0x200018, 0x320013, 0x06da00, - 0xff0083, 0x07da8c, 0x200053, 0x200018, - 0x022d07, 0x08d73c, 0x0d104a, 0x000005, - 0x013d03, 0x00008c, 0x050c02, 0x017d03, - 0x000200, 0x000086 - }; -} diff --git a/source/mqLib/lcdfonts.cpp b/source/mqLib/lcdfonts.cpp @@ -1,2673 +0,0 @@ -#include <cstdint> -#include <array> - -namespace mqLib -{ - constexpr uint8_t g_fontTable0[] = - { - // CGRam Data, initially empty - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 0 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 1 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 2 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 3 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 4 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 5 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 6 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 7 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 8 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 9 - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 a - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 b - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 c - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 d - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 e - 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, // 0 f - - 0b00000, // 1 0 - 0b10001, - 0b01001, - 0b01110, - 0b10010, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 1 - 0b11110, - 0b00010, - 0b00010, - 0b00010, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 2 - 0b00110, - 0b00010, - 0b00110, - 0b01010, - 0b01010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 3 - 0b11111, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 4 - 0b11111, - 0b00001, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 5 - 0b00110, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 6 - 0b01110, - 0b00100, - 0b01000, - 0b00100, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 7 - 0b11111, - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 8 - 0b10111, - 0b10101, - 0b10101, - 0b10001, - 0b01111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 9 - 0b00110, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 a - 0b01111, - 0b00001, - 0b00001, - 0b00001, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 b - 0b11110, - 0b00001, - 0b00001, - 0b00001, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b10000, // 1 c - 0b11111, - 0b00001, - 0b00001, - 0b00001, - 0b00110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 d - 0b11111, - 0b10001, - 0b10001, - 0b10001, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 e - 0b10110, - 0b01001, - 0b10001, - 0b10001, - 0b10111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 1 f - 0b00110, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 2 0 - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 2 1 ! - 0b00100, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b01010, // 2 2 " - 0b01010, - 0b01010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b01010, // 2 3 # - 0b01010, - 0b11111, - 0b01010, - 0b11111, - 0b01010, - 0b01010, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 2 4 $ - 0b01111, - 0b10100, - 0b01110, - 0b00101, - 0b11110, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b11000, // 2 5 % - 0b11001, - 0b00010, - 0b00100, - 0b01000, - 0b10011, - 0b00011, - 0b00000, - 0b00000, - 0b00000, - - 0b01100, // 2 6 & - 0b10010, - 0b10100, - 0b01000, - 0b10101, - 0b10010, - 0b01101, - 0b00000, - 0b00000, - 0b00000, - - 0b01100, // 2 7 ' - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // 2 8 ( - 0b00100, - 0b01000, - 0b01000, - 0b01000, - 0b00100, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // 2 9 ) - 0b00100, - 0b00010, - 0b00010, - 0b00010, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 2 a * - 0b00100, - 0b10101, - 0b01110, - 0b10101, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 2 b + - 0b00100, - 0b00100, - 0b11111, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 2 c , - 0b00000, - 0b00000, - 0b00000, - 0b01100, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 2 d - - 0b00000, - 0b00000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 2 e . - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b01100, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 2 f / - 0b00001, - 0b00010, - 0b00100, - 0b01000, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 3 0 0 - 0b10001, - 0b10011, - 0b10101, - 0b11001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 3 1 1 - 0b01100, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 3 2 2 - 0b10001, - 0b00001, - 0b00010, - 0b00100, - 0b01000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // 3 3 3 - 0b00010, - 0b00100, - 0b00010, - 0b00001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // 3 4 4 - 0b00110, - 0b01010, - 0b10010, - 0b11111, - 0b00010, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // 3 5 5 - 0b10000, - 0b11110, - 0b00001, - 0b00001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00110, // 3 6 6 - 0b01000, - 0b10000, - 0b11110, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // 3 7 7 - 0b00001, - 0b00010, - 0b00100, - 0b01000, - 0b01000, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 3 8 8 - 0b10001, - 0b10001, - 0b01110, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 3 9 9 - 0b10001, - 0b10001, - 0b01111, - 0b00001, - 0b00010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 3 a : - 0b01100, - 0b01100, - 0b00000, - 0b01100, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 3 b ; - 0b01100, - 0b01100, - 0b00000, - 0b01100, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // 3 c < - 0b00100, - 0b01000, - 0b10000, - 0b01000, - 0b00100, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 3 d = - 0b00000, - 0b11111, - 0b00000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // 3 e > - 0b00100, - 0b00010, - 0b00001, - 0b00010, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 3 f ? - 0b10001, - 0b00001, - 0b00010, - 0b00100, - 0b00000, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 4 0 @ - 0b10001, - 0b00001, - 0b01101, - 0b10101, - 0b10101, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 4 1 A - 0b10001, - 0b10001, - 0b10001, - 0b11111, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b11110, // 4 2 B - 0b10001, - 0b10001, - 0b11110, - 0b10001, - 0b10001, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 4 3 C - 0b10001, - 0b10000, - 0b10000, - 0b10000, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b11100, // 4 4 D - 0b10010, - 0b10001, - 0b10001, - 0b10001, - 0b10010, - 0b11100, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // 4 5 E - 0b10000, - 0b10000, - 0b11110, - 0b10000, - 0b10000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // 4 6 F - 0b10000, - 0b10000, - 0b11110, - 0b10000, - 0b10000, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 4 7 G - 0b10001, - 0b10000, - 0b10111, - 0b10001, - 0b10001, - 0b01111, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 4 8 H - 0b10001, - 0b10001, - 0b11111, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 4 9 I - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00111, // 4 a J - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b10010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 4 b K - 0b10010, - 0b10100, - 0b11000, - 0b10100, - 0b10010, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b10000, // 4 c L - 0b10000, - 0b10000, - 0b10000, - 0b10000, - 0b10000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 4 d M - 0b11011, - 0b10101, - 0b10101, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 4 e N - 0b10001, - 0b11001, - 0b10101, - 0b10011, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 4 f O - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b11110, // 5 0 P - 0b10001, - 0b10001, - 0b11110, - 0b10000, - 0b10000, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 5 1 Q - 0b10001, - 0b10001, - 0b10001, - 0b10101, - 0b10010, - 0b01101, - 0b00000, - 0b00000, - 0b00000, - - 0b11110, // 5 2 R - 0b10001, - 0b10001, - 0b11110, - 0b10100, - 0b10010, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b01111, // 5 3 S - 0b10000, - 0b10000, - 0b01110, - 0b00001, - 0b00001, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // 5 4 T - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 5 5 U - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 5 6 V - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b01010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b10101, // 5 7 W - 0b10101, - 0b10101, - 0b10101, - 0b10101, - 0b10101, - 0b01010, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 5 8 X - 0b10001, - 0b01010, - 0b00100, - 0b01010, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 5 9 Y - 0b10001, - 0b10001, - 0b01010, - 0b00100, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // 5 a Z - 0b00001, - 0b00010, - 0b00100, - 0b01000, - 0b10000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 5 b [ - 0b01000, - 0b01000, - 0b01000, - 0b01000, - 0b01000, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b10001, // 5 c - 0b01010, - 0b11111, - 0b00100, - 0b11111, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // 5 d ] - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 5 e ^ - 0b01010, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 5 f _ - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // 6 0 ` - 0b00100, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 6 1 a - 0b00000, - 0b01110, - 0b00001, - 0b01111, - 0b10001, - 0b01111, - 0b00000, - 0b00000, - 0b00000, - - 0b10000, // 6 2 b - 0b10000, - 0b10110, - 0b11001, - 0b10001, - 0b10001, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 6 3 c - 0b00000, - 0b01110, - 0b10000, - 0b10000, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00001, // 6 4 d - 0b00001, - 0b01101, - 0b10011, - 0b10001, - 0b10001, - 0b01111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 6 5 e - 0b00000, - 0b01110, - 0b10001, - 0b11111, - 0b10000, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00110, // 6 6 f - 0b01001, - 0b01000, - 0b11100, - 0b01000, - 0b01000, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 6 7 g - 0b01111, - 0b10001, - 0b10001, - 0b01111, - 0b00001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b10000, // 6 8 h - 0b10000, - 0b10110, - 0b11001, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 6 9 i - 0b00000, - 0b01100, - 0b00100, - 0b00100, - 0b00100, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // 6 a j - 0b00000, - 0b00110, - 0b00010, - 0b00010, - 0b10010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b10000, // 6 b k - 0b10000, - 0b10010, - 0b10100, - 0b11000, - 0b10100, - 0b10010, - 0b00000, - 0b00000, - 0b00000, - - 0b01100, // 6 c l - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 6 d m - 0b00000, - 0b11010, - 0b10101, - 0b10101, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 6 e n - 0b00000, - 0b10110, - 0b11001, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 6 f o - 0b00000, - 0b01110, - 0b10001, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 0 p - 0b00000, - 0b11110, - 0b10001, - 0b11110, - 0b10000, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 1 q - 0b00000, - 0b01101, - 0b10011, - 0b01111, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 2 r - 0b00000, - 0b10110, - 0b11001, - 0b10000, - 0b10000, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 3 s - 0b00000, - 0b01110, - 0b10000, - 0b01110, - 0b00001, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // 7 4 t - 0b01000, - 0b11100, - 0b01000, - 0b01000, - 0b01001, - 0b00110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 5 u - 0b00000, - 0b10001, - 0b10001, - 0b10001, - 0b10011, - 0b01101, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 6 v - 0b00000, - 0b10001, - 0b10001, - 0b10001, - 0b01010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 7 w - 0b00000, - 0b10001, - 0b10001, - 0b10001, - 0b10101, - 0b01010, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 8 x - 0b00000, - 0b10001, - 0b01010, - 0b00100, - 0b01010, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 9 y - 0b00000, - 0b10001, - 0b10001, - 0b01111, - 0b00001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 a z - 0b00000, - 0b11111, - 0b00010, - 0b00100, - 0b01000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // 7 b { - 0b00100, - 0b00100, - 0b01000, - 0b00100, - 0b00100, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 7 c | - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // 7 d } - 0b00100, - 0b00100, - 0b00010, - 0b00100, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 e -> - 0b00100, - 0b00010, - 0b11111, - 0b00010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 7 f <- - 0b00100, - 0b01000, - 0b11111, - 0b01000, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 0 - 0b00110, - 0b00010, - 0b00010, - 0b00010, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 1 - 0b11111, - 0b10001, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 2 - 0b10001, - 0b10001, - 0b01001, - 0b00101, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 3 - 0b01111, - 0b01001, - 0b01101, - 0b00001, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 4 - 0b11111, - 0b01001, - 0b01101, - 0b00001, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 5 - 0b01001, - 0b00110, - 0b00010, - 0b00001, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 6 - 0b10001, - 0b01010, - 0b00100, - 0b00010, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 7 - 0b11111, - 0b00001, - 0b10001, - 0b10110, - 0b10000, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 8 - 0b11111, - 0b00001, - 0b00001, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 9 - 0b10101, - 0b10101, - 0b10101, - 0b10101, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 a - 0b01111, - 0b01001, - 0b01001, - 0b01001, - 0b11001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 8 b - 0b01001, - 0b11101, - 0b00001, - 0b10001, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 c - 0b00010, - 0b00000, - 0b00010, - 0b00101, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 d - 0b00000, - 0b00000, - 0b00010, - 0b00101, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // 8 e - 0b00100, - 0b01110, - 0b00000, - 0b00010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 8 f - 0b00100, - 0b00000, - 0b00110, - 0b01000, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 9 0 - 0b00101, - 0b11100, - 0b00000, - 0b00100, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 1 - 0b00000, - 0b00100, - 0b01010, - 0b00001, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 2 - 0b00010, - 0b00000, - 0b10011, - 0b10011, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 3 - 0b00000, - 0b00000, - 0b00111, - 0b00101, - 0b11011, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 4 - 0b01100, - 0b00010, - 0b01001, - 0b10101, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 9 5 - 0b00000, - 0b01111, - 0b01001, - 0b00110, - 0b11001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 9 6 - 0b01001, - 0b11101, - 0b00001, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 7 - 0b00101, - 0b00000, - 0b00010, - 0b00101, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 8 - 0b00000, - 0b00000, - 0b01100, - 0b01010, - 0b01101, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 9 - 0b01010, - 0b00000, - 0b01100, - 0b01010, - 0b01101, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 a - 0b00000, - 0b01111, - 0b01001, - 0b00110, - 0b11001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // 9 b - 0b00000, - 0b00100, - 0b01010, - 0b00001, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 c - 0b00101, - 0b00000, - 0b10011, - 0b10011, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 d - 0b00001, - 0b00001, - 0b00001, - 0b00001, - 0b11110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // 9 e - 0b00000, - 0b00000, - 0b00100, - 0b01010, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00110, // 9 f - 0b11101, - 0b00001, - 0b00001, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 0 - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 1 - 0b00000, - 0b00000, - 0b00000, - 0b11100, - 0b10100, - 0b11100, - 0b00000, - 0b00000, - 0b00000, - - 0b00111, // a 2 - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 3 - 0b00000, - 0b00000, - 0b00100, - 0b00100, - 0b00100, - 0b11100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 4 - 0b00000, - 0b00000, - 0b00000, - 0b10000, - 0b01000, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 5 - 0b00000, - 0b00000, - 0b01100, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 6 - 0b11111, - 0b00001, - 0b11111, - 0b00001, - 0b00010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 7 - 0b00000, - 0b11111, - 0b00001, - 0b00110, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 8 - 0b00000, - 0b00010, - 0b00100, - 0b01100, - 0b10100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a 9 - 0b00000, - 0b00100, - 0b11111, - 0b10001, - 0b00001, - 0b00110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a a - 0b00000, - 0b00000, - 0b11111, - 0b00100, - 0b00100, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a b - 0b00000, - 0b00010, - 0b11111, - 0b00110, - 0b01010, - 0b10010, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a c - 0b00000, - 0b01000, - 0b11111, - 0b01001, - 0b01010, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a d - 0b00000, - 0b00000, - 0b01110, - 0b00010, - 0b00010, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // a e - 0b00000, - 0b00000, - 0b11110, - 0b00010, - 0b11110, - 0b00010, - 0b11110, - 0b00000, - 0b00000, - - 0b00000, // a f - 0b00000, - 0b00000, - 0b10101, - 0b10101, - 0b00001, - 0b00110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // b 0 - 0b00000, - 0b00000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // b 1 - 0b00001, - 0b00101, - 0b00110, - 0b00100, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00001, // b 2 - 0b00010, - 0b00100, - 0b01100, - 0b10100, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // b 3 - 0b11111, - 0b10001, - 0b10001, - 0b00001, - 0b00010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // b 4 - 0b11111, - 0b00100, - 0b00100, - 0b00100, - 0b00100, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // b 5 - 0b11111, - 0b00010, - 0b00110, - 0b01010, - 0b10010, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // b 6 - 0b11111, - 0b01001, - 0b01001, - 0b01001, - 0b01001, - 0b10010, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // b 7 - 0b11111, - 0b00100, - 0b11111, - 0b00100, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // b 8 - 0b01111, - 0b01001, - 0b10001, - 0b00001, - 0b00010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // b 9 - 0b01111, - 0b10010, - 0b00010, - 0b00010, - 0b00010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // b a - 0b11111, - 0b00001, - 0b00001, - 0b00001, - 0b00001, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b01010, // b b - 0b11111, - 0b01010, - 0b01010, - 0b00010, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // b c - 0b11000, - 0b00001, - 0b11001, - 0b00001, - 0b00010, - 0b11100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // b d - 0b11111, - 0b00001, - 0b00010, - 0b00100, - 0b01010, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // b e - 0b11111, - 0b01001, - 0b01010, - 0b01000, - 0b01000, - 0b00111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // b f - 0b10001, - 0b10001, - 0b01001, - 0b00001, - 0b00010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c 0 - 0b01111, - 0b01001, - 0b10101, - 0b00011, - 0b00010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // c 1 - 0b11100, - 0b00100, - 0b11111, - 0b00100, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c 2 - 0b10101, - 0b10101, - 0b10101, - 0b00001, - 0b00010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // c 3 - 0b00000, - 0b11111, - 0b00100, - 0b00100, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // c 4 - 0b01000, - 0b01000, - 0b01100, - 0b01010, - 0b01000, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // c 5 - 0b00100, - 0b11111, - 0b00100, - 0b00100, - 0b01000, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c 6 - 0b01110, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c 7 - 0b11111, - 0b00001, - 0b01010, - 0b00100, - 0b01010, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // c 8 - 0b11111, - 0b00010, - 0b00100, - 0b01110, - 0b10101, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // c 9 - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c a - 0b00100, - 0b00010, - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b10000, // c b - 0b10000, - 0b11111, - 0b10000, - 0b10000, - 0b10000, - 0b01111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c c - 0b11111, - 0b00001, - 0b00001, - 0b00001, - 0b00010, - 0b01100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c d - 0b01000, - 0b10100, - 0b00010, - 0b00001, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // c e - 0b11111, - 0b00100, - 0b10101, - 0b10101, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // c f - 0b11111, - 0b00001, - 0b00001, - 0b01010, - 0b00100, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d 0 - 0b01110, - 0b00000, - 0b01110, - 0b00000, - 0b01110, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d 1 - 0b00100, - 0b01000, - 0b10000, - 0b10001, - 0b11111, - 0b00001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d 2 - 0b00001, - 0b00001, - 0b01010, - 0b00100, - 0b01010, - 0b10000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d 3 - 0b11111, - 0b01000, - 0b11111, - 0b01000, - 0b01000, - 0b00111, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // d 4 - 0b01000, - 0b11111, - 0b01001, - 0b01010, - 0b01000, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d 5 - 0b01110, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d 6 - 0b11111, - 0b00001, - 0b11111, - 0b00001, - 0b00001, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // d 7 - 0b00000, - 0b11111, - 0b00001, - 0b00001, - 0b00010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b10010, // d 8 - 0b10010, - 0b10010, - 0b10010, - 0b00010, - 0b00100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d 9 - 0b00100, - 0b10100, - 0b10100, - 0b10100, - 0b10101, - 0b10110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d a - 0b10000, - 0b10000, - 0b10001, - 0b10010, - 0b10100, - 0b11000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d b - 0b11111, - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d c - 0b11111, - 0b10001, - 0b10001, - 0b00001, - 0b00010, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // d d - 0b11000, - 0b00000, - 0b00001, - 0b00001, - 0b00010, - 0b11100, - 0b00000, - 0b00000, - 0b00000, - - 0b00100, // d e - 0b10010, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b11100, // d f - 0b10100, - 0b11100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // e 0 - 0b01001, - 0b10101, - 0b10010, - 0b10010, - 0b01101, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b01010, // e 1 - 0b00000, - 0b01110, - 0b00001, - 0b01111, - 0b10001, - 0b01111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // e 2 - 0b00000, - 0b01110, - 0b10001, - 0b11110, - 0b10001, - 0b11110, - 0b10000, - 0b10000, - 0b10000, - - 0b00000, // e 3 - 0b00000, - 0b01110, - 0b10000, - 0b01100, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // e 4 - 0b00000, - 0b10001, - 0b10001, - 0b10001, - 0b10011, - 0b11101, - 0b10000, - 0b10000, - 0b10000, - - 0b00000, // e 5 - 0b00000, - 0b00000, - 0b01111, - 0b10100, - 0b10010, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - - 0b00000, // e 6 - 0b00000, - 0b00110, - 0b01001, - 0b10001, - 0b10001, - 0b11110, - 0b10000, - 0b10000, - 0b10000, - - 0b00000, // e 7 - 0b00000, - 0b01111, - 0b10001, - 0b10001, - 0b10001, - 0b01111, - 0b00001, - 0b00001, - 0b01110, - - 0b00000, // e 8 - 0b00000, - 0b00111, - 0b00100, - 0b00100, - 0b10100, - 0b01000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // e 9 - 0b00010, - 0b11010, - 0b00010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00010, // e a - 0b00000, - 0b00110, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b00010, - 0b10010, - 0b01100, - - 0b00000, // e b - 0b10100, - 0b01000, - 0b10100, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // e c - 0b00100, - 0b01110, - 0b10100, - 0b10101, - 0b01110, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b01000, // e d - 0b01000, - 0b11100, - 0b01000, - 0b11100, - 0b01000, - 0b01111, - 0b00000, - 0b00000, - 0b00000, - - 0b01110, // e e - 0b00000, - 0b10110, - 0b11001, - 0b10001, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b01010, // e f - 0b00000, - 0b01110, - 0b10001, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f 0 - 0b00000, - 0b10110, - 0b11001, - 0b10001, - 0b10001, - 0b11110, - 0b10000, - 0b10000, - 0b10000, - - 0b00000, // f 1 - 0b00000, - 0b01101, - 0b10011, - 0b10001, - 0b10001, - 0b01111, - 0b00001, - 0b00001, - 0b00001, - - 0b00000, // f 2 - 0b01110, - 0b10001, - 0b11111, - 0b10001, - 0b10001, - 0b01110, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f 3 - 0b00000, - 0b00000, - 0b01011, - 0b10101, - 0b11010, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f 4 - 0b00000, - 0b01110, - 0b10001, - 0b10001, - 0b01010, - 0b11011, - 0b00000, - 0b00000, - 0b00000, - - 0b01010, // f 5 - 0b00000, - 0b10001, - 0b10001, - 0b10001, - 0b10011, - 0b01101, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // f 6 - 0b10000, - 0b01000, - 0b00100, - 0b01000, - 0b10000, - 0b11111, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f 7 - 0b00000, - 0b11111, - 0b01010, - 0b01010, - 0b01010, - 0b10011, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // f 8 - 0b00000, - 0b10001, - 0b01010, - 0b00100, - 0b01010, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f 9 - 0b00000, - 0b10001, - 0b10001, - 0b10001, - 0b10001, - 0b01111, - 0b00001, - 0b00001, - 0b01110, - - 0b00000, // f a - 0b00001, - 0b11110, - 0b00100, - 0b11111, - 0b00100, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f b - 0b00000, - 0b11111, - 0b01000, - 0b01111, - 0b01001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f c - 0b00000, - 0b11111, - 0b10101, - 0b11111, - 0b10001, - 0b10001, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f d - 0b00000, - 0b00100, - 0b00000, - 0b11111, - 0b00000, - 0b00100, - 0b00000, - 0b00000, - 0b00000, - - 0b00000, // f e - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - 0b00000, - - 0b11111, // f f - 0b11111, - 0b11111, - 0b11111, - 0b11111, - 0b11111, - 0b11111, - 0b11111, - 0b11111, - 0b11111, - }; - - static_assert(std::size(g_fontTable0) == 256 * 10); - - const uint8_t* getCharacterData(const uint8_t _character) - { - return &g_fontTable0[_character * 10]; - } -} diff --git a/source/mqLib/lcdfonts.h b/source/mqLib/lcdfonts.h @@ -1,6 +0,0 @@ -#pragma once - -namespace mqLib -{ - const uint8_t* getCharacterData(uint8_t _character); -} diff --git a/source/mqLib/mqmidi.cpp b/source/mqLib/mqmidi.cpp @@ -1,84 +0,0 @@ -#include "mqmidi.h" - -#include <deque> - -#include "../mc68k/qsm.h" - -namespace mqLib -{ - static constexpr float g_sysexSendDelaySeconds = 0.2f; - static constexpr uint32_t g_sysexSendDelaySamples = static_cast<uint32_t>(44100.0f * g_sysexSendDelaySeconds); - - Midi::Midi(mc68k::Qsm& _qsm) : m_qsm(_qsm) - { - } - - void Midi::process(const uint32_t _numSamples) - { - if(m_remainingSysexDelay) - m_remainingSysexDelay -= std::min(m_remainingSysexDelay, _numSamples); - - while(m_remainingSysexDelay == 0 && !m_transmittingSysex && !m_pendingSysexBuffers.empty()) - { - const auto& msg = m_pendingSysexBuffers.front(); - - for (const auto b : msg) - m_qsm.writeSciRX(b); - - if(msg.size() > 0xf) - m_remainingSysexDelay = g_sysexSendDelaySamples; - - m_pendingSysexBuffers.pop_front(); - } - } - - void Midi::writeMidi(const uint8_t _byte) - { - if(_byte == 0xf0) - { - m_receivingSysex = true; - } - - if(m_receivingSysex) - { - m_pendingSysexMessage.push_back(_byte); - } - else - { - m_qsm.writeSciRX(_byte); - } - - if (_byte == 0xf7) - { - m_receivingSysex = false; - - if (!m_pendingSysexMessage.empty()) - m_pendingSysexBuffers.push_back(std::move(m_pendingSysexMessage)); - - m_pendingSysexMessage.clear(); - } - } - - void Midi::readTransmitBuffer(std::vector<uint8_t>& _result) - { - std::deque<uint16_t> midiData; - m_qsm.readSciTX(midiData); - if (midiData.empty()) - return; - - _result.clear(); - _result.reserve(midiData.size()); - - for (const auto data : midiData) - { - const uint8_t d = data & 0xff; - - if(d == 0xf0) - m_transmittingSysex = true; - else if(d == 0xf7) - m_transmittingSysex = false; - - _result.push_back(d); - } - } -} diff --git a/source/mqLib/mqmidi.h b/source/mqLib/mqmidi.h @@ -1,44 +0,0 @@ -#pragma once - -#include <deque> -#include <vector> -#include <cstdint> - -namespace mc68k -{ - class Qsm; -} - -namespace mqLib -{ - class Midi - { - public: - explicit Midi(mc68k::Qsm& _qsm); - - void process(uint32_t _numSamples); - - void writeMidi(uint8_t _byte); - void writeMidi(const std::initializer_list<uint8_t>& _bytes) - { - for (const uint8_t byte : _bytes) - writeMidi(byte); - } - void writeMidi(const std::vector<uint8_t>& _bytes) - { - for (const uint8_t byte : _bytes) - writeMidi(byte); - } - void readTransmitBuffer(std::vector<uint8_t>& _result); - - private: - mc68k::Qsm& m_qsm; - - bool m_transmittingSysex = false; - bool m_receivingSysex = false; - uint32_t m_remainingSysexDelay = 0; - - std::deque< std::vector<uint8_t> > m_pendingSysexBuffers; - std::vector<uint8_t> m_pendingSysexMessage; - }; -}