diff --git a/src/mame/drivers/pp01.cpp b/src/mame/drivers/pp01.cpp index d8008abb9ad..9df1ac90637 100644 --- a/src/mame/drivers/pp01.cpp +++ b/src/mame/drivers/pp01.cpp @@ -16,6 +16,9 @@ Z - ? ToDo: - Interrupt controller +- Add missing keys +- Quickload support +- Software to test with *****************************************************************************************/ @@ -29,22 +32,22 @@ ToDo: /* Address maps */ void pp01_state::mem_map(address_map &map) { - map(0x0000, 0x0fff).bankrw("bank1"); - map(0x1000, 0x1fff).bankrw("bank2"); - map(0x2000, 0x2fff).bankrw("bank3"); - map(0x3000, 0x3fff).bankrw("bank4"); - map(0x4000, 0x4fff).bankrw("bank5"); - map(0x5000, 0x5fff).bankrw("bank6"); - map(0x6000, 0x6fff).bankrw("bank7"); - map(0x7000, 0x7fff).bankrw("bank8"); - map(0x8000, 0x8fff).bankrw("bank9"); - map(0x9000, 0x9fff).bankrw("bank10"); - map(0xa000, 0xafff).bankrw("bank11"); - map(0xb000, 0xbfff).bankrw("bank12"); - map(0xc000, 0xcfff).bankrw("bank13"); - map(0xd000, 0xdfff).bankrw("bank14"); - map(0xe000, 0xefff).bankrw("bank15"); - map(0xf000, 0xffff).bankrw("bank16"); + map(0x0000, 0x0fff).bankrw("bank0"); + map(0x1000, 0x1fff).bankrw("bank1"); + map(0x2000, 0x2fff).bankrw("bank2"); + map(0x3000, 0x3fff).bankrw("bank3"); + map(0x4000, 0x4fff).bankrw("bank4"); + map(0x5000, 0x5fff).bankrw("bank5"); + map(0x6000, 0x6fff).bankrw("bank6"); + map(0x7000, 0x7fff).bankrw("bank7"); + map(0x8000, 0x8fff).bankrw("bank8"); + map(0x9000, 0x9fff).bankrw("bank9"); + map(0xa000, 0xafff).bankrw("bank10"); + map(0xb000, 0xbfff).bankrw("bank11"); + map(0xc000, 0xcfff).bankrw("bank12"); + map(0xd000, 0xdfff).bankrw("bank13"); + map(0xe000, 0xefff).bankrw("bank14"); + map(0xf000, 0xffff).bankrw("bank15"); } void pp01_state::io_map(address_map &map) @@ -68,8 +71,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE1") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) @@ -77,8 +78,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE2") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) @@ -86,8 +85,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE3") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) @@ -95,8 +92,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE4") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) @@ -104,8 +99,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE5") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F9") PORT_CODE(KEYCODE_F9) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F10") PORT_CODE(KEYCODE_F10) @@ -113,8 +106,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE6") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F11") PORT_CODE(KEYCODE_F11) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F12") PORT_CODE(KEYCODE_F12) @@ -122,8 +113,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE7") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F13") PORT_CODE(KEYCODE_PGUP) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F14") PORT_CODE(KEYCODE_PGDN) @@ -131,8 +120,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE8") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Delete line") PORT_CODE(KEYCODE_TILDE) @@ -140,8 +127,6 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("LINE9") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Num +") PORT_CODE(KEYCODE_PLUS_PAD) @@ -149,64 +134,49 @@ static INPUT_PORTS_START( pp01 ) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINEA") + PORT_START("LINE10") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINEB") + PORT_START("LINE11") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINEC") + PORT_START("LINE12") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Num *") PORT_CODE(KEYCODE_ASTERISK) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Num -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINED") + PORT_START("LINE13") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINEE") + PORT_START("LINE14") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Num /") PORT_CODE(KEYCODE_SLASH_PAD) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Num .") PORT_CODE(KEYCODE_DEL_PAD) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_TILDE) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINEF") + PORT_START("LINE15") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("_") PORT_CODE(KEYCODE_HOME) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINEALL") - PORT_BIT(0x3F, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("LINE16") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) INPUT_PORTS_END @@ -266,28 +236,27 @@ void pp01_state::pp01(machine_config &config) /* ROM definition */ ROM_START( pp01 ) - ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF ) - - ROM_LOAD( "ep01.rom", 0x14000, 0x0400, CRC(e48e440f) SHA1(aaae41f0bf163f254e28f6e4d9f6010b349e0c45)) - ROM_LOAD( "ep02.rom", 0x14400, 0x0400, CRC(b9314867) SHA1(220e2a686c6624574e8ea7f6012030c8378a8be6)) - ROM_LOAD( "ep03.rom", 0x14800, 0x0400, CRC(47b91d49) SHA1(51445e24d1c375e798c5ed7b48cb1c7b5e01603a)) - ROM_LOAD( "ep04.rom", 0x14c00, 0x0400, CRC(cc890123) SHA1(7110f301453d925da0d3f29c2ba4eacd5ff8583d)) - ROM_LOAD( "ep05.rom", 0x15000, 0x0400, CRC(b36e2071) SHA1(7c7b2c410f4039980627196575109426bb7bab35)) - ROM_LOAD( "ep06.rom", 0x15400, 0x0400, CRC(3f74efb3) SHA1(77d055eb53ba9b4b14eb2bb8d71f93095b846bb5)) - ROM_LOAD( "ep07.rom", 0x15800, 0x0400, CRC(1dd0bc29) SHA1(109bc3f24a76884d2581f75edc532917cb7ea155)) - ROM_LOAD( "ep08.rom", 0x15c00, 0x0400, CRC(607b710a) SHA1(c5ac7da31204c54d6892d6b708d0291d71963581)) - ROM_LOAD( "ep09.rom", 0x16000, 0x0400, CRC(07f773d1) SHA1(a6cf454318ef0a564a86e669b751e414b12c12d1)) - ROM_LOAD( "ep10.rom", 0x16400, 0x0400, CRC(7793d84b) SHA1(d16ad3db36c8cec68713082ee60324219d3d5032)) - ROM_LOAD( "ep11.rom", 0x16800, 0x0400, CRC(d1b98b5e) SHA1(5526af6317667d707ae413916242cd1bac821373)) - ROM_LOAD( "ep12.rom", 0x16c00, 0x0400, CRC(03c45326) SHA1(f9157ab86cdf1d111bcf19c24e4d7250705be965)) - ROM_LOAD( "ep13.rom", 0x17000, 0x0400, CRC(51769d6c) SHA1(76d6e91cf32b1eb94b9c0ded02e5057ed7ff7d72)) - ROM_LOAD( "ep14.rom", 0x17400, 0x0400, CRC(5d48cefb) SHA1(9b8599dabaf7297ec800fa9a122ad7e3b7b30e8b)) - ROM_LOAD( "ep15.rom", 0x17800, 0x0400, CRC(f44bfe36) SHA1(0ab3c4f061dff6f779685409b07343d0a839fdae)) - ROM_LOAD( "ep16.rom", 0x17c00, 0x0400, CRC(f39c230d) SHA1(9789cedef5655bcb82561f387cc1a6cf48287d78)) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "ep01.rom", 0x0000, 0x0400, CRC(e48e440f) SHA1(aaae41f0bf163f254e28f6e4d9f6010b349e0c45)) + ROM_LOAD( "ep02.rom", 0x0400, 0x0400, CRC(b9314867) SHA1(220e2a686c6624574e8ea7f6012030c8378a8be6)) + ROM_LOAD( "ep03.rom", 0x0800, 0x0400, CRC(47b91d49) SHA1(51445e24d1c375e798c5ed7b48cb1c7b5e01603a)) + ROM_LOAD( "ep04.rom", 0x0c00, 0x0400, CRC(cc890123) SHA1(7110f301453d925da0d3f29c2ba4eacd5ff8583d)) + ROM_LOAD( "ep05.rom", 0x1000, 0x0400, CRC(b36e2071) SHA1(7c7b2c410f4039980627196575109426bb7bab35)) + ROM_LOAD( "ep06.rom", 0x1400, 0x0400, CRC(3f74efb3) SHA1(77d055eb53ba9b4b14eb2bb8d71f93095b846bb5)) + ROM_LOAD( "ep07.rom", 0x1800, 0x0400, CRC(1dd0bc29) SHA1(109bc3f24a76884d2581f75edc532917cb7ea155)) + ROM_LOAD( "ep08.rom", 0x1c00, 0x0400, CRC(607b710a) SHA1(c5ac7da31204c54d6892d6b708d0291d71963581)) + ROM_LOAD( "ep09.rom", 0x2000, 0x0400, CRC(07f773d1) SHA1(a6cf454318ef0a564a86e669b751e414b12c12d1)) + ROM_LOAD( "ep10.rom", 0x2400, 0x0400, CRC(7793d84b) SHA1(d16ad3db36c8cec68713082ee60324219d3d5032)) + ROM_LOAD( "ep11.rom", 0x2800, 0x0400, CRC(d1b98b5e) SHA1(5526af6317667d707ae413916242cd1bac821373)) + ROM_LOAD( "ep12.rom", 0x2c00, 0x0400, CRC(03c45326) SHA1(f9157ab86cdf1d111bcf19c24e4d7250705be965)) + ROM_LOAD( "ep13.rom", 0x3000, 0x0400, CRC(51769d6c) SHA1(76d6e91cf32b1eb94b9c0ded02e5057ed7ff7d72)) + ROM_LOAD( "ep14.rom", 0x3400, 0x0400, CRC(5d48cefb) SHA1(9b8599dabaf7297ec800fa9a122ad7e3b7b30e8b)) + ROM_LOAD( "ep15.rom", 0x3800, 0x0400, CRC(f44bfe36) SHA1(0ab3c4f061dff6f779685409b07343d0a839fdae)) + ROM_LOAD( "ep16.rom", 0x3c00, 0x0400, CRC(f39c230d) SHA1(9789cedef5655bcb82561f387cc1a6cf48287d78)) ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 198?, pp01, 0, 0, pp01, pp01, pp01_state, empty_init, "ZVT", "PP-01", MACHINE_NOT_WORKING ) +COMP( 198?, pp01, 0, 0, pp01, pp01, pp01_state, empty_init, "ZVT", "PP-01", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/pp01.h b/src/mame/includes/pp01.h index 754d8d2663e..f3ca495edef 100644 --- a/src/mame/includes/pp01.h +++ b/src/mame/includes/pp01.h @@ -27,13 +27,15 @@ public: pp01_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_pit(*this, "pit8253") + , m_pit(*this, "pit") , m_ppi1(*this, "ppi1") , m_ppi2(*this, "ppi2") , m_speaker(*this, "speaker") , m_ram(*this, RAM_TAG) , m_uart(*this, "uart") , m_cass(*this, "cassette") + , m_bank(*this, "bank%d", 0U) + , m_io_keyboard(*this, "LINE%d", 0U) { } void pp01(machine_config &config); @@ -41,17 +43,8 @@ public: protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void video_start() override; private: - required_device m_maincpu; - required_device m_pit; - required_device m_ppi1; - required_device m_ppi2; - required_device m_speaker; - required_device m_ram; - required_device m_uart; - required_device m_cass; uint8_t m_video_scroll; uint8_t m_memory_block[16]; uint8_t m_video_write_mode; @@ -82,6 +75,17 @@ private: void set_memory(uint8_t block, uint8_t data); void io_map(address_map &map); void mem_map(address_map &map); + + required_device m_maincpu; + required_device m_pit; + required_device m_ppi1; + required_device m_ppi2; + required_device m_speaker; + required_device m_ram; + required_device m_uart; + required_device m_cass; + required_memory_bank_array<16> m_bank; + required_ioport_array<17> m_io_keyboard; }; #endif // MAME_INCLUDES_PP01_H diff --git a/src/mame/machine/pp01.cpp b/src/mame/machine/pp01.cpp index 23db9f8bf1b..f937f1e62e6 100644 --- a/src/mame/machine/pp01.cpp +++ b/src/mame/machine/pp01.cpp @@ -23,33 +23,35 @@ void pp01_state::video_w(uint8_t block,uint16_t offset,uint8_t data,uint8_t part uint16_t addroffset = part ? 0x1000 : 0x0000; uint8_t *ram = m_ram->pointer(); - if (BIT(m_video_write_mode,3)) { + if (BIT(m_video_write_mode,3)) + { // Copy mode - if(BIT(m_video_write_mode,0)) { + if(BIT(m_video_write_mode,0)) ram[0x6000+offset+addroffset] = data; - } else { + else ram[0x6000+offset+addroffset] = 0; - } - if(BIT(m_video_write_mode,1)) { + + if(BIT(m_video_write_mode,1)) ram[0xa000+offset+addroffset] = data; - } else { + else ram[0xa000+offset+addroffset] = 0; - } - if(BIT(m_video_write_mode,2)) { + + if(BIT(m_video_write_mode,2)) ram[0xe000+offset+addroffset] = data; - } else { + else ram[0xe000+offset+addroffset] = 0; - } - } else { - if (block==0) { + + } + else + { + if (block==0) ram[0x6000+offset+addroffset] = data; - } - if (block==1) { + else + if (block==1) ram[0xa000+offset+addroffset] = data; - } - if (block==2) { + else + if (block==2) ram[0xe000+offset+addroffset] = data; - } } } @@ -85,14 +87,14 @@ void pp01_state::set_memory(uint8_t block, uint8_t data) uint8_t *mem = memregion("maincpu")->base(); address_space &space = m_maincpu->space(AS_PROGRAM); uint16_t startaddr = block*0x1000; - uint16_t endaddr = ((block+1)*0x1000)-1; - uint8_t blocknum = block + 1; - char bank[10]; - sprintf(bank,"bank%d",blocknum); - if (data>=0xE0 && data<=0xEF) { + uint16_t endaddr = startaddr+0xfff; + + if (data>=0xE0 && data<=0xEF) + { // This is RAM - space.install_read_bank (startaddr, endaddr, bank); - switch(data) { + space.install_read_bank (startaddr, endaddr, m_bank[block]); + switch(data) + { case 0xe6 : space.install_write_handler(startaddr, endaddr, write8sm_delegate(*this, FUNC(pp01_state::video_r_1_w))); break; @@ -112,16 +114,21 @@ void pp01_state::set_memory(uint8_t block, uint8_t data) space.install_write_handler(startaddr, endaddr, write8sm_delegate(*this, FUNC(pp01_state::video_b_2_w))); break; default: - space.install_write_bank(startaddr, endaddr, bank); + space.install_write_bank(startaddr, endaddr, m_bank[block]); break; } - membank(bank)->set_base(m_ram->pointer() + (data & 0x0F)* 0x1000); - } else if (data>=0xF8) { - space.install_read_bank (startaddr, endaddr, bank); + m_bank[block]->set_base(m_ram->pointer() + (data & 0x0F)* 0x1000); + } + else + if (data>=0xFC) + { + space.install_read_bank (startaddr, endaddr, m_bank[block]); space.unmap_write(startaddr, endaddr); - membank(bank)->set_base(mem + ((data & 0x0F)-8)* 0x1000+0x10000); - } else { + m_bank[block]->set_base(mem + (data & 0x03)* 0x1000); + } + else + { logerror("%02x %02x\n",block,data); space.unmap_readwrite (startaddr, endaddr); } @@ -131,7 +138,8 @@ void pp01_state::machine_reset() { int i; memset(m_memory_block,0xff,16); - for(i=0;i<16;i++) { + for(i=0;i<16;i++) + { m_memory_block[i] = 0xff; set_memory(i, 0xff); } @@ -151,6 +159,15 @@ uint8_t pp01_state::mem_block_r(offs_t offset) void pp01_state::machine_start() { + save_item(NAME(m_video_scroll)); + save_item(NAME(m_memory_block)); + save_item(NAME(m_video_write_mode)); + save_item(NAME(m_key_line)); + save_item(NAME(m_txe)); + save_item(NAME(m_txd)); + save_item(NAME(m_rts)); + save_item(NAME(m_casspol)); + save_item(NAME(m_cass_data)); } TIMER_DEVICE_CALLBACK_MEMBER( pp01_state::kansas_r ) @@ -202,12 +219,7 @@ void pp01_state::ppi1_porta_w(uint8_t data) uint8_t pp01_state::ppi1_portb_r() { - static const char *const keynames[] = { - "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7", - "LINE8", "LINE9", "LINEA", "LINEB", "LINEC", "LINED", "LINEE", "LINEF" - }; - - return (ioport(keynames[m_key_line])->read() & 0x3F) | (ioport("LINEALL")->read() & 0xC0); + return m_io_keyboard[m_key_line]->read() | m_io_keyboard[16]->read(); } void pp01_state::ppi1_portb_w(uint8_t data) { diff --git a/src/mame/video/pp01.cpp b/src/mame/video/pp01.cpp index 7593ed48026..7afc209d8da 100644 --- a/src/mame/video/pp01.cpp +++ b/src/mame/video/pp01.cpp @@ -12,10 +12,6 @@ #include "emu.h" #include "includes/pp01.h" -void pp01_state::video_start() -{ -} - uint32_t pp01_state::screen_update_pp01(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { uint8_t const *const ram = m_ram->pointer(); @@ -24,9 +20,10 @@ uint32_t pp01_state::screen_update_pp01(screen_device &screen, bitmap_ind16 &bit { for (int x = 0; x < 32; x++) { - uint8_t const code_r = ram[0x6000 + ((y+m_video_scroll)&0xff)*32 + x]; - uint8_t const code_g = ram[0xa000 + ((y+m_video_scroll)&0xff)*32 + x]; - uint8_t const code_b = ram[0xe000 + ((y+m_video_scroll)&0xff)*32 + x]; + u16 t = ((y+m_video_scroll)&0xff)*32 + x; + uint8_t const code_r = ram[0x6000 + t]; + uint8_t const code_g = ram[0xa000 + t]; + uint8_t const code_b = ram[0xe000 + t]; for (int b = 0; b < 8; b++) { uint8_t const col = (BIT(code_r, b) << 2) | (BIT(code_g, b) << 1) | (BIT(code_b, b) << 0);