diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp index b236dffed2d..1cbe5a4703b 100644 --- a/src/mame/dynax/royalmah.cpp +++ b/src/mame/dynax/royalmah.cpp @@ -35,16 +35,16 @@ Year + Game Board(s) CPU Company Not 89 Mahjong Shinkirou D210301BL2 + FRM-00? TLCS-90 Dynax 89 Mahjong Derringer D2203018L Z80 Dynax Larger palette 90 Mahjong If..? D2909278L TLCS-90 Dynax Larger palette -91 Mahjong Vegas D5011308L1 + FRM-00 TLCS-90 Dynax Undumped internal rom (mjvegas set) +91 Mahjong Vegas D5011308L1 + FRM-00 TLCS-90 Dynax Larger palette, RTC 92 Mahjong Cafe Time D6310128L1-1 TLCS-90 Dynax Larger palette, RTC -93 Mahjong Cafe Doll D76052208L-2 TLCS-90 Dynax Larger palette, RTC, Undumped internal rom +93 Mahjong Cafe Doll D76052208L-2 TLCS-90 Dynax Larger palette, RTC, Undumped internal ROM 93 Ichi Ban Jian MJ911 Z80 Excel Larger palette, additional YM2413 95 Mahjong Tensinhai D10010318L1 TLCS-90 Dynax Larger palette, RTC 96 Janputer '96 NS503X0727 Z80 Dynax Larger palette, RTC 97 Pong Boo! 2 NEW PONG-BOO Z80(?) OCT OKI M6295, no PROMs 97 Janputer Special CS166P008 + NS5110207 Z80 Dynax Larger palette, RTC -99 Mahjong Cafe Break NS528-9812 TLCS-90 Nakanihon / Dynax Undumped internal rom -99 Mahjong Cafe Paradise ? + TSS001-0001 TLCS-90 Techno-Top Undumped internal rom +99 Mahjong Cafe Break NS528-9812 TLCS-90 Nakanihon / Dynax Undumped internal ROM +99 Mahjong Cafe Paradise ? + TSS001-0001 TLCS-90 Techno-Top Larger palette, RTC ----------------------------------------------------------------------------------------------------------------------- TODO: @@ -90,8 +90,8 @@ Stephh's notes (based on the games Z80 code and some tests) : front of a random combination. It's value remains *1 though. Could it be a leftover from another game ('tontonb' for exemple) ? -- janptr96, janptrsp: in service mode press in sequence N,Ron,Ron,N to access some - hidden options. (thanks bnathan) +- cafepara, janptr96, janptrsp: in service mode press in sequence N,Ron,Ron,N to + access some hidden options. (thanks bnathan) ****************************************************************************/ @@ -254,6 +254,7 @@ public: void mjifb(machine_config &config) ATTR_COLD; void mjdejavu(machine_config &config) ATTR_COLD; void mjtensin(machine_config &config) ATTR_COLD; + void cafepara(machine_config &config) ATTR_COLD; void cafetime(machine_config &config) ATTR_COLD; void mjvegas(machine_config &config) ATTR_COLD; void mjvegasa(machine_config &config) ATTR_COLD; @@ -366,6 +367,7 @@ private: void mjdejavu_map(address_map &map) ATTR_COLD; void mjtensin_map(address_map &map) ATTR_COLD; void mjvegasa_map(address_map &map) ATTR_COLD; + void cafepara_map(address_map &map) ATTR_COLD; void cafetime_map(address_map &map) ATTR_COLD; void chalgirl_iomap(address_map &map) ATTR_COLD; @@ -1447,6 +1449,29 @@ void royalmah_prgbank_state::cafetime_map(address_map &map) } +/**************************************************************************** + Mahjong Cafe Paradise +****************************************************************************/ + +void royalmah_prgbank_state::cafepara_map(address_map &map) +{ + map(0x0000, 0x5fff).rom(); + map(0x6000, 0x7eff).ram().share("nvram"); + map(0x7fe1, 0x7fe1).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x7fe2, 0x7fe3).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x7ff0, 0x7ff0).w(FUNC(royalmah_prgbank_state::janptr96_coin_counter_w)); + map(0x7ff1, 0x7ff1).portr("SYSTEM").nopw(); + map(0x7ff3, 0x7ff3).w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x7ff4, 0x7ff4).lw8(NAME([this] (uint8_t data) { m_mainbank->set_entry(data); logerror("mainbank_w: %02x\n", data); })); + map(0x7ff5, 0x7ff5).lw8(NAME([this] (uint8_t data) { logerror("0x7ff5 write: %02x\n", data); })); // bit 1 seems coin counter but it's actually at 0x7ff0 + map(0x7ff6, 0x7ff6).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w)); + map(0x7ff7, 0x7ff7).w(FUNC(royalmah_prgbank_state::cafetime_7fe3_w)); + map(0x8000, 0xffff).bankr(m_mainbank); + map(0x8000, 0xffff).writeonly().share(m_videoram); + map(0xfff0, 0xffff).rw(m_rtc, FUNC(msm6242_device::read), FUNC(msm6242_device::write)); // TODO: this should probably be behind a view +} + + /**************************************************************************** Mahjong Vegas ****************************************************************************/ @@ -4112,6 +4137,25 @@ void royalmah_prgbank_state::cafetime(machine_config &config) MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ1); } +void royalmah_prgbank_state::cafepara(machine_config &config) +{ + cafetime(config); + tmp91640_device &tmp(TMP91640(config.replace(), m_maincpu, XTAL(8'000'000))); // XTAL is verified, should it be divided? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::cafepara_map); + tmp.port_read<3>().set([this] () { logerror("%s: p3 in\n", machine().describe_context()); return uint8_t(0); }); // read sometimes + tmp.port_read<4>().set([this] () { logerror("%s: p4 in\n", machine().describe_context()); return uint8_t(0); }); // not seen yet + tmp.port_read<5>().set([this] () { logerror("%s: p5 in\n", machine().describe_context()); return uint8_t(0); }); // dips + tmp.port_read<6>().set([this] () { logerror("%s: p6 in\n", machine().describe_context()); return uint8_t(0); }); // dips + tmp.port_read<7>().set([this] () { logerror("%s: p7 in\n", machine().describe_context()); return uint8_t(0); }); // not seen yet + tmp.port_read<8>().set([this] () { logerror("%s: p8 in\n", machine().describe_context()); return uint8_t(0); }); + tmp.port_write<3>().set([this] (uint8_t data) { logerror("%s: p3 out %02X\n", machine().describe_context(), data); }); // 0x6c at startup, remnant of older games? + tmp.port_write<4>().set([this] (uint8_t data) { logerror("%s: p4 out %02X\n", machine().describe_context(), data); }); // 0x00 at startup + tmp.port_write<5>().set([this] (uint8_t data) { logerror("%s: p5 out %02X\n", machine().describe_context(), data); }); // not seen yet + tmp.port_write<6>().set([this] (uint8_t data) { logerror("%s: p6 out %02X\n", machine().describe_context(), data); }); // not seen yet + tmp.port_write<7>().set([this] (uint8_t data) { logerror("%s: p7 out %02X\n", machine().describe_context(), data); }); // seen 0x07, 0x0b, 0x0d, 0x0f. ??? + tmp.port_write<8>().set([this] (uint8_t data) { logerror("%s: p8 out %02X\n", machine().describe_context(), data); }); // 0x00 or 0x08, most probably view +} + void royalmah_prgbank_state::mjvegasa(machine_config &config) { mjderngr(config); @@ -4986,10 +5030,10 @@ and a PLCC68 chip (likely FPGA) ROM_START( cafepara ) ROM_REGION( 0x290000, "maincpu", 0 ) // VIDEO & AM MICRO COMPUTER SYSTEMS 1999 TECHNO-TOP,LIMITED NAGOYA JAPAN MAHJONG CAFE PARADISE TSS001 VER. 1.00 - ROM_LOAD( "00101.1h", 0x000000, 0x080000, CRC(f5917280) SHA1(e6180e36643075ab9fa5bc27baef2a464a23f581) ) - ROM_LOAD( "cafepara.tmp91640", 0x000000, 0x004000, CRC(0575607c) SHA1(e641ffd1bd44f2b4a0cdf72c49990933a0f0ff22) ) + ROM_LOAD( "00101.1h", 0x000000, 0x080000, CRC(f5917280) SHA1(e6180e36643075ab9fa5bc27baef2a464a23f581) ) // external ROM with first 0x4000 empty + ROM_LOAD( "cafepara.tmp91640", 0x000000, 0x004000, CRC(0575607c) SHA1(e641ffd1bd44f2b4a0cdf72c49990933a0f0ff22) ) // internal ROM - // bank switched ROMs follow + // bank switched ROMs follow (test mode checks 0x50 banks) ROM_COPY( "maincpu", 0x000000, 0x010000, 0x080000 ) ROM_LOAD( "00102.1d", 0x090000, 0x200000, CRC(ed3b5447) SHA1(ac24e9c00c94c35d2b2ec35f0c4262ceeda5408f) ) @@ -5946,4 +5990,4 @@ GAME( 1996, janptr96, 0, janptr96, janptr96, royalmah_prgbank_state, ini GAME( 1997, janptrsp, 0, janptr96, janptr96, royalmah_prgbank_state, init_janptr96, ROT0, "Dynax", "Janputer Special (Japan)", 0 ) GAME( 1997, pongboo2, 0, pongboo2, ichiban, royalmah_prgbank_state, init_pongboo2, ROT0, "OCT", "Pong Boo! 2 (Ver. 1.31)", MACHINE_NOT_WORKING | MACHINE_WRONG_COLORS ) // banking, palette, inputs GAME( 1999, cafebrk, 0, mjifb, mjifb, royalmah_prgbank_state, init_mjifb, ROT0, "Nakanihon / Dynax", "Mahjong Cafe Break", MACHINE_NOT_WORKING ) // missing internal ROM dump -GAME( 1999, cafepara, 0, mjvegasa, mjvegasa, royalmah_prgbank_state, init_mjvegasa, ROT0, "Techno-Top", "Mahjong Cafe Paradise", MACHINE_NOT_WORKING ) // needs correct memory map and CPU ports +GAME( 1999, cafepara, 0, cafepara, cafetime, royalmah_prgbank_state, init_mjtensin, ROT0, "Techno-Top", "Mahjong Cafe Paradise (Ver. 1.00)", MACHINE_NOT_WORKING ) // needs correct memory map and CPU ports diff --git a/src/mame/merit/merit.cpp b/src/mame/merit/merit.cpp index 4a434f81d47..35e5ad34d1f 100644 --- a/src/mame/merit/merit.cpp +++ b/src/mame/merit/merit.cpp @@ -71,7 +71,7 @@ Merit Riviera Notes - There are several known versions: NOTE: Based on tests and observations, the CRT-209 module seems to use the Z80's M1 signal when it fetches an opcode to activate and overlay the module's built in 2816 EEPROM. While this prevents a simple - memory read of the 2816's memory region, it does limit the usuable instructions to single byte opcodes. + memory read of the 2816's memory region, it does limit the usable instructions to single byte opcodes. */