// license:GPL-2.0+ // copyright-holders:Peter Trauner #include "emu.h" #include "cpu/sc61860/sc61860.h" #include "includes/pocketc.h" #include "includes/pc1403.h" #include "machine/ram.h" #define LOG_ASIC (1 << 0) #define VERBSOE (0) #include "logmacro.h" /* C-CE while reset, program will not be destroyed! */ /* port 2: bits 0,1: external rom a14,a15 lines port 3: bits 0..6 keyboard output select matrix line */ void pc1403_state::asic_write(offs_t offset, uint8_t data) { m_asic[offset >> 9] = data; switch (offset >> 9) { case 0: // 0x3800 // output LOGMASKED(LOG_ASIC, "asic write %.4x %.2x\n", offset, data); break; case 1: // 0x3a00 LOGMASKED(LOG_ASIC, "asic write %.4x %.2x\n", offset, data); break; case 2: // 0x3c00 membank("bank1")->set_base(memregion("user1")->base() + ((data & 7) << 14)); LOGMASKED(LOG_ASIC, "asic write %.4x %.2x\n", offset, data); break; case 3: // 0x3e00 break; } } uint8_t pc1403_state::asic_read(offs_t offset) { uint8_t data = m_asic[offset >> 9]; switch (offset >> 9) { case 0: case 1: case 2: LOGMASKED(LOG_ASIC, "asic read %.4x %.2x\n", offset, data); break; } return data; } uint8_t pc1403_state::in_a_r() { uint8_t data = m_outa; for (int bit = 0; bit < 7; bit++) if (BIT(m_asic[3], bit)) data |= m_keys[bit]->read(); if (BIT(m_outa, 0)) { data |= m_keys[7]->read(); /* At Power Up we fake a 'C-CE' pressure */ if (m_power) data |= 0x02; } for (int bit = 1, key = 8; bit < 7; bit++, key++) if (BIT(m_outa, bit)) data |= m_keys[key]->read(); return data; } void pc1403_state::out_c_w(uint8_t data) { m_portc = data; } READ_LINE_MEMBER(pc1403_state::reset_r) { return BIT(m_extra->read(), 1); } void pc1403_state::machine_start() { pocketc_state::machine_start(); membank("bank1")->set_base(memregion("user1")->base()); m_ram_nvram->set_base(memregion("maincpu")->base() + 0x8000, 0x8000); uint8_t *gfx = memregion("gfx1")->base(); for (int i = 0; i < 128; i++) gfx[i] = i; }