From 3e255786939236a6c7352dda2e06a72e8c128f58 Mon Sep 17 00:00:00 2001 From: Jackson Date: Sun, 20 May 2018 16:18:34 -0400 Subject: citycon.cpp/ikki.cpp: SCREEN_RAW_PARAMS. (nw) galaxia.cpp: More notes. (nw) --- src/mame/drivers/citycon.cpp | 26 +++++++++++++++++--------- src/mame/drivers/galaxia.cpp | 25 +++++++++++++++++-------- src/mame/drivers/ikki.cpp | 29 +++++++++++++++++++---------- 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/src/mame/drivers/citycon.cpp b/src/mame/drivers/citycon.cpp index 5b9031cc32f..f8704bd48bd 100644 --- a/src/mame/drivers/citycon.cpp +++ b/src/mame/drivers/citycon.cpp @@ -19,6 +19,17 @@ Dip locations added from dip listing at crazykong.com #include "screen.h" #include "speaker.h" +#define MASTER_CLOCK (20_MHz_XTAL) +#define PIXEL_CLOCK (MASTER_CLOCK/4) // guess +#define CPU_CLOCK (8_MHz_XTAL) + +/* also a guess, need to extract PAL equations to get further answers */ +#define HTOTAL (320) +#define HBEND (8) +#define HBSTART (248) +#define VTOTAL (262) +#define VBEND (16) +#define VBSTART (240) READ8_MEMBER(citycon_state::citycon_in_r) { @@ -190,20 +201,17 @@ void citycon_state::machine_reset() MACHINE_CONFIG_START(citycon_state::citycon) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809, XTAL(8'000'000)) // HD68B09P + MCFG_DEVICE_ADD("maincpu", MC6809, CPU_CLOCK) // HD68B09P MCFG_DEVICE_PROGRAM_MAP(citycon_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", citycon_state, irq0_line_assert) - MCFG_DEVICE_ADD("audiocpu", MC6809E, XTAL(20'000'000) / 32) // schematics allow for either a 6809 or 6809E; HD68A09EP found on one actual PCB + MCFG_DEVICE_ADD("audiocpu", MC6809E, MASTER_CLOCK / 32) // schematics allow for either a 6809 or 6809E; HD68A09EP found on one actual PCB MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", citycon_state, irq0_line_hold) //actually unused, probably it was during development + MCFG_DEVICE_VBLANK_INT_DRIVER("screen", citycon_state, irq0_line_hold) // actually unused, probably it was during development /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 2*8, 30*8-1) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_UPDATE_DRIVER(citycon_state, screen_update_citycon) MCFG_SCREEN_PALETTE("palette") @@ -217,10 +225,10 @@ MACHINE_CONFIG_START(citycon_state::citycon) MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch2") - MCFG_DEVICE_ADD("aysnd", AY8910, XTAL(20'000'000) / 16) // schematics consistently specify AY-3-8910, though YM2149 found on one actual PCB + MCFG_DEVICE_ADD("aysnd", AY8910, MASTER_CLOCK / 16) // schematics consistently specify AY-3-8910, though YM2149 found on one actual PCB MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) - MCFG_DEVICE_ADD("ymsnd", YM2203, XTAL(20'000'000) / 16) + MCFG_DEVICE_ADD("ymsnd", YM2203, MASTER_CLOCK / 16) MCFG_AY8910_PORT_A_READ_CB(READ8("soundlatch", generic_latch_8_device, read)) MCFG_AY8910_PORT_B_READ_CB(READ8("soundlatch2", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(0, "mono", 0.40) diff --git a/src/mame/drivers/galaxia.cpp b/src/mame/drivers/galaxia.cpp index 9ac5db7e13a..f114418cae4 100644 --- a/src/mame/drivers/galaxia.cpp +++ b/src/mame/drivers/galaxia.cpp @@ -57,16 +57,21 @@ http://www.zzzaccaria.com/manuals/GalaxiaSchematics.zip The manual for Astro Wars can also be found at: http://www.opdenkelder.com/Astrowars_manual.zip -HW has many similarities with quasar.c / cvs.c / zac2650.c +HW has many similarities with quasar.cpp / cvs.cpp / zac2650.cpp +real hardware video of Astro Wars can be seen here: youtu.be/eSrQFBMeDlM --- TODO: -- speed is wrong for all games. needs investigation, interrupt related? - real hardware video of Astro Wars can be seen here: youtu.be/eSrQFBMeDlM -- correct color/star generation using info from Galaxia technical manual and schematics +- go through everything in the schematics for astrowar / galaxia +- video rewrite to: + * support RAW_PARAMS, blanking is much like how laserbat hardware does it + and is needed to correct the speed in all machines + * improve bullets + * provide correct color/star generation, using info from Galaxia technical + manual and schematics + * provide accurate sprite/bg sync in astrowar +- what is the PROM for? schematics are too burnt to tell anything - add sound board emulation -- improve bullets -- accurate sprite/bg sync in astrowar */ @@ -112,13 +117,17 @@ WRITE8_MEMBER(galaxia_state::galaxia_scroll_w) WRITE8_MEMBER(galaxia_state::galaxia_ctrlport_w) { - // d0/d1: maybe coincounter + // d0: triggers on every new credit + // d1: coin counter? if you put a coin in slot A, galaxia constantly + // strobes sets and clears the bit. if you put a coin in slot B + // however, the bit is set and cleared only once. + // d5: set as soon as the game completes selftest // other bits: unknown } WRITE8_MEMBER(galaxia_state::galaxia_dataport_w) { - // cvs-style video fx? or lamps? + // seems to be related to sound board comms } READ8_MEMBER(galaxia_state::galaxia_collision_r) diff --git a/src/mame/drivers/ikki.cpp b/src/mame/drivers/ikki.cpp index 74d1f186ddb..5d471fd9e53 100644 --- a/src/mame/drivers/ikki.cpp +++ b/src/mame/drivers/ikki.cpp @@ -10,6 +10,7 @@ Ikki (c) 1985 Sun Electronics TODO: - understand proper CPU communications and irq firing; +- merge with markham.cpp - timings *****************************************************************************/ @@ -21,6 +22,18 @@ TODO: #include "sound/sn76496.h" #include "speaker.h" +#define MASTER_CLOCK (20_MHz_XTAL) +#define PIXEL_CLOCK (MASTER_CLOCK/4) // guess +#define CPU_CLOCK (8_MHz_XTAL) + +/* also a guess */ +#define HTOTAL (320) +#define HBEND (8) +#define HBSTART (248) +#define VTOTAL (262) +#define VBEND (16) +#define VBSTART (240) + /************************************* * @@ -243,24 +256,20 @@ TIMER_DEVICE_CALLBACK_MEMBER(ikki_state::ikki_irq) MACHINE_CONFIG_START(ikki_state::ikki) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,8000000/2) /* 4.000MHz */ + MCFG_DEVICE_ADD("maincpu", Z80,CPU_CLOCK/2) /* 4.000MHz */ MCFG_DEVICE_PROGRAM_MAP(ikki_cpu1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ikki_state, ikki_irq, "screen", 0, 1) - MCFG_DEVICE_ADD("sub", Z80,8000000/2) /* 4.000MHz */ + MCFG_DEVICE_ADD("sub", Z80,CPU_CLOCK/2) /* 4.000MHz */ MCFG_DEVICE_PROGRAM_MAP(ikki_cpu2) - MCFG_DEVICE_PERIODIC_INT_DRIVER(ikki_state, irq0_line_hold, 2*60) + MCFG_DEVICE_PERIODIC_INT_DRIVER(ikki_state, irq0_line_hold, 2*(PIXEL_CLOCK/HTOTAL/VTOTAL)) MCFG_QUANTUM_PERFECT_CPU("maincpu") /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8+3*8) - MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 2*8, 30*8-1) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_UPDATE_DRIVER(ikki_state, screen_update_ikki) MCFG_SCREEN_PALETTE("palette") @@ -272,10 +281,10 @@ MACHINE_CONFIG_START(ikki_state::ikki) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("sn1", SN76496, 8000000/4) + MCFG_DEVICE_ADD("sn1", SN76496, CPU_CLOCK/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) - MCFG_DEVICE_ADD("sn2", SN76496, 8000000/2) + MCFG_DEVICE_ADD("sn2", SN76496, CPU_CLOCK/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_CONFIG_END -- cgit v1.2.3 From a857572dacef17e1a1f4f498f713592e25a96b49 Mon Sep 17 00:00:00 2001 From: Jackson Date: Mon, 21 May 2018 19:32:04 -0400 Subject: markham.cpp: Fix coin counters for banbam by doing something even more unusual. (nw) Misc polishing in markham.cpp; also update notes on banbam MCU. (nw) Added coin chute DIP switch settings to banbam, strnskil and clones. --- src/mame/drivers/galaxia.cpp | 2 +- src/mame/drivers/markham.cpp | 145 ++++++++++++++++++++++++------------------- src/mame/includes/markham.h | 7 ++- src/mame/video/markham.cpp | 1 + 4 files changed, 89 insertions(+), 66 deletions(-) diff --git a/src/mame/drivers/galaxia.cpp b/src/mame/drivers/galaxia.cpp index f114418cae4..47eb8402164 100644 --- a/src/mame/drivers/galaxia.cpp +++ b/src/mame/drivers/galaxia.cpp @@ -313,7 +313,7 @@ MACHINE_CONFIG_START(galaxia_state::galaxia) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_REFRESH_RATE(60) // wrong MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0*8, 30*8-1, 2*8, 32*8-1) diff --git a/src/mame/drivers/markham.cpp b/src/mame/drivers/markham.cpp index d671cbc24a3..c498e145ecc 100644 --- a/src/mame/drivers/markham.cpp +++ b/src/mame/drivers/markham.cpp @@ -10,7 +10,9 @@ TODO: - needs merging with ikki.cpp - look up schematics for all games - - banbam and pettanp likely share the same MCU code, check once redumped + - MB8841 data might be good! same hash as arabian, unsure if dumped twice + or just copied from arabian. hookup looks to be very(?) different compared + to arabian though - fix banbam/pettanp simulated comms or hopefully hook up MCU ports and at least get something out of the existing dump @@ -50,19 +52,18 @@ READ8_MEMBER(markham_state::markham_e004_r) WRITE8_MEMBER(markham_state::coin_output_w) { - /* only activated after first write? */ - /* all machines write to slot B at selftest even without a coin */ - if (m_coin_unlock) + machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); + + // plain, flat out weird stuff needed to prevent phantom coins + // likely an activation mechanism to test individual chute behavior? + // this can't be boolean wise, because banbam triggers this three times + if (m_coin2_lock_cnt == 0) { - /* banbam and pettanp write to both slot A and B when a coin - is inserted regardless of which; does this imply that they only - have one coin counter? */ - machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); } - else + else if (BIT(data, 1)) { - m_coin_unlock = true; + m_coin2_lock_cnt--; } } @@ -109,9 +110,9 @@ READ8_MEMBER(markham_state::banbam_protection_r) switch (m_maincpu->pc()) { case 0x6094: res = 0xa5; break; - case 0x6118: res = 0x20; break; /* bits 0-3 unknown */ - case 0x6199: res = 0x30; break; /* bits 0-3 unknown */ - case 0x61f5: res = 0x60 | (machine().rand() & 0x0f); break; /* bits 0-3 unknown */ + case 0x6118: res = 0x20; break; /* bits 0-3 unknown */ + case 0x6199: res = 0x30; break; /* bits 0-3 unknown */ + case 0x61f5: res = 0x60 | (machine().rand() & 0x0f); break; /* bits 0-3 unknown */ case 0x6255: res = 0x77; break; case 0x62a8: res = 0xb4; break; default: res = 0xff; break; @@ -128,9 +129,9 @@ READ8_MEMBER(markham_state::pettanp_protection_r) switch (m_maincpu->pc()) { case 0x6066: res = 0xa5; break; - case 0x60dc: res = 0x20; break; /* bits 0-3 unknown */ - case 0x615d: res = 0x30; break; /* bits 0-3 unknown */ - case 0x61b9: res = 0x60 | (machine().rand() & 0x0f); break; /* bits 0-3 unknown */ + case 0x60dc: res = 0x20; break; /* bits 0-3 unknown */ + case 0x615d: res = 0x30; break; /* bits 0-3 unknown */ + case 0x61b9: res = 0x60 | (machine().rand() & 0x0f); break; /* bits 0-3 unknown */ case 0x6219: res = 0x77; break; case 0x626c: res = 0xb4; break; default: res = 0xff; break; @@ -199,6 +200,15 @@ void markham_state::strnskil_master_map(address_map &map) map(0xd80a, 0xd80b).writeonly().share("xscroll"); } +// void markham_state::banbam_master_map(address_map &map) +// { +// /* TODO: uncomment when ready */ +// strnskil_master_map(map); +// map(0xd806, 0xd806).r(this, FUNC(markham_state::mcu_r)); /* mcu data read */ +// map(0xd80d, 0xd80d).w(this, FUNC(markham_state::mcu_w)); /* mcu data write */ +// map(0xd80c, 0xd80c).w(this, FUNC(markham_state::mcu_reset)); /* mcu reset? */ +// } + void markham_state::markham_slave_map(address_map &map) { map(0x0000, 0x5fff).rom(); @@ -305,19 +315,19 @@ INPUT_PORTS_END static INPUT_PORTS_START( strnskil ) PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, "Unknown 1-2" ) + PORT_DIPNAME( 0x02, 0x00, "Unknown 1-2" ) PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Flip_Screen ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, "Unknown 1-4" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPNAME( 0xf0, 0x00, "Coin1 / Coin2" ) + PORT_DIPNAME( 0x08, 0x00, "Coin Chutes" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x00, "Individual" ) + PORT_DIPSETTING( 0x08, "Common" ) + PORT_DIPNAME( 0xf0, 0x00, "Coin1 / Coin2" ) PORT_DIPLOCATION("SW1:5,6,7,8") PORT_DIPSETTING( 0x00, "1C 1C / 1C 1C" ) PORT_DIPSETTING( 0x10, "2C 1C / 2C 1C" ) PORT_DIPSETTING( 0x20, "2C 1C / 1C 3C" ) @@ -336,7 +346,7 @@ static INPUT_PORTS_START( strnskil ) PORT_DIPSETTING( 0xf0, DEF_STR( Free_Play ) ) PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Difficulty ) ) + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) PORT_DIPNAME( 0x02, 0x00, "Unknown 2-2" ) @@ -403,7 +413,9 @@ static INPUT_PORTS_START( banbam ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW1:4" ) + PORT_DIPNAME(0x08, 0x00, "Coin Chutes") PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x00, "Individual") + PORT_DIPSETTING( 0x08, "Common") PORT_DIPNAME( 0xf0, 0x00, "Coin1 / Coin2" ) PORT_DIPLOCATION("SW1:5,6,7,8") PORT_DIPSETTING( 0x00, "1C 1C / 1C 1C" ) PORT_DIPSETTING( 0x10, "2C 1C / 2C 1C" ) @@ -566,9 +578,9 @@ MACHINE_CONFIG_START(markham_state::banbam) strnskil(config); MCFG_DEVICE_ADD("mcu", MB8841, CPU_CLOCK/2) /* 4.000MHz */ - // MCFG_MB88XX_READ_K_CB(READ8(*this, markham_state, mcu_portk_r)) - // MCFG_MB88XX_READ_R0_CB(READ8(*this, markham_state, mcu_portr0_r)) - // MCFG_MB88XX_WRITE_R0_CB(WRITE8(*this, markham_state, mcu_portr0_w)) + // MCFG_MB88XX_READ_K_CB(READ8(*this, markham_state, mcu_portk_r)) + // MCFG_MB88XX_READ_R0_CB(READ8(*this, markham_state, mcu_portr0_r)) + // MCFG_MB88XX_WRITE_R0_CB(WRITE8(*this, markham_state, mcu_portr0_w)) MCFG_DEVICE_DISABLE() MACHINE_CONFIG_END @@ -690,11 +702,11 @@ ROM_START( banbam ) ROM_LOAD( "ban-rom9.ic100", 0x4000, 0x2000, CRC(c0a5a4c8) SHA1(7f0978669218982d379a5d72c6198a33a8213ab5) ) ROM_REGION( 0x0700, "proms", 0 ) /* color PROMs */ - ROM_LOAD( "16-3.66", 0x0000, 0x0100, CRC(dbcd3bec) SHA1(1baeec277b16c82b67e10da9d4c84cf383ef4a82) ) /* R Prom type 24s10 */ - ROM_LOAD( "16-4.67", 0x0100, 0x0100, CRC(9eb7b6cf) SHA1(86451e8a510f8cfbc0be7d4e7bb1ee7dfd67f1f4) ) /* G Prom type 24s10 */ - ROM_LOAD( "16-5.68", 0x0200, 0x0100, CRC(9b30a7f3) SHA1(a0aefc2c8325b95ea227e404583d14622b04a3b9) ) /* B Prom type 24s10 */ - ROM_LOAD( "16-1.148", 0x0300, 0x0200, CRC(777e2770) SHA1(7f4ef42ab4e0546c2932d498cf573bd4f4296db7) ) /* sprite Prom type mb7124h */ - ROM_LOAD( "16-2.97", 0x0500, 0x0200, CRC(7f95d4b2) SHA1(68dc311739a4d5d72f4cfbace27f3a82f05316ff) ) /* bg Prom type mb7124h */ + ROM_LOAD( "16-3.66", 0x0000, 0x0100, CRC(dbcd3bec) SHA1(1baeec277b16c82b67e10da9d4c84cf383ef4a82) ) /* R Prom type 24s10 */ + ROM_LOAD( "16-4.67", 0x0100, 0x0100, CRC(9eb7b6cf) SHA1(86451e8a510f8cfbc0be7d4e7bb1ee7dfd67f1f4) ) /* G Prom type 24s10 */ + ROM_LOAD( "16-5.68", 0x0200, 0x0100, CRC(9b30a7f3) SHA1(a0aefc2c8325b95ea227e404583d14622b04a3b9) ) /* B Prom type 24s10 */ + ROM_LOAD( "16-1.148", 0x0300, 0x0200, CRC(777e2770) SHA1(7f4ef42ab4e0546c2932d498cf573bd4f4296db7) ) /* sprite Prom type mb7124h */ + ROM_LOAD( "16-2.97", 0x0500, 0x0200, CRC(7f95d4b2) SHA1(68dc311739a4d5d72f4cfbace27f3a82f05316ff) ) /* bg Prom type mb7124h */ ROM_REGION( 0x0100, "scroll_prom", 0 ) /* scroll control PROM */ ROM_LOAD( "16-6.59", 0x0000, 0x0100, CRC(ec4faf5b) SHA1(7ebbf50807d04105ebadec91bded069408e399ba) ) /* Prom type 24s10 */ @@ -703,47 +715,58 @@ ROM_START( banbam ) ROM_LOAD( "ban-rom12.ic2", 0x0000, 0x2000, CRC(044bb2f6) SHA1(829b2152740061e0506c7504885d8404fb8fe360) ) ROM_REGION(0x800, "mcu", 0) /* Fujitsu MB8841 4-Bit MCU internal ROM */ - ROM_LOAD("sun-8212.ic3", 0x000, 0x800, BAD_DUMP CRC(8869611e) SHA1(c6443f3bcb0cdb4d7b1b19afcbfe339c300f36aa)) + ROM_LOAD( "sun-8212.ic3", 0x000, 0x800, BAD_DUMP CRC(8869611e) SHA1(c6443f3bcb0cdb4d7b1b19afcbfe339c300f36aa) ) ROM_END ROM_START( pettanp ) ROM_REGION( 0x10000, "maincpu", 0 ) /* main CPU */ - ROM_LOAD( "tvg2-16a.7", 0x0000, 0x2000, CRC(4cbbbd01) SHA1(3905cf9e9d324bb23688ab29c98d71529d3dbf0c) ) - ROM_CONTINUE( 0x8000, 0x2000 ) - ROM_LOAD( "tvg3-16a.8", 0x2000, 0x2000, CRC(aaa0420f) SHA1(aa7ead51002f8b1bbefd07ff23b9064804fc31b3) ) - ROM_LOAD( "tvg4-16a.9", 0x4000, 0x2000, CRC(43306369) SHA1(1eadebd3d962da49fd204eff8692f1e1a1e3cc98) ) - ROM_LOAD( "tvg5-16a.10", 0x6000, 0x2000, CRC(da9c635f) SHA1(3c084ad159dbabfd02a9772489c3193852d135b7) ) + ROM_LOAD( "tvg2-16a.7", 0x0000, 0x2000, CRC(4cbbbd01) SHA1(3905cf9e9d324bb23688ab29c98d71529d3dbf0c) ) + ROM_CONTINUE( 0x8000, 0x2000 ) + ROM_LOAD( "tvg3-16a.8", 0x2000, 0x2000, CRC(aaa0420f) SHA1(aa7ead51002f8b1bbefd07ff23b9064804fc31b3) ) + ROM_LOAD( "tvg4-16a.9", 0x4000, 0x2000, CRC(43306369) SHA1(1eadebd3d962da49fd204eff8692f1e1a1e3cc98) ) + ROM_LOAD( "tvg5-16a.10", 0x6000, 0x2000, CRC(da9c635f) SHA1(3c084ad159dbabfd02a9772489c3193852d135b7) ) ROM_REGION( 0x10000, "subcpu", 0 ) /* sub CPU */ - ROM_LOAD( "tvg1-16.2", 0x0000, 0x2000, CRC(e36009f6) SHA1(72c485e8c19fbfc9c850094cfd87f1055154c0c5) ) + ROM_LOAD( "tvg1-16.2", 0x0000, 0x2000, CRC(e36009f6) SHA1(72c485e8c19fbfc9c850094cfd87f1055154c0c5) ) ROM_REGION( 0x6000, "gfx1", 0 ) /* sprite */ - ROM_LOAD( "tvg6-16.90", 0x0000, 0x2000, CRC(6905d9d5) SHA1(586bf72bab5ab6e3e319c925decc16d7f3711af1) ) - ROM_LOAD( "tvg7-16.92", 0x2000, 0x2000, CRC(40d02bfd) SHA1(2f6ca8197048318f7900b56169aba4c9fdf48693) ) - ROM_LOAD( "tvg8-16.94", 0x4000, 0x2000, CRC(b18a2244) SHA1(168061e050530e6a5bc78c14a64e635370256dfd) ) + ROM_LOAD( "tvg6-16.90", 0x0000, 0x2000, CRC(6905d9d5) SHA1(586bf72bab5ab6e3e319c925decc16d7f3711af1) ) + ROM_LOAD( "tvg7-16.92", 0x2000, 0x2000, CRC(40d02bfd) SHA1(2f6ca8197048318f7900b56169aba4c9fdf48693) ) + ROM_LOAD( "tvg8-16.94", 0x4000, 0x2000, CRC(b18a2244) SHA1(168061e050530e6a5bc78c14a64e635370256dfd) ) ROM_REGION( 0x6000, "gfx2", 0 ) /* bg */ - ROM_LOAD( "tvg11-16.102",0x0000, 0x2000, CRC(327b7a29) SHA1(4b8d57607c4a1e84c630c38eba3fa90b5496dcde) ) - ROM_LOAD( "tvg10-16.101",0x2000, 0x2000, CRC(624ac061) SHA1(9d479a8a256a8ff37c00bc7449b11357f9fe6cdc) ) - ROM_LOAD( "tvg9-16.100", 0x4000, 0x2000, CRC(c477e74c) SHA1(864eddcd9c817aeecb09423071f87d3b39eb5fc4) ) + ROM_LOAD( "tvg11-16.102", 0x0000, 0x2000, CRC(327b7a29) SHA1(4b8d57607c4a1e84c630c38eba3fa90b5496dcde) ) + ROM_LOAD( "tvg10-16.101", 0x2000, 0x2000, CRC(624ac061) SHA1(9d479a8a256a8ff37c00bc7449b11357f9fe6cdc) ) + ROM_LOAD( "tvg9-16.100", 0x4000, 0x2000, CRC(c477e74c) SHA1(864eddcd9c817aeecb09423071f87d3b39eb5fc4) ) ROM_REGION( 0x0700, "proms", 0 ) /* color PROMs */ - ROM_LOAD( "16-3.66", 0x0000, 0x0100, CRC(dbcd3bec) SHA1(1baeec277b16c82b67e10da9d4c84cf383ef4a82) ) /* R Prom type 24s10 */ - ROM_LOAD( "16-4.67", 0x0100, 0x0100, CRC(9eb7b6cf) SHA1(86451e8a510f8cfbc0be7d4e7bb1ee7dfd67f1f4) ) /* G Prom type 24s10 */ - ROM_LOAD( "16-5.68", 0x0200, 0x0100, CRC(9b30a7f3) SHA1(a0aefc2c8325b95ea227e404583d14622b04a3b9) ) /* B Prom type 24s10 */ - ROM_LOAD( "16-1.148", 0x0300, 0x0200, CRC(777e2770) SHA1(7f4ef42ab4e0546c2932d498cf573bd4f4296db7) ) /* sprite Prom type mb7124h */ - ROM_LOAD( "16-2.97", 0x0500, 0x0200, CRC(7f95d4b2) SHA1(68dc311739a4d5d72f4cfbace27f3a82f05316ff) ) /* bg Prom type mb7124h */ + ROM_LOAD( "16-3.66", 0x0000, 0x0100, CRC(dbcd3bec) SHA1(1baeec277b16c82b67e10da9d4c84cf383ef4a82) ) /* R Prom type 24s10 */ + ROM_LOAD( "16-4.67", 0x0100, 0x0100, CRC(9eb7b6cf) SHA1(86451e8a510f8cfbc0be7d4e7bb1ee7dfd67f1f4) ) /* G Prom type 24s10 */ + ROM_LOAD( "16-5.68", 0x0200, 0x0100, CRC(9b30a7f3) SHA1(a0aefc2c8325b95ea227e404583d14622b04a3b9) ) /* B Prom type 24s10 */ + ROM_LOAD( "16-1.148", 0x0300, 0x0200, CRC(777e2770) SHA1(7f4ef42ab4e0546c2932d498cf573bd4f4296db7) ) /* sprite Prom type mb7124h */ + ROM_LOAD( "16-2.97", 0x0500, 0x0200, CRC(7f95d4b2) SHA1(68dc311739a4d5d72f4cfbace27f3a82f05316ff) ) /* bg Prom type mb7124h */ ROM_REGION( 0x0100, "scroll_prom", 0 ) /* scroll control PROM */ - ROM_LOAD( "16-6.59", 0x0000, 0x0100, CRC(ec4faf5b) SHA1(7ebbf50807d04105ebadec91bded069408e399ba) ) /* Prom type 24s10 */ + ROM_LOAD( "16-6.59", 0x0000, 0x0100, CRC(ec4faf5b) SHA1(7ebbf50807d04105ebadec91bded069408e399ba) ) /* Prom type 24s10 */ ROM_REGION( 0x1000, "prot_data", 0 ) /* protection data used with Fujitsu MB8841 4-Bit MCU */ - ROM_LOAD( "tvg12-16.2", 0x0000, 0x1000, CRC(3abc6ba8) SHA1(15e0b0f9d068f6094e2be4f4f1dea0ff6e85686b) ) + ROM_LOAD( "tvg12-16.2", 0x0000, 0x1000, CRC(3abc6ba8) SHA1(15e0b0f9d068f6094e2be4f4f1dea0ff6e85686b) ) ROM_REGION(0x800, "mcu", 0) /* Fujitsu MB8841 4-Bit MCU internal ROM */ - ROM_LOAD("sun-8212.ic3", 0x000, 0x800, NO_DUMP) + ROM_LOAD( "sun-8212.ic3", 0x000, 0x800, NO_DUMP ) // very much likely to be same as banbam and arabian ROM_END +void markham_state::machine_start() +{ + save_item(NAME(m_coin2_lock_cnt)); +} + +void markham_state::machine_reset() +{ + /* prevent phantom coins again */ + m_coin2_lock_cnt = 3; +} + void markham_state::init_banbam() { /* Fujitsu MB8841 4-Bit MCU comms */ @@ -753,20 +776,16 @@ void markham_state::init_banbam() void markham_state::init_pettanp() { -// AM_RANGE(0xd80c, 0xd80c) AM_WRITENOP /* protection reset? */ -// AM_RANGE(0xd80d, 0xd80d) AM_WRITE(protection_w) /* protection data write (pettanp) */ -// AM_RANGE(0xd806, 0xd806) AM_READ(protection_r) /* protection data read (pettanp) */ - /* Fujitsu MB8841 4-Bit MCU comms */ m_maincpu->space(AS_PROGRAM).install_read_handler(0xd806, 0xd806, read8_delegate(FUNC(markham_state::pettanp_protection_r),this)); m_maincpu->space(AS_PROGRAM).install_write_handler(0xd80d, 0xd80d, write8_delegate(FUNC(markham_state::protection_w),this)); } /* Markham hardware */ -GAME( 1983, markham, 0, markham, markham, markham_state, empty_init, ROT0, "Sun Electronics", "Markham", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, markham, 0, markham, markham, markham_state, empty_init, ROT0, "Sun Electronics", "Markham", MACHINE_SUPPORTS_SAVE ) /* Strength & Skill hardware */ -GAME( 1984, strnskil, 0, strnskil, strnskil, markham_state, empty_init, ROT0, "Sun Electronics", "Strength & Skill", MACHINE_SUPPORTS_SAVE) -GAME( 1984, guiness, strnskil, strnskil, strnskil, markham_state, empty_init, ROT0, "Sun Electronics", "The Guiness (Japan)", MACHINE_SUPPORTS_SAVE) -GAME( 1984, banbam, 0, banbam, banbam, markham_state, init_banbam, ROT0, "Sun Electronics", "BanBam", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE) -GAME( 1984, pettanp, banbam, strnskil, banbam, markham_state, init_pettanp, ROT0, "Sun Electronics", "Pettan Pyuu (Japan)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE) +GAME( 1984, strnskil, 0, strnskil, strnskil, markham_state, empty_init, ROT0, "Sun Electronics", "Strength & Skill", MACHINE_SUPPORTS_SAVE) +GAME( 1984, guiness, strnskil, strnskil, strnskil, markham_state, empty_init, ROT0, "Sun Electronics", "The Guiness (Japan)", MACHINE_SUPPORTS_SAVE) +GAME( 1984, banbam, 0, banbam, banbam, markham_state, init_banbam, ROT0, "Sun Electronics", "BanBam", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE) +GAME( 1984, pettanp, banbam, strnskil, banbam, markham_state, init_pettanp, ROT0, "Sun Electronics", "Pettan Pyuu (Japan)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE) diff --git a/src/mame/includes/markham.h b/src/mame/includes/markham.h index c3e5e5e53dd..cc12d4d7a36 100644 --- a/src/mame/includes/markham.h +++ b/src/mame/includes/markham.h @@ -40,10 +40,11 @@ public: , m_irq_source(0) , m_irq_scanline_start(0) , m_irq_scanline_end(0) - , m_coin_unlock(false) + , m_coin2_lock_cnt(3) { } + void init_common(); void init_banbam(); void init_pettanp(); @@ -73,6 +74,8 @@ protected: DECLARE_READ8_MEMBER(banbam_protection_r); DECLARE_WRITE8_MEMBER(protection_w); + virtual void machine_start() override; + virtual void machine_reset() override; virtual void video_start() override; uint32_t screen_update_markham(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -109,7 +112,7 @@ private: uint8_t m_irq_scanline_start; uint8_t m_irq_scanline_end; - bool m_coin_unlock; + uint8_t m_coin2_lock_cnt; }; #endif // MAME_INCLUDES_MARKHAM_H \ No newline at end of file diff --git a/src/mame/video/markham.cpp b/src/mame/video/markham.cpp index 4cb7505cd1e..0195dc61377 100644 --- a/src/mame/video/markham.cpp +++ b/src/mame/video/markham.cpp @@ -71,6 +71,7 @@ VIDEO_START_MEMBER(markham_state, strnskil) save_item(NAME(m_irq_source)); save_item(NAME(m_irq_scanline_start)); save_item(NAME(m_irq_scanline_end)); + save_item(NAME(m_scroll_ctrl)); } void markham_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) -- cgit v1.2.3