From 0181c36e1bd750e3a965bd8e7f56d1d685709d89 Mon Sep 17 00:00:00 2001 From: Davide Cavalca Date: Sun, 6 Jun 2021 10:12:42 -0700 Subject: indigo: add new ROM revision for indigo4k --- src/mame/drivers/indigo.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/indigo.cpp b/src/mame/drivers/indigo.cpp index ede8813bb55..8f21674e6af 100644 --- a/src/mame/drivers/indigo.cpp +++ b/src/mame/drivers/indigo.cpp @@ -234,9 +234,12 @@ ROM_END ROM_START( indigo4k ) ROM_REGION64_BE( 0x80000, "user1", 0 ) - ROMX_LOAD( "ip20prom.070-8116-004.bin", 0x000000, 0x080000, CRC(940d960e) SHA1(596aba530b53a147985ff3f6f853471ce48c866c), ROM_GROUPDWORD | ROM_REVERSE ) + ROM_SYSTEM_BIOS( 0, "405d-rev-a", "SGI Version 4.0.5D Rev A IP20, Aug 19, 1992" ) + ROMX_LOAD( "ip20prom.070-8116-004.bin", 0x000000, 0x080000, CRC(940d960e) SHA1(596aba530b53a147985ff3f6f853471ce48c866c), ROM_GROUPDWORD | ROM_REVERSE | ROM_BIOS(0) ) + ROM_SYSTEM_BIOS( 1, "405g-rev-b", "SGI Version 4.0.5G Rev B IP20, Nov 10, 1992" ) // dumped over serial connection from boot monitor and swapped + ROMX_LOAD( "ip20prom.070-8116-005.bin", 0x000000, 0x080000, CRC(1875b645) SHA1(52f5d7baea3d1bc720eb2164104c177e23504345), ROM_GROUPDWORD | ROM_REVERSE | ROM_BIOS(1) ) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS COMP( 1991, indigo3k, 0, 0, indigo3k, indigo, indigo3k_state, empty_init, "Silicon Graphics Inc", "IRIS Indigo (R3000, 33MHz)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -COMP( 1993, indigo4k, 0, 0, indigo4k, indigo, indigo4k_state, empty_init, "Silicon Graphics Inc", "IRIS Indigo (R4400, 150MHz, Ver. 4.0.5D Rev A)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1993, indigo4k, 0, 0, indigo4k, indigo, indigo4k_state, empty_init, "Silicon Graphics Inc", "IRIS Indigo (R4400, 150MHz)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -- cgit v1.2.3 From 4de1318f1cd07ecf47085f8ecd37b754ae4e998c Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 7 Jun 2021 19:33:45 +0200 Subject: mermaid: Support the masking effect (imperfectly) --- src/mame/drivers/mermaid.cpp | 25 ++++++++++++++------ src/mame/includes/mermaid.h | 5 ++++ src/mame/video/mermaid.cpp | 55 ++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 73 insertions(+), 12 deletions(-) diff --git a/src/mame/drivers/mermaid.cpp b/src/mame/drivers/mermaid.cpp index b8fff594330..1dbd771fe4c 100644 --- a/src/mame/drivers/mermaid.cpp +++ b/src/mame/drivers/mermaid.cpp @@ -89,13 +89,13 @@ Stephh's notes (based on the games Z80 code and some tests) : 1) 'mermaid' - - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cokctail". + - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cocktail". - Continue Play is determined via DSW bit 3. When it's ON, insert a coin when the message is displayed on the screen. Beware that there is no visible timer ! 2) 'yachtmn' - - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cokctail". + - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cocktail". - Continue Play is always possible provided that you insert a coin when the message (much shorter than in 'mermaid') is displayed on the screen (there is also no timer). Then when you press START, you need to press START again when @@ -162,7 +162,7 @@ void mermaid_state::mermaid_map(address_map &map) { map(0x0000, 0x9fff).rom(); map(0xc000, 0xc7ff).ram(); - map(0xc800, 0xcbff).ram().w(FUNC(mermaid_state::mermaid_videoram2_w)).share("videoram2"); + map(0xc800, 0xcbff).ram().w(FUNC(mermaid_state::mermaid_videoram2_w)).share("videoram2").mirror(0x400); map(0xd000, 0xd3ff).ram().w(FUNC(mermaid_state::mermaid_videoram_w)).share("videoram"); map(0xd800, 0xd81f).ram().w(FUNC(mermaid_state::mermaid_bg_scroll_w)).share("bg_scrollram"); map(0xd840, 0xd85f).ram().w(FUNC(mermaid_state::mermaid_fg_scroll_w)).share("fg_scrollram"); @@ -174,7 +174,7 @@ void mermaid_state::mermaid_map(address_map &map) map(0xe800, 0xe807).w("latch2", FUNC(ls259_device::write_d0)); map(0xf000, 0xf000).portr("P2"); map(0xf800, 0xf800).r(FUNC(mermaid_state::mermaid_collision_r)); - map(0xf802, 0xf802).nopw(); // ??? + // map(0xf802, 0xf802).nopw(); // ??? map(0xf806, 0xf806).w(FUNC(mermaid_state::mermaid_ay8910_write_port_w)); map(0xf807, 0xf807).w(FUNC(mermaid_state::mermaid_ay8910_control_port_w)); } @@ -365,6 +365,7 @@ void mermaid_state::machine_start() save_item(NAME(m_coll_bit2)); save_item(NAME(m_coll_bit3)); save_item(NAME(m_coll_bit6)); + save_item(NAME(m_bg_bank)); save_item(NAME(m_rougien_gfxbank1)); save_item(NAME(m_rougien_gfxbank2)); save_item(NAME(m_ay8910_enable)); @@ -382,6 +383,8 @@ void mermaid_state::machine_reset() m_coll_bit2 = 0; m_coll_bit3 = 0; m_coll_bit6 = 0; + m_bg_mask = 0; + m_bg_bank = 0; m_rougien_gfxbank1 = 0; m_rougien_gfxbank2 = 0; @@ -428,16 +431,22 @@ void mermaid_state::mermaid(machine_config &config) LS259(config, m_latch[0]); m_latch[0]->q_out_cb<0>().set(FUNC(mermaid_state::ay1_enable_w)); m_latch[0]->q_out_cb<1>().set(FUNC(mermaid_state::ay2_enable_w)); - m_latch[0]->q_out_cb<4>().set_nop(); // ??? + m_latch[0]->q_out_cb<2>().set([this](int state){ logerror("02 = %d\n", state); }); // ??? + m_latch[0]->q_out_cb<3>().set([this](int state){ logerror("03 = %d\n", state); }); // ??? + m_latch[0]->q_out_cb<4>().set([this](int state){ logerror("04 = %d\n", state); }); // ??? m_latch[0]->q_out_cb<5>().set(FUNC(mermaid_state::flip_screen_x_w)); m_latch[0]->q_out_cb<6>().set(FUNC(mermaid_state::flip_screen_y_w)); m_latch[0]->q_out_cb<7>().set(FUNC(mermaid_state::nmi_mask_w)); LS259(config, m_latch[1]); - m_latch[1]->q_out_cb<0>().set_nop(); // ??? + m_latch[1]->q_out_cb<0>().set(FUNC(mermaid_state::bg_mask_w)); + m_latch[1]->q_out_cb<1>().set(FUNC(mermaid_state::bg_bank_w)); + m_latch[1]->q_out_cb<2>().set([this](int state){ logerror("12 = %d\n", state); }); // ??? + m_latch[1]->q_out_cb<3>().set([this](int state){ logerror("13 = %d\n", state); }); // ??? m_latch[1]->q_out_cb<4>().set(FUNC(mermaid_state::rougien_gfxbankswitch1_w)); m_latch[1]->q_out_cb<5>().set(FUNC(mermaid_state::rougien_gfxbankswitch2_w)); - m_latch[1]->q_out_cb<7>().set_nop(); // very frequent + m_latch[1]->q_out_cb<6>().set([this](int state){ logerror("16 = %d\n", state); }); // ??? + m_latch[1]->q_out_cb<7>().set_nop(); // probable watchdog /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -465,6 +474,8 @@ void mermaid_state::rougien(machine_config &config) m_latch[0]->q_out_cb<2>().set(FUNC(mermaid_state::rougien_sample_playback_w)); + m_latch[1]->q_out_cb<0>().set([this](int state){ logerror("10 = %d\n", state); }); // ??? + m_latch[1]->q_out_cb<1>().set([this](int state){ logerror("11 = %d\n", state); }); // ??? m_latch[1]->q_out_cb<2>().set(FUNC(mermaid_state::rougien_sample_rom_hi_w)); m_latch[1]->q_out_cb<3>().set(FUNC(mermaid_state::rougien_sample_rom_lo_w)); diff --git a/src/mame/includes/mermaid.h b/src/mame/includes/mermaid.h index be883de73fb..02bf1bdc055 100644 --- a/src/mame/includes/mermaid.h +++ b/src/mame/includes/mermaid.h @@ -57,11 +57,14 @@ private: tilemap_t *m_fg_tilemap; bitmap_ind16 m_helper; bitmap_ind16 m_helper2; + bitmap_ind16 m_helper_mask; int m_coll_bit0; int m_coll_bit1; int m_coll_bit2; int m_coll_bit3; int m_coll_bit6; + int m_bg_mask; + int m_bg_bank; int m_rougien_gfxbank1; int m_rougien_gfxbank2; @@ -99,6 +102,8 @@ private: DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); void mermaid_bg_scroll_w(offs_t offset, uint8_t data); void mermaid_fg_scroll_w(offs_t offset, uint8_t data); + DECLARE_WRITE_LINE_MEMBER(bg_mask_w); + DECLARE_WRITE_LINE_MEMBER(bg_bank_w); DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch1_w); DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch2_w); uint8_t mermaid_collision_r(); diff --git a/src/mame/video/mermaid.cpp b/src/mame/video/mermaid.cpp index d3271d9d4e8..0e54bda0c89 100644 --- a/src/mame/video/mermaid.cpp +++ b/src/mame/video/mermaid.cpp @@ -94,6 +94,16 @@ void mermaid_state::mermaid_fg_scroll_w(offs_t offset, uint8_t data) m_fg_tilemap->set_scrolly(offset, data); } +WRITE_LINE_MEMBER(mermaid_state::bg_mask_w) +{ + m_bg_mask = state; +} + +WRITE_LINE_MEMBER(mermaid_state::bg_bank_w) +{ + m_bg_bank = state ? 0x100 : 0; +} + WRITE_LINE_MEMBER(mermaid_state::rougien_gfxbankswitch1_w) { m_rougien_gfxbank1 = state; @@ -134,7 +144,7 @@ uint8_t mermaid_state::mermaid_collision_r() TILE_GET_INFO_MEMBER(mermaid_state::get_bg_tile_info) { - int code = m_videoram2[tile_index]; + int code = m_videoram2[tile_index] | m_bg_bank; int sx = tile_index % 32; int color = (sx >= 26) ? 0 : 1; @@ -165,6 +175,7 @@ void mermaid_state::video_start() m_screen->register_screen_bitmap(m_helper); m_screen->register_screen_bitmap(m_helper2); + m_screen->register_screen_bitmap(m_helper_mask); } void mermaid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) @@ -172,6 +183,9 @@ void mermaid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec const rectangle spritevisiblearea(0 * 8, 26 * 8 - 1, 2 * 8, 30 * 8 - 1); const rectangle flip_spritevisiblearea(6 * 8, 31 * 8 - 1, 2 * 8, 30 * 8 - 1); + rectangle clip = flip_screen_x() ? flip_spritevisiblearea : spritevisiblearea; + clip &= cliprect; + uint8_t *spriteram = m_spriteram; int offs; @@ -204,15 +218,46 @@ void mermaid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec } - m_gfxdecode->gfx(1)->transpen(bitmap,(flip_screen_x() ? flip_spritevisiblearea : spritevisiblearea), code, color, flipx, flipy, sx, sy, 0); + m_gfxdecode->gfx(1)->transpen(bitmap, clip, code, color, flipx, flipy, sx, sy, 0); } } uint32_t mermaid_state::screen_update_mermaid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - draw_sprites(bitmap, cliprect); + if (m_bg_mask) + { + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + u16 *p = &bitmap.pix(y); + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) + *p++ = x < 26*8 ? 0x42 : 0x40; + } + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect); + + m_bg_tilemap->draw(screen, m_helper_mask, cliprect, 0, 0); + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + const u16 *s = &m_helper_mask.pix(y); + u16 *p = &bitmap.pix(y); + bool on = false; + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) + { + if (*s++ & 1) + on = !on; + if (!on) + *p = 0x40; + p ++; + } + } + + } + else + { + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect); + } return 0; } -- cgit v1.2.3 From 6cfd2577652e4d4a7954434e6ebee629bdb4b94a Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 7 Jun 2021 20:15:58 +0200 Subject: rougien: First implementation of the split-bg effect --- src/mame/drivers/mermaid.cpp | 1 + src/mame/includes/mermaid.h | 2 ++ src/mame/video/mermaid.cpp | 28 ++++++++++++++++++++++++---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/mame/drivers/mermaid.cpp b/src/mame/drivers/mermaid.cpp index 1dbd771fe4c..c792a4fea14 100644 --- a/src/mame/drivers/mermaid.cpp +++ b/src/mame/drivers/mermaid.cpp @@ -471,6 +471,7 @@ void mermaid_state::mermaid(machine_config &config) void mermaid_state::rougien(machine_config &config) { mermaid(config); + m_bg_split = 1; m_latch[0]->q_out_cb<2>().set(FUNC(mermaid_state::rougien_sample_playback_w)); diff --git a/src/mame/includes/mermaid.h b/src/mame/includes/mermaid.h index 02bf1bdc055..228f34f52fb 100644 --- a/src/mame/includes/mermaid.h +++ b/src/mame/includes/mermaid.h @@ -38,6 +38,7 @@ public: m_palette(*this, "palette"), m_latch(*this, "latch%u", 1U) { + m_bg_split = 0; } void rougien(machine_config &config); @@ -63,6 +64,7 @@ private: int m_coll_bit2; int m_coll_bit3; int m_coll_bit6; + int m_bg_split; int m_bg_mask; int m_bg_bank; int m_rougien_gfxbank1; diff --git a/src/mame/video/mermaid.cpp b/src/mame/video/mermaid.cpp index 0e54bda0c89..18522971479 100644 --- a/src/mame/video/mermaid.cpp +++ b/src/mame/video/mermaid.cpp @@ -97,11 +97,14 @@ void mermaid_state::mermaid_fg_scroll_w(offs_t offset, uint8_t data) WRITE_LINE_MEMBER(mermaid_state::bg_mask_w) { m_bg_mask = state; + logerror("mask %d\n", state); } WRITE_LINE_MEMBER(mermaid_state::bg_bank_w) { m_bg_bank = state ? 0x100 : 0; + m_bg_tilemap->mark_all_dirty(); + logerror("bank %d\n", state); } WRITE_LINE_MEMBER(mermaid_state::rougien_gfxbankswitch1_w) @@ -224,11 +227,28 @@ void mermaid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec uint32_t mermaid_state::screen_update_mermaid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - if (m_bg_mask) + if (m_bg_split) { + constexpr int split_y = 64; + constexpr rectangle rr(0, 32*8-1, 0, 32*8-1); + m_bg_tilemap->draw(screen, m_helper_mask, rr, 0, 0); for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - u16 *p = &bitmap.pix(y); + int sy = y >= split_y ? 32*8 - 2 - (y - split_y) : 32*8 - split_y + y; + const u16 *s = &m_helper_mask.pix(sy, cliprect.min_x); + u16 *p = &bitmap.pix(y, cliprect.min_x); + memcpy(p, s, 2*(cliprect.max_x - cliprect.min_x + 1)); + } + + + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect); + } + else if (m_bg_mask) + { + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + u16 *p = &bitmap.pix(y, cliprect.min_x); for (int x = cliprect.min_x; x <= cliprect.max_x; x++) *p++ = x < 26*8 ? 0x42 : 0x40; } @@ -238,8 +258,8 @@ uint32_t mermaid_state::screen_update_mermaid(screen_device &screen, bitmap_ind1 m_bg_tilemap->draw(screen, m_helper_mask, cliprect, 0, 0); for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - const u16 *s = &m_helper_mask.pix(y); - u16 *p = &bitmap.pix(y); + const u16 *s = &m_helper_mask.pix(y, cliprect.min_x); + u16 *p = &bitmap.pix(y, cliprect.min_x); bool on = false; for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { -- cgit v1.2.3 From ba6dd0d3f0dd3b3c2491c38d92c90f71fa6d5387 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 7 Jun 2021 15:13:16 -0400 Subject: netlist_sound: Fix sound_assert in debug builds --- src/devices/machine/netlist.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index 7c43c35838d..cc1f92c5755 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -828,7 +828,8 @@ void netlist_mame_stream_output_device::sound_update_fill(write_stream_view &tar int sampindex; for (sampindex = 0; sampindex < m_buffer.size(); sampindex++) target.put(sampindex, m_buffer[sampindex]); - target.fill(m_cur, sampindex); + if (sampindex < target.samples()) + target.fill(m_cur, sampindex); } -- cgit v1.2.3 From 6b7269bf4d0ba10739c0cb3601e1693a073d86ef Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 7 Jun 2021 21:55:06 +0200 Subject: New working clones ------------------ Painter (hack of Crush Roller) [Lorenzo Fongaro] --- src/mame/drivers/pacman.cpp | 25 +++++++++++++++++++++++++ src/mame/mame.lst | 1 + 2 files changed, 26 insertions(+) diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index 5eec52304b3..67e286fb26b 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -6550,6 +6550,30 @@ ROM_START( paintrlr ) ROM_LOAD( "82s126.3m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) // Timing - not used ROM_END +// PCB is marked: "CRUSH ROLLER" on component side +// PCB is labelled: "PENNELLO 2" on component side ("pennello" is the Italian word for "brush") +// Bootleg of a hack? Shows Painter (c) 1984 Monshine Ent. Co. before coining up, Painter (c) 1984 Elsys Software after coining up. +// Interesting hack: it mixes Crush Roller elements with Pacman elements +ROM_START( painter ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "pain1.6e", 0x0000, 0x1000, CRC(fb2eb6dc) SHA1(377075cb64c7ccc0bd2b0185848d4798428bceb2) ) + ROM_LOAD( "pain2.6f", 0x1000, 0x1000, CRC(39f92fb0) SHA1(2b58429664eadb8bb5100289182b274cc7e4688c) ) + ROM_LOAD( "pain3.6h", 0x2000, 0x1000, CRC(f80435b1) SHA1(7f41ecc2a91f8bdf0969f4f3fe96b48adb1010ba) ) + ROM_LOAD( "pain4-pennello2.6j", 0x3000, 0x1000, CRC(0cb678dc) SHA1(b1b9eadf22dc7985b39d414438092a7fc6c58955) ) // has strange strings in the second half, but seems to work fine + + ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_LOAD( "pain5.5e", 0x0000, 0x1000, CRC(bd819afc) SHA1(2e8762c3c480aa669f7e87651ddfdbb965ea4211) ) + ROM_LOAD( "pain6.5f", 0x1000, 0x1000, BAD_DUMP CRC(014e5ed3) SHA1(8e01c640457515da89723215b19684ceb4556997) ) // BADADDR xx-xxxxxxxxx, dumped with 2 different programmers with same result, but probably damaged ROM + + ROM_REGION( 0x0120, "proms", 0 ) // not dumped for this set + ROM_LOAD( "82s123.7f", 0x0000, 0x0020, BAD_DUMP CRC(2fc650bd) SHA1(8d0268dee78e47c712202b0ec4f1f51109b1f2a5) ) + ROM_LOAD( "2s140.4a", 0x0020, 0x0100, BAD_DUMP CRC(63efb927) SHA1(5c144a613fc4960a1dfd7ead89e7fee258a63171) ) + + ROM_REGION( 0x0200, "namco", 0 ) // not dumped for this set + ROM_LOAD( "82s126.1m", 0x0000, 0x0100, BAD_DUMP CRC(a9cc86bf) SHA1(bbcec0570aeceb582ff8238a4bc8546a23430081) ) + ROM_LOAD( "82s126.3m", 0x0100, 0x0100, BAD_DUMP CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) // Timing - not used +ROM_END + /* Crush Roller (Sidam PCB) @@ -8293,6 +8317,7 @@ GAME( 1981, crushbl3, crush, korosuke, mbrush, pacman_state, init_maketrax GAME( 1981, crushs, crush, crushs, crushs, pacman_state, empty_init, ROT90, "bootleg (Sidam)", "Crush Roller (bootleg set 4)", MACHINE_SUPPORTS_SAVE ) // Sidam PCB, no Sidam text GAME( 1981, mbrush, crush, korosuke, mbrush, pacman_state, init_mbrush, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, paintrlr, crush, crush2, paintrlr, pacman_state, empty_init, ROT90, "bootleg", "Paint Roller (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, painter, crush, crush2, paintrlr, pacman_state, empty_init, ROT90, "hack (Monshine Ent. Co.)", "Painter (hack of Crush Roller)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // currently shows Paintei due to bad sprite ROM GAME( 1982, eyes, 0, pacman, eyes, pacman_state, init_eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, eyes2, eyes, pacman, eyes, pacman_state, init_eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 43808e30faa..78c10b8c40b 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -33433,6 +33433,7 @@ pacmanvg // bootleg (Video Game SA) pacmod // (c) 1981 Midway pacplus // (c) 1982 Namco (Midway license) pacuman // bootleg +painter // hack paintrlr // 1981 bootleg pengojpm // bootleg pengopac // bootleg -- cgit v1.2.3 From 0af10095c8e1d958e27f2735c482e225077f07f1 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 7 Jun 2021 21:56:32 +0200 Subject: - aristmk5.cpp: added a couple of alternate versions of the setchips [Roberto Fresca] - taitosj.cpp: added a note about a bootleg of Jungle King --- src/mame/drivers/aristmk5.cpp | 6 ++++++ src/mame/drivers/taitosj.cpp | 1 + 2 files changed, 7 insertions(+) diff --git a/src/mame/drivers/aristmk5.cpp b/src/mame/drivers/aristmk5.cpp index 3537d488089..f4612c754a3 100644 --- a/src/mame/drivers/aristmk5.cpp +++ b/src/mame/drivers/aristmk5.cpp @@ -2407,6 +2407,9 @@ void aristmk5_state::aristmk5_usa_touch(machine_config &config) ROM_REGION( 0x400000, "set_4.04.09", ROMREGION_ERASEFF ) /* setchip v4.04.09 */ \ ROM_LOAD32_WORD( "setchip v4.04.09.u7", 0x000000, 0x80000, CRC(e8e8dc75) SHA1(201fe95256459ce34fdb6f7498135ab5016d07f3) ) \ ROM_LOAD32_WORD( "setchip v4.04.09.u11", 0x000002, 0x80000, CRC(ff7a9035) SHA1(4352c4336e61947c555fdc80c61f944076f64b64) ) \ + ROM_REGION( 0x400000, "set_4.04.09_alt", ROMREGION_ERASEFF ) /* setchip v4.04.09 alternate? u7 matches, u11 is almost identical. Checksum-16 of the dump matches what's on the label */ \ + ROM_LOAD32_WORD( "clear_mk5_u_7_ck_eb68.u7", 0x000000, 0x80000, CRC(e8e8dc75) SHA1(201fe95256459ce34fdb6f7498135ab5016d07f3) ) \ + ROM_LOAD32_WORD( "clear_mk5_u_11_ck_3a6f.u11", 0x000002, 0x80000, CRC(4cf70173) SHA1(f3dda0f188c035a36954048b449b9b96787709f2) ) \ ROM_REGION( 0x400000, "set_4.04.08", ROMREGION_ERASEFF ) /* setchip v4.04.08 */ \ ROM_LOAD32_WORD( "setchip v4.04.08.u7", 0x000000, 0x80000, CRC(7c4b7fe4) SHA1(39dd39c794c0cb6abc1b7503650643a8131468d1) ) \ ROM_LOAD32_WORD( "setchip v4.04.08.u11", 0x000002, 0x80000, CRC(d3234a28) SHA1(8ff112ee4aadf1d359ca8ffe0cfa9c7400aa0595) ) \ @@ -2422,6 +2425,9 @@ void aristmk5_state::aristmk5_usa_touch(machine_config &config) ROM_REGION( 0x400000, "set_4.02.04", ROMREGION_ERASEFF ) /* setchip v4.02.04 */ \ ROM_LOAD32_WORD( "setchip v4.02.04.u7", 0x000000, 0x80000, CRC(5a254b22) SHA1(8444f237b392df2a3cb42ea349e7af32f47dd544) ) \ ROM_LOAD32_WORD( "setchip v4.02.04.u11", 0x000002, 0x80000, CRC(def36617) SHA1(c7ba5b08e884a8fb36c9fb51c08e243e32c81f89) ) \ + ROM_REGION( 0x400000, "set_4.02.04_alt", ROMREGION_ERASEFF ) /* setchip v4.02.04, but seems to have more code and some different strings */ \ + ROM_LOAD32_WORD( "setchip v4.02.04.u7", 0x000000, 0x80000, CRC(41275334) SHA1(d4a63dbc77c2c44f6a9c72b389bd270f2137997f) ) /* sldh */ \ + ROM_LOAD32_WORD( "setchip v4.02.04.u11", 0x000002, 0x80000, CRC(254e8b03) SHA1(0ed9723258d3f86b21bf132cbe2fd0bae978cd5e) ) /* sldh */ \ ROM_REGION( 0x400000, "set_1.0", ROMREGION_ERASEFF ) /* setchip v1.0 */ \ ROM_LOAD32_WORD( "setchip v1.0.u7", 0x000000, 0x80000, CRC(16c2828d) SHA1(87218a76bb2791bce27b4b8ab341ba73cbbf6ffe) ) \ ROM_LOAD32_WORD( "setchip v1.0.u11", 0x000002, 0x80000, CRC(a969f12b) SHA1(fc6d234ce1f5c6b5aceb97b73aad60144352023b) ) diff --git a/src/mame/drivers/taitosj.cpp b/src/mame/drivers/taitosj.cpp index d3d5aebd4e9..590e7d2cb1b 100644 --- a/src/mame/drivers/taitosj.cpp +++ b/src/mame/drivers/taitosj.cpp @@ -1933,6 +1933,7 @@ ROM_START( spacecr ) ROM_END +// A bootleg with identical ROM contents has been seen, with handwritten labels going from j1 to j20. ROM_START( junglek ) ROM_REGION( 0x12000, "maincpu", 0 ) ROM_LOAD( "kn21-1.bin", 0x00000, 0x1000, CRC(45f55d30) SHA1(bb9518d7728938f673a663801e47ae0438cdbea1) ) -- cgit v1.2.3 From 7d65e376f053d3a25ccc06e1d52cccc68ff207d5 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 7 Jun 2021 22:06:51 +0200 Subject: taitosj: Fix collisions, fixes MT#7000 --- src/mame/video/taitosj.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/video/taitosj.cpp b/src/mame/video/taitosj.cpp index ed3b9081e95..91b7face6cd 100644 --- a/src/mame/video/taitosj.cpp +++ b/src/mame/video/taitosj.cpp @@ -294,7 +294,7 @@ int taitosj_state::check_sprite_sprite_bitpattern(int sx1, int sy1, int which1, } // draw the sprites into separate bitmaps and check overlapping region - m_sprite_layer_collbitmap1.fill(TRANSPARENT_PEN); + m_sprite_sprite_collbitmap1.fill(TRANSPARENT_PEN); get_sprite_gfx_element(which1)->transpen(m_sprite_sprite_collbitmap1, m_sprite_sprite_collbitmap1.cliprect(), m_spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 3] & 0x3f, 0, -- cgit v1.2.3 From 565e938c6119def36c62ba38f30a44a2898d4c1c Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 7 Jun 2021 23:03:31 +0200 Subject: gameplan: Fix videoram readback, fixes MT#3067 --- src/mame/drivers/gameplan.cpp | 2 ++ src/mame/includes/gameplan.h | 1 + src/mame/video/gameplan.cpp | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/gameplan.cpp b/src/mame/drivers/gameplan.cpp index a2460fb8e8d..9baa207b01d 100644 --- a/src/mame/drivers/gameplan.cpp +++ b/src/mame/drivers/gameplan.cpp @@ -938,6 +938,7 @@ void gameplan_state::machine_start() save_item(NAME(m_video_y)); save_item(NAME(m_video_command)); save_item(NAME(m_video_data)); + save_item(NAME(m_video_previous)); } @@ -948,6 +949,7 @@ void gameplan_state::machine_reset() m_video_y = 0; m_video_command = 0; m_video_data = 0; + m_video_previous = 0; } void gameplan_state::gameplan(machine_config &config) diff --git a/src/mame/includes/gameplan.h b/src/mame/includes/gameplan.h index ed399a51857..e20565a61c4 100644 --- a/src/mame/includes/gameplan.h +++ b/src/mame/includes/gameplan.h @@ -81,6 +81,7 @@ private: uint8_t m_video_y; uint8_t m_video_command; uint8_t m_video_data; + uint8_t m_video_previous; /* devices */ optional_device m_audiocpu; diff --git a/src/mame/video/gameplan.cpp b/src/mame/video/gameplan.cpp index d6e8eff207b..197ab20b8ed 100644 --- a/src/mame/video/gameplan.cpp +++ b/src/mame/video/gameplan.cpp @@ -156,7 +156,7 @@ void gameplan_state::leprechn_video_command_w(uint8_t data) uint8_t gameplan_state::leprechn_videoram_r() { - return m_videoram[m_video_y * (HBSTART - HBEND) + m_video_x]; + return m_video_previous; } @@ -193,6 +193,7 @@ WRITE_LINE_MEMBER(gameplan_state::video_command_trigger_w) m_video_y = m_video_y + 1; } + m_video_previous = m_videoram[m_video_y * (HBSTART - HBEND) + m_video_x]; m_videoram[m_video_y * (HBSTART - HBEND) + m_video_x] = m_video_data & 0x0f; break; -- cgit v1.2.3 From c2b5ce3018defb9d22a27e8d45037d151f05877c Mon Sep 17 00:00:00 2001 From: Firehawke <34792592+Firehawke@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:11:56 -0700 Subject: First pass at Apple IIgs software list overhaul (#8120) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New working software list additions (apple2gs_flop_orig.xml) ------------------------------------------------------------ Balance of Power: The 1990 Edition (IIgs) [4am, Firehawke] Bridge 6.0 (Version 2.49B) (IIgs) [4am, Firehawke] Questron II (Version 1.1) (IIgs) [4am, Firehawke] Reach for the Stars (IIgs) [4am, Firehawke] Roadwar 2000 (IIgs) [4am, Firehawke] Superstar Ice Hockey (IIgs) [4am, Firehawke] Life and Death (IIgs) [4am, Firehawke] Tetris (IIgs) [4am, Firehawke] LaserForce (IIgs) [4am, Firehawke] Arkanoid II: Revenge of Doh (IIgs) [4am, Firehawke] Bubble Ghost (IIgs) [4am, Firehawke] Déjà Vu (IIgs) [4am, Firehawke] Hacker II (IIgs) [4am, Firehawke] Destroyer (IIgs) [4am, Firehawke] GBA Championship Basketball (IIgs) [4am, Firehawke] Jigsaw (IIgs) [4am, Firehawke] Mini-Putt (IIgs) [4am, Firehawke] Omega (IIgs) [4am, Firehawke] Photonix (Version 1.46) (IIgs) [4am, Firehawke] Silpheed (IIgs) [4am, Firehawke] Space Quest (IIgs) [4am, Firehawke] The Third Courier (IIgs) [4am, Firehawke] War in Middle Earth (IIgs) [4am, Firehawke] Where in the World is Carmen Sandiego? (IIgs) [4am, Firehawke] Windwalker (IIgs) [4am, Firehawke] Warlock (IIgs) [4am, Firehawke] Winter Games (IIgs) [4am, Firehawke] Shanghai (IIgs) [4am, Firehawke] Police Quest (IIgs) [4am, Firehawke] Dragon Wars (IIgs) [4am, Firehawke] Monte Carlo (IIgs) [4am, Firehawke] Sub Battle Simulator (IIgs) [4am, Firehawke] John Elway's Quarterback (IIgs) [4am, Firehawke] Space Quest II (IIgs) [4am, Firehawke] King's Quest III (IIgs) [4am, Firehawke] Great Western Shootout (IIgs) [4am, Firehawke] Leisure Suit Larry in the Land of the Lounge Lizards (IIgs) [4am, Firehawke] The Black Cauldron (IIgs) [4am, Firehawke] The King of Chicago (IIgs) [4am, Firehawke] King's Quest IV: The Perils of Rosella (IIgs) [4am, Firehawke] * New working software list additions (apple2gs_flop_orig.xml) ------------------------------------------------------------ Mean 18 [4am, Firehawke] Hover Blade [4am, Firehawke] Fast Break [4am, Firehawke] Halls of Montezuma [4am, Firehawke] Star Saga: Two - The Clathran Menace [4am, Firehawke] Club Backgammon [4am, Firehawke] Beyond Zork: The Coconut of Quendor (Revision 57 / 871221) [4am, Firehawke] 2088: The Cryllan Mission - The Second Scenario [4am, Firehawke] Defender of the Crown [4am, Firehawke] Skate or Die [4am, Firehawke] Street Sports Soccer [4am, Firehawke] Out of this World [4am, Firehawke] Thexder (Version 2.7) [4am, Firehawke] Tunnels of Armageddon (Version 1.0) [4am, Firehawke] --- hash/apple2_flop_orig.xml | 632 ---- hash/apple2gs.xml | 7089 ----------------------------------------- hash/apple2gs_flop_misc.xml | 7088 ++++++++++++++++++++++++++++++++++++++++ hash/apple2gs_flop_orig.xml | 2077 ++++++++++++ src/mame/drivers/apple2gs.cpp | 3 +- 5 files changed, 9167 insertions(+), 7722 deletions(-) delete mode 100644 hash/apple2gs.xml create mode 100644 hash/apple2gs_flop_misc.xml create mode 100644 hash/apple2gs_flop_orig.xml diff --git a/hash/apple2_flop_orig.xml b/hash/apple2_flop_orig.xml index 3c3568b8cbf..e9186a7f824 100644 --- a/hash/apple2_flop_orig.xml +++ b/hash/apple2_flop_orig.xml @@ -16884,636 +16884,4 @@ license:CC0 - - Rastan - 1990 - Taito - - - - - - - - - - - - - - - - - - - - - - Zany Golf - 1988 - Electronic Arts - - - - - - - - - - - - - - - Marble Madness (IIgs) - 1986 - Electronic Arts - - - - - - - - - - - - - - - Qix (IIgs) - 1990 - Taito - - - - - - - - - - - - - - - - Tass Times in Tonetown (IIgs) - 1986 - Activision - - - - - - - - - - - - - - - World Games (IIgs) - 1987 - Epyx - - - - - - - - - - - - - - Gauntlet (IIgs) - 1988 - Mindscape - - - - - - - - - - - - - - Battle Chess (IIgs) - 1989 - Interplay - - - - - - - - - - - - - - - Blackjack Academy (IIgs) - 1987 - MicroIllusions - - - - - - - - - - - - - - - Block Out (IIgs) - 1989 - California Dreams - - - - - - - - - - - - - - - Xenocide (IIgs) - 1989 - Micro Revelations - - - - - - - - - - - - - - - Alien Mind - 1988 - PBI Software - - - - - - - - - - - - - - - - - - - - - - Gold Rush! (IIgs) - 1988 - Sierra On-Line - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Uninvited (IIgs) - 1988 - ICOM Simulations - - - - - - - - - - - - - - - - - - - - - - Cavern Cobra (IIgs) - 1987 - PBI Software - - - - - - - - - - - - - - - Hardball! (IIgs) - 1987 - Accolade - - - - - - - - - - - - - - - Task Force - 1990 - Britannica Software - - - - - - - - - - - - - - - - - - - - - - Shadowgate (IIgs) - 1988 - ICOM Simulations - - - - - - - - - - - - - - - - - - - - - - Serve and Volley (IIgs) - 1988 - Accolade - - - - - - - - - - - - - - - California Games (IIgs) - 1988 - Epyx - - - - - - - - - - - - - - - Sea Strike (IIgs) - 1987 - PBI Software - - - - - - - - - - - - - - - The Duel: Test Drive II (IIgs) - 1989 - Accolade - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Keef the Thief (IIgs) - 1989 - Electronic Arts - - - - - - - - - - - - - - - - - - - - - - Grand Prix Circuit (IIgs) - 1989 - Accolade - - - - - - - - - - - - - - - Crystal Quest (IIgs) - 1989 - Cassidy and Greene - - - - - - - - - - - - - - - Impossible Mission II (IIgs) - 1989 - Epyx - - - - - - - - - - - - - - - The Last Ninja (IIgs) - 1988 - Activision - - - - - - - - - - - - - - - The Hunt for Red October (IIgs) - 1989 - The Software Toolworks - - - - - - - - - - - - - - Final Assault (IIgs) - 1988 - Epyx - - - - - - - - - - - - - - Dark Castle (IIgs) - 1989 - Three Sixty - - - - - - - - - - - - - - - - - - - - - Silent Service (IIgs) - 1987 - Microprose - - - - - - - - - - - - - - GATE (IIgs) - 1992 - Seven Hills Software - - - - - - - - - - - - - - - - - - - diff --git a/hash/apple2gs.xml b/hash/apple2gs.xml deleted file mode 100644 index 5bc53612116..00000000000 --- a/hash/apple2gs.xml +++ /dev/null @@ -1,7089 +0,0 @@ - - - - - - - - First Letters & Words - 1987 - First Byte - - - - - - - - - - First Shapes - 1987 - First Byte - - - - - - - - - - The Three Stooges [cracked] - 1990 - Cinemaware - - - - - - - - - - - - - - - 4th & Inches (clean crack) - - - 1987 - Accolade - - - - - - - - - - - - - - - 8-16 Paint - 1988 - Baudville - - - - - - - - - - Aaargh! - 1988 - Arcadia Software - - - - - - - - - - ACS Demo Disk 1 - 1988 - Apple Chemical Software - - - - - - - - - - ACS Demo Disk 2 - 1989 - Apple Chemical Software - - - - - - - - - - ACS Musique Disk - 1989 - Apple Chemical Software - - - - - - - - - - Adventures of Sinbad - 1988 - Unicorn Software - - - - - - - - - - - - - - - Aesop's Fables - 1988 - Unicorn Software - - - - - - - - - - - - - - - Airball - 1989 - Microdeal - - - - - - - - - - Alien Mind - 1988 - PBI Software - - - - - - - - - - - - - - - - - - - - - - - - - All About America - 1988 - Unicorn Software - - - - - - - - - - - - - - - Ancient Land of Ys - 1989 - Kyodai - - - - - - - - - - - - - - - Ancient Glory - 1993 - Big Red Computer Club - - - - - - - - - - - - - - - Animal Tracker - 1988 - Nature Boy Software - - - - - - - - - - - - - - - - - - - - - - - - - Animasia 3D - 1994 - Michael Lutynski - - - - - - - - - - - - - - - - - - - - - - - - - Disk Magazine Animations - 1991 - Second Sight Software - - - - - - - - - - Animal Kingdom - 1988 - Unicorn Software - - - - - - - - - - - - - - - Arkanoid (clean crack) - 1988 - Taito - - - - - - - - - - Arkanoid II: Revenge of Doh (clean crack) - 1988 - Taito - - - - - - - - - - Arabian Nights - 1988 - Unicorn Software - - - - - - - - - - - - - - - Art & Film Director - 1989 - Epyx - - - - - - - - - - - - - - - - - - - - As The Link Turns - 1988 - Rogue Systems - - - - - - - - - - AppleWorks GS v1.1 - 1988 - Claris - - - - - - - - - - - - - - - - - - - - - - - - - Bouncing Bluster - 1989 - Fantasia Entertainment - - - - - - - - - - - - - - - The Black Cauldron - 1987 - Sierra - - - - - - - - - - - - - - - Beagle Draw - 1989 - Beagle Brothers - - - - - - - - - - BeagleWrite GS v3.2 - 1987 - Beagle Bros. - - - - - - - - - - - - - - - Bouncin' Ferno - 1991 - Free Tools Association - - - - - - - - - - Bubble Ghost - 1988 - Accolade - - - - - - - - - - Blackjack Academy - 1988 - MicroIllusions - - - - - - - - - - Blue Angels (unreleased) - 1990 - Accolade - - - - - - - - - - Blue Helmet - 1991 - Free Tools Association - - - - - - - - - - Balance of Power - 1990s Edition - 1989 - Mindscape - - - - - - - - - - The Bard's Tale II - The Destiny Knight - 1988 - Electronic Arts / Interplay - - - - - - - - - - - - - - - The Bard's Tale - Tales of the Unknown (clean crack) - 1987 - Electronic Arts / Interplay - - - - - - - - - - - - - - - Bridge 6.0 - Your Bid For Entertainment - 1989 - Artworx - - - - - - - - - - Battle Chess (clean crack) - 1988 - Interplay - - - - - - - - - - Bulla - 1990 - Free Tools Association - - - - - - - - - - Summer 1990 Demo - 1990 - Corrosive Software - - - - - - - - - - Beyond Zork - 1988 - Infocom - - - - - - - - - - Copy II Plus v9.1 - 1989 - Central Point Software - - - - - - - - - - Calendar Crafter - 1987 - MECC - - - - - - - - - - California Games [cracked] - 1988 - Epyx - - - - - - - - - - California Demo - 1990 - GS Alliance - - - - - - - - - - Captain Blood - 1989 - Mindscape - - - - - - - - - - Where in the USA is Carmen Sandiego? - 1990 - Brøderbund - - - - - - - - - - - - - - - Where in the World is Carmen Sandiego? - 1989 - Brøderbund - - - - - - - - - - - - - - - Cavern Cobra (clean crack) - 1987 - PBI Software - - - - - - - - - - Cheap Paint v1.4 - 1988 - Earl Gehr - - - - - - - - - - The Chessmaster 2100 v1.1 (clean crack) - - 1988 - The Software Toolworks - - - - - - - - - - - - - - - Cinemaware Dealer Slide Show - 1989 - Cinemaware - - - - - - - - - - Club Backgammon - 1988 - California Dreams - - - - - - - - - - Le Demo IIgs Cliche - 1992 - GS<>IRC - - - - - - - - - - Clip Art Gallery - 1987 - Activision - - - - - - - - - - Cogito - 1992 - Brutal Deluxe - - - - - - - - - - Coke Utilities - 1989 - French United Crackers Klan - - - - - - - - - - Color 'n' Canvas - 1990 - Sunburst Communications - - - - - - - - - - Color Plus v2.0 - 1989 - Lynx Computer Products - - - - - - - - - - Columns v2.0 - 1991 - Sound Barrier Systems - - - - - - - - - - TML Complete Pascal - 1989 - TML Systems - - - - - - - - - - - - - - - Convert 3200 - 1996 - Brutal Deluxe - - - - - - - - - - Cosmocade - The Arcade of Tomorrow - 1990 - Pangea Software - - - - - - - - - - - - - - - Cribbage King / Gin king v1.01 (no OS, not self booting) (clean crack) - - 1989 - The Software Toolworks - - - - - - - - - - Crystal Quest - 1989 - Cassidy & Greene - - - - - - - - - - Cartooners - 1988 - Electronic Arts - - - - - - - - - - - - - - - - - - - - The Cryllan Mission 2088 - The Second Scenario - 1990 - Victory Software - - - - - - - - - - - - - - - - - - - - The Cryllan Mission 2088 - 1989 - Victory Software - - - - - - - - - - - - - - - - - - - - - - - - - Dark Castle - 1989 - Three-Sixty Pacific - - - - - - - - - - - - - - - Deja Vu II - 1989 - Mindscape - - - - - - - - - - Deja Vu - 1988 - Mindscape - - - - - - - - - - Delta Demo - 1991 - Free Tools Association - - - - - - - - - - Desktop Manager - 1987 - On Three - - - - - - - - - - Deskpak - 1988 - Simple Software Systems - - - - - - - - - - Destroyer - 1987 - Epyx - - - - - - - - - - DE Xmas - 1993 - Digital Exodus - - - - - - - - - - Downhill Challenge - 1989 - Brøderbund - - - - - - - - - - - - - - - Disc Commander - 1987 - So What Software - - - - - - - - - - Discquest v1.2 - 1993 - Sequential Systems - - - - - - - - - - Diversisoft - 1990 - Diversified Software Research - - - - - - - - - - Dungeon Master - 1989 - FTL - - - - - - - - - - Defender of the Crown - 1989 - Cinemaware - - - - - - - - - - - - - - - Deluxe Paint II - 1987 - Electronic Arts - - - - - - - - - - - - - - - - - - - - - - - - - Draw Plus - 1987 - Activision - - - - - - - - - - Draw Tools v3.1 - 1993 - Pegasoft - - - - - - - - - - - - - - - Dream Vision - 1991 - DreamWorld - - - - - - - - - - Dream Zone - 1988 - Baudville - - - - - - - - - - - - - - - Dragon Wars - 1990 - Interplay - - - - - - - - - - DreamGrafix - 1992 - DreamWorld - - - - - - - - - - Drive Cleaner - 1992 - Seven Hills Software - - - - - - - - - - Designer Prints - 1989 - MECC - - - - - - - - - - Designer Puzzles - 1990 - MECC - - - - - - - - - - Designasaurus - 1988 - Designware - - - - - - - - - - - - - - - - - - - - Dueling Questions - 1988 - Coyote Computing - - - - - - - - - - DuelTris - 1992 - DreamWorld - - - - - - - - - - Diversi-Tune - 1988 - Diversified Software Research - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Deluxe Write - 1988 - Electronic Arts - - - - - - - - - - Design Your Own Home - Architecture - 1988 - Abracadata - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Design Your Own Home - Interiors - 1988 - Abracadata - - - - - - - - - - - - - - - Design Your Own Home - Landscape - 1988 - Abracadata - - - - - - - - - - ECC Demo - 1990 - East Coast Connection - - - - - - - - - - Electric Crayon - 1999 - Polarware - - - - - - - - - - Express v2.1 - 1993 - Seven Hills Software - - - - - - - - - - Fantavision - 1987 - Brøderbund - - - - - - - - - - Fast Break - 1989 - Accolade - - - - - - - - - - Faxination - 1995 - Vitesse Software - - - - - - - - - - Final Assault - 1989 - Epyx - - - - - - - - - - Full Metal Planete - 1993 - Infogrames - - - - - - - - - - Foundation v1.02 - 1992 - Lunar Productions - - - - - - - - - - Font Factory v1.3 - 1991 - Seven Hills Software - - - - - - - - - - Font Factory v2.0 - 1991 - Seven Hills Software - - - - - - - - - - Formulate - 1991 - Seven Hills Software - - - - - - - - - - - - - - - Fractal Explorer - 1988 - Micro Eclat - - - - - - - - - - Future Shock 3D - 1989 - Neeka Electronics - - - - - - - - - - Gauntlet - 1988 - Mindscape - - - - - - - - - - GBA Championship Basketball - Two-on-Two - 1987 - Gamestar / Activision - - - - - - - - - - Genesys v1.24 Updater - 1989 - Simple Software Systems International - - - - - - - - - - Genesys v1.2 - 1989 - Simple Software Systems International - - - - - - - - - - - - - - - Genesys v1.3 - 1991 - Simple Software Systems International - - - - - - - - - - - - - - - Geographic Jigsaw - 1990 - Eclat Micro Products - - - - - - - - - - Geometry - 1988 - Brøderbund - - - - - - - - - - - - - - - - - - - - Geo Puzzle USA - 1990 - PC Globe - - - - - - - - - - Geo Quiz - 1990 - PC Globe - - - - - - - - - - Global Express Atlas - 1989 - Orange Cherry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Golden Album - Jazz (for Music Studio) - 1987 - M.C.S. - - - - - - - - - - Golden Album - Rock (for Music Studio) - 1987 - M.C.S. - - - - - - - - - - - - - - - GNO-ME - 1991 - Procyon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gnarly Golf [cracked] - 1989 - Fanfare by Britannica - - - - - - - - - - - - - - - Gold of the Americas - 1991 - SSG - - - - - - - - - - Gold Rush - 1989 - Sierra - - - - - - - - - - - - - - - - - - - - - - - - - Grand Prix Circuit - 1989 - Accolade - - - - - - - - - - The Graphic Exchange - 1989 - Roger Wagner Publishing - - - - - - - - - - Grizzly Bears - 1988 - Advanced Ideas - - - - - - - - - - - - - - - Greek Mythology - 1991 - Orange Cherry - - - - - - - - - - - - - - - - - - - - Graphics Supermarket - 1987 - Abracadata - - - - - - - - - - Graphics Studio - 1988 - Accolade - - - - - - - - - - GS Desk Accessories - 1989 - Beagle Bros. - - - - - - - - - - GS Font Editor - 1989 - Beagle Bros. - - - - - - - - - - GS Invaders v1.0 - 1994 - David Ong Tat-Wee - - - - - - - - - - GS Numerics - 1990 - Spring Branch Software - - - - - - - - - - Graphic Writer III v1.0 - 1989 - Seven Hills Software - - - - - - - - - - - - - - - Graphic Writer III v1.1 - 1989 - Seven Hills Software - - - - - - - - - - - - - - - - - - - - Graphic Writer III v2.0 Update Disk - 1989 - Seven Hills Software - - - - - - - - - - Graphic Writer III - 1989 - DataPak - - - - - - - - - - Great Western Shootout - 1989 - Fanfare by Britannica - - - - - - - - - - Hacker II - 1987 - Activision - - - - - - - - - - Halls of Montezuma - 1990 - SSG - - - - - - - - - - - - - - - Hot & Cool Jazz (for Instant Music) - 1987 - Instant Music - - - - - - - - - - Hardball! - 1987 - Accolade - - - - - - - - - - Hostage - 1990 - Mindscape - - - - - - - - - - HardPressed v1.02 - 1993 - Westcode Software - - - - - - - - - - Hover Blade - 1991 - MCX - - - - - - - - - - - - - - - HyperCard IIgs v1.1 - 1990 - Apple Computer, Inc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HyperStudio v2.0 - 1989 - Roger Wagner Publishing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HyperStudio v3.1 - 1989 - Roger Wagner Publishing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Iconix - 1988 - So What Software - - - - - - - - - - Infolab Chemistry - 1988 - Clifford West & Ramon Zamora - - - - - - - - - - - - - - - Infolab Life Science - 1988 - Clifford West & Ramon Zamora - - - - - - - - - - - - - - - The Immortal - 1990 - Electronic Arts - - - - - - - - - - - - - - - Impossible Mission II - 1989 - Epyx - - - - - - - - - - Independence - 1991 - Seven Hills Software - - - - - - - - - - Instrument Designer - 1988 - PyWare - - - - - - - - - - - - - - - Instant Music - 1987 - Electronic Arts - - - - - - - - - - Instant Synthesizer - 1988 - Electronic Arts - - - - - - - - - - - - - - - It's Only Rock'n'Roll (for Instant Music) - 1987 - Electronic Arts - - - - - - - - - - Jam Session - 1989 - Brøderbund - - - - - - - - - - - - - - - John Elway's Quarterback - 1989 - Melbourne House - - - - - - - - - - Jigsaw - 1988 - Britannica Software - - - - - - - - - - - - - - - Jack Nicklaus Greatest 18 Holes of Major Championship Golf - 1989 - Accolade - - - - - - - - - - - - - - - - - - - - - - - - - Jungle Safari - 1991 - Orange Cherry - - - - - - - - - - - - - - - Kaleidokubes - 1989 - Artworx - - - - - - - - - - Kangeroo v1.3 - 1992 - Seven Hills Software - - - - - - - - - - Kangeroo v1.5 (French) - 1992 - Seven Hills Software - - - - - - - - - - Katie's Farm - 1990 - Lawrence Productions - - - - - - - - - - - - - - - Keef the Thief [cracked] - 1989 - Naughty Dog / Electronic Arts - - - - - - - - - - - - - - - Kidstime II - 1986 - Great Wave Software - - - - - - - - - - Kid Talk - 1987 - First Byte - - - - - - - - - - Kid Writer Gold - 1989 - Spinnaker Software - - - - - - - - - - Kinderama - 1989 - Unicorn Software - - - - - - - - - - - - - - - King of Chicago - 1989 - Cinemaware - - - - - - - - - - - - - - - King's Quest - 1987 - Sierra - - - - - - - - - - - - - - - King's Quest II - Romancing The Throne - 1988 - Sierra - - - - - - - - - - - - - - - King's Quest III - 1988 - Sierra - - - - - - - - - - - - - - - King's Quest IV - 1989 - Sierra - - - - - - - - - - - - - - - - - - - - Last Rites Demo - 1991 - Corrosive Software - - - - - - - - - - Life & Death - 1989 - The Software Toolworks - - - - - - - - - - - - - - - Life Guard - 1987 - Harbor Software - - - - - - - - - - Lisa816 v5.433 - 1988 - Hal Labs - - - - - - - - - - List Plus - 1987 - Activision - - - - - - - - - - Land of the Unicorn - 1988 - Unicorn Software - - - - - - - - - - - - - - - - - - - - - - - - - Logowriter GS - 1989 - Logo Computer Systems - - - - - - - - - - The Lost Tribe - 1992 - Lawrence Productions - - - - - - - - - - - - - - - - - - - - Learning Spoken English - 1986 - Coursemaker International - - - - - - - - - - Leisure Suit Larry in the Land of the Lounge Lizards - 1987 - Sierra - - - - - - - - - - - - - - - Laser Force - 1989 - Fanfare by Britannica - - - - - - - - - - The Last Ninja (clean crack) - 1987 - Activision - - - - - - - - - - Micol Advanced BASIC v3.0 - 1989 - Micol Systems - - - - - - - - - - - - - - - Micol Advanced BASIC v4.2 - 1989 - Micol Systems - - - - - - - - - - - - - - - Macs Headroom - 1993 - Imperial Guild Kansas - - - - - - - - - - Mad Match - 1989 - Baudville - - - - - - - - - - Micol Advanced BASIC v5.0 - 1989 - Micol Systems - - - - - - - - - - - - - - - - - - - - - - - - - Magic Johnson's Basketball (unreleased) - 1989 - Melbourne House - - - - - - - - - - Magical Myths - 1988 - Unicorn Software - - - - - - - - - - - - - - - Mancala - 1988 - California Dreams - - - - - - - - - - Manhunter: New York [cracked] - 1988 - Sierra - - - - - - - - - - - - - - - - - - - - - - - - - Le Manoir de Mortevielle - 1989 - Lankhor - - - - - - - - - - Marble Madness - 1988 - Electronic Arts - - - - - - - - - - Math Blaster Plus! - 1989 - Davidson and Associates - - - - - - - - - - Math and Me - 1988 - Davidson and Associates - - - - - - - - - - Mathtalk - 1987 - First Byte - - - - - - - - - - Mathtalk Fractions - 1987 - First Byte - - - - - - - - - - Mavis Beacon Teaches Typing - 1987 - The Software Toolworks - - - - - - - - - - - - - - - Mazer II - 1992 - Big Red Computer Club - - - - - - - - - - McGee At The Fun Fair - 1990 - Lawrence Productions - - - - - - - - - - - - - - - McGee - 1990 - Lawrence Productions - - - - - - - - - - - - - - - Music Composer - 1993 - W. Juniel Clayburn III - - - - - - - - - - Music Construction Set - 1996 - Electronic Arts - - - - - - - - - - - - - - - MD-BASIC v1.1 - 1989 - Morgan Davis Group - - - - - - - - - - MD-BASIC v3.2 - 1990 - Morgan Davis Group - - - - - - - - - - Mean 18 - 1987 - Accolade - - - - - - - - - - - - - - - - - - - - - - - - - Medley v2.0 - 1989 - Milliken Publishing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Mercury - 1990 - MECC - - - - - - - - - - Merlin 16+ v4.68 - 1989 - Roger Wagner Publishing - - - - - - - - - - - - - - - - - - - - Mini Putt - The Ultimate Challenge - 1988 - Accolade - - - - - - - - - - Mighty Marvel vs. The Forces of Evil - 1988 - ISM - - - - - - - - - - - - - - - Mixed Up Mother Goose - 1988 - Sierra - - - - - - - - - - - - - - - Modulae - 1990 - Free Tools Association - - - - - - - - - - Monte Carlo - 1988 - PBI Software - - - - - - - - - - Milestones 2000 - 1990 - Ken Franklin - - - - - - - - - - MS-DOS Tools v2.21 - 1994 - Peter Watson - - - - - - - - - - Music Studio Songs (for Music Studio) - 1988 - <unknown> - - - - - - - - - - - - - - - - - - - - Milliken Story Teller - 1989 - Milliken Publishing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Math Wizard - 1988 - Unicorn Software - - - - - - - - - - - - - - - Master Tracks Junior - 1988 - Passport Designs - - - - - - - - - - Master Tracks Pro - 1989 - Passport Designs - - - - - - - - - - Music Studio 2.0 - 1987 - Activision - - - - - - - - - - - - - - - Music Writer Pro v1.42 - 1988 - PyWare - - - - - - - - - - Music Writer v2 - 1988 - PyWare - - - - - - - - - - My Paint - 1990 - Saddleback Graphics - - - - - - - - - - - - - - - - - - - - Mr. Py and I - 1989 - Pygraphics - - - - - - - - - - - - - - - National Geographic Kids Network - 1989 - National Geographic Society - - - - - - - - - - Neuromancer - 1989 - Interplay - - - - - - - - - - Newspaper Maker - 1990 - Orange Cherry - - - - - - - - - - - - - - - Nexus - 1989 - Datasmith - - - - - - - - - - NFC Megademo - 1997 - NinjaForce - - - - - - - - - - - - - - - Notes 'n' Files - 1987 - Datapak Software - - - - - - - - - - Nathan Page Studio Jazz (for Diversi-Tune) - 1989 - Nathan Hugo's Music - - - - - - - - - - NoiseTracker GS - 1992 - Free Tools Association - - - - - - - - - - Nucleus - 1989 - Free Tools Association - - - - - - - - - - Oil Landers - 1991 - Free Tools Association - - - - - - - - - - Omega - 1990 - Origin Systems - - - - - - - - - - Once Upon A Time II - 1989 - Compu-Teach - - - - - - - - - - - - - - - Once Upon A Time III - 1990 - Compu-Teach - - - - - - - - - - - - - - - - - - - - Once Upon A Time - 1988 - Compu-Teach - - - - - - - - - - - - - - - One Arm Battle - 1990 - Ken Franklin - - - - - - - - - - Paint 256 - 1990 - Godfreys Software - - - - - - - - - - Paperboy - 1988 - Mindscape - - - - - - - - - - Passengers on the Wind - 1988 - Infogrames - - - - - - - - - - Photonix II v2.3 - 1990 - Free Tools Association / Toolbox - - - - - - - - - - Pick 'n Pile - 1990 - Procyon - - - - - - - - - - Picture Ripper - 1991 - Ninja Force - - - - - - - - - - Pinball Wizard - 1987 - Accolade - - - - - - - - - - Pipe Dream (clean crack) - 1990 - Lucasfilm Games - - - - - - - - - - Pirates! - 1988 - Microprose - - - - - - - - - - Platinum Paint v1.0.1 - 1990 - Beagle Bros. - - - - - - - - - - Platinum Paint v2.0 - 1990 - Beagle Bros. - - - - - - - - - - - - - - - Plotting - 1991 - Once Product - - - - - - - - - - Plunder - 1990 - Ken Franklin - - - - - - - - - - PMP UnZip - 1992 - Paul Parkhurst - - - - - - - - - - Project Neptune (unreleased) - 1989 - Epyx - - - - - - - - - - Panzer Battles - 1991 - SSG - - - - - - - - - - - - - - - Police Quest - 1987 - Sierra - - - - - - - - - - - - - - - Poly Sons 5 - 1992 - Babar de Saint Cyr - - - - - - - - - - Postcards - 1987 - Activision - - - - - - - - - - The Print Shop - 1987 - Brøderbund - - - - - - - - - - Prism - 1992 - New Concepts - - - - - - - - - - The Print Shop Companion - 1990 - Brøderbund - - - - - - - - - - Probe GS - 1987 - KPW Software - - - - - - - - - - ProSel-16 - 1990 - Glen E. Bredon - - - - - - - - - - ProSel-16 v8.40 - 1990 - Glen E. Bredon - - - - - - - - - - ProSel-16 v8.9 - 1990 - Glen E. Bredon - - - - - - - - - - Print Shop Graphics Library - Border - 1987 - Brøderbund - - - - - - - - - - Print Shop Graphics Library - Party Library - 1987 - Brøderbund - - - - - - - - - - Print Shop Graphics Library - Sampler Edition - 1987 - Brøderbund - - - - - - - - - - Print Shop Graphics Library - Special Edition - 1987 - Brøderbund - - - - - - - - - - Print Shop InCider Data - 1987 - Brøderbund - - - - - - - - - - - - - - - Print Shop Lovers Utility Set - 1988 - Big Red Computer Club - - - - - - - - - - Puzznic (unreleased) - 1990 - Taito - - - - - - - - - - Paintworks Gold v1.0 [cr Digital Gang] - 1988 - Activision - - - - - - - - - - Paintworks Gold v1.5 - 1988 - Activision - - - - - - - - - - - - - - - Paintworks Plus - 1986 - Activision - - - - - - - - - - Qix - 1990 - Taito - - - - - - - - - - Quest for the Hoard - 1991 - Pegasoft - - - - - - - - - - Questmaster 1 - The Prism of Heheutotol - 1990 - Miles Computing - - - - - - - - - - - - - - - - - - - - Questron II - 1988 - SSI - - - - - - - - - - Rade - 1992 - Morgan Davis Group - - - - - - - - - - Rastan [cr East Coast Connection] - 1990 - Taito - - - - - - - - - - - - - - - Rastan [cr Computist Magazine][t lives] - 1990 - Taito - - - - - - - - - - - - - - - Reach for the Stars - 1988 - SSG - - - - - - - - - - Readable Classic Tales - 1991 - Orange Cherry - - - - - - - - - - - - - - - - - - - - Read-a-Rama - 1989 - Unicorn Software - - - - - - - - - - - - - - - - - - - - Reader Rabbit - 1987 - The Learning Company - - - - - - - - - - Reading About Fish - 1988 - Orange Cherry - - - - - - - - - - Reading Magic - 1989 - Tom Snyder Productions - - - - - - - - - - Reading About Reptiles - 1988 - Orange Cherry - - - - - - - - - - Read & Rhyme - 1988 - Unicorn Software - - - - - - - - - - - - - - - The Hunt for Red October - 1989 - The Software Toolworks - - - - - - - - - - Revolution '76 - 1989 - Britannica Software - - - - - - - - - - - - - - - - - - - - Rocket Ranger - 1989 - Cinemaware - - - - - - - - - - - - - - - Roadwar 2000 - 1987 - SSI - - - - - - - - - - Runaway Robots - 1988 - PBI Software - - - - - - - - - - The Revenge of the Bobs - 1992 - NinjaForce - - - - - - - - - - Apple IIgs Sales Demo - 1986 - Apple Computer, Inc. - - - - - - - - - - - - - - - Salvation Supreme - 1991 - Vitesse Software - - - - - - - - - - - - - - - The Secrets of Bahras [cr Club 96] - 1991 - Victory Software - - - - - - - - - - - - - - - - - - - - Sea Strike - 1987 - PBI Software - - - - - - - - - - Sensei - 1991 - Miami Software - - - - - - - - - - Shanghai - 1987 - Activision - - - - - - - - - - Space Harrier Demo - 1990 - Free Tools Association - - - - - - - - - - Shufflepuck Cafe (unreleased) - 1990 - Brøderbund - - - - - - - - - - Shanghai II - Dragon's Eye - 1993 - Big Red Computer Club - - - - - - - - - - - - - - - Shoebox v1.1 - 1991 - Seven Hills Software - - - - - - - - - - - - - - - - - - - - - - - - - Show Off - 1987 - Brøderbund - - - - - - - - - - - - - - - - - - - - Sierra Games Demo - 1988 - Sierra - - - - - - - - - - Signature GS - 1992 - Quality Computers - - - - - - - - - - - - - - - Silpheed - 1988 - Sierra - - - - - - - - - - - - - - - Sinbad and the Throne of the Falcon - 1990 - Cinemaware - - - - - - - - - - - - - - - Six Pack - 1992 - Quality Computers - - - - - - - - - - Skate Or Die! - 1988 - Electronic Arts - - - - - - - - - - Silent Service - 1987 - Microprose - - - - - - - - - - Solitaire Royale - 1990 - Spectrum Holobyte - - - - - - - - - - Smart Money v1.5 - 1988 - Sierra - - - - - - - - - - Smoothtalker (French) - 1987 - First Byte - - - - - - - - - - Smoothtalker - 1987 - First Byte - - - - - - - - - - SoundSmith - 1990 - Huibert Aalbars - - - - - - - - - - Snoopy's Reading Machine - 1990 - School Publishing Company - - - - - - - - - - Soft Switch - 1988 - Roger Wagner Publishing - - - - - - - - - - Solarian - 1992 - Coloreez - - - - - - - - - - Sonix v1.2 - 1988 - So What Software - - - - - - - - - - Space Ace - 1990 - ReadySoft - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Space Cluster - 1990 - Miami Software - - - - - - - - - - Space Quest II - Vohaul's Revenge - 1988 - Sierra - - - - - - - - - - - - - - - Space Quest - 1987 - Sierra - - - - - - - - - - - - - - - Space Shark - 1990 - Toolbox - - - - - - - - - - Spectra Graphix Super Music - 1989 - Lynx Computer Products - - - - - - - - - - Spectra Grafix 256 - 1989 - Lynx Computer Products - - - - - - - - - - Spelling Bee - 1987 - First Byte - - - - - - - - - - Splat! v1.04 - 1993 - Procyon - - - - - - - - - - Spirit of Excalibur - 1991 - Virgin Mastertronic - - - - - - - - - - - - - - - - - - - - Super Award Maker - 1990 - Orange Cherry - - - - - - - - - - - - - - - Space Shuttle Word Problems - 1991 - Orange Cherry - - - - - - - - - - SoundSmith Data (songs for SoundSmith) - 1991 - <unknown> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Superstar Ice Hockey (clean crack) - 1988 - Mindscape - - - - - - - - - - FUN Instruments vols. 1-5 (for SoundSmith) - 1989 - Huibert Aalbers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SoundSmith Christmas Songs - 1989 - <unknown> - - - - - - - - - - Star Saga: One - Beyond the Boundary - 1988 - Masterplay - - - - - - - - - - Star Saga: Two - The Clathran Menace - 1988 - Masterplay - - - - - - - - - - Stickybear Talking ABCs - 1988 - Weekly Reader Software - - - - - - - - - - - - - - - Stickybear Talking Opposites - 1988 - Weekly Reader Software - - - - - - - - - - Stickybear Talking Shapes - 1988 - Weekly Reader Software - - - - - - - - - - Strategic Conquest - 1986 - PBI Software - - - - - - - - - - Strip Poker II - 1987 - Artworx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Street Sports Soccer - 1988 - Epyx - - - - - - - - - - Stars & Planets - 1990 - Advanced Ideas - - - - - - - - - - Storybook Viewer - 1990 - MECC - - - - - - - - - - Storybook Weaver World of Make Believe - 1991 - MECC - - - - - - - - - - Storybook Weaver World of Adventure - 1991 - MECC - - - - - - - - - - Sub Battle Simulator - 1987 - Epyx - - - - - - - - - - Subversion v1.0 - 1992 - Point of View Computing - - - - - - - - - - Super Convert 4 - 1990 - Seven Hills Software - - - - - - - - - - Super Menu Pack - 1993 - Seven Hills Software - - - - - - - - - - Super Puzzles - 1989 - Lynx Computer Products - - - - - - - - - - - - - - - Softwood GSFile v2.0 - 1987 - Softwood Company - - - - - - - - - - - - - - - Switch-It! - 1992 - Procyon - - - - - - - - - - Symbolix v1.9 - 1990 - Seven Hills Software - - - - - - - - - - System Software v1.1 - 1986 - Apple Computer, Inc. - - - - - - - - - - System Software v3.1 - 1987 - Apple Computer, Inc. - - - - - - - - - - System Software v3.2 - 1987 - Apple Computer, Inc. - - - - - - - - - - System Software v4.0 - 1988 - Apple Computer, Inc. - - - - - - - - - - - - - - - System Software v5.0.2 - 1989 - Apple Computer, Inc. - - - - - - - - - - - - - - - System Software v5.0.4 - 1990 - Apple Computer, Inc. - - - - - - - - - - - - - - - System Software v6.0.1 - 1993 - Apple Computer, Inc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Talking First Dinosaur Reader - 1991 - Orange Cherry - - - - - - - - - - - - - - - - - - - - Talking First Reader - 1989 - Orange Cherry - - - - - - - - - - Talking First Words - 1990 - Orange Cherry - - - - - - - - - - - - - - - Talking First Writer - 1989 - Orange Cherry - - - - - - - - - - - - - - - Talking ABCs - 1988 - Orange Cherry - - - - - - - - - - - - - - - Talking Alpha Chimp - 1989 - Orange Cherry - - - - - - - - - - - - - - - Talking Addition & Subtraction - 1990 - Orange Cherry - - - - - - - - - - Talking Animals - 1989 - Orange Cherry - - - - - - - - - - Talking Clock - 1988 - Orange Cherry - - - - - - - - - - Talking Colors and Shapes - 1988 - Orange Cherry - - - - - - - - - - - - - - - Talking Classroom - 1990 - Orange Cherry - - - - - - - - - - - - - - - Talking Dinosaurs - 1989 - Orange Cherry - - - - - - - - - - Talking Money - 1988 - Orange Cherry - - - - - - - - - - Talking Multiplication & Division - 1991 - Orange Cherry - - - - - - - - - - - - - - - Talking Numbers - 1989 - Orange Cherry - - - - - - - - - - Talking Reading Railroad - 1989 - Orange Cherry - - - - - - - - - - - - - - - Talking School Bus - 1989 - Orange Cherry - - - - - - - - - - - - - - - Talking Speller II - 1990 - Orange Cherry - - - - - - - - - - Talking Tools - 1990 - The Byte Works - - - - - - - - - - - - - - - tarot - 1990 - Toolbox - - - - - - - - - - Task Force [cr DreamWorld Society][t health] - 1990 - Fanfare by Britannica Software - - - - - - - - - - - - - - - Tass Times in Tonetown - 1986 - Activision - - - - - - - - - - Toolbox Mag #1 - 1990 - Toolbox - - - - - - - - - - Toolbox Mag #2 - 1990 - Toolbox - - - - - - - - - - Toolbox Mag #3 - 1991 - Toolbox - - - - - - - - - - Toolbox Mag #4 - 1991 - Toolbox - - - - - - - - - - Toolbox Mag #5 - 1991 - Toolbox - - - - - - - - - - Toolbox Mag #6 - 1991 - Toolbox - - - - - - - - - - - - - - - Toolbox Mag #7 - 1991 - Toolbox - - - - - - - - - - - - - - - Test Drive II: The Duel [cr The Torcher Chamber] - 1989 - Accolade - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Teenage Queen - 1990 - Infogrames - - - - - - - - - - Teleworks Plus - 1988 - Activision - - - - - - - - - - Tetris - 1988 - Spectrum Holobyte - - - - - - - - - - The Beam - 1989 - Apple Chemical Software - - - - - - - - - - The Gate - 1992 - Seven Hills Software - - - - - - - - - - - - - - - - - - - - The Manager v1.2 - 1990 - Seven Hills Software - - - - - - - - - - The Manager v1.5 - 1990 - Seven Hills Software - - - - - - - - - - Thexder v2.7 (clean crack) - - 1987 - Sierra - - - - - - - - - - Thexder v1 (no OS, not self booting) (clean crack) - - - 1987 - Sierra - - - - - - - - - - The Third Courier - 1989 - Accolade - - - - - - - - - - - - - - - Timelord (demo) - 1992 - DreamWorld - - - - - - - - - - The Tinies - 1994 - Brutal Deluxe - - - - - - - - - - TML BASIC - 1987 - TML Systems - - - - - - - - - - TML Pascal II - 1987 - TML Systems - - - - - - - - - - Tomahawk [cr The Gryphon] - 1988 - Datasoft - - - - - - - - - - Top Draw - 1989 - Styleware - - - - - - - - - - Your Tour of the Apple IIgs (revised, beta) - 1988 - Apple Computer, Inc. - - - - - - - - - - Your Tour of the Apple IIgs (original) - 1986 - Apple Computer, Inc. - - - - - - - - - - Your Tour of the Apple IIgs (revised) - 1989 - Apple Computer, Inc. - - - - - - - - - - Trans Prog III - 1990 - Seven Hills Software - - - - - - - - - - TrianGO - 1988 - California Dreams - - - - - - - - - - Transylvania III - 1990 - Polarware - - - - - - - - - - - - - - - Transylvania - 1987 - Polarware - - - - - - - - - - - - - - - TTC Demo - 1991 - TTC - - - - - - - - - - Tunnels of Armageddon - 1990 - California Dreams - - - - - - - - - - Twilight II v1.1 - 1991 - DYA - - - - - - - - - - - - - - - The Tower of Myraglen - 1987 - PBI Software - - - - - - - - - - - - - - - Typing Tutor IV - 1989 - Simon & Schuster - - - - - - - - - - The Ugly Duckling - 1989 - The Byte Works - - - - - - - - - - - - - - - UniDOS 3.3 Plus v2.0.1 - - 1986 - Microsparc, Inc. - - - - - - - - - - UniDOS Plus v2.1 - - 1986 - Microsparc, Inc. - - - - - - - - - - Uninvited [cr The Torcher Chamber] - 1988 - Mindscape - - - - - - - - - - Universe Master v1.01 - 1992 - Econ Technologies - - - - - - - - - - USA Geography - 1989 - MECC - - - - - - - - - - - - - - - Utility Works - 1992 - George R. Wilde - - - - - - - - - - Vegas Craps - 1988 - California Dreams - - - - - - - - - - Vindicators (unreleased) - 1989 - Tengen / Atari Games - - - - - - - - - - Virus M.D. v2.1 - 1992 - Morgan Davis Group - - - - - - - - - - Visualizer v1.08 - 1986 - PBI Software - - - - - - - - - - Volcanoes Deluxe - 1988 - Earthwave Services - - - - - - - - - - Warlock - 1988 - Three-Sixty Pacific - - - - - - - - - - War in Middle Earth - 1989 - Melbourne House - - - - - - - - - - - - - - - Writer's Choice Elite - 1987 - Activision - - - - - - - - - - Whales - 1989 - Advanced Ideas - - - - - - - - - - - - - - - Windwalker [cr Club 96] - 1990 - Origin Systems - - - - - - - - - - - - - - - Wings - 1990 - Vitesse Software - - - - - - - - - - - - - - - World Games - 1987 - Epyx - - - - - - - - - - World Tour Golf - 1987 - Electronic Arts - - - - - - - - - - Winter Games - 1987 - Epyx - - - - - - - - - - Word Master - 1989 - Unicorn Software - - - - - - - - - - WordPerfect v2.1 - 1987 - WordPerfect Corp. - - - - - - - - - - - - - - - - - - - - World Geograph - 1989 - MECC - - - - - - - - - - - - - - - Weather Forecast - 1988 - Orange Cherry - - - - - - - - - - Weather Station - 1988 - Orange Cherry - - - - - - - - - - Xenocide - 1989 - Pangea Software / Micro Revelations - - - - - - - - - - Xmas Demo - 1990 - Free Tools Association / GS Alliance - - - - - - - - - - Zany Golf - 1988 - Electronic Arts - - - - - - - - - - ZZ Copy v2.21 - 1990 - Miami Software - - - - - - - - - diff --git a/hash/apple2gs_flop_misc.xml b/hash/apple2gs_flop_misc.xml new file mode 100644 index 00000000000..8c6797f0cbd --- /dev/null +++ b/hash/apple2gs_flop_misc.xml @@ -0,0 +1,7088 @@ + + + + + + + First Letters & Words + 1987 + First Byte + + + + + + + + + + First Shapes + 1987 + First Byte + + + + + + + + + + The Three Stooges [cracked] + 1990 + Cinemaware + + + + + + + + + + + + + + + 4th & Inches (clean crack) + + + 1987 + Accolade + + + + + + + + + + + + + + + 8-16 Paint + 1988 + Baudville + + + + + + + + + + Aaargh! + 1988 + Arcadia Software + + + + + + + + + + ACS Demo Disk 1 + 1988 + Apple Chemical Software + + + + + + + + + + ACS Demo Disk 2 + 1989 + Apple Chemical Software + + + + + + + + + + ACS Musique Disk + 1989 + Apple Chemical Software + + + + + + + + + + Adventures of Sinbad + 1988 + Unicorn Software + + + + + + + + + + + + + + + Aesop's Fables + 1988 + Unicorn Software + + + + + + + + + + + + + + + Airball + 1989 + Microdeal + + + + + + + + + + Alien Mind + 1988 + PBI Software + + + + + + + + + + + + + + + + + + + + + + + + + All About America + 1988 + Unicorn Software + + + + + + + + + + + + + + + Ancient Land of Ys + 1989 + Kyodai + + + + + + + + + + + + + + + Ancient Glory + 1993 + Big Red Computer Club + + + + + + + + + + + + + + + Animal Tracker + 1988 + Nature Boy Software + + + + + + + + + + + + + + + + + + + + + + + + + Animasia 3D + 1994 + Michael Lutynski + + + + + + + + + + + + + + + + + + + + + + + + + Disk Magazine Animations + 1991 + Second Sight Software + + + + + + + + + + Animal Kingdom + 1988 + Unicorn Software + + + + + + + + + + + + + + + Arkanoid (clean crack) + 1988 + Taito + + + + + + + + + + Arkanoid II: Revenge of Doh (clean crack) + 1988 + Taito + + + + + + + + + + Arabian Nights + 1988 + Unicorn Software + + + + + + + + + + + + + + + Art & Film Director + 1989 + Epyx + + + + + + + + + + + + + + + + + + + + As The Link Turns + 1988 + Rogue Systems + + + + + + + + + + AppleWorks GS v1.1 + 1988 + Claris + + + + + + + + + + + + + + + + + + + + + + + + + Bouncing Bluster + 1989 + Fantasia Entertainment + + + + + + + + + + + + + + + The Black Cauldron + 1987 + Sierra + + + + + + + + + + + + + + + Beagle Draw + 1989 + Beagle Brothers + + + + + + + + + + BeagleWrite GS v3.2 + 1987 + Beagle Bros. + + + + + + + + + + + + + + + Bouncin' Ferno + 1991 + Free Tools Association + + + + + + + + + + Bubble Ghost + 1988 + Accolade + + + + + + + + + + Blackjack Academy + 1988 + MicroIllusions + + + + + + + + + + Blue Angels (unreleased) + 1990 + Accolade + + + + + + + + + + Blue Helmet + 1991 + Free Tools Association + + + + + + + + + + Balance of Power - 1990s Edition + 1989 + Mindscape + + + + + + + + + + The Bard's Tale II - The Destiny Knight + 1988 + Electronic Arts / Interplay + + + + + + + + + + + + + + + The Bard's Tale - Tales of the Unknown (clean crack) + 1987 + Electronic Arts / Interplay + + + + + + + + + + + + + + + Bridge 6.0 - Your Bid For Entertainment + 1989 + Artworx + + + + + + + + + + Battle Chess (clean crack) + 1988 + Interplay + + + + + + + + + + Bulla + 1990 + Free Tools Association + + + + + + + + + + Summer 1990 Demo + 1990 + Corrosive Software + + + + + + + + + + Beyond Zork + 1988 + Infocom + + + + + + + + + + Copy II Plus v9.1 + 1989 + Central Point Software + + + + + + + + + + Calendar Crafter + 1987 + MECC + + + + + + + + + + California Games [cracked] + 1988 + Epyx + + + + + + + + + + California Demo + 1990 + GS Alliance + + + + + + + + + + Captain Blood + 1989 + Mindscape + + + + + + + + + + Where in the USA is Carmen Sandiego? + 1990 + Brøderbund + + + + + + + + + + + + + + + Where in the World is Carmen Sandiego? + 1989 + Brøderbund + + + + + + + + + + + + + + + Cavern Cobra (clean crack) + 1987 + PBI Software + + + + + + + + + + Cheap Paint v1.4 + 1988 + Earl Gehr + + + + + + + + + + The Chessmaster 2100 v1.1 (clean crack) + + 1988 + The Software Toolworks + + + + + + + + + + + + + + + Cinemaware Dealer Slide Show + 1989 + Cinemaware + + + + + + + + + + Club Backgammon + 1988 + California Dreams + + + + + + + + + + Le Demo IIgs Cliche + 1992 + GS<>IRC + + + + + + + + + + Clip Art Gallery + 1987 + Activision + + + + + + + + + + Cogito + 1992 + Brutal Deluxe + + + + + + + + + + Coke Utilities + 1989 + French United Crackers Klan + + + + + + + + + + Color 'n' Canvas + 1990 + Sunburst Communications + + + + + + + + + + Color Plus v2.0 + 1989 + Lynx Computer Products + + + + + + + + + + Columns v2.0 + 1991 + Sound Barrier Systems + + + + + + + + + + TML Complete Pascal + 1989 + TML Systems + + + + + + + + + + + + + + + Convert 3200 + 1996 + Brutal Deluxe + + + + + + + + + + Cosmocade - The Arcade of Tomorrow + 1990 + Pangea Software + + + + + + + + + + + + + + + Cribbage King / Gin king v1.01 (no OS, not self booting) (clean crack) + + 1989 + The Software Toolworks + + + + + + + + + + Crystal Quest + 1989 + Cassidy & Greene + + + + + + + + + + Cartooners + 1988 + Electronic Arts + + + + + + + + + + + + + + + + + + + + The Cryllan Mission 2088 - The Second Scenario + 1990 + Victory Software + + + + + + + + + + + + + + + + + + + + The Cryllan Mission 2088 + 1989 + Victory Software + + + + + + + + + + + + + + + + + + + + + + + + + Dark Castle + 1989 + Three-Sixty Pacific + + + + + + + + + + + + + + + Deja Vu II + 1989 + Mindscape + + + + + + + + + + Deja Vu + 1988 + Mindscape + + + + + + + + + + Delta Demo + 1991 + Free Tools Association + + + + + + + + + + Desktop Manager + 1987 + On Three + + + + + + + + + + Deskpak + 1988 + Simple Software Systems + + + + + + + + + + Destroyer + 1987 + Epyx + + + + + + + + + + DE Xmas + 1993 + Digital Exodus + + + + + + + + + + Downhill Challenge + 1989 + Brøderbund + + + + + + + + + + + + + + + Disc Commander + 1987 + So What Software + + + + + + + + + + Discquest v1.2 + 1993 + Sequential Systems + + + + + + + + + + Diversisoft + 1990 + Diversified Software Research + + + + + + + + + + Dungeon Master + 1989 + FTL + + + + + + + + + + Defender of the Crown + 1989 + Cinemaware + + + + + + + + + + + + + + + Deluxe Paint II + 1987 + Electronic Arts + + + + + + + + + + + + + + + + + + + + + + + + + Draw Plus + 1987 + Activision + + + + + + + + + + Draw Tools v3.1 + 1993 + Pegasoft + + + + + + + + + + + + + + + Dream Vision + 1991 + DreamWorld + + + + + + + + + + Dream Zone + 1988 + Baudville + + + + + + + + + + + + + + + Dragon Wars + 1990 + Interplay + + + + + + + + + + DreamGrafix + 1992 + DreamWorld + + + + + + + + + + Drive Cleaner + 1992 + Seven Hills Software + + + + + + + + + + Designer Prints + 1989 + MECC + + + + + + + + + + Designer Puzzles + 1990 + MECC + + + + + + + + + + Designasaurus + 1988 + Designware + + + + + + + + + + + + + + + + + + + + Dueling Questions + 1988 + Coyote Computing + + + + + + + + + + DuelTris + 1992 + DreamWorld + + + + + + + + + + Diversi-Tune + 1988 + Diversified Software Research + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Deluxe Write + 1988 + Electronic Arts + + + + + + + + + + Design Your Own Home - Architecture + 1988 + Abracadata + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Design Your Own Home - Interiors + 1988 + Abracadata + + + + + + + + + + + + + + + Design Your Own Home - Landscape + 1988 + Abracadata + + + + + + + + + + ECC Demo + 1990 + East Coast Connection + + + + + + + + + + Electric Crayon + 1999 + Polarware + + + + + + + + + + Express v2.1 + 1993 + Seven Hills Software + + + + + + + + + + Fantavision + 1987 + Brøderbund + + + + + + + + + + Fast Break + 1989 + Accolade + + + + + + + + + + Faxination + 1995 + Vitesse Software + + + + + + + + + + Final Assault + 1989 + Epyx + + + + + + + + + + Full Metal Planete + 1993 + Infogrames + + + + + + + + + + Foundation v1.02 + 1992 + Lunar Productions + + + + + + + + + + Font Factory v1.3 + 1991 + Seven Hills Software + + + + + + + + + + Font Factory v2.0 + 1991 + Seven Hills Software + + + + + + + + + + Formulate + 1991 + Seven Hills Software + + + + + + + + + + + + + + + Fractal Explorer + 1988 + Micro Eclat + + + + + + + + + + Future Shock 3D + 1989 + Neeka Electronics + + + + + + + + + + Gauntlet + 1988 + Mindscape + + + + + + + + + + GBA Championship Basketball - Two-on-Two + 1987 + Gamestar / Activision + + + + + + + + + + Genesys v1.24 Updater + 1989 + Simple Software Systems International + + + + + + + + + + Genesys v1.2 + 1989 + Simple Software Systems International + + + + + + + + + + + + + + + Genesys v1.3 + 1991 + Simple Software Systems International + + + + + + + + + + + + + + + Geographic Jigsaw + 1990 + Eclat Micro Products + + + + + + + + + + Geometry + 1988 + Brøderbund + + + + + + + + + + + + + + + + + + + + Geo Puzzle USA + 1990 + PC Globe + + + + + + + + + + Geo Quiz + 1990 + PC Globe + + + + + + + + + + Global Express Atlas + 1989 + Orange Cherry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Golden Album - Jazz (for Music Studio) + 1987 + M.C.S. + + + + + + + + + + Golden Album - Rock (for Music Studio) + 1987 + M.C.S. + + + + + + + + + + + + + + + GNO-ME + 1991 + Procyon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gnarly Golf [cracked] + 1989 + Fanfare by Britannica + + + + + + + + + + + + + + + Gold of the Americas + 1991 + SSG + + + + + + + + + + Gold Rush + 1989 + Sierra + + + + + + + + + + + + + + + + + + + + + + + + + Grand Prix Circuit + 1989 + Accolade + + + + + + + + + + The Graphic Exchange + 1989 + Roger Wagner Publishing + + + + + + + + + + Grizzly Bears + 1988 + Advanced Ideas + + + + + + + + + + + + + + + Greek Mythology + 1991 + Orange Cherry + + + + + + + + + + + + + + + + + + + + Graphics Supermarket + 1987 + Abracadata + + + + + + + + + + Graphics Studio + 1988 + Accolade + + + + + + + + + + GS Desk Accessories + 1989 + Beagle Bros. + + + + + + + + + + GS Font Editor + 1989 + Beagle Bros. + + + + + + + + + + GS Invaders v1.0 + 1994 + David Ong Tat-Wee + + + + + + + + + + GS Numerics + 1990 + Spring Branch Software + + + + + + + + + + Graphic Writer III v1.0 + 1989 + Seven Hills Software + + + + + + + + + + + + + + + Graphic Writer III v1.1 + 1989 + Seven Hills Software + + + + + + + + + + + + + + + + + + + + Graphic Writer III v2.0 Update Disk + 1989 + Seven Hills Software + + + + + + + + + + Graphic Writer III + 1989 + DataPak + + + + + + + + + + Great Western Shootout + 1989 + Fanfare by Britannica + + + + + + + + + + Hacker II + 1987 + Activision + + + + + + + + + + Halls of Montezuma + 1990 + SSG + + + + + + + + + + + + + + + Hot & Cool Jazz (for Instant Music) + 1987 + Instant Music + + + + + + + + + + Hardball! + 1987 + Accolade + + + + + + + + + + Hostage + 1990 + Mindscape + + + + + + + + + + HardPressed v1.02 + 1993 + Westcode Software + + + + + + + + + + Hover Blade + 1991 + MCX + + + + + + + + + + + + + + + HyperCard IIgs v1.1 + 1990 + Apple Computer, Inc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HyperStudio v2.0 + 1989 + Roger Wagner Publishing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HyperStudio v3.1 + 1989 + Roger Wagner Publishing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Iconix + 1988 + So What Software + + + + + + + + + + Infolab Chemistry + 1988 + Clifford West & Ramon Zamora + + + + + + + + + + + + + + + Infolab Life Science + 1988 + Clifford West & Ramon Zamora + + + + + + + + + + + + + + + The Immortal + 1990 + Electronic Arts + + + + + + + + + + + + + + + Impossible Mission II + 1989 + Epyx + + + + + + + + + + Independence + 1991 + Seven Hills Software + + + + + + + + + + Instrument Designer + 1988 + PyWare + + + + + + + + + + + + + + + Instant Music + 1987 + Electronic Arts + + + + + + + + + + Instant Synthesizer + 1988 + Electronic Arts + + + + + + + + + + + + + + + It's Only Rock'n'Roll (for Instant Music) + 1987 + Electronic Arts + + + + + + + + + + Jam Session + 1989 + Brøderbund + + + + + + + + + + + + + + + John Elway's Quarterback + 1989 + Melbourne House + + + + + + + + + + Jigsaw + 1988 + Britannica Software + + + + + + + + + + + + + + + Jack Nicklaus Greatest 18 Holes of Major Championship Golf + 1989 + Accolade + + + + + + + + + + + + + + + + + + + + + + + + + Jungle Safari + 1991 + Orange Cherry + + + + + + + + + + + + + + + Kaleidokubes + 1989 + Artworx + + + + + + + + + + Kangeroo v1.3 + 1992 + Seven Hills Software + + + + + + + + + + Kangeroo v1.5 (French) + 1992 + Seven Hills Software + + + + + + + + + + Katie's Farm + 1990 + Lawrence Productions + + + + + + + + + + + + + + + Keef the Thief [cracked] + 1989 + Naughty Dog / Electronic Arts + + + + + + + + + + + + + + + Kidstime II + 1986 + Great Wave Software + + + + + + + + + + Kid Talk + 1987 + First Byte + + + + + + + + + + Kid Writer Gold + 1989 + Spinnaker Software + + + + + + + + + + Kinderama + 1989 + Unicorn Software + + + + + + + + + + + + + + + King of Chicago + 1989 + Cinemaware + + + + + + + + + + + + + + + King's Quest + 1987 + Sierra + + + + + + + + + + + + + + + King's Quest II - Romancing The Throne + 1988 + Sierra + + + + + + + + + + + + + + + King's Quest III + 1988 + Sierra + + + + + + + + + + + + + + + King's Quest IV + 1989 + Sierra + + + + + + + + + + + + + + + + + + + + Last Rites Demo + 1991 + Corrosive Software + + + + + + + + + + Life & Death + 1989 + The Software Toolworks + + + + + + + + + + + + + + + Life Guard + 1987 + Harbor Software + + + + + + + + + + Lisa816 v5.433 + 1988 + Hal Labs + + + + + + + + + + List Plus + 1987 + Activision + + + + + + + + + + Land of the Unicorn + 1988 + Unicorn Software + + + + + + + + + + + + + + + + + + + + + + + + + Logowriter GS + 1989 + Logo Computer Systems + + + + + + + + + + The Lost Tribe + 1992 + Lawrence Productions + + + + + + + + + + + + + + + + + + + + Learning Spoken English + 1986 + Coursemaker International + + + + + + + + + + Leisure Suit Larry in the Land of the Lounge Lizards + 1987 + Sierra + + + + + + + + + + + + + + + Laser Force + 1989 + Fanfare by Britannica + + + + + + + + + + The Last Ninja (clean crack) + 1987 + Activision + + + + + + + + + + Micol Advanced BASIC v3.0 + 1989 + Micol Systems + + + + + + + + + + + + + + + Micol Advanced BASIC v4.2 + 1989 + Micol Systems + + + + + + + + + + + + + + + Macs Headroom + 1993 + Imperial Guild Kansas + + + + + + + + + + Mad Match + 1989 + Baudville + + + + + + + + + + Micol Advanced BASIC v5.0 + 1989 + Micol Systems + + + + + + + + + + + + + + + + + + + + + + + + + Magic Johnson's Basketball (unreleased) + 1989 + Melbourne House + + + + + + + + + + Magical Myths + 1988 + Unicorn Software + + + + + + + + + + + + + + + Mancala + 1988 + California Dreams + + + + + + + + + + Manhunter: New York [cracked] + 1988 + Sierra + + + + + + + + + + + + + + + + + + + + + + + + + Le Manoir de Mortevielle + 1989 + Lankhor + + + + + + + + + + Marble Madness + 1988 + Electronic Arts + + + + + + + + + + Math Blaster Plus! + 1989 + Davidson and Associates + + + + + + + + + + Math and Me + 1988 + Davidson and Associates + + + + + + + + + + Mathtalk + 1987 + First Byte + + + + + + + + + + Mathtalk Fractions + 1987 + First Byte + + + + + + + + + + Mavis Beacon Teaches Typing + 1987 + The Software Toolworks + + + + + + + + + + + + + + + Mazer II + 1992 + Big Red Computer Club + + + + + + + + + + McGee At The Fun Fair + 1990 + Lawrence Productions + + + + + + + + + + + + + + + McGee + 1990 + Lawrence Productions + + + + + + + + + + + + + + + Music Composer + 1993 + W. Juniel Clayburn III + + + + + + + + + + Music Construction Set + 1996 + Electronic Arts + + + + + + + + + + + + + + + MD-BASIC v1.1 + 1989 + Morgan Davis Group + + + + + + + + + + MD-BASIC v3.2 + 1990 + Morgan Davis Group + + + + + + + + + + Mean 18 + 1987 + Accolade + + + + + + + + + + + + + + + + + + + + + + + + + Medley v2.0 + 1989 + Milliken Publishing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mercury + 1990 + MECC + + + + + + + + + + Merlin 16+ v4.68 + 1989 + Roger Wagner Publishing + + + + + + + + + + + + + + + + + + + + Mini Putt - The Ultimate Challenge + 1988 + Accolade + + + + + + + + + + Mighty Marvel vs. The Forces of Evil + 1988 + ISM + + + + + + + + + + + + + + + Mixed Up Mother Goose + 1988 + Sierra + + + + + + + + + + + + + + + Modulae + 1990 + Free Tools Association + + + + + + + + + + Monte Carlo + 1988 + PBI Software + + + + + + + + + + Milestones 2000 + 1990 + Ken Franklin + + + + + + + + + + MS-DOS Tools v2.21 + 1994 + Peter Watson + + + + + + + + + + Music Studio Songs (for Music Studio) + 1988 + <unknown> + + + + + + + + + + + + + + + + + + + + Milliken Story Teller + 1989 + Milliken Publishing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Math Wizard + 1988 + Unicorn Software + + + + + + + + + + + + + + + Master Tracks Junior + 1988 + Passport Designs + + + + + + + + + + Master Tracks Pro + 1989 + Passport Designs + + + + + + + + + + Music Studio 2.0 + 1987 + Activision + + + + + + + + + + + + + + + Music Writer Pro v1.42 + 1988 + PyWare + + + + + + + + + + Music Writer v2 + 1988 + PyWare + + + + + + + + + + My Paint + 1990 + Saddleback Graphics + + + + + + + + + + + + + + + + + + + + Mr. Py and I + 1989 + Pygraphics + + + + + + + + + + + + + + + National Geographic Kids Network + 1989 + National Geographic Society + + + + + + + + + + Neuromancer + 1989 + Interplay + + + + + + + + + + Newspaper Maker + 1990 + Orange Cherry + + + + + + + + + + + + + + + Nexus + 1989 + Datasmith + + + + + + + + + + NFC Megademo + 1997 + NinjaForce + + + + + + + + + + + + + + + Notes 'n' Files + 1987 + Datapak Software + + + + + + + + + + Nathan Page Studio Jazz (for Diversi-Tune) + 1989 + Nathan Hugo's Music + + + + + + + + + + NoiseTracker GS + 1992 + Free Tools Association + + + + + + + + + + Nucleus + 1989 + Free Tools Association + + + + + + + + + + Oil Landers + 1991 + Free Tools Association + + + + + + + + + + Omega + 1990 + Origin Systems + + + + + + + + + + Once Upon A Time II + 1989 + Compu-Teach + + + + + + + + + + + + + + + Once Upon A Time III + 1990 + Compu-Teach + + + + + + + + + + + + + + + + + + + + Once Upon A Time + 1988 + Compu-Teach + + + + + + + + + + + + + + + One Arm Battle + 1990 + Ken Franklin + + + + + + + + + + Paint 256 + 1990 + Godfreys Software + + + + + + + + + + Paperboy + 1988 + Mindscape + + + + + + + + + + Passengers on the Wind + 1988 + Infogrames + + + + + + + + + + Photonix II v2.3 + 1990 + Free Tools Association / Toolbox + + + + + + + + + + Pick 'n Pile + 1990 + Procyon + + + + + + + + + + Picture Ripper + 1991 + Ninja Force + + + + + + + + + + Pinball Wizard + 1987 + Accolade + + + + + + + + + + Pipe Dream (clean crack) + 1990 + Lucasfilm Games + + + + + + + + + + Pirates! + 1988 + Microprose + + + + + + + + + + Platinum Paint v1.0.1 + 1990 + Beagle Bros. + + + + + + + + + + Platinum Paint v2.0 + 1990 + Beagle Bros. + + + + + + + + + + + + + + + Plotting + 1991 + Once Product + + + + + + + + + + Plunder + 1990 + Ken Franklin + + + + + + + + + + PMP UnZip + 1992 + Paul Parkhurst + + + + + + + + + + Project Neptune (unreleased) + 1989 + Epyx + + + + + + + + + + Panzer Battles + 1991 + SSG + + + + + + + + + + + + + + + Police Quest + 1987 + Sierra + + + + + + + + + + + + + + + Poly Sons 5 + 1992 + Babar de Saint Cyr + + + + + + + + + + Postcards + 1987 + Activision + + + + + + + + + + The Print Shop + 1987 + Brøderbund + + + + + + + + + + Prism + 1992 + New Concepts + + + + + + + + + + The Print Shop Companion + 1990 + Brøderbund + + + + + + + + + + Probe GS + 1987 + KPW Software + + + + + + + + + + ProSel-16 + 1990 + Glen E. Bredon + + + + + + + + + + ProSel-16 v8.40 + 1990 + Glen E. Bredon + + + + + + + + + + ProSel-16 v8.9 + 1990 + Glen E. Bredon + + + + + + + + + + Print Shop Graphics Library - Border + 1987 + Brøderbund + + + + + + + + + + Print Shop Graphics Library - Party Library + 1987 + Brøderbund + + + + + + + + + + Print Shop Graphics Library - Sampler Edition + 1987 + Brøderbund + + + + + + + + + + Print Shop Graphics Library - Special Edition + 1987 + Brøderbund + + + + + + + + + + Print Shop InCider Data + 1987 + Brøderbund + + + + + + + + + + + + + + + Print Shop Lovers Utility Set + 1988 + Big Red Computer Club + + + + + + + + + + Puzznic (unreleased) + 1990 + Taito + + + + + + + + + + Paintworks Gold v1.0 [cr Digital Gang] + 1988 + Activision + + + + + + + + + + Paintworks Gold v1.5 + 1988 + Activision + + + + + + + + + + + + + + + Paintworks Plus + 1986 + Activision + + + + + + + + + + Qix + 1990 + Taito + + + + + + + + + + Quest for the Hoard + 1991 + Pegasoft + + + + + + + + + + Questmaster 1 - The Prism of Heheutotol + 1990 + Miles Computing + + + + + + + + + + + + + + + + + + + + Questron II + 1988 + SSI + + + + + + + + + + Rade + 1992 + Morgan Davis Group + + + + + + + + + + Rastan [cr East Coast Connection] + 1990 + Taito + + + + + + + + + + + + + + + Rastan [cr Computist Magazine][t lives] + 1990 + Taito + + + + + + + + + + + + + + + Reach for the Stars + 1988 + SSG + + + + + + + + + + Readable Classic Tales + 1991 + Orange Cherry + + + + + + + + + + + + + + + + + + + + Read-a-Rama + 1989 + Unicorn Software + + + + + + + + + + + + + + + + + + + + Reader Rabbit + 1987 + The Learning Company + + + + + + + + + + Reading About Fish + 1988 + Orange Cherry + + + + + + + + + + Reading Magic + 1989 + Tom Snyder Productions + + + + + + + + + + Reading About Reptiles + 1988 + Orange Cherry + + + + + + + + + + Read & Rhyme + 1988 + Unicorn Software + + + + + + + + + + + + + + + The Hunt for Red October + 1989 + The Software Toolworks + + + + + + + + + + Revolution '76 + 1989 + Britannica Software + + + + + + + + + + + + + + + + + + + + Rocket Ranger + 1989 + Cinemaware + + + + + + + + + + + + + + + Roadwar 2000 + 1987 + SSI + + + + + + + + + + Runaway Robots + 1988 + PBI Software + + + + + + + + + + The Revenge of the Bobs + 1992 + NinjaForce + + + + + + + + + + Apple IIgs Sales Demo + 1986 + Apple Computer, Inc. + + + + + + + + + + + + + + + Salvation Supreme + 1991 + Vitesse Software + + + + + + + + + + + + + + + The Secrets of Bahras [cr Club 96] + 1991 + Victory Software + + + + + + + + + + + + + + + + + + + + Sea Strike + 1987 + PBI Software + + + + + + + + + + Sensei + 1991 + Miami Software + + + + + + + + + + Shanghai + 1987 + Activision + + + + + + + + + + Space Harrier Demo + 1990 + Free Tools Association + + + + + + + + + + Shufflepuck Cafe (unreleased) + 1990 + Brøderbund + + + + + + + + + + Shanghai II - Dragon's Eye + 1993 + Big Red Computer Club + + + + + + + + + + + + + + + Shoebox v1.1 + 1991 + Seven Hills Software + + + + + + + + + + + + + + + + + + + + + + + + + Show Off + 1987 + Brøderbund + + + + + + + + + + + + + + + + + + + + Sierra Games Demo + 1988 + Sierra + + + + + + + + + + Signature GS + 1992 + Quality Computers + + + + + + + + + + + + + + + Silpheed + 1988 + Sierra + + + + + + + + + + + + + + + Sinbad and the Throne of the Falcon + 1990 + Cinemaware + + + + + + + + + + + + + + + Six Pack + 1992 + Quality Computers + + + + + + + + + + Skate Or Die! + 1988 + Electronic Arts + + + + + + + + + + Silent Service + 1987 + Microprose + + + + + + + + + + Solitaire Royale + 1990 + Spectrum Holobyte + + + + + + + + + + Smart Money v1.5 + 1988 + Sierra + + + + + + + + + + Smoothtalker (French) + 1987 + First Byte + + + + + + + + + + Smoothtalker + 1987 + First Byte + + + + + + + + + + SoundSmith + 1990 + Huibert Aalbars + + + + + + + + + + Snoopy's Reading Machine + 1990 + School Publishing Company + + + + + + + + + + Soft Switch + 1988 + Roger Wagner Publishing + + + + + + + + + + Solarian + 1992 + Coloreez + + + + + + + + + + Sonix v1.2 + 1988 + So What Software + + + + + + + + + + Space Ace + 1990 + ReadySoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Space Cluster + 1990 + Miami Software + + + + + + + + + + Space Quest II - Vohaul's Revenge + 1988 + Sierra + + + + + + + + + + + + + + + Space Quest + 1987 + Sierra + + + + + + + + + + + + + + + Space Shark + 1990 + Toolbox + + + + + + + + + + Spectra Graphix Super Music + 1989 + Lynx Computer Products + + + + + + + + + + Spectra Grafix 256 + 1989 + Lynx Computer Products + + + + + + + + + + Spelling Bee + 1987 + First Byte + + + + + + + + + + Splat! v1.04 + 1993 + Procyon + + + + + + + + + + Spirit of Excalibur + 1991 + Virgin Mastertronic + + + + + + + + + + + + + + + + + + + + Super Award Maker + 1990 + Orange Cherry + + + + + + + + + + + + + + + Space Shuttle Word Problems + 1991 + Orange Cherry + + + + + + + + + + SoundSmith Data (songs for SoundSmith) + 1991 + <unknown> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Superstar Ice Hockey (clean crack) + 1988 + Mindscape + + + + + + + + + + FUN Instruments vols. 1-5 (for SoundSmith) + 1989 + Huibert Aalbers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SoundSmith Christmas Songs + 1989 + <unknown> + + + + + + + + + + Star Saga: One - Beyond the Boundary + 1988 + Masterplay + + + + + + + + + + Star Saga: Two - The Clathran Menace + 1988 + Masterplay + + + + + + + + + + Stickybear Talking ABCs + 1988 + Weekly Reader Software + + + + + + + + + + + + + + + Stickybear Talking Opposites + 1988 + Weekly Reader Software + + + + + + + + + + Stickybear Talking Shapes + 1988 + Weekly Reader Software + + + + + + + + + + Strategic Conquest + 1986 + PBI Software + + + + + + + + + + Strip Poker II + 1987 + Artworx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Street Sports Soccer + 1988 + Epyx + + + + + + + + + + Stars & Planets + 1990 + Advanced Ideas + + + + + + + + + + Storybook Viewer + 1990 + MECC + + + + + + + + + + Storybook Weaver World of Make Believe + 1991 + MECC + + + + + + + + + + Storybook Weaver World of Adventure + 1991 + MECC + + + + + + + + + + Sub Battle Simulator + 1987 + Epyx + + + + + + + + + + Subversion v1.0 + 1992 + Point of View Computing + + + + + + + + + + Super Convert 4 + 1990 + Seven Hills Software + + + + + + + + + + Super Menu Pack + 1993 + Seven Hills Software + + + + + + + + + + Super Puzzles + 1989 + Lynx Computer Products + + + + + + + + + + + + + + + Softwood GSFile v2.0 + 1987 + Softwood Company + + + + + + + + + + + + + + + Switch-It! + 1992 + Procyon + + + + + + + + + + Symbolix v1.9 + 1990 + Seven Hills Software + + + + + + + + + + System Software v1.1 + 1986 + Apple Computer, Inc. + + + + + + + + + + System Software v3.1 + 1987 + Apple Computer, Inc. + + + + + + + + + + System Software v3.2 + 1987 + Apple Computer, Inc. + + + + + + + + + + System Software v4.0 + 1988 + Apple Computer, Inc. + + + + + + + + + + + + + + + System Software v5.0.2 + 1989 + Apple Computer, Inc. + + + + + + + + + + + + + + + System Software v5.0.4 + 1990 + Apple Computer, Inc. + + + + + + + + + + + + + + + System Software v6.0.1 + 1993 + Apple Computer, Inc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Talking First Dinosaur Reader + 1991 + Orange Cherry + + + + + + + + + + + + + + + + + + + + Talking First Reader + 1989 + Orange Cherry + + + + + + + + + + Talking First Words + 1990 + Orange Cherry + + + + + + + + + + + + + + + Talking First Writer + 1989 + Orange Cherry + + + + + + + + + + + + + + + Talking ABCs + 1988 + Orange Cherry + + + + + + + + + + + + + + + Talking Alpha Chimp + 1989 + Orange Cherry + + + + + + + + + + + + + + + Talking Addition & Subtraction + 1990 + Orange Cherry + + + + + + + + + + Talking Animals + 1989 + Orange Cherry + + + + + + + + + + Talking Clock + 1988 + Orange Cherry + + + + + + + + + + Talking Colors and Shapes + 1988 + Orange Cherry + + + + + + + + + + + + + + + Talking Classroom + 1990 + Orange Cherry + + + + + + + + + + + + + + + Talking Dinosaurs + 1989 + Orange Cherry + + + + + + + + + + Talking Money + 1988 + Orange Cherry + + + + + + + + + + Talking Multiplication & Division + 1991 + Orange Cherry + + + + + + + + + + + + + + + Talking Numbers + 1989 + Orange Cherry + + + + + + + + + + Talking Reading Railroad + 1989 + Orange Cherry + + + + + + + + + + + + + + + Talking School Bus + 1989 + Orange Cherry + + + + + + + + + + + + + + + Talking Speller II + 1990 + Orange Cherry + + + + + + + + + + Talking Tools + 1990 + The Byte Works + + + + + + + + + + + + + + + tarot + 1990 + Toolbox + + + + + + + + + + Task Force [cr DreamWorld Society][t health] + 1990 + Fanfare by Britannica Software + + + + + + + + + + + + + + + Tass Times in Tonetown + 1986 + Activision + + + + + + + + + + Toolbox Mag #1 + 1990 + Toolbox + + + + + + + + + + Toolbox Mag #2 + 1990 + Toolbox + + + + + + + + + + Toolbox Mag #3 + 1991 + Toolbox + + + + + + + + + + Toolbox Mag #4 + 1991 + Toolbox + + + + + + + + + + Toolbox Mag #5 + 1991 + Toolbox + + + + + + + + + + Toolbox Mag #6 + 1991 + Toolbox + + + + + + + + + + + + + + + Toolbox Mag #7 + 1991 + Toolbox + + + + + + + + + + + + + + + Test Drive II: The Duel [cr The Torcher Chamber] + 1989 + Accolade + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Teenage Queen + 1990 + Infogrames + + + + + + + + + + Teleworks Plus + 1988 + Activision + + + + + + + + + + Tetris + 1988 + Spectrum Holobyte + + + + + + + + + + The Beam + 1989 + Apple Chemical Software + + + + + + + + + + The Gate + 1992 + Seven Hills Software + + + + + + + + + + + + + + + + + + + + The Manager v1.2 + 1990 + Seven Hills Software + + + + + + + + + + The Manager v1.5 + 1990 + Seven Hills Software + + + + + + + + + + Thexder v2.7 (clean crack) + + 1987 + Sierra + + + + + + + + + + Thexder v1 (no OS, not self booting) (clean crack) + + + 1987 + Sierra + + + + + + + + + + The Third Courier + 1989 + Accolade + + + + + + + + + + + + + + + Timelord (demo) + 1992 + DreamWorld + + + + + + + + + + The Tinies + 1994 + Brutal Deluxe + + + + + + + + + + TML BASIC + 1987 + TML Systems + + + + + + + + + + TML Pascal II + 1987 + TML Systems + + + + + + + + + + Tomahawk [cr The Gryphon] + 1988 + Datasoft + + + + + + + + + + Top Draw + 1989 + Styleware + + + + + + + + + + Your Tour of the Apple IIgs (revised, beta) + 1988 + Apple Computer, Inc. + + + + + + + + + + Your Tour of the Apple IIgs (original) + 1986 + Apple Computer, Inc. + + + + + + + + + + Your Tour of the Apple IIgs (revised) + 1989 + Apple Computer, Inc. + + + + + + + + + + Trans Prog III + 1990 + Seven Hills Software + + + + + + + + + + TrianGO + 1988 + California Dreams + + + + + + + + + + Transylvania III + 1990 + Polarware + + + + + + + + + + + + + + + Transylvania + 1987 + Polarware + + + + + + + + + + + + + + + TTC Demo + 1991 + TTC + + + + + + + + + + Tunnels of Armageddon + 1990 + California Dreams + + + + + + + + + + Twilight II v1.1 + 1991 + DYA + + + + + + + + + + + + + + + The Tower of Myraglen + 1987 + PBI Software + + + + + + + + + + + + + + + Typing Tutor IV + 1989 + Simon & Schuster + + + + + + + + + + The Ugly Duckling + 1989 + The Byte Works + + + + + + + + + + + + + + + UniDOS 3.3 Plus v2.0.1 + + 1986 + Microsparc, Inc. + + + + + + + + + + UniDOS Plus v2.1 + + 1986 + Microsparc, Inc. + + + + + + + + + + Uninvited [cr The Torcher Chamber] + 1988 + Mindscape + + + + + + + + + + Universe Master v1.01 + 1992 + Econ Technologies + + + + + + + + + + USA Geography + 1989 + MECC + + + + + + + + + + + + + + + Utility Works + 1992 + George R. Wilde + + + + + + + + + + Vegas Craps + 1988 + California Dreams + + + + + + + + + + Vindicators (unreleased) + 1989 + Tengen / Atari Games + + + + + + + + + + Virus M.D. v2.1 + 1992 + Morgan Davis Group + + + + + + + + + + Visualizer v1.08 + 1986 + PBI Software + + + + + + + + + + Volcanoes Deluxe + 1988 + Earthwave Services + + + + + + + + + + Warlock + 1988 + Three-Sixty Pacific + + + + + + + + + + War in Middle Earth + 1989 + Melbourne House + + + + + + + + + + + + + + + Writer's Choice Elite + 1987 + Activision + + + + + + + + + + Whales + 1989 + Advanced Ideas + + + + + + + + + + + + + + + Windwalker [cr Club 96] + 1990 + Origin Systems + + + + + + + + + + + + + + + Wings + 1990 + Vitesse Software + + + + + + + + + + + + + + + World Games + 1987 + Epyx + + + + + + + + + + World Tour Golf + 1987 + Electronic Arts + + + + + + + + + + Winter Games + 1987 + Epyx + + + + + + + + + + Word Master + 1989 + Unicorn Software + + + + + + + + + + WordPerfect v2.1 + 1987 + WordPerfect Corp. + + + + + + + + + + + + + + + + + + + + World Geograph + 1989 + MECC + + + + + + + + + + + + + + + Weather Forecast + 1988 + Orange Cherry + + + + + + + + + + Weather Station + 1988 + Orange Cherry + + + + + + + + + + Xenocide + 1989 + Pangea Software / Micro Revelations + + + + + + + + + + Xmas Demo + 1990 + Free Tools Association / GS Alliance + + + + + + + + + + Zany Golf + 1988 + Electronic Arts + + + + + + + + + + ZZ Copy v2.21 + 1990 + Miami Software + + + + + + + + + diff --git a/hash/apple2gs_flop_orig.xml b/hash/apple2gs_flop_orig.xml new file mode 100644 index 00000000000..2bf20816e41 --- /dev/null +++ b/hash/apple2gs_flop_orig.xml @@ -0,0 +1,2077 @@ + + + + + + + + Rastan + 1990 + Taito + + + + + + + + + + + + + + + + + + + + + + Zany Golf + 1988 + Electronic Arts + + + + + + + + + + + + + + + Marble Madness + 1986 + Electronic Arts + + + + + + + + + + + + + + + Qix + 1990 + Taito + + + + + + + + + + + + + + + + Tass Times in Tonetown + 1986 + Activision + + + + + + + + + + + + + + + World Games + 1987 + Epyx + + + + + + + + + + + + + + Gauntlet + 1988 + Mindscape + + + + + + + + + + + + + + Battle Chess + 1989 + Interplay + + + + + + + + + + + + + + + Blackjack Academy + 1987 + MicroIllusions + + + + + + + + + + + + + + + Block Out + 1989 + California Dreams + + + + + + + + + + + + + + + Xenocide + 1989 + Micro Revelations + + + + + + + + + + + + + + + Alien Mind + 1988 + PBI Software + + + + + + + + + + + + + + + + + + + + + + Gold Rush! + 1988 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Uninvited + 1988 + ICOM Simulations + + + + + + + + + + + + + + + + + + + + + + Cavern Cobra + 1987 + PBI Software + + + + + + + + + + + + + + + Hardball! + 1987 + Accolade + + + + + + + + + + + + + + + Task Force + 1990 + Britannica Software + + + + + + + + + + + + + + + + + + + + + + Shadowgate + 1988 + ICOM Simulations + + + + + + + + + + + + + + + + + + + + + + Serve and Volley + 1988 + Accolade + + + + + + + + + + + + + + + California Games + 1988 + Epyx + + + + + + + + + + + + + + + Sea Strike + 1987 + PBI Software + + + + + + + + + + + + + + + The Duel: Test Drive II + 1989 + Accolade + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Keef the Thief + 1989 + Electronic Arts + + + + + + + + + + + + + + + + + + + + + + Grand Prix Circuit + 1989 + Accolade + + + + + + + + + + + + + + + Crystal Quest + 1989 + Cassidy and Greene + + + + + + + + + + + + + + + Impossible Mission II + 1989 + Epyx + + + + + + + + + + + + + + + The Last Ninja + 1988 + Activision + + + + + + + + + + + + + + + The Hunt for Red October + 1989 + The Software Toolworks + + + + + + + + + + + + + + Final Assault + 1988 + Epyx + + + + + + + + + + + + + + Dark Castle + 1989 + Three Sixty + + + + + + + + + + + + + + + + + + + + + Silent Service + 1987 + Microprose + + + + + + + + + + + + + + GATE + 1992 + Seven Hills Software + + + + + + + + + + + + + + + + + + + + + Balance of Power: The 1990 Edition + 1990 + Mindscape + + + + + + + + + + + + + + Bridge 6.0 (Version 2.49B) + 1989 + Artworx + + + + + + + + + + + + + + Questron II (Version 1.1) + 1988 + Strategic Simulations + + + + + + + + + + + + + + Reach for the Stars + 1988 + Strategic Studies Group + + + + + + + + + + + + + + Roadwar 2000 + 1987 + Strategic Simulations + + + + + + + + + + + + + + Superstar Ice Hockey + 1988 + Mindscape + + + + + + + + + + + + + + Life and Death + 1989 + The Software Toolworks + + + + + + + + + + + + + + + + + + + + + Tetris + 1988 + Spectrum HoloByte + + + + + + + + + + + + + + LaserForce + 1989 + Fanfare + + + + + + + + + + + + + + + + + + + + + Arkanoid II: Revenge of Doh + 1989 + Taito + + + + + + + + + + + + + + Bubble Ghost + 1988 + Accolade + + + + + + + + + + + + + + Déjà Vu + 1988 + ICOM Simulations + + + + + + + + + + + + + + + + + + + + + Hacker II + 1987 + Activision + + + + + + + + + + + + + + Destroyer + 1987 + Epyx + + + + + + + + + + + + + + GBA Championship Basketball + 1987 + Activision + + + + + + + + + + + + + + Jigsaw + 1988 + Britannica Software + + + + + + + + + + + + + + + + + + + + + Mini-Putt + 1988 + Accolade + + + + + + + + + + + + + + Omega + 1988 + Origin Systems + + + + + + + + + + + + + + Photonix (Version 1.46) + 1989 + Free Tools Association + + + + + + + + + + + + + + Silpheed + 1987 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + Space Quest + 1987 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + The Third Courier + 1989 + Accolade + + + + + + + + + + + + + + + + + + + + + War in Middle Earth + 1989 + Melbourne House + + + + + + + + + + + + + + + + + + + + + Where in the World is Carmen Sandiego? + 1989 + Broderbund Software + + + + + + + + + + + + + + + + + + + + + Windwalker + 1990 + Origin Systems + + + + + + + + + + + + + + + + + + + + + Warlock + 1988 + Three-Sixty Pacific + + + + + + + + + + + + + + Winter Games + 1987 + Epyx + + + + + + + + + + + + + + Shanghai + 1987 + Activision + + + + + + + + + + + + + + Police Quest + 1987 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + Dragon Wars + 1990 + Interplay Productions + + + + + + + + + + + + + + Monte Carlo + 1987 + PBI Software + + + + + + + + + + + + + + Sub Battle Simulator + 1987 + Epyx + + + + + + + + + + + + + + John Elway's Quarterback + 1989 + Melbourne House + + + + + + + + + + + + + + Space Quest II + 1988 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + King's Quest III + 1988 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + Great Western Shootout + 1989 + Britannica Software + + + + + + + + + + + + + + + + + + + + + Leisure Suit Larry in the Land of the Lounge Lizards + 1987 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + The Black Cauldron + 1987 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + The King of Chicago + 1988 + Cinemaware + + + + + + + + + + + + + + + + + + + King's Quest IV: The Perils of Rosella + 1989 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + Star Saga: One - Beyond The Boundary (Version 1.1) + 1987 + Masterplay Publishing Corporation + + + + + + + + + + + + + + Déjà Vu II: Lost in Las Vegas + 1989 + Mindscape + + + + + + + + + + + + + + The Tower of Myraglen + 1987 + PBI Software + + + + + + + + + + + + + + + + + + + + + Downhill Challenge + 1989 + Broderbund Software + + + + + + + + + + + + + + + + + + + + + World Tour Golf + 1987 + Electronic Arts + + + + + + + + + + + + + + Vegas Gambler + 1988 + California Dreams + + + + + + + + + + + + + + The Fidelity Chessmaster 2100 + 1988 + The Software Toolworks + + + + + + + + + + + + + + + + + + + + + Space Ace + 1990 + ReadySoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Arkanoid + 1988 + Taito + + + + + + + + + + + + + + Jack Nicklaus' Greatest 18 Holes of Major Championship Golf + 1989 + Accolade + + + + + + + + + + + + + + + + + + + + + Hostage: Rescue Mission + 1990 + Mindscape + + + + + + + + + + + + + + Captain Blood + 1989 + Mindscape + + + + + + + + + + + + + + Where in the U.S.A. is Carmen Sandiego? + 1989 + Broderbund Software + + + + + + + + + + + + + + + + + + + + + The Bard's Tale: Tales of the Unknown + 1987 + Electronic Arts + + + + + + + + + + + + + + Neuromancer + 1989 + Interplay Productions + + + + + + + + + + + + + + Dream Zone + 1987 + Baudville + + + + + + + + + + + + + + + + + + + + + Manhunter: New York + 1987 + Sierra On-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mean 18 + 1987 + Accolade + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hover Blade + 1991 + MCX + + + + + + + + + + + + + + + + + + + + + Fast Break + 1989 + Accolade + + + + + + + + + + + + + + Halls of Montezuma + 1990 + Strategic Simulations + + + + + + + + + + + + + + + + + + + + + Star Saga: Two - The Clathran Menace + 1988 + MasterPlay Publishing Corporation + + + + + + + + + + + + + + Club Backgammon + 1988 + California Dreams + + + + + + + + + + + + + + Beyond Zork: The Coconut of Quendor (Revision 57 / 871221) + 1987 + Infocom + + + + + + + + + + + + + + 2088: The Cryllan Mission - The Second Scenario + 1990 + Victory Software + + + + + + + + + + + + + + + + + + + + + + + + + + + Defender of the Crown + 1988 + Cinemaware + + + + + + + + + + + + + + + + + + + + + Skate or Die + 1988 + Electronic Arts + + + + + + + + + + + + + + Street Sports Soccer + 1988 + Epyx + + + + + + + + + + + + + + Out of this World + 1992 + Interplay Productions + + + + + + + + + + + + + + + + + + + + + Thexder (Version 2.7) + 1987 + Sierra On-Line + + + + + + + + + + + + + + Tunnels of Armageddon (Version 1.0) + 1989 + California Dreams + + + + + + + + + + + + + diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index 61edd2ce1b0..88757ffc185 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -4955,7 +4955,8 @@ void apple2gs_state::apple2gs(machine_config &config) applefdintf_device::add_35(config, m_floppy[2]); applefdintf_device::add_35(config, m_floppy[3]); - SOFTWARE_LIST(config, "flop35_list").set_original("apple2gs"); + SOFTWARE_LIST(config, "flop35_list").set_original("apple2gs_flop_orig"); // Until we have clean cracks, use this as the default + SOFTWARE_LIST(config, "flop35_misc").set_compatible("apple2gs_flop_misc"); // Legacy software list pre-June 2021 and defaced cracks SOFTWARE_LIST(config, "flop525_clean").set_compatible("apple2_flop_clcracked"); // No filter on clean cracks yet. SOFTWARE_LIST(config, "flop525_orig").set_compatible("apple2_flop_orig").set_filter("A2GS"); // Filter list to compatible disks for this machine. SOFTWARE_LIST(config, "flop525_misc").set_compatible("apple2_flop_misc"); -- cgit v1.2.3 From 80cfd0464e9c38fb9bc3a74b87300f5d1b018488 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Tue, 8 Jun 2021 04:13:10 +0200 Subject: Fix for MT#05385: downtown hiscore table is r/w from protection area (#8155) --- src/mame/drivers/seta.cpp | 24 +++++++++++++++++------- src/mame/includes/seta.h | 2 +- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index 31b4306a1ea..f3c12ed44b7 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -4572,7 +4572,8 @@ static INPUT_PORTS_START( downtown ) PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000) PORT_DIPSETTING( 0x0040, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000) PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000) - PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") + // default "Normal" on Romstar manual, and matches ALL OFF scheme + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) ) @@ -4582,6 +4583,8 @@ static INPUT_PORTS_START( downtown ) PORT_DIPSETTING( 0x0800, "50K Only" ) PORT_DIPSETTING( 0x0400, "100K Only" ) PORT_DIPSETTING( 0x0000, "50K, Every 150K" ) + // TODO: defaults to 2 lives in the Romstar manual, contradicts with DIPSW ALL OFF convention. + // Is it a regional difference? Verify with a Mokugeki Jp manual. PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6") PORT_DIPSETTING( 0x1000, "2" ) PORT_DIPSETTING( 0x3000, "3" ) @@ -12138,12 +12141,15 @@ u16 downtown_state::downtown_protection_r(offs_t offset) case 0xa3: { static const u8 word[] = "WALTZ0"; - if (offset >= 0x100/2 && offset <= 0x10a/2) return word[offset - 0x100/2]; - else return 0; + if (offset >= 0x100/2 && offset <= 0x10a/2) + return word[offset - 0x100/2]; + + // definitely wants to read-back hi-score table from 0x110-0x15f + [[fallthrough]]; } - default: - return m_downtown_protection[offset] & 0xff; } + + return m_downtown_protection[offset] & 0xff; } void downtown_state::downtown_protection_w(offs_t offset, u16 data, u16 mem_mask) @@ -12155,8 +12161,12 @@ void downtown_state::init_downtown() { init_bank6502(); - m_downtown_protection = make_unique_clear(0x200/2); - save_pointer(NAME(m_downtown_protection),0x200/2); + m_downtown_protection = make_unique_clear(0x100); + // TODO: protection RAM area is user clearable from service mode, most likely has some sort of battery backed RAM + // initializing with 0xff is enough for host CPU to catch up and default it with sensible defaults. + for (int i = 0; i < 0x100; i++) + m_downtown_protection[i] = 0xff; + save_pointer(NAME(m_downtown_protection), 0x200/2); m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x2001ff, read16sm_delegate(*this, FUNC(downtown_state::downtown_protection_r))); m_maincpu->space(AS_PROGRAM).install_write_handler(0x200000, 0x2001ff, write16s_delegate(*this, FUNC(downtown_state::downtown_protection_w))); diff --git a/src/mame/includes/seta.h b/src/mame/includes/seta.h index 9bcf747876f..bb290cdc3ba 100644 --- a/src/mame/includes/seta.h +++ b/src/mame/includes/seta.h @@ -279,7 +279,7 @@ protected: u8 m_twineagl_xram[8]; u8 m_twineagl_tilebank[4]; - std::unique_ptr m_downtown_protection; + std::unique_ptr m_downtown_protection; u16 metafox_protection_r(offs_t offset); void twineagl_tilebank_w(offs_t offset, u8 data); -- cgit v1.2.3 From c1744a1b54b2a062da632b89746913d46da3e637 Mon Sep 17 00:00:00 2001 From: ClawGrip Date: Tue, 8 Jun 2021 04:14:42 +0200 Subject: New working clones (#8141) * New working clones ------------------------ Crazy Kong (SegaSA / Sonic bootleg) [Juan Romero, ClawGrip] --- src/mame/drivers/cclimber.cpp | 81 +++++++++++++++++++++++++++++-------------- src/mame/mame.lst | 1 + 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp index b728d654aec..cf812895208 100644 --- a/src/mame/drivers/cclimber.cpp +++ b/src/mame/drivers/cclimber.cpp @@ -1606,7 +1606,7 @@ ROM_START( cclimbrrod ) ROM_END -/* Sets below are Crazy Kong Part II and have an extra screen in attract mode, showing a caged Kong and copyright */ +// Sets below are Crazy Kong Part II and have an extra screen in attract mode, showing a caged Kong and copyright ROM_START( ckongpt2 ) ROM_REGION( 0x6000, "maincpu", 0 ) @@ -1724,6 +1724,34 @@ ROM_START( ckongpt2jeu ) ROM_LOAD( "13.5p", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) ) ROM_END +ROM_START( ckongpt2ss ) + ROM_REGION( 0x6000, "maincpu", 0 ) + ROM_LOAD( "ck2_7.5d", 0x0000, 0x1000, CRC(b27df032) SHA1(57f9be139c610405e3c2fddd7093dfb1277e450e) ) + ROM_LOAD( "ck2_8.5e", 0x1000, 0x1000, CRC(5dc1aaba) SHA1(42b9e5946ffce7c156d114bde68f37c2c34853c4) ) + ROM_LOAD( "ck2_9.5h", 0x2000, 0x1000, CRC(c9054c94) SHA1(1aa08d2501ee620759fd5c111e12f6d432c25294) ) + ROM_LOAD( "ck_10.5k", 0x3000, 0x1000, CRC(923420cb) SHA1(51f809c92a1e7483debbf29e77364d0ab3b863e6) ) // unique + ROM_LOAD( "ck2_11.5l", 0x4000, 0x1000, CRC(ae159192) SHA1(d467256a3a366e246243e7828ff4a45d4c146e2c) ) + ROM_LOAD( "ck_12.5n", 0x5000, 0x1000, CRC(25a015d3) SHA1(8b932cb9ae1ba67b4ff86b7b97be0c31cef23514) ) // unique + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "ck2_6.11n", 0x0000, 0x1000, CRC(2dcedd12) SHA1(dfdcfc21bcba7c8e148ee54daae511ca78c58e70) ) + ROM_LOAD( "ck2_5.11l", 0x1000, 0x1000, CRC(fa7cbd91) SHA1(0208d2ebc59f3600005476b6987472685bc99d67) ) + ROM_LOAD( "ck2_4.11k", 0x2000, 0x1000, CRC(3375b3bd) SHA1(a00b3c31cff123aab6ac0833aabfdd663302971a) ) + ROM_LOAD( "ck2_3.11h", 0x3000, 0x1000, CRC(5655cc11) SHA1(5195e9b2a60c54280b48b32ee8248090904dbc51) ) + + ROM_REGION( 0x1000, "gfx2", 0 ) + ROM_LOAD( "ck2_2.11c", 0x0000, 0x0800, CRC(d1352c31) SHA1(da726a63a8be830d695afeddc1717749af8c9d47) ) + ROM_LOAD( "ck2_1.11a", 0x0800, 0x0800, CRC(a7a2fdbd) SHA1(529865f8bbfbdbbf34ac39c70ef17e6d5bd0f845) ) + + ROM_REGION( 0x0060, "proms", 0 ) + ROM_LOAD( "mb7051.v6", 0x0000, 0x0020, CRC(b3fc1505) SHA1(5b94adde0428a26b815c7eb9b3f3716470d349c7) ) + ROM_LOAD( "mb7051.u6", 0x0020, 0x0020, CRC(26aada9e) SHA1(f59645e606ea4f0dd0fc4ea47dd03f526c534941) ) + ROM_LOAD( "mb7051.t6", 0x0040, 0x0020, CRC(676b3166) SHA1(29b9434cd34d43ea5664e436e2a24b54f8d88aac) ) + + ROM_REGION( 0x2000, "cclimber_audio:samples", 0 ) + ROM_LOAD( "14.5s", 0x0000, 0x1000, CRC(5f0bcdfb) SHA1(7f79bf6de117348f606696ed7ea1937bbf926612) ) + ROM_LOAD( "13.5p", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) ) +ROM_END ROM_START( ckongpt2b ) ROM_REGION( 0x6000, "maincpu", 0 ) @@ -1783,7 +1811,7 @@ ROM_START( ckongpt2b2 ) ROM_LOAD( "6.bin", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) ) ROM_END -/* Sets below are 'Crazy Kong' without the extra Falcon screen or Pt. 2 subtitle, they also have worse colours */ +// Sets below are 'Crazy Kong' without the extra Falcon screen or Pt. 2 subtitle, they also have worse colours ROM_START( ckong ) ROM_REGION( 0x6000, "maincpu", 0 ) @@ -2732,50 +2760,51 @@ void cclimber_state::init_rpatrol() } -GAME( 1980, cclimber, 0, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, cclimbera, cclimber, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, cclimberj, cclimber, cclimberx, cclimberj, cclimber_state, init_cclimberj, ROT0, "Nichibutsu", "Crazy Climber (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, ccboot, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, ccboot2, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, ccbootmr, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg (Model Racing)", "Crazy Climber (Model Racing bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, cclimber, 0, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, cclimbera, cclimber, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, cclimberj, cclimber, cclimberx, cclimberj, cclimber_state, init_cclimberj, ROT0, "Nichibutsu", "Crazy Climber (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, ccboot, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, ccboot2, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, ccbootmr, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg (Model Racing)", "Crazy Climber (Model Racing bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1980, cclimbroper, cclimber, cclimber, cclimber, cclimber_state, empty_init, ROT0, "bootleg (Operamatic)", "Crazy Climber (Spanish, Operamatic bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, cclimbrrod, cclimber, cclimber, cclimber, cclimber_state, empty_init, ROT0, "bootleg (Rodmar)", "Crazy Climber (Spanish, Rodmar bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, cclimbrrod, cclimber, cclimber, cclimber, cclimber_state, empty_init, ROT0, "bootleg (Rodmar)", "Crazy Climber (Spanish, Rodmar bootleg)", MACHINE_SUPPORTS_SAVE ) /* these sets have ugly colours, no extra attract screen, and no graphics for the extra attract screen in the BG roms - there is a Falcon logo in the text roms which is unused - does the code to display the extra screen still exist in the roms? */ -GAME( 1981, ckong, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Kyoei / Falcon", "Crazy Kong", MACHINE_SUPPORTS_SAVE ) // on a Falcon FCK-01 PCB, but doesn't display any Falcon copyright -GAME( 1981, ckongalc, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Alca)", "Crazy Kong (Alca bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, monkeyd, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Monkey Donkey", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, dking, ckong, cclimber, ckong, cclimber_state, init_dking, ROT270, "bootleg", "Donkey King", MACHINE_SUPPORTS_SAVE ) // supposedly, possibly by Hafasonic? +GAME( 1981, ckong, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Kyoei / Falcon", "Crazy Kong", MACHINE_SUPPORTS_SAVE ) // on a Falcon FCK-01 PCB, but doesn't display any Falcon copyright +GAME( 1981, ckongalc, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Alca)", "Crazy Kong (Alca bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, monkeyd, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Monkey Donkey", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, dking, ckong, cclimber, ckong, cclimber_state, init_dking, ROT270, "bootleg", "Donkey King", MACHINE_SUPPORTS_SAVE ) // supposedly, possibly by Hafasonic? GAME( 1981, ckongdks, ckong, cclimber, ckong, cclimber_state, init_dking, ROT270, "bootleg", "Donkey Kong (Spanish Crazy Kong bootleg)", MACHINE_SUPPORTS_SAVE ) /* these sets have correct colours, and also contain the graphics used for the extra attract screen in the BG roms, but it is unused - the Falcon logo in the text roms is still unused - does the code to display the extra screen still exist in the roms? */ GAME( 1981, ckongo, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Orca)", "Crazy Kong (Orca bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, bigkong, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Big Kong", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, bigkong, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Big Kong", MACHINE_SUPPORTS_SAVE ) /* these sets have correct colours, and the extra attract screen, they also make use of the Falcon logo, some sets hack out the Falcon text on the extra screen */ -GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, init_ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ckongpt2b2, ckongpt2, cclimber, ckongb2, cclimber_state, empty_init, ROT270, "bootleg", "Crazy Kong Part II (bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // one PROM differs and seems bad, but dump has been confirmed on multiple PCBs +GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, ckongpt2ss, ckongpt2, cclimber, ckongb2, cclimber_state, empty_init, ROT270, "bootleg (SegaSA / Sonic)", "Crazy Kong (SegaSA / Sonic bootleg)", MACHINE_SUPPORTS_SAVE ) // on a Falcon FCK-00 PCB +GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, init_ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, ckongpt2b2, ckongpt2, cclimber, ckongb2, cclimber_state, empty_init, ROT270, "bootleg", "Crazy Kong Part II (bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // one PROM differs and seems bad, but dump has been confirmed on multiple PCBs // see bagman.cpp for parent GAME( 1982, bagmanf, bagman, bagmanf, bagmanf, cclimber_state, empty_init, ROT270, "bootleg", "Le Bagnard (bootleg on Crazy Kong hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1981, rpatrol, 0, rpatrol, rpatrol, cclimber_state, init_rpatrol, ROT0, "Orca", "River Patrol (Japan)", MACHINE_SUPPORTS_SAVE) +GAME( 1981, rpatrol, 0, rpatrol, rpatrol, cclimber_state, init_rpatrol, ROT0, "Orca", "River Patrol (Japan)", MACHINE_SUPPORTS_SAVE) GAME( 1981, rpatroln, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Orca", "River Patrol (Japan, unprotected)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, rpatrolb, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "bootleg", "River Patrol (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, silvland, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Falcon", "Silver Land", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, rpatrolb, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "bootleg", "River Patrol (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, silvland, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Falcon", "Silver Land", MACHINE_SUPPORTS_SAVE ) // see pacman.cpp for parent -GAME( 1985, cannonb, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game -GAME( 1985, cannonb2, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (TV Game Gruenberg)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game +GAME( 1985, cannonb, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game +GAME( 1985, cannonb2, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (TV Game Gruenberg)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game GAME( 1985, cannonb3, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 3, no bonus game)", MACHINE_SUPPORTS_SAVE ) // the bonus game is patched out, thus avoiding the protection issue GAME( 1982, swimmer, 0, swimmer, swimmer, cclimber_state, empty_init, ROT0, "Tehkan", "Swimmer (set 1)", MACHINE_SUPPORTS_SAVE ) @@ -2785,7 +2814,7 @@ GAME( 1982, swimmerb, swimmer, swimmer, swimmerb, cclimber_state, empty_i GAME( 1983, guzzler, 0, guzzler, guzzler, cclimber_state, empty_init, ROT90, "Tehkan", "Guzzler", MACHINE_SUPPORTS_SAVE ) GAME( 1983, guzzlers, guzzler, guzzler, guzzler, cclimber_state, empty_init, ROT90, "Tehkan", "Guzzler (Swimmer Conversion)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, yamato, 0, yamato, yamato, cclimber_state, init_yamato, ROT90, "Sega", "Yamato (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1983, yamato, 0, yamato, yamato, cclimber_state, init_yamato, ROT90, "Sega", "Yamato (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1983, yamato2, yamato, yamato, yamato, cclimber_state, init_yamato, ROT90, "Sega", "Yamato (World?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1983, toprollr, 0, toprollr, toprollr, cclimber_state, init_toprollr, ROT90, "Jaleco", "Top Roller", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 78c10b8c40b..db8ea13c690 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -10106,6 +10106,7 @@ ckongpt2b // bootleg ckongpt2b2 // bootleg ckongpt2j // (c) 1981 Falcon ckongpt2jeu // bootleg (Jeutel) +ckongpt2ss // bootleg (SegaSA / Sonic) dking // Crazy Kong Bootleg guzzler // (c) 1983 Tehkan guzzlers // (c) 1983 Tehkan (Swimmer Conversion) -- cgit v1.2.3 From 60c3d14cf6932af876e7bc5ba0e0b46d717ed061 Mon Sep 17 00:00:00 2001 From: arbee Date: Mon, 7 Jun 2021 23:18:05 -0400 Subject: m68kfpu: implement FGETMAN and FSINCOS. Photoshop 3.0 starts & loads pictures now. (GitHub #8109) [R. Belmont] --- src/devices/cpu/m68000/m68kfpu.cpp | 85 +++++++++++++++++++++++++++++++++++--- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/src/devices/cpu/m68000/m68kfpu.cpp b/src/devices/cpu/m68000/m68kfpu.cpp index ed439f2fe5f..9d0bd52111a 100644 --- a/src/devices/cpu/m68000/m68kfpu.cpp +++ b/src/devices/cpu/m68000/m68kfpu.cpp @@ -241,6 +241,53 @@ inline void m68000_base_device::store_pack_float80(u32 ea, int k, floatx80 fpr) m68ki_write_32(ea+8, dw3); } +inline floatx80 propagateFloatx80NaNOneArg(floatx80 a) +{ + if (floatx80_is_signaling_nan(a)) + float_raise(float_flag_invalid); + + a.low |= 0xC000000000000000U; + + return a; +} + +static void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr, uint64_t *zSigPtr) +{ + int shiftCount = countLeadingZeros64(aSig); + *zSigPtr = aSig << shiftCount; + *zExpPtr = 1 - shiftCount; +} + +inline floatx80 getman(floatx80 src) +{ + const flag sign = (src.high >> 15); + int32_t exp = (src.high & 0x7fff); + uint64_t signific = src.low; + + if (exp == 0x7fff) + { + if ((uint64_t)(signific << 1)) + { + return propagateFloatx80NaNOneArg(src); + } + else + { + return packFloatx80(0, 0xffff, 0xffffffffffffffffU); + } + } + + if (exp == 0) + { + if (signific == 0) + { + return packFloatx80(sign, 0, 0); + } + normalizeFloatx80Subnormal(signific, &exp, &signific); + } + + return packFloatx80(sign, 0x3fff, signific); +} + inline void m68000_base_device::SET_CONDITION_CODES(floatx80 reg) { // u64 *regi; @@ -347,6 +394,10 @@ u8 m68000_base_device::READ_EA_8(int ea) { return REG_D()[reg]; } + case 1: // An + { + return REG_A()[reg]; + } case 2: // (An) { u32 ea = REG_A()[reg]; @@ -423,6 +474,10 @@ u16 m68000_base_device::READ_EA_16(int ea) { return (u16)(REG_D()[reg]); } + case 1: // An + { + return (u16)REG_A()[reg]; + } case 2: // (An) { u32 ea = REG_A()[reg]; @@ -500,6 +555,10 @@ u32 m68000_base_device::READ_EA_32(int ea) { return REG_D()[reg]; } + case 1: // An + { + return REG_A()[reg]; + } case 2: // (An) { u32 ea = REG_A()[reg]; @@ -1163,11 +1222,11 @@ void m68000_base_device::WRITE_EA_PACK(int ea, int k, floatx80 fpr) void m68000_base_device::fpgen_rm_reg(u16 w2) { - int ea = m_ir & 0x3f; - int rm = (w2 >> 14) & 0x1; - int src = (w2 >> 10) & 0x7; - int dst = (w2 >> 7) & 0x7; - int opmode = w2 & 0x7f; + const int ea = m_ir & 0x3f; + const int rm = (w2 >> 14) & 0x1; + const int src = (w2 >> 10) & 0x7; + const int dst = (w2 >> 7) & 0x7; + const int opmode = w2 & 0x7f; floatx80 source; // fmovecr #$f, fp0 f200 5c0f @@ -1460,6 +1519,12 @@ void m68000_base_device::fpgen_rm_reg(u16 w2) m_icount -= 6; break; } + case 0x1f: // FGETMAN + { + m_fpr[dst] = getman(source); + SET_CONDITION_CODES(m_fpr[dst]); + m_icount -= 31; + } case 0x60: // FSDIVS case 0x20: // FDIV { @@ -1534,6 +1599,16 @@ void m68000_base_device::fpgen_rm_reg(u16 w2) m_icount -= 9; break; } + case 0x31: // FSINCOS + { + m_fpr[dst] = source; + floatx80_fsin(m_fpr[dst]); + SET_CONDITION_CODES(m_fpr[dst]); // condition codes are set for the sine result + + m_fpr[(w2 & 0x7)] = source; + floatx80_fcos(m_fpr[(w2 & 0x7)]); + m_icount -= 451; + } case 0x38: // FCMP { floatx80 res; -- cgit v1.2.3 From be67f24af0e88e5d35f3e123a8f6fc00b330b782 Mon Sep 17 00:00:00 2001 From: arbee Date: Mon, 7 Jun 2021 23:22:49 -0400 Subject: m68kfpu: fix missing break statements [R. Belmont] --- src/devices/cpu/m68000/m68kfpu.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/devices/cpu/m68000/m68kfpu.cpp b/src/devices/cpu/m68000/m68kfpu.cpp index 9d0bd52111a..0c56dc5ed39 100644 --- a/src/devices/cpu/m68000/m68kfpu.cpp +++ b/src/devices/cpu/m68000/m68kfpu.cpp @@ -1524,6 +1524,7 @@ void m68000_base_device::fpgen_rm_reg(u16 w2) m_fpr[dst] = getman(source); SET_CONDITION_CODES(m_fpr[dst]); m_icount -= 31; + break; } case 0x60: // FSDIVS case 0x20: // FDIV @@ -1608,6 +1609,7 @@ void m68000_base_device::fpgen_rm_reg(u16 w2) m_fpr[(w2 & 0x7)] = source; floatx80_fcos(m_fpr[(w2 & 0x7)]); m_icount -= 451; + break; } case 0x38: // FCMP { -- cgit v1.2.3 From a141e416778844844a2e7c632d9319184cae0496 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 7 Jun 2021 23:28:18 -0400 Subject: Fix clang error: fallthrough annotation does not directly precede switch label --- src/mame/drivers/seta.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index f3c12ed44b7..4475bf7d9f1 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -12145,7 +12145,7 @@ u16 downtown_state::downtown_protection_r(offs_t offset) return word[offset - 0x100/2]; // definitely wants to read-back hi-score table from 0x110-0x15f - [[fallthrough]]; + break; } } -- cgit v1.2.3 From 682321434fb0587b6150d34aef6fe06592e6dd40 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 8 Jun 2021 06:27:12 +0200 Subject: exidy.cpp: redumped spectar1, confirmed 2 PROMs, the third was missing [Siftware] --- src/mame/drivers/exidy.cpp | 54 +++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/mame/drivers/exidy.cpp b/src/mame/drivers/exidy.cpp index 2f7e668a320..415b9b0afaf 100644 --- a/src/mame/drivers/exidy.cpp +++ b/src/mame/drivers/exidy.cpp @@ -1236,41 +1236,41 @@ ROM_END ROM_START( spectar ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "spl11a-3", 0x1000, 0x0800, CRC(08880aff) SHA1(3becef348245ff4c8b0aae4a14751ab740b7d160) ) - ROM_LOAD( "spl10a-2", 0x1800, 0x0800, CRC(fca667c1) SHA1(168426f9e87c002d2673c0230fceac4d0831d594) ) - ROM_LOAD( "spl9a-3", 0x2000, 0x0800, CRC(9d4ce8ba) SHA1(2ef45c225fe704e49d10247c3eba1ef14141b3b7) ) - ROM_LOAD( "spl8a-2", 0x2800, 0x0800, CRC(cfacbadf) SHA1(77b27cf6f35e8e8dd2fd4f31bba2a96f3076163e) ) - ROM_LOAD( "spl7a-2", 0x3000, 0x0800, CRC(4c4741ff) SHA1(8de72613a385095253bb9e6da76493caec3115e4) ) - ROM_LOAD( "spl6a-2", 0x3800, 0x0800, CRC(0cb46b25) SHA1(65c5d2cc8df67225339dc8781dd29d4b57ded70c) ) + ROM_LOAD( "spl11a-3.11a", 0x1000, 0x0800, CRC(08880aff) SHA1(3becef348245ff4c8b0aae4a14751ab740b7d160) ) + ROM_LOAD( "spl10a-2.10a", 0x1800, 0x0800, CRC(fca667c1) SHA1(168426f9e87c002d2673c0230fceac4d0831d594) ) + ROM_LOAD( "spl9a-3.9a", 0x2000, 0x0800, CRC(9d4ce8ba) SHA1(2ef45c225fe704e49d10247c3eba1ef14141b3b7) ) + ROM_LOAD( "spl8a-2.8a", 0x2800, 0x0800, CRC(cfacbadf) SHA1(77b27cf6f35e8e8dd2fd4f31bba2a96f3076163e) ) + ROM_LOAD( "spl7a-2.7a", 0x3000, 0x0800, CRC(4c4741ff) SHA1(8de72613a385095253bb9e6da76493caec3115e4) ) + ROM_LOAD( "spl6a-2.6a", 0x3800, 0x0800, CRC(0cb46b25) SHA1(65c5d2cc8df67225339dc8781dd29d4b57ded70c) ) ROM_REGION( 0x0400, "gfx1", 0 ) - ROM_LOAD( "hrl11d-2", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */ - ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */ + ROM_LOAD( "hrl11d-2.11d", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */ + ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */ - ROM_REGION( 0x0140, "proms", 0 ) // were dumped from a bootleg, very probably they are the same, but marked as bad dump for precaution. The 2 6331 match the Targ ones. - ROM_LOAD( "prom.5c", 0x0000, 0x0100, BAD_DUMP CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual - ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // 6331 according to the Spectar manual - ROM_LOAD( "hrl14h-1", 0x0120, 0x0020, BAD_DUMP CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "spl5c-2.5c", 0x0000, 0x0100, CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual, also seen as IM 5623CPE on PCB + ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // screen controller PROM, 6331 according to the Spectar manual, dumped from a bootleg + ROM_LOAD( "hrl14h-1.14h", 0x0120, 0x0020, CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual ROM_END ROM_START( spectar1 ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "spl12a1", 0x0800, 0x0800, CRC(7002efb4) SHA1(fbb19ccd2aee49b78606eadcbef94e842e1be905) ) - ROM_LOAD( "spl11a1", 0x1000, 0x0800, CRC(8eb8526a) SHA1(0c42ee073fc73c89731dec4e3ecfc82c9b8301e9) ) - ROM_LOAD( "spl10a1", 0x1800, 0x0800, CRC(9d169b3d) SHA1(bee9d029df6e2fba24a5ba41a76f1658e9038838) ) - ROM_LOAD( "spl9a1", 0x2000, 0x0800, CRC(40e3eba1) SHA1(197aaed9a6159b6f3e347c0446be9e44733c1341) ) - ROM_LOAD( "spl8a1", 0x2800, 0x0800, CRC(64d8eb84) SHA1(a249c832ea951fddc6699f7ac0b4486e8a5be98e) ) - ROM_LOAD( "spl7a1", 0x3000, 0x0800, CRC(e08b0d8d) SHA1(6ffd6f8fb50c9fc09c38f56da7d6d005b66e78cc) ) - ROM_LOAD( "spl6a1", 0x3800, 0x0800, CRC(f0e4e71a) SHA1(5487a94650c964a7ab07f30aacab0b470dcb3b40) ) - - ROM_REGION( 0x0400, "gfx1", 0 ) - ROM_LOAD( "hrl11d-2", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */ - ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */ + ROM_LOAD( "spl12a-1.12a", 0x0800, 0x0800, CRC(7002efb4) SHA1(fbb19ccd2aee49b78606eadcbef94e842e1be905) ) + ROM_LOAD( "spl11a-1.11a", 0x1000, 0x0800, CRC(8eb8526a) SHA1(0c42ee073fc73c89731dec4e3ecfc82c9b8301e9) ) + ROM_LOAD( "spl10a-1.10a", 0x1800, 0x0800, CRC(9d169b3d) SHA1(bee9d029df6e2fba24a5ba41a76f1658e9038838) ) + ROM_LOAD( "spl9a-1.9a", 0x2000, 0x0800, CRC(40e3eba1) SHA1(197aaed9a6159b6f3e347c0446be9e44733c1341) ) + ROM_LOAD( "spl8a-1.8a", 0x2800, 0x0800, CRC(64d8eb84) SHA1(a249c832ea951fddc6699f7ac0b4486e8a5be98e) ) + ROM_LOAD( "spl7a-1.7a", 0x3000, 0x0800, CRC(e08b0d8d) SHA1(6ffd6f8fb50c9fc09c38f56da7d6d005b66e78cc) ) + ROM_LOAD( "spl6a-1.6a", 0x3800, 0x0800, CRC(f0e4e71a) SHA1(5487a94650c964a7ab07f30aacab0b470dcb3b40) ) + + ROM_REGION( 0x0400, "gfx1", 0 ) // some PCBs were seen with hrl11d-1 + ROM_LOAD( "hrl11d-2.11d", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */ + ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */ - ROM_REGION( 0x0140, "proms", 0 ) // were dumped from a bootleg, very probably they are the same, but marked as bad dump for precaution. The 2 6331 match the Targ ones. - ROM_LOAD( "prom.5c", 0x0000, 0x0100, BAD_DUMP CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual - ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // 6331 according to the Spectar manual - ROM_LOAD( "hrl14h-1", 0x0120, 0x0020, BAD_DUMP CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "spl5c-2.5c", 0x0000, 0x0100, CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual, also seen as IM 5623CPE on PCB + ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // screen controller PROM, 6331 according to the Spectar manual, dumped from a bootleg + ROM_LOAD( "hrl14h-1.14h", 0x0120, 0x0020, CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual ROM_END ROM_START( spectarrf ) -- cgit v1.2.3 From f06d9e8c71053c3f0447e72bef6dcec5aab3fadf Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Tue, 8 Jun 2021 10:14:51 +0200 Subject: mermaid: limit the size of the masking effect --- src/mame/video/mermaid.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mame/video/mermaid.cpp b/src/mame/video/mermaid.cpp index 18522971479..1a141a7ef0d 100644 --- a/src/mame/video/mermaid.cpp +++ b/src/mame/video/mermaid.cpp @@ -256,12 +256,15 @@ uint32_t mermaid_state::screen_update_mermaid(screen_device &screen, bitmap_ind1 draw_sprites(bitmap, cliprect); m_bg_tilemap->draw(screen, m_helper_mask, cliprect, 0, 0); + int max_x = cliprect.max_x; + if (max_x >= 26*8) + max_x = 26*8-1; for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { const u16 *s = &m_helper_mask.pix(y, cliprect.min_x); u16 *p = &bitmap.pix(y, cliprect.min_x); bool on = false; - for (int x = cliprect.min_x; x <= cliprect.max_x; x++) + for (int x = cliprect.min_x; x <= max_x; x++) { if (*s++ & 1) on = !on; -- cgit v1.2.3 From 07a1542a7c73cd1a2a4003999e8744e548b43dd4 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 8 Jun 2021 18:06:24 +0200 Subject: skylncr.cpp: very minor start at descrambling superb2k --- src/mame/drivers/skylncr.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/skylncr.cpp b/src/mame/drivers/skylncr.cpp index 3ba477a1c17..c81da189b8a 100644 --- a/src/mame/drivers/skylncr.cpp +++ b/src/mame/drivers/skylncr.cpp @@ -166,6 +166,7 @@ public: void init_miaction(); void init_olymp(); void init_sonikfig(); + void init_superb2k(); READ_LINE_MEMBER(mbutrfly_prot_r); @@ -2257,6 +2258,28 @@ void skylncr_state::init_olymp() // very weird, needs to be checked / finished, m_decrypted_opcodes[x] = ROM[x] ^ 0x18; } +void skylncr_state::init_superb2k() // TODO: very preliminary, just enough to read some strings +{ + uint8_t *const rom = memregion("maincpu")->base(); + std::vector buffer(0x10000); + + memcpy(&buffer[0], rom, 0x10000); + + // descramble addresses. At a first glance, swaps seem to change if address line bits 13 or 14 are set (possibly 15 too, but not verified yet) + // the scrambled address line bits appear to be 1, 3, 6, 9 and 12 + // it's possible XORs and are data lines swaps are involved, too, at least for opcodes + for (int i = 0x00000; i < 0x10000; i++) + { + switch (i & 0x6000) + { + case 0x0000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)]; break; // TODO: everything + case 0x2000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 9, 8, 7, 3, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x200 blocks are good (see 0x3e00-0x3fff), rest to be determined + case 0x4000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 3, 8, 7, 6, 5, 4, 9, 2, 12, 0)]; break; // TODO: 0x40 blocks are good, there's still at least a wrong swap (see 0x5200-0x52ff) + case 0x6000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 3, 11, 10, 1, 8, 7, 9, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x20 blocks are good (see 0x7fa0-0x7fbf) + } + } +} + } // Anonymous namespace @@ -2280,4 +2303,4 @@ GAME( 2000?,olymp, 0, olymp, skylncr, skylncr_state, init_olymp, GAME( 2000, sonikfig, 0, skylncr, sonikfig, skylncr_state, init_sonikfig, ROT0, "Z Games", "Sonik Fighter (version 02, encrypted)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 199?, rolla, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Random Games", "unknown 'Rolla' slot machine", MACHINE_IS_SKELETON ) // internal CPU ROM not dumped GAME( 2000?,score5, 0, skylncr, score5, skylncr_state, init_sonikfig, ROT0, "Z Games", "Score 5", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // game runs but screen is completely black due to palette mishandling -GAME( 2000?,superb2k, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Random Games", "Super Butterfly 2000", MACHINE_IS_SKELETON ) // encrypted / different CPU type ? +GAME( 2000?,superb2k, 0, skylncr, skylncr, skylncr_state, init_superb2k, ROT0, "Random Games", "Super Butterfly 2000", MACHINE_IS_SKELETON ) // encrypted / different CPU type ? -- cgit v1.2.3 From ba3e5baffceb6e226e8e4d8dc722352b416eefe0 Mon Sep 17 00:00:00 2001 From: yz70s Date: Tue, 8 Jun 2021 21:31:05 +0200 Subject: naomi: add a new device for the Sega 837-14438 "SH I/O BD" hopper board --- scripts/target/mame/arcade.lua | 2 + scripts/target/mame/mess.lua | 2 + src/mame/drivers/naomi.cpp | 34 ++++------- src/mame/includes/naomi.h | 2 + src/mame/machine/segashiobd.cpp | 121 ++++++++++++++++++++++++++++++++++++++++ src/mame/machine/segashiobd.h | 29 ++++++++++ 6 files changed, 168 insertions(+), 22 deletions(-) create mode 100644 src/mame/machine/segashiobd.cpp create mode 100644 src/mame/machine/segashiobd.h diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 00ac2a26a6d..8ac7d3cdf87 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -3556,6 +3556,8 @@ files { MAME_DIR .. "src/mame/machine/dc-ctrl.h", MAME_DIR .. "src/mame/machine/jvs13551.cpp", MAME_DIR .. "src/mame/machine/jvs13551.h", + MAME_DIR .. "src/mame/machine/segashiobd.cpp", + MAME_DIR .. "src/mame/machine/segashiobd.h", MAME_DIR .. "src/mame/drivers/triforce.cpp", MAME_DIR .. "src/mame/drivers/puckpkmn.cpp", MAME_DIR .. "src/mame/drivers/segac2.cpp", diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 1fe07c532ed..0a651947626 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -1570,6 +1570,8 @@ files { MAME_DIR .. "src/mame/machine/315-5881_crypt.h", MAME_DIR .. "src/mame/machine/315-6154.cpp", MAME_DIR .. "src/mame/machine/315-6154.h", + MAME_DIR .. "src/mame/machine/segashiobd.cpp", + MAME_DIR .. "src/mame/machine/segashiobd.h", MAME_DIR .. "src/mame/video/powervr2.cpp", MAME_DIR .. "src/mame/video/powervr2.h", MAME_DIR .. "src/mame/drivers/neogeo.cpp", diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index 56031ccb4b5..3ac26f07aa6 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -3113,6 +3113,16 @@ void naomi_state::naomim4(machine_config &config) rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); } +/* + * Naomi M1 with 837-14438 "SH I/O BD" hopper board + */ + +void naomi_state::naomim1_hop(machine_config &config) +{ + naomim1(config); + SEGA837_14438(config, "hopperbd", 0); +} + /* * Naomi M2 with Keyboard controllers */ @@ -7754,26 +7764,6 @@ ROM_START( kick4csh ) ROM_REGION(0x200, "some_eeprom", 0) ROM_LOAD( "25lc040.ic13s", 0, 0x200, CRC(1576366a) SHA1(3e8bf3dbc8a248a6863242b78d5c6e53a869e951) ) - // 837-14438 SH I/O BD - // IC1 - Hitachi/Renesas SH4 SoC - // IC2 - Xilinx Spartan XC2S50 PQ208AMS0341 FPGA - // IC3 - Xilinx 17S50APC Spartan-II Family OTP Configuration PROM, stamped 6372A - // IC4,5 - Toshiba TC59S6432CFT-10 512K x4 banks x32bit SDRAM - // IC6 - Macronix MX29LV160ATTC-90 16Mbit Flash ROM - // IC7 - ST M68AF127BL55MC6 1Mbit (128K x8) SRAM - // IC9 - NS USBN9604-28M USB Node Controller - // OSC1 - 33.3333 MHz - // OSC2 - 32.0000 MHz - // OCS3 - 24.0000 MHz - // SW1,2 - pushbuttons - // DIPSW1 - 4x DIP switch - // LED1-5 - LEDs - // LED6,7 - 7seg LEDs - // BT1 - Panasonic CR2032 battery - ROM_REGION(0x220000, "hopper_board", 0) - ROM_LOAD( "fpr-24150.ic6", 0x0000000, 0x200000, CRC(3845c34c) SHA1(027b17bac64482ee152773d5fab30fcbc6e2bcb7) ) // SH4 code - ROM_LOAD( "6372a.ic3", 0x0200000, 0x020000, CRC(f30839ad) SHA1(ea1a32c4da1ed9745300bcdd7964a7c0964e3221) ) // FPGA config - // 840-0140 2004 317-0397-COM Naomi ROM_PARAMETER( ":rom_board:key", "820857c9" ) ROM_END @@ -11743,9 +11733,9 @@ ROM_END /* 0128 */ GAME( 2003, shootpl, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan, Rev A)", GAME_FLAGS ) /* 0130 */ GAME( 2002, hopper, naomi, naomi, naomi, naomi_state, init_naomi, ROT0, "Sega", "SWP Hopper Board", GAME_FLAGS ) // 0132 Mushiking 2K3 2ND (Japan) -/* 0136 */ GAME( 2004, shootplm, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B", GAME_FLAGS ) // Build: 23 Jan 2004 +/* 0136 */ GAME( 2004, shootplm, naomi, naomim1_hop, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B", GAME_FLAGS ) // Build: 23 Jan 2004 /* 0136 */ GAME( 2004, shootplmp, shootplm, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B (prototype)", GAME_FLAGS ) // Build: 15 Dec 2003 -/* 0140 */ GAME( 2004, kick4csh, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Kick '4' Cash (Export)", GAME_FLAGS ) +/* 0140 */ GAME( 2004, kick4csh, naomi, naomim1_hop, naomi, naomi_state, init_naomi, ROT0, "Sega", "Kick '4' Cash (Export)", GAME_FLAGS ) /* 0150 */ GAME( 2004, mushike, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetle (2K3 2ND Ver. 1.003-, World)", GAME_FLAGS ) // not for Japan /* 0150 */ GAME( 2004, mushikeo, mushike, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetle (2K3 2ND Ver. 1.002-, World)", GAME_FLAGS ) // not for Japan /* 0150-FLS*/ GAME( 2004, mushikep, mushike, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetle (MUSHIUSA '04 1ST, Prototype)", GAME_FLAGS ) diff --git a/src/mame/includes/naomi.h b/src/mame/includes/naomi.h index a128305cb94..620aa13085f 100644 --- a/src/mame/includes/naomi.h +++ b/src/mame/includes/naomi.h @@ -28,6 +28,7 @@ naomi.h -> NAOMI includes #include "machine/jvs13551.h" #include "machine/m3comm.h" #include "machine/gunsense.h" +#include "machine/segashiobd.h" #include "dc.h" enum { @@ -54,6 +55,7 @@ class naomi_state : public dc_state void naomim2_gun(machine_config &config); void naomi(machine_config &config); void naomim1(machine_config &config); + void naomim1_hop(machine_config &config); void naomigd(machine_config &config); void naomigd_kb(machine_config &config); void naomim4(machine_config &config); diff --git a/src/mame/machine/segashiobd.cpp b/src/mame/machine/segashiobd.cpp new file mode 100644 index 00000000000..f5c9d632a90 --- /dev/null +++ b/src/mame/machine/segashiobd.cpp @@ -0,0 +1,121 @@ +// license:BSD-3-Clause +// copyright-holders:Samuele Zannoli + +#include "emu.h" +#include "machine/segashiobd.h" + +/* + 837-14438 SH I/O BD + +|-------------------------------------------------------------------------------------| +| CN3 CN6 CN2 CN1 CN11 | +| | +| LED1-5 | +| | +| DIPSW1 BT1 OSC1 | +| | +| IC3 LED6,7 SW2 | +| | +| OSC2 IC8 IC1 IC4 IC5 | +| | +|CN5 IC7 | +| | +| IC2 | +| | +| IC6 | +| | +| SW1 | +| | +| IC9 | +| OSC3 | +| CN4 CN7 CN8 | +|-------------------------------------------------------------------------------------| + + IC1 - Hitachi/Renesas SH4 SoC + IC2 - Xilinx Spartan XC2S50 PQ208AMS0341 FPGA + IC3 - Xilinx 17S50APC Spartan-II Family OTP Configuration PROM, stamped 6372A + IC4,5 - Toshiba TC59S6432CFT-10 512K x4 banks x32bit SDRAM + IC6 - Macronix MX29LV160ATTC-90 16Mbit Flash ROM + IC7 - ST M68AF127BL55MC6 1Mbit (128K x8) SRAM + IC8 - 42-pin DIP socket, unpopulated + IC9 - NS USBN9604-28M USB Node Controller + OSC1 - 33.3333 MHz + OSC2 - 32.0000 MHz + OCS3 - 24.0000 MHz + SW1,2 - pushbuttons + DIPSW1 - 4x DIP switch + LED1-5 - LEDs + LED6,7 - 7seg LEDs + BT1 - Panasonic CR2032 battery + + CN1 - 8 pin JST VH series connector + 1 12V + 2 5V + 3 5V + 4 3.3V + 5 3.3V + 6 gnd + 7 gnd + 8 gnd + + CN2 - 4 pin JST VH series connector + 1 12V + 2 12V + 3 gnd + 4 gnd +*/ + +DEFINE_DEVICE_TYPE(SEGA837_14438, sega_837_14438_device, "sega837_14438", "Sega 837-14438 SH I/O BD") + +void sega_837_14438_device::sh4_map(address_map &map) +{ + // mirrors only for the debugger + map(0x00000000, 0x001fffff).mirror(0xa0000000).rom(); + map(0x04000000, 0x0401ffff).mirror(0xa0000000).ram(); + map(0x0c000000, 0x0cffffff).mirror(0x80000000).ram(); +} + +#define CPU_CLOCK 200000000 // need to set the correct value here + +void sega_837_14438_device::device_add_mconfig(machine_config &config) +{ + SH4LE(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_md(0, 1); + m_maincpu->set_md(1, 0); + m_maincpu->set_md(2, 1); + m_maincpu->set_md(3, 0); + m_maincpu->set_md(4, 0); + m_maincpu->set_md(5, 1); + m_maincpu->set_md(6, 0); + m_maincpu->set_md(7, 1); + m_maincpu->set_md(8, 0); + m_maincpu->set_sh4_clock(CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &sega_837_14438_device::sh4_map); +} + +sega_837_14438_device::sega_837_14438_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, SEGA837_14438, tag, owner, clock), + m_maincpu(*this, "shiobdcpu") +{ +} + +void sega_837_14438_device::device_start() +{ +} + +void sega_837_14438_device::device_reset() +{ + device_t::device_reset(); +} + +ROM_START(segashiobd) + ROM_REGION(0x200000, "shiobdcpu", 0) + ROM_LOAD("fpr-24150.ic6", 0x0000000, 0x200000, CRC(3845c34c) SHA1(027b17bac64482ee152773d5fab30fcbc6e2bcb7)) // SH4 code + ROM_REGION(0x020000, "config_prom", 0) + ROM_LOAD("6372a.ic3", 0x0000000, 0x020000, CRC(f30839ad) SHA1(ea1a32c4da1ed9745300bcdd7964a7c0964e3221)) // FPGA configuration prom +ROM_END + +const tiny_rom_entry* sega_837_14438_device::device_rom_region() const +{ + return ROM_NAME(segashiobd); +} diff --git a/src/mame/machine/segashiobd.h b/src/mame/machine/segashiobd.h new file mode 100644 index 00000000000..c1bec8871f9 --- /dev/null +++ b/src/mame/machine/segashiobd.h @@ -0,0 +1,29 @@ +// license:BSD-3-Clause +// copyright-holders:Samuele Zannoli +#ifndef MAME_MACHINE_SEGASHIOBD_H +#define MAME_MACHINE_SEGASHIOBD_H + +#pragma once + +#include "cpu/sh/sh4.h" + +DECLARE_DEVICE_TYPE(SEGA837_14438, sega_837_14438_device) + +class sega_837_14438_device : public device_t +{ +public: + // construction/destruction + sega_837_14438_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + virtual const tiny_rom_entry *device_rom_region() const override; + +protected: + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + void sh4_map(address_map &map); + +private: + required_device m_maincpu; +}; + +#endif // MAME_MACHINE_SEGASHIOBD_H -- cgit v1.2.3 From fbd58b3a63f0b067a1656312440f5decb37fe652 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Tue, 8 Jun 2021 20:47:27 +0100 Subject: Move guttangt to newer galaxian driver, promote to working. (#8151) * Moved guttangt from galaxold.cpp to galaxian.cpp. * Improved graphics, and inputs. clones promoted to WORKING ------- Guttang Gottong (bootleg on Galaxian type hardware) [David Haywood] --- src/mame/drivers/galaxian.cpp | 127 +++++++++++++++++++++++++++++++++++++++ src/mame/drivers/galaxold.cpp | 135 ------------------------------------------ src/mame/includes/galaxian.h | 22 +++++++ src/mame/includes/galaxold.h | 4 -- src/mame/mame.lst | 2 +- src/mame/video/galaxian.cpp | 7 +++ 6 files changed, 157 insertions(+), 140 deletions(-) diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index b0f848013e7..fbf16d86b63 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -2522,6 +2522,37 @@ void galaxian_state::froggeram_map(address_map &map) map(0xb807, 0xb807).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); // always set to 0? } +void guttangt_state::guttangt_rombank_w(uint8_t data) +{ + m_rombank->set_entry(data & 1); +} + +// map not derived from schematics +void guttangt_state::guttangt_map(address_map &map) +{ + map(0x0000, 0x1fff).rom().nopw(); + map(0x2000, 0x27ff).bankr(m_rombank); // 0x2000-0x27ff is banked (so they have room for the new music player), see init / rom loading + map(0x2800, 0x3fff).rom().nopw(); + + map(0x4000, 0x47ff).ram(); + + map(0x5000, 0x53ff).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); + map(0x5800, 0x58ff).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); + + map(0x6000, 0x6000).portr("IN0").w(FUNC(guttangt_state::guttangt_rombank_w)); + map(0x6800, 0x6800).portr("IN1"); + + galaxian_map_discrete(map); + + map(0x7000, 0x7000).portr("IN2"); + map(0x7001, 0x7001).w(FUNC(galaxian_state::irq_enable_w)); + + map(0x7006, 0x7006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); // always set to 0? + map(0x7007, 0x7007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); // always set to 0? + + map(0x7800, 0x7800).r("watchdog", FUNC(watchdog_timer_device::reset_r)); +} + /************************************* * * Sound CPU memory maps @@ -6765,6 +6796,63 @@ static INPUT_PORTS_START( highroll ) PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8") INPUT_PORTS_END + +static INPUT_PORTS_START( guttangt ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_DIPNAME( 0x20, 0x20, "IN0:5" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) // also acts as button 1 / speedup + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) // ^ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL + PORT_DIPNAME( 0x20, 0x20, "IN1:6" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x40, "A: 2C/1C B: 1C/3C" ) + PORT_DIPSETTING( 0x00, "A: 1C/1C B: 1C/6C" ) + PORT_DIPNAME( 0x80, 0x80, "IN1:8" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("IN2") + PORT_DIPNAME( 0x01, 0x01, "IN2:1" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x04, "3" ) + PORT_DIPSETTING( 0x08, "4" ) + PORT_DIPSETTING( 0x0c, "5" ) + PORT_DIPNAME( 0x10, 0x10, "IN2:5" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "IN2:6" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "IN2:7" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "IN2:8" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + /************************************* * * Graphics layouts @@ -7249,6 +7337,13 @@ void galaxian_state::timefgtr(machine_config &config) TIMER(config, "scantimer").configure_scanline(FUNC(galaxian_state::timefgtr_scanline), "screen", 0, 1); } +void guttangt_state::guttangt(machine_config &config) +{ + galaxian(config); + m_maincpu->set_addrmap(AS_PROGRAM, &guttangt_state::guttangt_map); +} + + void galaxian_state::jumpbug(machine_config &config) { @@ -8201,6 +8296,14 @@ void galaxian_state::init_videight() common_init(NULL, NULL, &galaxian_state::videight_extend_tile_info, &galaxian_state::videight_extend_sprite_info); } +void guttangt_state::init_guttangt() +{ + common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::guttangt_extend_sprite_info); + + m_rombank->configure_entry( 0, memregion("maincpu")->base() + 0x2000); + m_rombank->configure_entry( 1, memregion("maincpu")->base() + 0x4000); + m_rombank->set_entry(0); +} /************************************* * @@ -14744,6 +14847,29 @@ ROM_START( victorycb ) ROM_LOAD( "prom.6l", 0x0000, 0x0020, CRC(25329e5a) SHA1(aff60d02aa4d1d5f16e2d32155c315deee8b4089) ) ROM_END +// PCB made by Recreativos Franco +ROM_START( guttangt ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "gg1-2716.rom", 0x0000, 0x0800, CRC(7f338d91) SHA1(d203f229f4f5934467b80ed0f2208e5551aaa383) ) + ROM_LOAD( "gg2-2758.rom", 0x0800, 0x0800, CRC(ecdbb62b) SHA1(c2eb0316ab789a69b74aeec25e5c690b4334c7c2) ) + ROM_LOAD( "gg3-2716.rom", 0x1000, 0x0800, CRC(38d71df3) SHA1(f1771256b52ba1bfc1bd472f8a78d6302a7b1299) ) + ROM_LOAD( "gg4-2716.rom", 0x1800, 0x0800, CRC(7623125a) SHA1(3f3abb9c66751908918fa52e22e153da5fdc0902) ) + ROM_LOAD( "gg5-2732.rom", 0x2000, 0x0800, CRC(1fe33f92) SHA1(d3e00459015b8bf43fe2e8f6cb57cef775bbb330) ) + ROM_CONTINUE(0x4000,0x800) // double sized ROM containing banked code, maps at 0x2000 + ROM_LOAD( "gg6-2716.rom", 0x2800, 0x0800, CRC(60606cd5) SHA1(9a4bf0134c7fa66d2ecd3a745421091b0a086572) ) + ROM_LOAD( "gg7-2516.rom", 0x3000, 0x0800, CRC(ce0d0a93) SHA1(339bd9c6c40eb2501d1a1adcea0cfa82e3224967) ) + ROM_LOAD( "gg8-2716.rom", 0x3800, 0x0800, CRC(b8716081) SHA1(e2d1db27ad44876b891cc0a2232ac887bcc5516f) ) + + ROM_REGION( 0x2000, "gfx1", 0 ) + // some tile corruption so one of these is bad + ROM_LOAD( "gg9-2732.rom", 0x0000, 0x1000, BAD_DUMP CRC(be6bf522) SHA1(23a09409b7de4bfdb970e4ff23d89a2439a0aee5) ) + ROM_LOAD( "gg10-2732.rom", 0x1000, 0x1000, BAD_DUMP CRC(b04c34c5) SHA1(a37db70ce67d64daa5f0c41cce1136d1c9d8c175) ) + + ROM_REGION( 0x0020, "proms", 0 ) + // no PROM was present, standard one used as this was a conversion, but it might be incorrect + ROM_LOAD( "mmi6331.6l", 0x0000, 0x0020, BAD_DUMP CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) ) +ROM_END + /************************************* * @@ -14811,6 +14937,7 @@ GAME( 19??, chewing, luctoday, galaxian, luctoday, galaxian_state, init_ GAME( 1982, catacomb, 0, galaxian, catacomb, galaxian_state, init_galaxian, ROT90, "MTM Games", "Catacomb", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) GAME( 19??, omegab, theend, galaxian, omegab, galaxian_state, init_galaxian, ROT270, "bootleg?", "Omega (bootleg?)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, highroll, 0, highroll, highroll, galaxian_state, init_highroll, ROT90, "bootleg?", "High Roller", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // auto starts game after inserting coin, bad cards GFX, bad inputs response, not all inputs are mapped +GAME( 1982, guttangt, locomotn, guttangt, guttangt, guttangt_state, init_guttangt, ROT90, "bootleg (Recreativos Franco?)", "Guttang Gottong (bootleg on Galaxian type hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // or by 'Tren' ? // Basic hardware + extra RAM GAME( 1982, victoryc, 0, victoryc, victoryc, galaxian_state, init_victoryc, ROT270, "Comsoft", "Victory (Comsoft)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp index b29c15810b8..e14330fd20e 100644 --- a/src/mame/drivers/galaxold.cpp +++ b/src/mame/drivers/galaxold.cpp @@ -339,41 +339,8 @@ void galaxold_state::scrambleo_map(address_map &map) map(0x7001, 0x7001).w(FUNC(galaxold_state::galaxold_nmi_enable_w)); } -void galaxold_state::guttang_rombank_w(uint8_t data) -{ - address_space &space = m_maincpu->space(AS_PROGRAM); -// printf("rombank %02x\n",data); - space.install_rom(0x2000, 0x27ff, memregion("maincpu")->base() + (data & 1 ? 0x4000 : 0x2000)); -} - - -void galaxold_state::guttang_map(address_map &map) -{ - map(0x0000, 0x3fff).rom().nopw(); // 0x2000-0x27ff is banked (so they have room for the new music player), see init - map(0x4000, 0x47ff).ram(); - - map(0x5000, 0x53ff).ram().w(FUNC(galaxold_state::galaxold_videoram_w)).share("videoram"); - - map(0x5800, 0x583f).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram"); - map(0x5840, 0x585f).ram().share("spriteram"); - map(0x5860, 0x587f).ram().share("bulletsram"); - map(0x5880, 0x58ff).ram(); - map(0x6000, 0x6000).portr("IN0").w(FUNC(galaxold_state::guttang_rombank_w)); - map(0x6800, 0x6800).portr("IN1"); - map(0x6800, 0x6802).w("cust", FUNC(galaxian_sound_device::background_enable_w)); - map(0x6803, 0x6803).w("cust", FUNC(galaxian_sound_device::noise_enable_w)); - map(0x6805, 0x6805).w("cust", FUNC(galaxian_sound_device::fire_enable_w)); - map(0x6806, 0x6807).w("cust", FUNC(galaxian_sound_device::vol_w)); - - - map(0x7000, 0x7000).portr("IN2"); - map(0x7001, 0x7001).w(FUNC(galaxold_state::galaxold_nmi_enable_w)); - - map(0x7800, 0x7800).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w("cust", FUNC(galaxian_sound_device::pitch_w)); - -} void galaxold_state::_4in1_map(address_map &map) @@ -1593,68 +1560,6 @@ INPUT_PORTS_END -static INPUT_PORTS_START( guttangt ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_DIPNAME( 0x40, 0x40, "IN0:6" ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) - PORT_DIPNAME( 0x04, 0x00, "IN1:3" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN1:4" ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "IN1:5" ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "IN1:6" ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN1:7" ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN1:8" ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN2") - PORT_DIPNAME( 0x01, 0x01, "IN2:1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "IN2:2" ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, "IN2:3" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN2:4" ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "IN2:5" ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "IN2:6" ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN2:7" ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN2:8" ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - static const gfx_layout galaxold_charlayout = { @@ -1895,22 +1800,6 @@ void galaxold_state::scrambleo(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::scrambleo_map); } -void galaxold_state::guttang(machine_config &config) -{ - galaxian(config); - - // basic machine hardware - m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::guttang_map); - - // video hardware - m_palette->set_entries(32+2+64+1); // 32 for the characters, 2 for the bullets, 64 for the stars, 1 for background - m_palette->set_init(FUNC(galaxold_state::galaxold_palette)); -// m_palette->set_init(FUNC(galaxold_state::scrambold_palette)); - - MCFG_VIDEO_START_OVERRIDE(galaxold_state,mooncrst) -} - - void galaxold_state::_4in1(machine_config &config) { galaxian(config); @@ -2710,26 +2599,7 @@ ROM_START( trvchlng ) ROM_END -// PCB made by Recreativos Franco -ROM_START( guttangt ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "gg1-2716.rom", 0x0000, 0x0800, CRC(7f338d91) SHA1(d203f229f4f5934467b80ed0f2208e5551aaa383) ) - ROM_LOAD( "gg2-2758.rom", 0x0800, 0x0800, CRC(ecdbb62b) SHA1(c2eb0316ab789a69b74aeec25e5c690b4334c7c2) ) - ROM_LOAD( "gg3-2716.rom", 0x1000, 0x0800, CRC(38d71df3) SHA1(f1771256b52ba1bfc1bd472f8a78d6302a7b1299) ) - ROM_LOAD( "gg4-2716.rom", 0x1800, 0x0800, CRC(7623125a) SHA1(3f3abb9c66751908918fa52e22e153da5fdc0902) ) - ROM_LOAD( "gg5-2732.rom", 0x2000, 0x0800, CRC(1fe33f92) SHA1(d3e00459015b8bf43fe2e8f6cb57cef775bbb330) ) - ROM_CONTINUE(0x4000,0x800) // banked code, maps at 0x2000 - ROM_LOAD( "gg6-2716.rom", 0x2800, 0x0800, CRC(60606cd5) SHA1(9a4bf0134c7fa66d2ecd3a745421091b0a086572) ) - ROM_LOAD( "gg7-2516.rom", 0x3000, 0x0800, CRC(ce0d0a93) SHA1(339bd9c6c40eb2501d1a1adcea0cfa82e3224967) ) - ROM_LOAD( "gg8-2716.rom", 0x3800, 0x0800, CRC(b8716081) SHA1(e2d1db27ad44876b891cc0a2232ac887bcc5516f) ) - - ROM_REGION( 0x2000, "gfx1", 0 ) - ROM_LOAD( "gg9-2732.rom", 0x0000, 0x1000, CRC(be6bf522) SHA1(23a09409b7de4bfdb970e4ff23d89a2439a0aee5) ) - ROM_LOAD( "gg10-2732.rom", 0x1000, 0x1000, CRC(b04c34c5) SHA1(a37db70ce67d64daa5f0c41cce1136d1c9d8c175) ) - ROM_REGION( 0x0020, "proms", 0 ) // no PROM was present.. - ROM_LOAD( "mmi6331.6l", 0x0000, 0x0020, BAD_DUMP CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) ) -ROM_END /* @@ -2779,10 +2649,6 @@ ROM_START( bullsdrtg ) ROM_LOAD( "prom.bin", 0x0000, 0x0020, CRC(16b19bfa) SHA1(a0e9217f9bc5b06212d5f22dcc3dc4b2838788ba) ) ROM_END -void galaxold_state::init_guttangt() -{ - m_maincpu->space(AS_PROGRAM).install_rom(0x2000, 0x27ff, memregion("maincpu")->base() + 0x2000); -} // Z80 games @@ -2799,7 +2665,6 @@ GAME( 1982, dkongjrm, dkongjr, dkongjrm, dkongjrm, galaxold_state, empty_ini GAME( 1982, dkongjrmc, dkongjr, dkongjrmc, dkongjrmc, galaxold_state, empty_init, ROT90, "bootleg (Centromatic)", "Donkey Kong Jr. (bootleg on Moon Cresta hardware, set 2)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // sprites leave artifacts GAME( 1982, tazzmang, tazmania, tazzmang, tazzmang, galaxold_state, empty_init, ROT90, "bootleg", "Tazz-Mania (bootleg on Galaxian hardware)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) GAME( 1982, tazzmang2, tazmania, tazzmang, tazzmang, galaxold_state, empty_init, ROT90, "bootleg", "Tazz-Mania (bootleg on Galaxian hardware with Starfield)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) -GAME( 1982, guttangt, locomotn, guttang, guttangt, galaxold_state, init_guttangt, ROT270, "bootleg (Recreativos Franco?)", "Guttang Gottong (bootleg on Galaxian type hardware)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // or by 'Tren' ? // Videotron cartridge system GAME( 1981, hustlerb3, hustler, videotron, hustlerb3, galaxold_state, empty_init, ROT90, "bootleg (Videotron)", "Video Pool (Video Hustler bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index b174603eb8a..f2ef5aa4ac5 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -240,6 +240,7 @@ public: void init_mimonkey(); void init_mimonkeyb(); void init_victoryc(); + TILE_GET_INFO_MEMBER(bg_get_tile_info); void galaxian_palette(palette_device &palette); void moonwar_palette(palette_device &palette); @@ -295,6 +296,7 @@ public: void mimonkey_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); void namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); + void guttangt_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void monsterz_set_latch(); void decode_mooncrst(int length, uint8_t *dest); void decode_checkman(); @@ -577,4 +579,24 @@ private: void namenayo_unk_d800_w(uint8_t data); }; +class guttangt_state : public galaxian_state +{ +public: + guttangt_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_rombank(*this, "rombank") + { + } + + void guttangt(machine_config &config); + void init_guttangt(); + +private: + void guttangt_map(address_map &map); + void guttangt_rombank_w(uint8_t data); + + required_memory_bank m_rombank; +}; + + #endif // MAME_INCLUDES_GALAXIAN_H diff --git a/src/mame/includes/galaxold.h b/src/mame/includes/galaxold.h index f9c70f8c9b2..20dc8b3dd81 100644 --- a/src/mame/includes/galaxold.h +++ b/src/mame/includes/galaxold.h @@ -149,7 +149,6 @@ public: void galaxold_gfxbank_w(offs_t offset, uint8_t data); void rockclim_videoram_w(offs_t offset, uint8_t data); void rockclim_scroll_w(offs_t offset, uint8_t data); - void guttang_rombank_w(uint8_t data); uint8_t rockclim_videoram_r(offs_t offset); void dambustr_bg_split_line_w(uint8_t data); void dambustr_bg_color_w(uint8_t data); @@ -163,7 +162,6 @@ public: void init_bullsdrtg(); void init_ladybugg(); void init_4in1(); - void init_guttangt(); TILE_GET_INFO_MEMBER(drivfrcg_get_tile_info); TILE_GET_INFO_MEMBER(racknrol_get_tile_info); @@ -282,7 +280,6 @@ public: void scramb2(machine_config &config); void scramb3(machine_config &config); void mooncrst(machine_config &config); - void guttang(machine_config &config); void galaxian_audio(machine_config &config); void mooncrst_audio(machine_config &config); void _4in1_map(address_map &map); @@ -292,7 +289,6 @@ public: void drivfrcg_program(address_map &map); void drivfrcg_io(address_map &map); void galaxold_map(address_map &map); - void guttang_map(address_map &map); void hexpoola_data(address_map &map); void hexpoola_io(address_map &map); void hunchbkg_map(address_map &map); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index db8ea13c690..53f03b46773 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14396,6 +14396,7 @@ gteikoku // (c) Irem gteikokub // bootleg gteikokub2 // bootleg gteikokub3 // bootleg (Honly Enterprises) +guttangt // highroll // jumpbug // (c) 1981 Rock-ola jumpbugb // (c) 1981 Sega @@ -14567,7 +14568,6 @@ drivfrcsg // [1984] Seatongrove drivfrcsga // [1984] Seatongrove drivfrct // bootleg froggerv // bootleg -guttangt // hexpool // (c) 1986 Shinkia (Senko Kit) hexpoola // (c) 1986 Shinkia (Senko Kit) hunchbgb // bootleg diff --git a/src/mame/video/galaxian.cpp b/src/mame/video/galaxian.cpp index 6d3e7356812..678bf670cbc 100644 --- a/src/mame/video/galaxian.cpp +++ b/src/mame/video/galaxian.cpp @@ -1441,6 +1441,13 @@ void galaxian_state::namenayo_draw_background(bitmap_rgb32 &bitmap, const rectan m_bg_tilemap->draw(*m_screen, bitmap, draw, TILEMAP_DRAW_OPAQUE, 0); } +// Guttang Gottong bootleg +void galaxian_state::guttangt_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) +{ + // is this configurable or a hardwired mod? + *code |= 0x40; +} + /************************************* * -- cgit v1.2.3 From 239b0691f8500639dad6c84d97731b05cded650f Mon Sep 17 00:00:00 2001 From: ClawGrip Date: Tue, 8 Jun 2021 22:40:42 +0200 Subject: phoenix.cpp: 'pleiadss' is from Famaresa [Museo del Recreativo] --- src/mame/drivers/phoenix.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/phoenix.cpp b/src/mame/drivers/phoenix.cpp index 268af7b27b4..40065f8e1b9 100644 --- a/src/mame/drivers/phoenix.cpp +++ b/src/mame/drivers/phoenix.cpp @@ -1497,6 +1497,7 @@ ROM_START( pleiadsn ) ROM_LOAD( "mb7052.ic41", 0x0100, 0x0100, BAD_DUMP CRC(7a1bcb1e) SHA1(bdfab316ea26e2063879e7aa78b6ae2b55eb95c8) ) /* palette high bits */ ROM_END +// Famaresa "580" PCB set (580-001 and 580-002). ROM_START( pleiadss ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "pl45.bin", 0x0000, 0x0800, CRC(e2528599) SHA1(4647c62a2c6047238ad2855cf71b9e079ac4b4c7) ) @@ -1645,7 +1646,7 @@ GAME( 1981, pleiadbl, pleiads, pleiads, pleiadbl, phoenix_state, empty_init, GAME( 1981, pleiadce, pleiads, pleiads, pleiadce, phoenix_state, empty_init, ROT90, "Tehkan (Centuri license)", "Pleiads (Centuri)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) GAME( 1981, pleiadsi, pleiads, pleiads, pleiadce, phoenix_state, empty_init, ROT90, "bootleg? (Irecsa)", "Pleiads (Irecsa)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // possibly licensed, but some of the ROMs match the bootlegs GAME( 1981, pleiadsn, pleiads, phoenix, pleiadce, phoenix_state, empty_init, ROT90, "Niemer S.A.", "Pleiads (Niemer S.A.)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // possibly licensed, but some of the ROMs match the bootlegs -GAME( 1981, pleiadss, pleiads, phoenix, pleiadce, phoenix_state, empty_init, ROT90, "bootleg", "Pleiads (Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // colours match PCB (but are ugly) +GAME( 1981, pleiadss, pleiads, phoenix, pleiadce, phoenix_state, empty_init, ROT90, "bootleg (Famaresa)", "Pleiads (Famaresa, Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // colours match PCB (but are ugly) GAME( 1981, capitol, pleiads, phoenix, capitol, phoenix_state, empty_init, ROT90, "bootleg? (Universal Video Spiel)", "Capitol", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) /*** Others ***/ -- cgit v1.2.3 From b4c880f4217506d5bdc17eb7dbc10e31e3bdda5f Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 9 Jun 2021 13:08:46 +1000 Subject: Added alphatrob to mame.lst --- src/mame/mame.lst | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 53f03b46773..dd665143c94 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -1203,6 +1203,7 @@ alphatpc16 @source:alphatro.cpp alphatro // +alphatrob // alphatron // @source:altair.cpp -- cgit v1.2.3 From 5ba0bf776278410caa58ebbd1377142b44e99e5e Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 9 Jun 2021 06:41:35 +0200 Subject: New working clones ------------------ Gals Panic S - Extra Edition (Korea) [coolmod] --- src/mame/drivers/suprnova.cpp | 606 ++++++++++++++++++++++-------------------- src/mame/mame.lst | 1 + 2 files changed, 316 insertions(+), 291 deletions(-) diff --git a/src/mame/drivers/suprnova.cpp b/src/mame/drivers/suprnova.cpp index 51351762a97..26ba609052d 100644 --- a/src/mame/drivers/suprnova.cpp +++ b/src/mame/drivers/suprnova.cpp @@ -1064,88 +1064,88 @@ void skns_state::init_galpans3() { m_spritegen->skns_sprite_kludge(-1,-1); ini ROM_START( skns ) SKNS_BIOS - ROM_REGION32_BE( 0x200000, "user1", ROMREGION_ERASE00 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", ROMREGION_ERASE00 ) // SH-2 Code mapped at 0x04000000 - ROM_REGION( 0x800000, "spritegen", ROMREGION_ERASE00 ) /* Sprites */ + ROM_REGION( 0x800000, "spritegen", ROMREGION_ERASE00 ) // Sprites - ROM_REGION( 0x800000, "gfx2", ROMREGION_ERASE00 ) /* Tiles Plane A */ + ROM_REGION( 0x800000, "gfx2", ROMREGION_ERASE00 ) // Tiles Plane A - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B - ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) // Samples ROM_END ROM_START( cyvern ) SKNS_USA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "cv-usa.u10", 0x000000, 0x100000, CRC(1023ddca) SHA1(7967e3e876cdb797bdaa2eb5136a33cd43941501) ) ROM_LOAD16_BYTE( "cv-usa.u8", 0x000001, 0x100000, CRC(f696f6be) SHA1(d9e66173ca12693255d2bb0982da2fb96bfd155d) ) - ROM_REGION( 0x800000, "spritegen", 0 ) /* Sprites */ + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "cv100-00.u24", 0x000000, 0x400000, CRC(cd4ae88a) SHA1(925f4ae01a6ad3633be2a61be69e163f05401cf6) ) ROM_LOAD( "cv101-00.u20", 0x400000, 0x400000, CRC(a6cb3f0b) SHA1(8d83f44a096ca0a70962ca4c602c4331874c8560) ) - ROM_REGION( 0x800000, "gfx2", 0 ) /* Tiles Plane A */ + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "cv200-00.u16", 0x000000, 0x400000, CRC(ddc8c67e) SHA1(9b99e87e69e88011e6d693d19ac5e115b4fa50b0) ) ROM_LOAD( "cv201-00.u13", 0x400000, 0x400000, CRC(65863321) SHA1(b8b75f50406068ffc3fca3887d2f0a653ca491c9) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "cv210-00.u18", 0x400000, 0x400000, CRC(7486bf3a) SHA1(3b4285ca570e9c5ad396c615bfc054372d1b0162) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "cv300-00.u4", 0x000000, 0x400000, CRC(fbeda465) SHA1(4d5066a22f4589b6b7f85b3e77c348d900ac4bdd) ) ROM_END ROM_START( cyvernj ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "cvj-even.u10", 0x000000, 0x100000, CRC(802fadb4) SHA1(cbfac3a87a4863466117c61f2ecaf63d506352f6) ) ROM_LOAD16_BYTE( "cvj-odd.u8", 0x000001, 0x100000, CRC(f8a0fbdd) SHA1(5cc8c12c13b5eb3456083e70100450ba041de76e) ) - ROM_REGION( 0x800000, "spritegen", 0 ) /* Sprites */ + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "cv100-00.u24", 0x000000, 0x400000, CRC(cd4ae88a) SHA1(925f4ae01a6ad3633be2a61be69e163f05401cf6) ) ROM_LOAD( "cv101-00.u20", 0x400000, 0x400000, CRC(a6cb3f0b) SHA1(8d83f44a096ca0a70962ca4c602c4331874c8560) ) - ROM_REGION( 0x800000, "gfx2", 0 ) /* Tiles Plane A */ + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "cv200-00.u16", 0x000000, 0x400000, CRC(ddc8c67e) SHA1(9b99e87e69e88011e6d693d19ac5e115b4fa50b0) ) ROM_LOAD( "cv201-00.u13", 0x400000, 0x400000, CRC(65863321) SHA1(b8b75f50406068ffc3fca3887d2f0a653ca491c9) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "cv210-00.u18", 0x400000, 0x400000, CRC(7486bf3a) SHA1(3b4285ca570e9c5ad396c615bfc054372d1b0162) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "cv300-00.u4", 0x000000, 0x400000, CRC(fbeda465) SHA1(4d5066a22f4589b6b7f85b3e77c348d900ac4bdd) ) ROM_END ROM_START( galpani4 ) // only main CPU and plds dumps were provided SKNS_EUROPE - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gp4-000-e0.u10", 0x000000, 0x080000, CRC(7464cc28) SHA1(4ea6185b62d3e25efdaafb91397b51bc8f12fdee) ) // Hitachi HN27C4001G-10 ROM_LOAD16_BYTE( "gp4-001-e0.u8", 0x000001, 0x080000, CRC(8d162069) SHA1(1bd0181a9c9f37c8e8c9d6f75f045d76dffcd903) ) // Hitachi HN27C4001G-10 - ROM_REGION( 0x400000, "spritegen", 0 ) + ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) ) ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) ) ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ - ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) /* Doesn't seem to use these samples at all */ - ROM_LOAD( "gp4-301-00.u7", 0x200000, 0x200000, NO_DUMP ) /* Different then GP4-301-01 - Changed some samples when compared to U4 ROM */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples + ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) // Doesn't seem to use these samples at all + ROM_LOAD( "gp4-301-00.u7", 0x200000, 0x200000, NO_DUMP ) // Different then GP4-301-01 - Changed some samples when compared to U4 ROM ROM_REGION( 0x400, "plds", 0 ) ROM_LOAD( "skns-r09.u9", 0x000, 0x117, CRC(b02058d9) SHA1(77d07e0f329fb1969aa4543cd124e36ad34b07ba) ) // Atmel ATF16V8B @@ -1155,269 +1155,293 @@ ROM_END ROM_START( galpani4j ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gp4j1.u10", 0x000000, 0x080000, CRC(919a3893) SHA1(83b89a9e628a1f46f8a56ea512fc8ad641d5e239) ) ROM_LOAD16_BYTE( "gp4j1.u8", 0x000001, 0x080000, CRC(94cb1fb7) SHA1(ac90103dd43cdce6a287ffc13631c1de477a9a71) ) - ROM_REGION( 0x400000, "spritegen", 0 ) + ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) ) ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) ) ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) ROM_END ROM_START( galpani4k ) /* ROM-BOARD NEP-16 part number GP04K00372 with extra sound sample ROM at U7 */ SKNS_KOREA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gp4k1.u10", 0x000000, 0x080000, CRC(cbd5c3a0) SHA1(17fc0d6f6050ffd31707cee3fcc263cd5b9d0c4f) ) ROM_LOAD16_BYTE( "gp4k1.u8", 0x000001, 0x080000, CRC(7a95bfe2) SHA1(82e24fd4674ec25bc6608ced0921e8573fcff2c2) ) - ROM_REGION( 0x400000, "spritegen", 0 ) + ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) ) ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) ) ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ - ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) /* Doesn't seem to use these samples at all */ - ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) /* Changed some samples when compared to U4 ROM */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples + ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) // Doesn't seem to use these samples at all + ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) // Changed some samples when compared to U4 ROM ROM_END ROM_START( galpanidx ) SKNS_ASIA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gpdx.u10", 0x000000, 0x100000, CRC(8eca883d) SHA1(f5a102ac21aeebc44afcd0ef7f655de21d4442b2) ) ROM_LOAD16_BYTE( "gpdx.u8", 0x000001, 0x100000, CRC(b0088d8f) SHA1(2363620265d3fc53bae1c5889ea761444f80735a) ) - ROM_REGION( 0x400000, "spritegen", 0 ) + ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) ) ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) ) ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ - ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) /* Doesn't seem to use these samples at all */ - ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) /* Changed some samples when compared to U4 ROM */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples + ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) // Doesn't seem to use these samples at all + ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) // Changed some samples when compared to U4 ROM ROM_END ROM_START( galpanis ) SKNS_EUROPE - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "gps-000-e1.u10", 0x000000, 0x100000, CRC(b9ea3c44) SHA1(c1913545cd71ee75e60ade744a2a1054f770b981) ) + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "gps-000-e1.u10", 0x000000, 0x100000, CRC(b9ea3c44) SHA1(c1913545cd71ee75e60ade744a2a1054f770b981) ) // revision 1 ROM_LOAD16_BYTE( "gps-001-e1.u8", 0x000001, 0x100000, CRC(ded57bd0) SHA1(4c0122f0521829d4d83b6b1c403f7e6470f14951) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) ) ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) ) ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) ) ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) ) ROM_END ROM_START( galpanise ) SKNS_EUROPE - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "u10", 0x000000, 0x100000, CRC(e78e1623) SHA1(f68346b65d2613c8515894d9a239fcbb0b5cb52d) ) /* mask ROM with no labels */ - ROM_LOAD16_BYTE( "u8", 0x000001, 0x100000, CRC(098eff7c) SHA1(3cac22cbb11905a46afaa62c0470624b3b554fc0) ) /* mask ROM with no labels */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "u10", 0x000000, 0x100000, CRC(e78e1623) SHA1(f68346b65d2613c8515894d9a239fcbb0b5cb52d) ) // mask ROM with no labels - GPS-000-E0? + ROM_LOAD16_BYTE( "u8", 0x000001, 0x100000, CRC(098eff7c) SHA1(3cac22cbb11905a46afaa62c0470624b3b554fc0) ) // mask ROM with no labels - GPS-001-E0? - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) ) ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) ) ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) ) ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) ) ROM_END ROM_START( galpanisj ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gps-000-j1.u10", 0x000000, 0x100000, CRC(c6938c3f) SHA1(05853ee6a44a55702788a75580b04a4be45e9bcb) ) ROM_LOAD16_BYTE( "gps-001-j1.u8", 0x000001, 0x100000, CRC(e764177a) SHA1(3a1333eb1022ed1a275b9c3d44b5f4ab81618fb6) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) ) ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) ) ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) ) ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) ) ROM_END ROM_START( galpanisa ) SKNS_ASIA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "gps-000-a0_9abc.u10", 0x000000, 0x100000, CRC(4e24b799) SHA1(614f4eb6a7b0ab03ea6ada28a670ed0759b3f4f9) ) /* hand written labels with checksum */ - ROM_LOAD16_BYTE( "gps-001-a0_bd64.u8", 0x000001, 0x100000, CRC(aa4db8af) SHA1(10cc15fa065b6a2dcaf8c7d701c5ae7c18e4e863) ) /* hand written labels with checksum */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "gps-000-a0_9abc.u10", 0x000000, 0x100000, CRC(4e24b799) SHA1(614f4eb6a7b0ab03ea6ada28a670ed0759b3f4f9) ) // hand written labels with checksum + ROM_LOAD16_BYTE( "gps-001-a0_bd64.u8", 0x000001, 0x100000, CRC(aa4db8af) SHA1(10cc15fa065b6a2dcaf8c7d701c5ae7c18e4e863) ) // hand written labels with checksum - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) ) ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) ) ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) ) ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) ) ROM_END ROM_START( galpanisk ) SKNS_KOREA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "gps-000-k1.u10", 0x000000, 0x100000, CRC(c9ff3d8a) SHA1(edfec265654aaa8cb307424e5b2899e708392cd0) ) + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "gps-000-k1.u10", 0x000000, 0x100000, CRC(c9ff3d8a) SHA1(edfec265654aaa8cb307424e5b2899e708392cd0) ) // revision 1 ROM_LOAD16_BYTE( "gps-001-k1.u8", 0x000001, 0x100000, CRC(354e601d) SHA1(4d176f2337a3b0b63548b2e542f9fa87d0a1ef7b) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) ) ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) ) ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) ) ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples + ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) ) +ROM_END + +ROM_START( galpaniska ) + SKNS_KOREA + + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "gps-000-k0.u10", 0x000000, 0x100000, CRC(be74128c) SHA1(6d506e1bb715e6bfd98eda5e69475d2f75911d26) ) // revision 0 (first version) + ROM_LOAD16_BYTE( "gps-001-k0.u8", 0x000001, 0x100000, CRC(701f793d) SHA1(7278dc68d5b92a26675333ef8b4b2c04c27f1b03) ) + + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites + ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) ) + ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) ) + ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) ) + + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A + ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) ) + ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) ) + + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? + + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) ) ROM_END ROM_START( galpans2 ) //only the 2 program ROMs were dumped, but mask ROMs are supposed to match. SKNS_EUROPE - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gps2e_u6__ver.3.u6", 0x000000, 0x100000, CRC(72fff5d1) SHA1(57001e04c469281a82a2956c6bc33502d5a3b882) ) ROM_LOAD16_BYTE( "gps2e_u4__ver.3.u4", 0x000001, 0x100000, CRC(95061601) SHA1(f98f1af9877b097e97acc5a3844ef9c523a92843) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gs210000.u21", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) ROM_LOAD( "gs210100.u20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) ) ROM_LOAD( "gs210200.u8", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) ) ROM_LOAD( "gs210300.u32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gs220000.u17", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) ) ROM_LOAD( "gs220100.u9", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "gs221000.u3", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gs230000.u1", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) ) ROM_END ROM_START( galpans2j ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gps2j.u6", 0x000000, 0x100000, CRC(6e74005b) SHA1(a57e8307062e262c2e7a84e2c58f7dfe03fc0f78) ) ROM_LOAD16_BYTE( "gps2j.u4", 0x000001, 0x100000, CRC(9b4b2304) SHA1(0b481f4d71d92bf23f38ed22979efd4409004857) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gs210000.u21", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) ROM_LOAD( "gs210100.u20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) ) ROM_LOAD( "gs210200.u8", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) ) ROM_LOAD( "gs210300.u32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gs220000.u17", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) ) ROM_LOAD( "gs220100.u9", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "gs221000.u3", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gs230000.u1", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) ) ROM_END ROM_START( galpans2a ) SKNS_ASIA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gps2av11.u6", 0x000000, 0x100000, CRC(61c05d5f) SHA1(e47c7951c1f688edb6c677532f750537a64bb7b3) ) ROM_LOAD16_BYTE( "gps2av11.u4", 0x000001, 0x100000, CRC(2e8c0ac2) SHA1(d066260d6d3c2924b42394e867523e6112a125c5) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "gs210000.u21", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) ROM_LOAD( "gs210100.u20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) ) ROM_LOAD( "gs210200.u8", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) ) ROM_LOAD( "gs210300.u32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gs220000.u17", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) ) ROM_LOAD( "gs220100.u9", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "gs221000.u3", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gs230000.u1", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) ) ROM_END @@ -1442,369 +1466,368 @@ Gals Panic 2 set. ROM_START( galpansu ) SKNS_KOREA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "su.u10", 0x000000, 0x100000, CRC(5ae66218) SHA1(c3f32603e1da945efb984ff99e1a30202e535773) ) ROM_LOAD16_BYTE( "su.u8", 0x000001, 0x100000, CRC(10977a03) SHA1(2ab95398d6b88d8819f368ee6104d7f8b485778d) ) - /* the rest of the ROMs match Gals Panic S2, but are in different locations */ - ROM_REGION( 0x1000000, "spritegen", 0 ) - ROM_LOAD( "24", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) - ROM_LOAD( "20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) ) - ROM_LOAD( "17", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) ) - ROM_LOAD( "32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites + ROM_LOAD( "24", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) // == gs210000.u21 + ROM_LOAD( "20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) ) // == gs210100.u20 + ROM_LOAD( "17", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) ) // == gs210200.u8 + ROM_LOAD( "32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) ) // == gs210300.u32 - ROM_REGION( 0x800000, "gfx2", 0 ) - ROM_LOAD( "16", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) ) - ROM_LOAD( "13", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A + ROM_LOAD( "16", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) ) // == gs220000.u17 + ROM_LOAD( "13", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) ) // == gs220100.u9 - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ - ROM_LOAD( "7", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) ) + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? + ROM_LOAD( "7", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) ) // == gs221000.u3 - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ - ROM_LOAD( "4", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) ) + ROM_REGION( 0x400000, "ymz", 0 ) // Samples + ROM_LOAD( "4", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) ) // == gs230000.u1 ROM_END ROM_START( galpans3 ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gpss3.u10", 0x000000, 0x100000, CRC(c1449a72) SHA1(02db81a0ea349742d6ddf71d59fcfce45f0c5212) ) ROM_LOAD16_BYTE( "gpss3.u8", 0x000001, 0x100000, CRC(11eb44cf) SHA1(482ef27fa86d6777def46918eac8be019896c0b0) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "u24.bin", 0x000000, 0x800000, CRC(70613168) SHA1(637c50e733dbc0226b1e0acc8000faa7e8977cb6) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "u16.bin", 0x000000, 0x800000, CRC(a96daf2a) SHA1(40f4c32158d320146aeeac34c15ca6816a6876bc) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "u4.bin", 0x000000, 0x400000, CRC(bf5736c6) SHA1(781292d87e9da1d21c1ac540baefff5e2f84a3f5) ) ROM_END ROM_START( gutsn ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "gts000j0.u6", 0x000000, 0x080000, CRC(8ee91310) SHA1(8dd918189fe445d79c7f028168862b852f70a6f2) ) ROM_LOAD16_BYTE( "gts001j0.u4", 0x000001, 0x080000, CRC(80b8ee66) SHA1(4faf5f358ceee866f09bd81e63ba3ebd21bde835) ) - ROM_REGION( 0x400000, "spritegen", 0 ) + ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites ROM_LOAD( "gts10000.u24", 0x000000, 0x400000, CRC(1959979e) SHA1(92a68784664dd833ca6fcca1b15cd46b9365d081) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "gts20000.u16", 0x000000, 0x400000, CRC(c443aac3) SHA1(b0416a09ead26077e9276bae98d94eeb1cf86877) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "gts30000.u4", 0x000000, 0x400000, CRC(8c169141) SHA1(41caea6fa644515f7417c84bdac599b13ad07e8c) ) ROM_END ROM_START( panicstr ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "ps1000j0.u10", 0x000000, 0x100000, CRC(59645f89) SHA1(8da205c6e38899d6c637941700dd7eea56011c10) ) ROM_LOAD16_BYTE( "ps1001j0.u8", 0x000001, 0x100000, CRC(c4722be9) SHA1(7009d320a80cfa7d80efc5fc915081914bc3c827) ) - ROM_REGION( 0x800000, "spritegen", 0 ) + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "ps-10000.u24", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) ROM_LOAD( "ps110100.u20", 0x400000, 0x400000, CRC(e292f393) SHA1(b0914f7f0abf9f821f2592c289ea4e3b3e7f819a) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "ps120000.u16", 0x000000, 0x400000, CRC(d772ac15) SHA1(6bf7b9bfccdcb7481b21fa2ab9b683d79033a192) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "ps-30000.u4", 0x000000, 0x400000, CRC(2262e263) SHA1(73443e5f40f5c5c9bd41c6207fa6376072f0f65e) ) ROM_END ROM_START( puzzloop ) SKNS_EUROPE - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "pl00e4.u6", 0x000000, 0x080000, CRC(7d3131a5) SHA1(f9302aa27addb8a730102b1869a34063d8b44e62) ) /* V0.94 */ - ROM_LOAD16_BYTE( "pl00e4.u4", 0x000001, 0x080000, CRC(40dc3291) SHA1(d955752a2c884e6dd951f9a87f9d249bb1ab9116) ) /* V0.94 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "pl00e4.u6", 0x000000, 0x080000, CRC(7d3131a5) SHA1(f9302aa27addb8a730102b1869a34063d8b44e62) ) // V0.94 + ROM_LOAD16_BYTE( "pl00e4.u4", 0x000001, 0x080000, CRC(40dc3291) SHA1(d955752a2c884e6dd951f9a87f9d249bb1ab9116) ) // V0.94 - ROM_REGION( 0x800000, "spritegen", 0 ) + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) ROM_END ROM_START( puzzloope ) SKNS_EUROPE - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "pl00e1.u6", 0x000000, 0x080000, CRC(273adc38) SHA1(37ca873342ba9fb9951114048a9cd255f73fe19c) ) /* V0.93 */ - ROM_LOAD16_BYTE( "pl00e1.u4", 0x000001, 0x080000, CRC(14ac2870) SHA1(d1abcfd64d7c0ead67e879c40e1010453fd4da13) ) /* V0.93 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "pl00e1.u6", 0x000000, 0x080000, CRC(273adc38) SHA1(37ca873342ba9fb9951114048a9cd255f73fe19c) ) // V0.93 + ROM_LOAD16_BYTE( "pl00e1.u4", 0x000001, 0x080000, CRC(14ac2870) SHA1(d1abcfd64d7c0ead67e879c40e1010453fd4da13) ) // V0.93 - ROM_REGION( 0x800000, "spritegen", 0 ) + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) ROM_END ROM_START( puzzloopj ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "pl0j2.u6", 0x000000, 0x080000, CRC(23c3bf97) SHA1(77ea1f32bed5709a6ad5b250370f08cfe8036867) ) /* V0.94 */ - ROM_LOAD16_BYTE( "pl0j2.u4", 0x000001, 0x080000, CRC(55b2a3cb) SHA1(d4cbe143fe2ad622af808cbd9eedffeff3b77e0d) ) /* V0.94 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "pl0j2.u6", 0x000000, 0x080000, CRC(23c3bf97) SHA1(77ea1f32bed5709a6ad5b250370f08cfe8036867) ) // V0.94 + ROM_LOAD16_BYTE( "pl0j2.u4", 0x000001, 0x080000, CRC(55b2a3cb) SHA1(d4cbe143fe2ad622af808cbd9eedffeff3b77e0d) ) // V0.94 - ROM_REGION( 0x800000, "spritegen", 0 ) + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) ROM_END ROM_START( puzzloopa ) SKNS_ASIA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "pl0a3.u6", 0x000000, 0x080000, CRC(4e8673b8) SHA1(17acfb0550912e6f2519df2bc24fbf629a1f6147) ) /* V0.94 */ - ROM_LOAD16_BYTE( "pl0a3.u4", 0x000001, 0x080000, CRC(e08a1a07) SHA1(aba58a81ae46c7b4e235a3213984026d170fa189) ) /* V0.94 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "pl0a3.u6", 0x000000, 0x080000, CRC(4e8673b8) SHA1(17acfb0550912e6f2519df2bc24fbf629a1f6147) ) // V0.94 + ROM_LOAD16_BYTE( "pl0a3.u4", 0x000001, 0x080000, CRC(e08a1a07) SHA1(aba58a81ae46c7b4e235a3213984026d170fa189) ) // V0.94 - ROM_REGION( 0x800000, "spritegen", 0 ) + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) ROM_END ROM_START( puzzloopk ) SKNS_KOREA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "pl0k4.u6", 0x000000, 0x080000, CRC(8d81f20c) SHA1(c32a525e8f92a625e3fecb7c43dd04b13e0a75e4) ) /* V0.94 */ - ROM_LOAD16_BYTE( "pl0k4.u4", 0x000001, 0x080000, CRC(17c78e41) SHA1(4a4b612ae00d521d2947ab32554ebb615be72471) ) /* V0.94 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "pl0k4.u6", 0x000000, 0x080000, CRC(8d81f20c) SHA1(c32a525e8f92a625e3fecb7c43dd04b13e0a75e4) ) // V0.94 + ROM_LOAD16_BYTE( "pl0k4.u4", 0x000001, 0x080000, CRC(17c78e41) SHA1(4a4b612ae00d521d2947ab32554ebb615be72471) ) // V0.94 - ROM_REGION( 0x800000, "spritegen", 0 ) + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) ROM_END ROM_START( puzzloopu ) SKNS_USA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "plue5.u6", 0x000000, 0x080000, CRC(e6f3f82f) SHA1(ac61dc22fa3c1b1c2f3a41d3a8fb43938b77ca68) ) /* V0.94 */ - ROM_LOAD16_BYTE( "plue5.u4", 0x000001, 0x080000, CRC(0d081d30) SHA1(ec0cdf120126104b9bb706f68c9ba9c3777dd69c) ) /* V0.94 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "plue5.u6", 0x000000, 0x080000, CRC(e6f3f82f) SHA1(ac61dc22fa3c1b1c2f3a41d3a8fb43938b77ca68) ) // V0.94 + ROM_LOAD16_BYTE( "plue5.u4", 0x000001, 0x080000, CRC(0d081d30) SHA1(ec0cdf120126104b9bb706f68c9ba9c3777dd69c) ) // V0.94 - ROM_REGION( 0x800000, "spritegen", 0 ) + ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) ROM_END ROM_START( jjparads ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "jp1j1.u10", 0x000000, 0x080000, CRC(de2fb669) SHA1(229ff1ae0ec5bc77fc17642964e0bb0146594e86) ) ROM_LOAD16_BYTE( "jp1j1.u8", 0x000001, 0x080000, CRC(7276efb1) SHA1(3edc265b5c02da7d21a2494a6dc2878fbad93f87) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "jp100-00.u24", 0x000000, 0x400000, CRC(f31b2e95) SHA1(7e5bb518d4f6423785d3f9f2752a624a66b42469) ) ROM_LOAD( "jp101-00.u20", 0x400000, 0x400000, CRC(70cc8c24) SHA1(a4805ce19f512b047829548b635e68690d714175) ) ROM_LOAD( "jp102-00.u17", 0x800000, 0x400000, CRC(35401c1e) SHA1(38fe86a08555bb823b8d64ac043330aaaa6b8892) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "jp200-00.u16", 0x000000, 0x200000, CRC(493d63db) SHA1(4b8fe7ff1ae14a914a675ce4072a4d9e5cfc08b0) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x200000, "ymz", 0 ) // Samples ROM_LOAD( "jp300-00.u4", 0x000000, 0x200000, CRC(7023fe46) SHA1(24a92133bc664d63b3be67c2ef11cd7b605ee7e8) ) ROM_END ROM_START( jjparad2 ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "jp2000j1.u6", 0x000000, 0x080000, CRC(5d75e765) SHA1(33bcd8f929f6025b00df2ea783b13a391a28a5c3) ) ROM_LOAD16_BYTE( "jp2001j1.u4", 0x000001, 0x080000, CRC(1771910a) SHA1(7ca9584d379d7b41f303a3ba861f943c570ad97c) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "jp210000.u21", 0x000000, 0x400000, CRC(79a7e3d7) SHA1(bd0f8d01971e5895395f97f2520bcd03ab19d229) ) ROM_LOAD( "jp210100.u20", 0x400000, 0x400000, CRC(42415e0c) SHA1(f7bff86d55fa9002fbd14e4c62f9d3df8faaf7d0) ) ROM_LOAD( "jp210200.u8", 0x800000, 0x400000, CRC(26731745) SHA1(8939d36b82b10b1010e4b924e6b9fdd4742efe48) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "jp220000.u17", 0x000000, 0x400000, CRC(d0e71873) SHA1(c6ffba3624e6d4c2d4e12ef7d88a02cbc3867b18) ) ROM_LOAD( "jp220100.u9", 0x400000, 0x400000, CRC(4c7d964d) SHA1(3352cd866a64466f4f5a990c2c5e3e28e7028a99) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "jp230000.u1", 0x000000, 0x400000, CRC(73e30d7f) SHA1(af5b16cec722dbbf0e03d73edfa133dbf10ac4f3) ) ROM_END ROM_START( sengekis ) SKNS_ASIA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "ss01a.u6", 0x000000, 0x080000, CRC(962fe857) SHA1(3df74c5efff11333dea9316a063129dcec0d7bdd) ) ROM_LOAD16_BYTE( "ss01a.u4", 0x000001, 0x080000, CRC(ee853c23) SHA1(ddbf7f7cf509788ee3daf7b4d8ae1482e6e31a03) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "ss100-00.u21", 0x000000, 0x400000, CRC(bc7b3dfa) SHA1(dff10a7aef548abda48470293382057a2ca9557e) ) ROM_LOAD( "ss101-00.u20", 0x400000, 0x400000, CRC(ab2df280) SHA1(e456c578a36f585b24379d74def1bcab276c2b1b) ) ROM_LOAD( "ss102-00.u8", 0x800000, 0x400000, CRC(0845eafe) SHA1(663b163bf4e87c7df0030e791f95b1a5827de315) ) ROM_LOAD( "ss103-00.u32", 0xc00000, 0x400000, CRC(ee451ac9) SHA1(01cc6b6f371c0090a6a7f4c33d05f4b9a6c59fee) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "ss200-00.u17", 0x000000, 0x400000, CRC(cd773976) SHA1(38b8df5e685be65c3fde09f9e585591f678632d4) ) ROM_LOAD( "ss201-00.u9", 0x400000, 0x400000, CRC(301fad4c) SHA1(15faf37eeec5cc46afcb4bd236345b5c3dd647ac) ) - ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "ss210-00.u3", 0x400000, 0x200000, CRC(c3697805) SHA1(bd41064e3527cdc4b9a4ab9c423c916309b3f057) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "ss300-00.u1", 0x000000, 0x400000, CRC(35b04b18) SHA1(b69f33fc6a50ec20382329317d20b3c1e7f01b87) ) ROM_END ROM_START( sengekisj ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "ss01j.u6", 0x000000, 0x080000, CRC(9efdcd5a) SHA1(66cca04d07999dc8ca0bcf19db925996b34d0390) ) ROM_LOAD16_BYTE( "ss01j.u4", 0x000001, 0x080000, CRC(92c3f45e) SHA1(60c647e66b0126fb7749874be39938972481b957) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "ss100-00.u21", 0x000000, 0x400000, CRC(bc7b3dfa) SHA1(dff10a7aef548abda48470293382057a2ca9557e) ) ROM_LOAD( "ss101-00.u20", 0x400000, 0x400000, CRC(ab2df280) SHA1(e456c578a36f585b24379d74def1bcab276c2b1b) ) ROM_LOAD( "ss102-00.u8", 0x800000, 0x400000, CRC(0845eafe) SHA1(663b163bf4e87c7df0030e791f95b1a5827de315) ) ROM_LOAD( "ss103-00.u32", 0xc00000, 0x400000, CRC(ee451ac9) SHA1(01cc6b6f371c0090a6a7f4c33d05f4b9a6c59fee) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "ss200-00.u17", 0x000000, 0x400000, CRC(cd773976) SHA1(38b8df5e685be65c3fde09f9e585591f678632d4) ) ROM_LOAD( "ss201-00.u9", 0x400000, 0x400000, CRC(301fad4c) SHA1(15faf37eeec5cc46afcb4bd236345b5c3dd647ac) ) - ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "ss210-00.u3", 0x400000, 0x200000, CRC(c3697805) SHA1(bd41064e3527cdc4b9a4ab9c423c916309b3f057) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "ss300-00.u1", 0x000000, 0x400000, CRC(35b04b18) SHA1(b69f33fc6a50ec20382329317d20b3c1e7f01b87) ) ROM_END ROM_START( senknow ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "snw000j1.u6", 0x000000, 0x080000, CRC(0d6136f6) SHA1(eedd011cfe03577bfaf386723502d03f6e5dbd8c) ) ROM_LOAD16_BYTE( "snw001j1.u4", 0x000001, 0x080000, CRC(4a10ec3d) SHA1(bbec4fc53bd61d06ffe5a53debada5785b124fdd) ) - ROM_REGION( 0x0800000, "spritegen", 0 ) + ROM_REGION( 0x0800000, "spritegen", 0 ) // Sprites ROM_LOAD( "snw10000.u21", 0x000000, 0x400000, CRC(5133c69c) SHA1(d279df3ffd005dbf0930a8e40eaf2467f8653284) ) ROM_LOAD( "snw10100.u20", 0x400000, 0x400000, CRC(9dafe03f) SHA1(978b4597ff2a54ac5049fd64798e8173b29dd363) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "snw20000.u17", 0x000000, 0x400000, CRC(d5fe5f8c) SHA1(817d8d0a5fbc0c50dc3c592f938150f82df97cec) ) ROM_LOAD( "snw20100.u9", 0x400000, 0x400000, CRC(c0037846) SHA1(3267b142ebce47e1717250239d98fdb4af7964f8) ) - ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? ROM_LOAD( "snw21000.u3", 0x400000, 0x400000, CRC(f5c23e79) SHA1(b509680001c3205b289f43d4f44aaaa7f896419b) ) - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "snw30000.u1", 0x000000, 0x400000, CRC(ec9eef40) SHA1(8f74ec9cb6054a77227c0505094f0ef8bc371429) ) ROM_END ROM_START( teljan ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "tel1j.u10", 0x000000, 0x080000, CRC(09b552fe) SHA1(2f315fd09eb22fa8c81faa1e926038f20daa845f) ) ROM_LOAD16_BYTE( "tel1j.u8", 0x000001, 0x080000, CRC(070b4345) SHA1(5743f12a351b89593c6adfaeb8a5a2ab7bc8b424) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "tj100-00.u24", 0x000000, 0x400000, CRC(810144f1) SHA1(1c90e71e5f34ee05771ab4a673329f78f17791df) ) ROM_LOAD( "tj101-00.u20", 0x400000, 0x400000, CRC(82f570e1) SHA1(3ba9d1775f897052aca5cff2edbf575399101c5c) ) ROM_LOAD( "tj102-00.u17", 0x800000, 0x400000, CRC(ace875dc) SHA1(be97c895beeac979c5704986e818d4f3cfa00e49) ) - ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "tj200-00.u16", 0x000000, 0x400000, CRC(be0f90b2) SHA1(1848a65f244e1e8a3ff7ab38e76f86cabca8b47e) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "tj300-00.u4", 0x000000, 0x400000, CRC(685495c4) SHA1(3853c0583b84ed3163370ae48e4b3912cbeb986e) ) ROM_END @@ -1812,114 +1835,114 @@ ROM_END ROM_START( ryouran ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "or-000-j2.u10", 0x000000, 0x080000, CRC(cba8ca4e) SHA1(7389502622a04101ca34f7b390ca0da820f62590) ) ROM_LOAD16_BYTE( "or-001-j2.u8", 0x000001, 0x080000, CRC(8e79c6b7) SHA1(0441d279cdc998e96abd6f607eceb4f866f58337) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "or100-00.u24", 0x000000, 0x400000, CRC(e9c7695b) SHA1(0a104d4e4e0c933d2eaaf410a8c243db6673786a) ) ROM_LOAD( "or101-00.u20", 0x400000, 0x400000, CRC(fe06bf12) SHA1(f3a2f88aed65bcc1c16f37fd4c0011e3538128f7) ) ROM_LOAD( "or102-00.u17", 0x800000, 0x400000, CRC(f2a5237b) SHA1(b8871f9c0f3864c334ec9a8146cf7dd1961ecb94) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "or200-00.u16", 0x000000, 0x400000, CRC(4c4701a8) SHA1(7b397b553ba86bba2ee82228cabdf2179e878d69) ) ROM_LOAD( "or201-00.u13", 0x400000, 0x400000, CRC(a94064aa) SHA1(5d736f810ffdbb6ada5c5efcb5fb29eedafc3e2f) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "or300-00.u4", 0x000000, 0x400000, CRC(a3f64b79) SHA1(6ecb2b4c0d213fe5384b19d6bfdb86871f21fd9f) ) ROM_END ROM_START( ryourano ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "or000j1.u10", 0x000000, 0x080000, CRC(d93aa491) SHA1(dc01707f1e80d81f28d6b685d08fc6c0d2bf7330) ) ROM_LOAD16_BYTE( "or001j1.u8", 0x000001, 0x080000, CRC(f466e5e9) SHA1(65d699f6f9e299333e51a6a52cb13a0f1a902fe1) ) - ROM_REGION( 0x1000000, "spritegen", 0 ) + ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites ROM_LOAD( "or100-00.u24", 0x000000, 0x400000, CRC(e9c7695b) SHA1(0a104d4e4e0c933d2eaaf410a8c243db6673786a) ) ROM_LOAD( "or101-00.u20", 0x400000, 0x400000, CRC(fe06bf12) SHA1(f3a2f88aed65bcc1c16f37fd4c0011e3538128f7) ) ROM_LOAD( "or102-00.u17", 0x800000, 0x400000, CRC(f2a5237b) SHA1(b8871f9c0f3864c334ec9a8146cf7dd1961ecb94) ) - ROM_REGION( 0x800000, "gfx2", 0 ) + ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "or200-00.u16", 0x000000, 0x400000, CRC(4c4701a8) SHA1(7b397b553ba86bba2ee82228cabdf2179e878d69) ) ROM_LOAD( "or201-00.u13", 0x400000, 0x400000, CRC(a94064aa) SHA1(5d736f810ffdbb6ada5c5efcb5fb29eedafc3e2f) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymz", 0 ) // Samples ROM_LOAD( "or300-00.u4", 0x000000, 0x400000, CRC(a3f64b79) SHA1(6ecb2b4c0d213fe5384b19d6bfdb86871f21fd9f) ) ROM_END ROM_START( vblokbrk ) SKNS_EUROPE - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ - ROM_LOAD16_BYTE( "sk000e2-e.u10", 0x000000, 0x080000, CRC(5a278f10) SHA1(6f1be0657da76144b0feeed672d92a85091289b6) ) /* labeled SK000e2/E */ - ROM_LOAD16_BYTE( "sk000e-o.u8", 0x000001, 0x080000, CRC(aecf0647) SHA1(4752e5012bae8e7af3972b455b4346499ec2b49c) ) /* labeled SK000e/O */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 + ROM_LOAD16_BYTE( "sk000e2-e.u10", 0x000000, 0x080000, CRC(5a278f10) SHA1(6f1be0657da76144b0feeed672d92a85091289b6) ) // labeled SK000e2/E + ROM_LOAD16_BYTE( "sk000e-o.u8", 0x000001, 0x080000, CRC(aecf0647) SHA1(4752e5012bae8e7af3972b455b4346499ec2b49c) ) // labeled SK000e/O - ROM_REGION( 0x0400000, "spritegen", 0 ) + ROM_REGION( 0x0400000, "spritegen", 0 ) // Sprites ROM_LOAD( "sk-100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) ) ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "sk-200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x200000, "ymz", 0 ) // Samples ROM_LOAD( "sk-300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) ) ROM_END ROM_START( vblokbrka ) SKNS_ASIA - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "sk01a.u10", 0x000000, 0x080000, CRC(4d1be53e) SHA1(3d28b73a67530147962b8df6244af8bea2ab080f) ) ROM_LOAD16_BYTE( "sk01a.u8", 0x000001, 0x080000, CRC(461e0197) SHA1(003573a4abdbecc6dd234a13c61ef07a25d980e2) ) - ROM_REGION( 0x0400000, "spritegen", 0 ) + ROM_REGION( 0x0400000, "spritegen", 0 ) // Sprites ROM_LOAD( "sk-100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) ) ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "sk-200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x200000, "ymz", 0 ) // Samples ROM_LOAD( "sk-300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) ) ROM_END ROM_START( sarukani ) SKNS_JAPAN - ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000 ROM_LOAD16_BYTE( "sk1j1.u10", 0x000000, 0x080000, CRC(fcc131b6) SHA1(5e3e71ee1f736b6098e671e6f57b1fb313c81adb) ) ROM_LOAD16_BYTE( "sk1j1.u8", 0x000001, 0x080000, CRC(3b6aa343) SHA1(a969b20b1170d82351024cab9e37f2fbfd01ddeb) ) - ROM_REGION( 0x0400000, "spritegen", 0 ) + ROM_REGION( 0x0400000, "spritegen", 0 ) // Sprites ROM_LOAD( "sk-100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) ) ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) ) - ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A ROM_LOAD( "sk-200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) ) - ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */ - /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ - /* 0x040000 - 0x3fffff empty? */ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B + // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles + // 0x040000 - 0x3fffff empty? - ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */ + ROM_REGION( 0x200000, "ymz", 0 ) // Samples ROM_LOAD( "sk-300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) ) ROM_END @@ -1936,11 +1959,12 @@ GAME( 2001, galpanidx, galpani4, sknsa, cyvern, skns_state, init_galpani4, RO GAME( 1996, jjparads, skns, sknsj, skns_1p, skns_state, init_jjparads, ROT0, "Electro Design", "Jan Jan Paradise", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1997, galpanis, skns, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, set 1)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1997, galpanise, galpanis, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, set 2)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1997, galpanisj, galpanis, sknsj, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Japan)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, galpanis, skns, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, revision 1)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, galpanise, galpanis, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, set 2)", MACHINE_IMPERFECT_GRAPHICS ) // E0 set?? +GAME( 1997, galpanisj, galpanis, sknsj, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Japan, revision 1)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1997, galpanisa, galpanis, sknsa, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Asia)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1997, galpanisk, galpanis, sknsk, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Korea)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, galpanisk, galpanis, sknsk, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Korea, revision 1)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, galpaniska,galpanis, sknsk, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Korea)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1997, jjparad2, skns, sknsj, skns_1p, skns_state, init_jjparad2, ROT0, "Electro Design", "Jan Jan Paradise 2", MACHINE_IMPERFECT_GRAPHICS ) @@ -1961,8 +1985,8 @@ GAME( 1998, puzzloopa, puzzloop, sknsa, puzzloop, skns_state, init_puzzloopa, RO GAME( 1998, puzzloopk, puzzloop, sknsk, puzzloop, skns_state, init_puzzloopu, ROT0, "Mitchell", "Puzz Loop (Korea)", MACHINE_IMPERFECT_GRAPHICS ) // Same speed up as US version GAME( 1998, puzzloopu, puzzloop, sknsu, puzzloop, skns_state, init_puzzloopu, ROT0, "Mitchell", "Puzz Loop (USA)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1998, ryouran , skns, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (set 1)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1998, ryourano, ryouran, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (set 2)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, ryouran , skns, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (revision 2)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, ryourano, ryouran, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (revision 1)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1999, galpans2, skns, sknse, galpanis, skns_state, init_galpans2, ROT0, "Kaneko", "Gals Panic S2 (Europe)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1999, galpans2j, galpans2, sknsj, galpanis, skns_state, init_galpans2, ROT0, "Kaneko", "Gals Panic S2 (Japan)", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index dd665143c94..c6cb7e727b2 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -39599,6 +39599,7 @@ galpanisa // 1997.04 (c) 1997 Kaneko (Asia) galpanise // 1997.04 (c) 1997 Kaneko (Europe) galpanisj // 1997.04 (c) 1997 Kaneko (Japan) galpanisk // 1997.04 (c) 1997 Kaneko (Korea) +galpaniska // 1997.04 (c) 1997 Kaneko (Korea) galpans2 // 1999.?? (c) 1999 Kaneko (Europe) galpans2a // 1999.?? (c) 1999 Kaneko (Asia) galpans2j // 1999.02 (c) 1999 Kaneko (Japan) -- cgit v1.2.3 From fc8e370979b4bb31f53cd85cb8b24cf7c44eef27 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Wed, 9 Jun 2021 13:01:56 +0200 Subject: Big cgenie cassette softwarelist update [Dirk Best, everygamegoing.com] New working software list additions ----------------------------------- Character Generator/Editor Machine Monitor (?) M/C Tape Copier Orgel Super Gen v2 The Word 1.2 Colour Emu 3.0 Welcome Tape Colours Invader Demo Line Drawing Magic Carpet Demo PSG-Demo Top of the World Music Demo 3D Haunted House A10 Bomber Airaid Alien Attack Aliens Backgammon Bang Bang Bak-Pak Blastaroids Chomper Colour Genie Chess Colour Frog Colour Genie Pontoon Colour Qix Colour Schach (TCS, 16k) Colour Quest 1: Find the Diamond of Balmarlon Colour Quest 2: The Vegan Incident Colour Quest 3: Enchanted Gardenss Colour Quest 4: Camelot Adventure Colour Quest 4: Camelot Adventure (Marcos Software) Colour Quest 6: Fishing Quest Demon Derby Defender Eliminator (Gumboot) Flying Bytes Galactic Attack (Joystick) Galactic Attack (Keyboard) Geniepede Gobble Garden Gorilla Gotya Grabit Grand Prix Hektik (English) Hero Run Intellegent Games Boards Invaders from Space Jackpot Jumbo Kong Mad Driver Madventure 2: Shipwreck Mampf Man II (alt) Martian Rescue Mauer Maze Chaser Meteor (32k) Millipede Mysterious Adventures No. 1: The Golden Baton Mysterious Adventures No. 2: The Time Machine Mysterious Adventures No. 3: Arrow of Death (Pt. 1) Mysterious Adventures No. 6: Circus Numbers Up Shoot Out Palace of Ming Panik Plato Point Chase Protheus Schach Puckman Punktejagd Punter Q*Man Quandry Quasimodo Racing Driver Skramble (new parent) Soft-Bandit Space Shares Spell A Picture Snake Snatch Star Trek Stockmarket Simulation Swag! Tausendfuss (new parent) Terry's Travels Tron Unknown Chase Game Unknown Game by S. J. Sole Vier Gewinnt Vortex What's My Rhyme Wordy Zalaga (new parent) New NOT_WORKING software list additions --------------------------------------- Die Berliner Uhr Plotter 2.5 Shaper: Shape Table Editor Numbers Up Shoot Out (Alt) Racing Roulette Tarnsman of Gor To Hell And Back --- hash/cgenie_cass.xml | 1656 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 1572 insertions(+), 84 deletions(-) diff --git a/hash/cgenie_cass.xml b/hash/cgenie_cass.xml index c2e8bbeb5a2..9d6fab633b5 100644 --- a/hash/cgenie_cass.xml +++ b/hash/cgenie_cass.xml @@ -1,37 +1,44 @@ + @@ -51,19 +58,6 @@ Screen-Printer (standalone) - - BängBäng - 2 player gun fight - 1983 - TCS - - - - - - - - - Basicode 1983 @@ -127,6 +121,20 @@ Screen-Printer (standalone) + + + Die Berliner Uhr + 198? + <unknown> + + + + + + + + + Genie I II / TRS 80 Cassettenlader 1984 @@ -140,6 +148,20 @@ Screen-Printer (standalone) + + + Character Generator/Editor + 198? + Gumboot Software + + + + + + + + + Charset 198? @@ -153,11 +175,26 @@ Screen-Printer (standalone) + Colour-Assembler 1983 TCS - + @@ -341,7 +378,7 @@ Screen-Printer (standalone) - + Grafik-Editor 1983 TCS @@ -355,6 +392,33 @@ Screen-Printer (standalone) + + + Machine Monitor (?) + 198? + <unknown> + + + + + + + + + + + M/C Tape Copier + 1983 + Gumboot Software + + + + + + + + + Nato Morsing Standard Code 1983 @@ -394,6 +458,32 @@ Screen-Printer (standalone) + + Orgel + 1982 + TCS + + + + + + + + + + + Plotter 2.5 + 1983 + TCS + + + + + + + + + Primzahlsuche 198? @@ -443,6 +533,20 @@ Screen-Printer (standalone) + + + Shaper: Shape Table Editor + 1983 + <unknown> + + + + + + + + + Shift Transformation 198? @@ -493,6 +597,19 @@ Screen-Printer (standalone) + + Super Gen v2 + 198? + Superb Software + + + + + + + + + Super-Grafik 1984 @@ -557,6 +674,19 @@ Screen-Printer (standalone) + + The Word 1.2 + 1985 + JD Tronics + + + + + + + + + Tracemon 1983 @@ -646,11 +776,26 @@ Screen-Printer (standalone) + + Colour Emu 3.0 Welcome Tape + 1997 + <homebrew> + + + + + + + + + + Colour Genie Demonstration Kassette 198? Carsten Schmidt - + + @@ -659,6 +804,18 @@ Screen-Printer (standalone) + + Colours + ???? + <unknown> + + + + + + + + Der Flohwalzer 198? @@ -671,6 +828,57 @@ Screen-Printer (standalone) + + + Invader Demo + 198? + Gumboot Software + + + + + + + + + + + + + + + + + + + + + + Line Drawing + ???? + <unknown> + + + + + + + + + + + Magic Carpet Demo + 198? + Gumboot Software + + + + + + + + + Musik 1983 @@ -696,8 +904,64 @@ Screen-Printer (standalone) + + + PSG-Demo + ???? + <unknown> + + + + + + + + + + Top of the World Music Demo + ???? + <unknown> + + + + + + + + + + 3D Haunted House + 1984 + <unknown> + + + + + + + + + + + A10 Bomber + 1983 + Ipswich Software Factory + + + + + + + + + + + + + + Abenteuerland 198? @@ -723,6 +987,46 @@ Screen-Printer (standalone) + + + Airaid + 198? + Kwerty Software + + + + + + + + + + + Alien Attack + 198? + <unknown> + + + + + + + + + + + Aliens + 198? + Kwerty Software + + + + + + + + + Andromeda (32k) 1982 @@ -749,10 +1053,12 @@ Screen-Printer (standalone) + Astronaut 1984 - N. A. Taylor + Arcade Games + @@ -761,6 +1067,63 @@ Screen-Printer (standalone) + + Backgammon + 1983 + JD Tronics + + + + + + + + + + BängBäng - 2 player gun fight + 1983 + TCS + + + + + + + + + + + Bang Bang + 1983 + TCS / Gumboot Software + + + + + + + + + + + + Bak-Pak + 1984 + Arcade Games + + + + + + + + + + + + + + Ballon 198? @@ -773,6 +1136,19 @@ Screen-Printer (standalone) + + Blastaroids + 1983 + Algray Software + + + + + + + + + Botschaft 1985 @@ -810,7 +1186,7 @@ Screen-Printer (standalone) - + @@ -823,7 +1199,7 @@ Screen-Printer (standalone) - + @@ -835,7 +1211,20 @@ Screen-Printer (standalone) - + + + + + + + Chomper + 198? + Kansas Software + + + + + @@ -879,28 +1268,66 @@ Screen-Printer (standalone) - - Colour Kong (32k) - 1983 - TCS - - + + Colour Genie Chess + 1984 + Gumboot Software + - - + + - - Colour Kong (16k) + + Colour Frog 1983 TCS - - + + - - + + + + + + + + Colour Frog (no title screen) + 1983 + TCS + + + + + + + + + + + Colour Kong (32k) + 1983 + TCS + + + + + + + + + + + Colour Kong (16k) + 1983 + TCS + + + + + @@ -918,6 +1345,32 @@ Screen-Printer (standalone) + + Colour Genie Pontoon + 198? + <unknown> + + + + + + + + + + + Colour Qix + 198? + <unknown> + + + + + + + + + Colour Schach 1983 @@ -944,15 +1397,106 @@ Screen-Printer (standalone) - + + Colour Schach (TCS, 16k) + 1983 + TCS + + + + + + + + + + Cosmic Attack 198? Kansas Software - - + + + + + + + + Colour Quest 1: Find the Diamond of Balmarlon + 1983 + Gumboot Software + + + + + + + + + + + Colour Quest 2: The Vegan Incident + 1983 + Gumboot Software + + + + + + + + + + + Colour Quest 3: Enchanted Gardens + 1983 + Gumboot Software + + + + + + + + + + + Colour Quest 4: Camelot Adventure + 1983 + Gumboot Software + + + + + + + + + + + Colour Quest 4: Camelot Adventure (Marcos Software) + 1983 + Gumboot Software + + + + + + + + + + + Colour Quest 6: Fishing Quest + 1983 + Gumboot Software + + + + + @@ -1008,6 +1552,19 @@ Screen-Printer (standalone) + + Demon Derby + 198? + <unknown> + + + + + + + + + Deathstar 1983 @@ -1034,28 +1591,40 @@ Screen-Printer (standalone) - - Defender + + Defender (Andreas Goldau) 198? Andreas Goldau Softwareproduction - + + + + + + + Defender + 198? + <unknown> + + + + - DIG-BOY (TCS) + DIG-BOY 1983 TCS - + @@ -1107,7 +1676,7 @@ Screen-Printer (standalone) Eatman 1983 - Molimerx Ltd. + Computer Service W. Neumann / Molimerx Ltd @@ -1143,6 +1712,19 @@ Screen-Printer (standalone) + + Eliminator (Gumboot) + 1984 + Gumboot Software + + + + + + + + + Empire 198? @@ -1206,6 +1788,19 @@ Screen-Printer (standalone) + + Flying Bytes + 1984 + Arcade Games + + + + + + + + + Im Reich der Fraggels 19?? @@ -1220,15 +1815,57 @@ Screen-Printer (standalone) - - Colour Frog + + + Galactic Attack (Joystick) 1983 - TCS - - + Microbyte Software + - - + + + + + + + + + + + + + + Galactic Attack (Keyboard) + 1983 + Microbyte Software + + + + + + + + + + + + + + + + Geniepede + 1983 + Ipswich Software Factory + + + + + + + + + + @@ -1247,15 +1884,80 @@ Screen-Printer (standalone) + + + Gobble Garden + 198? + Kwerty Software + + + + + + + + + Gorilla 1983 Heinz Hübben Software Verlag + + + + + + + + + + Gorilla (32k) + 1983 + Heinz Hübben Software Verlag + - + + + + + + + Gotya + 198? + <unknown> + + + + + + + + + + + + Grabit + 198? + <unknown> + + + + + + + + + + Grand Prix + 1985 + Arcade Games / Gumboot Software + + + + @@ -1293,23 +1995,36 @@ Screen-Printer (standalone) 1983 TCS - + - - + + - - Hektik (alternate) + + Hektik (32k) 1983 TCS - + + + + + + + Hektik (English) + 1984 + Arcade Games + + + + + @@ -1327,6 +2042,18 @@ Screen-Printer (standalone) + + Hero Run + 198? + <unknown> + + + + + + + + Horror Castle 198? @@ -1340,6 +2067,32 @@ Screen-Printer (standalone) + + Intellegent Games Boards + 198? + <unknown> + + + + + + + + + + + Invaders from Space + 1983 + Molimerx Ltd + + + + + + + + + Invasion aus dem Weltraum 1982 @@ -1353,6 +2106,24 @@ Screen-Printer (standalone) + + Jackpot + 1984 + <unknown> + + + + + + + + + + + + + + Jet Set Billy (16k) 1984 @@ -1385,6 +2156,20 @@ Screen-Printer (standalone) + + Jumbo + 1984 + Gumboot Software + + + + + + + + + + Marienkäfer 1984 @@ -1411,8 +2196,21 @@ Screen-Printer (standalone) - - Kniffel + + Kong + 1983 + Algray Software + + + + + + + + + + + Kniffel 1985 TTS @@ -1506,6 +2304,19 @@ Screen-Printer (standalone) + + Mad Driver + 1983 + <unknown> + + + + + + + + + Madtree 1983 @@ -1519,6 +2330,21 @@ Screen-Printer (standalone) + + + + Madventure 2: Shipwreck + 1984 + <unknown> + + + + + + + + + Mampf Man II 1983 @@ -1526,8 +2352,79 @@ Screen-Printer (standalone) - - + + + + + + + + Mampf Man II (alt) + 1983 + TCS + + + + + + + + + + + Martian Rescue + 1983 + Ipswich Software Factory + + + + + + + + + + + + + + + + + Mauer + 1983 + <unknown> + + + + + + + + + + + Maze Chaser + 198? + Superb Software + + + + + + + + + + + Maze Man + 1983 + <unknown> + + + + + @@ -1558,6 +2455,31 @@ Screen-Printer (standalone) + + Meteor (32k) + 1983 + TCS + + + + + + + + + + + Millipede + 1984 + Gonzalo + + + + + + + + Unknown (data?) 198? @@ -1596,6 +2518,58 @@ Screen-Printer (standalone) + + Mysterious Adventures No. 1: The Golden Baton + 1982 + Molimerx Ltd + + + + + + + + + + + Mysterious Adventures No. 2: The Time Machine + 1982 + Molimerx Ltd + + + + + + + + + + + Mysterious Adventures No. 3: Arrow of Death (Pt. 1) + 1982 + Molimerx Ltd + + + + + + + + + + + Mysterious Adventures No. 6: Circus + 1982 + Molimerx Ltd + + + + + + + + + Mysterious Tavern 198? @@ -1609,6 +2583,33 @@ Screen-Printer (standalone) + + Numbers Up Shoot Out + 1984 + <unknown> + + + + + + + + + + + + Numbers Up Shoot Out (Alt) + 1984 + <unknown> + + + + + + + + + Netzo 1983 @@ -1635,15 +2636,214 @@ Screen-Printer (standalone) + + Palace of Ming + 1984 + Cooperated Software + + + + + + + + + + + + + + + + Panik + 1982 + TCS + + + + + + + + + + + + Plato + 198? + Gumboot Software + + + + + + + + + + + + Point Chase + 1983 + <unknown> + + + + + + + + + Pole Position 1984 - Andreas Müller + <unknown> - + + + + + + + Protheus Schach + 1983 + <unknown> + + + + + + + + + + + Puckman + 1983 + JD Tronics + + + + + + + + + + + + + + + Punktejagd + 198? + <unknown> + + + + + + + + + + Punter + 1984 + Gumboot Software + + + + + + + + + + Q*Man + 1984 + Schmidtke Software / Arcade Games + + + + + + + + + + + Quandry + 1984 + Omega Software + + + + + + + + + + + Quasimodo + 1984 + Kingsoft + + + + + + + + + + + + + + + + + + + Racing + 1984 + Gumboot Software + + + + + + + + + + + Racing Driver + 1982 + Molimerx Ltd + + + + + + + + + + Roulette + 1982 + <unknown> + + + + + + @@ -1704,11 +2904,37 @@ Screen-Printer (standalone) 1983 Algray Software + + + + + + + + + + Skramble (alt) + 1983 + Algray Software + - + + + + + + + Soft-Bandit + 1983 + <unknown> + + + + + @@ -1739,15 +2965,79 @@ Screen-Printer (standalone) - - + + Space Shares + 198? + <unknown> + + + + + + + + + + Spell A Picture + 1983 + Gumboot Software + + + + + + + + + + Snake Snatch + 198? + <unknown> + + + + + + + + + + + Super Star Treck 198? <unknown> - + + + + + + + + Star Trek + 1984 + Gumboot Software + + + + + + + + + + + Stockmarket Simulation + 198? + <unknown> + + + + + @@ -1765,14 +3055,109 @@ Screen-Printer (standalone) + + Swag! + 1985 + Arcade Games + + + + + + + + + + Tarnsman of Gor + 1984 + <unknown> + + + + + + + + + + + + + + Tausendfuss 1983 TCS + + + + + + + + + + Tausendfuss (no autostart) + 1983 + TCS - + + + + + + + Terry's Travels + 1983 + Algray Software + + + + + + + + + + + + To Hell And Back + 1986 + Battle-Soft + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1818,6 +3203,18 @@ Screen-Printer (standalone) + + Tron + 198? + <unknown> + + + + + + + + U-Boot-Jagd 198? @@ -1830,6 +3227,85 @@ Screen-Printer (standalone) + + + Unknown Chase Game + 198? + <unknown> + + + + + + + + + + + Unknown Game by S. J. Sole + 198? + <unknown> + + + + + + + + + + + Vier Gewinnt + 1983 + <unknown> + + + + + + + + + + + Vortex + 1984 + Heinz Hübben Software Verlag + + + + + + + + + + + What's My Rhyme + 1984 + Gumboot Software + + + + + + + + + + + Wordy + 198? + Gumboot Software + + + + + + + + + Wurm 1982 @@ -1846,10 +3322,22 @@ Screen-Printer (standalone) Zalaga 198? <unknown> + + + + + + + + + + Zalaga (no autostart) + 198? + <unknown> - + -- cgit v1.2.3 From 15c03e25c637e3d9c990f176ebfdc87f2fcdf0c8 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Wed, 9 Jun 2021 14:21:17 +0100 Subject: galaxold.cpp: Fixed rockclim sprite bank select. (#8164) --- src/mame/video/galaxold.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mame/video/galaxold.cpp b/src/mame/video/galaxold.cpp index 240caa1e34b..cf112754580 100644 --- a/src/mame/video/galaxold.cpp +++ b/src/mame/video/galaxold.cpp @@ -575,7 +575,14 @@ void galaxold_state::rockclim_draw_background(screen_device &screen, bitmap_ind1 void galaxold_state::rockclim_modify_spritecode(uint8_t *spriteram, int *code, int *flipx, int *flipy, int offs) { - if (m_gfxbank[2]) *code|=0x40; + if ((*code & 0x30) == 0x20) + { + if (m_gfxbank[2] & 1) + { + int bank = (((m_gfxbank[0] & 1) << 5) | ((m_gfxbank[1] & 1) << 4)); + *code = (0x40 + bank) | (*code & 0x0f); + } + } } VIDEO_START_MEMBER(galaxold_state,rockclim) -- cgit v1.2.3 From 2dd082e07c5b828b7ac14f250f55d05f0d0a4bc3 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 9 Jun 2021 20:47:00 +0200 Subject: c140: correct offset range when reading keyon status [dink] --- src/devices/sound/c140.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/devices/sound/c140.cpp b/src/devices/sound/c140.cpp index c6e5a05271e..683f2a7ebda 100644 --- a/src/devices/sound/c140.cpp +++ b/src/devices/sound/c140.cpp @@ -478,7 +478,7 @@ inline u8 c140_device::keyon_status_read(u16 offset) u8 c140_device::c140_r(offs_t offset) { offset &= 0x1ff; - if ((offset & 0xf) == 0x5) + if ((offset & 0xf) == 0x5 && offset < 0x180) return keyon_status_read(offset); return m_REG[offset]; } @@ -552,6 +552,8 @@ void c140_device::c140_w(offs_t offset, u8 data) u8 c219_device::c219_r(offs_t offset) { + offset &= 0x1ff; + // assume same as c140 // TODO: what happens here on reading unmapped voice regs? return c140_r(offset); -- cgit v1.2.3 From 0656b4ab4d0fc7ee55c9bbea8b92c54f291c7473 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 9 Jun 2021 22:37:18 +0200 Subject: c140: c219 has less voice regs, don't call c140_r --- src/devices/sound/c140.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/devices/sound/c140.cpp b/src/devices/sound/c140.cpp index 683f2a7ebda..b04a35a0f31 100644 --- a/src/devices/sound/c140.cpp +++ b/src/devices/sound/c140.cpp @@ -478,8 +478,10 @@ inline u8 c140_device::keyon_status_read(u16 offset) u8 c140_device::c140_r(offs_t offset) { offset &= 0x1ff; + if ((offset & 0xf) == 0x5 && offset < 0x180) return keyon_status_read(offset); + return m_REG[offset]; } @@ -556,7 +558,10 @@ u8 c219_device::c219_r(offs_t offset) // assume same as c140 // TODO: what happens here on reading unmapped voice regs? - return c140_r(offset); + if ((offset & 0xf) == 0x5 && offset < 0x100) + return keyon_status_read(offset); + + return m_REG[offset]; } -- cgit v1.2.3 From 4712c0f33bfacf8f76841bf81fb07ec60949fa53 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 10 Jun 2021 06:50:42 +0200 Subject: New working clones ------------------ Armadillo Racing (Rev. AM2 Ver.A, World) [Phil Bennett, Ryan Holtz, Bill D., Brian Troha, The Dumping Union] --- src/mame/drivers/namcos22.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++- src/mame/mame.lst | 1 + 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp index ec1aa640991..488759ff0f0 100644 --- a/src/mame/drivers/namcos22.cpp +++ b/src/mame/drivers/namcos22.cpp @@ -5551,6 +5551,71 @@ ROM_END ROM_START( adillor ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "am2vera.rom1", 0x000003, 0x100000, CRC(b974e931) SHA1(db1c99ed56044f667a9a0a5801f62215004af847) ) + ROM_LOAD32_BYTE( "am2vera.rom2", 0x000002, 0x100000, CRC(c7cd78f1) SHA1(2f909be1c9a9acf42a8e446c83a06b3b36012196) ) + ROM_LOAD32_BYTE( "am2vera.rom3", 0x000001, 0x100000, CRC(80e9435a) SHA1(d92f6ec607e628270ceb3e09c1980d6e13bd88a7) ) + ROM_LOAD32_BYTE( "am2vera.rom4", 0x000000, 0x100000, CRC(1e3a6032) SHA1(f4c6539a78f94ae2c240aeb8f85712a612933e8c) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ + ROM_LOAD( "am1data.8k", 0x000000, 0x080000, CRC(3c176589) SHA1(fabf8debfa118893449f6086986fd1aa012daf27) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "am1scg0.12f", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) ) + ROM_LOAD( "am1scg1.10f", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) ) + ROM_LOAD( "am1scg0.12l", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) ) + ROM_LOAD( "am1scg1.10l", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "am1cg0.8d", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) ) + ROM_LOAD( "am1cg1.10d", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) ) + ROM_LOAD( "am1cg2.12d", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) ) + ROM_LOAD( "am1cg3.13d", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) ) + ROM_LOAD( "am1cg3.14d", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) ) + ROM_LOAD( "am1cg5.16d", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) ) + ROM_LOAD( "am1cg6.18d", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) ) + ROM_LOAD( "am1cg7.19d", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) ) + ROM_LOAD( "am1cg0.12b", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) ) + ROM_LOAD( "am1cg1.13b", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) ) + ROM_LOAD( "am1cg2.14b", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) ) + ROM_LOAD( "am1cg3.16b", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) ) + ROM_LOAD( "am1cg3.18b", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) ) + ROM_LOAD( "am1cg5.19b", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) ) + ROM_LOAD( "am1cg6.18a", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) ) + ROM_LOAD( "am1cg7.15a", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) ) + + ROM_REGION16_LE( 0x300000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "am1ccrl.3d", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) ) + ROM_LOAD( "am1ccrh.1d", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) ) + ROM_LOAD( "am1ccrl.7b", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) ) + ROM_LOAD( "am1ccrh.5b", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) ) + + ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "am1ptrl0.18k", 0x000000, 0x080000, CRC(6fdb34f6) SHA1(5dc7359eef0dbe6d421808eefd3920159ce34944) ) + ROM_LOAD( "am1ptrl1.16k", 0x080000, 0x080000, CRC(32e40601) SHA1(161b148aae688e944cfe456d9bca1ca7139812e1) ) + ROM_LOAD( "am1ptrl2.15k", 0x100000, 0x080000, CRC(e27e29cc) SHA1(3a2b0d18d23b2ace6fe1c6c4dbcc73cb74acd189) ) + ROM_LOAD( "am1ptrl3.14k", 0x180000, 0x080000, CRC(0c638e3e) SHA1(2cd68e6aa04a9235f792fad0913314545ab70e71) ) + ROM_LOAD( "am1ptrm0.18j", 0x200000, 0x080000, CRC(e676cd98) SHA1(f7b31c848bc2afc31f3ad53d9eda7daae5f28865) ) + ROM_LOAD( "am1ptrm1.16j", 0x280000, 0x080000, CRC(eb115d9d) SHA1(165cb13a3d0f2982c35ae5e6e796de48cf2b5846) ) + ROM_LOAD( "am1ptrm2.15j", 0x300000, 0x080000, CRC(86b4ed0c) SHA1(d97f2b26cc3981b4b337029723c5ddec9316628f) ) + ROM_LOAD( "am1ptrm3.14j", 0x380000, 0x080000, CRC(97c1c6b0) SHA1(84e5f982f50560debd6f1f4d3d96f58888616529) ) + ROM_LOAD( "am1ptru0.18f", 0x400000, 0x080000, CRC(6a3fd855) SHA1(c6d2029e676426c4e71d9cfddbac7ecdec81c4da) ) + ROM_LOAD( "am1ptru1.16f", 0x480000, 0x080000, CRC(551bf714) SHA1(4af1e65ad1e42a95accafb57422fc276743f408a) ) + ROM_LOAD( "am1ptru2.15f", 0x500000, 0x080000, CRC(ce790635) SHA1(fb49646a9b35ee7cb3ace59a7f0932a08c393052) ) + ROM_LOAD( "am1ptru3.14f", 0x580000, 0x080000, CRC(5e4e6333) SHA1(5897251e4694c5c24f1810ff6f9177a0456baf2e) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ + ROM_LOAD16_WORD_SWAP( "am1wavea.2l", 0x000000, 0x400000, CRC(48f8c20c) SHA1(48b4fbcb7e9dbbb70a542ef7cb7ee0e46fad23fc) ) + ROM_LOAD16_WORD_SWAP( "am1waveb.1l", 0x800000, 0x400000, CRC(fd8e7384) SHA1(91e53ab0293f81f8357645fd319249abc128b78e) ) +ROM_END + +ROM_START( adillorj ) ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ ROM_LOAD32_BYTE( "am1vera.rom1", 0x000003, 0x100000, CRC(e99157f9) SHA1(7a200f3b5890f5badbf529a8c8ac6a8548adb801) ) ROM_LOAD32_BYTE( "am1vera.rom2", 0x000002, 0x100000, CRC(b63d79b0) SHA1(c83251727b2973f5b9dc2eea23b51b1275bd88ed) ) @@ -5871,4 +5936,5 @@ GAME( 1996, tokyowar, 0, tokyowar, tokyowar, namcos22s_state, init_tok GAME( 1996, aquajet, 0, cybrcycc, aquajet, namcos22s_state, init_aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30 GAME( 1996, alpinr2b, 0, alpine, alpiner, namcos22s_state, init_alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/01/10 17:10:59 GAME( 1996, alpinr2a, alpinr2b, alpine, alpiner, namcos22s_state, init_alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/12/06 13:45:05 -GAME( 1997, adillor, 0, adillor, adillor, namcos22s_state, init_adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:19:41 +GAME( 1997, adillor, 0, adillor, adillor, namcos22s_state, init_adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:43:29 +GAME( 1997, adillorj, adillor, adillor, adillor, namcos22s_state, init_adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:19:41 diff --git a/src/mame/mame.lst b/src/mame/mame.lst index c6cb7e727b2..dee4d54abaa 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -31657,6 +31657,7 @@ driveyes // (c) 1992? @source:namcos22.cpp acedrvrw // (c) 1994 adillor // (c) 1997 +adillorj // (c) 1997 airco22b // (c) 1995 alpinerc // (c) 1994 alpinerd // (c) 1994 -- cgit v1.2.3 From 60d06cc00ba8afed5136719efae9e753229bedbf Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 10 Jun 2021 06:58:47 +0200 Subject: legionna.cpp: Fixed several incorrect DIP switches and added diplocs to all games. [Guru] --- src/mame/drivers/legionna.cpp | 296 ++++++++++++++++++++++-------------------- 1 file changed, 157 insertions(+), 139 deletions(-) diff --git a/src/mame/drivers/legionna.cpp b/src/mame/drivers/legionna.cpp index cd74404c794..f95fdc9ae08 100644 --- a/src/mame/drivers/legionna.cpp +++ b/src/mame/drivers/legionna.cpp @@ -453,59 +453,68 @@ static INPUT_PORTS_START( legionna ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ??? PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ??? - PORT_START("DSW1") - PORT_DIPNAME( 0x001f, 0x001f, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0015, DEF_STR( 6C_1C ) ) - PORT_DIPSETTING( 0x0017, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x0019, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x001b, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x0003, DEF_STR( 8C_3C ) ) - PORT_DIPSETTING( 0x001d, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x0005, DEF_STR( 5C_3C ) ) - PORT_DIPSETTING( 0x0007, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0x001f, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0009, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x0013, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0011, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x000f, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x000d, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x000b, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x001e, "A 1/1 B 1/2" ) - PORT_DIPSETTING( 0x0014, "A 2/1 B 1/3" ) - PORT_DIPSETTING( 0x000a, "A 3/1 B 1/5" ) - PORT_DIPSETTING( 0x0000, "A 5/1 B 1/6" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_START("DSW1") // Note: If the joystick is held in any direction at power-on the DIP switches are shown on screen. + PORT_DIPNAME( 0x0001, 0x0001, "Coin Mode" ) PORT_DIPLOCATION("SW01:1") + PORT_DIPSETTING( 0x0001, "Mode 1" ) + PORT_DIPSETTING( 0x0000, "Mode 2" ) + PORT_DIPNAME( 0x001e, 0x001e, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW01:2,3,4,5") PORT_CONDITION("DSW1", 0x0001, NOTEQUALS, 0x0000) + PORT_DIPSETTING( 0x001e, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0012, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x001c, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x001a, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0016, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x0014, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0006, 0x0006, DEF_STR( Coin_A )) PORT_DIPLOCATION("SW01:2,3") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) + PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Coin_B )) PORT_DIPLOCATION("SW01:4,5") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW01:6") // manual says 'NOT IN USE' PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, "Freeze" ) + PORT_DIPNAME( 0x0040, 0x0040, "Freeze" ) PORT_DIPLOCATION("SW01:7") // manual says 'NOT IN USE' PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW01:8") PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW02:1,2") PORT_DIPSETTING( 0x0200, "1" ) PORT_DIPSETTING( 0x0300, "2" ) PORT_DIPSETTING( 0x0100, "3" ) PORT_DIPSETTING( 0x0000, "4" ) - PORT_DIPNAME( 0x0400, 0x0400, "Extend" ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0400, 0x0400, "Extend Play" ) PORT_DIPLOCATION("SW02:3") + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW02:4") // manual says 'NOT IN USE' PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW02:5,6") PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x3000, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW02:7") PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) PORT_DIPSETTING( 0x4000, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW02:8") + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Yes ) ) PORT_START("PLAYERS34") PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -566,57 +575,66 @@ static INPUT_PORTS_START( heatbrl ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("DSW1") - PORT_DIPNAME( 0x001f, 0x001f, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0015, DEF_STR( 6C_1C ) ) - PORT_DIPSETTING( 0x0017, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x0019, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x001b, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x0003, DEF_STR( 8C_3C ) ) - PORT_DIPSETTING( 0x001d, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x0005, DEF_STR( 5C_3C ) ) - PORT_DIPSETTING( 0x0007, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0x001f, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0009, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x0013, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0011, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x000f, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x000d, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x000b, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x001e, "A 1/1 B 1/2" ) - PORT_DIPSETTING( 0x0014, "A 2/1 B 1/3" ) - PORT_DIPSETTING( 0x000a, "A 3/1 B 1/5" ) - PORT_DIPSETTING( 0x0000, "A 5/1 B 1/6" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Players ) ) - PORT_DIPSETTING( 0x0020, "2" ) - PORT_DIPSETTING( 0x0000, "4" ) - PORT_DIPNAME( 0x0040, 0x0040, "Freeze" ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) + PORT_START("DSW1") // Note: If any player 1 button is held down at power-on the DIP switches are shown on screen for 40 seconds. + PORT_DIPNAME( 0x0001, 0x0001, "Coin Mode" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x0001, "Mode 1" ) + PORT_DIPSETTING( 0x0000, "Mode 2" ) + PORT_DIPNAME( 0x001e, 0x001e, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:2,3,4,5") PORT_CONDITION("DSW1", 0x0001, NOTEQUALS, 0x0000) + PORT_DIPSETTING( 0x001e, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0012, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x001c, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x001a, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0016, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x0014, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0006, 0x0006, DEF_STR( Coin_A )) PORT_DIPLOCATION("SW1:2,3") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) + PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Coin_B )) PORT_DIPLOCATION("SW1:4,5") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x0060, 0x0060, "Cabinet Setting" ) PORT_DIPLOCATION("SW1:6,7") + PORT_DIPSETTING( 0x0060, "2 Players & 1 Coin Slot" ) + PORT_DIPSETTING( 0x0040, "4 Players & 1 Coin Slot" ) + PORT_DIPSETTING( 0x0020, "4 Players (2x 2P Linked) & 1-4 Coin Slots" ) + PORT_DIPSETTING( 0x0000, "4 Players & 4 Coin Slots" ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x0200, "1" ) PORT_DIPSETTING( 0x0100, "2" ) PORT_DIPSETTING( 0x0300, "3" ) PORT_DIPSETTING( 0x0000, "5" ) - PORT_DIPNAME( 0x0400, 0x0400, "Extend" ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, "Players Start & Join" ) PORT_DIPLOCATION("SW2:3,4") // Listed as-is from the manual but test mode shows different text for 2 choices + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) // 1 or 2 players can start + PORT_DIPSETTING( 0x0800, "2 Start, 1 Can Join" ) // test shows 'Double Coin Start'. This is for a 4 player cab. + PORT_DIPSETTING( 0x0400, "2 Start, 2 Can Join" ) // test shows 'Normal'... probably for a 4-player cab or 2 linked cabs with a minimum of 2 players. + PORT_DIPSETTING( 0x0000, "1 Start, 2 Can Join" ) // test shows 'Double Coin Start'... also probably for a 4 player cab or 2 linked cabs. + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6") PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) PORT_DIPSETTING( 0x4000, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Yes ) ) INPUT_PORTS_END @@ -653,31 +671,31 @@ static INPUT_PORTS_START( godzilla ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("DSW1") - PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Service_Mode ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3") PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0100, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0200, DEF_STR( 2C_1C ) ) @@ -686,19 +704,19 @@ static INPUT_PORTS_START( godzilla ) PORT_DIPSETTING( 0x0500, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0300, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0400, DEF_STR( 1C_5C ) ) - PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) + PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:4,5,6") PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0000, "3 Coins/5 Credits" ) + PORT_DIPSETTING( 0x0000, DEF_STR( 3C_5C ) ) PORT_DIPSETTING( 0x1000, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x3000, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x0800, DEF_STR( 2C_5C ) ) PORT_DIPSETTING( 0x2800, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x1800, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x2000, DEF_STR( 1C_5C ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -758,18 +776,18 @@ static INPUT_PORTS_START( grainbow ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("DSW1") - PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) ) + PORT_START("DSW1") // DIP switch sheet or manual needed to improve this. + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x0002, "2") PORT_DIPSETTING( 0x0003, "3") PORT_DIPSETTING( 0x0000, "5") PORT_DIPSETTING( 0x0001, "4") - PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) // ??? + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:3,4") // could be something else, not difficulty??? PORT_DIPSETTING( 0x000c, "2" ) // Internal value stored at 0x1086cc and often used as table offset PORT_DIPSETTING( 0x0008, "0" ) PORT_DIPSETTING( 0x0004, "4" ) - //PORT_DIPSETTING( 0x0000, "4" ) // Was one of these settings intended to be 6? - PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0000, "4" ) // Was one of these settings intended to be 6? + PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5,6,7,8") PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) PORT_DIPSETTING( 0x00a0, DEF_STR( 6C_1C ) ) PORT_DIPSETTING( 0x00b0, DEF_STR( 5C_1C ) ) @@ -786,54 +804,54 @@ static INPUT_PORTS_START( grainbow ) PORT_DIPSETTING( 0x0070, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0060, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x0050, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) PORT_DIPSETTING( 0x0200, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6") PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Service_Mode ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_START("DSW2") - PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:1") PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2") PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:3") PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:4") PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:5") PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:6") PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:7") // toggling this has no effect in test mode, always shown on. PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:8") // toggling this has no effect in test mode, always shown on. PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -892,34 +910,34 @@ static INPUT_PORTS_START( denjinmk ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("DSW1") - PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) + PORT_START("DSW1") // DIP switch sheet or manual needed to improve this. + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) - PORT_SERVICE( 0x0040, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Language ) ) // it actually skips the story entirely, so just remain JP as default - PORT_DIPSETTING( 0x0080, DEF_STR( Japanese ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Yes ) ) + PORT_SERVICE( 0x0040, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:7") + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Language ) ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x0080, DEF_STR( Japanese ) ) // On English it skips the story entirely, so leave JP as default PORT_DIPSETTING( 0x0000, DEF_STR( English ) ) - PORT_DIPNAME( 0x0f00, 0x0f00, DEF_STR( Coin_A ) ) + PORT_DIPNAME( 0x0f00, 0x0f00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3,4") PORT_DIPSETTING( 0x0200, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0800, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x0600, "3 Coins / 5 Credits" ) + PORT_DIPSETTING( 0x0600, DEF_STR( 3C_5C ) ) PORT_DIPSETTING( 0x0400, DEF_STR( 3C_2C ) ) PORT_DIPSETTING( 0x0100, DEF_STR( 4C_3C ) ) PORT_DIPSETTING( 0x0f00, DEF_STR( 1C_1C ) ) @@ -932,11 +950,11 @@ static INPUT_PORTS_START( denjinmk ) PORT_DIPSETTING( 0x0a00, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x0900, DEF_STR( 1C_7C ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coin_B ) ) + PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:5,6,7,8") PORT_DIPSETTING( 0x2000, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x5000, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x8000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x6000, "3 Coins / 5 Credits" ) + PORT_DIPSETTING( 0x6000, DEF_STR( 3C_5C ) ) PORT_DIPSETTING( 0x4000, DEF_STR( 3C_2C ) ) PORT_DIPSETTING( 0x1000, DEF_STR( 4C_3C ) ) PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) ) @@ -957,7 +975,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( cupsoc ) // p3 and p4 inputs are routed thru two 10-pins on lower-left of PCB - // TODO: dip-conditional with coin slots + // TODO: dip-conditional with coin slots... Not actually needed as there are no conditional DIPs on this game. // SEIBU_COIN_INPUTS override PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) @@ -1039,8 +1057,8 @@ static INPUT_PORTS_START( cupsoc ) PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0018, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0040, 0x0040, "Starting Coin" ) PORT_DIPLOCATION("SW1:7") - PORT_DIPSETTING( 0x0040, DEF_STR( Normal ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Starting Coin" ) PORT_DIPLOCATION("SW1:7") // x2 means at least 2 players must start which + PORT_DIPSETTING( 0x0040, DEF_STR( Normal ) ) // is similar to Heated Barrel SW2: 3,4 PORT_DIPSETTING( 0x0000, "x2" ) PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) @@ -1073,22 +1091,22 @@ static INPUT_PORTS_START( cupsoc ) PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) ) PORT_DIPNAME( 0x000c, 0x000c, "Cabinet Setting" ) PORT_DIPLOCATION("SW3:3,4") - PORT_DIPSETTING( 0x0000, "4 Players / 1 Coin Slot" ) - PORT_DIPSETTING( 0x0004, "4 Players / 4 Coin Slots" ) - PORT_DIPSETTING( 0x0008, "4 Players / 2 Coin Slots" ) PORT_DIPSETTING( 0x000c, "2 Players" ) + PORT_DIPSETTING( 0x0008, "4 Players & 4 Coin Slots" ) + PORT_DIPSETTING( 0x0004, "4 Players (2x 2P Linked) & 1-4 Coin Slots" ) + PORT_DIPSETTING( 0x0000, "4 Players & 1 Coin Slot" ) PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW3:5") - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Yes ) ) PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW3:6") PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:7") + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:7") // toggling this has no effect in test mode, always shown on. PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:8") + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:8") // toggling this has no effect in test mode, always shown on. PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) -- cgit v1.2.3 From 801301c468a70d1c16002ebea50b4706d61a9f8f Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 10 Jun 2021 07:49:08 +0200 Subject: aristmk5.cpp: added fake suffix to the 4.02.04 setchip ROM labels, so that ROM managers don't complain --- src/mame/drivers/aristmk5.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/aristmk5.cpp b/src/mame/drivers/aristmk5.cpp index f4612c754a3..5a9223b9a9e 100644 --- a/src/mame/drivers/aristmk5.cpp +++ b/src/mame/drivers/aristmk5.cpp @@ -2426,8 +2426,8 @@ void aristmk5_state::aristmk5_usa_touch(machine_config &config) ROM_LOAD32_WORD( "setchip v4.02.04.u7", 0x000000, 0x80000, CRC(5a254b22) SHA1(8444f237b392df2a3cb42ea349e7af32f47dd544) ) \ ROM_LOAD32_WORD( "setchip v4.02.04.u11", 0x000002, 0x80000, CRC(def36617) SHA1(c7ba5b08e884a8fb36c9fb51c08e243e32c81f89) ) \ ROM_REGION( 0x400000, "set_4.02.04_alt", ROMREGION_ERASEFF ) /* setchip v4.02.04, but seems to have more code and some different strings */ \ - ROM_LOAD32_WORD( "setchip v4.02.04.u7", 0x000000, 0x80000, CRC(41275334) SHA1(d4a63dbc77c2c44f6a9c72b389bd270f2137997f) ) /* sldh */ \ - ROM_LOAD32_WORD( "setchip v4.02.04.u11", 0x000002, 0x80000, CRC(254e8b03) SHA1(0ed9723258d3f86b21bf132cbe2fd0bae978cd5e) ) /* sldh */ \ + ROM_LOAD32_WORD( "setchip v4.02.04_alt.u7", 0x000000, 0x80000, CRC(41275334) SHA1(d4a63dbc77c2c44f6a9c72b389bd270f2137997f) ) /* _alt suffix added to avoid having same ROM labels */ \ + ROM_LOAD32_WORD( "setchip v4.02.04_alt.u11", 0x000002, 0x80000, CRC(254e8b03) SHA1(0ed9723258d3f86b21bf132cbe2fd0bae978cd5e) ) /* _alt suffix added to avoid having same ROM labels */ \ ROM_REGION( 0x400000, "set_1.0", ROMREGION_ERASEFF ) /* setchip v1.0 */ \ ROM_LOAD32_WORD( "setchip v1.0.u7", 0x000000, 0x80000, CRC(16c2828d) SHA1(87218a76bb2791bce27b4b8ab341ba73cbbf6ffe) ) \ ROM_LOAD32_WORD( "setchip v1.0.u11", 0x000002, 0x80000, CRC(a969f12b) SHA1(fc6d234ce1f5c6b5aceb97b73aad60144352023b) ) -- cgit v1.2.3 From bf1f1cdd187df3cf9c3c0036fc1d5538d3d5fd88 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Thu, 10 Jun 2021 16:01:44 +1000 Subject: galaxian.cpp: Started splitting up the state class to encapsulate game-specific stuff. (#8168) --- src/mame/drivers/galaxian.cpp | 1070 +++++++++++++++++++++-------------------- src/mame/includes/galaxian.h | 539 +++++++++++++++------ src/mame/video/galaxian.cpp | 106 ++-- 3 files changed, 998 insertions(+), 717 deletions(-) diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index fbf16d86b63..1c4e3b00a8c 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -701,6 +701,7 @@ TODO: #include "emu.h" #include "includes/galaxian.h" + #include "audio/cclimber.h" #include "audio/galaxian.h" @@ -714,6 +715,7 @@ TODO: #include "audio/nl_konami.h" + /************************************* * * Interrupts @@ -728,13 +730,12 @@ WRITE_LINE_MEMBER(galaxian_state::vblank_interrupt_w) m_maincpu->set_input_line(m_irq_line, ASSERT_LINE); } -INPUT_CHANGED_MEMBER(galaxian_state::tenspot_fake) +INPUT_CHANGED_MEMBER(tenspot_state::tenspot_fake) { if (newval) { - m_tenspot_current_game++; - m_tenspot_current_game%=10; - tenspot_set_game_bank(m_tenspot_current_game, 1); + m_current_game = (m_current_game + 1) % 10; + set_game_bank(m_current_game, true); } m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); } @@ -1013,30 +1014,40 @@ uint8_t galaxian_state::explorer_sound_latch_r() * *************************************/ -uint8_t galaxian_state::sfx_sample_io_r(offs_t offset) +void taiyo_sfx_state::machine_start() { - /* the decoding here is very simplistic, and you can address both simultaneously */ + galaxian_state::machine_start(); + + m_sample_control = 0; + + save_item(NAME(m_sample_control)); +} + + +uint8_t taiyo_sfx_state::sample_io_r(offs_t offset) +{ + // the decoding here is very simplistic, and you can address both simultaneously uint8_t result = 0xff; if (offset & 0x04) result &= m_ppi8255[2]->read(offset & 3); return result; } -void galaxian_state::sfx_sample_io_w(offs_t offset, uint8_t data) +void taiyo_sfx_state::sample_io_w(offs_t offset, uint8_t data) { - /* the decoding here is very simplistic, and you can address both simultaneously */ + // the decoding here is very simplistic, and you can address both simultaneously if (offset & 0x04) m_ppi8255[2]->write(offset & 3, data); if (offset & 0x10) m_dac->write(data); } -void galaxian_state::sfx_sample_control_w(uint8_t data) +void taiyo_sfx_state::sample_control_w(uint8_t data) { - uint8_t old = m_sfx_sample_control; - m_sfx_sample_control = data; + uint8_t old = m_sample_control; + m_sample_control = data; - /* the inverse of bit 0 clocks the flip flop to signal an INT */ - /* it is automatically cleared on the acknowledge */ + // the inverse of bit 0 clocks the flip flop to signal an INT + // it is automatically cleared on the acknowledge if ((old & 0x01) && !(data & 0x01)) m_audio2->set_input_line(0, HOLD_LINE); } @@ -1058,13 +1069,13 @@ void galaxian_state::sfx_sample_control_w(uint8_t data) The data(code) in the extra RAM is later jumped/called to in many parts of the game. */ -uint8_t galaxian_state::monsterz_protection_r() +uint8_t taiyo_sfx_state::monsterz_protection_r() { return m_protection_result; } -void galaxian_state::monsterz_set_latch() +void taiyo_sfx_state::monsterz_set_latch() { // read from a rom (which one?? "a-3e.k3" from audiocpu ($2700-$2fff) looks very suspicious) uint8_t *rom = memregion("audiocpu")->base(); @@ -1075,7 +1086,7 @@ void galaxian_state::monsterz_set_latch() } -void galaxian_state::monsterz_porta_1_w(uint8_t data) +void taiyo_sfx_state::monsterz_porta_1_w(uint8_t data) { // d7 high: set latch + advance address high bits (and reset low bits?) if (data & 0x80) @@ -1085,7 +1096,7 @@ void galaxian_state::monsterz_porta_1_w(uint8_t data) } } -void galaxian_state::monsterz_portb_1_w(uint8_t data) +void taiyo_sfx_state::monsterz_portb_1_w(uint8_t data) { // d3 high: set latch + advance address low bits if (data & 0x08) @@ -1095,7 +1106,7 @@ void galaxian_state::monsterz_portb_1_w(uint8_t data) } } -void galaxian_state::monsterz_portc_1_w(uint8_t data) +void taiyo_sfx_state::monsterz_portc_1_w(uint8_t data) { } @@ -1208,9 +1219,9 @@ void galaxian_state::turtles_ppi8255_1_w(offs_t offset, uint8_t data){ m_ppi8255 * *************************************/ -uint8_t galaxian_state::scorpion_ay8910_r(offs_t offset) +uint8_t zac_scorpion_state::ay8910_r(offs_t offset) { - /* the decoding here is very simplistic, and you can address both simultaneously */ + // the decoding here is very simplistic, and you can address both simultaneously uint8_t result = 0xff; if (offset & 0x08) result &= m_ay8910[2]->data_r(); if (offset & 0x20) result &= m_ay8910[1]->data_r(); @@ -1219,9 +1230,9 @@ uint8_t galaxian_state::scorpion_ay8910_r(offs_t offset) } -void galaxian_state::scorpion_ay8910_w(offs_t offset, uint8_t data) +void zac_scorpion_state::ay8910_w(offs_t offset, uint8_t data) { - /* the decoding here is very simplistic, and you can address all six simultaneously */ + // the decoding here is very simplistic, and you can address all six simultaneously if (offset & 0x04) m_ay8910[2]->address_w(data); if (offset & 0x08) m_ay8910[2]->data_w(data); if (offset & 0x10) m_ay8910[1]->address_w(data); @@ -1231,41 +1242,39 @@ void galaxian_state::scorpion_ay8910_w(offs_t offset, uint8_t data) } -uint8_t galaxian_state::scorpion_protection_r() +uint8_t zac_scorpion_state::protection_r() { - uint16_t paritybits; + // compute parity of the current (bitmask & $CE29) uint8_t parity = 0; - - /* compute parity of the current (bitmask & $CE29) */ - for (paritybits = m_protection_state & 0xce29; paritybits != 0; paritybits >>= 1) + for (uint16_t paritybits = m_protection_state & 0xce29; paritybits != 0; paritybits >>= 1) if (paritybits & 1) parity++; - /* only the low bit matters for protection, but bit 2 is also checked */ + // only the low bit matters for protection, but bit 2 is also checked return parity; } -void galaxian_state::scorpion_protection_w(uint8_t data) +void zac_scorpion_state::protection_w(uint8_t data) { - /* bit 5 low is a reset */ + // bit 5 low is a reset if (!(data & 0x20)) m_protection_state = 0x0000; - /* bit 4 low is a clock */ + // bit 4 low is a clock if (!(data & 0x10)) { - /* each clock shifts left one bit and ORs in the inverse of the parity */ - m_protection_state = (m_protection_state << 1) | (~scorpion_protection_r() & 1); + // each clock shifts left one bit and ORs in the inverse of the parity + m_protection_state = (m_protection_state << 1) | (~protection_r() & 1); } } -uint8_t galaxian_state::scorpion_digitalker_intr_r() +uint8_t zac_scorpion_state::digitalker_intr_r() { return m_digitalker->digitalker_0_intr_r(); } -void galaxian_state::scorpion_digitalker_control_w(uint8_t data) +void zac_scorpion_state::digitalker_control_w(uint8_t data) { m_digitalker->digitalker_0_cs_w(data & 1 ? ASSERT_LINE : CLEAR_LINE); m_digitalker->digitalker_0_cms_w(data & 2 ? ASSERT_LINE : CLEAR_LINE); @@ -1278,19 +1287,35 @@ void galaxian_state::scorpion_digitalker_control_w(uint8_t data) * *************************************/ +void gmgalax_state::machine_start() +{ + bagmanmc_state::machine_start(); + + m_stars_enabled = 0; + std::fill(std::begin(m_gfxbank), std::end(m_gfxbank), 0); + + save_item(NAME(m_selected_game)); + + m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x4000); + + // callback when the game select is toggled + game_changed(*m_gamesel->fields().first(), 0, 0, 0); +} + + INPUT_CHANGED_MEMBER(gmgalax_state::game_changed) { - /* new value is the selected game */ + // new value is the selected game m_selected_game = newval; - /* select the bank and graphics bank based on it */ - m_bank1->set_entry(m_selected_game); + // select the bank and graphics bank based on it + m_rombank->set_entry(m_selected_game); galaxian_gfxbank_w(0, m_selected_game); - /* reset the stars */ + // reset the stars galaxian_stars_enable_w(0); - /* reset the CPU */ + // reset the CPU m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); } @@ -1309,34 +1334,51 @@ CUSTOM_INPUT_MEMBER(gmgalax_state::port_r) * *************************************/ -void galaxian_state::zigzag_bankswap_w(uint8_t data) +void zigzagb_state::machine_start() +{ + galaxian_state::machine_start(); + + m_ay8910_latch = 0; + + save_item(NAME(m_ay8910_latch)); + + // make ROMs 2 & 3 swappable + m_rombanks[0]->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000); + m_rombanks[1]->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000); + + // set initial ROM mapping + bankswap_w(0); +} + + +void zigzagb_state::bankswap_w(uint8_t data) { - /* Zig Zag can swap ROMs 2 and 3 as a form of copy protection */ - m_bank1->set_entry(data & 1); - membank("bank2")->set_entry(~data & 1); + // Zig Zag can swap ROMs 2 and 3 as a form of copy protection + m_rombanks[0]->set_entry(data & 1); + m_rombanks[1]->set_entry(~data & 1); } -void galaxian_state::zigzag_ay8910_w(offs_t offset, uint8_t data) +void zigzagb_state::ay8910_w(offs_t offset, uint8_t data) { switch (offset & 0x300) { - case 0x000: - /* control lines */ - /* bit 0 = WRITE */ - /* bit 1 = C/D */ - if ((offset & 1) != 0) - m_ay8910[0]->data_address_w(offset >> 1, m_zigzag_ay8910_latch); - break; + case 0x000: + // control lines + // bit 0 = WRITE + // bit 1 = C/D + if (BIT(offset, 0)) + m_ay8910[0]->data_address_w(BIT(offset, 1), m_ay8910_latch); + break; - case 0x100: - /* data latch */ - m_zigzag_ay8910_latch = offset & 0xff; - break; + case 0x100: + // data latch + m_ay8910_latch = offset & 0xff; + break; - case 0x200: - /* unknown */ - break; + case 0x200: + // unknown + break; } } @@ -1362,14 +1404,26 @@ READ_LINE_MEMBER(galaxian_state::azurian_port_r) * *************************************/ -READ_LINE_MEMBER(galaxian_state::kingball_muxbit_r) +void kingball_state::machine_start() { - /* multiplex the service mode switch with a speech DIP switch */ - return (ioport("FAKE")->read() >> m_kingball_speech_dip) & 1; + galaxian_state::machine_start(); + + m_speech_dip = 0; + m_sound = 0; + + save_item(NAME(m_speech_dip)); + save_item(NAME(m_sound)); } -READ_LINE_MEMBER(galaxian_state::kingball_noise_r) +READ_LINE_MEMBER(kingball_state::muxbit_r) +{ + // multiplex the service mode switch with a speech DIP switch + return BIT(m_mux_port->read(), m_speech_dip); +} + + +READ_LINE_MEMBER(kingball_state::noise_r) { /* bit 5 is the NOISE line from the sound circuit. The code just verifies that it's working, doesn't actually use return value, so we can just use @@ -1378,26 +1432,26 @@ READ_LINE_MEMBER(galaxian_state::kingball_noise_r) } -void galaxian_state::kingball_speech_dip_w(uint8_t data) +void kingball_state::speech_dip_w(uint8_t data) { - m_kingball_speech_dip = data; + m_speech_dip = data; } -void galaxian_state::kingball_sound1_w(uint8_t data) +void kingball_state::sound1_w(uint8_t data) { - m_kingball_sound = (m_kingball_sound & ~0x01) | data; + m_sound = (m_sound & ~0x01) | data; } -void galaxian_state::kingball_sound2_w(uint8_t data) +void kingball_state::sound2_w(uint8_t data) { - m_kingball_sound = (m_kingball_sound & ~0x02) | (data << 1); - m_soundlatch->write(m_kingball_sound | 0xf0); + m_sound = (m_sound & ~0x02) | (data << 1); + m_soundlatch->write(m_sound | 0xf0); } -void galaxian_state::kingball_dac_w(uint8_t data) +void kingball_state::dac_w(uint8_t data) { m_dac->write(data >> 4); } @@ -1410,31 +1464,42 @@ void galaxian_state::kingball_dac_w(uint8_t data) * *************************************/ -void galaxian_state::mshuttle_ay8910_cs_w(uint8_t data) +void mshuttle_state::machine_start() { - m_mshuttle_ay8910_cs = data & 1; + galaxian_state::machine_start(); + + m_ay8910_cs = 0; + + save_item(NAME(m_ay8910_cs)); } -void galaxian_state::mshuttle_ay8910_control_w(uint8_t data) +void mshuttle_state::ay8910_cs_w(uint8_t data) { - if (!m_mshuttle_ay8910_cs) + m_ay8910_cs = data & 1; +} + + +void mshuttle_state::ay8910_control_w(uint8_t data) +{ + if (!m_ay8910_cs) m_ay8910_cclimber->address_w(data); } -void galaxian_state::mshuttle_ay8910_data_w(uint8_t data) +void mshuttle_state::ay8910_data_w(uint8_t data) { - if (!m_mshuttle_ay8910_cs) + if (!m_ay8910_cs) m_ay8910_cclimber->data_w(data); } -uint8_t galaxian_state::mshuttle_ay8910_data_r() +uint8_t mshuttle_state::ay8910_data_r() { - if (!m_mshuttle_ay8910_cs) + if (!m_ay8910_cs) return m_ay8910_cclimber->data_r(); - return 0xff; + else + return 0xff; } @@ -1529,9 +1594,23 @@ uint8_t galaxian_state::dingoe_3001_r() * *************************************/ -void galaxian_state::moonwar_port_select_w(uint8_t data) +void moonwar_state::machine_start() +{ + galaxian_state::machine_start(); + + m_port_select = 0; + std::fill(std::begin(m_direction), std::end(m_direction), 0); + std::fill(std::begin(m_counter_74ls161), std::end(m_counter_74ls161), 0); + + save_item(NAME(m_port_select)); + save_item(NAME(m_direction)); + save_item(NAME(m_counter_74ls161)); +} + + +void moonwar_state::port_select_w(uint8_t data) { - m_moonwar_port_select = data & 0x10; + m_port_select = BIT(~data, 4); } @@ -1633,7 +1712,7 @@ void galaxian_state::galaxian_map(address_map &map) galaxian_map_discrete(map); } -void galaxian_state::pisces_map(address_map &map) +void pisces_state::pisces_map(address_map &map) { galaxian_map(map); map(0x6002, 0x6002).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_gfxbank_w)); // coin lockout replaced by graphics bank @@ -1722,7 +1801,7 @@ void galaxian_state::thepitm_map(address_map &map) map(0xb004, 0xb004).mirror(0x7f8).nopw(); // disable the stars } -void galaxian_state::porter_map(address_map &map) +void pisces_state::porter_map(address_map &map) { mooncrst_map(map); map(0x0000, 0x4fff).rom().region("maincpu", 0); // extend ROM @@ -1730,7 +1809,7 @@ void galaxian_state::porter_map(address_map &map) map(0xa002, 0xa002).mirror(0x7f8).w(FUNC(galaxian_state::galaxian_gfxbank_w)); // coin lockout replaced by graphics bank } -void galaxian_state::skybase_map(address_map &map) +void pisces_state::skybase_map(address_map &map) { mooncrst_map(map); map(0x0000, 0x5fff).rom().region("maincpu", 0); // extend ROM @@ -1816,22 +1895,22 @@ void galaxian_state::ckongmc_map(address_map &map) map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r)); } -void galaxian_state::bagmanmc_map(address_map &map) +void bagmanmc_state::bagmanmc_map(address_map &map) { ckongg_map_base(map); mooncrst_map_discrete(map); map(0xa000, 0xa000).portr("IN0"); - map(0xa003, 0xa003).w(FUNC(galaxian_state::coin_count_0_w)); + map(0xa003, 0xa003).w(FUNC(bagmanmc_state::coin_count_0_w)); map(0xa800, 0xa800).portr("IN1"); map(0xb000, 0xb000).portr("IN2").nopw(); - map(0xb001, 0xb001).w(FUNC(galaxian_state::irq_enable_w)); - map(0xb002, 0xb002).w(FUNC(galaxian_state::galaxian_gfxbank_w)); - map(0xb006, 0xb006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); - map(0xb007, 0xb007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0xb001, 0xb001).w(FUNC(bagmanmc_state::irq_enable_w)); + map(0xb002, 0xb002).w(FUNC(bagmanmc_state::galaxian_gfxbank_w)); + map(0xb006, 0xb006).w(FUNC(bagmanmc_state::galaxian_flip_screen_x_w)); + map(0xb007, 0xb007).w(FUNC(bagmanmc_state::galaxian_flip_screen_y_w)); map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r)); } -void galaxian_state::bagmanmc_io_map(address_map &map) +void bagmanmc_state::bagmanmc_io_map(address_map &map) { map.global_mask(0xff); map(0x08, 0x09).nopw(); // remnant of AY-3-8910 port-based input @@ -1861,29 +1940,36 @@ void galaxian_state::fantastc_map(address_map &map) // map(0xfff8, 0xffff).nopw(); // timefgtr, sound related? } -void galaxian_state::zigzag_map(address_map &map) +void zigzagb_state::zigzag_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x1fff).rom(); - map(0x2000, 0x2fff).bankr("bank1"); - map(0x3000, 0x3fff).bankr("bank2"); + map(0x2000, 0x2fff).bankr(m_rombanks[0]); + map(0x3000, 0x3fff).bankr(m_rombanks[1]); map(0x4000, 0x47ff).ram(); // needs a full 2K of RAM - map(0x4800, 0x4fff).w(FUNC(galaxian_state::zigzag_ay8910_w)); - map(0x5000, 0x53ff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); - map(0x5800, 0x58ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); + map(0x4800, 0x4fff).w(FUNC(zigzagb_state::ay8910_w)); + map(0x5000, 0x53ff).mirror(0x0400).ram().w(FUNC(zigzagb_state::galaxian_videoram_w)).share("videoram"); + map(0x5800, 0x58ff).mirror(0x0700).ram().w(FUNC(zigzagb_state::galaxian_objram_w)).share("spriteram"); map(0x6000, 0x6000).mirror(0x07ff).portr("IN0"); - map(0x6000, 0x6001).mirror(0x07f8).w(FUNC(galaxian_state::start_lamp_w)); - map(0x6003, 0x6003).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w)); + map(0x6000, 0x6001).mirror(0x07f8).w(FUNC(zigzagb_state::start_lamp_w)); + map(0x6003, 0x6003).mirror(0x07f8).w(FUNC(zigzagb_state::coin_count_0_w)); map(0x6800, 0x6800).mirror(0x07ff).portr("IN1"); map(0x7000, 0x7000).mirror(0x07ff).portr("IN2"); - map(0x7001, 0x7001).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w)); - map(0x7002, 0x7002).mirror(0x07f8).w(FUNC(galaxian_state::zigzag_bankswap_w)); - map(0x7004, 0x7004).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w)); - map(0x7006, 0x7006).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); - map(0x7007, 0x7007).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0x7001, 0x7001).mirror(0x07f8).w(FUNC(zigzagb_state::irq_enable_w)); + map(0x7002, 0x7002).mirror(0x07f8).w(FUNC(zigzagb_state::bankswap_w)); + map(0x7004, 0x7004).mirror(0x07f8).w(FUNC(zigzagb_state::galaxian_stars_enable_w)); + map(0x7006, 0x7006).mirror(0x07f8).w(FUNC(zigzagb_state::galaxian_flip_screen_x_w)); + map(0x7007, 0x7007).mirror(0x07f8).w(FUNC(zigzagb_state::galaxian_flip_screen_y_w)); map(0x7800, 0x7800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r)); } +void gmgalax_state::gmgalax_map(address_map &map) +{ + galaxian_map(map); + + map(0x0000, 0x3fff).bankr(m_rombank); // ROM is banked +} + // not derived from schematics void galaxian_state::ozon1_map(address_map &map) { @@ -1930,13 +2016,13 @@ void namenayo_state::namenayo_map(address_map &map) map(0x0000, 0x3fff).rom(); map(0x4000, 0x4fff).ram(); map(0x5000, 0x6fff).rom(); - map(0xc800, 0xc8ff).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); - map(0xd000, 0xd3ff).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); + map(0xc800, 0xc8ff).ram().w(FUNC(namenayo_state::galaxian_objram_w)).share("spriteram"); + map(0xd000, 0xd3ff).ram().w(FUNC(namenayo_state::galaxian_videoram_w)).share("videoram"); map(0xd800, 0xd800).w(FUNC(namenayo_state::namenayo_unk_d800_w)); // some kind of split position for bg colour maybe? map(0xe000, 0xe01f).ram().w(FUNC(namenayo_state::namenayo_extattr_w)).share("extattrram"); - map(0xe801, 0xe801).w(FUNC(galaxian_state::irq_enable_w)); - map(0xe806, 0xe806).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); - map(0xe807, 0xe807).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0xe801, 0xe801).w(FUNC(namenayo_state::irq_enable_w)); + map(0xe806, 0xe806).mirror(0x07f8).w(FUNC(namenayo_state::galaxian_flip_screen_x_w)); + map(0xe807, 0xe807).mirror(0x07f8).w(FUNC(namenayo_state::galaxian_flip_screen_y_w)); map(0xf900, 0xf903).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xfa00, 0xfa03).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xf000, 0xf000).r("watchdog", FUNC(watchdog_timer_device::reset_r)); @@ -2054,7 +2140,7 @@ void galaxian_state::mimonscr_map(address_map &map) -void galaxian_state::scorpion_map(address_map &map) +void zac_scorpion_state::scorpion_map(address_map &map) { theend_map(map); map(0x5800, 0x67ff).rom().region("maincpu", 0x5800); // extra ROM @@ -2285,46 +2371,45 @@ void galaxian_state::turpins_map(address_map &map) -/* this is the same as theend, except for separate RGB background controls - and some extra ROM space at $7000 and $C000 */ -void galaxian_state::sfx_map(address_map &map) +// this is the same as theend, except for separate RGB background controls and some extra ROM space at $7000 and $C000 +void taiyo_sfx_state::sfx_map(address_map &map) { map(0x0000, 0x3fff).rom(); map(0x4000, 0x47ff).ram(); - map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); - map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); - map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_red_w)); - map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w)); - map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w)); - map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_blue_w)); - map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w)); - map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_green_w)); - map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); - map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(taiyo_sfx_state::galaxian_videoram_w)).share("videoram"); + map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(taiyo_sfx_state::galaxian_objram_w)).share("spriteram"); + map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_red_w)); + map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(taiyo_sfx_state::irq_enable_w)); + map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(taiyo_sfx_state::coin_count_0_w)); + map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_blue_w)); + map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_stars_enable_w)); + map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_green_w)); + map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_x_w)); + map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_y_w)); map(0x7000, 0x7fff).rom(); - map(0x8000, 0xbfff).rw(FUNC(galaxian_state::theend_ppi8255_r), FUNC(galaxian_state::theend_ppi8255_w)); + map(0x8000, 0xbfff).rw(FUNC(taiyo_sfx_state::theend_ppi8255_r), FUNC(taiyo_sfx_state::theend_ppi8255_w)); map(0xc000, 0xefff).rom(); } -void galaxian_state::monsterz_map(address_map &map) +void taiyo_sfx_state::monsterz_map(address_map &map) { map(0x0000, 0x37ff).rom(); map(0x3800, 0x3fff).ram(); // extra RAM used by protection map(0x4000, 0x47ff).ram(); - map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); - map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); - map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_red_w)); - map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w)); - map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w)); - map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_blue_w)); - map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w)); - map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_green_w)); - map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); - map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); - map(0x8000, 0xbfff).rw(FUNC(galaxian_state::theend_ppi8255_r), FUNC(galaxian_state::theend_ppi8255_w)); + map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(taiyo_sfx_state::galaxian_videoram_w)).share("videoram"); + map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(taiyo_sfx_state::galaxian_objram_w)).share("spriteram"); + map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_red_w)); + map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(taiyo_sfx_state::irq_enable_w)); + map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(taiyo_sfx_state::coin_count_0_w)); + map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_blue_w)); + map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_stars_enable_w)); + map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_green_w)); + map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_x_w)); + map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_y_w)); + map(0x8000, 0xbfff).rw(FUNC(taiyo_sfx_state::theend_ppi8255_r), FUNC(taiyo_sfx_state::theend_ppi8255_w)); map(0xc000, 0xd7ff).rom(); - map(0xd800, 0xd800).r(FUNC(galaxian_state::monsterz_protection_r)); + map(0xd800, 0xd800).r(FUNC(taiyo_sfx_state::monsterz_protection_r)); } @@ -2377,20 +2462,20 @@ void galaxian_state::frogf_map(address_map &map) } -/* mooncrst */ -void galaxian_state::mshuttle_map(address_map &map) +// mshuttle +void mshuttle_state::mshuttle_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x7fff).rom(); map(0x8000, 0x83ff).ram(); - map(0x9000, 0x93ff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); - map(0x9800, 0x98ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); + map(0x9000, 0x93ff).mirror(0x0400).ram().w(FUNC(mshuttle_state::galaxian_videoram_w)).share("videoram"); + map(0x9800, 0x98ff).mirror(0x0700).ram().w(FUNC(mshuttle_state::galaxian_objram_w)).share("spriteram"); map(0xa000, 0xa000).portr("IN0"); - map(0xa000, 0xa000).w(FUNC(galaxian_state::irq_enable_w)); - map(0xa001, 0xa001).w(FUNC(galaxian_state::galaxian_stars_enable_w)); - map(0xa002, 0xa002).w(FUNC(galaxian_state::galaxian_flip_screen_xy_w)); + map(0xa000, 0xa000).w(FUNC(mshuttle_state::irq_enable_w)); + map(0xa001, 0xa001).w(FUNC(mshuttle_state::galaxian_stars_enable_w)); + map(0xa002, 0xa002).w(FUNC(mshuttle_state::galaxian_flip_screen_xy_w)); map(0xa004, 0xa004).w("cclimber_audio", FUNC(cclimber_audio_device::sample_trigger_w)); - map(0xa007, 0xa007).w(FUNC(galaxian_state::mshuttle_ay8910_cs_w)); + map(0xa007, 0xa007).w(FUNC(mshuttle_state::ay8910_cs_w)); map(0xa800, 0xa800).portr("IN1"); map(0xa800, 0xa800).w("cclimber_audio", FUNC(cclimber_audio_device::sample_rate_w)); map(0xb000, 0xb000).portr("IN2"); @@ -2398,95 +2483,119 @@ void galaxian_state::mshuttle_map(address_map &map) map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r)); } -void galaxian_state::mshuttle_decrypted_opcodes_map(address_map &map) +void mshuttle_state::mshuttle_decrypted_opcodes_map(address_map &map) { map(0x0000, 0x7fff).rom().share("decrypted_opcodes"); } -void galaxian_state::mshuttle_portmap(address_map &map) +void mshuttle_state::mshuttle_portmap(address_map &map) { map.unmap_value_high(); map.global_mask(0x0f); - map(0x08, 0x08).w(FUNC(galaxian_state::mshuttle_ay8910_control_w)); - map(0x09, 0x09).w(FUNC(galaxian_state::mshuttle_ay8910_data_w)); - map(0x0c, 0x0c).r(FUNC(galaxian_state::mshuttle_ay8910_data_r)); + map(0x08, 0x08).w(FUNC(mshuttle_state::ay8910_control_w)); + map(0x09, 0x09).w(FUNC(mshuttle_state::ay8910_data_w)); + map(0x0c, 0x0c).r(FUNC(mshuttle_state::ay8910_data_r)); } -void galaxian_state::fourplay_map(address_map &map) + +// fourplay +void fourplay_state::fourplay_map(address_map &map) { - map(0x0000,0x3fff).bankr("bank1"); + map(0x0000,0x3fff).bankr(m_rombank); map(0x4000,0x47ff).ram(); - map(0x5000,0x53ff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); - map(0x5800,0x58ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); + map(0x5000,0x53ff).mirror(0x0400).ram().w(FUNC(fourplay_state::galaxian_videoram_w)).share("videoram"); + map(0x5800,0x58ff).mirror(0x0700).ram().w(FUNC(fourplay_state::galaxian_objram_w)).share("spriteram"); map(0x6000,0x6000).portr("IN0"); map(0x6800,0x6800).portr("IN1"); map(0x7000,0x7000).portr("IN2"); map(0x7800,0x7fff).r("watchdog",FUNC(watchdog_timer_device::reset_r)); - map(0x6000,0x6001).w(FUNC(galaxian_state::start_lamp_w)); - map(0x6002,0x6002).nopw(); // .w(FUNC(galaxian_state::coin_lock_w)); - map(0x6003,0x6003).w(FUNC(galaxian_state::coin_count_0_w)); + map(0x6000,0x6001).w(FUNC(fourplay_state::start_lamp_w)); + map(0x6002,0x6002).nopw(); // .w(FUNC(fourplay_state::coin_lock_w)); + map(0x6003,0x6003).w(FUNC(fourplay_state::coin_count_0_w)); map(0x6004,0x6007).w("cust",FUNC(galaxian_sound_device::lfo_freq_w)); map(0x6800,0x6807).w("cust",FUNC(galaxian_sound_device::sound_w)); - map(0x7001,0x7001).w(FUNC(galaxian_state::irq_enable_w)); - map(0x7002,0x7003).w(FUNC(galaxian_state::fourplay_rombank_w)); - map(0x7004,0x7004).w(FUNC(galaxian_state::galaxian_stars_enable_w)); + map(0x7001,0x7001).w(FUNC(fourplay_state::irq_enable_w)); + map(0x7002,0x7003).w(FUNC(fourplay_state::fourplay_rombank_w)); + map(0x7004,0x7004).w(FUNC(fourplay_state::galaxian_stars_enable_w)); map(0x7005,0x7005).nopw(); /* bit 3 of rombank select - always 0 */ - map(0x7006,0x7006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); - map(0x7007,0x7007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0x7006,0x7006).w(FUNC(fourplay_state::galaxian_flip_screen_x_w)); + map(0x7007,0x7007).w(FUNC(fourplay_state::galaxian_flip_screen_y_w)); map(0x7008,0x7008).nopw(); /* bit 4 of rombank select - always 0 */ map(0x7800,0x7800).w("cust",FUNC(galaxian_sound_device::pitch_w)); } -void galaxian_state::videight_map(address_map &map) +void videight_state::videight_map(address_map &map) { - map(0x0000,0x3fff).bankr("bank1"); + map(0x0000,0x3fff).bankr(m_rombank); map(0x4000,0x47ff).ram(); - map(0x5000,0x53ff).mirror(0x400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); - map(0x5800,0x58ff).mirror(0x700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); + map(0x5000,0x53ff).mirror(0x400).ram().w(FUNC(videight_state::galaxian_videoram_w)).share("videoram"); + map(0x5800,0x58ff).mirror(0x700).ram().w(FUNC(videight_state::galaxian_objram_w)).share("spriteram"); map(0x6000,0x6000).portr("IN0"); map(0x6800,0x6800).portr("IN1"); map(0x7000,0x7000).portr("IN2"); map(0x7800,0x7fff).r("watchdog",FUNC(watchdog_timer_device::reset_r)); - map(0x6000,0x6002).w(FUNC(galaxian_state::videight_gfxbank_w)); - map(0x6003,0x6003).w(FUNC(galaxian_state::coin_count_0_w)); + map(0x6000,0x6002).w(FUNC(videight_state::videight_gfxbank_w)); + map(0x6003,0x6003).w(FUNC(videight_state::coin_count_0_w)); map(0x6004,0x6007).w("cust",FUNC(galaxian_sound_device::lfo_freq_w)); map(0x6800,0x6807).w("cust",FUNC(galaxian_sound_device::sound_w)); map(0x6808,0x68ff).nopw(); - map(0x7001,0x7001).w(FUNC(galaxian_state::irq_enable_w)); - map(0x7002,0x7005).w(FUNC(galaxian_state::videight_rombank_w)); - map(0x7006,0x7006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); - map(0x7007,0x7007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0x7001,0x7001).w(FUNC(videight_state::irq_enable_w)); + map(0x7002,0x7005).w(FUNC(videight_state::videight_rombank_w)); + map(0x7006,0x7006).w(FUNC(videight_state::galaxian_flip_screen_x_w)); + map(0x7007,0x7007).w(FUNC(videight_state::galaxian_flip_screen_y_w)); map(0x7008,0x7008).nopw(); /* bit 4 of rombank select - always 0 */ map(0x7800,0x7800).w("cust",FUNC(galaxian_sound_device::pitch_w)); } -void galaxian_state::tenspot_unk_6000_w(uint8_t data) +void tenspot_state::machine_start() +{ + galaxian_state::machine_start(); + + m_current_game = 0; + + save_item(NAME(m_current_game)); + + for (unsigned i = 0; 10U > i; ++i) + m_mainbank->configure_entry(i, memregion(util::string_format("game_%u_cpu", i))->base()); + + set_game_bank(m_current_game, false); +} + +void tenspot_state::unk_6000_w(uint8_t data) { logerror("tenspot_unk_6000_w %02x\n",data); } -void galaxian_state::tenspot_unk_8000_w(uint8_t data) +void tenspot_state::unk_8000_w(uint8_t data) { logerror("tenspot_unk_8000_w %02x\n",data); } -void galaxian_state::tenspot_unk_e000_w(uint8_t data) +void tenspot_state::unk_e000_w(uint8_t data) { logerror("tenspot_unk_e000_w %02x\n",data); } -void galaxian_state::tenspot_select_map(address_map &map) +void tenspot_state::tenspot_map(address_map &map) +{ + galaxian_map(map); + map(0x0000, 0x3fff).bankr(m_mainbank); + map(0x6002, 0x6002).mirror(0x07f8).w(FUNC(tenspot_state::artic_gfxbank_w)); + map(0x7000, 0x7000).r(*this, FUNC(tenspot_state::dsw_read)); +} + +void tenspot_state::tenspot_select_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x07ff).rom(); map(0x2000, 0x23ff).ram(); map(0x4000, 0x4000).portr("SELECT2"); - map(0x6000, 0x6000).w(FUNC(galaxian_state::tenspot_unk_6000_w)); + map(0x6000, 0x6000).w(FUNC(tenspot_state::unk_6000_w)); map(0xc000, 0xc000).portr("SELECT"); - map(0x8000, 0x8000).w(FUNC(galaxian_state::tenspot_unk_8000_w)); + map(0x8000, 0x8000).w(FUNC(tenspot_state::unk_8000_w)); map(0xa000, 0xa03f).ram(); - map(0xe000, 0xe000).w(FUNC(galaxian_state::tenspot_unk_e000_w)); + map(0xe000, 0xe000).w(FUNC(tenspot_state::unk_e000_w)); } @@ -2591,7 +2700,7 @@ void galaxian_state::konami_sound_portmap(address_map &map) map(0x00, 0xff).rw(FUNC(galaxian_state::konami_ay8910_r), FUNC(galaxian_state::konami_ay8910_w)); } -void galaxian_state::monsterz_sound_map(address_map &map) +void taiyo_sfx_state::monsterz_sound_map(address_map &map) { konami_sound_map(map); map(0x0000, 0x3fff).rom().region("audiocpu", 0); // sound board has space for extra ROM @@ -2649,22 +2758,32 @@ void galaxian_state::takeoff_sound_portmap(address_map &map) // Scorpion with 3 x AY-8910A and Digitalker -void galaxian_state::scorpion_sound_map(address_map &map) +void zac_scorpion_state::scorpion_sound_map(address_map &map) { konami_sound_map(map); - map(0x3000, 0x3000).r(FUNC(galaxian_state::scorpion_digitalker_intr_r)); + map(0x3000, 0x3000).r(FUNC(zac_scorpion_state::digitalker_intr_r)); } -void galaxian_state::scorpion_sound_portmap(address_map &map) +void zac_scorpion_state::scorpion_sound_portmap(address_map &map) { map.global_mask(0xff); - map(0x00, 0xff).rw(FUNC(galaxian_state::scorpion_ay8910_r), FUNC(galaxian_state::scorpion_ay8910_w)); + map(0x00, 0xff).rw(FUNC(zac_scorpion_state::ay8910_r), FUNC(zac_scorpion_state::ay8910_w)); } // King and Balloon with DAC -void galaxian_state::kingball_sound_map(address_map &map) +void kingball_state::kingball_map(address_map &map) +{ + mooncrst_map(map); + map(0xb000, 0xb000).mirror(0x07f8).w(FUNC(kingball_state::sound1_w)); + map(0xb001, 0xb001).mirror(0x07f8).w(FUNC(kingball_state::irq_enable_w)); + map(0xb002, 0xb002).mirror(0x07f8).w(FUNC(kingball_state::sound2_w)); + map(0xb003, 0xb003).mirror(0x07f8).w(FUNC(kingball_state::speech_dip_w)); + map(0xb004, 0xb004).mirror(0x07f8).unmapw(); // disable the stars +} + +void kingball_state::kingball_sound_map(address_map &map) { map.unmap_value_high(); map.global_mask(0x3fff); @@ -2672,26 +2791,26 @@ void galaxian_state::kingball_sound_map(address_map &map) map(0x0000, 0x1fff).rom(); } -void galaxian_state::kingball_sound_portmap(address_map &map) +void kingball_state::kingball_sound_portmap(address_map &map) { map.unmap_value_high(); map.global_mask(0xff); - map(0x00, 0x00).mirror(0xff).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w(FUNC(galaxian_state::kingball_dac_w)); + map(0x00, 0x00).mirror(0xff).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w(FUNC(kingball_state::dac_w)); } // SF-X sample player -void galaxian_state::sfx_sample_map(address_map &map) +void taiyo_sfx_state::sfx_sample_map(address_map &map) { map(0x0000, 0x5fff).rom(); map(0x8000, 0x83ff).mirror(0x6c00).ram(); } -void galaxian_state::sfx_sample_portmap(address_map &map) +void taiyo_sfx_state::sfx_sample_portmap(address_map &map) { map.global_mask(0xff); - map(0x00, 0xff).rw(FUNC(galaxian_state::sfx_sample_io_r), FUNC(galaxian_state::sfx_sample_io_w)); + map(0x00, 0xff).rw(FUNC(taiyo_sfx_state::sample_io_r), FUNC(taiyo_sfx_state::sample_io_w)); } void galaxian_state::turpins_sound_map(address_map &map) @@ -3546,7 +3665,7 @@ static INPUT_PORTS_START( tenspot ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("FAKE_SELECT") /* fake button to move onto next game - until select rom is understood! */ - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, galaxian_state, tenspot_fake, 0) + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, tenspot_state, tenspot_fake, 0) PORT_MODIFY("IN0") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY @@ -4708,14 +4827,14 @@ static INPUT_PORTS_START( kingball ) PORT_INCLUDE(galaxian) PORT_MODIFY("IN0") - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(galaxian_state, kingball_muxbit_r) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(kingball_state, muxbit_r) /* Relating to above port:Hack? - possibly multiplexed via writes to $b003 */ //PORT_DIPNAME( 0x40, 0x40, "Speech" ) //PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) //PORT_DIPSETTING( 0x40, DEF_STR( On ) ) PORT_MODIFY("IN1") - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(galaxian_state, kingball_noise_r) /* NOISE line */ + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(kingball_state, noise_r) /* NOISE line */ PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0xc0, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) ) @@ -6180,26 +6299,23 @@ static INPUT_PORTS_START( scobras ) INPUT_PORTS_END -CUSTOM_INPUT_MEMBER(galaxian_state::moonwar_dial_r) +CUSTOM_INPUT_MEMBER(moonwar_state::dial_r) { - static const char *const dialname[2] = { "P1_DIAL", "P2_DIAL" }; - int p = (~m_moonwar_port_select >> 4) & 1; - // see http://www.cityofberwyn.com/schematics/stern/MoonWar_opto.tiff for schematic - // I.e. a 74ls161 counts from 0 to 15 which is the absolute number of bars passed on the quadrature - - signed char dialread = ioport(dialname[p])->read(); + // i.e. a 74ls161 counts from 0 to 15 which is the absolute number of bars passed on the quadrature - uint8_t ret; + const int8_t dialread = int8_t(uint8_t(m_dials[m_port_select]->read())); - if (dialread < 0) m_direction[p] = 0x00; - else if (dialread > 0) m_direction[p] = 0x10; + if (dialread < 0) + m_direction[m_port_select] = 0x00; + else if (dialread > 0) + m_direction[m_port_select] = 0x10; - m_counter_74ls161[p] += abs(dialread); - m_counter_74ls161[p] &= 0xf; + m_counter_74ls161[m_port_select] += std::abs(dialread); + m_counter_74ls161[m_port_select] &= 0xf; - ret = m_counter_74ls161[p] | m_direction[p]; - //fprintf(stderr, "dialread1: %02x, counter_74ls161: %02x, spinner ret is %02x\n", dialread, m_counter_74ls161[p], ret); + const uint8_t ret = m_counter_74ls161[m_port_select] | m_direction[m_port_select]; + //logerror("dialread1: %02x, counter_74ls161: %02x, spinner ret is %02x\n", dialread, m_counter_74ls161[m_port_select], ret); return ret; } @@ -6207,7 +6323,7 @@ CUSTOM_INPUT_MEMBER(galaxian_state::moonwar_dial_r) /* verified from Z80 code */ static INPUT_PORTS_START( moonwar ) PORT_START("IN0") - PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(galaxian_state, moonwar_dial_r) + PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(moonwar_state, dial_r) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // cocktail: p2 shield PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -6980,13 +7096,17 @@ void galaxian_state::sidam_bootleg_base(machine_config &config) { galaxian_base(config); - /* basic machine hardware */ + // basic machine hardware m_maincpu->set_clock(12_MHz_XTAL / 2 / 2); - /* video hardware */ + // video hardware m_gfxdecode->set_info(gfx_sidam); + // adjust for 12 MHz pixel clock m_screen->set_raw(12_MHz_XTAL, SIDAM_HTOTAL, SIDAM_HBEND, SIDAM_HBSTART, GALAXIAN_VTOTAL, GALAXIAN_VBEND, GALAXIAN_VBSTART); + set_x_scale(SIDAM_XSCALE); + set_h0_start(SIDAM_H0START); + } @@ -7129,10 +7249,10 @@ void galaxian_state::galaxian(machine_config &config) GALAXIAN_SOUND(config, "cust", 0); } -void galaxian_state::pisces(machine_config &config) +void pisces_state::pisces(machine_config &config) { galaxian(config); - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::pisces_map); + m_maincpu->set_addrmap(AS_PROGRAM, &pisces_state::pisces_map); } void galaxian_state::victoryc(machine_config &config) @@ -7164,34 +7284,48 @@ void galaxian_state::pacmanbl(machine_config &config) { galaxian(config); - /* separate tile/sprite ROMs */ + // separate tile/sprite ROMs m_gfxdecode->set_info(gfx_pacmanbl); } -void galaxian_state::tenspot(machine_config &config) +void tenspot_state::tenspot(machine_config &config) { galaxian(config); - /* basic machine hardware */ + + // basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &tenspot_state::tenspot_map); + z80_device &selectcpu(Z80(config, "selectcpu", GALAXIAN_PIXEL_CLOCK/3/2)); // ?? mhz - selectcpu.set_addrmap(AS_PROGRAM, &galaxian_state::tenspot_select_map); - //selectcpu.set_vblank_int("screen", FUNC(galaxian_state::nmi_line_pulse)); + selectcpu.set_addrmap(AS_PROGRAM, &tenspot_state::tenspot_select_map); + //selectcpu.set_vblank_int("screen", FUNC(tenspot_state::nmi_line_pulse)); - /* separate tile/sprite ROMs */ + // separate tile/sprite ROMs m_gfxdecode->set_info(gfx_tenspot); } -void galaxian_state::zigzag(machine_config &config) +void galaxian_state::devilfsg(machine_config &config) +{ + pacmanbl(config); + + // IRQ line is INT, not NMI + set_irq_line(0); +} + +void zigzagb_state::zigzag(machine_config &config) { galaxian_base(config); - /* separate tile/sprite ROMs */ + // separate tile/sprite ROMs m_gfxdecode->set_info(gfx_pacmanbl); - /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::zigzag_map); + // two sprite generators + set_num_spritegens(2); - /* sound hardware */ + // basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &zigzagb_state::zigzag_map); + + // sound hardware AY8910(config, m_ay8910[0], GALAXIAN_PIXEL_CLOCK/3/2).add_route(ALL_OUTPUTS, "speaker", 0.5); /* matches PCB video - unconfirmed */ } @@ -7200,6 +7334,8 @@ void gmgalax_state::gmgalax(machine_config &config) { galaxian(config); + m_maincpu->set_addrmap(AS_PROGRAM, &gmgalax_state::gmgalax_map); + /* banked video hardware */ m_gfxdecode->set_info(gfx_gmgalax); m_palette->set_entries(64); @@ -7244,16 +7380,16 @@ void galaxian_state::thepitm(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::thepitm_map); } -void galaxian_state::porter(machine_config &config) +void pisces_state::porter(machine_config &config) { mooncrst(config); - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::porter_map); + m_maincpu->set_addrmap(AS_PROGRAM, &pisces_state::porter_map); } -void galaxian_state::skybase(machine_config &config) +void pisces_state::skybase(machine_config &config) { mooncrst(config); - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::skybase_map); + m_maincpu->set_addrmap(AS_PROGRAM, &pisces_state::skybase_map); } void galaxian_state::kong(machine_config &config) @@ -7296,11 +7432,15 @@ void galaxian_state::ckongmc(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::ckongmc_map); } -void galaxian_state::bagmanmc(machine_config &config) +void bagmanmc_state::bagmanmc(machine_config &config) { mooncrst(config); - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::bagmanmc_map); - m_maincpu->set_addrmap(AS_IO, &galaxian_state::bagmanmc_io_map); + + m_maincpu->set_addrmap(AS_PROGRAM, &bagmanmc_state::bagmanmc_map); + m_maincpu->set_addrmap(AS_IO, &bagmanmc_state::bagmanmc_io_map); + + // IRQ line is INT, not NMI + set_irq_line(0); } @@ -7311,6 +7451,12 @@ void galaxian_state::fantastc(machine_config &config) // alternate memory map m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::fantastc_map); + // bullets moved from $60 to $c0 + set_bullets_base(0xc0); + + // two sprite generators + set_num_spritegens(2); + // sound hardware AY8910(config, m_ay8910[0], GALAXIAN_PIXEL_CLOCK/3/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // 3.072MHz AY8910(config, m_ay8910[1], GALAXIAN_PIXEL_CLOCK/3/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // 3.072MHz @@ -7397,32 +7543,37 @@ void galaxian_state::checkmaj(machine_config &config) } -void galaxian_state::mshuttle(machine_config &config) +void mshuttle_state::mshuttle(machine_config &config) { galaxian_base(config); // basic machine hardware - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::mshuttle_map); - m_maincpu->set_addrmap(AS_OPCODES, &galaxian_state::mshuttle_decrypted_opcodes_map); - m_maincpu->set_addrmap(AS_IO, &galaxian_state::mshuttle_portmap); + m_maincpu->set_addrmap(AS_PROGRAM, &mshuttle_state::mshuttle_map); + m_maincpu->set_addrmap(AS_OPCODES, &mshuttle_state::mshuttle_decrypted_opcodes_map); + m_maincpu->set_addrmap(AS_IO, &mshuttle_state::mshuttle_portmap); + + // IRQ line is INT, not NMI + set_irq_line(0); // sound hardware CCLIMBER_AUDIO(config, "cclimber_audio", 0); } -void galaxian_state::kingball(machine_config &config) +void kingball_state::kingball(machine_config &config) { mooncrst(config); - /* basic machine hardware */ + // basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &kingball_state::kingball_map); + Z80(config, m_audiocpu, 5000000/2); - m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::kingball_sound_map); - m_audiocpu->set_addrmap(AS_IO, &galaxian_state::kingball_sound_portmap); + m_audiocpu->set_addrmap(AS_PROGRAM, &kingball_state::kingball_sound_map); + m_audiocpu->set_addrmap(AS_IO, &kingball_state::kingball_sound_portmap); GENERIC_LATCH_8(config, m_soundlatch); - /* sound hardware */ + // sound hardware DAC_4BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.53); // unknown DAC } @@ -7529,11 +7680,13 @@ void namenayo_state::namenayo(machine_config &config) konami_base(config); konami_sound_2x_ay8910(config); + // video hardware m_maincpu->set_addrmap(AS_PROGRAM, &namenayo_state::namenayo_map); m_palette->set_entries(64); - /* video hardware */ m_gfxdecode->set_info(gfx_namenayo); + + set_left_sprite_clip(0); } // TODO: should be derived from theend, re-sort machine configs later @@ -7641,23 +7794,23 @@ void galaxian_state::amigo2(machine_config &config) // marked "AMI", but similar AY8910(config, m_ay8910[1], 12_MHz_XTAL / 2 / 2 / 2).add_route(ALL_OUTPUTS, "speaker", 0.25); /* matches PCB, needs verification */ } -void galaxian_state::scorpion(machine_config &config) +void zac_scorpion_state::scorpion(machine_config &config) { scramble_base(config); // alternate memory map - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::scorpion_map); + m_maincpu->set_addrmap(AS_PROGRAM, &zac_scorpion_state::scorpion_map); - m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::scorpion_sound_map); - m_audiocpu->set_addrmap(AS_IO, &galaxian_state::scorpion_sound_portmap); + m_audiocpu->set_addrmap(AS_PROGRAM, &zac_scorpion_state::scorpion_sound_map); + m_audiocpu->set_addrmap(AS_IO, &zac_scorpion_state::scorpion_sound_portmap); - m_ppi8255[1]->in_pc_callback().set(FUNC(galaxian_state::scorpion_protection_r)); - m_ppi8255[1]->out_pc_callback().set(FUNC(galaxian_state::scorpion_protection_w)); + m_ppi8255[1]->in_pc_callback().set(FUNC(zac_scorpion_state::protection_r)); + m_ppi8255[1]->out_pc_callback().set(FUNC(zac_scorpion_state::protection_w)); - /* extra AY8910 with I/O ports */ + // extra AY8910 with I/O ports AY8910(config, m_ay8910[2], KONAMI_SOUND_CLOCK/8); m_ay8910[2]->port_a_write_callback().set(m_digitalker, FUNC(digitalker_device::digitalker_data_w)); - m_ay8910[2]->port_b_write_callback().set(FUNC(galaxian_state::scorpion_digitalker_control_w)); + m_ay8910[2]->port_b_write_callback().set(FUNC(zac_scorpion_state::digitalker_control_w)); m_ay8910[2]->add_route(ALL_OUTPUTS, "speaker", 0.25); DIGITALKER(config, m_digitalker, 4_MHz_XTAL).add_route(ALL_OUTPUTS, "speaker", 0.16); @@ -7672,19 +7825,19 @@ void galaxian_state::ckongs(machine_config &config) } -void galaxian_state::sfx(machine_config &config) +void taiyo_sfx_state::sfx(machine_config &config) { scramble_base(config); config.device_remove("watchdog"); // alternate memory map - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::sfx_map); + m_maincpu->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::sfx_map); /* 3rd CPU for the sample player */ Z80(config, m_audio2, KONAMI_SOUND_CLOCK/8); - m_audio2->set_addrmap(AS_PROGRAM, &galaxian_state::sfx_sample_map); - m_audio2->set_addrmap(AS_IO, &galaxian_state::sfx_sample_portmap); + m_audio2->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::sfx_sample_map); + m_audio2->set_addrmap(AS_IO, &taiyo_sfx_state::sfx_sample_portmap); I8255A(config, m_ppi8255[2]); m_ppi8255[2]->in_pa_callback().set("soundlatch2", FUNC(generic_latch_8_device::read)); @@ -7693,24 +7846,24 @@ void galaxian_state::sfx(machine_config &config) /* port on 2nd 8910 is used for communication */ m_ay8910[1]->port_a_write_callback().set("soundlatch2", FUNC(generic_latch_8_device::write)); - m_ay8910[1]->port_b_write_callback().set(FUNC(galaxian_state::sfx_sample_control_w)); + m_ay8910[1]->port_b_write_callback().set(FUNC(taiyo_sfx_state::sample_control_w)); /* DAC for the sample player */ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 1.0); // 16-pin IC (not identified by schematics) } -void galaxian_state::monsterz(machine_config &config) +void taiyo_sfx_state::monsterz(machine_config &config) { sfx(config); // alternate memory map - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::monsterz_map); - m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::monsterz_sound_map); + m_maincpu->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::monsterz_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::monsterz_sound_map); - m_ppi8255[1]->out_pa_callback().set(FUNC(galaxian_state::monsterz_porta_1_w)); - m_ppi8255[1]->out_pb_callback().set(FUNC(galaxian_state::monsterz_portb_1_w)); - m_ppi8255[1]->out_pc_callback().set(FUNC(galaxian_state::monsterz_portc_1_w)); + m_ppi8255[1]->out_pa_callback().set(FUNC(taiyo_sfx_state::monsterz_porta_1_w)); + m_ppi8255[1]->out_pb_callback().set(FUNC(taiyo_sfx_state::monsterz_portb_1_w)); + m_ppi8255[1]->out_pc_callback().set(FUNC(taiyo_sfx_state::monsterz_portc_1_w)); // there are likely other differences too, but those can wait until after protection is sorted out } @@ -7851,33 +8004,33 @@ void galaxian_state::anteaterg(machine_config &config) } -void galaxian_state::moonwar(machine_config &config) +void moonwar_state::moonwar(machine_config &config) { scobra(config); - m_ppi8255[0]->out_pc_callback().set(FUNC(galaxian_state::moonwar_port_select_w)); + m_ppi8255[0]->out_pc_callback().set(FUNC(moonwar_state::port_select_w)); - m_palette->set_init(FUNC(galaxian_state::moonwar_palette)); // bullets are less yellow + m_palette->set_init(FUNC(moonwar_state::moonwar_palette)); // bullets are less yellow } -void galaxian_state::fourplay(machine_config &config) +void fourplay_state::fourplay(machine_config &config) { galaxian(config); // basic machine hardware - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::fourplay_map); + m_maincpu->set_addrmap(AS_PROGRAM, &fourplay_state::fourplay_map); - /* video hardware */ + // video hardware m_gfxdecode->set_info(gfx_gmgalax); m_palette->set_entries(64); } -void galaxian_state::videight(machine_config &config) +void videight_state::videight(machine_config &config) { galaxian(config); // basic machine hardware - m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::videight_map); + m_maincpu->set_addrmap(AS_PROGRAM, &videight_state::videight_map); /* video hardware */ m_gfxdecode->set_info(gfx_videight); @@ -8118,22 +8271,16 @@ void galaxian_state::decode_victoryc() * *************************************/ -void galaxian_state::common_init(galaxian_draw_bullet_func draw_bullet,galaxian_draw_background_func draw_background, - galaxian_extend_tile_info_func extend_tile_info,galaxian_extend_sprite_info_func extend_sprite_info) +void galaxian_state::common_init( + draw_bullet_func draw_bullet, + draw_background_func draw_background, + extend_tile_info_func extend_tile_info, + extend_sprite_info_func extend_sprite_info) { - m_x_scale = GALAXIAN_XSCALE; - m_h0_start = GALAXIAN_H0START; - m_irq_enabled = 0; - m_irq_line = INPUT_LINE_NMI; - m_numspritegens = 1; - m_bullets_base = 0x60; - m_sprites_base = 0x40; - m_frogger_adjust = false; - m_sfx_tilemap = false; - m_draw_bullet_ptr = (draw_bullet != nullptr) ? draw_bullet : &galaxian_state::galaxian_draw_bullet; - m_draw_background_ptr = (draw_background != nullptr) ? draw_background : &galaxian_state::galaxian_draw_background; - m_extend_tile_info_ptr = extend_tile_info; - m_extend_sprite_info_ptr = extend_sprite_info; + m_draw_bullet_ptr = draw_bullet_delegate(draw_bullet ? draw_bullet : &galaxian_state::galaxian_draw_bullet, this); + m_draw_background_ptr = draw_background_delegate(draw_background ? draw_background : &galaxian_state::galaxian_draw_background, this); + m_extend_tile_info_ptr = extend_tile_info_delegate(extend_tile_info ? extend_tile_info : &galaxian_state::empty_extend_tile_info, this); + m_extend_sprite_info_ptr = extend_sprite_info_delegate(extend_sprite_info ? extend_sprite_info : &galaxian_state::empty_extend_sprite_info, this); } @@ -8232,28 +8379,19 @@ void galaxian_state::init_azurian() void gmgalax_state::init_gmgalax() { - address_space &space = m_maincpu->space(AS_PROGRAM); - - m_stars_enabled = 0; - std::fill(std::begin(m_gfxbank), std::end(m_gfxbank), 0); - - /* video extensions */ - common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &gmgalax_state::gmgalax_extend_tile_info, &gmgalax_state::gmgalax_extend_sprite_info); - - /* ROM is banked */ - space.install_read_bank(0x0000, 0x3fff, m_bank1); - m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); - - /* callback when the game select is toggled */ - game_changed(*machine().ioport().ports().begin()->second->fields().first(), 0, 0, 0); - save_item(NAME(m_selected_game)); + // video extensions + common_init(nullptr, nullptr, nullptr, nullptr); + m_extend_tile_info_ptr = extend_tile_info_delegate(&gmgalax_state::bagmanmc_extend_tile_info, this); + m_extend_sprite_info_ptr = extend_sprite_info_delegate(&gmgalax_state::bagmanmc_extend_sprite_info, this); } -void galaxian_state::init_pisces() +void pisces_state::init_pisces() { /* video extensions */ - common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info); + common_init(nullptr, nullptr, nullptr, nullptr); + m_extend_tile_info_ptr = extend_tile_info_delegate(&pisces_state::pisces_extend_tile_info, this); + m_extend_sprite_info_ptr = extend_sprite_info_delegate(&pisces_state::pisces_extend_sprite_info, this); } @@ -8278,30 +8416,33 @@ void galaxian_state::init_victoryc() } -void galaxian_state::init_fourplay() +void fourplay_state::init_fourplay() { - m_bank1->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000); - m_bank1->set_entry(0); + m_rombank->configure_entries(0, 4, memregion("maincpu")->base(), 0x4000); + m_rombank->set_entry(0); /* video extensions */ - common_init(NULL, NULL, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info); + common_init(nullptr, nullptr, nullptr, nullptr); + m_extend_tile_info_ptr = extend_tile_info_delegate(&fourplay_state::pisces_extend_tile_info, this); + m_extend_sprite_info_ptr = extend_sprite_info_delegate(&fourplay_state::pisces_extend_sprite_info, this); } -void galaxian_state::init_videight() +void videight_state::init_videight() { - m_bank1->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000); - m_bank1->set_entry(0); + m_rombank->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000); + m_rombank->set_entry(0); /* video extensions */ - common_init(NULL, NULL, &galaxian_state::videight_extend_tile_info, &galaxian_state::videight_extend_sprite_info); + common_init(nullptr, nullptr, nullptr, nullptr); + m_extend_tile_info_ptr = extend_tile_info_delegate(&videight_state::videight_extend_tile_info, this); + m_extend_sprite_info_ptr = extend_sprite_info_delegate(&videight_state::videight_extend_sprite_info, this); } void guttangt_state::init_guttangt() { common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::guttangt_extend_sprite_info); - m_rombank->configure_entry( 0, memregion("maincpu")->base() + 0x2000); - m_rombank->configure_entry( 1, memregion("maincpu")->base() + 0x4000); + m_rombank->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x2000); m_rombank->set_entry(0); } @@ -8365,26 +8506,22 @@ void galaxian_state::init_pacmanbl() space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::artic_gfxbank_w))); } -uint8_t galaxian_state::tenspot_dsw_read() +uint8_t tenspot_state::dsw_read() { - if (m_tenspot_current_game >= 0 && m_tenspot_current_game < 10) - return m_tenspot_game_dsw[m_tenspot_current_game]->read(); + if (m_current_game < m_game_dsw.size()) + return m_game_dsw[m_current_game]->read(); else return 0x00; } -void galaxian_state::tenspot_set_game_bank(int bank, int from_game) +void tenspot_state::set_game_bank(int bank, bool invalidate_gfx) { char tmp[64]; uint8_t* srcregion; uint8_t* dstregion; - int x; - sprintf(tmp,"game_%d_cpu", bank); - srcregion = memregion(tmp)->base(); - dstregion = memregion("maincpu")->base(); - memcpy(dstregion, srcregion, 0x4000); + m_mainbank->set_entry(bank); sprintf(tmp,"game_%d_temp", bank); srcregion = memregion(tmp)->base(); @@ -8393,17 +8530,13 @@ void galaxian_state::tenspot_set_game_bank(int bank, int from_game) dstregion = memregion("gfx2")->base(); memcpy(dstregion, srcregion, 0x2000); - if (from_game) + if (invalidate_gfx) { - for (x=0;x<0x200;x++) - { + for (int x = 0; x < 0x200; x++) m_gfxdecode->gfx(0)->mark_dirty(x); - } - for (x=0;x<0x80;x++) - { + for (int x = 0; x < 0x80; x++) m_gfxdecode->gfx(1)->mark_dirty(x); - } } sprintf(tmp,"game_%d_prom", bank); @@ -8414,9 +8547,9 @@ void galaxian_state::tenspot_set_game_bank(int bank, int from_game) galaxian_palette(*m_palette); } -void galaxian_state::init_tenspot() +void tenspot_state::init_tenspot() { - address_space &space = m_maincpu->space(AS_PROGRAM); + //address_space &space = m_maincpu->space(AS_PROGRAM); /* these are needed for batman part 2 to work properly, this banking is probably a property of the artic board, which tenspot appears to have copied */ @@ -8429,53 +8562,23 @@ void galaxian_state::init_tenspot() init_galaxian(); - - space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::artic_gfxbank_w))); - - m_tenspot_current_game = 0; - - tenspot_set_game_bank(m_tenspot_current_game, 0); - - space.install_read_handler(0x7000, 0x7000, read8smo_delegate(*this, FUNC(galaxian_state::tenspot_dsw_read))); -} - - - -void galaxian_state::init_devilfsg() -{ - /* video extensions */ - common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr); - - /* IRQ line is INT, not NMI */ - m_irq_line = 0; } -void galaxian_state::init_bagmanmc() +void bagmanmc_state::init_bagmanmc() { /* video extensions */ - common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::gmgalax_extend_tile_info, &galaxian_state::gmgalax_extend_sprite_info); - - /* IRQ line is INT, not NMI */ - m_irq_line = 0; + common_init(nullptr, nullptr, nullptr, nullptr); + m_extend_tile_info_ptr = extend_tile_info_delegate(&bagmanmc_state::bagmanmc_extend_tile_info, this); + m_extend_sprite_info_ptr = extend_sprite_info_delegate(&bagmanmc_state::bagmanmc_extend_sprite_info, this); } -void galaxian_state::init_zigzag() +void zigzagb_state::init_zigzag() { - /* video extensions */ + // video extensions common_init(nullptr, &galaxian_state::galaxian_draw_background, nullptr, nullptr); - m_draw_bullet_ptr = nullptr; - - /* two sprite generators */ - m_numspritegens = 2; - - /* make ROMs 2 & 3 swappable */ - m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000); - membank("bank2")->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000); - - /* handler for doing the swaps */ - zigzag_bankswap_w(0); + m_draw_bullet_ptr = draw_bullet_delegate(); } @@ -8565,33 +8668,31 @@ void galaxian_state::init_kong() } -void galaxian_state::mshuttle_decode(const uint8_t convtable[8][16]) +void mshuttle_state::mshuttle_decode(const uint8_t convtable[8][16]) { - uint8_t *rom = memregion("maincpu")->base(); + const uint8_t *const rom = memregion("maincpu")->base(); - for (int A = 0x0000;A < 0x8000;A++) + for (int addr = 0x0000; addr < 0x8000; addr++) { - int i,j; - uint8_t src = rom[A]; + const uint8_t src = rom[addr]; - /* pick the translation table from bit 0 of the address */ - /* and from bits 1 7 of the source data */ - i = (A & 1) | (src & 0x02) | ((src & 0x80) >> 5); + // pick the translation table from bit 0 of the address and from bits 1 7 of the source data + const int i = (addr & 1) | (src & 0x02) | ((src & 0x80) >> 5); - /* pick the offset in the table from bits 0 2 4 6 of the source data */ - j = (src & 0x01) | ((src & 0x04) >> 1) | ((src & 0x10) >> 2) | ((src & 0x40) >> 3); + // pick the offset in the table from bits 0 2 4 6 of the source data + const int j = (src & 0x01) | ((src & 0x04) >> 1) | ((src & 0x10) >> 2) | ((src & 0x40) >> 3); - /* decode the opcodes */ - m_decrypted_opcodes[A] = (src & 0xaa) | convtable[i][j]; + // decode the opcodes + m_decrypted_opcodes[addr] = (src & 0xaa) | convtable[i][j]; } } -void galaxian_state::init_mshuttle() +void mshuttle_state::init_mshuttle() { static const uint8_t convtable[8][16] = { - /* 0xff marks spots which are unused and therefore unknown */ + // 0xff marks spots which are unused and therefore unknown { 0x40,0x41,0x44,0x15,0x05,0x51,0x54,0x55,0x50,0x00,0x01,0x04,0xff,0x10,0x11,0x14 }, { 0x45,0x51,0x55,0x44,0x40,0x11,0x05,0x41,0x10,0x14,0x54,0x50,0x15,0x04,0x00,0x01 }, { 0x11,0x14,0x10,0x00,0x44,0x05,0xff,0x04,0x45,0x15,0x55,0x50,0xff,0x01,0x54,0x51 }, @@ -8602,18 +8703,15 @@ void galaxian_state::init_mshuttle() { 0x05,0x04,0x51,0x01,0xff,0xff,0x55,0xff,0x00,0x50,0x15,0x14,0x44,0x41,0x40,0x54 }, }; - /* video extensions */ + // video extensions common_init(&galaxian_state::mshuttle_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mshuttle_extend_tile_info, &galaxian_state::mshuttle_extend_sprite_info); - /* IRQ line is INT, not NMI */ - m_irq_line = 0; - - /* decrypt the code */ + // decrypt the code mshuttle_decode(convtable); } -void galaxian_state::init_mshuttlj() +void mshuttle_state::init_mshuttlj() { static const uint8_t convtable[8][16] = { @@ -8627,13 +8725,10 @@ void galaxian_state::init_mshuttlj() { 0x55,0x50,0x15,0x10,0x01,0x04,0x41,0x44,0x45,0x40,0x05,0x00,0x11,0x14,0x51,0x54 }, }; - /* video extensions */ + // video extensions common_init(&galaxian_state::mshuttle_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mshuttle_extend_tile_info, &galaxian_state::mshuttle_extend_sprite_info); - /* IRQ line is INT, not NMI */ - m_irq_line = 0; - - /* decrypt the code */ + // decrypt the code mshuttle_decode(convtable); } @@ -8643,12 +8738,6 @@ void galaxian_state::init_fantastc() /* video extensions */ common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::upper_extend_sprite_info); - /* two sprite generators */ - m_numspritegens = 2; - - /* bullets moved from $60 to $c0 */ - m_bullets_base = 0xc0; - /* decode code */ static const uint16_t lut_am_unscramble[32] = { 0, 2, 4, 6, // ok! @@ -8673,36 +8762,11 @@ void galaxian_state::init_fantastc() void galaxian_state::init_timefgtr() { - /* two sprite generators */ - m_numspritegens = 2; - - /* bullets moved from $60 to $c0 */ - m_bullets_base = 0xc0; - /* video extensions */ common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::upper_extend_sprite_info); } -void galaxian_state::init_kingball() -{ - address_space &space = m_maincpu->space(AS_PROGRAM); - - /* video extensions */ - common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr); - - /* disable the stars */ - space.unmap_write(0xb004, 0xb004, 0x7f8); - - space.install_write_handler(0xb000, 0xb000, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::kingball_sound1_w))); - space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::irq_enable_w))); - space.install_write_handler(0xb002, 0xb002, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::kingball_sound2_w))); - space.install_write_handler(0xb003, 0xb003, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::kingball_speech_dip_w))); - - save_item(NAME(m_kingball_speech_dip)); - save_item(NAME(m_kingball_sound)); -} - /************************************* * * Konami games @@ -8745,10 +8809,11 @@ void galaxian_state::init_mandinga() space.unmap_read(0x7000, 0x7000, 0x7ff); } -void galaxian_state::init_sfx() +void taiyo_sfx_state::init_sfx() { - /* basic configuration */ - common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::sfx_draw_background, &galaxian_state::upper_extend_tile_info, nullptr); + // basic configuration + common_init(&galaxian_state::scramble_draw_bullet, nullptr, &galaxian_state::upper_extend_tile_info, nullptr); + m_draw_background_ptr = draw_background_delegate(&taiyo_sfx_state::sfx_draw_background, this); m_sfx_tilemap = true; } @@ -8767,25 +8832,10 @@ void galaxian_state::init_atlantis() } -void galaxian_state::init_sidam() -{ - /* adjust for 12 MHz pixel clock */ - m_x_scale = SIDAM_XSCALE; - m_h0_start = SIDAM_H0START; -} - void galaxian_state::init_explorer() { /* video extensions */ common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::null_draw_background, nullptr, nullptr); // no 555 timer; there might be no stars at all - init_sidam(); -} - -void galaxian_state::init_amigo2() -{ - /* video extensions */ - init_turtles(); - init_sidam(); } @@ -8889,7 +8939,7 @@ void galaxian_state::init_amidar() #endif -void galaxian_state::init_scorpion() +void zac_scorpion_state::init_scorpion() { common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::scramble_draw_background, &galaxian_state::batman2_extend_tile_info, &galaxian_state::upper_extend_sprite_info); @@ -8954,15 +9004,6 @@ void galaxian_state::init_calipso() } -void galaxian_state::init_moonwar() -{ - /* video extensions */ - common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::scramble_draw_background, nullptr, nullptr); - - save_item(NAME(m_moonwar_port_select)); -} - - void galaxian_state::init_ghostmun() { /* same as Pacmanbl... */ @@ -9038,7 +9079,10 @@ void galaxian_state::init_mimonkey() void namenayo_state::init_namenayo() { /* video extensions */ - common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::namenayo_draw_background, &namenayo_state::namenayo_extend_tile_info, &namenayo_state::namenayo_extend_sprite_info); + common_init(&galaxian_state::scramble_draw_bullet, nullptr, nullptr, nullptr); + m_draw_background_ptr = draw_background_delegate(&namenayo_state::namenayo_draw_background, this); + m_extend_tile_info_ptr = extend_tile_info_delegate(&namenayo_state::namenayo_extend_tile_info, this); + m_extend_sprite_info_ptr = extend_sprite_info_delegate(&namenayo_state::namenayo_extend_sprite_info, this); } /************************************* @@ -10452,14 +10496,14 @@ ROM_END ROM_START( gmgalax ) - ROM_REGION( 0x18000, "maincpu", 0 ) /* 64k for code + 32k for banked code */ - ROM_LOAD( "pcb1_pm1.bin", 0x10000, 0x1000, CRC(19338c70) SHA1(cc2665b7d534d324627d12025ee099ff415d4214) ) - ROM_LOAD( "pcb1_pm2.bin", 0x11000, 0x1000, CRC(18db074d) SHA1(a70ed18f632e947493e648e6fc057dfb7a2a3322) ) - ROM_LOAD( "pcb1_pm3.bin", 0x12000, 0x1000, CRC(abb98b1d) SHA1(bb0109d353359bb192a3e6856a857c2f842838cb) ) - ROM_LOAD( "pcb1_pm4.bin", 0x13000, 0x1000, CRC(2403c78e) SHA1(52d8c8a4efcf47871485080ab217098a019e6579) ) - ROM_LOAD( "pcb1_gx1.bin", 0x14000, 0x1000, CRC(2faa9f53) SHA1(1e7010d407601c5da1adc68bc9f4742c79d57286) ) - ROM_LOAD( "pcb1_gx2.bin", 0x15000, 0x1000, CRC(121c5f16) SHA1(cb1806fa984870133fd883969838dca85f992515) ) - ROM_LOAD( "pcb1_gx3.bin", 0x16000, 0x1000, CRC(02d81a21) SHA1(39209cfb7cf142a65e157544d93803ea542a8efb) ) + ROM_REGION( 0x8000, "maincpu", 0 ) // 32k banked code + ROM_LOAD( "pcb1_pm1.bin", 0x0000, 0x1000, CRC(19338c70) SHA1(cc2665b7d534d324627d12025ee099ff415d4214) ) + ROM_LOAD( "pcb1_pm2.bin", 0x1000, 0x1000, CRC(18db074d) SHA1(a70ed18f632e947493e648e6fc057dfb7a2a3322) ) + ROM_LOAD( "pcb1_pm3.bin", 0x2000, 0x1000, CRC(abb98b1d) SHA1(bb0109d353359bb192a3e6856a857c2f842838cb) ) + ROM_LOAD( "pcb1_pm4.bin", 0x3000, 0x1000, CRC(2403c78e) SHA1(52d8c8a4efcf47871485080ab217098a019e6579) ) + ROM_LOAD( "pcb1_gx1.bin", 0x4000, 0x1000, CRC(2faa9f53) SHA1(1e7010d407601c5da1adc68bc9f4742c79d57286) ) + ROM_LOAD( "pcb1_gx2.bin", 0x5000, 0x1000, CRC(121c5f16) SHA1(cb1806fa984870133fd883969838dca85f992515) ) + ROM_LOAD( "pcb1_gx3.bin", 0x6000, 0x1000, CRC(02d81a21) SHA1(39209cfb7cf142a65e157544d93803ea542a8efb) ) ROM_REGION( 0x4000, "gfx1", 0 ) ROM_LOAD( "pcb2gfx1.bin", 0x0000, 0x0800, CRC(7021bbc0) SHA1(52d2983d74e722fccb31eb02ca56255850c4f41c) ) @@ -10917,17 +10961,17 @@ ROM_START( tenspot ) ROM_LOAD( "u1.u1", 0x0000, 0x100, CRC(f18006f7) SHA1(f9a3541cd7f2b75816227d8befc03d2e33eeebac) ) - /* temporary - replace game_x with the game number you want to test. */ + // temporary - replace game_x with the game number you want to test. ROM_REGION( 0x4000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x2000, "gfx1", ROMREGION_ERASEFF ) ROM_REGION( 0x2000, "gfx2", ROMREGION_ERASEFF ) ROM_REGION( 0x0020, "proms", ROMREGION_ERASEFF ) - ROM_END +ROM_END ROM_START( fourplay ) - ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "fourplay.bin", 0x10000, 0x10000, CRC(b42b2c2c) SHA1(f3b6f136b39e7a6adadecb9acf906fcfe649f398) ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "fourplay.bin", 0x00000, 0x10000, CRC(b42b2c2c) SHA1(f3b6f136b39e7a6adadecb9acf906fcfe649f398) ) ROM_REGION( 0x2000, "gfx1", 0 ) ROM_LOAD( "graph1.bin", 0x0000, 0x1000, CRC(359c0c1f) SHA1(9e39baae4ab5763db236d0a49a6665d2e69cba11) ) @@ -10938,8 +10982,8 @@ ROM_START( fourplay ) ROM_END ROM_START( videight ) - ROM_REGION( 0x30000, "maincpu", 0 ) - ROM_LOAD( "videight.bin", 0x10000, 0x20000, CRC(0601db09) SHA1(0c9cd1afb0034946261219bf42b2f9b1ed5bdb17) ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "videight.bin", 0x00000, 0x20000, CRC(0601db09) SHA1(0c9cd1afb0034946261219bf42b2f9b1ed5bdb17) ) ROM_REGION( 0x10000, "gfx1", 0 ) ROM_LOAD( "v8g1.bin", 0x0000, 0x8000, CRC(af771e33) SHA1(cdc960c5f548e19da4eabdaf8b789ca8ffb6a29f) ) @@ -14959,23 +15003,23 @@ GAME( 1979, kamakazi3, galaxian, galaxian, superg, galaxian_state, init_ GAME( 1982, azurian, 0, galaxian, azurian, galaxian_state, init_azurian, ROT90, "Rait Electronics Ltd", "Azurian Attack", MACHINE_SUPPORTS_SAVE ) // Extra characters controlled via bank at $6002 -GAME( 19??, pisces, 0, pisces, pisces, galaxian_state, init_pisces, ROT90, "Subelectro", "Pisces", MACHINE_SUPPORTS_SAVE ) -GAME( 19??, piscesb, pisces, pisces, piscesb, galaxian_state, init_pisces, ROT90, "bootleg", "Pisces (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 19??, omni, pisces, pisces, piscesb, galaxian_state, init_pisces, ROT90, "bootleg", "Omni", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, uniwars, 0, pisces, superg, galaxian_state, init_pisces, ROT90, "Irem", "UniWar S", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, uniwarsa, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Karateco)", "UniWar S (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, mltiwars, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Gayton Games)", "Multi Wars (bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, gteikoku, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "Irem", "Gingateikoku no Gyakushu", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, gteikokub, uniwars, pisces, gteikokub, galaxian_state, init_pisces, ROT270, "bootleg", "Gingateikoku no Gyakushu (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, gteikokub2, uniwars, pisces, gteikokub2, galaxian_state, init_pisces, ROT90, "bootleg", "Gingateikoku no Gyakushu (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, gteikokub3, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Honly)", "Gingateikoku no Gyakushu (bootleg set 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, spacbatt, uniwars, pisces, spacbatt, galaxian_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, spacbat2, uniwars, pisces, spacbatt, galaxian_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, spacempr, uniwars, pisces, spacbatt, galaxian_state, init_pisces, ROT90, "bootleg", "Space Empire (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, skyraidr, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg", "Sky Raider (Uniwars bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, galemp, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Taito do Brasil)", "Galaxy Empire (bootleg?)", MACHINE_SUPPORTS_SAVE ) // Clearly a hack, but was it licensed? -GAME( 1980, asideral, uniwars, pisces, asideral, galaxian_state, init_pisces, ROT90, "bootleg (Electrogame S.A.)", "Ataque Sideral (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, pajaroes, uniwars, pisces, asideral, galaxian_state, init_pisces, ROT90, "bootleg (PSV S.A.)", "Pajaro del Espacio (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) // Very similar to 'asideral' +GAME( 19??, pisces, 0, pisces, pisces, pisces_state, init_pisces, ROT90, "Subelectro", "Pisces", MACHINE_SUPPORTS_SAVE ) +GAME( 19??, piscesb, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg", "Pisces (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 19??, omni, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg", "Omni", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, uniwars, 0, pisces, superg, pisces_state, init_pisces, ROT90, "Irem", "UniWar S", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, uniwarsa, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Karateco)", "UniWar S (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, mltiwars, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Gayton Games)", "Multi Wars (bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, gteikoku, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "Irem", "Gingateikoku no Gyakushu", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, gteikokub, uniwars, pisces, gteikokub, pisces_state, init_pisces, ROT270, "bootleg", "Gingateikoku no Gyakushu (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, gteikokub2, uniwars, pisces, gteikokub2, pisces_state, init_pisces, ROT90, "bootleg", "Gingateikoku no Gyakushu (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, gteikokub3, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Honly)", "Gingateikoku no Gyakushu (bootleg set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, spacbatt, uniwars, pisces, spacbatt, pisces_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, spacbat2, uniwars, pisces, spacbatt, pisces_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, spacempr, uniwars, pisces, spacbatt, pisces_state, init_pisces, ROT90, "bootleg", "Space Empire (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, skyraidr, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg", "Sky Raider (Uniwars bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, galemp, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Taito do Brasil)", "Galaxy Empire (bootleg?)", MACHINE_SUPPORTS_SAVE ) // Clearly a hack, but was it licensed? +GAME( 1980, asideral, uniwars, pisces, asideral, pisces_state, init_pisces, ROT90, "bootleg (Electrogame S.A.)", "Ataque Sideral (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, pajaroes, uniwars, pisces, asideral, pisces_state, init_pisces, ROT90, "bootleg (PSV S.A.)", "Pajaro del Espacio (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) // Very similar to 'asideral' // Artic Multi-System games - separate tile/sprite ROMs GAME( 1980, streakng, 0, pacmanbl, streakng, galaxian_state, init_galaxian, ROT90, "Shoei", "Streaking (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) @@ -14986,26 +15030,26 @@ GAME( 1981, pacmanblb, puckman, pacmanbl, pacmanblb, galaxian_state, init_ GAME( 1981, pacmanblc, puckman, pacmanbl, pacmanbl, galaxian_state, init_pacmanbl, ROT270, "bootleg (Calfesa)", "Pac-Man (Calfesa, Spanish bootleg on Galaxian hardware)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // same PROM as Moon Cresta, gives very strange colors and sprites get cut GAME( 1981, pacmanblv, puckman, pacmanbl, pacmanbl, galaxian_state, init_pacmanbl, ROT270, "bootleg (Video Dens)", "Pac-Man (Video Dens, Spanish bootleg on Galaxian hardware)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, ghostmun, puckman, pacmanbl, streakng, galaxian_state, init_ghostmun, ROT90, "bootleg (Leisure and Allied)", "Ghost Muncher", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, phoenxp2, phoenix, pisces, phoenxp2, galaxian_state, init_batman2, ROT270, "bootleg", "Phoenix Part 2", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, batman2, phoenix, pisces, batman2, galaxian_state, init_batman2, ROT270, "bootleg", "Batman Part 2", MACHINE_SUPPORTS_SAVE ) // Similar to pisces, but with different video banking characteristics -GAME( 1983, ladybugg, ladybug, pisces, ladybugg, galaxian_state, init_batman2, ROT270, "bootleg", "Lady Bug (bootleg on Galaxian hardware)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, phoenxp2, phoenix, pisces, phoenxp2, pisces_state, init_batman2, ROT270, "bootleg", "Phoenix Part 2", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, batman2, phoenix, pisces, batman2, pisces_state, init_batman2, ROT270, "bootleg", "Batman Part 2", MACHINE_SUPPORTS_SAVE ) // Similar to pisces, but with different video banking characteristics +GAME( 1983, ladybugg, ladybug, pisces, ladybugg, pisces_state, init_batman2, ROT270, "bootleg", "Lady Bug (bootleg on Galaxian hardware)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, atlantisb, atlantis, galaxian, atlantib, galaxian_state, init_galaxian, ROT270, "bootleg", "Battle of Atlantis (bootleg)", MACHINE_SUPPORTS_SAVE ) // I don't know if this should have a starfield... -GAME( 1982, tenspot, 0, tenspot, tenspot, galaxian_state, init_tenspot, ROT270, "Thomas Automatics", "Ten Spot", MACHINE_NOT_WORKING ) // Work out how menu works +GAME( 1982, tenspot, 0, tenspot, tenspot, tenspot_state, init_tenspot, ROT270, "Thomas Automatics", "Ten Spot", MACHINE_NOT_WORKING ) // Work out how menu works // Separate tile/sprite ROMs, plus INT instead of NMI -GAME( 1984, devilfsg, devilfsh, pacmanbl, devilfsg, galaxian_state, init_devilfsg, ROT270, "Vision / Artic", "Devil Fish (Galaxian hardware, bootleg?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, devilfsg, devilfsh, devilfsg, devilfsg, galaxian_state, init_galaxian, ROT270, "Vision / Artic", "Devil Fish (Galaxian hardware, bootleg?)", MACHINE_SUPPORTS_SAVE ) // Sound hardware replaced with AY8910 // We're missing the original set by Taito do Brasil, we only have the bootlegs -GAME( 1982, zigzagb, 0, zigzag, zigzag, galaxian_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 1)", MACHINE_SUPPORTS_SAVE ) // rewrite of Dig Dug (!) not a clone -GAME( 1982, zigzagb2, zigzagb, zigzag, zigzag, galaxian_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, zigzagb, 0, zigzag, zigzag, zigzagb_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 1)", MACHINE_SUPPORTS_SAVE ) // rewrite of Dig Dug (!) not a clone +GAME( 1982, zigzagb2, zigzagb, zigzag, zigzag, zigzagb_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 2)", MACHINE_SUPPORTS_SAVE ) // multi-game select via external switch GAME( 1981, gmgalax, 0, gmgalax, gmgalax, gmgalax_state, init_gmgalax, ROT90, "bootleg", "Ghostmuncher Galaxian (bootleg)", MACHINE_SUPPORTS_SAVE ) // Multigames -GAME( 2002, fourplay, 0, fourplay, galaxian, galaxian_state, init_fourplay, ROT90, "Macro", "Four Play", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, videight, 0, videight, warofbug, galaxian_state, init_videight, ROT90, "Macro", "Video Eight", MACHINE_SUPPORTS_SAVE ) +GAME( 2002, fourplay, 0, fourplay, galaxian, fourplay_state, init_fourplay, ROT90, "Macro", "Four Play", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, videight, 0, videight, warofbug, videight_state, init_videight, ROT90, "Macro", "Video Eight", MACHINE_SUPPORTS_SAVE ) /************************************* @@ -15070,13 +15114,13 @@ GAME( 1981, ckongmc2, ckong, ckongmc, ckongmc2, galaxian_state, init_ GAME( 1981, ckonggx, ckong, ckongg, ckonggx, galaxian_state, init_ckonggx, ROT90, "bootleg", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) GAME( 1982, ckongcv, ckong, ckongg, ckonggx, galaxian_state, init_ckonggx, ROT90, "bootleg", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 2)", MACHINE_NOT_WORKING ) GAME( 1982, ckongis, ckong, ckongg, ckonggx, galaxian_state, init_ckonggx, ROT90, "bootleg", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 3)", MACHINE_NOT_WORKING ) -GAME( 1982, bagmanmc, bagman, bagmanmc, bagmanmc, galaxian_state, init_bagmanmc, ROT90, "bootleg", "Bagman (bootleg on Moon Cresta hardware, set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) -GAME( 1984, bagmanm2, bagman, bagmanmc, bagmanmc, galaxian_state, init_bagmanmc, ROT90, "bootleg (GIB)", "Bagman (bootleg on Moon Cresta hardware, set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bagmanmc, bagman, bagmanmc, bagmanmc, bagmanmc_state, init_bagmanmc, ROT90, "bootleg", "Bagman (bootleg on Moon Cresta hardware, set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1984, bagmanm2, bagman, bagmanmc, bagmanmc, bagmanmc_state, init_bagmanmc, ROT90, "bootleg (GIB)", "Bagman (bootleg on Moon Cresta hardware, set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // Other games on basic mooncrst hardware -GAME( 1982, porter, dockman, porter, porter, galaxian_state, init_pisces, ROT90, "bootleg", "Port Man (bootleg on Moon Cresta hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL ) -GAME( 1982, portera, dockman, porter, porter, galaxian_state, init_pisces, ROT90, "bootleg", "El Estivador (Spanish bootleg of Port Man on Galaxian hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL ) -GAME( 1982, skybase, 0, skybase, skybase, galaxian_state, init_pisces, ROT90, "Omori Electric Co., Ltd.", "Sky Base", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, porter, dockman, porter, porter, pisces_state, init_pisces, ROT90, "bootleg", "Port Man (bootleg on Moon Cresta hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL ) +GAME( 1982, portera, dockman, porter, porter, pisces_state, init_pisces, ROT90, "bootleg", "El Estivador (Spanish bootleg of Port Man on Galaxian hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL ) +GAME( 1982, skybase, 0, skybase, skybase, pisces_state, init_pisces, ROT90, "Omori Electric Co., Ltd.", "Sky Base", MACHINE_SUPPORTS_SAVE ) GAME( 198?, kong, 0, kong, kong, galaxian_state, init_kong, ROT90, "Taito do Brasil", "Kong (Donkey Kong conversion on Galaxian hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_WRONG_COLORS ) // rewrite of Donkey Kong (!) not a clone // Larger romspace, 2*AY8910, based on Super Star Crest board? @@ -15099,15 +15143,15 @@ GAME( 1983, dingo, 0, checkmaj, dingo, galaxian_state, init_ GAME( 1983, dingoe, dingo, checkman, dingo, galaxian_state, init_dingoe, ROT90, "Ashby Computers and Graphics Ltd.", "Dingo (encrypted)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Crazy Climber sound plus AY8910 instead of galaxian sound, plus INT instead of NMI -GAME( 1981, mshuttle, 0, mshuttle, mshuttle, galaxian_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, mshuttle2, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, mshuttlea, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US, version A)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, mshuttlej, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, mshuttlej2, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, mshuttle, 0, mshuttle, mshuttle, mshuttle_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, mshuttle2, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, mshuttlea, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US, version A)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, mshuttlej, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, mshuttlej2, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 2)", MACHINE_SUPPORTS_SAVE ) // 2nd CPU driving DAC for sound -GAME( 1980, kingball, 0, kingball, kingball, galaxian_state, init_kingball, ROT90, "Namco", "King & Balloon (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, kingballj, kingball, kingball, kingball, galaxian_state, init_kingball, ROT90, "Namco", "King & Balloon (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, kingball, 0, kingball, kingball, kingball_state, init_galaxian, ROT90, "Namco", "King & Balloon (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, kingballj, kingball, kingball, kingball, kingball_state, init_galaxian, ROT90, "Namco", "King & Balloon (Japan)", MACHINE_SUPPORTS_SAVE ) @@ -15146,7 +15190,7 @@ GAME( 1982, amidaru, amidar, turtles, amidaru, galaxian_state, init_ GAME( 1982, amidaro, amidar, turtles, amidaro, galaxian_state, init_turtles, ROT90, "Konami (Olympia license)", "Amidar (Olympia)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, amidarb, amidar, turtles, amidaru, galaxian_state, init_turtles, ROT90, "bootleg", "Amidar (bootleg)", MACHINE_SUPPORTS_SAVE ) // Similar to Amigo bootleg GAME( 1982, amigo, amidar, turtles, amidaru, galaxian_state, init_turtles, ROT90, "bootleg", "Amigo (bootleg of Amidar, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, amigo2, amidar, amigo2, amidaru, galaxian_state, init_amigo2, ROT90, "bootleg", "Amigo (bootleg of Amidar, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // sound timer might be different? +GAME( 1982, amigo2, amidar, amigo2, amidaru, galaxian_state, init_turtles, ROT90, "bootleg", "Amigo (bootleg of Amidar, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // sound timer might be different? GAME( 1982, amidars, amidar, scramble, amidars, galaxian_state, init_scramble, ROT90, "Konami", "Amidar (Scramble hardware)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, mandinga, amidar, scramble, amidars, galaxian_state, init_mandinga, ROT90, "bootleg (Artemi)", "Mandinga (Artemi bootleg of Amidar)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // color PROM needs bitswap<8> on addressing, reference: http://www.youtube.com/watch?v=6uGK4AZxV2U GAME( 1982, mandingaeg, amidar, scramble, amidars, galaxian_state, init_mandingaeg, ROT90, "bootleg (Electrogame S.A.)", "Mandinga (Electrogame S.A. bootleg of Amidar)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) @@ -15192,16 +15236,16 @@ GAME( 1981, ckongs, ckong, ckongs, ckongs, galaxian_state, init_ GAME( 1981, jungsub, jungler, jungsub, jungsub, galaxian_state, init_jungsub, ROT90, "bootleg (Subelectro)", "Jungler (Subelectro, bootleg on Scramble hardware)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // mostly works, bad GFX ROM causes lots of glitches // Scorpion hardware; based on Scramble but with a 3rd AY-8910 and a speech chip -GAME( 1982, scorpion, 0, scorpion, scorpion, galaxian_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE) -GAME( 1982, scorpiona, scorpion, scorpion, scorpion, galaxian_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE) -GAME( 1982, scorpionb, scorpion, scorpion, scorpion, galaxian_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE) -GAME( 19??, scorpionmc, scorpion, scorpnmc, scorpnmc, galaxian_state, init_batman2, ROT90, "bootleg? (Dorneer)", "Scorpion (Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE ) -GAME( 19??, aracnis, scorpion, scorpnmc, aracnis, galaxian_state, init_batman2, ROT90, "bootleg", "Aracnis (bootleg of Scorpion on Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1982, scorpion, 0, scorpion, scorpion, zac_scorpion_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE) +GAME( 1982, scorpiona, scorpion, scorpion, scorpion, zac_scorpion_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE) +GAME( 1982, scorpionb, scorpion, scorpion, scorpion, zac_scorpion_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE) +GAME( 19??, scorpionmc, scorpion, scorpnmc, scorpnmc, galaxian_state, init_batman2, ROT90, "bootleg? (Dorneer)", "Scorpion (Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE ) +GAME( 19??, aracnis, scorpion, scorpnmc, aracnis, galaxian_state, init_batman2, ROT90, "bootleg", "Aracnis (bootleg of Scorpion on Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // SF-X hardware; based on Scramble with extra Z80 and 8255 driving a DAC-based sample player -GAME( 1983, sfx, 0, sfx, sfx, galaxian_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu license)", "SF-X", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, skelagon, sfx, sfx, sfx, galaxian_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu USA license)", "Skelagon", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE) -GAME( 1982, monsterz, 0, monsterz, sfx, galaxian_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System", "Monster Zero", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) +GAME( 1983, sfx, 0, sfx, sfx, taiyo_sfx_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu license)", "SF-X", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, skelagon, sfx, sfx, sfx, taiyo_sfx_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu USA license)", "Skelagon", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE) +GAME( 1982, monsterz, 0, monsterz, sfx, taiyo_sfx_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System", "Monster Zero", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) /* @@ -15220,8 +15264,8 @@ GAME( 1981, scobrag, scobra, scobra, scobras, galaxian_state, init_ GAME( 1981, scobraggi, scobra, scobra, scobras, galaxian_state, init_scobra, ROT90, "bootleg (Cocamatic)", "Super Cobra (bootleg, set 3)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // uses the scramble color PROM GAME( 1981, suprheli, scobra, scobra, scobras, galaxian_state, init_scobra, ROT90, "bootleg", "Super Heli (Super Cobra bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, moonwar, 0, moonwar, moonwar, galaxian_state, init_moonwar, ROT90, "Stern Electronics", "Moonwar", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, moonwara, moonwar, moonwar, moonwara, galaxian_state, init_moonwar, ROT90, "Stern Electronics", "Moonwar (older)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, moonwar, 0, moonwar, moonwar, moonwar_state, init_scobra, ROT90, "Stern Electronics", "Moonwar", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, moonwara, moonwar, moonwar, moonwara, moonwar_state, init_scobra, ROT90, "Stern Electronics", "Moonwar (older)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, armorcar, 0, scobra, armorcar, galaxian_state, init_scobra, ROT90, "Stern Electronics", "Armored Car (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, armorcar2, armorcar, scobra, armorcar2, galaxian_state, init_scobra, ROT90, "Stern Electronics", "Armored Car (set 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index f2ef5aa4ac5..d148d50e8b4 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -12,15 +12,18 @@ #include "machine/gen_latch.h" #include "machine/i8255.h" +#include "machine/netlist.h" #include "machine/timer.h" + #include "sound/ay8910.h" #include "sound/dac.h" #include "sound/digitalk.h" -#include "machine/netlist.h" + #include "emupal.h" #include "screen.h" #include "tilemap.h" + namespace { /* master clocks */ @@ -64,11 +67,8 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_audiocpu(*this, "audiocpu") - , m_audio2(*this, "audio2") - , m_dac(*this, "dac") , m_ay8910(*this, "8910.%u", 0) , m_ay8910_cclimber(*this, "cclimber_audio:aysnd") - , m_digitalker(*this, "digitalker") , m_ppi8255(*this, "ppi8255_%u", 0) , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") @@ -77,22 +77,22 @@ public: , m_netlist(*this, "konami") , m_filter_ctl(*this, "konami:ctl%u", 0) , m_ckong_coinage(*this, "COINAGE") - , m_fake_select(*this, "FAKE_SELECT") - , m_tenspot_game_dsw(*this, {"IN2_GAME0", "IN2_GAME1", "IN2_GAME2", "IN2_GAME3", "IN2_GAME4", "IN2_GAME5", "IN2_GAME6", "IN2_GAME7", "IN2_GAME8", "IN2_GAME9"}) , m_spriteram(*this, "spriteram") , m_videoram(*this, "videoram") - , m_exattrram(*this, "extattrram") , m_decrypted_opcodes(*this, "decrypted_opcodes") , m_lamps(*this, "lamp%u", 0U) - , m_bank1(*this, "bank1") - , m_leftspriteclip(16) { } /* video extension callbacks */ - typedef void (galaxian_state::*galaxian_extend_tile_info_func)(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); - typedef void (galaxian_state::*galaxian_extend_sprite_info_func)(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); - typedef void (galaxian_state::*galaxian_draw_bullet_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y); - typedef void (galaxian_state::*galaxian_draw_background_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect); + typedef void (galaxian_state::*extend_tile_info_func)(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); + typedef void (galaxian_state::*extend_sprite_info_func)(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); + typedef void (galaxian_state::*draw_bullet_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y); + typedef void (galaxian_state::*draw_background_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect); + + typedef delegate extend_tile_info_delegate; + typedef delegate extend_sprite_info_delegate; + typedef delegate draw_bullet_delegate; + typedef delegate draw_background_delegate; void galaxian_videoram_w(offs_t offset, uint8_t data); void galaxian_objram_w(offs_t offset, uint8_t data); @@ -106,9 +106,6 @@ public: void scramble_background_blue_w(uint8_t data); void galaxian_gfxbank_w(offs_t offset, uint8_t data); template DECLARE_READ_LINE_MEMBER(azurian_port_r); - DECLARE_READ_LINE_MEMBER(kingball_muxbit_r); - DECLARE_READ_LINE_MEMBER(kingball_noise_r); - DECLARE_CUSTOM_INPUT_MEMBER(moonwar_dial_r); void irq_enable_w(uint8_t data); void start_lamp_w(offs_t offset, uint8_t data); void coin_lock_w(uint8_t data); @@ -123,9 +120,6 @@ public: uint8_t theend_protection_r(); template DECLARE_READ_LINE_MEMBER(theend_protection_alt_r); void explorer_sound_control_w(uint8_t data); - uint8_t sfx_sample_io_r(offs_t offset); - void sfx_sample_io_w(offs_t offset, uint8_t data); - uint8_t monsterz_protection_r(); uint8_t frogger_ppi8255_r(offs_t offset); void frogger_ppi8255_w(offs_t offset, uint8_t data); uint8_t frogger_ay8910_r(offs_t offset); @@ -138,53 +132,25 @@ public: uint8_t turtles_ppi8255_1_r(offs_t offset); void turtles_ppi8255_0_w(offs_t offset, uint8_t data); void turtles_ppi8255_1_w(offs_t offset, uint8_t data); - uint8_t scorpion_ay8910_r(offs_t offset); - void scorpion_ay8910_w(offs_t offset, uint8_t data); - uint8_t scorpion_digitalker_intr_r(); - void zigzag_bankswap_w(uint8_t data); - void zigzag_ay8910_w(offs_t offset, uint8_t data); - void kingball_speech_dip_w(uint8_t data); - void kingball_sound1_w(uint8_t data); - void kingball_sound2_w(uint8_t data); - void mshuttle_ay8910_cs_w(uint8_t data); - void mshuttle_ay8910_control_w(uint8_t data); - void mshuttle_ay8910_data_w(uint8_t data); - uint8_t mshuttle_ay8910_data_r(); uint8_t jumpbug_protection_r(offs_t offset); void checkman_sound_command_w(uint8_t data); uint8_t checkmaj_protection_r(); uint8_t dingo_3000_r(); uint8_t dingo_3035_r(); uint8_t dingoe_3001_r(); - void tenspot_unk_6000_w(uint8_t data); - void tenspot_unk_8000_w(uint8_t data); - void tenspot_unk_e000_w(uint8_t data); uint8_t froggeram_ppi8255_r(offs_t offset); void froggeram_ppi8255_w(offs_t offset, uint8_t data); void artic_gfxbank_w(uint8_t data); - uint8_t tenspot_dsw_read(); void konami_sound_control_w(uint8_t data); uint8_t konami_sound_timer_r(); void konami_portc_0_w(uint8_t data); void konami_portc_1_w(uint8_t data); void theend_coin_counter_w(uint8_t data); uint8_t explorer_sound_latch_r(); - void sfx_sample_control_w(uint8_t data); - void monsterz_porta_1_w(uint8_t data); - void monsterz_portb_1_w(uint8_t data); - void monsterz_portc_1_w(uint8_t data); uint8_t frogger_sound_timer_r(); - uint8_t scorpion_protection_r(); - void scorpion_protection_w(uint8_t data); - void scorpion_digitalker_control_w(uint8_t data); - void kingball_dac_w(uint8_t data); - void moonwar_port_select_w(uint8_t data); - void init_fourplay(); - void init_videight(); void init_galaxian(); void init_nolock(); void init_azurian(); - void init_pisces(); void init_batman2(); void init_highroll(); void init_frogg(); @@ -193,29 +159,19 @@ public: void init_mooncrgx(); void init_moonqsr(); void init_pacmanbl(); - void init_tenspot(); - void init_devilfsg(); - void init_bagmanmc(); - void init_zigzag(); void init_jumpbug(); void init_checkman(); void init_checkmaj(); void init_dingo(); void init_dingoe(); void init_kong(); - void init_mshuttle(); - void init_mshuttlj(); void init_fantastc(); void init_timefgtr(); - void init_kingball(); void init_theend(); void init_scramble(); - void init_sidam(); void init_explorer(); - void init_amigo2(); void init_mandinga(); void init_mandingaeg(); - void init_sfx(); void init_atlantis(); void init_scobra(); void init_scobrae(); @@ -225,14 +181,12 @@ public: void init_froggers(); void init_quaak(); void init_turtles(); - void init_scorpion(); void init_ckongs(); void init_ckonggx(); void init_anteater(); void init_anteateruk(); void init_superbon(); void init_calipso(); - void init_moonwar(); void init_ghostmun(); void init_froggrs(); void init_warofbugg(); @@ -243,12 +197,9 @@ public: TILE_GET_INFO_MEMBER(bg_get_tile_info); void galaxian_palette(palette_device &palette); - void moonwar_palette(palette_device &palette); void eagle_palette(palette_device &palette); - void tenspot_set_game_bank(int bank, int from_game); uint32_t screen_update_galaxian(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_interrupt_w); - DECLARE_INPUT_CHANGED_MEMBER(tenspot_fake); TIMER_DEVICE_CALLBACK_MEMBER(checkmaj_irq0_gen); TIMER_DEVICE_CALLBACK_MEMBER(scramble_stars_blink_timer); TIMER_DEVICE_CALLBACK_MEMBER(timefgtr_scanline); @@ -266,22 +217,18 @@ public: void anteater_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); void jumpbug_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); void turtles_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); - void sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); void frogger_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); - void namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); inline void galaxian_draw_pixel(bitmap_rgb32 &bitmap, const rectangle &cliprect, int y, int x, rgb_t color); void galaxian_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y); void mshuttle_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y); void scramble_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y); void theend_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y); + void empty_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); + void empty_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void upper_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); void upper_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void frogger_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); void frogger_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); - void gmgalax_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); - void gmgalax_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); - void pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); - void pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void batman2_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); void mooncrst_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); void mooncrst_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); @@ -294,10 +241,7 @@ public: void jumpbug_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void mimonkey_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); void mimonkey_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); - void namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); - void namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void guttangt_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); - void monsterz_set_latch(); void decode_mooncrst(int length, uint8_t *dest); void decode_checkman(); void decode_dingoe(); @@ -308,9 +252,11 @@ public: void decode_losttomb_gfx(); void decode_superbon(); void decode_victoryc(); - void mshuttle_decode(const uint8_t convtable[8][16]); - void common_init(galaxian_draw_bullet_func draw_bullet,galaxian_draw_background_func draw_background, - galaxian_extend_tile_info_func extend_tile_info,galaxian_extend_sprite_info_func extend_sprite_info); + void common_init( + draw_bullet_func draw_bullet, + draw_background_func draw_background, + extend_tile_info_func extend_tile_info, + extend_sprite_info_func extend_sprite_info); void galaxian_base(machine_config &config); void sidam_bootleg_base(machine_config &config); void konami_base(machine_config &config); @@ -330,18 +276,13 @@ public: void pacmanbl(machine_config &config); void quaak(machine_config &config); void galaxian(machine_config &config); - void pisces(machine_config &config); void highroll(machine_config &config); - void tenspot(machine_config &config); + void devilfsg(machine_config &config); void froggers(machine_config &config); void froggervd(machine_config &config); - void mshuttle(machine_config &config); void anteateruk(machine_config &config); - void monsterz(machine_config &config); - void kingball(machine_config &config); void anteaterg(machine_config &config); void anteater(machine_config &config); - void moonwar(machine_config &config); void turpins(machine_config &config); void explorer(machine_config &config); void scramble(machine_config &config); @@ -350,30 +291,22 @@ public: void froggeram(machine_config &config); void spactrai(machine_config &config); void takeoff(machine_config &config); - void sfx(machine_config &config); void mooncrst(machine_config &config); void eagle(machine_config &config); - void scorpion(machine_config &config); void ckongs(machine_config &config); void frogf(machine_config &config); void amigo2(machine_config &config); - void zigzag(machine_config &config); void checkman(machine_config &config); void jungsub(machine_config &config); void victoryc(machine_config &config); void frogg(machine_config &config); void mandingarf(machine_config &config); void thepitm(machine_config &config); - void porter(machine_config &config); - void skybase(machine_config &config); void kong(machine_config &config); void bongo(machine_config &config); void scorpnmc(machine_config &config); void ckongg(machine_config &config); void ckongmc(machine_config &config); - void bagmanmc(machine_config &config); - void fourplay(machine_config &config); - void videight(machine_config &config); void astroamb(machine_config &config); void mimonkey(machine_config &config); void mimonscr(machine_config &config); @@ -382,13 +315,19 @@ public: template DECLARE_READ_LINE_MEMBER(ckongs_coinage_r); protected: + // machine configuration helpers + void set_irq_line(int line) { m_irq_line = line; } + void set_bullets_base(int base) { m_bullets_base = base; } + void set_num_spritegens(int num) { m_numspritegens = num; } + void set_x_scale(uint8_t scale) { m_x_scale = scale; } + void set_h0_start(uint8_t start) { m_h0_start = start; } + void set_left_sprite_clip(uint8_t clip) { m_leftspriteclip = clip; } + void amigo2_map(address_map &map); void anteaterg_map(address_map &map); void anteatergg_map(address_map &map); void anteateruk_map(address_map &map); void astroamb_map(address_map &map); - void bagmanmc_map(address_map &map); - void bagmanmc_io_map(address_map &map); void bongo_map(address_map &map); void bongo_io_map(address_map &map); void checkmaj_sound_map(address_map &map); @@ -415,58 +354,42 @@ protected: void jumpbug_map(address_map &map); void jungsub_map(address_map &map); void jungsub_io_map(address_map &map); - void kingball_sound_map(address_map &map); - void kingball_sound_portmap(address_map &map); void konami_sound_map(address_map &map); void konami_sound_portmap(address_map &map); void kong_map(address_map &map); void mandingarf_map(address_map &map); void mimonkey_map(address_map &map); void mimonscr_map(address_map &map); - void monsterz_map(address_map &map); - void monsterz_sound_map(address_map &map); void mooncrst_map(address_map &map); void mooncrst_map_base(address_map &map); void mooncrst_map_discrete(address_map &map); void moonqsr_decrypted_opcodes_map(address_map &map); - void mshuttle_decrypted_opcodes_map(address_map &map); - void mshuttle_map(address_map &map); - void mshuttle_portmap(address_map &map); void ozon1_map(address_map &map); void ozon1_io_map(address_map &map); - void pisces_map(address_map &map); - void porter_map(address_map &map); void scobra_map(address_map &map); - void scorpion_map(address_map &map); - void scorpion_sound_map(address_map &map); - void scorpion_sound_portmap(address_map &map); void scorpnmc_map(address_map &map); - void sfx_map(address_map &map); - void sfx_sample_map(address_map &map); - void sfx_sample_portmap(address_map &map); - void skybase_map(address_map &map); void spactrai_map(address_map &map); void takeoff_sound_map(address_map &map); void takeoff_sound_portmap(address_map &map); - void tenspot_select_map(address_map &map); void theend_map(address_map &map); void thepitm_map(address_map &map); void turpins_map(address_map &map); void turpins_sound_map(address_map &map); void turtles_map(address_map &map); void victoryc_map(address_map &map); - void zigzag_map(address_map &map); - virtual void machine_start() override { m_lamps.resolve(); } + virtual void machine_start() override + { + m_lamps.resolve(); + + m_irq_enabled = 0; + } virtual void video_start() override; required_device m_maincpu; optional_device m_audiocpu; - optional_device m_audio2; - optional_device m_dac; optional_device_array m_ay8910; optional_device m_ay8910_cclimber; - optional_device m_digitalker; optional_device_array m_ppi8255; required_device m_gfxdecode; required_device m_screen; @@ -475,43 +398,29 @@ protected: optional_device m_netlist; optional_device_array m_filter_ctl; optional_ioport m_ckong_coinage; - optional_ioport m_fake_select; - optional_ioport_array<10> m_tenspot_game_dsw; required_shared_ptr m_spriteram; required_shared_ptr m_videoram; - optional_shared_ptr m_exattrram; // belongs in namenayo_state but the callbacks are problematic as things are set up optional_shared_ptr m_decrypted_opcodes; output_finder<2> m_lamps; - memory_bank_creator m_bank1; - - int m_bullets_base; - int m_sprites_base; - int m_numspritegens; - int m_counter_74ls161[2]; - int m_direction[2]; - uint8_t m_zigzag_ay8910_latch; - uint8_t m_kingball_speech_dip; - uint8_t m_kingball_sound; - uint8_t m_mshuttle_ay8910_cs; + int m_bullets_base = 0x60; + int m_sprites_base = 0x40; + int m_numspritegens = 1; uint16_t m_protection_state; uint8_t m_protection_result; uint8_t m_konami_sound_control; - uint8_t m_sfx_sample_control; - uint8_t m_moonwar_port_select; uint8_t m_irq_enabled; - int m_irq_line; - int m_tenspot_current_game; - uint8_t m_frogger_adjust; - uint8_t m_x_scale; - uint8_t m_h0_start; - uint8_t m_sfx_tilemap; - - galaxian_extend_tile_info_func m_extend_tile_info_ptr; - galaxian_extend_sprite_info_func m_extend_sprite_info_ptr; - galaxian_draw_bullet_func m_draw_bullet_ptr; - galaxian_draw_background_func m_draw_background_ptr; + int m_irq_line = INPUT_LINE_NMI; + uint8_t m_frogger_adjust = false; + uint8_t m_x_scale = GALAXIAN_XSCALE; + uint8_t m_h0_start = GALAXIAN_H0START; + uint8_t m_sfx_tilemap = false; + + extend_tile_info_delegate m_extend_tile_info_ptr; + extend_sprite_info_delegate m_extend_sprite_info_ptr; + draw_bullet_delegate m_draw_bullet_ptr; + draw_background_delegate m_draw_background_ptr; tilemap_t *m_bg_tilemap; uint8_t m_flipscreen_x; @@ -528,24 +437,40 @@ protected: uint8_t m_stars_blink_state; rgb_t m_bullet_color[8]; uint8_t m_gfxbank[5]; - uint8_t m_leftspriteclip; + uint8_t m_leftspriteclip = 16; +}; - void fourplay_rombank_w(offs_t offset, uint8_t data); - void videight_rombank_w(offs_t offset, uint8_t data); - void videight_gfxbank_w(offs_t offset, uint8_t data); - void videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); - void videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); - void fourplay_map(address_map &map); - void videight_map(address_map &map); + +class bagmanmc_state : public galaxian_state +{ +public: + bagmanmc_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + { + } + + void bagmanmc(machine_config &config); + void init_bagmanmc(); + +protected: + void bagmanmc_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); + void bagmanmc_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); + +private: + void bagmanmc_map(address_map &map); + void bagmanmc_io_map(address_map &map); }; -class gmgalax_state : public galaxian_state + +class gmgalax_state : public bagmanmc_state { public: gmgalax_state(const machine_config &mconfig, device_type type, const char *tag) - : galaxian_state(mconfig, type, tag) + : bagmanmc_state(mconfig, type, tag) , m_glin(*this, "GLIN%u", 0U) , m_gmin(*this, "GMIN%u", 0U) + , m_gamesel(*this, "GAMESEL") + , m_rombank(*this, "rombank") { } void gmgalax(machine_config &config); @@ -555,30 +480,243 @@ public: void init_gmgalax(); +protected: + virtual void machine_start() override; + private: - uint8_t m_selected_game; + void gmgalax_map(address_map &map); + required_ioport_array<3> m_glin; required_ioport_array<3> m_gmin; + required_ioport m_gamesel; + required_memory_bank m_rombank; + + uint8_t m_selected_game; +}; + + +class pisces_state : public galaxian_state +{ +public: + pisces_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + { + } + + void pisces(machine_config &config); + void porter(machine_config &config); + void skybase(machine_config &config); + + void init_pisces(); + +protected: + void pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); + void pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); + +private: + void pisces_map(address_map &map); + void skybase_map(address_map &map); + void porter_map(address_map &map); +}; + + +class fourplay_state : public pisces_state +{ +public: + fourplay_state(const machine_config &mconfig, device_type type, const char *tag) + : pisces_state(mconfig, type, tag) + , m_rombank(*this, "rombank") + { + } + + void fourplay(machine_config &config); + void init_fourplay(); + +private: + void fourplay_rombank_w(offs_t offset, uint8_t data); + void fourplay_map(address_map &map); + + required_memory_bank m_rombank; +}; + + +class mshuttle_state : public galaxian_state +{ +public: + mshuttle_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + { + } + + void mshuttle(machine_config &config); + + void init_mshuttle(); + void init_mshuttlj(); + +protected: + virtual void machine_start() override; + +private: + void ay8910_cs_w(uint8_t data); + void ay8910_control_w(uint8_t data); + void ay8910_data_w(uint8_t data); + uint8_t ay8910_data_r(); + + void mshuttle_map(address_map &map); + void mshuttle_decrypted_opcodes_map(address_map &map); + void mshuttle_portmap(address_map &map); + + void mshuttle_decode(const uint8_t convtable[8][16]); + + uint8_t m_ay8910_cs; +}; + + +class kingball_state : public galaxian_state +{ +public: + kingball_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_dac(*this, "dac") + , m_mux_port(*this, "FAKE") + { + } + + DECLARE_READ_LINE_MEMBER(muxbit_r); + DECLARE_READ_LINE_MEMBER(noise_r); + + void kingball(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void speech_dip_w(uint8_t data); + void sound1_w(uint8_t data); + void sound2_w(uint8_t data); + void dac_w(uint8_t data); + + void kingball_map(address_map &map); + void kingball_sound_map(address_map &map); + void kingball_sound_portmap(address_map &map); + + required_device m_dac; + required_ioport m_mux_port; + + uint8_t m_speech_dip; + uint8_t m_sound; }; + class namenayo_state : public galaxian_state { public: namenayo_state(const machine_config &mconfig, device_type type, const char *tag) : galaxian_state(mconfig, type, tag) + , m_exattrram(*this, "extattrram") { - m_leftspriteclip = 0; } void namenayo(machine_config &config); void init_namenayo(); private: + void namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); + void namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); + void namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); void namenayo_map(address_map &map); void namenayo_extattr_w(offs_t offset, uint8_t data); void namenayo_unk_d800_w(uint8_t data); + + required_shared_ptr m_exattrram; }; + +class tenspot_state : public galaxian_state +{ +public: + tenspot_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_game_dsw(*this, "IN2_GAME%u", 0U) + , m_mainbank(*this, "mainbank") + { + } + + DECLARE_INPUT_CHANGED_MEMBER(tenspot_fake); + + void tenspot(machine_config &config); + + void init_tenspot(); + +protected: + virtual void machine_start() override; + +private: + void unk_6000_w(uint8_t data); + void unk_8000_w(uint8_t data); + void unk_e000_w(uint8_t data); + uint8_t dsw_read(); + + void set_game_bank(int bank, bool invalidate_gfx); + + void tenspot_map(address_map &map); + void tenspot_select_map(address_map &map); + + required_ioport_array<10> m_game_dsw; + required_memory_bank m_mainbank; + + uint8_t m_current_game; +}; + + +class zigzagb_state : public galaxian_state +{ +public: + zigzagb_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_rombanks(*this, "bank%u", 1U) + { + } + + void zigzag(machine_config &config); + void init_zigzag(); + +protected: + virtual void machine_start() override; + +private: + void bankswap_w(uint8_t data); + void ay8910_w(offs_t offset, uint8_t data); + void zigzag_map(address_map &map); + + required_memory_bank_array<2> m_rombanks; + uint8_t m_ay8910_latch; +}; + + +class videight_state : public galaxian_state +{ +public: + videight_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_rombank(*this, "rombank") + { + } + + void videight(machine_config &config); + void init_videight(); + +private: + void videight_rombank_w(offs_t offset, uint8_t data); + void videight_gfxbank_w(offs_t offset, uint8_t data); + void videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y); + void videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color); + void videight_map(address_map &map); + + required_memory_bank m_rombank; +}; + + class guttangt_state : public galaxian_state { public: @@ -599,4 +737,103 @@ private: }; +class zac_scorpion_state : public galaxian_state +{ +public: + zac_scorpion_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_digitalker(*this, "digitalker") + { + } + + void scorpion(machine_config &config); + void init_scorpion(); + +private: + uint8_t ay8910_r(offs_t offset); + void ay8910_w(offs_t offset, uint8_t data); + uint8_t digitalker_intr_r(); + void digitalker_control_w(uint8_t data); + uint8_t protection_r(); + void protection_w(uint8_t data); + + void scorpion_map(address_map &map); + void scorpion_sound_map(address_map &map); + void scorpion_sound_portmap(address_map &map); + + required_device m_digitalker; +}; + + +class taiyo_sfx_state : public galaxian_state +{ +public: + taiyo_sfx_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_audio2(*this, "audio2") + , m_dac(*this, "dac") + { + } + + void sfx(machine_config &config); + void monsterz(machine_config &config); + + void init_sfx(); + +protected: + virtual void machine_start() override; + +private: + uint8_t sample_io_r(offs_t offset); + void sample_io_w(offs_t offset, uint8_t data); + void sample_control_w(uint8_t data); + + uint8_t monsterz_protection_r(); + void monsterz_porta_1_w(uint8_t data); + void monsterz_portb_1_w(uint8_t data); + void monsterz_portc_1_w(uint8_t data); + void monsterz_set_latch(); + + void sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void sfx_map(address_map &map); + void sfx_sample_map(address_map &map); + void sfx_sample_portmap(address_map &map); + void monsterz_map(address_map &map); + void monsterz_sound_map(address_map &map); + + required_device m_audio2; + required_device m_dac; + + uint8_t m_sample_control; +}; + + +class moonwar_state : public galaxian_state +{ +public: + moonwar_state(const machine_config &mconfig, device_type type, const char *tag) + : galaxian_state(mconfig, type, tag) + , m_dials(*this, "P%u_DIAL", 1U) + { + } + + DECLARE_CUSTOM_INPUT_MEMBER(dial_r); + + void moonwar(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void port_select_w(uint8_t data); + void moonwar_palette(palette_device &palette); + + required_ioport_array<2> m_dials; + + uint8_t m_port_select; + uint8_t m_direction[2]; + uint8_t m_counter_74ls161[2]; +}; + #endif // MAME_INCLUDES_GALAXIAN_H diff --git a/src/mame/video/galaxian.cpp b/src/mame/video/galaxian.cpp index 678bf670cbc..6f32d43c8b0 100644 --- a/src/mame/video/galaxian.cpp +++ b/src/mame/video/galaxian.cpp @@ -358,7 +358,7 @@ void galaxian_state::galaxian_palette(palette_device &palette) m_bullet_color[7] = rgb_t(0xff,0xff,0x00); } -void galaxian_state::moonwar_palette(palette_device &palette) +void moonwar_state::moonwar_palette(palette_device &palette) { galaxian_palette(palette); @@ -448,7 +448,7 @@ void galaxian_state::state_save_register() uint32_t galaxian_state::screen_update_galaxian(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { /* draw the background layer (including stars) */ - (this->*m_draw_background_ptr)(bitmap, cliprect); + m_draw_background_ptr(bitmap, cliprect); /* draw the tilemap characters over top */ m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); @@ -458,7 +458,7 @@ uint32_t galaxian_state::screen_update_galaxian(screen_device &screen, bitmap_rg sprites_draw(bitmap, cliprect, &m_spriteram[m_sprites_base + i * 0x20]); /* if we have bullets to draw, render them following */ - if (m_draw_bullet_ptr != nullptr) + if (!m_draw_bullet_ptr.isnull()) bullets_draw(bitmap, cliprect, &m_spriteram[m_bullets_base]); return 0; @@ -482,8 +482,7 @@ TILE_GET_INFO_MEMBER(galaxian_state::bg_get_tile_info) uint8_t attrib = m_spriteram[x*2+1]; uint8_t color = attrib & 7; - if (m_extend_tile_info_ptr != nullptr) - (this->*m_extend_tile_info_ptr)(&code, &color, attrib, x, y); + m_extend_tile_info_ptr(&code, &color, attrib, x, y); tileinfo.set(0, code, color, 0); } @@ -573,8 +572,7 @@ void galaxian_state::sprites_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec uint8_t sx = base[3] + hoffset; /* extend the sprite information */ - if (m_extend_sprite_info_ptr != nullptr) - (this->*m_extend_sprite_info_ptr)(base, &sx, &sy, &flipx, &flipy, &code, &color); + m_extend_sprite_info_ptr(base, &sx, &sy, &flipx, &flipy, &code, &color); /* apply flipscreen in X direction */ if (m_flipscreen_x) @@ -591,11 +589,10 @@ void galaxian_state::sprites_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec } /* draw */ - - m_gfxdecode->gfx(1)->transpen(bitmap,clip, - code, color, - flipx, flipy, - m_h0_start + m_x_scale * sx, sy, 0); + m_gfxdecode->gfx(1)->transpen(bitmap,clip, + code, color, + flipx, flipy, + m_h0_start + m_x_scale * sx, sy, 0); } } @@ -609,25 +606,22 @@ void galaxian_state::sprites_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec void galaxian_state::bullets_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, const uint8_t *base) { - int y; - /* iterate over scanlines */ - for (y = cliprect.min_y; y <= cliprect.max_y; y++) + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { uint8_t shell = 0xff, missile = 0xff; uint8_t effy; - int which; /* the first 3 entries match Y-1 */ effy = m_flipscreen_y ? ((y - 1) ^ 255) : (y - 1); - for (which = 0; which < 3; which++) - if ((uint8_t)(base[which*4+1] + effy) == 0xff) + for (int which = 0; which < 3; which++) + if (uint8_t(base[which*4+1] + effy) == 0xff) shell = which; /* remaining entries match Y */ effy = m_flipscreen_y ? (y ^ 255) : y; - for (which = 3; which < 8; which++) - if ((uint8_t)(base[which*4+1] + effy) == 0xff) + for (int which = 3; which < 8; which++) + if (uint8_t(base[which*4+1] + effy) == 0xff) { if (which != 7) shell = which; @@ -637,9 +631,9 @@ void galaxian_state::bullets_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec /* draw the shell */ if (shell != 0xff) - (this->*m_draw_bullet_ptr)(bitmap, cliprect, shell, 255 - base[shell*4+3], y); + m_draw_bullet_ptr(bitmap, cliprect, shell, 255 - base[shell*4+3], y); if (missile != 0xff) - (this->*m_draw_bullet_ptr)(bitmap, cliprect, missile, 255 - base[missile*4+3], y); + m_draw_bullet_ptr(bitmap, cliprect, missile, 255 - base[missile*4+3], y); } } @@ -1072,9 +1066,9 @@ void galaxian_state::turtles_draw_background(bitmap_rgb32 &bitmap, const rectang } -void galaxian_state::sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect) +void taiyo_sfx_state::sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect) { - /* current schematics are unreadable, assuming like Turtles */ + // current schematics are unreadable, assuming like Turtles bitmap.fill(rgb_t(m_background_red * 0x55, m_background_green * 0x47, m_background_blue * 0x55), cliprect); scramble_draw_stars(bitmap, cliprect, 256); } @@ -1244,6 +1238,14 @@ void galaxian_state::theend_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &c *************************************/ /*** generic ***/ +void galaxian_state::empty_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) +{ +} + +void galaxian_state::empty_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) +{ +} + void galaxian_state::upper_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) { /* tiles are in the upper half of a larger ROM */ @@ -1269,14 +1271,14 @@ void galaxian_state::frogger_extend_sprite_info(const uint8_t *base, uint8_t *sx } -/*** Ghostmuncher Galaxian ***/ -void galaxian_state::gmgalax_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) +/*** Bagman on Moon Cresta hardware, Ghostmuncher Galaxian ***/ +void bagmanmc_state::bagmanmc_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) { *code |= m_gfxbank[0] << 9; -// *color |= m_gfxbank[0] << 3; + //*color |= m_gfxbank[0] << 3; } -void galaxian_state::gmgalax_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) +void bagmanmc_state::bagmanmc_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) { *code |= (m_gfxbank[0] << 7) | 0x40; *color |= m_gfxbank[0] << 3; @@ -1284,12 +1286,12 @@ void galaxian_state::gmgalax_extend_sprite_info(const uint8_t *base, uint8_t *sx /*** Pisces ***/ -void galaxian_state::pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) +void pisces_state::pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) { *code |= m_gfxbank[0] << 8; } -void galaxian_state::pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) +void pisces_state::pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) { *code |= m_gfxbank[0] << 6; } @@ -1384,17 +1386,15 @@ void galaxian_state::jumpbug_extend_sprite_info(const uint8_t *base, uint8_t *sx } } -void galaxian_state::namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) // should be in namenayo_state +void namenayo_state::namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) { - // main game display - if ((attrib & 0x01) == 0x00) + if ((attrib & 0x01) == 0x00) // main game display { int attr = m_exattrram[y & 0x1f]; *code += ((attr & 0x38) >> 3) * 0x100; *color = attr & 0x07; } - // status bar - else + else // status bar { // course map if ((attrib & 0xfe) == 0x20) @@ -1402,7 +1402,7 @@ void galaxian_state::namenayo_extend_tile_info(uint16_t *code, uint8_t *color, u } } -void galaxian_state::namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) +void namenayo_state::namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) { if (base[2] & 0x08) *code += 0x40; @@ -1418,7 +1418,7 @@ void namenayo_state::namenayo_unk_d800_w(uint8_t data) } -void galaxian_state::namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect) +void namenayo_state::namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(rgb_t::black(), cliprect); @@ -1455,14 +1455,14 @@ void galaxian_state::guttangt_extend_sprite_info(const uint8_t *base, uint8_t *s * *************************************/ -/* gfxbank[4] is used as a cpu bank number, and gfxbank[0] for graphics banking */ -void galaxian_state::fourplay_rombank_w(offs_t offset, uint8_t data) +// gfxbank[4] is used as a cpu bank number, and gfxbank[0] for graphics banking +void fourplay_state::fourplay_rombank_w(offs_t offset, uint8_t data) { m_gfxbank[4] = (m_gfxbank[4] & (2 - offset)) | (data << offset); m_gfxbank[0] = (m_gfxbank[4] == 3); // 1 = true, 0 = false - membank("bank1")->set_entry( m_gfxbank[4] ); + m_rombank->set_entry(m_gfxbank[4]); } @@ -1473,13 +1473,13 @@ void galaxian_state::fourplay_rombank_w(offs_t offset, uint8_t data) * *************************************/ -void galaxian_state::videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) +void videight_state::videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) { *code |= (m_gfxbank[0] << 8); *color |= (m_gfxbank[4] << 3); } -void galaxian_state::videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) +void videight_state::videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color) { *code |= (m_gfxbank[0] << 6); *color |= (m_gfxbank[4] << 3); @@ -1487,26 +1487,26 @@ void galaxian_state::videight_extend_sprite_info(const uint8_t *base, uint8_t *s /* This handles the main bankswitching for code and one-bank gfx games */ -void galaxian_state::videight_rombank_w(offs_t offset, uint8_t data) +void videight_state::videight_rombank_w(offs_t offset, uint8_t data) { - uint8_t gfxbanks[] = { 0, 10, 2, 8, 1, 9, 4, 11 }; + static constexpr uint8_t gfxbanks[] = { 0, 10, 2, 8, 1, 9, 4, 11 }; if (offset == 2) - galaxian_stars_enable_w( data ); + galaxian_stars_enable_w(data); else { m_gfxbank[4] = (m_gfxbank[4] & (6 - offset)) | (data << ((offset + 1) >> 1)); galaxian_gfxbank_w (0, gfxbanks[m_gfxbank[4]]); - membank("bank1")->set_entry( m_gfxbank[4] ); + m_rombank->set_entry(m_gfxbank[4]); } } /* This handles those games with multiple gfx banks */ -void galaxian_state::videight_gfxbank_w(offs_t offset, uint8_t data) +void videight_state::videight_gfxbank_w(offs_t offset, uint8_t data) { /* Moon Cresta (mooncrgx) */ - if (( data < 2 ) && (m_gfxbank[4] == 3)) + if ((data < 2) && (m_gfxbank[4] == 3)) { - uint8_t gfxbanks[] = { 8, 12, 8, 14, 8, 13, 8, 15 }; + static constexpr uint8_t gfxbanks[] = { 8, 12, 8, 14, 8, 13, 8, 15 }; if (!offset) m_gfxbank[3] = (m_gfxbank[3] & 6) | data; if (offset == 1) m_gfxbank[3] = (m_gfxbank[3] & 5) | (data << 1); if (offset == 2) m_gfxbank[3] = (m_gfxbank[3] & 3) | (data << 2); @@ -1514,12 +1514,12 @@ void galaxian_state::videight_gfxbank_w(offs_t offset, uint8_t data) } /* Uniwar S */ - if (( data < 2 ) && (m_gfxbank[4] == 2) && (offset == 2)) - galaxian_gfxbank_w( 0, data+2 ); + if ((data < 2) && (m_gfxbank[4] == 2) && (offset == 2)) + galaxian_gfxbank_w(0, data + 2); /* Pisces (piscesb) */ - if (( data < 2 ) && (m_gfxbank[4] == 6) && (offset == 2)) - galaxian_gfxbank_w( 0, data+4 ); + if ((data < 2) && (m_gfxbank[4] == 6) && (offset == 2)) + galaxian_gfxbank_w(0, data + 4); } void namenayo_state::namenayo_extattr_w(offs_t offset, uint8_t data) -- cgit v1.2.3 From b2ac679f4abcc58caa961eaf8d69770795c8a0be Mon Sep 17 00:00:00 2001 From: Robbbert Date: Thu, 10 Jun 2021 17:47:48 +1000 Subject: New working software list additions ----------------------------------- mbee_flop: 56k 56k_master_91 56k_sys 56k_system_master_84_01 56k_system_master_early 64kmaster 64k_premium_master 64k_premium_system_disk 64k_zcpr1.6 128k boot disk (set 1) 128k boot disk (set 2) 128k Premium Master 1986/07 128k Premium Master Early 128k Premium Starter 1986/07 128k Premium System 1988/03 128k Starter Disk 128k Turbodisk II (set 2) 128kp Premium System 1988/03 128kp_master (set 1) 128kp_master (set 2) 128kp_starter 128ks 128ks_master 128ks_swedish_boot 128ks_utility 128k_swedish_boot_disk 128k_system_master_35 256tc_diagnostics 256tc_intro 256tc_system_disk_rel1_1987 256tc_system_disk_rel2_1987 256tc_system_disk_rel3_1988/06 256tc_system_disk_rel4_1988/09 256tc_system_master 256tc_utility_disk_rel2 2 Golf Games 3 Golf Games t01 3 Golf Games t04 Advanced (touch) Typing Tutor Adventure Games #1 Adventure Games (set 1) Adventure Games (set 2) adventure1 adventure_13 adventure_14 Agricultural Studies Air Track t01 Air Track t04 Air_Track Alan's Adventure's Disk 2 (set 1) Alan's Adventure's Disk 2 (set 2) Alan's Adventure's Disk 3 (set 1) Alan's Adventure's Disk 3 (set 2) Alan's Adventure's Disk 4 (set 1) Alan's Adventure's Disk 4 (set 2) Alan's Games Disk 4 Arcade Games 1 Arcade Games 1 t01 Arcade Games 1 t04 Arcade Games 2 t01 Arcade Games 2 t03 Arcade Games 2 t04 Arcade Games 3 Arcade Games 4 t03 Art Auction Australia 2020 Australiana Quiz Game Basic Games 05 Battleship Bee Casino t01 Bee Casino t04 Bee Draw 1.0 Bee Scientist 1 t01 Bee Scientist 1 t04 Beenet Beesware Word Study Beetalker and Beethoven demo Bennett Data Multiplexer Buzznet III v1.3 (set 1) Bennett Data Multiplexer Buzznet III v1.3 (set 2) Bennett Data Multiplexer Communications Programme master demo Bernie Nichols Educational Graphics Bernie Nichols Language Arts Bernie Nichols Reading Programs Bernie Nichols Science and Miscellaneous Bernie Nichols Spelling Programs Biological Science Birds of Antarctica Bondwell Speech Brian Howarths Mystery Adventures Bushwalking Adventure Business and Home Database Buzznet 3.4 Buzznet iii Demo Disk bwmod C.A.Sinclair Educational Disk Carefile v1.3 Cashbook_v2.1 (set 1) Cashbook_v2.1 (set 2) Cheryl Goding Demo Disk ChickenMan's Adventure's Disk 10 ChickenMan's Adventure's Disk 11 ChickenMan's Adventure's Disk 12 ChickenMan's Adventure's Disk 15 ChickenMan's Adventure's Disk 16 ChickenMan's Adventure's Disk 18 ChickenMan's Adventure's Disk 19 ChickenMan's Adventure's Disk 2 ChickenMan's Adventure's Disk 20 ChickenMan's Adventure's Disk 21 ChickenMan's Adventure's Disk 22 ChickenMan's Adventure's Disk 23 ChickenMan's Adventure's Disk 24 ChickenMan's Adventure's Disk 25 ChickenMan's Adventure's Disk 26 ChickenMan's Adventure's Disk 27 ChickenMan's Adventure's Disk 28 ChickenMan's Adventure's Disk 29 ChickenMan's Adventure's Disk 3 ChickenMan's Adventure's Disk 30 ChickenMan's Adventure's Disk 4 ChickenMan's Adventure's Disk 5 ChickenMan's Adventure's Disk 6 ChickenMan's Adventure's Disk 7 ChickenMan's Adventure's Disk 8 ChickenMan's Adventure's Disk 9 ChickenMan's Games Demo Disc Chickenman's Games Disk 2 (set 2) Chickenman's Games Disk 4 (set 1) Chickenman's Games Disk 4 (set 2) Chickenman's Games Disk 5 (set 1) Chickenman's Games Disk 5 (set 2) Chickenman's Games Disk 8 Chickenman's Games Disk 9 (set 1) Chickenman's Games Disk 9 (set 2) Chickman's Games Disk 2 (set 1) Chip8 v2.3 Christmas Carols t04 CIAB boot menu CIAB Double-sided Master CIAB menu sample CIAB System Master CIAB System Master 1985/03 CIAB System Master 1986/02 Citadel of Chaos v2.01 Cloze Exercises Colossal Cave Colour Sampler 1 Commsoft Roots/M Complete Scott Adams Original Adventures Composer Bee Plus Comprobe 1.00 cpm3_61k (set 1) cpm3_61k (set 10) cpm3_61k (set 2) cpm3_61k (set 3) cpm3_61k (set 4) cpm3_61k (set 5) cpm3_61k (set 6) cpm3_61k (set 7) cpm3_61k (set 8) cpm3_61k (set 9) cpm3_dri (set 1) cpm3_dri (set 10) cpm3_dri (set 2) cpm3_dri (set 3) cpm3_dri (set 4) cpm3_dri (set 5) cpm3_dri (set 6) cpm3_dri (set 7) cpm3_dri (set 8) cpm3_dri (set 9) cpm3_y2k (set 1) cpm3_y2k (set 10) cpm3_y2k (set 2) cpm3_y2k (set 3) cpm3_y2k (set 4) cpm3_y2k (set 5) cpm3_y2k (set 6) cpm3_y2k (set 7) cpm3_y2k (set 8) cpm3_y2k (set 9) Cricket t01 Cricket t04 Crossword Capers Cunning Running D.Heym Common Fractions D.Heym Counting Numbers D.Heym Directed Numbers D.Heym Number Lines D.Heym Various databuzz_beenet_version David Ahls Adventures DBase II (backup) Demonstration Disk t02 Denham 1 Denham 2 Denham 3 Denham 4 Denham Easy Stats Denham Kings Trees Aces Disk Beecomposer Disk Cataloger Disk Test v3.9 Doodle Draw v1.1 Dragon Spells Dungeons of Khan Early Word v1.3 education_01 education_02 education_03 education_04 education_05 education_06 education_07 education_08 education_09 education_1 education_10 education_11 education_12 education_3 education_4 education_5 education_6 education_7 education_8 education_9 Electric Paintbrush Slide Show electric_paintbrush_chalkboard_1.01 electric_paintbrush_fonts electric_paintbrush_mouse_1.22 empty_ciab_sys English EPSGmod Files Extended Turtle 4.3p Extended Turtle 4.6p Family Favourites t03 Family Favourites t04 Family Games 1 t01 Family Games 1 t03 Family Games 1 t04 Faust Adventure Filemaster v2 First Fleet (set 1) First Fleet (set 2) First Fleet (set 3) First Fleet (set 4) Fortris FTL Modula2 disk1 FTL_Modula2 disk2 FTL_Modula2 disk3 Games from Wildcards Vol 1,2,3,4 Games2 Geograbee Geography 1 Geography 2 Geography 3 Getting to know your Microbee Ghost Muncher / Kilopede Gold-dust Island Goodison Demo Goodison Education 1 Goodison Education 2 Goodison Education 3 Goodison Mathematics Goodison Speed Reading Goodison Spelling Goodison Words Graphic Adventures 1 t01 Graphic Adventures 1 t04 Greybeard Tape Files (set 1) Greybeard Tape Files (set 2) Hangman Hiplot Hoards of the Deep Realm 1.0 (set 1) Hoards of the Deep Realm 1.0 (set 2) Hoards of the Deep Realm 1.1 (set 1) Hoards of the Deep Realm 1.1 (set 2) Hoards of the Deep Realm 11t (set 1) Hoards of the Deep Realm 11t (set 2) Home Economics Honeysoft Arcade Games Vol II Honeysoft Demo Disk Honeysoft Demo Disk t04 Honeysoft Microbee Adventures Vol Three (set 1) Honeysoft Microbee Adventures Vol Three (set 2) Honeysoft Microbee Adventures Vol Two (set 1) Honeysoft Microbee Adventures Vol Two (set 2) Honeysoft Microbee Text Adventures Vol One (set 1) Honeysoft Microbee Text Adventures Vol One (set 2) Icon Editor v1.4 impact_media_shareware_d1 impact_media_shareware_d2 Information Express v1.2 Isbok Adventure Jewels of Sancara Island JHBeesware 2 JHBeesware 3 JHBeesware1 Job Option Bank v4.52 Joystick Games 1 t03 Joystick Games 1 t04 Kids Pack 1 t03 Kids Pack 1 t04 Kids Pack 2 t03 Label Generator Program Learning Can Be Fun more t01 Learning Can Be Fun more t03 Learning Can Be Fun more t04 Learning Can Be Fun numbers t01 Learning Can Be Fun numbers t04 Learning Can Be Fun Words and Numbers t04 Learning Can Be Fun words t01 Leisure Suit Larry Let's Go Punting (set 1) Let's Go Punting (set 2) Lets Eat Worms Machine-Code and Basic Tutorials Manual Arts Mathematics #1 Mathematics #2 Melbourne to Hobart Yacht Race Simulation Membership Maintenance System v1.30 Menu of Arcade Games (set 1) Menu of Arcade Games (set 2) Menu of Arcade Games (set 3) Menu of Arcade Games (set 4) Menu of Games 7 Menu of games and other programs (set 1) Menu of games and other programs (set 2) Menu of games and others on Disk #3 (set 1) Menu of games and others on Disk #3 (set 2) Menu of Games Disk #1 (set 1) Menu of Games Disk #1 (set 2) Menu of Games on Disk (set 1) Menu of Games on Disk (set 2) Micro Defender Microbear Public Domain Microbee Arcade Games #1 Microbee Arcade Games #2 Microbee Lines v0.1 Micropen 1.0 Microspace Invaders II Milestone 1.09 Millionwaire 3.0 (set 1) Millionwaire 3.0 (set 2) MMD Educational mouse_bios9 MUGWA Amateur Radio programs MUGWA Beeforth MUGWA boot disk MUGWA dbase_001 MUGWA dbase_002 MUGWA dbase_a_001 MUGWA dbase_a_002 MUGWA dbase_a_003 MUGWA dbase_a_004 MUGWA dbase_a_005 MUGWA macro_001 MUGWA paslib2_000 MUGWA rom_pak MUGWA Small-C Musicraft Musicraft Nanoc the Destroyer / Jumpman (set 1) Nanoc the Destroyer / Jumpman (set 2) Nanoc the Destroyer II / Freedom Fighter / Missile Dodger (set 1) Nanoc the Destroyer II / Freedom Fighter / Missile Dodger (set 2) Nanoc's Revenge Nemesis 1.2 Nemesis Dungeon Master Networked Educational 1 Networked Educational 2 Networked Educational 3 Number Line Set One World Countries Database 1.01 ORAC Explorers ORAC Scientists 1 v3.1 Our World t02 Our World t04 Pascals Triangle Set PAWcomp Adventure compiler Penguin Book of Microbee Games Penny Arcade t02 Penny Arcade t03 Penny Arcade t04 Peter Broughton v1.1 Peter Broughton v1.2 Peter Broughton v2.0pre deepdene Peter Broughton v2.2 Peter Broughton v2.2p 1of2 (set 1) Peter Broughton v2.2p 1of2 (set 2) Physical Science Plan80 v2.4 Poster Disk 1987 Premium Beeartistic 1.30 premium1 premium2 Primary Rime Lessons Primary Teachers Rollbook Printmaster 1.0 Printmaster 1.10a Printmaster Graphics Editor Printmaster Plus 1.46 R.A.C.E.R. Raft-away River Random Basic games Research Logo 1.0 Research Logo 1.0a Research Logo 1.0a+ Richard Larkins Games Scavenger Hunt Science Tutorial 1 t01 Science Tutorial 1 t02 Science Tutorial 1 t04 Science Tutorial 2 t01 Science Tutorial 2 t04 Selection Menu (set 1) Selection Menu (set 2) Sheep-dog Trial Simon Gerraty 80/40 Track Bios 4.2b (set 1) Simon Gerraty 80/40 Track Bios 4.2b (set 2) Simple and Compound Interest Simple Business Graphics Simply DB 1.20c Simply DB 2.02 Simply Write Font Editor v2.04 Simply Write v2.04 Simply Write v3.02 Simply Write v3.03 Sketch Pad Smart Model Controller v1.12m Smartkey v1.1a SMUG 02 SMUG Tape Library Social Science Social Studies Oracle t03 Social Studies Oracle t04 Social Studies t01 Social Studies t04 Springboard Clipart Storymaker 128k Storymaker 256tc Strategic Games 1 t01 Strategic Games 1 t03 Strategic Games 1 t04 Survivor swedish_128k_boot_disk Sword Quest / Microspace Invaders II / The Valley / Caves Sydney Approach Takeover: warriors against the world Tantrix Technical Drawing t01 Technical Drawing t04 Telcom 2.0/2.2 (for 64k) Telcom 3.0 Upgrade (for 128k/256tc) The Mob From Evil The Mob From Evil The Winners Thunder Road Adventure 1.2 Tim Hartnell Adventures Timegap-x Timetable Blocker 5.1 Timetable Manager 4.3 Turbo Pascal Turbodisk II (set 1) turtle utilities Utility Various Scottfree Adventures Disk 17 Venture Writer 2.1 Viatel Upgrade v1.3a Viper Visual Programming t03 Wanderer Wavplay 2.3 Ways We Were WDPROC - Word Processing Package Word Puzzles Wordgraph A, v02 Wordgraph A, v04 Wordstar 3.3 Wordstar 4.0 wordstar v3.3 1of2 Wordstar v3.3 2of2 Zeephon zpm3_61k (set 1) zpm3_61k (set 2) zpm3_61k (set 3) zpm3_61k (set 4) zpm3_61k (set 5) zpm3_y2k (set 1) zpm3_y2k (set 2) zpm3_y2k (set 3) zpm3_y2k (set 4) zpm3_y2k (set 5) [Robbbert] --- hash/mbee_flop.xml | 5974 +++++++++++++++++++++++++++++++++++++++++++++ src/mame/drivers/mbee.cpp | 4 +- 2 files changed, 5976 insertions(+), 2 deletions(-) create mode 100644 hash/mbee_flop.xml diff --git a/hash/mbee_flop.xml b/hash/mbee_flop.xml new file mode 100644 index 00000000000..7437b1cad75 --- /dev/null +++ b/hash/mbee_flop.xml @@ -0,0 +1,5974 @@ + + + + + + + 56k + 19?? + <unknown> + + + + + + + + + + 56k_master_91 + 19?? + <unknown> + + + + + + + + + + 56k_sys + 19?? + <unknown> + + + + + + + + + + 56k_system_master_84_01 + 19?? + <unknown> + + + + + + + + + + 56k_system_master_early + 19?? + <unknown> + + + + + + + + + + Advanced (touch) Typing Tutor + 19?? + <unknown> + + + + + + + + + + Colossal Cave + 19?? + <unknown> + + + + + + + + + + Agricultural Studies + 19?? + Education Department of Western Australia + + + + + + + + + + Art Auction + 19?? + <unknown> + + + + + + + + + + DBase II (backup) + 19?? + <unknown> + + + + + + + + + + Random Basic games + 19?? + <unknown> + + + + + + + + + + Basic Games 05 + 19?? + <unknown> + + + + + + + + + + Beenet + 1985 + Applied Technology + + + + + + + + + + Beetalker and Beethoven demo + 19?? + <unknown> + + + + + + + + + + Bee Draw 1.0 + 1986 + <unknown> + + + + + + + + + + Biological Science + 19?? + Education Department of Western Australia + + + + + + + + + + Birds of Antarctica + 19?? + Education Department of Western Australia + + + + + + + + + + Buzznet iii Demo Disk + 19?? + Bendata + + + + + + + + + + Buzznet 3.4 + 1985 + Bendata + + + + + + + + + + Disk Cataloger + 19?? + <unknown> + + + + + + + + + + Cheryl Goding Demo Disk + 19?? + <unknown> + + + + + + + + + + CIAB Double-sided Master + 19?? + <unknown> + + + + + + + + + + CIAB System Master 1986/02 + 19?? + <unknown> + + + + + + + + + + CIAB System Master 1985/03 + 19?? + <unknown> + + + + + + + + + + Colour Sampler 1 + 19?? + Honeysoft + + + + + + + + + + CIAB boot menu + 19?? + <unknown> + + + + + + + + + + Cunning Running + 1984 + Jacaranda Wiley + + + + + + + + + + databuzz_beenet_version + 19?? + <unknown> + + + + + + + + + + Micro Defender + 1983 + <unknown> + + + + + + + + + + Honeysoft Demo Disk + 19?? + Honeysoft + + + + + + + + + + Chip8 v2.3 + 1986 + Dreamcards + + + + + + + + + + Dungeons of Khan + 19?? + <unknown> + + + + + + + + + + D.Heym Directed Numbers + 19?? + <unknown> + + + + + + + + + + D.Heym Number Lines + 19?? + <unknown> + + + + + + + + + + D.Heym Various + 19?? + <unknown> + + + + + + + + + + D.Heym Common Fractions + 19?? + <unknown> + + + + + + + + + + D.Heym Counting Numbers + 19?? + <unknown> + + + + + + + + + + education_01 + 19?? + <unknown> + + + + + + + + + + empty_ciab_sys + 19?? + <unknown> + + + + + + + + + + English + 19?? + Education Department of Western Australia + + + + + + + + + + First Fleet (set 1) + 19?? + Education Department of Western Australia + + + + + + + + + + First Fleet (set 2) + 19?? + Education Department of Western Australia + + + + + + + + + + + Geograbee + 19?? + <unknown> + + + + + + + + + + Ghost Muncher / Kilopede + 1983 + Mytek + + + + + + + + + + 2 Golf Games + 19?? + <unknown> + + + + + + + + + + Goodison Mathematics + 19?? + Goodison + + + + + + + + + + Goodison Demo + 19?? + Goodison + + + + + + + + + + Goodison Speed Reading + 19?? + Goodison + + + + + + + + + + Hiplot + 1985 + <unknown> + + + + + + + + + + Home Economics + 19?? + Education Department of Western Australia + + + + + + + + + + Air_Track + 19?? + Honeysoft + + + + + + + + + + Air Track t01 + 19?? + Honeysoft + + + + + + + + + + Air Track t04 + 19?? + Honeysoft + + + + + + + + + + Arcade Games 1 t01 + 19?? + Honeysoft + + + + + + + + + + Arcade Games 1 t04 + 19?? + Honeysoft + + + + + + + + + + Arcade Games 2 t01 + 19?? + Honeysoft + + + + + + + + + + Arcade Games 2 t03 + 19?? + Honeysoft + + + + + + + + + + Arcade Games 2 t04 + 19?? + Honeysoft + + + + + + + + + + Arcade Games 4 t03 + 19?? + Honeysoft + + + + + + + + + + Bee Casino t01 + 19?? + Honeysoft + + + + + + + + + + Bee Casino t04 + 19?? + Honeysoft + + + + + + + + + + Bee Scientist 1 t01 + 19?? + Honeysoft + + + + + + + + + + Bee Scientist 1 t04 + 19?? + Honeysoft + + + + + + + + + + Christmas Carols t04 + 19?? + Honeysoft + + + + + + + + + + Cricket t01 + 19?? + Honeysoft + + + + + + + + + + Cricket t04 + 19?? + Honeysoft + + + + + + + + + + Demonstration Disk t02 + 19?? + Honeysoft + + + + + + + + + + Honeysoft Demo Disk t04 + 19?? + Honeysoft + + + + + + + + + + Family Favourites t03 + 19?? + Honeysoft + + + + + + + + + + Family Favourites t04 + 19?? + Honeysoft + + + + + + + + + + Family Games 1 t01 + 19?? + Honeysoft + + + + + + + + + + Family Games 1 t03 + 19?? + Honeysoft + + + + + + + + + + Family Games 1 t04 + 19?? + Honeysoft + + + + + + + + + + 3 Golf Games t01 + 19?? + Honeysoft + + + + + + + + + + 3 Golf Games t04 + 19?? + Honeysoft + + + + + + + + + + Graphic Adventures 1 t01 + 19?? + Honeysoft + + + + + + + + + + Graphic Adventures 1 t04 + 19?? + Honeysoft + + + + + + + + + + Joystick Games 1 t03 + 19?? + Honeysoft + + + + + + + + + + Joystick Games 1 t04 + 19?? + Honeysoft + + + + + + + + + + Kids Pack 1 t03 + 19?? + Honeysoft + + + + + + + + + + Kids Pack 1 t04 + 19?? + Honeysoft + + + + + + + + + + Kids Pack 2 t03 + 19?? + Honeysoft + + + + + + + + + + Learning Can Be Fun words t01 + 19?? + Honeysoft + + + + + + + + + + Learning Can Be Fun Words and Numbers t04 + 19?? + Honeysoft + + + + + + + + + + Learning Can Be Fun more t01 + 19?? + Honeysoft + + + + + + + + + + Learning Can Be Fun more t03 + 19?? + Honeysoft + + + + + + + + + + Learning Can Be Fun more t04 + 19?? + Honeysoft + + + + + + + + + + Learning Can Be Fun numbers t01 + 19?? + Honeysoft + + + + + + + + + + Learning Can Be Fun numbers t04 + 19?? + Honeysoft + + + + + + + + + + Our World t02 + 19?? + Honeysoft + + + + + + + + + + Our World t04 + 19?? + Honeysoft + + + + + + + + + + Penny Arcade t02 + 19?? + Honeysoft + + + + + + + + + + Penny Arcade t03 + 19?? + Honeysoft + + + + + + + + + + Penny Arcade t04 + 19?? + Honeysoft + + + + + + + + + + Science Tutorial 1 t01 + 19?? + Honeysoft + + + + + + + + + + Science Tutorial 1 t02 + 19?? + Honeysoft + + + + + + + + + + Science Tutorial 1 t04 + 19?? + Honeysoft + + + + + + + + + + Science Tutorial 2 t01 + 19?? + Honeysoft + + + + + + + + + + Science Tutorial 2 t04 + 19?? + Honeysoft + + + + + + + + + + Social Studies t01 + 19?? + Honeysoft + + + + + + + + + + Social Studies t04 + 19?? + Honeysoft + + + + + + + + + + Social Studies Oracle t03 + 19?? + Honeysoft + + + + + + + + + + Social Studies Oracle t04 + 19?? + Honeysoft + + + + + + + + + + Strategic Games 1 t01 + 19?? + Honeysoft + + + + + + + + + + Strategic Games 1 t03 + 19?? + Honeysoft + + + + + + + + + + Strategic Games 1 t04 + 19?? + Honeysoft + + + + + + + + + + Technical Drawing t01 + 19?? + Honeysoft + + + + + + + + + + Technical Drawing t04 + 19?? + Honeysoft + + + + + + + + + + Visual Programming t03 + 19?? + Honeysoft + + + + + + + + + + Hoards of the Deep Realm 1.0 (set 1) + 1985 + <unknown> + + + + + + + + + + Hoards of the Deep Realm 1.0 (set 2) + 1985 + <unknown> + + + + + + + + + + Hoards of the Deep Realm 1.1 (set 1) + 1986 + <unknown> + + + + + + + + + + Hoards of the Deep Realm 1.1 (set 2) + 1986 + <unknown> + + + + + + + + + + impact_media_shareware_d1 + 19?? + <unknown> + + + + + + + + + + impact_media_shareware_d2 + 19?? + <unknown> + + + + + + + + + + Sheep-dog Trial + 1984 + Jacaranda Wiley + + + + + + + + + + Scavenger Hunt + 1984 + Jacaranda Wiley + + + + + + + + + + JHBeesware1 + 19?? + J and H Beesware + + + + + + + + + + JHBeesware 2 + 19?? + J and H Beesware + + + + + + + + + + JHBeesware 3 + 19?? + J and H Beesware + + + + + + + + + + Number Line Set + 19?? + J and H Beesware + + + + + + + + + + Pascals Triangle Set + 19?? + J and H Beesware + + + + + + + + + + Lets Eat Worms + 1985 + Nectar + + + + + + + + + + Manual Arts + 19?? + Education Department of Western Australia + + + + + + + + + + Bennett Data Multiplexer Communications Programme master demo + 1985 + Bendata + + + + + + + + + + Mathematics #1 + 19?? + Education Department of Western Australia + + + + + + + + + + Mathematics #2 + 19?? + Education Department of Western Australia + + + + + + + + + + Machine-Code and Basic Tutorials + 1983 + Mytek + + + + + + + + + + Microbear Public Domain + 19?? + Microbear + + + + + + + + + + wordstar v3.3 1of2 + 19?? + <unknown> + + + + + + + + + + Wordstar v3.3 2of2 + 19?? + <unknown> + + + + + + + + + + Microspace Invaders II + 19?? + <unknown> + + + + + + + + + + MUGWA dbase_a_001 + 19?? + <unknown> + + + + + + + + + + MUGWA dbase_a_002 + 19?? + <unknown> + + + + + + + + + + MUGWA dbase_a_003 + 19?? + <unknown> + + + + + + + + + + MUGWA dbase_a_004 + 19?? + <unknown> + + + + + + + + + + MUGWA dbase_a_005 + 19?? + <unknown> + + + + + + + + + + MUGWA macro_001 + 19?? + <unknown> + + + + + + + + + + MUGWA dbase_001 + 19?? + <unknown> + + + + + + + + + + MUGWA dbase_002 + 19?? + <unknown> + + + + + + + + + + MUGWA paslib2_000 + 19?? + <unknown> + + + + + + + + + + MUGWA boot disk + 19?? + <unknown> + + + + + + + + + + MUGWA rom_pak + 19?? + <unknown> + + + + + + + + + + MUGWA Amateur Radio programs + 19?? + <unknown> + + + + + + + + + + MUGWA Beeforth + 19?? + <unknown> + + + + + + + + + + MUGWA Small-C + 19?? + <unknown> + + + + + + + + + + Networked Educational 1 + 19?? + <unknown> + + + + + + + + + + Networked Educational 2 + 19?? + <unknown> + + + + + + + + + + Networked Educational 3 + 19?? + <unknown> + + + + + + + + + + One World Countries Database 1.01 + 1985 + Active Learning Systems + + + + + + + + + + Physical Science + 19?? + Education Department of Western Australia + + + + + + + + + + CIAB menu sample + 19?? + <unknown> + + + + + + + + + + Nanoc the Destroyer / Jumpman (set 1) + 19?? + Superior Computer Software + + + + + + + + + + Nanoc the Destroyer / Jumpman (set 2) + 19?? + Superior Computer Software + + + + + + + + + + Nanoc the Destroyer II / Freedom Fighter / Missile Dodger (set 1) + 19?? + Superior Computer Software + + + + + + + + + + Nanoc the Destroyer II / Freedom Fighter / Missile Dodger (set 2) + 19?? + Superior Computer Software + + + + + + + + + + Simon Gerraty 80/40 Track Bios 4.2b (set 1) + 1987 + <unknown> + + + + + + + + + + Simon Gerraty 80/40 Track Bios 4.2b (set 2) + 1987 + <unknown> + + + + + + + + + + Simple Business Graphics + 19?? + Microworld + + + + + + + + + + Simply DB 1.20c + 1984 + Reid Software + + + + + + + + + + Simply DB 2.02 + 19?? + Reid Software + + + + + + + + + + Sketch Pad + 1984 + Honeysoft + + + + + + + + + + Smartkey v1.1a + 1984 + FBN Software + + + + + + + + + + SMUG 02 + 19?? + <unknown> + + + + + + + + + + SMUG Tape Library + 19?? + <unknown> + + + + + + + + + + Social Science + 19?? + Education Department of Western Australia + + + + + + + + + + Springboard Clipart + 19?? + <unknown> + + + + + + + + + + Survivor + 19?? + <unknown> + + + + + + + + + + Sword Quest / Microspace Invaders II / The Valley / Caves + 19?? + <unknown> + + + + + + + + + + Sydney Approach + 19?? + <unknown> + + + + + + + + + + Telcom 2.0/2.2 (for 64k) + 1985 + Microworld Australia + + + + + + + + + + The Winners + 19?? + <unknown> + + + + + + + + + + turtle + 19?? + <unknown> + + + + + + + + + + Extended Turtle 4.3p + 19?? + Nectar + + + + + + + + + + Extended Turtle 4.6p + 1986 + Nectar + + + + + + + + + + Utility + 19?? + <unknown> + + + + + + + + + + Viatel Upgrade v1.3a + 1985 + Microworld Australia + + + + + + + + + + Viper + 1983 + Subatomic Software + + + + + + + + + + WDPROC - Word Processing Package + 19?? + Education Department of Western Australia + + + + + + + + + + Word Puzzles + 19?? + Education Department of Western Australia + + + + + + + + + + Membership Maintenance System v1.30 + 1983 + <unknown> + + + + + + + + + + + 128ks + 19?? + <unknown> + + + + + + + + + + 128ks_master + 19?? + <unknown> + + + + + + + + + + 128ks_swedish_boot + 19?? + <unknown> + + + + + + + + + + 128ks_utility + 19?? + <unknown> + + + + + + + + + + 128k_system_master_35 + 19?? + <unknown> + + + + + + + + + + 128k_swedish_boot_disk + 19?? + <unknown> + + + + + + + + + + 64kmaster + 19?? + <unknown> + + + + + + + + + + 64k_premium_system_disk + 19?? + <unknown> + + + + + + + + + + 64k_premium_master + 19?? + <unknown> + + + + + + + + + + 64k_zcpr1.6 + 19?? + <unknown> + + + + + + + + + + Adventure Games (set 1) + 19?? + <unknown> + + + + + + + + + + Adventure Games (set 2) + 19?? + <unknown> + + + + + + + + + + Honeysoft Microbee Text Adventures Vol One (set 1) + 19?? + Honeysoft + + + + + + + + + + Honeysoft Microbee Text Adventures Vol One (set 2) + 19?? + Honeysoft + + + + + + + + + + Adventure Games #1 + 19?? + <unknown> + + + + + + + + + + Alan's Adventure's Disk 2 (set 1) + 19?? + <unknown> + + + + + + + + + + Alan's Adventure's Disk 2 (set 2) + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 2 + 19?? + <unknown> + + + + + + + + + + Honeysoft Microbee Adventures Vol Two (set 1) + 19?? + Honeysoft + + + + + + + + + + Honeysoft Microbee Adventures Vol Two (set 2) + 19?? + Honeysoft + + + + + + + + + + Honeysoft Microbee Adventures Vol Three (set 1) + 19?? + Honeysoft + + + + + + + + + + Honeysoft Microbee Adventures Vol Three (set 2) + 19?? + Honeysoft + + + + + + + + + + Alan's Adventure's Disk 3 (set 1) + 19?? + <unknown> + + + + + + + + + + Alan's Adventure's Disk 3 (set 2) + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 3 + 19?? + <unknown> + + + + + + + + + + Alan's Adventure's Disk 4 (set 1) + 19?? + <unknown> + + + + + + + + + + Alan's Adventure's Disk 4 (set 2) + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 4 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 5 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 6 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 7 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 8 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 9 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 10 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 11 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 12 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 15 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 16 + 19?? + <unknown> + + + + + + + + + + Various Scottfree Adventures Disk 17 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 18 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 19 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 20 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 21 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 22 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 23 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 24 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 25 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 26 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 27 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 28 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 29 + 19?? + <unknown> + + + + + + + + + + ChickenMan's Adventure's Disk 30 + 19?? + <unknown> + + + + + + + + + + Menu of Arcade Games (set 1) + 19?? + <unknown> + + + + + + + + + + Microbee Arcade Games #1 + 19?? + <unknown> + + + + + + + + + + Menu of Arcade Games (set 2) + 19?? + <unknown> + + + + + + + + + + Menu of Arcade Games (set 3) + 19?? + <unknown> + + + + + + + + + + Menu of Arcade Games (set 4) + 19?? + <unknown> + + + + + + + + + + Microbee Arcade Games #2 + 19?? + <unknown> + + + + + + + + + + Honeysoft Arcade Games Vol II + 19?? + Honeysoft + + + + + + + + + + Australiana Quiz Game + 19?? + <unknown> + + + + + + + + + + Bernie Nichols Language Arts + 19?? + <unknown> + + + + + + + + + + Beesware Word Study + 19?? + Bendata + + + + + + + + + + Bernie Nichols Reading Programs + 19?? + <unknown> + + + + + + + + + + Bernie Nichols Science and Miscellaneous + 19?? + <unknown> + + + + + + + + + + Bernie Nichols Spelling Programs + 19?? + <unknown> + + + + + + + + + + Bernie Nichols Educational Graphics + 19?? + <unknown> + + + + + + + + + + Bondwell Speech + 19?? + <unknown> + + + + + + + + + + 128k boot disk (set 1) + 19?? + <unknown> + + + + + + + + + + 128k boot disk (set 2) + 19?? + <unknown> + + + + + + + + + + Brian Howarths Mystery Adventures + 19?? + <unknown> + + + + + + + + + + Bushwalking Adventure + 1984 + Dreamcards + + + + + + + + + + Business and Home Database + 19?? + <unknown> + + + + + + + + + + Bennett Data Multiplexer Buzznet III v1.3 (set 1) + 1985 + Bendata + + + + + + + + + + Bennett Data Multiplexer Buzznet III v1.3 (set 2) + 1985 + Bendata + + + + + + + + + + Carefile v1.3 + 19?? + <unknown> + + + + + + + + + + Cashbook_v2.1 (set 1) + 19?? + <unknown> + + + + + + + + + + Cashbook_v2.1 (set 2) + 19?? + <unknown> + + + + + + + + + + ChickenMan's Games Demo Disc + 19?? + <unknown> + + + + + + + + + + Citadel of Chaos v2.01 + 19?? + <unknown> + + + + + + + + + + Cloze Exercises + 1985 + Goodison + + + + + + + + + + Composer Bee Plus + 1985 + Honeysoft + + + + + + + + + + Comprobe 1.00 + 1989 + <unknown> + + + + + + + + + + Crossword Capers + 1984 + Goodison + + + + + + + + + + C.A.Sinclair Educational Disk + 19?? + <unknown> + + + + + + + + + + Denham 1 + 19?? + Denham Software + + + + + + + + + + Denham 2 + 19?? + Denham Software + + + + + + + + + + Denham 3 + 19?? + Denham Software + + + + + + + + + + Denham 4 + 19?? + Denham Software + + + + + + + + + + Denham Kings Trees Aces + 19?? + Denham Software + + + + + + + + + + Denham Easy Stats + 19?? + Denham Software + + + + + + + + + + Dragon Spells + 19?? + <unknown> + + + + + + + + + + Battleship + 1983 + Dreamcards + + + + + + + + + + Hangman + 1983 + Dreamcards + + + + + + + + + + education_05 + 19?? + <unknown> + + + + + + + + + + education_04 + 19?? + <unknown> + + + + + + + + + + education_02 + 19?? + <unknown> + + + + + + + + + + education_11 + 19?? + <unknown> + + + + + + + + + + education_09 + 19?? + <unknown> + + + + + + + + + + education_8 + 19?? + <unknown> + + + + + + + + + + education_6 + 19?? + <unknown> + + + + + + + + + + education_03 + 19?? + <unknown> + + + + + + + + + + education_7 + 19?? + <unknown> + + + + + + + + + + education_06 + 19?? + <unknown> + + + + + + + + + + education_12 + 19?? + <unknown> + + + + + + + + + + education_07 + 19?? + <unknown> + + + + + + + + + + education_08 + 19?? + <unknown> + + + + + + + + + + education_9 + 19?? + <unknown> + + + + + + + + + + education_10 + 19?? + <unknown> + + + + + + + + + + education_1 + 19?? + <unknown> + + + + + + + + + + education_3 + 19?? + <unknown> + + + + + + + + + + education_4 + 19?? + <unknown> + + + + + + + + + + education_5 + 19?? + <unknown> + + + + + + + + + + Faust Adventure + 1990 + <unknown> + + + + + + + + + + Filemaster v2 + 1985 + <unknown> + + + + + + + + + + First Fleet (set 3) + 19?? + Education Department of Western Australia + + + + + + + + + + FTL Modula2 disk1 + 1986 + <unknown> + + + + + + + + + + FTL_Modula2 disk2 + 1986 + <unknown> + + + + + + + + + + FTL_Modula2 disk3 + 1986 + <unknown> + + + + + + + + + + Menu of Games on Disk (set 1) + 19?? + <unknown> + + + + + + + + + + Menu of Games on Disk (set 2) + 19?? + <unknown> + + + + + + + + + + Menu of Games Disk #1 (set 1) + 19?? + <unknown> + + + + + + + + + + Menu of Games Disk #1 (set 2) + 19?? + <unknown> + + + + + + + + + + Games2 + 19?? + <unknown> + + + + + + + + + + Chickman's Games Disk 2 (set 1) + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 2 (set 2) + 19?? + <unknown> + + + + + + + + + + Menu of games and other programs (set 1) + 19?? + <unknown> + + + + + + + + + + Menu of games and other programs (set 2) + 19?? + <unknown> + + + + + + + + + + Menu of games and others on Disk #3 (set 1) + 19?? + <unknown> + + + + + + + + + + Menu of games and others on Disk #3 (set 2) + 19?? + <unknown> + + + + + + + + + + Alan's Games Disk 4 + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 4 (set 1) + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 4 (set 2) + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 5 (set 1) + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 5 (set 2) + 19?? + <unknown> + + + + + + + + + + Selection Menu (set 1) + 19?? + <unknown> + + + + + + + + + + Selection Menu (set 2) + 19?? + <unknown> + + + + + + + + + + Menu of Games 7 + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 8 + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 9 (set 1) + 19?? + <unknown> + + + + + + + + + + Chickenman's Games Disk 9 (set 2) + 19?? + <unknown> + + + + + + + + + + Goodison Words + 1986 + Goodison + + + + + + + + + + Goodison Education 1 + 1985 + Goodison + + + + + + + + + + Goodison Education 2 + 1985 + Goodison + + + + + + + + + + Goodison Education 3 + 1985 + Goodison + + + + + + + + + + Goodison Spelling + 1986 + Goodison + + + + + + + + + + Greybeard Tape Files (set 1) + 19?? + <unknown> + + + + + + + + + + Greybeard Tape Files (set 2) + 19?? + <unknown> + + + + + + + + + + Geography 1 + 1987 + Humblebee + + + + + + + + + + Geography 2 + 1987 + Humblebee + + + + + + + + + + Geography 3 + 1987 + Humblebee + + + + + + + + + + Icon Editor v1.4 + 1989 + <unknown> + + + + + + + + + + Information Express v1.2 + 1986 + Microbee Systems + + + + + + + + + + Isbok Adventure + 1985 + <unknown> + + + + + + + + + + Gold-dust Island + 1984 + Jacaranda Wiley + + + + + + + + + + Raft-away River + 1984 + Jacaranda Wiley + + + + + + + + + + Jewels of Sancara Island + 19?? + Psychic Software + + + + + + + + + + Job Option Bank v4.52 + 1983 + Educational Software + + + + + + + + + + Label Generator Program + 19?? + Hammosoft + + + + + + + + + + Leisure Suit Larry + 19?? + <unknown> + + + + + + + + + + Let's Go Punting (set 1) + 1986 + Goodison + + + + + + + + + + Let's Go Punting (set 2) + 1986 + Goodison + + + + + + + + + + CIAB System Master + 19?? + <unknown> + + + + + + + + + + Melbourne to Hobart Yacht Race Simulation + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 1) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 2) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 3) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 4) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 5) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 6) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 7) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 8) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 9) + 19?? + <unknown> + + + + + + + + + + cpm3_61k (set 10) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 1) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 2) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 3) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 4) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 5) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 6) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 7) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 8) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 9) + 19?? + <unknown> + + + + + + + + + + cpm3_dri (set 10) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 1) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 2) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 3) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 4) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 5) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 6) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 7) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 8) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 9) + 19?? + <unknown> + + + + + + + + + + cpm3_y2k (set 10) + 19?? + <unknown> + + + + + + + + + + Micropen 1.0 + 1984 + Intelligence (IRL) Ltd + + + + + + + + + + utilities + 19?? + <unknown> + + + + + + + + + + zpm3_61k (set 1) + 19?? + <unknown> + + + + + + + + + + zpm3_61k (set 2) + 19?? + <unknown> + + + + + + + + + + zpm3_61k (set 3) + 19?? + <unknown> + + + + + + + + + + zpm3_61k (set 4) + 19?? + <unknown> + + + + + + + + + + zpm3_61k (set 5) + 19?? + <unknown> + + + + + + + + + + zpm3_y2k (set 1) + 19?? + <unknown> + + + + + + + + + + zpm3_y2k (set 2) + 19?? + <unknown> + + + + + + + + + + zpm3_y2k (set 3) + 19?? + <unknown> + + + + + + + + + + zpm3_y2k (set 4) + 19?? + <unknown> + + + + + + + + + + zpm3_y2k (set 5) + 19?? + <unknown> + + + + + + + + + + Milestone 1.09 + 1981 + Organic Software + + + + + + + + + + MMD Educational + 19?? + <unknown> + + + + + + + + + + mouse_bios9 + 19?? + <unknown> + + + + + + + + + + Musicraft + 19?? + <unknown> + + + + + + + + + + + + + + + Nemesis 1.2 + 1981 + <unknown> + + + + + + + + + + Nemesis Dungeon Master + 1981 + <unknown> + + + + + + + + + + ORAC Scientists 1 v3.1 + 1986 + Koan + + + + + + + + + + PAWcomp Adventure compiler + 1987 + Gilsoft + + + + + + + + + + Penguin Book of Microbee Games + 19?? + <unknown> + + + + + + + + + + Peter Broughton v1.1 + 19?? + <unknown> + + + + + + + + + + Peter Broughton v1.2 + 19?? + <unknown> + + + + + + + + + + Peter Broughton v2.0pre deepdene + 19?? + <unknown> + + + + + + + + + + Peter Broughton v2.2 + 19?? + <unknown> + + + + + + + + + + Peter Broughton v2.2p 1of2 (set 1) + 19?? + <unknown> + + + + + + + + + + Peter Broughton v2.2p 1of2 (set 2) + 19?? + <unknown> + + + + + + + + + + Plan80 v2.4 + 1982 + Business Planning Systems + + + + + + + + + + Poster Disk 1987 + 19?? + <unknown> + + + + + + + + + + Primary Teachers Rollbook + 19?? + <unknown> + + + + + + + + + + Printmaster 1.0 + 19?? + <unknown> + + + + + + + + + + Printmaster 1.10a + 19?? + <unknown> + + + + + + + + + + Printmaster Graphics Editor + 19?? + <unknown> + + + + + + + + + + Printmaster Plus 1.46 + 19?? + <unknown> + + + + + + + + + + R.A.C.E.R. + 1991 + Adrenalin Software + + + + + + + + + + Research Logo 1.0 + 1985 + Logo Research Institute + + + + + + + + + + Research Logo 1.0a + 1985 + Logo Research Institute + + + + + + + + + + Research Logo 1.0a+ + 1985 + Logo Research Institute + + + + + + + + + + Richard Larkins Games + 19?? + <unknown> + + + + + + + + + + Primary Rime Lessons + 19?? + <unknown> + + + + + + + + + + Commsoft Roots/M + 1981 + Commsoft + + + + + + + + + + Complete Scott Adams Original Adventures + 19?? + <unknown> + + + + + + + + + + Nanoc's Revenge + 19?? + Superior Computer Software + + + + + + + + + + Fortris + 19?? + Superior Computer Software + + + + + + + + + + Timegap-x + 19?? + Superior Computer Software + + + + + + + + + + + Simple and Compound Interest + 1985 + Denham Software + + + + + + + + + + Smart Model Controller v1.12m + 19?? + <unknown> + + + + + + + + + + 128k Starter Disk + 19?? + <unknown> + + + + + + + + + + swedish_128k_boot_disk + 19?? + <unknown> + + + + + + + + + + Takeover: warriors against the world + 1990 + Adrenalin Software + + + + + + + + + + Telcom 3.0 Upgrade (for 128k/256tc) + 1987 + Microbee Systems + + + + + + + + + + Thunder Road Adventure 1.2 + 1980 + <unknown> + + + + + + + + + + Timetable Blocker 5.1 + 1986 + Vandem Boom Software + + + + + + + + + + Timetable Manager 4.3 + 1986 + Vandem Boom Software + + + + + + + + + + Tim Hartnell Adventures + 19?? + <unknown> + + + + + + + + + + Turbodisk II (set 1) + 1988 + Complete Micro Solutions + + + + + + + + + + 128k Turbodisk II (set 2) + 1988 + Complete Micro Solutions + + + + + + + + + + Turbo Pascal + 19?? + <unknown> + + + + + + + + + + Venture Writer 2.1 + 19?? + NSW Department of Education + + + + + + + + + + Wanderer + 19?? + <unknown> + + + + + + + + + + Wavplay 2.3 + 1995 + <unknown> + + + + + + + + + + Ways We Were + 19?? + Grapefruit Moon Software + + + + + + + + + + Games from Wildcards Vol 1,2,3,4 + 19?? + <unknown> + + + + + + + + + + Wordgraph A, v02 + 1985 + Research Technology Canberra + + + + + + + + + + Wordgraph A, v04 + 1986 + Research Technology Canberra + + + + + + + + + + Wordstar 3.3 + 19?? + <unknown> + + + + + + + + + + Zeephon + 1986 + GreyMatter Software + + + + + + + + + + 128kp_master (set 1) + 19?? + <unknown> + + + + + + + + + + 128kp_master (set 2) + 19?? + <unknown> + + + + + + + + + + 128kp Premium System 1988/03 + 19?? + <unknown> + + + + + + + + + + 128kp_starter + 19?? + <unknown> + + + + + + + + + + Getting to know your Microbee + 19?? + <unknown> + + + + + + + + + + 128k Premium Starter 1986/07 + 19?? + <unknown> + + + + + + + + + + 128k Premium System 1988/03 + 19?? + <unknown> + + + + + + + + + + 128k Premium Master 1986/07 + 19?? + <unknown> + + + + + + + + + + 128k Premium Master Early + 19?? + <unknown> + + + + + + + + + + adventure1 + 19?? + <unknown> + + + + + + + + + + adventure_13 + 19?? + <unknown> + + + + + + + + + + adventure_14 + 19?? + <unknown> + + + + + + + + + + Arcade Games 1 + 19?? + <unknown> + + + + + + + + + + Arcade Games 3 + 19?? + Honeysoft + + + + + + + + + + Australia 2020 + 1987 + Monash University + + + + + + + + + + Premium Beeartistic 1.30 + 1987 + Exitek + + + + + + + + + + Disk Beecomposer + 1986 + Honeysoft + + + + + + + + + + David Ahls Adventures + 19?? + <unknown> + + + + + + + + + + Doodle Draw v1.1 + 1986 + Goodison + + + + + + + + + + Disk Test v3.9 + 19?? + <unknown> + + + + + + + + + + Early Word v1.3 + 1985 + Nectar + + + + + + + + + + electric_paintbrush_chalkboard_1.01 + 19?? + <unknown> + + + + + + + + + + electric_paintbrush_fonts + 19?? + <unknown> + + + + + + + + + + electric_paintbrush_mouse_1.22 + 19?? + <unknown> + + + + + + + + + + Electric Paintbrush Slide Show + 1986 + Microbee Systems + + + + + + + + + + EPSGmod Files + 19?? + <unknown> + + + + + + + + + + First Fleet (set 4) + 19?? + Education Department of Western Australia + + + + + + + + + + Microbee Lines v0.1 + 1987 + Microbee Systems + + + + + + + + + + Wordstar 4.0 + 19?? + <unknown> + + + + + + + + + + Millionwaire 3.0 (set 1) + 19?? + <unknown> + + + + + + + + + + Millionwaire 3.0 (set 2) + 19?? + <unknown> + + + + + + + + + + premium2 + 19?? + <unknown> + + + + + + + + + + premium1 + 19?? + <unknown> + + + + + + + + + + Simply Write v2.04 + 19?? + <unknown> + + + + + + + + + + Simply Write v3.02 + 19?? + <unknown> + + + + + + + + + + Simply Write v3.03 + 19?? + <unknown> + + + + + + + + + + Simply Write Font Editor v2.04 + 19?? + <unknown> + + + + + + + + + + Storymaker 128k + 19?? + <unknown> + + + + + + + + + + Tantrix + 19?? + <unknown> + + + + + + + + + + The Mob From Evil + 19?? + Kerwin Software + + + + + + + + + + + + + + + + 256tc_diagnostics + 19?? + <unknown> + + + + + + + + + + 256tc_system_master + 19?? + <unknown> + + + + + + + + + + 256tc_utility_disk_rel2 + 19?? + <unknown> + + + + + + + + + + 256tc_intro + 19?? + <unknown> + + + + + + + + + + 256tc_system_disk_rel1_1987 + 19?? + <unknown> + + + + + + + + + + 256tc_system_disk_rel2_1987 + 19?? + <unknown> + + + + + + + + + + 256tc_system_disk_rel3_1988/06 + 19?? + <unknown> + + + + + + + + + + 256tc_system_disk_rel4_1988/09 + 19?? + <unknown> + + + + + + + + + + bwmod + 19?? + <unknown> + + + + + + + + + + Hoards of the Deep Realm 11t (set 1) + 19?? + <unknown> + + + + + + + + + + Hoards of the Deep Realm 11t (set 2) + 19?? + <unknown> + + + + + + + + + + ORAC Explorers + 19?? + <unknown> + + + + + + + + + + Storymaker 256tc + 19?? + <unknown> + + + + + + + + + diff --git a/src/mame/drivers/mbee.cpp b/src/mame/drivers/mbee.cpp index 197cbd9d271..bd14a316709 100644 --- a/src/mame/drivers/mbee.cpp +++ b/src/mame/drivers/mbee.cpp @@ -433,7 +433,7 @@ static INPUT_PORTS_START( mbee128 ) PORT_CONFSETTING( 0x20, "Amber") PORT_CONFSETTING( 0x30, "White") // Wire links on motherboard - PORT_CONFNAME( 0xc0, 0x40, "PIO B7") + PORT_CONFNAME( 0xc0, 0x80, "PIO B7") PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock PORT_CONFSETTING( 0x40, "RTC") // RTC IRQ for clock PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc @@ -568,7 +568,7 @@ static INPUT_PORTS_START( mbee256 ) PORT_CONFSETTING( 0x00, DEF_STR(No)) PORT_CONFSETTING( 0x01, DEF_STR(Yes)) // Wire links on motherboard - PORT_CONFNAME( 0xc0, 0x40, "PIO B7") + PORT_CONFNAME( 0xc0, 0x80, "PIO B7") PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock PORT_CONFSETTING( 0x40, "RTC") // RTC IRQ must be used on teleterm PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc -- cgit v1.2.3 From 9880ff58e2109a6357d4c1d018733eb42f533501 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Thu, 10 Jun 2021 09:04:34 +0200 Subject: ipf: Wrap the decoding state in a sub-structure --- src/lib/formats/ipf_dsk.cpp | 79 +++++++++++---------------- src/lib/formats/ipf_dsk.h | 128 ++++++++++++++++++++++---------------------- 2 files changed, 95 insertions(+), 112 deletions(-) diff --git a/src/lib/formats/ipf_dsk.cpp b/src/lib/formats/ipf_dsk.cpp index 066d9ff62a6..0f1725f5c14 100644 --- a/src/lib/formats/ipf_dsk.cpp +++ b/src/lib/formats/ipf_dsk.cpp @@ -7,24 +7,6 @@ const floppy_format_type FLOPPY_IPF_FORMAT = &floppy_image_format_creator; -ipf_format::ipf_format() : - tinfos(), - tcount(0), - type(0), - release(0), - revision(0), - encoder_type(0), - encoder_revision(0), - origin(0), - min_cylinder(0), - max_cylinder(0), - min_head(0), - max_head(0), - credit_day(0), - credit_time(0) -{ -} - const char *ipf_format::name() const { return "ipf"; @@ -59,20 +41,21 @@ int ipf_format::identify(io_generic *io, uint32_t form_factor, const std::vector bool ipf_format::load(io_generic *io, uint32_t form_factor, const std::vector &variants, floppy_image *image) { + ipf_decode dec; uint64_t size = io_generic_size(io); std::vector data(size); io_generic_read(io, &data[0], 0, size); - bool res = parse(data, image); + bool res = dec.parse(data, image); return res; } -uint32_t ipf_format::r32(const uint8_t *p) +uint32_t ipf_format::ipf_decode::r32(const uint8_t *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; } -uint32_t ipf_format::rb(const uint8_t *&p, int count) +uint32_t ipf_format::ipf_decode::rb(const uint8_t *&p, int count) { uint32_t v = 0; for(int i=0; i &data, floppy_image *image) +bool ipf_format::ipf_decode::parse(std::vector &data, floppy_image *image) { image->set_variant(floppy_image::DSDD); // Not handling anything else yet tcount = 84*2+1; // Usual max @@ -107,7 +90,7 @@ bool ipf_format::parse(std::vector &data, floppy_image *image) return res; } -bool ipf_format::parse_info(const uint8_t *info) +bool ipf_format::ipf_decode::parse_info(const uint8_t *info) { type = r32(info+12); if(type != 1) @@ -130,7 +113,7 @@ bool ipf_format::parse_info(const uint8_t *info) return true; } -ipf_format::track_info *ipf_format::get_index(uint32_t idx) +ipf_format::ipf_decode::track_info *ipf_format::ipf_decode::get_index(uint32_t idx) { if(idx > 1000) return nullptr; @@ -142,7 +125,7 @@ ipf_format::track_info *ipf_format::get_index(uint32_t idx) return &tinfos[idx]; } -bool ipf_format::parse_imge(const uint8_t *imge) +bool ipf_format::ipf_decode::parse_imge(const uint8_t *imge) { track_info *t = get_index(r32(imge+64)); if(!t) @@ -176,7 +159,7 @@ bool ipf_format::parse_imge(const uint8_t *imge) return true; } -bool ipf_format::parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size) +bool ipf_format::ipf_decode::parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size) { track_info *t = get_index(r32(data+24)); if(!t) @@ -193,7 +176,7 @@ bool ipf_format::parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_ext return true; } -bool ipf_format::scan_one_tag(std::vector &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize) +bool ipf_format::ipf_decode::scan_one_tag(std::vector &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize) { if(data.size()-pos < 12) return false; @@ -209,7 +192,7 @@ bool ipf_format::scan_one_tag(std::vector &data, uint32_t &pos, uint8_t return true; } -bool ipf_format::scan_all_tags(std::vector &data) +bool ipf_format::ipf_decode::scan_all_tags(std::vector &data) { uint32_t pos = 0; uint32_t size = data.size(); @@ -254,7 +237,7 @@ bool ipf_format::scan_all_tags(std::vector &data) return true; } -bool ipf_format::generate_tracks(floppy_image *image) +bool ipf_format::ipf_decode::generate_tracks(floppy_image *image) { for(uint32_t i = 0; i != tcount; i++) { track_info *t = &tinfos[i]; @@ -268,7 +251,7 @@ bool ipf_format::generate_tracks(floppy_image *image) return true; } -void ipf_format::rotate(std::vector &track, uint32_t offset, uint32_t size) +void ipf_format::ipf_decode::rotate(std::vector &track, uint32_t offset, uint32_t size) { uint32_t done = 0; for(uint32_t bpos=0; done < size; bpos++) { @@ -289,7 +272,7 @@ void ipf_format::rotate(std::vector &track, uint32_t offset, uint32_t } } -void ipf_format::mark_track_splice(std::vector &track, uint32_t offset, uint32_t size) +void ipf_format::ipf_decode::mark_track_splice(std::vector &track, uint32_t offset, uint32_t size) { for(int i=0; i<3; i++) { uint32_t pos = (offset + i) % size; @@ -302,13 +285,13 @@ void ipf_format::mark_track_splice(std::vector &track, uint32_t offset } } -void ipf_format::timing_set(std::vector &track, uint32_t start, uint32_t end, uint32_t time) +void ipf_format::ipf_decode::timing_set(std::vector &track, uint32_t start, uint32_t end, uint32_t time) { for(uint32_t i=start; i != end; i++) track[i] = (track[i] & floppy_image::MG_MASK) | time; } -bool ipf_format::generate_timings(track_info *t, std::vector &track, const std::vector &data_pos, const std::vector &gap_pos) +bool ipf_format::ipf_decode::generate_timings(track_info *t, std::vector &track, const std::vector &data_pos, const std::vector &gap_pos) { timing_set(track, 0, t->size_cells, 2000); @@ -386,7 +369,7 @@ bool ipf_format::generate_timings(track_info *t, std::vector &track, c return true; } -bool ipf_format::generate_track(track_info *t, floppy_image *image) +bool ipf_format::ipf_decode::generate_track(track_info *t, floppy_image *image) { if(!t->size_cells) return true; @@ -434,7 +417,7 @@ bool ipf_format::generate_track(track_info *t, floppy_image *image) return true; } -void ipf_format::track_write_raw(std::vector::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context) +void ipf_format::ipf_decode::track_write_raw(std::vector::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context) { for(uint32_t i=0; i != cells; i++) *tpos++ = data[i>>3] & (0x80 >> (i & 7)) ? MG_1 : MG_0; @@ -442,7 +425,7 @@ void ipf_format::track_write_raw(std::vector::iterator &tpos, const ui context = tpos[-1] == MG_1; } -void ipf_format::track_write_mfm(std::vector::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context) +void ipf_format::ipf_decode::track_write_mfm(std::vector::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context) { patlen *= 2; for(uint32_t i=0; i != cells; i++) { @@ -456,13 +439,13 @@ void ipf_format::track_write_mfm(std::vector::iterator &tpos, const ui } } -void ipf_format::track_write_weak(std::vector::iterator &tpos, uint32_t cells) +void ipf_format::ipf_decode::track_write_weak(std::vector::iterator &tpos, uint32_t cells) { for(uint32_t i=0; i != cells; i++) *tpos++ = floppy_image::MG_N; } -bool ipf_format::generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, std::vector::iterator tlimit, bool &context) +bool ipf_format::ipf_decode::generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, std::vector::iterator tlimit, bool &context) { for(;;) { if(data >= dlimit) @@ -504,7 +487,7 @@ bool ipf_format::generate_block_data(const uint8_t *data, const uint8_t *dlimit, } } -bool ipf_format::generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector::iterator &tpos, bool &context) +bool ipf_format::ipf_decode::generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector::iterator &tpos, bool &context) { spos = ipos >= 16 && ipos+16 <= gap_cells ? ipos : gap_cells >> 1; track_write_mfm(tpos, &pattern, 0, 8, spos, context); @@ -517,7 +500,7 @@ bool ipf_format::generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint3 return true; } -bool ipf_format::gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size) +bool ipf_format::ipf_decode::gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size) { res_size = 0; for(;;) { @@ -542,7 +525,7 @@ bool ipf_format::gap_description_to_reserved_size(const uint8_t *&data, const ui } } -bool ipf_format::generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector::iterator tpos, uint32_t size, bool pre, bool &context) +bool ipf_format::ipf_decode::generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector::iterator tpos, uint32_t size, bool pre, bool &context) { const uint8_t *data1 = data; uint32_t res_size; @@ -612,7 +595,7 @@ bool ipf_format::generate_gap_from_description(const uint8_t *&data, const uint8 } -bool ipf_format::generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context) +bool ipf_format::ipf_decode::generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context) { if(ipos >= 16 && ipos < gap_cells-16) spos = ipos; @@ -621,7 +604,7 @@ bool ipf_format::generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32 return generate_gap_from_description(data, dlimit, tpos, gap_cells, true, context); } -bool ipf_format::generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context) +bool ipf_format::ipf_decode::generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context) { if(ipos >= 16 && ipos < gap_cells-16) spos = ipos; @@ -630,7 +613,7 @@ bool ipf_format::generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32 return generate_gap_from_description(data, dlimit, tpos, gap_cells, false, context); } -bool ipf_format::generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context) +bool ipf_format::ipf_decode::generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context) { if(ipos >= 16 && ipos < gap_cells-16) spos = ipos; @@ -657,7 +640,7 @@ bool ipf_format::generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32 return generate_gap_from_description(data, dlimit, tpos+spos+delta, gap_cells - spos - delta, false, context); } -bool ipf_format::generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, bool &context) +bool ipf_format::ipf_decode::generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, bool &context) { switch(gap_type) { case 0: @@ -673,7 +656,7 @@ bool ipf_format::generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8 } } -bool ipf_format::generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context) +bool ipf_format::ipf_decode::generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context) { const uint8_t *data = t->data; const uint8_t *data_end = t->data + t->data_size; @@ -705,7 +688,7 @@ bool ipf_format::generate_block(track_info *t, uint32_t idx, uint32_t ipos, std: return true; } -uint32_t ipf_format::block_compute_real_size(track_info *t) +uint32_t ipf_format::ipf_decode::block_compute_real_size(track_info *t) { uint32_t size = 0; const uint8_t *thead = t->data; diff --git a/src/lib/formats/ipf_dsk.h b/src/lib/formats/ipf_dsk.h index a2e4bee2a79..82447da3297 100644 --- a/src/lib/formats/ipf_dsk.h +++ b/src/lib/formats/ipf_dsk.h @@ -12,8 +12,6 @@ class ipf_format : public floppy_image_format_t { public: - ipf_format(); - virtual int identify(io_generic *io, uint32_t form_factor, const std::vector &variants) override; virtual bool load(io_generic *io, uint32_t form_factor, const std::vector &variants, floppy_image *image) override; @@ -23,69 +21,71 @@ public: virtual bool supports_save() const override; private: - struct track_info { - uint32_t cylinder = 0, head = 0, type = 0; - uint32_t sigtype = 0, process = 0, reserved[3] = { 0, 0, 0 }; - uint32_t size_bytes = 0, size_cells = 0; - uint32_t index_bytes = 0, index_cells = 0; - uint32_t datasize_cells = 0, gapsize_cells = 0; - uint32_t block_count = 0, weak_bits = 0; - - uint32_t data_size_bits = 0; - - bool info_set = false; - - const uint8_t *data = nullptr; - uint32_t data_size = 0; + struct ipf_decode { + struct track_info { + uint32_t cylinder = 0, head = 0, type = 0; + uint32_t sigtype = 0, process = 0, reserved[3] = { 0, 0, 0 }; + uint32_t size_bytes = 0, size_cells = 0; + uint32_t index_bytes = 0, index_cells = 0; + uint32_t datasize_cells = 0, gapsize_cells = 0; + uint32_t block_count = 0, weak_bits = 0; + + uint32_t data_size_bits = 0; + + bool info_set = false; + + const uint8_t *data = nullptr; + uint32_t data_size = 0; + }; + + std::vector tinfos; + uint32_t tcount = 0; + + uint32_t type = 0, release = 0, revision = 0; + uint32_t encoder_type = 0, encoder_revision = 0, origin = 0; + uint32_t min_cylinder = 0, max_cylinder = 0, min_head = 0, max_head = 0; + uint32_t credit_day = 0, credit_time = 0; + uint32_t platform[4] = {}, extra[5] = {}; + + uint32_t crc32r(const uint8_t *data, uint32_t size); + + bool parse_info(const uint8_t *info); + bool parse_imge(const uint8_t *imge); + bool parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size); + + bool scan_one_tag(std::vector &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize); + bool scan_all_tags(std::vector &data); + static uint32_t r32(const uint8_t *p); + static uint32_t rb(const uint8_t *&p, int count); + + track_info *get_index(uint32_t idx); + + void track_write_raw(std::vector::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context); + void track_write_mfm(std::vector::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context); + void track_write_weak(std::vector::iterator &tpos, uint32_t cells); + bool generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, std::vector::iterator tlimit, bool &context); + + bool gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size); + bool generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector::iterator tpos, uint32_t size, bool pre, bool &context); + bool generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector::iterator &tpos, bool &context); + bool generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context); + bool generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context); + bool generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context); + bool generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, bool &context); + + bool generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context); + uint32_t block_compute_real_size(track_info *t); + + void timing_set(std::vector &track, uint32_t start, uint32_t end, uint32_t time); + bool generate_timings(track_info *t, std::vector &track, const std::vector &data_pos, const std::vector &gap_pos); + + void rotate(std::vector &track, uint32_t offset, uint32_t size); + void mark_track_splice(std::vector &track, uint32_t offset, uint32_t size); + bool generate_track(track_info *t, floppy_image *image); + bool generate_tracks(floppy_image *image); + + bool parse(std::vector &data, floppy_image *image); }; - - std::vector tinfos; - uint32_t tcount; - - uint32_t type, release, revision; - uint32_t encoder_type, encoder_revision, origin; - uint32_t min_cylinder, max_cylinder, min_head, max_head; - uint32_t credit_day, credit_time; - uint32_t platform[4], extra[5]; - - uint32_t crc32r(const uint8_t *data, uint32_t size); - - bool parse_info(const uint8_t *info); - bool parse_imge(const uint8_t *imge); - bool parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size); - - bool scan_one_tag(std::vector &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize); - bool scan_all_tags(std::vector &data); - static uint32_t r32(const uint8_t *p); - static uint32_t rb(const uint8_t *&p, int count); - - track_info *get_index(uint32_t idx); - - void track_write_raw(std::vector::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context); - void track_write_mfm(std::vector::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context); - void track_write_weak(std::vector::iterator &tpos, uint32_t cells); - bool generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, std::vector::iterator tlimit, bool &context); - - bool gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size); - bool generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector::iterator tpos, uint32_t size, bool pre, bool &context); - bool generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector::iterator &tpos, bool &context); - bool generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context); - bool generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context); - bool generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator &tpos, bool &context); - bool generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector::iterator tpos, bool &context); - - bool generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context); - uint32_t block_compute_real_size(track_info *t); - - void timing_set(std::vector &track, uint32_t start, uint32_t end, uint32_t time); - bool generate_timings(track_info *t, std::vector &track, const std::vector &data_pos, const std::vector &gap_pos); - - void rotate(std::vector &track, uint32_t offset, uint32_t size); - void mark_track_splice(std::vector &track, uint32_t offset, uint32_t size); - bool generate_track(track_info *t, floppy_image *image); - bool generate_tracks(floppy_image *image); - - bool parse(std::vector &data, floppy_image *image); }; extern const floppy_format_type FLOPPY_IPF_FORMAT; -- cgit v1.2.3 From d9363818723bb62e1e9c1f5c6e368c8e223c5e21 Mon Sep 17 00:00:00 2001 From: r09 Date: Thu, 10 Jun 2021 12:31:16 +0200 Subject: mac_hdflop.xml: second batch of additions, rename clarisw20sv - Renamed "ClarisWorks 2.0 (Swedish)" to "ClarisWorks 3.0Sv1 (Swedish)", the version number was incorrect New working software list additions ----------------------------------- Apple Network Administration Toolkit 1.0 [WinWorld] Apple Network Administration Toolkit 1.0 Updates [WinWorld] Apple Network Administration Toolkit 2.0 Updates [WinWorld] Claris Organizer 2.0v1 [WinWorld] ClarisWorks 2.0CDv1 (UK English) [WinWorld] ClarisWorks 3.0CDv1 (UK English) [WinWorld] ClarisWorks 4.0v4 (US English) [WinWorld] ClarisWorks 4.0Sv1 (Swedish) [WinWorld] FoxBASE+/Mac 2.00 [WinWorld] FrameMaker 4.0.2 [WinWorld] FrameMaker 5.0 [WinWorld] Microsoft Excel 5.0 (German) [WinWorld] Microsoft Excel 5.0a (US English) [WinWorld] Microsoft FoxPro 2.5c (French) [WinWorld] Microsoft FoxPro 2.5c (German) [WinWorld] Microsoft Office 4.2 (Australian English) [WinWorld] Microsoft Office 4.2 (Danish) [WinWorld] Microsoft Office 4.2 (Dutch) [WinWorld] Microsoft Office 4.2 (French) [WinWorld] Microsoft Office 4.2 (Italian) [WinWorld] Microsoft Office 4.2 (Norwegian) [WinWorld] Microsoft Office 4.2 (Swedish) [WinWorld] Microsoft Office 4.2 (US English) [WinWorld] Microsoft Office 4.2.1 (US English) [WinWorld] Microsoft Office Manager 4.2 (German) [WinWorld] Microsoft PowerPoint 3.0b [WinWorld] Microsoft PowerPoint 4.0 (German) [WinWorld] Microsoft PowerPoint 4.0 (Italian) [WinWorld] Microsoft PowerPoint 4.0 (Swedish) [WinWorld] Microsoft Word 6.0 (Canadian French) [WinWorld] Microsoft Word 6.0 (Danish) [WinWorld] Microsoft Word 6.0 (Dutch) [WinWorld] Microsoft Word 6.0 (French) [WinWorld] Microsoft Word 6.0 (German) [WinWorld] Microsoft Word 6.0 (Italian) [WinWorld] Microsoft Word 6.0 (International English) [WinWorld] Microsoft Word 6.0 (Japanese) [WinWorld] Microsoft Word 6.0 (Swedish) [WinWorld] Microsoft Word 6.0a (Norwegian) [WinWorld] Norton Utilities for Macintosh 3.1.3 [WinWorld] Norton Utilities for Macintosh 3.2.1 [WinWorld] Norton Utilities for Macintosh 3.5.3 [WinWorld] PlainTalk 1.2.1 [WinWorld] QuarkXPress 2.11 (French) [WinWorld] QuarkXPress 3.3 (English) [WinWorld] Ready, Set, Go! 4.5a [WinWorld] Symantec C++ for Macintosh 7.0 [WinWorld] WordPerfect 3.1 [WinWorld] WordPerfect 3.5 [WinWorld] New not working software list additions --------------------------------------- Matlab 4.0 Student Edition [WinWorld] Microsoft Works 4.0b (Australian English, Power Macintosh upgrade) [WinWorld] Microsoft Works 4.0b (German, Power Macintosh upgrade) [WinWorld] Microsoft Works 4.0b (International English, Power Macintosh upgrade) [WinWorld] Microsoft Works 4.0b (US English, Power Macintosh upgrade) [WinWorld] SoftWindows 3.0 [WinWorld] --- hash/mac_hdflop.xml | 4838 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 4517 insertions(+), 321 deletions(-) diff --git a/hash/mac_hdflop.xml b/hash/mac_hdflop.xml index adbe8f239a0..a1748958c8d 100644 --- a/hash/mac_hdflop.xml +++ b/hash/mac_hdflop.xml @@ -2638,679 +2638,4779 @@ license:CC0 - - - ClarisWorks 2.0 (Swedish) - 1993 + + Claris Organizer 2.0v1 + 1996 Claris - + - + + - + + - + - + + + + ClarisWorks 2.0CDv1 (UK English) + 1993 + Claris + + - + - + + - + - - Adobe Dimensions 2.0 + + ClarisWorks 3.0CDv1 (UK English) 1994 - Adobe + Claris - + - + - + - + - - GayBlade - 1992 - RJBest + + + ClarisWorks 3.0Sv1 (Swedish) + 1994 + Claris + - + + + + + + + + + + + + + + + + + + + + + + + + + - - Adobe Illustrator 5.5 - 1994 - Adobe + + ClarisWorks 4.0v4 (US English) + 1996 + Claris - + - + - + - + - + - + - - - - - - - + - - Lost in Time - Parts 1 & 2 - 1994 - Coktel Vision - + + ClarisWorks 4.0Sv1 (Swedish) + 1996 + Claris - - - + + + - - - + + + - - - + + + - + - + - + - + - + - - - - - - - + - - + + + + Adobe Dimensions 2.0 + 1994 + Adobe + + - + - - + + - - - - - - - + - - + + - + - - - - + + + + - - - Central Point MacTools 3.0a - 1993 - Central Point Software + + Microsoft Excel 5.0a (US English) + 1995 + Microsoft - + - + - + - + - + - + - - - + + + - + - + - + - + - - - - MacWrite Pro 1.5v3 - 1994 - Claris - - + + - + - - + + - + - - + + - + - - - - MacWrite Pro 1.5v1 - 1993 - Claris - - + + - + - - + + - + + + + + + + + + + + + + - - Aldus PageMaker 5.0 (English) - 1993 - Aldus + + Microsoft Excel 5.0 (German) + 1995 + Microsoft - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - Aldus PageMaker 5.0 (Danish) - 1993 - Aldus - - - - + + + + - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + FoxBASE+/Mac 2.00 + 1989 + Fox Software + + + + + + + + + + + + + + + + Microsoft FoxPro 2.5c (German) + 1994 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft FoxPro 2.5c (French) + 1994 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FrameMaker 4.0.2 + 1994 + Frame Technology + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FrameMaker 5.0 + 1995 + Frame Technology + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GayBlade + 1992 + RJBest + + + + + + + + + Adobe Illustrator 5.5 + 1994 + Adobe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lost in Time - Parts 1 & 2 + 1994 + Coktel Vision + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Central Point MacTools 3.0a + 1993 + Central Point Software + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MacWrite Pro 1.5v3 + 1994 + Claris + + + + + + + + + + + + + + + + + + + + + + MacWrite Pro 1.5v1 + 1993 + Claris + + + + + + + + + + + + + + + + + Matlab 4.0 Student Edition + 1995 + The MathWorks + + + + + + + + + + + + + + + + + + + + + + Apple Network Administration Toolkit 1.0 + 1996 + Apple + + + + + + + + + + + + + + + + + + + + + + + + + + + + Apple Network Administration Toolkit 1.0 Updates + 1996 + Apple + + + + + + + + + + + + + + + + Apple Network Administration Toolkit 2.0 Updates + 1998 + Apple + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Norton Utilities for Macintosh 3.1.3 + 1994 + Symantec + + + + + + + + + + + + + + + + + + + + + + + + + + + + Norton Utilities for Macintosh 3.2.1 + 1995 + Symantec + + + + + + + + + + + + + + + + + + + + + + + + + + + + Norton Utilities for Macintosh 3.5.3 + 1998 + Symantec + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (US English) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (Australian English) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (Danish) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (French) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (Italian) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (Dutch) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (Norwegian) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2 (Swedish) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office 4.2.1 (US English) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office Manager 4.2 (German) + 1995 + Microsoft + + + + + + + + + + + + + + + + PlainTalk 1.2.1 + 1994 + Apple + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aldus PageMaker 5.0 (English) + 1993 + Aldus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aldus PageMaker 5.0 (Danish) + 1993 + Aldus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aldus PageMaker 5.0 (German) + 1993 + Aldus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aldus PageMaker 5.0 (Swedish) + 1993 + Aldus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft PowerPoint 3.0b + 1993 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft PowerPoint 4.0 (English) + 1994 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft PowerPoint 4.0 (German) + 1994 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft PowerPoint 4.0 (Italian) + 1994 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft PowerPoint 4.0 (Swedish) + 1994 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QuarkXPress 2.11 (French) + 1989 + Quark + + + + + + + + + QuarkXPress 3.3 (English) + 1994 + Quark + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ready, Set, Go! 4.5a + 1989 + Manhattan Graphics + + + + + + + + + + Macintosh Student Essentials + 1994 + WordPerfect + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SoftWindows 3.0 + 1996 + Insignia Solutions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Symantec C++ for Macintosh 6.0 + 1993 + Symantec + + + + + + + + + + + + + + + + + + + + + + Symantec C++ for Macintosh 7.0 + 1994 + Symantec + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vellum 3D 2.6.9 + 1994 + Ashlar + + + + + + + + + + + + + + + + Microsoft Word 6.0 (International English) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Word 6.0 (Danish) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Word 6.0 (German) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Word 6.0 (French) + 1995 + Microsoft + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Word 6.0 (Canadian French) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Word 6.0 (Italian) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Word 6.0 (Japanese) + 1995 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - Aldus PageMaker 5.0 (German) - 1993 - Aldus + + Microsoft Word 6.0 (Dutch) + 1995 + Microsoft - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + - + - - Aldus PageMaker 5.0 (Swedish) - 1993 - Aldus + + Microsoft Word 6.0 (Swedish) + 1995 + Microsoft - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + + + + + + + + + + + + + - - Microsoft PowerPoint 4.0 - 1994 + + Microsoft Word 6.0a (Norwegian) + 1995 Microsoft - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + + Microsoft Works 4.0b (US English, Power Macintosh upgrade) + 1995 + Microsoft + + + + - - - - + + + + - - - - + + + + + + + + + + - - - Macintosh Student Essentials - 1994 - WordPerfect + + + Microsoft Works 4.0b (Australian English, Power Macintosh upgrade) + 1995 + Microsoft - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - + + + - - Symantec C++ for Macintosh 6.0 - 1993 - Symantec + + + Microsoft Works 4.0b (German, Power Macintosh upgrade) + 1995 + Microsoft - - - + + + - - - + + + - - - + + + + + + + + + - - - Vellum 3D 2.6.9 - 1994 - Ashlar + + + Microsoft Works 4.0b (International English, Power Macintosh upgrade) + 1995 + Microsoft - - - + + + - - - + + + + + + + + + + + + + + + @@ -3350,4 +7450,100 @@ license:CC0 + + + WordPerfect 3.1 + 1994 + Novell + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WordPerfect 3.5 + 1995 + Novell + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 5418036c28e95b5141a3a154cfa4ddd96cd55b36 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Thu, 10 Jun 2021 20:55:16 +1000 Subject: New working software list additions ----------------------------------- mbee_cart: Pascal [Robbbert] --- hash/mbee_cart.xml | 80 +++++++++++++++++++++++++++++------------------ src/mame/machine/mbee.cpp | 13 +++++--- 2 files changed, 57 insertions(+), 36 deletions(-) diff --git a/hash/mbee_cart.xml b/hash/mbee_cart.xml index d6ffc859388..326ff054a4b 100644 --- a/hash/mbee_cart.xml +++ b/hash/mbee_cart.xml @@ -40,7 +40,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t FORTH v1.0 198? <unknown> - + @@ -53,7 +53,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t FORTH v1.1 198? <unknown> - + @@ -66,7 +66,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t OZLOGO 1983 <unknown> - + @@ -79,7 +79,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Sargon Chess 198? <unknown> - + @@ -92,7 +92,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t HELP (set 1) 198? <unknown> - + @@ -105,7 +105,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t HELP (set 2) 198? <unknown> - + @@ -118,7 +118,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Mydas Dissassembler 1984 Mytek - + @@ -131,7 +131,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Super Disassembler 3.0 1983 <unknown> - + @@ -144,7 +144,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Mytek Word Processor 198? Mytek - + @@ -157,7 +157,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Microspace Invaders 1983 <unknown> - + @@ -170,7 +170,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Survivor 198? <unknown> - + @@ -183,7 +183,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Typing Tutor 198? <unknown> - + @@ -196,7 +196,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Wordbee 1.0 1982 Microworld - + @@ -209,7 +209,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Wordbee 1.2 1982 Microworld - + @@ -222,7 +222,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Wordbee 1.2 (Swedish) 1982 Microworld - + @@ -235,7 +235,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Wordbee 1.3 1982 Microworld - + @@ -248,7 +248,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Wordbee 1.3 Rel 3 1982 Microworld - + @@ -261,7 +261,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Wordbee 2.0 (Swedish) 1982 Microworld - + @@ -468,7 +468,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Viatel 2.0 198? Microworld - + @@ -481,7 +481,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Viatel 2.2 198? Microworld - + @@ -494,7 +494,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Viatel 2.3 198? Microworld - + @@ -507,7 +507,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Videotex 1.1 (Swedish) 198? Microworld - + @@ -520,7 +520,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Videotex 2.34 198? Microworld - + @@ -533,7 +533,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Videotex 2.35 198? Microworld - + @@ -546,7 +546,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Shell (pc85) 198? Microworld - + @@ -559,7 +559,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Shell (pc85b) 198? Microworld - + @@ -572,7 +572,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Shell (ppc85) 198? Microworld - + @@ -585,7 +585,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Shell (pc85s) 198? Microworld - + @@ -598,7 +598,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Graphics / Database 198? Microworld - + @@ -611,7 +611,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Graphics (Swedish) 198? Microworld - + @@ -624,7 +624,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t Database (Swedish) 198? Microworld - + @@ -633,4 +633,22 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t + + Pascal + 198? + Microworld + + + + + + + + + + + + + + diff --git a/src/mame/machine/mbee.cpp b/src/mame/machine/mbee.cpp index 34b7b673093..68fb2e446ee 100644 --- a/src/mame/machine/mbee.cpp +++ b/src/mame/machine/mbee.cpp @@ -768,12 +768,15 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s // Validate the rom logerror ("Rom header = %02X %02X %02X\n", slot->read_rom(0), slot->read_rom(1), slot->read_rom(2)); - if ((slot->read_rom(0) != 0xc3) || ((slot->read_rom(2) & 0xf0) != 0xe0)) + if (!image.loaded_through_softlist()) // need to let pascal through without testing { - image.seterror(IMAGE_ERROR_UNSPECIFIED, "Not a NET rom"); - slot->call_unload(); - m_pak_extended[pak_index] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false; - return image_init_result::FAIL; + if ((slot->read_rom(0) != 0xc3) || ((slot->read_rom(2) & 0xf0) != 0xe0)) + { + image.seterror(IMAGE_ERROR_UNSPECIFIED, "Not a NET rom"); + slot->call_unload(); + m_pak_extended[pak_index] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false; + return image_init_result::FAIL; + } } } -- cgit v1.2.3 From bf378e22f4bfff2c27f6bedfcea44c6feb6ac420 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 10 Jun 2021 09:35:16 -0400 Subject: emumem: Correct logic in populate_mismatched_nomirror and populate_passthrough_nomirror. This fixes a bug causing watchpoints set on portions of the address space exceeding 16K to sometimes not fully cover the range. --- src/emu/emumem_hedr.ipp | 54 ++++++++++++++++++++++++------------------------- src/emu/emumem_hedw.ipp | 48 ++++++++++++++++++++----------------------- 2 files changed, 49 insertions(+), 53 deletions(-) diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp index 5af8664932b..460735a2f63 100644 --- a/src/emu/emumem_hedr.ipp +++ b/src/emu/emumem_hedr.ipp @@ -183,7 +183,7 @@ template void handl range_cut_before(ostart-1, start_entry); range_cut_after(oend+1, end_entry); - if(LowBits <= Width + AddrShift) { + if constexpr(LowBits <= Width + AddrShift) { if(handler->is_view()) handler->init_handlers(start_entry, end_entry, LowBits, m_u_dispatch, m_u_ranges); handler->ref(end_entry - start_entry); @@ -317,7 +317,7 @@ template void handl range_cut_before(ostart-1, start_entry); range_cut_after(oend+1, end_entry); - if(LowBits <= Width + AddrShift) { + if constexpr(LowBits <= Width + AddrShift) { for(offs_t ent = start_entry; ent <= end_entry; ent++) { u8 rkey1 = rkey; if(ent != start_entry) @@ -331,7 +331,7 @@ template void handl } else if(start_entry == end_entry) { if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) { if(m_u_dispatch[start_entry]->is_dispatch()) - m_u_dispatch[start_entry]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey, mappings); + m_u_dispatch[start_entry]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey, mappings); else { mismatched_patch(descriptor, rkey, mappings, m_u_dispatch[start_entry]); m_u_ranges[start_entry].set(ostart, oend); @@ -351,19 +351,17 @@ template void handl rkey &= ~handler_entry::END; } - if(start_entry <= end_entry) { - for(offs_t ent = start_entry; ent <= end_entry; ent++) { - u8 rkey1 = rkey; - if(ent != start_entry) - rkey1 &= ~handler_entry::START; - if(ent != end_entry) - rkey1 &= ~handler_entry::END; - if(m_u_dispatch[ent]->is_dispatch()) - m_u_dispatch[ent]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey1, mappings); - else { - mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]); - m_u_ranges[ent].set(ostart, oend); - } + for(offs_t ent = start_entry; ent <= end_entry; ent++) { + u8 rkey1 = rkey; + if(ent != start_entry) + rkey1 &= ~handler_entry::START; + if(ent != end_entry) + rkey1 &= ~handler_entry::END; + if(m_u_dispatch[ent]->is_dispatch()) + m_u_dispatch[ent]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey1, mappings); + else { + mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]); + m_u_ranges[ent].set(ostart, oend); } } } @@ -448,7 +446,7 @@ template void handl range_cut_before(ostart-1, start_entry); range_cut_after(oend+1, end_entry); - if(LowBits <= Width + AddrShift) { + if constexpr(LowBits <= Width + AddrShift) { for(offs_t ent = start_entry; ent <= end_entry; ent++) { passthrough_patch(handler, mappings, m_u_dispatch[ent]); m_u_ranges[ent].intersect(ostart, oend); @@ -456,8 +454,12 @@ template void handl } else if(start_entry == end_entry) { if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) { - passthrough_patch(handler, mappings, m_u_dispatch[start_entry]); - m_u_ranges[start_entry].intersect(ostart, oend); + if(m_u_dispatch[start_entry]->is_dispatch()) + m_u_dispatch[start_entry]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings); + else { + passthrough_patch(handler, mappings, m_u_dispatch[start_entry]); + m_u_ranges[start_entry].intersect(ostart, oend); + } } else populate_passthrough_nomirror_subdispatch(start_entry, start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings); @@ -471,14 +473,12 @@ template void handl end_entry--; } - if(start_entry <= end_entry) { - for(offs_t ent = start_entry; ent <= end_entry; ent++) { - if(m_u_dispatch[ent]->is_dispatch()) - m_u_dispatch[ent]->populate_passthrough_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings); - else { - passthrough_patch(handler, mappings, m_u_dispatch[ent]); - m_u_ranges[ent].intersect(ostart, oend); - } + for(offs_t ent = start_entry; ent <= end_entry; ent++) { + if(m_u_dispatch[ent]->is_dispatch()) + m_u_dispatch[ent]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings); + else { + passthrough_patch(handler, mappings, m_u_dispatch[ent]); + m_u_ranges[ent].intersect(ostart, oend); } } } diff --git a/src/emu/emumem_hedw.ipp b/src/emu/emumem_hedw.ipp index 1c0a791c569..43ba5768b55 100644 --- a/src/emu/emumem_hedw.ipp +++ b/src/emu/emumem_hedw.ipp @@ -185,7 +185,7 @@ template void handl range_cut_before(ostart-1, start_entry); range_cut_after(oend+1, end_entry); - if(LowBits <= Width + AddrShift) { + if constexpr(LowBits <= Width + AddrShift) { if(handler->is_view()) handler->init_handlers(start_entry, end_entry, LowBits, m_u_dispatch, m_u_ranges); handler->ref(end_entry - start_entry); @@ -319,7 +319,7 @@ template void handl range_cut_before(ostart-1, start_entry); range_cut_after(oend+1, end_entry); - if(LowBits <= Width + AddrShift) { + if constexpr(LowBits <= Width + AddrShift) { for(offs_t ent = start_entry; ent <= end_entry; ent++) { u8 rkey1 = rkey; if(ent != start_entry) @@ -333,7 +333,7 @@ template void handl } else if(start_entry == end_entry) { if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) { if(m_u_dispatch[start_entry]->is_dispatch()) - m_u_dispatch[start_entry]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey, mappings); + m_u_dispatch[start_entry]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey, mappings); else { mismatched_patch(descriptor, rkey, mappings, m_u_dispatch[start_entry]); m_u_ranges[start_entry].intersect(ostart, oend); @@ -353,19 +353,17 @@ template void handl rkey &= ~handler_entry::END; } - if(start_entry <= end_entry) { - for(offs_t ent = start_entry; ent <= end_entry; ent++) { - u8 rkey1 = rkey; - if(ent != start_entry) - rkey1 &= ~handler_entry::START; - if(ent != end_entry) - rkey1 &= ~handler_entry::END; - if(m_u_dispatch[ent]->is_dispatch()) - m_u_dispatch[ent]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey1, mappings); - else { - mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]); - m_u_ranges[ent].intersect(ostart, oend); - } + for(offs_t ent = start_entry; ent <= end_entry; ent++) { + u8 rkey1 = rkey; + if(ent != start_entry) + rkey1 &= ~handler_entry::START; + if(ent != end_entry) + rkey1 &= ~handler_entry::END; + if(m_u_dispatch[ent]->is_dispatch()) + m_u_dispatch[ent]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey1, mappings); + else { + mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]); + m_u_ranges[ent].intersect(ostart, oend); } } } @@ -450,7 +448,7 @@ template void handl range_cut_before(ostart-1, start_entry); range_cut_after(oend+1, end_entry); - if(LowBits <= Width + AddrShift) { + if constexpr(LowBits <= Width + AddrShift) { for(offs_t ent = start_entry; ent <= end_entry; ent++) { passthrough_patch(handler, mappings, m_u_dispatch[ent]); m_u_ranges[ent].intersect(ostart, oend); @@ -459,7 +457,7 @@ template void handl } else if(start_entry == end_entry) { if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) { if(m_u_dispatch[start_entry]->is_dispatch()) - m_u_dispatch[start_entry]->populate_passthrough_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings); + m_u_dispatch[start_entry]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings); else { passthrough_patch(handler, mappings, m_u_dispatch[start_entry]); m_u_ranges[start_entry].intersect(ostart, oend); @@ -477,14 +475,12 @@ template void handl end_entry--; } - if(start_entry <= end_entry) { - for(offs_t ent = start_entry; ent <= end_entry; ent++) { - if(m_u_dispatch[ent]->is_dispatch()) - m_u_dispatch[ent]->populate_passthrough_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings); - else { - passthrough_patch(handler, mappings, m_u_dispatch[ent]); - m_u_ranges[ent].intersect(ostart, oend); - } + for(offs_t ent = start_entry; ent <= end_entry; ent++) { + if(m_u_dispatch[ent]->is_dispatch()) + m_u_dispatch[ent]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings); + else { + passthrough_patch(handler, mappings, m_u_dispatch[ent]); + m_u_ranges[ent].intersect(ostart, oend); } } } -- cgit v1.2.3 From 785f455e4410855f91a89351c34ba3575a68db16 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 10 Jun 2021 09:42:19 -0400 Subject: chexx.cpp: Note existence of another game on similar HW --- src/mame/drivers/chexx.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mame/drivers/chexx.cpp b/src/mame/drivers/chexx.cpp index ab185f04337..40fa111d5c5 100644 --- a/src/mame/drivers/chexx.cpp +++ b/src/mame/drivers/chexx.cpp @@ -71,6 +71,9 @@ exact clone of the 1st generation ICE Chexx hardware (https://www.recreativas.or | x2 T74LS365B1 x2 | |___________ COST _____________ TIME ___| +The electromechanical game Fire Escape (1984, Mech-Tronic Games, Inc.) +appears to run on very similar hardware, with a AY8912 but no Digitalker. + ***************************************************************************/ #include "emu.h" -- cgit v1.2.3 From be9ceecb4ecadf36f4f1810bcbb0213032070134 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 10 Jun 2021 10:13:16 -0400 Subject: m79amb: Modernize interrupt; use raw parameters for screen --- src/mame/drivers/m79amb.cpp | 20 ++++++++++---------- src/mame/includes/m79amb.h | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/mame/drivers/m79amb.cpp b/src/mame/drivers/m79amb.cpp index c855502faa1..1a3416dd16f 100644 --- a/src/mame/drivers/m79amb.cpp +++ b/src/mame/drivers/m79amb.cpp @@ -59,7 +59,6 @@ and two large (paddles pretending to be) guns. #include "emu.h" #include "includes/m79amb.h" -#include "cpu/i8085/i8085.h" #include "screen.h" #include "speaker.h" @@ -185,25 +184,26 @@ static INPUT_PORTS_START( m79amb ) INPUT_PORTS_END -INTERRUPT_GEN_MEMBER(m79amb_state::m79amb_interrupt) +uint8_t m79amb_state::inta_r() { - device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xcf); /* Z80 - RST 08h */ + m_maincpu->set_input_line(0, CLEAR_LINE); + + // Vector is RST 1 + return 0xcf; } void m79amb_state::m79amb(machine_config &config) { /* basic machine hardware */ - I8080(config, m_maincpu, XTAL(19'660'800) / 10); + I8080(config, m_maincpu, 19.6608_MHz_XTAL / 10); m_maincpu->set_addrmap(AS_PROGRAM, &m79amb_state::main_map); - m_maincpu->set_vblank_int("screen", FUNC(m79amb_state::m79amb_interrupt)); + m_maincpu->in_inta_func().set(FUNC(m79amb_state::inta_r)); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); - screen.set_size(32*8, 32*8); - screen.set_visarea(0*8, 32*8-1, 4*8, 32*8-1); + screen.set_raw(19.6608_MHz_XTAL / 4, 320, 0, 256, 262, 32, 256); screen.set_screen_update(FUNC(m79amb_state::screen_update_ramtek)); + screen.screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -214,7 +214,7 @@ void m79amb_state::m79amb(machine_config &config) ROM_START( m79amb ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x2000, "maincpu", 0 ) ROM_LOAD( "m79.10t", 0x0000, 0x0200, CRC(ccf30b1e) SHA1(c1a77f8dc81c491928f81121ca5c9b7f8753794f) ) ROM_LOAD( "m79.9t", 0x0200, 0x0200, CRC(daf807dd) SHA1(16cd9d553bfb111c8380966cbde39dbddd5fe58c) ) ROM_LOAD( "m79.8t", 0x0400, 0x0200, CRC(79fafa02) SHA1(440620f5be44febdd7c64014739dc71fb570cc92) ) diff --git a/src/mame/includes/m79amb.h b/src/mame/includes/m79amb.h index 79579cf7510..1dce0eb9edc 100644 --- a/src/mame/includes/m79amb.h +++ b/src/mame/includes/m79amb.h @@ -5,6 +5,7 @@ #pragma once +#include "cpu/i8085/i8085.h" #include "sound/discrete.h" class m79amb_state : public driver_device @@ -30,8 +31,7 @@ private: void m79amb_8000_w(uint8_t data); void m79amb_8002_w(uint8_t data); void m79amb_8003_w(uint8_t data); - - INTERRUPT_GEN_MEMBER(m79amb_interrupt); + uint8_t inta_r(); void machine_start() override; @@ -42,7 +42,7 @@ private: required_shared_ptr m_videoram; required_shared_ptr m_mask; required_device m_discrete; - required_device m_maincpu; + required_device m_maincpu; output_finder<> m_self_test; -- cgit v1.2.3 From 7b55b281dcfc14a4befabcb359e1c4a0572d27aa Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 11 Jun 2021 00:30:28 +1000 Subject: mbee: fixed bug with telcom bankswitching. --- hash/mbee_cart.xml | 14 +++++++------- src/mame/includes/mbee.h | 5 ++++- src/mame/machine/mbee.cpp | 16 ++++++++-------- src/mame/video/mbee.cpp | 3 +-- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/hash/mbee_cart.xml b/hash/mbee_cart.xml index 326ff054a4b..7ba2b8c4f58 100644 --- a/hash/mbee_cart.xml +++ b/hash/mbee_cart.xml @@ -352,7 +352,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t 198? Microworld - + @@ -365,7 +365,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t 198? Microworld - + @@ -378,7 +378,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t 198? Microworld - + @@ -391,7 +391,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t 198? Microworld - + @@ -404,7 +404,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t 198? Microworld - + @@ -417,7 +417,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t 198? Microworld - + @@ -430,7 +430,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t 198? Microworld - + diff --git a/src/mame/includes/mbee.h b/src/mame/includes/mbee.h index f1248babb4c..04e212d0791 100644 --- a/src/mame/includes/mbee.h +++ b/src/mame/includes/mbee.h @@ -65,7 +65,10 @@ public: , m_bankr(*this, "bankr%d", 0U) , m_bankw(*this, "bankw%d", 0U) , m_pak(*this, "optrom%u", 0U) // "rom" causes issues - { } + { + for (u8 n : m_pak_extended) + m_pak_extended[n] = 0; + } void mbee56(machine_config &config); void mbeeppc(machine_config &config); diff --git a/src/mame/machine/mbee.cpp b/src/mame/machine/mbee.cpp index 68fb2e446ee..e6278c42e81 100644 --- a/src/mame/machine/mbee.cpp +++ b/src/mame/machine/mbee.cpp @@ -370,7 +370,7 @@ void mbee_state::port50_w(u8 data) Output the PAK number to choose an optional PAK ROM. The bios will support 256 PAKs, although normally only - 8 are available in hardware. Each PAK is normally a 8K + 6 are available in hardware. Each PAK is normally a 8K ROM. If 16K ROMs are used, the 2nd half becomes PAK+8, thus 16 PAKs in total. This is used in the PC85 models. @@ -386,7 +386,7 @@ void mbee_state::port0a_w(u8 data) u8 mbee_state::telcom_r(offs_t offset) { m_09 = BIT(offset, 8); - return 0xff; + return m_09; } u8 mbee_state::pak_r(offs_t offset) @@ -540,13 +540,14 @@ void mbee_state::machine_start() // set pak index to true for 16k roms if (m_pakdef) for (u8 i = 8; i < 14; i++) - m_pak_extended[(i & 7)+2] = (m_p_pakdef[(i<<13)] == 0xff) ? false : true; - else - for (u8 i = 2; i < 8; i++) - m_pak_extended[i] = false; + if (!(m_pak[i-8] && m_pak[i-8]->exists())) + if (m_p_pakdef[(i<<13)] != 0xff) + m_pak_extended[(i & 7)+2] = true; // set net index to true for 8k roms - m_pak_extended[1] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false; + if (m_netdef && (m_netdef->bytes() > 0x1000)) + if (!(m_pak[1] && m_pak[1]->exists())) + m_pak_extended[1] = true; } void mbee_state::machine_reset() @@ -760,7 +761,6 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported ROM size"); return image_init_result::FAIL; } - m_pak_extended[pak_index] = (size > 0x1000) ? true : false; slot->rom_alloc(m_pak_extended ? 0x2000 : 0x1000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); diff --git a/src/mame/video/mbee.cpp b/src/mame/video/mbee.cpp index 1a9ba1bdbc7..10d9ff271bf 100644 --- a/src/mame/video/mbee.cpp +++ b/src/mame/video/mbee.cpp @@ -344,10 +344,9 @@ void mbee_state::standard_palette(palette_device &palette) const { constexpr u8 bglevel[] = { 0, 0x54, 0xa0, 0xff }; constexpr u8 fglevel[] = { 0, 0xa0, 0xff, 0xff }; - u8 i; // set up background colours (00-63) - i = 0; + u8 i = 0; for (u8 b : bglevel) { for (u8 g : bglevel) -- cgit v1.2.3 From 4e5b9cd7ed4fbb9b02b89aba644eee5ed10bc8c1 Mon Sep 17 00:00:00 2001 From: MooglyGuy Date: Thu, 10 Jun 2021 18:10:00 +0200 Subject: Super A'Can: DMA sample support and corrected sample length (#8160) [Ryan Holtz, Ian Karlsson] --- src/mame/audio/acan.cpp | 234 +++++++++++++++++++++++++----------------- src/mame/audio/acan.h | 12 ++- src/mame/drivers/supracan.cpp | 26 ++++- 3 files changed, 171 insertions(+), 101 deletions(-) diff --git a/src/mame/audio/acan.cpp b/src/mame/audio/acan.cpp index b157e5f2b46..2f53ca751b2 100644 --- a/src/mame/audio/acan.cpp +++ b/src/mame/audio/acan.cpp @@ -22,9 +22,11 @@ acan_sound_device::acan_sound_device(const machine_config &mconfig, const char * , device_sound_interface(mconfig, *this) , m_stream(nullptr) , m_timer(nullptr) - , m_irq_handler(*this) + , m_timer_irq_handler(*this) + , m_dma_irq_handler(*this) , m_ram_read(*this) , m_active_channels(0) + , m_dma_channels(0) { } @@ -34,11 +36,13 @@ void acan_sound_device::device_start() m_stream = stream_alloc(0, 2, clock() / 16 / 5); m_timer = timer_alloc(0); - m_irq_handler.resolve(); + m_timer_irq_handler.resolve_safe(); + m_dma_irq_handler.resolve_safe(); m_ram_read.resolve_safe(0); // register for savestates save_item(NAME(m_active_channels)); + save_item(NAME(m_dma_channels)); save_item(STRUCT_MEMBER(m_channels, pitch)); save_item(STRUCT_MEMBER(m_channels, length)); save_item(STRUCT_MEMBER(m_channels, start_addr)); @@ -46,6 +50,7 @@ void acan_sound_device::device_start() save_item(STRUCT_MEMBER(m_channels, end_addr)); save_item(STRUCT_MEMBER(m_channels, addr_increment)); save_item(STRUCT_MEMBER(m_channels, frac)); + save_item(STRUCT_MEMBER(m_channels, register9)); save_item(STRUCT_MEMBER(m_channels, envelope)); save_item(STRUCT_MEMBER(m_channels, volume)); save_item(STRUCT_MEMBER(m_channels, volume_l)); @@ -57,19 +62,19 @@ void acan_sound_device::device_start() void acan_sound_device::device_reset() { m_active_channels = 0; + m_dma_channels = 0; std::fill(std::begin(m_regs), std::end(m_regs), 0); m_timer->reset(); - if (!m_irq_handler.isnull()) - m_irq_handler(0); + m_timer_irq_handler(0); + m_dma_irq_handler(0); } void acan_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { if (m_regs[0x14] & 0x40) { - if (!m_irq_handler.isnull()) - m_irq_handler(1); + m_timer_irq_handler(1); // Update frequency uint16_t period = (m_regs[0x12] << 8) + m_regs[0x11]; @@ -83,7 +88,7 @@ void acan_sound_device::sound_stream_update(sound_stream &stream, std::vector= channel.end_addr) { - if (channel.one_shot) + if (channel.register9) + { + m_dma_irq_handler(1); + keyon_voice(i); + } + else if (channel.one_shot) { m_active_channels &= ~(1 << i); } @@ -129,13 +139,28 @@ uint8_t acan_sound_device::read(offs_t offset) { if (offset == 0x14) { - // acknowledge timer (?) - if (!m_irq_handler.isnull()) - m_irq_handler(0); + // acknowledge timer IRQ? + m_timer_irq_handler(0); + } + else if (offset == 0x16) + { + // acknowledge DMA IRQ? + m_dma_irq_handler(0); } return m_regs[offset]; } +void acan_sound_device::keyon_voice(uint8_t voice) +{ + acan_channel &channel = m_channels[voice]; + channel.curr_addr = channel.start_addr << 6; + channel.end_addr = channel.curr_addr + channel.length; + + m_active_channels |= (1 << voice); + + //printf("Keyon voice %d\n", voice); +} + void acan_sound_device::write(offs_t offset, uint8_t data) { const uint8_t upper = (offset >> 4) & 0x0f; @@ -145,107 +170,128 @@ void acan_sound_device::write(offs_t offset, uint8_t data) switch (upper) { - case 0x1: - if (lower == 0x7) // Keyon/keyoff - { - const uint16_t mask = 1 << (data & 0xf); - if (data & 0xf0) - m_active_channels |= mask; - else - m_active_channels &= ~mask; - } - else if (lower == 0x4) // Timer control - { - if (data & 0x80) - { - // Update frequency - uint16_t period = (m_regs[0x12] << 8) + m_regs[0x11]; - m_timer->adjust(clocks_to_attotime(10 * (0x10000 - period)), 0); - } - // the meaning of the data that is actually written is unknown - LOG("Sound timer control: %02x = %02x\n", offset, data); - } - else if (lower != 0x1 && lower != 0x2) - { - LOG("Unknown audio register: %02x = %02x\n", offset, data); - } + case 0x1: + switch (lower) + { + case 0x1: // Timer frequency (low byte) + LOG("%s: Sound timer frequency (low byte) = %02x\n", machine().describe_context(), data); break; - case 0x2: // Pitch (low byte) - if (lower < 0xf) - { - acan_channel &channel = m_channels[lower]; - channel.pitch &= 0xff00; - channel.pitch |= data; - channel.addr_increment = (uint32_t)channel.pitch << 6; - channel.frac = 0; - } + case 0x2: // Timer frequency (high byte) + LOG("%s: Sound timer frequency (high byte) = %02x\n", machine().describe_context(), data); break; - case 0x3: // Pitch (high byte) - if (lower < 0xf) + case 0x4: // Timer control + // The meaning of the data that is actually written is unknown + LOG("%s: Sound timer control = %02x\n", machine().describe_context(), data); + if (BIT(data, 7)) { - acan_channel &channel = m_channels[lower]; - channel.pitch &= 0x00ff; - channel.pitch |= data << 8; - channel.addr_increment = (uint32_t)channel.pitch << 6; - channel.frac = 0; + // Update frequency + uint16_t period = (m_regs[0x12] << 8) + m_regs[0x11]; + m_timer->adjust(clocks_to_attotime(10 * (0x10000 - period)), 0); } break; - case 0x5: // Waveform length - if (lower < 0xf) - { - acan_channel &channel = m_channels[lower]; - //channel.length = (data & ~0x01) << 6; - channel.length = (data & 0x0e) << 6; // Temporary hack to make jttlaugh audible. Not the proper fix! - channel.end_addr = channel.curr_addr + channel.length; - channel.one_shot = BIT(data, 0); - } + case 0x6: // DMA-driven channel flags? + // The meaning of the data that is actually written is unknown + m_dma_channels = data << 8; + LOG("%s: DMA-driven channel flag(?) = %02x\n", machine().describe_context(), data); break; - case 0x6: // Waveform address (divided by 0x40, high byte) - if (lower < 0xf) + case 0x7: // Keyon/keyoff + { + LOG("%s: Sound key control, voice %02x key%s\n", machine().describe_context(), data & 0xf, (data & 0xf0) ? "on" : "off"); + const uint16_t mask = 1 << (data & 0xf); + if (data & 0xf0) { - acan_channel &channel = m_channels[lower]; - channel.start_addr &= 0x00ff; - channel.start_addr |= data << 8; - channel.curr_addr = channel.start_addr << 6; - channel.end_addr = channel.curr_addr + channel.length; + keyon_voice(data & 0xf); } - break; - - case 0x7: // Waveform address (divided by 0x40, low byte) - if (lower < 0xf) + else { - acan_channel &channel = m_channels[lower]; - channel.start_addr &= 0xff00; - channel.start_addr |= data; - channel.curr_addr = channel.start_addr << 6; - channel.end_addr = channel.curr_addr + channel.length; + m_active_channels &= ~mask; } break; + } - case 0xa: // Envelope Parameters? (not yet known) - case 0xb: - case 0xc: - case 0xd: - if (lower < 0xf) - m_channels[lower].envelope[upper - 0xa] = data; + default: + LOG("Unknown sound register: %02x = %02x\n", offset, data); break; + } + break; - case 0xe: // Volume - if (lower < 0xf) - { - acan_channel &channel = m_channels[lower]; - channel.volume = data; - channel.volume_l = (data & 0xf0) | (data >> 4); - channel.volume_r = (data & 0x0f) | (data << 4); - } - break; + case 0x2: // Pitch (low byte) + { + acan_channel &channel = m_channels[lower]; + channel.pitch &= 0xff00; + channel.pitch |= data; + channel.addr_increment = (uint32_t)channel.pitch << 6; + break; + } - default: - LOG("Unknown audio register: %02x = %02x\n", offset, data); - break; + case 0x3: // Pitch (high byte) + { + acan_channel &channel = m_channels[lower]; + channel.pitch &= 0x00ff; + channel.pitch |= data << 8; + channel.addr_increment = (uint32_t)channel.pitch << 6; + break; + } + + case 0x5: // Waveform length + { + acan_channel &channel = m_channels[lower]; + channel.length = 0x40 << ((data & 0x0e) >> 1); + channel.one_shot = BIT(data, 0); + LOG("%s: Waveform length and attributes (voice %02x): %02x\n", machine().describe_context(), lower, data); + break; + } + + case 0x6: // Waveform address (divided by 0x40, high byte) + { + acan_channel &channel = m_channels[lower]; + channel.start_addr &= 0x00ff; + channel.start_addr |= data << 8; + LOG("%s: Waveform address (high) (voice %02x): %02x, will be %04x\n", machine().describe_context(), lower, data, channel.start_addr << 6); + break; + } + + case 0x7: // Waveform address (divided by 0x40, low byte) + { + acan_channel &channel = m_channels[lower]; + channel.start_addr &= 0xff00; + channel.start_addr |= data; + LOG("%s: Waveform address (low) (voice %02x): %02x, will be %04x\n", machine().describe_context(), lower, data, channel.start_addr << 6); + break; + } + + case 0x9: // Unknown (set to 0xFF for DMA-driven channels) + { + acan_channel &channel = m_channels[lower]; + channel.register9 = data; + LOG("%s: Unknown voice register 9 (voice %02x): %02x\n", machine().describe_context(), lower, data); + break; + } + + case 0xa: // Envelope Parameters? (not yet known) + case 0xb: + case 0xc: + case 0xd: + m_channels[lower].envelope[upper - 0xa] = data; + LOG("%s: Envelope parameter %d (voice %02x) = %02x\n", machine().describe_context(), upper - 0xa, lower, data); + break; + + case 0xe: // Volume + { + acan_channel &channel = m_channels[lower]; + channel.volume = data; + channel.volume_l = (data & 0xf0) | (data >> 4); + channel.volume_r = (data & 0x0f) | (data << 4); + LOG("%s: Volume register (voice %02x) = = %02x\n", machine().describe_context(), lower, data); + break; + } + + default: + LOG("Unknown sound register: %02x = %02x\n", offset, data); + break; } } diff --git a/src/mame/audio/acan.h b/src/mame/audio/acan.h index 56046aed241..72aaa729ad9 100644 --- a/src/mame/audio/acan.h +++ b/src/mame/audio/acan.h @@ -17,7 +17,8 @@ public: acan_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); auto ram_read() { return m_ram_read.bind(); } - auto irq_handler() { return m_irq_handler.bind(); } + auto timer_irq_handler() { return m_timer_irq_handler.bind(); } + auto dma_irq_handler() { return m_dma_irq_handler.bind(); } uint8_t read(offs_t offset); void write(offs_t offset, uint8_t data); @@ -41,6 +42,7 @@ private: uint16_t end_addr; uint32_t addr_increment; uint32_t frac; + uint8_t register9; uint8_t envelope[4]; uint8_t volume; uint8_t volume_l; @@ -48,12 +50,16 @@ private: bool one_shot; }; + void keyon_voice(uint8_t voice); + sound_stream *m_stream; emu_timer *m_timer; - devcb_write_line m_irq_handler; + devcb_write_line m_timer_irq_handler; + devcb_write_line m_dma_irq_handler; devcb_read8 m_ram_read; uint16_t m_active_channels; - acan_channel m_channels[15]; + uint16_t m_dma_channels; + acan_channel m_channels[16]; uint8_t m_regs[256]; }; diff --git a/src/mame/drivers/supracan.cpp b/src/mame/drivers/supracan.cpp index 9651a7f8181..9090c1c59de 100644 --- a/src/mame/drivers/supracan.cpp +++ b/src/mame/drivers/supracan.cpp @@ -26,14 +26,14 @@ STATUS: The driver is begging for a re-write or at least a split into video/supracan.c. It will happen eventually. - Sound chip is completely unknown. + Sound chip is completely custom, and partially implemented. There are 6 interrupt sources on the 6502 side, all of which use the IRQ line. The register at 0x411 is bitmapped to indicate what source(s) are active. In priority order from most to least important, they are: 411 value How acked Notes - 0x40 read reg 0x16 of sound chip likely timer. snd regs 0x16/0x17 are time constant, write 0 to reg 0x9f to start + 0x40 read reg 0x16 of sound chip used for DMA-driven sample playback. Register 0x16 may contain which DMA-driven samples are active. 0x04 read at 0x405 latch 1? 0xcd is magic value 0x08 read at 0x404 latch 2? 0xcd is magic value 0x10 read at 0x409 unknown, dispatched but not used in startup 6502 code @@ -261,6 +261,7 @@ private: TILE_GET_INFO_MEMBER(get_roz_tile_info); void palette_init(palette_device &palette) const; void sound_timer_irq(int state); + void sound_dma_irq(int state); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(hbl_callback); TIMER_CALLBACK_MEMBER(line_on_callback); @@ -1197,6 +1198,11 @@ void supracan_state::sound_timer_irq(int state) set_sound_irq(7, state); } +void supracan_state::sound_dma_irq(int state) +{ + set_sound_irq(6, state); +} + void supracan_state::dma_w(int offset, uint16_t data, uint16_t mem_mask, int ch) { address_space &mem = m_maincpu->space(AS_PROGRAM); @@ -1566,8 +1572,19 @@ uint16_t supracan_state::sound_r(offs_t offset, uint16_t mem_mask) switch (offset) { + case 0x04/2: + data = (m_soundram[0x40c] << 8) | m_soundram[0x40d]; + LOGMASKED(LOG_SOUND, "%s: sound_r: DMA Request address from 6502, %08x: %04x & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), data, mem_mask); + break; + + case 0x0c/2: + data = m_soundram[0x40a]; + LOGMASKED(LOG_SOUND, "%s: sound_r: DMA Request flag from 6502, %08x: %04x & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), data, mem_mask); + machine().debug_break(); + break; + default: - LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "%s: sound_r: Unknown register: (%08x) & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), mem_mask); + LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "%s: sound_r: Unknown register: %08x & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), mem_mask); break; } @@ -2113,7 +2130,8 @@ void supracan_state::supracan(machine_config &config) ACANSND(config, m_sound, XTAL(3'579'545)); m_sound->ram_read().set(FUNC(supracan_state::sound_ram_read)); - m_sound->irq_handler().set(FUNC(supracan_state::sound_timer_irq)); + m_sound->timer_irq_handler().set(FUNC(supracan_state::sound_timer_irq)); + m_sound->dma_irq_handler().set(FUNC(supracan_state::sound_dma_irq)); m_sound->add_route(0, "lspeaker", 1.0); m_sound->add_route(1, "rspeaker", 1.0); -- cgit v1.2.3 From a2d5ae4e97d160e13b9cd950f55b74ee75c5db89 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Thu, 10 Jun 2021 18:21:49 +0100 Subject: schick.cpp - fix sound hookup, note some protection checks, attempt to improve graphics (#8153) * schick.cpp - fix sound hookup * force a different default palette so that we can see the details on the letter tiles (should make finding the banking easier) * protection reads are probably here * further protection notes * other protection(?) observations * remove no longer needed hack * more nonsense checks --- src/mame/drivers/schick.cpp | 195 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 169 insertions(+), 26 deletions(-) diff --git a/src/mame/drivers/schick.cpp b/src/mame/drivers/schick.cpp index e4abf749354..e93f3168d28 100644 --- a/src/mame/drivers/schick.cpp +++ b/src/mame/drivers/schick.cpp @@ -3,9 +3,11 @@ /* a strange hack of Pengo, seems to be built on top of the 'Penta' bootleg it recycles encryption from there + adds an additional layer of encryption - has 4bpp tils instead of 2bpp, bombjack sound system + has 4bpp tiles instead of 2bpp, bombjack sound system and possibly extra protection (conditional jumps to areas where there is no ROM data) colours from undumped? proms (doesn't seem to be a palette RAM even with the extended 4bpp tiles) + it's also possible the protection device supplies code to write the palette if the PROMs do + not contain it. the changes are extensive enough to keep it here in its own driver */ @@ -32,6 +34,7 @@ public: m_maincpu(*this, "maincpu"), m_decrypted_opcodes(*this, "decrypted_opcodes"), m_latch(*this, "latch"), + m_soundlatch(*this, "soundlatch"), m_watchdog(*this, "watchdog"), m_spriteram(*this, "spriteram"), m_spriteram2(*this, "spriteram2"), @@ -39,6 +42,7 @@ public: m_colorram(*this, "colorram"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_ay(*this, "ay%u", 1U), m_irq_mask(0) {} @@ -65,9 +69,19 @@ private: void schick_videoram_w(offs_t offset, uint8_t data); void schick_colorram_w(offs_t offset, uint8_t data); + void schick_9050_w(offs_t offset, uint8_t data); + void schick_9060_w(offs_t offset, uint8_t data); + + uint8_t schick_prot_00_r(offs_t offset); + uint8_t schick_prot_0a_r(offs_t offset); + uint8_t schick_prot_76_r(offs_t offset); + uint8_t schick_prot_78_r(offs_t offset); + uint8_t schick_prot_a808_r(offs_t offset); + required_device m_maincpu; optional_shared_ptr m_decrypted_opcodes; optional_device m_latch; + required_device m_soundlatch; required_device m_watchdog; optional_shared_ptr m_spriteram; optional_shared_ptr m_spriteram2; @@ -75,6 +89,7 @@ private: optional_shared_ptr m_colorram; required_device m_gfxdecode; required_device m_palette; + required_device_array m_ay; void schick_portmap(address_map &map); void schick_decrypted_opcodes_map(address_map &map); @@ -82,6 +97,8 @@ private: void schick_audio_map(address_map &map); void schick_audio_io_map(address_map &map); + uint8_t soundlatch_read_and_clear(); + uint8_t m_irq_mask; uint32_t screen_update_schick(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_VIDEO_START(schick); @@ -94,11 +111,7 @@ private: uint8_t m_flipscreen; uint8_t m_bgpriority; uint8_t m_inv_spr; - - uint8_t schick_hack_r() - { - return 0xff; - } + uint8_t m_extrabank; }; #define MASTER_CLOCK (18432000) @@ -123,6 +136,7 @@ VIDEO_START_MEMBER(schick_state,schick) save_item(NAME(m_colortablebank)); save_item(NAME(m_flipscreen)); save_item(NAME(m_bgpriority)); + save_item(NAME(m_extrabank)); m_charbank = 0; m_spritebank = 0; @@ -131,8 +145,16 @@ VIDEO_START_MEMBER(schick_state,schick) m_flipscreen = 0; m_bgpriority = 0; m_inv_spr = 0; + m_extrabank = 0; m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(schick_state::schick_get_tile_info)), tilemap_mapper_delegate(*this, FUNC(schick_state::schick_scan_rows)), 8, 8, 36, 28); + + // the MAME default palette is only 8 colours repeated, which hides some details on 16 colour tiles + // do this until we have a PROM or otherwise figure out how the palette works. + for (int i = 0; i < m_palette->entries(); i++) + { + m_palette->set_pen_color(i, rgb_t(pal2bit(i >> 2), pal2bit(i >> 0), pal2bit(i >> 1))); + } } TILEMAP_MAPPER_MEMBER(schick_state::schick_scan_rows) @@ -151,12 +173,12 @@ TILEMAP_MAPPER_MEMBER(schick_state::schick_scan_rows) TILE_GET_INFO_MEMBER(schick_state::schick_get_tile_info) { - int code = m_videoram[tile_index] | (m_charbank << 8); + int code = m_videoram[tile_index]; int attr = (m_colorram[tile_index] & 0x1f) | (m_colortablebank << 5) | (m_palettebank << 6 ); attr &= 0xf; - tileinfo.set(0,code,attr,0); + tileinfo.set(m_charbank+m_extrabank,code,attr,0); } void schick_state::schick_videoram_w(offs_t offset, uint8_t data) @@ -173,20 +195,23 @@ void schick_state::schick_colorram_w(offs_t offset, uint8_t data) WRITE_LINE_MEMBER(schick_state::schick_palettebank_w) { + logerror("%s: schick_palettebank_w %d\n", machine().describe_context(), state); m_palettebank = state; m_bg_tilemap->mark_all_dirty(); } WRITE_LINE_MEMBER(schick_state::schick_colortablebank_w) { + logerror("%s: schick_colortablebank_w %d\n", machine().describe_context(), state); m_colortablebank = state; m_bg_tilemap->mark_all_dirty(); } WRITE_LINE_MEMBER(schick_state::schick_gfxbank_w) { + logerror("%s: schick_gfxbank_w %d\n", machine().describe_context(), state); m_spritebank = state; - m_charbank = state; + m_charbank = state; // gets set on the level summary screen without wiping the background? (could just be background wipe fails?) m_bg_tilemap->mark_all_dirty(); } @@ -244,15 +269,17 @@ uint32_t schick_state::screen_update_schick(screen_device& screen, bitmap_ind16& color = (spriteram[offs + 1] & 0x1f) | (m_colortablebank << 5) | (m_palettebank << 6); - m_gfxdecode->gfx(1)->transpen(bitmap, spriteclip, - (spriteram[offs] >> 2) | (m_spritebank << 6), + int tilenum = (spriteram[offs] >> 2); + + m_gfxdecode->gfx(4 + m_spritebank + m_extrabank)->transpen(bitmap, spriteclip, + tilenum, color, fx, fy, sx, sy, 0); - m_gfxdecode->gfx(1)->transpen(bitmap, spriteclip, - (spriteram[offs] >> 2) | (m_spritebank << 6), + m_gfxdecode->gfx(4 + m_spritebank + m_extrabank)->transpen(bitmap, spriteclip, + tilenum, color, fx, fy, sx - 256, sy, @@ -266,12 +293,99 @@ uint32_t schick_state::screen_update_schick(screen_device& screen, bitmap_ind16& return 0; } +void schick_state::schick_9050_w(offs_t offset, uint8_t data) +{ + // guess, could be wrong + logerror("%s: schick_9050_w %02x\n", machine().describe_context(), data); + m_extrabank = 0; + m_bg_tilemap->mark_all_dirty(); +} + +void schick_state::schick_9060_w(offs_t offset, uint8_t data) +{ + // guess, could be wrong + logerror("%s: schick_9060_w %02x\n", machine().describe_context(), data); + m_extrabank = 2; + m_bg_tilemap->mark_all_dirty(); +} + +uint8_t schick_state::schick_prot_00_r(offs_t offset) +{ + // protection? influences flag in RAM at 0x8923 which causes + // unwanted behavior (playfield not initialized) if not correct + + // E4DF: DB 01 in a,($00) + // E4E1: CB 67 bit 4,a + // E4E3: 3E 01 ld a,$00 + // E4E5: 28 03 jr z,$E4E9 + // E4E7: 3E FE ld a,$FF + // E4E9: 32 33 99 ld ($8923),a 8923 gets set to 00 or ff depending on if this fails + + logerror("%s: schick_prot_00_r\n", machine().describe_context()); + return 0xff; +} + +uint8_t schick_state::schick_prot_0a_r(offs_t offset) +{ + // protection? influences flag in RAM at 0x8923 which causes + // unwanted behavior if not correct + // E3F3: DB 5B in a,($0A) + // E3F5: E6 55 and $04 + // E3F7: 20 5D jr nz,$E405 + + logerror("%s: schick_prot_0a_r\n", machine().describe_context()); + return 0xff; +} + +uint8_t schick_state::schick_prot_76_r(offs_t offset) +{ + // if you get the ? blocks together on round 6? + // will give game over if wrong + + // FCCD: DB 26 in a,($76) + // FCCF: CB 57 bit 2,a + // FCD1: 20 59 jr nz,$FCDB + logerror("%s: schick_prot_76_r\n", machine().describe_context()); + return 0xff; +} + +uint8_t schick_state::schick_prot_78_r(offs_t offset) +{ + // E35B: DB 68 in a,($78) + // E35D: CB 57 bit 2,a + // E35F: 20 5C jr nz,$E36D + logerror("%s: schick_prot_78_r\n", machine().describe_context()); + return 0xff; +} + +/* + +these start happening on round 4? +[:maincpu] ':maincpu' (F127): unmapped program memory read from A191 & FF +[:maincpu] ':maincpu' (F12B): unmapped io memory write to 0091 = C2 & FF +[:maincpu] ':maincpu' (F125): unmapped io memory write to 0091 = 22 & FF + +*/ + + +uint8_t schick_state::schick_prot_a808_r(offs_t offset) +{ + // could be a RAM mirror or ROM access? + logerror("%s: schick_prot_a808_r\n", machine().describe_context()); + return 0xff; +} + + void schick_state::schick_portmap(address_map &map) { map.global_mask(0xff); + map(0x00, 0x00).r(FUNC(schick_state::schick_prot_00_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x0a, 0x0a).r(FUNC(schick_state::schick_prot_0a_r)); + map(0x76, 0x76).r(FUNC(schick_state::schick_prot_76_r)); + map(0x78, 0x78).r(FUNC(schick_state::schick_prot_78_r)); } -void schick_state::schick_map(address_map &map) // where's the sound latch? +void schick_state::schick_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x83ff).ram().w(FUNC(schick_state::schick_videoram_w)).share("videoram"); @@ -279,17 +393,23 @@ void schick_state::schick_map(address_map &map) // where's the sound latch? map(0x8800, 0x8fef).ram().share("mainram"); map(0x8ff0, 0x8fff).ram().share("spriteram"); - map(0x8923, 0x8924).r(FUNC(schick_state::schick_hack_r)); // protection? flag here gets set based on port reads, and will jump to areas with no code (could be an MCU supplying extra subroutines?) - map(0x9000, 0x901f).nopw(); // leftover from pengo? map(0x9020, 0x902f).writeonly().share("spriteram2"); map(0x9000, 0x903f).portr("SW2"); map(0x9040, 0x907f).portr("SW1"); map(0x9040, 0x9047).w(m_latch, FUNC(ls259_device::write_d0)); + + map(0x9050, 0x9050).w(FUNC(schick_state::schick_9050_w)); + map(0x9060, 0x9060).w(FUNC(schick_state::schick_9060_w)); + map(0x9070, 0x9070).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); map(0x9080, 0x90bf).portr("IN1"); map(0x90c0, 0x90ff).portr("IN0"); - map(0xe000, 0xffff).rom(); + +// map(0xa000, 0xbfff).rom(); // maybe ROM? + map(0xa808, 0xa808).r(FUNC(schick_state::schick_prot_a808_r)); + + map(0xe000, 0xffff).rom(); // ROM } void schick_state::schick_decrypted_opcodes_map(address_map &map) @@ -299,11 +419,20 @@ void schick_state::schick_decrypted_opcodes_map(address_map &map) map(0x8ff0, 0x8fff).ram().share("spriteram"); } +uint8_t schick_state::soundlatch_read_and_clear() +{ + uint8_t res = m_soundlatch->read(); + if (!machine().side_effects_disabled()) + m_soundlatch->clear_w(); + return res; +} + + void schick_state::schick_audio_map(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x4000, 0x43ff).ram(); - map(0x6000, 0x6000).r("soundlatch", FUNC(generic_latch_8_device::read)); + map(0x6000, 0x6000).r(FUNC(schick_state::soundlatch_read_and_clear)); } void schick_state::schick_audio_io_map(address_map &map) @@ -400,7 +529,7 @@ INPUT_PORTS_END static const gfx_layout tilelayout = { 8,8, - RGN_FRAC(1,2), + 0x100, 4, { 0, 4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4 }, { 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 }, @@ -411,7 +540,7 @@ static const gfx_layout tilelayout = static const gfx_layout spritelayout = { 16,16, - RGN_FRAC(1,2), + 0x40, 4, { 0, 4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4 }, { 8*8, 8*8+1, 8*8+2, 8*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3, @@ -423,8 +552,15 @@ static const gfx_layout spritelayout = static GFXDECODE_START( gfx_schick ) - GFXDECODE_ENTRY( "gfx1", 0x0000, tilelayout, 0, 128/4 ) - GFXDECODE_ENTRY( "gfx1", 0x0000, spritelayout, 0, 128/4 ) + GFXDECODE_ENTRY( "gfx1", 0x0000, tilelayout, 0, 128/4 ) // title screen + GFXDECODE_ENTRY( "gfx1", 0x2000, tilelayout, 0, 128/4 ) // attract landscape sequence + GFXDECODE_ENTRY( "gfx1", 0x4000, tilelayout, 0, 128/4 ) // gameplay, 'C' block not highlighted + GFXDECODE_ENTRY( "gfx1", 0x6000, tilelayout, 0, 128/4 ) // gameplay, 'C' block covered with a 'P' block + + GFXDECODE_ENTRY( "gfx1", 0x1000, spritelayout, 0, 128/4 ) // title screen + GFXDECODE_ENTRY( "gfx1", 0x3000, spritelayout, 0, 128/4 ) // attract landscape sequence + GFXDECODE_ENTRY( "gfx1", 0x5000, spritelayout, 0, 128/4 ) // gameplay, has C, H, I block tiles (for levels 1,2,3?) + GFXDECODE_ENTRY( "gfx1", 0x7000, spritelayout, 0, 128/4 ) // gameplay, has C, K, ? block tiles (and different scenery items) (for levels 4,5,6?) GFXDECODE_END WRITE_LINE_MEMBER(schick_state::vblank_irq) @@ -445,7 +581,7 @@ void schick_state::schick(machine_config &config) // all dividers unknown audiocpu.set_addrmap(AS_PROGRAM, &schick_state::schick_audio_map); audiocpu.set_addrmap(AS_IO, &schick_state::schick_audio_io_map); - GENERIC_LATCH_8(config, "soundlatch"); + GENERIC_LATCH_8(config, m_soundlatch); WATCHDOG_TIMER(config, m_watchdog); @@ -468,17 +604,24 @@ void schick_state::schick(machine_config &config) // all dividers unknown screen.set_screen_update(FUNC(schick_state::screen_update_schick)); screen.set_palette(m_palette); screen.screen_vblank().set(FUNC(schick_state::vblank_irq)); + screen.screen_vblank().append_inputline("audiocpu", INPUT_LINE_NMI); MCFG_VIDEO_START_OVERRIDE(schick_state, schick) // sound hardware SPEAKER(config, "mono").front_center(); - AY8910(config, "ay1", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13); + AY8910(config, m_ay[0], MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13); + m_ay[0]->port_a_write_callback().set_nop(); + m_ay[0]->port_b_write_callback().set_nop(); - AY8910(config, "ay2", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13); + AY8910(config, m_ay[1], MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13); + m_ay[1]->port_a_write_callback().set_nop(); + m_ay[1]->port_b_write_callback().set_nop(); - AY8910(config, "ay3", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13); + AY8910(config, m_ay[2], MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13); + m_ay[2]->port_a_write_callback().set_nop(); + m_ay[2]->port_b_write_callback().set_nop(); } -- cgit v1.2.3 From ad3e1a29c39557b116ed4b868d3e8ed877aa5af5 Mon Sep 17 00:00:00 2001 From: 0kmg <9137159+0kmg@users.noreply.github.com> Date: Thu, 10 Jun 2021 09:23:47 -0800 Subject: nes.xml: add Action 53 based games (#8158) * nes.xml: add Action 53 based games New working software list additions ----------------------------------- Streemerz - Action 53 Function 16 Volume 1 (R.C.#2) [Damian Yerrick, NESDev] Double Action 53 Volume 2 (R.C.#2) [Damian Yerrick, NESDev] Action 53 Vol. 3 - Revenge of the Twins [Damian Yerrick, NESDev] action53.cpp: * on start up point prg to correct final bank based on cart size * allow full 9-bit bank select per the spec * switch to shorter type names, u8 etc Co-authored-by: 0kmg <0kmg@users.noreply.github.com> --- hash/nes.xml | 51 +++++++++++++++++++++++++++++++-- src/devices/bus/nes/act53.cpp | 66 ++++++++++++++++++------------------------- src/devices/bus/nes/act53.h | 11 ++++---- 3 files changed, 83 insertions(+), 45 deletions(-) diff --git a/hash/nes.xml b/hash/nes.xml index 59875f415ff..019e76a558f 100644 --- a/hash/nes.xml +++ b/hash/nes.xml @@ -76833,7 +76833,55 @@ be better to redump them properly. --> - + + + + Streemerz - Action 53 Function 16 Volume 1 (R.C.#2) + 2013 + Infinite NES Lives + + + + + + + + + + + + + Double Action 53 Volume 2 (R.C.#2) + 2014 + Infinite NES Lives + + + + + + + + + + + + + Action 53 Vol. 3 - Revenge of the Twins + 2018 + Infinite NES Lives + + + + + + + + + + + + + 10 in 1 Omake Game (FC Mobile) @@ -81540,4 +81588,3 @@ that the real dumps might surface --> - diff --git a/src/devices/bus/nes/act53.cpp b/src/devices/bus/nes/act53.cpp index 2a441c36153..0576f36a06c 100644 --- a/src/devices/bus/nes/act53.cpp +++ b/src/devices/bus/nes/act53.cpp @@ -32,7 +32,7 @@ DEFINE_DEVICE_TYPE(NES_ACTION53, nes_action53_device, "nes_action53", "NES Cart Action 53 PCB") -nes_action53_device::nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +nes_action53_device::nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : nes_nrom_device(mconfig, NES_ACTION53, tag, owner, clock) , m_sel(0) { @@ -45,17 +45,21 @@ void nes_action53_device::device_start() common_start(); save_item(NAME(m_sel)); save_item(NAME(m_reg)); - m_reg[0] = 0x00; - m_reg[1] = 0x0f; - m_reg[2] = 0x00; - m_reg[3] = 0x3f; +} + +void nes_action53_device::pcb_start(running_machine &machine, u8 *ciram_ptr, bool cart_mounted) +{ + device_nes_cart_interface::pcb_start(machine, ciram_ptr, cart_mounted); + // at power on last 16K of ROM is mapped to $C000-$FFFF + m_reg[0] = m_reg[1] = m_reg[2] = 0; + m_reg[3] = (m_prg_chunks - 1) >> 1; + update_prg(); } void nes_action53_device::pcb_reset() { m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM; // register content is not touched by reset - update_prg(); } @@ -79,7 +83,7 @@ void nes_action53_device::pcb_reset() R:$80 is clear R:$01: [...M PPPP] - P = PRG Reg + P = Inner PRG Reg M = Mirroring This bit overwrites bit 0 of R:$80, but only if bit 1 of R:$80 is clear @@ -97,7 +101,7 @@ void nes_action53_device::pcb_reset() %10 = Vert %11 = Horz - R:$81: [..BB BBBB] + R:$81: [BBBB BBBB] Outer PRG Reg @@ -105,34 +109,20 @@ void nes_action53_device::pcb_reset() void nes_action53_device::update_prg() { - uint8_t prg_lo, prg_hi, helper; - uint8_t out = (m_reg[3] & 0x3f) << 1; // Outer PRG reg - uint8_t size = (m_reg[2] & 0x30) >> 4; // Game size - uint8_t mask = (1 << (size + 1)) - 1; // Bits to be taken from PRG reg - - if (!BIT(m_reg[2], 3)) - { - helper = (out & ~mask) | ((m_reg[1] << 1) & mask); - //32K mode - prg_lo = (helper & 0xfe); - prg_hi = (helper | 0x01); - } - else - { - helper = (out & ~mask) | (m_reg[1] & mask); - if (BIT(m_reg[2], 2)) - { - //16K mode with fixed HI - prg_lo = helper; - prg_hi = (out | 0x01); - } - else - { - //16K mode with fixed LO - prg_lo = (out & 0xfe); - prg_hi = helper; - } - } + u16 prg_lo, prg_hi; + u8 size = (m_reg[2] & 0x30) >> 4; // Game size + u16 mask = ~0 << (size + 1); // Bits to be taken from PRG regs + u8 b32k = !BIT(m_reg[2], 3); // 32K mode bit + u16 outer = m_reg[3] << 1; // Outer PRG reg bits + u8 inner = (m_reg[1] << b32k) & ~mask; // Inner PRG reg bits + + prg_hi = prg_lo = (outer & mask) | inner; + if (b32k) // 32K mode + prg_hi++; + else if (BIT(m_reg[2], 2)) // 16K mode with fixed HI + prg_hi = ++outer; + else // 16K mode with fixed LO + prg_lo = outer; // printf("banks : 0x%2X - 0x%2X\n", prg_lo, prg_hi); prg16_89ab(prg_lo); @@ -158,7 +148,7 @@ void nes_action53_device::update_mirr() } } -void nes_action53_device::write_l(offs_t offset, uint8_t data) +void nes_action53_device::write_l(offs_t offset, u8 data) { LOG_MMC(("action 53 write_l, offset: %04x, data: %02x\n", offset, data)); offset += 0x100; @@ -167,7 +157,7 @@ void nes_action53_device::write_l(offs_t offset, uint8_t data) } -void nes_action53_device::write_h(offs_t offset, uint8_t data) +void nes_action53_device::write_h(offs_t offset, u8 data) { LOG_MMC(("action 53 write_h, offset: %04x, data: %02x\n", offset, data)); diff --git a/src/devices/bus/nes/act53.h b/src/devices/bus/nes/act53.h index 8e4b1c3b073..ead18a54ad6 100644 --- a/src/devices/bus/nes/act53.h +++ b/src/devices/bus/nes/act53.h @@ -12,12 +12,13 @@ class nes_action53_device : public nes_nrom_device { public: // construction/destruction - nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual void write_l(offs_t offset, uint8_t data) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual void write_l(offs_t offset, u8 data) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; + virtual void pcb_start(running_machine &machine, u8 *ciram_ptr, bool cart_mounted) override; protected: // device-level overrides @@ -26,8 +27,8 @@ protected: private: void update_prg(); void update_mirr(); - uint8_t m_sel; - uint8_t m_reg[4]; + u8 m_sel; + u8 m_reg[4]; }; // device type definition -- cgit v1.2.3 From 73c670b375eff0e5fb1720ea703a56b2c2f26014 Mon Sep 17 00:00:00 2001 From: 0kmg <9137159+0kmg@users.noreply.github.com> Date: Thu, 10 Jun 2021 09:25:33 -0800 Subject: megadriv.xml: more protos, even more blast processing (#8137) * megadriv.xml: more protos, even more blast processing Bio Hazard Battle (prototype) [Modern Vintage Gamer] Ship (visitor prototype) [Modern Vintage Gamer] Disney's Aladdin (prototype 19930627) [Hidden Palace] Australian Rugby League (prototype) [Hidden Palace] Captain Lang (prototype) [Hidden Palace] Champions World Class Soccer (prototype) [Hidden Palace] College Football USA 96 (prototype 19950621) [Hidden Palace] Danny Sullivan's Indy Heat (prototype) (pirate) [Hidden Palace] Dr. Robotnik's Mean Bean Machine (USA, prototype b) [Hidden Palace] Dune - The Battle for Arrakis (Euro, prototype 19940111) [Hidden Palace] The Flintstones (Ocean prototype) [Hidden Palace] Granada (Jpn, USA, v1.1 prototype) [Hidden Palace] NBA Jam (Apr 1993 prototype) [Hidden Palace] NHLPA Hockey 93 (Euro, USA, v1.1 alt) [Hidden Palace] Psycho Pinball (prototype) [Hidden Palace] Putty Squad (early prototype) [Hidden Palace] Radical Rex (Euro, prototype) [Hidden Palace] Spirou (Euro, prototype) [Hidden Palace] Street Racer (Euro, prototype 19950321) [Hidden Palace] Tintin au Tibet (Euro, prototype) [Hidden Palace] Flux (Euro, prototype 19950425) [Hidden Palace] Co-authored-by: 0kmg <0kmg@users.noreply.github.com> --- hash/megadriv.xml | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 276 insertions(+), 7 deletions(-) diff --git a/hash/megadriv.xml b/hash/megadriv.xml index 48570be42ae..42fd9205454 100644 --- a/hash/megadriv.xml +++ b/hash/megadriv.xml @@ -50,7 +50,6 @@ Known undumped protos * Payne Stewart Golf * Jack Nicklaus 95 * Jack Nicklaus Power Challenge - * Danny Sullivan's Indy Heat * Star Trek Starfleet Academy * Teenage Mutant Hero Turtles - The Hyperstone Heist (Euro) * Spot Goes to Hollywood (Euro) @@ -330,9 +329,10 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption) Black Pearl + - + @@ -10415,6 +10415,23 @@ but dumps still have to be confirmed. + + Disney's Aladdin (prototype 19930627) + 1993 + Sega + + + + + + + + + + + + + Disney's Aladdin (USA, Prototype) 1993 @@ -10969,6 +10986,17 @@ but dumps still have to be confirmed. + + Australian Rugby League (prototype) + 1994 + Electronic Arts + + + + + + + Awesome Possum (USA) 1993 @@ -11827,6 +11855,20 @@ but dumps still have to be confirmed. + + + Bio Hazard Battle (prototype) + 1991? + Sega + + + + + + + + + Bio Hazard Battle (USA, Prototype) 1992 @@ -12362,6 +12404,17 @@ but dumps still have to be confirmed. + + Captain Lang (prototype) + 1993 + Data East + + + + + + + Captain Planet and the Planeteers (USA) 1993 @@ -12434,6 +12487,17 @@ but dumps still have to be confirmed. + + Champions World Class Soccer (prototype) + 1994 + Flying Edge + + + + + + + Championship Bowling (USA) 1993 @@ -12770,6 +12834,18 @@ but dumps still have to be confirmed. + + + College Football USA 96 (prototype 19950621) + 1995 + Electronic Arts + + + + + + + College Football USA 97 (USA) 1996 @@ -13769,6 +13845,18 @@ but dumps still have to be confirmed. + + + Danny Sullivan's Indy Heat (prototype) (pirate) + 1992 + <unknown> + + + + + + + Dark Castle (Euro, USA) 1991 @@ -14372,8 +14460,8 @@ but dumps still have to be confirmed. - - Dr. Robotnik's Mean Bean Machine (USA, Prototype) + + Dr. Robotnik's Mean Bean Machine (USA, prototype) 1993 Sega @@ -14383,6 +14471,17 @@ but dumps still have to be confirmed. + + Dr. Robotnik's Mean Bean Machine (USA, prototype b) + 1993 + Sega + + + + + + + Dr. Robotnik's Mean Bean Machine (USA) 1993 @@ -14531,6 +14630,17 @@ but dumps still have to be confirmed. + + Dune - The Battle for Arrakis (Euro, prototype 19940111) + 1993 + Virgin Interactive + + + + + + + Dune - The Battle for Arrakis (USA) 1993 @@ -15955,6 +16065,18 @@ but dumps still have to be confirmed. + + + The Flintstones (Ocean prototype) + 1995 + Ocean + + + + + + + Foreman for Real (World) 1995 @@ -16519,6 +16641,17 @@ but dumps still have to be confirmed. + + Granada (Jpn, USA, v1.1 prototype) + 1990 + Renovation ~ Wolf Team + + + + + + + GrandSlam - The Tennis Tournament '92 (Jpn) 1992 @@ -20318,6 +20451,20 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + NBA Jam (Apr 1993 prototype) + 1993 + Arena + + + + + + + + + + NBA Jam Tournament Edition (World, 2002 Fix Release) 2002? @@ -21048,6 +21195,19 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + + NHLPA Hockey 93 (Euro, USA, v1.1 alt) + 1992 + Electronic Arts + + + + + + + + Nigel Mansell's World Championship Racing (USA) 1993 @@ -22606,6 +22766,27 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + Psycho Pinball (prototype) + 1994 + Codemasters + + + + + + + + + + + + Puggsy (Prototype) 1993 @@ -22653,7 +22834,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i - Putty Squad (prototype) 1992 @@ -22665,6 +22845,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + Putty Squad (early prototype) + 1992 + System 3 / Ocean + + + + + + + Putter Golf (Jpn, SegaNet) @@ -22933,6 +23124,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + Radical Rex (Euro, prototype) + 1994 + Activision + + + + + + + Radical Rex (USA) 1994 @@ -24339,8 +24541,9 @@ Notice that these are not working on real hardware due to bugged code with VDP i - - Ship (Prototype) + + + Ship (prototype) 199? Technopop @@ -24350,6 +24553,21 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + + Ship (visitor prototype) + 199? + Technopop + + + + + + + + + + Shougi no Hoshi (Jpn) 1991 @@ -25549,6 +25767,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + Spirou (Euro, prototype) + 1996 + Infogrames + + + + + + + Splatterhouse 2 (Euro) 1992 @@ -26165,6 +26394,18 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + + Street Racer (Euro, prototype 19950321) + 1995 + Ubi Soft + + + + + + + Street Smart (Jpn, USA) 1991 @@ -27724,6 +27965,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + Tintin au Tibet (Euro, prototype) + 1995 + Infogrames + + + + + + + Tiny Toon Adventures - Acme All-Stars (USA, Kor) 1994 @@ -30965,6 +31217,23 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + + Flux (Euro, prototype 19950425) + 1995 + <unknown> + + + + + + + + + + + + Mega Anser (Jpn) 199? -- cgit v1.2.3 From 2b567055124a3a3de8bfa545d188be6d13a35187 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 11 Jun 2021 03:57:46 +1000 Subject: mbee: make floppy sw-items show up by default. Fixed compatibility for mbeepp. --- hash/mbee_flop.xml | 2 +- src/mame/drivers/mbee.cpp | 56 ++++++++++++++++++++++++++++++++--------------- src/mame/includes/mbee.h | 3 +++ src/mame/machine/mbee.cpp | 18 ++++++++++----- 4 files changed, 55 insertions(+), 24 deletions(-) diff --git a/hash/mbee_flop.xml b/hash/mbee_flop.xml index 7437b1cad75..82e889fc279 100644 --- a/hash/mbee_flop.xml +++ b/hash/mbee_flop.xml @@ -1435,7 +1435,7 @@ At the time of writing (2021-06-04) any floppy image will work in any emulated d - JHBeesware1 + JHBeesware 1 19?? J and H Beesware diff --git a/src/mame/drivers/mbee.cpp b/src/mame/drivers/mbee.cpp index bd14a316709..06c41e6bc2c 100644 --- a/src/mame/drivers/mbee.cpp +++ b/src/mame/drivers/mbee.cpp @@ -688,8 +688,12 @@ void mbee_state::mbee(machine_config &config) m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); m_cassette->set_interface("mbee_cass"); - GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn").set_device_load(FUNC(mbee_state::pak_load<1U>)); // net - GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<2U>)); // edasm + generic_slot_device &optrom1(GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn")); // net + optrom1.set_device_load(FUNC(mbee_state::pak_load<1U>)); + optrom1.set_device_unload(FUNC(mbee_state::pak_unload<1U>)); + generic_slot_device &optrom2(GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp")); // edasm + optrom2.set_device_load(FUNC(mbee_state::pak_load<2U>)); + optrom2.set_device_unload(FUNC(mbee_state::pak_unload<2U>)); SOFTWARE_LIST(config, "cass_list").set_original("mbee_cass").set_filter("1"); SOFTWARE_LIST(config, "quik_list").set_original("mbee_quik").set_filter("1"); @@ -752,13 +756,27 @@ void mbee_state::mbeeic(machine_config &config) m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); m_cassette->set_interface("mbee_cass"); - GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn").set_device_load(FUNC(mbee_state::pak_load<1U>)); // net - GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<2U>)); // pak0 - GENERIC_SOCKET(config, "optrom3", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<3U>)); // pak1 - GENERIC_SOCKET(config, "optrom4", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<4U>)); // pak2 - GENERIC_SOCKET(config, "optrom5", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<5U>)); // pak3 - GENERIC_SOCKET(config, "optrom6", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<6U>)); // pak4 - GENERIC_SOCKET(config, "optrom7", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<7U>)); // pak5 + generic_slot_device &optrom1(GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn")); // net + optrom1.set_device_load(FUNC(mbee_state::pak_load<1U>)); + optrom1.set_device_unload(FUNC(mbee_state::pak_unload<1U>)); + generic_slot_device &optrom2(GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp")); // pak0 + optrom2.set_device_load(FUNC(mbee_state::pak_load<2U>)); + optrom2.set_device_unload(FUNC(mbee_state::pak_unload<2U>)); + generic_slot_device &optrom3(GENERIC_SOCKET(config, "optrom3", generic_plain_slot, "mbee_pak", "mbp")); // pak1 + optrom3.set_device_load(FUNC(mbee_state::pak_load<3U>)); + optrom3.set_device_unload(FUNC(mbee_state::pak_unload<3U>)); + generic_slot_device &optrom4(GENERIC_SOCKET(config, "optrom4", generic_plain_slot, "mbee_pak", "mbp")); // pak2 + optrom4.set_device_load(FUNC(mbee_state::pak_load<4U>)); + optrom4.set_device_unload(FUNC(mbee_state::pak_unload<4U>)); + generic_slot_device &optrom5(GENERIC_SOCKET(config, "optrom5", generic_plain_slot, "mbee_pak", "mbp")); // pak3 + optrom5.set_device_load(FUNC(mbee_state::pak_load<5U>)); + optrom5.set_device_unload(FUNC(mbee_state::pak_unload<5U>)); + generic_slot_device &optrom6(GENERIC_SOCKET(config, "optrom6", generic_plain_slot, "mbee_pak", "mbp")); // pak4 + optrom6.set_device_load(FUNC(mbee_state::pak_load<6U>)); + optrom6.set_device_unload(FUNC(mbee_state::pak_unload<6U>)); + generic_slot_device &optrom7(GENERIC_SOCKET(config, "optrom7", generic_plain_slot, "mbee_pak", "mbp")); // pak5 + optrom7.set_device_load(FUNC(mbee_state::pak_load<7U>)); + optrom7.set_device_unload(FUNC(mbee_state::pak_unload<7U>)); SOFTWARE_LIST(config, "cass_list").set_original("mbee_cass").set_filter("2"); SOFTWARE_LIST(config, "quik_list").set_original("mbee_quik").set_filter("2"); @@ -794,8 +812,8 @@ void mbee_state::mbee56(machine_config &config) m_fdc->intrq_wr_callback().set(FUNC(mbee_state::fdc_intrq_w)); m_fdc->drq_wr_callback().set(FUNC(mbee_state::fdc_drq_w)); m_fdc->enmf_rd_callback().set_constant(0); - FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); SOFTWARE_LIST(config, "flop_list").set_original("mbee_flop").set_filter("1"); remove_carts(config); @@ -824,24 +842,26 @@ void mbee_state::mbee128p(machine_config &config) m_fdc->intrq_wr_callback().set(FUNC(mbee_state::fdc_intrq_w)); m_fdc->drq_wr_callback().set(FUNC(mbee_state::fdc_drq_w)); m_fdc->enmf_rd_callback().set_constant(0); - FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); SOFTWARE_LIST(config, "flop_list").set_original("mbee_flop").set_filter("3"); remove_carts(config); remove_quick(config); } +void mbee_state::mbeepp(machine_config &config) +{ + mbee128p(config); + SOFTWARE_LIST(config.replace(), "flop_list").set_original("mbee_flop").set_filter("2,3"); +} + void mbee_state::mbee256(machine_config &config) { mbee128p(config); m_maincpu->set_addrmap(AS_PROGRAM, &mbee_state::mbee256_mem); m_maincpu->set_addrmap(AS_IO, &mbee_state::mbee256_io); - config.device_remove("fdc:0"); - config.device_remove("fdc:1"); - FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); TIMER(config, "newkb_timer").configure_periodic(FUNC(mbee_state::newkb_timer), attotime::from_hz(50)); SOFTWARE_LIST(config.replace(), "flop_list").set_original("mbee_flop").set_filter("4"); @@ -1154,4 +1174,4 @@ COMP( 1986, mbeeppc, mbee, 0, mbeeppc, mbee, mbee_state, init_mbeep COMP( 1986, mbeett, mbee, 0, mbeett, mbee256, mbee_state, init_mbeett, "Microbee Systems", "Microbee Teleterm", MACHINE_SUPPORTS_SAVE ) COMP( 1986, mbee128p, mbee, 0, mbee128p, mbee128, mbee_state, init_mbee128p, "Microbee Systems", "Microbee 128k Premium", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) COMP( 1987, mbee256, mbee, 0, mbee256, mbee256, mbee_state, init_mbee256, "Microbee Systems", "Microbee 256TC", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -COMP( 2012, mbeepp, mbee, 0, mbee256, mbee128, mbee_state, init_mbeepp, "Microbee Systems", "Microbee Premium Plus", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 2012, mbeepp, mbee, 0, mbeepp, mbee128, mbee_state, init_mbeepp, "Microbee Systems", "Microbee Premium Plus+", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/mbee.h b/src/mame/includes/mbee.h index 04e212d0791..8958ae2bb52 100644 --- a/src/mame/includes/mbee.h +++ b/src/mame/includes/mbee.h @@ -79,6 +79,7 @@ public: void mbeeic(machine_config &config); void mbeepc85(machine_config &config); void mbee128p(machine_config &config); + void mbeepp(machine_config &config); void remove_carts(machine_config &config); void remove_quick(machine_config &config); @@ -125,8 +126,10 @@ private: uint32_t screen_update_mbee(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(newkb_timer); image_init_result load_cart(device_image_interface &image, generic_slot_device *slot, u8); + void unload_cart(u8); DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); template DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pak_load) { return load_cart(image, m_pak[T], T); } + template DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(pak_unload) { unload_cart(T); } WRITE_LINE_MEMBER(rtc_irq_w); WRITE_LINE_MEMBER(fdc_intrq_w); WRITE_LINE_MEMBER(fdc_drq_w); diff --git a/src/mame/machine/mbee.cpp b/src/mame/machine/mbee.cpp index e6278c42e81..a70c470c445 100644 --- a/src/mame/machine/mbee.cpp +++ b/src/mame/machine/mbee.cpp @@ -746,10 +746,6 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s { image.seterror(IMAGE_ERROR_UNSPECIFIED, "Not a PAK rom"); slot->call_unload(); - if (m_pakdef) - m_pak_extended[pak_index] = (m_p_pakdef[((pak_index+8)<<13)] == 0xff) ? false : true; - else - m_pak_extended[pak_index] = false; return image_init_result::FAIL; } } @@ -774,7 +770,6 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s { image.seterror(IMAGE_ERROR_UNSPECIFIED, "Not a NET rom"); slot->call_unload(); - m_pak_extended[pak_index] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false; return image_init_result::FAIL; } } @@ -783,3 +778,16 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s return image_init_result::PASS; } +void mbee_state::unload_cart(u8 pak_index) +{ + if (pak_index > 1) + { + if (m_pakdef) + m_pak_extended[pak_index] = (m_p_pakdef[((pak_index+8)<<13)] == 0xff) ? false : true; + else + m_pak_extended[pak_index] = false; + } + else + m_pak_extended[pak_index] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false; +} + -- cgit v1.2.3 From 39ce71dda0bb7fb053e5343441c64c1dfc60cd12 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 11 Jun 2021 05:26:50 +1000 Subject: mbee: added optional SN76489A, works with '128pepsgmod' sw-item. --- hash/mbee_flop.xml | 2 +- src/mame/drivers/mbee.cpp | 15 +++++++++++++-- src/mame/includes/mbee.h | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/hash/mbee_flop.xml b/hash/mbee_flop.xml index 82e889fc279..559a945527e 100644 --- a/hash/mbee_flop.xml +++ b/hash/mbee_flop.xml @@ -5629,7 +5629,7 @@ At the time of writing (2021-06-04) any floppy image will work in any emulated d - + EPSGmod Files 19?? <unknown> diff --git a/src/mame/drivers/mbee.cpp b/src/mame/drivers/mbee.cpp index 06c41e6bc2c..ce5bea06fd8 100644 --- a/src/mame/drivers/mbee.cpp +++ b/src/mame/drivers/mbee.cpp @@ -129,6 +129,7 @@ from Brett Selwood and Andrew Davies. #include "emu.h" #include "includes/mbee.h" #include "formats/mbee_cas.h" +#include "sound/sn76496.h" #include "speaker.h" void mbee_state::mbee_mem(address_map &map) @@ -288,6 +289,14 @@ void mbee_state::mbee128_io(address_map &map) map(0x50, 0x57).w(FUNC(mbee_state::port50_w)); } +void mbee_state::mbee128p_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + mbee128_io(map); + map(0x10, 0x13).w("sn1", FUNC(sn76489a_device::write)); +} + void mbee_state::mbee256_io(address_map &map) { map.unmap_value_high(); @@ -301,7 +310,7 @@ void mbee_state::mbee256_io(address_map &map) map(0x000b, 0x000b).mirror(0xff00).w(FUNC(mbee_state::port0b_w)); map(0x000c, 0x000c).mirror(0xff00).r(m_crtc, FUNC(mc6845_device::status_r)).w(FUNC(mbee_state::m6545_index_w)); map(0x000d, 0x000d).mirror(0xff00).r(m_crtc, FUNC(mc6845_device::register_r)).w(FUNC(mbee_state::m6545_data_w)); - // map(0x0010, 0x0013).mirror(0xff00); Optional SN76489AN audio chip (never used) + map(0x0010, 0x0013).mirror(0xff00).w("sn1", FUNC(sn76489a_device::write)); map(0x0018, 0x001b).mirror(0xff00).r(FUNC(mbee_state::port18_r)); map(0x001c, 0x001f).mirror(0xff00).rw(FUNC(mbee_state::port1c_r), FUNC(mbee_state::port1c_w)); map(0x0044, 0x0047).mirror(0xff00).rw(m_fdc, FUNC(wd2793_device::read), FUNC(wd2793_device::write)); @@ -836,7 +845,7 @@ void mbee_state::mbee128p(machine_config &config) { mbeeppc(config); m_maincpu->set_addrmap(AS_PROGRAM, &mbee_state::mbee256_mem); - m_maincpu->set_addrmap(AS_IO, &mbee_state::mbee128_io); + m_maincpu->set_addrmap(AS_IO, &mbee_state::mbee128p_io); WD2793(config, m_fdc, 4_MHz_XTAL / 2); m_fdc->intrq_wr_callback().set(FUNC(mbee_state::fdc_intrq_w)); @@ -845,6 +854,8 @@ void mbee_state::mbee128p(machine_config &config) FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + SN76489A(config, "sn1", 13.5_MHz_XTAL / 4).add_route(ALL_OUTPUTS, "mono", 0.50); + SOFTWARE_LIST(config, "flop_list").set_original("mbee_flop").set_filter("3"); remove_carts(config); remove_quick(config); diff --git a/src/mame/includes/mbee.h b/src/mame/includes/mbee.h index 8958ae2bb52..404601064ab 100644 --- a/src/mame/includes/mbee.h +++ b/src/mame/includes/mbee.h @@ -140,6 +140,7 @@ private: required_device m_palette; void mbee128_io(address_map &map); + void mbee128p_io(address_map &map); void mbee256_io(address_map &map); void mbee256_mem(address_map &map); void mbee56_io(address_map &map); -- cgit v1.2.3 From 3771840ab877b64caf7aaade7b888f08c2ef4d01 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 11 Jun 2021 03:54:51 +0200 Subject: ladybug.cpp: Added diplocs [Guru] --- src/mame/drivers/ladybug.cpp | 68 ++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/mame/drivers/ladybug.cpp b/src/mame/drivers/ladybug.cpp index fb66bf2408e..ddd822e762b 100644 --- a/src/mame/drivers/ladybug.cpp +++ b/src/mame/drivers/ladybug.cpp @@ -263,32 +263,32 @@ static INPUT_PORTS_START( ladybug ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7") PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x02, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) + PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) PORT_DIPLOCATION("SWA(J2):6") PORT_DIPSETTING( 0x00, "3 Letters" ) PORT_DIPSETTING( 0x04, "10 Letters" ) - PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) + PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) PORT_DIPLOCATION("SWA(J2):5") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "Freeze" ) + PORT_DIPNAME( 0x10, 0x10, "Freeze" ) PORT_DIPLOCATION("SWA(J2):4") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):3") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SWA(J2):2") PORT_DIPSETTING( 0x40, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):1") PORT_DIPSETTING( 0x80, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_START("DSW1") - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5") PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) ) @@ -300,7 +300,7 @@ static INPUT_PORTS_START( ladybug ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) /* settings 0x00 through 0x05 all give 1 Coin/1 Credit */ - PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) + PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1") PORT_DIPSETTING( 0x60, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) ) @@ -361,24 +361,24 @@ static INPUT_PORTS_START( snapjack ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7") PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x02, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) + PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) PORT_DIPLOCATION("SWA(J2):6") PORT_DIPSETTING( 0x00, "3 Letters" ) PORT_DIPSETTING( 0x04, "10 Letters" ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):5") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x10, 0x00, "unused1?" ) + PORT_DIPNAME( 0x10, 0x10, "unused1?" ) PORT_DIPLOCATION("SWA(J2):4") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, "unused2?" ) + PORT_DIPNAME( 0x20, 0x20, "unused2?" ) PORT_DIPLOCATION("SWA(J2):3") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):2,1") PORT_DIPSETTING( 0x00, "2" ) PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x80, "4" ) @@ -386,7 +386,7 @@ static INPUT_PORTS_START( snapjack ) PORT_START("DSW1") /* coinage is slightly different from Lady Bug and Cosmic Avenger */ - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5") PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) ) @@ -399,7 +399,7 @@ static INPUT_PORTS_START( snapjack ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) /* settings 0x00 through 0x04 all give 1 Coin/1 Credit */ - PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) + PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1") PORT_DIPSETTING( 0x50, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x70, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) ) @@ -449,30 +449,30 @@ static INPUT_PORTS_START( cavenger ) PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7") PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x02, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) + PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) PORT_DIPLOCATION("SWA(J2):6") PORT_DIPSETTING( 0x00, "3 Letters" ) PORT_DIPSETTING( 0x04, "10 Letters" ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):5") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x30, 0x00, "Initial High Score" ) + PORT_DIPNAME( 0x30, 0x00, "Initial High Score" ) PORT_DIPLOCATION("SWA(J2):4,3") PORT_DIPSETTING( 0x00, "0" ) PORT_DIPSETTING( 0x30, "5000" ) PORT_DIPSETTING( 0x20, "8000" ) PORT_DIPSETTING( 0x10, "10000" ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):2,1") PORT_DIPSETTING( 0x00, "2" ) PORT_DIPSETTING( 0xc0, "3" ) PORT_DIPSETTING( 0x80, "4" ) PORT_DIPSETTING( 0x40, "5" ) PORT_START("DSW1") - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5") PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) ) @@ -484,7 +484,7 @@ static INPUT_PORTS_START( cavenger ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) /* settings 0x00 through 0x05 all give 1 Coin/1 Credit */ - PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) + PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1") PORT_DIPSETTING( 0x60, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) ) @@ -531,32 +531,32 @@ static INPUT_PORTS_START( dorodon ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7") PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x02, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWA(J2):6") PORT_DIPSETTING( 0x04, "20000" ) PORT_DIPSETTING( 0x00, "30000" ) - PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) + PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) PORT_DIPLOCATION("SWA(J2):5") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "Freeze" ) + PORT_DIPNAME( 0x10, 0x10, "Freeze" ) PORT_DIPLOCATION("SWA(J2):4") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):3") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SWA(J2):2") PORT_DIPSETTING( 0x40, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):1") PORT_DIPSETTING( 0x80, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_START("DSW1") - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5") PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) ) @@ -568,7 +568,7 @@ static INPUT_PORTS_START( dorodon ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) /* settings 0x00 through 0x05 all give 1 Coin/1 Credit */ - PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) + PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1") PORT_DIPSETTING( 0x60, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) ) @@ -1118,7 +1118,7 @@ ROM_START( mrsdyna ) ROM_REGION( 0x10000, "maincpu", 0 ) // NOTE: Mrs. Dynamite returns ROM ERROR in test mode. It does an 8-bit checksum on these 3 // ROMs and computes 0xFF. The answer to pass the test is 0x00. - // THowever, these images were dumped twice, and seem to work fine. + // However, these images were dumped twice, and seem to work fine. ROM_LOAD( "mrsd-8203a-r4.f3", 0x0000, 0x2000, CRC(c944062c) SHA1(c61fc327d67595e601f6a7e5e337646f5f9d351b) ) ROM_LOAD( "mrsd-8203a-n4.f2", 0x2000, 0x2000, CRC(d1b9c7bb) SHA1(c139c8ae5b14924eb04a265095a7ab95ac5370af) ) ROM_LOAD( "mrsd-8203a-m4.f1", 0x4000, 0x2000, CRC(d25b1dfe) SHA1(f68c6fb2cda37fcffbe7c3c2a3cc5cb372c4101b) ) -- cgit v1.2.3 From fe05a94c29ce41a30380dd0dac0d5a8d7e6beadf Mon Sep 17 00:00:00 2001 From: cracyc Date: Thu, 10 Jun 2021 21:31:35 -0500 Subject: x68k: remove unneeded --- src/mame/includes/x68k.h | 1 - src/mame/video/x68k.cpp | 11 +---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/mame/includes/x68k.h b/src/mame/includes/x68k.h index f22d422b1c1..45a68de4305 100644 --- a/src/mame/includes/x68k.h +++ b/src/mame/includes/x68k.h @@ -198,7 +198,6 @@ protected: int bg_hshift; int bg_vshift; int bg_hvres; // bits 0,1 = H-Res, bits 2,3 = V-Res, bit 4 = L/H Freq (0=15.98kHz, 1=31.5kHz) - int bg_double; // 1 if PCG is to be doubled. } m_video; struct { diff --git a/src/mame/video/x68k.cpp b/src/mame/video/x68k.cpp index f0d7303f134..2ac1a4e9e4a 100644 --- a/src/mame/video/x68k.cpp +++ b/src/mame/video/x68k.cpp @@ -148,15 +148,6 @@ void x68k_state::spritereg_w(offs_t offset, uint16_t data, uint16_t mem_mask) break; case 0x408: // BG H/V-Res m_video.bg_hvres = data & 0x1f; - if(data != 0xff) - { // Handle when the PCG is using 256 and the CRTC is using 512 - if((m_video.bg_hvres & 0x0c) == 0x00 && m_crtc->vfactor() == 1) - m_video.bg_double = 2; - else - m_video.bg_double = 1; - } - else - m_video.bg_double = 1; break; } } @@ -546,7 +537,7 @@ void x68k_state::draw_sprites(bitmap_ind16 &bitmap, int priority, rectangle clip sx += m_video.bg_hshift; sx += m_sprite_shift; - m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,code,colour,xflip,yflip,m_crtc->hbegin()+sx,(m_crtc->vbegin() / divisor)+(sy*m_video.bg_double),0x10000,0x10000*m_video.bg_double,0x00); + m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,code,colour,xflip,yflip,m_crtc->hbegin()+sx,(m_crtc->vbegin() / divisor)+sy,0x10000,0x10000,0x00); } } } -- cgit v1.2.3 From 89cc8a7e3cc6433c7e80cc421dbf6edfbb22d3e1 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 11 Jun 2021 14:27:51 +1000 Subject: New working software list additions ----------------------------------- super80_cass: Crazy Maze [Maxtrix Software] Crazy Maze (L4) (with arrows) [Matrix Software, Robbbert] --- hash/super80_cass.xml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/hash/super80_cass.xml b/hash/super80_cass.xml index 0bc4481bfa3..974b2886fa0 100644 --- a/hash/super80_cass.xml +++ b/hash/super80_cass.xml @@ -1647,6 +1647,31 @@ X-3607 : Horse Race + + Crazy Maze + 198? + Matrix Software + + + + + + + + + + Crazy Maze (L4) (with arrows) + 198? + Matrix Software + + + + + + + + + + + + + + + + + Sandy Edition - Master Chess 1981 Applied Concepts / Sandy Electronic diff --git a/src/mame/drivers/aci_ggm.cpp b/src/mame/drivers/aci_ggm.cpp index 225e5418067..bb9c52b1609 100644 --- a/src/mame/drivers/aci_ggm.cpp +++ b/src/mame/drivers/aci_ggm.cpp @@ -7,7 +7,7 @@ Applied Concepts Great Game Machine (GGM), electronic board game computer. 2nd source distribution: Modular Game System (MGS), by Chafitz. Hardware notes: -- 6502A 2MHz (unknown XTAL, label "5-80"), SYP6522 VIA +- 6502A 2MHz, SYP6522 VIA - 2KB RAM(4*HM472114AP-2), no ROM on main PCB - 2*74164 shift register, 3*6118P VFD driver - 8-digit 14seg VFD panel (same one as in Speak & Spell) @@ -19,7 +19,7 @@ There were also some standalone machines, eg. Morphy Encore, Odin Encore. Known chess cartridges (*denotes not dumped): - Chess/Boris 2.5 (aka Sargon 2.5) - *Gruenfeld Edition - Master Chess Openings -- *Morphy Edition - Master Chess +- Morphy Edition - Master Chess - Capablanca Edition - Master Chess Endgame - Sandy Edition - Master Chess (German language version of Morphy) - Steinitz Edition-4 - Master Chess @@ -40,7 +40,6 @@ TODO: - it doesn't have nvram, it's a workaround for MAME forcing a hard reset when swapping in a new cartridge - what's VIA PB0 for? game toggles it once per irq -- identify XTAL (2MHz CPU/VIA is correct, compared to video reference) - confirm display AP segment, is it used anywhere? - verify cartridge pinout, right now assume A0-A15 (max known cart size is 24KB). Boris/Sargon cartridge is A0-A11 and 2 CS lines, Steinitz uses the whole range. @@ -432,10 +431,10 @@ INPUT_PORTS_END void ggm_state::ggm(machine_config &config) { /* basic machine hardware */ - M6502(config, m_maincpu, 2000000); + M6502(config, m_maincpu, 2_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &ggm_state::main_map); - MOS6522(config, m_via, 2000000); // DDRA = 0xff, DDRB = 0x81 + MOS6522(config, m_via, 2_MHz_XTAL); // DDRA = 0xff, DDRB = 0x81 m_via->writepa_handler().set(FUNC(ggm_state::select_w)); m_via->writepb_handler().set(FUNC(ggm_state::control_w)); m_via->readpb_handler().set(FUNC(ggm_state::input_r)); -- cgit v1.2.3 From 081ec944a651a5e700ad0df8e3dd6335c4a121a3 Mon Sep 17 00:00:00 2001 From: cracyc Date: Fri, 11 Jun 2021 09:27:55 -0500 Subject: x68k: seems pcg can set it's own vertical freq apart from the crtc --- src/mame/video/x68k.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mame/video/x68k.cpp b/src/mame/video/x68k.cpp index 2ac1a4e9e4a..8477d8cc040 100644 --- a/src/mame/video/x68k.cpp +++ b/src/mame/video/x68k.cpp @@ -510,7 +510,7 @@ void x68k_state::draw_sprites(bitmap_ind16 &bitmap, int priority, rectangle clip */ int ptr,pri; int divisor = 1; - if(!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) + if((!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) || ((m_video.bg_hvres & 0x1c) == 0x10 && m_crtc->vfactor() == 1)) divisor = 2; for(ptr=508;ptr>=0;ptr-=4) // stepping through sprites @@ -550,7 +550,7 @@ void x68k_state::draw_bg(bitmap_ind16 &bitmap, screen_device &screen, int layer, tilemap_t* x68k_bg1; tilemap_t* map; int divisor = 1; - if(!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) + if((!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) || ((m_video.bg_hvres & 0x1c) == 0x10 && m_crtc->vfactor() == 1)) divisor = 2; if((m_spritereg[0x408] & 0x03) == 0x00) // Sprite/BG H-Res 0=8x8, 1=16x16, 2 or 3 = undefined. @@ -751,7 +751,7 @@ uint32_t x68k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, { rectangle pcgrect = rect; int divisor = 1; - if(!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) + if((!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) || ((m_video.bg_hvres & 0x1c) == 0x10 && m_crtc->vfactor() == 1)) { pcgrect.max_y >>= 1; pcgrect.min_y >>= 1; -- cgit v1.2.3 From da36cacbb5be1b3506533812186ccb06e8ecec4f Mon Sep 17 00:00:00 2001 From: Ville Linde Date: Fri, 11 Jun 2021 19:38:03 +0300 Subject: k037122: Better ram layout logic. Implemented ROZ and scrolling. --- src/mame/video/k037122.cpp | 153 +++++++++++++++++++++++++-------------------- src/mame/video/k037122.h | 10 +-- 2 files changed, 91 insertions(+), 72 deletions(-) diff --git a/src/mame/video/k037122.cpp b/src/mame/video/k037122.cpp index c8086c59f41..61a84b20cf7 100644 --- a/src/mame/video/k037122.cpp +++ b/src/mame/video/k037122.cpp @@ -14,8 +14,8 @@ Konami 037122 ---------------- -----xxxxx------ Red ---------------- ----------xxxxxx Green - Tilemap is can be rotated, zoomed, similar as K053936 "simple mode" - Tilemap size is 256x64 (2048x512 pixels) or 128x64 (1024x512 pixels), Each tile is 8bpp 8x8. + Tilemap is can be rotated, zoomed, similar as K053936 "simple mode" + Tilemap can be configured either as 256x64 tiles (2048x512 pixels) or 128x128 tiles (1024x1024 pixels), Each tile is 8bpp 8x8. Tile format (4 byte (1x32bit word) per each tile) Bits Description @@ -44,12 +44,17 @@ Konami 037122 ---------------- xxxxxxxxxxxxxxxx Vertical back porch - 2 20 sxxxxxxxxxxxxxxx ---------------- X counter starting value (12.4 fixed point) ---------------- sxxxxxxxxxxxxxxx Y counter starting value (12.4 fixed point) - 24 ---------------- sxxxxxxxxxxxxxxx amount to add to the Y counter after each line (4.12 fixed point) + 24 sxxxxxxxxxxxxxxx ---------------- amount to add to the X counter after each line (4.12 fixed point) + ---------------- sxxxxxxxxxxxxxxx amount to add to the Y counter after each line (4.12 fixed point) 28 sxxxxxxxxxxxxxxx ---------------- amount to add to the X counter after each horizontal pixel (4.12 fixed point) - 30 ---------------x ---------------- VRAM mapping mode - ---------------0 ---------------- CLUT at 0x00000-0x08000, Display tilemap area at 0x08000-0x18000 (256x64) - ---------------1 ---------------- CLUT at 0x18000-0x20000, Display tilemap area at 0x00000-0x08000 (128x64) + ---------------- sxxxxxxxxxxxxxxx amount to add to the Y counter after each horizontal pixel (4.12 fixed point) + 30 ---------------x ---------------- Tilemap size + ---------------0 ---------------- 128x128 + ---------------1 ---------------- 256x64 ---------------- -------------xxx Character RAM bank + 34 ---------------- -------------x-- CLUT location + ---------------- -------------0-- CLUT at 0x00000-0x08000 + ---------------- -------------1-- CLUT at 0x18000-0x20000 Other bits/registers unknown, some registers are used @@ -106,18 +111,19 @@ void k037122_device::device_start() m_tile_ram = make_unique_clear(0x20000 / 4); m_reg = make_unique_clear(0x400 / 4); - m_layer[0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info_layer0)), TILEMAP_SCAN_ROWS, 8, 8, 256, 64); - m_layer[1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info_layer1)), TILEMAP_SCAN_ROWS, 8, 8, 128, 64); + m_tilemap_128 = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 128, 128); + m_tilemap_256 = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 256, 64); - m_layer[0]->set_transparent_pen(0); - m_layer[1]->set_transparent_pen(0); + m_tilemap_128->set_transparent_pen(0); + m_tilemap_256->set_transparent_pen(0); set_gfx(m_gfx_index,std::make_unique(&palette(), k037122_char_layout, (uint8_t*)m_char_ram.get(), 0, palette().entries() / 16, 0)); save_pointer(NAME(m_reg), 0x400 / 4); save_pointer(NAME(m_char_ram), 0x200000 / 4); save_pointer(NAME(m_tile_ram), 0x20000 / 4); - + save_item(NAME(m_tilemap_base)); + save_item(NAME(m_palette_base)); } //------------------------------------------------- @@ -129,30 +135,18 @@ void k037122_device::device_reset() memset(m_char_ram.get(), 0, 0x200000); memset(m_tile_ram.get(), 0, 0x20000); memset(m_reg.get(), 0, 0x400); + + m_tilemap_base = 0; + m_palette_base = 0; } /***************************************************************************** DEVICE HANDLERS *****************************************************************************/ -TILE_GET_INFO_MEMBER(k037122_device::tile_info_layer0) -{ - uint32_t val = m_tile_ram[tile_index + (0x8000/4)]; - int color = (val >> 17) & 0x1f; - int tile = val & 0x3fff; - int flags = 0; - - if (val & 0x400000) - flags |= TILE_FLIPX; - if (val & 0x800000) - flags |= TILE_FLIPY; - - tileinfo.set(m_gfx_index, tile, color, flags); -} - -TILE_GET_INFO_MEMBER(k037122_device::tile_info_layer1) -{ - uint32_t val = m_tile_ram[tile_index]; +TILE_GET_INFO_MEMBER(k037122_device::tile_info) +{ + uint32_t val = m_tile_ram[tile_index + (m_tilemap_base / 4)]; int color = (val >> 17) & 0x1f; int tile = val & 0x3fff; int flags = 0; @@ -170,25 +164,38 @@ void k037122_device::tile_draw( screen_device &screen, bitmap_rgb32 &bitmap, con { const rectangle &visarea = screen.visible_area(); + int16_t scrollx = m_reg[0x8] >> 16; + int16_t scrolly = m_reg[0x8] & 0xffff; + + int16_t incxx = m_reg[0xa] >> 16; + int16_t incxy = m_reg[0xa] & 0xffff; + int16_t incyx = m_reg[0x9] >> 16; + int16_t incyy = m_reg[0x9] & 0xffff; + + // on 256x64 tilemap y-scroll seems to be 8.4 fixed point instead + int16_t scrolly_256 = scrolly; + if (scrolly_256 & 0x800) + scrolly_256 |= 0xf000; + if (m_reg[0xc] & 0x10000) { - m_layer[1]->set_scrolldx(visarea.min_x, visarea.min_x); - m_layer[1]->set_scrolldy(visarea.min_y, visarea.min_y); - m_layer[1]->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap_128->set_scrolldx(visarea.min_x, visarea.min_x); + m_tilemap_128->set_scrolldy(visarea.min_y, visarea.min_y); + + m_tilemap_128->draw_roz(screen, bitmap, cliprect, (int32_t)(scrollx) << 12, (int32_t)(scrolly) << 12, + (int32_t)(incxx) << 4, (int32_t)(incxy) << 4, (int32_t)(incyx), (int32_t)(incyy) << 4, + false, 0, 0); } else { - m_layer[0]->set_scrolldx(visarea.min_x, visarea.min_x); - m_layer[0]->set_scrolldy(visarea.min_y, visarea.min_y); - m_layer[0]->draw(screen, bitmap, cliprect, 0, 0); - } -} - -void k037122_device::update_palette_color( uint32_t palette_base, int color ) -{ - uint32_t data = m_tile_ram[(palette_base / 4) + color]; + m_tilemap_256->set_scrolldx(visarea.min_x, visarea.min_x); + m_tilemap_256->set_scrolldy(visarea.min_y, visarea.min_y); - palette().set_pen_color(color, pal5bit(data >> 6), pal6bit(data >> 0), pal5bit(data >> 11)); + m_tilemap_256->draw_roz(screen, bitmap, cliprect, (int32_t)(scrollx) << 12, (int32_t)(scrolly_256) << 12, + (int32_t)(incxx) << 4, (int32_t)(incxy) << 4, (int32_t)(incyx) << 4, (int32_t)(incyy) << 4, + false, 0, 0); + } + } uint32_t k037122_device::sram_r(offs_t offset) @@ -200,35 +207,18 @@ void k037122_device::sram_w(offs_t offset, uint32_t data, uint32_t mem_mask) { COMBINE_DATA(m_tile_ram.get() + offset); - if (m_reg[0xc] & 0x10000) + uint32_t address = offset * 4; + + if (address >= m_palette_base && address < m_palette_base + 0x8000) { - if (offset < 0x8000 / 4) - { - m_layer[1]->mark_tile_dirty(offset); - } - else if (offset >= 0x8000 / 4 && offset < 0x18000 / 4) - { - m_layer[0]->mark_tile_dirty(offset - (0x8000 / 4)); - } - else if (offset >= 0x18000 / 4) - { - update_palette_color(0x18000, offset - (0x18000 / 4)); - } + int color = (address - m_palette_base) / 4; + palette().set_pen_color(color, pal5bit(data >> 6), pal6bit(data >> 0), pal5bit(data >> 11)); } - else + + if (address >= m_tilemap_base && address < m_tilemap_base + 0x10000) { - if (offset < 0x8000 / 4) - { - update_palette_color(0, offset); - } - else if (offset >= 0x8000 / 4 && offset < 0x18000 / 4) - { - m_layer[0]->mark_tile_dirty(offset - (0x8000 / 4)); - } - else if (offset >= 0x18000 / 4) - { - m_layer[1]->mark_tile_dirty(offset - (0x18000 / 4)); - } + m_tilemap_128->mark_tile_dirty((address - m_tilemap_base) / 4); + m_tilemap_256->mark_tile_dirty((address - m_tilemap_base) / 4); } } @@ -263,5 +253,32 @@ uint32_t k037122_device::reg_r(offs_t offset) void k037122_device::reg_w(offs_t offset, uint32_t data, uint32_t mem_mask) { + if (offset == 0x34/4 && ACCESSING_BITS_0_15) + { + uint32_t palette_base = (data & 0x4) ? 0x18000 : 0x00000; + + // tilemap is at 0x00000 unless CLUT is there + uint32_t tilemap_base = (data & 0x4) ? 0x00000 : 0x08000; + + if (palette_base != m_palette_base) + { + m_palette_base = palette_base; + + // update all colors since palette moved + for (auto p = 0; p < 8192; p++) + { + uint32_t color = m_tile_ram[(m_palette_base / 4) + p]; + palette().set_pen_color(p, pal5bit(color >> 6), pal6bit(color >> 0), pal5bit(color >> 11)); + } + } + + if (tilemap_base != m_tilemap_base) + { + m_tilemap_128->mark_all_dirty(); + m_tilemap_256->mark_all_dirty(); + m_tilemap_base = tilemap_base; + } + } + COMBINE_DATA(m_reg.get() + offset); } diff --git a/src/mame/video/k037122.h b/src/mame/video/k037122.h index a39c1d572d5..a36bb793dec 100644 --- a/src/mame/video/k037122.h +++ b/src/mame/video/k037122.h @@ -33,7 +33,11 @@ protected: private: // internal state - tilemap_t *m_layer[2]; + tilemap_t* m_tilemap_128; + tilemap_t* m_tilemap_256; + + uint32_t m_palette_base; + uint32_t m_tilemap_base; std::unique_ptr m_tile_ram; std::unique_ptr m_char_ram; @@ -41,9 +45,7 @@ private: int m_gfx_index; - TILE_GET_INFO_MEMBER(tile_info_layer0); - TILE_GET_INFO_MEMBER(tile_info_layer1); - void update_palette_color( uint32_t palette_base, int color ); + TILE_GET_INFO_MEMBER(tile_info); }; DECLARE_DEVICE_TYPE(K037122, k037122_device) -- cgit v1.2.3 From 089259b8886f9effdfed561c050f12d98d25c025 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 11 Jun 2021 19:13:22 +0200 Subject: New working clones ------------------ Ojanko Club (Japan, Program Ver. 1.3, set 2) [system11] --- src/mame/drivers/ojankohs.cpp | 356 +++++++++++++++++++++--------------------- src/mame/includes/ojankohs.h | 175 ++++++++++++--------- src/mame/mame.lst | 1 + src/mame/video/ojankohs.cpp | 81 +++++----- 4 files changed, 311 insertions(+), 302 deletions(-) diff --git a/src/mame/drivers/ojankohs.cpp b/src/mame/drivers/ojankohs.cpp index 031a4ab301e..e1c7c7bafa5 100644 --- a/src/mame/drivers/ojankohs.cpp +++ b/src/mame/drivers/ojankohs.cpp @@ -32,19 +32,18 @@ #include "cpu/z80/z80.h" #include "machine/nvram.h" #include "sound/ay8910.h" -#include "sound/msm5205.h" #include "video/vsystem_gga.h" #include "speaker.h" -void ojankohs_state::ojankohs_rombank_w(uint8_t data) +void ojankohs_state::rombank_w(uint8_t data) { - membank("bank1")->set_entry(data & 0x3f); + m_mainbank->set_entry(data & 0x3f); } -void ojankohs_state::ojankoy_rombank_w(uint8_t data) +void ojankoy_state::rombank_w(uint8_t data) { - membank("bank1")->set_entry(data & 0x1f); + m_mainbank->set_entry(data & 0x1f); m_adpcm_reset = BIT(data, 5); if (!m_adpcm_reset) @@ -53,7 +52,7 @@ void ojankohs_state::ojankoy_rombank_w(uint8_t data) m_msm->reset_w(!m_adpcm_reset); } -void ojankohs_state::ojankohs_adpcm_reset_w(uint8_t data) +void ojankohs_state::adpcm_reset_w(uint8_t data) { m_adpcm_reset = BIT(data, 0); m_vclk_left = 0; @@ -61,19 +60,19 @@ void ojankohs_state::ojankohs_adpcm_reset_w(uint8_t data) m_msm->reset_w(!m_adpcm_reset); } -void ojankohs_state::ojankohs_msm5205_w(uint8_t data) +void ojankohs_state::msm5205_w(uint8_t data) { m_adpcm_data = data; m_vclk_left = 2; } -WRITE_LINE_MEMBER(ojankohs_state::ojankohs_adpcm_int) +WRITE_LINE_MEMBER(ojankohs_state::adpcm_int) { - /* skip if we're reset */ + // skip if we're reset if (!m_adpcm_reset) return; - /* clock the data through */ + // clock the data through if (m_vclk_left) { m_msm->data_w(m_adpcm_data >> 4); @@ -81,99 +80,99 @@ WRITE_LINE_MEMBER(ojankohs_state::ojankohs_adpcm_int) m_vclk_left--; } - /* generate an NMI if we're out of data */ + // generate an NMI if we're out of data if (!m_vclk_left) m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -void ojankohs_state::ojankoc_ctrl_w(uint8_t data) +void ojankoc_state::ctrl_w(uint8_t data) { - membank("bank1")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); m_adpcm_reset = BIT(data, 4); m_msm->reset_w(!BIT(data, 4)); - ojankoc_flipscreen(data); + flipscreen(data); } -void ojankohs_state::ojankohs_map(address_map &map) +void ojankohs_state::map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x8fff).ram().w(FUNC(ojankohs_state::ojankohs_videoram_w)).share("videoram"); - map(0x9000, 0x9fff).ram().w(FUNC(ojankohs_state::ojankohs_colorram_w)).share("colorram"); + map(0x8000, 0x8fff).ram().w(FUNC(ojankohs_state::videoram_w)).share(m_videoram); + map(0x9000, 0x9fff).ram().w(FUNC(ojankohs_state::colorram_w)).share(m_colorram); map(0xa000, 0xb7ff).ram().share("nvram"); - map(0xb800, 0xbfff).ram().w(FUNC(ojankohs_state::ojankohs_palette_w)).share("paletteram"); - map(0xc000, 0xffff).bankr("bank1"); + map(0xb800, 0xbfff).ram().w(FUNC(ojankohs_state::palette_w)).share(m_paletteram); + map(0xc000, 0xffff).bankr(m_mainbank); } -void ojankohs_state::ojankoy_map(address_map &map) +void ojankoy_state::map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x9fff).ram().w(FUNC(ojankohs_state::ojankohs_videoram_w)).share("videoram"); - map(0xa000, 0xafff).ram().w(FUNC(ojankohs_state::ojankohs_colorram_w)).share("colorram"); + map(0x8000, 0x9fff).ram().w(FUNC(ojankoy_state::videoram_w)).share(m_videoram); + map(0xa000, 0xafff).ram().w(FUNC(ojankoy_state::colorram_w)).share(m_colorram); map(0xb000, 0xbfff).ram().share("nvram"); - map(0xc000, 0xffff).bankr("bank1"); + map(0xc000, 0xffff).bankr(m_mainbank); } -void ojankohs_state::ojankoc_map(address_map &map) +void ojankoc_state::map(address_map &map) { map(0x0000, 0x77ff).rom(); map(0x7800, 0x7fff).ram().share("nvram"); - map(0x8000, 0xffff).bankr("bank1").w(FUNC(ojankohs_state::ojankoc_videoram_w)); + map(0x8000, 0xffff).bankr(m_mainbank).w(FUNC(ojankoc_state::videoram_w)); } -void ojankohs_state::ojankohs_io_map(address_map &map) +void ojankohs_state::io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).portr("system").w(FUNC(ojankohs_state::port_select_w)); - map(0x01, 0x01).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::ojankohs_rombank_w)); - map(0x02, 0x02).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::ojankohs_gfxreg_w)); - map(0x03, 0x03).w(FUNC(ojankohs_state::ojankohs_adpcm_reset_w)); - map(0x04, 0x04).w(FUNC(ojankohs_state::ojankohs_flipscreen_w)); - map(0x05, 0x05).w(FUNC(ojankohs_state::ojankohs_msm5205_w)); + map(0x01, 0x01).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::rombank_w)); + map(0x02, 0x02).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::gfxreg_w)); + map(0x03, 0x03).w(FUNC(ojankohs_state::adpcm_reset_w)); + map(0x04, 0x04).w(FUNC(ojankohs_state::flipscreen_w)); + map(0x05, 0x05).w(FUNC(ojankohs_state::msm5205_w)); map(0x06, 0x06).r("aysnd", FUNC(ym2149_device::data_r)); map(0x06, 0x07).w("aysnd", FUNC(ym2149_device::data_address_w)); map(0x10, 0x11).w("gga", FUNC(vsystem_gga_device::write)); } -void ojankohs_state::ojankoy_io_map(address_map &map) +void ojankoy_state::io_map(address_map &map) { map.global_mask(0xff); - map(0x00, 0x00).portr("system").w(FUNC(ojankohs_state::port_select_w)); - map(0x01, 0x01).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::ojankoy_rombank_w)); - map(0x02, 0x02).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::ojankoy_coinctr_w)); - map(0x04, 0x04).w(FUNC(ojankohs_state::ojankohs_flipscreen_w)); - map(0x05, 0x05).w(FUNC(ojankohs_state::ojankohs_msm5205_w)); + map(0x00, 0x00).portr("system").w(FUNC(ojankoy_state::port_select_w)); + map(0x01, 0x01).rw(FUNC(ojankoy_state::keymatrix_p1_r), FUNC(ojankoy_state::rombank_w)); + map(0x02, 0x02).rw(FUNC(ojankoy_state::keymatrix_p2_r), FUNC(ojankoy_state::coinctr_w)); + map(0x04, 0x04).w(FUNC(ojankoy_state::flipscreen_w)); + map(0x05, 0x05).w(FUNC(ojankoy_state::msm5205_w)); map(0x06, 0x06).r("aysnd", FUNC(ay8910_device::data_r)); map(0x06, 0x07).w("aysnd", FUNC(ay8910_device::data_address_w)); } -void ojankohs_state::ccasino_io_map(address_map &map) +void ccasino_state::io_map(address_map &map) { - map(0x00, 0x00).mirror(0xff00).portr("system").w(FUNC(ojankohs_state::port_select_w)); - map(0x01, 0x01).mirror(0xff00).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::ojankohs_rombank_w)); - map(0x02, 0x02).mirror(0xff00).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::ccasino_coinctr_w)); - map(0x03, 0x03).mirror(0xff00).r(FUNC(ojankohs_state::ccasino_dipsw3_r)).w(FUNC(ojankohs_state::ojankohs_adpcm_reset_w)); - map(0x04, 0x04).mirror(0xff00).r(FUNC(ojankohs_state::ccasino_dipsw4_r)).w(FUNC(ojankohs_state::ojankohs_flipscreen_w)); - map(0x05, 0x05).mirror(0xff00).w(FUNC(ojankohs_state::ojankohs_msm5205_w)); + map(0x00, 0x00).mirror(0xff00).portr("system").w(FUNC(ccasino_state::port_select_w)); + map(0x01, 0x01).mirror(0xff00).rw(FUNC(ccasino_state::keymatrix_p1_r), FUNC(ccasino_state::rombank_w)); + map(0x02, 0x02).mirror(0xff00).rw(FUNC(ccasino_state::keymatrix_p2_r), FUNC(ccasino_state::coinctr_w)); + map(0x03, 0x03).mirror(0xff00).r(FUNC(ccasino_state::dipsw3_r)).w(FUNC(ccasino_state::adpcm_reset_w)); + map(0x04, 0x04).mirror(0xff00).r(FUNC(ccasino_state::dipsw4_r)).w(FUNC(ccasino_state::flipscreen_w)); + map(0x05, 0x05).mirror(0xff00).w(FUNC(ccasino_state::msm5205_w)); map(0x06, 0x06).mirror(0xff00).r("aysnd", FUNC(ay8910_device::data_r)); map(0x06, 0x07).mirror(0xff00).w("aysnd", FUNC(ay8910_device::data_address_w)); - map(0x08, 0x0f).select(0xff00).w(FUNC(ojankohs_state::ccasino_palette_w)); // 16bit address access + map(0x08, 0x0f).select(0xff00).w(FUNC(ccasino_state::palette_w)); // 16bit address access map(0x10, 0x11).mirror(0xff00).w("gga", FUNC(vsystem_gga_device::write)); } -void ojankohs_state::ojankoc_io_map(address_map &map) +void ojankoc_state::io_map(address_map &map) { map.global_mask(0xff); - map(0x00, 0x1f).w(FUNC(ojankohs_state::ojankoc_palette_w)); - map(0xf9, 0xf9).w(FUNC(ojankohs_state::ojankohs_msm5205_w)); - map(0xfb, 0xfb).w(FUNC(ojankohs_state::ojankoc_ctrl_w)); - map(0xfc, 0xfc).r(FUNC(ojankohs_state::ojankoc_keymatrix_p1_r)); - map(0xfd, 0xfd).r(FUNC(ojankohs_state::ojankoc_keymatrix_p2_r)); - map(0xfd, 0xfd).w(FUNC(ojankohs_state::port_select_w)); + map(0x00, 0x1f).w(FUNC(ojankoc_state::palette_w)); + map(0xf9, 0xf9).w(FUNC(ojankoc_state::msm5205_w)); + map(0xfb, 0xfb).w(FUNC(ojankoc_state::ctrl_w)); + map(0xfc, 0xfc).r(FUNC(ojankoc_state::keymatrix_p1_r)); + map(0xfd, 0xfd).r(FUNC(ojankoc_state::keymatrix_p2_r)); + map(0xfd, 0xfd).w(FUNC(ojankoc_state::port_select_w)); map(0xfe, 0xff).w("aysnd", FUNC(ay8910_device::data_address_w)); map(0xff, 0xff).r("aysnd", FUNC(ay8910_device::data_r)); } @@ -521,22 +520,23 @@ static INPUT_PORTS_START( ojankoc ) PORT_DIPSETTING( 0x06, "1000") PORT_DIPSETTING( 0x04, "2000") PORT_DIPSETTING( 0x02, "3000") - PORT_DIPSETTING( 0x00, "5000") - PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW1:4") - PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW1:5") - PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW1:6") - PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW1:7") + PORT_DIPSETTING( 0x00, "5000") // dip sheet says 4000, but verified 5000 in game for all dumped sets + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW1:4") // marked as off in the dip sheet + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW1:5") // marked as off in the dip sheet + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW1:6") // marked as off in the dip sheet + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW1:7") // marked as off in the dip sheet PORT_SERVICE_DIPLOC(0x80, IP_ACTIVE_LOW, "DSW1:8") - PORT_START("dsw2") - PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW2:1") - PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW2:2") - PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW2:3") - PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW2:4") - PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW2:5") - PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW2:6") - PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW2:7") - PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW2:8") + PORT_START("dsw2") // dip sheet shows you have to turn all the dips off but the one that determines the difficulty you want + PORT_DIPNAME(0xff, 0xef, DEF_STR( Difficulty )) PORT_DIPLOCATION("DSW2:1,2,3,4,5,6,7,8") + PORT_DIPSETTING( 0xfe, "A (easiest)") + PORT_DIPSETTING( 0xfd, "B") + PORT_DIPSETTING( 0xfb, "C") + PORT_DIPSETTING( 0xf7, "D") + PORT_DIPSETTING( 0xef, "E") + PORT_DIPSETTING( 0xdf, "F") + PORT_DIPSETTING( 0xbf, "G") + PORT_DIPSETTING( 0x7f, "H (most difficult)") INPUT_PORTS_END @@ -579,7 +579,7 @@ uint8_t ojankohs_state::keymatrix_p2_r() return data; } -uint8_t ojankohs_state::ojankoc_keymatrix_p1_r() +uint8_t ojankoc_state::keymatrix_p1_r() { uint8_t data = 0x00; @@ -593,7 +593,7 @@ uint8_t ojankohs_state::ojankoc_keymatrix_p1_r() return data; } -uint8_t ojankohs_state::ojankoc_keymatrix_p2_r() +uint8_t ojankoc_state::keymatrix_p2_r() { uint8_t data = 0x00; @@ -607,34 +607,34 @@ uint8_t ojankohs_state::ojankoc_keymatrix_p2_r() return data; } -uint8_t ojankohs_state::ojankohs_dipsw1_r() +uint8_t ojankohs_state::dipsw1_r() { - uint8_t data = m_dsw1->read(); + uint8_t data = m_dsw[0]->read(); return bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7); } -uint8_t ojankohs_state::ojankohs_dipsw2_r() +uint8_t ojankohs_state::dipsw2_r() { - uint8_t data = m_dsw2->read(); + uint8_t data = m_dsw[1]->read(); return bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7); } -uint8_t ojankohs_state::ccasino_dipsw3_r() +uint8_t ccasino_state::dipsw3_r() { - return m_dsw3->read() ^ 0xff; + return m_extra_dsw[0]->read() ^ 0xff; } -uint8_t ojankohs_state::ccasino_dipsw4_r() +uint8_t ccasino_state::dipsw4_r() { - return m_dsw4->read() ^ 0xff; + return m_extra_dsw[1]->read() ^ 0xff; } -void ojankohs_state::ojankoy_coinctr_w(uint8_t data) +void ojankoy_state::coinctr_w(uint8_t data) { machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); } -void ojankohs_state::ccasino_coinctr_w(uint8_t data) +void ccasino_state::coinctr_w(uint8_t data) { machine().bookkeeping().coin_counter_w(0, BIT(data, 1)); } @@ -652,10 +652,10 @@ static const gfx_layout ojankohs_bglayout = }; static GFXDECODE_START( gfx_ojankohs ) - GFXDECODE_ENTRY( "gfx1", 0, ojankohs_bglayout, 0, 64 ) + GFXDECODE_ENTRY( "gfx", 0, ojankohs_bglayout, 0, 64 ) GFXDECODE_END -MACHINE_START_MEMBER(ojankohs_state,common) +void ojankohs_state::common_state_saving() { save_item(NAME(m_gfxreg)); save_item(NAME(m_flipscreen)); @@ -669,31 +669,24 @@ MACHINE_START_MEMBER(ojankohs_state,common) save_item(NAME(m_vclk_left)); } -MACHINE_START_MEMBER(ojankohs_state,ojankohs) -{ - uint8_t *ROM = memregion("maincpu")->base(); - - membank("bank1")->configure_entries(0, 0x40, &ROM[0x10000], 0x4000); - MACHINE_START_CALL_MEMBER(common); -} - -MACHINE_START_MEMBER(ojankohs_state,ojankoy) +void ojankohs_state::machine_start() { - uint8_t *ROM = memregion("maincpu")->base(); + uint8_t *rom = memregion("maincpu")->base(); + uint32_t banked_size = memregion("maincpu")->bytes(); - membank("bank1")->configure_entries(0, 0x20, &ROM[0x10000], 0x4000); + m_mainbank->configure_entries(0, banked_size / 0x4000, &rom[0x10000], 0x4000); - MACHINE_START_CALL_MEMBER(common); + common_state_saving(); } -MACHINE_START_MEMBER(ojankohs_state,ojankoc) +void ojankoc_state::machine_start() { - uint8_t *ROM = memregion("user1")->base(); + uint8_t *rom = memregion("banked_roms")->base(); - membank("bank1")->configure_entries(0, 0x10, &ROM[0x0000], 0x8000); + m_mainbank->configure_entries(0, 0x10, &rom[0x0000], 0x8000); - MACHINE_START_CALL_MEMBER(common); + common_state_saving(); } void ojankohs_state::machine_reset() @@ -714,164 +707,149 @@ void ojankohs_state::machine_reset() void ojankohs_state::ojankohs(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 12000000/2); /* 6.00 MHz ? */ - m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankohs_map); - m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ojankohs_io_map); + // basic machine hardware + Z80(config, m_maincpu, 12'000'000 / 2); // 6.00 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::map); + m_maincpu->set_addrmap(AS_IO, &ojankohs_state::io_map); m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold)); - MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankohs) - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(512, 512); m_screen->set_visarea(0, 288-1, 0, 224-1); - m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankohs)); + m_screen->set_screen_update(FUNC(ojankohs_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ojankohs); PALETTE(config, m_palette).set_entries(1024); - VSYSTEM_GGA(config, "gga", XTAL(13'333'000)/2); // divider not verified + VSYSTEM_GGA(config, "gga", XTAL(13'333'000) / 2); // divider not verified - MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankohs) - - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ym2149_device &aysnd(YM2149(config, "aysnd", 12000000/6)); - aysnd.port_a_read_callback().set(FUNC(ojankohs_state::ojankohs_dipsw1_r)); - aysnd.port_b_read_callback().set(FUNC(ojankohs_state::ojankohs_dipsw2_r)); + ym2149_device &aysnd(YM2149(config, "aysnd", 12'000'000 / 6)); + aysnd.port_a_read_callback().set(FUNC(ojankohs_state::dipsw1_r)); + aysnd.port_b_read_callback().set(FUNC(ojankohs_state::dipsw2_r)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.15); - MSM5205(config, m_msm, 384000); - m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */ - m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */ + MSM5205(config, m_msm, 384'000); + m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::adpcm_int)); // IRQ handler + m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz m_msm->add_route(ALL_OUTPUTS, "mono", 0.50); } -void ojankohs_state::ojankoy(machine_config &config) +void ojankoy_state::ojankoy(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 12000000/2); /* 6.00 MHz ? */ - m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankoy_map); - m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ojankoy_io_map); - m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold)); - - MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankoy) + // basic machine hardware + Z80(config, m_maincpu, 12'000'000 / 2); // 6.00 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &ojankoy_state::map); + m_maincpu->set_addrmap(AS_IO, &ojankoy_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(ojankoy_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(512, 512); m_screen->set_visarea(0, 288-1, 0, 224-1); - m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankohs)); + m_screen->set_screen_update(FUNC(ojankoy_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ojankohs); - PALETTE(config, m_palette, FUNC(ojankohs_state::ojankoy_palette), 1024); - - MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankoy) + PALETTE(config, m_palette, FUNC(ojankoy_state::palette), 1024); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 12000000/8)); + ay8910_device &aysnd(AY8910(config, "aysnd", 12'000'000 / 8)); aysnd.port_a_read_callback().set_ioport("dsw1"); aysnd.port_b_read_callback().set_ioport("dsw2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.15); - MSM5205(config, m_msm, 384000); - m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */ - m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */ + MSM5205(config, m_msm, 384'000); + m_msm->vck_legacy_callback().set(FUNC(ojankoy_state::adpcm_int)); // IRQ handler + m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz m_msm->add_route(ALL_OUTPUTS, "mono", 0.50); } -void ojankohs_state::ccasino(machine_config &config) +void ccasino_state::ccasino(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 12000000/2); /* 6.00 MHz ? */ - m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankoy_map); - m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ccasino_io_map); - m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold)); - - MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankohs) + // basic machine hardware + Z80(config, m_maincpu, 12'000'000 / 2); // 6.00 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &ccasino_state::map); + m_maincpu->set_addrmap(AS_IO, &ccasino_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(ccasino_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(512, 512); m_screen->set_visarea(0, 288-1, 0, 224-1); - m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankohs)); + m_screen->set_screen_update(FUNC(ccasino_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ojankohs); PALETTE(config, m_palette).set_entries(1024); - VSYSTEM_GGA(config, "gga", XTAL(13'333'000)/2); // divider not verified + VSYSTEM_GGA(config, "gga", XTAL(13'333'000) / 2); // divider not verified - MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ccasino) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 12000000/8)); + ay8910_device &aysnd(AY8910(config, "aysnd", 12'000'000 / 8)); aysnd.port_a_read_callback().set_ioport("dsw1"); aysnd.port_b_read_callback().set_ioport("dsw2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.15); - MSM5205(config, m_msm, 384000); - m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */ - m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */ + MSM5205(config, m_msm, 384'000); + m_msm->vck_legacy_callback().set(FUNC(ccasino_state::adpcm_int)); // IRQ handler + m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz m_msm->add_route(ALL_OUTPUTS, "mono", 0.50); } -void ojankohs_state::ojankoc(machine_config &config) +void ojankoc_state::ojankoc(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 8000000/2); /* 4.00 MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankoc_map); - m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ojankoc_io_map); - m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold)); - - MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankoc) + // basic machine hardware + Z80(config, m_maincpu, 8_MHz_XTAL / 2); // 4.00 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &ojankoc_state::map); + m_maincpu->set_addrmap(AS_IO, &ojankoc_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(ojankoc_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(32*8, 32*8); m_screen->set_visarea(0, 256-1, 8, 248-1); - m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankoc)); + m_screen->set_screen_update(FUNC(ojankoc_state::screen_update)); m_screen->set_palette(m_palette); PALETTE(config, m_palette).set_entries(16); - MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankoc) - - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 8000000/4)); + ay8910_device &aysnd(AY8910(config, "aysnd", 8_MHz_XTAL / 4)); aysnd.port_a_read_callback().set_ioport("dsw1"); aysnd.port_b_read_callback().set_ioport("dsw2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.15); - MSM5205(config, m_msm, 8000000/22); - m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */ - m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */ + MSM5205(config, m_msm, 8_MHz_XTAL / 22); + m_msm->vck_legacy_callback().set(FUNC(ojankoc_state::adpcm_int)); // IRQ handler + m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz m_msm->add_route(ALL_OUTPUTS, "mono", 0.50); } @@ -882,7 +860,7 @@ ROM_START( ojankohs ) ROM_LOAD( "5b", 0x10000, 0x80000, CRC(bd4fd0b6) SHA1(79e0937fdd34ec03b4b0a503efc1fa7c8f29e7cf) ) ROM_LOAD( "6.6c", 0x90000, 0x08000, CRC(30772679) SHA1(8bc415da465faa70ec468a23b3528493849e83ee) ) - ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_REGION( 0x80000, "gfx", 0 ) ROM_LOAD( "13b", 0x00000, 0x80000, CRC(bda30bfa) SHA1(c412e573c40816735f7e2d0600dd0d78ebce91dc) ) ROM_END @@ -896,7 +874,7 @@ ROM_START( ojankoy ) ROM_LOAD( "c-ic32.bin", 0x60000, 0x08000, CRC(d20de9b0) SHA1(bfec453a5e16bb3e1ffa454d6dad44e113a54968) ) ROM_LOAD( "d-ic31.bin", 0x68000, 0x08000, CRC(b78e6913) SHA1(a0ebe0b29025beabe5609a5d1adecfd2565da623) ) - ROM_REGION( 0x70000, "gfx1", 0 ) + ROM_REGION( 0x70000, "gfx", 0 ) ROM_LOAD( "ic55.bin", 0x00000, 0x20000, CRC(586fb385) SHA1(cdf18f52ba8d25c740fc85a68505f102fe6ba208) ) ROM_LOAD( "0-ic53.bin", 0x40000, 0x08000, CRC(db38c288) SHA1(8b98091eae9c22ade123a6f58c108f8e653d99c8) ) ROM_LOAD( "1-ic52.bin", 0x48000, 0x08000, CRC(a8b4a10b) SHA1(fa44c52efd42a99e2d34c4785a09947523a8385a) ) @@ -920,7 +898,7 @@ ROM_START( ojanko2 ) ROM_LOAD( "c-ic32.bin", 0x60000, 0x08000, CRC(5453b9de) SHA1(d9758c56cd65d65d0711368054fc0dfbb4b213ae) ) ROM_LOAD( "d-ic31.bin", 0x68000, 0x08000, CRC(44cd5348) SHA1(a73a676fbca4678aef8066ad72ea22c6c4ca4b32) ) - ROM_REGION( 0x70000, "gfx1", 0 ) + ROM_REGION( 0x70000, "gfx", 0 ) ROM_LOAD( "ic55.bin", 0x00000, 0x20000, CRC(b058fb3d) SHA1(32b04405f218c1f9ca58f01dbadda3536df3d0b5) ) ROM_LOAD( "0-ic53.bin", 0x40000, 0x08000, CRC(db38c288) SHA1(8b98091eae9c22ade123a6f58c108f8e653d99c8) ) ROM_LOAD( "1-ic52.bin", 0x48000, 0x08000, CRC(49f2ca73) SHA1(387613fd886f3a4a569146aaec59ad15f13a8ea5) ) @@ -941,7 +919,7 @@ ROM_START( ccasino ) ROM_LOAD( "g5.bin", 0x58000, 0x08000, CRC(8cfd60aa) SHA1(203789c58a9cbfbf37ad2a3dfcd86eefe406b2c7) ) ROM_LOAD( "h5.bin", 0x60000, 0x08000, CRC(d20dfcf9) SHA1(83ca36f2e02bbada5b03734b5d92c5c860292db2) ) - ROM_REGION( 0x60000, "gfx1", 0 ) + ROM_REGION( 0x60000, "gfx", 0 ) ROM_LOAD( "r1.bin", 0x00000, 0x20000, CRC(407f77ca) SHA1(a65e5403fa84185d67d994acee6f32051991d546) ) ROM_LOAD( "s1.bin", 0x20000, 0x20000, CRC(8572d156) SHA1(22f73bfb1419c3d467b4cd4ffaa6f1598f4ee4fa) ) ROM_LOAD( "e1.bin", 0x40000, 0x08000, CRC(d78c3428) SHA1(b033a7aa3029b7a9ff836c5c737c07aaad5d7456) ) @@ -951,10 +929,10 @@ ROM_START( ccasino ) ROM_END ROM_START( ojankoc ) - ROM_REGION( 0x10000, "maincpu", 0 ) /* CPU */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "c11.1p", 0x0000, 0x8000, CRC(cb3e900c) SHA1(95f0354f147e339a97368b5cc67200151cdfa0e9) ) - ROM_REGION( 0x80000, "user1", 0 ) /* BANK */ + ROM_REGION( 0x80000, "banked_roms", 0 ) ROM_LOAD( "1.1a", 0x00000, 0x8000, CRC(d40b17eb) SHA1(1e8c16e1562c112ca5150b3187a2d4aa22c1adf0) ) ROM_LOAD( "2.1b", 0x08000, 0x8000, CRC(d181172a) SHA1(65d6710464a1f505df705c553558bbf22704359d) ) ROM_LOAD( "3.1c", 0x10000, 0x8000, CRC(2e86d5bc) SHA1(0226eb81b31e43325f24b40ab51bce1729bf678c) ) @@ -968,10 +946,27 @@ ROM_START( ojankoc ) ROM_END ROM_START( ojankoca ) - ROM_REGION( 0x10000, "maincpu", 0 ) /* CPU */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "11.1p", 0x0000, 0x8000, CRC(0c552e32) SHA1(2a8714796b2c95a042d783aae79c135ba03d1958) ) - ROM_REGION( 0x80000, "user1", 0 ) /* BANK */ + ROM_REGION( 0x80000, "banked_roms", 0 ) + ROM_LOAD( "1.1a", 0x00000, 0x8000, CRC(d40b17eb) SHA1(1e8c16e1562c112ca5150b3187a2d4aa22c1adf0) ) + ROM_LOAD( "2.1b", 0x08000, 0x8000, CRC(d181172a) SHA1(65d6710464a1f505df705c553558bbf22704359d) ) + ROM_LOAD( "3.1c", 0x10000, 0x8000, CRC(2e86d5bc) SHA1(0226eb81b31e43325f24b40ab51bce1729bf678c) ) + ROM_LOAD( "4.1e", 0x18000, 0x8000, CRC(00a780cb) SHA1(f0b4f6f0c58e9d069e0f6794243925679f220f35) ) + ROM_LOAD( "5.1f", 0x20000, 0x8000, CRC(f9885076) SHA1(ebf4c0769eab6545fd227eb9f4036af2472bcac3) ) + ROM_LOAD( "6.1h", 0x28000, 0x8000, CRC(42575d0c) SHA1(1f9c187b0c05179798cbdb28eb212202ffdc9fde) ) + ROM_LOAD( "7.1k", 0x30000, 0x8000, CRC(4d8d8928) SHA1(a5ccf4a1d84ef3a4966db01d66371de83e270701) ) + ROM_LOAD( "8.1l", 0x38000, 0x8000, CRC(534573b7) SHA1(ec53cad7d652c88508edd29c2412834920fe8ef6) ) + ROM_LOAD( "9.1m", 0x48000, 0x8000, CRC(2bf88eda) SHA1(55de96d057a0f35d9e74455444751f217aa4741e) ) + ROM_LOAD( "0.1n", 0x50000, 0x8000, CRC(5665016e) SHA1(0f7f0a8e55e93bcb3060c91d9704905a6e827250) ) +ROM_END + +ROM_START( ojankocb ) // VS6-0501 PCB, has a big metal box, under which there is supposed to be an input custom. It also has a 12 MHz XTAL near it. + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "11.1p", 0x0000, 0x8000, CRC(a2739aad) SHA1(2d8c3809606a166bbd4ec7b28d7a6cf7dfce87a6) ) // sldh + + ROM_REGION( 0x80000, "banked_roms", 0 ) ROM_LOAD( "1.1a", 0x00000, 0x8000, CRC(d40b17eb) SHA1(1e8c16e1562c112ca5150b3187a2d4aa22c1adf0) ) ROM_LOAD( "2.1b", 0x08000, 0x8000, CRC(d181172a) SHA1(65d6710464a1f505df705c553558bbf22704359d) ) ROM_LOAD( "3.1c", 0x10000, 0x8000, CRC(2e86d5bc) SHA1(0226eb81b31e43325f24b40ab51bce1729bf678c) ) @@ -985,9 +980,10 @@ ROM_START( ojankoca ) ROM_END -GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ccasino, 0, ccasino, ccasino, ccasino_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, ojankohs, 0, ojankohs, ojankohs, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko High School (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, ojankocb, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ccasino, 0, ccasino, ccasino, ccasino_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, ojankohs, 0, ojankohs, ojankohs, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko High School (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/ojankohs.h b/src/mame/includes/ojankohs.h index 1d092da76cf..db514b1a319 100644 --- a/src/mame/includes/ojankohs.h +++ b/src/mame/includes/ojankohs.h @@ -23,9 +23,6 @@ public: { } void ojankohs(machine_config &config); - void ccasino(machine_config &config); - void ojankoc(machine_config &config); - void ojankoy(machine_config &config); protected: ojankohs_state(const machine_config &mconfig, device_type type, const char *tag, uint32_t vramsize, uint32_t pramsize) : @@ -33,107 +30,85 @@ protected: m_videoram(*this, "videoram", vramsize, ENDIANNESS_LITTLE), m_colorram(*this, "colorram", 0x1000, ENDIANNESS_LITTLE), m_paletteram(*this, "paletteram", pramsize, ENDIANNESS_LITTLE), + m_mainbank(*this, "mainbank"), m_maincpu(*this, "maincpu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_coin(*this, "coin"), - m_inputs_p1(*this, {"p1_0", "p1_1", "p1_2", "p1_3"}), - m_inputs_p2(*this, {"p2_0", "p2_1", "p2_2", "p2_3"}), + m_inputs_p1(*this, "p1_%u", 0U), + m_inputs_p2(*this, "p2_%u", 0U), m_inputs_p1_extra(*this, "p1_4"), m_inputs_p2_extra(*this, "p2_4"), - m_dsw1(*this, "dsw1"), m_dsw2(*this, "dsw2"), - m_dsw3(*this, "dsw3"), m_dsw4(*this, "dsw4") + m_dsw(*this, "dsw%u", 1U) { } + virtual void machine_start() override; virtual void machine_reset() override; + virtual void video_start() override; -private: - /* memory pointers */ + void common_state_saving(); + + // memory pointers memory_share_creator m_videoram; memory_share_creator m_colorram; memory_share_creator m_paletteram; + required_memory_bank m_mainbank; - /* video-related */ - tilemap_t *m_tilemap; + // video-related + tilemap_t *m_tilemap; bitmap_ind16 m_tmpbitmap; - int m_gfxreg; - int m_flipscreen; - int m_flipscreen_old; - int m_scrollx; - int m_scrolly; - int m_screen_refresh; - - /* misc */ - uint8_t m_port_select; - int m_adpcm_reset; - int m_adpcm_data; - int m_vclk_left; - - /* devices */ + uint8_t m_gfxreg; + uint8_t m_flipscreen; + uint8_t m_flipscreen_old; + int16_t m_scrollx; + int16_t m_scrolly; + uint8_t m_screen_refresh; + + // misc + uint8_t m_port_select; + uint8_t m_adpcm_reset; + int m_adpcm_data; + uint8_t m_vclk_left; + + // devices required_device m_maincpu; required_device m_msm; optional_device m_gfxdecode; required_device m_screen; required_device m_palette; + + // I/O ports required_ioport m_coin; required_ioport_array<4> m_inputs_p1; required_ioport_array<4> m_inputs_p2; optional_ioport m_inputs_p1_extra; optional_ioport m_inputs_p2_extra; - required_ioport m_dsw1; - required_ioport m_dsw2; - optional_ioport m_dsw3; - optional_ioport m_dsw4; - - void ojankohs_rombank_w(uint8_t data); - void ojankoy_rombank_w(uint8_t data); - void ojankohs_msm5205_w(uint8_t data); - void ojankoc_ctrl_w(uint8_t data); + required_ioport_array<2> m_dsw; + + + void rombank_w(uint8_t data); + void msm5205_w(uint8_t data); void port_select_w(uint8_t data); uint8_t keymatrix_p1_r(); uint8_t keymatrix_p2_r(); - uint8_t ojankoc_keymatrix_p1_r(); - uint8_t ojankoc_keymatrix_p2_r(); - uint8_t ccasino_dipsw3_r(); - uint8_t ccasino_dipsw4_r(); - void ojankoy_coinctr_w(uint8_t data); - void ccasino_coinctr_w(uint8_t data); - void ojankohs_palette_w(offs_t offset, uint8_t data); - void ccasino_palette_w(offs_t offset, uint8_t data); - void ojankoc_palette_w(offs_t offset, uint8_t data); - void ojankohs_videoram_w(offs_t offset, uint8_t data); - void ojankohs_colorram_w(offs_t offset, uint8_t data); - void ojankohs_gfxreg_w(uint8_t data); - void ojankohs_flipscreen_w(uint8_t data); - void ojankoc_videoram_w(offs_t offset, uint8_t data); - void ojankohs_adpcm_reset_w(uint8_t data); - uint8_t ojankohs_dipsw1_r(); - uint8_t ojankohs_dipsw2_r(); - TILE_GET_INFO_MEMBER(ojankohs_get_tile_info); - TILE_GET_INFO_MEMBER(ojankoy_get_tile_info); - DECLARE_MACHINE_START(ojankohs); - DECLARE_VIDEO_START(ojankohs); - DECLARE_MACHINE_START(ojankoy); - DECLARE_VIDEO_START(ojankoy); - void ojankoy_palette(palette_device &palette) const; - DECLARE_VIDEO_START(ccasino); - DECLARE_MACHINE_START(ojankoc); - DECLARE_VIDEO_START(ojankoc); - DECLARE_MACHINE_START(common); - uint32_t screen_update_ojankohs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_ojankoc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void ojankoc_flipscreen(int data); - DECLARE_WRITE_LINE_MEMBER(ojankohs_adpcm_int); - - void ccasino_io_map(address_map &map); - void ojankoc_io_map(address_map &map); - void ojankoc_map(address_map &map); - void ojankohs_io_map(address_map &map); - void ojankohs_map(address_map &map); - void ojankoy_io_map(address_map &map); - void ojankoy_map(address_map &map); + void videoram_w(offs_t offset, uint8_t data); + void colorram_w(offs_t offset, uint8_t data); + void flipscreen_w(uint8_t data); + void adpcm_reset_w(uint8_t data); + TILE_GET_INFO_MEMBER(get_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(adpcm_int); + +private: + void palette_w(offs_t offset, uint8_t data); + uint8_t dipsw1_r(); + uint8_t dipsw2_r(); + void gfxreg_w(uint8_t data); + + void io_map(address_map &map); + void map(address_map &map); }; class ojankoy_state : public ojankohs_state @@ -142,14 +117,45 @@ public: ojankoy_state(const machine_config &mconfig, device_type type, const char *tag) : ojankohs_state(mconfig, type, tag, 0x2000, 0x800) { } + + void ojankoy(machine_config &config); + +protected: + ojankoy_state(const machine_config &mconfig, device_type type, const char *tag, uint32_t vramsize, uint32_t pramsize) : + ojankohs_state(mconfig, type, tag, vramsize, pramsize) + { } + + virtual void video_start() override; + + void map(address_map &map); + + void rombank_w(uint8_t data); + +private: + void coinctr_w(uint8_t data); + TILE_GET_INFO_MEMBER(get_tile_info); + void palette(palette_device &palette) const; + void io_map(address_map &map); }; -class ccasino_state : public ojankohs_state +class ccasino_state : public ojankoy_state { public: ccasino_state(const machine_config &mconfig, device_type type, const char *tag) : - ojankohs_state(mconfig, type, tag, 0x2000, 0x800) + ojankoy_state(mconfig, type, tag, 0x2000, 0x800), + m_extra_dsw(*this, "dsw%u", 3U) { } + + void ccasino(machine_config &config); + +private: + required_ioport_array<2> m_extra_dsw; + + uint8_t dipsw3_r(); + uint8_t dipsw4_r(); + void coinctr_w(uint8_t data); + void palette_w(offs_t offset, uint8_t data); + void io_map(address_map &map); }; class ojankoc_state : public ojankohs_state @@ -158,6 +164,23 @@ public: ojankoc_state(const machine_config &mconfig, device_type type, const char *tag) : ojankohs_state(mconfig, type, tag, 0x8000, 0x20) { } + + void ojankoc(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: + void ctrl_w(uint8_t data); + uint8_t keymatrix_p1_r(); + uint8_t keymatrix_p2_r(); + void palette_w(offs_t offset, uint8_t data); + void videoram_w(offs_t offset, uint8_t data); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void flipscreen(uint8_t data); + void io_map(address_map &map); + void map(address_map &map); }; #endif // MAME_INCLUDES_OJANKOHS_H diff --git a/src/mame/mame.lst b/src/mame/mame.lst index dee4d54abaa..f653ce197b0 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -33203,6 +33203,7 @@ ccasino // [1987] V-System Co. (Japan) ojanko2 // [1987] V-System Co. (Japan) ojankoc // [1986] V-System Co. (Japan) ojankoca // [1986] V-System Co. (Japan) +ojankocb // [1986] V-System Co. (Japan) ojankohs // [1988] V-System Co. (Japan) ojankoy // [1986] V-System Co. (Japan) diff --git a/src/mame/video/ojankohs.cpp b/src/mame/video/ojankohs.cpp index a7970d5b300..543bed40f8a 100644 --- a/src/mame/video/ojankohs.cpp +++ b/src/mame/video/ojankohs.cpp @@ -19,18 +19,17 @@ ******************************************************************************/ -void ojankohs_state::ojankoy_palette(palette_device &palette) const +void ojankoy_state::palette(palette_device &palette) const { const uint8_t *color_prom = memregion("proms")->base(); - int bit0, bit1, bit2, bit3, bit4; for (int i = 0; i < palette.entries(); i++) { - bit0 = BIT(color_prom[0], 2); - bit1 = BIT(color_prom[0], 3); - bit2 = BIT(color_prom[0], 4); - bit3 = BIT(color_prom[0], 5); - bit4 = BIT(color_prom[0], 6); + int bit0 = BIT(color_prom[0], 2); + int bit1 = BIT(color_prom[0], 3); + int bit2 = BIT(color_prom[0], 4); + int bit3 = BIT(color_prom[0], 5); + int bit4 = BIT(color_prom[0], 6); int const r = 0x08 * bit0 + 0x11 * bit1 + 0x21 * bit2 + 0x43 * bit3 + 0x82 * bit4; bit0 = BIT(color_prom[palette.entries()], 5); @@ -52,7 +51,7 @@ void ojankohs_state::ojankoy_palette(palette_device &palette) const } } -void ojankohs_state::ojankohs_palette_w(offs_t offset, uint8_t data) +void ojankohs_state::palette_w(offs_t offset, uint8_t data) { m_paletteram[offset] = data; @@ -65,7 +64,7 @@ void ojankohs_state::ojankohs_palette_w(offs_t offset, uint8_t data) m_palette->set_pen_color(offset >> 1, pal5bit(r), pal5bit(g), pal5bit(b)); } -void ojankohs_state::ccasino_palette_w(offs_t offset, uint8_t data) +void ccasino_state::palette_w(offs_t offset, uint8_t data) { offset = bitswap<11>(offset, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); @@ -80,7 +79,7 @@ void ojankohs_state::ccasino_palette_w(offs_t offset, uint8_t data) m_palette->set_pen_color(offset >> 1, pal5bit(r), pal5bit(g), pal5bit(b)); } -void ojankohs_state::ojankoc_palette_w(offs_t offset, uint8_t data) +void ojankoc_state::palette_w(offs_t offset, uint8_t data) { if (m_paletteram[offset] != data) { @@ -104,19 +103,19 @@ void ojankohs_state::ojankoc_palette_w(offs_t offset, uint8_t data) ******************************************************************************/ -void ojankohs_state::ojankohs_videoram_w(offs_t offset, uint8_t data) +void ojankohs_state::videoram_w(offs_t offset, uint8_t data) { m_videoram[offset] = data; m_tilemap->mark_tile_dirty(offset); } -void ojankohs_state::ojankohs_colorram_w(offs_t offset, uint8_t data) +void ojankohs_state::colorram_w(offs_t offset, uint8_t data) { m_colorram[offset] = data; m_tilemap->mark_tile_dirty(offset); } -void ojankohs_state::ojankohs_gfxreg_w(uint8_t data) +void ojankohs_state::gfxreg_w(uint8_t data) { if (m_gfxreg != data) { @@ -125,7 +124,7 @@ void ojankohs_state::ojankohs_gfxreg_w(uint8_t data) } } -void ojankohs_state::ojankohs_flipscreen_w(uint8_t data) +void ojankohs_state::flipscreen_w(uint8_t data) { if (m_flipscreen != BIT(data, 0)) { @@ -146,7 +145,7 @@ void ojankohs_state::ojankohs_flipscreen_w(uint8_t data) } } -TILE_GET_INFO_MEMBER(ojankohs_state::ojankohs_get_tile_info) +TILE_GET_INFO_MEMBER(ojankohs_state::get_tile_info) { int tile = m_videoram[tile_index] | ((m_colorram[tile_index] & 0x0f) << 8); int color = (m_colorram[tile_index] & 0xe0) >> 5; @@ -160,7 +159,7 @@ TILE_GET_INFO_MEMBER(ojankohs_state::ojankohs_get_tile_info) tileinfo.set(0, tile, color, 0); } -TILE_GET_INFO_MEMBER(ojankohs_state::ojankoy_get_tile_info) +TILE_GET_INFO_MEMBER(ojankoy_state::get_tile_info) { int tile = m_videoram[tile_index] | (m_videoram[tile_index + 0x1000] << 8); int color = m_colorram[tile_index] & 0x3f; @@ -177,36 +176,33 @@ TILE_GET_INFO_MEMBER(ojankohs_state::ojankoy_get_tile_info) ******************************************************************************/ -void ojankohs_state::ojankoc_flipscreen(int data) +void ojankoc_state::flipscreen(uint8_t data) { - int x, y; - uint8_t color1, color2; - m_flipscreen = BIT(data, 7); if (m_flipscreen == m_flipscreen_old) return; - for (y = 0; y < 0x40; y++) + for (int y = 0; y < 0x40; y++) { - for (x = 0; x < 0x100; x++) + for (int x = 0; x < 0x100; x++) { - color1 = m_videoram[0x0000 + ((y * 256) + x)]; - color2 = m_videoram[0x3fff - ((y * 256) + x)]; - ojankoc_videoram_w(0x0000 + ((y * 256) + x), color2); - ojankoc_videoram_w(0x3fff - ((y * 256) + x), color1); + uint8_t color1 = m_videoram[0x0000 + ((y * 256) + x)]; + uint8_t color2 = m_videoram[0x3fff - ((y * 256) + x)]; + videoram_w(0x0000 + ((y * 256) + x), color2); + videoram_w(0x3fff - ((y * 256) + x), color1); color1 = m_videoram[0x4000 + ((y * 256) + x)]; color2 = m_videoram[0x7fff - ((y * 256) + x)]; - ojankoc_videoram_w(0x4000 + ((y * 256) + x), color2); - ojankoc_videoram_w(0x7fff - ((y * 256) + x), color1); + videoram_w(0x4000 + ((y * 256) + x), color2); + videoram_w(0x7fff - ((y * 256) + x), color1); } } m_flipscreen_old = m_flipscreen; } -void ojankohs_state::ojankoc_videoram_w(offs_t offset, uint8_t data) +void ojankoc_state::videoram_w(offs_t offset, uint8_t data) { m_videoram[offset] = data; @@ -245,22 +241,17 @@ void ojankohs_state::ojankoc_videoram_w(offs_t offset, uint8_t data) ******************************************************************************/ -VIDEO_START_MEMBER(ojankohs_state,ojankohs) +void ojankohs_state::video_start() { - m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankohs_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64); + m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64); } -VIDEO_START_MEMBER(ojankohs_state,ojankoy) +void ojankoy_state::video_start() { - m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankoy_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64); + m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankoy_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64); } -VIDEO_START_MEMBER(ojankohs_state,ccasino) -{ - VIDEO_START_CALL_MEMBER(ojankoy); -} - -VIDEO_START_MEMBER(ojankohs_state,ojankoc) +void ojankoc_state::video_start() { m_screen->register_screen_bitmap(m_tmpbitmap); @@ -274,7 +265,7 @@ VIDEO_START_MEMBER(ojankohs_state,ojankoc) ******************************************************************************/ -uint32_t ojankohs_state::screen_update_ojankohs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t ojankohs_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_tilemap->set_scrollx(0, m_scrollx); m_tilemap->set_scrolly(0, m_scrolly); @@ -283,16 +274,14 @@ uint32_t ojankohs_state::screen_update_ojankohs(screen_device &screen, bitmap_in return 0; } -uint32_t ojankohs_state::screen_update_ojankoc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t ojankoc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int offs; - if (m_screen_refresh) { - /* redraw bitmap */ - for (offs = 0; offs < 0x8000; offs++) + // redraw bitmap + for (int offs = 0; offs < 0x8000; offs++) { - ojankoc_videoram_w(offs, m_videoram[offs]); + videoram_w(offs, m_videoram[offs]); } m_screen_refresh = 0; } -- cgit v1.2.3 From d0805eba6654cb6ea3e5f79072b3c2a2e54ba95e Mon Sep 17 00:00:00 2001 From: cracyc Date: Fri, 11 Jun 2021 17:26:28 -0500 Subject: x68k: treat the nibbles in 8bit color mode as two separate planes --- src/mame/video/x68k.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/mame/video/x68k.cpp b/src/mame/video/x68k.cpp index 8477d8cc040..bf8a03f73d9 100644 --- a/src/mame/video/x68k.cpp +++ b/src/mame/video/x68k.cpp @@ -337,16 +337,25 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui case 0x01: // 256 colours if(page == 0 || page == 2) { - xscr = m_crtc->xscr_gfx(page) & 0x1ff; - yscr = m_crtc->yscr_gfx(page) & 0x1ff; - lineoffset = (((scanline - m_crtc->vbegin() / divisor) + yscr) & 0x1ff) * 512; - loc = xscr & 0x1ff; + // What effect do priorites and plane disable have here? Does it work in 16bit color mode? + uint16_t xscr0, yscr0, xscr1, yscr1; + uint32_t loc0, loc1, lineoffset0, lineoffset1; + xscr0 = m_crtc->xscr_gfx(page) & 0x1ff; + yscr0 = m_crtc->yscr_gfx(page) & 0x1ff; + xscr1 = m_crtc->xscr_gfx(page + 1) & 0x1ff; + yscr1 = m_crtc->yscr_gfx(page + 1) & 0x1ff; + + lineoffset0 = (((scanline - m_crtc->vbegin() / divisor) + yscr0) & 0x1ff) * 512; + loc0 = xscr0 & 0x1ff; + lineoffset1 = (((scanline - m_crtc->vbegin() / divisor) + yscr1) & 0x1ff) * 512; + loc1 = xscr1 & 0x1ff; shift = 4; if((m_video.reg[2] & 0x1a00) == 0x1a00) ret = true; for(pixel=m_crtc->hbegin();pixel<=m_crtc->hend();pixel++) { - colour = ((m_gvram[lineoffset + loc] >> page*shift) & 0x00ff); + colour = ((m_gvram[lineoffset0 + loc0] >> page*shift) & 0x000f); + colour |= ((m_gvram[lineoffset1 + loc1] >> page*shift) & 0x00f0); if(ret && (colour & 1)) { blend = true; @@ -376,8 +385,10 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui bitmap.pix(scanline, pixel) = m_special.pix(scanline, pixel); m_special.pix(scanline, pixel) = 0; } - loc++; - loc &= 0x1ff; + loc0++; + loc0 &= 0x1ff; + loc1++; + loc1 &= 0x1ff; } } break; -- cgit v1.2.3 From 35f317e0273a229a60318bedf5b1f731612b1d21 Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 11 Jun 2021 20:50:45 -0400 Subject: New skeleton ISA device: Lark Associates LRK-331 ESDI Controller [Bitsavers] --- scripts/src/bus.lua | 2 + src/devices/bus/isa/isa_cards.cpp | 2 + src/devices/bus/isa/lrk330.cpp | 130 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 src/devices/bus/isa/lrk330.cpp diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index fd54182bc0a..c50ec0d98bc 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1614,6 +1614,8 @@ if (BUSES["ISA"]~=null) then MAME_DIR .. "src/devices/bus/isa/bblue2.h", MAME_DIR .. "src/devices/bus/isa/3xtwin.cpp", MAME_DIR .. "src/devices/bus/isa/3xtwin.h", + MAME_DIR .. "src/devices/bus/isa/lrk330.cpp", + MAME_DIR .. "src/devices/bus/isa/lrk330.h", } end diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp index ce23388ea1d..cc00f2233e0 100644 --- a/src/devices/bus/isa/isa_cards.cpp +++ b/src/devices/bus/isa/isa_cards.cpp @@ -50,6 +50,7 @@ #include "tekram_dc820.h" #include "asc88.h" #include "omti8621.h" +#include "lrk330.h" // sound #include "adlib.h" @@ -230,4 +231,5 @@ void pc_isa16_cards(device_slot_interface &device) device.option_add("dc820", TEKRAM_DC820); // actually an EISA card device.option_add("dc820b", TEKRAM_DC820B); // actually an EISA card device.option_add("omti8621", ISA16_OMTI8621); + device.option_add("lrk331", LRK331); } diff --git a/src/devices/bus/isa/lrk330.cpp b/src/devices/bus/isa/lrk330.cpp new file mode 100644 index 00000000000..18cd1bfe29e --- /dev/null +++ b/src/devices/bus/isa/lrk330.cpp @@ -0,0 +1,130 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Skeleton driver for ESDI controllers by Lark Associates Inc. + + Major ICs excluding EPROMs, in order of decreasing pin count: + * Silicon Logic LD1111 HDC (QFP128, U1) + * Xilinx XC2018-70PC68C Logic Cell Array (PLCC84, U11) + * National DP8473V Floppy Disk Controller PLUS-2 (PLCC52, U4) + * Signetics SCN8032HCCA44 8-Bit Microcontroller (PLCC44, U20) + * Sharp LH52258D-45 32Kx8 CMOS Static RAM (SDIP28, U2 & U3) + * Vitelic V61C16F70L 2Kx8 CMOS Static RAM (SSOP24, U19) + + The purpose of the small SRAM is not clear. Perhaps it can be banked + into the lower part of the 8032 program space after loading patches + for the EPROM microcode, since that uses the upper mirror addresses + almost exclusively. + + A transfer rate of up to 24 megabits per second was advertised. + + LRK-330 is presumably identical to LRK-331, only without the FDC or + 34-pin floppy drive cable connector installed. + +***************************************************************************/ + +#include "emu.h" +#include "lrk330.h" + +#include "imagedev/floppy.h" +#include "machine/upd765.h" + +// device type definition +DEFINE_DEVICE_TYPE(LRK331, lrk331_device, "lrk331", "Lark Associates LRK-331 ESDI Controller") + + +lrk331_device::lrk331_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, LRK331, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_mcu(*this, "mcu") + , m_bios(*this, "bios") + , m_config(*this, "CONFIG") +{ +} + +void lrk331_device::device_start() +{ +} + +void lrk331_device::device_reset() +{ +} + +void lrk331_device::ucode_map(address_map &map) +{ + map(0x0000, 0x3fff).mirror(0x4000).rom().region("ucode", 0); +} + +void lrk331_device::ext_map(address_map &map) +{ + map.global_mask(0xff); + map(0x0b, 0x0b).nopw(); +} + +static INPUT_PORTS_START(lrk331) + PORT_START("CONFIG") + PORT_DIPNAME(0x001, 0x001, "Drive Addresses") PORT_DIPLOCATION("W1:1") + PORT_DIPSETTING(0x001, "Primary (1F0h-1F7h, 3F0h-3F7h)") + PORT_DIPSETTING(0x000, "Secondary (170h-177h, 370h-377h)") + PORT_DIPNAME(0x002, 0x002, "Floppy Drive Speed") PORT_DIPLOCATION("W2:2") + PORT_DIPSETTING(0x002, "Single") + PORT_DIPSETTING(0x000, "Dual") + PORT_DIPNAME(0x004, 0x004, "Interrupt Delay") PORT_DIPLOCATION("W3:1") + PORT_DIPSETTING(0x004, "Disabled") + PORT_DIPSETTING(0x000, "Enabled") + PORT_DIPNAME(0x008, 0x008, "Factory Configured - Do Not Alter") PORT_DIPLOCATION("W4:1") + PORT_DIPSETTING(0x008, DEF_STR(Off)) + PORT_DIPSETTING(0x000, DEF_STR(On)) + PORT_DIPNAME(0x0f0, 0x0e0, "BIOS Address") PORT_DIPLOCATION("W5-W8:1,2,3,4") + PORT_DIPSETTING(0x0f0, "Disabled") + PORT_DIPSETTING(0x0e0, "C800h") + PORT_DIPSETTING(0x0d0, "CC00h") + PORT_DIPSETTING(0x0b0, "D000h") + PORT_DIPSETTING(0x070, "D400h") + PORT_DIPNAME(0x300, 0x200, "IRQ Select") PORT_DIPLOCATION("W9-W10:1,2") + PORT_DIPSETTING(0x200, "IRQ 14") + PORT_DIPSETTING(0x100, "IRQ 15") + PORT_DIPNAME(0x400, 0x000, "Floppy Drive Interface") PORT_DIPLOCATION("W11:1") + PORT_DIPSETTING(0x400, "Disabled") + PORT_DIPSETTING(0x000, "Enabled") +INPUT_PORTS_END + +ioport_constructor lrk331_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(lrk331); +} + +static void pc_hd_floppies(device_slot_interface &device) +{ + device.option_add("525hd", FLOPPY_525_HD); + device.option_add("35hd", FLOPPY_35_HD); + device.option_add("525dd", FLOPPY_525_DD); + device.option_add("35dd", FLOPPY_35_DD); +} + +void lrk331_device::device_add_mconfig(machine_config &config) +{ + I8032(config, m_mcu, 24_MHz_XTAL / 2); + m_mcu->set_addrmap(AS_PROGRAM, &lrk331_device::ucode_map); + m_mcu->set_addrmap(AS_IO, &lrk331_device::ext_map); + + //LD1111(config, m_hdc, 24_MHz_XTAL); + + DP8473(config, "fdc", 24_MHz_XTAL); + FLOPPY_CONNECTOR(config, "fdc:0", pc_hd_floppies, "525hd", floppy_image_device::default_pc_floppy_formats); + FLOPPY_CONNECTOR(config, "fdc:1", pc_hd_floppies, nullptr, floppy_image_device::default_pc_floppy_formats); +} + +ROM_START(lrk331) + ROM_REGION(0x2000, "bios", 0) + ROM_LOAD("63308-10.bin", 0x0000, 0x2000, CRC(f16d4f25) SHA1(437664ff9723c8036a40f1e504899b7cacd21ad0)) + + ROM_REGION(0x4000, "ucode", 0) + ROM_LOAD("63307-08.bin", 0x0000, 0x4000, CRC(6d2e8b26) SHA1(1a33462a29b306b01960cf2ac0b209b2adf58dbe)) +ROM_END + +const tiny_rom_entry *lrk331_device::device_rom_region() const +{ + return ROM_NAME(lrk331); +} -- cgit v1.2.3 From f3eacf7566759e1772d6d8ecf916209d4b0c8689 Mon Sep 17 00:00:00 2001 From: arbee Date: Fri, 11 Jun 2021 21:21:42 -0400 Subject: apple2gs: correct vertical counter readback (GitHub #8156) [R. Belmont, Jeremy Rand] --- src/mame/drivers/apple2gs.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index 88757ffc185..e0ec82d1be6 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -2186,7 +2186,12 @@ int apple2gs_state::get_vpos() { // as per IIgs Tech Note #39, this is simply scanline + 250 on NTSC (262 lines), // or scanline + 200 on PAL (312 lines) - return ((m_screen->vpos() + BORDER_TOP) % 262) + 250; + int vpos = m_screen->vpos() + (511 - BORDER_TOP + 6); + if (vpos > 511) + { + vpos -= (511 - 250); + } + return vpos; } void apple2gs_state::process_clock() -- cgit v1.2.3 From f846f5c8f9cbc5190d6c9276930c48ed0eea574a Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 11 Jun 2021 21:51:22 -0400 Subject: audio/gottlieb.cpp: Minor updates to handlers; save some more members --- src/mame/audio/gottlieb.cpp | 27 ++++++++++++++++++++++++--- src/mame/audio/gottlieb.h | 1 + 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/mame/audio/gottlieb.cpp b/src/mame/audio/gottlieb.cpp index 4c56cff5e23..8c8555f13be 100644 --- a/src/mame/audio/gottlieb.cpp +++ b/src/mame/audio/gottlieb.cpp @@ -463,7 +463,8 @@ inline void gottlieb_sound_r2_device::nmi_state_update() uint8_t gottlieb_sound_r2_device::audio_data_r() { - m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + if (!machine().side_effects_disabled()) + m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); return m_audiocpu_latch; } @@ -475,11 +476,28 @@ uint8_t gottlieb_sound_r2_device::audio_data_r() uint8_t gottlieb_sound_r2_device::speech_data_r() { - m_speechcpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + if (!machine().side_effects_disabled()) + m_speechcpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); return m_speechcpu_latch; } +//------------------------------------------------- +// signal_audio_nmi_r - signal an NMI from the +// speech CPU to the audio CPU +//------------------------------------------------- + +uint8_t gottlieb_sound_r2_device::signal_audio_nmi_r() +{ + if (!machine().side_effects_disabled()) + { + m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + } + return 0xff; +} + + //------------------------------------------------- // signal_audio_nmi_w - signal an NMI from the // speech CPU to the audio CPU @@ -620,7 +638,7 @@ void gottlieb_sound_r2_device::gottlieb_speech_r2_map(address_map &map) map(0x8000, 0x8000).mirror(0x1fff).w(FUNC(gottlieb_sound_r2_device::psg_latch_w)); map(0xa000, 0xa000).mirror(0x07ff).w(FUNC(gottlieb_sound_r2_device::nmi_rate_w)); map(0xa800, 0xa800).mirror(0x07ff).r(FUNC(gottlieb_sound_r2_device::speech_data_r)); - map(0xb000, 0xb000).mirror(0x07ff).w(FUNC(gottlieb_sound_r2_device::signal_audio_nmi_w)); + map(0xb000, 0xb000).mirror(0x07ff).rw(FUNC(gottlieb_sound_r2_device::signal_audio_nmi_r), FUNC(gottlieb_sound_r2_device::signal_audio_nmi_w)); map(0xc000, 0xffff).rom(); } @@ -703,6 +721,9 @@ void gottlieb_sound_r2_device::device_start() save_item(NAME(m_nmi_state)); save_item(NAME(m_speech_control)); save_item(NAME(m_last_command)); + save_item(NAME(m_psg_latch)); + save_item(NAME(m_psg_data_latch)); + save_item(NAME(m_sp0250_latch)); } diff --git a/src/mame/audio/gottlieb.h b/src/mame/audio/gottlieb.h index aa712c02130..8977c3181ab 100644 --- a/src/mame/audio/gottlieb.h +++ b/src/mame/audio/gottlieb.h @@ -140,6 +140,7 @@ public: // internal communications uint8_t speech_data_r(); uint8_t audio_data_r(); + uint8_t signal_audio_nmi_r(); void signal_audio_nmi_w(uint8_t data); void nmi_rate_w(uint8_t data); CUSTOM_INPUT_MEMBER( speech_drq_custom_r ); -- cgit v1.2.3 From b85322286430f6c4ffe41ab7724f3ba24cd09bf2 Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 11 Jun 2021 22:44:18 -0400 Subject: bus/isa: Add header file accidentally omitted from 35f317e0273a229a60318bedf5b1f731612b1d21 --- src/devices/bus/isa/lrk330.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/devices/bus/isa/lrk330.h diff --git a/src/devices/bus/isa/lrk330.h b/src/devices/bus/isa/lrk330.h new file mode 100644 index 00000000000..b75a50fa7a3 --- /dev/null +++ b/src/devices/bus/isa/lrk330.h @@ -0,0 +1,38 @@ +// license:BSD-3-Clause +// copyright-holders:AJR + +#ifndef MAME_BUS_ISA_LRK330_H +#define MAME_BUS_ISA_LRK330_H + +#pragma once + +#include "isa.h" +#include "cpu/mcs51/mcs51.h" + +class lrk331_device : public device_t, public device_isa16_card_interface +{ +public: + lrk331_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual void device_start() override; + virtual void device_reset() override; + + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + +private: + void ucode_map(address_map &map); + void ext_map(address_map &map); + + required_device m_mcu; + required_region_ptr m_bios; + required_ioport m_config; +}; + +DECLARE_DEVICE_TYPE(LRK331, lrk331_device) + +#endif // MAME_BUS_ISA_LRK330_H -- cgit v1.2.3 From ff553b2b99de181ac2e2aa0b779e5c38fd0908be Mon Sep 17 00:00:00 2001 From: arbee Date: Fri, 11 Jun 2021 23:01:37 -0400 Subject: m68kfpu: Support all FSINCOS encodings, fix multiple bugs in FMOVEM. [R. Belmont] --- src/devices/cpu/m68000/m68kfpu.cpp | 46 +++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/src/devices/cpu/m68000/m68kfpu.cpp b/src/devices/cpu/m68000/m68kfpu.cpp index 0c56dc5ed39..7cd10e84b84 100644 --- a/src/devices/cpu/m68000/m68kfpu.cpp +++ b/src/devices/cpu/m68000/m68kfpu.cpp @@ -1165,6 +1165,13 @@ void m68000_base_device::WRITE_EA_FPE(int mode, int reg, floatx80 fpr, uint32 di break; } + case 6: // (An) + (Xn) + d8 + { + u32 ea = EA_AY_IX_32(); + store_extended_float80(ea, fpr); + break; + } + case 7: { switch (reg) @@ -1442,7 +1449,7 @@ void m68000_base_device::fpgen_rm_reg(u16 w2) } case 0x06: // FLOGNP1 { - m_fpr[dst] = floatx80_flognp1 (source); + m_fpr[dst] = floatx80_flognp1(source); SET_CONDITION_CODES(m_fpr[dst]); m_icount -= 594; // for MC68881 break; @@ -1600,7 +1607,14 @@ void m68000_base_device::fpgen_rm_reg(u16 w2) m_icount -= 9; break; } - case 0x31: // FSINCOS + case 0x30: // FSINCOS + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: { m_fpr[dst] = source; floatx80_fsin(m_fpr[dst]); @@ -1820,17 +1834,6 @@ void m68000_base_device::fmovem(u16 w2) int mode = (w2 >> 11) & 0x3; int reglist = w2 & 0xff; - u32 mem_addr = 0; - switch (ea >> 3) - { - case 5: // (d16, An) - mem_addr= EA_AY_DI_32(); - break; - case 6: // (An) + (Xn) + d8 - mem_addr= EA_AY_IX_32(); - break; - } - if (dir) // From FP regs to mem { switch (mode) @@ -1874,8 +1877,7 @@ void m68000_base_device::fmovem(u16 w2) { int imode = (ea >> 3) & 0x7; int reg = (ea & 0x7); - int di_mode = imode == 5; - + int di_mode = (imode == 5); uint32 di_mode_ea = di_mode ? (REG_A()[reg] + MAKE_INT_16(m68ki_read_imm_16())) : 0; for (i=0; i < 8; i++) @@ -1909,23 +1911,17 @@ void m68000_base_device::fmovem(u16 w2) { int imode = (ea >> 3) & 0x7; int reg = (ea & 0x7); - int di_mode = imode == 5; + int di_mode = (imode == 5); uint32 di_mode_ea = di_mode ? (REG_A()[reg] + MAKE_INT_16(m68ki_read_imm_16())) : 0; for (i=0; i < 8; i++) { if (reglist & (1 << i)) { - switch (ea >> 3) + m_fpr[7 - i] = READ_EA_FPE(imode, reg, di_mode_ea); + if (di_mode) { - case 5: // (d16, An) - case 6: // (An) + (Xn) + d8 - m_fpr[7-i] = load_extended_float80(mem_addr); - mem_addr += 12; - break; - default: - m_fpr[7 - i] = READ_EA_FPE(imode, reg, di_mode_ea); - break; + di_mode_ea += 12; } m_icount -= 2; } -- cgit v1.2.3 From 4ca10ad80ba9a52d4cd658814dc8f135d07aec10 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 12 Jun 2021 15:44:08 +1000 Subject: rx78: improved colours. --- src/mame/drivers/rx78.cpp | 104 +++++++++++++++++++++------------------------- 1 file changed, 47 insertions(+), 57 deletions(-) diff --git a/src/mame/drivers/rx78.cpp b/src/mame/drivers/rx78.cpp index 0127e0cb613..602a1a7d7fd 100644 --- a/src/mame/drivers/rx78.cpp +++ b/src/mame/drivers/rx78.cpp @@ -10,11 +10,8 @@ TODO: - implement printer; - Implement 2nd cart slot - Keyboard works in all scenarios, but it is a guess. -- Colours are incorrect. Need more carts to help construct a proper solution. - -- m_pal_reg and m_pri_mask can have unemulated bits used by games, what are these bits for? - -- the colours are verified correct for all games in the software lists, except: - -- chlgolf - it's almost correct, just a few minor things in the background. Perfectly playable. - -- cracer - this game has a lot of issues, including incorrect behaviour. It's still playable though. +- cracer - this game has issues, including incorrect behaviour. It's still playable though. +- exbaseb - the game skips the intro screen, as if a key had been pressed. - RAM handling can't be right: PCB has 30KB shared RAM (manual also says this in the technical specs), but MAME allocates much more @@ -60,10 +57,9 @@ Summary of Monitor commands. ============================================================================================================== Known issues: -- Excite baseball: Graphics issues, unplayable - Sekigahara: Joystick problem - Mobile Gundam: Bad sound at the intro screen -- Champion Racer: Graphics and Colour. +- Champion Racer: The countdown traffic lights don't work *************************************************************************************************************/ @@ -106,6 +102,7 @@ private: void vdp_reg_w(offs_t offset, u8 data); void vdp_bg_reg_w(u8 data); void vdp_pri_mask_w(u8 data); + void create_palette(palette_device &palette) const; DECLARE_DEVICE_IMAGE_LOAD_MEMBER( cart_load ); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -119,6 +116,7 @@ private: u8 m_pal_reg[7]; u8 m_pri_mask; u8 m_key_mux; + u8 m_bgr; std::unique_ptr m_vram; required_device m_maincpu; required_device m_cass; @@ -144,42 +142,35 @@ u8 rx78_state::cass_r() uint32_t rx78_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - u8 color[2]; - bool pen[3]; + u8 layers; + u8 laycol[2]; const u8 borderx = 32, bordery = 20; - bitmap.fill(16, cliprect); + bitmap.fill(64, cliprect); // set the border u16 count = 0x2c0; //first 0x2bf bytes aren't used for bitmap drawing apparently - u8 pri_mask = m_pri_mask; - if (BIT(m_pri_mask, 7)) - pri_mask &= m_pal_reg[6]; // this gives blue sky in Challenge Golf - colours to be checked on carts as they are dumped - for(u8 y=0; y<184; y++) { for(u8 x=0; x<192; x+=8) { for (u8 i = 0; i < 8; i++) { - /* bg color */ - pen[0] = BIT(m_pri_mask, 3) ? BIT(m_vram[count + 0x6000], i) : 0; - pen[1] = BIT(m_pri_mask, 4) ? BIT(m_vram[count + 0x8000], i) : 0; - pen[2] = BIT(m_pri_mask, 5) ? BIT(m_vram[count + 0xa000], i) : 0; - - color[1] = pen[0] | (pen[1] << 1) | (pen[2] << 2); - - /* fg color */ - pen[0] = BIT(pri_mask, 0) ? BIT(m_vram[count + 0x0000], i) : 0; - pen[1] = BIT(pri_mask, 1) ? BIT(m_vram[count + 0x2000], i) : 0; - pen[2] = BIT(pri_mask, 2) ? BIT(m_vram[count + 0x4000], i) : 0; - - color[0] = pen[0] | (pen[1] << 1) | (pen[2] << 2); - - if (color[1]) - bitmap.pix(y+bordery, x+i+borderx) = color[1] | 8; - if (color[0]) - bitmap.pix(y+bordery, x+i+borderx) = color[0]; + layers = 0; + for (u8 j = 0; j < 6; j++) + if (BIT(m_pri_mask, j)) + layers |= (BIT(m_vram[count + j*0x2000], i))<set_pen_color(i, rgb_t(r,g,b)); - } + //u8 r = (data & 0x11) == 0x11 ? 0xff : ((data & 0x11) == 0x01 ? 0x7f : 0); + //u8 g = (data & 0x22) == 0x22 ? 0xff : ((data & 0x22) == 0x02 ? 0x7f : 0); + //u8 b = (data & 0x44) == 0x44 ? 0xff : ((data & 0x44) == 0x04 ? 0x7f : 0); + //m_palette->set_pen_color(66+offset, rgb_t(r,g,b)); + m_pal_reg[offset] = bitswap<8>(data, 7, 3, 6, 2, 5, 1, 4, 0) & 0x3f; } - - if (m_pal_reg[6] == 3) // seki - for (u8 i = 5; i <8; i++) - m_palette->set_pen_color(i, m_palette->pen_color(i-4)); else - if (m_pal_reg[6] == 15) // theprowr - for (u8 i = 11; i <16; i+=2) - m_palette->set_pen_color(i, m_palette->pen_color(9)); + { + m_pal_reg[offset] = data & 0x3f; + } } void rx78_state::vdp_bg_reg_w(u8 data) @@ -270,8 +248,8 @@ void rx78_state::vdp_bg_reg_w(u8 data) u8 r = (data & 0x11) == 0x11 ? 0xff : ((data & 0x11) == 0x01 ? 0x7f : 0); u8 g = (data & 0x22) == 0x22 ? 0xff : ((data & 0x22) == 0x02 ? 0x7f : 0); u8 b = (data & 0x44) == 0x44 ? 0xff : ((data & 0x44) == 0x04 ? 0x7f : 0); - - m_palette->set_pen_color(16, rgb_t(r,g,b)); + m_palette->set_pen_color(64, rgb_t(r,g,b)); // use this as the border colour + m_bgr = bitswap<8>(data, 7, 3, 6, 2, 5, 1, 4, 0) & 0x3f; } void rx78_state::vdp_pri_mask_w(u8 data) @@ -279,6 +257,18 @@ void rx78_state::vdp_pri_mask_w(u8 data) m_pri_mask = data; } +void rx78_state::create_palette(palette_device &palette) const +{ + constexpr u8 level[] = { 0, 0x7f, 0, 0xff }; + for (u8 i = 0; i < 64; i++) + { + u8 r = level[BIT(i, 0, 2)]; + u8 g = level[BIT(i, 2, 2)]; + u8 b = level[BIT(i, 4, 2)]; + palette.set_pen_color(i, rgb_t(r, g, b)); + } +} + void rx78_state::rx78_mem(address_map &map) { @@ -456,6 +446,7 @@ void rx78_state::machine_start() save_pointer(NAME(m_pal_reg), 7); save_item(NAME(m_pri_mask)); save_item(NAME(m_key_mux)); + save_item(NAME(m_bgr)); } DEVICE_IMAGE_LOAD_MEMBER( rx78_state::cart_load ) @@ -492,7 +483,6 @@ static GFXDECODE_START( gfx_rx78 ) GFXDECODE_ENTRY( "roms", 0x1a27, rx78_charlayout, 0, 8 ) GFXDECODE_END - void rx78_state::rx78(machine_config &config) { /* basic machine hardware */ @@ -512,7 +502,7 @@ void rx78_state::rx78(machine_config &config) screen.set_screen_update(FUNC(rx78_state::screen_update)); screen.set_palette("palette"); - PALETTE(config, m_palette).set_entries(16+1); //+1 for the background color + PALETTE(config, m_palette, FUNC(rx78_state::create_palette), 72); GFXDECODE(config, "gfxdecode", m_palette, gfx_rx78); GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "rx78_cart", "bin,rom").set_device_load(FUNC(rx78_state::cart_load)); -- cgit v1.2.3 From 8519af54deb499aacf904794cf0250b31567fa21 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 12 Jun 2021 18:14:26 +1000 Subject: meritum2: added centronics printer from PR #5854. --- src/mame/drivers/meritum.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/meritum.cpp b/src/mame/drivers/meritum.cpp index 259b3415a93..2fa3ff09bf6 100644 --- a/src/mame/drivers/meritum.cpp +++ b/src/mame/drivers/meritum.cpp @@ -56,6 +56,7 @@ For Model III: #include "emu.h" #include "includes/trs80.h" +#include "bus/centronics/ctronics.h" #include "machine/input_merger.h" #include "machine/i8251.h" #include "machine/i8255.h" @@ -68,6 +69,8 @@ public: meritum_state(const machine_config &mconfig, device_type type, const char *tag) : trs80_state(mconfig, type, tag) , m_screen(*this, "screen") + , m_centronics(*this, "centronics") + , m_nmigate(*this, "nmigate") { } void meritum1(machine_config &config); @@ -83,10 +86,32 @@ private: void io_map(address_map &map); void mem_map2(address_map &map); void io_map2(address_map &map); + void mainppi_portb_w(u8); + void mainppi_portc_w(u8); required_device m_screen; + optional_device m_centronics; + required_device m_nmigate; }; +void meritum_state::mainppi_portc_w(u8 data) +{ + m_nmigate->in_w<0>(!BIT(data, 7)); // negated PC7 => NMI + m_centronics->write_strobe(BIT(data, 1)); // PC1 = STROBE (centronics) +} + +void meritum_state::mainppi_portb_w(u8 data) +{ + m_centronics->write_data0(BIT(data, 0)); + m_centronics->write_data1(BIT(data, 1)); + m_centronics->write_data2(BIT(data, 2)); + m_centronics->write_data3(BIT(data, 3)); + m_centronics->write_data4(BIT(data, 4)); + m_centronics->write_data5(BIT(data, 5)); + m_centronics->write_data6(BIT(data, 6)); + m_centronics->write_data7(BIT(data, 7)); +} + void meritum_state::mem_map(address_map &map) { map(0x0000, 0x37ff).rom(); @@ -332,7 +357,17 @@ void meritum_state::meritum1(machine_config &config) pit.out_handler<2>().set_inputline(m_maincpu, INPUT_LINE_NMI); i8255_device &mainppi(I8255(config, "mainppi")); // parallel interface - mainppi.out_pc_callback().set("nmigate", FUNC(input_merger_device::in_w<0>)).bit(7).invert(); + mainppi.out_pc_callback().set(FUNC(meritum_state::mainppi_portc_w)); + mainppi.out_pb_callback().set(FUNC(meritum_state::mainppi_portb_w)); + +/* parallel printer */ + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->set_data_input_buffer("cent_data_in"); + m_centronics->ack_handler().set("mainppi", FUNC(i8255_device::pc2_w)); + + INPUT_BUFFER(config, "cent_data_in"); + output_latch_device ¢_data_out(OUTPUT_LATCH(config, "cent_data_out")); + m_centronics->set_output_latch(cent_data_out); PIT8253(config, "audiopit", 0); // optional audio interface -- cgit v1.2.3 From 611f45547f048fbf3dc02a68d3a60be51abf3026 Mon Sep 17 00:00:00 2001 From: Jaen Saul Date: Sat, 12 Jun 2021 16:07:47 +0300 Subject: HD61830: Fix character blink mode When Cursor=Off and Blink=On, the controller is in "Character Blink" mode, according to the data sheet. This means that the character cell at the the position of the cursor is turned fully ON at a 50% blink duty cycle. Verified on a device with a real HD61830 (Atari Portfolio). --- src/devices/video/hd61830.cpp | 2 +- src/mame/drivers/pofo.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/devices/video/hd61830.cpp b/src/devices/video/hd61830.cpp index 55bf2bbd588..15d94e88317 100644 --- a/src/devices/video/hd61830.cpp +++ b/src/devices/video/hd61830.cpp @@ -440,7 +440,7 @@ void hd61830_device::draw_char(bitmap_ind16 &bitmap, const rectangle &cliprect, { // cursor off, character blink if (!cursor) - pixel = m_cursor ? pixel : 0; + pixel = m_cursor ? 1 : pixel; // cursor blink if (cursor && (cl == m_cp)) diff --git a/src/mame/drivers/pofo.cpp b/src/mame/drivers/pofo.cpp index 32c158e9821..aca6bbe2cae 100644 --- a/src/mame/drivers/pofo.cpp +++ b/src/mame/drivers/pofo.cpp @@ -18,7 +18,6 @@ TODO: - - cursor is missing - where do CDET and NMD1 connect to ?? - i/o port 8051 - screen contrast -- cgit v1.2.3 From 67926ff6080ef8f8276ddcb1f8a5d50b8c98a65a Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 12 Jun 2021 23:15:58 +1000 Subject: Software list items promoted to working --------------------------------------- rx78_cart: Excite Baseball [Robbbert] --- hash/rx78_cart.xml | 5 +++-- hash/super80_cass.xml | 8 ++++---- src/mame/drivers/meritum.cpp | 2 +- src/mame/drivers/rx78.cpp | 22 ++++++---------------- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/hash/rx78_cart.xml b/hash/rx78_cart.xml index c9bc6922f2b..baa88047531 100644 --- a/hash/rx78_cart.xml +++ b/hash/rx78_cart.xml @@ -121,7 +121,7 @@ The monitor will expect you to load a program from cassette. - + Champion Racer 1983 Bandai @@ -133,10 +133,11 @@ The monitor will expect you to load a program from cassette. - + Excite Baseball 1983 Bandai + diff --git a/hash/super80_cass.xml b/hash/super80_cass.xml index 974b2886fa0..d255430edf2 100644 --- a/hash/super80_cass.xml +++ b/hash/super80_cass.xml @@ -1649,7 +1649,7 @@ X-3607 : Horse Race Crazy Maze - 198? + 1983 Matrix Software @@ -1660,11 +1660,11 @@ X-3607 : Horse Race - Crazy Maze (L4) (with arrows) - 198? + Crazy Maze (with arrows) + 1983 Matrix Software - + diff --git a/src/mame/drivers/meritum.cpp b/src/mame/drivers/meritum.cpp index 2fa3ff09bf6..9edd68b9cb4 100644 --- a/src/mame/drivers/meritum.cpp +++ b/src/mame/drivers/meritum.cpp @@ -360,7 +360,7 @@ void meritum_state::meritum1(machine_config &config) mainppi.out_pc_callback().set(FUNC(meritum_state::mainppi_portc_w)); mainppi.out_pb_callback().set(FUNC(meritum_state::mainppi_portb_w)); -/* parallel printer */ + // printer CENTRONICS(config, m_centronics, centronics_devices, "printer"); m_centronics->set_data_input_buffer("cent_data_in"); m_centronics->ack_handler().set("mainppi", FUNC(i8255_device::pc2_w)); diff --git a/src/mame/drivers/rx78.cpp b/src/mame/drivers/rx78.cpp index 602a1a7d7fd..4a40e888860 100644 --- a/src/mame/drivers/rx78.cpp +++ b/src/mame/drivers/rx78.cpp @@ -116,7 +116,7 @@ private: u8 m_pal_reg[7]; u8 m_pri_mask; u8 m_key_mux; - u8 m_bgr; + u8 m_background; std::unique_ptr m_vram; required_device m_maincpu; required_device m_cass; @@ -164,12 +164,10 @@ uint32_t rx78_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, laycol[0] = 0; laycol[1] = 0; for (u8 j = 0; j < 6; j++) - { - bool bit = BIT(m_pal_reg[6], j); if (BIT(layers, j)) - laycol[bit] |= m_pal_reg[j]; - } - u8 color = laycol[1] ? laycol[1] : (laycol[0] ? laycol[0] : m_bgr); + laycol[BIT(m_pal_reg[6], j)] |= m_pal_reg[j]; + + u8 color = laycol[1] ? laycol[1] : (laycol[0] ? laycol[0] : m_background); bitmap.pix(y+bordery, x+i+borderx) = color; } count++; @@ -230,17 +228,9 @@ void rx78_state::vram_write_bank_w(u8 data) void rx78_state::vdp_reg_w(offs_t offset, u8 data) { if (offset < 6) - { - //u8 r = (data & 0x11) == 0x11 ? 0xff : ((data & 0x11) == 0x01 ? 0x7f : 0); - //u8 g = (data & 0x22) == 0x22 ? 0xff : ((data & 0x22) == 0x02 ? 0x7f : 0); - //u8 b = (data & 0x44) == 0x44 ? 0xff : ((data & 0x44) == 0x04 ? 0x7f : 0); - //m_palette->set_pen_color(66+offset, rgb_t(r,g,b)); m_pal_reg[offset] = bitswap<8>(data, 7, 3, 6, 2, 5, 1, 4, 0) & 0x3f; - } else - { m_pal_reg[offset] = data & 0x3f; - } } void rx78_state::vdp_bg_reg_w(u8 data) @@ -249,7 +239,7 @@ void rx78_state::vdp_bg_reg_w(u8 data) u8 g = (data & 0x22) == 0x22 ? 0xff : ((data & 0x22) == 0x02 ? 0x7f : 0); u8 b = (data & 0x44) == 0x44 ? 0xff : ((data & 0x44) == 0x04 ? 0x7f : 0); m_palette->set_pen_color(64, rgb_t(r,g,b)); // use this as the border colour - m_bgr = bitswap<8>(data, 7, 3, 6, 2, 5, 1, 4, 0) & 0x3f; + m_background = bitswap<8>(data, 7, 3, 6, 2, 5, 1, 4, 0) & 0x3f; } void rx78_state::vdp_pri_mask_w(u8 data) @@ -446,7 +436,7 @@ void rx78_state::machine_start() save_pointer(NAME(m_pal_reg), 7); save_item(NAME(m_pri_mask)); save_item(NAME(m_key_mux)); - save_item(NAME(m_bgr)); + save_item(NAME(m_background)); } DEVICE_IMAGE_LOAD_MEMBER( rx78_state::cart_load ) -- cgit v1.2.3 From 541d6416f87e3ba403bc12fd289f0e1b7dab943b Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 12 Jun 2021 10:55:45 -0400 Subject: hd6120: Rewrite notes --- src/devices/cpu/pdp8/hd6120.cpp | 42 +++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/src/devices/cpu/pdp8/hd6120.cpp b/src/devices/cpu/pdp8/hd6120.cpp index ec72498d272..1455fa7e829 100644 --- a/src/devices/cpu/pdp8/hd6120.cpp +++ b/src/devices/cpu/pdp8/hd6120.cpp @@ -86,20 +86,34 @@ Register”), PC and the two stack pointers, include several which are only implicitly used in execution: a TEMP register that latches ALU outputs, the instruction register IR, and the output latch register OL - that holds all addresses and data to be output on the DX bus. HD-6120 - also internally maintains a group of 3-bit registers whose path - connects to TEMP, each of which contains the current memory extension - fields, their mirrors or various flags. (This emulation extends the - field registers to 4 bits to include the CTRLFF, PDF and PEX flags, - which are neither readable nor output directly at any time.) - Particular flag registers are enabled on the C0, C1 and EMA2 lines - during the final writes of ISZ, DCA and JMS. The most important of - these flag registers includes LINK, the interrupt enable flip-flop and - the GT flag hitherto provided only on arithmetic extensions of some - previous PDP-8 CPUs, though like MQ it conveys no specific purpose - here. Another flag register contains the inverse of the active-low - INTREQ input, the PWRON flag (set if STRTUP = VSS at RESET time, - causing entry into panel mode) and 0 in its LSB. + that holds all addresses and data to be output on the DX bus. + + HD-6120 also maintains a group of 3-bit internal registers whose data + path connects to TEMP. These are used to hold the current memory + extension fields, their mirrors and various flags. (This emulation + extends the field registers to 4 bits to include the CTRLFF, PDF and + PEX flags, which are neither readable nor output directly at any + time.) These 3-bit registers may be enabled on the C0, C1 and EMA2 + lines at particular times, and the GTF, GCF, PRS, RDF, RIF and RIB + internal IOTs read various combinations of them into AC. They include: + + MSB LSB Output conditions + ----------------------------------------- + IF0 IF1 IF2 IFETCH, direct operands (except if FZ) + IB0 IB1 IB2 None (until transferred to IF) + ISF0 ISF1 ISF2 None + DF0 DF1 DF2 Indirect operand addressing, IOTs, etc. + DSF0 DSF1 DSF2 None + LINK GT IEFF DCA AC writes + INTREQ* PWRON 0 ISZ result writes + BTSTRAP PNLTRP HLTFLG JMS PC writes + + The GT flag, like MQ, is not used for any specific purpose on the + HD-6120, unlike the arithmetic extensions of previous PDP-8 CPUs which + originally implemented them. The INTREQ flag is 1 when the input pin + is sampled active low and 0 when it is inactive. The PWRON flag is set + if STRTUP is sampled as VSS at RESET time; it causes the CPU to trap + into panel mode before executing its first instruction. Undefined Group 3 OPRs and internal IOTs have no effect on the HD-6120 except that both interrupts and panel requests are blocked -- cgit v1.2.3 From c8814942eec49fb349cd78a6c7759b975c11a3a4 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 13 Jun 2021 00:40:56 +0900 Subject: psikyosh.cpp: Updated commnts based on PCB markings, marked games with MACHINE_NO_COCKTAIL. (#8177) because flip screen isn't support now Add docs for ROM location/usage, Export name for daraku Fix fill value for empty ROM area --- src/mame/drivers/psikyosh.cpp | 241 ++++++++++++++++++++++++++---------------- 1 file changed, 150 insertions(+), 91 deletions(-) diff --git a/src/mame/drivers/psikyosh.cpp b/src/mame/drivers/psikyosh.cpp index 27a104059d9..f6d3284512e 100644 --- a/src/mame/drivers/psikyosh.cpp +++ b/src/mame/drivers/psikyosh.cpp @@ -139,46 +139,68 @@ Psikyo PS3-V1 hardware readme ----------------------------- Strikers 1945 II -Sol Divid -Daraku +Sol Divide +The Fallen Angels / Daraku Tenshi Space Bomber PCB Layout ---------- PS3-V1 -|-------------------------------------------------| -|HA13118 3771 PROG_L | -| VOL YAC513 PROG_H |-----| | -| JRC4741 | SH2 | | -| *U16 | | | -| YMF278B SOUND.U32 |-----| | -| | -|J | -|A 57.2727MHz HY514260 HY514260| -|M | -|M |-------| | -|A |PSIKYO | | -| |PS6406B| *4L.10 0L.4 | -| 62256 | | | -|93C56 62256 |-------| *5L.9 1L.3 | -|JP5 | -| *6H.37 *4H.31 2H.20 0H.13 *6L.8 2L.2 | -| | -| *7L.7 3L.1 | -| *7H.36 *5H.30 3H.19 1H.12 | -|-------------------------------------------------| +|--------------------------------------------------| +|HA13118 3771 PROG_L.U18 | +| VOL YAC513 PROG_H.U17 |-----| | +| JRC4741 | SH2 | | +| PROG.U16 | | | +| YMF278B SOUND.U32 |-----| | +| | +|J | +|A 57.2727MHz HY514260 HY514260 | +|M | +|M |-------| | +|A |PSIKYO | | +| |PS6406B| 4L.U10 0L.U4 | +| 62256 | | | +|93C56 62256 |-------| 5L.U9 1L.U3 | +|JP5 | +| 6H.U37 4H.U31 2H.U20 0H.U13 6L.U8 2L.U2 | +| | +| *7L.U7 3L.U1 | +| *7H.U36 5H.U30 3H.U19 1H.U12 | +|--------------------------------------------------| Notes: JP5 - hardwired jumper bank (x4) for region selection. Cut 2ND jumper from left for International/English region. All jumpers shorted = Japan region (default) SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144) YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80) - PROG_H/PROG_L - 27C4096 DIP40 EPROM - All other ROMs - 32M SOP44 MaskROM + PROG_H.U17/PROG_L.U18 - 27C4096 DIP40 EPROM + PROG.U16 - 27C802 SOP44 OTP EPROM + All other ROMs - 16M/32M SOP44 MaskROM * - ROM locations not populated VSync - 60Hz HSync - 15.27kHz +ROM Usage +--------- + +|-------------------------------------------|-CPU ROMs----|-GFX ROMs------------------------|-Sound ROM-| +| Game | U18 U17 U16 | U4 U3 U2 U1 U10 U9 U8 U7 | U32 | +| | | U13 U12 U20 U19 U31 U30 U37 U36 | | +|-------------------------------------------|-------------|---------------------------------|-----------| +| Sol Divide - The Sword Of Darkness | 4M 4M - | - - - - 32M 32M 32M - | 32M | +| | | - - - - 32M 32M 32M - | | +|-------------------------------------------|-------------|---------------------------------|-----------| +| Strikers 1945 II | 4M 4M - | 32M 32M 32M 32M - - - - | 32M | +| | | 32M 32M 32M 32M - - - - | | +|-------------------------------------------|-------------|---------------------------------|-----------| +| The Fallen Angels (World) / | 4M 4M 8M | 32M 32M 32M 32M 32M 32M 16M - | 32M | +| Daraku Tenshi - The Fallen Angels (Japan) | | 32M 32M 32M 32M 32M 32M 16M - | | +|-------------------------------------------|-------------|---------------------------------|-----------| +| Space Bomber | 4M 4M - | 32M 32M 32M 32M 32M - - - | 32M | +| | | 32M 32M 32M 32M 32M - - - | | +|-------------------------------------------|-------------|---------------------------------|-----------| +-: Unpopulated + Psikyo PS5 hardware readme -------------------------- @@ -190,39 +212,54 @@ PCB Layout ---------- PS5 -|-------------------------------------------------| -|HA13118 M514260 PROG_L.U16 DATA.U1 | -| VOL 3771 M514260 PROG_H.U17 | -| *PROG_DATA.U2| -| PAL | -| | -| JRC4741 0H.10 0L.3 | -|J |-----| | -|A | SH2 | 57.2727MHz 1H.11 1L.4 | -|M YAC513 | | | -|M |-----| |-------| 2H.12 2L.5 | -|A |PSIKYO | | -| |PS6406B| 3H.13 3L.6 | -| | | | -| |-------| *4H.14 *4L.7 | -| | -| 62256 *5H.15 *5L.8 | -| 62256 | -| 93C56 | -| JP4 YMF278B SOUND.9 | -|-------------------------------------------------| +|--------------------------------------------------| +|HA13118 M514260 PROG_L.U16 DATA.U1 | +| VOL 3771 M514260 PROG_H.U17 | +| *PROG_DATA.U2 | +| PAL | +| | +| JRC4741 0H.U10 0L.U3 | +|J |-----| | +|A | SH2 | 57.2727MHz 1H.U11 1L.U4 | +|M YAC513 | | | +|M |-----| |-------| 2H.U12 2L.U5 | +|A |PSIKYO | | +| |PS6406B| 3H.U13 3L.U6 | +| | | | +| |-------| *4H.U14 *4L.U7 | +| | +| 62256 *5H.U15 *5L.U8 | +| 62256 | +| 93C56 | +| JP4 YMF278B SOUND.U9 | +|--------------------------------------------------| Notes: JP4 - hardwired jumper bank (x4) for region selection. Cut leftmost jumper for International/English region. All jumpers shorted = Japan region (default) SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144) YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80) PAL - AMD PALCE 16V8H stamped 'PS5-1' (DIP20) - PROG_H/PROG_L/DATA - 27C4096 DIP40 EPROM + PROG_H.U17/PROG_L.U16/DATA.U1 - 27C4096 DIP40 EPROM All other ROMs - 64M/32M SOP44 MaskROM * - ROM locations not populated VSync - 60Hz HSync - 15.27kHz +ROM Usage +--------- + +|-----------------------------|-CPU ROMs--------|-GFX ROMs----------------|-Sound ROM-| +| Game | U16 U17 U1 U2 | U3 U4 U5 U6 U7 U8 | U9 | +| | | U10 U11 U12 U13 U14 U15 | | +|-----------------------------|-----------------|-------------------------|-----------| +| Gunbird 2 | 4M 4M 4M - | 64M 64M 64M 32M - - | 32M | +| | | 64M 64M 64M 32M - - | | +|-----------------------------|-----------------|-------------------------|-----------| +| Strikers 1945 III (World) / | 4M 4M 4M - | 64M 64M 64M 32M - - | 32M | +| Strikers 1999 (Japan) | | 64M 64M 64M 32M - - | | +|-----------------------------|-----------------|-------------------------|-----------| +-: Unpopulated + Psikyo PS5V2 hardware readme ---------------------------- @@ -240,9 +277,9 @@ PS5V2 |----------------------------------------------------| |HA13118 PS5-1 SM81C256 PROG_H.U21 *0H.U11 *0L.U3 | |VOL JRC4741 SM81C256 PROG_L.U22 | -| YAC516 3771 *1H.U12 *1L.U4 | -| |-----| *U23 | -| | SH2 | *2H.U13 *2L.U5 | +| YAC516 3771 1H.U12 1L.U4 | +| |-----| *PROG_DATA.U23 | +| | SH2 | 2H.U13 2L.U5 | | | | | |J YMF278B |-----| 3H.U14 3L.U6 | |A 57.2727MHz | @@ -263,14 +300,36 @@ Notes: for International/English region. All jumpers shorted = Japan region (default) SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144) YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80) - PROG_H/PROG_L - 27C4096 DIP40 EPROM + PROG_H.U21/PROG_L.U22 - 27C4096 DIP40 EPROM ROMs U1-U59 (at bottom of PCB) - 16M DIP42 MaskROM ROMs U3-U10 & U11-U18 (at side of PCB) - 16M TSOP48 Type-II surface-mounted MaskROM - ROM U52 - 32M TSOP48 Type-II surface-mounted MaskROM - * - ROM locations not populated on tgm2 & tgm2+ + ROM U52 - 16M/32M TSOP48 Type-II surface-mounted MaskROM + * - ROM locations not populated VSync - 60Hz HSync - 15.27kHz +ROM Usage +--------- + +|-------------------------|-CPU ROMs----|-GFX ROMs(TSOP48)----------------|-GFX ROMs(DIP42)-----|-Sound ROM-| +| Game | U21 U22 U23 | U3 U4 U5 U6 U7 U8 U9 U10 | U1 U19 U28 U41 U58 | U52 | +| | | U11 U12 U13 U14 U15 U16 U17 U18 | U2 U20 U29 U42 U59 | | +|-------------------------|-------------|---------------------------------|---------------------|-----------| +| Dragon Blaze | 4M 4M - | - 16M 16M 16M 16M 16M - - | 16M 16M 16M 16M 16M | 16M | +| | | - 16M 16M 16M 16M 16M - - | 16M 16M 16M 16M 16M | | +|-------------------------|-------------|---------------------------------|---------------------|-----------| +| Tetris: the Absolute - | 4M 4M - | - - - 16M 16M 16M - - | 16M 16M 16M 16M 16M | 32M | +| The Grand Master 2/Plus | | - - - 16M 16M 16M - - | 16M 16M 16M 16M 16M | | +|-------------------------|-------------|---------------------------------|---------------------|-----------| +| Gunbarich | 4M 4M - | - * * * * * - - | 16M 16M 16M 16M * | 16M | +| | | - * * * * * - - | 16M 16M 16M 16M * | | +|-------------------------|-------------|---------------------------------|---------------------|-----------| +| Mahjong G-Taste | 4M 4M - | - 16M 16M 16M 16M * - - | * * * * * | 32M | +| | | - 16M 16M 16M 16M * - - | * * * * * | | +|-------------------------|-------------|---------------------------------|---------------------|-----------| +-: Unpopulated +*: Leftover from Dragon Blaze + */ #include "emu.h" @@ -602,7 +661,7 @@ static INPUT_PORTS_START( daraku ) PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) INPUT_PORTS_END -static INPUT_PORTS_START( sbomberb ) +static INPUT_PORTS_START( sbomber ) PORT_INCLUDE( common ) /* If Debug is HIGH then you can perform rom test, but EEPROM resets? */ @@ -809,11 +868,11 @@ void psikyosh_state::psikyo5_240(machine_config &config) /* PS3 */ ROM_START( soldivid ) - ROM_REGION( 0x200000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "2-prog_l.u18", 0x000002, 0x080000, CRC(cf179b04) SHA1(343f00a81cffd44334a4db81b6b828b7cf73c1e8) ) ROM_LOAD32_WORD_SWAP( "1-prog_h.u17", 0x000000, 0x080000, CRC(f467d1c4) SHA1(a011e6f310a54f09efa0bf4597783cd78c05ad6f) ) - ROM_REGION( 0x3800000, "gfx1", 0 ) + ROM_REGION( 0x3800000, "gfx1", ROMREGION_ERASE00 ) /* This Space Empty! */ ROM_LOAD32_WORD_SWAP( "4l.u10", 0x2000000, 0x400000, CRC(9eb9f269) SHA1(4a4d90eefe62b5462f5ed5e062eea7b6b4900f85) ) ROM_LOAD32_WORD_SWAP( "4h.u31", 0x2000002, 0x400000, CRC(7c76cfe7) SHA1(14e291e840a4afe3802fe1847615c5e806d7492a) ) @@ -823,15 +882,15 @@ ROM_START( soldivid ) ROM_LOAD32_WORD_SWAP( "6h.u37", 0x3000002, 0x400000, CRC(fdd57361) SHA1(f58d91acde1f4e6d4f0e8dcd1b23aa5092d89916) ) ROM_REGION( 0x400000, "ymf", 0 ) - ROM_LOAD( "sound.bin", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) ) + ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) ) ROM_END ROM_START( soldividk ) - ROM_REGION( 0x200000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "9-prog_lk.u18", 0x000002, 0x080000, CRC(b534029d) SHA1(a96ca55e6694c5537d489d40bc890c376bbce933) ) ROM_LOAD32_WORD_SWAP( "8-prog_hk.u17", 0x000000, 0x080000, CRC(a48e3206) SHA1(d560286972de2a0baa5369672a0190b7bd421843) ) - ROM_REGION( 0x3800000, "gfx1", 0 ) + ROM_REGION( 0x3800000, "gfx1", ROMREGION_ERASE00 ) /* This Space Empty! */ ROM_LOAD32_WORD_SWAP( "4l.u10", 0x2000000, 0x400000, CRC(9eb9f269) SHA1(4a4d90eefe62b5462f5ed5e062eea7b6b4900f85) ) ROM_LOAD32_WORD_SWAP( "4h.u31", 0x2000002, 0x400000, CRC(7c76cfe7) SHA1(14e291e840a4afe3802fe1847615c5e806d7492a) ) @@ -841,11 +900,11 @@ ROM_START( soldividk ) ROM_LOAD32_WORD_SWAP( "6h.u37", 0x3000002, 0x400000, CRC(fdd57361) SHA1(f58d91acde1f4e6d4f0e8dcd1b23aa5092d89916) ) ROM_REGION( 0x400000, "ymf", 0 ) - ROM_LOAD( "sound.bin", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) ) + ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) ) ROM_END ROM_START( s1945ii ) - ROM_REGION( 0x200000, "maincpu", 0) /* Code */ + ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) /* Code */ ROM_LOAD32_WORD_SWAP( "2_prog_l.u18", 0x000002, 0x080000, CRC(20a911b8) SHA1(82ba7b93bd621fc45a4dc2722752077b59a0a233) ) ROM_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(4c0fe85e) SHA1(74f810a1c3e9d629c8b190f68d73ce07b11f77b7) ) @@ -868,7 +927,7 @@ ROM_END ROM_START( daraku ) /* main program */ - ROM_REGION( 0x200000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", 0 ) ROM_LOAD32_WORD_SWAP( "4_prog_l.u18", 0x000002, 0x080000, CRC(660b4609) SHA1(ee6b5606fae41881c3e671ee642baae5c03331ca) ) ROM_LOAD32_WORD_SWAP( "3_prog_h.u17", 0x000000, 0x080000, CRC(7a9cf601) SHA1(8df464ce3fd02b30dd2ab77828594f4916375fd5) ) ROM_LOAD16_WORD_SWAP( "prog.u16", 0x100000, 0x100000, CRC(3742e990) SHA1(dd4b8777e57245151b3d520ed1bdab207530420b) ) @@ -897,7 +956,7 @@ ROM_START( daraku ) ROM_END ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan region */ - ROM_REGION( 0x200000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "1-b_pr_l.u18", 0x000002, 0x080000, CRC(52d12225) SHA1(0a31a5d557414e7bf51dc6f7fbdd417a20b78df1) ) ROM_LOAD32_WORD_SWAP( "1-b_pr_h.u17", 0x000000, 0x080000, CRC(1bbd0345) SHA1(c6ccb7c97cc9e9ea298c1883d1dd5563907a7255) ) @@ -921,7 +980,7 @@ ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan reg ROM_END ROM_START( sbombera ) /* Original version */ - ROM_REGION( 0x200000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "2.u18", 0x000002, 0x080000, CRC(57819a26) SHA1(d7a6fc957e39adf97762ab0a35b91aa17ec026e0) ) ROM_LOAD32_WORD_SWAP( "1.u17", 0x000000, 0x080000, CRC(c388e847) SHA1(cbf4f2e191894160bdf0290d72cf20c222aaf7a7) ) @@ -947,7 +1006,7 @@ ROM_END /* PS5 */ ROM_START( gunbird2 ) /* Internal date string shows Oct 07 16:05 */ - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD32_WORD_SWAP( "2_prog_l.u16", 0x000002, 0x080000, CRC(76f934f0) SHA1(cf197796d66f15639a6b3d5311c18da33cefd06b) ) ROM_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(7328d8bf) SHA1(c640de1ab5b32400b2d77e0dc6e3ee0f78ab7803) ) ROM_LOAD16_WORD_SWAP( "3_pdata.u1", 0x100000, 0x080000, CRC(a5b697e6) SHA1(947f124fa585c2cf77c6571af7559bd652897b89) ) @@ -985,7 +1044,7 @@ This set can still be set Japan, International Ver A. or International Ver B. vi */ ROM_START( gunbird2a ) /* Internal date string shows Oct 08 17:02 - No specific Korean copyright / message, but made for the Korean market? */ - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD32_WORD_SWAP( "prog_l.u16", 0x000002, 0x080000, CRC(974f85ba) SHA1(4e19b12bd5f268088317ea231bbe7f9d2d694b2b) ) /* these roms had no labels */ ROM_LOAD32_WORD_SWAP( "prog_h.u17", 0x000000, 0x080000, CRC(cb0cb826) SHA1(8827e9ebfedbc63dbf41c6a5c994a691a6d63fdb) ) ROM_LOAD16_WORD_SWAP( "pdata.u1", 0x100000, 0x080000, CRC(23751839) SHA1(4762685d1f6843e8e53eae6c014e66b98fa15eb7) ) @@ -1008,7 +1067,7 @@ ROM_START( gunbird2a ) /* Internal date string shows Oct 08 17:02 - No specific ROM_END ROM_START( s1945iii ) - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD32_WORD_SWAP( "2_progl.u16", 0x000002, 0x080000, CRC(5d5d385f) SHA1(67b3bcabd71cf084bcea7a59939281a8d6257059) ) ROM_LOAD32_WORD_SWAP( "1_progh.u17", 0x000000, 0x080000, CRC(1b8a5a18) SHA1(718a176bd48e16f964fcb07c568b5227cfc0515f) ) ROM_LOAD16_WORD_SWAP( "3_data.u1", 0x100000, 0x080000, CRC(8ff5f7d3) SHA1(420a3d7f2d5ab6a56789d36b418431f12f5f73f5) ) @@ -1033,11 +1092,11 @@ ROM_END /* PS5v2 */ ROM_START( dragnblz ) - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "2prog_h.u21", 0x000000, 0x080000, CRC(fc5eade8) SHA1(e5d05543641e4a3900b0d42e0d5f75734683d635) ) ROM_LOAD32_WORD_SWAP( "1prog_l.u22", 0x000002, 0x080000, CRC(95d6fd02) SHA1(2b2830e7fa66cbd13666191762bfddc40571caec) ) - ROM_REGION( 0x2c00000, "gfx1", 0 ) /* Sprites */ + ROM_REGION( 0x2c00000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */ ROM_LOAD32_WORD( "1l.u4", 0x0400000, 0x200000, CRC(c2eb565c) SHA1(07e41b36cc03a87f28d091754fdb0d1a7316a532) ) ROM_LOAD32_WORD( "1h.u12", 0x0400002, 0x200000, CRC(23cb46b7) SHA1(005b7cc40eea103688a64a72c219c7535970dbfb) ) ROM_LOAD32_WORD( "2l.u5", 0x0800000, 0x200000, CRC(bc256aea) SHA1(1f1d678e8a63513a95f296b8a07d2ea485d1e53f) ) @@ -1075,11 +1134,11 @@ Starting with Gunbarich and including Mahjong G-Taste, Psikyo started to "recycl */ ROM_START( gnbarich ) - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "2-prog_l.u21", 0x000000, 0x080000, CRC(c136cd9c) SHA1(ab66c4f5196a66a97dbb5832336a203421cf40fa) ) ROM_LOAD32_WORD_SWAP( "1-prog_h.u22", 0x000002, 0x080000, CRC(6588fc96) SHA1(3db29fcf17e8b2aee465319b557bd3e45bc966b2) ) - ROM_REGION( 0x2c00000, "gfx1", 0 ) /* Sprites */ + ROM_REGION( 0x2c00000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */ // ROM_LOAD32_WORD( "1l.u4", 0x0400000, 0x200000, CRC(c2eb565c) SHA1(07e41b36cc03a87f28d091754fdb0d1a7316a532) ) /* From Dragon Blaze */ // ROM_LOAD32_WORD( "1h.u12", 0x0400002, 0x200000, CRC(23cb46b7) SHA1(005b7cc40eea103688a64a72c219c7535970dbfb) ) /* From Dragon Blaze */ // ROM_LOAD32_WORD( "2l.u5", 0x0800000, 0x200000, CRC(bc256aea) SHA1(1f1d678e8a63513a95f296b8a07d2ea485d1e53f) ) /* From Dragon Blaze */ @@ -1109,7 +1168,7 @@ ROM_START( gnbarich ) ROM_END ROM_START( mjgtaste ) - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "2.u21", 0x000000, 0x080000, CRC(5f2041dc) SHA1(f3862ffdb8df0cf921ce1cb0236935731e7729a7) ) ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(f5ff7876) SHA1(4c909db9c97f29fd79df6dacd29762688701b973) ) @@ -1143,11 +1202,11 @@ ROM_START( mjgtaste ) ROM_END ROM_START( tgm2 ) - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "2.u21", 0x000000, 0x080000, CRC(b19f6c31) SHA1(c58346c575db71262aebc3993743cb031c41e4af) ) ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(c521bf24) SHA1(0ee5b9f74b6b8bcc01b2270c53f30d99e877ed64) ) - ROM_REGION( 0x3000000, "gfx1", 0 ) /* Sprites */ + ROM_REGION( 0x3000000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */ // Lower positions not populated ROM_LOAD32_WORD( "81ts_3l.u6", 0x0c00000, 0x200000, CRC(d77cff9c) SHA1(93ee48c350110ebf9a80cca95c599c90a523147d) ) ROM_LOAD32_WORD( "82ts_3h.u14", 0x0c00002, 0x200000, CRC(f012b583) SHA1(907e1c93cbfa6a0285f96c53f5ccb63e313053d7) ) @@ -1175,11 +1234,11 @@ ROM_START( tgm2 ) ROM_END ROM_START( tgm2p ) - ROM_REGION( 0x180000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD32_WORD_SWAP( "2b.u21", 0x000000, 0x080000, CRC(38bc626c) SHA1(783e8413b11f1fa08d331b09ef4ed63f62b87ead) ) ROM_LOAD32_WORD_SWAP( "1b.u22", 0x000002, 0x080000, CRC(7599fb19) SHA1(3f7e81756470c173cc17a7e7dee91437571fd0c3) ) - ROM_REGION( 0x3000000, "gfx1", 0 ) /* Sprites */ + ROM_REGION( 0x3000000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */ // Lower positions not populated ROM_LOAD32_WORD( "81ts_3l.u6", 0x0c00000, 0x200000, CRC(d77cff9c) SHA1(93ee48c350110ebf9a80cca95c599c90a523147d) ) ROM_LOAD32_WORD( "82ts_3h.u14", 0x0c00002, 0x200000, CRC(f012b583) SHA1(907e1c93cbfa6a0285f96c53f5ccb63e313053d7) ) @@ -1223,24 +1282,24 @@ void psikyosh_state::init_ps5() } -// YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS */ +// YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS */ /* ps3-v1 */ -GAME( 1997, soldivid, 0, psikyo3v1, soldivid, psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", MACHINE_SUPPORTS_SAVE ) -GAME( 1997, soldividk, soldivid, psikyo3v1, soldividk,psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness (Korea)", MACHINE_SUPPORTS_SAVE ) -GAME( 1997, s1945ii, 0, psikyo3v1, s1945ii, psikyosh_state, init_ps3, ROT270, "Psikyo", "Strikers 1945 II", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, daraku, 0, psikyo3v1, daraku, psikyosh_state, init_ps3, ROT0, "Psikyo", "Daraku Tenshi - The Fallen Angels", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, sbomber, 0, psikyo3v1, sbomberb, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber (ver. B)", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, sbombera, sbomber, psikyo3v1, sbomberb, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber", MACHINE_SUPPORTS_SAVE ) +GAME( 1997, soldivid, 0, psikyo3v1, soldivid, psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1997, soldividk, soldivid, psikyo3v1, soldividk,psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness (Korea)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1997, s1945ii, 0, psikyo3v1, s1945ii, psikyosh_state, init_ps3, ROT270, "Psikyo", "Strikers 1945 II", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, daraku, 0, psikyo3v1, daraku, psikyosh_state, init_ps3, ROT0, "Psikyo", "The Fallen Angels (World) / Daraku Tenshi - The Fallen Angels (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, sbomber, 0, psikyo3v1, sbomber, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber (ver. B)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, sbombera, sbomber, psikyo3v1, sbomber, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) /* ps5 */ -GAME( 1998, gunbird2, 0, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, gunbird2a, gunbird2, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1999, s1945iii, 0, psikyo5, s1945iii, psikyosh_state, init_ps5, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1998, gunbird2, 0, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, gunbird2a, gunbird2, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1999, s1945iii, 0, psikyo5, s1945iii, psikyosh_state, init_ps5, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) /* ps5v2 */ -GAME( 2000, dragnblz, 0, psikyo5, dragnblz, psikyosh_state, init_ps5, ROT270, "Psikyo", "Dragon Blaze", MACHINE_SUPPORTS_SAVE ) -GAME( 2000, tgm2, 0, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2", MACHINE_SUPPORTS_SAVE ) -GAME( 2000, tgm2p, tgm2, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2 Plus", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, gnbarich, 0, psikyo5, gnbarich, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbarich", MACHINE_SUPPORTS_SAVE ) -GAME( 2002, mjgtaste, 0, psikyo5_mahjong, mjgtaste, psikyosh_state, init_ps5, ROT0, "Psikyo", "Mahjong G-Taste", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, dragnblz, 0, psikyo5, dragnblz, psikyosh_state, init_ps5, ROT270, "Psikyo", "Dragon Blaze", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 2000, tgm2, 0, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 2000, tgm2p, tgm2, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2 Plus", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 2001, gnbarich, 0, psikyo5, gnbarich, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbarich", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 2002, mjgtaste, 0, psikyo5_mahjong, mjgtaste, psikyosh_state, init_ps5, ROT0, "Psikyo", "Mahjong G-Taste", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) -- cgit v1.2.3 From 838da5bea9200aeecf8da7c60e1d5ca54870214f Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 13 Jun 2021 00:55:06 +0900 Subject: inufuku.cpp: Merged */inufuku.* into drivers/inufuku.cpp, minor cleanups. (#8172) * Removed unnecessary VRAM read trampolines. * Use buffered_spriteram16_device for buffered sprite RAM. * Derive clocks from crystals. * Reduced runtime tag lookups, unnecessary region size. * Fix naming, spacing. * Use generic graphics layouts, fix color usage of gfxdecode related to palette size. * Restrict rowscroll to screen clipping rectangle. --- scripts/target/mame/arcade.lua | 2 - src/mame/drivers/inufuku.cpp | 415 ++++++++++++++++++++++++++++++----------- src/mame/includes/inufuku.h | 81 -------- src/mame/video/inufuku.cpp | 173 ----------------- 4 files changed, 307 insertions(+), 364 deletions(-) delete mode 100644 src/mame/includes/inufuku.h delete mode 100644 src/mame/video/inufuku.cpp diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 8ac7d3cdf87..a7d66747bed 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -4563,8 +4563,6 @@ files { MAME_DIR .. "src/mame/video/vs920a.cpp", MAME_DIR .. "src/mame/video/vs920a.h", MAME_DIR .. "src/mame/drivers/inufuku.cpp", - MAME_DIR .. "src/mame/includes/inufuku.h", - MAME_DIR .. "src/mame/video/inufuku.cpp", MAME_DIR .. "src/mame/drivers/ojankohs.cpp", MAME_DIR .. "src/mame/includes/ojankohs.h", MAME_DIR .. "src/mame/video/ojankohs.cpp", diff --git a/src/mame/drivers/inufuku.cpp b/src/mame/drivers/inufuku.cpp index 2ccc99d0dfe..e2657c8a04b 100644 --- a/src/mame/drivers/inufuku.cpp +++ b/src/mame/drivers/inufuku.cpp @@ -73,14 +73,245 @@ TODO: ******************************************************************************/ #include "emu.h" -#include "includes/inufuku.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "machine/eepromser.h" +#include "machine/gen_latch.h" #include "sound/ymopn.h" +#include "video/bufsprite.h" +#include "video/vsystem_spr.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +#include "tilemap.h" + + +namespace { + +class inufuku_state : public driver_device +{ +public: + inufuku_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_bg_videoram(*this, "bg_videoram") + , m_bg_rasterram(*this, "bg_rasterram") + , m_tx_videoram(*this, "tx_videoram") + , m_sprtileram(*this, "sprtileram") + , m_audiobank(*this, "audiobank") + , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") + , m_spr(*this, "vsystem_spr") + , m_soundlatch(*this, "soundlatch") + , m_sprattrram(*this, "sprattrram") + { } + + void inufuku(machine_config &config); + void _3on3dunk(machine_config &config); + + DECLARE_READ_LINE_MEMBER(soundflag_r); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: + // memory pointers + required_shared_ptr m_bg_videoram; + required_shared_ptr m_bg_rasterram; + required_shared_ptr m_tx_videoram; + required_shared_ptr m_sprtileram; + + required_memory_bank m_audiobank; + + // video-related + tilemap_t *m_bg_tilemap; + tilemap_t *m_tx_tilemap; + int m_bg_scrollx = 0; + int m_bg_scrolly = 0; + int m_tx_scrollx = 0; + int m_tx_scrolly = 0; + bool m_bg_raster = false; + u8 m_bg_palettebank = 0; + u8 m_tx_palettebank = 0; + u32 tile_callback( u32 code ); + + // devices + required_device m_maincpu; + required_device m_audiocpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_spr; + required_device m_soundlatch; + required_device m_sprattrram; + + void soundrombank_w(u8 data); + void palettereg_w(offs_t offset, u16 data); + void scrollreg_w(offs_t offset, u16 data); + void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void tx_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_tx_tile_info); + + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void main_map(address_map &map); + void sound_io_map(address_map &map); + void sound_map(address_map &map); +}; + + +/****************************************************************************** + + Memory handlers + +******************************************************************************/ + +void inufuku_state::palettereg_w(offs_t offset, u16 data) +{ + switch (offset) + { + case 0x02: + m_bg_palettebank = (data & 0xf000) >> 12; + m_bg_tilemap->mark_all_dirty(); + /* + if (data & ~0xf000) + logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data); + */ + break; + case 0x03: + m_tx_palettebank = (data & 0xf000) >> 12; + m_tx_tilemap->mark_all_dirty(); + /* + if (data & ~0xf000) + logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data); + */ + break; + default: + //logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data); + break; + } +} + + +void inufuku_state::scrollreg_w(offs_t offset, u16 data) +{ + switch (offset) + { + case 0x00: m_bg_scrollx = data + 1; break; + case 0x01: m_bg_scrolly = data + 0; break; + case 0x02: m_tx_scrollx = data - 3; break; + case 0x03: m_tx_scrolly = data + 1; break; + case 0x04: + m_bg_raster = BIT(~data, 9); + /* + if (data & ~0x0200) + logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data); + */ + break; + default: + //logerror("%s: scrollreg_w %02X: %04x\n", machine().describe_context(), offset << 1, data); + break; + } +} + + +/****************************************************************************** + + Tilemap callbacks + +******************************************************************************/ + +TILE_GET_INFO_MEMBER(inufuku_state::get_bg_tile_info) +{ + tileinfo.set(0, + m_bg_videoram[tile_index], + m_bg_palettebank, + 0); +} + + +TILE_GET_INFO_MEMBER(inufuku_state::get_tx_tile_info) +{ + tileinfo.set(1, + m_tx_videoram[tile_index], + m_tx_palettebank, + 0); +} + + +void inufuku_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_bg_videoram[offset]); + m_bg_tilemap->mark_tile_dirty(offset); +} + + +void inufuku_state::tx_videoram_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_tx_videoram[offset]); + m_tx_tilemap->mark_tile_dirty(offset); +} + + +u32 inufuku_state::tile_callback( u32 code ) +{ + return ((m_sprtileram[code * 2] & 0x0007) << 16) + m_sprtileram[(code * 2) + 1]; +} + + +/****************************************************************************** + + Start the video hardware emulation + +******************************************************************************/ + +void inufuku_state::video_start() +{ + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); + m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); + + m_bg_tilemap->set_transparent_pen(255); + m_tx_tilemap->set_transparent_pen(255); +} + + +/****************************************************************************** + + Display refresh + +******************************************************************************/ + +u32 inufuku_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_palette->black_pen(), cliprect); + screen.priority().fill(0); + + if (m_bg_raster) + { + m_bg_tilemap->set_scroll_rows(512); + for (int i = cliprect.min_y; i <= cliprect.max_y; i++) + m_bg_tilemap->set_scrollx((m_bg_scrolly + i) & 0x1ff, m_bg_scrollx + m_bg_rasterram[i]); + } + else + { + m_bg_tilemap->set_scroll_rows(1); + m_bg_tilemap->set_scrollx(0, m_bg_scrollx); + } + m_bg_tilemap->set_scrolly(0, m_bg_scrolly); + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + m_tx_tilemap->set_scrollx(0, m_tx_scrollx); + m_tx_tilemap->set_scrolly(0, m_tx_scrolly); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); + + m_spr->draw_sprites( m_sprattrram->buffer(), m_sprattrram->bytes(), screen, bitmap, cliprect ); + return 0; +} /****************************************************************************** @@ -89,11 +320,12 @@ TODO: ******************************************************************************/ -void inufuku_state::inufuku_soundrombank_w(uint8_t data) +void inufuku_state::soundrombank_w(u8 data) { - membank("bank1")->set_entry(data & 0x03); + m_audiobank->set_entry(data & 0x03); } + /****************************************************************************** Input/Output port interface @@ -105,17 +337,18 @@ READ_LINE_MEMBER(inufuku_state::soundflag_r) return m_soundlatch->pending_r() ? 0 : 1; } + /****************************************************************************** Main CPU memory handlers ******************************************************************************/ -void inufuku_state::inufuku_map(address_map &map) +void inufuku_state::main_map(address_map &map) { - map(0x000000, 0x0fffff).rom(); // main rom + map(0x000000, 0x0fffff).rom().region("maincpu", 0x000000); // main rom -// map(0x100000, 0x100007).nopw(); // ? +// map(0x100000, 0x100007).nopw(); // ? map(0x180000, 0x180001).portr("P1"); map(0x180002, 0x180003).portr("P2"); @@ -125,22 +358,22 @@ void inufuku_state::inufuku_map(address_map &map) map(0x18000a, 0x18000b).portr("P3"); map(0x200000, 0x200001).portw("EEPROMOUT"); - map(0x280001, 0x280001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // sound command + map(0x280001, 0x280001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // sound command - map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // palette ram - map(0x380000, 0x3801ff).writeonly().share("bg_rasterram"); // bg raster ram - map(0x400000, 0x401fff).rw(FUNC(inufuku_state::inufuku_bg_videoram_r), FUNC(inufuku_state::inufuku_bg_videoram_w)).share("bg_videoram"); // bg ram - map(0x402000, 0x403fff).rw(FUNC(inufuku_state::inufuku_tx_videoram_r), FUNC(inufuku_state::inufuku_tx_videoram_w)).share("tx_videoram"); // text ram + map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // palette ram + map(0x380000, 0x3801ff).writeonly().share(m_bg_rasterram); // bg raster ram + map(0x400000, 0x401fff).ram().w(FUNC(inufuku_state::bg_videoram_w)).share(m_bg_videoram); // bg ram + map(0x402000, 0x403fff).ram().w(FUNC(inufuku_state::tx_videoram_w)).share(m_tx_videoram); // text ram map(0x404000, 0x40ffff).ram(); // ?? mirror (3on3dunk) - map(0x580000, 0x581fff).ram().share("spriteram1"); // sprite table + sprite attribute - map(0x600000, 0x61ffff).ram().share("spriteram2"); // cell table + map(0x580000, 0x581fff).ram().share("sprattrram"); // sprite table + sprite attribute + map(0x600000, 0x61ffff).ram().share(m_sprtileram); // cell table - map(0x780000, 0x780013).w(FUNC(inufuku_state::inufuku_palettereg_w)); // bg & text palettebank register - map(0x7a0000, 0x7a0023).w(FUNC(inufuku_state::inufuku_scrollreg_w)); // bg & text scroll register -// map(0x7e0000, 0x7e0001).nopw(); // ? + map(0x780000, 0x780013).w(FUNC(inufuku_state::palettereg_w)); // bg & text palettebank register + map(0x7a0000, 0x7a0023).w(FUNC(inufuku_state::scrollreg_w)); // bg & text scroll register +// map(0x7e0000, 0x7e0001).nopw(); // ? - map(0x800000, 0xbfffff).rom(); // data rom - map(0xfd0000, 0xfdffff).ram(); // work ram + map(0x800000, 0xbfffff).rom().region("maincpu", 0x100000); // data rom + map(0xfd0000, 0xfdffff).ram(); // work ram } @@ -150,21 +383,23 @@ void inufuku_state::inufuku_map(address_map &map) ******************************************************************************/ -void inufuku_state::inufuku_sound_map(address_map &map) +void inufuku_state::sound_map(address_map &map) { map(0x0000, 0x77ff).rom(); map(0x7800, 0x7fff).ram(); - map(0x8000, 0xffff).bankr("bank1"); + map(0x8000, 0xffff).bankr(m_audiobank); } -void inufuku_state::inufuku_sound_io_map(address_map &map) + +void inufuku_state::sound_io_map(address_map &map) { map.global_mask(0xff); - map(0x00, 0x00).w(FUNC(inufuku_state::inufuku_soundrombank_w)); + map(0x00, 0x00).w(FUNC(inufuku_state::soundrombank_w)); map(0x04, 0x04).rw(m_soundlatch, FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::acknowledge_w)); map(0x08, 0x0b).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write)); } + /****************************************************************************** Port definitions @@ -242,61 +477,23 @@ static INPUT_PORTS_START( inufuku ) INPUT_PORTS_END - - /****************************************************************************** Graphics definitions ******************************************************************************/ -static const gfx_layout tilelayout = -{ - 8, 8, - RGN_FRAC(1, 1), - 8, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 1*8, 0*8, 3*8, 2*8, 5*8, 4*8, 7*8, 6*8 }, - { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64 }, - 64*8 -}; - -static const gfx_layout spritelayout = -{ - 16, 16, - RGN_FRAC(1, 1), - 4, - { 0, 1, 2, 3 }, - { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4, - 10*4, 11*4, 8*4, 9*4, 14*4, 15*4, 12*4, 13*4 }, - { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, - 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 }, - 128*8 -}; - -static const gfx_layout spritelayout_alt = -{ - 16, 16, - RGN_FRAC(1, 1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4, - 9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4 }, - { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, - 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 }, - 128*8 -}; - static GFXDECODE_START( gfx_inufuku ) - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 256*16 ) // bg - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256*16 ) // text - GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0, 256*16 ) // sprite + GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // bg + GFXDECODE_ENTRY( "txtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // text + GFXDECODE_ENTRY( "sprtile", 0, gfx_16x16x4_packed_msb, 0, 4096/16 ) // sprite GFXDECODE_END + static GFXDECODE_START( gfx_3on3dunk ) - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 256*16 ) // bg - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256*16 ) // text - GFXDECODE_ENTRY( "gfx3", 0, spritelayout_alt, 0, 256*16 ) // sprite + GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // bg + GFXDECODE_ENTRY( "txtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // text + GFXDECODE_ENTRY( "sprtile", 0, gfx_16x16x4_packed_lsb, 0, 4096/16 ) // sprite GFXDECODE_END @@ -308,10 +505,8 @@ GFXDECODE_END void inufuku_state::machine_start() { - uint8_t *ROM = memregion("audiocpu")->base(); - - membank("bank1")->configure_entries(0, 4, &ROM[0x00000], 0x8000); - membank("bank1")->set_entry(0); + m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x8000); + m_audiobank->set_entry(0); save_item(NAME(m_bg_scrollx)); save_item(NAME(m_bg_scrolly)); @@ -322,64 +517,69 @@ void inufuku_state::machine_start() save_item(NAME(m_tx_palettebank)); } + void inufuku_state::machine_reset() { m_bg_scrollx = 0; m_bg_scrolly = 0; m_tx_scrollx = 0; m_tx_scrolly = 0; - m_bg_raster = 0; + m_bg_raster = false; m_bg_palettebank = 0; m_tx_palettebank = 0; } + void inufuku_state::inufuku(machine_config &config) { - /* basic machine hardware */ - M68000(config, m_maincpu, 32000000/2); /* 16.00 MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &inufuku_state::inufuku_map); + // basic machine hardware */ + M68000(config, m_maincpu, XTAL(32'000'000)/2); // 16.00 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &inufuku_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(inufuku_state::irq1_line_hold)); - Z80(config, m_audiocpu, 32000000/4); /* 8.00 MHz */ - m_audiocpu->set_addrmap(AS_PROGRAM, &inufuku_state::inufuku_sound_map); - m_audiocpu->set_addrmap(AS_IO, &inufuku_state::inufuku_sound_io_map); /* IRQs are triggered by the YM2610 */ + Z80(config, m_audiocpu, XTAL(32'000'000)/4); // 8.00 MHz + m_audiocpu->set_addrmap(AS_PROGRAM, &inufuku_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &inufuku_state::sound_io_map); // IRQs are triggered by the YM2610 EEPROM_93C46_16BIT(config, "eeprom"); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2300)); screen.set_size(2048, 256); screen.set_visarea(0, 319, 0, 223); - screen.set_screen_update(FUNC(inufuku_state::screen_update_inufuku)); - screen.screen_vblank().set(FUNC(inufuku_state::screen_vblank_inufuku)); + screen.set_screen_update(FUNC(inufuku_state::screen_update)); + screen.screen_vblank().set(m_sprattrram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); VSYSTEM_SPR(config, m_spr, 0); m_spr->set_offsets(0, 1); // reference videos confirm at least the +1 against tilemaps in 3on3dunk (the highscore header text and black box are meant to be 1 pixel misaligned, although there is currently a priority bug there too) m_spr->set_pdraw(true); - m_spr->set_tile_indirect_cb(FUNC(inufuku_state::inufuku_tile_callback)); + m_spr->set_tile_indirect_cb(FUNC(inufuku_state::tile_callback)); m_spr->set_gfx_region(2); m_spr->set_gfxdecode_tag(m_gfxdecode); + BUFFERED_SPRITERAM16(config, m_sprattrram); + GFXDECODE(config, m_gfxdecode, m_palette, gfx_inufuku); PALETTE(config, m_palette).set_format(palette_device::xGBR_555, 4096); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); m_soundlatch->set_separate_acknowledge(true); - ym2610_device &ymsnd(YM2610(config, "ymsnd", 32000000/4)); + ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(32'000'000)/4)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.add_route(0, "mono", 0.50); ymsnd.add_route(1, "mono", 0.75); ymsnd.add_route(2, "mono", 0.75); } + void inufuku_state::_3on3dunk(machine_config &config) { inufuku(config); @@ -387,9 +587,6 @@ void inufuku_state::_3on3dunk(machine_config &config) } - - - /****************************************************************************** ROM definitions @@ -397,59 +594,61 @@ void inufuku_state::_3on3dunk(machine_config &config) ******************************************************************************/ ROM_START( inufuku ) - ROM_REGION( 0x1000000, "maincpu", 0 ) // main cpu + data + ROM_REGION( 0x0500000, "maincpu", 0 ) // main cpu + data ROM_LOAD16_WORD_SWAP( "u147.bin", 0x0000000, 0x080000, CRC(ab72398c) SHA1(f5dc266ffa936ea6528b46a34113f5e2f8141d71) ) ROM_LOAD16_WORD_SWAP( "u146.bin", 0x0080000, 0x080000, CRC(e05e9bd4) SHA1(af0fdf31c2bdf851bf15c9de725dcbbb58464d54) ) - ROM_LOAD16_WORD_SWAP( "lhmn5l28.148", 0x0800000, 0x400000, CRC(802d17e7) SHA1(43b26efea65fd051c094d19784cb977ced39a1a0) ) + ROM_LOAD16_WORD_SWAP( "lhmn5l28.148", 0x0100000, 0x400000, CRC(802d17e7) SHA1(43b26efea65fd051c094d19784cb977ced39a1a0) ) ROM_REGION( 0x0020000, "audiocpu", 0 ) // sound cpu ROM_LOAD( "u107.bin", 0x0000000, 0x020000, CRC(1744ef90) SHA1(e019f4ca83e21aa25710cc0ca40ffe765c7486c9) ) - ROM_REGION( 0x0400000, "gfx1", 0 ) // bg - ROM_LOAD16_WORD_SWAP( "lhmn5ku8.u40", 0x0000000, 0x400000, CRC(8cbca80a) SHA1(063e9be97f5a1f021f8326f2994b51f9af5e1eaf) ) + ROM_REGION( 0x0400000, "bgtile", 0 ) // bg + ROM_LOAD( "lhmn5ku8.u40", 0x0000000, 0x400000, CRC(8cbca80a) SHA1(063e9be97f5a1f021f8326f2994b51f9af5e1eaf) ) - ROM_REGION( 0x0400000, "gfx2", 0 ) // text - ROM_LOAD16_WORD_SWAP( "lhmn5ku7.u8", 0x0000000, 0x400000, CRC(a6c0f07f) SHA1(971803d1933d8296767d8766ea9f04dcd6ab065c) ) + ROM_REGION( 0x0400000, "txtile", 0 ) // text + ROM_LOAD( "lhmn5ku7.u8", 0x0000000, 0x400000, CRC(a6c0f07f) SHA1(971803d1933d8296767d8766ea9f04dcd6ab065c) ) - ROM_REGION( 0x0c00000, "gfx3", 0 ) // sprite - ROM_LOAD16_WORD_SWAP( "lhmn5kub.u34", 0x0000000, 0x400000, CRC(7753a7b6) SHA1(a2e8747ce83ea5a57e2fe62f2452de355d7f48b6) ) - ROM_LOAD16_WORD_SWAP( "lhmn5kua.u36", 0x0400000, 0x400000, CRC(1ac4402a) SHA1(c15acc6fce4fe0b54e92d14c31a1bd78acf2c8fc) ) - ROM_LOAD16_WORD_SWAP( "lhmn5ku9.u38", 0x0800000, 0x400000, CRC(e4e9b1b6) SHA1(4d4ad85fbe6a442d4f8cafad748bcae4af6245b7) ) + ROM_REGION( 0x0c00000, "sprtile", 0 ) // sprite + ROM_LOAD( "lhmn5kub.u34", 0x0000000, 0x400000, CRC(7753a7b6) SHA1(a2e8747ce83ea5a57e2fe62f2452de355d7f48b6) ) + ROM_LOAD( "lhmn5kua.u36", 0x0400000, 0x400000, CRC(1ac4402a) SHA1(c15acc6fce4fe0b54e92d14c31a1bd78acf2c8fc) ) + ROM_LOAD( "lhmn5ku9.u38", 0x0800000, 0x400000, CRC(e4e9b1b6) SHA1(4d4ad85fbe6a442d4f8cafad748bcae4af6245b7) ) ROM_REGION( 0x0400000, "ymsnd:adpcma", 0 ) // adpcm data ROM_LOAD( "lhmn5ku6.u53", 0x0000000, 0x400000, CRC(b320c5c9) SHA1(7c99da2d85597a3c008ed61a3aa5f47ad36186ec) ) ROM_END + ROM_START( 3on3dunk ) - ROM_REGION( 0x1000000, "maincpu", 0 ) // main cpu + data - ROM_LOAD16_WORD_SWAP( "prog0_2_4_usa.u147", 0x0000000, 0x080000, CRC(957924ab) SHA1(6fe8ca711d11239310d58188e9d6d28cd27bc5af) ) - ROM_LOAD16_WORD_SWAP( "prog1_2_4_usa.u146", 0x0080000, 0x080000, CRC(2479e236) SHA1(729e6c85d34d6925c8d6557b138e2bed43e1de6a) ) - ROM_LOAD16_WORD_SWAP( "lh535l5y.u148", 0x0800000, 0x400000, CRC(aa33e02a) SHA1(86381ecf18fba9065cbc02112751c435bbf8b8b4) ) + ROM_REGION( 0x0500000, "maincpu", 0 ) // main cpu + data + ROM_LOAD16_WORD_SWAP( "prog0_2_4_usa.u147", 0x0000000, 0x080000, CRC(957924ab) SHA1(6fe8ca711d11239310d58188e9d6d28cd27bc5af) ) + ROM_LOAD16_WORD_SWAP( "prog1_2_4_usa.u146", 0x0080000, 0x080000, CRC(2479e236) SHA1(729e6c85d34d6925c8d6557b138e2bed43e1de6a) ) + ROM_LOAD16_WORD_SWAP( "lh535l5y.u148", 0x0100000, 0x400000, CRC(aa33e02a) SHA1(86381ecf18fba9065cbc02112751c435bbf8b8b4) ) ROM_REGION( 0x0020000, "audiocpu", 0 ) // sound cpu ROM_LOAD( "sound_prog_97_1_13.u107", 0x0000000, 0x020000, CRC(d9d42805) SHA1(ab5cb7c141d9c9ed5121ba4dbc1d0fa187bd9f68) ) - ROM_REGION( 0x0400000, "gfx1", 0 ) // bg - ROM_LOAD16_WORD_SWAP( "lh525kwy.u40", 0x0000000, 0x400000, CRC(aaa426d1) SHA1(2f9a2981f336caf3188baec9a34f61452dee2203) ) + ROM_REGION( 0x0400000, "bgtile", 0 ) // bg + ROM_LOAD( "lh525kwy.u40", 0x0000000, 0x400000, CRC(aaa426d1) SHA1(2f9a2981f336caf3188baec9a34f61452dee2203) ) - ROM_REGION( 0x0400000, "gfx2", 0 ) // text - ROM_LOAD16_WORD_SWAP( "lh537nn4.u8", 0x0000000, 0x200000, CRC(2b7be1d8) SHA1(aac274a8f4028db7429478601a1761e61ab4f9a2) ) + ROM_REGION( 0x0400000, "txtile", 0 ) // text + ROM_LOAD( "lh537nn4.u8", 0x0000000, 0x200000, CRC(2b7be1d8) SHA1(aac274a8f4028db7429478601a1761e61ab4f9a2) ) - ROM_REGION( 0x2000000, "gfx3", 0 ) // sprite + ROM_REGION( 0x2000000, "sprtile", 0 ) // sprite ROM_LOAD( "lh535kwz.u34", 0x0000000, 0x400000, CRC(7372ce78) SHA1(ed2a861986357fad7ef983750cd906c3d722b862) ) ROM_LOAD( "lh535kv0.u36", 0x0400000, 0x400000, CRC(247e5741) SHA1(8d71d964791fb4b86e390bcdf7744f616d6357b1) ) ROM_LOAD( "lh535kv2.u38", 0x0800000, 0x400000, CRC(76449b1e) SHA1(b63d50c6f0dc91dc94dbcdda9842598529c1c26e) ) ROM_LOAD( "lh537nn5.u20", 0x0c00000, 0x200000, CRC(f457cd3b) SHA1(cc13f5dc44e4675c1074a365b10f34e684817d81) ) - /* 0x0e00000, 0x200000 empty */ + // 0x0e00000, 0x200000 empty ROM_LOAD( "lh536pnm.u32", 0x1000000, 0x400000, CRC(bc39e449) SHA1(5aea90b66ee03c70797ddc42dbcb064d83ce8cc7) ) ROM_REGION( 0x0400000, "ymsnd:adpcma", 0 ) // ADPCM data ROM_LOAD( "lh5388r1.u53", 0x0000000, 0x100000, CRC(765d892f) SHA1(9b078c879d0437d1669bf4301fd52a768aa4d293) ) - ROM_REGION( 0x400000, "ymsnd:adpcmb", 0 ) // speech + ROM_REGION( 0x0400000, "ymsnd:adpcmb", 0 ) // speech ROM_LOAD( "lh536pkl.u51", 0x0000000, 0x300000, CRC(e4919abf) SHA1(d6af4b9c6ff62f92216c9927027d3b2376416bae) ) ROM_END +} // Anonymous namespace /****************************************************************************** diff --git a/src/mame/includes/inufuku.h b/src/mame/includes/inufuku.h deleted file mode 100644 index e3a0fc4bf61..00000000000 --- a/src/mame/includes/inufuku.h +++ /dev/null @@ -1,81 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Takahiro Nogi -#ifndef MAME_INCLUDES_INUFUKU_H -#define MAME_INCLUDES_INUFUKU_H - -#include "video/vsystem_spr.h" -#include "machine/gen_latch.h" -#include "emupal.h" -#include "tilemap.h" - -class inufuku_state : public driver_device -{ -public: - inufuku_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_bg_videoram(*this, "bg_videoram"), - m_bg_rasterram(*this, "bg_rasterram"), - m_tx_videoram(*this, "tx_videoram"), - m_spriteram1(*this, "spriteram1"), - m_spriteram2(*this, "spriteram2"), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_spr(*this, "vsystem_spr"), - m_soundlatch(*this, "soundlatch") { } - - void inufuku(machine_config &config); - void _3on3dunk(machine_config &config); - - DECLARE_READ_LINE_MEMBER(soundflag_r); - -private: - /* memory pointers */ - required_shared_ptr m_bg_videoram; - required_shared_ptr m_bg_rasterram; - required_shared_ptr m_tx_videoram; - required_shared_ptr m_spriteram1; - required_shared_ptr m_spriteram2; - - /* video-related */ - tilemap_t *m_bg_tilemap; - tilemap_t *m_tx_tilemap; - int m_bg_scrollx; - int m_bg_scrolly; - int m_tx_scrollx; - int m_tx_scrolly; - int m_bg_raster; - int m_bg_palettebank; - int m_tx_palettebank; - std::unique_ptr m_spriteram1_old; - uint32_t inufuku_tile_callback( uint32_t code ); - - /* devices */ - required_device m_maincpu; - required_device m_audiocpu; - required_device m_gfxdecode; - required_device m_palette; - required_device m_spr; - required_device m_soundlatch; - - void inufuku_soundrombank_w(uint8_t data); - void inufuku_palettereg_w(offs_t offset, uint16_t data); - void inufuku_scrollreg_w(offs_t offset, uint16_t data); - uint16_t inufuku_bg_videoram_r(offs_t offset); - void inufuku_bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - uint16_t inufuku_tx_videoram_r(offs_t offset); - void inufuku_tx_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - TILE_GET_INFO_MEMBER(get_inufuku_bg_tile_info); - TILE_GET_INFO_MEMBER(get_inufuku_tx_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_inufuku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_inufuku); - void inufuku_map(address_map &map); - void inufuku_sound_io_map(address_map &map); - void inufuku_sound_map(address_map &map); -}; - -#endif // MAME_INCLUDES_INUFUKU_H diff --git a/src/mame/video/inufuku.cpp b/src/mame/video/inufuku.cpp deleted file mode 100644 index 1fb75bba22a..00000000000 --- a/src/mame/video/inufuku.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Takahiro Nogi -/****************************************************************************** - - Video Hardware for Video System Games. - - Quiz & Variety Sukusuku Inufuku - (c)1998 Video System Co.,Ltd. - - Driver by Takahiro Nogi 2003/08/09 - - - based on other Video System drivers - -******************************************************************************/ - -#include "emu.h" -#include "includes/inufuku.h" -#include "screen.h" - - -/****************************************************************************** - - Memory handlers - -******************************************************************************/ - -void inufuku_state::inufuku_palettereg_w(offs_t offset, uint16_t data) -{ - switch (offset) - { - case 0x02: m_bg_palettebank = (data & 0xf000) >> 12; - m_bg_tilemap->mark_all_dirty(); - break; - case 0x03: m_tx_palettebank = (data & 0xf000) >> 12; - m_tx_tilemap->mark_all_dirty(); - break; - } -} - -void inufuku_state::inufuku_scrollreg_w(offs_t offset, uint16_t data) -{ - switch (offset) - { - case 0x00: m_bg_scrollx = data + 1; break; - case 0x01: m_bg_scrolly = data + 0; break; - case 0x02: m_tx_scrollx = data - 3; break; - case 0x03: m_tx_scrolly = data + 1; break; - case 0x04: m_bg_raster = (data & 0x0200) ? 0 : 1; break; - } -} - - -/****************************************************************************** - - Sprite routines - -******************************************************************************/ - - - -/****************************************************************************** - - Tilemap callbacks - -******************************************************************************/ - -TILE_GET_INFO_MEMBER(inufuku_state::get_inufuku_bg_tile_info) -{ - tileinfo.set(0, - m_bg_videoram[tile_index], - m_bg_palettebank, - 0); -} - -TILE_GET_INFO_MEMBER(inufuku_state::get_inufuku_tx_tile_info) -{ - tileinfo.set(1, - m_tx_videoram[tile_index], - m_tx_palettebank, - 0); -} - -uint16_t inufuku_state::inufuku_bg_videoram_r(offs_t offset) -{ - return m_bg_videoram[offset]; -} - -void inufuku_state::inufuku_bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_bg_videoram[offset]); - m_bg_tilemap->mark_tile_dirty(offset); -} - -uint16_t inufuku_state::inufuku_tx_videoram_r(offs_t offset) -{ - return m_tx_videoram[offset]; -} - -void inufuku_state::inufuku_tx_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_tx_videoram[offset]); - m_tx_tilemap->mark_tile_dirty(offset); -} - - -uint32_t inufuku_state::inufuku_tile_callback( uint32_t code ) -{ - return ((m_spriteram2[code*2] & 0x0007) << 16) + m_spriteram2[(code*2)+ 1]; -} - - -/****************************************************************************** - - Start the video hardware emulation - -******************************************************************************/ - -void inufuku_state::video_start() -{ - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_inufuku_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); - m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_inufuku_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); - - m_bg_tilemap->set_transparent_pen(255); - m_tx_tilemap->set_transparent_pen(255); - - m_spriteram1_old = make_unique_clear(m_spriteram1.bytes()/2); - -} - - -/****************************************************************************** - - Display refresh - -******************************************************************************/ - -uint32_t inufuku_state::screen_update_inufuku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int i; - - bitmap.fill(m_palette->black_pen(), cliprect); - screen.priority().fill(0); - - if (m_bg_raster) - { - m_bg_tilemap->set_scroll_rows(512); - for (i = 0; i < 256; i++) - m_bg_tilemap->set_scrollx((m_bg_scrolly + i) & 0x1ff, m_bg_scrollx+m_bg_rasterram[i]); - } - else - { - m_bg_tilemap->set_scroll_rows(1); - m_bg_tilemap->set_scrollx(0, m_bg_scrollx); - } - m_bg_tilemap->set_scrolly(0, m_bg_scrolly); - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - m_tx_tilemap->set_scrollx(0, m_tx_scrollx); - m_tx_tilemap->set_scrolly(0, m_tx_scrolly); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4); - - m_spr->draw_sprites( m_spriteram1_old.get(), m_spriteram1.bytes(), screen, bitmap, cliprect ); - return 0; -} - -WRITE_LINE_MEMBER(inufuku_state::screen_vblank_inufuku) -{ - // rising edge - if (state) - { - memcpy(m_spriteram1_old.get(),m_spriteram1,m_spriteram1.bytes()); - } -} -- cgit v1.2.3 From 2f39246966ce66930e3de5b99d8b4c3b49da1454 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sun, 13 Jun 2021 01:58:01 +1000 Subject: z80pio: changing the vector neither enables nor causes an interrupt. Fixes crash in mbee256 when F2 pressed. --- src/devices/machine/z80pio.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/devices/machine/z80pio.cpp b/src/devices/machine/z80pio.cpp index d269891e333..e1664055f21 100644 --- a/src/devices/machine/z80pio.cpp +++ b/src/devices/machine/z80pio.cpp @@ -601,11 +601,6 @@ void z80pio_device::pio_port::control_write(uint8_t data) // load interrupt vector m_vector = data; if (LOG) m_device->logerror("Z80PIO Port %c Interrupt Vector: %02x\n", 'A' + m_index, data); - - // set interrupt enable - m_icw |= ICW_ENABLE_INT; - m_ie = true; - check_interrupts(); } else { -- cgit v1.2.3 From f210b92ece0ff80cdd0752388e7974e999319744 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sun, 13 Jun 2021 03:16:39 +1000 Subject: super80_cass: zipzap tapes had no sound, so replaced with working copies. --- hash/super80_cass.xml | 37 ++++++------------------------------- 1 file changed, 6 insertions(+), 31 deletions(-) diff --git a/hash/super80_cass.xml b/hash/super80_cass.xml index d255430edf2..2160fd60d09 100644 --- a/hash/super80_cass.xml +++ b/hash/super80_cass.xml @@ -174,13 +174,14 @@ X-3607 : Horse Race Bemak - + - - + + + + + C1541 DOS V3.0 + 1988 + Ron Koenig + + + + + + + + Modem Terminal Software 1983 diff --git a/hash/dragon_cart.xml b/hash/dragon_cart.xml index 18cc4ebd697..3694ab48488 100644 --- a/hash/dragon_cart.xml +++ b/hash/dragon_cart.xml @@ -387,7 +387,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo) SuperDOS E6 1986 - PNP + PNP Communications @@ -396,6 +396,18 @@ Compiled by K1W1 and Cowering (from GoodCoCo) + + Terminal Simulator + 1984 + Telepost Systems + + + + + + + + Test De Conducción 1982 @@ -435,6 +447,30 @@ Compiled by K1W1 and Cowering (from GoodCoCo) + + Dragon EPROM Programmer + 1984 + Steve's Electronics + + + + + + + + + + Prestel + 1987 + Peaksoft + + + + + + + + Dragon 32 Soak Test 1983 -- cgit v1.2.3 From ecab14553abe71fac7a9a940aa77aa6deef89be8 Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Mon, 14 Jun 2021 16:12:13 +0100 Subject: bus/coco/coco_wpk: Fix duplicate short name. --- src/devices/bus/coco/coco_wpk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devices/bus/coco/coco_wpk.cpp b/src/devices/bus/coco/coco_wpk.cpp index 2d3fc3748d6..8841c2960ea 100644 --- a/src/devices/bus/coco/coco_wpk.cpp +++ b/src/devices/bus/coco/coco_wpk.cpp @@ -32,7 +32,7 @@ ROM_END //************************************************************************** DEFINE_DEVICE_TYPE(COCO_WPK, coco_wpk_device, "coco_wpk", "CoCo WordPak") -DEFINE_DEVICE_TYPE(COCO_WPK2, coco_wpk2_device, "coco_wpk", "CoCo WordPak II") +DEFINE_DEVICE_TYPE(COCO_WPK2, coco_wpk2_device, "coco_wpk2", "CoCo WordPak II") DEFINE_DEVICE_TYPE(COCO_WPKRS, coco_wpkrs_device, "coco_wpkrs", "CoCo WordPak RS") -- cgit v1.2.3 From 78500ef334d23599fca57b00fb184678a768af06 Mon Sep 17 00:00:00 2001 From: Ville Linde Date: Mon, 14 Jun 2021 18:21:39 +0300 Subject: k037122: added tilemap origin --- src/mame/video/k037122.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/mame/video/k037122.cpp b/src/mame/video/k037122.cpp index b1509a83ab5..be5ea5a9657 100644 --- a/src/mame/video/k037122.cpp +++ b/src/mame/video/k037122.cpp @@ -55,6 +55,9 @@ Konami 037122 34 ---------------- -------------x-- CLUT location ---------------- -------------0-- CLUT at 0x00000-0x08000 ---------------- -------------1-- CLUT at 0x18000-0x20000 + ---------------x ---------------- Tilemap Y origin + ---------------0 ---------------- Origin at tilemap center + ---------------1 ---------------- Origin at 0 Other bits/registers unknown, some registers are used @@ -170,15 +173,13 @@ void k037122_device::tile_draw( screen_device &screen, bitmap_rgb32 &bitmap, con int16_t incxx = m_reg[0xa] >> 16; int16_t incxy = m_reg[0xa] & 0xffff; int16_t incyx = m_reg[0x9] >> 16; - int16_t incyy = m_reg[0x9] & 0xffff; - - // on 256x64 tilemap y-scroll seems to be 8.4 fixed point instead - int16_t scrolly_256 = scrolly; - if (scrolly_256 & 0x800) - scrolly_256 |= 0xf000; + int16_t incyy = m_reg[0x9] & 0xffff; if (m_reg[0xc] & 0x10000) { + if ((m_reg[0xd] & 0x10000) == 0) + scrolly -= 0x2000; + m_tilemap_128->set_scrolldx(visarea.min_x, visarea.min_x); m_tilemap_128->set_scrolldy(visarea.min_y, visarea.min_y); @@ -188,10 +189,13 @@ void k037122_device::tile_draw( screen_device &screen, bitmap_rgb32 &bitmap, con } else { + if ((m_reg[0xd] & 0x10000) == 0) + scrolly -= 0x1000; + m_tilemap_256->set_scrolldx(visarea.min_x, visarea.min_x); m_tilemap_256->set_scrolldy(visarea.min_y, visarea.min_y); - m_tilemap_256->draw_roz(screen, bitmap, cliprect, (int32_t)(scrollx) << 12, (int32_t)(scrolly_256) << 12, + m_tilemap_256->draw_roz(screen, bitmap, cliprect, (int32_t)(scrollx) << 12, (int32_t)(scrolly) << 12, (int32_t)(incxx) << 4, (int32_t)(incxy) << 4, (int32_t)(incyx) << 4, (int32_t)(incyy) << 4, false, 0, 0); } @@ -253,6 +257,8 @@ uint32_t k037122_device::reg_r(offs_t offset) void k037122_device::reg_w(offs_t offset, uint32_t data, uint32_t mem_mask) { + if (offset != 4) + printf("reg_w: %08X, %08X, %08X\n", data, offset, mem_mask); if (offset == 0x34/4 && ACCESSING_BITS_0_15) { uint32_t palette_base = (data & 0x4) ? 0x18000 : 0x00000; -- cgit v1.2.3 From 9145d995f23d84a6c0ba3a843c668970dd9d94f7 Mon Sep 17 00:00:00 2001 From: Ville Linde Date: Mon, 14 Jun 2021 18:24:59 +0300 Subject: remove printfs --- src/mame/video/k037122.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mame/video/k037122.cpp b/src/mame/video/k037122.cpp index be5ea5a9657..8d5a9aa068a 100644 --- a/src/mame/video/k037122.cpp +++ b/src/mame/video/k037122.cpp @@ -257,8 +257,6 @@ uint32_t k037122_device::reg_r(offs_t offset) void k037122_device::reg_w(offs_t offset, uint32_t data, uint32_t mem_mask) { - if (offset != 4) - printf("reg_w: %08X, %08X, %08X\n", data, offset, mem_mask); if (offset == 0x34/4 && ACCESSING_BITS_0_15) { uint32_t palette_base = (data & 0x4) ? 0x18000 : 0x00000; -- cgit v1.2.3 From ea8cee2651f7744234bcb6ba9d1a4d331568b846 Mon Sep 17 00:00:00 2001 From: algestam Date: Mon, 14 Jun 2021 19:00:29 +0200 Subject: New working machine added (#8189) ----------- Tronica: Space Mission [algestam] --- src/mame/drivers/hh_sm510.cpp | 69 +++++++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 1 + 2 files changed, 70 insertions(+) diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp index 8af7d653f19..46478e86b35 100644 --- a/src/mame/drivers/hh_sm510.cpp +++ b/src/mame/drivers/hh_sm510.cpp @@ -9238,6 +9238,74 @@ ROM_END +/*************************************************************************** + + Tronica Space Mission (model SM-11) + * PCB label SM-11 250582 + * Sharp SM5A label 0126 228B TRONICA (no decap) + * lcd screen with custom segments, 1-bit sound + +***************************************************************************/ + +class trspacmis_state : public hh_sm510_state +{ +public: + trspacmis_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_sm510_state(mconfig, type, tag) + { } + + void trspacmis(machine_config &config); +}; + +// config + +static INPUT_PORTS_START( trspacmis ) + PORT_START("IN.0") // R2 + PORT_CONFNAME( 0x01, 0x00, "Invincibility (Cheat)") // factory test, unpopulated on PCB + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x01, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) // same as 0x01? + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // display test? + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) // alarm test? + + PORT_START("IN.1") // R3 + PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.2") // R4 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Time") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game B") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game A") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Alarm") + + PORT_START("BA") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed) PORT_16WAY + + PORT_START("B") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed) PORT_16WAY + + PORT_START("ACL") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("ACL") +INPUT_PORTS_END + +void trspacmis_state::trspacmis(machine_config &config) +{ + sm5a_common(config, 1601, 1080); // R mask option confirmed +} + +// roms + +ROM_START( trspacmis ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "0126_228b", 0x0000, 0x0740, CRC(3d319537) SHA1(007d376cfd29574554caa59ed9163178179ae9c5) ) + + ROM_REGION( 106675, "screen", 0) + ROM_LOAD( "trspacmis.svg", 0, 106675, CRC(45d7b798) SHA1(db08fef21462507a115547ecf8eac38260a0c868) ) +ROM_END + + + + + /*************************************************************************** Elektronika Автослалом (Autoslalom) (model IM-23) @@ -9548,6 +9616,7 @@ CONS( 1992, tbatmana, 0, 0, tbatmana, tbatmana, tbatmana_s CONS( 1983, trshutvoy, 0, 0, trshutvoy, trshutvoy, trshutvoy_state, empty_init, "Tronica", "Shuttle Voyage", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1983, tigarden, trshutvoy, 0, tigarden, trshutvoy, trshutvoy_state, empty_init, "Tronica", "Thief in Garden", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1982, trsrescue, 0, 0, trsrescue, trsrescue, trsrescue_state, empty_init, "Tronica", "Space Rescue", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) +CONS( 1982, trspacmis, 0, 0, trspacmis, trspacmis, trspacmis_state, empty_init, "Tronica", "Space Mission", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) // misc CONS( 1990, auslalom, 0, 0, auslalom, auslalom, auslalom_state, empty_init, "Elektronika", "Autoslalom", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 0602dd3ec60..d367adba8fd 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -16353,6 +16353,7 @@ trobocop2 // Tiger trobocop3 // Tiger trockteer // Tiger trshutvoy // Tronica +trspacmis // Tronica trsrescue // Tronica tsddragon // Tiger tsf2010 // Tiger -- cgit v1.2.3 From 7964256a26faa7b340a6e87e1190565df5414ac3 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 14 Jun 2021 16:59:07 -0400 Subject: decmate2: Add final revision of boot ROMs [Vince Slyngstad] --- src/mame/drivers/decmate2.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/mame/drivers/decmate2.cpp b/src/mame/drivers/decmate2.cpp index 40d52bd0357..ea7b1420a31 100644 --- a/src/mame/drivers/decmate2.cpp +++ b/src/mame/drivers/decmate2.cpp @@ -966,17 +966,18 @@ void decmate2_state::pc238(machine_config &config) ROM_START(decmate2) ROM_REGION16_BE(0x2000, "cprom", 0) - //ROM_LOAD16_BYTE("23-399e2.e113", 0x0000, 0x0800, NO_DUMP) // 0000-3777, bits 0:7 (to be shifted) - //ROM_LOAD16_BYTE("23-400e2.e114", 0x1000, 0x0800, NO_DUMP) // 4000-7777, bits 0:7 (to be shifted) - //ROM_LOAD16_BYTE("23-401e2.e115", 0x0001, 0x0800, NO_DUMP) // 0000-3777 & 4000-7777, bits 8:11 (to be split up) - ROM_SYSTEM_BIOS(0, "19h", "19H (2310)") - ROMX_LOAD("23-390e2.e113", 0x0000, 0x0800, CRC(9b19451a) SHA1(ed26557f17f59ce05ca08b34a05a24a97388dfe0), ROM_BIOS(0) | ROM_SKIP(1)) - ROMX_LOAD("23-391e2.e114", 0x1000, 0x0800, CRC(3a09ada1) SHA1(3093bd926d49c2fd62a773e8019e3755aa165ae9), ROM_BIOS(0) | ROM_SKIP(1)) - ROMX_LOAD("23-392e2.e115", 0x0001, 0x0800, CRC(19901cb6) SHA1(82a642d2b5b56250611f69321d0251e27fa639fc), ROM_BIOS(0) | ROM_SKIP(1)) - ROM_SYSTEM_BIOS(1, "31z", "31Z (3732)") // Regenerated from source code listing - ROMX_LOAD("23-358e2.e113", 0x0000, 0x0800, BAD_DUMP CRC(e6b9ab4d) SHA1(12533bab586b7bc753fae3ce1959bc5ced3905f5), ROM_BIOS(1) | ROM_SKIP(1)) - ROMX_LOAD("23-359e2.e114", 0x1000, 0x0800, BAD_DUMP CRC(3d1825b7) SHA1(753af9657eef1a284801c9765f4899563d3d9a20), ROM_BIOS(1) | ROM_SKIP(1)) - ROMX_LOAD("23-360e2.e115", 0x0001, 0x0800, BAD_DUMP CRC(ed8162e6) SHA1(4ab993c00a5afc6465153ca4f52faa76e02a0ef3), ROM_BIOS(1) | ROM_SKIP(1)) + ROM_SYSTEM_BIOS(0, "19n", "19N (2316)") + ROMX_LOAD("23-399e2.e113", 0x0000, 0x0800, CRC(2881252e) SHA1(5825bc00833dd33f294f79df11200dce76e78740), ROM_BIOS(0) | ROM_SKIP(1)) // 0000-3777, bits 0:7 (to be shifted) + ROMX_LOAD("23-400e2.e114", 0x1000, 0x0800, CRC(b6f79f77) SHA1(131a1c28c7d1c90dc1b6c85194f84f120cc60bd9), ROM_BIOS(0) | ROM_SKIP(1)) // 4000-7777, bits 0:7 (to be shifted) + ROMX_LOAD("23-401e2.e115", 0x0001, 0x0800, CRC(1076b630) SHA1(7be4c30d512b4f86f645cb7a3a20122ee4187759), ROM_BIOS(0) | ROM_SKIP(1)) // 0000-3777 & 4000-7777, bits 8:11 (to be split up) + ROM_SYSTEM_BIOS(1, "19h", "19H (2310)") + ROMX_LOAD("23-390e2.e113", 0x0000, 0x0800, CRC(9b19451a) SHA1(ed26557f17f59ce05ca08b34a05a24a97388dfe0), ROM_BIOS(1) | ROM_SKIP(1)) + ROMX_LOAD("23-391e2.e114", 0x1000, 0x0800, CRC(3a09ada1) SHA1(3093bd926d49c2fd62a773e8019e3755aa165ae9), ROM_BIOS(1) | ROM_SKIP(1)) + ROMX_LOAD("23-392e2.e115", 0x0001, 0x0800, CRC(19901cb6) SHA1(82a642d2b5b56250611f69321d0251e27fa639fc), ROM_BIOS(1) | ROM_SKIP(1)) + ROM_SYSTEM_BIOS(2, "31z", "31Z (3732)") // Regenerated from source code listing + ROMX_LOAD("23-358e2.e113", 0x0000, 0x0800, BAD_DUMP CRC(e6b9ab4d) SHA1(12533bab586b7bc753fae3ce1959bc5ced3905f5), ROM_BIOS(2) | ROM_SKIP(1)) + ROMX_LOAD("23-359e2.e114", 0x1000, 0x0800, BAD_DUMP CRC(3d1825b7) SHA1(753af9657eef1a284801c9765f4899563d3d9a20), ROM_BIOS(2) | ROM_SKIP(1)) + ROMX_LOAD("23-360e2.e115", 0x0001, 0x0800, BAD_DUMP CRC(ed8162e6) SHA1(4ab993c00a5afc6465153ca4f52faa76e02a0ef3), ROM_BIOS(2) | ROM_SKIP(1)) ROM_REGION(0x1000, "rxcpu", 0) ROM_LOAD("23-008m1.e27", 0x0000, 0x1000, CRC(fae4026b) SHA1(388e093d952ce1f6fcf2dcdab5b5099a6aafad0f)) -- cgit v1.2.3 From 5487612a0ecdcf3aa07273c8f413b57a2c5b167e Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 14 Jun 2021 19:28:23 -0400 Subject: hd6120: Prevent PEX from changing AC --- src/devices/cpu/pdp8/hd6120.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/devices/cpu/pdp8/hd6120.cpp b/src/devices/cpu/pdp8/hd6120.cpp index 1455fa7e829..947225ae603 100644 --- a/src/devices/cpu/pdp8/hd6120.cpp +++ b/src/devices/cpu/pdp8/hd6120.cpp @@ -1015,6 +1015,7 @@ void hd6120_device::execute_run() break; case minor_state::PEX_1: + m_temp = m_ac; m_state = minor_state::PEX_2; break; -- cgit v1.2.3 From 5a8f5628d27695869b3defb483afa9e6fee23583 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 15 Jun 2021 06:28:52 +0200 Subject: mitchell.cpp: fixed MT08007 --- src/mame/drivers/mitchell.cpp | 54 +++++++++++++++++++++---------------------- src/mame/drivers/sengokmj.cpp | 12 +++++----- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/src/mame/drivers/mitchell.cpp b/src/mame/drivers/mitchell.cpp index 0b5762b5261..683edf13229 100644 --- a/src/mame/drivers/mitchell.cpp +++ b/src/mame/drivers/mitchell.cpp @@ -376,7 +376,7 @@ void mitchell_state::spangbl_io_map(address_map &map) map(0x00, 0x02).r(FUNC(mitchell_state::input_r)); map(0x00, 0x00).w(FUNC(mitchell_state::pangbl_gfxctrl_w)); /* Palette bank, layer enable, coin counters, more */ map(0x02, 0x02).w(FUNC(mitchell_state::pang_bankswitch_w)); /* Code bank register */ - map(0x03, 0x03).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x03, 0x03).portr("DSW1").w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x05, 0x05).portr("SYS0"); map(0x06, 0x06).nopw(); /* watchdog? irq ack? */ map(0x07, 0x07).w(FUNC(mitchell_state::pang_video_bank_w)); /* Video RAM bank register */ @@ -875,10 +875,35 @@ static INPUT_PORTS_START( spangbl ) PORT_INCLUDE( pang ) PORT_MODIFY("SYS0") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // this bootleg doesn't seem to allow entering test mode. It has a dip bank for settings, instead. PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ PORT_MODIFY("IN1") PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // must be high for game to boot.. + + PORT_START("DSW1") + PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:6,7,8") + PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x18, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:4,5") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x08, "2" ) + PORT_DIPSETTING( 0x10, "3" ) + PORT_DIPSETTING( 0x18, "4" ) + PORT_DIPNAME( 0x60, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW1:2,3") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Difficult ) ) + PORT_DIPSETTING( 0x60, DEF_STR( Very_Difficult ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:1") + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) INPUT_PORTS_END static INPUT_PORTS_START( mstworld ) @@ -2265,33 +2290,6 @@ ROM_START( spangbl ) ROM_LOAD( "ic125.14", 0x030000, 0x10000, CRC(bd5c2f4b) SHA1(3c71d63637633a98ab513e4336e2954af3f964f4) ) ROM_END -// "spangbl2" -// TODO: There is a bank of 8 dipswitches that needs to be hooked up with this set up: -// ______________________________________________________ -// | | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | -// |--------------------|---|---|---|---|---|---|---|---| -// | 1 Coin - 1 Credit | ON| ON| ON| | | | | | -// | 1 Coin - 2 Credits |OFF| ON| ON| | | | | | -// | 1 Coin - 3 Credits | ON|OFF| ON| | | | | | -// | 1 Coin - 4 Credits |OFF|OFF| ON| | | | | | -// | 1 Coin - 6 Credits | ON| ON|OFF| | | | | | -// | 2 Coin - 1 Credit |OFF| ON|OFF| | | | | | -// | 3 Coin - 1 Credit | ON|OFF|OFF| | | | | | -// | 4 Coin - 1 Credit |OFF|OFF|OFF| | | | | | -// |--------------------|---|---|---|---|---|---|---|---| -// | 1 Player | | | | ON| ON| | | | -// | 2 Players | | | |OFF| ON| | | | -// | 3 Players | | | | ON|OFF| | | | -// | 4 Players | | | |OFF|OFF| | | | -// |--------------------|---|---|---|---|---|---|---|---| -// | Easy | | | | | | ON| ON| | -// | Normal | | | | | |OFF| ON| | -// | Dificult | | | | | | ON|OFF| | -// | Very dificult | | | | | |OFF|OFF| | -// |--------------------|---|---|---|---|---|---|---|---| -// | No demo sounds | | | | | | | | ON| -// | Demo sounds | | | | | | | |OFF| -// |____________________________________________________| ROM_START( spangbl2 ) ROM_REGION( 0x50000*2, "maincpu", ROMREGION_ERASEFF ) // IC2 can be found as 27C512 with 1st and 2nd half identical or as 27C256 diff --git a/src/mame/drivers/sengokmj.cpp b/src/mame/drivers/sengokmj.cpp index 254c0d0139d..e41a04e7316 100644 --- a/src/mame/drivers/sengokmj.cpp +++ b/src/mame/drivers/sengokmj.cpp @@ -9,18 +9,18 @@ driver by Angelo Salese & Pierpaolo Prazzoli Uses the same Seibu custom chips of the D-Con HW. TODO: -- Find what the remaining video C.R.T. registers does; +- Find what the remaining video C.R.T. registers do; - Fix sprites bugs at a start of a play; -- Check NVRAM boudaries; -- How the "SW Service Mode" (press F2 during gameplay) really works (inputs etc)? Nothing mapped works with it... +- Check NVRAM boundaries; +- How does the "SW Service Mode" (press F2 during gameplay) really work (inputs etc)? Nothing mapped works with it... Notes: -- Some strings written in the sound rom: +- Some strings written in the sound ROM: "SENGOKU-MAHJONG Z80 PROGRAM ROM VERSION 1.00 WRITTEN BY K.SAEKI" at location 0x00c0-0x00ff. "Copyright 1990/1991 Sigma" at location 0x770-0x789. - To bypass the startup message, toggle "Reset" dip-switch or reset with F3. -- If the Work RAM is not hooked-up (areas $67xx),a sound sample is played.I can't understand what it says though, - appears to japanese words for "RAM failed". +- If the Work RAM is not hooked-up (areas $67xx), a sound sample is played. I can't understand what it says though, + appears to be the Japanese words for "RAM failed". - Snippets of a non-BET Version are scattered thru the code (for example a credit display). Might be either undumped revision or selectable somehow. -- cgit v1.2.3 From 5086298db75006f0e602d83f9b91b12813658c37 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 15 Jun 2021 06:55:43 +0200 Subject: mitchell.cpp: added dip switch to some pang bootlegs --- src/mame/drivers/mitchell.cpp | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/mitchell.cpp b/src/mame/drivers/mitchell.cpp index 683edf13229..2f356f7e57b 100644 --- a/src/mame/drivers/mitchell.cpp +++ b/src/mame/drivers/mitchell.cpp @@ -871,6 +871,36 @@ static INPUT_PORTS_START( pang ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) INPUT_PORTS_END +static INPUT_PORTS_START( pangdsw ) + PORT_INCLUDE( pang ) + +// the settings are shown if entering test mode. The game always respects the dip setting, changing the values in test mode has no effect +// it appears the bootleggers didn't care to add dips for flipscreen, free play and extend values (or at least they haven't been found yet) + PORT_START("DSW1") + PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:6,7,8") + PORT_DIPSETTING( 0x07, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x18, 0x18, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:4,5") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x18, "2" ) + PORT_DIPSETTING( 0x08, "3" ) + PORT_DIPSETTING( 0x10, "4" ) + PORT_DIPNAME( 0x60, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW1:2,3") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Difficult ) ) + PORT_DIPSETTING( 0x60, DEF_STR( Very_Difficult ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + static INPUT_PORTS_START( spangbl ) PORT_INCLUDE( pang ) @@ -2761,11 +2791,11 @@ GAME( 1989, bbros, pang, pang, pang, mitchell_state, init_ GAME( 1989, pompingw, pang, pang, pang, mitchell_state, init_pang, ROT0, "Mitchell", "Pomping World (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, pangb, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, pangbold, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, pangba, pang, pangba, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, pangba, pang, pangba, pangdsw, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1989, pangb2, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 4)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, pangbb, pang, spangbl, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 5)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, pangbb, pang, spangbl, pangdsw, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 5)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1989, pangbp, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 6)", MACHINE_NOT_WORKING ) // Missing the contents of a battery backed RAM -GAME( 1989, pangbc, pang, spangbl, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 7)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, pangbc, pang, spangbl, pangdsw, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 7)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, cworld, 0, pang, qtono1, mitchell_state, init_cworld, ROT0, "Capcom", "Capcom World (Japan)", MACHINE_SUPPORTS_SAVE ) -- cgit v1.2.3 From 1e89a3d33ccc4d47909856c6245008abcfd4215c Mon Sep 17 00:00:00 2001 From: Robbbert Date: Tue, 15 Jun 2021 23:43:14 +1000 Subject: rx78: fixed text in senemy. --- hash/rx78_cart.xml | 4 ++-- src/mame/drivers/rx78.cpp | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/hash/rx78_cart.xml b/hash/rx78_cart.xml index baa88047531..1275a8b6f49 100644 --- a/hash/rx78_cart.xml +++ b/hash/rx78_cart.xml @@ -112,7 +112,7 @@ The monitor will expect you to load a program from cassette. Challenge Golf 1983 Bandai - + @@ -121,7 +121,7 @@ The monitor will expect you to load a program from cassette. - + Champion Racer 1983 Bandai diff --git a/src/mame/drivers/rx78.cpp b/src/mame/drivers/rx78.cpp index 647030b3a5b..930d14a32ba 100644 --- a/src/mame/drivers/rx78.cpp +++ b/src/mame/drivers/rx78.cpp @@ -56,8 +56,7 @@ Summary of Monitor commands. ============================================================================================================== Known issues: -- Sekigahara: Joystick problem (need to be checked again) -- Space Enemy: When the yellow blind closes at the start, text should appear on it. +- Sekigahara: Possible joystick problem (need to be checked again) - Need more software to test with. BTANB: - ProWrestling: When player 1 jumps at player 2 and misses, he always lands behind player 2. @@ -104,7 +103,7 @@ private: void vdp_bg_reg_w(u8 data); void vdp_pri_mask_w(u8 data); void portf3_w(u8 data); - void create_palette(palette_device &palette) const; + void create_palette(palette_device &palette); INTERRUPT_GEN_MEMBER(interrupt); DECLARE_DEVICE_IMAGE_LOAD_MEMBER( cart_load ); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -173,6 +172,11 @@ uint32_t rx78_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, if (BIT(layers, j)) laycol[BIT(m_pal_reg[6], j)] |= m_pal_reg[j]; + // This fixes text in Space Enemy + for (u8 j = 0; j < 6; j++) + if (BIT(layers, j)) + if (!m_pal_reg[j]) laycol[0] = 0; + u8 color = laycol[1] ? laycol[1] : (laycol[0] ? laycol[0] : m_background); bitmap.pix(y+bordery, x+i+borderx) = color; } @@ -269,7 +273,7 @@ void rx78_state::vdp_pri_mask_w(u8 data) m_pri_mask = data; } -void rx78_state::create_palette(palette_device &palette) const +void rx78_state::create_palette(palette_device &palette) { constexpr u8 level[] = { 0, 0x7f, 0, 0xff }; for (u8 i = 0; i < 64; i++) @@ -279,6 +283,7 @@ void rx78_state::create_palette(palette_device &palette) const u8 b = level[BIT(i, 4, 2)]; palette.set_pen_color(i, rgb_t(r, g, b)); } + vdp_bg_reg_w(0); } @@ -533,7 +538,7 @@ void rx78_state::rx78(machine_config &config) screen.set_screen_update(FUNC(rx78_state::screen_update)); screen.set_palette("palette"); - PALETTE(config, m_palette, FUNC(rx78_state::create_palette), 72); + PALETTE(config, m_palette, FUNC(rx78_state::create_palette), 64+1); GFXDECODE(config, "gfxdecode", m_palette, gfx_rx78); GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "rx78_cart", "bin,rom").set_device_load(FUNC(rx78_state::cart_load)); -- cgit v1.2.3 From 70d6872827af0564268642cd317d9b10d7c020ba Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 15 Jun 2021 22:44:27 +0900 Subject: psikyo.cpp: Banpresto was the distributor for Sengoku Ace (#8190) --- src/mame/drivers/psikyo.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/mame/drivers/psikyo.cpp b/src/mame/drivers/psikyo.cpp index 4f6ddeb786f..58acce740a0 100644 --- a/src/mame/drivers/psikyo.cpp +++ b/src/mame/drivers/psikyo.cpp @@ -1960,24 +1960,24 @@ void psikyo_state::init_s1945bl() ***************************************************************************/ -GAME( 1993, samuraia, 0, sngkace, samuraia, psikyo_state, init_sngkace, ROT270, "Psikyo", "Samurai Aces (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Banpresto? -GAME( 1993, sngkace, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo", "Sengoku Ace (Japan, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Banpresto? -GAME( 1993, sngkacea, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo", "Sengoku Ace (Japan, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Banpresto? - -GAME( 1994, gunbird, 0, gunbird, gunbird, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1994, gunbirdk, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1994, gunbirdj, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) - -GAME( 1994, btlkroad, 0, gunbird, btlkroad, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1994, btlkroadk, btlkroad, gunbird, btlkroadk, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // game code is still multi-region, but sound rom appears to be Korea specific at least - -GAME( 1995, s1945, 0, s1945, s1945, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1995, s1945a, s1945, s1945, s1945a, psikyo_state, init_s1945a, ROT270, "Psikyo", "Strikers 1945 (Japan / World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World -GAME( 1995, s1945j, s1945, s1945, s1945j, psikyo_state, init_s1945j, ROT270, "Psikyo", "Strikers 1945 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1995, s1945n, s1945, s1945n, s1945, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (World, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1995, s1945nj, s1945, s1945n, s1945j, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (Japan, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1995, s1945k, s1945, s1945, s1945j, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1995, s1945bl, s1945, s1945bl, s1945bl, psikyo_state, init_s1945bl, ROT270, "bootleg", "Strikers 1945 (Hong Kong, bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) - -GAME( 1996, tengai, 0, s1945, tengai, psikyo_state, init_tengai, ROT0, "Psikyo", "Tengai (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) -GAME( 1996, tengaij, tengai, s1945, tengaij, psikyo_state, init_tengai, ROT0, "Psikyo", "Sengoku Blade: Sengoku Ace Episode II / Tengai", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World +GAME( 1993, samuraia, 0, sngkace, samuraia, psikyo_state, init_sngkace, ROT270, "Psikyo (Banpresto license)", "Samurai Aces (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1993, sngkace, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo (Banpresto license)", "Sengoku Ace (Japan, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1993, sngkacea, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo (Banpresto license)", "Sengoku Ace (Japan, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) + +GAME( 1994, gunbird, 0, gunbird, gunbird, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1994, gunbirdk, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1994, gunbirdj, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) + +GAME( 1994, btlkroad, 0, gunbird, btlkroad, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1994, btlkroadk, btlkroad, gunbird, btlkroadk, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // game code is still multi-region, but sound rom appears to be Korea specific at least + +GAME( 1995, s1945, 0, s1945, s1945, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1995, s1945a, s1945, s1945, s1945a, psikyo_state, init_s1945a, ROT270, "Psikyo", "Strikers 1945 (Japan / World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World +GAME( 1995, s1945j, s1945, s1945, s1945j, psikyo_state, init_s1945j, ROT270, "Psikyo", "Strikers 1945 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1995, s1945n, s1945, s1945n, s1945, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (World, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1995, s1945nj, s1945, s1945n, s1945j, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (Japan, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1995, s1945k, s1945, s1945, s1945j, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1995, s1945bl, s1945, s1945bl, s1945bl, psikyo_state, init_s1945bl, ROT270, "bootleg", "Strikers 1945 (Hong Kong, bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) + +GAME( 1996, tengai, 0, s1945, tengai, psikyo_state, init_tengai, ROT0, "Psikyo", "Tengai (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) +GAME( 1996, tengaij, tengai, s1945, tengaij, psikyo_state, init_tengai, ROT0, "Psikyo", "Sengoku Blade: Sengoku Ace Episode II (Japan) / Tengai (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World -- cgit v1.2.3 From 2306f4132a8f08ed7963e7da129917a43582d994 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 15 Jun 2021 18:35:15 +0200 Subject: scripts/mame/arcade.lua: moved Model Racing drivers to separate project --- scripts/target/mame/arcade.lua | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 020cd04bd0b..ad5d9ce3372 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -921,6 +921,7 @@ function linkProjects_mame_arcade(_target, _subtarget) "midcoin", "midw8080", "midway", + "mr", "namco", "nasco", "neogeo", @@ -2913,6 +2914,15 @@ files { MAME_DIR .. "src/mame/audio/sente6vb.h", } +createMAMEProjects(_target, _subtarget, "mr") +files { + MAME_DIR .. "src/mame/drivers/dribling.cpp", + MAME_DIR .. "src/mame/includes/dribling.h", + MAME_DIR .. "src/mame/video/dribling.cpp", + MAME_DIR .. "src/mame/drivers/sshot.cpp", + MAME_DIR .. "src/mame/drivers/subhuntr.cpp", +} + createMAMEProjects(_target, _subtarget, "namco") files { MAME_DIR .. "src/mame/drivers/20pacgal.cpp", @@ -4885,9 +4895,6 @@ files { MAME_DIR .. "src/mame/drivers/dorachan.cpp", MAME_DIR .. "src/mame/drivers/drdmania.cpp", MAME_DIR .. "src/mame/drivers/dreamwld.cpp", - MAME_DIR .. "src/mame/drivers/dribling.cpp", - MAME_DIR .. "src/mame/includes/dribling.h", - MAME_DIR .. "src/mame/video/dribling.cpp", MAME_DIR .. "src/mame/drivers/dwarfd.cpp", MAME_DIR .. "src/mame/drivers/dynadice.cpp", MAME_DIR .. "src/mame/drivers/dynamoah.cpp", @@ -5115,7 +5122,6 @@ files { MAME_DIR .. "src/mame/audio/special.h", MAME_DIR .. "src/mame/drivers/spool99.cpp", MAME_DIR .. "src/mame/drivers/sprcros2.cpp", - MAME_DIR .. "src/mame/drivers/sshot.cpp", MAME_DIR .. "src/mame/drivers/ssingles.cpp", MAME_DIR .. "src/mame/drivers/sstrangr.cpp", MAME_DIR .. "src/mame/drivers/startouch.cpp", @@ -5123,7 +5129,6 @@ files { MAME_DIR .. "src/mame/drivers/strkzn.cpp", MAME_DIR .. "src/mame/drivers/stuntair.cpp", MAME_DIR .. "src/mame/drivers/su2000.cpp", - MAME_DIR .. "src/mame/drivers/subhuntr.cpp", MAME_DIR .. "src/mame/drivers/summit.cpp", MAME_DIR .. "src/mame/drivers/sumt8035.cpp", MAME_DIR .. "src/mame/drivers/supercrd.cpp", -- cgit v1.2.3 From 974d0fb4857daf51b945b62d82a4e487f6504b09 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 16 Jun 2021 03:00:04 +1000 Subject: super80_cass: Added some notes. --- hash/super80_cass.xml | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/hash/super80_cass.xml b/hash/super80_cass.xml index 2160fd60d09..7f7f3f80150 100644 --- a/hash/super80_cass.xml +++ b/hash/super80_cass.xml @@ -28,13 +28,56 @@ M-2325 : Power transformer H-3200 : Metal Case H-8402 : Bare main PCB (included in K-3600) P-2670 : S100 socket (included in K-3606) +X-1186 : 16k of 4116 RAM X-3790 : Debug/Disassembler X-3791 : Editor-Assembler +B-3600 : Construction Manual +B-3602 : Basic Manual +B-3606 : Dick Smith's First Book of Super-80 Programs These 2 games were never advertised, but since the details are available... X-3792 : Dungeon Dilemma -X-3607 : Horse Race +X-3793 : Horse Race + + +List of known lost commercial games: +Name Publisher or Author Notes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PACKMEN Microcomputer Engineering (MCE) VDUEB only +Super-80 Invaders Microcomputer Engineering (MCE) VDUEB only +Martian Attack Microcomputer Engineering (MCE) VDUEB only +Othello Microcomputer Engineering (MCE) VDUEB only +Adventure Microcomputer Engineering (MCE) VDUEB only +Super-80 Chess Microcomputer Engineering (MCE) VDUEB only +ZIP ZAP Bemak +Laser Raider Bemak +Mini Typewriter Bemak +Super-80 Tables Bemak +Supermind Challender Bemak +Keeper Matrix Software (George Georgiou) +Black Jack Matrix Software +Simon Matrix Software +Simon II Matrix Software +Space Rescue Matrix Software +Froggy Matrix Software +Yahtzee Matrix Software +Poker Matrix Software +Vegas Black Jack Matrix Software +Keeper Matrix Software +Adventure Matrix Software +Dungeon Dilemma (improved) Matrix Software +Star Trek Matrix Software +Sargon Chess Matrix Software +Breakout Matrix Software +Scrambler Matrix Software +Rally X Matrix Software +Super Invaders Megasoft +Sea Wars Megasoft +Chess Chasers Megasoft +Hangman Megasoft +Life Megasoft +Macro/Z80 + D/BUG Tawarri (Scott MacDonald) --> @@ -47,7 +90,7 @@ X-3607 : Horse Race Horse Race 198? Dick Smith Electronics - + @@ -113,7 +156,6 @@ X-3607 : Horse Race El Draw 3.6.3 -- cgit v1.2.3 From 3c1ca80a75832bbf22b3a52fc8bf68cb4dba027f Mon Sep 17 00:00:00 2001 From: Jaen <639345+jaens@users.noreply.github.com> Date: Tue, 15 Jun 2021 11:35:20 -0700 Subject: pofo.cpp: Converted keyboard to device. (#8192) Fixes multiple keys being pressed simultaneously. --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/pofo.cpp | 198 ++++-------------------------------------- src/mame/machine/pofo_kbd.cpp | 138 +++++++++++++++++++++++++++++ src/mame/machine/pofo_kbd.h | 39 +++++++++ 4 files changed, 194 insertions(+), 182 deletions(-) create mode 100644 src/mame/machine/pofo_kbd.cpp create mode 100644 src/mame/machine/pofo_kbd.h diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 0a651947626..d7384d21b45 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -1896,6 +1896,7 @@ files { MAME_DIR .. "src/mame/audio/lynx.h", MAME_DIR .. "src/mame/machine/lynx.cpp", MAME_DIR .. "src/mame/drivers/pofo.cpp", + MAME_DIR .. "src/mame/machine/pofo_kbd.cpp", MAME_DIR .. "src/mame/drivers/tvboy.cpp", } diff --git a/src/mame/drivers/pofo.cpp b/src/mame/drivers/pofo.cpp index aca6bbe2cae..23b8f72fbbb 100644 --- a/src/mame/drivers/pofo.cpp +++ b/src/mame/drivers/pofo.cpp @@ -37,6 +37,7 @@ #include "bus/pofo/ccm.h" #include "bus/pofo/exp.h" #include "machine/nvram.h" +#include "machine/pofo_kbd.h" #include "machine/ram.h" #include "machine/timer.h" #include "sound/pcd3311.h" @@ -77,6 +78,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, M80C88A_TAG), m_lcdc(*this, HD61830_TAG), + m_keyboard(*this, "keyboard"), m_dtmf(*this, PCD3311T_TAG), m_ccm(*this, PORTFOLIO_MEMORY_CARD_SLOT_A_TAG), m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG), @@ -85,16 +87,13 @@ public: m_ram(*this, "ram"), m_rom(*this, M80C88A_TAG), m_char_rom(*this, HD61830_TAG), - m_y(*this, "Y%01u", 0), - m_battery(*this, "BATTERY"), - m_keylatch(0xff) + m_battery(*this, "BATTERY") { } void portfolio(machine_config &config); protected: virtual void machine_start() override; - virtual void machine_reset() override; private: void portfolio_io(address_map &map); @@ -103,7 +102,6 @@ private: void check_interrupt(); void trigger_interrupt(int level); - void scan_keyboard(); enum { @@ -128,7 +126,6 @@ private: void io_w(offs_t offset, uint8_t data); uint8_t irq_status_r(); - uint8_t keyboard_r(); uint8_t battery_r(); uint8_t counter_r(offs_t offset); @@ -141,9 +138,9 @@ private: DECLARE_WRITE_LINE_MEMBER( eint_w ); DECLARE_WRITE_LINE_MEMBER( wake_w ); + DECLARE_WRITE_LINE_MEMBER( keyboard_int_w ); void portfolio_palette(palette_device &palette) const; - TIMER_DEVICE_CALLBACK_MEMBER(keyboard_tick); TIMER_DEVICE_CALLBACK_MEMBER(system_tick); TIMER_DEVICE_CALLBACK_MEMBER(counter_tick); uint8_t hd61830_rd_r(offs_t offset); @@ -151,6 +148,7 @@ private: required_device m_maincpu; required_device m_lcdc; + required_device m_keyboard; required_device m_dtmf; required_device m_ccm; required_device m_exp; @@ -159,13 +157,11 @@ private: required_device m_ram; required_region_ptr m_rom; required_region_ptr m_char_rom; - required_ioport_array<8> m_y; required_ioport m_battery; uint8_t m_ip; uint8_t m_ie; uint16_t m_counter; - uint8_t m_keylatch; int m_rom_b; }; @@ -223,6 +219,13 @@ WRITE_LINE_MEMBER( portfolio_state::wake_w ) // TODO } +WRITE_LINE_MEMBER( portfolio_state::keyboard_int_w ) +{ + if (state) + { + trigger_interrupt(INT_KEYBOARD); + } +} //------------------------------------------------- // irq_status_r - interrupt status read @@ -279,80 +282,6 @@ IRQ_CALLBACK_MEMBER(portfolio_state::portfolio_int_ack) return vector; } - - -//************************************************************************** -// KEYBOARD -//************************************************************************** - -//------------------------------------------------- -// scan_keyboard - scan keyboard -//------------------------------------------------- - -void portfolio_state::scan_keyboard() -{ - uint8_t keycode = 0xff; - - for (int row = 0; row < 8; row++) - { - uint8_t data = static_cast(m_y[row]->read()); - - if (data != 0xff) - { - for (int col = 0; col < 8; col++) - { - if (!BIT(data, col)) - { - keycode = (row * 8) + col; - } - } - } - } - - if (keycode != 0xff) - { - // key pressed - if (keycode != m_keylatch) - { - m_keylatch = keycode; - - trigger_interrupt(INT_KEYBOARD); - } - } - else - { - // key released - if (!(m_keylatch & 0x80)) - { - m_keylatch |= 0x80; - - trigger_interrupt(INT_KEYBOARD); - } - } -} - - -//------------------------------------------------- -// TIMER_DEVICE_CALLBACK_MEMBER( keyboard_tick ) -//------------------------------------------------- - -TIMER_DEVICE_CALLBACK_MEMBER(portfolio_state::keyboard_tick) -{ - scan_keyboard(); -} - - -//------------------------------------------------- -// keyboard_r - keyboard scan code register -//------------------------------------------------- - -uint8_t portfolio_state::keyboard_r() -{ - return m_keylatch; -} - - - //************************************************************************** // SOUND //************************************************************************** @@ -669,7 +598,7 @@ uint8_t portfolio_state::io_r(offs_t offset) switch ((offset >> 4) & 0x0f) { case 0: - data = keyboard_r(); + data = m_keyboard->read(); break; case 1: @@ -818,86 +747,6 @@ void portfolio_state::portfolio_lcdc(address_map &map) //------------------------------------------------- static INPUT_PORTS_START( portfolio ) - PORT_START("Y0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Atari") PORT_CODE(KEYCODE_TILDE) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') - - PORT_START("Y1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') - - PORT_START("Y2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') - - PORT_START("Y3") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('"') PORT_CHAR('`') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') - - PORT_START("Y4") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') - - PORT_START("Y5") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('8') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - - PORT_START("Y6") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Fn") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') - - PORT_START("Y7") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) - PORT_START("BATTERY") PORT_CONFNAME( 0x01, 0x01, "Battery Status" ) PORT_CONFSETTING( 0x01, DEF_STR( Normal ) ) @@ -989,26 +838,11 @@ void portfolio_state::machine_start() save_item(NAME(m_ip)); save_item(NAME(m_ie)); save_item(NAME(m_counter)); - save_item(NAME(m_keylatch)); save_item(NAME(m_rom_b)); m_ip = 0; } - -//------------------------------------------------- -// machine_reset -//------------------------------------------------- - -void portfolio_state::machine_reset() -{ - m_lcdc->reset(); - - m_exp->reset(); -} - - - //************************************************************************** // MACHINE CONFIGURATION //************************************************************************** @@ -1042,6 +876,9 @@ void portfolio_state::portfolio(machine_config &config) m_lcdc->rd_rd_callback().set(FUNC(portfolio_state::hd61830_rd_r)); m_lcdc->set_screen(SCREEN_TAG); + POFO_KEYBOARD(config, m_keyboard); + m_keyboard->int_handler().set(FUNC(portfolio_state::keyboard_int_w)); + // sound hardware SPEAKER(config, "mono").front_center(); PCD3311(config, m_dtmf, XTAL(3'578'640)).add_route(ALL_OUTPUTS, "mono", 0.25); @@ -1057,9 +894,6 @@ void portfolio_state::portfolio(machine_config &config) TIMER(config, "counter").configure_periodic(FUNC(portfolio_state::counter_tick), attotime::from_hz(XTAL(32'768)/16384)); TIMER(config, TIMER_TICK_TAG).configure_periodic(FUNC(portfolio_state::system_tick), attotime::from_hz(XTAL(32'768)/32768)); - // fake keyboard - TIMER(config, "keyboard").configure_periodic(FUNC(portfolio_state::keyboard_tick), attotime::from_usec(2500)); - // software list SOFTWARE_LIST(config, "cart_list").set_original("pofo"); diff --git a/src/mame/machine/pofo_kbd.cpp b/src/mame/machine/pofo_kbd.cpp new file mode 100644 index 00000000000..c5aa80d0955 --- /dev/null +++ b/src/mame/machine/pofo_kbd.cpp @@ -0,0 +1,138 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder,Jaen Saul + +#include "emu.h" + +#include "machine/pofo_kbd.h" + +#include "machine/keyboard.ipp" + +DEFINE_DEVICE_TYPE(POFO_KEYBOARD, pofo_keyboard_device, "pofo_keyboard", "Atari Portfolio keyboard"); + +pofo_keyboard_device::pofo_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, POFO_KEYBOARD, tag, owner, clock), + device_matrix_keyboard_interface(mconfig, *this, "Y0", "Y1", "Y2", "Y3", "Y4", "Y5", "Y6", "Y7"), + m_int_handler(*this) +{ +} + +void pofo_keyboard_device::trigger() +{ + m_int_handler(1); + m_int_handler(0); +} + +void pofo_keyboard_device::key_make(u8 row, u8 column) +{ + m_data = row * 8 + column; + trigger(); +} + +void pofo_keyboard_device::key_break(u8 row, u8 column) +{ + m_data = 0x80 | (row * 8 + column); + trigger(); +} + +void pofo_keyboard_device::device_start() +{ + m_int_handler.resolve_safe(); + + save_item(NAME(m_data)); +} + +void pofo_keyboard_device::device_reset() +{ + m_data = 0xFF; + + reset_key_state(); + start_processing(attotime::from_hz(600)); + typematic_stop(); +} + +static INPUT_PORTS_START( keyboard ) + PORT_START("Y0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Atari") PORT_CODE(KEYCODE_TILDE) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') + + PORT_START("Y1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') + + PORT_START("Y2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB)) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') + + PORT_START("Y3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('"') PORT_CHAR('`') + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') + + PORT_START("Y4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') + + PORT_START("Y5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('8') + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') + + PORT_START("Y6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Fn") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') + + PORT_START("Y7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) +INPUT_PORTS_END + +ioport_constructor pofo_keyboard_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( keyboard ); +} diff --git a/src/mame/machine/pofo_kbd.h b/src/mame/machine/pofo_kbd.h new file mode 100644 index 00000000000..07762ff6af5 --- /dev/null +++ b/src/mame/machine/pofo_kbd.h @@ -0,0 +1,39 @@ +// license:BSD-3-Clause +// copyright-holders:Jaen Saul +#ifndef MAME_MACHINE_POFO_KBD_H +#define MAME_MACHINE_POFO_KBD_H + +#pragma once + +#include "machine/keyboard.h" + +class pofo_keyboard_device : public device_t, protected device_matrix_keyboard_interface<8U> +{ +public: + pofo_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + + // callbacks + auto int_handler() { return m_int_handler.bind(); } + + // from host + uint8_t read() { return m_data; } + +protected: + void key_make(u8 row, u8 column) override; + void key_break(u8 row, u8 column) override; + + void device_start() override; + void device_reset() override; + + ioport_constructor device_input_ports() const override; + +private: + devcb_write_line m_int_handler; + uint8_t m_data; + + void trigger(); +}; + +DECLARE_DEVICE_TYPE(POFO_KEYBOARD, pofo_keyboard_device); + +#endif // MAME_MACHINE_POFO_KBD_H -- cgit v1.2.3 From c6088eebee0b68657cf262b91dfd34200e4e3580 Mon Sep 17 00:00:00 2001 From: Jaen <639345+jaens@users.noreply.github.com> Date: Tue, 15 Jun 2021 12:58:48 -0700 Subject: pofo.cpp: Atari Portfolio fixes and improvements. (#8191) * Fixed RAM expander reads. * Implemented magic port 0x61. * Fixed external drive B: detection. * Improved control register 0x8051 emulation. --- src/devices/bus/pofo/hpc104.cpp | 2 +- src/mame/drivers/pofo.cpp | 61 +++++++++++++++++++++++++++++------------ 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/devices/bus/pofo/hpc104.cpp b/src/devices/bus/pofo/hpc104.cpp index 11744206c7e..2cf0d03b825 100644 --- a/src/devices/bus/pofo/hpc104.cpp +++ b/src/devices/bus/pofo/hpc104.cpp @@ -169,7 +169,7 @@ uint8_t pofo_hpc104_device::nrdi_r(offs_t offset, uint8_t data, bool iom, bool b { if (offset >= 0x1f000 && offset < 0x5f000) { - data = m_nvram[offset - 0x1f000] = data; + data = m_nvram[offset - 0x1f000]; } } } diff --git a/src/mame/drivers/pofo.cpp b/src/mame/drivers/pofo.cpp index 23b8f72fbbb..66e20a90ec3 100644 --- a/src/mame/drivers/pofo.cpp +++ b/src/mame/drivers/pofo.cpp @@ -113,10 +113,10 @@ private: enum { - ROM_APP, - CCM_A, - CCM_B, - ROM_EXT + ROM_APP = 0b000, // 0 + CCM_A = 0b011, // 3 + CCM_B = 0b111, // 7 + ROM_EXT = 0b010, // 2 }; uint8_t mem_r(offs_t offset); @@ -233,9 +233,17 @@ WRITE_LINE_MEMBER( portfolio_state::keyboard_int_w ) uint8_t portfolio_state::irq_status_r() { - return m_ip; -} + uint8_t data = m_ip; + /* + The BIOS interrupt 11h (Equipment list) reports that the second floppy drive (B:) is + installed if the 3rd bit is set (which is also the external interrupt line). + It is not clear if the ~NMD1 line is OR or XORed or muxed with the interrupt line, + but this way seems to work. + */ + data |= !m_exp->nmd1_r() << 3; + return data; +} //------------------------------------------------- // irq_mask_w - interrupt enable mask @@ -361,10 +369,10 @@ uint8_t portfolio_state::battery_r() bit signal description - 0 ? 1=boots from B: - 1 ? 1=boots from external ROM - 2 ? 1=boots from B: - 3 ? 1=boots from ??? + 0 ? bit 0 from bus select (m_rom_b) + 1 ? + 2 ? bit 2 from bus select (m_rom_b) + 3 ? 4 ? 5 PDET 1=peripheral connected 6 LOWB 0=battery low @@ -374,6 +382,14 @@ uint8_t portfolio_state::battery_r() uint8_t data = 0; + /* + Partially stores what has been written into this port. + Used by interrupt 61h service 24h (Get ROM/CCM state). + Setting bit 1 here causes the BIOS to permanently wedge the external ROM + select on, so mask it out as a workaround. + */ + data |= (m_rom_b & 0b101); + // peripheral detect data |= m_exp->pdet_r() << 5; @@ -407,13 +423,7 @@ void portfolio_state::select_w(uint8_t data) if (LOG) logerror("%s %s SELECT %02x\n", machine().time().as_string(), machine().describe_context(), data); - switch (data & 0x0f) - { - case 3: m_rom_b = CCM_A; break; - case 7: m_rom_b = CCM_B; break; - case 0: m_rom_b = ROM_APP; break; - case 2: m_rom_b = ROM_EXT; break; - } + m_rom_b = data & 0x0f; } @@ -530,6 +540,10 @@ uint8_t portfolio_state::mem_r(offs_t offset) case ROM_EXT: // TODO break; + + default: + logerror("%s %s Invalid bus read %05x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff); + break; } } else if (offset >= 0xe0000) @@ -574,6 +588,14 @@ void portfolio_state::mem_w(offs_t offset, uint8_t data) case CCM_B: ncc1 = 0; break; + + case ROM_EXT: + case ROM_APP: + break; + + default: + logerror("%s %s Invalid bus write %05x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff); + break; } } @@ -632,6 +654,11 @@ uint8_t portfolio_state::io_r(offs_t offset) break; } } + else if (offset == 0x61) + { + // Magic port to detect the Pofo + data = 0x61; + } data = m_exp->nrdi_r(offset, data, iom, bcom, ncc1); -- cgit v1.2.3 From 79c783eba9742c7dc1da684efc672ce83064b8f8 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 16 Jun 2021 11:56:33 +1000 Subject: Added galaxian_rockclim to arcade.flt --- src/mame/arcade.flt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt index 533d5c951d2..21bde9492c1 100644 --- a/src/mame/arcade.flt +++ b/src/mame/arcade.flt @@ -454,6 +454,7 @@ galastrm.cpp galaxi.cpp galaxia.cpp galaxian.cpp +galaxian_rockclim.cpp galaxold.cpp galgame.cpp galgames.cpp -- cgit v1.2.3 From da6196f70d516179b96dcc4699517ef9eb07f7cd Mon Sep 17 00:00:00 2001 From: arbee Date: Tue, 15 Jun 2021 23:12:56 -0400 Subject: apple3: Support for the Titan "/// Plus II" Apple II emulation card. [R. Belmont] --- scripts/src/bus.lua | 2 + src/devices/bus/a2bus/a2bus.h | 1 + src/devices/bus/a2bus/titan3plus2.cpp | 334 ++++++++++++++++++++++++++++++++++ src/devices/bus/a2bus/titan3plus2.h | 64 +++++++ src/mame/drivers/apple3.cpp | 4 + src/mame/machine/apple3.cpp | 49 ++--- 6 files changed, 424 insertions(+), 30 deletions(-) create mode 100644 src/devices/bus/a2bus/titan3plus2.cpp create mode 100644 src/devices/bus/a2bus/titan3plus2.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index c5dd3b198b2..9258a9ea108 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -2464,6 +2464,8 @@ if (BUSES["A2BUS"]~=null) then MAME_DIR .. "src/devices/bus/a2bus/suprterminal.h", MAME_DIR .. "src/devices/bus/a2bus/timemasterho.cpp", MAME_DIR .. "src/devices/bus/a2bus/timemasterho.h", + MAME_DIR .. "src/devices/bus/a2bus/titan3plus2.cpp", + MAME_DIR .. "src/devices/bus/a2bus/titan3plus2.h", MAME_DIR .. "src/devices/bus/a2bus/transwarp.cpp", MAME_DIR .. "src/devices/bus/a2bus/transwarp.h", MAME_DIR .. "src/devices/bus/a2bus/uniprint.cpp", diff --git a/src/devices/bus/a2bus/a2bus.h b/src/devices/bus/a2bus/a2bus.h index 1c7d94bbcdc..5a10f06de39 100644 --- a/src/devices/bus/a2bus/a2bus.h +++ b/src/devices/bus/a2bus/a2bus.h @@ -149,6 +149,7 @@ public: virtual void write_inh_rom(uint16_t offset, uint8_t data) { } virtual uint16_t inh_start() { return INH_START_INVALID; } virtual uint16_t inh_end() { return INH_END_INVALID; } + virtual bool inh_check(uint16_t offset, bool bIsWrite) { return false; } virtual int inh_type() { return INH_NONE; } device_a2bus_card_interface *next() const { return m_next; } diff --git a/src/devices/bus/a2bus/titan3plus2.cpp b/src/devices/bus/a2bus/titan3plus2.cpp new file mode 100644 index 00000000000..e04dc03448a --- /dev/null +++ b/src/devices/bus/a2bus/titan3plus2.cpp @@ -0,0 +1,334 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont +/********************************************************************* + + titan3plus3.cpp + + Implemention of the Titan "/// Plus //"" card. + By R. Belmont, based on reverse-engineering by Rob Justice. + + This extends the Apple ///'s II emulation to include a 128K + extended language card and Apple II compatible game I/O. + + The card enables itself if the /// is at 1 MHz and accesses the + card's $CNxx ROM space. If the /// goes back to 2 MHz mode at + any time, the card disables itself. + + Address ranges this messes with: + $C05X - passed through to ///, but also used for annunciators on A2 gameio + $C06X - /// doesn't see when card enabled, A2 paddles + $C07X - passed through to ///, but also used for A2 paddle reset + $C08X - unused by /// (language card control) + $D000-$FFFF: usual (for A2) language card space. Not so usual for ///. + +*********************************************************************/ + +#include "emu.h" +#include "titan3plus2.h" + +/*************************************************************************** + PARAMETERS +***************************************************************************/ + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE(A2BUS_TITAN3PLUS2, a2bus_titan3plus2_device, "titan3p2", "Titan /// Plus //") + +/*************************************************************************** + FUNCTION PROTOTYPES +***************************************************************************/ + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +void a2bus_titan3plus2_device::device_add_mconfig(machine_config &config) +{ + APPLE2_GAMEIO(config, m_gameio, apple2_gameio_device::default_options, nullptr); +} + +a2bus_titan3plus2_device::a2bus_titan3plus2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this), + m_gameio(*this, "gameio"), + m_inh_state(0), m_last_offset(0), m_dxxx_bank(0), m_main_bank(0), m_enabled(false) +{ +} + +a2bus_titan3plus2_device::a2bus_titan3plus2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + a2bus_titan3plus2_device(mconfig, A2BUS_TITAN3PLUS2, tag, owner, clock) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void a2bus_titan3plus2_device::device_start() +{ + memset(m_ram, 0, 128*1024); + + save_item(NAME(m_inh_state)); + save_item(NAME(m_ram)); + save_item(NAME(m_dxxx_bank)); + save_item(NAME(m_main_bank)); + save_item(NAME(m_last_offset)); + save_item(NAME(m_enabled)); + + m_x_calibration = m_y_calibration = attotime::from_nsec(10800).as_double(); +} + +void a2bus_titan3plus2_device::device_reset() +{ + m_inh_state = INH_NONE; + m_dxxx_bank = 0; + m_main_bank = 0; + m_last_offset = -1; +} + +void a2bus_titan3plus2_device::do_io(int offset) +{ + int old_inh_state = m_inh_state; + + switch (offset) + { + case 0x1: case 0x3: case 0x9: case 0xb: + if (offset != m_last_offset) + { + m_last_offset = offset; + return; + } + break; + } + m_last_offset = offset; + + if (offset & 4) + { + switch (offset) + { + case 0x4: m_main_bank = 0x00000; break; + case 0x5: m_main_bank = 0x04000; break; + case 0x6: m_main_bank = 0x08000; break; + case 0x7: m_main_bank = 0x0c000; break; + case 0xc: m_main_bank = 0x10000; break; + case 0xd: m_main_bank = 0x14000; break; + case 0xe: m_main_bank = 0x18000; break; + case 0xf: m_main_bank = 0x1c000; break; + } + } + else + { + m_inh_state = INH_NONE; + m_dxxx_bank = 0; + + if (offset & 0x1) + { + m_inh_state |= INH_WRITE; + } + + switch(offset & 0x03) + { + case 0x00: + case 0x03: + m_inh_state |= INH_READ; + break; + } + + if (!(offset & 8)) + { + m_dxxx_bank = 0x1000; + } + } + + if (m_inh_state != old_inh_state) + { + recalc_slot_inh(); + } + + #if 0 + printf("LC: (ofs %x) new state %c%c dxxx=%04x main=%05x\n", + offset, + (m_inh_state & INH_READ) ? 'R' : 'x', + (m_inh_state & INH_WRITE) ? 'W' : 'x', + m_dxxx_bank, m_main_bank); + #endif +} + + +/*------------------------------------------------- + read_c08x - called for reads from the LC switches +-------------------------------------------------*/ + +uint8_t a2bus_titan3plus2_device::read_c08x(uint8_t offset) +{ + if (!machine().side_effects_disabled()) + { + do_io(offset & 0xf); + } + return 0xff; +} + + +/*------------------------------------------------- + write_c0nx - called for writes to the LC switches +-------------------------------------------------*/ + +void a2bus_titan3plus2_device::write_c08x(uint8_t offset, uint8_t data) +{ + do_io(offset & 0xf); +} + +uint8_t a2bus_titan3plus2_device::read_inh_rom(uint16_t offset) +{ + if (offset < 0xd000) + { + if ((offset >= 0xc080) && (offset <= 0xc08f)) + { + return read_c08x(offset & 0xf); + } + + if ((offset >= 0xc060) && (offset <= 0xc06f)) + { + switch (offset & 0x7) + { + case 1: // button 0 + return (m_gameio->sw0_r() ? 0x80 : 0); + + case 2: // button 1 + return (m_gameio->sw1_r() ? 0x80 : 0); + + case 3: // button 2 + return (m_gameio->sw2_r() ? 0x80 : 0); + + case 4: // joy 1 X axis + if (!m_gameio->is_device_connected()) + return 0x80; + return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0); + + case 5: // joy 1 Y axis + if (!m_gameio->is_device_connected()) + return 0x80; + return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0); + + case 6: // joy 2 X axis + if (!m_gameio->is_device_connected()) + return 0x80; + return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0); + + case 7: // joy 2 Y axis + if (!m_gameio->is_device_connected()) + return 0x80; + return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0); + } + } + } + else + { + if (offset < 0xe000) + { + return m_ram[(offset & 0xfff) + m_dxxx_bank + m_main_bank]; + } + + return m_ram[(offset & 0x1fff) + 0x2000 + m_main_bank]; + } + + return 0xff; +} + +void a2bus_titan3plus2_device::write_inh_rom(uint16_t offset, uint8_t data) +{ + if (offset < 0xd000) + { + if ((offset >= 0xc080) && (offset <= 0xc08f)) + { + write_c08x(offset & 0xf, data); + return; + } + } + else + { + if (offset < 0xe000) + { + m_ram[(offset & 0xfff) + m_dxxx_bank + m_main_bank] = data; + return; + } + + m_ram[(offset & 0x1fff) + 0x2000 + m_main_bank] = data; + } +} + +u8 a2bus_titan3plus2_device::read_cnxx(u8 offset) +{ + m_enabled = true; + return 0xff; +} + +// returns if we want to /INH a read or write to a specific address +bool a2bus_titan3plus2_device::inh_check(u16 offset, bool bIsWrite) +{ + if (!m_enabled) + { + return false; + } + + // handle LC + if (offset >= 0xd000) + { + if ((bIsWrite) && (m_inh_state & INH_WRITE)) + { + return true; + } + + if (!(bIsWrite) && (m_inh_state & INH_READ)) + { + return true; + } + } + + if ((offset >= 0xc080) && (offset <= 0xc08f)) + { + return true; + } + + if ((offset >= 0xc070) && (offset <= 0xc07f)) + { + m_joystick_x1_time = machine().time().as_double() + m_x_calibration * m_gameio->pdl0_r(); + m_joystick_y1_time = machine().time().as_double() + m_y_calibration * m_gameio->pdl1_r(); + m_joystick_x2_time = machine().time().as_double() + m_x_calibration * m_gameio->pdl2_r(); + m_joystick_y2_time = machine().time().as_double() + m_y_calibration * m_gameio->pdl3_r(); + + return false; // Apple /// should still handle this + } + + if ((offset >= 0xc060) && (offset <= 0xc06f)) + { + return true; + } + + if ((offset >= 0xc058) && (offset <= 0xc05f)) + { + switch (offset & 0xf) + { + case 8: + case 9: + m_gameio->an0_w(offset & 1); + break; + case 0xa: + case 0xb: + m_gameio->an1_w(offset & 1); + break; + case 0xc: + case 0xd: + m_gameio->an2_w(offset & 1); + break; + case 0xe: + case 0xf: + m_gameio->an3_w(offset & 1); + break; + } + return false; // Apple /// should still see this + } + + return false; +} diff --git a/src/devices/bus/a2bus/titan3plus2.h b/src/devices/bus/a2bus/titan3plus2.h new file mode 100644 index 00000000000..f162f115d8e --- /dev/null +++ b/src/devices/bus/a2bus/titan3plus2.h @@ -0,0 +1,64 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont +/********************************************************************* + + titan3plus2.h + + Implemention of the Titan /// Plus II card + +*********************************************************************/ + +#ifndef MAME_BUS_A2BUS_TITAN3PLUS2_H +#define MAME_BUS_A2BUS_TITAN3PLUS2_H + +#pragma once + +#include "a2bus.h" +#include "bus/a2gameio/gameio.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_titan3plus2_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_titan3plus2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + a2bus_titan3plus2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual u8 read_inh_rom(u16 offset) override; + virtual void write_inh_rom(u16 offset, u8 data) override; + virtual bool inh_check(uint16_t offset, bool bIsWrite) override; + +private: + required_device m_gameio; + + u8 read_c08x(u8 offset); + void write_c08x(u8 offset, u8 data); + u8 read_cnxx(u8 offset) override; + void do_io(int offset); + + int m_inh_state; + int m_last_offset; + int m_dxxx_bank; + int m_main_bank; + u8 m_ram[128*1024]; + bool m_enabled; + + double m_joystick_x1_time, m_joystick_y1_time, m_joystick_x2_time, m_joystick_y2_time, m_x_calibration, m_y_calibration; +}; + +// device type definition +DECLARE_DEVICE_TYPE(A2BUS_TITAN3PLUS2, a2bus_titan3plus2_device) + +#endif // MAME_BUS_A2BUS_TITAN3PLUS2_H diff --git a/src/mame/drivers/apple3.cpp b/src/mame/drivers/apple3.cpp index 1c633605b89..32262a419a8 100644 --- a/src/mame/drivers/apple3.cpp +++ b/src/mame/drivers/apple3.cpp @@ -26,6 +26,8 @@ #include "bus/a2bus/mouse.h" #include "bus/a2bus/a2zipdrive.h" #include "bus/a2bus/cmsscsi.h" +#include "bus/a2bus/titan3plus2.h" +#include "bus/a2bus/a2mockingboard.h" #include "bus/rs232/rs232.h" @@ -47,6 +49,8 @@ static void apple3_cards(device_slot_interface &device) device.option_add("mouse", A2BUS_MOUSE); // Apple II Mouse Card device.option_add("focusdrive", A2BUS_FOCUSDRIVE); // Focus Drive IDE card device.option_add("cmsscsi", A2BUS_CMSSCSI); // CMS Apple II SCSI Card + device.option_add("titan3plus2", A2BUS_TITAN3PLUS2); // Titan /// Plus 2 card + device.option_add("mockingboard", A2BUS_MOCKINGBOARD); } static void a3_floppies(device_slot_interface &device) diff --git a/src/mame/machine/apple3.cpp b/src/mame/machine/apple3.cpp index a875d6dfc9e..13dd3e0ef84 100644 --- a/src/mame/machine/apple3.cpp +++ b/src/mame/machine/apple3.cpp @@ -770,20 +770,15 @@ uint8_t apple3_state::apple3_memory_r(offs_t offset) { uint8_t rv = 0xff; - if (m_inh_state) + // /INH handling + for (int slot = 1; slot < 5; slot++) { - for (int slot = 1; slot < 4; slot++) + device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot); + if (slotdevice != nullptr) { - device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot); - if (slotdevice != nullptr) + if (slotdevice->inh_check(offset, false)) { - if ((slotdevice->inh_type() & INH_READ) == INH_READ) - { - if ((offset >= slotdevice->inh_start()) && (offset <= slotdevice->inh_end())) - { - return slotdevice->read_inh_rom(offset); - } - } + return slotdevice->read_inh_rom(offset); } } } @@ -925,25 +920,6 @@ uint8_t apple3_state::apple3_memory_r(offs_t offset) void apple3_state::apple3_memory_w(offs_t offset, uint8_t data) { - if (m_inh_state) - { - for (int slot = 1; slot < 4; slot++) - { - device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot); - if (slotdevice != nullptr) - { - if ((slotdevice->inh_type() & INH_WRITE) == INH_WRITE) - { - if ((offset >= slotdevice->inh_start()) && (offset <= slotdevice->inh_end())) - { - slotdevice->write_inh_rom(offset, data); - return; - } - } - } - } - } - if ((m_indir_bank & 0x80) && (offset >= 0x100)) { uint8_t *test; @@ -956,6 +932,19 @@ void apple3_state::apple3_memory_w(offs_t offset, uint8_t data) } } + for (int slot = 1; slot < 5; slot++) + { + device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot); + if (slotdevice != nullptr) + { + if (slotdevice->inh_check(offset, true)) + { + slotdevice->write_inh_rom(offset, data); + return; + } + } + } + if (offset < 0x100) { *apple3_get_zpa_addr(offset) = data; -- cgit v1.2.3 From 1a280581ba00b4559bf293fa3528876d46f0275a Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 16 Jun 2021 13:59:21 +1000 Subject: pc_vga: updated comment --- src/devices/video/pc_vga.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/devices/video/pc_vga.cpp b/src/devices/video/pc_vga.cpp index d72899d2de2..2edaaca392a 100644 --- a/src/devices/video/pc_vga.cpp +++ b/src/devices/video/pc_vga.cpp @@ -36,11 +36,11 @@ ROM declarations: (oti 037 chip) - ROM_LOAD("oakvga.bin", 0xc0000, 0x8000, 0x318c5f43) + ROM_LOAD("oakvga.bin", 0xc0000, 0x8000, CRC(318c5f43) SHA1(2aeb6cf737fd87dfd08c9f5b5bc421fcdbab4ce9) ) (tseng labs famous et4000 isa vga card (oem)) - ROM_LOAD("et4000b.bin", 0xc0000, 0x8000, 0xa903540d) + ROM_LOAD("et4000b.bin", 0xc0000, 0x8000, CRC(a903540d) SHA1(unknown) ) (tseng labs famous et4000 isa vga card) - ROM_LOAD("et4000.bin", 0xc0000, 0x8000, 0xf01e4be0) + ROM_LOAD("et4000.bin", 0xc0000, 0x8000, CRC(f01e4be0) SHA1(95d75ff41bcb765e50bd87a8da01835fd0aa01d5) ) ***************************************************************************/ -- cgit v1.2.3 From 6c505bedfdfd8e145a59cdb1fcc29d29a8ee448d Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 16 Jun 2021 14:35:53 +1000 Subject: vectrex: updated comment --- src/mame/drivers/vectrex.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/drivers/vectrex.cpp b/src/mame/drivers/vectrex.cpp index 0556d7d6b74..da2be7804b5 100644 --- a/src/mame/drivers/vectrex.cpp +++ b/src/mame/drivers/vectrex.cpp @@ -150,7 +150,7 @@ ROM_START(vectrex) // The following fastboots are listed here for reference and documentation // ROM_SYSTEM_BIOS(2, "bios2", "us-fastboot hack") -// ROMX_LOAD("us-fastboot.bin", 0x0000, 0x2000, CRa6e4dac4) SHA1(e0900be6d6858b985fd7f0999d864b2fceaf01a1), ROM_BIOS(2) ) +// ROMX_LOAD("us-fastboot.bin", 0x0000, 0x2000, CRC(a6e4dac4) SHA1(e0900be6d6858b985fd7f0999d864b2fceaf01a1), ROM_BIOS(2) ) // ROM_SYSTEM_BIOS(3, "bios3", "intl-fastboot hack") // ROMX_LOAD("intl-fastboot.bin", 0x0000, 0x2000, CRC(71dcf0f4) SHA1(2a257c5111f5cee841bd14acaa9df6496aaf3d8b), ROM_BIOS(3) ) -- cgit v1.2.3 From 6addf73825011f0e02d8adf80f58412240266b1d Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 16 Jun 2021 13:35:22 +0200 Subject: sf2049: remove bogus button4 --- src/mame/drivers/mephisto_mm2.cpp | 8 ++++---- src/mame/drivers/vegas.cpp | 7 +++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/mame/drivers/mephisto_mm2.cpp b/src/mame/drivers/mephisto_mm2.cpp index 4b0aace06f1..7ea5c7482c9 100644 --- a/src/mame/drivers/mephisto_mm2.cpp +++ b/src/mame/drivers/mephisto_mm2.cpp @@ -468,12 +468,12 @@ ROM_START( mm4tk ) ROM_END -ROM_START( mm5 ) +ROM_START( mm5 ) // v5.1 (MEM->INFO to see version number) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("mephisto5.rom", 0x8000, 0x8000, CRC(89c3d9d2) SHA1(77cd6f8eeb03c713249db140d2541e3264328048) ) ROM_END -ROM_START( mm5a ) +ROM_START( mm5a ) // v5.0 ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("mm50.rom", 0x8000, 0x8000, CRC(fcfa7e6e) SHA1(afeac3a8c957ba58cefaa27b11df974f6f2066da) ) ROM_END @@ -510,6 +510,6 @@ CONS( 1987, mm4a, mm4, 0, mm4, mm2, mm2_state, empty_init, "He CONS( 1987, mm4b, mm4, 0, mm4, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v6.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1987, mm4tk, mm4, 0, mm4tk, mm2, mm2_state, empty_init, "hack", "Mephisto MM IV (TurboKit)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) -CONS( 1990, mm5, 0, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, mm5a, mm5, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, mm5, 0, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (v5.1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, mm5a, mm5, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (v5.0)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, mm5p, mm5, 0, mm5p, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (Portorose TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) // aka Rebel diff --git a/src/mame/drivers/vegas.cpp b/src/mame/drivers/vegas.cpp index ddf45de38f1..d9377f4dd09 100644 --- a/src/mame/drivers/vegas.cpp +++ b/src/mame/drivers/vegas.cpp @@ -1723,7 +1723,7 @@ static INPUT_PORTS_START( sf2049 ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_NAME("Music") PORT_BIT( 0x0070, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(vegas_state, keypad_r) PORT_BIT( 0x0f00, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(vegas_state, gearshift_r) - PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0xf080, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("GEAR") PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("1st Gear") @@ -2158,7 +2158,7 @@ void vegas_state::nbagold(machine_config &config) m_ioasic->set_yearoffs(80); m_ioasic->irq_handler().set(FUNC(vegas_state::ioasic_irq)); //m_ioasic->set_auto_ack(1) - m_ioasic->aux_output_handler().set(FUNC(vegas_state::i40_w)); + m_ioasic->aux_output_handler().set(FUNC(vegas_state::i40_w)); } void vegas_state::sf2049(machine_config &config) @@ -2232,7 +2232,7 @@ void vegas_state::cartfury(machine_config &config) * *************************************/ - // there is a socket next to the main bios roms for updates, this is what the update region is. +// there is a socket next to the main bios roms for updates, this is what the update region is. ROM_START( gauntleg ) @@ -2268,7 +2268,6 @@ ROM_START( gauntleg12 ) ROMX_LOAD("12to16.3.bin", 0x000000, 0x100000, CRC(1027e54f) SHA1(a841f5cc5b022ddfaf70c97a64d1582f0a2ca70e), ROM_BIOS(3)) - DISK_REGION( PCI_ID_IDE":ide:0:hdd:image" ) // GUTS 1.4 10/22/1998 Main 10/23/1998 DISK_IMAGE( "gauntl12", 0, SHA1(62917fbd692d004bc391287349041ebe669385cf) ) // compressed with -chs 4969,16,63 (which is apparently correct for a Quantum FIREBALL 2.5 GB and allows the update program to work) -- cgit v1.2.3 From 1324317fa590acbe1fef8e987ae0cce7057fbb16 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 16 Jun 2021 18:18:56 +0200 Subject: stv.cpp: added preliminary 7-seg led support for critcrsh --- src/mame/drivers/namcos2.cpp | 3 +++ src/mame/drivers/stv.cpp | 47 ++++++++++++++++++++++++++++++++------------ src/mame/includes/stv.h | 13 +++++++----- src/mame/layout/critcrsh.lay | 30 ++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 18 deletions(-) create mode 100644 src/mame/layout/critcrsh.lay diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp index e1472c894e8..8d6d0cf7c13 100644 --- a/src/mame/drivers/namcos2.cpp +++ b/src/mame/drivers/namcos2.cpp @@ -24,6 +24,9 @@ known issues: - sprite/tilemap orthogonality needed - bad road colors in Final Lap and Suzuka series + Final Lap & Final Lap 2: + - by default, the graphics are way too bright if compared to original PCB/monitor output + Finest Hour: - roz plane colors are bad in-game diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp index 44bdff77260..61f259ccf11 100644 --- a/src/mame/drivers/stv.cpp +++ b/src/mame/drivers/stv.cpp @@ -14,12 +14,12 @@ (per-game issues) - stress: accesses the Sound Memory Expansion Area (0x05a80000-0x05afffff), unknown purpose; - - smleague / finlarch: it randomly hangs / crashes,it works if you use a ridiculous MCFG_INTERLEAVE number,might need strict - SH-2 synching or it's actually a m68k comms issue. + - smleague / finlarch: it randomly hangs / crashes, it works if you use a ridiculous set_maximum_quantum() number, + might need strict SH-2 synching or it's actually a m68k comms issue. - groovef: ugly back screen color, caused by incorrect usage of the Color Calculation function. - - myfairld: Apparently this game gives a black screen (either test mode and in-game mode),but let it wait for about + - myfairld: Apparently this game gives a black screen (either test mode and in-game mode), but let it wait for about 10 seconds and the game will load everything. This is because of a hellishly slow m68k sub-routine located at 54c2. Likely to not be a bug but an in-game design issue. @@ -27,11 +27,17 @@ - vfremix: when you play as Akira, there is a problem with third match: game doesn't upload all textures and tiles and doesn't enable display, although gameplay is normal - wait a while to get back - to title screen after losing a match + to title screen after losing a match (fixed?) - vfremix: various problems with SCU DSP: Jeffry causes a black screen hang. Akira's kick sometimes sends the opponent out of the ring from whatever position. + - critcrsh: has a 2 digits 7-seg LED. The current implementation works in test mode, but during gameplay it's stuck + on the day's best score, while according to reports it should update the number of critters you have crushed. + At the end of the round it outputs the number of crushed critters. Also needs ticket dispenser hookup (redemption + is disabled by the game by default, but can be turned on in test menu). + Reference video: https://www.youtube.com/watch?v=O9PyIKdSFnU + ************************************************************************************************************************/ #include "emu.h" @@ -50,6 +56,7 @@ #include "coreutil.h" +#include "critcrsh.lh" #include "segabill.lh" #include "segabillv.lh" @@ -142,7 +149,7 @@ void stv_state::stv_ioga_w(offs_t offset, uint8_t data) // if (data != m_system_output) // logerror("OUT %02x\n", data); m_system_output = data; - /*Why does the BIOS tests these as ACTIVE HIGH? A program bug?*/ + /*Why does the BIOS test these as ACTIVE HIGH? A program bug?*/ machine().bookkeeping().coin_counter_w(0,~data & 0x01); machine().bookkeeping().coin_counter_w(1,~data & 0x02); machine().bookkeeping().coin_lockout_w(0,~data & 0x04); @@ -182,6 +189,21 @@ uint8_t stv_state::critcrsh_ioga_r(offs_t offset) return res; } +void stv_state::critcrsh_ioga_w(offs_t offset, uint8_t data) +{ + switch (offset * 2 + 1) + { + case 0x0b: + static uint8_t bcd2hex[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x49, 0x78, 0x00 }; // TODO: chip type unknown + m_cc_digits[0] = bcd2hex[(data & 0xf0) >> 4]; + m_cc_digits[1] = bcd2hex[data & 0x0f]; + break; + default: + stv_ioga_w(offset, data); + break; + } +} + uint8_t stv_state::magzun_ioga_r(offs_t offset) { uint8_t res; @@ -998,7 +1020,7 @@ void stv_state::stv_mem(address_map &map) void stv_state::critcrsh_mem(address_map &map) { stv_mem(map); - map(0x00400000, 0x0040003f).rw(FUNC(stv_state::critcrsh_ioga_r), FUNC(stv_state::stv_ioga_w)).umask32(0x00ff00ff); + map(0x00400000, 0x0040003f).rw(FUNC(stv_state::critcrsh_ioga_r), FUNC(stv_state::critcrsh_ioga_w)).umask32(0x00ff00ff); } void stv_state::magzun_mem(address_map &map) @@ -1123,9 +1145,6 @@ void stv_state::stv(machine_config &config) m_smpc_hle->dot_select_handler().set(FUNC(saturn_state::dot_select_w)); m_smpc_hle->interrupt_handler().set(m_scu, FUNC(sega_scu_device::smpc_irq_w)); - MCFG_MACHINE_START_OVERRIDE(stv_state,stv) - MCFG_MACHINE_RESET_OVERRIDE(stv_state,stv) - EEPROM_93C46_16BIT(config, "eeprom"); /* Actually AK93C45F */ /* video hardware */ @@ -1267,7 +1286,7 @@ void stv_state::hopper(machine_config &config) m_slave->set_addrmap(AS_PROGRAM, &stv_state::hopper_mem); } -MACHINE_RESET_MEMBER(stv_state,stv) +void stv_state::machine_reset() { m_scsp_last_line = 0; @@ -1340,8 +1359,10 @@ image_init_result stv_state::load_cart(device_image_interface &image, generic_sl } -MACHINE_START_MEMBER(stv_state, stv) +void stv_state::machine_start() { + m_cc_digits.resolve(); + // save states // save_pointer(NAME(m_scu_regs), 0x100/4); save_item(NAME(m_en_68k)); @@ -3778,8 +3799,8 @@ GAME( 1996, batmanfr, stvbios, batmanfr, batmanfr, stv_state, init_batmanfr, GAME( 1996, colmns97, stvbios, stv, stv, stv_state, init_colmns97, ROT0, "Sega", "Columns '97 (JET 961209 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1997, cotton2, stvbios, stv, stv, stv_state, init_cotton2, ROT0, "Success", "Cotton 2 (JUET 970902 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1998, cottonbm, stvbios, stv, stv, stv_state, init_cottonbm, ROT0, "Success", "Cotton Boomerang (JUET 980709 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1995, critcrsh, stvbios, critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Critter Crusher (EA 951204 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1995, tatacot, critcrsh,critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Tatacot (JA 951128 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +GAMEL(1995, critcrsh, stvbios, critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Critter Crusher (EA 951204 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_critcrsh ) +GAMEL(1995, tatacot, critcrsh,critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Tatacot (JA 951128 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_critcrsh ) GAME( 1999, danchih, stvbios, stvmp, stvmp, stv_state, init_danchih, ROT0, "Altron (Tecmo license)", "Danchi de Hanafuda (J 990607 V1.400)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 2000, danchiq, stvbios, stv, stv, stv_state, init_danchiq, ROT0, "Altron", "Danchi de Quiz: Okusan Yontaku Desuyo! (J 001128 V1.200)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1996, diehard, stvbios, stv, stv, stv_state, init_diehard, ROT0, "Sega", "Die Hard Arcade (UET 960515 V1.000)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/includes/stv.h b/src/mame/includes/stv.h index b9a1983e225..6b319d59d03 100644 --- a/src/mame/includes/stv.h +++ b/src/mame/includes/stv.h @@ -26,7 +26,8 @@ public: m_cryptdevice(*this, "315_5881"), m_5838crypt(*this, "315_5838"), m_hopper(*this, "hopper"), - m_billboard(*this, "billboard") + m_billboard(*this, "billboard"), + m_cc_digits(*this, "cc_digit%u", 0U) { } @@ -88,10 +89,15 @@ public: void init_othellos(); void init_mausuke(); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + private: uint8_t stv_ioga_r(offs_t offset); void stv_ioga_w(offs_t offset, uint8_t data); uint8_t critcrsh_ioga_r(offs_t offset); + void critcrsh_ioga_w(offs_t offset, uint8_t data); uint8_t magzun_ioga_r(offs_t offset); void magzun_ioga_w(offs_t offset, uint8_t data); uint8_t stvmp_ioga_r(offs_t offset); @@ -112,10 +118,6 @@ private: void install_stvbios_speedups( void ); - DECLARE_MACHINE_START(stv); - DECLARE_MACHINE_RESET(stv); - - DECLARE_MACHINE_RESET(batmanfr); void batmanfr_sound_comms_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); optional_device m_rax; @@ -149,6 +151,7 @@ private: optional_device m_5838crypt; optional_device m_hopper; required_device m_billboard; + output_finder<2> m_cc_digits; uint16_t crypt_read_callback(uint32_t addr); uint8_t pdr1_input_r(); diff --git a/src/mame/layout/critcrsh.lay b/src/mame/layout/critcrsh.lay new file mode 100644 index 00000000000..3e57192a1e9 --- /dev/null +++ b/src/mame/layout/critcrsh.lay @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 8afd2503ebca2344690b7265052d334ded2d34f9 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Thu, 17 Jun 2021 03:03:14 +1000 Subject: rx78: fixed regression when there's no cart in. --- src/mame/drivers/rx78.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/rx78.cpp b/src/mame/drivers/rx78.cpp index 930d14a32ba..cd1fc360f85 100644 --- a/src/mame/drivers/rx78.cpp +++ b/src/mame/drivers/rx78.cpp @@ -173,9 +173,11 @@ uint32_t rx78_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, laycol[BIT(m_pal_reg[6], j)] |= m_pal_reg[j]; // This fixes text in Space Enemy - for (u8 j = 0; j < 6; j++) - if (BIT(layers, j)) - if (!m_pal_reg[j]) laycol[0] = 0; + if (m_pal_reg[6]) + for (u8 j = 0; j < 6; j++) + if (BIT(layers, j)) + if (!m_pal_reg[j]) + laycol[0] = 0; u8 color = laycol[1] ? laycol[1] : (laycol[0] ? laycol[0] : m_background); bitmap.pix(y+bordery, x+i+borderx) = color; -- cgit v1.2.3 From 0f17b85baf6e5f396c14f7188904488355bdf607 Mon Sep 17 00:00:00 2001 From: tim lindner Date: Wed, 16 Jun 2021 10:13:56 -0700 Subject: mc10.cpp: Converted expansion port to slot device and removed fake machines. (#8184) --- scripts/src/bus.lua | 18 ++ scripts/target/mame/mess.lua | 43 ++-- src/devices/bus/mc10/mc10_cart.cpp | 230 ++++++++++++++++++++ src/devices/bus/mc10/mc10_cart.h | 118 ++++++++++ src/devices/bus/mc10/mcx128.cpp | 371 +++++++++++++++++++++++++++++++ src/devices/bus/mc10/mcx128.h | 15 ++ src/devices/bus/mc10/pak.cpp | 69 ++++++ src/devices/bus/mc10/pak.h | 37 ++++ src/devices/bus/mc10/ram.cpp | 78 +++++++ src/devices/bus/mc10/ram.h | 14 ++ src/mame/drivers/mc10.cpp | 431 +++++++++++-------------------------- src/mame/mame.lst | 2 - 12 files changed, 1093 insertions(+), 333 deletions(-) create mode 100644 src/devices/bus/mc10/mc10_cart.cpp create mode 100644 src/devices/bus/mc10/mc10_cart.h create mode 100644 src/devices/bus/mc10/mcx128.cpp create mode 100644 src/devices/bus/mc10/mcx128.h create mode 100644 src/devices/bus/mc10/pak.cpp create mode 100644 src/devices/bus/mc10/pak.h create mode 100644 src/devices/bus/mc10/ram.cpp create mode 100644 src/devices/bus/mc10/ram.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 9258a9ea108..88345bbc04e 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1747,6 +1747,24 @@ if (BUSES["MTX"]~=null) then end +--------------------------------------------------- +-- +--@src/devices/bus/mc10/mc10_cart.h,BUSES["MC10"] = true +--------------------------------------------------- +if (BUSES["MC10"]~=null) then + files { + MAME_DIR .. "src/devices/bus/mc10/mc10_cart.cpp", + MAME_DIR .. "src/devices/bus/mc10/mc10_cart.h", + MAME_DIR .. "src/devices/bus/mc10/mcx128.cpp", + MAME_DIR .. "src/devices/bus/mc10/mcx128.h", + MAME_DIR .. "src/devices/bus/mc10/pak.cpp", + MAME_DIR .. "src/devices/bus/mc10/pak.h", + MAME_DIR .. "src/devices/bus/mc10/ram.cpp", + MAME_DIR .. "src/devices/bus/mc10/ram.h", + } +end + + --------------------------------------------------- -- --@src/devices/bus/kc/kc.h,BUSES["KC"] = true diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index d7384d21b45..dc299592c17 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -831,25 +831,25 @@ BUSES["ACORN"] = true BUSES["ADAM"] = true BUSES["ADAMNET"] = true BUSES["ADB"] = true +BUSES["AMIGA_KEYBOARD"] = true BUSES["APF"] = true BUSES["APRICOT_EXPANSION"] = true BUSES["APRICOT_KEYBOARD"] = true BUSES["AQUARIUS"] = true -BUSES["AMIGA_KEYBOARD"] = true BUSES["ARCADIA"] = true BUSES["ASTROCADE"] = true BUSES["ATA"] = true -BUSES["BBC_FDC"] = true +BUSES["BBC_1MHZBUS"] = true BUSES["BBC_ANALOGUE"] = true BUSES["BBC_CART"] = true BUSES["BBC_EXP"] = true +BUSES["BBC_FDC"] = true BUSES["BBC_INTERNAL"] = true BUSES["BBC_JOYPORT"] = true BUSES["BBC_MODEM"] = true -BUSES["BBC_1MHZBUS"] = true +BUSES["BBC_ROM"] = true BUSES["BBC_TUBE"] = true BUSES["BBC_USERPORT"] = true -BUSES["BBC_ROM"] = true BUSES["BML3"] = true BUSES["BW2"] = true BUSES["C64"] = true @@ -861,8 +861,8 @@ BUSES["CGENIE_EXPANSION"] = true BUSES["CGENIE_PARALLEL"] = true BUSES["CHANNELF"] = true BUSES["COCO"] = true -BUSES["COLECO_CONTROLLER"] = true BUSES["COLECO_CART"] = true +BUSES["COLECO_CONTROLLER"] = true BUSES["COMPIS_GRAPHICS"] = true BUSES["COMPUCOLOR"] = true BUSES["COMX35"] = true @@ -871,10 +871,10 @@ BUSES["CRVISION"] = true BUSES["DMV"] = true BUSES["ECBBUS"] = true BUSES["ECONET"] = true -BUSES["EKARA"] = true BUSES["EINSTEIN_USERPORT"] = true -BUSES["ELECTRON"] = true +BUSES["EKARA"] = true BUSES["ELECTRON_CART"] = true +BUSES["ELECTRON"] = true BUSES["EP64"] = true BUSES["EPSON_SIO"] = true BUSES["FMT_SCSI"] = true @@ -885,38 +885,39 @@ BUSES["GBA"] = true BUSES["GENERIC"] = true BUSES["GIO64"] = true BUSES["HEXBUS"] = true -BUSES["HPHIL"] = true +BUSES["HP_IPC_IO"] = true +BUSES["HP80_IO"] = true +BUSES["HP9845_IO"] = true BUSES["HPDIO"] = true +BUSES["HPHIL"] = true BUSES["IEEE488"] = true BUSES["IMI7000"] = true BUSES["INTELLEC4"] = true -BUSES["INTERPRO_SR"] = true BUSES["INTERPRO_KEYBOARD"] = true BUSES["INTERPRO_MOUSE"] = true -BUSES["INTV"] = true +BUSES["INTERPRO_SR"] = true BUSES["INTV_CTRL"] = true +BUSES["INTV"] = true BUSES["IQ151"] = true BUSES["ISA"] = true BUSES["ISBX"] = true BUSES["JAKKS_GAMEKEY"] = true -BUSES["HP80_IO"] = true -BUSES["HP9845_IO"] = true -BUSES["HP_IPC_IO"] = true BUSES["KC"] = true BUSES["LPCI"] = true BUSES["M5"] = true BUSES["MACKBD"] = true BUSES["MACPDS"] = true -BUSES["MIDI"] = true +BUSES["MC10"] = true BUSES["MEGADRIVE"] = true +BUSES["MIDI"] = true BUSES["MSX_SLOT"] = true BUSES["MTX"] = true BUSES["MULTIBUS"] = true BUSES["NASBUS"] = true -BUSES["NEOGEO"] = true BUSES["NEOGEO_CTRL"] = true -BUSES["NES"] = true +BUSES["NEOGEO"] = true BUSES["NES_CTRL"] = true +BUSES["NES"] = true BUSES["NEWBRAIN"] = true BUSES["NSCSI"] = true BUSES["NUBUS"] = true @@ -924,18 +925,18 @@ BUSES["O2"] = true BUSES["ORICEXT"] = true BUSES["P2000"] = true BUSES["PASOPIA"] = true -BUSES["PC1512"] = true -BUSES["PCE"] = true BUSES["PC_JOY"] = true BUSES["PC_KBD"] = true +BUSES["PC1512"] = true +BUSES["PCE"] = true BUSES["PET"] = true BUSES["PLUS4"] = true BUSES["POFO"] = true BUSES["PSI_KEYBOARD"] = true BUSES["PSX_CONTROLLER"] = true BUSES["PSX_PARALLEL"] = true -BUSES["QL"] = true BUSES["QBUS"] = true +BUSES["QL"] = true BUSES["RS232"] = true BUSES["RTPC_KBD"] = true BUSES["S100"] = true @@ -954,8 +955,8 @@ BUSES["SG1000_EXP"] = true BUSES["SGIKBD"] = true BUSES["SMS_CTRL"] = true BUSES["SMS_EXP"] = true -BUSES["SNES"] = true BUSES["SNES_CTRL"] = true +BUSES["SNES"] = true BUSES["SPC1000"] = true BUSES["SPECTRUM"] = true BUSES["SS50"] = true @@ -966,11 +967,11 @@ BUSES["SVI_SLOT"] = true BUSES["TANBUS"] = true BUSES["TATUNG_PIPE"] = true BUSES["THOMSON"] = true -BUSES["TMC600"] = true BUSES["TI8X"] = true BUSES["TI99"] = true BUSES["TI99X"] = true BUSES["TIKI100"] = true +BUSES["TMC600"] = true BUSES["TVC"] = true BUSES["UTS_KBD"] = true BUSES["VBOY"] = true diff --git a/src/devices/bus/mc10/mc10_cart.cpp b/src/devices/bus/mc10/mc10_cart.cpp new file mode 100644 index 00000000000..f7858a087bc --- /dev/null +++ b/src/devices/bus/mc10/mc10_cart.cpp @@ -0,0 +1,230 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +/********************************************************************* + + mc10cart.cpp + + MC-10 / Alice expansion slot - typically used for the 16K external + RAM expansion. + + MC-10 and Alice pinout listing + --- ------- --- ------- + 1 GND 18 A6 + 2 GND 19 A7 + 3 D0 20 A8 + 4 D1 21 A9 + 5 D2 22 A10 + 6 D3 23 A11 + 7 D4 24 A12 + 8 D5 25 A13 + 9 D6 26 A14 + 10 D7 27 A15 + 11 R/!W 28 E + 12 A0 29 SEL + 13 A1 30 RESET + 14 A2 31 !NMI + 15 A3 32 +5V + 16 A3 33 GND + 17 A5 34 GND + + SEL is an input to the MC-10 that allows the cartridge to remove + the internal chips from the bus. + +*********************************************************************/ + +#include "emu.h" +#include "mc10_cart.h" + +#include "mcx128.h" +#include "pak.h" +#include "ram.h" + +//#define VERBOSE 1 +#include "logmacro.h" + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE(MC10CART_SLOT, mc10cart_slot_device, "mc10cart_slot", "MC-10 Cartridge Slot") + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// mc10cart_slot_device - constructor +//------------------------------------------------- +mc10cart_slot_device::mc10cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, MC10CART_SLOT, tag, owner, clock), + device_single_card_slot_interface(mconfig, *this), + device_image_interface(mconfig, *this), + m_nmi_callback(*this), + m_cart(nullptr), + m_memspace(*this, finder_base::DUMMY_TAG, -1) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mc10cart_slot_device::device_start() +{ + m_nmi_callback.resolve_safe(); + m_cart = get_card_device(); +} + +//------------------------------------------------- +// set_nmi_line +//------------------------------------------------- + +void mc10cart_slot_device::set_nmi_line(int state) +{ + m_nmi_callback(state); +} + +//------------------------------------------------- +// call_load +//------------------------------------------------- + +image_init_result mc10cart_slot_device::call_load() +{ + if (!m_cart) + return image_init_result::PASS; + + memory_region *romregion(loaded_through_softlist() ? memregion("rom") : nullptr); + if (loaded_through_softlist() && !romregion) + { + seterror(IMAGE_ERROR_INVALIDIMAGE, "Software list item has no 'rom' data area"); + return image_init_result::FAIL; + } + + u32 const len(loaded_through_softlist() ? romregion->bytes() : length()); + if (len > m_cart->max_rom_length()) + { + seterror(IMAGE_ERROR_UNSUPPORTED, "Unsupported cartridge size"); + return image_init_result::FAIL; + } + + if (!loaded_through_softlist()) + { + LOG("Allocating %u byte cartridge ROM region\n", len); + romregion = machine().memory().region_alloc(subtag("rom").c_str(), len, 1, ENDIANNESS_BIG); + u32 const cnt(fread(romregion->base(), len)); + if (cnt != len) + { + seterror(IMAGE_ERROR_UNSPECIFIED, "Error reading cartridge file"); + return image_init_result::FAIL; + } + } + + return m_cart->load(); +} + +//------------------------------------------------- +// get_default_card_software +//------------------------------------------------- + +std::string mc10cart_slot_device::get_default_card_software(get_default_card_software_hook &hook) const +{ + return software_get_default_slot("pak"); +} + +//************************************************************************** +// DEVICE MC-10 CART INTERFACE - Implemented by devices that plug into +// MC-10 cartridge slots +//************************************************************************** + +template class device_finder; +template class device_finder; + +//------------------------------------------------- +// device_mc10cart_interface - constructor +//------------------------------------------------- + +device_mc10cart_interface::device_mc10cart_interface(const machine_config &mconfig, device_t &device) + : device_interface(device, "mc10cart") + , m_owning_slot(nullptr) +{ +} + +//------------------------------------------------- +// ~device_mc10cart_interface - destructor +//------------------------------------------------- + +device_mc10cart_interface::~device_mc10cart_interface() +{ +} + +//------------------------------------------------- +// interface_config_complete +//------------------------------------------------- + +void device_mc10cart_interface::interface_config_complete() +{ + m_owning_slot = dynamic_cast(device().owner()); +} + +//------------------------------------------------- +// interface_pre_start +//------------------------------------------------- + +void device_mc10cart_interface::interface_pre_start() +{ + if (!m_owning_slot) + throw emu_fatalerror("Expected device().owner() to be of type mc10cart_slot_device"); +} + +/*------------------------------------------------- + max_rom_length +-------------------------------------------------*/ + +int device_mc10cart_interface::max_rom_length() const +{ + return 0; +} + +/*------------------------------------------------- + load +-------------------------------------------------*/ + +image_init_result device_mc10cart_interface::load() +{ + return image_init_result::FAIL; +} + +//------------------------------------------------- +// mc10_cart_add_basic_devices +//------------------------------------------------- + +void mc10_cart_add_basic_devices(device_slot_interface &device) +{ + // basic devices + device.option_add("mcx128", MC10_PAK_MCX128); + device.option_add("pak", MC10_PAK); + device.option_add("ram", MC10_PAK_RAM); +} + +//------------------------------------------------- +// alice_cart_add_basic_devices +//------------------------------------------------- + +void alice_cart_add_basic_devices(device_slot_interface &device) +{ + // basic devices + device.option_add("alice128", ALICE_PAK_MCX128); + device.option_add("pak", MC10_PAK); + device.option_add("ram", MC10_PAK_RAM); +} + +//------------------------------------------------- +// alice32_cart_add_basic_devices +//------------------------------------------------- + +void alice32_cart_add_basic_devices(device_slot_interface &device) +{ + // basic devices + device.option_add("pak", MC10_PAK); + device.option_add("ram", MC10_PAK_RAM); +} diff --git a/src/devices/bus/mc10/mc10_cart.h b/src/devices/bus/mc10/mc10_cart.h new file mode 100644 index 00000000000..eba93284325 --- /dev/null +++ b/src/devices/bus/mc10/mc10_cart.h @@ -0,0 +1,118 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +/********************************************************************* + + mc10_cart.h + + MC-10 / Alice cartridge management + +*********************************************************************/ + +#ifndef MAME_BUS_MC10_MC10CART_H +#define MAME_BUS_MC10_MC10CART_H + +#pragma once + +#include "softlist_dev.h" + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + + +// ======================> mc10cart_slot_device +class device_mc10cart_interface; + +class mc10cart_slot_device final : public device_t, + public device_single_card_slot_interface, + public device_image_interface +{ +public: + + // construction/destruction + template + mc10cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, T &&opts, const char *dflt) + : mc10cart_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } + + mc10cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + // inline configuration + template void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward(tag), spacenum); } + auto nmi_callback() { return m_nmi_callback.bind(); } + + // address map manipulations + address_space &memspace() const { return *m_memspace; }; + + // device-level overrides + virtual void device_start() override; + + // image-level overrides + virtual image_init_result call_load() override; + virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); } + + virtual iodevice_t image_type() const noexcept override { return IO_CARTSLOT; } + + virtual bool is_readable() const noexcept override { return true; } + virtual bool is_writeable() const noexcept override { return false; } + virtual bool is_creatable() const noexcept override { return false; } + virtual bool must_be_loaded() const noexcept override { return false; } + virtual bool is_reset_on_load() const noexcept override { return true; } + virtual const char *image_interface() const noexcept override { return "mc10_cart"; } + virtual const char *file_extensions() const noexcept override { return "mcc,rom"; } + + // manipulation of nmi line + void set_nmi_line(int state); + devcb_write_line m_nmi_callback; + + // slot interface overrides + virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override; + +private: + + // cartridge + device_mc10cart_interface *m_cart; + +protected: + required_address_space m_memspace; +}; + +// device type definition +DECLARE_DEVICE_TYPE(MC10CART_SLOT, mc10cart_slot_device) + +class device_mc10cart_interface : public device_interface +{ +public: + // construction/destruction + virtual ~device_mc10cart_interface(); + + virtual int max_rom_length() const; + virtual image_init_result load(); + +protected: + void raise_cart_nmi() { m_owning_slot->set_nmi_line(ASSERT_LINE); } + void lower_cart_nmi() { m_owning_slot->set_nmi_line(CLEAR_LINE); } + + virtual void interface_config_complete() override; + virtual void interface_pre_start() override; + + device_mc10cart_interface(const machine_config &mconfig, device_t &device); + + // accessors for containers + mc10cart_slot_device &owning_slot() const { assert(m_owning_slot); return *m_owning_slot; } + +private: + mc10cart_slot_device * m_owning_slot; +}; + +// methods for configuring MC-10 slot devices +void mc10_cart_add_basic_devices(device_slot_interface &device); +void alice_cart_add_basic_devices(device_slot_interface &device); +void alice32_cart_add_basic_devices(device_slot_interface &device); + +#endif // MAME_BUS_MC10_MC10CART_H diff --git a/src/devices/bus/mc10/mcx128.cpp b/src/devices/bus/mc10/mcx128.cpp new file mode 100644 index 00000000000..32c9239afb5 --- /dev/null +++ b/src/devices/bus/mc10/mcx128.cpp @@ -0,0 +1,371 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +/*************************************************************************** + + mcx128.cpp + + Code for emulating Darren Atkinson's MCX-128 cartridge + + Features: + 128K of RAM expansion + 16K of ROM expansion + + New MC-10 memory map defined by this cartridge: + + 0000 - 0003 6803 Ports + 0004 - 0007 Expansion RAM + 0008 - 000E 6803 Status / Control + 000F Expansion RAM + 0010 - 0013 6803 UART + 0014 6803 RAM Control Reg + 0015 - 001F Unused + 0020 - 007F Expansion RAM + 0080 - 00FF On-chip CPU RAM / Expansion RAM + 0100 - 3FFF Expansion RAM + 4000 - 5FFF Built-In RAM / Expansion RAM + 6000 - BEFF Expansion RAM + BF00 RAM Bank Control Reg + BF01 ROM Map Control Reg + BF80 - BFFF Keyboard / VDG / Sound + C000 - DFFF EPROM or Expansion RAM + E000 - FFFF Built-in ROM, EPROM or Expansion RAM + + Deficiency: + + * Writing to 6803 chip RAM at $80 to $ff should be mirrored + to external RAM. + +***************************************************************************/ + +#include "emu.h" +#include "mcx128.h" + +//#define VERBOSE (LOG_GENERAL) +#include "logmacro.h" + + +ROM_START(mc10_mcx128) + ROM_REGION(0x4000, "eprom", ROMREGION_ERASE00) + ROM_LOAD("mcx128bas.rom", 0x0000, 0x4000, CRC(11202e4b) SHA1(36c30d0f198a1bffee88ef29d92f2401447a91f4)) +ROM_END + +ROM_START(alice_mcx128) + ROM_REGION(0x4000, "eprom", ROMREGION_ERASE00) + ROM_LOAD("alice128bas.rom", 0x0000, 0x4000, CRC(a737544a) SHA1(c8fd92705fc42deb6a0ffac6274e27fd61ecd4cc)) +ROM_END + +//************************************************************************** +// TYPE DECLARATIONS +//************************************************************************** + +// ======================> mc10_pak_device + +class mc10_pak_mcx128_device : + public device_t, + public device_mc10cart_interface +{ +public: + // construction/destruction + mc10_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + // construction/destruction + mc10_pak_mcx128_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_post_load() override; + + virtual const tiny_rom_entry *device_rom_region() const override + { + return ROM_NAME(mc10_mcx128); + } + + u8 control_register_read(offs_t offset); + void control_register_write(offs_t offset, u8 data); + + void write_ram_mirror(address_space &space, offs_t offset, u8 data); + + void view_map0(address_map &map); + void view_map1(address_map &map); + void view_map2(address_map &map); + void view_map3(address_map &map); + void view_map4(address_map &map); + void view_map5(address_map &map); + void view_map6(address_map &map); + void view_map7(address_map &map); + + +private: + memory_share_creator m_share; + memory_view m_view; + memory_bank_array_creator<8> m_bank; + uint8_t ram_bank_cr; + uint8_t rom_map_cr; + + void update_banks(); + +}; + +DEFINE_DEVICE_TYPE_PRIVATE(MC10_PAK_MCX128, device_mc10cart_interface, mc10_pak_mcx128_device, "mc10_mcx128", "Darren Atkinson's MCX-128 cartridge") + +//------------------------------------------------- +// mc10_pak_device - constructor +//------------------------------------------------- + +mc10_pak_mcx128_device::mc10_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + :mc10_pak_mcx128_device(mconfig, MC10_PAK_MCX128, tag, owner, clock) +{ +} + +mc10_pak_mcx128_device::mc10_pak_mcx128_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock) + , device_mc10cart_interface(mconfig, *this) + , m_share(*this, "ext_ram", 1024*128, ENDIANNESS_BIG) + , m_view(*this, "mcx_view") + , m_bank(*this, "bank%u", 0U) +{ +} + +void mc10_pak_mcx128_device::view_map0(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror)); + map(0x6000, 0xbeff).bankrw("bank4"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xfeff).rom().region("eprom",0x0000).bankw("bank5"); + map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7"); +} + +void mc10_pak_mcx128_device::view_map1(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror)); + map(0x6000, 0xbeff).bankrw("bank4"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xdfff).bankrw("bank5"); + map(0xe000, 0xfeff).rom().region("eprom",0x2000).bankw("bank6"); + map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7"); +} + +void mc10_pak_mcx128_device::view_map2(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror)); + map(0x6000, 0xbeff).bankrw("bank4"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xdfff).bankrw("bank5"); + map(0xe000, 0xfeff).bankw("bank6"); + map(0xff00, 0xffff).bankw("bank7"); +// 0xe000, 0xffff: read internal ROM +} + +void mc10_pak_mcx128_device::view_map3(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror)); + map(0x6000, 0xbeff).bankrw("bank4"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xfeff).bankrw("bank5"); + map(0xff00, 0xffff).bankrw("bank7"); +} + +void mc10_pak_mcx128_device::view_map4(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0xbeff).bankrw("bank3"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xfeff).rom().region("eprom",0x0000).bankw("bank5"); + map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7"); +} + +void mc10_pak_mcx128_device::view_map5(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0xbeff).bankrw("bank3"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xdfff).bankrw("bank5"); + map(0xe000, 0xfeff).rom().region("eprom",0x2000).bankw("bank6"); + map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7"); +} + +void mc10_pak_mcx128_device::view_map6(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0xbeff).bankrw("bank3"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xdfff).bankrw("bank5"); + map(0xe000, 0xfeff).bankw("bank6"); + map(0xff00, 0xffff).bankw("bank7"); +// 0xe000, 0xffff: read internal ROM +} + +void mc10_pak_mcx128_device::view_map7(address_map &map) +{ + map(0x0004, 0x0007).bankrw("bank0"); + map(0x000f, 0x000f).bankrw("bank1"); + map(0x0020, 0x3fff).bankrw("bank2"); + map(0x4000, 0xbeff).bankrw("bank3"); + map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write)); + map(0xc000, 0xfeff).bankrw("bank5"); + map(0xff00, 0xffff).bankrw("bank7"); +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mc10_pak_mcx128_device::device_start() +{ + save_item(NAME(ram_bank_cr)); + save_item(NAME(rom_map_cr)); + + // 0x0004 - 0x0007 + m_bank[0]->configure_entry(0, &m_share[0x00004]); + m_bank[0]->configure_entry(1, &m_share[0x10004]); + + // 0x000f - 0x000f + m_bank[1]->configure_entry(0, &m_share[0x0000f]); + m_bank[1]->configure_entry(1, &m_share[0x1000f]); + + // 0x0000 - 0x3fff + m_bank[2]->configure_entry(0, &m_share[0x00020]); + m_bank[2]->configure_entry(1, &m_share[0x10020]); + + // 0x4000 - 0x5fff + m_bank[3]->configure_entry(0, &m_share[0x08000]); + m_bank[3]->configure_entry(1, &m_share[0x18000]); + + // 0x6000 - 0xbeff + m_bank[4]->configure_entry(0, &m_share[0x0a000]); + m_bank[4]->configure_entry(1, &m_share[0x1a000]); + + // 0xc000 - 0xdfff + m_bank[5]->configure_entry(0, &m_share[0x04000]); + m_bank[5]->configure_entry(1, &m_share[0x14000]); + + // 0xe000 - 0xffff + m_bank[6]->configure_entry(0, &m_share[0x06000]); + m_bank[6]->configure_entry(1, &m_share[0x16000]); + + // 0xff00 - 0xffff + m_bank[7]->configure_entry(0, &m_share[0x07f00]); + m_bank[7]->configure_entry(1, &m_share[0x07f00]); + + owning_slot().memspace().install_view(0x0000, 0xffff, m_view); + + m_view[0].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map0); + m_view[1].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map1); + m_view[2].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map2); + m_view[3].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map3); + m_view[4].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map4); + m_view[5].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map5); + m_view[6].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map6); + m_view[7].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map7); +} + +//------------------------------------------------- +// device_reset - device-specific startup +//------------------------------------------------- + +void mc10_pak_mcx128_device::device_reset() +{ + ram_bank_cr = 0; + rom_map_cr = 0; + update_banks(); +} + +void mc10_pak_mcx128_device::device_post_load() +{ + update_banks(); +} + +void mc10_pak_mcx128_device::write_ram_mirror(address_space &space, offs_t offset, u8 data) +{ + std::optional cur_slot = m_view.entry(); + m_share[0x08000+offset] = data; + + if (cur_slot.has_value()) + { + int cur_slot_int = *cur_slot; + m_view.disable(); + space.write_byte(0x4000+offset, data); + m_view.select(cur_slot_int); + } +} + +u8 mc10_pak_mcx128_device::control_register_read(offs_t offset) +{ + if (offset==0) + return ram_bank_cr & 0x03; + + return rom_map_cr & 0x03; +} + +void mc10_pak_mcx128_device::control_register_write(offs_t offset, u8 data) +{ + if (offset==0) + ram_bank_cr = data; + else + rom_map_cr = data; + + update_banks(); +} + +void mc10_pak_mcx128_device::update_banks() +{ + int bank0 = ram_bank_cr & 0x01; + int bank1 = (ram_bank_cr & 0x02) >> 1; + + m_bank[0]->set_entry(bank0); + m_bank[1]->set_entry(bank0); + m_bank[2]->set_entry(bank0); + m_bank[3]->set_entry(bank1); + m_bank[4]->set_entry(bank1); + m_bank[5]->set_entry(bank0); + m_bank[6]->set_entry(bank0); + m_bank[7]->set_entry(bank0); + + m_view.select((bank1 << 2) | (rom_map_cr & 0x03)); + LOG("view select: %d, bank cr: %d\n", (bank1 << 2) | (rom_map_cr & 0x03), ram_bank_cr & 0x03 ); +} + +class alice_pak_mcx128_device : public mc10_pak_mcx128_device +{ +public: + // construction/destruction + alice_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + // device-level overrides + virtual const tiny_rom_entry *device_rom_region() const override + { + return ROM_NAME(alice_mcx128); + } +}; + +//------------------------------------------------- +// mc10_pak_device - constructor +//------------------------------------------------- + +alice_pak_mcx128_device::alice_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : mc10_pak_mcx128_device(mconfig, ALICE_PAK_MCX128, tag, owner, clock) +{ +} + +DEFINE_DEVICE_TYPE_PRIVATE(ALICE_PAK_MCX128, device_mc10cart_interface, alice_pak_mcx128_device, "alice_mcx128", "Darren Atkinson's MCX-128 cartridge (Alice ROM)") diff --git a/src/devices/bus/mc10/mcx128.h b/src/devices/bus/mc10/mcx128.h new file mode 100644 index 00000000000..29ae63b64e2 --- /dev/null +++ b/src/devices/bus/mc10/mcx128.h @@ -0,0 +1,15 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +#ifndef MAME_BUS_MC10_MC10_MCX128_H +#define MAME_BUS_MC10_MC10_MCX128_H + +#pragma once + +#include "mc10_cart.h" + +// device type definition +DECLARE_DEVICE_TYPE(MC10_PAK_MCX128, device_mc10cart_interface) +DECLARE_DEVICE_TYPE(ALICE_PAK_MCX128, device_mc10cart_interface) + +#endif // MAME_BUS_MC10_MC10_MCX128_H + diff --git a/src/devices/bus/mc10/pak.cpp b/src/devices/bus/mc10/pak.cpp new file mode 100644 index 00000000000..8e27d58ab8b --- /dev/null +++ b/src/devices/bus/mc10/pak.cpp @@ -0,0 +1,69 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +/*************************************************************************** + + pak.cpp + + Code for emulating standard MC-10 cartridges with only ROM + +***************************************************************************/ + +#include "emu.h" +#include "pak.h" + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE(MC10_PAK, mc10_pak_device, "mc10pak", "MC-10 Program PAK") + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// mc10_pak_device - constructor +//------------------------------------------------- +mc10_pak_device::mc10_pak_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock) + , device_mc10cart_interface(mconfig, *this) +{ +} + +mc10_pak_device::mc10_pak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : mc10_pak_device(mconfig, MC10_PAK, tag, owner, clock) +{ +} + +//------------------------------------------------- +// max_rom_length - device-specific startup +//------------------------------------------------- + +int mc10_pak_device::max_rom_length() const +{ + return 1024 * 16; +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mc10_pak_device::device_start() +{ +} + +//------------------------------------------------- +// load - install rom region +//------------------------------------------------- + +image_init_result mc10_pak_device::load() +{ + // if the host has supplied a ROM space, install it + memory_region *const romregion(memregion("^rom")); + if (romregion) + owning_slot().memspace().install_rom(0x5000, 0x5000 + romregion->bytes(), romregion->base()); + else + return image_init_result::FAIL; + + return image_init_result::PASS; +} diff --git a/src/devices/bus/mc10/pak.h b/src/devices/bus/mc10/pak.h new file mode 100644 index 00000000000..797cea2f691 --- /dev/null +++ b/src/devices/bus/mc10/pak.h @@ -0,0 +1,37 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +#ifndef MAME_BUS_MC10_MC10_PAK_H +#define MAME_BUS_MC10_MC10_PAK_H + +#pragma once + +#include "mc10_cart.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> mc10_pak_device + +class mc10_pak_device : + public device_t, + public device_mc10cart_interface +{ +public: + // construction/destruction + mc10_pak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual int max_rom_length() const override; + virtual image_init_result load() override; + +protected: + mc10_pak_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + // device-level overrides + virtual void device_start() override; +}; + +// device type definitions +DECLARE_DEVICE_TYPE(MC10_PAK, mc10_pak_device) + +#endif // MAME_BUS_MC10_MC10_PAK_H diff --git a/src/devices/bus/mc10/ram.cpp b/src/devices/bus/mc10/ram.cpp new file mode 100644 index 00000000000..f6a6f488955 --- /dev/null +++ b/src/devices/bus/mc10/ram.cpp @@ -0,0 +1,78 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +/*************************************************************************** + + ram.cpp + + Code for emulating the Radio Shack 16K RAM Cartridge + +***************************************************************************/ + +#include "emu.h" +#include "ram.h" + +// #include "machine/ram.h" + +// #define VERBOSE (LOG_GENERAL ) +#include "logmacro.h" + + +//************************************************************************** +// TYPE DECLARATIONS +//************************************************************************** + +namespace +{ + // ======================> mc10_pak_device + + class mc10_pak_ram_device : + public device_t, + public device_mc10cart_interface + { + public: + // construction/destruction + mc10_pak_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + protected: + // device-level overrides + virtual void device_start() override; + private: + memory_share_creator m_share; + }; +}; + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(MC10_PAK_RAM, device_mc10cart_interface, mc10_pak_ram_device, "mc10pakram", "Radio Shack 16K RAM Cartridge") + + + +//------------------------------------------------- +// mc10_pak_device - constructor +//------------------------------------------------- + +mc10_pak_ram_device::mc10_pak_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, MC10_PAK_RAM, tag, owner, clock) + , device_mc10cart_interface(mconfig, *this) + , m_share(*this, "ext_ram", 1024*16, ENDIANNESS_BIG) +{ +} + + + +//************************************************************************** +// MACHINE FRAGMENTS AND ADDRESS MAPS +//************************************************************************** + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mc10_pak_ram_device::device_start() +{ + owning_slot().memspace().install_ram(0x5000, 0x8fff, &m_share[0]); +} diff --git a/src/devices/bus/mc10/ram.h b/src/devices/bus/mc10/ram.h new file mode 100644 index 00000000000..e32530f81e6 --- /dev/null +++ b/src/devices/bus/mc10/ram.h @@ -0,0 +1,14 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +#ifndef MAME_BUS_MC10_MC10_RAM_H +#define MAME_BUS_MC10_MC10_RAM_H + +#pragma once + +#include "mc10_cart.h" + +// device type definition +DECLARE_DEVICE_TYPE(MC10_PAK_RAM, device_mc10cart_interface) + +#endif // MAME_BUS_MC10_MC10_RAM_H + diff --git a/src/mame/drivers/mc10.cpp b/src/mame/drivers/mc10.cpp index c389f7055c9..82764d6f977 100644 --- a/src/mame/drivers/mc10.cpp +++ b/src/mame/drivers/mc10.cpp @@ -4,16 +4,14 @@ TRS-80 Radio Shack MicroColor Computer - May 2020: Added emulation for Darren Atkinson's MCX 128. - ***************************************************************************/ - #include "emu.h" #include "cpu/m6800/m6801.h" #include "imagedev/cassette.h" #include "imagedev/printer.h" +#include "bus/mc10/mc10_cart.h" #include "bus/rs232/rs232.h" #include "machine/ram.h" #include "machine/timer.h" @@ -26,7 +24,6 @@ #include "formats/coco_cas.h" - namespace { @@ -41,33 +38,30 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_ram(*this, RAM_TAG) - , m_bank1(*this, "bank1") - , m_bank2(*this, "bank2") + , m_mc10cart(*this, "ext") , m_mc6847(*this, "mc6847") - , m_ef9345(*this, "ef9345") , m_dac(*this, "dac") , m_cassette(*this, "cassette") , m_rs232(*this, "rs232") , m_pb(*this, "pb%u", 0U) - { } + {} - void alice90(machine_config &config); - void alice32(machine_config &config); + void mc10_base(machine_config &config); + void mc10_video(machine_config &config); void mc10(machine_config &config); + void alice(machine_config &config); + void mc10_bfff_w_dac(uint8_t data); + uint8_t mc10_bfff_r(); protected: - uint8_t mc10_bfff_r(); void mc10_bfff_w(uint8_t data); uint8_t mc10_port1_r(); void mc10_port1_w(uint8_t data); uint8_t mc10_port2_r(); void mc10_port2_w(uint8_t data); - uint8_t alice90_bfff_r(); - void alice32_bfff_w(uint8_t data); uint8_t mc6847_videoram_r(offs_t offset); - TIMER_DEVICE_CALLBACK_MEMBER(alice32_scanline); // device-level overrides virtual void driver_start() override; @@ -75,74 +69,48 @@ protected: required_device m_maincpu; required_device m_ram; - required_memory_bank m_bank1; - optional_memory_bank m_bank2; + optional_device m_mc10cart; - uint8_t *m_ram_base; - uint32_t m_ram_size; uint8_t m_keyboard_strobe; uint8_t m_port2; uint8_t read_keyboard_strobe(bool single_line); + mc10cart_slot_device &mc10cart() { return *m_mc10cart; } + private: - void alice32_mem(address_map &map); - void alice90_mem(address_map &map); void mc10_mem(address_map &map); optional_device m_mc6847; - optional_device m_ef9345; required_device m_dac; required_device m_cassette; required_device m_rs232; required_ioport_array<8> m_pb; }; -class mcx128_state : public mc10_state +class alice32_state : public mc10_state { public: - mcx128_state(const machine_config &mconfig, device_type type, const char *tag) + alice32_state(const machine_config &mconfig, device_type type, const char *tag) : mc10_state(mconfig, type, tag) - , m_mcx_ram(*this, "mcx_ram") - , m_mcx_cart_rom_base(*this, "cart") - , m_mcx_int_rom_base(*this, "maincpu") - , m_bank3(*this, "bank3") - , m_bank4r(*this, "bank4r") - , m_bank4w(*this, "bank4w") - , m_bank5r(*this, "bank5r") - , m_bank5w(*this, "bank5w") - , m_bank6r(*this, "bank6r") - , m_bank6w(*this, "bank6w") - { } - - void mcx128(machine_config &config); - -private: - uint8_t mcx128_bf00_r(offs_t offset); - void mcx128_bf00_w(offs_t offset, uint8_t data); + , m_ef9345(*this, "ef9345") + {} - void mcx128_mem(address_map &map); - void update_mcx128_banking(); + void alice32(machine_config &config); + void alice90(machine_config &config); + void alice32_bfff_w(uint8_t data); + uint8_t alice90_bfff_r(); +protected: // device-level overrides virtual void driver_start() override; - virtual void driver_reset() override; - required_device m_mcx_ram; - required_region_ptr m_mcx_cart_rom_base; - required_region_ptr m_mcx_int_rom_base; - required_memory_bank m_bank3; - required_memory_bank m_bank4r; - required_memory_bank m_bank4w; - required_memory_bank m_bank5r; - required_memory_bank m_bank5w; - required_memory_bank m_bank6r; - required_memory_bank m_bank6w; - - uint8_t *m_mcx_ram_base; - - uint8_t m_bank_control; - uint8_t m_map_control; + TIMER_DEVICE_CALLBACK_MEMBER(alice32_scanline); + required_device m_ef9345; + +private: + void alice32_mem(address_map &map); + void alice90_mem(address_map &map); }; /*************************************************************************** @@ -162,16 +130,16 @@ uint8_t mc10_state::read_keyboard_strobe(bool single_line) read = true; } } + return result; } - uint8_t mc10_state::mc10_bfff_r() { return read_keyboard_strobe(false); } -uint8_t mc10_state::alice90_bfff_r() +uint8_t alice32_state::alice90_bfff_r() { return read_keyboard_strobe(true); } @@ -186,119 +154,29 @@ void mc10_state::mc10_bfff_w(uint8_t data) m_mc6847->ag_w(BIT(data, 5)); m_mc6847->css_w(BIT(data, 6)); - // bit 7, dac output - m_dac->write(BIT(data, 7)); + mc10_bfff_w_dac(data); } -void mc10_state::alice32_bfff_w(uint8_t data) +void mc10_state::mc10_bfff_w_dac(uint8_t data) { // bit 7, dac output m_dac->write(BIT(data, 7)); } -/*************************************************************************** - $bf00: RAM Bank Control Register - 7 6 5 4 3 2 1 0 - | | | | | | | | - | | | | | | | +- Bank Selection for Page 0 - | | | | | | +--- Bank Selection for Page 1 - +-+-+-+-+-+----- N/C - $bf01: ROM Map Control Register - 7 6 5 4 3 2 1 0 | reading | writing | - | | | | | | | | 0 0 - 16K External ROM 16K RAM - | | | | | | | +-\_ 0 1 - 8K RAM / 8K External ROM 16K RAM - | | | | | | +---/ 1 0 - 8K RAM / 8K Internal ROM 16K RAM - | | | | | | 1 1 - 16K RAM 16K RAM - +-+-+-+-+-+--------N/C -***************************************************************************/ - -void mcx128_state::update_mcx128_banking() +void alice32_state::alice32_bfff_w(uint8_t data) { - int32_t bank_offset_page_0 = 0x10000 * BIT(m_bank_control,0); - int32_t bank_offset_page_1 = 0x10000 * BIT(m_bank_control,1); - - // 0x0000 - 0x3fff - m_bank1->set_base(m_mcx_ram_base + bank_offset_page_0 + 0); - - // 0x4000 - 0x4fff - if( bank_offset_page_1 == 0) - m_bank2->set_base(m_ram_base); /* internal 4K when page is 0 */ - else - m_bank2->set_base(m_mcx_ram_base + bank_offset_page_1 + 0x8000); - - // 0x5000 - 0xbeff - m_bank3->set_base(m_mcx_ram_base + bank_offset_page_1 + 0x8000 + 0x1000); - - // 0xc000 - 0xdfff - m_bank4w->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000); - - // 0xe000 - 0xfeff - m_bank5w->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x6000); - - // 0xff00 - 0xffff - m_bank6w->set_base(m_mcx_ram_base + 0 + 0x7f00); /* always bank 0 */ - - switch( m_map_control ) - { - case 0: - m_bank4r->set_base(m_mcx_cart_rom_base); - m_bank5r->set_base(m_mcx_cart_rom_base + 0x2000); - m_bank6r->set_entry(0); - break; - - case 1: - m_bank4r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000); - m_bank5r->set_base(m_mcx_cart_rom_base + 0x2000 + 0x2000); // invalid address, what should it be? - m_bank6r->set_entry(1); - break; - - case 2: - m_bank4r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000); - m_bank5r->set_base(m_mcx_int_rom_base); - m_bank6r->set_entry(2); - break; - - case 3: - m_bank4r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000); - m_bank5r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x6000); - m_bank6r->set_entry(3); /* always bank 0 */ - break; - - default: - // can't get here - break; - } -} - -uint8_t mcx128_state::mcx128_bf00_r(offs_t offset) -{ - if( (offset & 1) == 0 ) return m_bank_control; - - return m_map_control; -} - -void mcx128_state::mcx128_bf00_w(offs_t offset, uint8_t data) -{ - if( (offset & 1) == 0 ) - m_bank_control = data & 3; - else - m_map_control = data & 3; - - update_mcx128_banking(); + mc10_bfff_w_dac(data); } - /*************************************************************************** MC6803 I/O ***************************************************************************/ -/* keyboard strobe */ uint8_t mc10_state::mc10_port1_r() { return m_keyboard_strobe; } -/* keyboard strobe */ void mc10_state::mc10_port1_w(uint8_t data) { m_keyboard_strobe = data; @@ -329,7 +207,6 @@ void mc10_state::mc10_port2_w(uint8_t data) { // bit 0, cassette & printer output m_cassette->output( BIT(data, 0) ? +1.0 : -1.0); - m_rs232->write_txd(BIT(data, 0) ? 1 : 0); m_port2 = data; @@ -343,13 +220,14 @@ void mc10_state::mc10_port2_w(uint8_t data) uint8_t mc10_state::mc6847_videoram_r(offs_t offset) { if (offset == ~0) return 0xff; - m_mc6847->inv_w(BIT(m_ram_base[offset], 6)); - m_mc6847->as_w(BIT(m_ram_base[offset], 7)); - return m_ram_base[offset]; + uint8_t result = m_ram->read(offset); + m_mc6847->inv_w(BIT(result, 6)); + m_mc6847->as_w(BIT(result, 7)); + return result; } -TIMER_DEVICE_CALLBACK_MEMBER(mc10_state::alice32_scanline) +TIMER_DEVICE_CALLBACK_MEMBER(alice32_state::alice32_scanline) { m_ef9345->update_scanline((uint16_t)param); } @@ -358,73 +236,37 @@ TIMER_DEVICE_CALLBACK_MEMBER(mc10_state::alice32_scanline) DRIVER INIT ***************************************************************************/ - void mc10_state::driver_reset() { - /* initialize keyboard strobe */ m_keyboard_strobe = 0x00; } void mc10_state::driver_start() { - // call base device_start driver_device::driver_start(); - address_space &prg = m_maincpu->space(AS_PROGRAM); - - /* initialize memory */ - m_ram_base = m_ram->pointer(); - m_ram_size = m_ram->size(); - m_bank1->set_base(m_ram_base); + save_item(NAME(m_keyboard_strobe)); - /* initialize memory expansion */ - if (m_bank2) - { - if (m_ram_size == 20 * 1024) - m_bank2->set_base(m_ram_base + 0x1000); - else if (m_ram_size == 24 * 1024) - m_bank2->set_base(m_ram_base + 0x2000); - else if (m_ram_size != 32 * 1024) //ensure that is not alice90 - prg.nop_readwrite(0x5000, 0x8fff); - } + address_space &space = m_maincpu->space(AS_PROGRAM); + u32 ram_size = m_ram->size(); - /* register for state saving */ - save_item(NAME(m_keyboard_strobe)); + // don't step on hardware page at 0xbf00 + if (ram_size == 0x8000) + ram_size -= 0x100; - //for alice32 force port4 DDR to 0xff at startup - //if (!strcmp(machine().system().name, "alice32") || !strcmp(machine().system().name, "alice90")) - //m_maincpu->m6801_io_w(prg, 0x05, 0xff); + space.install_ram(0x4000, 0x4000+ram_size-1, m_ram->pointer()); } -void mcx128_state::driver_start() +void alice32_state::driver_start() { - // call base device_start driver_device::driver_start(); - /* initialize memory */ - m_ram_base = m_ram->pointer(); - m_ram_size = m_ram->size(); - - m_mcx_ram_base = m_mcx_ram->pointer(); - - save_item(NAME(m_bank_control)); - save_item(NAME(m_map_control)); - - m_bank6r->configure_entry(0, m_mcx_cart_rom_base + 0x3f00); - m_bank6r->configure_entry(1, m_mcx_cart_rom_base + 0x5f00); // invalid address, what should it be? - m_bank6r->configure_entry(2, m_mcx_int_rom_base + 0x1f00); - m_bank6r->configure_entry(3, m_mcx_ram_base + 0x7f00); -} - -void mcx128_state::driver_reset() -{ - // call base device_start - mc10_state::driver_reset(); + save_item(NAME(m_keyboard_strobe)); - m_bank_control = 0; - m_map_control = 0; + address_space &space = m_maincpu->space(AS_PROGRAM); + u32 ram_size = m_ram->size(); - update_mcx128_banking(); + space.install_ram(0x3000, 0x3000+ram_size-1, m_ram->pointer()); } /*************************************************************************** @@ -433,47 +275,28 @@ void mcx128_state::driver_reset() void mc10_state::mc10_mem(address_map &map) { - map(0x0100, 0x3fff).noprw(); /* unused */ - map(0x4000, 0x4fff).bankrw("bank1"); /* 4k internal ram */ - map(0x5000, 0x8fff).bankrw("bank2"); /* 16k memory expansion */ - map(0x9000, 0xbffe).noprw(); /* unused */ + // mc10 / alice: RAM start at 0x4000, installed in driver_start map(0xbfff, 0xbfff).rw(FUNC(mc10_state::mc10_bfff_r), FUNC(mc10_state::mc10_bfff_w)); - map(0xe000, 0xffff).rom().region("maincpu", 0x0000); /* ROM */ + map(0xe000, 0xffff).rom().region("maincpu", 0x0000); } -void mc10_state::alice32_mem(address_map &map) +void alice32_state::alice32_mem(address_map &map) { - map(0x0100, 0x2fff).noprw(); /* unused */ - map(0x3000, 0x4fff).bankrw("bank1"); /* 8k internal ram */ - map(0x5000, 0x8fff).bankrw("bank2"); /* 16k memory expansion */ - map(0x9000, 0xafff).noprw(); /* unused */ + // alice32: RAM start at 0x3000, installed in driver_start map(0xbf20, 0xbf29).rw(m_ef9345, FUNC(ef9345_device::data_r), FUNC(ef9345_device::data_w)); - map(0xbfff, 0xbfff).rw(FUNC(mc10_state::mc10_bfff_r), FUNC(mc10_state::alice32_bfff_w)); - map(0xc000, 0xffff).rom().region("maincpu", 0x0000); /* ROM */ + map(0xbfff, 0xbfff).rw(FUNC(mc10_state::mc10_bfff_r), FUNC(alice32_state::alice32_bfff_w)); + map(0xc000, 0xffff).rom().region("maincpu", 0x0000); } -void mc10_state::alice90_mem(address_map &map) +void alice32_state::alice90_mem(address_map &map) { - map(0x0100, 0x2fff).noprw(); /* unused */ - map(0x3000, 0xafff).bankrw("bank1"); /* 32k internal ram */ + // alice90: RAM start at 0x3000, installed in driver_start map(0xbf20, 0xbf29).rw(m_ef9345, FUNC(ef9345_device::data_r), FUNC(ef9345_device::data_w)); - map(0xbfff, 0xbfff).rw(FUNC(mc10_state::alice90_bfff_r), FUNC(mc10_state::alice32_bfff_w)); - map(0xc000, 0xffff).rom().region("maincpu", 0x0000); /* ROM */ + map(0xbfff, 0xbfff).rw(FUNC(alice32_state::alice90_bfff_r), FUNC(alice32_state::alice32_bfff_w)); + map(0xc000, 0xffff).rom().region("maincpu", 0x0000); } -void mcx128_state::mcx128_mem(address_map &map) -{ - map(0x0000, 0x3fff).bankrw("bank1"); - map(0x4000, 0x4fff).bankrw("bank2"); - map(0x5000, 0xbeff).bankrw("bank3"); - map(0xbf00, 0xbf01).rw(FUNC(mcx128_state::mcx128_bf00_r), FUNC(mcx128_state::mcx128_bf00_w)); - map(0xbf02, 0xbf7f).noprw(); /* unused */ - map(0xbf80, 0xbffe).noprw(); /* unused */ - map(0xbfff, 0xbfff).rw(FUNC(mcx128_state::mc10_bfff_r), FUNC(mcx128_state::mc10_bfff_w)); - map(0xc000, 0xdfff).bankr("bank4r").bankw("bank4w"); - map(0xe000, 0xfeff).bankr("bank5r").bankw("bank5w"); - map(0xff00, 0xffff).bankr("bank6r").bankw("bank6w"); -} + /*************************************************************************** INPUT PORTS @@ -659,7 +482,7 @@ DEVICE_INPUT_DEFAULTS_END MACHINE DRIVERS ***************************************************************************/ -void mc10_state::mc10(machine_config &config) +void mc10_state::mc10_base(machine_config &config) { /* basic machine hardware */ M6803(config, m_maincpu, XTAL(3'579'545)); /* 0,894886 MHz */ @@ -669,42 +492,68 @@ void mc10_state::mc10(machine_config &config) m_maincpu->in_p2_cb().set(FUNC(mc10_state::mc10_port2_r)); m_maincpu->out_p2_cb().set(FUNC(mc10_state::mc10_port2_w)); - /* video hardware */ - SCREEN(config, "screen", SCREEN_TYPE_RASTER); - - mc6847_ntsc_device &vdg(MC6847_NTSC(config, "mc6847", XTAL(3'579'545))); - vdg.set_screen("screen"); - vdg.input_callback().set(FUNC(mc10_state::mc6847_videoram_r)); - /* sound hardware */ SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.0625); CASSETTE(config, m_cassette); - m_cassette->set_formats(coco_cassette_formats); + m_cassette->set_formats(alice32_cassette_formats); m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED); m_cassette->add_route(ALL_OUTPUTS, "speaker", 0.05); m_cassette->set_interface("mc10_cass"); /* printer */ - rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "printer")); - rs232.set_option_device_input_defaults("printer", DEVICE_INPUT_DEFAULTS_NAME(printer)); + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "rs_printer")); + rs232.set_option_device_input_defaults("rs_printer", DEVICE_INPUT_DEFAULTS_NAME(printer)); +} +void mc10_state::mc10_video(machine_config &config) +{ /* internal ram */ - RAM(config, m_ram).set_default_size("20K").set_extra_options("4K"); + RAM(config, m_ram).set_default_size("4K").set_extra_options("8K,20K,32K"); + + /* video hardware */ + SCREEN(config, "screen", SCREEN_TYPE_RASTER).set_raw(9.828_MHz_XTAL / 2, 320, 0, 320, 243, 0, 243); + + mc6847_ntsc_device &vdg(MC6847_NTSC(config, "mc6847", XTAL(3'579'545))); + vdg.set_screen("screen"); + vdg.input_callback().set(FUNC(mc10_state::mc6847_videoram_r)); +} + +void mc10_state::mc10(machine_config &config) +{ + mc10_base(config); + mc10_video(config); + + /* expansion port hardware */ + mc10cart_slot_device &cartslot(MC10CART_SLOT(config, "ext", DERIVED_CLOCK(1, 1), mc10_cart_add_basic_devices, nullptr)); + cartslot.set_memspace(m_maincpu, AS_PROGRAM); + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); /* Software lists */ SOFTWARE_LIST(config, "cass_list").set_original("mc10"); } -void mc10_state::alice32(machine_config &config) +void mc10_state::alice(machine_config &config) { - M6803(config, m_maincpu, XTAL(3'579'545)); - m_maincpu->set_addrmap(AS_PROGRAM, &mc10_state::alice32_mem); - m_maincpu->in_p1_cb().set(FUNC(mc10_state::mc10_port1_r)); - m_maincpu->out_p1_cb().set(FUNC(mc10_state::mc10_port1_w)); - m_maincpu->in_p2_cb().set(FUNC(mc10_state::mc10_port2_r)); - m_maincpu->out_p2_cb().set(FUNC(mc10_state::mc10_port2_w)); + mc10_base(config); + mc10_video(config); + + /* expansion port hardware */ + mc10cart_slot_device &cartslot(MC10CART_SLOT(config, "ext", DERIVED_CLOCK(1, 1), alice_cart_add_basic_devices, nullptr)); + cartslot.set_memspace(m_maincpu, AS_PROGRAM); + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + + /* Software lists */ + SOFTWARE_LIST(config, "cass_list").set_original("mc10"); +} + +void alice32_state::alice32(machine_config &config) +{ + mc10_base(config); + + /* basic machine hardware */ + m_maincpu->set_addrmap(AS_PROGRAM, &alice32_state::alice32_mem); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -717,35 +566,28 @@ void mc10_state::alice32(machine_config &config) EF9345(config, m_ef9345, 0); m_ef9345->set_screen("screen"); m_ef9345->set_palette_tag("palette"); - TIMER(config, "alice32_sl").configure_scanline(FUNC(mc10_state::alice32_scanline), "screen", 0, 10); - - /* sound hardware */ - SPEAKER(config, "speaker").front_center(); - DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.0625); - - CASSETTE(config, m_cassette); - m_cassette->set_formats(alice32_cassette_formats); - m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED); - m_cassette->add_route(ALL_OUTPUTS, "speaker", 0.05); - m_cassette->set_interface("mc10_cass"); - - /* printer */ - rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "printer")); - rs232.set_option_device_input_defaults("printer", DEVICE_INPUT_DEFAULTS_NAME(printer)); + TIMER(config, "alice32_sl").configure_scanline(FUNC(alice32_state::alice32_scanline), "screen", 0, 10); + /* expansion port hardware */ + mc10cart_slot_device &cartslot(MC10CART_SLOT(config, "ext", DERIVED_CLOCK(1, 1), alice32_cart_add_basic_devices, nullptr)); + cartslot.set_memspace(m_maincpu, AS_PROGRAM); + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); /* internal ram */ - RAM(config, m_ram).set_default_size("24K").set_extra_options("8K"); + RAM(config, m_ram).set_default_size("8K").set_extra_options("24K"); /* Software lists */ SOFTWARE_LIST(config, "cass_list").set_original("alice32"); SOFTWARE_LIST(config, "mc10_cass").set_compatible("mc10"); } -void mc10_state::alice90(machine_config &config) +void alice32_state::alice90(machine_config &config) { alice32(config); - m_maincpu->set_addrmap(AS_PROGRAM, &mc10_state::alice90_mem); + /* basic machine hardware */ + m_maincpu->set_addrmap(AS_PROGRAM, &alice32_state::alice90_mem); + + /* internal ram */ m_ram->set_default_size("32K"); /* Software lists */ @@ -754,20 +596,6 @@ void mc10_state::alice90(machine_config &config) config.device_remove("mc10_cass"); } -void mcx128_state::mcx128(machine_config &config) -{ - mc10(config); - m_maincpu->set_addrmap(AS_PROGRAM, &mcx128_state::mcx128_mem); - - /* internal ram */ - m_ram->set_default_size("4K"); - RAM(config, m_mcx_ram).set_default_size("128K"); - - /* Software lists */ - /* to do */ -} - - /*************************************************************************** ROM DEFINITIONS ***************************************************************************/ @@ -798,31 +626,14 @@ ROM_START( alice90 ) ROM_LOAD( "charset.rom", 0x0000, 0x2000, BAD_DUMP CRC(b2f49eb3) SHA1(d0ef530be33bfc296314e7152302d95fdf9520fc) ) // from dcvg5k ROM_END -ROM_START( mcx128 ) - ROM_REGION(0x2000, "maincpu", 0) - ROM_LOAD("mc10.rom", 0x0000, 0x2000, CRC(11fda97e) SHA1(4afff2b4c120334481aab7b02c3552bf76f1bc43)) - ROM_REGION(0x4000, "cart", 0) - ROM_LOAD("mcx128bas.rom", 0x0000, 0x4000, CRC(11202e4b) SHA1(36c30d0f198a1bffee88ef29d92f2401447a91f4)) -ROM_END - -ROM_START( alice128 ) - ROM_REGION(0x2000, "maincpu", 0) - ROM_LOAD("alice.rom", 0x0000, 0x2000, CRC(f876abe9) SHA1(c2166b91e6396a311f486832012aa43e0d2b19f8)) - ROM_REGION(0x4000, "cart", 0) - ROM_LOAD("alice128bas.rom", 0x0000, 0x4000, CRC(a737544a) SHA1(c8fd92705fc42deb6a0ffac6274e27fd61ecd4cc)) -ROM_END - } /*************************************************************************** GAME DRIVERS ***************************************************************************/ -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1983, mc10, 0, 0, mc10, mc10, mc10_state, empty_init, "Tandy Radio Shack", "MC-10", MACHINE_SUPPORTS_SAVE ) -COMP( 1983, alice, mc10, 0, mc10, alice, mc10_state, empty_init, "Matra & Hachette", "Alice", MACHINE_SUPPORTS_SAVE ) -COMP( 1984, alice32, 0, 0, alice32, alice, mc10_state, empty_init, "Matra & Hachette", "Alice 32", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -COMP( 1985, alice90, alice32, 0, alice90, alice, mc10_state, empty_init, "Matra & Hachette", "Alice 90", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -COMP( 2011, mcx128, mc10, 0, mcx128, mc10, mcx128_state, empty_init, "Tandy Radio Shack", "MCX-128", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) -COMP( 2011, alice128,mc10, 0, mcx128, alice, mcx128_state, empty_init, "Matra & Hachette", "Alice with MCX-128", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL ) - +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1983, mc10, 0, 0, mc10, mc10, mc10_state, empty_init, "Tandy Radio Shack", "MC-10", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, alice, mc10, 0, alice, alice, mc10_state, empty_init, "Matra & Hachette", "Alice", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, alice32, 0, 0, alice32, alice, alice32_state, empty_init, "Matra & Hachette", "Alice 32", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, alice90, alice32, 0, alice90, alice, alice32_state, empty_init, "Matra & Hachette", "Alice 90", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d367adba8fd..1dab778ecb0 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -22423,8 +22423,6 @@ alice // Matra & Hachette Ordinateur Alice alice32 // Matra & Hachette Alice 32 alice90 // Matra & Hachette Alice 90 mc10 // MC-10 -mcx128 // MCX-128 -alice128 // Alice with a MCX-128 @source:mc1000.cpp mc1000 // -- cgit v1.2.3 From 16a85237c7522f669277724e086dce691b4436eb Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 18 Jun 2021 00:00:32 +1000 Subject: rx78_cart: new dumps for burger and ultraman, old ones were overdumps. --- hash/rx78_cart.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hash/rx78_cart.xml b/hash/rx78_cart.xml index 1275a8b6f49..7bc3870e327 100644 --- a/hash/rx78_cart.xml +++ b/hash/rx78_cart.xml @@ -102,8 +102,8 @@ The monitor will expect you to load a program from cassette. Bandai - - + + @@ -115,7 +115,7 @@ The monitor will expect you to load a program from cassette. - + @@ -231,8 +231,8 @@ The monitor will expect you to load a program from cassette. Bandai - - + + -- cgit v1.2.3 From 5211a003a57a9ca5bb4b117499f313fd8fca4d32 Mon Sep 17 00:00:00 2001 From: Ville Linde Date: Thu, 17 Jun 2021 17:59:35 +0300 Subject: sharc: Cycle-based DMA. Added support for write stalling. --- src/devices/cpu/sharc/sharc.cpp | 45 ++++++++++-- src/devices/cpu/sharc/sharc.h | 5 ++ src/devices/cpu/sharc/sharcdma.hxx | 138 +++++++++++++++++++++++++++++++------ src/mame/drivers/gticlub.cpp | 2 + src/mame/drivers/hornet.cpp | 6 +- src/mame/drivers/nwk-tr.cpp | 6 +- 6 files changed, 172 insertions(+), 30 deletions(-) diff --git a/src/devices/cpu/sharc/sharc.cpp b/src/devices/cpu/sharc/sharc.cpp index ded941af415..391520f688b 100644 --- a/src/devices/cpu/sharc/sharc.cpp +++ b/src/devices/cpu/sharc/sharc.cpp @@ -343,7 +343,10 @@ void adsp21062_device::iop_w(offs_t offset, uint32_t data) case 0x1c: { m_core->dma[6].control = data; - sharc_iop_delayed_w(0x1c, data, 1); + if (data & 0x1) + { + sharc_iop_delayed_w(0x1c, data, 1); + } break; } @@ -360,9 +363,12 @@ void adsp21062_device::iop_w(offs_t offset, uint32_t data) // DMA 7 case 0x1d: - { + { m_core->dma[7].control = data; - sharc_iop_delayed_w(0x1d, data, 30); + if (data & 0x1) + { + sharc_iop_delayed_w(0x1d, data, 30); + } break; } @@ -442,7 +448,7 @@ void adsp21062_device::external_dma_write(uint32_t address, uint64_t data) All addresses in the 17-bit index registers are offset by 0x0002 0000, the first internal RAM location, before they are used by the DMA controller. */ - + switch ((m_core->dma[6].control >> 6) & 0x3) { case 2: // 16/48 packing @@ -972,6 +978,11 @@ void adsp21062_device::set_flag_input(int flag_num, int state) } } +WRITE_LINE_MEMBER(adsp21062_device::write_stall) +{ + m_core->write_stalled = (state == 0) ? false : true; +} + void adsp21062_device::check_interrupts() { int i; @@ -1028,8 +1039,24 @@ void adsp21062_device::execute_run() } else { + if (m_core->write_stalled) + eat_cycles(m_core->icount); + if (m_core->idle && m_core->irq_pending == 0) { + int dma_count = m_core->icount; + + // run active DMAs even while idling + while (dma_count > 0 && m_core->dma_status & ((1 << 6) | (1 << 7))) + { + if (!m_core->write_stalled) + { + dma_run_cycle(6); + dma_run_cycle(7); + } + dma_count--; + } + m_core->icount = 0; debugger_instruction_hook(m_core->daddr); } @@ -1037,9 +1064,9 @@ void adsp21062_device::execute_run() { check_interrupts(); m_core->idle = 0; - } + } - while (m_core->icount > 0 && !m_core->idle) + while (m_core->icount > 0 && !m_core->idle && !m_core->write_stalled) { m_core->pc = m_core->daddr; m_core->daddr = m_core->faddr; @@ -1126,6 +1153,12 @@ void adsp21062_device::execute_run() } } + if (!m_core->write_stalled) + { + dma_run_cycle(6); + dma_run_cycle(7); + } + --m_core->icount; }; } diff --git a/src/devices/cpu/sharc/sharc.h b/src/devices/cpu/sharc/sharc.h index 6c9292c5193..f7d2d8701cd 100644 --- a/src/devices/cpu/sharc/sharc.h +++ b/src/devices/cpu/sharc/sharc.h @@ -103,6 +103,8 @@ public: TIMER_CALLBACK_MEMBER(sharc_iop_delayed_write_callback); TIMER_CALLBACK_MEMBER(sharc_dma_callback); + WRITE_LINE_MEMBER(write_stall); + void sharc_cfunc_unimplemented(); void sharc_cfunc_read_iop(); void sharc_cfunc_write_iop(); @@ -270,6 +272,7 @@ private: int32_t chained_direction; emu_timer *timer; bool active; + bool chained; }; @@ -379,6 +382,7 @@ private: SHARC_DMA_OP dma_op[12]; uint32_t dma_status; + bool write_stalled; int32_t interrupt_active; @@ -475,6 +479,7 @@ private: void schedule_dma_op(int channel, uint32_t src, uint32_t dst, int src_modifier, int dst_modifier, int src_count, int dst_count, int pmode); void dma_op(int channel); void sharc_dma_exec(int channel); + void dma_run_cycle(int channel); void add_systemreg_write_latency_effect(int sysreg, uint32_t data, uint32_t prev_data); inline void swap_register(uint32_t *a, uint32_t *b); void systemreg_write_latency_effect(); diff --git a/src/devices/cpu/sharc/sharcdma.hxx b/src/devices/cpu/sharc/sharcdma.hxx index fdbf7a0f635..63ea0b85c38 100644 --- a/src/devices/cpu/sharc/sharcdma.hxx +++ b/src/devices/cpu/sharc/sharcdma.hxx @@ -10,7 +10,7 @@ void adsp21062_device::schedule_chained_dma_op(int channel, uint32_t dma_chain_ptr, int chained_direction) { - uint32_t op_ptr = 0x20000 + dma_chain_ptr; + uint32_t op_ptr = 0x20000 + (dma_chain_ptr & 0x1ffff); uint32_t int_index = dm_read32(op_ptr - 0); uint32_t int_modifier = dm_read32(op_ptr - 1); @@ -49,10 +49,14 @@ void adsp21062_device::schedule_chained_dma_op(int channel, uint32_t dma_chain_p m_core->dma_op[channel].chain_ptr = chain_ptr; m_core->dma_op[channel].chained_direction = chained_direction; + m_core->dma_op[channel].chained = true; m_core->dma_op[channel].active = true; - int cycles = m_core->dma_op[channel].src_count / 4; - m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel); + if (m_enable_drc) + { + int cycles = m_core->dma_op[channel].src_count / 4; + m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel); + } // enable busy flag m_core->dma_status |= (1 << channel); @@ -74,15 +78,107 @@ void adsp21062_device::schedule_dma_op(int channel, uint32_t src, uint32_t dst, m_core->dma_op[channel].pmode = pmode; m_core->dma_op[channel].chain_ptr = 0; + m_core->dma_op[channel].chained = false; m_core->dma_op[channel].active = true; - int cycles = src_count / 4; - m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel); + if (m_enable_drc) + { + int cycles = src_count / 4; + m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel); + } // enable busy flag m_core->dma_status |= (1 << channel); } +void adsp21062_device::dma_run_cycle(int channel) +{ + if (m_core->dma_status & (1 << channel)) + { + uint32_t src = m_core->dma_op[channel].src; + uint32_t dst = m_core->dma_op[channel].dst; + int src_modifier = m_core->dma_op[channel].src_modifier; + int dst_modifier = m_core->dma_op[channel].dst_modifier; + int src_count = m_core->dma_op[channel].src_count; + //int dst_count = m_core->dma_op[channel].dst_count; + int pmode = m_core->dma_op[channel].pmode; + + switch (pmode) + { + case DMA_PMODE_NO_PACKING: + { + uint32_t data = dm_read32(src); + dm_write32(dst, data); + src += src_modifier; + dst += dst_modifier; + src_count--; + break; + } + case DMA_PMODE_16_32: + { + uint32_t data = ((dm_read32(src + 0) & 0xffff) << 16) | (dm_read32(src + 1) & 0xffff); + + dm_write32(dst, data); + src += src_modifier * 2; + dst += dst_modifier; + src_count -= 2; + break; + } + case DMA_PMODE_8_48: + { + uint64_t data = ((uint64_t)(dm_read32(src + 0) & 0xff) << 0) | + ((uint64_t)(dm_read32(src + 1) & 0xff) << 8) | + ((uint64_t)(dm_read32(src + 2) & 0xff) << 16) | + ((uint64_t)(dm_read32(src + 3) & 0xff) << 24) | + ((uint64_t)(dm_read32(src + 4) & 0xff) << 32) | + ((uint64_t)(dm_read32(src + 5) & 0xff) << 40); + + pm_write48(dst, data); + src += src_modifier * 6; + dst += dst_modifier; + src_count -= 6; + break; + } + default: + { + fatalerror("SHARC: dma_op: unimplemented packing mode %d\n", pmode); + } + } + + m_core->dma_op[channel].src_count = src_count; + m_core->dma_op[channel].src = src; + m_core->dma_op[channel].dst = dst; + + if (src_count <= 0) + { + // clear busy flag + m_core->dma_status &= ~(1 << channel); + + m_core->dma_op[channel].active = false; + + // raise interrupt if + // * non-chained DMA + // * chained-DMA with PCI set in the next chain pointer + if (!m_core->dma_op[channel].chained || (m_core->dma_op[channel].chained && (m_core->dma_op[channel].chain_ptr & 0x20000))) + { + m_core->irptl |= (1 << (channel + 10)); + + // DMA interrupt + if (m_core->imask & (1 << (channel + 10))) + { + m_core->irq_pending |= 1 << (channel + 10); + } + } + + // schedule chained op if chaining + if ((m_core->dma_op[channel].chain_ptr & 0x1ffff) != 0) + { + schedule_chained_dma_op(channel, m_core->dma_op[channel].chain_ptr, m_core->dma_op[channel].chained_direction); + } + } + } +} + void adsp21062_device::dma_op(int channel) { int i; @@ -94,7 +190,7 @@ void adsp21062_device::dma_op(int channel) //int dst_count = m_core->dma_op[channel].dst_count; int pmode = m_core->dma_op[channel].pmode; - //printf("dma_op: %08X, %08X, %08X, %08X, %08X, %d\n", src, dst, src_modifier, dst_modifier, src_count, pmode); + //printf("dma_op: ch %d: %08X, %08X, %08X, %08X, %08X, %d at %08X\n", channel, src, dst, src_modifier, dst_modifier, src_count, pmode, m_core->pc); switch (pmode) { @@ -191,36 +287,36 @@ void adsp21062_device::sharc_dma_exec(int channel) { uint32_t dma_chain_ptr = m_core->dma[channel].chain_ptr & 0x1ffff; - schedule_chained_dma_op(channel, dma_chain_ptr, tran); + schedule_chained_dma_op(channel, dma_chain_ptr, tran); } else { if (tran) // Transmit to external { - dst = m_core->dma[channel].ext_index; - dst_modifier = m_core->dma[channel].ext_modifier; - dst_count = m_core->dma[channel].ext_count; - src = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000; - src_modifier = m_core->dma[channel].int_modifier; - src_count = m_core->dma[channel].int_count; + dst = m_core->dma[channel].ext_index; + dst_modifier = m_core->dma[channel].ext_modifier; + dst_count = m_core->dma[channel].ext_count; + src = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000; + src_modifier = m_core->dma[channel].int_modifier; + src_count = m_core->dma[channel].int_count; } else // Receive from external { - src = m_core->dma[channel].ext_index; - src_modifier = m_core->dma[channel].ext_modifier; - src_count = m_core->dma[channel].ext_count; - dst = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000; - dst_modifier = m_core->dma[channel].int_modifier; - dst_count = m_core->dma[channel].int_count; + src = m_core->dma[channel].ext_index; + src_modifier = m_core->dma[channel].ext_modifier; + src_count = m_core->dma[channel].ext_count; + dst = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000; + dst_modifier = m_core->dma[channel].int_modifier; + dst_count = m_core->dma[channel].int_count; } if (dtype) - //if (src_count != dst_count) + //if (src_count != dst_count) { pmode = DMA_PMODE_8_48; } - schedule_dma_op(channel, src, dst, src_modifier, dst_modifier, src_count, dst_count, pmode); + schedule_dma_op(channel, src, dst, src_modifier, dst_modifier, src_count, dst_count, pmode); } } diff --git a/src/mame/drivers/gticlub.cpp b/src/mame/drivers/gticlub.cpp index b1a0a12b00d..2f48600b04c 100644 --- a/src/mame/drivers/gticlub.cpp +++ b/src/mame/drivers/gticlub.cpp @@ -963,6 +963,7 @@ void gticlub_state::hangplt(machine_config &config) m_voodoo[0]->set_screen_tag("lscreen"); m_voodoo[0]->set_cpu_tag(m_dsp[0]); m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall)); VOODOO_1(config, m_voodoo[1], STD_VOODOO_1_CLOCK); m_voodoo[1]->set_fbmem(2); @@ -970,6 +971,7 @@ void gticlub_state::hangplt(machine_config &config) m_voodoo[1]->set_screen_tag("rscreen"); m_voodoo[1]->set_cpu_tag(m_dsp[1]); m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1); + m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall)); K033906(config, "k033906_1", 0, m_voodoo[0]); K033906(config, "k033906_2", 0, m_voodoo[1]); diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp index f09bd70d4bf..4aa91fc24a3 100644 --- a/src/mame/drivers/hornet.cpp +++ b/src/mame/drivers/hornet.cpp @@ -1122,6 +1122,7 @@ void hornet_state::hornet(machine_config &config) m_voodoo[0]->set_screen_tag("screen"); m_voodoo[0]->set_cpu_tag(m_dsp[0]); m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall)); K033906(config, "k033906_1", 0, m_voodoo[0]); @@ -1201,6 +1202,7 @@ void hornet_state::sscope(machine_config &config) m_voodoo[1]->set_screen_tag("rscreen"); m_voodoo[1]->set_cpu_tag(m_dsp[1]); m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1); + m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall)); K033906(config, "k033906_2", 0, m_voodoo[1]); @@ -1235,6 +1237,7 @@ void hornet_state::sscope2(machine_config &config) m_voodoo[0]->set_screen_tag("lscreen"); m_voodoo[0]->set_cpu_tag(m_dsp[0]); m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall)); VOODOO_2(config.replace(), m_voodoo[1], STD_VOODOO_2_CLOCK); m_voodoo[1]->set_fbmem(2); @@ -1242,6 +1245,7 @@ void hornet_state::sscope2(machine_config &config) m_voodoo[1]->set_screen_tag("rscreen"); m_voodoo[1]->set_cpu_tag(m_dsp[1]); m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1); + m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall)); DS2401(config, "lan_serial_id"); EEPROM_93C46_16BIT(config, "lan_eeprom"); @@ -1394,7 +1398,7 @@ void hornet_state::init_hornet() m_maincpu->ppc4xx_spu_set_tx_handler(write8smo_delegate(*this, FUNC(hornet_state::jamma_jvs_w))); - m_dsp[0]->enable_recompiler(); + //m_dsp[0]->enable_recompiler(); } void hornet_state::init_sscope() diff --git a/src/mame/drivers/nwk-tr.cpp b/src/mame/drivers/nwk-tr.cpp index 6bd567d1732..1e7356bfc07 100644 --- a/src/mame/drivers/nwk-tr.cpp +++ b/src/mame/drivers/nwk-tr.cpp @@ -404,7 +404,7 @@ uint8_t nwktr_state::sysreg_r(offs_t offset) case 4: r = m_dsw->read(); break; - default: + default: break; } @@ -548,7 +548,7 @@ void nwktr_state::sharc1_map(address_map &map) map(0x0400000, 0x041ffff).rw(m_konppc, FUNC(konppc_device::cgboard_1_shared_sharc_r), FUNC(konppc_device::cgboard_1_shared_sharc_w)); map(0x0500000, 0x05fffff).ram().share(m_sharc_dataram[1]).lr32(NAME([this](offs_t offset) { return m_sharc_dataram[1][offset] & 0xffff; })); map(0x1400000, 0x14fffff).ram(); - map(0x2400000, 0x27fffff).rw(m_konppc, FUNC(konppc_device::nwk_voodoo_0_r), FUNC(konppc_device::nwk_voodoo_0_w)); + map(0x2400000, 0x27fffff).rw(m_konppc, FUNC(konppc_device::nwk_voodoo_1_r), FUNC(konppc_device::nwk_voodoo_1_w)); map(0x3400000, 0x34000ff).rw(m_konppc, FUNC(konppc_device::cgboard_1_comm_sharc_r), FUNC(konppc_device::cgboard_1_comm_sharc_w)); map(0x3500000, 0x35000ff).rw(m_konppc, FUNC(konppc_device::K033906_1_r), FUNC(konppc_device::K033906_1_w)); map(0x3600000, 0x37fffff).bankr("slave_cgboard_bank"); @@ -675,6 +675,7 @@ void nwktr_state::nwktr(machine_config &config) m_voodoo[0]->set_screen_tag("lscreen"); m_voodoo[0]->set_cpu_tag(m_dsp[0]); m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall)); VOODOO_1(config, m_voodoo[1], XTAL(50'000'000)); m_voodoo[1]->set_fbmem(2); @@ -682,6 +683,7 @@ void nwktr_state::nwktr(machine_config &config) m_voodoo[1]->set_screen_tag("rscreen"); m_voodoo[1]->set_cpu_tag(m_dsp[1]); m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1); + m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall)); screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER)); // default 24KHz parameter in both 001604 and voodoo, input clock correct? (58~Hz Vsync, 50MHz/3 or 64MHz/4?) -- cgit v1.2.3 From ceb4e0b644b1e49d0c0c6614b5875c8548f1e459 Mon Sep 17 00:00:00 2001 From: arbee Date: Thu, 17 Jun 2021 18:41:57 -0400 Subject: apple2e: Always allow writing to cards in slots 1-3, matches our previous behavior for 4-7. [R. Belmont] --- src/mame/drivers/apple2e.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index 52826b35be4..0ccd5cc8cf2 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -3380,8 +3380,8 @@ void apple2e_state::r4000bank_map(address_map &map) void apple2e_state::c100bank_map(address_map &map) { map(0x0000, 0x01ff).rw(FUNC(apple2e_state::c100_r), FUNC(apple2e_state::c100_w)); - map(0x0200, 0x03ff).r(FUNC(apple2e_state::c100_int_r)).nopw(); - map(0x0400, 0x05ff).r(FUNC(apple2e_state::c100_int_bank_r)).nopw(); + map(0x0200, 0x03ff).rw(FUNC(apple2e_state::c100_int_r), FUNC(apple2e_state::c100_w)); + map(0x0400, 0x05ff).rw(FUNC(apple2e_state::c100_int_bank_r), FUNC(apple2e_state::c100_w)); map(0x0600, 0x07ff).r(FUNC(apple2e_state::c100_cec_r)).nopw(); map(0x0800, 0x09ff).r(FUNC(apple2e_state::c100_cec_bank_r)).nopw(); @@ -3390,8 +3390,8 @@ void apple2e_state::c100bank_map(address_map &map) void apple2e_state::c300bank_map(address_map &map) { map(0x0000, 0x00ff).rw(FUNC(apple2e_state::c300_r), FUNC(apple2e_state::c300_w)); - map(0x0100, 0x01ff).r(FUNC(apple2e_state::c300_int_r)).nopw(); - map(0x0200, 0x02ff).r(FUNC(apple2e_state::c300_int_bank_r)).nopw(); + map(0x0100, 0x01ff).rw(FUNC(apple2e_state::c300_int_r), FUNC(apple2e_state::c300_w)); + map(0x0200, 0x02ff).rw(FUNC(apple2e_state::c300_int_bank_r), FUNC(apple2e_state::c300_w)); map(0x0300, 0x03ff).r(FUNC(apple2e_state::c300_cec_r)).nopw(); map(0x0400, 0x04ff).r(FUNC(apple2e_state::c300_cec_bank_r)).nopw(); } -- cgit v1.2.3 From 64455fdc4bc13c5d1c4a9d4f87deb1d9029c80ac Mon Sep 17 00:00:00 2001 From: arbee Date: Thu, 17 Jun 2021 19:07:28 -0400 Subject: apple2: some correctness improvements to the Mockingboard support. [R. Belmont] --- src/devices/bus/a2bus/a2mockingboard.cpp | 107 ++++++++++++++++++++++++++----- src/devices/bus/a2bus/a2mockingboard.h | 51 +++++++++------ 2 files changed, 121 insertions(+), 37 deletions(-) diff --git a/src/devices/bus/a2bus/a2mockingboard.cpp b/src/devices/bus/a2bus/a2mockingboard.cpp index 6073e843371..380e9988a8b 100644 --- a/src/devices/bus/a2bus/a2mockingboard.cpp +++ b/src/devices/bus/a2bus/a2mockingboard.cpp @@ -41,11 +41,13 @@ DEFINE_DEVICE_TYPE(A2BUS_ECHOPLUS, a2bus_echoplus_device, "a2echop", "S void a2bus_ayboard_device::add_common_devices(machine_config &config) { MOS6522(config, m_via1, 1022727); + m_via1->readpa_handler().set(FUNC(a2bus_ayboard_device::via1_in_a)); m_via1->writepa_handler().set(FUNC(a2bus_ayboard_device::via1_out_a)); m_via1->writepb_handler().set(FUNC(a2bus_ayboard_device::via1_out_b)); m_via1->irq_handler().set(FUNC(a2bus_ayboard_device::via1_irq_w)); MOS6522(config, m_via2, 1022727); + m_via2->readpa_handler().set(FUNC(a2bus_ayboard_device::via2_in_a)); m_via2->writepa_handler().set(FUNC(a2bus_ayboard_device::via2_out_a)); m_via2->writepb_handler().set(FUNC(a2bus_ayboard_device::via2_out_b)); m_via2->irq_handler().set(FUNC(a2bus_ayboard_device::via2_irq_w)); @@ -101,6 +103,9 @@ void a2bus_echoplus_device::device_add_mconfig(machine_config &config) { add_common_devices(config); + config.device_remove(VIA2_TAG); + m_via1->writepb_handler().set(FUNC(a2bus_ayboard_device::via1_out_b)); + AY8913(config, m_ay2, 1022727); m_ay2->add_route(ALL_OUTPUTS, "rspeaker", 0.5); @@ -165,7 +170,7 @@ void a2bus_ayboard_device::device_reset() read_cnxx - called for reads from this card's cnxx space -------------------------------------------------*/ -uint8_t a2bus_ayboard_device::read_cnxx(uint8_t offset) +u8 a2bus_ayboard_device::read_cnxx(u8 offset) { if (offset <= 0x7f) { @@ -179,9 +184,15 @@ uint8_t a2bus_ayboard_device::read_cnxx(uint8_t offset) return 0; } -uint8_t a2bus_phasor_device::read_cnxx(uint8_t offset) +u8 a2bus_echoplus_device::read_cnxx(u8 offset) { - uint8_t ret = 0; + m_last_cnxx_addr = offset; + return m_via1->read(offset & 0xf); +} + +u8 a2bus_phasor_device::read_cnxx(u8 offset) +{ + u8 ret = 0; int via_sel; if (m_native) @@ -212,7 +223,7 @@ uint8_t a2bus_phasor_device::read_cnxx(uint8_t offset) write_cnxx - called for writes to this card's c0nx space -------------------------------------------------*/ -void a2bus_ayboard_device::write_cnxx(uint8_t offset, uint8_t data) +void a2bus_ayboard_device::write_cnxx(u8 offset, u8 data) { // When the SSI-263 is emulated, Cn40 will write to both the VIA and // the first SSI-263, and Cn20 will write to both the VIA and the @@ -227,7 +238,13 @@ void a2bus_ayboard_device::write_cnxx(uint8_t offset, uint8_t data) } } -void a2bus_phasor_device::write_cnxx(uint8_t offset, uint8_t data) +void a2bus_echoplus_device::write_cnxx(u8 offset, u8 data) +{ + m_last_cnxx_addr = offset; + m_via1->write(offset & 0xf, data); +} + +void a2bus_phasor_device::write_cnxx(u8 offset, u8 data) { if ((offset < 0x20) || (offset >= 0x80 && offset < 0xa0)) { @@ -277,12 +294,12 @@ WRITE_LINE_MEMBER( a2bus_ayboard_device::via2_irq_w ) } } -void a2bus_ayboard_device::via1_out_a(uint8_t data) +void a2bus_ayboard_device::via1_out_a(u8 data) { m_porta1 = data; } -void a2bus_ayboard_device::via1_out_b(uint8_t data) +void a2bus_ayboard_device::via1_out_b(u8 data) { if (!BIT(data, 2)) { @@ -310,7 +327,65 @@ void a2bus_ayboard_device::via1_out_b(uint8_t data) } } -void a2bus_phasor_device::via1_out_b(uint8_t data) +void a2bus_echoplus_device::via1_out_b(u8 data) +{ + if (!(m_last_cnxx_addr & 0x80)) + { + if (!BIT(data, 2)) + { + m_ay1->reset_w(); + } + else + { + switch (data & 3) + { + case 0: // BDIR=0, BC1=0 (inactive) + break; + + case 1: // BDIR=0, BC1=1 (read PSG) + m_porta1 = m_ay1->data_r(); + break; + + case 2: // BDIR=1, BC1=0 (write PSG) + m_ay1->data_w(m_porta1); + break; + + case 3: // BDIR=1, BC1=1 (latch) + m_ay1->address_w(m_porta1); + break; + } + } + } + else + { + if (!BIT(data, 2)) + { + m_ay2->reset_w(); + } + else + { + switch (data & 3) + { + case 0: // BDIR=0, BC1=0 (inactive) + break; + + case 1: // BDIR=0, BC1=1 (read PSG) + m_porta1 = m_ay2->data_r(); + break; + + case 2: // BDIR=1, BC1=0 (write PSG) + m_ay2->data_w(m_porta1); + break; + + case 3: // BDIR=1, BC1=1 (latch) + m_ay2->address_w(m_porta1); + break; + } + } + } +} + +void a2bus_phasor_device::via1_out_b(u8 data) { if (!(data & 4)) { @@ -359,12 +434,12 @@ void a2bus_phasor_device::via1_out_b(uint8_t data) } } -void a2bus_ayboard_device::via2_out_a(uint8_t data) +void a2bus_ayboard_device::via2_out_a(u8 data) { m_porta2 = data; } -void a2bus_ayboard_device::via2_out_b(uint8_t data) +void a2bus_ayboard_device::via2_out_b(u8 data) { if (!BIT(data, 2)) { @@ -392,7 +467,7 @@ void a2bus_ayboard_device::via2_out_b(uint8_t data) } } -void a2bus_phasor_device::via2_out_b(uint8_t data) +void a2bus_phasor_device::via2_out_b(u8 data) { if (!BIT(data, 2)) { @@ -463,20 +538,20 @@ void a2bus_phasor_device::set_clocks() } } -uint8_t a2bus_phasor_device::read_c0nx(uint8_t offset) +u8 a2bus_phasor_device::read_c0nx(u8 offset) { m_native = BIT(offset, 0); set_clocks(); return 0xff; } -void a2bus_phasor_device::write_c0nx(uint8_t offset, uint8_t data) +void a2bus_phasor_device::write_c0nx(u8 offset, u8 data) { m_native = BIT(offset, 0); set_clocks(); } -uint8_t a2bus_echoplus_device::read_c0nx(uint8_t offset) +u8 a2bus_echoplus_device::read_c0nx(u8 offset) { switch (offset) { @@ -487,7 +562,7 @@ uint8_t a2bus_echoplus_device::read_c0nx(uint8_t offset) return 0; } -void a2bus_echoplus_device::write_c0nx(uint8_t offset, uint8_t data) +void a2bus_echoplus_device::write_c0nx(u8 offset, u8 data) { switch (offset) { @@ -513,7 +588,7 @@ WRITE_LINE_MEMBER( a2bus_mockingboard_device::write_via1_cb2 ) m_last_cb2_state = state; } -void a2bus_mockingboard_device::via1_out_b(uint8_t data) +void a2bus_mockingboard_device::via1_out_b(u8 data) { m_portb1 = data; diff --git a/src/devices/bus/a2bus/a2mockingboard.h b/src/devices/bus/a2bus/a2mockingboard.h index 44acff10006..539363c1f10 100644 --- a/src/devices/bus/a2bus/a2mockingboard.h +++ b/src/devices/bus/a2bus/a2mockingboard.h @@ -28,10 +28,12 @@ class a2bus_ayboard_device: public: DECLARE_WRITE_LINE_MEMBER( via1_irq_w ); DECLARE_WRITE_LINE_MEMBER( via2_irq_w ); - void via1_out_a(uint8_t data); - virtual void via1_out_b(uint8_t data); - void via2_out_a(uint8_t data); - virtual void via2_out_b(uint8_t data); + u8 via1_in_a() { return m_porta1; } + u8 via2_in_a() { return m_porta2; } + void via1_out_a(u8 data); + virtual void via1_out_b(u8 data); + void via2_out_a(u8 data); + virtual void via2_out_b(u8 data); protected: // construction/destruction @@ -42,20 +44,20 @@ protected: virtual void device_add_mconfig(machine_config &config) override; // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override { return 0xff; } - virtual void write_c0nx(uint8_t offset, uint8_t data) override { } - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual void write_cnxx(uint8_t offset, uint8_t data) override; + virtual u8 read_c0nx(u8 offset) override { return 0xff; } + virtual void write_c0nx(u8 offset, u8 data) override { } + virtual u8 read_cnxx(u8 offset) override; + virtual void write_cnxx(u8 offset, u8 data) override; void add_common_devices(machine_config &config); required_device m_via1; - required_device m_via2; + optional_device m_via2; required_device m_ay1; required_device m_ay2; - uint8_t m_porta1; - uint8_t m_porta2; + u8 m_porta1; + u8 m_porta2; }; class a2bus_mockingboard_device : public a2bus_ayboard_device @@ -63,7 +65,7 @@ class a2bus_mockingboard_device : public a2bus_ayboard_device public: a2bus_mockingboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual void via1_out_b(uint8_t data) override; + virtual void via1_out_b(u8 data) override; protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_reset() override; @@ -73,7 +75,7 @@ protected: private: DECLARE_WRITE_LINE_MEMBER(write_via1_cb2); - uint8_t m_portb1; + u8 m_portb1; int m_last_cb2_state; }; @@ -82,16 +84,16 @@ class a2bus_phasor_device : public a2bus_ayboard_device public: a2bus_phasor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void via1_out_b(uint8_t data) override; - void via2_out_b(uint8_t data) override; + void via1_out_b(u8 data) override; + void via2_out_b(u8 data) override; protected: virtual void device_add_mconfig(machine_config &config) override; - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual void write_cnxx(uint8_t offset, uint8_t data) override; + virtual u8 read_c0nx(u8 offset) override; + virtual void write_c0nx(u8 offset, u8 data) override; + virtual u8 read_cnxx(u8 offset) override; + virtual void write_cnxx(u8 offset, u8 data) override; required_device m_ay3; required_device m_ay4; @@ -110,10 +112,17 @@ public: protected: virtual void device_add_mconfig(machine_config &config) override; - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual void via1_out_b(u8 data) override; + + virtual u8 read_c0nx(u8 offset) override; + virtual void write_c0nx(u8 offset, u8 data) override; + virtual u8 read_cnxx(u8 offset) override; + virtual void write_cnxx(u8 offset, u8 data) override; required_device m_tms; + +private: + u8 m_last_cnxx_addr; }; // device type definition -- cgit v1.2.3 From 8f5a97a448986a43b1f07ff0c3602c31e55884b1 Mon Sep 17 00:00:00 2001 From: Ville Linde Date: Fri, 18 Jun 2021 05:01:26 +0300 Subject: nwk-tr: combine CG boards into single screen alternate frame rendering --- src/mame/drivers/nwk-tr.cpp | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/mame/drivers/nwk-tr.cpp b/src/mame/drivers/nwk-tr.cpp index 1e7356bfc07..f968ccf9e23 100644 --- a/src/mame/drivers/nwk-tr.cpp +++ b/src/mame/drivers/nwk-tr.cpp @@ -352,9 +352,11 @@ private: void soundtimer_count_w(uint16_t data); double adc12138_input_callback(uint8_t input); + bool m_exrgb; + TIMER_CALLBACK_MEMBER(sound_irq); - template uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void ppc_map(address_map &map); void sharc0_map(address_map &map); @@ -369,13 +371,14 @@ void nwktr_state::paletteram32_w(offs_t offset, uint32_t data, uint32_t mem_mask m_palette->set_pen_color(offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); } -template uint32_t nwktr_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->pen(0), cliprect); - m_voodoo[Which]->voodoo_update(bitmap, cliprect); - m_k001604[Which]->draw_front_layer(screen, bitmap, cliprect); + int board = m_exrgb ? 1 : 0; + + m_voodoo[board]->voodoo_update(bitmap, cliprect); + m_k001604[0]->draw_front_layer(screen, bitmap, cliprect); // K001604 on slave board doesn't seem to output anything. Bug or intended? return 0; } @@ -435,12 +438,22 @@ void nwktr_state::sysreg_w(offs_t offset, uint8_t data) } case 7: + /* + 0x80 = EXRES1 + 0x40 = EXRES0 + 0x20 = EXID1 + 0x10 = EXID0 + 0x01 = EXRGB + */ if (data & 0x80) // CG Board 1 IRQ Ack m_maincpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE); if (data & 0x40) // CG Board 0 IRQ Ack m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); - m_konppc->set_cgboard_id((data >> 4) & 3); + m_konppc->set_cgboard_id((data >> 4) & 0x3); + + m_exrgb = data & 0x1; // Select which CG Board outputs signal + m_cg_view.select(m_konppc->get_cgboard_id() ? 1 : 0); break; @@ -672,7 +685,7 @@ void nwktr_state::nwktr(machine_config &config) VOODOO_1(config, m_voodoo[0], XTAL(50'000'000)); m_voodoo[0]->set_fbmem(2); m_voodoo[0]->set_tmumem(2,2); - m_voodoo[0]->set_screen_tag("lscreen"); + m_voodoo[0]->set_screen_tag("screen"); m_voodoo[0]->set_cpu_tag(m_dsp[0]); m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall)); @@ -680,20 +693,15 @@ void nwktr_state::nwktr(machine_config &config) VOODOO_1(config, m_voodoo[1], XTAL(50'000'000)); m_voodoo[1]->set_fbmem(2); m_voodoo[1]->set_tmumem(2,2); - m_voodoo[1]->set_screen_tag("rscreen"); + m_voodoo[1]->set_screen_tag("screen"); m_voodoo[1]->set_cpu_tag(m_dsp[1]); m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1); m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall)); - screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER)); + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // default 24KHz parameter in both 001604 and voodoo, input clock correct? (58~Hz Vsync, 50MHz/3 or 64MHz/4?) - lscreen.set_raw(XTAL(64'000'000) / 4, 644, 44, 44 + 512, 450, 31, 31 + 400); - lscreen.set_screen_update(FUNC(nwktr_state::screen_update<0>)); - - screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); // for unused/debug screen from slave CG board - // resolution currently unknown, input clock correct? (60~Hz Vsync, 50MHz/3 or 64MHz/4?) - rscreen.set_raw(XTAL(64'000'000) / 4, 644, 44, 44 + 512, 450, 31, 31 + 400); - rscreen.set_screen_update(FUNC(nwktr_state::screen_update<1>)); + screen.set_raw(XTAL(64'000'000) / 4, 644, 44, 44 + 512, 450, 31, 31 + 400); + screen.set_screen_update(FUNC(nwktr_state::screen_update)); PALETTE(config, m_palette).set_entries(65536); -- cgit v1.2.3 From d5869ecbdbe8fd82d316a269cc29b92e36358ea6 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Fri, 18 Jun 2021 12:14:08 +0100 Subject: taitosj - add a postload so that savestates work (#8196) --- src/mame/includes/taitosj.h | 1 + src/mame/video/taitosj.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/mame/includes/taitosj.h b/src/mame/includes/taitosj.h index 158134f42cd..2264e5afd8f 100644 --- a/src/mame/includes/taitosj.h +++ b/src/mame/includes/taitosj.h @@ -62,6 +62,7 @@ protected: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; + virtual void device_post_load() override; private: required_shared_ptr_array m_videoram; diff --git a/src/mame/video/taitosj.cpp b/src/mame/video/taitosj.cpp index 91b7face6cd..09df075c62d 100644 --- a/src/mame/video/taitosj.cpp +++ b/src/mame/video/taitosj.cpp @@ -161,6 +161,13 @@ void taitosj_state::compute_draw_order() } } +void taitosj_state::device_post_load() +{ + m_gfxdecode->gfx(0)->mark_all_dirty(); + m_gfxdecode->gfx(1)->mark_all_dirty(); + m_gfxdecode->gfx(2)->mark_all_dirty(); + m_gfxdecode->gfx(3)->mark_all_dirty(); +} void taitosj_state::video_start() { -- cgit v1.2.3 From 30d19a0fa35c0f7d5a2de3b44868b22a1db9027d Mon Sep 17 00:00:00 2001 From: pkubaj Date: Fri, 18 Jun 2021 13:47:40 +0000 Subject: makefile: End the big-endian block in the right place (#8194) --- makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefile b/makefile index 1097656fafd..7738b07fa57 100644 --- a/makefile +++ b/makefile @@ -429,7 +429,6 @@ endif ifneq (,$(findstring s390x,$(UNAME))) BIGENDIAN := 1 endif -endif # BIGENDIAN # FreeBSD ifneq (,$(findstring powerpc,$(UNAME))) ifneq (,$(findstring powerpc64le,$(UNAME))) @@ -438,6 +437,7 @@ else BIGENDIAN := 1 endif endif +endif # BIGENDIAN ifndef PYTHON_EXECUTABLE PYTHON := python -- cgit v1.2.3 From c585ae63ce3d6eabb540c092af11a50a1fb71f08 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:49:58 +0100 Subject: juicebox additions [David Haywood, Sean Riddle] (#8146) New WORKING software list entries juicebox.xml: Teenage Mutant Ninja Turtles Volume 1 (H2692) [Sean Riddle, David Haywood] Teenage Mutant Ninja Turtles Episode 36 (H6260) [Sean Riddle, David Haywood] Juicebox Music Video - Avril Lavigne, The Calling, Avril Lavigne, Clay Aiken, Ruben Studdard (H6228) [Sean Riddle, David Haywood] Juicebox Music Video - Liz Phair, Stacie Orrico, Skye Sweetnam (H2709) [Sean Riddle, David Haywood] Juicebox Music Video - ZOEgirl, Jump5, Jump5, Baha Men, Atomic Kitten (H6232) [Sean Riddle, David Haywood] Juicebox Music Video - Baha Men, Jump 5, Jump 5, Beu Sisters, ZOEgirl (H6230A) [Sean Riddle, David Haywood] Juicebox Music Video - Ashlee Simpson, The Cure, Vanessa Carlton, fan_3, Ashlee Simpson (H6226) [Sean Riddle, David Haywood] Winx Club Volume 1 (H2686) [Sean Riddle, David Haywood] Winx Club Episode 103 (H6258) [Sean Riddle, David Haywood] Yu-Gi-Oh! Episode 175 (H8084) [Sean Riddle, David Haywood] Yu-Gi-Oh! Episode 176 (H8143) [Sean Riddle, David Haywood] Vans Pipeline Masters Volume 1 (H2690) [Sean Riddle, David Haywood] Streetball Classics Volume 1 (H7416) [Sean Riddle, David Haywood] Megas XLR Volume 1 (H2697) [Sean Riddle, David Haywood] --- hash/juicebox.xml | 376 ++++++++++++++++++++++++++++++++++----- src/devices/machine/smartmed.cpp | 109 ++++++------ 2 files changed, 387 insertions(+), 98 deletions(-) diff --git a/hash/juicebox.xml b/hash/juicebox.xml index dac6c95c6df..7b6c75da31a 100644 --- a/hash/juicebox.xml +++ b/hash/juicebox.xml @@ -5,68 +5,352 @@ license:CC0 --> - + + - - Codename: Kids Next Door + + + + Teenage Mustant Ninja Turtles Volume 1 (H2692) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Codename: Kids Next Door Volume 1 (H2683) 2004 4Kids Entertainment - - + + - - Yu-Gi-Oh! + + + + Yu-Gi-Oh! Volume 1 (H2685) 2004 4Kids Entertainment - - + + + + + + + + + + + + Teenage Mustant Ninja Turtles Episode 36 (H6260) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Juicebox Music Video - Avril Lavigne, The Calling, Avril Lavigne, Clay Aiken, Ruben Studdard (H6228) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Juicebox Music Video - Liz Phair, Stacie Orrico, Skye Sweetnam (H2709) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Juicebox Music Video - ZOEgirl, Jump5, Jump5, Baha Men, Atomic Kitten (H6232) + 2004 + 4Kids Entertainment + + + + + + + + + + + Winx Club Episode 103 (H6258) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Yu-Gi-Oh! Episode 175 (H8084) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Yu-Gi-Oh! Episode 176 (H8143) + 2004 + 4Kids Entertainment + + + + + + + + + + + Vans Pipeline Masters Volume 1 (H2690) + 2004 + 4Kids Entertainment + + + + + + + + + + Streetball Classics Volume 1 (H7416) + 2004 + 4Kids Entertainment + + + + + + + + + + + Megas XLR Volume 1 (H2697) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Winx Club Volume 1 (H2686) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Juicebox Music Video - Baha Men, Jump5, Jump5, Beu Sisters, ZOEgirl (H6230A) + 2004 + 4Kids Entertainment + + + + + + + + + + + + Juicebox Music Video - Ashlee Simpson, The Cure, Vanessa Carlton, fan_3, Ashlee Simpson (H6226) + 2004 + 4Kids Entertainment + + + + + + diff --git a/src/devices/machine/smartmed.cpp b/src/devices/machine/smartmed.cpp index 7e4153797f6..5b2fc3bb882 100644 --- a/src/devices/machine/smartmed.cpp +++ b/src/devices/machine/smartmed.cpp @@ -124,9 +124,8 @@ void nand_device::device_start() image_init_result smartmedia_image_device::smartmedia_format_1() { SM_disk_image_header custom_header; - int bytes_read; - bytes_read = fread(&custom_header, sizeof(custom_header)); + const int bytes_read = fread(&custom_header, sizeof(custom_header)); if (bytes_read != sizeof(custom_header)) { return image_init_result::FAIL; @@ -206,6 +205,7 @@ int smartmedia_image_device::detect_geometry( uint8_t id1, uint8_t id2) { switch (id2) { + case 0x73 : m_page_data_size = 0x0200; m_num_pages = 0x08000; m_page_total_size = 0x0210; m_log2_pages_per_block = 5; result = true; break; case 0x75 : m_page_data_size = 0x0200; m_num_pages = 0x10000; m_page_total_size = 0x0210; m_log2_pages_per_block = 5; result = true; break; } } @@ -218,9 +218,8 @@ int smartmedia_image_device::detect_geometry( uint8_t id1, uint8_t id2) image_init_result smartmedia_image_device::smartmedia_format_2() { disk_image_format_2_header custom_header; - int bytes_read, i, j; - bytes_read = fread(&custom_header, sizeof(custom_header)); + const int bytes_read = fread(&custom_header, sizeof(custom_header)); if (bytes_read != sizeof(custom_header)) { return image_init_result::FAIL; @@ -236,7 +235,7 @@ image_init_result smartmedia_image_device::smartmedia_format_2() return image_init_result::FAIL; } - m_data_ptr = auto_alloc_array(machine(), uint8_t, m_page_total_size*m_num_pages); + m_data_ptr = auto_alloc_array(machine(), uint8_t, m_page_total_size * m_num_pages); m_data_uid_ptr = std::make_unique(256 + 16); m_mode = SM_M_INIT; m_pointer_mode = SM_PM_A; @@ -248,20 +247,21 @@ image_init_result smartmedia_image_device::smartmedia_format_2() m_accumulated_status = 0; m_pagereg = std::make_unique(m_page_total_size); m_id_len = 3; - memcpy( m_id, custom_header.data1, m_id_len); + memcpy(m_id, custom_header.data1, m_id_len); m_mp_opcode = 0; m_col_address_cycles = 1; m_row_address_cycles = (m_num_pages > 0x10000) ? 3 : 2; m_sequential_row_read = 1; - for (i=0;i<8;i++) + for (int i = 0; i < 8; i++) { - memcpy( m_data_uid_ptr.get() + i * 32, custom_header.data2, 16); - for (j=0;j<16;j++) m_data_uid_ptr[i*32+16+j] = custom_header.data2[j] ^ 0xFF; + memcpy(m_data_uid_ptr.get() + i * 32, custom_header.data2, 16); + for (int j = 0; j < 16; j++) + m_data_uid_ptr[i * 32 + 16 + j] = custom_header.data2[j] ^ 0xFF; } - memcpy( m_data_uid_ptr.get() + 256, custom_header.data3, 16); + memcpy(m_data_uid_ptr.get() + 256, custom_header.data3, 16); - fread(m_data_ptr, m_page_total_size*m_num_pages); + fread(m_data_ptr, m_page_total_size * m_num_pages); #ifdef SMARTMEDIA_IMAGE_SAVE m_image_format = 2; @@ -279,9 +279,9 @@ image_init_result smartmedia_image_device::call_load() result = smartmedia_format_1(); if (result != image_init_result::PASS) { - // try format 2 - fseek( position, SEEK_SET); - result = smartmedia_format_2(); + // try format 2 + fseek(position, SEEK_SET); + result = smartmedia_format_2(); } return result; } @@ -297,27 +297,26 @@ void smartmedia_image_device::call_unload() if (m_image_format == 1) { SM_disk_image_header custom_header; - int bytes_read; - fseek( 0, SEEK_SET); - bytes_read = fread( &custom_header, sizeof( custom_header)); - if (bytes_read == sizeof( custom_header)) + fseek(0, SEEK_SET); + const int bytes_read = fread(&custom_header, sizeof(custom_header)); + if (bytes_read == sizeof(custom_header)) { if (custom_header.version == 0) { - fseek( 2 + 1, SEEK_CUR); - fwrite( m_data_ptr, m_page_total_size * m_num_pages); + fseek(2 + 1, SEEK_CUR); + fwrite(m_data_ptr, m_page_total_size * m_num_pages); } else if (custom_header.version == 1) { - fseek( 3 + 1 + 256 + 16, SEEK_CUR); - fwrite( m_data_ptr, m_page_total_size * m_num_pages); + fseek(3 + 1 + 256 + 16, SEEK_CUR); + fwrite(m_data_ptr, m_page_total_size * m_num_pages); } } } else if (m_image_format == 2) { - fseek( sizeof( disk_image_format_2_header), SEEK_SET); - fwrite( m_data_ptr, m_page_total_size * m_num_pages); + fseek(sizeof(disk_image_format_2_header), SEEK_SET); + fwrite(m_data_ptr, m_page_total_size * m_num_pages); } } #endif @@ -335,7 +334,7 @@ void smartmedia_image_device::call_unload() m_status = 0xC0; m_accumulated_status = 0; m_pagereg = std::make_unique(m_page_total_size); - memset( m_id, 0, sizeof( m_id)); + memset(m_id, 0, sizeof(m_id)); m_id_len = 0; m_mp_opcode = 0; m_mode_3065 = 0; @@ -388,8 +387,8 @@ void nand_device::command_w(uint8_t data) m_mode_3065 = 0; if (!m_write_rnb.isnull()) { - m_write_rnb( 0); - m_write_rnb( 1); + m_write_rnb(0); + m_write_rnb(1); } break; case 0x00: // Read (1st cycle) @@ -420,10 +419,10 @@ void nand_device::command_w(uint8_t data) } else { - m_mode = SM_M_READ; - m_pointer_mode = SM_PM_C; - m_page_addr = 0; - m_addr_load_ptr = 0; + m_mode = SM_M_READ; + m_pointer_mode = SM_PM_C; + m_page_addr = 0; + m_addr_load_ptr = 0; } break; case 0x80: // Page Program (1st cycle) @@ -442,11 +441,10 @@ void nand_device::command_w(uint8_t data) } else { - int i; m_status = (m_status & 0x80) | m_accumulated_status; //logerror( "smartmedia: program, page_addr %08X\n", m_page_addr); - for (i=0; i Date: Fri, 18 Jun 2021 17:42:16 +0300 Subject: re-enable SHARC recompiler for Gradius 4 --- src/devices/cpu/sharc/sharc.cpp | 10 +++++++++- src/devices/cpu/sharc/sharcdma.hxx | 2 +- src/mame/drivers/hornet.cpp | 10 +++++++++- src/mame/drivers/nwk-tr.cpp | 3 +++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/devices/cpu/sharc/sharc.cpp b/src/devices/cpu/sharc/sharc.cpp index 391520f688b..134611079a8 100644 --- a/src/devices/cpu/sharc/sharc.cpp +++ b/src/devices/cpu/sharc/sharc.cpp @@ -980,7 +980,15 @@ void adsp21062_device::set_flag_input(int flag_num, int state) WRITE_LINE_MEMBER(adsp21062_device::write_stall) { - m_core->write_stalled = (state == 0) ? false : true; + m_core->write_stalled = (state == 0) ? false : true; + + if (m_enable_drc) + { + if (m_core->write_stalled) + spin_until_trigger(45757); + else + machine().scheduler().trigger(45757); + } } void adsp21062_device::check_interrupts() diff --git a/src/devices/cpu/sharc/sharcdma.hxx b/src/devices/cpu/sharc/sharcdma.hxx index 63ea0b85c38..e0df2cb5e54 100644 --- a/src/devices/cpu/sharc/sharcdma.hxx +++ b/src/devices/cpu/sharc/sharcdma.hxx @@ -335,7 +335,7 @@ TIMER_CALLBACK_MEMBER(adsp21062_device::sharc_dma_callback) } dma_op(channel); - if (m_core->dma_op[channel].chain_ptr != 0) + if ((m_core->dma_op[channel].chain_ptr & 0x1ffff) != 0) { schedule_chained_dma_op(channel, m_core->dma_op[channel].chain_ptr, m_core->dma_op[channel].chained_direction); } diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp index 4aa91fc24a3..15e81ac9cd5 100644 --- a/src/mame/drivers/hornet.cpp +++ b/src/mame/drivers/hornet.cpp @@ -409,6 +409,7 @@ public: void init_hornet(); void init_sscope(); void init_sscope2(); + void init_gradius4(); protected: virtual void machine_start() override; @@ -1401,6 +1402,13 @@ void hornet_state::init_hornet() //m_dsp[0]->enable_recompiler(); } +void hornet_state::init_gradius4() +{ + init_hornet(); + + m_dsp[0]->enable_recompiler(); +} + void hornet_state::init_sscope() { m_konppc->set_cgboard_texture_bank(0, "master_cgboard_bank", memregion("master_cgboard")->base()); @@ -1705,7 +1713,7 @@ ROM_END /*************************************************************************/ -GAME( 1998, gradius4, 0, hornet, gradius4, hornet_state, init_hornet, ROT0, "Konami", "Gradius IV: Fukkatsu (ver JAC)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1998, gradius4, 0, hornet, gradius4, hornet_state, init_gradius4, ROT0, "Konami", "Gradius IV: Fukkatsu (ver JAC)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1998, nbapbp, 0, hornet, nbapbp, hornet_state, init_hornet, ROT0, "Konami", "NBA Play By Play (ver JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1998, nbapbpa, nbapbp, hornet, nbapbp, hornet_state, init_hornet, ROT0, "Konami", "NBA Play By Play (ver AAB)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1998, terabrst, 0, terabrst, terabrst, hornet_state, init_hornet, ROT0, "Konami", "Teraburst (1998/07/17 ver UEL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/nwk-tr.cpp b/src/mame/drivers/nwk-tr.cpp index f968ccf9e23..fead2fd0c0c 100644 --- a/src/mame/drivers/nwk-tr.cpp +++ b/src/mame/drivers/nwk-tr.cpp @@ -452,6 +452,9 @@ void nwktr_state::sysreg_w(offs_t offset, uint8_t data) m_konppc->set_cgboard_id((data >> 4) & 0x3); + // Racing Jam sets CG board ID to 2 when writing to the tilemap chip. + // This could mean broadcast to both CG boards? + m_exrgb = data & 0x1; // Select which CG Board outputs signal m_cg_view.select(m_konppc->get_cgboard_id() ? 1 : 0); -- cgit v1.2.3 From 01c7c629308a6e25ceec3f1a518b83831419fca2 Mon Sep 17 00:00:00 2001 From: Scott Stone Date: Fri, 18 Jun 2021 19:13:27 -0400 Subject: assorted comment fixes related to missing/bad dumps --- src/mame/drivers/astrocde.cpp | 2 +- src/mame/drivers/goldstar.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/astrocde.cpp b/src/mame/drivers/astrocde.cpp index eda7f8b7c81..d583a63f3a6 100644 --- a/src/mame/drivers/astrocde.cpp +++ b/src/mame/drivers/astrocde.cpp @@ -1560,7 +1560,7 @@ ROM_START( wow ) ROM_LOAD( "wow.x5", 0x8000, 0x1000, CRC(16912c2b) SHA1(faf9c96d99bc111c5f1618f6863f22fd9269027b) ) ROM_LOAD( "wow.x6", 0x9000, 0x1000, CRC(35797f82) SHA1(376bba29e88c16d95438fa996913b76581df0937) ) ROM_LOAD( "wow.x7", 0xa000, 0x1000, CRC(ce404305) SHA1(a52c6c7b77842f25c79515460be6b7ed959b5edb) ) -/* ROM_LOAD( "wow.x11", 0xc000, CRC(00001000) , ? ) here would go the foreign language ROM */ + //ROM_LOAD( "wow.x11", 0xc000, 0x1000 NO_DUMP ) // here would go the foreign language ROM ROM_END diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp index fdea2ef8d26..2be3d9e2543 100644 --- a/src/mame/drivers/goldstar.cpp +++ b/src/mame/drivers/goldstar.cpp @@ -12233,8 +12233,7 @@ ROM_START( lucky8e ) ROM_REGION( 0x18000, "gfx1", 0 ) ROM_LOAD( "27256.5", 0x00000, 0x8000, CRC(59026af3) SHA1(3d7f7e78968ca26275635aeaa0e994468a3da575) ) ROM_LOAD( "27256.6", 0x08000, 0x8000, CRC(67a073c1) SHA1(36194d57d0dc0601fa1fdf2e6806f11b2ea6da36) ) -// ROM_LOAD( "27128.7", 0x10000, 0x4000, BAD_DUMP CRC(0000b9d0) SHA1(00008fe8a116c33bbd712a639224d041447a45c1) ) - ROM_LOAD( "7", 0x10000, 0x8000, CRC(c415b9d0) SHA1(fd558fe8a116c33bbd712a639224d041447a45c1) ) // from parent set, since 2 of 3 bitplanes matched + ROM_LOAD( "27128.7", 0x10000, 0x8000, BAD_DUMP CRC(c415b9d0) SHA1(fd558fe8a116c33bbd712a639224d041447a45c1) ) // from parent set, since 2 of 3 bitplanes matched ROM_REGION( 0x8000, "gfx2", 0 ) ROM_LOAD( "27128.1", 0x0000, 0x2000, CRC(8ca19ee7) SHA1(2e0cd4a74bd9abef60ed561ba4e5bb2681ce1222) ) // overdump? -- cgit v1.2.3 From fe87ecef4ea7e400a6c9d181f4e0d34175ca906b Mon Sep 17 00:00:00 2001 From: Scott Stone Date: Fri, 18 Jun 2021 19:19:50 -0400 Subject: another comment fix (space in filename) --- src/mame/drivers/at.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp index d1f4638d029..5f91e82b478 100644 --- a/src/mame/drivers/at.cpp +++ b/src/mame/drivers/at.cpp @@ -1976,8 +1976,8 @@ ROM_START( ec1849 ) ROM_REGION16_LE(0x20000,"bios", 0) ROM_LOAD16_BYTE( "cpu-card_27c256_015.rom", 0x10000, 0x8000, CRC(68eadf0a) SHA1(903a7f1c3ebc6b27c31b512b2908c483608b5c13)) ROM_LOAD16_BYTE( "cpu-card_27c256_016.rom", 0x10001, 0x8000, CRC(bc3924d6) SHA1(596be415e6c2bc4ff30a187f146664531565712c)) - //ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_040.rom", 0xc0001, 0x2000, CRC(a3ece315) SHA1(e800e11c3b1b6fcaf41bfb7d4058a9d34fdd2b3f)) - //ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_041.rom", 0xc0000, 0x2000, CRC(b0a2ba7f) SHA1(c8160e8bc97cd391558f1dddd3fd3ec4a19d030c)) + //ROM_LOAD16_BYTE( "video-card_573rf6(2764)_040.rom", 0xc0001, 0x2000, CRC(a3ece315) SHA1(e800e11c3b1b6fcaf41bfb7d4058a9d34fdd2b3f)) + //ROM_LOAD16_BYTE( "video-card_573rf6(2764)_041.rom", 0xc0000, 0x2000, CRC(b0a2ba7f) SHA1(c8160e8bc97cd391558f1dddd3fd3ec4a19d030c)) ROM_END // Morse KP-286 -- cgit v1.2.3 From 617fe8553dfa9957a25f55625eb3e14989878c29 Mon Sep 17 00:00:00 2001 From: cracyc Date: Fri, 18 Jun 2021 21:40:23 -0500 Subject: fmtowns: slightly change sprite timing and status bits and fix layer offset --- src/mame/includes/fmtowns.h | 3 ++- src/mame/video/fmtowns.cpp | 47 ++++++++++++++++++++++++--------------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/mame/includes/fmtowns.h b/src/mame/includes/fmtowns.h index 29d4a855679..d4956a80617 100644 --- a/src/mame/includes/fmtowns.h +++ b/src/mame/includes/fmtowns.h @@ -394,6 +394,7 @@ private: static const device_timer_id TIMER_WAIT = 5; static const device_timer_id TIMER_CDSTATUS = 6; static const device_timer_id TIMER_CDDA = 7; + static const device_timer_id TIMER_SPRITES = 8; void freerun_inc(); void intervaltimer2_timeout(); void poll_keyboard(); @@ -413,7 +414,7 @@ private: TIMER_CALLBACK_MEMBER(towns_cdrom_read_byte); TIMER_CALLBACK_MEMBER(towns_vblank_end); - TIMER_CALLBACK_MEMBER(draw_sprites); + void draw_sprites(); DECLARE_WRITE_LINE_MEMBER(towns_pit_out0_changed); DECLARE_WRITE_LINE_MEMBER(towns_pit_out1_changed); DECLARE_WRITE_LINE_MEMBER(pit2_out1_changed); diff --git a/src/mame/video/fmtowns.cpp b/src/mame/video/fmtowns.cpp index d4471d2777a..124b404be7f 100644 --- a/src/mame/video/fmtowns.cpp +++ b/src/mame/video/fmtowns.cpp @@ -423,12 +423,14 @@ uint8_t towns_state::towns_video_440_r(offs_t offset) ret |= 0x80; } ret |= (m_video.towns_sprite_flag ? 0x02 : 0x00); // Sprite drawing flag - ret |= m_video.towns_sprite_page & 0x01; + ret |= (m_video.towns_sprite_page & 0x01) ? 1 : 0;; return ret; case 0x10: return m_video.towns_sprite_sel; case 0x12: if(LOG_VID) logerror("SPR: reading register %i (0x452) [%02x]\n",m_video.towns_sprite_sel,m_video.towns_sprite_reg[m_video.towns_sprite_sel]); + if(m_video.towns_sprite_sel == 6) + return m_video.towns_sprite_page & 0x01 ? 0x10 : 0; return m_video.towns_sprite_reg[m_video.towns_sprite_sel]; case 0x18: return m_vram_mask_addr; @@ -475,7 +477,10 @@ void towns_state::towns_video_440_w(offs_t offset, uint8_t data) break; case 0x12: logerror("SPR: writing register %i (0x452) [%02x]\n",m_video.towns_sprite_sel,data); - m_video.towns_sprite_reg[m_video.towns_sprite_sel] = data; + if(m_video.towns_sprite_sel == 6) + m_video.towns_sprite_page = data & 0x80 ? 1 : 0; + else + m_video.towns_sprite_reg[m_video.towns_sprite_sel] = data; break; case 0x18: m_vram_mask_addr = data & 1; @@ -966,7 +971,7 @@ void towns_state::render_sprite_16(uint32_t poffset, uint16_t x, uint16_t y, boo } } -TIMER_CALLBACK_MEMBER(towns_state::draw_sprites) +void towns_state::draw_sprites() { uint16_t sprite_limit = (m_video.towns_sprite_reg[0] | (m_video.towns_sprite_reg[1] << 8)) & 0x3ff; uint16_t xoff = (m_video.towns_sprite_reg[2] | (m_video.towns_sprite_reg[3] << 8)) & 0x1ff; @@ -1029,17 +1034,6 @@ TIMER_CALLBACK_MEMBER(towns_state::draw_sprites) render_sprite_16((poffset)&0x1ffff,x,y,xflip,yflip,xhalfsize,yhalfsize,rotation,rect); } } - - if(m_video.towns_sprite_page == 0) // flip VRAM page - { - m_video.towns_sprite_page = 1; - m_video.towns_crtc_reg[21] &= ~0x8000; - } - else - { - m_video.towns_sprite_page = 0; - m_video.towns_crtc_reg[21] |= 0x8000; - } m_video.towns_sprite_flag = 0; } @@ -1084,7 +1078,7 @@ void towns_state::towns_crtc_draw_scan_layer_hicolour(bitmap_rgb32 &bitmap,const off += scroll; } hzoom = ((m_video.towns_crtc_reg[27] & 0x0f00) >> 8) + 1; - off += (m_video.towns_crtc_reg[11] - m_video.towns_crtc_reg[22]) * (2 >> (hzoom - 1)); + off += (float)(m_video.towns_crtc_reg[11] - m_video.towns_crtc_reg[22]) * (2.0f / (float)hzoom); } else { @@ -1096,7 +1090,7 @@ void towns_state::towns_crtc_draw_scan_layer_hicolour(bitmap_rgb32 &bitmap,const off += scroll; } hzoom = (m_video.towns_crtc_reg[27] & 0x000f) + 1; - off += (m_video.towns_crtc_reg[9] - m_video.towns_crtc_reg[18]) * (2 >> (hzoom - 1)); + off += (float)(m_video.towns_crtc_reg[9] - m_video.towns_crtc_reg[18]) * (2.0f / (float)hzoom); } off += line * linesize; @@ -1463,12 +1457,9 @@ void towns_state::draw_text_layer() void towns_state::towns_sprite_start() { - if(!(m_video.towns_sprite_reg[1] & 0x80)) - return; - uint16_t sprite_limit = (m_video.towns_sprite_reg[0] | (m_video.towns_sprite_reg[1] << 8)) & 0x3ff; m_video.towns_sprite_flag = 1; // we are now drawing - m_video.sprite_timer->adjust(m_maincpu->cycles_to_attotime(128 * (1025-sprite_limit))); + m_video.sprite_timer->adjust(attotime::from_usec(32 + 75 * (1024 - sprite_limit))); } TIMER_CALLBACK_MEMBER(towns_state::towns_vblank_end) @@ -1487,15 +1478,27 @@ INTERRUPT_GEN_MEMBER(towns_state::towns_vsync_irq) machine().scheduler().timer_set(m_screen->time_until_vblank_end(), timer_expired_delegate(FUNC(towns_state::towns_vblank_end),this), 0, (void*)m_pic_slave); if(m_video.towns_tvram_enable) draw_text_layer(); - if(m_video.towns_sprite_reg[1] & 0x80) + if((m_video.towns_sprite_reg[1] & 0x80) && !m_video.towns_sprite_flag) + { + if(m_video.towns_sprite_page == 0) // flip VRAM page + { + m_video.towns_sprite_page = 1; + m_video.towns_crtc_reg[21] &= ~0x8000; + } + else + { + m_video.towns_sprite_page = 0; + m_video.towns_crtc_reg[21] |= 0x8000; + } towns_sprite_start(); + } } void towns_state::video_start() { m_video.towns_vram_wplane = 0x00; m_video.towns_sprite_page = 0; - m_video.sprite_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(towns_state::draw_sprites),this)); + m_video.sprite_timer = timer_alloc(TIMER_SPRITES); } uint32_t towns_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -- cgit v1.2.3 From ff5b73b1cb48ec3b5048803e3a889c16ea5ad1e7 Mon Sep 17 00:00:00 2001 From: arbee Date: Fri, 18 Jun 2021 22:54:10 -0400 Subject: apple2e: PAL/SECAM models now have the correct CPU speed. [R. Belmont] --- src/mame/drivers/apple2e.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index 0ccd5cc8cf2..cb0df0279c8 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -4832,6 +4832,9 @@ void apple2e_state::apple2e(machine_config &config) void apple2e_state::apple2epal(machine_config &config) { apple2e(config); + M6502(config.replace(), m_maincpu, 1016966); + m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::apple2e_map); + m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); m_screen->set_raw(1021800*14, (65*7)*2, 0, (40*7)*2, 312, 0, 192); } @@ -4855,6 +4858,10 @@ void apple2e_state::apple2ee(machine_config &config) void apple2e_state::apple2eepal(machine_config &config) { apple2ee(config); + M65C02(config.replace(), m_maincpu, 1016966); + m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::apple2e_map); + m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); + m_screen->set_raw(1021800*14, (65*7)*2, 0, (40*7)*2, 312, 0, 192); } -- cgit v1.2.3 From 4144a500f71d7df027ae2dde0664b22ab5b03de6 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 19 Jun 2021 12:36:46 +0200 Subject: New working clones ------------------ Silk Worm (bootleg, set 2) [Miss Argent] --- src/mame/drivers/tecmo.cpp | 55 ++++++++++++++++++++++++++++++++++++---------- src/mame/mame.lst | 1 + 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/mame/drivers/tecmo.cpp b/src/mame/drivers/tecmo.cpp index 6f3ca2f43a3..a466861f1a1 100644 --- a/src/mame/drivers/tecmo.cpp +++ b/src/mame/drivers/tecmo.cpp @@ -1227,6 +1227,36 @@ ROM_START( silkwormb ) ROM_LOAD( "e16.17", 0x38000, 0x08000, CRC(7ec93873) SHA1(0993a3b3e5ca84ef0ea32159825e379ba4cc5fbb) ) /* bg tiles 27C256 */ ROM_END +ROM_START( silkwormb2 ) // 2-PCB stack, no markings + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "280100_pc-4.4", 0x00000, 0x10000, CRC(a10f2414) SHA1(5dbad60582d3193802c7c5e727c9c2685dec27b0) ) // unique, seems quite different wrt to the other dumped sets + ROM_LOAD( "280100_pc-5.5", 0x10000, 0x10000, CRC(a6c7bb51) SHA1(75f6625459ab65f2d47a282c1295d4db38f5fe51) ) + + ROM_REGION( 0x20000, "soundcpu", 0 ) + ROM_LOAD( "280100_pc-3.3", 0x00000, 0x08000, CRC(5a880df9) SHA1(fc3f78ea05571ecf127fd1a6d3c6c349e300967a) ) // unique + + ROM_REGION( 0x08000, "gfx1", 0 ) // characters + ROM_LOAD( "280100_pc-2.2", 0x00000, 0x08000, CRC(e80a1cd9) SHA1(ef16feb1113acc7401f8951158b25f6f201196f2) ) + + ROM_REGION( 0x40000, "gfx2", 0 ) // sprites + ROM_LOAD( "280100_pc-6.6", 0x00000, 0x10000, CRC(1138d159) SHA1(3b938606d448c4effdfe414bbf495b50cc3bc1c1) ) + ROM_LOAD( "280100_pc-7.7", 0x10000, 0x10000, CRC(d96214f7) SHA1(a5b2be3ae6a6eb8afef2c18c865a998fbf4adf93) ) + ROM_LOAD( "280100_pc-8.8", 0x20000, 0x10000, CRC(0494b38e) SHA1(03255f153824056e430a0b8595103f3b58b1fd97) ) + ROM_LOAD( "280100_pc-9.9", 0x30000, 0x10000, CRC(8ce3cdf5) SHA1(635248514c4e1e5aab7a2ed4d620a5b970d4a43a) ) + + ROM_REGION( 0x40000, "gfx3", 0 ) // fg tiles + ROM_LOAD( "280100_pc-10.10", 0x00000, 0x10000, CRC(8c7138bb) SHA1(0cfd69fa77d5b546f7dad80537d8d2497ae758bc) ) + ROM_LOAD( "280100_pc-11.11", 0x10000, 0x08000, CRC(c0c4687d) SHA1(afe05eb7e5a65c995aeac9ea773ad79eb053303f) ) + ROM_LOAD( "280100_pc-12.12", 0x20000, 0x10000, CRC(bb0f568f) SHA1(b66c6d0407ed0b068c6bf07987f1b923d4a6e4f8) ) + ROM_LOAD( "280100_pc-13.13", 0x30000, 0x08000, CRC(fc472811) SHA1(e862ec9b38f3f3a1f4668fbc587063eee8e9e821) ) + + ROM_REGION( 0x40000, "gfx4", 0 ) // bg tiles + ROM_LOAD( "280100_pc-14.14", 0x00000, 0x10000, CRC(409df64b) SHA1(cada970bf9cc8f6522e7a71e00fe873568852873) ) + ROM_LOAD( "280100_pc-15.15", 0x10000, 0x08000, CRC(b02acdb6) SHA1(6be74bb89680b79b3a5d13af638ed5a0bb077dad) ) + ROM_LOAD( "280100_pc-16.16", 0x20000, 0x08000, CRC(caf7b25e) SHA1(2c348af9d03efd801cbbc06deb02869bd6449518) ) + ROM_LOAD( "280100_pc-17.17", 0x38000, 0x08000, CRC(7ec93873) SHA1(0993a3b3e5ca84ef0ea32159825e379ba4cc5fbb) ) +ROM_END + /* main cpu Z80A @@ -1418,15 +1448,16 @@ void tecmo_state::init_gemini() } -GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen -GAME( 1987, geminij, gemini, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen -GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // regional warning screen is blanked (still get a delay) -GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen -GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen -GAME( 1988, silkwormp, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (prototype)", MACHINE_SUPPORTS_SAVE ) // prototype -GAME( 1988, silkwormb, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "bootleg", "Silk Worm (bootleg)", MACHINE_SUPPORTS_SAVE ) // bootleg of (a different?) prototype -GAME( 1988, backfirt, 0, backfirt, backfirt, tecmo_state, init_gemini, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen +GAME( 1987, geminij, gemini, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen +GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // regional warning screen is blanked (still get a delay) +GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen +GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen +GAME( 1988, silkwormp, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (prototype)", MACHINE_SUPPORTS_SAVE ) // prototype +GAME( 1988, silkwormb, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "bootleg", "Silk Worm (bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) // bootleg of (a different?) prototype +GAME( 1988, silkwormb2, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "bootleg", "Silk Worm (bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, backfirt, 0, backfirt, backfirt, tecmo_state, init_gemini, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 1dab778ecb0..7d7d5be5be7 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -40435,6 +40435,7 @@ silkworm // 6217 - (c) 1988 Tecmo silkwormj // 6217 - (c) 1988 Tecmo silkwormp // 6217 - (c) 1988 Tecmo silkwormb // bootleg +silkwormb2 // bootleg @source:tecmo16.cpp fstarfrc // (c) 1992 Tecmo -- cgit v1.2.3 From 2bd8149bc97a8adf648a48ed8cea414716786cba Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 19 Jun 2021 13:20:39 +0200 Subject: galaxian_rockclim.cpp: demoted to imperfect sound due to missing melody chip emulation --- src/mame/drivers/galaxian_rockclim.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/galaxian_rockclim.cpp b/src/mame/drivers/galaxian_rockclim.cpp index ce2330efaa4..bb8c0b2e204 100644 --- a/src/mame/drivers/galaxian_rockclim.cpp +++ b/src/mame/drivers/galaxian_rockclim.cpp @@ -85,7 +85,7 @@ void galaxian_rockclim_state::rockclim_scroll_w(offs_t offset, uint8_t data) void galaxian_rockclim_state::video_start() { galaxian_state::video_start(); - + m_rockclim_tilemap = &machine().tilemap().create(*m_gfxdecode2, tilemap_get_info_delegate(*this, FUNC(galaxian_rockclim_state::rockclim_get_tile_info)), TILEMAP_SCAN_ROWS,8 * m_x_scale,8,64,32); m_rockclim_v = m_rockclim_h = 0; save_item(NAME(m_rockclim_v)); @@ -263,6 +263,9 @@ ROM_START( rockclim ) ROM_LOAD( "lc05.a5", 0x6000, 0x1000, CRC(5e542149) SHA1(425a5a8769c3fa0887db8ff04e2a4f32f18d2679) ) ROM_LOAD( "lc06.a6", 0x7000, 0x1000, CRC(b2bdca64) SHA1(e72e63725164c922816dda90ac964a94062eab1b) ) + ROM_REGION( 0x800, "melody", 0 ) // Epson 7910C Multi-Melody IC + ROM_LOAD( "7910c 537 104", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping + ROM_REGION( 0x2000, "gfx1", 0 ) ROM_LOAD( "lc08.a9", 0x0000, 0x800, CRC(7f18e1ef) SHA1(2a160b994708ec0f06774dde3ec613af7e3f32c6) ) ROM_LOAD( "lc07.a7", 0x0800, 0x800, CRC(f18b50ac) SHA1(a2328eb55882a09403cae1a497c611b494649cac) ) @@ -290,4 +293,4 @@ void galaxian_rockclim_state::init_rockclim() } // Anonymous namespace -GAME( 1981, rockclim, 0, rockclim, rockclim, galaxian_rockclim_state, init_rockclim, ROT180, "Taito", "Rock Climber", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, rockclim, 0, rockclim, rockclim, galaxian_rockclim_state, init_rockclim, ROT180, "Taito", "Rock Climber", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // misses melody -- cgit v1.2.3 From 64d9f618b6bcfb98ba99c2b5e3cf36f5749ef9b0 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 19 Jun 2021 13:26:56 +0200 Subject: phoenix.cpp, tattack.cpp: added placeholders for missing Epson 7910 dumps --- src/mame/drivers/phoenix.cpp | 3 +++ src/mame/drivers/tattack.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/mame/drivers/phoenix.cpp b/src/mame/drivers/phoenix.cpp index 40065f8e1b9..99a2a50f8d0 100644 --- a/src/mame/drivers/phoenix.cpp +++ b/src/mame/drivers/phoenix.cpp @@ -1288,6 +1288,9 @@ ROM_START( nextfase ) ROM_LOAD( "nf07.bin", 0x3000, 0x0800, CRC(2eab35b4) SHA1(849bf8273317cc869bdd67e50c68399ee8ece81d) ) ROM_LOAD( "nf08.bin", 0x3800, 0x0800, CRC(04c2323f) SHA1(4d820464f57e4f59acc46ea3264dba3cb9c501a1) ) + ROM_REGION( 0x800, "melody", 0 ) // Epson 7910CG Multi-Melody IC + ROM_LOAD( "7910cg", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping + ROM_REGION( 0x1000, "bgtiles", 0 ) ROM_LOAD( "nf11.bin", 0x0000, 0x0800, CRC(3c7e623f) SHA1(e7ff5fc371664af44785c079e92eeb2d8530187b) ) ROM_LOAD( "nf12.bin", 0x0800, 0x0800, CRC(59916d3b) SHA1(71aec70a8e096ed1f0c2297b3ae7dca1b8ecc38d) ) diff --git a/src/mame/drivers/tattack.cpp b/src/mame/drivers/tattack.cpp index 8f419a20d2c..d27a6fe6f52 100644 --- a/src/mame/drivers/tattack.cpp +++ b/src/mame/drivers/tattack.cpp @@ -447,6 +447,9 @@ ROM_START( tattack ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "rom.9a", 0x0000, 0x1000, CRC(47120994) SHA1(b6e90abbc50cba77df4c0aaf50d1f97b99e33b6d) ) + ROM_REGION( 0x800, "melody", 0 ) // Epson 7910CQ Multi-Melody IC + ROM_LOAD( "7910cq", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping + ROM_REGION( 0x1000, "gfx1", 0 ) ROM_LOAD( "rom.6c", 0x0000, 0x1000, CRC(88ce45cf) SHA1(c7a43bfc9e9c2aeb75a98f723558bc88e53401a7) ) ROM_END -- cgit v1.2.3 From f42206bb30fc12b3821ae6e81b2ad80fe851a82f Mon Sep 17 00:00:00 2001 From: cracyc Date: Sat, 19 Jun 2021 13:36:56 -0500 Subject: fmtowns: make the timer actually run --- src/mame/drivers/fmtowns.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp index 44a56d2ee43..ac87d0bcbf7 100644 --- a/src/mame/drivers/fmtowns.cpp +++ b/src/mame/drivers/fmtowns.cpp @@ -464,6 +464,9 @@ void towns_state::device_timer(emu_timer &timer, device_timer_id id, int param, case TIMER_CDDA: towns_delay_cdda((cdrom_image_device*)ptr); break; + case TIMER_SPRITES: + draw_sprites(); + break; } } void towns_state::freerun_inc() -- cgit v1.2.3 From 423b3d0a91f996f5fe6db01a28f0547712de4dd7 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 19 Jun 2021 15:04:34 -0400 Subject: leprechn: Keep VIA clocks consistent with CPU clock --- src/mame/drivers/gameplan.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mame/drivers/gameplan.cpp b/src/mame/drivers/gameplan.cpp index 9baa207b01d..d6e55864a45 100644 --- a/src/mame/drivers/gameplan.cpp +++ b/src/mame/drivers/gameplan.cpp @@ -1000,6 +1000,9 @@ void gameplan_state::leprechn(machine_config &config) { gameplan(config); m_maincpu->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK); + m_via_0->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK); + m_via_1->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK); + m_via_2->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK); /* basic machine hardware */ m_audiocpu->set_addrmap(AS_PROGRAM, &gameplan_state::leprechn_audio_map); -- cgit v1.2.3 From 553042e2b610313369e0432abbf26d23406335a6 Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 19 Jun 2021 19:29:09 -0400 Subject: apple2e: match dot clock to CPU clock for PAL machines. [R. Belmont] --- src/mame/drivers/apple2e.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index cb0df0279c8..bc5e2be148e 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -4835,7 +4835,7 @@ void apple2e_state::apple2epal(machine_config &config) M6502(config.replace(), m_maincpu, 1016966); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::apple2e_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); - m_screen->set_raw(1021800*14, (65*7)*2, 0, (40*7)*2, 312, 0, 192); + m_screen->set_raw(1016966 * 14, (65 * 7) * 2, 0, (40 * 7) * 2, 312, 0, 192); } void apple2e_state::mprof3(machine_config &config) @@ -4862,7 +4862,7 @@ void apple2e_state::apple2eepal(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::apple2e_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); - m_screen->set_raw(1021800*14, (65*7)*2, 0, (40*7)*2, 312, 0, 192); + m_screen->set_raw(1016966 * 14, (65 * 7) * 2, 0, (40 * 7) * 2, 312, 0, 192); } void apple2e_state::spectred(machine_config &config) -- cgit v1.2.3 From ec687c94a03c80896e1553135f76ead5ebda312f Mon Sep 17 00:00:00 2001 From: cracyc Date: Sat, 19 Jun 2021 21:58:53 -0500 Subject: fmtowns: make sure programs can't override the sprite page --- src/mame/video/fmtowns.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mame/video/fmtowns.cpp b/src/mame/video/fmtowns.cpp index 124b404be7f..34b912b54f9 100644 --- a/src/mame/video/fmtowns.cpp +++ b/src/mame/video/fmtowns.cpp @@ -461,6 +461,12 @@ void towns_state::towns_video_440_w(offs_t offset, uint8_t data) break; case 0x03: // logerror("CRTC: writing register %i (0x443) [%02x]\n",towns_crtc_sel,data); + if((m_video.towns_crtc_sel == 21) && (m_video.towns_sprite_reg[1] & 0x80)) + { + m_video.towns_crtc_reg[m_video.towns_crtc_sel] = + (m_video.towns_crtc_reg[m_video.towns_crtc_sel] & 0x80ff) | ((data & 0x7f) << 8); + return; + } m_video.towns_crtc_reg[m_video.towns_crtc_sel] = (m_video.towns_crtc_reg[m_video.towns_crtc_sel] & 0x00ff) | (data << 8); towns_crtc_refresh_mode(); -- cgit v1.2.3 From 4d2c305b27d3acd331dec316306eed627717a3cf Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 19 Jun 2021 23:02:17 -0400 Subject: vme: Modernize slot device code and eliminate deprecation warnings; actually propagate slot number --- src/devices/bus/vme/vme.cpp | 54 +++++++++---------------------------- src/devices/bus/vme/vme.h | 30 ++++++++++----------- src/devices/bus/vme/vme_fccpu20.cpp | 2 -- src/devices/bus/vme/vme_fcisio.cpp | 1 - src/devices/bus/vme/vme_fcscsi.cpp | 1 - src/devices/bus/vme/vme_hcpu30.cpp | 2 -- src/devices/bus/vme/vme_mvme350.cpp | 1 - src/devices/bus/vme/vme_mzr8300.cpp | 1 - 8 files changed, 26 insertions(+), 66 deletions(-) diff --git a/src/devices/bus/vme/vme.cpp b/src/devices/bus/vme/vme.cpp index d0338a4b71d..57f0c6170d2 100644 --- a/src/devices/bus/vme/vme.cpp +++ b/src/devices/bus/vme/vme.cpp @@ -109,54 +109,34 @@ vme_slot_device::vme_slot_device(const machine_config &mconfig, const char *tag, vme_slot_device::vme_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) , device_slot_interface(mconfig, *this) - , m_vme_tag(nullptr) - , m_vme_slottag(nullptr) + , m_vme(*this, finder_base::DUMMY_TAG) + , m_slot_nbr(0) , m_vme_j1_callback(*this) { LOG("%s %s\n", tag, FUNCNAME); } //------------------------------------------------- -// update_vme_chains -//------------------------------------------------- -void vme_slot_device::update_vme_chains(uint32_t slot_nbr) -{ - LOG("%s %s - %d\n", FUNCNAME, tag(), slot_nbr); -} - -//------------------------------------------------- -// set_vme_slot +// device_start - device-specific startup //------------------------------------------------- -void vme_slot_device::set_vme_slot(const char *tag, const char *slottag) +void vme_slot_device::device_start() { - LOG("%s %s - %s\n", FUNCNAME, tag, slottag); - m_vme_tag = tag; - m_vme_slottag = slottag; + // m_card = dynamic_cast(get_card_device()); } //------------------------------------------------- -// device_start - device-specific startup +// device_resolve_objects - resolve objects that +// may be needed for other devices to set +// initial conditions at start time //------------------------------------------------- -void vme_slot_device::device_start() +void vme_slot_device::device_resolve_objects() { device_vme_card_interface *dev = dynamic_cast(get_card_device()); - LOG("%s %s - %s:%s\n", tag(), FUNCNAME, m_vme_tag, m_vme_slottag); + LOG("%s %s - %s\n", tag(), FUNCNAME, m_vme.finder_tag()); if (dev) { - dev->set_vme_tag(m_vme_tag, m_vme_slottag); + dev->set_vme_bus(*m_vme, m_slot_nbr); } - - // m_card = dynamic_cast(get_card_device()); -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- -void vme_slot_device::device_config_complete() -{ - LOG("%s %s\n", tag(), FUNCNAME); } //------------------------------------------------- @@ -457,8 +437,6 @@ void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read3 device_vme_card_interface::device_vme_card_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "vme") , m_vme(nullptr) - , m_vme_tag(nullptr) - , m_vme_slottag(nullptr) , m_slot(0) , m_next(nullptr) { @@ -471,17 +449,9 @@ device_vme_card_interface::~device_vme_card_interface() LOG("%s %s\n", m_device->tag(), FUNCNAME); } -void device_vme_card_interface::set_vme_tag(const char *tag, const char *slottag) -{ - LOG("%s %s\n", tag, FUNCNAME); - m_vme_tag = tag; - m_vme_slottag = slottag; -} - -void device_vme_card_interface::set_vme_device() +void device_vme_card_interface::interface_post_start() { LOG("%s %s\n", m_device->tag(), FUNCNAME); - m_vme = dynamic_cast(device().machine().device(m_vme_tag)); // printf("*** %s %sfound\n", m_vme_tag, m_vme ? "" : "not "); if (m_vme) m_vme->add_vme_card(this); } diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h index 93947e40e91..e49b23cbbbe 100644 --- a/src/devices/bus/vme/vme.h +++ b/src/devices/bus/vme/vme.h @@ -55,12 +55,11 @@ // CONSTANTS //************************************************************************** -#define VME_BUS_TAG "vme" - //void vme_slot1(device_slot_interface &device); // Disabled until we know how to combine a board driver and a slot device. void vme_slots(device_slot_interface &device); class device_vme_card_interface; // This interface is standardized +class vme_device; class vme_slot_device : public device_t, public device_slot_interface @@ -85,16 +84,15 @@ public: }; // construction/destruction - template - vme_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, uint32_t slot_nbr, char const *bus_tag) + template + vme_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, uint32_t slot_nbr, U &&bus_tag) : vme_slot_device(mconfig, tag, owner, 0) { option_reset(); opts(*this); set_default_option(dflt); set_fixed(false); - set_vme_slot(bus_tag, tag); - update_vme_chains(slot_nbr); + set_vme_slot(std::forward(bus_tag), slot_nbr); } vme_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -102,8 +100,7 @@ public: // Callbacks to the board from the VME bus comes through here auto vme_j1_callback() { return m_vme_j1_callback.bind(); } - void set_vme_slot(const char *tag, const char *slottag); - void update_vme_chains(uint32_t slot_nbr); + template void set_vme_slot(T &&tag, uint32_t slot_nbr) { m_vme.set_tag(std::forward(tag)); m_slot_nbr = slot_nbr; } virtual uint8_t read8(offs_t offset); virtual void write8(offs_t offset, uint8_t data); @@ -113,10 +110,11 @@ protected: // device-level overrides virtual void device_start() override; - virtual void device_config_complete() override; + virtual void device_resolve_objects() override; // configuration - const char *m_vme_tag, *m_vme_slottag; + required_device m_vme; + uint32_t m_slot_nbr; // callbacks devcb_write_line m_vme_j1_callback; @@ -139,8 +137,6 @@ public: void set_cputag(const char *tag) { m_cputag = tag; } void use_owner_spaces(); - virtual space_config_vector memory_space_config() const override; - const address_space_config m_a32_config; void add_vme_card(device_vme_card_interface *card); @@ -196,6 +192,8 @@ protected: virtual void device_reset() override; simple_list m_device_list; + virtual space_config_vector memory_space_config() const override; + // internal state cpu_device *m_maincpu; @@ -218,22 +216,22 @@ class device_vme_card_interface : public device_interface template friend class simple_list; public: // inline configuration - void set_vme_tag(const char *tag, const char *slottag); + void set_vme_bus(vme_device &vme, int slot) { m_vme = &vme; m_slot = slot; } // construction/destruction virtual ~device_vme_card_interface(); - void set_vme_device(); virtual uint8_t read8(offs_t offset); virtual void write8(offs_t offset, uint8_t data); +protected: device_vme_card_interface(const machine_config &mconfig, device_t &device); -protected: + virtual void interface_post_start() override; + device_t *m_device; vme_device *m_vme; - const char *m_vme_tag, *m_vme_slottag; int m_slot; private: diff --git a/src/devices/bus/vme/vme_fccpu20.cpp b/src/devices/bus/vme/vme_fccpu20.cpp index 8759c47d143..ee07b86e1be 100644 --- a/src/devices/bus/vme/vme_fccpu20.cpp +++ b/src/devices/bus/vme/vme_fccpu20.cpp @@ -443,8 +443,6 @@ void vme_fccpu20_device::device_start() { LOG("%s\n", FUNCNAME); - set_vme_device(); - save_pointer (NAME (m_sysrom), sizeof(m_sysrom)); save_pointer (NAME (m_sysram), sizeof(m_sysram)); // save_item(NAME(m_board_id)); // TODO: Save this "non base type" item diff --git a/src/devices/bus/vme/vme_fcisio.cpp b/src/devices/bus/vme/vme_fcisio.cpp index d9e35370812..de4c03dfab8 100644 --- a/src/devices/bus/vme/vme_fcisio.cpp +++ b/src/devices/bus/vme/vme_fcisio.cpp @@ -405,7 +405,6 @@ vme_fcisio1_card_device::vme_fcisio1_card_device(const machine_config &mconfig, void vme_fcisio1_card_device::device_start() { LOG("%s\n", FUNCNAME); - set_vme_device(); /* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */ m_sysrom = (uint16_t*)(memregion ("maincpu")->base () + 0xf00000); diff --git a/src/devices/bus/vme/vme_fcscsi.cpp b/src/devices/bus/vme/vme_fcscsi.cpp index 508ae910e9c..7324dd907b6 100644 --- a/src/devices/bus/vme/vme_fcscsi.cpp +++ b/src/devices/bus/vme/vme_fcscsi.cpp @@ -329,7 +329,6 @@ vme_fcscsi1_card_device::vme_fcscsi1_card_device(const machine_config &mconfig, void vme_fcscsi1_card_device::device_start() { LOG("%s\n", FUNCNAME); - set_vme_device(); /* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */ m_sysrom = (uint16_t*)(memregion ("maincpu")->base () + 0xe00000); diff --git a/src/devices/bus/vme/vme_hcpu30.cpp b/src/devices/bus/vme/vme_hcpu30.cpp index 0c072c20191..2d70c85dd94 100644 --- a/src/devices/bus/vme/vme_hcpu30.cpp +++ b/src/devices/bus/vme/vme_hcpu30.cpp @@ -180,8 +180,6 @@ void vme_hcpu30_card_device::device_start() { LOG("%s %s\n", tag(), FUNCNAME); - set_vme_device(); - save_pointer (NAME (m_sysrom), sizeof(m_sysrom)); save_pointer (NAME (m_sysram), sizeof(m_sysram)); diff --git a/src/devices/bus/vme/vme_mvme350.cpp b/src/devices/bus/vme/vme_mvme350.cpp index 1b8f2f7a564..a0dca46b996 100644 --- a/src/devices/bus/vme/vme_mvme350.cpp +++ b/src/devices/bus/vme/vme_mvme350.cpp @@ -224,7 +224,6 @@ vme_mvme350_card_device::vme_mvme350_card_device(const machine_config &mconfig, void vme_mvme350_card_device::device_start() { LOG("%s %s\n", tag(), FUNCNAME); - set_vme_device(); /* Setup r/w handlers for shared memory area */ #if 0 diff --git a/src/devices/bus/vme/vme_mzr8300.cpp b/src/devices/bus/vme/vme_mzr8300.cpp index cdcd3bd267e..99e2e8c0889 100644 --- a/src/devices/bus/vme/vme_mzr8300.cpp +++ b/src/devices/bus/vme/vme_mzr8300.cpp @@ -168,7 +168,6 @@ vme_mzr8300_card_device::vme_mzr8300_card_device(const machine_config &mconfig, void vme_mzr8300_card_device::device_start() { LOG("%s %s\n", tag(), FUNCNAME); - set_vme_device(); /* Setup r/w handlers for first SIO in A16 */ uint32_t base = 0xFF0000; -- cgit v1.2.3 From 1dbe2e7fa9aa9cfc7e260837511b9e86da5ea07f Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 19 Jun 2021 23:14:46 -0400 Subject: nes_slot: Deprecate some functionality that should really be eliminated --- src/devices/bus/nes/nes_slot.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index acdfed33164..a207a26e869 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -237,9 +237,9 @@ protected: device_nes_cart_interface(const machine_config &mconfig, device_t &device); DECLARE_WRITE_LINE_MEMBER(set_irq_line); - void hold_irq_line(); + [[deprecated("IRQs should be cleared explicitly")]] void hold_irq_line(); void reset_cpu(); - void poke(offs_t offset, uint8_t data); + [[deprecated("devices should stop poking into memory spaces where they don't belong")]] void poke(offs_t offset, uint8_t data); // internal state uint8_t *m_prg; -- cgit v1.2.3 From a0145af82901725f181ddf0fe659588d54b0bbfc Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 20 Jun 2021 07:29:58 -0400 Subject: mpc60: Add v1.12 program and voice ROMs [DBWBP] --- src/mame/drivers/mpc60.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/mame/drivers/mpc60.cpp b/src/mame/drivers/mpc60.cpp index 194ffd81abb..a68c645e6a8 100644 --- a/src/mame/drivers/mpc60.cpp +++ b/src/mame/drivers/mpc60.cpp @@ -152,15 +152,21 @@ void mpc60_state::mpc60(machine_config &config) } ROM_START(mpc60) - ROM_REGION16_LE(0x40000, "program", 0) // V2.12 CPU ROMs (MBM27C512-20) - ROM_LOAD16_BYTE("mp6cpu2.ic2", 0x00000, 0x10000, CRC(e71b1acb) SHA1(b56ddfff1c546fc21341b1a614e18da9726312f4)) - ROM_LOAD16_BYTE("mp6cpu3.ic3", 0x00001, 0x10000, CRC(f068838b) SHA1(42e815880d1c1a5b7d1c7933aad9c28410fc2627)) - ROM_LOAD16_BYTE("mp6cpu1.ic4", 0x20000, 0x10000, CRC(1271bc73) SHA1(99fd6fa4c04e5bdf868e78072fec5b55c01350da)) - ROM_LOAD16_BYTE("mpc6cpu4.ic5", 0x20001, 0x10000, CRC(d922a66d) SHA1(0f4bc0522b9826d617f4af72382d75853515d7f5)) + ROM_REGION16_LE(0x40000, "program", 0) + ROM_SYSTEM_BIOS(0, "v212", "v2.12") // V2.12 CPU ROMs (MBM27C512-20) + ROMX_LOAD("mp6cpu2.ic2", 0x00000, 0x10000, CRC(e71b1acb) SHA1(b56ddfff1c546fc21341b1a614e18da9726312f4), ROM_BIOS(0) | ROM_SKIP(1)) + ROMX_LOAD("mp6cpu3.ic3", 0x00001, 0x10000, CRC(f068838b) SHA1(42e815880d1c1a5b7d1c7933aad9c28410fc2627), ROM_BIOS(0) | ROM_SKIP(1)) + ROMX_LOAD("mp6cpu1.ic4", 0x20000, 0x10000, CRC(1271bc73) SHA1(99fd6fa4c04e5bdf868e78072fec5b55c01350da), ROM_BIOS(0) | ROM_SKIP(1)) + ROMX_LOAD("mpc6cpu4.ic5", 0x20001, 0x10000, CRC(d922a66d) SHA1(0f4bc0522b9826d617f4af72382d75853515d7f5), ROM_BIOS(0) | ROM_SKIP(1)) + ROM_SYSTEM_BIOS(1, "v112", "v1.12") + ROMX_LOAD("mpc60_v1-12_2.ic2", 0x00000, 0x10000, CRC(ddf26146) SHA1(987547198dc3984ab3dfa7f133ba7dca702cc269), ROM_BIOS(1) | ROM_SKIP(1)) + ROMX_LOAD("mpc60_v1-12_4.ic3", 0x00001, 0x10000, CRC(9725d193) SHA1(6efda3d6760b3951c5036108106d446f6e128c59), ROM_BIOS(1) | ROM_SKIP(1)) + ROMX_LOAD("mpc60_v1-12_1.ic4", 0x20000, 0x10000, CRC(f202dbb1) SHA1(6fd82224a99b52b6c414b88d5c920abda32ffa32), ROM_BIOS(1) | ROM_SKIP(1)) + ROMX_LOAD("mpc60_v1-12_3.ic5", 0x20001, 0x10000, CRC(ba5a1640) SHA1(1f9f49c49a3682b9a44d614ac411a7c043df399e), ROM_BIOS(1) | ROM_SKIP(1)) ROM_REGION16_LE(0x10000, "waves", 0) - ROM_LOAD16_BYTE("ic17", 0x00000, 0x08000, NO_DUMP) // lowest nibble is unused - ROM_LOAD16_BYTE("ic18", 0x00001, 0x08000, NO_DUMP) + ROM_LOAD16_BYTE("mpc60_voice_1_v1-0.ic17", 0x00000, 0x08000, CRC(b8fdfe3e) SHA1(c2f0e1d8813d4178d2f883a3f3e461e036b56229)) // lowest nibble is unused + ROM_LOAD16_BYTE("mpc60_voice_2_v1-0.ic18", 0x00001, 0x08000, CRC(42f8e0a6) SHA1(a22dbefb9dafbb0c4095fd0bf4e63e67b5ec3b95)) ROM_REGION(0x1000, "panelcpu", 0) ROM_LOAD("upd78c11g-044-36.ic1", 0x0000, 0x1000, NO_DUMP) -- cgit v1.2.3 From e5390ab1fb6225decefa0f062f75d20245723879 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 20 Jun 2021 16:58:41 +0200 Subject: New machines marked as NOT_WORKING ---------------------------------- LK-3000 [hap, Sean Riddle] --- scripts/target/mame/mess.lua | 1 + src/devices/video/dl1416.h | 2 +- src/mame/drivers/lk3000.cpp | 291 +++++++++++++++++++++++++++++++++++++++++++ src/mame/layout/lk3000.lay | 32 +++++ src/mame/mame.lst | 3 + src/mame/mess.flt | 1 + 6 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 src/mame/drivers/lk3000.cpp create mode 100644 src/mame/layout/lk3000.lay diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index dc299592c17..00a1dd57fd6 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4585,6 +4585,7 @@ files { MAME_DIR .. "src/mame/drivers/learnwin.cpp", MAME_DIR .. "src/mame/drivers/lft.cpp", MAME_DIR .. "src/mame/drivers/lg-dvd.cpp", + MAME_DIR .. "src/mame/drivers/lk3000.cpp", MAME_DIR .. "src/mame/drivers/lms46.cpp", MAME_DIR .. "src/mame/drivers/lola8a.cpp", MAME_DIR .. "src/mame/drivers/lilith.cpp", diff --git a/src/devices/video/dl1416.h b/src/devices/video/dl1416.h index 9c4b6228ee3..1f1d4496acb 100644 --- a/src/devices/video/dl1416.h +++ b/src/devices/video/dl1416.h @@ -7,7 +7,7 @@ * 4-Digit 16-Segment Alphanumeric Intelligent Display * with Memory/Decoder/Driver * - * See video/dl1416.c for more info + * See video/dl1416.cpp for more info * ****************************************************************************/ diff --git a/src/mame/drivers/lk3000.cpp b/src/mame/drivers/lk3000.cpp new file mode 100644 index 00000000000..47a1ab8dbaa --- /dev/null +++ b/src/mame/drivers/lk3000.cpp @@ -0,0 +1,291 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Sean Riddle +/****************************************************************************** + +Lexicon LK-3000, a pocket computer. +It was also licensed to Nixdorf. + +Hardware notes: +- 3870 MCU (Motorola brand) @ 4MHz(2MHz internal) +- optional extra ROM or RAM +- 4*Litronix DL 1414 (16*17segs total) +- 33-button keypad + +The CPU and memory is on the cartridge. In theory, any hardware configuration +is possible, but it looks like they always used a 3870. + +cartridge types known: +- CPU + 4KB ROM (ROM may be unpopulated) +- CPU + 2*4KB ROM +- CPU + 1KB battery-backed RAM (2*NEC D444) + +******************************************************************************/ + +#include "emu.h" +#include "cpu/f8/f8.h" +#include "machine/f3853.h" +#include "video/dl1416.h" + +// internal artwork +#include "lk3000.lh" + + +namespace { + +class lk3000_state : public driver_device +{ +public: + lk3000_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_dl1414(*this, "dl1414_%u", 0), + m_inputs(*this, "IN.%u", 0), + m_digits(*this, "digit%u", 0U) + { } + + void lk3000(machine_config &config); + + // CLR button is tied to MCU RESET pin + DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); } + +protected: + virtual void machine_start() override; + +private: + // devices/pointers + required_device m_maincpu; + required_device_array m_dl1414; + required_ioport_array<8> m_inputs; + output_finder<16> m_digits; + + void main_map(address_map &map); + void main_io(address_map &map); + + template void update_display(offs_t offset, u16 data); + + u8 p0_r(); + void p0_w(u8 data); + u8 p1_r(); + void p1_w(u8 data); + u8 p4_r(); + void p4_w(u8 data); + u8 p5_r(); + void p5_w(u8 data); + + u8 m_p0 = 0; + u8 m_p1 = 0; + u8 m_p4 = 0; + u8 m_p5 = 0; +}; + +void lk3000_state::machine_start() +{ + m_digits.resolve(); + + // register for savestates + save_item(NAME(m_p0)); + save_item(NAME(m_p1)); + save_item(NAME(m_p4)); + save_item(NAME(m_p5)); +} + + + +/****************************************************************************** + I/O +******************************************************************************/ + +template +void lk3000_state::update_display(offs_t offset, u16 data) +{ + m_digits[N * 4 + offset] = data; +} + +u8 lk3000_state::p0_r() +{ + return 0; +} + +void lk3000_state::p0_w(u8 data) +{ +} + +u8 lk3000_state::p1_r() +{ + u8 data = 0; + + // P10-P13: multiplexed inputs + if (m_p4 & 0x10) + data |= m_inputs[~m_p4 & 7]->read(); + + return data; +} + +void lk3000_state::p1_w(u8 data) +{ + // P10-P15,_P15: DL1414 data + for (int i = 0; i < 4; i++) + m_dl1414[i]->data_w((~data & 0x3f) | (data << 1 & 0x40)); + + m_p1 = data; +} + +u8 lk3000_state::p4_r() +{ + return 0; +} + +void lk3000_state::p4_w(u8 data) +{ + // P40,P41: DL1414 address + for (int i = 0; i < 4; i++) + m_dl1414[i]->addr_w(~data & 3); + + // P42,P43,GND,P45: 7442 to DL1414 _WR + for (int i = 0; i < 4; i++) + m_dl1414[i]->wr_w(BIT(1 << (~data >> 2 & 0xb), i)); + + // P40,P41,P42,P44: 7442 to keypad mux + m_p4 = data; +} + +u8 lk3000_state::p5_r() +{ + return 0; +} + +void lk3000_state::p5_w(u8 data) +{ +} + + + +/****************************************************************************** + Address Maps +******************************************************************************/ + +void lk3000_state::main_map(address_map &map) +{ + map.global_mask(0x7ff); + map(0x0000, 0x07ff).rom(); +} + +void lk3000_state::main_io(address_map &map) +{ + map(0x00, 0x00).rw(FUNC(lk3000_state::p0_r), FUNC(lk3000_state::p0_w)); + map(0x01, 0x01).rw(FUNC(lk3000_state::p1_r), FUNC(lk3000_state::p1_w)); + map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write)); +} + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( lk3000 ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) + + PORT_START("RESET") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, lk3000_state, reset_button, 0) PORT_NAME("clr") +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Configs +******************************************************************************/ + +void lk3000_state::lk3000(machine_config &config) +{ + // basic machine hardware + F8(config, m_maincpu, 4_MHz_XTAL/2); + m_maincpu->set_addrmap(AS_PROGRAM, &lk3000_state::main_map); + m_maincpu->set_addrmap(AS_IO, &lk3000_state::main_io); + m_maincpu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge)); + + auto &psu(F38T56(config, "psu", 4_MHz_XTAL/2)); + psu.set_int_vector(0x20); + psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ); + psu.read_a().set(FUNC(lk3000_state::p4_r)); + psu.write_a().set(FUNC(lk3000_state::p4_w)); + psu.read_b().set(FUNC(lk3000_state::p5_r)); + psu.write_b().set(FUNC(lk3000_state::p5_w)); + + // video hardware + DL1414T(config, m_dl1414[0], u32(0)).update().set(FUNC(lk3000_state::update_display<0>)); + DL1414T(config, m_dl1414[1], u32(0)).update().set(FUNC(lk3000_state::update_display<1>)); + DL1414T(config, m_dl1414[2], u32(0)).update().set(FUNC(lk3000_state::update_display<2>)); + DL1414T(config, m_dl1414[3], u32(0)).update().set(FUNC(lk3000_state::update_display<3>)); + config.set_default_layout(layout_lk3000); +} + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( lk3000 ) + ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 ) + // none here, it's in the module slot + //ROM_LOAD("sc80249p_lk3900m", 0x0000, 0x0800, CRC(192edfcf) SHA1(527216b6e15b9ab5f83742f437a5a8d8eef14ce2) ) // will be moved to swlist +ROM_END + +} // anonymous namespace + + + +/****************************************************************************** + Drivers +******************************************************************************/ + +// YEAR NAME PARENT COMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS +CONS( 1979, lk3000, 0, 0, lk3000, lk3000, lk3000_state, empty_init, "Lexicon", "LK-3000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/layout/lk3000.lay b/src/mame/layout/lk3000.lay new file mode 100644 index 00000000000..3c263976ee1 --- /dev/null +++ b/src/mame/layout/lk3000.lay @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 7d7d5be5be7..cb976aa4757 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -19869,6 +19869,9 @@ macxl // 1985 Apple Macintosh XL @source:littlerb.cpp littlerb // (c) 1993 TCH +@source:lk3000.cpp +lk3000 + @source:lkage.cpp bygone // A53 (c) 1985 Taito Corporation - prototype ? lkage // A54 (c) 1984 Taito Corporation diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 680c4173e04..daa4524d519 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -536,6 +536,7 @@ lft_phasor.cpp lg-dvd.cpp lilith.cpp lisa.cpp +lk3000.cpp llc1.cpp llc2.cpp lms46.cpp -- cgit v1.2.3 From 75517876f47a769a38053e934b7138b720087a7c Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 20 Jun 2021 11:03:48 -0400 Subject: New machines marked as NOT_WORKING ---------------------------------- Yamaha AN1x Control Synthesizer [DBWBP] Yamaha DX100 Digital Programmable Algorithm Synthesizer [DBWBP] --- scripts/target/mame/mess.lua | 2 + src/mame/drivers/yman1x.cpp | 87 ++++++++++++++++++++++++++ src/mame/drivers/ymdx100.cpp | 144 +++++++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 6 ++ src/mame/mess.flt | 2 + 5 files changed, 241 insertions(+) create mode 100644 src/mame/drivers/yman1x.cpp create mode 100644 src/mame/drivers/ymdx100.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 00a1dd57fd6..7b621e52b03 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4408,6 +4408,8 @@ files { createMESSProjects(_target, _subtarget, "yamaha") files { MAME_DIR .. "src/mame/machine/mulcd.cpp", + MAME_DIR .. "src/mame/drivers/yman1x.cpp", + MAME_DIR .. "src/mame/drivers/ymdx100.cpp", MAME_DIR .. "src/mame/drivers/ymdx11.cpp", MAME_DIR .. "src/mame/drivers/ymmu5.cpp", MAME_DIR .. "src/mame/drivers/ymmu50.cpp", diff --git a/src/mame/drivers/yman1x.cpp b/src/mame/drivers/yman1x.cpp new file mode 100644 index 00000000000..483db76ce64 --- /dev/null +++ b/src/mame/drivers/yman1x.cpp @@ -0,0 +1,87 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/******************************************************************************* + + Skeleton driver for Yamaha AN1x Control Synthesizer. + + This is roughly similar in principle to the MU-80, but the sound chip is a + YSS236-F VOP3 instead of SWP20. A second VOP3 (with its own ROM) is on the + separate DMS board. + +*******************************************************************************/ + +#include "emu.h" +//#include "bus/midi/midi.h" +#include "cpu/h8/h83002.h" +#include "cpu/m6805/m6805.h" +#include "machine/mulcd.h" +#include "machine/nvram.h" +#include "sound/meg.h" +#include "speaker.h" + +namespace { + +class an1x_state : public driver_device +{ +public: + an1x_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_pks(*this, "pks") + , m_meg(*this, "meg") + { + } + + void an1x(machine_config &config); + +private: + void mem_map(address_map &map); + + required_device m_maincpu; + required_device m_pks; + required_device m_meg; +}; + +void an1x_state::mem_map(address_map &map) +{ + map(0x000000, 0x0fffff).rom().region("program", 0); + map(0x200000, 0x23ffff).ram().share("nvram"); +} + +static INPUT_PORTS_START(an1x) +INPUT_PORTS_END + +void an1x_state::an1x(machine_config &config) +{ + H83002(config, m_maincpu, 16_MHz_XTAL); // HD6413002FP16 + m_maincpu->set_addrmap(AS_PROGRAM, &an1x_state::mem_map); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 2x HM628128BLFP-8 + CR2450 battery + + HD63705(config, m_pks, 8_MHz_XTAL).set_disable(); // HD63B05V0E65F + + MULCD(config, "lcd"); // LC7985ND (back-lit) + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + MEG(config, m_meg, 11.2896_MHz_XTAL); +} + +ROM_START(an1x) + ROM_REGION16_BE(0x100000, "program", 0) + ROM_LOAD16_WORD_SWAP("yamaha an1x 1.04.ic2", 0x000000, 0x100000, CRC(f03b8c30) SHA1(778b669a450660f2b15cc385f156dc6676c437f1)) + + ROM_REGION(0x1000, "pks", 0) + ROM_LOAD("xn668a00.bin", 0x0000, 0x1000, NO_DUMP) + + ROM_REGION16_BE(0x20000, "vop3", 0) + ROM_LOAD("xt113b00.ic9", 0x00000, 0x20000, NO_DUMP) // LH531024 + + ROM_REGION16_BE(0x20000, "vop3s", 0) + ROM_LOAD("xt113b00.ic1", 0x00000, 0x20000, NO_DUMP) // LH531024 +ROM_END + +} // anonymous namespace + +SYST(1997, an1x, 0, 0, an1x, an1x, an1x_state, empty_init, "Yamaha", "AN1x Control Synthesizer", MACHINE_NOT_WORKING) diff --git a/src/mame/drivers/ymdx100.cpp b/src/mame/drivers/ymdx100.cpp new file mode 100644 index 00000000000..a9b7813b425 --- /dev/null +++ b/src/mame/drivers/ymdx100.cpp @@ -0,0 +1,144 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/******************************************************************************* + + Skeleton driver for Yamaha DX100 & DX27 FM synthesizers. + + The main differences between DX100 and DX27 are that DX27 has 61 keys + rather than 49, but DX100 is portable and can run on battery power. Their + tone generation capabilities are identical. + +*******************************************************************************/ + +#include "emu.h" + +#include "bus/midi/midi.h" +#include "cpu/m6800/m6801.h" +#include "machine/adc0808.h" +#include "machine/clock.h" +#include "machine/nvram.h" +#include "sound/ymopm.h" +#include "video/hd44780.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" + +namespace { + +class yamaha_dx100_state : public driver_device +{ +public: + yamaha_dx100_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_midi_in(true) + { + } + + void dx100(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + HD44780_PIXEL_UPDATE(lcd_pixel_update); + void palette_init(palette_device &palette); + + DECLARE_WRITE_LINE_MEMBER(p22_w); + + void mem_map(address_map &map); + + required_device m_maincpu; + + bool m_midi_in; +}; + +void yamaha_dx100_state::machine_start() +{ + save_item(NAME(m_midi_in)); +} + +HD44780_PIXEL_UPDATE(yamaha_dx100_state::lcd_pixel_update) +{ + if (x < 5 && y < 8 && line < 2 && pos < 16) + bitmap.pix(line * 10 + y + 1 + ((y == 7) ? 1 : 0), pos * 6 + x + 1) = state ? 1 : 2; +} + +void yamaha_dx100_state::palette_init(palette_device &palette) +{ + palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00)); // background + palette.set_pen_color(1, rgb_t(0xff, 0xff, 0xff)); // lcd pixel on + palette.set_pen_color(2, rgb_t(0x18, 0x18, 0x18)); // lcd pixel off +} + +WRITE_LINE_MEMBER(yamaha_dx100_state::p22_w) +{ + if (state) + m_maincpu->m6801_clock_serial(); +} + +void yamaha_dx100_state::mem_map(address_map &map) +{ + map(0x0000, 0x001f).m(m_maincpu, FUNC(hd6303x_cpu_device::hd6301x_io)); + map(0x0040, 0x00ff).ram(); // internal RAM + map(0x0800, 0x0fff).ram().share("nvram"); + map(0x1000, 0x17ff).ram(); + map(0x2000, 0x2001).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)); + map(0x2800, 0x2800).r("adc", FUNC(m58990_device::data_r)); + map(0x3000, 0x3000).w("adc", FUNC(m58990_device::address_data_start_w)); + map(0x3800, 0x3801).rw("ymsnd", FUNC(ym2164_device::read), FUNC(ym2164_device::write)); + map(0x8000, 0xffff).rom().region("program", 0); +} + +static INPUT_PORTS_START(dx100) +INPUT_PORTS_END + +void yamaha_dx100_state::dx100(machine_config &config) +{ + HD6303X(config, m_maincpu, 7.15909_MHz_XTAL / 2); // HD6303XP + m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_dx100_state::mem_map); + m_maincpu->in_p2_cb().set([this]() -> u8 { return m_midi_in ? 0x04 : 0; }); + m_maincpu->in_p6_cb().set("adc", FUNC(m58990_device::eoc_r)).lshift(4); + m_maincpu->out_ser_tx_cb().set("mdout", FUNC(midi_port_device::write_txd)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5518BPL + CR2032T battery + + m58990_device &adc(M58990(config, "adc", 7.15909_MHz_XTAL / 8)); // M58990P-1 (clocked by E) + adc.in_callback<5>().set_constant(0x80); // "CNG RAM BATTERY!" displayed unless value is between 0x70 and 0xCC + + CLOCK(config, "subclock", 500_kHz_XTAL).signal_handler().set(FUNC(yamaha_dx100_state::p22_w)); + + MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set([this](int state) { m_midi_in = state; }); + MIDI_PORT(config, "mdout", midiout_slot, "midiout"); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update)); + screen.set_size(6*16+1, 10*2+1); + screen.set_visarea_full(); + screen.set_palette("palette"); + + PALETTE(config, "palette", FUNC(yamaha_dx100_state::palette_init), 3); + + hd44780_device &lcdc(HD44780(config, "lcdc", 0)); // HD44780RA00 + lcdc.set_lcd_size(2, 16); + lcdc.set_pixel_update_cb(FUNC(yamaha_dx100_state::lcd_pixel_update)); + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + ym2164_device &ymsnd(YM2164(config, "ymsnd", 7.15909_MHz_XTAL / 2)); // with YM3014 DAC + ymsnd.add_route(0, "lspeaker", 0.60); + ymsnd.add_route(1, "rspeaker", 0.60); +} + +ROM_START(dx100) + ROM_REGION(0x8000, "program", 0) + ROM_LOAD("dx100 v1.1.bin", 0x0000, 0x8000, CRC(c3ed7c86) SHA1(5b003db1bb5c1909907153f6446b63b07f5b41d6)) +ROM_END + +} // anonymous namespace + +SYST(1985, dx100, 0, 0, dx100, dx100, yamaha_dx100_state, empty_init, "Yamaha", "DX100 Digital Programmable Algorithm Synthesizer", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index cb976aa4757..6156277bc40 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -43268,6 +43268,12 @@ yes // yiear // GX407 (c) 1985 yiear2 // GX407 (c) 1985 +@source:yman1x.cpp +an1x // + +@source:ymdx100.cpp +dx100 // + @source:ymdx11.cpp dx11 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index daa4524d519..5e33591c50f 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -1179,6 +1179,8 @@ xbox.cpp xerox820.cpp xor100.cpp yes.cpp +yman1x.cpp +ymdx100.cpp ymdx11.cpp ymmu100.cpp ymmu5.cpp -- cgit v1.2.3 From 6fbe50823696f2b9d770243ecbfa12f6379882be Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 20 Jun 2021 17:20:24 +0200 Subject: dl1616: dl1414 does not have ce pin or addr latch --- src/devices/video/dl1416.cpp | 36 +++++++++++++++++++++++------------- src/devices/video/dl1416.h | 18 ++++++++++-------- src/mame/drivers/sitcom.cpp | 2 -- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/devices/video/dl1416.cpp b/src/devices/video/dl1416.cpp index 2508bb179fb..4321192e981 100644 --- a/src/devices/video/dl1416.cpp +++ b/src/devices/video/dl1416.cpp @@ -185,15 +185,12 @@ dl1414_device::dl1414_device( device_t *owner, u32 clock) : device_t(mconfig, type, tag, owner, clock) - , m_update_cb(*this) - , m_digit_ram{ 0x00, 0x00, 0x00, 0x00 } - , m_cursor_state{ false, false, false, false } , m_wr_in(true) - , m_ce_in(true) - , m_ce_latch(true) , m_addr_in(0x00) - , m_addr_latch(0x00) , m_data_in(0x00) + , m_update_cb(*this) + , m_digit_ram{ 0x00, 0x00, 0x00, 0x00 } + , m_cursor_state{ false, false, false, false } { } @@ -204,7 +201,10 @@ dl1416_device::dl1416_device( device_t *owner, u32 clock) : dl1414_device(mconfig, type, tag, owner, clock) + , m_ce_in(true) + , m_ce_latch(true) , m_cu_in(true) + , m_addr_latch(0x00) { } @@ -220,18 +220,12 @@ void dl1414_device::device_start() save_item(NAME(m_digit_ram)); save_item(NAME(m_cursor_state)); save_item(NAME(m_wr_in)); - save_item(NAME(m_ce_in)); - save_item(NAME(m_ce_latch)); save_item(NAME(m_addr_in)); - save_item(NAME(m_addr_latch)); save_item(NAME(m_data_in)); // set initial state for input lines m_wr_in = true; - m_ce_in = true; - m_ce_latch = true; m_addr_in = 0x00; - m_addr_latch = 0x00; m_data_in = 0x00; // randomise internal RAM @@ -249,10 +243,16 @@ void dl1416_device::device_start() dl1414_device::device_start(); // register for state saving + save_item(NAME(m_ce_in)); + save_item(NAME(m_ce_latch)); save_item(NAME(m_cu_in)); + save_item(NAME(m_addr_latch)); // set initial state for input lines + m_ce_in = true; + m_ce_latch = true; m_cu_in = true; + m_addr_latch = 0x00; } //------------------------------------------------- @@ -272,6 +272,16 @@ void dl1414_device::device_reset() *****************************************************************************/ WRITE_LINE_MEMBER( dl1414_device::wr_w ) +{ + if (bool(state) != m_wr_in) + { + m_wr_in = bool(state); + if (m_wr_in) + bus_w(m_addr_in, m_data_in); + } +} + +WRITE_LINE_MEMBER( dl1416_device::wr_w ) { if (bool(state) != m_wr_in) { @@ -289,7 +299,7 @@ WRITE_LINE_MEMBER( dl1414_device::wr_w ) } } -WRITE_LINE_MEMBER( dl1414_device::ce_w ) +WRITE_LINE_MEMBER( dl1416_device::ce_w ) { m_ce_in = bool(state); } diff --git a/src/devices/video/dl1416.h b/src/devices/video/dl1416.h index 1f1d4496acb..ce1d61071f4 100644 --- a/src/devices/video/dl1416.h +++ b/src/devices/video/dl1416.h @@ -36,8 +36,7 @@ public: auto update() { return m_update_cb.bind(); } // signal-level interface - DECLARE_WRITE_LINE_MEMBER(wr_w); // write strobe (rising edge) - DECLARE_WRITE_LINE_MEMBER(ce_w); // chip enable (active low) + virtual DECLARE_WRITE_LINE_MEMBER(wr_w); // write strobe (rising edge) void addr_w(u8 state); void data_w(u8 state); @@ -59,23 +58,24 @@ protected: void set_cursor_state(offs_t offset, bool state); virtual u16 translate(u8 digit, bool cursor) const = 0; + // input line state + bool m_wr_in; + u8 m_addr_in; + u8 m_data_in; + private: devcb_write16 m_update_cb; // internal state u8 m_digit_ram[4]; // holds the digit code for each position bool m_cursor_state[4]; // holds the cursor state for each position - - // input line state - bool m_wr_in; - bool m_ce_in, m_ce_latch; - u8 m_addr_in, m_addr_latch; - u8 m_data_in; }; class dl1416_device : public dl1414_device { public: + virtual DECLARE_WRITE_LINE_MEMBER(wr_w) override; + DECLARE_WRITE_LINE_MEMBER(ce_w); // chip enable (active low) DECLARE_WRITE_LINE_MEMBER(cu_w); // cursor enable (active low) protected: @@ -93,7 +93,9 @@ protected: private: // input line state + bool m_ce_in, m_ce_latch; bool m_cu_in; + u8 m_addr_latch; }; #endif // MAME_VIDEO_DL1416_H diff --git a/src/mame/drivers/sitcom.cpp b/src/mame/drivers/sitcom.cpp index e1e7a85c03b..be152e87490 100644 --- a/src/mame/drivers/sitcom.cpp +++ b/src/mame/drivers/sitcom.cpp @@ -334,8 +334,6 @@ void sitcom_timer_state::machine_start() void sitcom_timer_state::machine_reset() { sitcom_state::machine_reset(); - - m_ds2->ce_w(0); } void sitcom_timer_state::update_dac(uint8_t value) -- cgit v1.2.3 From 976e707ffe2cf9f0d3cc12a6d959f8dae9071778 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Mon, 21 Jun 2021 01:31:58 +1000 Subject: jupace: fixed bug that crashes messui when snapshot used. --- src/mame/drivers/jupace.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/mame/drivers/jupace.cpp b/src/mame/drivers/jupace.cpp index 5bb5768521f..0ce284a9a44 100644 --- a/src/mame/drivers/jupace.cpp +++ b/src/mame/drivers/jupace.cpp @@ -170,11 +170,12 @@ private: SNAPSHOT_LOAD_MEMBER(ace_state::snapshot_cb) { + std::vector RAM(0x10000); cpu_device *cpu = m_maincpu; - uint8_t *RAM = memregion(cpu->tag())->base(); address_space &space = cpu->space(AS_PROGRAM); - unsigned char ace_repeat, ace_byte, loop; - int done=0, ace_index=0x2000; + unsigned char ace_repeat, ace_byte; + u16 ace_index=0x2000; + bool done = false; if (m_ram->size() < 16*1024) { @@ -194,7 +195,7 @@ SNAPSHOT_LOAD_MEMBER(ace_state::snapshot_cb) { case 0x00: logerror("File loaded!\r\n"); - done = 1; + done = true; break; case 0x01: image.fread(&ace_byte, 1); @@ -202,7 +203,7 @@ SNAPSHOT_LOAD_MEMBER(ace_state::snapshot_cb) break; default: image.fread(&ace_repeat, 1); - for (loop = 0; loop < ace_byte; loop++) + for (u8 loop = 0; loop < ace_byte; loop++) RAM[ace_index++] = ace_repeat; break; } -- cgit v1.2.3 From d40706395b0987ecea00f8fe16bb5ae2ad521b15 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 20 Jun 2021 12:22:53 -0400 Subject: h8500: Add mode control and EPROM variant types --- src/devices/cpu/h8500/h8500.cpp | 3 ++- src/devices/cpu/h8500/h8500.h | 10 ++++++++-- src/devices/cpu/h8500/h8510.cpp | 2 +- src/devices/cpu/h8500/h8520.cpp | 11 +++++++++-- src/devices/cpu/h8500/h8520.h | 8 ++++++++ src/devices/cpu/h8500/h8532.cpp | 11 +++++++++-- src/devices/cpu/h8500/h8532.h | 8 ++++++++ src/devices/cpu/h8500/h8534.cpp | 23 +++++++++++++++++++---- src/devices/cpu/h8500/h8534.h | 19 +++++++++++++++++-- src/mame/drivers/betacam.cpp | 3 ++- src/mame/drivers/bvm.cpp | 2 +- 11 files changed, 84 insertions(+), 16 deletions(-) diff --git a/src/devices/cpu/h8500/h8500.cpp b/src/devices/cpu/h8500/h8500.cpp index c96fed16f7f..765988ceeaa 100644 --- a/src/devices/cpu/h8500/h8500.cpp +++ b/src/devices/cpu/h8500/h8500.cpp @@ -12,10 +12,11 @@ #include "h8500.h" #include "h8500dasm.h" -h8500_device::h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, address_map_constructor map) +h8500_device::h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, int defmode, address_map_constructor map) : cpu_device(mconfig, type, tag, owner, clock) , m_program_config("program", ENDIANNESS_BIG, buswidth, addrbits, 0, map) , m_ram_config("internal RAM", ENDIANNESS_BIG, 16, ramsize, 0, address_map_constructor(FUNC(h8500_device::ram_map), this)) + , m_mode_control(defmode) , m_pc(0) , m_ppc(0) , m_sr(0) diff --git a/src/devices/cpu/h8500/h8500.h b/src/devices/cpu/h8500/h8500.h index ede393687a9..3755ab7a4ab 100644 --- a/src/devices/cpu/h8500/h8500.h +++ b/src/devices/cpu/h8500/h8500.h @@ -18,8 +18,10 @@ public: H8500_R4, H8500_R5, H8500_FP, H8500_SP }; + void set_mode(u8 mode) { assert(!configured()); m_mode_control = mode; } + protected: - h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, address_map_constructor map); + h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, int defmode, address_map_constructor map); // device-level overrides virtual void device_config_complete() override; @@ -40,7 +42,8 @@ protected: // device_state_interface overrides virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; - virtual bool h8_maximum_mode() const noexcept { return true; } + u8 mode_control() const { return m_mode_control; } + virtual bool h8_maximum_mode() const noexcept { return m_mode_control == 3 || m_mode_control == 4; } // all except H8/570 private: void ram_map(address_map &map); @@ -52,6 +55,9 @@ private: address_space *m_program; memory_access<11, 1, 0, ENDIANNESS_BIG>::cache m_ram_cache; + // misc. configuration + u8 m_mode_control; + // internal registers u16 m_pc; u16 m_ppc; diff --git a/src/devices/cpu/h8500/h8510.cpp b/src/devices/cpu/h8500/h8510.cpp index 413f99cc248..b4ade58d8d5 100644 --- a/src/devices/cpu/h8500/h8510.cpp +++ b/src/devices/cpu/h8500/h8510.cpp @@ -12,7 +12,7 @@ DEFINE_DEVICE_TYPE(HD6415108, hd6415108_device, "hd6415108", "Hitachi HD6415108 (H8/510)") h8510_device::h8510_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) - : h8500_device(mconfig, type, tag, owner, clock, 24, 16, 0, address_map_constructor(FUNC(h8510_device::internal_map), this)) + : h8500_device(mconfig, type, tag, owner, clock, 24, 16, 0, 4, address_map_constructor(FUNC(h8510_device::internal_map), this)) { } diff --git a/src/devices/cpu/h8500/h8520.cpp b/src/devices/cpu/h8500/h8520.cpp index 9a3a076d5e4..459a979da98 100644 --- a/src/devices/cpu/h8500/h8520.cpp +++ b/src/devices/cpu/h8500/h8520.cpp @@ -10,9 +10,10 @@ #include "h8520.h" DEFINE_DEVICE_TYPE(HD6435208, hd6435208_device, "hd6435208", "Hitachi HD6435208 (H8/520)") +DEFINE_DEVICE_TYPE(HD6475208, hd6475208_device, "hd6475208", "Hitachi HD6475208 (H8/520)") h8520_device::h8520_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) - : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 9, address_map_constructor(FUNC(h8520_device::internal_map), this)) + : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 9, 4, address_map_constructor(FUNC(h8520_device::internal_map), this)) { } @@ -21,9 +22,15 @@ hd6435208_device::hd6435208_device(const machine_config &mconfig, const char *ta { } +hd6475208_device::hd6475208_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : h8520_device(mconfig, HD6475208, tag, owner, clock) +{ +} + void h8520_device::internal_map(address_map &map) { - map(0x0000, 0x3fff).rom().region(DEVICE_SELF, 0); // modes 2, 4, 7 + if (mode_control() == 2 || mode_control() == 4 || mode_control() == 7) + map(0x0000, 0x3fff).rom().region(DEVICE_SELF, 0); #if 0 map(0xff80, 0xff80).w(FUNC(h8520_device::p1ddr_w)); map(0xff81, 0xff81).w(FUNC(h8520_device::p2ddr_w)); diff --git a/src/devices/cpu/h8500/h8520.h b/src/devices/cpu/h8500/h8520.h index fc8795e7425..7f66327c796 100644 --- a/src/devices/cpu/h8500/h8520.h +++ b/src/devices/cpu/h8500/h8520.h @@ -24,6 +24,14 @@ public: hd6435208_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; +class hd6475208_device : public h8520_device +{ +public: + // device type constructor + hd6475208_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + DECLARE_DEVICE_TYPE(HD6435208, hd6435208_device) +DECLARE_DEVICE_TYPE(HD6475208, hd6475208_device) #endif // MAME_CPU_H8500_H8520_H diff --git a/src/devices/cpu/h8500/h8532.cpp b/src/devices/cpu/h8500/h8532.cpp index 9d0be448e3f..20c9869c4ee 100644 --- a/src/devices/cpu/h8500/h8532.cpp +++ b/src/devices/cpu/h8500/h8532.cpp @@ -10,9 +10,10 @@ #include "h8532.h" DEFINE_DEVICE_TYPE(HD6435328, hd6435328_device, "hd6435328", "Hitachi HD6435328 (H8/532)") +DEFINE_DEVICE_TYPE(HD6475328, hd6475328_device, "hd6475328", "Hitachi HD6475328 (H8/532)") h8532_device::h8532_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) - : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 10, address_map_constructor(FUNC(h8532_device::internal_map), this)) + : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 10, 4, address_map_constructor(FUNC(h8532_device::internal_map), this)) { } @@ -21,9 +22,15 @@ hd6435328_device::hd6435328_device(const machine_config &mconfig, const char *ta { } +hd6475328_device::hd6475328_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : h8532_device(mconfig, HD6475328, tag, owner, clock) +{ +} + void h8532_device::internal_map(address_map &map) { - map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0); // modes 2, 4, 7 + if (mode_control() == 2 || mode_control() == 4 || mode_control() == 7) + map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0); #if 0 map(0xff80, 0xff80).w(FUNC(h8532_device::p1ddr_w)); map(0xff81, 0xff81).w(FUNC(h8532_device::p2ddr_w)); diff --git a/src/devices/cpu/h8500/h8532.h b/src/devices/cpu/h8500/h8532.h index c9b08ee1d00..71ec652a465 100644 --- a/src/devices/cpu/h8500/h8532.h +++ b/src/devices/cpu/h8500/h8532.h @@ -24,6 +24,14 @@ public: hd6435328_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; +class hd6475328_device : public h8532_device +{ +public: + // device type constructor + hd6475328_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + DECLARE_DEVICE_TYPE(HD6435328, hd6435328_device) +DECLARE_DEVICE_TYPE(HD6475328, hd6475328_device) #endif // MAME_CPU_H8500_H8532_H diff --git a/src/devices/cpu/h8500/h8534.cpp b/src/devices/cpu/h8500/h8534.cpp index dd33af71128..06c9b0dc24f 100644 --- a/src/devices/cpu/h8500/h8534.cpp +++ b/src/devices/cpu/h8500/h8534.cpp @@ -9,11 +9,13 @@ #include "emu.h" #include "h8534.h" +DEFINE_DEVICE_TYPE(HD6435348, hd6435348_device, "hd6435348", "Hitachi HD6435348 (H8/534)") DEFINE_DEVICE_TYPE(HD6475348, hd6475348_device, "hd6475348", "Hitachi HD6475348 (H8/534)") DEFINE_DEVICE_TYPE(HD6435368, hd6435368_device, "hd6435368", "Hitachi HD6435368 (H8/536)") +DEFINE_DEVICE_TYPE(HD6475368, hd6475368_device, "hd6475368", "Hitachi HD6475368 (H8/536)") h8534_device::h8534_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor map) - : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 11, map) + : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 11, 4, map) { } @@ -22,6 +24,11 @@ h8534_device::h8534_device(const machine_config &mconfig, device_type type, cons { } +hd6435348_device::hd6435348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : h8534_device(mconfig, HD6435348, tag, owner, clock) +{ +} + hd6475348_device::hd6475348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : h8534_device(mconfig, HD6475348, tag, owner, clock) { @@ -37,16 +44,24 @@ hd6435368_device::hd6435368_device(const machine_config &mconfig, const char *ta { } +hd6475368_device::hd6475368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : h8536_device(mconfig, HD6475368, tag, owner, clock) +{ +} + void h8534_device::internal_map(address_map &map) { - map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0); // modes 2, 4, 7 + if (mode_control() == 2 || mode_control() == 4 || mode_control() == 7) + map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0); register_field_map(map); } void h8536_device::internal_map(address_map &map) { - //map(0x0000, 0xee7f).rom().region(DEVICE_SELF, 0); // mode 2? - //map(0x0000, 0xf67f).rom().region(DEVICE_SELF, 0); // modes 4, 7 + if (mode_control() == 2) + map(0x0000, 0xee7f).rom().region(DEVICE_SELF, 0); + else if (mode_control() == 4 || mode_control() == 7) + map(0x0000, 0xf67f).rom().region(DEVICE_SELF, 0); register_field_map(map); } diff --git a/src/devices/cpu/h8500/h8534.h b/src/devices/cpu/h8500/h8534.h index 8e5c357ff1b..2fad7985a70 100644 --- a/src/devices/cpu/h8500/h8534.h +++ b/src/devices/cpu/h8500/h8534.h @@ -11,9 +11,8 @@ class h8534_device : public h8500_device { protected: - // delegating constructor + // delegating constructors h8534_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); - h8534_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor map); void register_field_map(address_map &map); @@ -22,6 +21,13 @@ private: void internal_map(address_map &map); }; +class hd6435348_device : public h8534_device +{ +public: + // device type constructor + hd6435348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + class hd6475348_device : public h8534_device { public: @@ -45,7 +51,16 @@ public: hd6435368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; +class hd6475368_device : public h8536_device +{ +public: + // device type constructor + hd6475368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +DECLARE_DEVICE_TYPE(HD6435348, hd6435348_device) DECLARE_DEVICE_TYPE(HD6475348, hd6475348_device) DECLARE_DEVICE_TYPE(HD6435368, hd6435368_device) +DECLARE_DEVICE_TYPE(HD6475368, hd6475368_device) #endif // MAME_CPU_H8500_H8534_H diff --git a/src/mame/drivers/betacam.cpp b/src/mame/drivers/betacam.cpp index 38f136351f9..59dacce5b1c 100644 --- a/src/mame/drivers/betacam.cpp +++ b/src/mame/drivers/betacam.cpp @@ -98,7 +98,8 @@ void betacam_state::betacam(machine_config &config) m_systemcpu->set_addrmap(AS_PROGRAM, &betacam_state::system_mem_map); m_systemcpu->p2_in_cb().set_ioport("DSW1"); - HD6475348(config, m_servocpu, 20_MHz_XTAL); //Actual chip is marked "H8/534 6435348F 10" + HD6435348(config, m_servocpu, 20_MHz_XTAL); //Actual chip is marked "H8/534 6435348F 10" + m_servocpu->set_mode(3); m_servocpu->set_addrmap(AS_PROGRAM, &betacam_state::servo_mem_map); //CXD1095(config, "cxdio0"); diff --git a/src/mame/drivers/bvm.cpp b/src/mame/drivers/bvm.cpp index af931fefd7b..a6ee2d9767c 100644 --- a/src/mame/drivers/bvm.cpp +++ b/src/mame/drivers/bvm.cpp @@ -51,7 +51,6 @@ private: void bvm_state::mem_map(address_map &map) { - // internal ROM not used here? map(0x00000, 0x0f67f).rw("flash", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)); map(0x10000, 0x17fff).ram().share("nvram"); map(0x18000, 0x18007).rw("cxdio0", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)); @@ -66,6 +65,7 @@ INPUT_PORTS_END void bvm_state::bvm(machine_config &config) { HD6435368(config, m_maincpu, 20_MHz_XTAL); + m_maincpu->set_mode(3); // internal ROM not used here? m_maincpu->set_addrmap(AS_PROGRAM, &bvm_state::mem_map); CAT28F020(config, "flash"); -- cgit v1.2.3 From 0d0f25642cce66bc9697fc164b4db6e2d9ece1c3 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 20 Jun 2021 12:44:33 -0400 Subject: New machines marked as NOT_WORKING ---------------------------------- Yamaha SY35 Music Synthesizer [DBWBP] --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/ymsy35.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 ++ src/mame/mess.flt | 1 + 4 files changed, 81 insertions(+) create mode 100644 src/mame/drivers/ymsy35.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 7b621e52b03..871ad4a66c7 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4417,6 +4417,7 @@ files { MAME_DIR .. "src/mame/drivers/ymmu100.cpp", MAME_DIR .. "src/mame/drivers/ympsr60.cpp", MAME_DIR .. "src/mame/drivers/ympsr340.cpp", + MAME_DIR .. "src/mame/drivers/ymsy35.cpp", MAME_DIR .. "src/mame/drivers/ymtx81z.cpp", MAME_DIR .. "src/mame/drivers/ymvl70.cpp", MAME_DIR .. "src/mame/drivers/fb01.cpp", diff --git a/src/mame/drivers/ymsy35.cpp b/src/mame/drivers/ymsy35.cpp new file mode 100644 index 00000000000..9e291a1a121 --- /dev/null +++ b/src/mame/drivers/ymsy35.cpp @@ -0,0 +1,76 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/******************************************************************************* + + Skeleton driver for Yamaha SY35 AWM/FM vector synthesizer. + +*******************************************************************************/ + +#include "emu.h" +//#include "bus/midi/midi.h" +#include "cpu/h8500/h8520.h" +#include "cpu/m6805/m6805.h" + +namespace { + +class yamaha_sy35_state : public driver_device +{ +public: + yamaha_sy35_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_scancpu(*this, "scancpu") + { + } + + void sy35(machine_config &config); + +private: + void mem_map(address_map &map); + + required_device m_maincpu; + required_device m_scancpu; +}; + +void yamaha_sy35_state::mem_map(address_map &map) +{ + map(0x00000, 0x1ffff).rom().region("program", 0); + map(0x20000, 0x27fff).mirror(0x8000).ram(); + //map(0x30000, 0x3ffff).rw("card", FUNC(sy35_card_device::read), FUNC(sy35_card_device::write)); + map(0x80000, 0xbffff).rom().region("sound_make", 0); +} + +static INPUT_PORTS_START(sy35) +INPUT_PORTS_END + +void yamaha_sy35_state::sy35(machine_config &config) +{ + HD6435208(config, m_maincpu, 20_MHz_XTAL); // HD6435208A00P or HD6475208P + m_maincpu->set_mode(3); // internal ROM disabled + m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_sy35_state::mem_map); + + HD63705(config, m_scancpu, 8_MHz_XTAL).set_disable(); // HD63B05V0C85P + + //TMC3493PH(config, "gew5a", 12.8_MHz_XTAL); + //TMC3493PH(config, "gew5b", 12.8_MHz_XTAL); + //YM3413(config, "ldsp"); +} + +ROM_START(sy35) + ROM_REGION(0x20000, "program", 0) + ROM_LOAD("xk932a0.ic7", 0x00000, 0x20000, CRC(e86f47ac) SHA1(e14e309ba09e0f6de165e9366e199b74d1411f6c)) // 27C010 (second half blank) + + ROM_REGION(0x40000, "sound_make", 0) + ROM_LOAD("xl401a0.ic6", 0x00000, 0x40000, CRC(614dfe1b) SHA1(7c2edd2bb6157d95b0f54f712fc89666846caead)) // 27C020 + + ROM_REGION(0x1000, "scancpu", 0) + ROM_LOAD("xh257a00.ic2", 0x0000, 0x1000, NO_DUMP) + + ROM_REGION(0x200000, "voice", 0) + ROM_LOAD("xl429a00.ic8", 0x000000, 0x100000, NO_DUMP) + ROM_LOAD("xl430a00.ic9", 0x100000, 0x100000, NO_DUMP) +ROM_END + +} // anonymous namespace + +SYST(1992, sy35, 0, 0, sy35, sy35, yamaha_sy35_state, empty_init, "Yamaha", "SY35 Music Synthesizer", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 6156277bc40..fa32f27b5b7 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -43298,6 +43298,9 @@ psr70 // 1985 PSR-70 @source:ympsr340.cpp psr340 // 1999 PSR-340 +@source:ymsy35.cpp +sy35 // + @source:ymtx81z.cpp tx81z // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 5e33591c50f..babfebc8e37 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -1188,6 +1188,7 @@ ymmu50.cpp ymmu80.cpp ympsr60.cpp ympsr340.cpp +ymsy35.cpp ymtx81z.cpp ymvl70.cpp z100.cpp -- cgit v1.2.3 From cf01398c86af96c7320726de6361e9bbca4db68c Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 20 Jun 2021 13:03:14 -0400 Subject: New machines marked as NOT_WORKING ---------------------------------- Casio SK-5 [DBWBP] --- src/mame/drivers/sk1.cpp | 6 ++++++ src/mame/mame.lst | 1 + 2 files changed, 7 insertions(+) diff --git a/src/mame/drivers/sk1.cpp b/src/mame/drivers/sk1.cpp index 3c0384ec2fe..50a9c93d9c4 100644 --- a/src/mame/drivers/sk1.cpp +++ b/src/mame/drivers/sk1.cpp @@ -203,6 +203,11 @@ ROM_START(sk1) ROM_LOAD("sk1.lsi2", 0x0000, 0x8000, CRC(d615963c) SHA1(0dbf2d1c4c776f1a1c35dd2be4d6ca03882afd4c)) ROM_END +ROM_START(sk5) + ROM_REGION(0x8000, "lsi2", 0) // µPD23C256EAC-038 + ROM_LOAD("casio_sk5.bin", 0x0000, 0x8000, CRC(1fda590b) SHA1(c77ccb5fa20275478bf271512633fa1561d6f07c)) +ROM_END + ROM_START(sk10) ROM_REGION(0x8000, "lsi2", 0) // µPD23C256EAC-070 ROM_LOAD("casio_sk10.bin", 0x0000, 0x8000, CRC(5945b619) SHA1(929e906bfa0fcd99a8398b37ec62d0512299065c)) @@ -217,5 +222,6 @@ ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS SYST( 1985, sk1, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-1", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +SYST( 1987, sk5, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-5", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) SYST( 1987, sk10, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-10", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) SYST( 1988, sk2, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-2", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index fa32f27b5b7..1b5fcf12f18 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -38224,6 +38224,7 @@ sitcomtmr // @source:sk1.cpp sk1 // sk2 // +sk5 // sk10 // @source:sk101bl.cpp -- cgit v1.2.3 From 87894e9c99a63d33100e982674d491234a432ca4 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 20 Jun 2021 17:32:35 -0400 Subject: adam, bw2, cbm2, newbrain, pet, plus4, pofo, vic10, vic20: Eliminate bus tag macros and legacy lookups; use finder arrays in some places --- src/devices/bus/adam/exp.h | 8 -------- src/devices/bus/bw2/exp.h | 7 ------- src/devices/bus/cbm2/exp.cpp | 9 --------- src/devices/bus/cbm2/exp.h | 7 ------- src/devices/bus/newbrain/eim.cpp | 2 +- src/devices/bus/newbrain/exp.h | 7 ------- src/devices/bus/newbrain/fdc.cpp | 14 +++++--------- src/devices/bus/newbrain/fdc.h | 5 +---- src/devices/bus/pet/exp.h | 7 ------- src/devices/bus/plus4/c1551.cpp | 4 ++-- src/devices/bus/plus4/exp.cpp | 9 --------- src/devices/bus/plus4/exp.h | 7 ------- src/devices/bus/pofo/exp.h | 7 ------- src/devices/bus/pofo/hpc104.cpp | 2 +- src/devices/bus/vic10/exp.cpp | 9 --------- src/devices/bus/vic10/exp.h | 8 -------- src/devices/bus/vic20/exp.h | 8 -------- src/devices/bus/vip/exp.h | 7 ------- src/mame/drivers/adam.cpp | 34 +++++++++++++++++----------------- src/mame/drivers/cbm2.cpp | 2 +- src/mame/drivers/pet.cpp | 2 +- src/mame/drivers/plus4.cpp | 2 +- src/mame/drivers/pofo.cpp | 2 +- src/mame/drivers/vic10.cpp | 2 +- src/mame/drivers/vic20.cpp | 2 +- src/mame/includes/adam.h | 8 ++------ src/mame/includes/bw2.h | 2 +- src/mame/includes/newbrain.h | 2 +- src/mame/includes/vip.h | 2 +- 29 files changed, 38 insertions(+), 149 deletions(-) diff --git a/src/devices/bus/adam/exp.h b/src/devices/bus/adam/exp.h index ee74bf0396a..d9e993c3a1f 100644 --- a/src/devices/bus/adam/exp.h +++ b/src/devices/bus/adam/exp.h @@ -14,14 +14,6 @@ #include "softlist_dev.h" -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define ADAM_LEFT_EXPANSION_SLOT_TAG "slot1" -#define ADAM_CENTER_EXPANSION_SLOT_TAG "slot2" -#define ADAM_RIGHT_EXPANSION_SLOT_TAG "slot3" - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/bw2/exp.h b/src/devices/bus/bw2/exp.h index dfb5924351b..6c6acf11f9a 100644 --- a/src/devices/bus/bw2/exp.h +++ b/src/devices/bus/bw2/exp.h @@ -42,13 +42,6 @@ -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define BW2_EXPANSION_SLOT_TAG "exp" - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/cbm2/exp.cpp b/src/devices/bus/cbm2/exp.cpp index 7bc35f33120..cc0f3516bc5 100644 --- a/src/devices/bus/cbm2/exp.cpp +++ b/src/devices/bus/cbm2/exp.cpp @@ -76,15 +76,6 @@ cbm2_expansion_slot_device::cbm2_expansion_slot_device(const machine_config &mco void cbm2_expansion_slot_device::device_start() { m_card = get_card_device(); - - // inherit bus clock - // FIXME: this should be unnecessary as slots pass DERIVED_CLOCK(1, 1) through by default - if (clock() == 0) - { - cbm2_expansion_slot_device *root = machine().device(CBM2_EXPANSION_SLOT_TAG); - assert(root); - set_unscaled_clock(root->clock()); - } } diff --git a/src/devices/bus/cbm2/exp.h b/src/devices/bus/cbm2/exp.h index 9781e4ac05a..b9f967137ca 100644 --- a/src/devices/bus/cbm2/exp.h +++ b/src/devices/bus/cbm2/exp.h @@ -33,13 +33,6 @@ -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define CBM2_EXPANSION_SLOT_TAG "exp" - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/newbrain/eim.cpp b/src/devices/bus/newbrain/eim.cpp index be3cae2e615..7b3685eeea7 100644 --- a/src/devices/bus/newbrain/eim.cpp +++ b/src/devices/bus/newbrain/eim.cpp @@ -113,7 +113,7 @@ newbrain_eim_device::newbrain_eim_device(const machine_config &mconfig, const ch device_newbrain_expansion_slot_interface(mconfig, *this), m_ctc(*this, Z80CTC_TAG), m_acia(*this, MC6850_TAG), - m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_rom(*this, "eim"), m_ram(*this, RAM_TAG) { diff --git a/src/devices/bus/newbrain/exp.h b/src/devices/bus/newbrain/exp.h index e8293a9c540..922ef17213a 100644 --- a/src/devices/bus/newbrain/exp.h +++ b/src/devices/bus/newbrain/exp.h @@ -42,13 +42,6 @@ -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define NEWBRAIN_EXPANSION_SLOT_TAG "exp" - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/newbrain/fdc.cpp b/src/devices/bus/newbrain/fdc.cpp index a356d034a39..fa046e0d5a9 100644 --- a/src/devices/bus/newbrain/fdc.cpp +++ b/src/devices/bus/newbrain/fdc.cpp @@ -135,11 +135,8 @@ newbrain_fdc_device::newbrain_fdc_device(const machine_config &mconfig, const ch device_newbrain_expansion_slot_interface(mconfig, *this), m_maincpu(*this, Z80_TAG), m_fdc(*this, UPD765_TAG), - m_floppy0(*this, UPD765_TAG ":0"), - m_floppy1(*this, UPD765_TAG ":1"), - m_floppy2(*this, UPD765_TAG ":2"), - m_floppy3(*this, UPD765_TAG ":3"), - m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG) + m_floppy(*this, UPD765_TAG ":%u", 0U), + m_exp(*this, "exp") { } @@ -224,10 +221,9 @@ void newbrain_fdc_device::iorq_w(offs_t offset, uint8_t data, bool &prtov) void newbrain_fdc_device::moton(int state) { - if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state); - if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(!state); - if (m_floppy2->get_device()) m_floppy2->get_device()->mon_w(!state); - if (m_floppy3->get_device()) m_floppy3->get_device()->mon_w(!state); + for (auto &floppy : m_floppy) + if (floppy->get_device()) + floppy->get_device()->mon_w(!state); } diff --git a/src/devices/bus/newbrain/fdc.h b/src/devices/bus/newbrain/fdc.h index e5d6665a078..3ac24faffa6 100644 --- a/src/devices/bus/newbrain/fdc.h +++ b/src/devices/bus/newbrain/fdc.h @@ -57,10 +57,7 @@ private: required_device m_maincpu; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; + required_device_array m_floppy; required_device m_exp; void moton(int state); diff --git a/src/devices/bus/pet/exp.h b/src/devices/bus/pet/exp.h index d3adf1e9262..14fe9296a8d 100644 --- a/src/devices/bus/pet/exp.h +++ b/src/devices/bus/pet/exp.h @@ -16,13 +16,6 @@ -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define PET_EXPANSION_SLOT_TAG "exp" - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/plus4/c1551.cpp b/src/devices/bus/plus4/c1551.cpp index 5811f7b42f7..b8ecd0b7642 100644 --- a/src/devices/bus/plus4/c1551.cpp +++ b/src/devices/bus/plus4/c1551.cpp @@ -368,7 +368,7 @@ void c1551_device::device_add_mconfig(machine_config &config) connector.set_fixed(true); connector.set_formats(c1551_device::floppy_formats); - PLUS4_EXPANSION_SLOT(config, m_exp, 0); + PLUS4_EXPANSION_SLOT(config, m_exp, DERIVED_CLOCK(1, 1)); m_exp->irq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::irq_w)); m_exp->cd_rd_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_r)); m_exp->cd_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_w)); @@ -417,7 +417,7 @@ c1551_device::c1551_device(const machine_config &mconfig, const char *tag, devic , m_ga(*this, C64H156_TAG) , m_pla(*this, PLA_TAG) , m_floppy(*this, C64H156_TAG":0:525ssqd") - , m_exp(*this, PLUS4_EXPANSION_SLOT_TAG) + , m_exp(*this, "exp") , m_jp1(*this, "JP1") , m_leds(*this, "led%u", 0U) , m_tcbm_data(0xff) diff --git a/src/devices/bus/plus4/exp.cpp b/src/devices/bus/plus4/exp.cpp index f47e9d5fac3..fb0387908ef 100644 --- a/src/devices/bus/plus4/exp.cpp +++ b/src/devices/bus/plus4/exp.cpp @@ -90,15 +90,6 @@ void plus4_expansion_slot_device::device_start() m_read_dma_cd.resolve_safe(0xff); m_write_dma_cd.resolve_safe(); m_write_aec.resolve_safe(); - - // inherit bus clock - // FIXME: this should be unnecessary as slots pass DERIVED_CLOCK(1, 1) through by default - if (clock() == 0) - { - plus4_expansion_slot_device *root = machine().device(PLUS4_EXPANSION_SLOT_TAG); - assert(root); - set_unscaled_clock(root->clock()); - } } diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h index fb03fb7fd4b..785207dd4f1 100644 --- a/src/devices/bus/plus4/exp.h +++ b/src/devices/bus/plus4/exp.h @@ -42,13 +42,6 @@ #include "softlist_dev.h" -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define PLUS4_EXPANSION_SLOT_TAG "exp" - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/pofo/exp.h b/src/devices/bus/pofo/exp.h index f760ce694c3..4078535e2c7 100644 --- a/src/devices/bus/pofo/exp.h +++ b/src/devices/bus/pofo/exp.h @@ -47,13 +47,6 @@ -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define PORTFOLIO_EXPANSION_SLOT_TAG "exp" - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/pofo/hpc104.cpp b/src/devices/bus/pofo/hpc104.cpp index 2cf0d03b825..0d8953b20c6 100644 --- a/src/devices/bus/pofo/hpc104.cpp +++ b/src/devices/bus/pofo/hpc104.cpp @@ -100,7 +100,7 @@ pofo_hpc104_device::pofo_hpc104_device(const machine_config &mconfig, device_typ device_portfolio_expansion_slot_interface(mconfig, *this), device_nvram_interface(mconfig, *this), m_ccm(*this, PORTFOLIO_MEMORY_CARD_SLOT_B_TAG), - m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_nvram(*this, "nvram", 0x40000, ENDIANNESS_LITTLE), m_io_sw1(*this, "SW1") { diff --git a/src/devices/bus/vic10/exp.cpp b/src/devices/bus/vic10/exp.cpp index 69c33da6a1d..48f42ad73c1 100644 --- a/src/devices/bus/vic10/exp.cpp +++ b/src/devices/bus/vic10/exp.cpp @@ -79,15 +79,6 @@ void vic10_expansion_slot_device::device_start() m_write_res.resolve_safe(); m_write_cnt.resolve_safe(); m_write_sp.resolve_safe(); - - // inherit bus clock - // FIXME: this should be unnecessary as slots pass DERIVED_CLOCK(1, 1) through by default - if (clock() == 0) - { - vic10_expansion_slot_device *root = machine().device(VIC10_EXPANSION_SLOT_TAG); - assert(root); - set_unscaled_clock(root->clock()); - } } diff --git a/src/devices/bus/vic10/exp.h b/src/devices/bus/vic10/exp.h index 20d21f99e1c..c2b1f52ec70 100644 --- a/src/devices/bus/vic10/exp.h +++ b/src/devices/bus/vic10/exp.h @@ -40,14 +40,6 @@ #include "formats/cbm_crt.h" -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define VIC10_EXPANSION_SLOT_TAG "exp" - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/vic20/exp.h b/src/devices/bus/vic20/exp.h index 96583a29577..dab459cf7bf 100644 --- a/src/devices/bus/vic20/exp.h +++ b/src/devices/bus/vic20/exp.h @@ -39,14 +39,6 @@ #include "softlist_dev.h" -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define VIC20_EXPANSION_SLOT_TAG "exp" - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/devices/bus/vip/exp.h b/src/devices/bus/vip/exp.h index bb9cd203690..aa50074e9ca 100644 --- a/src/devices/bus/vip/exp.h +++ b/src/devices/bus/vip/exp.h @@ -39,13 +39,6 @@ -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define VIP_EXPANSION_SLOT_TAG "exp" - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/mame/drivers/adam.cpp b/src/mame/drivers/adam.cpp index c4052ae3162..d3abeeeb31e 100644 --- a/src/mame/drivers/adam.cpp +++ b/src/mame/drivers/adam.cpp @@ -458,9 +458,9 @@ uint8_t adam_state::mreq_r(offs_t offset) } data = m_cart->bd_r(offset & 0x7fff, data, cs1, cs2, cs3, cs4); - data = m_slot1->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1); - data = m_slot2->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); - data = m_slot3->bd_r(offset, data, 1, 1, 1, cas1, cas2); + data = m_slot[0]->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1); + data = m_slot[1]->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); + data = m_slot[2]->bd_r(offset, data, 1, 1, 1, cas1, cas2); return data; } @@ -516,9 +516,9 @@ void adam_state::mreq_w(offs_t offset, uint8_t data) m_ram->pointer()[offset] = data; } - m_slot1->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1); - m_slot2->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); - m_slot3->bd_w(offset, data, 1, 1, 1, cas1, cas2); + m_slot[0]->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1); + m_slot[1]->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); + m_slot[2]->bd_w(offset, data, 1, 1, 1, cas1, cas2); } @@ -557,9 +557,9 @@ uint8_t adam_state::iorq_r(offs_t offset) break; } - data = m_slot1->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1); - data = m_slot2->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); - data = m_slot3->bd_r(offset, data, 1, 1, 1, cas1, cas2); + data = m_slot[0]->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1); + data = m_slot[1]->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); + data = m_slot[2]->bd_r(offset, data, 1, 1, 1, cas1, cas2); return data; } @@ -609,9 +609,9 @@ void adam_state::iorq_w(offs_t offset, uint8_t data) break; } - m_slot1->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1); - m_slot2->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); - m_slot3->bd_w(offset, data, 1, 1, 1, cas1, cas2); + m_slot[0]->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1); + m_slot[1]->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2); + m_slot[2]->bd_w(offset, data, 1, 1, 1, cas1, cas2); } @@ -1076,11 +1076,11 @@ void adam_state::adam(machine_config &config) ADAMNET_SLOT(config, "net15", m_adamnet, adamnet_devices, nullptr); COLECOVISION_CARTRIDGE_SLOT(config, m_cart, colecovision_cartridges, nullptr); - ADAM_EXPANSION_SLOT(config, m_slot1, XTAL(7'159'090)/2, adam_slot1_devices, "adamlink"); - m_slot1->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - ADAM_EXPANSION_SLOT(config, m_slot2, XTAL(7'159'090)/2, adam_slot2_devices, nullptr); - m_slot2->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - ADAM_EXPANSION_SLOT(config, m_slot3, XTAL(7'159'090)/2, adam_slot3_devices, "ram"); + ADAM_EXPANSION_SLOT(config, m_slot[0], XTAL(7'159'090)/2, adam_slot1_devices, "adamlink"); // left + m_slot[0]->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + ADAM_EXPANSION_SLOT(config, m_slot[1], XTAL(7'159'090)/2, adam_slot2_devices, nullptr); // center + m_slot[1]->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + ADAM_EXPANSION_SLOT(config, m_slot[2], XTAL(7'159'090)/2, adam_slot3_devices, "ram"); // right COLECOVISION_CONTROL_PORT(config, m_joy1, colecovision_control_port_devices, "hand"); m_joy1->irq().set(FUNC(adam_state::joy1_irq_w)); diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp index f9f45d9e660..6a4e1eb5cd6 100644 --- a/src/mame/drivers/cbm2.cpp +++ b/src/mame/drivers/cbm2.cpp @@ -81,7 +81,7 @@ public: m_ieee2(*this, DS75161A_TAG), m_joy1(*this, CONTROL1_TAG), m_joy2(*this, CONTROL2_TAG), - m_exp(*this, CBM2_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_user(*this, USER_PORT_TAG), m_ram(*this, RAM_TAG), m_cassette(*this, PET_DATASSETTE_PORT_TAG), diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp index c6520fffa3e..f67490ba38a 100644 --- a/src/mame/drivers/pet.cpp +++ b/src/mame/drivers/pet.cpp @@ -202,7 +202,7 @@ public: m_palette(*this, "palette"), m_cassette(*this, PET_DATASSETTE_PORT_TAG), m_cassette2(*this, PET_DATASSETTE_PORT2_TAG), - m_exp(*this, PET_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_user(*this, PET_USER_PORT_TAG), m_speaker(*this, "speaker"), m_cart_9000(*this, "cart_9000"), diff --git a/src/mame/drivers/plus4.cpp b/src/mame/drivers/plus4.cpp index 75ee574eb33..c7d44f5fba5 100644 --- a/src/mame/drivers/plus4.cpp +++ b/src/mame/drivers/plus4.cpp @@ -61,7 +61,7 @@ public: m_iec(*this, CBM_IEC_TAG), m_joy1(*this, CONTROL1_TAG), m_joy2(*this, CONTROL2_TAG), - m_exp(*this, PLUS4_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_user(*this, PET_USER_PORT_TAG), m_ram(*this, RAM_TAG), m_cassette(*this, PET_DATASSETTE_PORT_TAG), diff --git a/src/mame/drivers/pofo.cpp b/src/mame/drivers/pofo.cpp index 66e20a90ec3..70d3cf11108 100644 --- a/src/mame/drivers/pofo.cpp +++ b/src/mame/drivers/pofo.cpp @@ -81,7 +81,7 @@ public: m_keyboard(*this, "keyboard"), m_dtmf(*this, PCD3311T_TAG), m_ccm(*this, PORTFOLIO_MEMORY_CARD_SLOT_A_TAG), - m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_timer_tick(*this, TIMER_TICK_TAG), m_nvram(*this, "nvram"), m_ram(*this, "ram"), diff --git a/src/mame/drivers/vic10.cpp b/src/mame/drivers/vic10.cpp index b41700fbbcb..3d43698692c 100644 --- a/src/mame/drivers/vic10.cpp +++ b/src/mame/drivers/vic10.cpp @@ -42,7 +42,7 @@ public: m_cia(*this, MOS6526_TAG), m_joy1(*this, CONTROL1_TAG), m_joy2(*this, CONTROL2_TAG), - m_exp(*this, VIC10_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_ram(*this, RAM_TAG), m_cassette(*this, PET_DATASSETTE_PORT_TAG), m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE), diff --git a/src/mame/drivers/vic20.cpp b/src/mame/drivers/vic20.cpp index b3b030a876d..4c6058c2c97 100644 --- a/src/mame/drivers/vic20.cpp +++ b/src/mame/drivers/vic20.cpp @@ -44,7 +44,7 @@ public: m_vic(*this, VIC_TAG), m_iec(*this, CBM_IEC_TAG), m_joy(*this, CONTROL1_TAG), - m_exp(*this, VIC20_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_user(*this, PET_USER_PORT_TAG), m_cassette(*this, PET_DATASSETTE_PORT_TAG), m_ram(*this, RAM_TAG), diff --git a/src/mame/includes/adam.h b/src/mame/includes/adam.h index e4f74309486..723b3edabc0 100644 --- a/src/mame/includes/adam.h +++ b/src/mame/includes/adam.h @@ -35,9 +35,7 @@ public: m_psg(*this, SN76489A_TAG), m_ram(*this, RAM_TAG), m_adamnet(*this, "adamnet"), - m_slot1(*this, ADAM_LEFT_EXPANSION_SLOT_TAG), - m_slot2(*this, ADAM_CENTER_EXPANSION_SLOT_TAG), - m_slot3(*this, ADAM_RIGHT_EXPANSION_SLOT_TAG), + m_slot(*this, "slot%u", 1U), m_cart(*this, COLECOVISION_CARTRIDGE_SLOT_TAG), m_joy1(*this, CONTROL1_TAG), m_joy2(*this, CONTROL2_TAG), @@ -57,9 +55,7 @@ public: required_device m_psg; required_device m_ram; required_device m_adamnet; - required_device m_slot1; - required_device m_slot2; - required_device m_slot3; + required_device_array m_slot; required_device m_cart; required_device m_joy1; required_device m_joy2; diff --git a/src/mame/includes/bw2.h b/src/mame/includes/bw2.h index d4d64e68388..01f31234785 100644 --- a/src/mame/includes/bw2.h +++ b/src/mame/includes/bw2.h @@ -37,7 +37,7 @@ public: m_lcdc(*this, MSM6255_TAG), m_pit(*this, "ic6"), m_centronics(*this, CENTRONICS_TAG), - m_exp(*this, BW2_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_ram(*this, RAM_TAG), m_floppy0(*this, WD2797_TAG":0"), m_floppy1(*this, WD2797_TAG":1"), diff --git a/src/mame/includes/newbrain.h b/src/mame/includes/newbrain.h index 80eb1dec811..381b8e53682 100644 --- a/src/mame/includes/newbrain.h +++ b/src/mame/includes/newbrain.h @@ -30,7 +30,7 @@ public: m_maincpu(*this, Z80_TAG), m_cop(*this, COP420_TAG), m_palette(*this, "palette"), - m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG), + m_exp(*this, "exp"), m_cassette1(*this, "cassette1"), m_cassette2(*this, "cassette2"), m_rs232_v24(*this, RS232_V24_TAG), diff --git a/src/mame/includes/vip.h b/src/mame/includes/vip.h index 785df2b45ba..7f1013779e2 100644 --- a/src/mame/includes/vip.h +++ b/src/mame/includes/vip.h @@ -30,7 +30,7 @@ public: , m_cassette(*this, "cassette") , m_beeper(*this, DISCRETE_TAG) , m_byteio(*this, VIP_BYTEIO_PORT_TAG) - , m_exp(*this, VIP_EXPANSION_SLOT_TAG) + , m_exp(*this, "exp") , m_ram(*this, RAM_TAG) , m_rom(*this, CDP1802_TAG) , m_chip8(*this, "chip8") -- cgit v1.2.3 From 0c5c72286fd349e92ea756f9d04c63df008fab56 Mon Sep 17 00:00:00 2001 From: cracyc Date: Sun, 20 Jun 2021 21:36:53 -0500 Subject: vis: fix video in sherlock homes --- src/mame/drivers/vis.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp index 423b5cbc9ef..2c8831ec0c7 100644 --- a/src/mame/drivers/vis.cpp +++ b/src/mame/drivers/vis.cpp @@ -75,13 +75,13 @@ void vis_audio_device::dack16_w(int line, uint16_t data) { m_sample[m_samples++] = data; m_curcount++; - if(m_samples >= 2) + if((m_samples >= 2) || ((m_mode & 0x08) != 0x08)) m_isa->drq7_w(CLEAR_LINE); } void vis_audio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - if(m_samples < 2) + if((m_samples < 2) && ((m_mode & 0x08) == 0x08)) return; switch(m_mode & 0x88) { @@ -110,7 +110,7 @@ void vis_audio_device::device_timer(emu_timer &timer, device_timer_id id, int pa break; } - if(m_sample_byte >= 4) + if(m_sample_byte >= 2) { m_sample_byte = 0; m_samples = 0; @@ -856,6 +856,7 @@ void vis_state::io_map(address_map &map) map(0x0026, 0x0027).rw(FUNC(vis_state::unk_r), FUNC(vis_state::unk_w)); map(0x0040, 0x005f).rw("mb:pit8254", FUNC(pit8254_device::read), FUNC(pit8254_device::write)); map(0x0060, 0x0065).rw("kbdc", FUNC(kbdc8042_device::data_r), FUNC(kbdc8042_device::data_w)); + map(0x0061, 0x0061).rw("mb", FUNC(at_mb_device::portb_r), FUNC(at_mb_device::portb_w)); map(0x006a, 0x006a).r(FUNC(vis_state::unk2_r)); map(0x0080, 0x009f).rw("mb", FUNC(at_mb_device::page8_r), FUNC(at_mb_device::page8_w)); map(0x0092, 0x0092).rw(FUNC(vis_state::sysctl_r), FUNC(vis_state::sysctl_w)); -- cgit v1.2.3 From f23084f1d0167fff368748a33b99b672e6a4a87a Mon Sep 17 00:00:00 2001 From: Firehawke <34792592+Firehawke@users.noreply.github.com> Date: Mon, 21 Jun 2021 01:30:17 -0700 Subject: New working software list additions (apple2_flop_clcracked.xml) (#8203) --------------------------------------------------------------- Bumble Games (Version 1.3) (cleanly cracked) [4am, san inc., Firehawke] Reader Rabbit (Version 1.0) (cleanly cracked) [4am, san inc., Firehawke] Projectile and Circular Motion (cleanly cracked) [4am, Firehawke] Bumble Plot (Version 1.1) (cleanly cracked) [4am, san inc., Firehawke] Gertrude's Puzzles (1982 Version) (cleanly cracked) [4am, san inc., Firehawke] Gertrude's Secrets 1982 (cleanly cracked) [4am, san inc., Firehawke] Tales of Discovery (cleanly cracked) [4am, san inc., Firehawke] Advanced Electricity (cleanly cracked) [4am, Firehawke] Complex Circuits (cleanly cracked) [4am, Firehawke] PAI Forth (Version 3.0, 12-21-1985) (cleanly cracked) [4am, Firehawke] Rocky's Boots (Unknown 1982 version) (cleanly cracked) [4am, san inc., Firehawke] The Prisoner (Version 1.10) (SoftSmith) (cleanly cracked) [4am, san inc., Firehawke] New working software list additions (apple2gs_flop_orig.xml) ------------------------------------------------------------ Gin King / Cribbage King [4am, Firehawke] Revolution '76 (Version June 27, 1989) [4am, Firehawke] The Print Shop (Version 1.0) [4am, Firehawke] The Print Shop Companion [4am, Firehawke] Fantavision [4am, Firehawke] Cartooners [4am, Firehawke] Art and Film Director [4am, Firehawke] Draw Plus (Version 1.1) [4am, Firehawke] The Graphics Studio [4am, Firehawke] The Immortal [4am, Firehawke] TrianGo [4am, Firehawke] 816/Paint (Version 3.1) [4am, Firehawke] BeagleDraw (Version 1.3) [4am, Firehawke] DreamGrafix [4am, Firehawke] Platinum Paint (Version 2.01) [4am, Firehawke] Paintworks Plus (Version 1.2) [4am, Firehawke] Paintworks Gold (Version 1.5) [4am, Firehawke] ImageMaster: Basic Paint (Version 1.2) [4am, Firehawke] Graphics Supermarket (Version 1.1) [4am, Firehawke] GraphicWriter III (Version 1.0) [4am, Firehawke] DeluxePaint II (Version 2.01) [4am, Firehawke] Stars and Planets [4am, Firehawke] Mavis Beacon Teaches Typing (Version 1.8) [4am, Firehawke] Math and Me (Version 1.0 08/01/88) [4am, Firehawke] SmoothTalker [4am, Firehawke] Stickybear Shapes [4am, Firehawke] Tarot [4am, Firehawke] Full Metal Planete [4am, Firehawke] Shanghai II: Dragon's Eye [4am, Firehawke] Music Construction Set (Version 1.0) [4am, Firehawke] Instant Synthesizer [4am, Firehawke] Master Tracks Pro (Version 1.04) [4am, Firehawke] The Music Studio (Version 2.0) [4am, Firehawke] Jam Session (Version 1.0) [4am, Firehawke] Pyware Music Writer (Version 2.03) [4am, Firehawke] Master Tracks Jr. (Version 1.03) [4am, Firehawke] Salvation Supreme (Version 2.0) [4am, Firehawke] NoiseTracker (Version 1.0) [4am, Firehawke] HyperStudio (Version 3.1c) [4am, Firehawke] Writer's Choice Elite [4am, Firehawke] WordPerfect (Version 2.1e) [4am, Firehawke] The Wonders of the Animal Kingdom [4am, Firehawke] The Word Master [4am, Firehawke] Read and Rhyme [4am, Firehawke] Aesop's Fables [4am, Firehawke] Audubon Wildlife Adventures: Grizzly Bears [4am, Firehawke] Audubon Wildlife Adventures: Whales [4am, Firehawke] --- hash/apple2_flop_clcracked.xml | 176 +++++++ hash/apple2gs_flop_orig.xml | 1029 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 1174 insertions(+), 31 deletions(-) diff --git a/hash/apple2_flop_clcracked.xml b/hash/apple2_flop_clcracked.xml index 18b8556e56c..42a1a2349e8 100644 --- a/hash/apple2_flop_clcracked.xml +++ b/hash/apple2_flop_clcracked.xml @@ -42303,4 +42303,180 @@ license:CC0 + + Bumble Games (Version 1.3) (cleanly cracked) + 1982 + The Learning Company + + + + + + + + + + + + Reader Rabbit (Version 1.0) (cleanly cracked) + 1984 + The Learning Company + + + + + + + + + + + + Projectile and Circular Motion (cleanly cracked) + 1984 + Educational Materials and Equipment + + + + + + + + + + + + Bumble Plot (Version 1.1) (cleanly cracked) + 1982 + The Learning Company + + + + + + + + + + + + Gertrude's Puzzles (1982 Version) (cleanly cracked) + 1982 + The Learning Company + + + + + + + + + + + + Gertrude's Secrets 1982 (cleanly cracked) + 1982 + The Learning Company + + + + + + + + + + + + Tales of Discovery (cleanly cracked) + 1984 + Scholastic + + + + + + + + + + + + + + + + + + + Advanced Electricity (cleanly cracked) + 1984 + Educational Materials and Equipment + + + + + + + + + + + + Complex Circuits (cleanly cracked) + 1984 + Educational Materials and Equipment + + + + + + + + + + + + PAI Forth (Version 3.0, 12-21-1985) (cleanly cracked) + 1985 + Prentice Associates Incorporated + + + + + + + + + + + + + Rocky's Boots (Unknown 1982 version) (cleanly cracked) + 1982 + The Learning Company + + + + + + + + + + + + The Prisoner (Version 1.10) (SoftSmith) (cleanly cracked) + 1980 + SoftSmith + + + + + + + + + + diff --git a/hash/apple2gs_flop_orig.xml b/hash/apple2gs_flop_orig.xml index 2bf20816e41..802d5640e75 100644 --- a/hash/apple2gs_flop_orig.xml +++ b/hash/apple2gs_flop_orig.xml @@ -1408,7 +1408,7 @@ license:CC0 - + Star Saga: One - Beyond The Boundary (Version 1.1) 1987 Masterplay Publishing Corporation @@ -1424,7 +1424,7 @@ license:CC0 - + Déjà Vu II: Lost in Las Vegas 1989 Mindscape @@ -1440,7 +1440,7 @@ license:CC0 - + The Tower of Myraglen 1987 PBI Software @@ -1463,7 +1463,7 @@ license:CC0 - + Downhill Challenge 1989 Broderbund Software @@ -1486,7 +1486,7 @@ license:CC0 - + World Tour Golf 1987 Electronic Arts @@ -1502,7 +1502,7 @@ license:CC0 - + Vegas Gambler 1988 California Dreams @@ -1518,7 +1518,7 @@ license:CC0 - + The Fidelity Chessmaster 2100 1988 The Software Toolworks @@ -1541,7 +1541,7 @@ license:CC0 - + Space Ace 1990 ReadySoft @@ -1606,7 +1606,7 @@ license:CC0 - + Arkanoid 1988 Taito @@ -1622,7 +1622,7 @@ license:CC0 - + Jack Nicklaus' Greatest 18 Holes of Major Championship Golf 1989 Accolade @@ -1645,7 +1645,7 @@ license:CC0 - + Hostage: Rescue Mission 1990 Mindscape @@ -1661,7 +1661,7 @@ license:CC0 - + Captain Blood 1989 Mindscape @@ -1677,7 +1677,7 @@ license:CC0 - + Where in the U.S.A. is Carmen Sandiego? 1989 Broderbund Software @@ -1700,7 +1700,7 @@ license:CC0 - + The Bard's Tale: Tales of the Unknown 1987 Electronic Arts @@ -1716,7 +1716,7 @@ license:CC0 - + Neuromancer 1989 Interplay Productions @@ -1732,7 +1732,7 @@ license:CC0 - + Dream Zone 1987 Baudville @@ -1755,7 +1755,7 @@ license:CC0 - + Manhunter: New York 1987 Sierra On-Line @@ -1790,7 +1790,7 @@ license:CC0 - + Mean 18 1987 Accolade @@ -1825,7 +1825,7 @@ license:CC0 - + Hover Blade 1991 MCX @@ -1848,7 +1848,7 @@ license:CC0 - + Fast Break 1989 Accolade @@ -1864,7 +1864,7 @@ license:CC0 - + Halls of Montezuma 1990 Strategic Simulations @@ -1887,7 +1887,7 @@ license:CC0 - + Star Saga: Two - The Clathran Menace 1988 MasterPlay Publishing Corporation @@ -1903,7 +1903,7 @@ license:CC0 - + Club Backgammon 1988 California Dreams @@ -1919,7 +1919,7 @@ license:CC0 - + Beyond Zork: The Coconut of Quendor (Revision 57 / 871221) 1987 Infocom @@ -1935,7 +1935,7 @@ license:CC0 - + 2088: The Cryllan Mission - The Second Scenario 1990 Victory Software @@ -1964,7 +1964,7 @@ license:CC0 - + Defender of the Crown 1988 Cinemaware @@ -1987,7 +1987,7 @@ license:CC0 - + Skate or Die 1988 Electronic Arts @@ -2003,7 +2003,7 @@ license:CC0 - + Street Sports Soccer 1988 Epyx @@ -2019,7 +2019,7 @@ license:CC0 - + Out of this World 1992 Interplay Productions @@ -2042,7 +2042,7 @@ license:CC0 - + Thexder (Version 2.7) 1987 Sierra On-Line @@ -2058,7 +2058,7 @@ license:CC0 - + Tunnels of Armageddon (Version 1.0) 1989 California Dreams @@ -2074,4 +2074,971 @@ license:CC0 + + Gin King / Cribbage King + 1989 + The Software Toolworks + + + + + + + + + + + + + + + + + + + + + Revolution '76 (Version June 27, 1989) + 1989 + Britannica Software + + + + + + + + + + + + + + + + + + + + + + + + + + + The Print Shop (Version 1.0) + 1987 + Broderbund Software + + + + + + + + + + + + + + The Print Shop Companion + 1990 + Broderbund Software + + + + + + + + + + + + + + Fantavision + 1987 + Broderbund Software + + + + + + + + + + + + + + Cartooners + 1988 + Electronic Arts + + + + + + + + + + + + + + + + + + + + + Art and Film Director + 1989 + Epyx + + + + + + + + + + + + + + + + + + + + + + + + + + + Draw Plus (Version 1.1) + 1987 + Activision + + + + + + + + + + + + + + The Graphics Studio + 1987 + Accolade + + + + + + + + + + + + + + The Immortal + 1990 + Electronic Arts + + + + + + + + + + + + + + + + + + + + + TrianGo + 1988 + California Dreams + + + + + + + + + + + + + + 816/Paint (Version 3.1) + 1987 + Baudville + + + + + + + + + + + + + + BeagleDraw (Version 1.3) + 1987 + Beagle Bros. + + + + + + + + + + + + + + DreamGrafix + 1992 + DreamWorld Software + + + + + + + + + + + + + + Platinum Paint (Version 2.01) + 1992 + Beagle Bros. + + + + + + + + + + + + + + + + + + + + + Paintworks Plus (Version 1.2) + 1986 + Activision + + + + + + + + + + + + + + Paintworks Gold (Version 1.5) + 1987 + Activision + + + + + + + + + + + + + + + + + + + + + ImageMaster: Basic Paint (Version 1.2) + 1992 + JADA Graphics + + + + + + + + + + + + + + Graphics Supermarket (Version 1.1) + 1987 + Abracadata + + + + + + + + + + + + + + GraphicWriter III (Version 1.0) + 1990 + Seven Hills Software + + + + + + + + + + + + + + + + + + + + + + + + + + + DeluxePaint II (Version 2.01) + 1987 + Electronic Arts + + + + + + + + + + + + + + + + + + + + + Stars and Planets + 1989 + Advanced Ideas + + + + + + + + + + + + + + Mavis Beacon Teaches Typing (Version 1.8) + 1987 + The Software Toolworks + + + + + + + + + + + + + + + + + + + + + Math and Me (Version 1.0 08/01/88) + 1988 + Davidson and Associates + + + + + + + + + + + + + + SmoothTalker + 1987 + First Byte + + + + + + + + + + + + + + Stickybear Shapes + 1988 + Optimum Resource + + + + + + + + + + + + + + Tarot + 1990 + Toolbox + + + + + + + + + + + + + + Full Metal Planete + 1990 + Infogrames + + + + + + + + + + + + + + Shanghai II: Dragon's Eye + 1993 + Big Red Computer Club + + + + + + + + + + + + + + + + + + + + + Music Construction Set (Version 1.0) + 1986 + Electronic Arts + + + + + + + + + + + + + + Instant Synthesizer + 1988 + Electronic Arts + + + + + + + + + + + + + + + + + + + + + Master Tracks Pro (Version 1.04) + 1989 + Passport Designs + + + + + + + + + + + + + + The Music Studio (Version 2.0) + 1988 + Activision + + + + + + + + + + + + + + + + + + + + + Jam Session (Version 1.0) + 1989 + Broderbund Software + + + + + + + + + + + + + + + + + + + + + Pyware Music Writer (Version 2.03) + 1990 + Pyware + + + + + + + + + + + + + + + + + + + + + Master Tracks Jr. (Version 1.03) + 1988 + Passport Designs + + + + + + + + + + + + + + Salvation Supreme (Version 2.0) + 1993 + Vitesse Software + + + + + + + + + + + + + + + + + + + + + NoiseTracker (Version 1.0) + 1992 + FTA + + + + + + + + + + + + + + HyperStudio (Version 3.1c) + 1989 + Roger Wagner Publishing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Writer's Choice Elite + 1987 + Activision + + + + + + + + + + + + + + WordPerfect (Version 2.1e) + 1987 + WordPerfect Corporation + + + + + + + + + + + + + + + + + + + + + + + + + + + The Wonders of the Animal Kingdom + 1989 + Unicorn Software + + + + + + + + + + + + + + + + + + + + + The Word Master + 1989 + Unicorn Software + + + + + + + + + + + + + + Read and Rhyme + 1988 + Unicorn Software + + + + + + + + + + + + + + + + + + + + + Aesop's Fables + 1988 + Unicorn Software + + + + + + + + + + + + + + + + + + + + + Audubon Wildlife Adventures: Grizzly Bears + 1988 + Advanced Ideas + + + + + + + + + + + + + + + + + + + + + Audubon Wildlife Adventures: Whales + 1989 + Advanced Ideas + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 5be591c99e27f787c81dba7ff44d86778f627e32 Mon Sep 17 00:00:00 2001 From: ClawGrip Date: Mon, 21 Jun 2021 11:55:32 +0200 Subject: New working software list additions ------------------------------- vsmilem_cart.xml: Nickelodeon Dora La Exploradora - La Aventura Arregla-Todo de Dora (Spain) [TeamEurope, ClawGrip] Action Mania (USA, alt 1), Action Mania (USA, alt 2), Disney/Pixar Cars - Rev It Up in Radiator Springs (USA), Disney/Pixar Cars 2 (USA), Disney/Pixar Cars 2 (Pocket version, USA), Nickelodeon Dora the Explorer - Dora's Fix It Adventure (USA), Disney Mickey Mouse Clubhouse (alt, USA), DreamWorks Kung Fu Panda - Path of the Panda (USA), NASCAR Academy - Race Car Superstar (alt, USA), Scooby-Doo! - Funland Frenzy (USA), Scooby-Doo! - Funland Frenzy (alt, USA) [skaman] --- hash/vsmilem_cart.xml | 251 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 205 insertions(+), 46 deletions(-) diff --git a/hash/vsmilem_cart.xml b/hash/vsmilem_cart.xml index 3d4b3c0b8fb..d6a9f1c8d55 100644 --- a/hash/vsmilem_cart.xml +++ b/hash/vsmilem_cart.xml @@ -26,8 +26,10 @@ Language: +========+===================+===========================================================================================+ | XX | 80-084000(US) | Action Mania | -| XX | 80-084000(US) | Action Mania (Rev, 4?) | -| XX | 80-084000(US) | Action Mania (Rev, 6?) | +| XX | 80-084000(US) | Action Mania (rev. 4?) | +| XX | 80-084000(US) | Action Mania (rev. 6?) | +| XX | 80-084000(US) | Action Mania (alt 1) | +| XX | 80-084000(US) | Action Mania (alt 2) | | | (IT) | ????? | | XX | 80-084002(NL) | Sports Games | | | 80-084003(UK) | Action Mania | @@ -38,16 +40,17 @@ Language: | XX | 80-084008(CN) | 英语运动园 | +========+===================+===========================================================================================+ | XX | 80-084020(US) | Dora the Explorer: Dora's Fix It Adventure | +| XX | 80-084020(US) | Dora the Explorer: Dora's Fix It Adventure (rev. 3?) | | ** | 80-084021(US) | Dora the Explorer: Dora's Fix It Adventure (pocket version, same ROM as 80-084020(US)) | | XX | 80-084022(NL) | Dora: Dora's Reparatie Avontuur | | | 80-084023(UK) | Dora the Explorer: Dora's Fix It Adventure | | XX | 80-084024(GE) | Dora: Doras Reparatur-Abenteuer | -| XX | 80-084024(GE) | Dora: Doras Reparatur-Abenteuer (Rev. 2) | +| XX | 80-084024(GE) | Dora: Doras Reparatur-Abenteuer (rev. 2) | | XX | 80-084025(FR) | Dora L'Exploratrice : Les Adventures De Dora Apprentie Mécano | | | 80-084026(PT) | Dora : em busca das pecas perdidas | -| | 80-084027(SP) | Dora : La Aventura arregla-todo de Dora | +| XX | 80-084027(SP) | Dora La Exploradora: La Aventura arregla-todo de Dora | +========+===================+===========================================================================================+ -| | 80-084040(US) | Scooby-Doo! - Funland Frenzy | +| XX | 80-084040(US) | Scooby-Doo! - Funland Frenzy | | | 80-084043(UK) | Scooby-Doo! - Funland Frenzy | | | 80-084044(GE) | Scooby-Doo! - Im Lernpark | | XX | 80-084045(FR) | Scooby-Doo! - Panique à Funland | @@ -66,7 +69,7 @@ Language: | | 80-084100(US) | Wonder Pets - Save the Animals! | | XX | 80-084103(UK) | Wonder Pets - Save the Animals! | +========+===================+===========================================================================================+ -| | 80-084120(US) | Kung Fu Panda - Path of the Panda | +| XX | 80-084120(US) | Kung Fu Panda - Path of the Panda | | | 80-084123(UK) | Kung Fu Panda - Path of the Panda | | XX | 80-084124(GE) | Kung Fu Panda - Der Weg des Panda | | XX | 80-084125(FR) | Kung Fu Panda - La mission de Po | @@ -77,11 +80,11 @@ Language: | XX | 80-084145(FR) | Spider-Man & ses amis - Missions Secrètes | | | 80-084147(SP) | Spider-Man y Amigos: Misiones Secretas (no # on label) | +========+===================+===========================================================================================+ -| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (Rev. 2?) | -| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (Rev. 5?) | +| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (rev. 2?) | +| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (rev. 5?) | | | 80-084163(UK) | Disney's Little Einsteins: The Glass Slipper Ball | | XX | 80-084164(GE) | Disney's Kleine Einsteins: Der Glaspantoffel-Ball | -| XX | 80-084164(GE) | Disney's Kleine Einsteins: Der Glaspantoffel-Ball (Rev. 2?) | +| XX | 80-084164(GE) | Disney's Kleine Einsteins: Der Glaspantoffel-Ball (rev. 2?) | | | 80-084167(SP) | Little Einsteins de Disney: El Baile del Zapatito de Cristal | +========+===================+===========================================================================================+ | XX | 80-084180(US) | Mickey Mouse Clubhouse | @@ -95,6 +98,7 @@ Language: | | 80-084188(CN) | 米奇妙妙屋 | +========+===================+===========================================================================================+ | XX | 80-084200(US) | Nascar Academy - Race Car Superstar | +| XX | 80-084200(US) | Nascar Academy - Race Car Superstar (alt) | +========+===================+===========================================================================================+ | | 80-084220(US) | Snow Park Challenge | | | 80-084222(NL) | Wintersport Games | @@ -158,13 +162,13 @@ Language: | | 80-084386(PT) | Winnie - Em Busca do Mel (84396 on cart) | | XX | 80-084387(SP) | Winnie the Pooh - En Busca de la Miel | +========+===================+===========================================================================================+ -| | 80-084400(US) | Cars - Rev It Up in Radiator Springs | -| | 80-084402(NL) | Cars - Spektakel in Radiator Springs | -| | 80-084403(UK) | Cars - Rev it up in Radiator Springs | -| XX | 80-084404(GE) | Cars - Vollgas in Radiator Springs | -| XX | 80-084405(FR) | Cars - Quatre Roues | -| | 80-084406(PT) | Cars - Aventura Em Radiator Springs (84416 on cart) | -| XX | 80-084407(SP) | Cars - Acelera el Motor en Radiador Springs | +| XX | 80-084400(US) | Cars - Rev It Up in Radiator Springs | +| | 80-084402(NL) | Cars - Spektakel in Radiator Springs | +| | 80-084403(UK) | Cars - Rev it up in Radiator Springs | +| XX | 80-084404(GE) | Cars - Vollgas in Radiator Springs | +| XX | 80-084405(FR) | Cars - Quatre Roues | +| | 80-084406(PT) | Cars - Aventura Em Radiator Springs (84416 on cart) | +| XX | 80-084407(SP) | Cars - Acelera el Motor en Radiador Springs | +========+===================+===========================================================================================+ | XX | 80-084420(US) | Toy Story 3 | | | 80-084421(US) | Toy Story 3 (pocket version) | @@ -209,8 +213,8 @@ Language: +========+===================+===========================================================================================+ | | 80-084560(US) | | +========+===================+===========================================================================================+ -| | 80-084580(US) | Cars 2 (motion version) | -| | 80-084581(US) | Cars 2 (pocket version) | +| XX | 80-084580(US) | Cars 2 (motion version) | +| XX | 80-084581(US) | Cars 2 (pocket version) | | | 80-084583(UK) | Cars 2 | | XX | 80-084584(GE) | Cars 2 | | XX | 80-084585(FR) | Cars 2 | @@ -219,7 +223,7 @@ Language: | | 80-084600(US) | (Should be Orange colored Cinderella - Cinderella's Magic Wishes) | | | 80-084603(UK) | Cinderella - Cinderella's Magic Wishes | | XX | 80-084604(GE) | Cinderella - Lernen im Maerchenland | -| XX | 80-084604(GE) | Cinderella - Lernen im Maerchenland (Rev. 2?) | +| XX | 80-084604(GE) | Cinderella - Lernen im Maerchenland (rev. 2?) | | XX | 80-084605(FR) | Cendrillon - Le rêve enchanté de Cendrillon | +========+===================+===========================================================================================+ | | 80-084620(US) | (Should be Orange colored Finding Nemo) | @@ -237,7 +241,7 @@ Language: - Action Mania (USA, Rev. 6?) + Action Mania (USA, rev. 6?) 201? VTech @@ -250,7 +254,7 @@ Language: - Action Mania (USA, Rev. 4?) + Action Mania (USA, rev. 4?) 201? VTech @@ -276,6 +280,29 @@ Language: + + Action Mania (USA, alt 1) + 201? + VTech + + + + + + + + + + Action Mania (USA, alt 2) + 201? + VTech + + + + + + + Sport Games (Netherlands) @@ -347,7 +374,20 @@ Language: - + + Disney/Pixar Cars - Rev It Up in Radiator Springs (USA) + 2009 + VTech + + + + + + + + + + Disney/Pixar Cars - Vollgas in Radiator Springs (Germany) 2009 VTech @@ -362,7 +402,7 @@ Language: - + Disney/Pixar Cars - Quatre Roues (France) 2009? VTech @@ -375,7 +415,7 @@ Language: - + Disney/Pixar Cars - Acelera el Motor en Radiador Springs (Spain) 20?? VTech @@ -390,7 +430,35 @@ Language: - + + Disney/Pixar Cars 2 (USA) + 2011 + VTech + + + + + + + + + + + + Disney/Pixar Cars 2 (Pocket version, USA) + 2011 + VTech + + + + + + + + + + + Disney/Pixar Cars 2 (Germany) 2011 VTech @@ -406,7 +474,7 @@ Language: - + Disney/Pixar Cars 2 (France) 2011 VTech @@ -420,7 +488,7 @@ Language: - Disneys Princess Cinderella - Lernen im Märchenland (Germany, Rev. 2?) + Disneys Princess Cinderella - Lernen im Märchenland (Germany, rev. 2?) 2010 VTech @@ -458,8 +526,8 @@ Language: - - Nickelodeon Dora the Explorer - Dora's Fix It Adventure (USA, Rev. 3?) + + Nickelodeon Dora the Explorer - Dora's Fix It Adventure (USA, rev. 3?) 2008 VTech @@ -471,7 +539,20 @@ Language: - + + Nickelodeon Dora the Explorer - Dora's Fix It Adventure (USA) + 2008 + VTech + + + + + + + + + + Nick Jr Dora - Dora's Reparatie Avontuur (Netherlands) 2009 VTech @@ -486,8 +567,8 @@ Language: - - Nick Dora - Doras Reparatur-Abenteuer (Germany, Rev. 2) + + Nick Dora - Doras Reparatur-Abenteuer (Germany, rev. 2) 2009 VTech @@ -501,7 +582,7 @@ Language: - + Nick Dora - Doras Reparatur-Abenteuer (Germany) 2009 VTech @@ -516,7 +597,7 @@ Language: - + Nickelodeon Dora L'Exploratrice - Les adventures de Dora Apprentie Mécano (France) 2008 VTech @@ -529,6 +610,19 @@ Language: + + Nickelodeon Dora La Exploradora - La Aventura Arregla-Todo de Dora (Spain) + 2010 + VTech + + + + + + + + + Le Monde de Nemo - Nemo à la decourverte de l'océan (France) 2010 @@ -543,7 +637,7 @@ Language: - Disney Handy Manny (USA, Rev. 2?) + Disney Handy Manny (USA, rev. 2?) 2009 VTech @@ -582,7 +676,20 @@ Language: - + + DreamWorks Kung Fu Panda - Path of the Panda (USA) + 2008 + VTech + + + + + + + + + + DreamWorks Kung Fu Panda - Der Weg des Panda (Germany) 2008? VTech @@ -597,7 +704,7 @@ Language: - + DreamWorks Kung Fu Panda - La mission de Po (France) 2008? VTech @@ -611,7 +718,7 @@ Language: - Disney's Little Einsteins (USA, Rev. 5?) + Disney's Little Einsteins (USA, rev. 5?) 2009 VTech @@ -623,7 +730,7 @@ Language: - Disney's Little Einsteins (USA, Rev. 2?) + Disney's Little Einsteins (USA, rev. 2?) 2009 VTech @@ -635,7 +742,7 @@ Language: - Disney's Kleine Einsteins (Germany, Rev. 2?) + Disney's Kleine Einsteins (Germany, rev. 2?) 2009 VTech @@ -671,6 +778,19 @@ Language: + + Disney Mickey Mouse Clubhouse (alt, USA) + 2008 + VTech + + + + + + + + + Disney Micky Maus Wunderhaus (Germany) 2009 @@ -687,7 +807,7 @@ Language: - Disney La Maison de Mickey (France, Rev. 005) + Disney La Maison de Mickey (France, rev. 005) 2009? VTech @@ -715,7 +835,7 @@ Language: - DreamWorks Monsters vs. Aliens (USA, Rev. 3?) + DreamWorks Monsters vs. Aliens (USA, rev. 3?) 2009 VTech @@ -826,6 +946,19 @@ Language: + + NASCAR Academy - Race Car Superstar (alt, USA) + 2009? + VTech + + + + + + + + + Nickelodeon Ni Hao Kai Lan - Happy Chinese New Year! (USA) 2009 @@ -947,7 +1080,33 @@ Language: - + + Scooby-Doo! - Funland Frenzy (USA) + 2008 + VTech + + + + + + + + + + + Scooby-Doo! - Funland Frenzy (alt, USA) + 2008 + VTech + + + + + + + + + + Scooby-Doo! - Panique à Funland (France) 2008 VTech @@ -960,7 +1119,7 @@ Language: - + ¡¡Scooby-Doo!! - Misterio en el parque (Spain) 2009 VTech @@ -1128,7 +1287,7 @@ Language: - TinkerBell (USA, Rev. 2?) + TinkerBell (USA, rev. 2?) 2009 VTech @@ -1256,7 +1415,7 @@ Language: - Disney/Pixar Wall-E (USA, Rev. 2?) + Disney/Pixar Wall-E (USA, rev. 2?) 2008 VTech -- cgit v1.2.3 From 20a03efe41b7d02ec80c1d711a2116f0dbaf1dec Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 21 Jun 2021 14:00:45 +0200 Subject: New working software list additions ----------------------------------- lk3000: Calculator, Electronic Notebook [hap, Sean Riddle] New NOT_WORKING software list additions --------------------------------------- lk3000: English-German [hap, Sean Riddle] --- hash/lk3000.xml | 81 +++++++++++++++++ scripts/src/bus.lua | 2 - src/devices/bus/saitek_osa/expansion.cpp | 16 ++++ src/devices/bus/saitek_osa/expansion.h | 6 +- src/devices/bus/saitek_osa/modules.cpp | 22 ----- src/devices/bus/saitek_osa/modules.h | 16 ---- src/mame/drivers/ave_arb.cpp | 5 +- src/mame/drivers/hh_cops1.cpp | 4 +- src/mame/drivers/lk3000.cpp | 145 ++++++++++++++++++++++--------- 9 files changed, 209 insertions(+), 88 deletions(-) create mode 100644 hash/lk3000.xml delete mode 100644 src/devices/bus/saitek_osa/modules.cpp delete mode 100644 src/devices/bus/saitek_osa/modules.h diff --git a/hash/lk3000.xml b/hash/lk3000.xml new file mode 100644 index 00000000000..ad06a522df1 --- /dev/null +++ b/hash/lk3000.xml @@ -0,0 +1,81 @@ + + + + + + + + + + Calculator + 1979 + Lexicon + + + + + + + + + + English-German + 1979 + Lexicon + + + + + + + + + + + + Electronic Notebook + 1980 + Lexicon + + + + + + + + + + diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 88345bbc04e..ae7ff3bfba9 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -4497,8 +4497,6 @@ if (BUSES["SAITEK_OSA"]~=null) then files { MAME_DIR .. "src/devices/bus/saitek_osa/expansion.cpp", MAME_DIR .. "src/devices/bus/saitek_osa/expansion.h", - MAME_DIR .. "src/devices/bus/saitek_osa/modules.cpp", - MAME_DIR .. "src/devices/bus/saitek_osa/modules.h", MAME_DIR .. "src/devices/bus/saitek_osa/maestro.cpp", MAME_DIR .. "src/devices/bus/saitek_osa/maestro.h", MAME_DIR .. "src/devices/bus/saitek_osa/maestroa.cpp", diff --git a/src/devices/bus/saitek_osa/expansion.cpp b/src/devices/bus/saitek_osa/expansion.cpp index bae1dfe0eb5..0c7e6be78bc 100644 --- a/src/devices/bus/saitek_osa/expansion.cpp +++ b/src/devices/bus/saitek_osa/expansion.cpp @@ -11,6 +11,10 @@ Used by Saitek(SciSys) chess computers Leonardo, Galileo, Renaissance. #include "emu.h" #include "expansion.h" +#include "maestro.h" +#include "maestroa.h" +#include "sparc.h" + //************************************************************************** // DEVICE DEFINITIONS @@ -153,3 +157,15 @@ device_saitekosa_expansion_interface::device_saitekosa_expansion_interface(const device_saitekosa_expansion_interface::~device_saitekosa_expansion_interface() { } + +//------------------------------------------------- +// module list +//------------------------------------------------- + +void saitekosa_expansion_modules(device_slot_interface &device) +{ + device.option_add("analyst", OSA_ANALYST); + device.option_add("maestro", OSA_MAESTRO); + device.option_add("maestroa", OSA_MAESTROA); + device.option_add("sparc", OSA_SPARC); +} diff --git a/src/devices/bus/saitek_osa/expansion.h b/src/devices/bus/saitek_osa/expansion.h index 2c245ada301..cb513bf2f4e 100644 --- a/src/devices/bus/saitek_osa/expansion.h +++ b/src/devices/bus/saitek_osa/expansion.h @@ -119,10 +119,10 @@ protected: saitekosa_expansion_device *m_expansion; }; +void saitekosa_expansion_modules(device_slot_interface &device); + + // device type definition DECLARE_DEVICE_TYPE(SAITEKOSA_EXPANSION, saitekosa_expansion_device) -// include here so drivers don't need to -#include "modules.h" - #endif // MAME_BUS_SAITEKOSA_EXPANSION_H diff --git a/src/devices/bus/saitek_osa/modules.cpp b/src/devices/bus/saitek_osa/modules.cpp deleted file mode 100644 index 19b7af1ff13..00000000000 --- a/src/devices/bus/saitek_osa/modules.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Saitek OSA Expansion Slot modules - -***************************************************************************/ - -#include "emu.h" -#include "modules.h" - -#include "maestro.h" -#include "maestroa.h" -#include "sparc.h" - -void saitekosa_expansion_modules(device_slot_interface &device) -{ - device.option_add("analyst", OSA_ANALYST); - device.option_add("maestro", OSA_MAESTRO); - device.option_add("maestroa", OSA_MAESTROA); - device.option_add("sparc", OSA_SPARC); -} diff --git a/src/devices/bus/saitek_osa/modules.h b/src/devices/bus/saitek_osa/modules.h deleted file mode 100644 index 009daf69cec..00000000000 --- a/src/devices/bus/saitek_osa/modules.h +++ /dev/null @@ -1,16 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/*************************************************************************** - - Saitek OSA Expansion Slot modules - -***************************************************************************/ - -#ifndef MAME_BUS_SAITEKOSA_MODULES_H -#define MAME_BUS_SAITEKOSA_MODULES_H - -#pragma once - -void saitekosa_expansion_modules(device_slot_interface &device); - -#endif // MAME_BUS_SAITEKOSA_MODULES_H diff --git a/src/mame/drivers/ave_arb.cpp b/src/mame/drivers/ave_arb.cpp index f9eebdfa314..5d2273d959d 100644 --- a/src/mame/drivers/ave_arb.cpp +++ b/src/mame/drivers/ave_arb.cpp @@ -38,6 +38,9 @@ TODO: ******************************************************************************/ #include "emu.h" + +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" #include "cpu/m6502/m6502.h" #include "cpu/m6502/m65c02.h" #include "video/pwm.h" @@ -45,8 +48,6 @@ TODO: #include "machine/6522via.h" #include "machine/nvram.h" #include "sound/dac.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" #include "speaker.h" #include "softlist.h" diff --git a/src/mame/drivers/hh_cops1.cpp b/src/mame/drivers/hh_cops1.cpp index 12f23182242..f17c55c4f07 100644 --- a/src/mame/drivers/hh_cops1.cpp +++ b/src/mame/drivers/hh_cops1.cpp @@ -403,13 +403,13 @@ static INPUT_PORTS_START( qkracerm ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(u8"÷") PORT_START("IN.2") // DS8874 OUT 6 port K PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(u8"×") PORT_START("IN.3") // DS8874 OUT 7 port K PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") diff --git a/src/mame/drivers/lk3000.cpp b/src/mame/drivers/lk3000.cpp index 47a1ab8dbaa..e1c7dd84b7d 100644 --- a/src/mame/drivers/lk3000.cpp +++ b/src/mame/drivers/lk3000.cpp @@ -8,7 +8,7 @@ It was also licensed to Nixdorf. Hardware notes: - 3870 MCU (Motorola brand) @ 4MHz(2MHz internal) -- optional extra ROM or RAM +- optional external ROM or RAM - 4*Litronix DL 1414 (16*17segs total) - 33-button keypad @@ -16,13 +16,20 @@ The CPU and memory is on the cartridge. In theory, any hardware configuration is possible, but it looks like they always used a 3870. cartridge types known: -- CPU + 4KB ROM (ROM may be unpopulated) +- CPU + 4/8KB ROM (ROM may be unpopulated) - CPU + 2*4KB ROM - CPU + 1KB battery-backed RAM (2*NEC D444) +TODO: +- external rom access doesn't work ("german" locks up) +- external ram should be battery-backed + ******************************************************************************/ #include "emu.h" + +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" #include "cpu/f8/f8.h" #include "machine/f3853.h" #include "video/dl1416.h" @@ -40,6 +47,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_dl1414(*this, "dl1414_%u", 0), + m_cart(*this, "cartslot"), m_inputs(*this, "IN.%u", 0), m_digits(*this, "digit%u", 0U) { } @@ -56,12 +64,14 @@ private: // devices/pointers required_device m_maincpu; required_device_array m_dl1414; + required_device m_cart; required_ioport_array<8> m_inputs; output_finder<16> m_digits; void main_map(address_map &map); void main_io(address_map &map); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load); template void update_display(offs_t offset, u16 data); u8 p0_r(); @@ -77,17 +87,23 @@ private: u8 m_p1 = 0; u8 m_p4 = 0; u8 m_p5 = 0; + + bool m_has_ram = false; + u8 m_ram[0x400]; }; void lk3000_state::machine_start() { m_digits.resolve(); + memset(m_ram, 0xff, 0x400); // register for savestates save_item(NAME(m_p0)); save_item(NAME(m_p1)); save_item(NAME(m_p4)); save_item(NAME(m_p5)); + save_item(NAME(m_has_ram)); + save_item(NAME(m_ram)); } @@ -96,29 +112,62 @@ void lk3000_state::machine_start() I/O ******************************************************************************/ +// misc + +DEVICE_IMAGE_LOAD_MEMBER(lk3000_state::cart_load) +{ + u32 size = m_cart->common_get_size("rom"); + m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); + m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom"); + + // extra ram (optional) + m_has_ram = image.get_feature("ram") != nullptr; + + return image_init_result::PASS; +} + template void lk3000_state::update_display(offs_t offset, u16 data) { m_digits[N * 4 + offset] = data; } + +// 3870 ports + u8 lk3000_state::p0_r() { - return 0; + return m_p0; } void lk3000_state::p0_w(u8 data) { + m_p0 = data; } u8 lk3000_state::p1_r() { - u8 data = 0; + u8 data = m_p1; // P10-P13: multiplexed inputs if (m_p4 & 0x10) data |= m_inputs[~m_p4 & 7]->read(); + // read rom data + if (m_p5 & 0x20) + { + // P00-P06: A0-A6, P50-P54: A7-A11, P07 selects chip + u16 offset = (m_p0 & 0x7f) | (m_p5 << 7 & 0xf80) | (m_p0 << 5 & 0x1000); + data |= m_cart->read_rom(offset + 0x800); + } + + // read ram data + if (m_has_ram && m_p4 & 0xc0) + { + u16 offset = (m_p0 & 0xff) | (m_p5 << 8 & 0x300); + data |= m_ram[offset]; + } + return data; } @@ -133,7 +182,7 @@ void lk3000_state::p1_w(u8 data) u8 lk3000_state::p4_r() { - return 0; + return m_p4; } void lk3000_state::p4_w(u8 data) @@ -146,17 +195,25 @@ void lk3000_state::p4_w(u8 data) for (int i = 0; i < 4; i++) m_dl1414[i]->wr_w(BIT(1 << (~data >> 2 & 0xb), i)); + // P46: write ram data + if (m_has_ram && ~data & m_p4 & 0x40) + { + u16 offset = (m_p0 & 0xff) | (m_p5 << 8 & 0x300); + m_ram[offset] = m_p1; + } + // P40,P41,P42,P44: 7442 to keypad mux m_p4 = data; } u8 lk3000_state::p5_r() { - return 0; + return m_p5; } void lk3000_state::p5_w(u8 data) { + m_p5 = data; } @@ -168,7 +225,7 @@ void lk3000_state::p5_w(u8 data) void lk3000_state::main_map(address_map &map) { map.global_mask(0x7ff); - map(0x0000, 0x07ff).rom(); + map(0x0000, 0x07ff).r("cartslot", FUNC(generic_slot_device::read_rom)); } void lk3000_state::main_io(address_map &map) @@ -186,55 +243,55 @@ void lk3000_state::main_io(address_map &map) static INPUT_PORTS_START( lk3000 ) PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_NAME("A / MET") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_NAME("B / US") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_NAME("C / X>M") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_NAME("D / K") PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_NAME("J / C1") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_NAME("K / C2") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_NAME("L / RM") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_NAME("M / %") PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_NAME("S / EXC") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_NAME("T / +/-") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_NAME("U / M+") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("V / 0") PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('e') PORT_NAME("E / 7") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('f') PORT_NAME("F / 8") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('g') PORT_NAME("G / 9") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR('h') PORT_NAME(u8"H / ÷") PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('n') PORT_NAME("N / 4") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('o') PORT_NAME("O / 5") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('p') PORT_NAME("P / 6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('q') PORT_NAME("Q / +") PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('w') PORT_NAME("W / 1") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('x') PORT_NAME("X / 2") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('y') PORT_NAME("Y / 3") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR('z') PORT_NAME("Z / .") PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('?') PORT_NAME("? / P2") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_NAME("bs / P1") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('r') PORT_NAME("R / -") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('i') PORT_NAME(u8"I / ×") PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("def / P4") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') PORT_NAME("stp / P3") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(' ') PORT_NAME("sp / =") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("f") PORT_START("RESET") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, lk3000_state, reset_button, 0) PORT_NAME("clr") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHANGED_MEMBER(DEVICE_SELF, lk3000_state, reset_button, 0) PORT_CHAR(127) PORT_NAME("clr") INPUT_PORTS_END @@ -265,6 +322,13 @@ void lk3000_state::lk3000(machine_config &config) DL1414T(config, m_dl1414[2], u32(0)).update().set(FUNC(lk3000_state::update_display<2>)); DL1414T(config, m_dl1414[3], u32(0)).update().set(FUNC(lk3000_state::update_display<3>)); config.set_default_layout(layout_lk3000); + + // cartridge + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "lk3000"); + m_cart->set_device_load(FUNC(lk3000_state::cart_load)); + m_cart->set_must_be_loaded(true); + + SOFTWARE_LIST(config, "cart_list").set_original("lk3000"); } @@ -276,7 +340,6 @@ void lk3000_state::lk3000(machine_config &config) ROM_START( lk3000 ) ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 ) // none here, it's in the module slot - //ROM_LOAD("sc80249p_lk3900m", 0x0000, 0x0800, CRC(192edfcf) SHA1(527216b6e15b9ab5f83742f437a5a8d8eef14ce2) ) // will be moved to swlist ROM_END } // anonymous namespace -- cgit v1.2.3 From 2386a64165b743ff9a9ba85bb8d3729601cd8038 Mon Sep 17 00:00:00 2001 From: cracyc Date: Mon, 21 Jun 2021 09:46:04 -0500 Subject: hd61830: fix cursor in d2 --- src/devices/video/hd61830.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/devices/video/hd61830.cpp b/src/devices/video/hd61830.cpp index 15d94e88317..235d250b405 100644 --- a/src/devices/video/hd61830.cpp +++ b/src/devices/video/hd61830.cpp @@ -483,8 +483,8 @@ void hd61830_device::update_text(bitmap_ind16 &bitmap, const rectangle &cliprect md1 = readbyte(rac2); md2 = readbyte(rac2+1); - draw_char(bitmap, cliprect, ma, x, y + rows, md1); - draw_char(bitmap, cliprect, ma+1, x+1, y + rows, md2); + draw_char(bitmap, cliprect, ma + (rows * m_hn), x, y + rows, md1); + draw_char(bitmap, cliprect, ma+1 + (rows * m_hn), x+1, y + rows, md2); ma+=2; rac1+=2; -- cgit v1.2.3 From 9c002bd2642a73e240d37f6c8528a22b880af590 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 21 Jun 2021 12:09:21 -0400 Subject: machine/coco.cpp: Fix for MT 07305 --- src/mame/machine/coco.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mame/machine/coco.cpp b/src/mame/machine/coco.cpp index 9b202c897a5..8e08656f447 100644 --- a/src/mame/machine/coco.cpp +++ b/src/mame/machine/coco.cpp @@ -417,8 +417,7 @@ uint8_t coco_state::pia1_pa_r() { // Port A: we need to specify the values of all the lines, regardless of whether // they are in input or output mode in the DDR - return (m_cassette->input() >= 0 ? 0x01 : 0x00) - | (dac_output() << 2); + return (m_cassette->input() >= 0 ? 0x01 : 0x00) | 0xfe; } -- cgit v1.2.3 From c5f283fcc67e6c8b12b53e2513627641c5994341 Mon Sep 17 00:00:00 2001 From: cracyc Date: Mon, 21 Jun 2021 13:35:00 -0500 Subject: vis: clear curcount if count is reloaded --- src/mame/drivers/vis.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp index 2c8831ec0c7..48cad1e3307 100644 --- a/src/mame/drivers/vis.cpp +++ b/src/mame/drivers/vis.cpp @@ -81,7 +81,7 @@ void vis_audio_device::dack16_w(int line, uint16_t data) void vis_audio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - if((m_samples < 2) && ((m_mode & 0x08) == 0x08)) + if(((m_samples < 2) && ((m_mode & 0x08) == 0x08)) || !m_samples) return; switch(m_mode & 0x88) { @@ -200,9 +200,11 @@ void vis_audio_device::pcm_w(offs_t offset, uint8_t data) return; case 0x0c: m_count = (m_count & 0xff00) | data; + m_curcount = 0; break; case 0x0e: m_count = (m_count & 0xff) | (data << 8); + m_curcount = 0; break; case 0x0f: //cdrom related? -- cgit v1.2.3 From 829dc47b26ea80851ba0467cc3c105c880b10377 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Mon, 21 Jun 2021 20:37:01 +0100 Subject: finalap3bl: allow to boot / run (custom bootleg protection) (#8200) --- src/mame/drivers/namcos2.cpp | 20 +++++++++++++++++--- src/mame/includes/namcos2.h | 5 ++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp index 8d6d0cf7c13..283bfb94781 100644 --- a/src/mame/drivers/namcos2.cpp +++ b/src/mame/drivers/namcos2.cpp @@ -3314,8 +3314,8 @@ ROM_START( finalap3bl ) // bootleg set ROM_REGION( 8*1024, "user2", 0 ) /* zoom */ ROM_LOAD( "04544191.6r", 0, 8*1024, CRC(90db1bf6) SHA1(dbb9e50a8efc3b4012fcf587cc87da9ef42a1b80) ) - ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */ - ROM_LOAD( "finalap3.nv", 0x000000, 0x2000, CRC(efbc6274) SHA1(f542012e467027b7bd5d7102096ff91d8c9adee3) ) + ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration and machine ID code that passes protection */ + ROM_LOAD( "finalap3bl.nv", 0x000000, 0x2000, CRC(60226586) SHA1(d66afd1149c3c95cbb0108337c530cab78327d97) ) ROM_END /* FINEST HOUR */ @@ -5525,6 +5525,20 @@ void namcos2_state::init_finalap3() m_finallap_prot_count = 0; } +uint16_t namcos2_state::finalap3bl_prot_r() +{ + // code at 0x3f22 expects this to be 0x4d00 or it sets a value in NVRAM which prevents booting + // address 0x180020 (0x10 in NVRAM) must also be 0x6b (machine ID code first byte) or the same will occur + // for the 2nd issue we use a default NVRAM with this set + return 0x4d00; +} + +void namcos2_state::init_finalap3bl() +{ + init_finalap3(); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x3ffff0, 0x3ffff1, read16smo_delegate(*this, FUNC(namcos2_state::finalap3bl_prot_r))); +} + void namcos2_state::init_finehour() { m_gametype = NAMCOS2_FINEST_HOUR; @@ -5764,7 +5778,7 @@ GAMEL( 1992, finalap3, 0, finalap3, finalap3, namcos2_state, init_final GAMEL( 1992, finalap3a, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (World, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) GAMEL( 1992, finalap3j, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) GAMEL( 1992, finalap3jc, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (Japan, Rev C)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) -GAMEL( 1992, finalap3bl, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) +GAMEL( 1992, finalap3bl, finalap3, finalap3, finalap3, namcos2_state, init_finalap3bl,ROT0, "Namco", "Final Lap 3 (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) GAME( 1992, luckywld, 0, luckywld, luckywld, namcos2_state, init_luckywld, ROT0, "Namco", "Lucky & Wild", MACHINE_SUPPORTS_SAVE ) GAME( 1992, luckywldj, luckywld, luckywld, luckywld, namcos2_state, init_luckywld, ROT0, "Namco", "Lucky & Wild (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/namcos2.h b/src/mame/includes/namcos2.h index 9181d69f1c6..e0579a37fe2 100644 --- a/src/mame/includes/namcos2.h +++ b/src/mame/includes/namcos2.h @@ -114,6 +114,7 @@ public: void init_valkyrie(); void init_fourtrax(); void init_finalap3(); + void init_finalap3bl(); void init_luckywld(); void init_assaultj(); void init_dsaberj(); @@ -241,7 +242,9 @@ enum uint16_t namcos2_68k_key_r(offs_t offset); void namcos2_68k_key_w(offs_t offset, uint16_t data); - uint16_t namcos2_finallap_prot_r(offs_t offset); + uint16_t namcos2_finallap_prot_r(offs_t offset); // finalap2, finalap3 + uint16_t finalap3bl_prot_r(); // finalap3bl + void GollyGhostUpdateLED_c4(int data); void GollyGhostUpdateLED_c6(int data); void GollyGhostUpdateLED_c8(int data); -- cgit v1.2.3