diff --git a/.gitattributes b/.gitattributes index 1586a9cdedc..7e182097bbe 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4402,8 +4402,6 @@ src/mame/machine/qix.c svneol=native#text/plain src/mame/machine/r2crypt.c svneol=native#text/plain src/mame/machine/rainbow.c svneol=native#text/plain src/mame/machine/retofinv.c svneol=native#text/plain -src/mame/machine/s16fd.c svneol=native#text/plain -src/mame/machine/s24fd.c svneol=native#text/plain src/mame/machine/scramble.c svneol=native#text/plain src/mame/machine/scudsp.c svneol=native#text/plain src/mame/machine/scudsp.h svneol=native#text/plain diff --git a/src/emu/driver.c b/src/emu/driver.c index 9a66448870d..a2cdb5c08d5 100644 --- a/src/emu/driver.c +++ b/src/emu/driver.c @@ -471,14 +471,15 @@ void driver_device::soundlatch_sync_callback(void *ptr, INT32 param) // writing to sound latches //------------------------------------------------- -WRITE8_MEMBER( driver_device::soundlatch_byte_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 0 | (data << 8)); } -WRITE16_MEMBER( driver_device::soundlatch_word_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 0 | (data << 8)); } -WRITE8_MEMBER( driver_device::soundlatch2_byte_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 1 | (data << 8)); } -WRITE16_MEMBER( driver_device::soundlatch2_word_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 1 | (data << 8)); } -WRITE8_MEMBER( driver_device::soundlatch3_byte_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 2 | (data << 8)); } -WRITE16_MEMBER( driver_device::soundlatch3_word_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 2 | (data << 8)); } -WRITE8_MEMBER( driver_device::soundlatch4_byte_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 3 | (data << 8)); } -WRITE16_MEMBER( driver_device::soundlatch4_word_w ) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), 3 | (data << 8)); } +void driver_device::soundlatch_write(UINT8 index, UINT32 data) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), index | (data << 8)); } +WRITE8_MEMBER( driver_device::soundlatch_byte_w ) { soundlatch_write(0, data); } +WRITE16_MEMBER( driver_device::soundlatch_word_w ) { soundlatch_write(0, data); } +WRITE8_MEMBER( driver_device::soundlatch2_byte_w ) { soundlatch_write(1, data); } +WRITE16_MEMBER( driver_device::soundlatch2_word_w ) { soundlatch_write(1, data); } +WRITE8_MEMBER( driver_device::soundlatch3_byte_w ) { soundlatch_write(2, data); } +WRITE16_MEMBER( driver_device::soundlatch3_word_w ) { soundlatch_write(2, data); } +WRITE8_MEMBER( driver_device::soundlatch4_byte_w ) { soundlatch_write(3, data); } +WRITE16_MEMBER( driver_device::soundlatch4_word_w ) { soundlatch_write(3, data); } //------------------------------------------------- @@ -486,14 +487,15 @@ WRITE16_MEMBER( driver_device::soundlatch4_word_w ) { machine().scheduler().sync // reading from sound latches //------------------------------------------------- -READ8_MEMBER( driver_device::soundlatch_byte_r ) { m_latch_read[0] = 1; return m_latched_value[0]; } -READ16_MEMBER( driver_device::soundlatch_word_r ) { m_latch_read[0] = 1; return m_latched_value[0]; } -READ8_MEMBER( driver_device::soundlatch2_byte_r ) { m_latch_read[1] = 1; return m_latched_value[1]; } -READ16_MEMBER( driver_device::soundlatch2_word_r ) { m_latch_read[1] = 1; return m_latched_value[1]; } -READ8_MEMBER( driver_device::soundlatch3_byte_r ) { m_latch_read[2] = 1; return m_latched_value[2]; } -READ16_MEMBER( driver_device::soundlatch3_word_r ) { m_latch_read[2] = 1; return m_latched_value[2]; } -READ8_MEMBER( driver_device::soundlatch4_byte_r ) { m_latch_read[3] = 1; return m_latched_value[3]; } -READ16_MEMBER( driver_device::soundlatch4_word_r ) { m_latch_read[3] = 1; return m_latched_value[3]; } +UINT32 driver_device::soundlatch_read(UINT8 index) { m_latch_read[index] = 1; return m_latched_value[index]; } +READ8_MEMBER( driver_device::soundlatch_byte_r ) { return soundlatch_read(0); } +READ16_MEMBER( driver_device::soundlatch_word_r ) { return soundlatch_read(0); } +READ8_MEMBER( driver_device::soundlatch2_byte_r ) { return soundlatch_read(1); } +READ16_MEMBER( driver_device::soundlatch2_word_r ) { return soundlatch_read(1); } +READ8_MEMBER( driver_device::soundlatch3_byte_r ) { return soundlatch_read(2); } +READ16_MEMBER( driver_device::soundlatch3_word_r ) { return soundlatch_read(2); } +READ8_MEMBER( driver_device::soundlatch4_byte_r ) { return soundlatch_read(3); } +READ16_MEMBER( driver_device::soundlatch4_word_r ) { return soundlatch_read(3); } //------------------------------------------------- @@ -501,10 +503,11 @@ READ16_MEMBER( driver_device::soundlatch4_word_r ) { m_latch_read[3] = 1; return // for clearing sound latches //------------------------------------------------- -WRITE8_MEMBER( driver_device::soundlatch_clear_byte_w ) { m_latched_value[0] = m_latch_clear_value; } -WRITE8_MEMBER( driver_device::soundlatch2_clear_byte_w ) { m_latched_value[1] = m_latch_clear_value; } -WRITE8_MEMBER( driver_device::soundlatch3_clear_byte_w ) { m_latched_value[2] = m_latch_clear_value; } -WRITE8_MEMBER( driver_device::soundlatch4_clear_byte_w ) { m_latched_value[3] = m_latch_clear_value; } +void driver_device::soundlatch_clear(UINT8 index) { m_latched_value[index] = m_latch_clear_value; } +WRITE8_MEMBER( driver_device::soundlatch_clear_byte_w ) { soundlatch_clear(0); } +WRITE8_MEMBER( driver_device::soundlatch2_clear_byte_w ) { soundlatch_clear(1); } +WRITE8_MEMBER( driver_device::soundlatch3_clear_byte_w ) { soundlatch_clear(2); } +WRITE8_MEMBER( driver_device::soundlatch4_clear_byte_w ) { soundlatch_clear(3); } diff --git a/src/emu/driver.h b/src/emu/driver.h index 8789fd727d1..efd941b1b1c 100644 --- a/src/emu/driver.h +++ b/src/emu/driver.h @@ -178,9 +178,9 @@ public: // generic helpers template - static void static_wrapper(driver_device &device) + static void driver_init_wrapper(running_machine &machine) { - (downcast<_DriverClass &>(device).*_Function)(); + (machine.driver_data<_DriverClass>()->*_Function)(); } // generic interrupt generators @@ -234,6 +234,7 @@ public: void soundlatch_setclearedvalue(UINT16 value) { m_latch_clear_value = value; } // sound latch readers + UINT32 soundlatch_read(UINT8 index = 0); DECLARE_READ8_MEMBER( soundlatch_byte_r ); DECLARE_READ8_MEMBER( soundlatch2_byte_r ); DECLARE_READ8_MEMBER( soundlatch3_byte_r ); @@ -244,6 +245,8 @@ public: DECLARE_READ16_MEMBER( soundlatch4_word_r ); // sound latch writers + void soundlatch_write(UINT8 index, UINT32 data); + void soundlatch_write(UINT32 data) { soundlatch_write(0, data); } DECLARE_WRITE8_MEMBER( soundlatch_byte_w ); DECLARE_WRITE8_MEMBER( soundlatch2_byte_w ); DECLARE_WRITE8_MEMBER( soundlatch3_byte_w ); @@ -254,6 +257,7 @@ public: DECLARE_WRITE16_MEMBER( soundlatch4_word_w ); // sound latch clearers + void soundlatch_clear(UINT8 index = 0); DECLARE_WRITE8_MEMBER( soundlatch_clear_byte_w ); DECLARE_WRITE8_MEMBER( soundlatch2_clear_byte_w ); DECLARE_WRITE8_MEMBER( soundlatch3_clear_byte_w ); diff --git a/src/emu/gamedrv.h b/src/emu/gamedrv.h index 8518ef05451..ae80114bf83 100644 --- a/src/emu/gamedrv.h +++ b/src/emu/gamedrv.h @@ -120,6 +120,90 @@ struct game_driver #define GAME_NAME(name) driver_##name #define GAME_EXTERN(name) extern const game_driver GAME_NAME(name) +#ifdef MODERN_DRIVER_INIT + +// standard GAME() macro +#define GAME(YEAR,NAME,PARENT,MACHINE,INPUT,CLASS,INIT,MONITOR,COMPANY,FULLNAME,FLAGS) \ + GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,CLASS,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,((const char *)0)) + +// standard macro with additional layout +#define GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,CLASS,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,LAYOUT) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + &driver_device::driver_init_wrapper, \ + ROM_NAME(NAME), \ + NULL, \ + (MONITOR)|(FLAGS)|GAME_TYPE_ARCADE, \ + &LAYOUT[0] \ +}; + +// standard console definition macro +#define CONS(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,CLASS,INIT,COMPANY,FULLNAME,FLAGS) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + &driver_device::driver_init_wrapper, \ + ROM_NAME(NAME), \ + #COMPAT, \ + ROT0|(FLAGS)|GAME_TYPE_CONSOLE, \ + NULL \ +}; + +// standard computer definition macro +#define COMP(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,CLASS,INIT,COMPANY,FULLNAME,FLAGS) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + &driver_device::driver_init_wrapper, \ + ROM_NAME(NAME), \ + #COMPAT, \ + ROT0|(FLAGS)|GAME_TYPE_COMPUTER, \ + NULL \ +}; + +// standard system definition macro +#define SYST(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,CLASS,INIT,COMPANY,FULLNAME,FLAGS) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + &driver_device::driver_init_wrapper, \ + ROM_NAME(NAME), \ + #COMPAT, \ + ROT0|(FLAGS)|GAME_TYPE_OTHER, \ + NULL \ +}; + +#else + // standard GAME() macro #define GAME(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS) \ GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,((const char *)0)) @@ -200,6 +284,7 @@ extern const game_driver GAME_NAME(NAME) = \ NULL \ }; +#endif //************************************************************************** diff --git a/src/emu/ui.c b/src/emu/ui.c index e6d4a386f2c..ae5bac00e17 100644 --- a/src/emu/ui.c +++ b/src/emu/ui.c @@ -1031,10 +1031,11 @@ astring &game_info_astring(running_machine &machine, astring &string) /* count how many identical CPUs we have */ int count = 1; + const char *name = exec->device().name(); execute_interface_iterator execinneriter(machine.root_device()); for (device_execute_interface *scan = execinneriter.first(); scan != NULL; scan = execinneriter.next()) { - if (exec->device().type() == scan->device().type() && exec->device().clock() == scan->device().clock()) + if (exec->device().type() == scan->device().type() && strcmp(name, scan->device().name()) == 0 && exec->device().clock() == scan->device().clock()) if (exectags.add(scan->device().tag(), 1, FALSE) != TMERR_DUPLICATE) count++; } @@ -1042,7 +1043,7 @@ astring &game_info_astring(running_machine &machine, astring &string) /* if more than one, prepend a #x in front of the CPU name */ if (count > 1) string.catprintf("%d" UTF8_MULTIPLY, count); - string.cat(exec->device().name()); + string.cat(name); /* display clock in kHz or MHz */ if (clock >= 1000000) diff --git a/src/mame/drivers/beathead.c b/src/mame/drivers/beathead.c index c9441b8ea45..84a504ebc47 100644 --- a/src/mame/drivers/beathead.c +++ b/src/mame/drivers/beathead.c @@ -2,7 +2,38 @@ Atari "Stella on Steroids" hardware - driver by Aaron Giles +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +**************************************************************************** Games supported: * BeatHead diff --git a/src/mame/drivers/segahang.c b/src/mame/drivers/segahang.c index a28a592b237..cfe3a105bf3 100644 --- a/src/mame/drivers/segahang.c +++ b/src/mame/drivers/segahang.c @@ -2,6 +2,37 @@ Sega Hang On hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + **************************************************************************** Known bugs: @@ -14,17 +45,13 @@ ***************************************************************************/ #include "emu.h" -#include "cpu/z80/z80.h" -#include "cpu/mcs51/mcs51.h" #include "includes/segas16.h" #include "machine/segaic16.h" #include "machine/fd1089.h" -#include "machine/8255ppi.h" -#include "cpu/m68000/m68000.h" +#include "machine/fd1094.h" #include "sound/2203intf.h" #include "sound/2151intf.h" #include "sound/segapcm.h" -#include "video/segaic16.h" #include "includes/segaipt.h" @@ -92,25 +119,18 @@ static const ppi8255_interface hangon_ppi_intf[2] = static void hangon_generic_init( running_machine &machine ) { - segas1x_state *state = machine.driver_data(); + segahang_state *state = machine.driver_data(); /* reset the custom handlers and other pointers */ state->m_i8751_vblank_hook = NULL; - state->m_maincpu = machine.device("maincpu"); - state->m_soundcpu = machine.device("soundcpu"); - state->m_subcpu = machine.device("sub"); - state->m_mcu = machine.device("mcu"); - state->m_ppi8255_1 = machine.device("ppi8255_1"); - state->m_ppi8255_2 = machine.device("ppi8255_2"); - state->save_item(NAME(state->m_adc_select)); } static TIMER_CALLBACK( suspend_i8751 ) { - segas1x_state *state = machine.driver_data(); + segahang_state *state = machine.driver_data(); device_suspend(state->m_mcu, SUSPEND_REASON_DISABLE, 1); } @@ -124,9 +144,7 @@ static TIMER_CALLBACK( suspend_i8751 ) static MACHINE_RESET( hangon ) { - segas1x_state *state = machine.driver_data(); - - fd1094_machine_init(machine.device("sub")); + segahang_state *state = machine.driver_data(); /* reset misc components */ segaic16_tilemap_reset(machine, 0); @@ -142,7 +160,7 @@ static MACHINE_RESET( hangon ) #if 0 static TIMER_DEVICE_CALLBACK( hangon_irq ) { - segas1x_state *state = timer.machine().driver_data(); + segahang_state *state = timer.machine().driver_data(); int scanline = param; /* according to the schematics, IRQ2 is generated every 16 scanlines */ @@ -163,14 +181,14 @@ static TIMER_DEVICE_CALLBACK( hangon_irq ) static TIMER_CALLBACK( delayed_ppi8255_w ) { - segas1x_state *state = machine.driver_data(); + segahang_state *state = machine.driver_data(); ppi8255_w(state->m_ppi8255_1, param >> 8, param & 0xff); } static READ16_HANDLER( hangon_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segahang_state *state = space->machine().driver_data(); switch (offset & 0x3020/2) { @@ -200,7 +218,7 @@ static READ16_HANDLER( hangon_io_r ) static WRITE16_HANDLER( hangon_io_w ) { - segas1x_state *state = space->machine().driver_data(); + segahang_state *state = space->machine().driver_data(); if (ACCESSING_BITS_0_7) switch (offset & 0x3020/2) @@ -225,7 +243,7 @@ static WRITE16_HANDLER( hangon_io_w ) static READ16_HANDLER( sharrier_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segahang_state *state = space->machine().driver_data(); switch (offset & 0x0030/2) { @@ -256,7 +274,7 @@ static READ16_HANDLER( sharrier_io_r ) static WRITE16_HANDLER( sharrier_io_w ) { - segas1x_state *state = space->machine().driver_data(); + segahang_state *state = space->machine().driver_data(); if (ACCESSING_BITS_0_7) switch (offset & 0x0030/2) @@ -288,7 +306,7 @@ static WRITE16_HANDLER( sharrier_io_w ) static WRITE8_DEVICE_HANDLER( sound_latch_w ) { - segas1x_state *state = device->machine().driver_data(); + segahang_state *state = device->machine().driver_data(); address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); state->soundlatch_byte_w(*space, offset, data); } @@ -317,7 +335,7 @@ static WRITE8_DEVICE_HANDLER( video_lamps_w ) static WRITE8_DEVICE_HANDLER( tilemap_sound_w ) { - segas1x_state *state = device->machine().driver_data(); + segahang_state *state = device->machine().driver_data(); /* Port C : Tilemap origin and audio mute */ /* D7 : Port A handshaking signal /OBF */ @@ -337,7 +355,7 @@ static WRITE8_DEVICE_HANDLER( tilemap_sound_w ) static WRITE8_DEVICE_HANDLER( sub_control_adc_w ) { - segas1x_state *state = device->machine().driver_data(); + segahang_state *state = device->machine().driver_data(); /* Port A : S.CPU control and ADC channel select */ /* D6 : INTR line on second CPU */ @@ -346,12 +364,6 @@ static WRITE8_DEVICE_HANDLER( sub_control_adc_w ) device_set_input_line(state->m_subcpu, 4, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE); device_set_input_line(state->m_subcpu, INPUT_LINE_RESET, (data & 0x20) ? ASSERT_LINE : CLEAR_LINE); - /* If the CPU is being Reset we also need to reset the fd1094 state */ - if (data & 0x20) - { - fd1094_machine_init(state->m_subcpu); - } - state->m_adc_select = (data >> 2) & 3; } @@ -375,7 +387,7 @@ static READ8_DEVICE_HANDLER( adc_status_r ) static INTERRUPT_GEN( i8751_main_cpu_vblank ) { - segas1x_state *state = device->machine().driver_data(); + segahang_state *state = device->machine().driver_data(); /* if we have a fake 8751 handler, call it on VBLANK */ if (state->m_i8751_vblank_hook != NULL) @@ -406,14 +418,14 @@ static void sharrier_i8751_sim(running_machine &machine) static void sound_irq(device_t *device, int irq) { - segas1x_state *state = device->machine().driver_data(); + segahang_state *state = device->machine().driver_data(); device_set_input_line(state->m_soundcpu, 0, irq ? ASSERT_LINE : CLEAR_LINE); } static READ8_HANDLER( sound_data_r ) { - segas1x_state *state = space->machine().driver_data(); + segahang_state *state = space->machine().driver_data(); /* assert ACK */ ppi8255_set_port_c(state->m_ppi8255_1, 0x00); @@ -428,7 +440,7 @@ static READ8_HANDLER( sound_data_r ) * *************************************/ -static ADDRESS_MAP_START( hangon_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( hangon_map, AS_PROGRAM, 16, segahang_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x20c000, 0x20ffff) AM_RAM @@ -436,13 +448,13 @@ static ADDRESS_MAP_START( hangon_map, AS_PROGRAM, 16, segas1x_state ) AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE_LEGACY(segaic16_textram_0_w) AM_BASE_LEGACY(&segaic16_textram_0) AM_RANGE(0x600000, 0x6007ff) AM_RAM AM_BASE_LEGACY(&segaic16_spriteram_0) AM_RANGE(0xa00000, 0xa00fff) AM_RAM_WRITE_LEGACY(segaic16_paletteram_w) AM_BASE_LEGACY(&segaic16_paletteram) - AM_RANGE(0xc00000, 0xc3ffff) AM_ROM AM_REGION("sub", 0) + AM_RANGE(0xc00000, 0xc3ffff) AM_ROM AM_REGION("subcpu", 0) AM_RANGE(0xc68000, 0xc68fff) AM_RAM AM_SHARE("share1") AM_BASE_LEGACY(&segaic16_roadram_0) AM_RANGE(0xc7c000, 0xc7ffff) AM_RAM AM_SHARE("share2") AM_RANGE(0xe00000, 0xffffff) AM_READWRITE_LEGACY(hangon_io_r, hangon_io_w) ADDRESS_MAP_END -static ADDRESS_MAP_START( sharrier_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( sharrier_map, AS_PROGRAM, 16, segahang_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x040000, 0x043fff) AM_RAM AM_BASE_LEGACY(&workram) @@ -464,7 +476,7 @@ ADDRESS_MAP_END *************************************/ /* On Super Hang On there is a memory mapper, like the System16 one, todo: emulate it! */ -static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 16, segahang_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0x7ffff) AM_RANGE(0x000000, 0x03ffff) AM_ROM @@ -480,7 +492,7 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( sound_map_2203, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map_2203, AS_PROGRAM, 8, segahang_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x0800) AM_RAM @@ -488,28 +500,28 @@ static ADDRESS_MAP_START( sound_map_2203, AS_PROGRAM, 8, segas1x_state ) AM_RANGE(0xe000, 0xe0ff) AM_MIRROR(0x0f00) AM_DEVREADWRITE_LEGACY("pcm", sega_pcm_r, sega_pcm_w) ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap_2203, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap_2203, AS_IO, 8, segahang_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_READ_LEGACY(sound_data_r) ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_map_2151, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map_2151, AS_PROGRAM, 8, segahang_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xf000, 0xf0ff) AM_MIRROR(0x700) AM_DEVREADWRITE_LEGACY("pcm", sega_pcm_r, sega_pcm_w) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap_2151, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap_2151, AS_IO, 8, segahang_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_READ_LEGACY(sound_data_r) ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap_2203x2, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap_2203x2, AS_IO, 8, segahang_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ym1", ym2203_r, ym2203_w) @@ -525,7 +537,7 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segahang_state ) ADDRESS_MAP_END @@ -819,14 +831,14 @@ GFXDECODE_END * *************************************/ -static MACHINE_CONFIG_START( hangon_base, segas1x_state ) +static MACHINE_CONFIG_START( hangon_base, segahang_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, MASTER_CLOCK_25MHz/4) MCFG_CPU_PROGRAM_MAP(hangon_map) MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) - MCFG_CPU_ADD("sub", M68000, MASTER_CLOCK_25MHz/4) + MCFG_CPU_ADD("subcpu", M68000, MASTER_CLOCK_25MHz/4) MCFG_CPU_PROGRAM_MAP(sub_map) MCFG_MACHINE_RESET(hangon) @@ -855,7 +867,7 @@ static MACHINE_CONFIG_DERIVED( sharrier_base, hangon_base ) MCFG_CPU_PROGRAM_MAP(sharrier_map) MCFG_CPU_VBLANK_INT("screen", i8751_main_cpu_vblank) - MCFG_CPU_MODIFY("sub") + MCFG_CPU_MODIFY("subcpu") MCFG_CPU_CLOCK(MASTER_CLOCK_10MHz) /* video hardware */ @@ -863,6 +875,15 @@ static MACHINE_CONFIG_DERIVED( sharrier_base, hangon_base ) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( enduror_base, sharrier_base ) + + /* basic machine hardware */ + MCFG_CPU_REPLACE("maincpu", FD1089B, MASTER_CLOCK_10MHz) + MCFG_CPU_PROGRAM_MAP(sharrier_map) + MCFG_CPU_VBLANK_INT("screen", i8751_main_cpu_vblank) +MACHINE_CONFIG_END + + static MACHINE_CONFIG_FRAGMENT( sound_board_2203 ) /* basic machine hardware */ @@ -971,13 +992,19 @@ static MACHINE_CONFIG_DERIVED( shangupb, hangon_base ) /* not sure about these speeds, but at 6MHz, the road is not updated fast enough */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_CLOCK(10000000) - MCFG_CPU_MODIFY("sub") + MCFG_CPU_MODIFY("subcpu") MCFG_CPU_CLOCK(10000000) MCFG_SEGA16SP_ADD_HANGON("segaspr1") MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( shangonro, shangupb ) + MCFG_CPU_REPLACE("subcpu", FD1094, 10000000) + MCFG_CPU_PROGRAM_MAP(sub_map) +MACHINE_CONFIG_END + + static MACHINE_CONFIG_DERIVED( sharrier, sharrier_base ) MCFG_FRAGMENT_ADD(sound_board_2203) @@ -989,14 +1016,21 @@ static MACHINE_CONFIG_DERIVED( sharrier, sharrier_base ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( enduror, sharrier_base ) +static MACHINE_CONFIG_DERIVED( enduror, enduror_base ) MCFG_FRAGMENT_ADD(sound_board_2151) MCFG_SEGA16SP_ADD_SHARRIER("segaspr1") MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( enduror1, sharrier_base ) +static MACHINE_CONFIG_DERIVED( enduror1, enduror_base ) + MCFG_FRAGMENT_ADD(sound_board_2203) + + MCFG_SEGA16SP_ADD_SHARRIER("segaspr1") +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( endurobl, sharrier_base ) MCFG_FRAGMENT_ADD(sound_board_2203) MCFG_SEGA16SP_ADD_SHARRIER("segaspr1") @@ -1036,7 +1070,7 @@ ROM_START( hangon ) ROM_LOAD16_BYTE( "epr-6917a.ic20", 0x010000, 0x8000, CRC(fea12367) SHA1(9a1ce5863c562160b657ad948812b43f42d7d0cc) ) ROM_LOAD16_BYTE( "epr-6915a.ic6", 0x010001, 0x8000, CRC(ac883240) SHA1(f943341ae13e062f3d12c6221180086ce8bdb8c4) ) - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE( "epr-6920.ic63", 0x0000, 0x8000, CRC(1c95013e) SHA1(8344ac953477279c2c701f984d98292a21dd2f7d) ) ROM_LOAD16_BYTE( "epr-6919.ic51", 0x0001, 0x8000, CRC(6ca30d69) SHA1(ed933351883ebf6d9ef9428a81d09749b609cd60) ) @@ -1095,7 +1129,7 @@ ROM_START( hangon1 ) ROM_LOAD16_BYTE( "epr-6917.ic20", 0x010000, 0x8000, CRC(f48a6cbc) SHA1(6437efaeb0e4cb727c03eb83678a9e107d244af1) ) ROM_LOAD16_BYTE( "epr-6915.ic6", 0x010001, 0x8000, CRC(75d3b5ee) SHA1(00948d0610f52b1b554cadde96227428e510e73e) ) - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE( "epr-6920.ic63", 0x0000, 0x8000, CRC(1c95013e) SHA1(8344ac953477279c2c701f984d98292a21dd2f7d) ) ROM_LOAD16_BYTE( "epr-6919.ic51", 0x0001, 0x8000, CRC(6ca30d69) SHA1(ed933351883ebf6d9ef9428a81d09749b609cd60) ) @@ -1159,15 +1193,15 @@ ROM_START( shangonro ) ROM_LOAD16_BYTE( "epr-10840.18", 0x20000, 0x08000, CRC(12ee8716) SHA1(8e798d23d22f85cd046641184d104c17b27995b2) ) ROM_LOAD16_BYTE( "epr-10837.4", 0x20001, 0x08000, CRC(155e0cfd) SHA1(e51734351c887fe3920c881f57abdfbb7d075f57) ) - ROM_REGION( 0x2000, "user1", 0 ) /* FD1094 decryption key */ - ROM_LOAD( "317-0038.key", 0x0000, 0x2000, CRC(85943925) SHA1(76303b0aa79ca9d4a8d10d4e63ee2efe756a0a00) ) - - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU (encrypted FD1094) */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU (encrypted FD1094) */ ROM_LOAD16_BYTE( "epr-10833.31", 0x000001, 0x10000, CRC(13ba98bc) SHA1(83710a7bb9d038f8663e6d42b184d4e4d937a26f) ) ROM_LOAD16_BYTE( "epr-10831.25", 0x000000, 0x10000, CRC(3a2de9eb) SHA1(20da548cd1fb466942ee45306cfd04766e5a4f50) ) ROM_LOAD16_BYTE( "epr-10832.30", 0x020001, 0x10000, CRC(543cd7bb) SHA1(124b426adc2d8dc51172ef94cb215bde3b8b42a7) ) ROM_LOAD16_BYTE( "epr-10830.24", 0x020000, 0x10000, CRC(2ae4e53a) SHA1(b15b5a8b36cbe5fe68b5e18ab3398ebc7214dbee) ) + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* FD1094 decryption key */ + ROM_LOAD( "317-0038.key", 0x0000, 0x2000, CRC(85943925) SHA1(76303b0aa79ca9d4a8d10d4e63ee2efe756a0a00) ) + ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ ROM_LOAD( "epr-10652.38", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) ) ROM_LOAD( "epr-10651.23", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) ) @@ -1215,7 +1249,7 @@ ROM_START( shangonrb ) ROM_LOAD16_BYTE( "s-hangon.29", 0x020000, 0x08000, CRC(12ee8716) SHA1(8e798d23d22f85cd046641184d104c17b27995b2) ) /* Same as EPR-10840 above */ ROM_LOAD16_BYTE( "s-hangon.31", 0x020001, 0x08000, CRC(155e0cfd) SHA1(e51734351c887fe3920c881f57abdfbb7d075f57) ) /* Same as EPR-10837 above */ - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE( "s-hangon.09", 0x00000, 0x10000, CRC(070c8059) SHA1(a18c5e9473b6634f6e7165300e39029335b41ba3) ) ROM_LOAD16_BYTE( "s-hangon.05", 0x00001, 0x10000, CRC(9916c54b) SHA1(41a7c5a9bdb1e3feae8fadf1ac5f51fab6376157) ) ROM_LOAD16_BYTE( "s-hangon.08", 0x20000, 0x10000, CRC(000ad595) SHA1(eb80e798159c09bc5142a7ea8b9b0f895976b0d4) ) @@ -1278,7 +1312,7 @@ ROM_START( sharrier ) ROM_LOAD16_BYTE( "epr-7191.ic100", 0x030000, 0x8000, CRC(6171e9d3) SHA1(72f8736f421dc93139859fd47f0c8c3c32b6ff0b) ) ROM_LOAD16_BYTE( "epr-7187.ic87", 0x030001, 0x8000, CRC(70cb72ef) SHA1(d1d89bd133b6905f81c25513d852b7e3a05a7312) ) - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE( "epr-7182.ic54", 0x0000, 0x8000, CRC(d7c535b6) SHA1(c0659a678c0c3776387a4a675016e9a2e9c67ee3) ) ROM_LOAD16_BYTE( "epr-7183.ic67", 0x0001, 0x8000, CRC(a6153af8) SHA1(b56ba472e4afb474c7a3f7dc11d7428ebbe1a9c7) ) @@ -1358,7 +1392,7 @@ ROM_START( sharrier1 ) ROM_LOAD16_BYTE( "epr-7191.ic100", 0x030000, 0x8000, CRC(6171e9d3) SHA1(72f8736f421dc93139859fd47f0c8c3c32b6ff0b) ) ROM_LOAD16_BYTE( "epr-7187.ic87", 0x030001, 0x8000, CRC(70cb72ef) SHA1(d1d89bd133b6905f81c25513d852b7e3a05a7312) ) - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE( "epr-7182.ic54", 0x0000, 0x8000, CRC(d7c535b6) SHA1(c0659a678c0c3776387a4a675016e9a2e9c67ee3) ) ROM_LOAD16_BYTE( "epr-7183.ic67", 0x0001, 0x8000, CRC(a6153af8) SHA1(b56ba472e4afb474c7a3f7dc11d7428ebbe1a9c7) ) @@ -1441,7 +1475,7 @@ ROM_START( enduror ) ROM_LOAD16_BYTE( "epr-7642.ic99", 0x20000, 0x8000, CRC(1c453bea) SHA1(c6e606cdcb1690de05ef5283b48a8a61b2e0ad51) ) ROM_LOAD16_BYTE( "epr-7638.ic86", 0x20001, 0x8000, CRC(70544779) SHA1(e6403edd7fc0ad5d447c25be5d7f10889aa109ff) ) - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE("epr-7634a.ic54", 0x0000, 0x8000, CRC(aec83731) SHA1(3fe2d0f1a8806b850836741d664c07754a701459) ) ROM_LOAD16_BYTE("epr-7635a.ic67", 0x0001, 0x8000, CRC(b2fce96f) SHA1(9d6c1a7c2bdbf86430b849a5f6c6fdb5595dc91c) ) @@ -1497,7 +1531,7 @@ ROM_START( enduror ) ROM_REGION( 0x2000, "proms", 0 ) /* zoom table */ ROM_LOAD( "epr-6844.ic123", 0x0000, 0x2000, CRC(e3ec7bd6) SHA1(feec0fe664e16fac0fde61cf64b401b9b0575323) ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0013a.key", 0x0000, 0x2000, CRC(295e6737) SHA1(2eff36f1f24db1154cf970d4c9fd481ae4f9a57c) ) ROM_END @@ -1520,7 +1554,7 @@ ROM_START( enduror1 ) ROM_LOAD16_BYTE( "epr-7642.ic99", 0x20000, 0x8000, CRC(1c453bea) SHA1(c6e606cdcb1690de05ef5283b48a8a61b2e0ad51) ) ROM_LOAD16_BYTE( "epr-7638.ic86", 0x20001, 0x8000, CRC(70544779) SHA1(e6403edd7fc0ad5d447c25be5d7f10889aa109ff) ) - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE("epr-7634.ic54", 0x0000, 0x8000, CRC(3e07fd32) SHA1(7acb9e9712ecfe928c421c84dece783e75077746) ) ROM_LOAD16_BYTE("epr-7635.ic67", 0x0001, 0x8000, CRC(22f762ab) SHA1(70fa87da76c714db7213c42128a0b6a27644a1d4) ) @@ -1577,7 +1611,7 @@ ROM_START( enduror1 ) ROM_REGION( 0x2000, "proms", 0 ) /* zoom table */ ROM_LOAD( "epr-6844.ic123", 0x0000, 0x2000, CRC(e3ec7bd6) SHA1(feec0fe664e16fac0fde61cf64b401b9b0575323) ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0013a.key", 0x0000, 0x2000, CRC(295e6737) SHA1(2eff36f1f24db1154cf970d4c9fd481ae4f9a57c) ) ROM_END @@ -1597,7 +1631,7 @@ ROM_START( endurobl ) ROM_LOAD16_BYTE( "9.15j", 0x020000, 0x08000, CRC(db3bff1c) SHA1(343ed27a690800683cdd5128dcdb28c7b45288a3) ) /* one byte difference from */ ROM_LOAD16_BYTE( "6.15h", 0x020001, 0x08000, CRC(54b1885a) SHA1(f53d906390e5414e73c4cdcbc102d3cb3e719e67) ) /* epr-7638.ic86 / epr-7642.ic99 */ - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE("epr-7634.ic54", 0x0000, 0x8000, CRC(3e07fd32) SHA1(7acb9e9712ecfe928c421c84dece783e75077746) ) ROM_LOAD16_BYTE("epr-7635.ic67", 0x0001, 0x8000, CRC(22f762ab) SHA1(70fa87da76c714db7213c42128a0b6a27644a1d4) ) @@ -1672,7 +1706,7 @@ ROM_START( endurob2 ) ROM_LOAD16_BYTE( "enduro.a09", 0x020000, 0x08000, CRC(f6391091) SHA1(3160b342b6447cccf67c932c7c1a42354cdfb058) ) ROM_LOAD16_BYTE( "enduro.a06", 0x020001, 0x08000, CRC(79b367d7) SHA1(e901036b1b9fac460415d513837c8f852f7750b0) ) - ROM_REGION( 0x40000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x40000, "subcpu", 0 ) /* second 68000 CPU */ ROM_LOAD16_BYTE("epr-7634.ic54", 0x0000, 0x8000, CRC(3e07fd32) SHA1(7acb9e9712ecfe928c421c84dece783e75077746) ) ROM_LOAD16_BYTE("epr-7635.ic67", 0x0001, 0x8000, CRC(22f762ab) SHA1(70fa87da76c714db7213c42128a0b6a27644a1d4) ) @@ -1745,7 +1779,7 @@ static DRIVER_INIT( hangon ) static DRIVER_INIT( sharrier ) { - segas1x_state *state = machine.driver_data(); + segahang_state *state = machine.driver_data(); hangon_generic_init(machine); state->m_i8751_vblank_hook = sharrier_i8751_sim; @@ -1755,7 +1789,6 @@ static DRIVER_INIT( sharrier ) static DRIVER_INIT( enduror ) { hangon_generic_init(machine); - fd1089b_decrypt(machine); } @@ -1789,9 +1822,6 @@ static DRIVER_INIT( endurob2 ) static DRIVER_INIT( shangonro ) { hangon_generic_init(machine); - - /* init the FD1094 */ - fd1094_driver_init(machine, "sub", NULL); } @@ -1804,12 +1834,12 @@ static DRIVER_INIT( shangonro ) // YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS GAME( 1985, hangon, 0, hangon, hangon, hangon, ROT0, "Sega", "Hang-On (Rev A)", 0 ) GAME( 1985, hangon1, hangon, hangon, hangon, hangon, ROT0, "Sega", "Hang-On", 0 ) -GAME( 1987, shangonro, shangon, shangupb, shangonro, shangonro, ROT0, "Sega", "Super Hang-On (ride-on, Japan, FD1094 317-0038)", 0 ) +GAME( 1987, shangonro, shangon, shangonro,shangonro, shangonro, ROT0, "Sega", "Super Hang-On (ride-on, Japan, FD1094 317-0038)", 0 ) GAME( 1992, shangonrb, shangon, shangupb, shangupb, hangon, ROT0, "bootleg", "Super Hang-On (bootleg)", 0 ) GAME( 1985, sharrier, 0, sharrier, sharrier, sharrier, ROT0, "Sega", "Space Harrier (Rev A, 8751 315-5163A)", 0 ) GAME( 1985, sharrier1, sharrier, sharrier, sharrier, sharrier, ROT0, "Sega", "Space Harrier (8751 315-5163)", 0 ) GAME( 1986, enduror, 0, enduror, enduror, enduror, ROT0, "Sega", "Enduro Racer (YM2151, FD1089B 317-0013A)", 0 ) GAME( 1986, enduror1, enduror, enduror1, enduror, enduror, ROT0, "Sega", "Enduro Racer (YM2203, FD1089B 317-0013A)", 0 ) -GAME( 1986, endurobl, enduror, enduror1, enduror, endurobl, ROT0, "bootleg", "Enduro Racer (bootleg set 1)", 0 ) +GAME( 1986, endurobl, enduror, endurobl, enduror, endurobl, ROT0, "bootleg", "Enduro Racer (bootleg set 1)", 0 ) GAME( 1986, endurob2, enduror, endurob2, enduror, endurob2, ROT0, "bootleg", "Enduro Racer (bootleg set 2)", GAME_NOT_WORKING ) diff --git a/src/mame/drivers/segaorun.c b/src/mame/drivers/segaorun.c index 9c67573f55a..bf6734ca02a 100644 --- a/src/mame/drivers/segaorun.c +++ b/src/mame/drivers/segaorun.c @@ -1,5 +1,38 @@ /*************************************************************************** + Sega Out Run hardware + +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + **************************************************************************** Known bugs: @@ -267,18 +300,14 @@ Notes: ***************************************************************************/ +#define MODERN_DRIVER_INIT #include "emu.h" -#include "cpu/z80/z80.h" #include "includes/segas16.h" #include "machine/fd1089.h" #include "machine/segaic16.h" -#include "machine/8255ppi.h" -#include "machine/nvram.h" -#include "cpu/m68000/m68000.h" #include "sound/2151intf.h" #include "sound/segapcm.h" -#include "video/segaic16.h" #include "includes/segaipt.h" #include "outrun.lh" @@ -290,440 +319,392 @@ Notes: -/************************************* - * - * Statics - * - *************************************/ - -static UINT16 *workram; -static UINT16 *cpu1ram, *cpu1rom; - -/************************************* - * - * Prototypes - * - *************************************/ - -static READ16_HANDLER( misc_io_r ); -static WRITE16_HANDLER( misc_io_w ); - -static READ8_DEVICE_HANDLER( unknown_porta_r ); -static READ8_DEVICE_HANDLER( unknown_portb_r ); -static READ8_DEVICE_HANDLER( unknown_portc_r ); -static WRITE8_DEVICE_HANDLER( unknown_porta_w ); -static WRITE8_DEVICE_HANDLER( unknown_portb_w ); -static WRITE8_DEVICE_HANDLER( video_control_w ); - - - -/************************************* - * - * PPI interfaces - * - *************************************/ +//************************************************************************** +// PPI INTERFACES +//************************************************************************** static const ppi8255_interface single_ppi_intf = { - DEVCB_HANDLER(unknown_porta_r), - DEVCB_HANDLER(unknown_portb_r), - DEVCB_HANDLER(unknown_portc_r), - DEVCB_HANDLER(unknown_porta_w), - DEVCB_HANDLER(unknown_portb_w), - DEVCB_HANDLER(video_control_w) + DEVCB_DRIVER_MEMBER(segaorun_state, unknown_porta_r), + DEVCB_DRIVER_MEMBER(segaorun_state, unknown_portb_r), + DEVCB_DRIVER_MEMBER(segaorun_state, unknown_portc_r), + DEVCB_DRIVER_MEMBER(segaorun_state, unknown_porta_w), + DEVCB_DRIVER_MEMBER(segaorun_state, unknown_portb_w), + DEVCB_DRIVER_MEMBER(segaorun_state, video_control_w) }; -/************************************* - * - * Memory mapping tables - * - *************************************/ +//************************************************************************** +// MEMORY MAPPING +//************************************************************************** -static const segaic16_memory_map_entry outrun_info[] = +//------------------------------------------------- +// memory_mapper - callback to implement memory +// mapping for a given index +//------------------------------------------------- + +void segaorun_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index) { - { 0x35/2, 0x90000, 0x10000, 0xf00000, ~0, FUNC(segaic16_road_control_0_r), NULL, FUNC(segaic16_road_control_0_w), NULL, NULL, "road control" }, - { 0x35/2, 0x80000, 0x01000, 0xf0f000, ~0, FUNC_NULL, "bank10", FUNC_NULL, "bank10", &segaic16_roadram_0, "road RAM" }, - { 0x35/2, 0x60000, 0x08000, 0xf18000, ~0, FUNC_NULL, "bank11", FUNC_NULL, "bank11", &cpu1ram, "CPU 1 RAM" }, - { 0x35/2, 0x00000, 0x60000, 0xf00000, ~0, FUNC_NULL, "bank12", FUNC_NULL, NULL, &cpu1rom, "CPU 1 ROM" }, - { 0x31/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x2d/2, 0x00000, 0x01000, 0xfff000, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x29/2, 0x00000, 0x02000, 0xffe000, ~0, FUNC_NULL, "bank14", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x25/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank15", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x25/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank16", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x21/2, 0x60000, 0x08000, 0xf98000, ~0, FUNC_NULL, "bank17", FUNC_NULL, "bank17", &workram, "CPU 0 RAM" }, - { 0x21/2, 0x00000, 0x60000, 0xf80000, 0x00000, FUNC_NULL, "bank18", FUNC_NULL, NULL, NULL, "CPU 0 ROM" }, - { 0 } -}; - - - -/************************************* - * - * Configuration - * - *************************************/ - -static TIMER_CALLBACK( delayed_sound_data_w ) -{ - segas1x_state *state = machine.driver_data(); - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); - state->soundlatch_byte_w(*space, 0, param); - device_set_input_line(state->m_soundcpu, INPUT_LINE_NMI, ASSERT_LINE); -} - - -static void sound_data_w(running_machine &machine, UINT8 data) -{ - machine.scheduler().synchronize(FUNC(delayed_sound_data_w), data); -} - - -static READ8_HANDLER( sound_data_r ) -{ - segas1x_state *state = space->machine().driver_data(); - - device_set_input_line(state->m_soundcpu, INPUT_LINE_NMI, CLEAR_LINE); - return state->soundlatch_byte_r(*space, offset); -} - - - -static void outrun_generic_init(running_machine &machine) -{ - segas1x_state *state = machine.driver_data(); - - /* allocate memory for regions not automatically assigned */ - segaic16_spriteram_0 = auto_alloc_array(machine, UINT16, 0x01000/2); - segaic16_paletteram = auto_alloc_array(machine, UINT16, 0x02000/2); - segaic16_tileram_0 = auto_alloc_array(machine, UINT16, 0x10000/2); - segaic16_textram_0 = auto_alloc_array(machine, UINT16, 0x01000/2); - workram = auto_alloc_array(machine, UINT16, 0x08000/2); - - /* init the memory mapper */ - segaic16_memory_mapper_init(machine.device("maincpu"), outrun_info, sound_data_w, NULL); - - /* init the FD1094 */ - fd1094_driver_init(machine, "maincpu", segaic16_memory_mapper_set_decrypted); - - /* reset the custom handlers and other pointers */ - state->m_custom_io_r = NULL; - state->m_custom_io_w = NULL; - state->m_custom_map = NULL; - - state->m_maincpu = machine.device("maincpu"); - state->m_soundcpu = machine.device("soundcpu"); - state->m_subcpu = machine.device("sub"); - state->m_ppi8255 = machine.device("ppi8255"); - - nvram_device *nvram = machine.device("nvram"); - if (nvram != NULL) - nvram->set_base(workram, 0x8000); - - state->save_item(NAME(state->m_adc_select)); - state->save_item(NAME(state->m_vblank_irq_state)); - state->save_item(NAME(state->m_irq2_state)); - state_save_register_global_pointer(machine, segaic16_spriteram_0, 0x01000/2); - state_save_register_global_pointer(machine, segaic16_paletteram, 0x02000/2); - state_save_register_global_pointer(machine, segaic16_tileram_0, 0x10000/2); - state_save_register_global_pointer(machine, segaic16_textram_0, 0x01000/2); - state_save_register_global_pointer(machine, workram, 0x08000/2); -} - - - -/************************************* - * - * Initialization & interrupts - * - *************************************/ - -static void update_main_irqs(running_machine &machine) -{ - segas1x_state *state = machine.driver_data(); - - device_set_input_line(state->m_maincpu, 2, state->m_irq2_state ? ASSERT_LINE : CLEAR_LINE); - device_set_input_line(state->m_maincpu, 4, state->m_vblank_irq_state ? ASSERT_LINE : CLEAR_LINE); - device_set_input_line(state->m_maincpu, 6, state->m_vblank_irq_state && state->m_irq2_state ? ASSERT_LINE : CLEAR_LINE); - - if (state->m_vblank_irq_state || state->m_irq2_state) - machine.scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); -} - - -static TIMER_CALLBACK( irq2_gen ) -{ - segas1x_state *state = machine.driver_data(); - - /* set the IRQ2 line */ - state->m_irq2_state = 1; - update_main_irqs(machine); -} - - -static TIMER_DEVICE_CALLBACK( scanline_callback ) -{ - segas1x_state *state = timer.machine().driver_data(); - int scanline = param; - int next_scanline = scanline; - - /* trigger IRQs on certain scanlines */ - switch (scanline) + switch (index) { - /* IRQ2 triggers on HBLANK of scanlines 65, 129, 193 */ - case 65: - case 129: - case 193: - timer.machine().scheduler().timer_set(timer.machine().primary_screen->time_until_pos(scanline, timer.machine().primary_screen->visible_area().max_x + 1), FUNC(irq2_gen)); - next_scanline = scanline + 1; + case 5: + mapper.map_as_handler(0x90000, 0x10000, 0xf00000, read16_delegate(FUNC(segaorun_state::legacy_wrapper_r), this), write16_delegate(FUNC(segaorun_state::legacy_wrapper), this)); + mapper.map_as_ram(0x80000, 0x01000, 0xf0f000, "roadram", write16_delegate()); + mapper.map_as_ram(0x60000, 0x08000, 0xf18000, "cpu1ram", write16_delegate()); + mapper.map_as_ram(0x00000, 0x60000, 0xf00000, "cpu1rom", write16_delegate(FUNC(segaorun_state::nop_w), this)); break; - - /* IRQ2 turns off at the start of scanlines 66, 130, 194 */ - case 66: - case 130: - case 194: - state->m_irq2_state = 0; - next_scanline = (scanline == 194) ? 223 : (scanline + 63); + + case 4: + mapper.map_as_handler(0x90000, 0x10000, 0xf00000, read16_delegate(FUNC(segaorun_state::misc_io_r), this), write16_delegate(FUNC(segaorun_state::misc_io_w), this)); break; - - /* VBLANK triggers on scanline 223 */ - case 223: - state->m_vblank_irq_state = 1; - next_scanline = scanline + 1; - device_set_input_line(state->m_subcpu, 4, ASSERT_LINE); + + case 3: + mapper.map_as_ram(0x00000, 0x01000, 0xfff000, "spriteram", write16_delegate()); break; - - /* VBLANK turns off at the start of scanline 224 */ - case 224: - state->m_vblank_irq_state = 0; - next_scanline = 65; - device_set_input_line(state->m_subcpu, 4, CLEAR_LINE); + + case 2: + mapper.map_as_ram(0x00000, 0x02000, 0xffe000, "paletteram", write16_delegate(FUNC(segaorun_state::legacy_wrapper), this)); + break; + + case 1: + mapper.map_as_ram(0x00000, 0x10000, 0xfe0000, "tileram", write16_delegate(FUNC(segaorun_state::legacy_wrapper), this)); + mapper.map_as_ram(0x10000, 0x01000, 0xfef000, "textram", write16_delegate(FUNC(segaorun_state::legacy_wrapper), this)); + break; + + case 0: + mapper.map_as_ram(0x60000, 0x08000, 0xf98000, "workram", write16_delegate()); + mapper.map_as_rom(0x00000, 0x60000, 0xf80000, "rom0base", 0x00000, write16_delegate()); break; } - - /* update IRQs on the main CPU */ - update_main_irqs(timer.machine()); - - /* come back at the next targeted scanline */ - timer.adjust(timer.machine().primary_screen->time_until_pos(next_scanline), next_scanline); } -/************************************* - * - * Basic machine setup - * - *************************************/ +//************************************************************************** +// CONFIGURATION +//************************************************************************** -static void outrun_reset(device_t *device) +//------------------------------------------------- +// mapper_sound_r - callback when the sound I/O +// port on the memory mapper is read +//------------------------------------------------- + +UINT8 segaorun_state::mapper_sound_r() { - segas1x_state *state = device->machine().driver_data(); - device_set_input_line(state->m_subcpu, INPUT_LINE_RESET, PULSE_LINE); -} - - -static MACHINE_RESET( outrun ) -{ - segas1x_state *state = machine.driver_data(); - fd1094_machine_init(machine.device("maincpu")); - - /* reset misc components */ - segaic16_memory_mapper_reset(machine); - if (state->m_custom_map) - segaic16_memory_mapper_config(machine, state->m_custom_map); - segaic16_tilemap_reset(machine, 0); - - /* hook the RESET line, which resets CPU #1 */ - m68k_set_reset_callback(machine.device("maincpu"), outrun_reset); - - /* start timers to track interrupts */ - state->m_interrupt_timer->adjust(machine.primary_screen->time_until_pos(223), 223); -} - - - -/************************************* - * - * 8255 handlers - * - *************************************/ - -static void log_unknown_ppi_read( running_machine &machine, unsigned port ) -{ - segas1x_state *state = machine.driver_data(); - static const char ports[] = "ABC"; - - logerror("%06X:read from 8255 port %c\n", cpu_get_pc(state->m_maincpu), ports[port]); -} - - -static void log_unknown_ppi_write( running_machine &machine, unsigned port, UINT8 data ) -{ - segas1x_state *state = machine.driver_data(); - static const char ports[] = "ABC"; - - logerror("%06X:write %02X to 8255 port %c\n", cpu_get_pc(state->m_maincpu), data, ports[port]); -} - - -static READ8_DEVICE_HANDLER( unknown_porta_r ) -{ - log_unknown_ppi_read(device->machine(), 0); return 0; } -static READ8_DEVICE_HANDLER( unknown_portb_r ) +//------------------------------------------------- +// mapper_sound_w - callback when the sound I/O +// port on the memory mapper is written +//------------------------------------------------- + +void segaorun_state::mapper_sound_w(UINT8 data) { - log_unknown_ppi_read(device->machine(), 1); - return 0; + synchronize(TID_SOUND_WRITE, data); } -static READ8_DEVICE_HANDLER( unknown_portc_r ) +//------------------------------------------------- +// sound_data_r - handle sound board reads from +// the sound latch +//------------------------------------------------- + +READ8_MEMBER( segaorun_state::sound_data_r ) { - log_unknown_ppi_read(device->machine(), 2); - return 0; + m_soundcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + return soundlatch_read(); } -static WRITE8_DEVICE_HANDLER( unknown_porta_w ) +//------------------------------------------------- +// init_generic - common initialization +//------------------------------------------------- + +void segaorun_state::init_generic() { - log_unknown_ppi_write(device->machine(), 0, data); -} + // configure the NVRAM to point to our workram + if (m_nvram != NULL) + m_nvram->set_base(m_workram, m_workram.bytes()); + // point globals to allocated memory regions + segaic16_spriteram_0 = reinterpret_cast(memshare("spriteram")->ptr()); + segaic16_paletteram = reinterpret_cast(memshare("paletteram")->ptr()); + segaic16_tileram_0 = reinterpret_cast(memshare("tileram")->ptr()); + segaic16_textram_0 = reinterpret_cast(memshare("textram")->ptr()); + segaic16_roadram_0 = reinterpret_cast(memshare("roadram")->ptr()); -static WRITE8_DEVICE_HANDLER( unknown_portb_w ) -{ - log_unknown_ppi_write(device->machine(), 1, data); -} - - -static WRITE8_DEVICE_HANDLER( video_control_w ) -{ - segas1x_state *state = device->machine().driver_data(); - - /* Output port: - D7: SG1 -- connects to sprite chip - D6: SG0 -- connects to mixing - D5: Screen display (1= blanked, 0= displayed) - D4-D2: (ADC2-0) - D1: (CONT) - affects sprite hardware - D0: Sound section reset (1= normal operation, 0= reset) - */ - segaic16_set_display_enable(device->machine(), data & 0x20); - state->m_adc_select = (data >> 2) & 7; - device_set_input_line(state->m_soundcpu, INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE); + // save state + save_item(NAME(m_adc_select)); + save_item(NAME(m_vblank_irq_state)); + save_item(NAME(m_irq2_state)); } -/************************************* - * - * I/O space - * - *************************************/ +//************************************************************************** +// INITIALIZATION & INTERRUPTS +//************************************************************************** -static READ16_HANDLER( misc_io_r ) +void segaorun_state::update_main_irqs() { - segas1x_state *state = space->machine().driver_data(); + m_maincpu->set_input_line(2, m_irq2_state ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(4, m_vblank_irq_state ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(6, (m_vblank_irq_state && m_irq2_state) ? ASSERT_LINE : CLEAR_LINE); - if (state->m_custom_io_r) - return state->m_custom_io_r(space, offset, mem_mask); - logerror("%06X:misc_io_r - unknown read access to address %04X\n", cpu_get_pc(&space->device()), offset * 2); - return segaic16_open_bus_r(space, 0, mem_mask); + if (m_vblank_irq_state || m_irq2_state) + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } -static WRITE16_HANDLER( misc_io_w ) +void segaorun_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - segas1x_state *state = space->machine().driver_data(); - - if (state->m_custom_io_w) + switch (id) { - state->m_custom_io_w(space, offset, data, mem_mask); + case TID_SOUND_WRITE: + soundlatch_write(param); + m_soundcpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + break; + + case TID_IRQ2_GEN: + // set the IRQ2 line + m_irq2_state = 1; + update_main_irqs(); + break; + + case TID_SCANLINE: + { + int scanline = param; + int next_scanline = scanline; + + // trigger IRQs on certain scanlines + switch (scanline) + { + // IRQ2 triggers on HBLANK of scanlines 65, 129, 193 + case 65: + case 129: + case 193: + timer_set(machine().primary_screen->time_until_pos(scanline, machine().primary_screen->visible_area().max_x + 1), TID_IRQ2_GEN); + next_scanline = scanline + 1; + break; + + // IRQ2 turns off at the start of scanlines 66, 130, 194 + case 66: + case 130: + case 194: + m_irq2_state = 0; + next_scanline = (scanline == 194) ? 223 : (scanline + 63); + break; + + // VBLANK triggers on scanline 223 + case 223: + m_vblank_irq_state = 1; + next_scanline = scanline + 1; + m_subcpu->set_input_line(4, ASSERT_LINE); + break; + + // VBLANK turns off at the start of scanline 224 + case 224: + m_vblank_irq_state = 0; + next_scanline = 65; + m_subcpu->set_input_line(4, CLEAR_LINE); + break; + } + + // update IRQs on the main CPU + update_main_irqs(); + + // come back at the next targeted scanline + timer.adjust(machine().primary_screen->time_until_pos(next_scanline), next_scanline); + break; + } + } +} + + + +//************************************************************************** +// BASIC MACHINE SETUP +//************************************************************************** + +void segaorun_state::m68k_reset_callback(device_t *device) +{ + segaorun_state *state = device->machine().driver_data(); + state->m_subcpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); +} + + +void segaorun_state::machine_start() +{ + m_scanline_timer = timer_alloc(TID_SCANLINE); +} + + +void segaorun_state::machine_reset() +{ + // reset misc components + if (m_custom_map != NULL) + m_mapper->configure_explicit(m_custom_map); + segaic16_tilemap_reset(machine(), 0); + + // hook the RESET line, which resets CPU #1 + m68k_set_reset_callback(m_maincpu, m68k_reset_callback); + + // start timers to track interrupts + m_scanline_timer->adjust(machine().primary_screen->time_until_pos(223), 223); +} + + + +//************************************************************************** +// 8255 HANDLERS +//************************************************************************** + +READ8_MEMBER( segaorun_state::unknown_porta_r ) +{ + logerror("%06X:read from 8255 port A\n", cpu_get_pc(m_maincpu)); + return 0; +} + +READ8_MEMBER( segaorun_state::unknown_portb_r ) +{ + logerror("%06X:read from 8255 port B\n", cpu_get_pc(m_maincpu)); + return 0; +} + +READ8_MEMBER( segaorun_state::unknown_portc_r ) +{ + logerror("%06X:read from 8255 port C\n", cpu_get_pc(m_maincpu)); + return 0; +} + + +WRITE8_MEMBER( segaorun_state::unknown_porta_w ) +{ + logerror("%06X:write %02X to 8255 port A\n", cpu_get_pc(m_maincpu), data); +} + +WRITE8_MEMBER( segaorun_state::unknown_portb_w ) +{ + logerror("%06X:write %02X to 8255 port B\n", cpu_get_pc(m_maincpu), data); +} + +WRITE8_MEMBER( segaorun_state::video_control_w ) +{ + // Output port: + // D7: SG1 -- connects to sprite chip + // D6: SG0 -- connects to mixing + // D5: Screen display (1= blanked, 0= displayed) + // D4-D2: (ADC2-0) + // D1: (CONT) - affects sprite hardware + // D0: Sound section reset (1= normal operation, 0= reset) + + segaic16_set_display_enable(machine(), data & 0x20); + m_adc_select = (data >> 2) & 7; + m_soundcpu->set_input_line(INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE); +} + + + +//************************************************************************** +// I/O SPACE +//************************************************************************** + +READ16_MEMBER( segaorun_state::misc_io_r ) +{ + if (!m_custom_io_r.isnull()) + return m_custom_io_r(space, offset, mem_mask); + logerror("%06X:misc_io_r - unknown read access to address %04X\n", cpu_get_pc(&space.device()), offset * 2); + return segaic16_open_bus_r(&space, 0, mem_mask); +} + + +WRITE16_MEMBER( segaorun_state::nop_w ) +{ +} + + +WRITE16_MEMBER( segaorun_state::misc_io_w ) +{ + if (!m_custom_io_w.isnull()) + { + m_custom_io_w(space, offset, data, mem_mask); return; } - logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space->device()), offset * 2, data, mem_mask); + logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space.device()), offset * 2, data, mem_mask); } -static READ16_HANDLER( outrun_custom_io_r ) +READ16_MEMBER( segaorun_state::outrun_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); - offset &= 0x7f/2; switch (offset & 0x70/2) { case 0x00/2: - return ppi8255_r(state->m_ppi8255, offset & 3); + return ppi8255_r(m_ppi8255, offset & 3); case 0x10/2: { static const char *const sysports[] = { "SERVICE", "UNKNOWN", "COINAGE", "DSW" }; - return space->machine().root_device().ioport(sysports[offset & 3])->read(); + return ioport(sysports[offset & 3])->read(); } case 0x30/2: { static const char *const ports[] = { "ADC0", "ADC1", "ADC2", "ADC3", "ADC4", "ADC5", "ADC6", "ADC7" }; - return state->ioport(ports[state->m_adc_select])->read_safe(0x0010); + return ioport(ports[m_adc_select])->read_safe(0x0010); } case 0x60/2: - return state->watchdog_reset_r(*space,0); + return watchdog_reset_r(space, 0); } - logerror("%06X:outrun_custom_io_r - unknown read access to address %04X\n", cpu_get_pc(&space->device()), offset * 2); - return segaic16_open_bus_r(space, 0, mem_mask); + logerror("%06X:outrun_custom_io_r - unknown read access to address %04X\n", cpu_get_pc(&space.device()), offset * 2); + return segaic16_open_bus_r(&space, 0, mem_mask); } -static WRITE16_HANDLER( outrun_custom_io_w ) +WRITE16_MEMBER( segaorun_state::outrun_custom_io_w ) { - segas1x_state *state = space->machine().driver_data(); - offset &= 0x7f/2; switch (offset & 0x70/2) { case 0x00/2: if (ACCESSING_BITS_0_7) - ppi8255_w(state->m_ppi8255, offset & 3, data); + ppi8255_w(m_ppi8255, offset & 3, data); return; case 0x20/2: if (ACCESSING_BITS_0_7) { - /* Output port: - D7: /MUTE - D6-D0: unknown - */ - space->machine().sound().system_enable(data & 0x80); + // Output port: + // D7: /MUTE + // D6-D0: unknown + + machine().sound().system_enable(data & 0x80); } return; case 0x30/2: - /* ADC trigger */ + // ADC trigger return; case 0x60/2: - state->watchdog_reset_w(*space,0,0); + watchdog_reset_w(space,0,0); return; case 0x70/2: - segaic16_sprites_draw_0_w(space, offset, data, mem_mask); + segaic16_sprites_draw_0_w(&space, offset, data, mem_mask); return; } - logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space->device()), offset * 2, data, mem_mask); + logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space.device()), offset * 2, data, mem_mask); } -static READ16_HANDLER( shangon_custom_io_r ) +READ16_MEMBER( segaorun_state::shangon_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); - offset &= 0x303f/2; switch (offset) { @@ -733,113 +714,111 @@ static READ16_HANDLER( shangon_custom_io_r ) case 0x1006/2: { static const char *const sysports[] = { "SERVICE", "UNKNOWN", "COINAGE", "DSW" }; - return space->machine().root_device().ioport(sysports[offset & 3])->read(); + return ioport(sysports[offset & 3])->read(); } case 0x3020/2: { static const char *const ports[] = { "ADC0", "ADC1", "ADC2", "ADC3" }; - return state->ioport(ports[state->m_adc_select])->read_safe(0x0010); + return ioport(ports[m_adc_select])->read_safe(0x0010); } } - logerror("%06X:misc_io_r - unknown read access to address %04X\n", cpu_get_pc(&space->device()), offset * 2); - return segaic16_open_bus_r(space,0,mem_mask); + logerror("%06X:misc_io_r - unknown read access to address %04X\n", cpu_get_pc(&space.device()), offset * 2); + return segaic16_open_bus_r(&space,0,mem_mask); } -static WRITE16_HANDLER( shangon_custom_io_w ) +WRITE16_MEMBER( segaorun_state::shangon_custom_io_w ) { - segas1x_state *state = space->machine().driver_data(); - offset &= 0x303f/2; switch (offset) { case 0x0000/2: - /* Output port: - D7-D6: (ADC1-0) - D5: Screen display - */ - state->m_adc_select = (data >> 6) & 3; - segaic16_set_display_enable(space->machine(), (data >> 5) & 1); + // Output port: + // D7-D6: (ADC1-0) + // D5: Screen display + + m_adc_select = (data >> 6) & 3; + segaic16_set_display_enable(machine(), (data >> 5) & 1); return; case 0x0020/2: - /* Output port: - D0: Sound section reset (1= normal operation, 0= reset) - */ - device_set_input_line(state->m_soundcpu, INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + // Output port: + // D0: Sound section reset (1= normal operation, 0= reset) + + m_soundcpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); return; case 0x3000/2: - state->watchdog_reset_w(*space, 0, 0); + watchdog_reset_w(space, 0, 0); return; case 0x3020/2: - /* ADC trigger */ + // ADC trigger return; } - logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space->device()), offset * 2, data, mem_mask); + logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space.device()), offset * 2, data, mem_mask); } -/************************************* - * - * Main CPU memory handlers - * - *************************************/ +//************************************************************************** +// MAIN CPU MEMORY MAP +//************************************************************************** -static ADDRESS_MAP_START( outrun_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( outrun_map, AS_PROGRAM, 16, segaorun_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0xffffff) AM_READWRITE_LEGACY(segaic16_memory_mapper_lsb_r, segaic16_memory_mapper_lsb_w) + AM_RANGE(0x000000, 0xffffff) AM_DEVREADWRITE8("mapper", sega_315_5195_mapper_device, read, write, 0x00ff) + + // these get overwritten by the memory mapper above, but we put them here + // so they are properly allocated and tracked for saving + AM_RANGE(0x100000, 0x100fff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0x200000, 0x201fff) AM_RAM AM_SHARE("paletteram") + AM_RANGE(0x300000, 0x30ffff) AM_RAM AM_SHARE("tileram") + AM_RANGE(0x400000, 0x400fff) AM_RAM AM_SHARE("textram") + AM_RANGE(0x500000, 0x507fff) AM_RAM AM_SHARE("workram") ADDRESS_MAP_END -/************************************* - * - * Second CPU memory handlers - * - *************************************/ +//************************************************************************** +// SECOND CPU MEMORY MAP +//************************************************************************** -static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 16, segaorun_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xfffff) - AM_RANGE(0x000000, 0x05ffff) AM_ROM AM_BASE_LEGACY(&cpu1rom) - AM_RANGE(0x060000, 0x067fff) AM_MIRROR(0x018000) AM_RAM AM_BASE_LEGACY(&cpu1ram) - AM_RANGE(0x080000, 0x080fff) AM_MIRROR(0x00f000) AM_RAM AM_BASE_LEGACY(&segaic16_roadram_0) + AM_RANGE(0x000000, 0x05ffff) AM_ROM AM_SHARE("cpu1rom") + AM_RANGE(0x060000, 0x067fff) AM_MIRROR(0x018000) AM_RAM AM_SHARE("cpu1ram") + AM_RANGE(0x080000, 0x080fff) AM_MIRROR(0x00f000) AM_RAM AM_SHARE("roadram") AM_RANGE(0x090000, 0x09ffff) AM_READWRITE_LEGACY(segaic16_road_control_0_r, segaic16_road_control_0_w) ADDRESS_MAP_END -/************************************* - * - * Sound CPU memory handlers - * - *************************************/ +//************************************************************************** +// SOUND CPU MEMORY MAP +//************************************************************************** -static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segaorun_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf0ff) AM_MIRROR(0x0700) AM_DEVREADWRITE_LEGACY("pcm", sega_pcm_r, sega_pcm_w) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segaorun_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) - AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_READ_LEGACY(sound_data_r) + AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_READ(sound_data_r) ADDRESS_MAP_END -/************************************* - * - * Generic port definitions - * - *************************************/ +//************************************************************************** +// GENERIC PORT DEFINITIONS +//************************************************************************** static INPUT_PORTS_START( outrun_generic ) PORT_START("SERVICE") @@ -870,29 +849,27 @@ static INPUT_PORTS_START( outrun_generic ) PORT_DIPSETTING( 0x30, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7,8") /* Number of Enemy Cars */ + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7,8") // Number of Enemy Cars PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_START("ADC0") /* steering */ + PORT_START("ADC0") // steering PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x20,0xe0) PORT_SENSITIVITY(100) PORT_KEYDELTA(4) - PORT_START("ADC1") /* gas pedal */ + PORT_START("ADC1") // gas pedal PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) - PORT_START("ADC2") /* brake */ + PORT_START("ADC2") // brake PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) INPUT_PORTS_END -/************************************* - * - * Game-specific port definitions - * - *************************************/ +//************************************************************************** +// GAME-SPECIFIC PORT DEFINITIONS +//************************************************************************** static INPUT_PORTS_START( outrun ) PORT_INCLUDE( outrun_generic ) @@ -1001,11 +978,11 @@ static INPUT_PORTS_START( shangon ) PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:2,3") /* Other Bike's Appearance Frequency */ - PORT_DIPSETTING( 0x04, DEF_STR( Easy ) ) /* 30% Less then Normal */ + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:2,3") // Other Bike's Appearance Frequency + PORT_DIPSETTING( 0x04, DEF_STR( Easy ) ) // 30% Less then Normal PORT_DIPSETTING( 0x06, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) /* 40% More then Normal */ - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) /* 80% More then Normal */ + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) // 40% More then Normal + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // 80% More then Normal PORT_DIPNAME( 0x18, 0x18, "Time Adj." ) PORT_DIPLOCATION("SWB:4,5") PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) @@ -1015,17 +992,15 @@ static INPUT_PORTS_START( shangon ) PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SWB:7" ) PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SWB:8" ) - PORT_MODIFY("ADC0") /* steering */ + PORT_MODIFY("ADC0") // steering PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x20,0xe0) PORT_SENSITIVITY(100) PORT_KEYDELTA(4) PORT_REVERSE INPUT_PORTS_END -/************************************* - * - * Sound definitions - * - *************************************/ +//************************************************************************** +// SOUND DEFINITIONS +//************************************************************************** static const sega_pcm_interface segapcm_interface = { @@ -1034,11 +1009,9 @@ static const sega_pcm_interface segapcm_interface = -/************************************* - * - * Graphics definitions - * - *************************************/ +//************************************************************************** +// GRAPHICS DEFINITIONS +//************************************************************************** static const gfx_layout charlayout = { @@ -1058,43 +1031,37 @@ GFXDECODE_END -/************************************* - * - * Generic machine drivers - * - *************************************/ +//************************************************************************** +// GENERIC MACHINE DRIVERS +//************************************************************************** -static MACHINE_CONFIG_START( outrun_base, segas1x_state ) +static MACHINE_CONFIG_START( outrun_base, segaorun_state ) - /* basic machine hardware */ + // basic machine hardware MCFG_CPU_ADD("maincpu", M68000, MASTER_CLOCK/4) MCFG_CPU_PROGRAM_MAP(outrun_map) - MCFG_CPU_ADD("sub", M68000, MASTER_CLOCK/4) + MCFG_CPU_ADD("subcpu", M68000, MASTER_CLOCK/4) MCFG_CPU_PROGRAM_MAP(sub_map) MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK/4) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_IO_MAP(sound_portmap) - MCFG_MACHINE_RESET(outrun) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_TIMER_ADD("int_timer", scanline_callback) - MCFG_PPI8255_ADD( "ppi8255", single_ppi_intf ) + MCFG_SEGA_315_5195_MAPPER_ADD("mapper", "maincpu", segaorun_state, memory_mapper, mapper_sound_r, mapper_sound_w) - /* video hardware */ + // video hardware MCFG_GFXDECODE(segaorun) MCFG_PALETTE_LENGTH(4096*3) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_25MHz/4, 400, 0, 320, 262, 0, 224) - MCFG_SCREEN_UPDATE_STATIC(outrun) + MCFG_SCREEN_UPDATE_DRIVER(segaorun_state, screen_update_outrun) - MCFG_VIDEO_START(outrun) - - /* sound hardware */ + // sound hardware MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2151, SOUND_CLOCK/4) @@ -1117,26 +1084,32 @@ static MACHINE_CONFIG_DERIVED( outrun, outrun_base ) MCFG_SEGA16SP_ADD_OUTRUN("segaspr1") MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( outrun_fd1094, outrun ) + MCFG_CPU_REPLACE("maincpu", FD1094, MASTER_CLOCK/4) + MCFG_CPU_PROGRAM_MAP(outrun_map) +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( shangon, outrun_base ) MCFG_NVRAM_ADD_0FILL("nvram") MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_25MHz/4, 400, 0, 321, 262, 0, 224) - MCFG_SCREEN_UPDATE_STATIC(shangon) - - MCFG_VIDEO_START(shangon) + MCFG_SCREEN_UPDATE_DRIVER(segaorun_state, screen_update_shangon) MCFG_SEGA16SP_ADD_16B("segaspr1") MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( shangon_fd1089b, shangon ) + MCFG_CPU_REPLACE("maincpu", FD1089B, MASTER_CLOCK/4) + MCFG_CPU_PROGRAM_MAP(outrun_map) +MACHINE_CONFIG_END -/************************************* - * - * ROM definition(s) - * - *************************************/ + +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** /************************************************************************************************************************** ************************************************************************************************************************** @@ -1155,19 +1128,19 @@ Note: Manuals for Upright Standard and Sitdown Standard list the same Main & Sub */ ROM_START( outrun ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10380b.133", 0x000000, 0x10000, CRC(1f6cadad) SHA1(31e870f307f44eb4f293b607123b623beee2bc3c) ) ROM_LOAD16_BYTE( "epr-10382b.118", 0x000001, 0x10000, CRC(c4c3fa1a) SHA1(69236cf9f27691dee290c79db1fc9b5e73ea77d7) ) - ROM_LOAD16_BYTE( "epr-10381b.132", 0x020000, 0x10000, CRC(be8c412b) SHA1(bf3ff05bbf81bdd44567f3b9bb4919ed4a499624) ) /* Same as the "A" version belown ??? */ + ROM_LOAD16_BYTE( "epr-10381b.132", 0x020000, 0x10000, CRC(be8c412b) SHA1(bf3ff05bbf81bdd44567f3b9bb4919ed4a499624) ) // Same as the "A" version belown ??? ROM_LOAD16_BYTE( "epr-10383b.117", 0x020001, 0x10000, CRC(10a2014a) SHA1(1970895145ad8b5735f66ed8c837d9d453ce9b23) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10327a.76", 0x00000, 0x10000, CRC(e28a5baf) SHA1(f715bde96c73ed47035acf5a41630fdeb41bb2f9) ) ROM_LOAD16_BYTE( "epr-10329a.58", 0x00001, 0x10000, CRC(da131c81) SHA1(57d5219bd0e2fd886217e37e8773fd76be9b40eb) ) ROM_LOAD16_BYTE( "epr-10328a.75", 0x20000, 0x10000, CRC(d5ec5e5d) SHA1(a4e3cfca4d803e72bc4fcf91ab00e21bf3f8959f) ) ROM_LOAD16_BYTE( "epr-10330a.57", 0x20001, 0x10000, CRC(ba9ec82a) SHA1(2136c9572e26b7ae6de402c0cd53174407cc6018) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-10268.99", 0x00000, 0x08000, CRC(95344b04) SHA1(b3480714b11fc49b449660431f85d4ba92f799ba) ) ROM_LOAD( "opr-10232.102", 0x08000, 0x08000, CRC(776ba1eb) SHA1(e3477961d19e694c97643066534a1f720e0c4327) ) ROM_LOAD( "opr-10267.100", 0x10000, 0x08000, CRC(a85bb823) SHA1(a7e0143dee5a47e679fd5155e58e717813912692) ) @@ -1175,8 +1148,8 @@ ROM_START( outrun ) ROM_LOAD( "opr-10266.101", 0x20000, 0x08000, CRC(9f6f1a74) SHA1(09164e858ebeedcff4d389524ddf89e7c216dcae) ) ROM_LOAD( "opr-10230.104", 0x28000, 0x08000, CRC(686f5e50) SHA1(03697b892f911177968aa40de6c5f464eb0258e7) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ - /* VIDEO BD 837-6064-02 uses mask roms four times the size of those used on VIDEO BD 837-6064-01, same data */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites + // VIDEO BD 837-6064-02 uses mask roms four times the size of those used on VIDEO BD 837-6064-01, same data ROM_LOAD32_BYTE( "mpr-10371.9", 0x00000, 0x20000, CRC(7cc86208) SHA1(21320f945f7c8e990c97c9b1232a0f4b6bd00f8f) ) ROM_LOAD32_BYTE( "mpr-10373.10", 0x00001, 0x20000, CRC(b0d26ac9) SHA1(3a9ce8547cd43b7b04abddf9a9ab5634e0bbfaba) ) ROM_LOAD32_BYTE( "mpr-10375.11", 0x00002, 0x20000, CRC(59b60bd7) SHA1(e5d8c67e020608edd24ba87b7687b2ac2483ee7f) ) @@ -1186,14 +1159,14 @@ ROM_START( outrun ) ROM_LOAD32_BYTE( "mpr-10376.15", 0x80002, 0x20000, CRC(f3b8f318) SHA1(a5f2532613f33a64441e0f75443c10ba78dccc6e) ) ROM_LOAD32_BYTE( "mpr-10378.16", 0x80003, 0x20000, CRC(a1062984) SHA1(4399030a155caf71f2dec7f75c4b65531ab53576) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) ROM_LOAD( "opr-10186.47", 0x0000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) ROM_LOAD( "opr-10185.11", 0x8000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10187.88", 0x00000, 0x8000, CRC(a10abaa9) SHA1(01c8a819587a66d2ee4d255656e36fa0904377b0) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-10193.66", 0x00000, 0x08000, CRC(bcd10dde) SHA1(417ce1d7242884640c5b14f4db8ee57cde7d085d) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "opr-10192.67", 0x10000, 0x08000, CRC(770f1270) SHA1(686bdf44d45c1d6002622f6658f037735382f3e0) ) @@ -1216,19 +1189,19 @@ ROM_END VIDEO BD 837-6064-02 */ ROM_START( outrunra ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10380a.133", 0x000000, 0x10000, CRC(434fadbc) SHA1(83c861d331e69ef4f2452c313ae4b5ea9d8b7948) ) ROM_LOAD16_BYTE( "epr-10382a.118", 0x000001, 0x10000, CRC(1ddcc04e) SHA1(945d207d8d602d7fdb6d25f6b93c9c0b995e8d5a) ) - ROM_LOAD16_BYTE( "epr-10381a.132", 0x020000, 0x10000, CRC(be8c412b) SHA1(bf3ff05bbf81bdd44567f3b9bb4919ed4a499624) ) /* Same as the original version below, but labeled as rev A */ - ROM_LOAD16_BYTE( "epr-10383a.117", 0x020001, 0x10000, CRC(dcc586e7) SHA1(d6e1de6b562359574d94b88ce6101646c506e701) ) /* Same as the original version below, but labeled as rev A */ + ROM_LOAD16_BYTE( "epr-10381a.132", 0x020000, 0x10000, CRC(be8c412b) SHA1(bf3ff05bbf81bdd44567f3b9bb4919ed4a499624) ) // Same as the original version below, but labeled as rev A + ROM_LOAD16_BYTE( "epr-10383a.117", 0x020001, 0x10000, CRC(dcc586e7) SHA1(d6e1de6b562359574d94b88ce6101646c506e701) ) // Same as the original version below, but labeled as rev A - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10327a.76", 0x00000, 0x10000, CRC(e28a5baf) SHA1(f715bde96c73ed47035acf5a41630fdeb41bb2f9) ) ROM_LOAD16_BYTE( "epr-10329a.58", 0x00001, 0x10000, CRC(da131c81) SHA1(57d5219bd0e2fd886217e37e8773fd76be9b40eb) ) ROM_LOAD16_BYTE( "epr-10328a.75", 0x20000, 0x10000, CRC(d5ec5e5d) SHA1(a4e3cfca4d803e72bc4fcf91ab00e21bf3f8959f) ) ROM_LOAD16_BYTE( "epr-10330a.57", 0x20001, 0x10000, CRC(ba9ec82a) SHA1(2136c9572e26b7ae6de402c0cd53174407cc6018) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-10268.99", 0x00000, 0x08000, CRC(95344b04) SHA1(b3480714b11fc49b449660431f85d4ba92f799ba) ) ROM_LOAD( "opr-10232.102", 0x08000, 0x08000, CRC(776ba1eb) SHA1(e3477961d19e694c97643066534a1f720e0c4327) ) ROM_LOAD( "opr-10267.100", 0x10000, 0x08000, CRC(a85bb823) SHA1(a7e0143dee5a47e679fd5155e58e717813912692) ) @@ -1236,8 +1209,8 @@ ROM_START( outrunra ) ROM_LOAD( "opr-10266.101", 0x20000, 0x08000, CRC(9f6f1a74) SHA1(09164e858ebeedcff4d389524ddf89e7c216dcae) ) ROM_LOAD( "opr-10230.104", 0x28000, 0x08000, CRC(686f5e50) SHA1(03697b892f911177968aa40de6c5f464eb0258e7) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ - /* VIDEO BD 837-6064-02 uses mask roms four times the size of those used on VIDEO BD 837-6064-01, same data */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites + // VIDEO BD 837-6064-02 uses mask roms four times the size of those used on VIDEO BD 837-6064-01, same data ROM_LOAD32_BYTE( "mpr-10371.9", 0x00000, 0x20000, CRC(7cc86208) SHA1(21320f945f7c8e990c97c9b1232a0f4b6bd00f8f) ) ROM_LOAD32_BYTE( "mpr-10373.10", 0x00001, 0x20000, CRC(b0d26ac9) SHA1(3a9ce8547cd43b7b04abddf9a9ab5634e0bbfaba) ) ROM_LOAD32_BYTE( "mpr-10375.11", 0x00002, 0x20000, CRC(59b60bd7) SHA1(e5d8c67e020608edd24ba87b7687b2ac2483ee7f) ) @@ -1247,14 +1220,14 @@ ROM_START( outrunra ) ROM_LOAD32_BYTE( "mpr-10376.15", 0x80002, 0x20000, CRC(f3b8f318) SHA1(a5f2532613f33a64441e0f75443c10ba78dccc6e) ) ROM_LOAD32_BYTE( "mpr-10378.16", 0x80003, 0x20000, CRC(a1062984) SHA1(4399030a155caf71f2dec7f75c4b65531ab53576) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) ROM_LOAD( "opr-10186.47", 0x0000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) ROM_LOAD( "opr-10185.11", 0x8000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10187.88", 0x00000, 0x8000, CRC(a10abaa9) SHA1(01c8a819587a66d2ee4d255656e36fa0904377b0) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-10193.66", 0x00000, 0x08000, CRC(bcd10dde) SHA1(417ce1d7242884640c5b14f4db8ee57cde7d085d) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "opr-10192.67", 0x10000, 0x08000, CRC(770f1270) SHA1(686bdf44d45c1d6002622f6658f037735382f3e0) ) @@ -1278,19 +1251,19 @@ ROM_END */ ROM_START( outruno ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10380.133", 0x000000, 0x10000, CRC(e339e87a) SHA1(ac319cdafb156adcf6be29ae1b82d46d3048022e) ) ROM_LOAD16_BYTE( "epr-10382.118", 0x000001, 0x10000, CRC(65248dd5) SHA1(4b75526df71bba0d588f47a65790a3d21b236302) ) ROM_LOAD16_BYTE( "epr-10381.132", 0x020000, 0x10000, CRC(be8c412b) SHA1(bf3ff05bbf81bdd44567f3b9bb4919ed4a499624) ) ROM_LOAD16_BYTE( "epr-10383.117", 0x020001, 0x10000, CRC(dcc586e7) SHA1(d6e1de6b562359574d94b88ce6101646c506e701) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10327.76", 0x00000, 0x10000, CRC(da99d855) SHA1(77d18092e3c10a400e62eeba562f161398fe37a7) ) ROM_LOAD16_BYTE( "epr-10329.58", 0x00001, 0x10000, CRC(fe0fa5e2) SHA1(e63fe5f7950af35131539836f18fa056767c2c80) ) ROM_LOAD16_BYTE( "epr-10328.75", 0x20000, 0x10000, CRC(3c0e9a7f) SHA1(0e182fdac70423a85dc2b996c70bcb3954e75e10) ) ROM_LOAD16_BYTE( "epr-10330.57", 0x20001, 0x10000, CRC(59786e99) SHA1(834bf361ca67cee3793c324bb26cf0ec82a72068) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-10268.99", 0x00000, 0x08000, CRC(95344b04) SHA1(b3480714b11fc49b449660431f85d4ba92f799ba) ) ROM_LOAD( "opr-10232.102", 0x08000, 0x08000, CRC(776ba1eb) SHA1(e3477961d19e694c97643066534a1f720e0c4327) ) ROM_LOAD( "opr-10267.100", 0x10000, 0x08000, CRC(a85bb823) SHA1(a7e0143dee5a47e679fd5155e58e717813912692) ) @@ -1298,8 +1271,8 @@ ROM_START( outruno ) ROM_LOAD( "opr-10266.101", 0x20000, 0x08000, CRC(9f6f1a74) SHA1(09164e858ebeedcff4d389524ddf89e7c216dcae) ) ROM_LOAD( "opr-10230.104", 0x28000, 0x08000, CRC(686f5e50) SHA1(03697b892f911177968aa40de6c5f464eb0258e7) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ - /* VIDEO BD 837-6064-01 uses eproms a fourth of the size of those used on VIDEO BD 837-6064-02, same data */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites + // VIDEO BD 837-6064-01 uses eproms a fourth of the size of those used on VIDEO BD 837-6064-02, same data ROM_LOAD32_BYTE( "epr-10194.26", 0x00000, 0x08000, CRC(f0eda3bd) SHA1(173e10a10372d42da81e6eb48c3e23a117638c0c) ) ROM_LOAD32_BYTE( "epr-10203.38", 0x00001, 0x08000, CRC(8445a622) SHA1(1187dee7db09a42446fc75872d49936310141eb8) ) ROM_LOAD32_BYTE( "epr-10212.52", 0x00002, 0x08000, CRC(dee7e731) SHA1(f09d18f8d8405025b87dd01488ad2098e28410b0) ) @@ -1333,14 +1306,14 @@ ROM_START( outruno ) ROM_LOAD32_BYTE( "epr-10219.59", 0xe0002, 0x08000, CRC(e73b9224) SHA1(1904a71a0c18ab2a3a5929e72b1c215dbb0fa213) ) ROM_LOAD32_BYTE( "epr-10228.73", 0xe0003, 0x08000, CRC(25803978) SHA1(1a18922aeb516e8deb026d52e3cdcc4e69385af5) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) ROM_LOAD( "opr-10186.47", 0x0000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) ROM_LOAD( "opr-10185.11", 0x8000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10187.88", 0x00000, 0x8000, CRC(a10abaa9) SHA1(01c8a819587a66d2ee4d255656e36fa0904377b0) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-10193.66", 0x00000, 0x08000, CRC(bcd10dde) SHA1(417ce1d7242884640c5b14f4db8ee57cde7d085d) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "opr-10192.67", 0x10000, 0x08000, CRC(770f1270) SHA1(686bdf44d45c1d6002622f6658f037735382f3e0) ) @@ -1364,8 +1337,8 @@ ROM_END */ ROM_START( outrundx ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ - /* Earlier version of CPU BD?? uses half size eproms compared to the above sets */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code + // Earlier version of CPU BD?? uses half size eproms compared to the above sets ROM_LOAD16_BYTE( "epr-10183.115", 0x000000, 0x8000, CRC(3d992396) SHA1(8cef43799b71cfd36d3fea140afff7fe0bafcfc1) ) ROM_LOAD16_BYTE( "epr-10261.130", 0x000001, 0x8000, CRC(1d034847) SHA1(664b24c13f7885403328906682213e38c1ad994e) ) ROM_LOAD16_BYTE( "epr-10184.116", 0x010000, 0x8000, CRC(1a73dc46) SHA1(70f31619e80eb3d70747e7006e135c8bc0a31675) ) @@ -1375,7 +1348,7 @@ ROM_START( outrundx ) ROM_LOAD16_BYTE( "epr-10259.118", 0x030000, 0x8000, CRC(95100b1a) SHA1(d2a5eb97623321b6c943bc435de26bf5d39ea312) ) ROM_LOAD16_BYTE( "epr-10264.133", 0x030001, 0x8000, CRC(cc94b102) SHA1(29dc7e2a8509d0b5d30e2fb9404e0517b97f64e8) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10173.66", 0x000000, 0x8000, CRC(6c2775c0) SHA1(2dd3a4e7f7b8808da74fbd53423a83775afff5d5) ) ROM_LOAD16_BYTE( "epr-10178.86", 0x000001, 0x8000, CRC(6d36be05) SHA1(02527701451bbdfa14280ef4db6f4d540e6ee470) ) ROM_LOAD16_BYTE( "epr-10174.67", 0x010000, 0x8000, CRC(aae7efad) SHA1(bbc68daafc8bb61d0b065baa3a3583e95de4d9ad) ) @@ -1385,7 +1358,7 @@ ROM_START( outrundx ) ROM_LOAD16_BYTE( "epr-10176.69", 0x030000, 0x8000, CRC(a7811f90) SHA1(a2ac49f0947ddddbbdaa90ebdefd232fdbf27c35) ) ROM_LOAD16_BYTE( "epr-10181.89", 0x030001, 0x8000, CRC(e009a04d) SHA1(f3253a0feb6acd08238e025e7ab8b5cb175d1c67) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-10268.99", 0x00000, 0x08000, CRC(95344b04) SHA1(b3480714b11fc49b449660431f85d4ba92f799ba) ) ROM_LOAD( "opr-10232.102", 0x08000, 0x08000, CRC(776ba1eb) SHA1(e3477961d19e694c97643066534a1f720e0c4327) ) ROM_LOAD( "opr-10267.100", 0x10000, 0x08000, CRC(a85bb823) SHA1(a7e0143dee5a47e679fd5155e58e717813912692) ) @@ -1393,8 +1366,8 @@ ROM_START( outrundx ) ROM_LOAD( "opr-10266.101", 0x20000, 0x08000, CRC(9f6f1a74) SHA1(09164e858ebeedcff4d389524ddf89e7c216dcae) ) ROM_LOAD( "opr-10230.104", 0x28000, 0x08000, CRC(686f5e50) SHA1(03697b892f911177968aa40de6c5f464eb0258e7) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ - /* VIDEO BD 837-6064-01 uses eproms a fourth of the size of those used on VIDEO BD 837-6064-02, same data */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites + // VIDEO BD 837-6064-01 uses eproms a fourth of the size of those used on VIDEO BD 837-6064-02, same data ROM_LOAD32_BYTE( "epr-10194.26", 0x00000, 0x08000, CRC(f0eda3bd) SHA1(173e10a10372d42da81e6eb48c3e23a117638c0c) ) ROM_LOAD32_BYTE( "epr-10203.38", 0x00001, 0x08000, CRC(8445a622) SHA1(1187dee7db09a42446fc75872d49936310141eb8) ) ROM_LOAD32_BYTE( "epr-10212.52", 0x00002, 0x08000, CRC(dee7e731) SHA1(f09d18f8d8405025b87dd01488ad2098e28410b0) ) @@ -1428,14 +1401,14 @@ ROM_START( outrundx ) ROM_LOAD32_BYTE( "epr-10219.59", 0xe0002, 0x08000, CRC(e73b9224) SHA1(1904a71a0c18ab2a3a5929e72b1c215dbb0fa213) ) ROM_LOAD32_BYTE( "epr-10228.73", 0xe0003, 0x08000, CRC(25803978) SHA1(1a18922aeb516e8deb026d52e3cdcc4e69385af5) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) ROM_LOAD( "opr-10186.47", 0x0000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) ROM_LOAD( "opr-10185.11", 0x8000, 0x8000, CRC(22794426) SHA1(a554d4b68e71861a0d0da4d031b3b811b246f082) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10187.88", 0x00000, 0x8000, CRC(a10abaa9) SHA1(01c8a819587a66d2ee4d255656e36fa0904377b0) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-10193.66", 0x00000, 0x08000, CRC(bcd10dde) SHA1(417ce1d7242884640c5b14f4db8ee57cde7d085d) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "opr-10192.67", 0x10000, 0x08000, CRC(770f1270) SHA1(686bdf44d45c1d6002622f6658f037735382f3e0) ) @@ -1483,24 +1456,24 @@ ROM_END Dumped by Corrado Tomaselli */ ROM_START( outrunb ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "a-10.bin", 0x000000, 0x10000, CRC(cddceea2) SHA1(34cb4ca61c941e96e585f3cd2aed79bdde67f8eb) ) ROM_LOAD16_BYTE( "a-9.bin", 0x000001, 0x10000, CRC(14e97a67) SHA1(a86ccb719ad695ed814bedfe02dbafa435fc65da) ) ROM_LOAD16_BYTE( "a-14.bin", 0x020000, 0x10000, CRC(3092d857) SHA1(8ebfeab9217b80a7983a4f8eb7bb7d3387d791b3) ) ROM_LOAD16_BYTE( "a-13.bin", 0x020001, 0x10000, CRC(30a1c496) SHA1(734c82930197e6e8cd2bea145aedda6b3c1145d0) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "a-8.bin", 0x00000, 0x10000, CRC(d7f5aae0) SHA1(0f9b693f078cdbbfeade5a373a94a20110d586ca) ) ROM_LOAD16_BYTE( "a-7.bin", 0x00001, 0x10000, CRC(88c2e78f) SHA1(198cab9133345e4529f7fb52c29974c9a1a84933) ) ROM_LOAD16_BYTE( "a-12.bin", 0x20000, 0x10000, CRC(d5ec5e5d) SHA1(a4e3cfca4d803e72bc4fcf91ab00e21bf3f8959f) ) ROM_LOAD16_BYTE( "a-11.bin", 0x20001, 0x10000, CRC(74c5fbec) SHA1(a44f1477d830fdb4d6c29351da94776843e5d3e1) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "a-15.bin", 0x00000, 0x10000, CRC(4c489133) SHA1(db97de9d84ca5916e69972ee19ccb4c15fa98bf9) ) ROM_LOAD( "a-17.bin", 0x10000, 0x10000, CRC(899c781d) SHA1(4f759c316a57a1e42838375525290425d25b53e1) ) ROM_LOAD( "a-16.bin", 0x20000, 0x10000, CRC(98dd4d15) SHA1(914ebcb330455ab35968b4add4d94be123a185a5) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD32_BYTE( "a-18.bin", 0x00000, 0x10000, CRC(77377e00) SHA1(4f376b05692f33d529f4c058dac989136c808ca1) ) ROM_LOAD32_BYTE( "a-20.bin", 0x00001, 0x10000, CRC(69ecc975) SHA1(3560e9a31fc71e263a6ff61224b8db2b17836075) ) ROM_LOAD32_BYTE( "a-22.bin", 0x00002, 0x10000, CRC(b6a8d0e2) SHA1(6184700dbe2c8c9c91f220e246501b7a865e4a05) ) @@ -1518,14 +1491,14 @@ ROM_START( outrunb ) ROM_LOAD32_BYTE( "a-31.bin", 0xc0002, 0x10000, CRC(ef7d06fe) SHA1(541b5ba45f4140e2cc29a9da2592b476d414af5d) ) ROM_LOAD32_BYTE( "a-33.bin", 0xc0003, 0x10000, CRC(1222af9f) SHA1(2364bd54cbe21dd688efff32e93bf154546c93d6) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx - correct order unknown (identical after bitswapping) */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx - correct order unknown (identical after bitswapping) ROM_LOAD( "a-2.bin", 0x0000, 0x8000, CRC(ed5bda9c) SHA1(f09a34caf1f9f6b119700a00635ab8fa8244362d) ) ROM_LOAD( "a-3.bin", 0x8000, 0x8000, CRC(666fe754) SHA1(606090db53d658d7b04dca4748014a411e12f259) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "a-1.bin", 0x00000, 0x8000, CRC(209bb53a) SHA1(4ec9ca7532354f05f06295a01c4fa4982268e1d5) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "a-6.bin", 0x00000, 0x08000, CRC(191f98f4) SHA1(a6ac6feeeeed8e08a19bfa280c5f5f8bc69833e2) ) ROM_CONTINUE( 0x10000, 0x08000 ) ROM_LOAD( "a-5.bin", 0x20000, 0x08000, CRC(374466d0) SHA1(c648bcb17ed0501bb3e94994716b4a7b81ec75e4) ) @@ -1545,7 +1518,7 @@ ROM_END VIDEO BD 837-6906-02 */ ROM_START( toutrun ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12513.133", 0x000000, 0x10000, CRC(ae8835a5) SHA1(09573964d4f42ac0f08be3682b73e3420df27c6d) ) ROM_LOAD16_BYTE( "epr-12512.118", 0x000001, 0x10000, CRC(f90372ad) SHA1(b42dd8c580421b4d7ffacf8d3baa7b9fc9e392ef) ) ROM_LOAD16_BYTE( "epr-12515.132", 0x020000, 0x10000, CRC(1f047df4) SHA1(c1c67847f1390e671c19f0b90c3cbfbc237d960b) ) @@ -1553,22 +1526,22 @@ ROM_START( toutrun ) ROM_LOAD16_BYTE( "epr-12293.131", 0x040000, 0x10000, CRC(f4321eea) SHA1(64334acc82c14bb58b7d51719f34fd81cfb9fc6b) ) ROM_LOAD16_BYTE( "epr-12292.116", 0x040001, 0x10000, CRC(51d98af0) SHA1(6e7115706bfafb687faa23d55d4a8c8e498a4df2) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0118.key", 0x0000, 0x2000, CRC(083d7d56) SHA1(3153e44479986859f60a26fe9264ecea07e6e469) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "opr-12295.76", 0x000000, 0x10000, CRC(d43a3a84) SHA1(362c98f62c205b6b40b7e8a4ba107745b547b984) ) ROM_LOAD16_BYTE( "opr-12294.58", 0x000001, 0x10000, CRC(27cdcfd3) SHA1(4fe57db95b109ab1bb1326789e06a3d3aac311cc) ) ROM_LOAD16_BYTE( "opr-12297.75", 0x020000, 0x10000, CRC(1d9b5677) SHA1(fb6e33acc43fbc7a8d7ac44045439ecdf794fdeb) ) ROM_LOAD16_BYTE( "opr-12296.57", 0x020001, 0x10000, CRC(0a513671) SHA1(4c13ca3a6f0aa9d06ed80798b466cca0c966a265) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12323.102", 0x00000, 0x10000, CRC(4de43a6f) SHA1(68909338e1f192ac2699c8a8d24c3f46502dd019) ) ROM_LOAD( "opr-12324.103", 0x10000, 0x10000, CRC(24607a55) SHA1(69033f2281cd42e88233c23d809b73607fe54853) ) ROM_LOAD( "opr-12325.104", 0x20000, 0x10000, CRC(1405137a) SHA1(367db88d36852e35c5e839f692be5ea8c8e072d2) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ - /* Video BD 837-6906-2, Mask Roms twice the size as EPR/OPR counterparts */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites + // Video BD 837-6906-2, Mask Roms twice the size as EPR/OPR counterparts ROM_LOAD32_BYTE( "mpr-12336.9", 0x00000, 0x20000, CRC(dda465c7) SHA1(83acc12a387b004986f084f25964c15a9f88a41a) ) ROM_LOAD32_BYTE( "mpr-12337.10", 0x00001, 0x20000, CRC(828233d1) SHA1(d73a200af4245d590e1fd3ac436723f99cc50452) ) ROM_LOAD32_BYTE( "mpr-12338.11", 0x00002, 0x20000, CRC(46b4b5f4) SHA1(afeb2e5ac6792edafe7328993fe8dfcd4bce1924) ) @@ -1578,14 +1551,14 @@ ROM_START( toutrun ) ROM_LOAD32_BYTE( "mpr-12366.15", 0x80002, 0x20000, CRC(385cb3ab) SHA1(fec6d80d488bfe26524fa3a48b195a45a073e481) ) ROM_LOAD32_BYTE( "mpr-12367.16", 0x80003, 0x20000, CRC(4930254a) SHA1(00f24be3bf02b143fa554f4d32e283bdac79af6a) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ - ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) /* Manual shows both as EPR-12298 */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) + ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) // Manual shows both as EPR-12298 ROM_LOAD( "epr-12298.11", 0x8000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12300.88", 0x00000, 0x10000, CRC(e8ff7011) SHA1(6eaf3aea507007ea31d507ed7825d905f4b8e7ab) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-12301.66", 0x00000, 0x10000, CRC(6e78ad15) SHA1(c31ddf434b459cd1a381d2a028beabddd4ed10d2) ) ROM_LOAD( "opr-12302.67", 0x10000, 0x10000, CRC(e72928af) SHA1(40e0b178958cfe97c097fe9d82b5de54bc27a29f) ) ROM_LOAD( "opr-12303.68", 0x20000, 0x10000, CRC(8384205c) SHA1(c1f9d52bc587eab5a97867198e9aa7c19e973429) ) @@ -1605,7 +1578,7 @@ ROM_END Must set Turbo Switch dipswitch (DSW-B 4 to OFF) to Use Turbo Shifter */ ROM_START( toutrun3 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12410.133", 0x000000, 0x10000, CRC(aa74f3e9) SHA1(2daf6b17317542063c0a40beea5b45c797192591) ) ROM_LOAD16_BYTE( "epr-12409.118", 0x000001, 0x10000, CRC(c11c8ef7) SHA1(4c1c5100d7fd728642d58e4bf45fba48695841e3) ) ROM_LOAD16_BYTE( "epr-12412.132", 0x020000, 0x10000, CRC(b0534647) SHA1(40f2260ff0d0ac662d118cc7280bb26006ee75e9) ) @@ -1613,21 +1586,21 @@ ROM_START( toutrun3 ) ROM_LOAD16_BYTE( "epr-12293.131", 0x040000, 0x10000, CRC(f4321eea) SHA1(64334acc82c14bb58b7d51719f34fd81cfb9fc6b) ) ROM_LOAD16_BYTE( "epr-12292.116", 0x040001, 0x10000, CRC(51d98af0) SHA1(6e7115706bfafb687faa23d55d4a8c8e498a4df2) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0107.key", 0x0000, 0x2000, CRC(33e632ae) SHA1(9fd8bd11d0a87ec4dfc4dc386012ab7992cb2bd7) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "opr-12295.76", 0x000000, 0x10000, CRC(d43a3a84) SHA1(362c98f62c205b6b40b7e8a4ba107745b547b984) ) ROM_LOAD16_BYTE( "opr-12294.58", 0x000001, 0x10000, CRC(27cdcfd3) SHA1(4fe57db95b109ab1bb1326789e06a3d3aac311cc) ) ROM_LOAD16_BYTE( "opr-12297.75", 0x020000, 0x10000, CRC(1d9b5677) SHA1(fb6e33acc43fbc7a8d7ac44045439ecdf794fdeb) ) ROM_LOAD16_BYTE( "opr-12296.57", 0x020001, 0x10000, CRC(0a513671) SHA1(4c13ca3a6f0aa9d06ed80798b466cca0c966a265) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12323.102", 0x00000, 0x10000, CRC(4de43a6f) SHA1(68909338e1f192ac2699c8a8d24c3f46502dd019) ) ROM_LOAD( "opr-12324.103", 0x10000, 0x10000, CRC(24607a55) SHA1(69033f2281cd42e88233c23d809b73607fe54853) ) ROM_LOAD( "opr-12325.104", 0x20000, 0x10000, CRC(1405137a) SHA1(367db88d36852e35c5e839f692be5ea8c8e072d2) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD32_BYTE( "opr-12307.9", 0x00000, 0x10000, CRC(437dcf09) SHA1(0022ee4d1c3698f77271e570cef98a8a1e5c5d6a) ) ROM_LOAD32_BYTE( "opr-12308.10", 0x00001, 0x10000, CRC(0de70cc2) SHA1(c03f8f8cda72daf64af2878bf254840ac6dd17eb) ) ROM_LOAD32_BYTE( "opr-12309.11", 0x00002, 0x10000, CRC(deb8c242) SHA1(c05d8ced4eafae52c4795fb1471cd66f5903d1aa) ) @@ -1645,14 +1618,14 @@ ROM_START( toutrun3 ) ROM_LOAD32_BYTE( "opr-12321.23", 0xc0002, 0x10000, CRC(830bacd4) SHA1(5a4816969437ee1edca5845006c0b8e9ba365491) ) ROM_LOAD32_BYTE( "opr-12322.24", 0xc0003, 0x10000, CRC(8b812492) SHA1(bf1f9e059c093c0991c7caf1b01c739ed54b8357) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ - ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) /* Manual shows both as EPR-12298 */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) + ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) // Manual shows both as EPR-12298 ROM_LOAD( "epr-12298.11", 0x8000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12300.88", 0x00000, 0x10000, CRC(e8ff7011) SHA1(6eaf3aea507007ea31d507ed7825d905f4b8e7ab) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-12301.66", 0x00000, 0x10000, CRC(6e78ad15) SHA1(c31ddf434b459cd1a381d2a028beabddd4ed10d2) ) ROM_LOAD( "opr-12302.67", 0x10000, 0x10000, CRC(e72928af) SHA1(40e0b178958cfe97c097fe9d82b5de54bc27a29f) ) ROM_LOAD( "opr-12303.68", 0x20000, 0x10000, CRC(8384205c) SHA1(c1f9d52bc587eab5a97867198e9aa7c19e973429) ) @@ -1672,7 +1645,7 @@ ROM_END Must set Turbo Switch dipswitch (DSW-B 4 to OFF) to Use Turbo Shifter */ ROM_START( toutrun2 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12397.133", 0x000000, 0x10000, CRC(e4b57d7d) SHA1(62be55356c82b38ebebcc87a5458e23300019339) ) ROM_LOAD16_BYTE( "epr-12396.118", 0x000001, 0x10000, CRC(5e7115cb) SHA1(02c9ec91d9afb424e5045671ab0b5499181728c9) ) ROM_LOAD16_BYTE( "epr-12399.132", 0x020000, 0x10000, CRC(62c77b1b) SHA1(004803c68cb1b3e414296ffbf50dc3b33b9ffb9a) ) @@ -1680,21 +1653,21 @@ ROM_START( toutrun2 ) ROM_LOAD16_BYTE( "epr-12293.131", 0x040000, 0x10000, CRC(f4321eea) SHA1(64334acc82c14bb58b7d51719f34fd81cfb9fc6b) ) ROM_LOAD16_BYTE( "epr-12292.116", 0x040001, 0x10000, CRC(51d98af0) SHA1(6e7115706bfafb687faa23d55d4a8c8e498a4df2) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ - ROM_LOAD( "317-unknown-toutrun2.key", 0x0000, 0x2000, NO_DUMP ) /* FD1094 number unknown and not dumped */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key + ROM_LOAD( "317-unknown-toutrun2.key", 0x0000, 0x2000, NO_DUMP ) // FD1094 number unknown and not dumped - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "opr-12295.76", 0x000000, 0x10000, CRC(d43a3a84) SHA1(362c98f62c205b6b40b7e8a4ba107745b547b984) ) ROM_LOAD16_BYTE( "opr-12294.58", 0x000001, 0x10000, CRC(27cdcfd3) SHA1(4fe57db95b109ab1bb1326789e06a3d3aac311cc) ) ROM_LOAD16_BYTE( "opr-12297.75", 0x020000, 0x10000, CRC(1d9b5677) SHA1(fb6e33acc43fbc7a8d7ac44045439ecdf794fdeb) ) ROM_LOAD16_BYTE( "opr-12296.57", 0x020001, 0x10000, CRC(0a513671) SHA1(4c13ca3a6f0aa9d06ed80798b466cca0c966a265) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12323.102", 0x00000, 0x10000, CRC(4de43a6f) SHA1(68909338e1f192ac2699c8a8d24c3f46502dd019) ) ROM_LOAD( "opr-12324.103", 0x10000, 0x10000, CRC(24607a55) SHA1(69033f2281cd42e88233c23d809b73607fe54853) ) ROM_LOAD( "opr-12325.104", 0x20000, 0x10000, CRC(1405137a) SHA1(367db88d36852e35c5e839f692be5ea8c8e072d2) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD32_BYTE( "opr-12307.9", 0x00000, 0x10000, CRC(437dcf09) SHA1(0022ee4d1c3698f77271e570cef98a8a1e5c5d6a) ) ROM_LOAD32_BYTE( "opr-12308.10", 0x00001, 0x10000, CRC(0de70cc2) SHA1(c03f8f8cda72daf64af2878bf254840ac6dd17eb) ) ROM_LOAD32_BYTE( "opr-12309.11", 0x00002, 0x10000, CRC(deb8c242) SHA1(c05d8ced4eafae52c4795fb1471cd66f5903d1aa) ) @@ -1712,14 +1685,14 @@ ROM_START( toutrun2 ) ROM_LOAD32_BYTE( "opr-12321.23", 0xc0002, 0x10000, CRC(830bacd4) SHA1(5a4816969437ee1edca5845006c0b8e9ba365491) ) ROM_LOAD32_BYTE( "opr-12322.24", 0xc0003, 0x10000, CRC(8b812492) SHA1(bf1f9e059c093c0991c7caf1b01c739ed54b8357) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ - ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) /* Manual shows both as EPR-12298 */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) + ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) // Manual shows both as EPR-12298 ROM_LOAD( "epr-12298.11", 0x8000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12300.88", 0x00000, 0x10000, CRC(e8ff7011) SHA1(6eaf3aea507007ea31d507ed7825d905f4b8e7ab) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-12301.66", 0x00000, 0x10000, CRC(6e78ad15) SHA1(c31ddf434b459cd1a381d2a028beabddd4ed10d2) ) ROM_LOAD( "opr-12302.67", 0x10000, 0x10000, CRC(e72928af) SHA1(40e0b178958cfe97c097fe9d82b5de54bc27a29f) ) ROM_LOAD( "opr-12303.68", 0x20000, 0x10000, CRC(8384205c) SHA1(c1f9d52bc587eab5a97867198e9aa7c19e973429) ) @@ -1733,7 +1706,7 @@ ROM_END CPU: FD1094 (317-0109) */ ROM_START( toutrun1 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12289.133", 0x000000, 0x10000, CRC(812fd035) SHA1(7bea9ba611333dfb86cfc2e2be8cff5f700b6f71) ) ROM_LOAD16_BYTE( "epr-12288.118", 0x000001, 0x10000, CRC(2f1151bb) SHA1(e91600d4f4e5d3d5a67cafb1ff34006f281434f1) ) ROM_LOAD16_BYTE( "epr-12291.132", 0x020000, 0x10000, CRC(8ca284d2) SHA1(93f71ec554ab000294aaa4de9ece0eecfcfe3c46) ) @@ -1741,21 +1714,21 @@ ROM_START( toutrun1 ) ROM_LOAD16_BYTE( "epr-12293.131", 0x040000, 0x10000, CRC(f4321eea) SHA1(64334acc82c14bb58b7d51719f34fd81cfb9fc6b) ) ROM_LOAD16_BYTE( "epr-12292.116", 0x040001, 0x10000, CRC(51d98af0) SHA1(6e7115706bfafb687faa23d55d4a8c8e498a4df2) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0109.key", 0x0000, 0x2000, CRC(e12a6e78) SHA1(358325490fc93bb979e9a9a296ce639d331e8b52) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "opr-12295.76", 0x000000, 0x10000, CRC(d43a3a84) SHA1(362c98f62c205b6b40b7e8a4ba107745b547b984) ) ROM_LOAD16_BYTE( "opr-12294.58", 0x000001, 0x10000, CRC(27cdcfd3) SHA1(4fe57db95b109ab1bb1326789e06a3d3aac311cc) ) ROM_LOAD16_BYTE( "opr-12297.75", 0x020000, 0x10000, CRC(1d9b5677) SHA1(fb6e33acc43fbc7a8d7ac44045439ecdf794fdeb) ) ROM_LOAD16_BYTE( "opr-12296.57", 0x020001, 0x10000, CRC(0a513671) SHA1(4c13ca3a6f0aa9d06ed80798b466cca0c966a265) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12323.102", 0x00000, 0x10000, CRC(4de43a6f) SHA1(68909338e1f192ac2699c8a8d24c3f46502dd019) ) ROM_LOAD( "opr-12324.103", 0x10000, 0x10000, CRC(24607a55) SHA1(69033f2281cd42e88233c23d809b73607fe54853) ) ROM_LOAD( "opr-12325.104", 0x20000, 0x10000, CRC(1405137a) SHA1(367db88d36852e35c5e839f692be5ea8c8e072d2) ) - ROM_REGION32_LE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION32_LE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD32_BYTE( "opr-12307.9", 0x00000, 0x10000, CRC(437dcf09) SHA1(0022ee4d1c3698f77271e570cef98a8a1e5c5d6a) ) ROM_LOAD32_BYTE( "opr-12308.10", 0x00001, 0x10000, CRC(0de70cc2) SHA1(c03f8f8cda72daf64af2878bf254840ac6dd17eb) ) ROM_LOAD32_BYTE( "opr-12309.11", 0x00002, 0x10000, CRC(deb8c242) SHA1(c05d8ced4eafae52c4795fb1471cd66f5903d1aa) ) @@ -1773,14 +1746,14 @@ ROM_START( toutrun1 ) ROM_LOAD32_BYTE( "opr-12321.23", 0xc0002, 0x10000, CRC(830bacd4) SHA1(5a4816969437ee1edca5845006c0b8e9ba365491) ) ROM_LOAD32_BYTE( "opr-12322.24", 0xc0003, 0x10000, CRC(8b812492) SHA1(bf1f9e059c093c0991c7caf1b01c739ed54b8357) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx (2 identical roms, 1 for each road) */ - ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) /* Manual shows both as EPR-12298 */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx (2 identical roms, 1 for each road) + ROM_LOAD( "epr-12299.47", 0x0000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) // Manual shows both as EPR-12298 ROM_LOAD( "epr-12298.11", 0x8000, 0x8000, CRC(fc9bc41b) SHA1(9af73e096253cf2c4f283f227530110a4b37fcee) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12300.88", 0x00000, 0x10000, CRC(e8ff7011) SHA1(6eaf3aea507007ea31d507ed7825d905f4b8e7ab) ) - ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "opr-12301.66", 0x00000, 0x10000, CRC(6e78ad15) SHA1(c31ddf434b459cd1a381d2a028beabddd4ed10d2) ) ROM_LOAD( "opr-12302.67", 0x10000, 0x10000, CRC(e72928af) SHA1(40e0b178958cfe97c097fe9d82b5de54bc27a29f) ) ROM_LOAD( "opr-12303.68", 0x20000, 0x10000, CRC(8384205c) SHA1(c1f9d52bc587eab5a97867198e9aa7c19e973429) ) @@ -1800,25 +1773,25 @@ ROM_END VIDEO BD SUPER HANG-ON 837-6279-01 */ ROM_START( shangon ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10886.133", 0x000000, 0x10000, CRC(8be3cd36) SHA1(de96481807e782ca441d51e99f1a221bdee7d170) ) ROM_LOAD16_BYTE( "epr-10884.118", 0x000001, 0x10000, CRC(cb06150d) SHA1(840dada0cdeec444b554e6c1f2bdacc1047be567) ) ROM_LOAD16_BYTE( "epr-10887.132", 0x020000, 0x10000, CRC(8d248bb0) SHA1(7d8ed61609fd0df203255e7d046d9d30983f1dcd) ) ROM_LOAD16_BYTE( "epr-10885.117", 0x020001, 0x10000, CRC(70795f26) SHA1(332921b0a6534c4cbfe76ff957c721cc80d341b0) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10792.76", 0x00000, 0x10000, CRC(16299d25) SHA1(b14d5feef3e6889320d51ffca36801f4c9c4d5f8) ) ROM_LOAD16_BYTE( "epr-10790.58", 0x00001, 0x10000, CRC(2246cbc1) SHA1(c192b1ddf4c848adb564c7c87d5413d62ed650d7) ) ROM_LOAD16_BYTE( "epr-10793.75", 0x20000, 0x10000, CRC(d9525427) SHA1(cdb24db9f7a293f20fd8becc4afe84fd6abd678a) ) ROM_LOAD16_BYTE( "epr-10791.57", 0x20001, 0x10000, CRC(5faf4cbe) SHA1(41659a961e6469d9233849c3c587cd5a0a141344) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10652.54", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) ) ROM_LOAD( "epr-10651.55", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) ) ROM_LOAD( "epr-10650.56", 0x10000, 0x08000, CRC(b236a403) SHA1(af02b8122794c083a66f2ab35d2c73b84b2df0be) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ - /* Super Hang-On Video board 837-6279-01 (mask rom type), same data but mask roms twice the size as "EPR" counterparts */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites + // Super Hang-On Video board 837-6279-01 (mask rom type), same data but mask roms twice the size as "EPR" counterparts ROM_LOAD16_BYTE( "mpr-10794.8", 0x000001, 0x020000, CRC(7c958e63) SHA1(ef79614e94280607a6cdf6e13db051accfd2add0) ) ROM_LOAD16_BYTE( "mpr-10798.16", 0x000000, 0x020000, CRC(7d58f807) SHA1(783c9929d27a0270b3f7d5eb799cee6b2e5b7ae5) ) ROM_LOAD16_BYTE( "mpr-10795.6", 0x040001, 0x020000, CRC(d9d31f8c) SHA1(3ce07b83e3aa2d8834c1a449fa31e003df5486a3) ) @@ -1828,14 +1801,14 @@ ROM_START( shangon ) ROM_LOAD16_BYTE( "mpr-10797.2", 0x0c0001, 0x020000, CRC(27f2870d) SHA1(40a34e4555885bf3c6a42e472b80d11c3bd4dcba) ) ROM_LOAD16_BYTE( "mpr-10801.10", 0x0c0000, 0x020000, CRC(12781795) SHA1(44bf6f657f32b9fab119557eb73c2fbf78700204) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx ROM_LOAD( "epr-10642.47", 0x0000, 0x8000, CRC(7836bcc3) SHA1(26f308bf96224311ddf685799d7aa29aac42dd2f) ) - /* socket IC11 not populated */ + // socket IC11 not populated - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10649c.88", 0x0000, 0x08000, CRC(f6c1ce71) SHA1(12299f7e5378a56be3a31cce3b8b74e48744f33a) ) - ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "epr-10643.66", 0x00000, 0x08000, CRC(06f55364) SHA1(fd685795e12541e3d0059d383fab293b3980d247) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "epr-10644.67", 0x10000, 0x08000, CRC(b41d541d) SHA1(28bbfa5edaa4a5901c74074354ba6f14d8f42ff6) ) @@ -1860,24 +1833,24 @@ Manual states for this set: */ ROM_START( shangon3 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code - protected */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code - protected ROM_LOAD16_BYTE( "epr-10789.133", 0x000000, 0x10000, CRC(6092c5ce) SHA1(dc010ab6d4dbbcb2f38de9f4f80674e9e1502dea) ) ROM_LOAD16_BYTE( "epr-10788.118", 0x000001, 0x10000, CRC(c3d8a1ea) SHA1(b7f5de5e9ab9e5fb59937c11acd960f8e4a9bc2f) ) ROM_LOAD16_BYTE( "epr-10637a.132", 0x020000, 0x10000, CRC(ad6c1308) SHA1(ee63168205bcb8b2c3dcbc3d7ba8a7f8f8a85952) ) ROM_LOAD16_BYTE( "epr-10635a.117", 0x020001, 0x10000, CRC(a2415595) SHA1(2a8b960ea70066bf43c7b3772a0ed53d7c737b2c) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10792.76", 0x00000, 0x10000, CRC(16299d25) SHA1(b14d5feef3e6889320d51ffca36801f4c9c4d5f8) ) ROM_LOAD16_BYTE( "epr-10790.58", 0x00001, 0x10000, CRC(2246cbc1) SHA1(c192b1ddf4c848adb564c7c87d5413d62ed650d7) ) ROM_LOAD16_BYTE( "epr-10793.75", 0x20000, 0x10000, CRC(d9525427) SHA1(cdb24db9f7a293f20fd8becc4afe84fd6abd678a) ) ROM_LOAD16_BYTE( "epr-10791.57", 0x20001, 0x10000, CRC(5faf4cbe) SHA1(41659a961e6469d9233849c3c587cd5a0a141344) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10652.54", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) ) ROM_LOAD( "epr-10651.55", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) ) ROM_LOAD( "epr-10650.56", 0x10000, 0x08000, CRC(b236a403) SHA1(af02b8122794c083a66f2ab35d2c73b84b2df0be) ) - ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10675.8", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) ) ROM_LOAD16_BYTE( "epr-10682.16", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) ) ROM_LOAD16_BYTE( "epr-10676.7", 0x020001, 0x010000, CRC(25ebf2c5) SHA1(abcf673ae4e280417dd9f46d18c0ec7c0e4802ae) ) @@ -1893,14 +1866,14 @@ ROM_START( shangon3 ) ROM_LOAD16_BYTE( "epr-10681.2", 0x0c0001, 0x010000, CRC(b176ea72) SHA1(7ec0eb0f13398d014c2e235773ded00351edb3e2) ) ROM_LOAD16_BYTE( "epr-10688.10", 0x0c0000, 0x010000, CRC(42fcd51d) SHA1(0eacb3527dc21746e5b901fcac83f2764a0f9e2c) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx ROM_LOAD( "epr-10642.47", 0x0000, 0x8000, CRC(7836bcc3) SHA1(26f308bf96224311ddf685799d7aa29aac42dd2f) ) - /* socket IC11 not populated */ + // socket IC11 not populated - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10649a.88", 0x0000, 0x08000, CRC(bf38330f) SHA1(3d825bb02ef5a9f5c4fcaa71b3735e7f8e47f178) ) - ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "epr-10643.66", 0x00000, 0x08000, CRC(06f55364) SHA1(fd685795e12541e3d0059d383fab293b3980d247) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "epr-10644.67", 0x10000, 0x08000, CRC(b41d541d) SHA1(28bbfa5edaa4a5901c74074354ba6f14d8f42ff6) ) @@ -1910,7 +1883,7 @@ ROM_START( shangon3 ) ROM_LOAD( "epr-10646.69", 0x30000, 0x08000, CRC(473cc411) SHA1(04ca2d047eb59581cd5d76e0ac6eca8b19eef497) ) ROM_RELOAD( 0x38000, 0x08000 ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0034.key", 0x0000, 0x2000, CRC(263ca773) SHA1(8e80d69d61cf54fd02b0ca59dd397fa60c713f3d) ) ROM_END @@ -1921,24 +1894,24 @@ ROM_END VIDEO BD SUPER HANG-ON 837-6279 (or 837-6279-02, roms would be "OPR") */ ROM_START( shangon2 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code - protected */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code - protected ROM_LOAD16_BYTE( "epr-10636a.133", 0x000000, 0x10000, CRC(74a64f4f) SHA1(3266a9a3c68e147bc8626de7ec45b59fd28f9d1d) ) ROM_LOAD16_BYTE( "epr-10634a.118", 0x000001, 0x10000, CRC(1608cb4a) SHA1(56b0a6a0a4951f15a269d94d18821809ac0d3d53) ) ROM_LOAD16_BYTE( "epr-10637a.132", 0x020000, 0x10000, CRC(ad6c1308) SHA1(ee63168205bcb8b2c3dcbc3d7ba8a7f8f8a85952) ) ROM_LOAD16_BYTE( "epr-10635a.117", 0x020001, 0x10000, CRC(a2415595) SHA1(2a8b960ea70066bf43c7b3772a0ed53d7c737b2c) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10640.76", 0x00000, 0x10000, CRC(02be68db) SHA1(8c9f98ee49db54ee53b721ecf53f91737ae6cd73) ) ROM_LOAD16_BYTE( "epr-10638.58", 0x00001, 0x10000, CRC(f13e8bee) SHA1(1c16c018f58f1fb49e240314a7e97a947087fad9) ) ROM_LOAD16_BYTE( "epr-10641.75", 0x20000, 0x10000, CRC(38c3f808) SHA1(36fae99b56980ef33853170afe10b363cd41c053) ) ROM_LOAD16_BYTE( "epr-10639.57", 0x20001, 0x10000, CRC(8cdbcde8) SHA1(0bcb4df96ee16db3dd4ce52fccd939f48a4bc1a0) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10652.54", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) ) ROM_LOAD( "epr-10651.55", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) ) ROM_LOAD( "epr-10650.56", 0x10000, 0x08000, CRC(b236a403) SHA1(af02b8122794c083a66f2ab35d2c73b84b2df0be) ) - ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10675.8", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) ) ROM_LOAD16_BYTE( "epr-10682.16", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) ) ROM_LOAD16_BYTE( "epr-10676.7", 0x020001, 0x010000, CRC(25ebf2c5) SHA1(abcf673ae4e280417dd9f46d18c0ec7c0e4802ae) ) @@ -1954,14 +1927,14 @@ ROM_START( shangon2 ) ROM_LOAD16_BYTE( "epr-10681.2", 0x0c0001, 0x010000, CRC(b176ea72) SHA1(7ec0eb0f13398d014c2e235773ded00351edb3e2) ) ROM_LOAD16_BYTE( "epr-10688.10", 0x0c0000, 0x010000, CRC(42fcd51d) SHA1(0eacb3527dc21746e5b901fcac83f2764a0f9e2c) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx ROM_LOAD( "epr-10642.47", 0x0000, 0x8000, CRC(7836bcc3) SHA1(26f308bf96224311ddf685799d7aa29aac42dd2f) ) - /* socket IC11 not populated */ + // socket IC11 not populated - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ - ROM_LOAD( "ic88", 0x0000, 0x08000, CRC(1254efa6) SHA1(997770ccdd776de6e335a6d8b1e15d200cbd4410) ) /* EPR-10649 or EPR-10649B ??? */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU + ROM_LOAD( "ic88", 0x0000, 0x08000, CRC(1254efa6) SHA1(997770ccdd776de6e335a6d8b1e15d200cbd4410) ) // EPR-10649 or EPR-10649B ??? - ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "epr-10643.66", 0x00000, 0x08000, CRC(06f55364) SHA1(fd685795e12541e3d0059d383fab293b3980d247) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "epr-10644.67", 0x10000, 0x08000, CRC(b41d541d) SHA1(28bbfa5edaa4a5901c74074354ba6f14d8f42ff6) ) @@ -1971,7 +1944,7 @@ ROM_START( shangon2 ) ROM_LOAD( "epr-10646.69", 0x30000, 0x08000, CRC(473cc411) SHA1(04ca2d047eb59581cd5d76e0ac6eca8b19eef497) ) ROM_RELOAD( 0x38000, 0x08000 ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0034.key", 0x0000, 0x2000, CRC(263ca773) SHA1(8e80d69d61cf54fd02b0ca59dd397fa60c713f3d) ) ROM_END @@ -1982,24 +1955,24 @@ ROM_END VIDEO BD SUPER HANG-ON 837-6279 (or 837-6279-02, roms would be "OPR") */ ROM_START( shangon1 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code - protected */ - ROM_LOAD16_BYTE( "ic133", 0x000000, 0x10000, CRC(e52721fe) SHA1(21f0aa14d0cbda3d762bca86efe089646031aef5) ) /* All EPR numbers for this main CPU version are unknown */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code - protected + ROM_LOAD16_BYTE( "ic133", 0x000000, 0x10000, CRC(e52721fe) SHA1(21f0aa14d0cbda3d762bca86efe089646031aef5) ) // All EPR numbers for this main CPU version are unknown ROM_LOAD16_BYTE( "ic118", 0x000001, 0x10000, BAD_DUMP CRC(5fee09f6) SHA1(b97a08ba75d8c617aceff2b03c1f2bfcb16181ef) ) ROM_LOAD16_BYTE( "ic132", 0x020000, 0x10000, CRC(5d55d65f) SHA1(d02d76b98d74746b078b0f49f0320b8be48e4c47) ) ROM_LOAD16_BYTE( "ic117", 0x020001, 0x10000, CRC(b967e8c3) SHA1(00224b337b162daff03bbfabdcf8541025220d46) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10640.76", 0x00000, 0x10000, CRC(02be68db) SHA1(8c9f98ee49db54ee53b721ecf53f91737ae6cd73) ) ROM_LOAD16_BYTE( "epr-10638.58", 0x00001, 0x10000, CRC(f13e8bee) SHA1(1c16c018f58f1fb49e240314a7e97a947087fad9) ) ROM_LOAD16_BYTE( "epr-10641.75", 0x20000, 0x10000, CRC(38c3f808) SHA1(36fae99b56980ef33853170afe10b363cd41c053) ) ROM_LOAD16_BYTE( "epr-10639.57", 0x20001, 0x10000, CRC(8cdbcde8) SHA1(0bcb4df96ee16db3dd4ce52fccd939f48a4bc1a0) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10652.54", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) ) ROM_LOAD( "epr-10651.55", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) ) ROM_LOAD( "epr-10650.56", 0x10000, 0x08000, CRC(b236a403) SHA1(af02b8122794c083a66f2ab35d2c73b84b2df0be) ) - ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10675.8", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) ) ROM_LOAD16_BYTE( "epr-10682.16", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) ) ROM_LOAD16_BYTE( "epr-10676.7", 0x020001, 0x010000, CRC(25ebf2c5) SHA1(abcf673ae4e280417dd9f46d18c0ec7c0e4802ae) ) @@ -2015,14 +1988,14 @@ ROM_START( shangon1 ) ROM_LOAD16_BYTE( "epr-10681.2", 0x0c0001, 0x010000, CRC(b176ea72) SHA1(7ec0eb0f13398d014c2e235773ded00351edb3e2) ) ROM_LOAD16_BYTE( "epr-10688.10", 0x0c0000, 0x010000, CRC(42fcd51d) SHA1(0eacb3527dc21746e5b901fcac83f2764a0f9e2c) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* road gfx */ + ROM_REGION( 0x10000, "gfx3", 0 ) // road gfx ROM_LOAD( "epr-10642.47", 0x0000, 0x8000, CRC(7836bcc3) SHA1(26f308bf96224311ddf685799d7aa29aac42dd2f) ) - /* socket IC11 not populated */ + // socket IC11 not populated - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ - ROM_LOAD( "ic88", 0x0000, 0x08000, CRC(1254efa6) SHA1(997770ccdd776de6e335a6d8b1e15d200cbd4410) ) /* EPR-10649 or EPR-10649B ??? */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU + ROM_LOAD( "ic88", 0x0000, 0x08000, CRC(1254efa6) SHA1(997770ccdd776de6e335a6d8b1e15d200cbd4410) ) // EPR-10649 or EPR-10649B ??? - ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "epr-10643.66", 0x00000, 0x08000, CRC(06f55364) SHA1(fd685795e12541e3d0059d383fab293b3980d247) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "epr-10644.67", 0x10000, 0x08000, CRC(b41d541d) SHA1(28bbfa5edaa4a5901c74074354ba6f14d8f42ff6) ) @@ -2032,7 +2005,7 @@ ROM_START( shangon1 ) ROM_LOAD( "epr-10646.69", 0x30000, 0x08000, CRC(473cc411) SHA1(04ca2d047eb59581cd5d76e0ac6eca8b19eef497) ) ROM_RELOAD( 0x38000, 0x08000 ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0034.key", 0x0000, 0x2000, CRC(263ca773) SHA1(8e80d69d61cf54fd02b0ca59dd397fa60c713f3d) ) ROM_END @@ -2043,24 +2016,24 @@ ROM_END VIDEO BD SUPER HANG-ON 837-6279 (or 837-6279-02, rom would be "OPR") */ ROM_START( shangonle ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13944.133", 0x000000, 0x10000, CRC(989a80db) SHA1(5026e5cf52d4fd85a0bab6c4ea7a34cf266b2a3b) ) ROM_LOAD16_BYTE( "epr-13943.118", 0x000001, 0x10000, CRC(426e3050) SHA1(f332ea76285b4e1361d818cbe5aab0640b4185c3) ) ROM_LOAD16_BYTE( "epr-10899.132", 0x020000, 0x10000, CRC(bb3faa37) SHA1(ccf3352255503fd6619e6e116d187a8cd1ff75e6) ) ROM_LOAD16_BYTE( "epr-10897.117", 0x020001, 0x10000, CRC(5f087eb1) SHA1(bdfcc39e92087057acc4e91741a03e7ba57824c1) ) - ROM_REGION( 0x60000, "sub", 0 ) /* second 68000 CPU */ + ROM_REGION( 0x60000, "subcpu", 0 ) // second 68000 CPU ROM_LOAD16_BYTE( "epr-10640.76", 0x00000, 0x10000, CRC(02be68db) SHA1(8c9f98ee49db54ee53b721ecf53f91737ae6cd73) ) ROM_LOAD16_BYTE( "epr-10638.58", 0x00001, 0x10000, CRC(f13e8bee) SHA1(1c16c018f58f1fb49e240314a7e97a947087fad9) ) ROM_LOAD16_BYTE( "epr-10641.75", 0x20000, 0x10000, CRC(38c3f808) SHA1(36fae99b56980ef33853170afe10b363cd41c053) ) ROM_LOAD16_BYTE( "epr-10639.57", 0x20001, 0x10000, CRC(8cdbcde8) SHA1(0bcb4df96ee16db3dd4ce52fccd939f48a4bc1a0) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10652.54", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) ) ROM_LOAD( "epr-10651.55", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) ) ROM_LOAD( "epr-10650.56", 0x10000, 0x08000, CRC(b236a403) SHA1(af02b8122794c083a66f2ab35d2c73b84b2df0be) ) - ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x0e0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10675.8", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) ) ROM_LOAD16_BYTE( "epr-10682.16", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) ) ROM_LOAD16_BYTE( "epr-13945.7", 0x020001, 0x010000, CRC(fbb1eef9) SHA1(2798df2f25706e0d3be01d945274f478d7e5a2ae) ) @@ -2076,14 +2049,14 @@ ROM_START( shangonle ) ROM_LOAD16_BYTE( "epr-10681.2", 0x0c0001, 0x010000, CRC(b176ea72) SHA1(7ec0eb0f13398d014c2e235773ded00351edb3e2) ) ROM_LOAD16_BYTE( "epr-10688.10", 0x0c0000, 0x010000, CRC(42fcd51d) SHA1(0eacb3527dc21746e5b901fcac83f2764a0f9e2c) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* Road Graphics */ + ROM_REGION( 0x10000, "gfx3", 0 ) // Road Graphics ROM_LOAD( "epr-10642.47", 0x0000, 0x8000, CRC(7836bcc3) SHA1(26f308bf96224311ddf685799d7aa29aac42dd2f) ) - /* socket IC11 not populated */ + // socket IC11 not populated - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10649c.88", 0x0000, 0x08000, CRC(f6c1ce71) SHA1(12299f7e5378a56be3a31cce3b8b74e48744f33a) ) - ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) /* sound PCM data */ + ROM_REGION( 0x40000, "pcm", ROMREGION_ERASEFF ) // sound PCM data ROM_LOAD( "epr-10643.66", 0x00000, 0x08000, CRC(06f55364) SHA1(fd685795e12541e3d0059d383fab293b3980d247) ) ROM_RELOAD( 0x08000, 0x08000 ) ROM_LOAD( "epr-10644.67", 0x10000, 0x08000, CRC(b41d541d) SHA1(28bbfa5edaa4a5901c74074354ba6f14d8f42ff6) ) @@ -2096,106 +2069,96 @@ ROM_END -/************************************* - * - * Generic driver initialization - * - *************************************/ +//************************************************************************** +// GENERIC DRIVER INITIALIZATION +//************************************************************************** -static DRIVER_INIT( outrun ) +void segaorun_state::init_outrun() { - segas1x_state *state = machine.driver_data(); - - outrun_generic_init(machine); - state->m_custom_io_r = outrun_custom_io_r; - state->m_custom_io_w = outrun_custom_io_w; + init_generic(); + m_custom_io_r = read16_delegate(FUNC(segaorun_state::outrun_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segaorun_state::outrun_custom_io_w), this); } -static DRIVER_INIT( outrunb ) +void segaorun_state::init_outrunb() { - segas1x_state *state = machine.driver_data(); static const UINT8 memory_map[] = { 0x02,0x00,0x0d,0x10,0x00,0x12,0x0c,0x13,0x08,0x14,0x0f,0x20,0x00,0x00,0x00,0x00 }; UINT16 *word; UINT8 *byte; int i, length; - outrun_generic_init(machine); - state->m_custom_map = memory_map; - state->m_custom_io_r = outrun_custom_io_r; - state->m_custom_io_w = outrun_custom_io_w; + init_generic(); + m_custom_map = memory_map; + m_custom_io_r = read16_delegate(FUNC(segaorun_state::outrun_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segaorun_state::outrun_custom_io_w), this); - /* main CPU: swap bits 11,12 and 6,7 */ - word = (UINT16 *)machine.root_device().memregion("maincpu")->base(); - length = machine.root_device().memregion("maincpu")->bytes() / 2; + // main CPU: swap bits 11,12 and 6,7 + word = (UINT16 *)memregion("maincpu")->base(); + length = memregion("maincpu")->bytes() / 2; for (i = 0; i < length; i++) word[i] = BITSWAP16(word[i], 15,14,11,12,13,10,9,8,6,7,5,4,3,2,1,0); - /* sub CPU: swap bits 14,15 and 2,3 */ - word = (UINT16 *)machine.root_device().memregion("sub")->base(); - length = machine.root_device().memregion("sub")->bytes() / 2; + // sub CPU: swap bits 14,15 and 2,3 + word = (UINT16 *)memregion("subcpu")->base(); + length = memregion("subcpu")->bytes() / 2; for (i = 0; i < length; i++) word[i] = BITSWAP16(word[i], 14,15,13,12,11,10,9,8,7,6,5,4,2,3,1,0); - /* road gfx */ - /* rom a-2.bin: swap bits 6,7 */ - /* rom a-3.bin: swap bits 5,6 */ - byte = machine.root_device().memregion("gfx3")->base(); - length = machine.root_device().memregion("gfx3")->bytes() / 2; + // road gfx + // rom a-2.bin: swap bits 6,7 + // rom a-3.bin: swap bits 5,6 + byte = memregion("gfx3")->base(); + length = memregion("gfx3")->bytes() / 2; for (i = 0; i < length; i++) { byte[i] = BITSWAP8(byte[i], 6,7,5,4,3,2,1,0); byte[i+length] = BITSWAP8(byte[i+length], 7,5,6,4,3,2,1,0); } - /* Z80 code: swap bits 5,6 */ - byte = machine.root_device().memregion("soundcpu")->base(); - length = machine.root_device().memregion("soundcpu")->bytes(); + // Z80 code: swap bits 5,6 + byte = memregion("soundcpu")->base(); + length = memregion("soundcpu")->bytes(); for (i = 0; i < length; i++) byte[i] = BITSWAP8(byte[i], 7,5,6,4,3,2,1,0); } -static DRIVER_INIT( shangon ) +void segaorun_state::init_shangon() { - segas1x_state *state = machine.driver_data(); - - outrun_generic_init(machine); - state->m_custom_io_r = shangon_custom_io_r; - state->m_custom_io_w = shangon_custom_io_w; + init_generic(); + m_is_shangon = true; + m_custom_io_r = read16_delegate(FUNC(segaorun_state::shangon_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segaorun_state::shangon_custom_io_w), this); } -static DRIVER_INIT( shangon3 ) +void segaorun_state::init_shangon3() { - segas1x_state *state = machine.driver_data(); - - outrun_generic_init(machine); - fd1089b_decrypt(machine); - state->m_custom_io_r = shangon_custom_io_r; - state->m_custom_io_w = shangon_custom_io_w; + init_generic(); + m_is_shangon = true; + m_custom_io_r = read16_delegate(FUNC(segaorun_state::shangon_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segaorun_state::shangon_custom_io_w), this); } -/************************************* - * - * Game driver(s) - * - *************************************/ +//************************************************************************** +// GAME DRIVERS +//************************************************************************** -// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS, LAYOUT -GAMEL(1986, outrun, 0, outrun, outrun, outrun, ROT0, "Sega", "Out Run (sitdown/upright, Rev B)", 0, layout_outrun ) /* Upright/Sitdown determined by dipswitch settings */ -GAMEL(1986, outrunra, outrun, outrun, outrun, outrun, ROT0, "Sega", "Out Run (sitdown/upright, Rev A)", 0, layout_outrun ) /* Upright/Sitdown determined by dipswitch settings */ -GAMEL(1986, outruno, outrun, outrun, outrun, outrun, ROT0, "Sega", "Out Run (sitdown/upright)", 0, layout_outrun ) /* Upright/Sitdown determined by dipswitch settings */ -GAMEL(1986, outrundx, outrun, outrundx, outrundx, outrun, ROT0, "Sega", "Out Run (deluxe sitdown)", 0, layout_outrun ) -GAMEL(1986, outrunb, outrun, outrun, outrun, outrunb, ROT0, "bootleg", "Out Run (bootleg)", 0, layout_outrun ) -GAME( 1987, shangon, 0, shangon, shangon, shangon, ROT0, "Sega", "Super Hang-On (sitdown/upright, unprotected)", 0 ) -GAME( 1987, shangon3, shangon, shangon, shangon, shangon3, ROT0, "Sega", "Super Hang-On (sitdown/upright, FD1089B 317-0034)", 0 ) -GAME( 1987, shangon2, shangon, shangon, shangon, shangon3, ROT0, "Sega", "Super Hang-On (mini ride-on, Rev A, FD1089B 317-0034)", 0 ) -GAME( 1987, shangon1, shangon, shangon, shangon, shangon3, ROT0, "Sega", "Super Hang-On (mini ride-on?, FD1089B 317-0034)", GAME_NOT_WORKING ) /* bad program rom */ -GAME( 1991, shangonle,shangon, shangon, shangon, shangon, ROT0, "Sega", "Limited Edition Hang-On", 0 ) -GAMEL(1989, toutrun, 0, outrun, toutrun, outrun, ROT0, "Sega", "Turbo Out Run (Out Run upgrade, FD1094 317-0118)", 0, layout_outrun ) /* Cabinet determined by dipswitch settings */ -GAMEL(1989, toutrun3, toutrun, outrun, toutrunc, outrun, ROT0, "Sega", "Turbo Out Run (upright, FD1094 317-0107)", 0, layout_outrun ) -GAMEL(1989, toutrun2, toutrun, outrun, toutrun, outrun, ROT0, "Sega", "Turbo Out Run (cockpit, FD1094 317-unknown)", GAME_NOT_WORKING, layout_outrun ) /* FD1094 CPU not decrypted */ -GAMEL(1989, toutrun1, toutrun, outrun, toutrunm, outrun, ROT0, "Sega", "Turbo Out Run (deluxe cockpit, FD1094 317-0109)", 0, layout_outrun ) +// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS, LAYOUT +GAMEL(1986, outrun, 0, outrun, outrun, segaorun_state,init_outrun, ROT0, "Sega", "Out Run (sitdown/upright, Rev B)", 0, layout_outrun ) // Upright/Sitdown determined by dipswitch settings +GAMEL(1986, outrunra, outrun, outrun, outrun, segaorun_state,init_outrun, ROT0, "Sega", "Out Run (sitdown/upright, Rev A)", 0, layout_outrun ) // Upright/Sitdown determined by dipswitch settings +GAMEL(1986, outruno, outrun, outrun, outrun, segaorun_state,init_outrun, ROT0, "Sega", "Out Run (sitdown/upright)", 0, layout_outrun ) // Upright/Sitdown determined by dipswitch settings +GAMEL(1986, outrundx, outrun, outrundx, outrundx, segaorun_state,init_outrun, ROT0, "Sega", "Out Run (deluxe sitdown)", 0, layout_outrun ) +GAMEL(1986, outrunb, outrun, outrun, outrun, segaorun_state,init_outrunb, ROT0, "bootleg", "Out Run (bootleg)", 0, layout_outrun ) +GAME( 1987, shangon, 0, shangon, shangon, segaorun_state,init_shangon, ROT0, "Sega", "Super Hang-On (sitdown/upright, unprotected)", 0 ) +GAME( 1987, shangon3, shangon, shangon_fd1089b, shangon, segaorun_state,init_shangon3, ROT0, "Sega", "Super Hang-On (sitdown/upright, FD1089B 317-0034)", 0 ) +GAME( 1987, shangon2, shangon, shangon_fd1089b, shangon, segaorun_state,init_shangon3, ROT0, "Sega", "Super Hang-On (mini ride-on, Rev A, FD1089B 317-0034)", 0 ) +GAME( 1987, shangon1, shangon, shangon_fd1089b, shangon, segaorun_state,init_shangon3, ROT0, "Sega", "Super Hang-On (mini ride-on?, FD1089B 317-0034)", GAME_NOT_WORKING ) // bad program rom +GAME( 1991, shangonle,shangon, shangon, shangon, segaorun_state,init_shangon, ROT0, "Sega", "Limited Edition Hang-On", 0 ) +GAMEL(1989, toutrun, 0, outrun_fd1094, toutrun, segaorun_state,init_outrun, ROT0, "Sega", "Turbo Out Run (Out Run upgrade, FD1094 317-0118)", 0, layout_outrun ) // Cabinet determined by dipswitch settings +GAMEL(1989, toutrun3, toutrun, outrun_fd1094, toutrunc, segaorun_state,init_outrun, ROT0, "Sega", "Turbo Out Run (upright, FD1094 317-0107)", 0, layout_outrun ) +GAMEL(1989, toutrun2, toutrun, outrun_fd1094, toutrun, segaorun_state,init_outrun, ROT0, "Sega", "Turbo Out Run (cockpit, FD1094 317-unknown)", GAME_NOT_WORKING, layout_outrun ) // FD1094 CPU not decrypted +GAMEL(1989, toutrun1, toutrun, outrun_fd1094, toutrunm, segaorun_state,init_outrun, ROT0, "Sega", "Turbo Out Run (deluxe cockpit, FD1094 317-0109)", 0, layout_outrun ) diff --git a/src/mame/drivers/segas16a.c b/src/mame/drivers/segas16a.c index c81ef00fc1e..c6e50e4c276 100644 --- a/src/mame/drivers/segas16a.c +++ b/src/mame/drivers/segas16a.c @@ -2,6 +2,37 @@ Sega pre-System 16 & System 16A hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + **************************************************************************** Known bugs: @@ -144,19 +175,10 @@ Tetris - - - - EPR12169 EPR12170 - */ #include "emu.h" -#include "cpu/z80/z80.h" -#include "cpu/m68000/m68000.h" -#include "cpu/mcs51/mcs51.h" #include "includes/segas16.h" -#include "machine/8255ppi.h" #include "machine/segacrp2.h" #include "machine/fd1089.h" #include "machine/i8243.h" -#include "machine/nvram.h" -#include "cpu/mcs48/mcs48.h" -#include "sound/dac.h" -#include "sound/2151intf.h" -#include "video/segaic16.h" #include "includes/segaipt.h" @@ -209,29 +231,19 @@ static const ppi8255_interface single_ppi_intf = static void system16a_generic_init(running_machine &machine) { - segas1x_state *state = machine.driver_data(); - - /* init the FD1094 */ - fd1094_driver_init(machine, "maincpu", NULL); + segas16a_state *state = machine.driver_data(); /* reset the custom handlers and other pointers */ state->m_custom_io_r = NULL; state->m_custom_io_w = NULL; state->m_lamp_changed_w = NULL; state->m_i8751_vblank_hook = NULL; - - state->m_maincpu = machine.device("maincpu"); - state->m_soundcpu = machine.device("soundcpu"); - state->m_mcu = machine.device("mcu"); - state->m_ymsnd = machine.device("ymsnd"); - state->m_ppi8255 = machine.device("ppi8255"); - state->m_n7751 = machine.device("n7751"); } static TIMER_CALLBACK( suspend_i8751 ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); device_suspend(state->m_mcu, SUSPEND_REASON_DISABLE, 1); } @@ -245,7 +257,7 @@ static TIMER_CALLBACK( suspend_i8751 ) static MACHINE_START( system16a ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); state->save_item(NAME(state->m_video_control)); state->save_item(NAME(state->m_mcu_control)); @@ -260,9 +272,7 @@ static MACHINE_START( system16a ) static MACHINE_RESET( system16a ) { - segas1x_state *state = machine.driver_data(); - - fd1094_machine_init(machine.device("maincpu")); + segas16a_state *state = machine.driver_data(); /* if we have a fake i8751 handler, disable the actual 8751 */ if (state->m_i8751_vblank_hook != NULL) @@ -281,14 +291,14 @@ static MACHINE_RESET( system16a ) static TIMER_CALLBACK( delayed_ppi8255_w ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); ppi8255_w(state->m_ppi8255, param >> 8, param & 0xff); } static READ16_HANDLER( standard_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); offset &= 0x3fff/2; switch (offset & (0x3000/2)) { @@ -327,7 +337,7 @@ static WRITE16_HANDLER( standard_io_w ) static READ16_HANDLER( misc_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); if (state->m_custom_io_r) return (*state->m_custom_io_r)(space, offset, mem_mask); @@ -338,7 +348,7 @@ static READ16_HANDLER( misc_io_r ) static WRITE16_HANDLER( misc_io_w ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); if (state->m_custom_io_w) (*state->m_custom_io_w)(space, offset, data, mem_mask); @@ -369,7 +379,7 @@ static WRITE8_DEVICE_HANDLER( video_control_w ) D0 : Coin meter #1 */ - segas1x_state *state = device->machine().driver_data(); + segas16a_state *state = device->machine().driver_data(); if (((state->m_video_control ^ data) & 0x0c) && state->m_lamp_changed_w) (*state->m_lamp_changed_w)(device->machine(), state->m_video_control ^ data, data); @@ -412,7 +422,7 @@ static WRITE8_DEVICE_HANDLER( tilemap_sound_w ) 0= Sound is disabled 1= sound is enabled */ - segas1x_state *state = device->machine().driver_data(); + segas16a_state *state = device->machine().driver_data(); device_set_input_line(state->m_soundcpu, INPUT_LINE_NMI, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE); segaic16_tilemap_set_colscroll(device->machine(), 0, ~data & 0x04); @@ -429,7 +439,7 @@ static WRITE8_DEVICE_HANDLER( tilemap_sound_w ) static READ8_HANDLER( sound_data_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); /* assert ACK */ ppi8255_set_port_c(state->m_ppi8255, 0x00); @@ -449,7 +459,7 @@ static WRITE8_HANDLER( n7751_command_w ) D1 = /CS for ROM 0 D0 = A14 line to ROMs */ - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); int numroms = state->memregion("n7751data")->bytes() / 0x8000; state->m_n7751_rom_address &= 0x3fff; @@ -470,7 +480,7 @@ static WRITE8_DEVICE_HANDLER( n7751_control_w ) D1 = /RESET line on 7751 D0 = /IRQ line on 7751 */ - segas1x_state *state = device->machine().driver_data(); + segas16a_state *state = device->machine().driver_data(); device_set_input_line(state->m_n7751, INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE); device_set_input_line(state->m_n7751, 0, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE); @@ -484,7 +494,7 @@ static WRITE8_DEVICE_HANDLER( n7751_rom_offset_w ) /* P5 - address lines 4-7 */ /* P6 - address lines 8-11 */ /* P7 - address lines 12-13 */ - segas1x_state *state = device->machine().driver_data(); + segas16a_state *state = device->machine().driver_data(); int mask = (0xf << (4 * offset)) & 0x3fff; int newdata = (data << (4 * offset)) & mask; @@ -495,7 +505,7 @@ static WRITE8_DEVICE_HANDLER( n7751_rom_offset_w ) static READ8_HANDLER( n7751_rom_r ) { /* read from BUS */ - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); return state->memregion("n7751data")->base()[state->m_n7751_rom_address]; } @@ -504,7 +514,7 @@ static READ8_DEVICE_HANDLER( n7751_p2_r ) { /* read from P2 - 8255's PC0-2 connects to 7751's S0-2 (P24-P26 on an 8048) */ /* bit 0x80 is an alternate way to control the sample on/off; doesn't appear to be used */ - segas1x_state *state = device->machine().driver_data(); + segas16a_state *state = device->machine().driver_data(); return 0x80 | ((state->m_n7751_command & 0x07) << 4) | (i8243_p2_r(device, offset) & 0x0f); } @@ -536,7 +546,7 @@ static READ8_HANDLER( n7751_t1_r ) static INTERRUPT_GEN( i8751_main_cpu_vblank ) { /* if we have a fake 8751 handler, call it on VBLANK */ - segas1x_state *state = device->machine().driver_data(); + segas16a_state *state = device->machine().driver_data(); if (state->m_i8751_vblank_hook != NULL) (*state->m_i8751_vblank_hook)(device->machine()); @@ -552,7 +562,7 @@ static INTERRUPT_GEN( i8751_main_cpu_vblank ) static void dumpmtmt_i8751_sim(running_machine &machine) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); UINT8 flag = workram[0x200/2] >> 8; UINT8 tick = workram[0x200/2] & 0xff; UINT8 sec = workram[0x202/2] >> 8; @@ -598,7 +608,7 @@ static void dumpmtmt_i8751_sim(running_machine &machine) static void quartet_i8751_sim(running_machine &machine) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); /* signal a VBLANK to the main CPU */ @@ -623,7 +633,7 @@ static void quartet_i8751_sim(running_machine &machine) static READ16_HANDLER( aceattaa_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); switch (offset & (0x3000/2)) { @@ -675,7 +685,7 @@ static READ16_HANDLER( aceattaa_custom_io_r ) static READ16_HANDLER( mjleague_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); switch (offset & (0x3000/2)) { @@ -759,7 +769,7 @@ static READ16_HANDLER( mjleague_custom_io_r ) static READ16_HANDLER( passsht16a_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); switch (offset & (0x3000/2)) { @@ -796,7 +806,7 @@ static READ16_HANDLER( passsht16a_custom_io_r ) static READ16_HANDLER( sdi_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); switch (offset & (0x3000/2)) { @@ -821,7 +831,7 @@ static READ16_HANDLER( sdi_custom_io_r ) static READ16_HANDLER( sjryuko_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); static const char *const portname[] = { "MJ0", "MJ1", "MJ2", "MJ3", "MJ4", "MJ5" }; switch (offset & (0x3000/2)) @@ -845,7 +855,7 @@ static READ16_HANDLER( sjryuko_custom_io_r ) static void sjryuko_lamp_changed_w(running_machine &machine, UINT8 changed, UINT8 newval) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); if ((changed & 4) && (newval & 4)) state->m_mj_input_num = (state->m_mj_input_num + 1) % 6; @@ -861,21 +871,21 @@ static void sjryuko_lamp_changed_w(running_machine &machine, UINT8 changed, UINT INLINE UINT8 maincpu_byte_r(running_machine &machine, offs_t offset) { - segas1x_state *state = machine.driver_data(); - return downcast(state->m_maincpu)->space(AS_PROGRAM)->read_byte(offset); + segas16a_state *state = machine.driver_data(); + return state->m_maincpu->space(AS_PROGRAM)->read_byte(offset); } INLINE void maincpu_byte_w(running_machine &machine, offs_t offset, UINT8 data) { - segas1x_state *state = machine.driver_data(); - downcast(state->m_maincpu)->space(AS_PROGRAM)->write_byte(offset, data); + segas16a_state *state = machine.driver_data(); + state->m_maincpu->space(AS_PROGRAM)->write_byte(offset, data); } static WRITE8_HANDLER( mcu_control_w ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); int irqline; /* if we have a fake i8751 handler, ignore writes by the actual 8751 */ @@ -906,7 +916,7 @@ static WRITE8_HANDLER( mcu_io_w ) 1.11 0... = checksum #1 1.11 1... = checksum #2 */ - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); switch ((state->m_mcu_control >> 3) & 7) { @@ -947,7 +957,7 @@ static WRITE8_HANDLER( mcu_io_w ) static READ8_HANDLER( mcu_io_r ) { - segas1x_state *state = space->machine().driver_data(); + segas16a_state *state = space->machine().driver_data(); switch ((state->m_mcu_control >> 3) & 7) { @@ -1005,7 +1015,7 @@ static INTERRUPT_GEN( mcu_irq_assert ) * *************************************/ -static ADDRESS_MAP_START( system16a_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( system16a_map, AS_PROGRAM, 16, segas16a_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x03ffff) AM_MIRROR(0x380000) AM_ROM AM_RANGE(0x400000, 0x407fff) AM_MIRROR(0xb88000) AM_RAM_WRITE_LEGACY(segaic16_tileram_0_w) AM_BASE_LEGACY(&segaic16_tileram_0) @@ -1025,14 +1035,14 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas16a_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xe800, 0xe800) AM_READ_LEGACY(sound_data_r) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas16a_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) @@ -1048,7 +1058,7 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( n7751_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( n7751_portmap, AS_IO, 8, segas16a_state ) AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READ_LEGACY(n7751_rom_r) AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ_LEGACY(n7751_t1_r) AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVWRITE_LEGACY("dac", dac_w) @@ -1064,7 +1074,7 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segas16a_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xffff) AM_READWRITE_LEGACY(mcu_io_r, mcu_io_w) AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READNOP AM_WRITE_LEGACY(mcu_control_w) @@ -1972,7 +1982,7 @@ GFXDECODE_END * *************************************/ -static MACHINE_CONFIG_START( system16a, segas1x_state ) +static MACHINE_CONFIG_START( system16a, segas16a_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, 10000000) @@ -2020,12 +2030,22 @@ static MACHINE_CONFIG_START( system16a, segas1x_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( system16a_no7751, system16a ) - MCFG_DEVICE_REMOVE("n7751") - MCFG_DEVICE_REMOVE("dac") +static MACHINE_CONFIG_DERIVED( system16a_fd1089a, system16a ) + MCFG_CPU_REPLACE("maincpu", FD1089A, 10000000) + MCFG_CPU_PROGRAM_MAP(system16a_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) +MACHINE_CONFIG_END - MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +static MACHINE_CONFIG_DERIVED( system16a_fd1089b, system16a ) + MCFG_CPU_REPLACE("maincpu", FD1089B, 10000000) + MCFG_CPU_PROGRAM_MAP(system16a_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( system16a_fd1094, system16a ) + MCFG_CPU_REPLACE("maincpu", FD1094, 10000000) + MCFG_CPU_PROGRAM_MAP(system16a_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) MACHINE_CONFIG_END @@ -2039,6 +2059,40 @@ static MACHINE_CONFIG_DERIVED( system16a_8751, system16a ) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( system16a_no7751, system16a ) + MCFG_DEVICE_REMOVE("n7751") + MCFG_DEVICE_REMOVE("dac") + + MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( system16a_fd1089a_no7751, system16a_fd1089a ) + MCFG_DEVICE_REMOVE("n7751") + MCFG_DEVICE_REMOVE("dac") + + MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( system16a_fd1089b_no7751, system16a_fd1089b ) + MCFG_DEVICE_REMOVE("n7751") + MCFG_DEVICE_REMOVE("dac") + + MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( system16a_fd1094_no7751, system16a_fd1094 ) + MCFG_DEVICE_REMOVE("n7751") + MCFG_DEVICE_REMOVE("dac") + + MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + + + /************************************* * @@ -2059,7 +2113,7 @@ ROM_START( aceattaca ) ROM_LOAD16_BYTE( "epr-11574.42", 0x20000, 0x10000, CRC(8d3ed7bd) SHA1(0cb947a796071b0b787638a85fce39135ad8d3cb) ) ROM_LOAD16_BYTE( "epr-11572.25", 0x20001, 0x10000, CRC(35c27c25) SHA1(ac983db30edb4c4b71f04359cd22c663940435f5) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0060.key", 0x0000, 0x2000, CRC(f4ee940f) SHA1(13cca3f19bd9761d484185a3476bec3c8c18efcf) ) ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ @@ -2131,7 +2185,7 @@ ROM_START( afighter ) ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ ROM_LOAD( "epr-10284.12", 0x00000, 0x8000, CRC(8ff09116) SHA1(8b99b6d2499897cfbd037a7e7cf5bc53bce8a63a) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0018.key", 0x0000, 0x2000, CRC(fee04be8) SHA1(c58d78299ef4cede517be823a8a8a90e46c6ba0d) ) ROM_END @@ -2211,7 +2265,7 @@ ROM_START( alexkidd1 ) ROM_LOAD( "epr-10435.1", 0x0000, 0x8000, CRC(ad89f6e3) SHA1(812a132142065b0fe13b5f0ac534b6d8830ba102) ) ROM_LOAD( "epr-10436.2", 0x8000, 0x8000, CRC(96c76613) SHA1(fe3e4e649fd2cb2453eec0c92015bd54b3b9a1b5) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0021.key", 0x0000, 0x2000, BAD_DUMP CRC(85be8eac) SHA1(3857bf43b3b0ab60c04223e2393d99504a730d73) ) ROM_END @@ -2265,7 +2319,7 @@ ROM_START( aliensyn5 ) ROM_LOAD( "epr-10707.2", 0x08000, 0x8000, CRC(800c1d82) SHA1(aac4123bd35f87da09264649f4cf8326b2ba3cb8) ) ROM_LOAD( "epr-10708.4", 0x10000, 0x8000, CRC(5921ef52) SHA1(eff9978361692e6e60a9c6caf5740dd6182cfe4a) ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0037.key", 0x0000, 0x2000, CRC(49e882e5) SHA1(29d87af8fc775b22a9a546c112f8f5e7f700ac1a) ) ROM_END @@ -2319,7 +2373,7 @@ ROM_START( aliensyn2 ) ROM_LOAD( "10707", 0x08000, 0x8000, CRC(800c1d82) SHA1(aac4123bd35f87da09264649f4cf8326b2ba3cb8) ) ROM_LOAD( "10708", 0x10000, 0x8000, CRC(5921ef52) SHA1(eff9978361692e6e60a9c6caf5740dd6182cfe4a) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0033.key", 0x0000, 0x2000, CRC(49e882e5) SHA1(29d87af8fc775b22a9a546c112f8f5e7f700ac1a) ) ROM_END @@ -2370,7 +2424,7 @@ ROM_START( aliensynjo ) ROM_LOAD( "epr-10707.2", 0x08000, 0x8000, CRC(800c1d82) SHA1(aac4123bd35f87da09264649f4cf8326b2ba3cb8) ) ROM_LOAD( "epr-10708.4", 0x10000, 0x8000, CRC(5921ef52) SHA1(eff9978361692e6e60a9c6caf5740dd6182cfe4a) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0033.key", 0x0000, 0x2000, CRC(49e882e5) SHA1(29d87af8fc775b22a9a546c112f8f5e7f700ac1a) ) ROM_END @@ -2617,7 +2671,7 @@ ROM_START( passsht16a ) ROM_LOAD16_BYTE( "epr-11833.43", 0x000000, 0x10000, CRC(5eb1405c) SHA1(0a68d3fcc074475d38f999c93082d4a9dff0f19a) ) ROM_LOAD16_BYTE( "epr-11832.26", 0x000001, 0x10000, CRC(718a3fe4) SHA1(bd6844c53ce3b64b113795360175df92d095b467) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0071.key", 0x0000, 0x2000, CRC(c69949ec) SHA1(1c63f42404ee1d8333e734e892b1c4cac0cb440e) ) ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ @@ -2884,7 +2938,7 @@ ROM_START( sdi ) ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ ROM_LOAD( "epr-10759.12", 0x0000, 0x8000, CRC(d7f9649f) SHA1(ce4abe7dd7e33da048569d7817063345fab75ea7) ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0027.key", 0x0000, 0x2000, BAD_DUMP CRC(9a5307b2) SHA1(2fcc576ed95b96ff6ea71252c3fab33b8b3fc1f5) ) ROM_END @@ -3038,7 +3092,7 @@ ROM_START( shinobi1 ) ROM_LOAD16_BYTE( "epr-11263.43", 0x020000, 0x10000, CRC(a2a620bd) SHA1(f8b135ce14d6c5eac5e40ddfd5ad2f1e6f2bc7a6) ) ROM_LOAD16_BYTE( "epr-11261.25", 0x020001, 0x10000, CRC(a3ceda52) SHA1(97a1c52a162fb1d43b3f8f16613b70ce582a8d26) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0050.key", 0x0000, 0x2000, CRC(82c39ced) SHA1(5490237ff7f20f9ebfa3e46eedd5afd4f1c28548) ) ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ @@ -3135,7 +3189,7 @@ ROM_START( sjryuko1 ) ROM_LOAD( "epr-12230.4", 0x10000, 0x8000, CRC(d0f61fd4) SHA1(e6f29459d7395122f26957f56e38926aebd9004c) ) ROM_LOAD( "epr-12231.5", 0x18000, 0x8000, CRC(780bdc57) SHA1(8c859043bba389292604385b88c743728180f9a9) ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-5021.key", 0x0000, 0x2000, BAD_DUMP CRC(4a3422e4) SHA1(69a32a6987ff2481f6d6cbbe399269a2461b8bad) ) ROM_END @@ -3179,7 +3233,7 @@ ROM_START( tetris ) ROM_LOAD16_BYTE( "epr-12201.rom", 0x000000, 0x8000, CRC(338e9b51) SHA1(f56a1124c963d4ad72a806b26f9aa906aaa37d2b) ) ROM_LOAD16_BYTE( "epr-12200.rom", 0x000001, 0x8000, CRC(fb058779) SHA1(0045985ea943ebc7e44bd95127c5e5212c2821e8) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0093.key", 0x0000, 0x2000, CRC(e0064442) SHA1(cc70b1a2c66729c4540dabd6a24a5f5615beedcd) ) ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ @@ -3204,7 +3258,7 @@ ROM_START( tetris3 ) ROM_LOAD16_BYTE( "epr-12201a.43", 0x000000, 0x8000, CRC(9250e5cf) SHA1(e848a8279ce35f516754eec33b3b443d2e819eaa) ) ROM_LOAD16_BYTE( "epr-12200a.26", 0x000001, 0x8000, CRC(85d4b0ff) SHA1(f9d8e1ebb0c02a6c3c0b0acc78a6bea081ffc6f7) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0093a.key", 0x0000, 0x2000, CRC(7ca4a8ee) SHA1(c85763b7c5d606ee72181d9baba7de5e2c457fd8) ) ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ @@ -3304,7 +3358,7 @@ ROM_START( timescan1 ) ROM_REGION( 0x08000, "n7751data", 0 ) /* 7751 sound data */ ROM_LOAD( "epr-10547.1", 0x0000, 0x8000, CRC(d24ffc4b) SHA1(3b250e1f026664f7a37f65d1c1a07381e88f11e8) ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0024.key", 0x0000, 0x2000, BAD_DUMP CRC(ee42ec18) SHA1(cb65dd681f38ce20440ddcb01a935c2c8eecc77f) ) ROM_END @@ -3322,7 +3376,7 @@ ROM_START( wb31 ) ROM_LOAD16_BYTE( "epr-12085.bin", 0x020000, 0x10000, CRC(0962098b) SHA1(150fc439dd5e773bef706f058abdb4d2ec44e355) ) ROM_LOAD16_BYTE( "epr-12083.bin", 0x020001, 0x10000, CRC(3d631a8e) SHA1(4940ff6cf380fb914876ade39ea37f42b79bf11d) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0084.key", 0x0000, 0x2000, CRC(2c58dafa) SHA1(24d06970eda896fdd5e3486132bd19834f7d3659) ) ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ @@ -3391,7 +3445,7 @@ ROM_START( wb35 ) ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ ROM_LOAD( "epr-12089.12", 0x0000, 0x8000, CRC(8321eb0b) SHA1(61cf95833c0aa38e35fc18db39d4ec74e4aaf01e) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-wb35.key", 0x0000, 0x2000, BAD_DUMP CRC(8a2e0575) SHA1(e43a2c8ca102ec38871067685a860da53d748765) ) ROM_END @@ -3428,7 +3482,7 @@ ROM_START( wb35a ) ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ ROM_LOAD( "epr-12089.12", 0x0000, 0x8000, CRC(8321eb0b) SHA1(61cf95833c0aa38e35fc18db39d4ec74e4aaf01e) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-wb35.key", 0x0000, 0x2000, BAD_DUMP CRC(8a2e0575) SHA1(e43a2c8ca102ec38871067685a860da53d748765) ) ROM_END @@ -3447,30 +3501,16 @@ static DRIVER_INIT( generic_16a ) static DRIVER_INIT( aceattaa ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); system16a_generic_init(machine); state->m_custom_io_r = aceattaa_custom_io_r; } -static DRIVER_INIT( fd1089a_16a ) -{ - system16a_generic_init(machine); - fd1089a_decrypt(machine); -} - - -static DRIVER_INIT( fd1089b_16a ) -{ - system16a_generic_init(machine); - fd1089b_decrypt(machine); -} - - static DRIVER_INIT( dumpmtmt ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); system16a_generic_init(machine); state->m_i8751_vblank_hook = dumpmtmt_i8751_sim; @@ -3479,7 +3519,7 @@ static DRIVER_INIT( dumpmtmt ) static DRIVER_INIT( mjleague ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); system16a_generic_init(machine); state->m_custom_io_r = mjleague_custom_io_r; @@ -3487,7 +3527,7 @@ static DRIVER_INIT( mjleague ) static DRIVER_INIT( passsht16a ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); system16a_generic_init(machine); state->m_custom_io_r = passsht16a_custom_io_r; @@ -3495,7 +3535,7 @@ static DRIVER_INIT( passsht16a ) static DRIVER_INIT( quartet ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); system16a_generic_init(machine); state->m_i8751_vblank_hook = quartet_i8751_sim; @@ -3512,20 +3552,18 @@ static DRIVER_INIT( fantzonep ) static DRIVER_INIT( sdi ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); system16a_generic_init(machine); - fd1089b_decrypt(machine); state->m_custom_io_r = sdi_custom_io_r; } static DRIVER_INIT( sjryukoa ) { - segas1x_state *state = machine.driver_data(); + segas16a_state *state = machine.driver_data(); system16a_generic_init(machine); - fd1089b_decrypt(machine); state->m_custom_io_r = sjryuko_custom_io_r; state->m_lamp_changed_w = sjryuko_lamp_changed_w; } @@ -3549,26 +3587,26 @@ GAME( 1986, quartet2, quartet, system16a_8751, quart2, generic_16a, ROT GAME( 1986, quartet2a, quartet, system16a, quart2, generic_16a, ROT0, "Sega", "Quartet 2 (unprotected)", GAME_SUPPORTS_SAVE ) /* System 16A */ -GAME( 1987, aliensyn5, aliensyn, system16a, aliensyn, fd1089b_16a, ROT0, "Sega", "Alien Syndrome (set 5, System 16A, FD1089B 317-0037)", GAME_SUPPORTS_SAVE ) -GAME( 1987, aliensyn2, aliensyn, system16a, aliensyn, fd1089a_16a, ROT0, "Sega", "Alien Syndrome (set 2, System 16A, FD1089A 317-0033)", GAME_SUPPORTS_SAVE ) -GAME( 1987, aliensynjo, aliensyn, system16a, aliensynj, fd1089a_16a, ROT0, "Sega", "Alien Syndrome (set 1, Japan, old, System 16A, FD1089A 317-0033)", GAME_SUPPORTS_SAVE ) -GAME( 1988, aceattaca, aceattac, system16a, aceattaa, aceattaa, ROT270, "Sega", "Ace Attacker (Japan, System 16A, FD1094 317-0060)", GAME_SUPPORTS_SAVE ) -GAME( 1986, afighter, 0, system16a_no7751, afighter, fd1089a_16a, ROT270, "Sega", "Action Fighter (FD1089A 317-0018)", GAME_SUPPORTS_SAVE ) -GAME( 1986, alexkidd, 0, system16a, alexkidd, generic_16a, ROT0, "Sega", "Alex Kidd: The Lost Stars (set 2, unprotected)", GAME_SUPPORTS_SAVE ) -GAME( 1986, alexkidd1, alexkidd, system16a, alexkidd, fd1089a_16a, ROT0, "Sega", "Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021)", GAME_SUPPORTS_SAVE ) -GAME( 1986, fantzone, 0, system16a_no7751, fantzone, generic_16a, ROT0, "Sega", "Fantasy Zone (Rev A, unprotected)", GAME_SUPPORTS_SAVE ) -GAME( 1986, fantzone1, fantzone, system16a_no7751, fantzone, generic_16a, ROT0, "Sega", "Fantasy Zone (unprotected)", GAME_SUPPORTS_SAVE ) -GAME( 1986, fantzonep, fantzone, system16a_no7751, fantzone, fantzonep, ROT0, "Sega", "Fantasy Zone (317-5000)", GAME_SUPPORTS_SAVE ) -GAME( 1988, passsht16a, passsht, system16a, passsht16a, passsht16a, ROT270, "Sega", "Passing Shot (Japan, 4 Players, System 16A, FD1094 317-0071)", GAME_SUPPORTS_SAVE ) -GAME( 1987, sdi, 0, system16a_no7751, sdi, sdi, ROT0, "Sega", "SDI - Strategic Defense Initiative (Japan, old, System 16A, FD1089B 317-0027)", GAME_SUPPORTS_SAVE ) -GAME( 1987, shinobi, 0, system16a, shinobi, generic_16a, ROT0, "Sega", "Shinobi (set 6, System 16A, unprotected)", GAME_SUPPORTS_SAVE ) -GAME( 1987, shinobi1, shinobi, system16a, shinobi, generic_16a, ROT0, "Sega", "Shinobi (set 1, System 16A, FD1094 317-0050)", GAME_SUPPORTS_SAVE ) -GAME( 1987, shinobls, shinobi, system16a, shinobi, generic_16a, ROT0, "bootleg (Star)", "Shinobi (Star bootleg, System 16A)", GAME_SUPPORTS_SAVE ) -GAME( 1987, shinoblb, shinobi, system16a, shinobi, generic_16a, ROT0, "bootleg (Beta)", "Shinobi (Beta bootleg)", GAME_SUPPORTS_SAVE ) // should have different sound hw? using original ATM -GAME( 1987, sjryuko1, sjryuko, system16a, sjryuko, sjryukoa, ROT0, "White Board", "Sukeban Jansi Ryuko (set 1, System 16A, FD1089B 317-5021)", GAME_SUPPORTS_SAVE ) -GAME( 1988, tetris, 0, system16a_no7751, tetris, generic_16a, ROT0, "Sega", "Tetris (set 4, Japan, System 16A, FD1094 317-0093)", GAME_SUPPORTS_SAVE ) -GAME( 1988, tetris3, tetris, system16a_no7751, tetris, generic_16a, ROT0, "Sega", "Tetris (set 3, Japan, System 16A, FD1094 317-0093a)", GAME_SUPPORTS_SAVE ) -GAME( 1987, timescan1, timescan, system16a, timescan, fd1089b_16a, ROT270, "Sega", "Time Scanner (set 1, System 16A, FD1089B 317-0024)", GAME_SUPPORTS_SAVE ) -GAME( 1988, wb31, wb3, system16a_no7751, wb3, generic_16a, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 1, System 16A, FD1094 317-0084)", GAME_SUPPORTS_SAVE ) -GAME( 1988, wb35, wb3, system16a_no7751, wb3, fd1089a_16a, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 5, System 16A, FD1089A 317-xxxx, bad dump?)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) -GAME( 1988, wb35a, wb3, system16a_no7751, wb3, fd1089a_16a, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 6, System 16A, FD1089A 317-xxxx)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) +GAME( 1987, aliensyn5, aliensyn, system16a_fd1089b, aliensyn, generic_16a, ROT0, "Sega", "Alien Syndrome (set 5, System 16A, FD1089B 317-0037)", GAME_SUPPORTS_SAVE ) +GAME( 1987, aliensyn2, aliensyn, system16a_fd1089a, aliensyn, generic_16a, ROT0, "Sega", "Alien Syndrome (set 2, System 16A, FD1089A 317-0033)", GAME_SUPPORTS_SAVE ) +GAME( 1987, aliensynjo, aliensyn, system16a_fd1089a, aliensynj, generic_16a, ROT0, "Sega", "Alien Syndrome (set 1, Japan, old, System 16A, FD1089A 317-0033)", GAME_SUPPORTS_SAVE ) +GAME( 1988, aceattaca, aceattac, system16a_fd1094, aceattaa, aceattaa, ROT270, "Sega", "Ace Attacker (Japan, System 16A, FD1094 317-0060)", GAME_SUPPORTS_SAVE ) +GAME( 1986, afighter, 0, system16a_fd1089a_no7751, afighter, generic_16a, ROT270, "Sega", "Action Fighter (FD1089A 317-0018)", GAME_SUPPORTS_SAVE ) +GAME( 1986, alexkidd, 0, system16a, alexkidd, generic_16a, ROT0, "Sega", "Alex Kidd: The Lost Stars (set 2, unprotected)", GAME_SUPPORTS_SAVE ) +GAME( 1986, alexkidd1, alexkidd, system16a_fd1089a, alexkidd, generic_16a, ROT0, "Sega", "Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021)", GAME_SUPPORTS_SAVE ) +GAME( 1986, fantzone, 0, system16a_no7751, fantzone, generic_16a, ROT0, "Sega", "Fantasy Zone (Rev A, unprotected)", GAME_SUPPORTS_SAVE ) +GAME( 1986, fantzone1, fantzone, system16a_no7751, fantzone, generic_16a, ROT0, "Sega", "Fantasy Zone (unprotected)", GAME_SUPPORTS_SAVE ) +GAME( 1986, fantzonep, fantzone, system16a_no7751, fantzone, fantzonep, ROT0, "Sega", "Fantasy Zone (317-5000)", GAME_SUPPORTS_SAVE ) +GAME( 1988, passsht16a, passsht, system16a_fd1094, passsht16a, passsht16a, ROT270, "Sega", "Passing Shot (Japan, 4 Players, System 16A, FD1094 317-0071)", GAME_SUPPORTS_SAVE ) +GAME( 1987, sdi, 0, system16a_fd1089b_no7751, sdi, sdi, ROT0, "Sega", "SDI - Strategic Defense Initiative (Japan, old, System 16A, FD1089B 317-0027)", GAME_SUPPORTS_SAVE ) +GAME( 1987, shinobi, 0, system16a, shinobi, generic_16a, ROT0, "Sega", "Shinobi (set 6, System 16A, unprotected)", GAME_SUPPORTS_SAVE ) +GAME( 1987, shinobi1, shinobi, system16a_fd1094, shinobi, generic_16a, ROT0, "Sega", "Shinobi (set 1, System 16A, FD1094 317-0050)", GAME_SUPPORTS_SAVE ) +GAME( 1987, shinobls, shinobi, system16a, shinobi, generic_16a, ROT0, "bootleg (Star)", "Shinobi (Star bootleg, System 16A)", GAME_SUPPORTS_SAVE ) +GAME( 1987, shinoblb, shinobi, system16a, shinobi, generic_16a, ROT0, "bootleg (Beta)", "Shinobi (Beta bootleg)", GAME_SUPPORTS_SAVE ) // should have different sound hw? using original ATM +GAME( 1987, sjryuko1, sjryuko, system16a_fd1089b, sjryuko, sjryukoa, ROT0, "White Board", "Sukeban Jansi Ryuko (set 1, System 16A, FD1089B 317-5021)", GAME_SUPPORTS_SAVE ) +GAME( 1988, tetris, 0, system16a_fd1094_no7751, tetris, generic_16a, ROT0, "Sega", "Tetris (set 4, Japan, System 16A, FD1094 317-0093)", GAME_SUPPORTS_SAVE ) +GAME( 1988, tetris3, tetris, system16a_fd1094_no7751, tetris, generic_16a, ROT0, "Sega", "Tetris (set 3, Japan, System 16A, FD1094 317-0093a)", GAME_SUPPORTS_SAVE ) +GAME( 1987, timescan1, timescan, system16a_fd1089b, timescan, generic_16a, ROT270, "Sega", "Time Scanner (set 1, System 16A, FD1089B 317-0024)", GAME_SUPPORTS_SAVE ) +GAME( 1988, wb31, wb3, system16a_fd1094_no7751, wb3, generic_16a, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 1, System 16A, FD1094 317-0084)", GAME_SUPPORTS_SAVE ) +GAME( 1988, wb35, wb3, system16a_fd1089a_no7751, wb3, generic_16a, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 5, System 16A, FD1089A 317-xxxx, bad dump?)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) +GAME( 1988, wb35a, wb3, system16a_fd1089a_no7751, wb3, generic_16a, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 6, System 16A, FD1089A 317-xxxx)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/segas16b.c b/src/mame/drivers/segas16b.c index f633cc2297a..55437b0030b 100644 --- a/src/mame/drivers/segas16b.c +++ b/src/mame/drivers/segas16b.c @@ -2,6 +2,37 @@ Sega System 16B hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + **************************************************************************** Known bugs: @@ -867,323 +898,221 @@ CPU - 317-0092 |-------------------------------------------------------------- ***************************************************************************/ +#define MODERN_DRIVER_INIT #include "emu.h" -#include "cpu/z80/z80.h" -#include "cpu/m68000/m68000.h" -#include "cpu/mcs51/mcs51.h" #include "includes/segas16.h" #include "machine/segaic16.h" -#include "machine/fd1089.h" -#include "machine/fd1094.h" #include "machine/mc8123.h" -#include "machine/nvram.h" -#include "sound/2151intf.h" -#include "sound/2413intf.h" -#include "sound/upd7759.h" -#include "video/segaic16.h" #include "includes/segaipt.h" -/************************************* - * - * Constants - * - *************************************/ +//************************************************************************** +// CONSTANTS +//************************************************************************** #define MASTER_CLOCK_10MHz XTAL_10MHz #define MASTER_CLOCK_8MHz XTAL_8MHz #define MASTER_CLOCK_25MHz XTAL_25_1748MHz -#define ROM_BOARD_171_5358_SMALL (0) /* 171-5358 with smaller ROMs */ -#define ROM_BOARD_171_5358 (1) /* 171-5358 */ -#define ROM_BOARD_171_5521 (2) /* 171-5521 */ -#define ROM_BOARD_171_5704 (2) /* 171-5704 - don't know any diff between this and 171-5521 */ -#define ROM_BOARD_ATOMICP (3) /* (custom Korean) */ -#define ROM_BOARD_171_5797 (4) /* 171-5797 */ -#define ROM_BOARD_171_5704_EXTRA_RAM (5) /* System 16C */ -/************************************* - * - * Statics - * - *************************************/ +//************************************************************************** +// MEMORY MAPPING +//************************************************************************** -static UINT16 *workram; +//------------------------------------------------- +// memory_mapper - callback to handle mapping +// requests +//------------------------------------------------- - - -/************************************* - * - * Prototypes - * - *************************************/ - -static READ16_HANDLER( misc_io_r ); -static WRITE16_HANDLER( misc_io_w ); -static WRITE16_HANDLER( rom_5704_bank_w ); -static READ16_HANDLER( rom_5797_bank_math_r ); -static WRITE16_HANDLER( rom_5797_bank_math_w ); -static READ16_HANDLER( unknown_rgn2_r ); -static WRITE16_HANDLER( unknown_rgn2_w ); -static WRITE16_HANDLER( atomicp_sound_w ); - - - -/************************************* - * - * Memory mapping tables - * - *************************************/ - -static const segaic16_memory_map_entry rom_171_5358_info_small[] = +void segas16b_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index) { - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x01000, 0xfff000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x20000, 0xfe0000, 0x20000, FUNC_NULL, "bank15", FUNC_NULL, NULL, NULL, "ROM 2" }, - { 0x25/2, 0x00000, 0x20000, 0xfe0000, 0x10000, FUNC_NULL, "bank16", FUNC_NULL, NULL, NULL, "ROM 1" }, - { 0x21/2, 0x00000, 0x20000, 0xfe0000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry rom_171_5358_info[] = -{ - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x01000, 0xfff000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x20000, 0xfe0000, 0x40000, FUNC_NULL, "bank15", FUNC_NULL, NULL, NULL, "ROM 2" }, - { 0x25/2, 0x00000, 0x20000, 0xfe0000, 0x20000, FUNC_NULL, "bank16", FUNC_NULL, NULL, NULL, "ROM 1" }, - { 0x21/2, 0x00000, 0x20000, 0xfe0000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry rom_171_5704_info[] = -{ - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x01000, 0xfff000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x10000, 0xff0000, ~0, FUNC_NULL, NULL, FUNC(rom_5704_bank_w), NULL, NULL, "tile bank" }, - { 0x25/2, 0x00000, 0x80000, 0xfc0000, 0x80000, FUNC_NULL, "bank16", FUNC_NULL, NULL, NULL, "ROM 1" }, - { 0x21/2, 0x00000, 0x80000, 0xfc0000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry rom_171_5704_extra_ram_info[] = -{ - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x01000, 0xfff000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x40000, 0xfc0000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x10000, 0xff0000, ~0, FUNC_NULL, NULL, FUNC(rom_5704_bank_w), NULL, NULL, "tile bank" }, - { 0x25/2, 0x00000, 0x80000, 0xfc0000, 0x80000, FUNC_NULL, "bank16", FUNC_NULL, NULL, NULL, "ROM 1" }, - { 0x21/2, 0x00000, 0x80000, 0xfc0000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry rom_atomicp_info[] = -{ - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x01000, 0xfff000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x10000, 0xff0000, ~0, FUNC_NULL, NULL, FUNC(rom_5704_bank_w), NULL, NULL, "tile bank" }, - { 0x25/2, 0x00000, 0x10000, 0xff0000, ~0, FUNC_NULL, NULL, FUNC(atomicp_sound_w), NULL, NULL, "sound" }, - { 0x21/2, 0x00000, 0x80000, 0xfc0000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry rom_171_5797_info[] = -{ - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x01000, 0xfff000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x10000, 0xff0000, ~0, FUNC(unknown_rgn2_r), NULL, FUNC(unknown_rgn2_w), NULL, NULL, "???" }, - { 0x25/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(rom_5797_bank_math_r), NULL, FUNC(rom_5797_bank_math_w), NULL, NULL, "tile bank/math" }, - { 0x21/2, 0x00000, 0x80000, 0xf80000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry *const region_info_list[] = -{ - &rom_171_5358_info_small[0], - &rom_171_5358_info[0], - &rom_171_5704_info[0], - &rom_atomicp_info[0], - &rom_171_5797_info[0], - &rom_171_5704_extra_ram_info[0] -}; - - - -/************************************* - * - * Configuration - * - *************************************/ - -static void sound_w(running_machine &machine, UINT8 data) -{ - segas1x_state *state = machine.driver_data(); - - if (state->m_soundcpu != NULL) + switch (index) { - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); - state->soundlatch_byte_w(*space, 0, data & 0xff); - device_set_input_line(state->m_soundcpu, 0, HOLD_LINE); - } -} - -static void system16b_common_init(running_machine& machine, int _rom_board) -{ - segas1x_state *state = machine.driver_data(); - - /* set the ROM board */ - state->m_rom_board = _rom_board; - - /* reset the custom handlers and other pointers */ - state->m_custom_io_r = NULL; - state->m_custom_io_w = NULL; - state->m_i8751_vblank_hook = NULL; - state->m_i8751_initial_config = NULL; - state->m_disable_screen_blanking = 0; - - state->m_maincpu = machine.device("maincpu"); - state->m_soundcpu = machine.device("soundcpu"); - state->m_mcu = machine.device("mcu"); - state->m_ymsnd = machine.device("ymsnd"); - state->m_315_5248_1 = machine.device("315_5248"); - state->m_315_5250_1 = machine.device("315_5250_1"); - state->m_315_5250_2 = machine.device("315_5250_2"); - - state->save_item(NAME(state->m_disable_screen_blanking)); - state->save_item(NAME(state->m_mj_input_num)); - state->save_item(NAME(state->m_mj_last_val)); - state->save_item(NAME(state->m_hwc_input_value)); - state->save_item(NAME(state->m_atomicp_sound_divisor)); - -} - - -static void system16b_generic_init(running_machine &machine, int _rom_board) -{ - segas1x_state *state = machine.driver_data(); - int workram_size; - - system16b_common_init(machine, _rom_board); - - /* System 16C board has more workram */ - if (_rom_board == ROM_BOARD_171_5704_EXTRA_RAM) - workram_size = 0x40000; - else - workram_size = 0x04000; - - /* allocate memory for regions not autmatically assigned */ - segaic16_spriteram_0 = auto_alloc_array(machine, UINT16, 0x00800 / 2); - segaic16_paletteram = auto_alloc_array(machine, UINT16, 0x01000 / 2); - segaic16_tileram_0 = auto_alloc_array(machine, UINT16, 0x10000 / 2); - segaic16_textram_0 = auto_alloc_array(machine, UINT16, 0x01000 / 2); - workram = auto_alloc_array(machine, UINT16, workram_size / 2); - - /* init the memory mapper */ - segaic16_memory_mapper_init(machine.device("maincpu"), region_info_list[state->m_rom_board], sound_w, NULL); - - /* init the FD1094 */ - fd1094_driver_init(machine, "maincpu", segaic16_memory_mapper_set_decrypted); - - machine.device("nvram")->set_base(workram, workram_size); - - state_save_register_global_pointer(machine, segaic16_spriteram_0, 0x00800/2); - state_save_register_global_pointer(machine, segaic16_paletteram, 0x01000/2); - state_save_register_global_pointer(machine, segaic16_tileram_0, 0x10000/2); - state_save_register_global_pointer(machine, segaic16_textram_0, 0x01000/2); - state_save_register_global_pointer(machine, workram, workram_size/2); -} - - -static TIMER_CALLBACK( suspend_i8751 ) -{ - segas1x_state *state = machine.driver_data(); - device_suspend(state->m_mcu, SUSPEND_REASON_DISABLE, 1); -} - - - -/************************************* - * - * Initialization & interrupts - * - *************************************/ - -static TIMER_CALLBACK( boost_interleave ) -{ - machine.scheduler().boost_interleave(attotime::zero, attotime::from_msec(10)); -} - - -static MACHINE_RESET( system16b ) -{ - segas1x_state *state = machine.driver_data(); - static const UINT8 default_banklist[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - static const UINT8 alternate_banklist[] = { 0,255,255,255, 255,255,255,3, 255,255,255,2, 255,1,0,255 }; - int i; - - segaic16_memory_mapper_reset(machine); - if (state->m_i8751_initial_config != NULL) - segaic16_memory_mapper_config(machine, state->m_i8751_initial_config); - segaic16_tilemap_reset(machine, 0); - - fd1094_machine_init(machine.device("maincpu")); - - /* if we have a fake i8751 handler, disable the actual 8751, otherwise crank the interleave */ - if (state->m_i8751_vblank_hook != NULL) - machine.scheduler().synchronize(FUNC(suspend_i8751)); - else - machine.scheduler().synchronize(FUNC(boost_interleave)); - - /* configure sprite banks */ - for (i = 0; i < 16; i++) - segaic16_sprites_set_bank(machine, 0, i, (state->m_rom_board == ROM_BOARD_171_5358 || state->m_rom_board == ROM_BOARD_171_5358_SMALL) ? alternate_banklist[i] : default_banklist[i]); -} - - -static TIMER_DEVICE_CALLBACK( atomicp_sound_irq ) -{ - segas1x_state *state = timer.machine().driver_data(); - - if (++state->m_atomicp_sound_count >= state->m_atomicp_sound_divisor) - { - device_set_input_line(state->m_maincpu, 2, HOLD_LINE); - state->m_atomicp_sound_count = 0; + case 7: // 16k of I/O space + mapper.map_as_handler(0x00000, 0x04000, 0xffc000, m_custom_io_r, m_custom_io_w); + break; + + case 6: // 4k of paletteram + mapper.map_as_ram(0x00000, 0x01000, 0xfff000, "paletteram", write16_delegate(FUNC(segas16b_state::legacy_wrapper), this)); + break; + + case 5: // 64k of tileram + 4k of textram + mapper.map_as_ram(0x00000, 0x10000, 0xfe0000, "tileram", write16_delegate(FUNC(segas16b_state::legacy_wrapper), this)); + mapper.map_as_ram(0x10000, 0x01000, 0xfef000, "textram", write16_delegate(FUNC(segas16b_state::legacy_wrapper), this)); + break; + + case 4: // 2k of spriteram + mapper.map_as_ram(0x00000, 0x00800, 0xfff800, "spriteram", write16_delegate()); + break; + + case 3: // 16k or 256k of work RAM + mapper.map_as_ram(0x00000, m_workram.bytes(), ~(m_workram.bytes() - 1), "workram", write16_delegate()); + break; + + case 2: // 3rd ROM base, or board-specific banking + switch (m_romboard) + { + case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom2base", 0x20000, write16_delegate()); break; + case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom2base", 0x40000, write16_delegate()); break; + case ROM_BOARD_171_5521: + case ROM_BOARD_171_5704: mapper.map_as_handler(0x00000, 0x10000, 0xff0000, read16_delegate(), write16_delegate(FUNC(segas16b_state::rom_5704_bank_w), this)); break; + case ROM_BOARD_171_5797: mapper.map_as_handler(0x00000, 0x10000, 0xff0000, read16_delegate(FUNC(segas16b_state::unknown_rgn2_r), this), write16_delegate(FUNC(segas16b_state::unknown_rgn2_w), this)); break; + case ROM_BOARD_KOREAN: break; + default: assert(false); + } + break; + + case 1: // 2nd ROM base, banking & math, or sound for Korean games + switch (m_romboard) + { + case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom1base", 0x10000, write16_delegate()); break; + case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom1base", 0x20000, write16_delegate()); break; + case ROM_BOARD_171_5521: + case ROM_BOARD_171_5704: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom1base", 0x40000, write16_delegate()); break; + case ROM_BOARD_KOREAN: mapper.map_as_handler(0x00000, 0x10000, 0xff0000, read16_delegate(), write16_delegate(FUNC(segas16b_state::atomicp_sound_w), this)); break; + case ROM_BOARD_171_5797: mapper.map_as_handler(0x00000, 0x04000, 0xffc000, read16_delegate(FUNC(segas16b_state::rom_5797_bank_math_r), this), write16_delegate(FUNC(segas16b_state::rom_5797_bank_math_w), this)); break; + default: assert(false); + } + break; + + case 0: // 1st ROM base + switch (m_romboard) + { + case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom0base", 0x00000, write16_delegate()); break; + case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom0base", 0x00000, write16_delegate()); break; + case ROM_BOARD_171_5521: + case ROM_BOARD_171_5704: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom0base", 0000000, write16_delegate()); break; + case ROM_BOARD_KOREAN: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom0base", 0000000, write16_delegate()); break; + case ROM_BOARD_171_5797: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0000000, write16_delegate()); break; + default: assert(false); + } + break; } } +//------------------------------------------------- +// mapper_sound_r - sound port read from the +// memory mapper chip +//------------------------------------------------- -/************************************* - * - * I/O space - * - *************************************/ +UINT8 segas16b_state::mapper_sound_r() +{ + return 0; +} -static READ16_HANDLER( standard_io_r ) + +//------------------------------------------------- +// mapper_sound_w - sound port write from the +// memory mapper chip +//------------------------------------------------- + +void segas16b_state::mapper_sound_w(UINT8 data) +{ + soundlatch_write(data & 0xff); + if (m_soundcpu != NULL) + m_soundcpu->set_input_line(0, HOLD_LINE); +} + + + +//************************************************************************** +// MAIN CPU READ/WRITE HANDLERS +//************************************************************************** + +//------------------------------------------------- +// rom_5704_bank_w - ROM board 5704 tile bank +// selection +//------------------------------------------------- + +WRITE16_MEMBER( segas16b_state::rom_5704_bank_w ) +{ + if (ACCESSING_BITS_0_7) + segaic16_tilemap_set_bank(machine(), 0, offset & 1, data & 7); +} + + +//------------------------------------------------- +// rom_5797_bank_math_r - ROM board 5797 custom +// math chip reads +//------------------------------------------------- + +READ16_MEMBER( segas16b_state::rom_5797_bank_math_r ) +{ + offset &= 0x1fff; + switch (offset & (0x3000/2)) + { + case 0x0000/2: + // multiply registers + return segaic16_multiply_r(m_315_5248_1, offset & 3, mem_mask); + + case 0x1000/2: + // compare registers + return segaic16_compare_timer_r(m_315_5250_1, offset & 7, mem_mask); + } + return segaic16_open_bus_r(&space, 0, mem_mask); +} + + +//------------------------------------------------- +// rom_5797_bank_math_r - ROM board 5797 custom +// math chip writes, plus tile bank selection +//------------------------------------------------- + +WRITE16_MEMBER( segas16b_state::rom_5797_bank_math_w ) +{ + offset &= 0x1fff; + switch (offset & (0x3000/2)) + { + case 0x0000/2: + // multiply registers + segaic16_multiply_w(m_315_5248_1, offset & 3, data, mem_mask); + break; + + case 0x1000/2: + // compare registers + segaic16_compare_timer_w(m_315_5250_1, offset & 7, data, mem_mask); + break; + + case 0x2000/2: + if (ACCESSING_BITS_0_7) + segaic16_tilemap_set_bank(machine(), 0, offset & 1, data & 7); + break; + } +} + + +//------------------------------------------------- +// unknown_rgn2_r - unknown region 2 reads; +// for now treat as a second compare/timer chip +//------------------------------------------------- + +READ16_MEMBER( segas16b_state::unknown_rgn2_r ) +{ + logerror("Region 2: read from %04X\n", offset * 2); + return segaic16_compare_timer_r(m_315_5250_2, offset & 7, mem_mask); +} + + +//------------------------------------------------- +// unknown_rgn2_w - unknown region 2 writes; +// for now treat as a second compare/timer chip +//------------------------------------------------- + +WRITE16_MEMBER( segas16b_state::unknown_rgn2_w ) +{ + logerror("Region 2: write to %04X = %04X & %04X\n", offset * 2, data, mem_mask); + segaic16_compare_timer_w(m_315_5250_2, offset & 7, data, mem_mask); +} + + +//------------------------------------------------- +// standard_io_r - default I/O handler for reads +//------------------------------------------------- + +READ16_MEMBER( segas16b_state::standard_io_r ) { offset &= 0x1fff; switch (offset & (0x3000/2)) @@ -1191,181 +1120,96 @@ static READ16_HANDLER( standard_io_r ) case 0x1000/2: { static const char *const sysports[] = { "SERVICE", "P1", "UNUSED", "P2" }; - return space->machine().root_device().ioport(sysports[offset & 3])->read(); + return ioport(sysports[offset & 3])->read(); } case 0x2000/2: - return space->machine().root_device().ioport((offset & 1) ? "DSW1" : "DSW2")->read(); + return ioport((offset & 1) ? "DSW1" : "DSW2")->read(); } - logerror("%06X:standard_io_r - unknown read access to address %04X\n", cpu_get_pc(&space->device()), offset * 2); - return segaic16_open_bus_r(space, 0, mem_mask); + logerror("%06X:standard_io_r - unknown read access to address %04X\n", cpu_get_pc(&space.device()), offset * 2); + return segaic16_open_bus_r(&space, 0, mem_mask); } -static WRITE16_HANDLER( standard_io_w ) -{ - segas1x_state *state = space->machine().driver_data(); +//------------------------------------------------- +// standard_io_w - default I/O handler for writes +//------------------------------------------------- +WRITE16_MEMBER( segas16b_state::standard_io_w ) +{ offset &= 0x1fff; switch (offset & (0x3000/2)) { case 0x0000/2: - /* - D7 : 1 for most games, 0 for ddux, sdi, wb3 - D6 : 1= Screen flip, 0= Normal screen display - D5 : 1= Display on, 0= Display off - D4 : 0 for most games, 1 for eswat - D3 : Output to lamp 2 (1= On, 0= Off) - D2 : Output to lamp 1 (1= On, 0= Off) - D1 : (Output to coin counter 2?) - D0 : Output to coin counter 1 - */ - segaic16_tilemap_set_flip(space->machine(), 0, data & 0x40); - segaic16_sprites_set_flip(space->machine(), 0, data & 0x40); - if (!state->m_disable_screen_blanking) - segaic16_set_display_enable(space->machine(), data & 0x20); - set_led_status(space->machine(), 1, data & 0x08); - set_led_status(space->machine(), 0, data & 0x04); - coin_counter_w(space->machine(), 1, data & 0x02); - coin_counter_w(space->machine(), 0, data & 0x01); + // + // D7 : 1 for most games, 0 for ddux, sdi, wb3 + // D6 : 1= Screen flip, 0= Normal screen display + // D5 : 1= Display on, 0= Display off + // D4 : 0 for most games, 1 for eswat + // D3 : Output to lamp 2 (1= On, 0= Off) + // D2 : Output to lamp 1 (1= On, 0= Off) + // D1 : (Output to coin counter 2?) + // D0 : Output to coin counter 1 + // + segaic16_tilemap_set_flip(machine(), 0, data & 0x40); + segaic16_sprites_set_flip(machine(), 0, data & 0x40); + if (!m_disable_screen_blanking) + segaic16_set_display_enable(machine(), data & 0x20); + set_led_status(machine(), 1, data & 0x08); + set_led_status(machine(), 0, data & 0x04); + coin_counter_w(machine(), 1, data & 0x02); + coin_counter_w(machine(), 0, data & 0x01); return; } - logerror("%06X:standard_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space->device()), offset * 2, data, mem_mask); + logerror("%06X:standard_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space.device()), offset * 2, data, mem_mask); } -static READ16_HANDLER( misc_io_r ) +//------------------------------------------------- +// atomicp_sound_w - write sound data to the +// YM2413 directly from the main CPU +//------------------------------------------------- + +WRITE16_MEMBER( segas16b_state::atomicp_sound_w ) { - segas1x_state *state = space->machine().driver_data(); - - if (state->m_custom_io_r) - return (*state->m_custom_io_r)(space, offset, mem_mask); - else - return standard_io_r(space, offset, mem_mask); -} - - -static WRITE16_HANDLER( misc_io_w ) -{ - segas1x_state *state = space->machine().driver_data(); - - if (state->m_custom_io_w) - (*state->m_custom_io_w)(space, offset, data, mem_mask); - else - standard_io_w(space, offset, data, mem_mask); + ym2413_w(m_ym2413, offset, data >> 8); } -/************************************* - * - * Tile banking/math chips - * - *************************************/ +//************************************************************************** +// SOUND CPU READ/WRITE HANDLERS +//************************************************************************** -static WRITE16_HANDLER( rom_5704_bank_w ) +//------------------------------------------------- +// upd7759_control_w - handle writes to the +// uPD7759 control register +//------------------------------------------------- + +WRITE8_MEMBER( segas16b_state::upd7759_control_w ) { - if (ACCESSING_BITS_0_7) - segaic16_tilemap_set_bank(space->machine(), 0, offset & 1, data & 7); -} - - -static READ16_HANDLER( rom_5797_bank_math_r ) -{ - segas1x_state *state = space->machine().driver_data(); - - offset &= 0x1fff; - switch (offset & (0x3000/2)) - { - case 0x0000/2: - /* multiply registers */ - return segaic16_multiply_r(state->m_315_5248_1, offset & 3, mem_mask); - - case 0x1000/2: - /* compare registers */ - return segaic16_compare_timer_r(state->m_315_5250_1, offset & 7, mem_mask); - } - return segaic16_open_bus_r(space, 0, mem_mask); -} - - -static WRITE16_HANDLER( rom_5797_bank_math_w ) -{ - segas1x_state *state = space->machine().driver_data(); - - offset &= 0x1fff; - switch (offset & (0x3000/2)) - { - case 0x0000/2: - /* multiply registers */ - segaic16_multiply_w(state->m_315_5248_1, offset & 3, data, mem_mask); - break; - - case 0x1000/2: - /* compare registers */ - segaic16_compare_timer_w(state->m_315_5250_1, offset & 7, data, mem_mask); - break; - - case 0x2000/2: - if (ACCESSING_BITS_0_7) - segaic16_tilemap_set_bank(space->machine(), 0, offset & 1, data & 7); - break; - } -} - - -static READ16_HANDLER( unknown_rgn2_r ) -{ - segas1x_state *state = space->machine().driver_data(); - - logerror("Region 2: read from %04X\n", offset * 2); - return segaic16_compare_timer_r(state->m_315_5250_2, offset & 7, mem_mask); -} - - -static WRITE16_HANDLER( unknown_rgn2_w ) -{ - segas1x_state *state = space->machine().driver_data(); - - logerror("Region 2: write to %04X = %04X & %04X\n", offset * 2, data, mem_mask); - segaic16_compare_timer_w(state->m_315_5250_2, offset & 7, data, mem_mask); -} - - - -/************************************* - * - * Sound interaction - * - *************************************/ - -static WRITE8_DEVICE_HANDLER( upd7759_control_w ) -{ - segas1x_state *state = device->machine().driver_data(); - int size = state->memregion("soundcpu")->bytes() - 0x10000; - + int size = memregion("soundcpu")->bytes() - 0x10000; if (size > 0) { + // it is important to write in this order: if the /START line goes low + // at the same time /RESET goes low, no sample should be started + upd7759_start_w(m_upd7759, data & 0x80); + upd7759_reset_w(m_upd7759, data & 0x40); + + // banking depends on the ROM board int bankoffs = 0; - - /* it is important to write in this order: if the /START line goes low - at the same time /RESET goes low, no sample should be started */ - upd7759_start_w(device, data & 0x80); - upd7759_reset_w(device, data & 0x40); - - /* banking depends on the ROM board */ - switch (state->m_rom_board) + switch (m_romboard) { case ROM_BOARD_171_5358: case ROM_BOARD_171_5358_SMALL: - /* - D5 : /CS for ROM at A11 - D4 : /CS for ROM at A10 - D3 : /CS for ROM at A9 - D2 : /CS for ROM at A8 - D1 : A15 for all ROMs (Or ignored for 27256's) - D0 : A14 for all ROMs - */ + // + // D5 : /CS for ROM at A11 + // D4 : /CS for ROM at A10 + // D3 : /CS for ROM at A9 + // D2 : /CS for ROM at A8 + // D1 : A15 for all ROMs (Or ignored for 27256's) + // D0 : A14 for all ROMs + // if (!(data & 0x04)) bankoffs = 0x00000; if (!(data & 0x08)) bankoffs = 0x10000; if (!(data & 0x10)) bankoffs = 0x20000; @@ -1374,278 +1218,334 @@ static WRITE8_DEVICE_HANDLER( upd7759_control_w ) break; case ROM_BOARD_171_5521: - case ROM_BOARD_171_5704_EXTRA_RAM: - /* - D5 : Unused - D4 : Unused - D3 : ROM select 0=A11, 1=A12 - D2 : A16 for all ROMs - D1 : A15 for all ROMs - D0 : A14 for all ROMs - */ + case ROM_BOARD_171_5704: + // + // D5 : Unused + // D4 : Unused + // D3 : ROM select 0=A11, 1=A12 + // D2 : A16 for all ROMs + // D1 : A15 for all ROMs + // D0 : A14 for all ROMs + // bankoffs = ((data & 0x08) >> 3) * 0x20000; bankoffs += (data & 0x07) * 0x4000; break; case ROM_BOARD_171_5797: - /* - D5 : Unused - D4 : A17 for all ROMs - D3 : ROM select 0=A11, 1=A12 - D2 : A16 for all ROMs - D1 : A15 for all ROMs - D0 : A14 for all ROMs - */ + // + // D5 : Unused + // D4 : A17 for all ROMs + // D3 : ROM select 0=A11, 1=A12 + // D2 : A16 for all ROMs + // D1 : A15 for all ROMs + // D0 : A14 for all ROMs + // bankoffs = ((data & 0x08) >> 3) * 0x40000; bankoffs += ((data & 0x10) >> 4) * 0x20000; bankoffs += (data & 0x07) * 0x04000; break; + + default: + assert(false); } - state->membank("bank1")->set_base(device->machine().root_device().memregion("soundcpu")->base() + 0x10000 + (bankoffs % size)); + + // set the final bank + membank("soundbank")->set_base(memregion("soundcpu")->base() + 0x10000 + (bankoffs % size)); } } -static READ8_DEVICE_HANDLER( upd7759_status_r ) +//------------------------------------------------- +// upd7759_status_r - return the uPD7759 busy +// bit in the top bit +//------------------------------------------------- + +READ8_MEMBER( segas16b_state::upd7759_status_r ) { - return upd7759_busy_r(device) << 7; + return upd7759_busy_r(m_upd7759) << 7; } -static void upd7759_generate_nmi(device_t *device, int state) -{ - segas1x_state *driver = device->machine().driver_data(); +//************************************************************************** +// OTHER CALLBACKS +//************************************************************************** + +//------------------------------------------------- +// upd7759_generate_nmi - callback to signal an +// NMI to the sound CPU +//------------------------------------------------- + +void segas16b_state::upd7759_generate_nmi(device_t *device, int state) +{ + segas16b_state *driver = device->machine().driver_data(); if (state) - device_set_input_line(driver->m_soundcpu, INPUT_LINE_NMI, PULSE_LINE); + driver->m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } -#if 0 -static WRITE8_HANDLER( mcu_data_w ) +//------------------------------------------------- +// i8751_main_cpu_vblank - update the fake i8751 +// state if we have a handler +//------------------------------------------------- + +INTERRUPT_GEN_MEMBER( segas16b_state::i8751_main_cpu_vblank ) { - segas1x_state *state = space->machine().driver_data(); - state->m_mcu_data = data; - generic_pulse_irq_line(state->m_mcu, 1, 1); -} -#endif - - -/************************************* - * - * I8751 interrupt generation - * - *************************************/ - -static INTERRUPT_GEN( i8751_main_cpu_vblank ) -{ - segas1x_state *state = device->machine().driver_data(); - - /* if we have a fake 8751 handler, call it on VBLANK */ - if (state->m_i8751_vblank_hook != NULL) - (*state->m_i8751_vblank_hook)(device->machine()); + // if we have a fake 8751 handler, call it on VBLANK + if (!m_i8751_vblank_hook.isnull()) + m_i8751_vblank_hook(); } -/************************************* - * - * Per-game I8751 workarounds - * - *************************************/ +//************************************************************************** +// DRIVER OVERRIDES +//************************************************************************** -static void altbeast_common_i8751_sim(running_machine &machine, offs_t soundoffs, offs_t inputoffs) +//------------------------------------------------- +// machine_reset - reset the state of the machine +//------------------------------------------------- + +void segas16b_state::machine_reset() { - segas1x_state *state = machine.driver_data(); - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); - UINT16 temp; + // if we have a hard-coded mapping configuration, set it now + if (m_i8751_initial_config != NULL) + m_mapper->configure_explicit(m_i8751_initial_config); - /* signal a VBLANK to the main CPU */ - device_set_input_line(state->m_maincpu, 4, HOLD_LINE); + // queue up a timer to either boost interleave or disable the MCU + synchronize(TID_INIT_I8751); - /* set tile banks */ - rom_5704_bank_w(space, 1, workram[0x3094/2] & 0x00ff, 0x00ff); + // reset tilemap state + segaic16_tilemap_reset(machine(), 0); - /* process any new sound data */ - temp = workram[soundoffs]; - if ((temp & 0xff00) != 0x0000) + // configure sprite banks + static const UINT8 default_banklist[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + static const UINT8 alternate_banklist[] = { 0,255,255,255, 255,255,255,3, 255,255,255,2, 255,1,0,255 }; + const UINT8 *banklist = (m_romboard == ROM_BOARD_171_5358 || m_romboard == ROM_BOARD_171_5358_SMALL) ? alternate_banklist : default_banklist; + for (int banknum = 0; banknum < 16; banknum++) + segaic16_sprites_set_bank(machine(), 0, banknum, banklist[banknum]); +} + + +//------------------------------------------------- +// device_timer - handle device timers +//------------------------------------------------- + +void segas16b_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) { - segaic16_memory_mapper_w(space, 0x03, temp >> 8); - workram[soundoffs] = temp & 0x00ff; - } - - /* read inputs */ - workram[inputoffs] = ~machine.root_device().ioport("SERVICE")->read() << 8; -} - -static void altbeasj_i8751_sim(running_machine &machine) -{ - altbeast_common_i8751_sim(machine, 0x30d4/2, 0x30d0/2); -} - -static void altbeas5_i8751_sim(running_machine &machine) -{ - altbeast_common_i8751_sim(machine, 0x3098/2, 0x3096/2); -} - -static void altbeast_i8751_sim(running_machine &machine) -{ - altbeast_common_i8751_sim(machine, 0x30c4/2, 0x30c2/2); -} - - -static void ddux_i8751_sim(running_machine &machine) -{ - segas1x_state *state = machine.driver_data(); - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); - UINT16 temp; - - /* signal a VBLANK to the main CPU */ - device_set_input_line(state->m_maincpu, 4, HOLD_LINE); - - /* process any new sound data */ - temp = workram[0x0bd0/2]; - if ((temp & 0xff00) != 0x0000) - { - segaic16_memory_mapper_w(space, 0x03, temp >> 8); - workram[0x0bd0/2] = temp & 0x00ff; - } -} - - -static void goldnaxe_i8751_init(running_machine &machine) -{ - segas1x_state *state = machine.driver_data(); - static const UINT8 memory_control_5704[0x10] = - { 0x02,0x00, 0x02,0x08, 0x00,0x1f, 0x00,0xff, 0x00,0x20, 0x01,0x10, 0x00,0x14, 0x00,0xc4 }; - static const UINT8 memory_control_5797[0x10] = - { 0x02,0x00, 0x00,0x1f, 0x00,0x1e, 0x00,0xff, 0x00,0x20, 0x01,0x10, 0x00,0x14, 0x00,0xc4 }; - - switch (state->m_rom_board) - { - case ROM_BOARD_171_5704: - state->m_i8751_initial_config = memory_control_5704; + // if we have a fake i8751 handler, disable the actual 8751, otherwise crank the interleave + case TID_INIT_I8751: + if (!m_i8751_vblank_hook.isnull()) + machine().scheduler().boost_interleave(attotime::zero, attotime::from_msec(10)); + else if (m_mcu != NULL) + m_mcu->suspend(SUSPEND_REASON_DISABLE, 1); break; - case ROM_BOARD_171_5797: - state->m_i8751_initial_config = memory_control_5797; + + // generate a periodic IRQ to the sound CPU + case TID_ATOMICP_SOUND_IRQ: + if (++m_atomicp_sound_count >= m_atomicp_sound_divisor) + { + m_maincpu->set_input_line(2, HOLD_LINE); + m_atomicp_sound_count = 0; + } break; } } -static void goldnaxe_i8751_sim(running_machine &machine) + + +//************************************************************************** +// I8751 SIMULATIONS +//************************************************************************** + +//------------------------------------------------- +// altbeast_common_i8751_sim - simulate the I8751 +// from Altered Beast +//------------------------------------------------- + +void segas16b_state::altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoffs) { - segas1x_state *state = machine.driver_data(); - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); - UINT16 temp; + // signal a VBLANK to the main CPU + m_maincpu->set_input_line(4, HOLD_LINE); - /* signal a VBLANK to the main CPU */ - device_set_input_line(state->m_maincpu, 4, HOLD_LINE); + // set tile banks + address_space *space = m_maincpu->space(AS_PROGRAM); + rom_5704_bank_w(*space, 1, m_workram[0x3094/2] & 0x00ff, 0x00ff); - /* they periodically clear the data at 2cd8,2cda,2cdc,2cde and expect the MCU to fill it in */ - if (workram[0x2cd8/2] == 0 && workram[0x2cda/2] == 0 && workram[0x2cdc/2] == 0 && workram[0x2cde/2] == 0) - { - workram[0x2cd8/2] = 0x048c; - workram[0x2cda/2] = 0x159d; - workram[0x2cdc/2] = 0x26ae; - workram[0x2cde/2] = 0x37bf; - } - - /* process any new sound data */ - temp = workram[0x2cfc/2]; + // process any new sound data + UINT16 temp = m_workram[soundoffs]; if ((temp & 0xff00) != 0x0000) { - segaic16_memory_mapper_w(space, 0x03, temp >> 8); - workram[0x2cfc/2] = temp & 0x00ff; + m_mapper->write(*space, 0x03, temp >> 8); + m_workram[soundoffs] = temp & 0x00ff; } - /* read inputs */ - workram[0x2cd0/2] = (state->ioport("P1")->read() << 8) | state->ioport("P2")->read(); - workram[0x2c96/2] = machine.root_device().ioport("SERVICE")->read() << 8; + // read inputs + m_workram[inputoffs] = ~ioport("SERVICE")->read() << 8; +} + +void segas16b_state::altbeasj_i8751_sim() +{ + altbeast_common_i8751_sim(0x30d4/2, 0x30d0/2); +} + +void segas16b_state::altbeas5_i8751_sim() +{ + altbeast_common_i8751_sim(0x3098/2, 0x3096/2); +} + +void segas16b_state::altbeast_i8751_sim() +{ + altbeast_common_i8751_sim(0x30c4/2, 0x30c2/2); } -static void tturf_i8751_sim(running_machine &machine) +//------------------------------------------------- +// ddux_i8751_sim - simulate the I8751 +// from Dynamite Dux +//------------------------------------------------- + +void segas16b_state::ddux_i8751_sim() { - segas1x_state *state = machine.driver_data(); - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); - UINT16 temp; + // signal a VBLANK to the main CPU + m_maincpu->set_input_line(4, HOLD_LINE); - /* signal a VBLANK to the main CPU */ - device_set_input_line(state->m_maincpu, 4, HOLD_LINE); - - /* process any new sound data */ - temp = workram[0x01d0/2]; + // process any new sound data + UINT16 temp = m_workram[0x0bd0/2]; if ((temp & 0xff00) != 0x0000) { - segaic16_memory_mapper_w(space, 0x03, temp); - workram[0x01d0/2] = temp & 0x00ff; + address_space *space = m_maincpu->space(AS_PROGRAM); + m_mapper->write(*space, 0x03, temp >> 8); + m_workram[0x0bd0/2] = temp & 0x00ff; } - - /* read inputs */ - workram[0x01e6/2] = machine.root_device().ioport("SERVICE")->read() << 8; - workram[0x01e8/2] = machine.root_device().ioport("P1")->read() << 8; - workram[0x01ea/2] = machine.root_device().ioport("P2")->read() << 8; } -static void wb3_i8751_sim(running_machine &machine) +//------------------------------------------------- +// goldnaxe_i8751_sim - simulate the I8751 +// from Golden Axe +//------------------------------------------------- + +void segas16b_state::goldnaxe_i8751_sim() +{ + // signal a VBLANK to the main CPU + m_maincpu->set_input_line(4, HOLD_LINE); + + // they periodically clear the data at 2cd8,2cda,2cdc,2cde and expect the MCU to fill it in + if (m_workram[0x2cd8/2] == 0 && m_workram[0x2cda/2] == 0 && m_workram[0x2cdc/2] == 0 && m_workram[0x2cde/2] == 0) + { + m_workram[0x2cd8/2] = 0x048c; + m_workram[0x2cda/2] = 0x159d; + m_workram[0x2cdc/2] = 0x26ae; + m_workram[0x2cde/2] = 0x37bf; + } + + // process any new sound data + UINT16 temp = m_workram[0x2cfc/2]; + if ((temp & 0xff00) != 0x0000) + { + address_space *space = m_maincpu->space(AS_PROGRAM); + m_mapper->write(*space, 0x03, temp >> 8); + m_workram[0x2cfc/2] = temp & 0x00ff; + } + + // read inputs + m_workram[0x2cd0/2] = (ioport("P1")->read() << 8) | ioport("P2")->read(); + m_workram[0x2c96/2] = ioport("SERVICE")->read() << 8; +} + + +//------------------------------------------------- +// tturf_i8751_sim - simulate the I8751 +// from Tough Turf +//------------------------------------------------- + +void segas16b_state::tturf_i8751_sim() { - segas1x_state *state = machine.driver_data(); - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); UINT16 temp; - /* signal a VBLANK to the main CPU */ - device_set_input_line(state->m_maincpu, 4, HOLD_LINE); + // signal a VBLANK to the main CPU + m_maincpu->set_input_line(4, HOLD_LINE); - /* process any new sound data */ - temp = workram[0x0008/2]; + // process any new sound data + temp = m_workram[0x01d0/2]; + if ((temp & 0xff00) != 0x0000) + { + address_space *space = m_maincpu->space(AS_PROGRAM); + m_mapper->write(*space, 0x03, temp); + m_workram[0x01d0/2] = temp & 0x00ff; + } + + // read inputs + m_workram[0x01e6/2] = ioport("SERVICE")->read() << 8; + m_workram[0x01e8/2] = ioport("P1")->read() << 8; + m_workram[0x01ea/2] = ioport("P2")->read() << 8; +} + + +//------------------------------------------------- +// wb3_i8751_sim - simulate the I8751 +// from Wonderboy III +//------------------------------------------------- + +void segas16b_state::wb3_i8751_sim() +{ + // signal a VBLANK to the main CPU + m_maincpu->set_input_line(4, HOLD_LINE); + + // process any new sound data + UINT16 temp = m_workram[0x0008/2]; if ((temp & 0x00ff) != 0x0000) { - segaic16_memory_mapper_w(space, 0x03, temp >> 8); - workram[0x0008/2] = temp & 0xff00; + address_space *space = m_maincpu->space(AS_PROGRAM); + m_mapper->write(*space, 0x03, temp >> 8); + m_workram[0x0008/2] = temp & 0xff00; } } -/************************************* - * - * Ace Attacker custom I/O - * - *************************************/ +//************************************************************************** +// CUSTOM I/O SPACE HANDLERS +//************************************************************************** -static READ16_HANDLER( aceattac_custom_io_r ) +//------------------------------------------------- +// aceattac_custom_io_r - custom I/O read handler +// for Ace Attacker +//------------------------------------------------- + +READ16_MEMBER( segas16b_state::aceattac_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); - switch (offset & (0x3000/2)) { case 0x1000/2: switch (offset & 3) { case 0x01: - return state->ioport("P1")->read(); + return ioport("P1")->read(); case 0x02: - return state->ioport("DIAL1")->read() | (state->ioport("DIAL2")->read() << 4); + return ioport("DIAL1")->read() | (ioport("DIAL2")->read() << 4); // low nibble: Sega 56pin Edge "16"-"19" // rotary switch 10positions 4bit-binary-pinout // high nibble: Sega 56pin Edge "T"-"W" // ditto case 0x03: - return state->ioport("P2")->read(); + return ioport("P2")->read(); } break; case 0x3000/2: switch (offset & 7) { - case 0: return state->ioport("HANDX1")->read(); - case 1: return state->ioport("TRACKX1")->read(); - case 2: return state->ioport("TRACKY1")->read(); - case 3: return state->ioport("HANDY1")->read(); - case 4: return state->ioport("HANDX2")->read(); - case 5: return state->ioport("TRACKX2")->read(); - case 6: return state->ioport("TRACKY2")->read(); - case 7: return state->ioport("HANDY2")->read(); + case 0: return ioport("HANDX1")->read(); + case 1: return ioport("TRACKX1")->read(); + case 2: return ioport("TRACKY1")->read(); + case 3: return ioport("HANDY1")->read(); + case 4: return ioport("HANDX2")->read(); + case 5: return ioport("TRACKX2")->read(); + case 6: return ioport("TRACKY2")->read(); + case 7: return ioport("HANDY2")->read(); } break; } @@ -1654,49 +1554,27 @@ static READ16_HANDLER( aceattac_custom_io_r ) } -/************************************* - * - * Atomic Point custom sound - * - *************************************/ -static MACHINE_START( atomicp ) +//------------------------------------------------- +// dunkshot_custom_io_r - custom I/O read handler +// for Dunk Shot +//------------------------------------------------- + +READ16_MEMBER( segas16b_state::dunkshot_custom_io_r ) { - segas1x_state *state = machine.driver_data(); - state->save_item(NAME(state->m_atomicp_sound_count)); -} - - -static WRITE16_HANDLER( atomicp_sound_w ) -{ - segas1x_state *state = space->machine().driver_data(); - ym2413_w(state->m_ymsnd, offset, data >> 8); -} - - - -/************************************* - * - * Dunk Shot custom I/O - * - *************************************/ - -static READ16_HANDLER( dunkshot_custom_io_r ) -{ - segas1x_state *state = space->machine().driver_data(); switch (offset & (0x3000/2)) { case 0x3000/2: switch ((offset/2) & 7) { - case 0: return (state->ioport("ANALOGX1")->read() << 4) >> (8 * (offset & 1)); - case 1: return (state->ioport("ANALOGY1")->read() << 4) >> (8 * (offset & 1)); - case 2: return (state->ioport("ANALOGX2")->read() << 4) >> (8 * (offset & 1)); - case 3: return (state->ioport("ANALOGY2")->read() << 4) >> (8 * (offset & 1)); - case 4: return (state->ioport("ANALOGX3")->read() << 4) >> (8 * (offset & 1)); - case 5: return (state->ioport("ANALOGY3")->read() << 4) >> (8 * (offset & 1)); - case 6: return (state->ioport("ANALOGX4")->read() << 4) >> (8 * (offset & 1)); - case 7: return (state->ioport("ANALOGY4")->read() << 4) >> (8 * (offset & 1)); + case 0: return (ioport("ANALOGX1")->read() << 4) >> (8 * (offset & 1)); + case 1: return (ioport("ANALOGY1")->read() << 4) >> (8 * (offset & 1)); + case 2: return (ioport("ANALOGX2")->read() << 4) >> (8 * (offset & 1)); + case 3: return (ioport("ANALOGY2")->read() << 4) >> (8 * (offset & 1)); + case 4: return (ioport("ANALOGX3")->read() << 4) >> (8 * (offset & 1)); + case 5: return (ioport("ANALOGY3")->read() << 4) >> (8 * (offset & 1)); + case 6: return (ioport("ANALOGX4")->read() << 4) >> (8 * (offset & 1)); + case 7: return (ioport("ANALOGY4")->read() << 4) >> (8 * (offset & 1)); } break; } @@ -1704,16 +1582,13 @@ static READ16_HANDLER( dunkshot_custom_io_r ) } +//------------------------------------------------- +// hwchamp_custom_io_r/w - custom I/O read/write +// handlers for Heavyweight Champ +//------------------------------------------------- -/************************************* - * - * Heavyweight Champ custom I/O - * - *************************************/ - -static READ16_HANDLER( hwchamp_custom_io_r ) +READ16_MEMBER( segas16b_state::hwchamp_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); UINT16 result; switch (offset & (0x3000/2)) @@ -1722,8 +1597,8 @@ static READ16_HANDLER( hwchamp_custom_io_r ) switch (offset & 0x30/2) { case 0x20/2: - result = (state->m_hwc_input_value & 0x80) >> 7; - state->m_hwc_input_value <<= 1; + result = (m_hwc_input_value & 0x80) >> 7; + m_hwc_input_value <<= 1; return result; } break; @@ -1731,10 +1606,8 @@ static READ16_HANDLER( hwchamp_custom_io_r ) return standard_io_r(space, offset, mem_mask); } - -static WRITE16_HANDLER( hwchamp_custom_io_w ) +WRITE16_MEMBER( segas16b_state::hwchamp_custom_io_w ) { - segas1x_state *state = space->machine().driver_data(); static const char *const portname[4] = { "MONITOR", "LEFT", "RIGHT", "DUMMY" }; switch (offset & (0x3000/2)) { @@ -1742,13 +1615,13 @@ static WRITE16_HANDLER( hwchamp_custom_io_w ) switch (offset & 0x30/2) { case 0x20/2: - state->m_hwc_input_value = state->ioport(portname[offset & 3])->read_safe(0xff); + m_hwc_input_value = ioport(portname[offset & 3])->read_safe(0xff); break; case 0x30/2: - /* bit 4 is GONG */ + // bit 4 is GONG // if (data & 0x10) popmessage("GONG"); - /* are the following really lamps? */ + // are the following really lamps? // set_led_status(space->machine(), 1,data & 0x20); // set_led_status(space->machine(), 2,data & 0x40); // set_led_status(space->machine(), 3,data & 0x80); @@ -1760,25 +1633,22 @@ static WRITE16_HANDLER( hwchamp_custom_io_w ) } +//------------------------------------------------- +// passshtj_custom_io_r - custom I/O read handler +// for Passing Shot +//------------------------------------------------- -/************************************* - * - * Passing Shot custom I/O - * - *************************************/ - -static READ16_HANDLER( passshtj_custom_io_r ) +READ16_MEMBER( segas16b_state::passshtj_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); switch (offset & (0x3000/2)) { case 0x3000/2: switch (offset & 3) { - case 0: return state->ioport("P1")->read(); - case 1: return state->ioport("P2")->read(); - case 2: return state->ioport("P3")->read(); - case 3: return state->ioport("P4")->read(); + case 0: return ioport("P1")->read(); + case 1: return ioport("P2")->read(); + case 2: return ioport("P3")->read(); + case 3: return ioport("P4")->read(); } break; } @@ -1786,25 +1656,22 @@ static READ16_HANDLER( passshtj_custom_io_r ) } +//------------------------------------------------- +// sdi_custom_io_r - custom I/O read handler +// for SDI +//------------------------------------------------- -/************************************* - * - * SDI custom I/O - * - *************************************/ - -static READ16_HANDLER( sdi_custom_io_r ) +READ16_MEMBER( segas16b_state::sdi_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); switch (offset & (0x3000/2)) { case 0x3000/2: switch ((offset/2) & 3) { - case 0: return state->ioport("ANALOGX1")->read(); - case 1: return state->ioport("ANALOGY1")->read(); - case 2: return state->ioport("ANALOGX2")->read(); - case 3: return state->ioport("ANALOGY2")->read(); + case 0: return ioport("ANALOGX1")->read(); + case 1: return ioport("ANALOGY1")->read(); + case 2: return ioport("ANALOGX2")->read(); + case 3: return ioport("ANALOGY2")->read(); } break; } @@ -1812,16 +1679,13 @@ static READ16_HANDLER( sdi_custom_io_r ) } +//------------------------------------------------- +// sdi_custom_io_r/w - custom I/O read/write +// handlers for Sukeban Jansi Ryuko +//------------------------------------------------- -/************************************* - * - * Sukeban Jansi Ryuko custom I/O - * - *************************************/ - -static READ16_HANDLER( sjryuko_custom_io_r ) +READ16_MEMBER( segas16b_state::sjryuko_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); static const char *const portname[] = { "MJ0", "MJ1", "MJ2", "MJ3", "MJ4", "MJ5" }; switch (offset & (0x3000/2)) @@ -1830,30 +1694,27 @@ static READ16_HANDLER( sjryuko_custom_io_r ) switch (offset & 3) { case 1: - if (state->ioport(portname[state->m_mj_input_num])->read_safe(0xff) != 0xff) - return 0xff & ~(1 << state->m_mj_input_num); + if (ioport(portname[m_mj_input_num])->read_safe(0xff) != 0xff) + return 0xff & ~(1 << m_mj_input_num); return 0xff; case 2: - return state->ioport(portname[state->m_mj_input_num])->read_safe(0xff); + return ioport(portname[m_mj_input_num])->read_safe(0xff); } break; } return standard_io_r(space, offset, mem_mask); } - -static WRITE16_HANDLER( sjryuko_custom_io_w ) +WRITE16_MEMBER( segas16b_state::sjryuko_custom_io_w ) { - segas1x_state *state = space->machine().driver_data(); - switch (offset & (0x3000/2)) { case 0x0000/2: - if (((state->m_mj_last_val ^ data) & 4) && (data & 4)) - state->m_mj_input_num = (state->m_mj_input_num + 1) % 6; + if (((m_mj_last_val ^ data) & 4) && (data & 4)) + m_mj_input_num = (m_mj_input_num + 1) % 6; - state->m_mj_last_val = data; + m_mj_last_val = data; break; } standard_io_w(space, offset, data, mem_mask); @@ -1861,63 +1722,77 @@ static WRITE16_HANDLER( sjryuko_custom_io_w ) -/************************************* - * - * Main CPU memory handlers - * - *************************************/ +//************************************************************************** +// MAIN CPU ADDRESS MAPS +//************************************************************************** -static ADDRESS_MAP_START( system16b_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( system16b_map, AS_PROGRAM, 16, segas16b_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0xffffff) AM_READWRITE_LEGACY(segaic16_memory_mapper_lsb_r, segaic16_memory_mapper_lsb_w) + AM_RANGE(0x000000, 0xffffff) AM_DEVREADWRITE8("mapper", sega_315_5195_mapper_device, read, write, 0x00ff) + + // these get overwritten by the memory mapper above, but we put them here + // so they are properly allocated and tracked for saving + AM_RANGE(0x100000, 0x1007ff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0x200000, 0x200fff) AM_RAM AM_SHARE("paletteram") + AM_RANGE(0x300000, 0x30ffff) AM_RAM AM_SHARE("tileram") + AM_RANGE(0x400000, 0x400fff) AM_RAM AM_SHARE("textram") + AM_RANGE(0x500000, 0x503fff) AM_RAM AM_SHARE("workram") +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( system16c_map, AS_PROGRAM, 16, segas16b_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x000000, 0xffffff) AM_DEVREADWRITE8("mapper", sega_315_5195_mapper_device, read, write, 0x00ff) + + // these get overwritten by the memory mapper above, but we put them here + // so they are properly allocated and tracked for saving + AM_RANGE(0x100000, 0x1007ff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0x200000, 0x200fff) AM_RAM AM_SHARE("paletteram") + AM_RANGE(0x300000, 0x30ffff) AM_RAM AM_SHARE("tileram") + AM_RANGE(0x400000, 0x400fff) AM_RAM AM_SHARE("textram") + AM_RANGE(0x500000, 0x53ffff) AM_RAM AM_SHARE("workram") // only change from system16b_map ADDRESS_MAP_END -/************************************* - * - * Sound CPU memory handlers - * - *************************************/ +//************************************************************************** +// SOUND CPU ADDRESS MAPS +//************************************************************************** -static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas16b_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("bank1") + AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("soundbank") AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas16b_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) - AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_DEVWRITE_LEGACY("upd", upd7759_control_w) - AM_RANGE(0x80, 0x80) AM_MIRROR(0x3f) AM_DEVREADWRITE_LEGACY("upd", upd7759_status_r, upd7759_port_w) + AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ym2151", ym2151_r, ym2151_w) + AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_WRITE(upd7759_control_w) + AM_RANGE(0x80, 0x80) AM_MIRROR(0x3f) AM_READ(upd7759_status_r) AM_DEVWRITE_LEGACY("upd", upd7759_port_w) AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x3f) AM_READ(soundlatch_byte_r) ADDRESS_MAP_END -/************************************* - * - * i8751 MCU memory handlers - * - *************************************/ +//************************************************************************** +// I8751 MCU ADDRESS MAPS +//************************************************************************** -static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segas16b_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x001f) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(segaic16_memory_mapper_r, segaic16_memory_mapper_w) + AM_RANGE(0x0000, 0x001f) AM_MIRROR(0xff00) AM_DEVREADWRITE("mapper", sega_315_5195_mapper_device, read, write) AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ_PORT("SERVICE") ADDRESS_MAP_END -/************************************* - * - * Generic port definitions - * - *************************************/ +//************************************************************************** +// GENERIC PORT DEFINITIONS +//************************************************************************** static INPUT_PORTS_START( system16b_generic ) PORT_START("SERVICE") @@ -1968,18 +1843,10 @@ static INPUT_PORTS_START( system16b_generic ) INPUT_PORTS_END -#ifdef UNUSED_DEFINITION -static INPUT_PORTS_START( generic ) - PORT_INCLUDE( system16b_generic ) -INPUT_PORTS_END -#endif - -/************************************* - * - * Game-specific port definitions - * - *************************************/ +//************************************************************************** +// GAME-SPECIFIC PORT DEFINITIONS +//************************************************************************** static INPUT_PORTS_START( aceattac ) #define TMP_PL1HAND 2 @@ -1990,8 +1857,8 @@ static INPUT_PORTS_START( aceattac ) PORT_INCLUDE( system16b_generic ) PORT_MODIFY("SERVICE") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* Block Switch */ - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* Block Switch */ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) // Block Switch + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // Block Switch PORT_MODIFY("P1") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -2070,6 +1937,7 @@ static INPUT_PORTS_START( aceattac ) #undef TMP_PL2BALL INPUT_PORTS_END + static INPUT_PORTS_START( aliensyn ) PORT_INCLUDE( system16b_generic ) @@ -2310,7 +2178,7 @@ static INPUT_PORTS_START( ddux ) PORT_DIPSETTING( 0x20, "300k" ) PORT_DIPSETTING( 0x00, "400k" ) //"SW2:8" unused - /* Switch #8 is listed as "NOT USED" and "Always OFF" */ + // Switch #8 is listed as "NOT USED" and "Always OFF" INPUT_PORTS_END @@ -2354,28 +2222,28 @@ static INPUT_PORTS_START( dunkshot ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) //"SW2:8" unused - PORT_START("ANALOGX1") /* fake analog X */ + PORT_START("ANALOGX1") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(1) PORT_REVERSE - PORT_START("ANALOGY1") /* fake analog Y */ + PORT_START("ANALOGY1") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(1) - PORT_START("ANALOGX2") /* fake analog X */ + PORT_START("ANALOGX2") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(2) - PORT_START("ANALOGY2") /* fake analog Y */ + PORT_START("ANALOGY2") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(2) PORT_REVERSE - PORT_START("ANALOGX3") /* fake analog X */ + PORT_START("ANALOGX3") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(3) PORT_REVERSE - PORT_START("ANALOGY3") /* fake analog Y */ + PORT_START("ANALOGY3") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(3) - PORT_START("ANALOGX4") /* fake analog X */ + PORT_START("ANALOGX4") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(4) - PORT_START("ANALOGY4") /* fake analog Y */ + PORT_START("ANALOGY4") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(4) PORT_REVERSE INPUT_PORTS_END @@ -2413,34 +2281,34 @@ static INPUT_PORTS_START( exctleag ) PORT_INCLUDE( system16b_generic ) PORT_MODIFY("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* BANT0 */ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* BANT1 */ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) /* BANT2 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) /* SWING0 */ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) /* SWING1 */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) /* LOW */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) /* MID */ - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(1) /* HI */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // BANT0 + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // BANT1 + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // BANT2 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) // SWING0 + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) // SWING1 + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) // LOW + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) // MID + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(1) // HI PORT_MODIFY("UNUSED") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_PLAYER(1) /* CHASE */ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_PLAYER(1) /* CHANGE */ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_PLAYER(1) /* SELECT */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_PLAYER(1) // CHASE + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_PLAYER(1) // CHANGE + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_PLAYER(1) // SELECT PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_PLAYER(2) /* CHASE */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_PLAYER(2) /* CHANGE */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_PLAYER(2) /* SELECT */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_PLAYER(2) // CHASE + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_PLAYER(2) // CHANGE + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_PLAYER(2) // SELECT PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* BANT0 */ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* BANT1 */ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) /* BANT2 */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) /* SWING0 */ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) /* SWING1 */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) /* LOW */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(2) /* MID */ - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(2) /* HI */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // BANT0 + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // BANT1 + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // BANT2 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) // SWING0 + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) // SWING1 + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) // LOW + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(2) // MID + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(2) // HI PORT_MODIFY("DSW2") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:1") @@ -2465,23 +2333,23 @@ static INPUT_PORTS_START( exctleag ) PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - /* - Point Table: difference compared to Normal - Easy: you get more points by good play, and lose less points by bad play - Hard: you get less points by good play - Hardest: you get less points by good play, and lose more points by bad play - */ + // + // Point Table: difference compared to Normal + // Easy: you get more points by good play, and lose less points by bad play + // Hard: you get less points by good play + // Hardest: you get less points by good play, and lose more points by bad play + // - PORT_START("ANALOGX1") /* fake analog X */ + PORT_START("ANALOGX1") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_REVERSE - PORT_START("ANALOGY1") /* fake analog Y */ + PORT_START("ANALOGY1") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) - PORT_START("ANALOGX2") /* fake analog X */ + PORT_START("ANALOGX2") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(2) - PORT_START("ANALOGY2") /* fake analog Y */ + PORT_START("ANALOGY2") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(2) INPUT_PORTS_END @@ -2501,14 +2369,14 @@ static INPUT_PORTS_START( fpoint ) PORT_DIPSETTING( 0x30, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x40, 0x40, "Clear Round Allowed" ) PORT_DIPLOCATION("SW2:7") /* Use button 3 */ + PORT_DIPNAME( 0x40, 0x40, "Clear Round Allowed" ) PORT_DIPLOCATION("SW2:7") // Use button 3 PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x40, "2" ) - /* SW2:8 The mode in which a block falls at twice [ usual ] speed as this when playing 25 minutes or more on one coin. */ + // SW2:8 The mode in which a block falls at twice [ usual ] speed as this when playing 25 minutes or more on one coin. PORT_DIPNAME( 0x80, 0x80, "2 Cell Move" ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) - /* Switches 1, 3, 4 & 7 are listed as "Always off" */ + // Switches 1, 3, 4 & 7 are listed as "Always off" INPUT_PORTS_END @@ -2522,7 +2390,7 @@ static INPUT_PORTS_START( goldnaxe ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x3c, 0x3c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4,5,6") /* Definition according to manual */ + PORT_DIPNAME( 0x3c, 0x3c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4,5,6") // Definition according to manual PORT_DIPSETTING( 0x00, "Special" ) PORT_DIPSETTING( 0x14, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x1c, DEF_STR( Easier ) ) @@ -2579,13 +2447,13 @@ static INPUT_PORTS_START( hwchamp ) PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_START("MONITOR") /* monitor */ + PORT_START("MONITOR") // monitor PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(70) PORT_KEYDELTA(32) - PORT_START("RIGHT") /* right handle */ + PORT_START("RIGHT") // right handle PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(70) PORT_KEYDELTA(32) - PORT_START("LEFT") /* left handle */ + PORT_START("LEFT") // left handle PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(70) PORT_KEYDELTA(32) INPUT_PORTS_END @@ -2839,16 +2707,16 @@ static INPUT_PORTS_START( sdi ) PORT_DIPSETTING( 0x40, "100000" ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) - PORT_START("ANALOGX1") /* fake analog X */ + PORT_START("ANALOGX1") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_REVERSE - PORT_START("ANALOGY1") /* fake analog Y */ + PORT_START("ANALOGY1") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) - PORT_START("ANALOGX2") /* fake analog X */ + PORT_START("ANALOGX2") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(2) - PORT_START("ANALOGY2") /* fake analog Y */ + PORT_START("ANALOGY2") // fake analog Y PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(2) INPUT_PORTS_END @@ -3024,9 +2892,9 @@ static INPUT_PORTS_START( tetris ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("DSW2") - /* SW2:1,3,4,7,8 Unused according to manual. - From the code SW2:3,4 looks like some kind of difficulty level, - but all 4 levels points to the same place so it doesn't actually change anything!! */ + // SW2:1,3,4,7,8 Unused according to manual. + // From the code SW2:3,4 looks like some kind of difficulty level, + // but all 4 levels points to the same place so it doesn't actually change anything!! //"SW2:1" unused PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) @@ -3067,9 +2935,9 @@ static INPUT_PORTS_START( timescan ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWE:5") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) - PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SWE:6" ) /* Listed as "Unused" */ - PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SWE:7" ) /* Listed as "Unused" */ - PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SWE:8" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SWE:6" ) // Listed as "Unused" + PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SWE:7" ) // Listed as "Unused" + PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SWE:8" ) // Listed as "Unused" //"SWE:1" = "EXT.SW1" = Sega 56pin Edge "16" //"SWE:2" = "EXT.SW2" = "17" //"SWE:3" = "EXT.SW3" = "18" @@ -3106,11 +2974,11 @@ static INPUT_PORTS_START( timescan ) PORT_DIPNAME( 0x40, 0x40, "Pin Rebound" ) PORT_DIPLOCATION("SW2:7") // Rebounding strength of out-lane-pins PORT_DIPSETTING( 0x40, "Well" ) PORT_DIPSETTING( 0x00, "A Little" ) - /* - Pin Rebound = The Setting of "Well" or "A Little" signifies the - rebound strength and the resulting difficulty or ease in which the - ball goes out of play. - */ + // + // Pin Rebound = The Setting of "Well" or "A Little" signifies the + // rebound strength and the resulting difficulty or ease in which the + // ball goes out of play. + // PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x80, "3" ) PORT_DIPSETTING( 0x00, "5" ) @@ -3190,10 +3058,10 @@ static INPUT_PORTS_START( wb3 ) PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) PORT_DIPNAME( 0x40, 0x40, "Test Mode" ) PORT_DIPLOCATION("SW2:7") - PORT_DIPSETTING( 0x40, DEF_STR( No ) ) /* Normal game */ - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) /* Levels are selectable / Player is Invincible */ + PORT_DIPSETTING( 0x40, DEF_STR( No ) ) // Normal game + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // Levels are selectable / Player is Invincible //"SW2:8" unused - /* Switches 1 & 8 are listed as "Always off" */ + // Switches 1 & 8 are listed as "Always off" INPUT_PORTS_END @@ -3253,9 +3121,9 @@ static INPUT_PORTS_START( fz2 ) INPUT_PORTS_END -/* we use common sys16b tags to simplify port reads */ +// we use common sys16b tags to simplify port reads static INPUT_PORTS_START( atomicp ) - PORT_START("SERVICE") /* P1 */ + PORT_START("SERVICE") // P1 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY @@ -3265,7 +3133,7 @@ static INPUT_PORTS_START( atomicp ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_START("P1") /* P2 */ + PORT_START("P1") // P2 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) @@ -3275,7 +3143,7 @@ static INPUT_PORTS_START( atomicp ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_START("UNUSED") /* DSW1 */ + PORT_START("UNUSED") // DSW1 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) @@ -3300,16 +3168,16 @@ static INPUT_PORTS_START( atomicp ) PORT_DIPSETTING( 0x40, "3" ) PORT_DIPSETTING( 0x00, "5" ) - PORT_START("P2") /* DSW2 */ + PORT_START("P2") // DSW2 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x01, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x03, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Level_Select ) ) PORT_DIPLOCATION("SW2:3") /* doesn't seem to work? */ + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Level_Select ) ) PORT_DIPLOCATION("SW2:3") // doesn't seem to work? PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:4") /* doesn't seem to work? */ + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:4") // doesn't seem to work? PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5") @@ -3323,15 +3191,15 @@ static INPUT_PORTS_START( atomicp ) PORT_DIPSETTING( 0x00, "Atomic Point" ) PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_HIGH, "SW2:8" ) - PORT_START("DSW2") /* DUMMY */ + PORT_START("DSW2") // DUMMY - PORT_START("DSW1") /* DUMMY */ + PORT_START("DSW1") // DUMMY INPUT_PORTS_END -/* we use common sys16b tags to simplify port reads */ +// we use common sys16b tags to simplify port reads static INPUT_PORTS_START( snapper ) - PORT_START("SERVICE") /* P1 */ + PORT_START("SERVICE") // P1 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY @@ -3341,12 +3209,12 @@ static INPUT_PORTS_START( snapper ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("P1") /* SYSTEM */ + PORT_START("P1") // SYSTEM PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("UNUSED") /* DSW0 */ + PORT_START("UNUSED") // DSW0 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW0:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) @@ -3371,7 +3239,7 @@ static INPUT_PORTS_START( snapper ) PORT_DIPSETTING( 0x40, "3" ) PORT_DIPSETTING( 0x00, "5" ) - PORT_START("P2") /* DSW1 */ + PORT_START("P2") // DSW1 PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:1" ) PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW1:2" ) PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:3" ) @@ -3383,31 +3251,27 @@ static INPUT_PORTS_START( snapper ) PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:7" ) PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:8" ) - PORT_START("DSW2") /* DUMMY */ + PORT_START("DSW2") // DUMMY - PORT_START("DSW1") /* DUMMY */ + PORT_START("DSW1") // DUMMY INPUT_PORTS_END -/************************************* - * - * Sound definitions - * - *************************************/ +//************************************************************************** +// SOUND CONFIGURATIONS +//************************************************************************** static const upd7759_interface upd7759_config = { - upd7759_generate_nmi + &segas16b_state::upd7759_generate_nmi }; -/************************************* - * - * Graphics definitions - * - *************************************/ +//************************************************************************** +// GRAPHICS DECODING +//************************************************************************** static GFXDECODE_START( segas16b ) GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x3_planar, 0, 1024 ) @@ -3415,15 +3279,13 @@ GFXDECODE_END -/************************************* - * - * Generic machine drivers - * - *************************************/ +//************************************************************************** +// GENERIC MACHINE DRIVERS +//************************************************************************** -static MACHINE_CONFIG_START( system16b, segas1x_state ) +static MACHINE_CONFIG_START( system16b, segas16b_state ) - /* basic machine hardware */ + // basic machine hardware MCFG_CPU_ADD("maincpu", M68000, MASTER_CLOCK_10MHz) MCFG_CPU_PROGRAM_MAP(system16b_map) MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) @@ -3432,25 +3294,24 @@ static MACHINE_CONFIG_START( system16b, segas1x_state ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_IO_MAP(sound_portmap) - MCFG_MACHINE_RESET(system16b) MCFG_NVRAM_ADD_0FILL("nvram") - /* video hardware */ + MCFG_SEGA_315_5195_MAPPER_ADD("mapper", "maincpu", segas16b_state, memory_mapper, mapper_sound_r, mapper_sound_w) + + // video hardware MCFG_GFXDECODE(segas16b) MCFG_PALETTE_LENGTH(2048*3) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_25MHz/4, 400, 0, 320, 262, 0, 224) - MCFG_SCREEN_UPDATE_STATIC(system16b) - - MCFG_VIDEO_START(system16b) + MCFG_SCREEN_UPDATE_DRIVER(segas16b_state, screen_update) MCFG_SEGA16SP_ADD_16B("segaspr1") - /* sound hardware */ + // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("ymsnd", YM2151, MASTER_CLOCK_8MHz/2) + MCFG_SOUND_ADD("ym2151", YM2151, MASTER_CLOCK_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.43) MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK) @@ -3459,16 +3320,35 @@ static MACHINE_CONFIG_START( system16b, segas1x_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( system16b_8751, system16b ) +static MACHINE_CONFIG_DERIVED( system16b_fd1089a, system16b ) + MCFG_CPU_REPLACE("maincpu", FD1089A, MASTER_CLOCK_10MHz) + MCFG_CPU_PROGRAM_MAP(system16b_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( system16b_fd1089b, system16b ) + MCFG_CPU_REPLACE("maincpu", FD1089B, MASTER_CLOCK_10MHz) + MCFG_CPU_PROGRAM_MAP(system16b_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( system16b_fd1094, system16b ) + MCFG_CPU_REPLACE("maincpu", FD1094, MASTER_CLOCK_10MHz) + MCFG_CPU_PROGRAM_MAP(system16b_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( system16b_i8751, system16b ) MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_VBLANK_INT("screen", i8751_main_cpu_vblank) + MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas16b_state, i8751_main_cpu_vblank) MCFG_CPU_ADD("mcu", I8751, MASTER_CLOCK_8MHz) MCFG_CPU_IO_MAP(mcu_io_map) - MCFG_CPU_VBLANK_INT("screen", irq0_line_pulse) + MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas16b_state, irq0_line_pulse) MACHINE_CONFIG_END -/* same as the above, but with custom Sega ICs */ +// same as the above, but with custom Sega ICs static const ic_315_5250_interface sys16b_5250_intf = { @@ -3476,14 +3356,18 @@ static const ic_315_5250_interface sys16b_5250_intf = }; static MACHINE_CONFIG_DERIVED( system16b_5248, system16b ) - MCFG_315_5248_ADD("315_5248") MCFG_315_5250_ADD("315_5250_1", sys16b_5250_intf) MCFG_315_5250_ADD("315_5250_2", sys16b_5250_intf) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( system16b_8751_5248, system16b_8751 ) +static MACHINE_CONFIG_DERIVED( system16b_i8751_5248, system16b_i8751 ) + MCFG_315_5248_ADD("315_5248") + MCFG_315_5250_ADD("315_5250_1", sys16b_5250_intf) + MCFG_315_5250_ADD("315_5250_2", sys16b_5250_intf) +MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( system16b_fd1094_5248, system16b_fd1094 ) MCFG_315_5248_ADD("315_5248") MCFG_315_5250_ADD("315_5250_1", sys16b_5250_intf) MCFG_315_5250_ADD("315_5250_2", sys16b_5250_intf) @@ -3491,63 +3375,59 @@ MACHINE_CONFIG_END -/************************************* - * - * Game-specific machine drivers - * - *************************************/ +//************************************************************************** +// GAME-SPECIFIC MACHINE DRIVERS +//************************************************************************** -static MACHINE_CONFIG_DERIVED( atomicp, system16b ) /* 10MHz CPU Clock verified */ +static MACHINE_CONFIG_DERIVED( atomicp, system16b ) // 10MHz CPU Clock verified - /* basic machine hardware */ + // basic machine hardware MCFG_DEVICE_REMOVE("soundcpu") - MCFG_MACHINE_START(atomicp) - MCFG_TIMER_ADD_PERIODIC("atomicp_timer", atomicp_sound_irq, attotime::from_hz(10000)) - - /* sound hardware */ - MCFG_SOUND_REPLACE("ymsnd", YM2413, XTAL_20MHz/4) /* 20MHz OSC divided by 4 (verified) */ + // sound hardware + MCFG_DEVICE_REMOVE("ym2151") + MCFG_SOUND_ADD("ym2413", YM2413, XTAL_20MHz/4) // 20MHz OSC divided by 4 (verified) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_DEVICE_REMOVE("upd") MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( timescan, system16b ) - MCFG_VIDEO_START(timscanr) +static MACHINE_CONFIG_DERIVED( system16c, system16b ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(system16c_map) MACHINE_CONFIG_END -/************************************* - * - * ROM definition(s) - * - *************************************/ +//************************************************************************** +// ROM definitions +//************************************************************************** -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Ace Attacker, Sega System 16B - CPU: FD1094 (317-0059, also 317-0061 version known to be exist) - ROM Board type: 171-5358 -*/ + +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Ace Attacker, Sega System 16B +// CPU: FD1094 (317-0059, also 317-0061 version known to be exist) +// ROM Board type: 171-5358 +// ROM_START( aceattac ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11491.a4", 0x000000, 0x10000, CRC(f3c19c36) SHA1(e45ca6d1d943d6cc140867055033884c738e2ac2) ) ROM_LOAD16_BYTE( "epr-11489.a1", 0x000001, 0x10000, CRC(bbe623c5) SHA1(6d047699c7b6df7ebb7a3c9bee032e2536eed84c) ) ROM_LOAD16_BYTE( "epr-11492.a5", 0x020000, 0x10000, CRC(d8bd3139) SHA1(54915d4e8a616e0e54135ca34daf4357b8bfa068) ) ROM_LOAD16_BYTE( "epr-11490.a2", 0x020001, 0x10000, CRC(38cb3a41) SHA1(1d74cc69907cdff2d85e965b80bf3f551465257e) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0059.key", 0x0000, 0x2000, NO_DUMP ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11493.b9", 0x00000, 0x10000, CRC(654485d9) SHA1(b431270564c4e33fd70c8c85af1fcbff8b59ba49) ) ROM_LOAD( "epr-11494.b10", 0x10000, 0x10000, CRC(b67971ab) SHA1(95cb6927baf425bcc290832ea9741b19852c7a1b) ) ROM_LOAD( "epr-11495.b11", 0x20000, 0x10000, CRC(b687ab61) SHA1(b08130a9d777c918972895136b1bf520d7117114) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11501.b1", 0x00001, 0x10000, CRC(09179ead) SHA1(3e6bf04e1e9ea867d087a47ff04ad0a064a8e299) ) ROM_LOAD16_BYTE( "epr-11505.b5", 0x00000, 0x10000, CRC(b67f1ecf) SHA1(3a26cdf91e5a1a11c1a8857e713a9e00cc1bfce0) ) ROM_LOAD16_BYTE( "epr-11502.b2", 0x20001, 0x10000, CRC(a3ee36b8) SHA1(bc946ad67b8ad09d947465ab73160885a4a57be5) ) @@ -3557,7 +3437,7 @@ ROM_START( aceattac ) ROM_LOAD16_BYTE( "epr-11504.b4", 0x60001, 0x10000, CRC(7cae7920) SHA1(9f00e01d7cc86a0bf4f84e78a56b7efbb97c5591) ) ROM_LOAD16_BYTE( "epr-11508.b8", 0x60000, 0x10000, CRC(5cbb833c) SHA1(dc7041b6a4fa75d050bfc2176d0f9e242b55a0b8) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11496.a7", 0x00000, 0x08000, CRC(82cb40a9) SHA1(daf2233438331ba6e6ff8bda4015e92d23e616c5) ) ROM_LOAD( "epr-11497.a8", 0x10000, 0x08000, CRC(b04f62cc) SHA1(29b468e5a565dc14e00c371913663eca66ccb44d) ) ROM_LOAD( "epr-11498.a9", 0x20000, 0x08000, CRC(97baf52b) SHA1(97800014250b0099c7e53d597b0ef02ae14e6dba) ) @@ -3566,15 +3446,15 @@ ROM_START( aceattac ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Alien Syndrome, Sega System 16B - CPU: 68000 - ROM Board type: 171-5358 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Alien Syndrome, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5358 +// ROM_START( aliensyn ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11083.a4", 0x00000, 0x8000, CRC(cb2ad9b3) SHA1(66284b4e1071b3cb4b36960a2dba8949325f9e86) ) ROM_LOAD16_BYTE( "epr-11080.a1", 0x00001, 0x8000, CRC(fe7378d9) SHA1(acfee79e5fe9fdf95926562c02599e96e96f76b5) ) ROM_LOAD16_BYTE( "epr-11084.a5", 0x10000, 0x8000, CRC(2e1ec7b1) SHA1(666a9e402d7d02d74c0a2468853a3843b161c1a2) ) @@ -3582,12 +3462,12 @@ ROM_START( aliensyn ) ROM_LOAD16_BYTE( "epr-11085.a6", 0x20000, 0x8000, CRC(cff78f39) SHA1(78431ce6c03232150a8db15499da9371977b570b) ) ROM_LOAD16_BYTE( "epr-11082.a3", 0x20001, 0x8000, CRC(9cdc2a14) SHA1(c06693f45675e31d591703c27bb3f6ec02fc1215) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10702.b9", 0x00000, 0x10000, CRC(393bc813) SHA1(672782c8fb2a6e454b27e073acc26130cacf3e50) ) ROM_LOAD( "epr-10703.b10", 0x10000, 0x10000, CRC(6b6dd9f5) SHA1(964409c6630caa13caf7d644d0c6fb071860b61b) ) ROM_LOAD( "epr-10704.b11", 0x20000, 0x10000, CRC(911e7ebc) SHA1(f03d3d3a09d19f7b705f9cb29f73140a3073463f) ) - ROM_REGION16_BE( 0x080000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x080000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10709.b1", 0x00001, 0x10000, CRC(addf0a90) SHA1(a92c9531f1817763773471ce63f566b9e88360a0) ) ROM_LOAD16_BYTE( "epr-10713.b5", 0x00000, 0x10000, CRC(ececde3a) SHA1(9c12d4665179bf433c42f5ddc8a043ad592aa90e) ) ROM_LOAD16_BYTE( "epr-10710.b2", 0x20001, 0x10000, CRC(992369eb) SHA1(c6796acf6807e9ba4c3d241903653f91adf4764e) ) @@ -3597,23 +3477,23 @@ ROM_START( aliensyn ) ROM_LOAD16_BYTE( "epr-10712.b4", 0x60001, 0x10000, CRC(876ad019) SHA1(39973ddb5a5746e0e094c759447bff1130c72c84) ) ROM_LOAD16_BYTE( "epr-10716.b8", 0x60000, 0x10000, CRC(40ba1d48) SHA1(e2d4d2689bb9b9bdc85e7f72a6665e5fd4c583aa) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10723.a7", 0x00000, 0x8000, CRC(99953526) SHA1(4a980370923fd5d3dc9e25d42a032c9e78c7ff47) ) ROM_LOAD( "epr-10724.a8", 0x10000, 0x8000, CRC(f971a817) SHA1(502c95638e4fd5f87e5fc837cb44b39a5d62f4e4) ) ROM_LOAD( "epr-10725.a9", 0x20000, 0x8000, CRC(6a50e08f) SHA1(d34b2ccadb8b07d5ad99cab5c5b5b79642c65574) ) ROM_LOAD( "epr-10726.a10", 0x30000, 0x8000, CRC(d50b7736) SHA1(b1f8e3b0cf2ffee5382098100cfabe21b383cd51) ) ROM_END -/************************************************************************************************************************** - Alien Syndrome, Sega System 16B - CPU: FD1089A (317-0033) - ROM Board type: 171-5358 - Sega game ID: 833-6308-03 - Main board: 837-6312 - Rom board: 834-6311-03 -*/ +//************************************************************************************************************************* +// Alien Syndrome, Sega System 16B +// CPU: FD1089A (317-0033) +// ROM Board type: 171-5358 +// Sega game ID: 833-6308-03 +// Main board: 837-6312 +// Rom board: 834-6311-03 +// ROM_START( aliensyn3 ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10816.a4", 0x00000, 0x8000, CRC(17bf5304) SHA1(f6318c6c4a606d21ba43354229b60a51d8a3baa6) ) ROM_LOAD16_BYTE( "epr-10814.a1", 0x00001, 0x8000, CRC(4cd134df) SHA1(541377bd6eba280d7f0367694032891989762485) ) ROM_LOAD16_BYTE( "epr-10817.a5", 0x10000, 0x8000, CRC(c8b791b0) SHA1(7a83a6781ed5b43583d86d4ee5fb3120a650874b) ) @@ -3621,12 +3501,12 @@ ROM_START( aliensyn3 ) ROM_LOAD16_BYTE( "epr-10822a.a6", 0x20000, 0x8000, CRC(1d0790aa) SHA1(c141b12aa7e4f86b96eabeb3f827ee26ddacde34) ) ROM_LOAD16_BYTE( "epr-10819a.a3", 0x20001, 0x8000, CRC(1e7586b7) SHA1(be4c2c03119aee1b8f26f3dd79c99ce431a43b28) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10702.b9", 0x00000, 0x10000, CRC(393bc813) SHA1(672782c8fb2a6e454b27e073acc26130cacf3e50) ) ROM_LOAD( "epr-10703.b10", 0x10000, 0x10000, CRC(6b6dd9f5) SHA1(964409c6630caa13caf7d644d0c6fb071860b61b) ) ROM_LOAD( "epr-10704.b11", 0x20000, 0x10000, CRC(911e7ebc) SHA1(f03d3d3a09d19f7b705f9cb29f73140a3073463f) ) - ROM_REGION16_BE( 0x080000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x080000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10709.b1", 0x00001, 0x10000, CRC(addf0a90) SHA1(a92c9531f1817763773471ce63f566b9e88360a0) ) ROM_LOAD16_BYTE( "epr-10713.b5", 0x00000, 0x10000, CRC(ececde3a) SHA1(9c12d4665179bf433c42f5ddc8a043ad592aa90e) ) ROM_LOAD16_BYTE( "epr-10710.b2", 0x20001, 0x10000, CRC(992369eb) SHA1(c6796acf6807e9ba4c3d241903653f91adf4764e) ) @@ -3636,27 +3516,27 @@ ROM_START( aliensyn3 ) ROM_LOAD16_BYTE( "epr-10712.b4", 0x60001, 0x10000, CRC(876ad019) SHA1(39973ddb5a5746e0e094c759447bff1130c72c84) ) ROM_LOAD16_BYTE( "epr-10716.b8", 0x60000, 0x10000, CRC(40ba1d48) SHA1(e2d4d2689bb9b9bdc85e7f72a6665e5fd4c583aa) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10723.a7", 0x00000, 0x8000, CRC(99953526) SHA1(4a980370923fd5d3dc9e25d42a032c9e78c7ff47) ) ROM_LOAD( "epr-10724.a8", 0x10000, 0x8000, CRC(f971a817) SHA1(502c95638e4fd5f87e5fc837cb44b39a5d62f4e4) ) ROM_LOAD( "epr-10725.a9", 0x20000, 0x8000, CRC(6a50e08f) SHA1(d34b2ccadb8b07d5ad99cab5c5b5b79642c65574) ) ROM_LOAD( "epr-10726.a10", 0x30000, 0x8000, CRC(d50b7736) SHA1(b1f8e3b0cf2ffee5382098100cfabe21b383cd51) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0033.key", 0x0000, 0x2000, CRC(49e882e5) SHA1(29d87af8fc775b22a9a546c112f8f5e7f700ac1a) ) ROM_END -/************************************************************************************************************************** - Alien Syndrome, Sega System 16B - CPU: FD1089A (317-0033) - ROM Board type: 171-5358 - Sega game ID: 833-6308 - Main board: 837-6312 - Rom board: 834-6311 -*/ +//************************************************************************************************************************* +// Alien Syndrome, Sega System 16B +// CPU: FD1089A (317-0033) +// ROM Board type: 171-5358 +// Sega game ID: 833-6308 +// Main board: 837-6312 +// Rom board: 834-6311 +// ROM_START( aliensynj ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10720a.a4", 0x00000, 0x8000, CRC(1b920893) SHA1(f40ace9cd69c7f7910440a20bf8a3249351d28af) ) ROM_LOAD16_BYTE( "epr-10717a.a1", 0x00001, 0x8000, CRC(972ae358) SHA1(dd64427d8c90ff8c6a43af2bbc3a04de6fc27f68) ) ROM_LOAD16_BYTE( "epr-10721a.a5", 0x10000, 0x8000, CRC(f4d2d1c3) SHA1(93503cab11c8eb84059ef86ea6fbf39035dbd914) ) @@ -3664,12 +3544,12 @@ ROM_START( aliensynj ) ROM_LOAD16_BYTE( "epr-10722a.a6", 0x20000, 0x8000, CRC(1d0790aa) SHA1(c141b12aa7e4f86b96eabeb3f827ee26ddacde34) ) ROM_LOAD16_BYTE( "epr-10719a.a3", 0x20001, 0x8000, CRC(1e7586b7) SHA1(be4c2c03119aee1b8f26f3dd79c99ce431a43b28) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10702.b9", 0x00000, 0x10000, CRC(393bc813) SHA1(672782c8fb2a6e454b27e073acc26130cacf3e50) ) ROM_LOAD( "epr-10703.b10", 0x10000, 0x10000, CRC(6b6dd9f5) SHA1(964409c6630caa13caf7d644d0c6fb071860b61b) ) ROM_LOAD( "epr-10704.b11", 0x20000, 0x10000, CRC(911e7ebc) SHA1(f03d3d3a09d19f7b705f9cb29f73140a3073463f) ) - ROM_REGION16_BE( 0x080000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x080000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10709.b1", 0x00001, 0x10000, CRC(addf0a90) SHA1(a92c9531f1817763773471ce63f566b9e88360a0) ) ROM_LOAD16_BYTE( "epr-10713.b5", 0x00000, 0x10000, CRC(ececde3a) SHA1(9c12d4665179bf433c42f5ddc8a043ad592aa90e) ) ROM_LOAD16_BYTE( "epr-10710.b2", 0x20001, 0x10000, CRC(992369eb) SHA1(c6796acf6807e9ba4c3d241903653f91adf4764e) ) @@ -3679,36 +3559,36 @@ ROM_START( aliensynj ) ROM_LOAD16_BYTE( "epr-10712.b4", 0x60001, 0x10000, CRC(876ad019) SHA1(39973ddb5a5746e0e094c759447bff1130c72c84) ) ROM_LOAD16_BYTE( "epr-10716.b8", 0x60000, 0x10000, CRC(40ba1d48) SHA1(e2d4d2689bb9b9bdc85e7f72a6665e5fd4c583aa) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10723.a7", 0x00000, 0x8000, CRC(99953526) SHA1(4a980370923fd5d3dc9e25d42a032c9e78c7ff47) ) ROM_LOAD( "epr-10724.a8", 0x10000, 0x8000, CRC(f971a817) SHA1(502c95638e4fd5f87e5fc837cb44b39a5d62f4e4) ) ROM_LOAD( "epr-10725.a9", 0x20000, 0x8000, CRC(6a50e08f) SHA1(d34b2ccadb8b07d5ad99cab5c5b5b79642c65574) ) ROM_LOAD( "epr-10726.a10", 0x30000, 0x8000, CRC(d50b7736) SHA1(b1f8e3b0cf2ffee5382098100cfabe21b383cd51) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0033.key", 0x0000, 0x2000, CRC(49e882e5) SHA1(29d87af8fc775b22a9a546c112f8f5e7f700ac1a) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Altered Beast, Sega System 16B - CPU: 68000 + i8751 (317-0078) - ROM Board type: 171-5521 - Sega ID# for ROM board: 834-6661-10 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Altered Beast, Sega System 16B +// CPU: 68000 + i8751 (317-0078) +// ROM Board type: 171-5521 +// Sega ID# for ROM board: 834-6661-10 +// ROM_START( altbeast ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11907.a7", 0x000000, 0x20000, CRC(29e0c3ad) SHA1(94ccd4f4e2a63424a0c90bf75ce13b8cca71ed09) ) ROM_LOAD16_BYTE( "epr-11906.a5", 0x000001, 0x20000, CRC(4c9e9cd8) SHA1(1cdfb6187d2b2f5c89cfb945bcdfd80743e775e3) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-11674.a14", 0x00000, 0x20000, CRC(a57a66d5) SHA1(5103583d48997abad12a0c5fee26431c486ced52) ) ROM_LOAD( "opr-11675.a15", 0x20000, 0x20000, CRC(2ef2f144) SHA1(38d22d609db2d9b6067b5d12f6499436de4605cb) ) ROM_LOAD( "opr-11676.a16", 0x40000, 0x20000, CRC(0c04acac) SHA1(87fe2a0dd9913f9550e9b4cbc7e7465b61640e07) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11677.b1", 0x00001, 0x20000, CRC(a01425cd) SHA1(72be5ec29e476601f9bf6aaedef9b73cedeb42f0) ) ROM_LOAD16_BYTE( "epr-11681.b5", 0x00000, 0x20000, CRC(d9e03363) SHA1(995a7c6a8f0c61468b57a3bb407461a2a3ae8adc) ) ROM_LOAD16_BYTE( "epr-11678.b2", 0x40001, 0x20000, CRC(17a9fc53) SHA1(85a9a605742ae5aab86db37189b9ee4d54c70e56) ) @@ -3718,34 +3598,34 @@ ROM_START( altbeast ) ROM_LOAD16_BYTE( "epr-11680.b4", 0xc0001, 0x20000, CRC(f43dcdec) SHA1(2941500cf33afca487f19f2329033d5d17aad826) ) ROM_LOAD16_BYTE( "epr-11684.b8", 0xc0000, 0x20000, CRC(b20c0edb) SHA1(6c8694d05e3adac37c9015037ab800233371db36) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11671.a10", 0x00000, 0x08000, CRC(2b71343b) SHA1(8a657f787de2b9d5161ed2c109642a148348af09) ) ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* Intel i8751 protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // Intel i8751 protection MCU ROM_LOAD( "317-0078.mcu", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - Altered Beast, Sega System 16B - CPU: 68000 + i8751 (317-0077) - ROM Board type: 171-5521 -*/ +//************************************************************************************************************************* +// Altered Beast, Sega System 16B +// CPU: 68000 + i8751 (317-0077) +// ROM Board type: 171-5521 +// ROM_START( altbeastj ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11885.a7", 0x000000, 0x20000, CRC(5bb715aa) SHA1(ad69ea126a366274a696cf0e11f50829031e5581) ) ROM_LOAD16_BYTE( "epr-11884.a5", 0x000001, 0x20000, CRC(e1707090) SHA1(2a262741a724bf282c0380113001b8da39afba43) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) // plane 1 ROM_LOAD( "epr-11736.b14", 0x20000, 0x10000, CRC(e9ad5e89) SHA1(769628eee6e194a84aa8a3729f4e7d07dd3ba25c) ) - ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) /* plane 2 */ + ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) // plane 2 ROM_LOAD( "epr-11737.b15", 0x60000, 0x10000, CRC(2e420023) SHA1(3aa2c3b6fccafb4d53b6ab99b95181d3eed7c77f) ) - ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) /* plane 3 */ + ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) // plane 3 ROM_LOAD( "epr-11738.b16", 0xa0000, 0x10000, CRC(de3d6d02) SHA1(428811f21c68761022521a17fc4716f6e7214b20) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11725.b1", 0x000001, 0x010000, CRC(f8b3684e) SHA1(3de2685cae5fb3c954b8440fafce313072747469) ) ROM_LOAD16_BYTE( "epr-11729.b5", 0x000000, 0x010000, CRC(ae3c2793) SHA1(c4f46861ea63ffa3c038a1ef931479b94e5382df) ) ROM_LOAD16_BYTE( "epr-11726.b2", 0x040001, 0x010000, CRC(3cce5419) SHA1(fccdbd6d05f5927272e7d6e5f997418d4fa2baf5) ) @@ -3761,34 +3641,34 @@ ROM_START( altbeastj ) ROM_LOAD16_BYTE( "epr-11719.a3", 0x180001, 0x010000, CRC(339987f7) SHA1(b5650f8bdbd44510e84686b20daf70bc4a564f28) ) ROM_LOAD16_BYTE( "epr-11735.b12", 0x180000, 0x010000, CRC(4fe406aa) SHA1(7f068b81f35be4cc4785824ed524d28f201ff0a5) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11671.a10", 0x00000, 0x08000, CRC(2b71343b) SHA1(8a657f787de2b9d5161ed2c109642a148348af09) ) ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* Intel i8751 protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // Intel i8751 protection MCU ROM_LOAD( "317-0077.mcu", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - Altered Beast, Sega System 16B - CPU: 68000 + i8751 (317-0076) - ROM Board type: 171-5521 -*/ +//************************************************************************************************************************* +// Altered Beast, Sega System 16B +// CPU: 68000 + i8751 (317-0076) +// ROM Board type: 171-5521 +// ROM_START( altbeast6 ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11883.a7", 0x000000, 0x20000, CRC(c5b3e8f7) SHA1(06c59d38093330b74f685cb02f8c7311e4a7b38c) ) ROM_LOAD16_BYTE( "epr-11882.a5", 0x000001, 0x20000, CRC(9c01170b) SHA1(7651f791e5488ce1143eeb4ad01eb924d1460170) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) // plane 1 ROM_LOAD( "epr-11736.b14", 0x20000, 0x10000, CRC(e9ad5e89) SHA1(769628eee6e194a84aa8a3729f4e7d07dd3ba25c) ) - ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) /* plane 2 */ + ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) // plane 2 ROM_LOAD( "epr-11737.b15", 0x60000, 0x10000, CRC(2e420023) SHA1(3aa2c3b6fccafb4d53b6ab99b95181d3eed7c77f) ) - ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) /* plane 3 */ + ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) // plane 3 ROM_LOAD( "epr-11738.b16", 0xa0000, 0x10000, CRC(de3d6d02) SHA1(428811f21c68761022521a17fc4716f6e7214b20) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11725.b1", 0x000001, 0x010000, CRC(f8b3684e) SHA1(3de2685cae5fb3c954b8440fafce313072747469) ) ROM_LOAD16_BYTE( "epr-11729.b5", 0x000000, 0x010000, CRC(ae3c2793) SHA1(c4f46861ea63ffa3c038a1ef931479b94e5382df) ) ROM_LOAD16_BYTE( "epr-11726.b2", 0x040001, 0x010000, CRC(3cce5419) SHA1(fccdbd6d05f5927272e7d6e5f997418d4fa2baf5) ) @@ -3804,40 +3684,40 @@ ROM_START( altbeast6 ) ROM_LOAD16_BYTE( "epr-11719.a3", 0x180001, 0x010000, CRC(339987f7) SHA1(b5650f8bdbd44510e84686b20daf70bc4a564f28) ) ROM_LOAD16_BYTE( "epr-11735.b12", 0x180000, 0x010000, CRC(4fe406aa) SHA1(7f068b81f35be4cc4785824ed524d28f201ff0a5) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11671.a10", 0x00000, 0x08000, CRC(2b71343b) SHA1(8a657f787de2b9d5161ed2c109642a148348af09) ) ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* Intel i8751 protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // Intel i8751 protection MCU ROM_LOAD( "317-0076.mcu", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - Altered Beast, Sega System 16B - CPU: FD1094 (317-0069) - ROM Board type: 171-5521 - Sega game ID: 833-6660-07 - Main board: 837-6662-05 - ROM board: 834-6661-07 -*/ +//************************************************************************************************************************* +// Altered Beast, Sega System 16B +// CPU: FD1094 (317-0069) +// ROM Board type: 171-5521 +// Sega game ID: 833-6660-07 +// Main board: 837-6662-05 +// ROM board: 834-6661-07 +// ROM_START( altbeast5 ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11742.a7", 0x000000, 0x20000, CRC(61839534) SHA1(0246985ec642fb44d33acbbbec9f6a1936afb302) ) ROM_LOAD16_BYTE( "epr-11741.a5", 0x000001, 0x20000, CRC(9b2159cb) SHA1(dba53afcbb42be3e2611d00324bca6544faec071) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ - ROM_LOAD( "317-0069.key", 0x0000, 0x2000, CRC(959e256a) SHA1(392832620ddbe549b3a807ef226dadbf861a16ee) ) /* The "9" was printed over a "3" */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key + ROM_LOAD( "317-0069.key", 0x0000, 0x2000, CRC(959e256a) SHA1(392832620ddbe549b3a807ef226dadbf861a16ee) ) // The "9" was printed over a "3" - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) // plane 1 ROM_LOAD( "epr-11736.b14", 0x20000, 0x10000, CRC(e9ad5e89) SHA1(769628eee6e194a84aa8a3729f4e7d07dd3ba25c) ) - ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) /* plane 2 */ + ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) // plane 2 ROM_LOAD( "epr-11737.b15", 0x60000, 0x10000, CRC(2e420023) SHA1(3aa2c3b6fccafb4d53b6ab99b95181d3eed7c77f) ) - ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) /* plane 3 */ + ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) // plane 3 ROM_LOAD( "epr-11738.b16", 0xa0000, 0x10000, CRC(de3d6d02) SHA1(428811f21c68761022521a17fc4716f6e7214b20) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11725.b1", 0x000001, 0x010000, CRC(f8b3684e) SHA1(3de2685cae5fb3c954b8440fafce313072747469) ) ROM_LOAD16_BYTE( "epr-11729.b5", 0x000000, 0x010000, CRC(ae3c2793) SHA1(c4f46861ea63ffa3c038a1ef931479b94e5382df) ) ROM_LOAD16_BYTE( "epr-11726.b2", 0x040001, 0x010000, CRC(3cce5419) SHA1(fccdbd6d05f5927272e7d6e5f997418d4fa2baf5) ) @@ -3853,32 +3733,32 @@ ROM_START( altbeast5 ) ROM_LOAD16_BYTE( "epr-11719.a3", 0x180001, 0x010000, CRC(339987f7) SHA1(b5650f8bdbd44510e84686b20daf70bc4a564f28) ) ROM_LOAD16_BYTE( "epr-11735.b12", 0x180000, 0x010000, CRC(4fe406aa) SHA1(7f068b81f35be4cc4785824ed524d28f201ff0a5) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11671.a10", 0x00000, 0x08000, CRC(2b71343b) SHA1(8a657f787de2b9d5161ed2c109642a148348af09) ) ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) ROM_END -/************************************************************************************************************************** - Altered Beast, Sega System 16B - CPU: 68000 + MC-8123B 317-0066 - ROM Board type: 171-5521 - Sega ID# for ROM board: 834-6661-06 -*/ +//************************************************************************************************************************* +// Altered Beast, Sega System 16B +// CPU: 68000 + MC-8123B 317-0066 +// ROM Board type: 171-5521 +// Sega ID# for ROM board: 834-6661-06 +// ROM_START( altbeast4 ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11740.a7", 0x000000, 0x20000, CRC(ce227542) SHA1(54adcc1246943360bb68498e971809a0d4f9fe0c) ) ROM_LOAD16_BYTE( "epr-11739.a5", 0x000001, 0x20000, CRC(e466eb65) SHA1(c9bb57818eb81a43abdf2ad2a79a0bd45c25d208) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) // plane 1 ROM_LOAD( "epr-11736.b14", 0x20000, 0x10000, CRC(e9ad5e89) SHA1(769628eee6e194a84aa8a3729f4e7d07dd3ba25c) ) - ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) /* plane 2 */ + ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) // plane 2 ROM_LOAD( "epr-11737.b15", 0x60000, 0x10000, CRC(2e420023) SHA1(3aa2c3b6fccafb4d53b6ab99b95181d3eed7c77f) ) - ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) /* plane 3 */ + ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) // plane 3 ROM_LOAD( "epr-11738.b16", 0xa0000, 0x10000, CRC(de3d6d02) SHA1(428811f21c68761022521a17fc4716f6e7214b20) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11725.b1", 0x000001, 0x010000, CRC(f8b3684e) SHA1(3de2685cae5fb3c954b8440fafce313072747469) ) ROM_LOAD16_BYTE( "epr-11729.b5", 0x000000, 0x010000, CRC(ae3c2793) SHA1(c4f46861ea63ffa3c038a1ef931479b94e5382df) ) ROM_LOAD16_BYTE( "epr-11726.b2", 0x040001, 0x010000, CRC(3cce5419) SHA1(fccdbd6d05f5927272e7d6e5f997418d4fa2baf5) ) @@ -3894,37 +3774,37 @@ ROM_START( altbeast4 ) ROM_LOAD16_BYTE( "epr-11719.a3", 0x180001, 0x010000, CRC(339987f7) SHA1(b5650f8bdbd44510e84686b20daf70bc4a564f28) ) ROM_LOAD16_BYTE( "epr-11735.b12", 0x180000, 0x010000, CRC(4fe406aa) SHA1(7f068b81f35be4cc4785824ed524d28f201ff0a5) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11686.a10", 0x00000, 0x08000, CRC(828a45b3) SHA1(df921701b411afac1b6716b6798a1bffc2180133) ) // encrypted ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) - ROM_REGION( 0x2000, "mcu", 0 ) /* MC8123 key */ + ROM_REGION( 0x2000, "mcu", 0 ) // MC8123 key ROM_LOAD( "317-0066.key", 0x0000, 0x2000, CRC(ed85a054) SHA1(dcc84ec077a8a489f45abfd2bf4a9ba377da28a5) ) ROM_END -/************************************************************************************************************************** - Jyuohki (Altered Beast), Sega System 16B - CPU: FD1094 (317-0068) - ROM Board type: 171-5521 -*/ +//************************************************************************************************************************* +// Jyuohki (Altered Beast), Sega System 16B +// CPU: FD1094 (317-0068) +// ROM Board type: 171-5521 +// ROM_START( altbeastj3 ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11721.a7", 0x000000, 0x20000, CRC(1c5d11de) SHA1(106def35c274382d851b803c4b9058fbe5a613ff) ) ROM_LOAD16_BYTE( "epr-11720.a5", 0x000001, 0x20000, CRC(735350cf) SHA1(35c182edf0a1335bc067a8269f0e9136ff89745c) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0068.key", 0x0000, 0x2000, CRC(c1ed4310) SHA1(daed4c8a09f507d7f4cb13ab6dd82b2cf8ff006b) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "epr-11722.a14", 0x00000, 0x10000, CRC(adaa8db5) SHA1(3262c98d13d08c333d16052cac841f44d2f99743) ) // plane 1 ROM_LOAD( "epr-11736.b14", 0x20000, 0x10000, CRC(e9ad5e89) SHA1(769628eee6e194a84aa8a3729f4e7d07dd3ba25c) ) - ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) /* plane 2 */ + ROM_LOAD( "epr-11723.a15", 0x40000, 0x10000, CRC(131a3f9a) SHA1(8182c3b8ce7a2f02b226cfa2081187593c9d0d0b) ) // plane 2 ROM_LOAD( "epr-11737.b15", 0x60000, 0x10000, CRC(2e420023) SHA1(3aa2c3b6fccafb4d53b6ab99b95181d3eed7c77f) ) - ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) /* plane 3 */ + ROM_LOAD( "epr-11724.a16", 0x80000, 0x10000, CRC(6f2ed50a) SHA1(55d0c4299e7240b0ef5316b48db7a158145c76ab) ) // plane 3 ROM_LOAD( "epr-11738.b16", 0xa0000, 0x10000, CRC(de3d6d02) SHA1(428811f21c68761022521a17fc4716f6e7214b20) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11725.b1", 0x000001, 0x010000, CRC(f8b3684e) SHA1(3de2685cae5fb3c954b8440fafce313072747469) ) ROM_LOAD16_BYTE( "epr-11729.b5", 0x000000, 0x010000, CRC(ae3c2793) SHA1(c4f46861ea63ffa3c038a1ef931479b94e5382df) ) ROM_LOAD16_BYTE( "epr-11726.b2", 0x040001, 0x010000, CRC(3cce5419) SHA1(fccdbd6d05f5927272e7d6e5f997418d4fa2baf5) ) @@ -3940,29 +3820,29 @@ ROM_START( altbeastj3 ) ROM_LOAD16_BYTE( "epr-11719.a3", 0x180001, 0x010000, CRC(339987f7) SHA1(b5650f8bdbd44510e84686b20daf70bc4a564f28) ) ROM_LOAD16_BYTE( "epr-11735.b12", 0x180000, 0x010000, CRC(4fe406aa) SHA1(7f068b81f35be4cc4785824ed524d28f201ff0a5) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11671.a10", 0x00000, 0x08000, CRC(2b71343b) SHA1(8a657f787de2b9d5161ed2c109642a148348af09) ) ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) ROM_END -/************************************************************************************************************************** - Altered Beast, Sega System 16B - CPU: 68000 + MC8123B (317-0066) - ROM Board type: 171-5521 - Sega ID# for ROM board: 834-6661-02 -*/ +//************************************************************************************************************************* +// Altered Beast, Sega System 16B +// CPU: 68000 + MC8123B (317-0066) +// ROM Board type: 171-5521 +// Sega ID# for ROM board: 834-6661-02 +// ROM_START( altbeast2 ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11705.a7", 0x000000, 0x20000, CRC(57dc5c7a) SHA1(a5cc9b10a00778f5163fc915b956fa5d0d7a37ce) ) ROM_LOAD16_BYTE( "epr-11704.a5", 0x000001, 0x20000, CRC(33bbcf07) SHA1(534e5426580dbf72509dceb762b8b99766d3a739) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-11674.a14", 0x00000, 0x20000, CRC(a57a66d5) SHA1(5103583d48997abad12a0c5fee26431c486ced52) ) ROM_LOAD( "opr-11675.a15", 0x20000, 0x20000, CRC(2ef2f144) SHA1(38d22d609db2d9b6067b5d12f6499436de4605cb) ) ROM_LOAD( "opr-11676.a16", 0x40000, 0x20000, CRC(0c04acac) SHA1(87fe2a0dd9913f9550e9b4cbc7e7465b61640e07) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11677.b1", 0x00001, 0x20000, CRC(a01425cd) SHA1(72be5ec29e476601f9bf6aaedef9b73cedeb42f0) ) ROM_LOAD16_BYTE( "epr-11681.b5", 0x00000, 0x20000, CRC(d9e03363) SHA1(995a7c6a8f0c61468b57a3bb407461a2a3ae8adc) ) ROM_LOAD16_BYTE( "epr-11678.b2", 0x40001, 0x20000, CRC(17a9fc53) SHA1(85a9a605742ae5aab86db37189b9ee4d54c70e56) ) @@ -3972,34 +3852,34 @@ ROM_START( altbeast2 ) ROM_LOAD16_BYTE( "epr-11680.b4", 0xc0001, 0x20000, CRC(f43dcdec) SHA1(2941500cf33afca487f19f2329033d5d17aad826) ) ROM_LOAD16_BYTE( "epr-11684.b8", 0xc0000, 0x20000, CRC(b20c0edb) SHA1(6c8694d05e3adac37c9015037ab800233371db36) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11686.a10", 0x00000, 0x08000, CRC(828a45b3) SHA1(df921701b411afac1b6716b6798a1bffc2180133) ) // encrypted ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) - ROM_REGION( 0x2000, "mcu", 0 ) /* MC8123 key */ + ROM_REGION( 0x2000, "mcu", 0 ) // MC8123 key ROM_LOAD( "317-0066.key", 0x0000, 0x2000, CRC(ed85a054) SHA1(dcc84ec077a8a489f45abfd2bf4a9ba377da28a5) ) ROM_END -/************************************************************************************************************************** - Jyuohki (Altered Beast), Sega System 16B - CPU: FD1094 (317-0065) - ROM Board type: 171-5521 -*/ +//************************************************************************************************************************* +// Jyuohki (Altered Beast), Sega System 16B +// CPU: FD1094 (317-0065) +// ROM Board type: 171-5521 +// ROM_START( altbeastj1 ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11670.a7", 0x000000, 0x20000, CRC(b748eb07) SHA1(f3663831610bcb358340f14c2c96833dd7591bfb) ) ROM_LOAD16_BYTE( "epr-11669.a5", 0x000001, 0x20000, CRC(005ecd11) SHA1(c392195955cf727752f03db92414701cc2bf1f4a) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0065.key", 0x0000, 0x2000, NO_DUMP ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-11674.a14", 0x00000, 0x20000, CRC(a57a66d5) SHA1(5103583d48997abad12a0c5fee26431c486ced52) ) ROM_LOAD( "opr-11675.a15", 0x20000, 0x20000, CRC(2ef2f144) SHA1(38d22d609db2d9b6067b5d12f6499436de4605cb) ) ROM_LOAD( "opr-11676.a16", 0x40000, 0x20000, CRC(0c04acac) SHA1(87fe2a0dd9913f9550e9b4cbc7e7465b61640e07) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11677.b1", 0x00001, 0x20000, CRC(a01425cd) SHA1(72be5ec29e476601f9bf6aaedef9b73cedeb42f0) ) ROM_LOAD16_BYTE( "epr-11681.b5", 0x00000, 0x20000, CRC(d9e03363) SHA1(995a7c6a8f0c61468b57a3bb407461a2a3ae8adc) ) ROM_LOAD16_BYTE( "epr-11678.b2", 0x40001, 0x20000, CRC(17a9fc53) SHA1(85a9a605742ae5aab86db37189b9ee4d54c70e56) ) @@ -4009,83 +3889,81 @@ ROM_START( altbeastj1 ) ROM_LOAD16_BYTE( "epr-11680.b4", 0xc0001, 0x20000, CRC(f43dcdec) SHA1(2941500cf33afca487f19f2329033d5d17aad826) ) ROM_LOAD16_BYTE( "epr-11684.b8", 0xc0000, 0x20000, CRC(b20c0edb) SHA1(6c8694d05e3adac37c9015037ab800233371db36) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11671.a10", 0x00000, 0x08000, CRC(2b71343b) SHA1(8a657f787de2b9d5161ed2c109642a148348af09) ) ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) ) ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Atomic Point - - Custom Korean Board - NOT Sega: - - CPU: TMP68000P-10 - OSC: 25.1748MHz & 20MHz - Chips: Philko PK8702 - Philko PK8811 - Dips: Two 8-way dipswitch banks - Sound: Yamaha YM2413 - -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Atomic Point +// +// Custom Korean Board - NOT Sega: +// +// CPU: TMP68000P-10 +// OSC: 25.1748MHz & 20MHz +// Chips: Philko PK8702 +// Philko PK8811 +// Dips: Two 8-way dipswitch banks +// Sound: Yamaha YM2413 +// ROM_START( atomicp ) - ROM_REGION( 0x020000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "ap-t2.bin", 0x000000, 0x10000, CRC(97421047) SHA1(18d61260470da7a0bef532f81df567a613c0d821) ) ROM_LOAD16_BYTE( "ap-t1.bin", 0x000001, 0x10000, CRC(5c65fe56) SHA1(aaf3b6f932c090b839817140c105f13c7d6b4ae2) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "ap-t4.bin", 0x00000, 0x8000, CRC(332e58f4) SHA1(cf5aeb6c14018cbd8f222a0ecf85ccf467f294a8) ) ROM_LOAD( "ap-t3.bin", 0x08000, 0x8000, CRC(dddc122c) SHA1(3411eae360ccd615636fb85e9738affc33c2c0ad) ) ROM_LOAD( "ap-t5.bin", 0x10000, 0x8000, CRC(ef5ecd6b) SHA1(07edc8ea4c0a5ad421df7f97e7a62a5e12a8dbd0) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Snapper - CPU: 68000 - Custom Korean Board - NOT Sega -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Snapper +// CPU: 68000 +// Custom Korean Board - NOT Sega +// ROM_START( snapper ) - ROM_REGION( 0x020000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "snap2.r01", 0x000000, 0x10000, CRC(9a9e4ed3) SHA1(df3df13b70d4c0d1caaf42e78d355c0492fac96b) ) ROM_LOAD16_BYTE( "snap1.r02", 0x000001, 0x10000, CRC(cd468d6a) SHA1(28b5e1f533f5e3fd9ebffe63bda7e6d9ebe4ffaa) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "snap4.r03", 0x00000, 0x8000, CRC(0f848e1e) SHA1(79a63ff0e5775400716f7294eabda9a0b838d656) ) ROM_LOAD( "snap3.r04", 0x08000, 0x8000, CRC(c7f8cf0e) SHA1(08376f7941bc740ce85c6f32be7b54ced192599c) ) ROM_LOAD( "snap5.r05", 0x10000, 0x8000, CRC(378e08eb) SHA1(f2c10bd9e885c185ac2d0d51d907ceca1f21dd7a) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Aurail, Sega System 16B - CPU: 68000 - ROM Board type: 171-???? -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Aurail, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-???? +// ROM_START( aurail ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13577.a7", 0x000000, 0x20000, CRC(6701b686) SHA1(ce1e99a516b34241bfe2fbe42d105970ad6e6ddb) ) ROM_LOAD16_BYTE( "epr-13576.a5", 0x000001, 0x20000, CRC(1e428d94) SHA1(53c0c2d946822157974c8505fd301f8001fc3401) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-13447.a8", 0x080000, 0x20000, CRC(70a52167) SHA1(51512d4ee1e63902375b197cf04170744b099d88) ) - ROM_LOAD16_BYTE( "epr-13445.a6", 0x080001, 0x20000, CRC(28dfc3dd) SHA1(b1d6d3e31a48062a91cc9b7b6ff68bfde0a3ea1c) ) + ROM_LOAD16_BYTE( "epr-13447.a8", 0x040000, 0x20000, CRC(70a52167) SHA1(51512d4ee1e63902375b197cf04170744b099d88) ) + ROM_LOAD16_BYTE( "epr-13445.a6", 0x040001, 0x20000, CRC(28dfc3dd) SHA1(b1d6d3e31a48062a91cc9b7b6ff68bfde0a3ea1c) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "mpr-13450.a14", 0x00000, 0x20000, CRC(0fc4a7a8) SHA1(b46b22a6b0ead19551e67abfb3304c52b02b8d29) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "mpr-13450.a14", 0x00000, 0x20000, CRC(0fc4a7a8) SHA1(b46b22a6b0ead19551e67abfb3304c52b02b8d29) ) // plane 1 ROM_LOAD( "mpr-13465.b14", 0x20000, 0x20000, CRC(e08135e0) SHA1(cd748f4a8f67f562174fa9c6edb966c77b488e75) ) - ROM_LOAD( "mpr-13451.a15", 0x40000, 0x20000, CRC(1c49852f) SHA1(d08d6991c203400f685fada2445a22a7eceeee04) ) /* plane 2 */ + ROM_LOAD( "mpr-13451.a15", 0x40000, 0x20000, CRC(1c49852f) SHA1(d08d6991c203400f685fada2445a22a7eceeee04) ) // plane 2 ROM_LOAD( "mpr-13466.b15", 0x60000, 0x20000, CRC(e14c6684) SHA1(f9b0d45e01a6df2b3875b493db9fa41bf37d79f0) ) - ROM_LOAD( "mpr-13452.a16", 0x80000, 0x20000, CRC(047bde5e) SHA1(e759baedcbb637a6c14af461b8a492554cadc9e4) ) /* plane 3 */ + ROM_LOAD( "mpr-13452.a16", 0x80000, 0x20000, CRC(047bde5e) SHA1(e759baedcbb637a6c14af461b8a492554cadc9e4) ) // plane 3 ROM_LOAD( "mpr-13467.b16", 0xa0000, 0x20000, CRC(6309fec4) SHA1(f90c9679bade3cfbaa7949e412410c29d5bfa4d3) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13453.b1", 0x000001, 0x020000, CRC(5fa0a9f8) SHA1(d9d67cc006a608d48e37aa89359f1a9403172b00) ) ROM_LOAD16_BYTE( "mpr-13457.b5", 0x000000, 0x020000, CRC(0d1b54da) SHA1(c7a6393f9e13adabe93b7a86aa7845c5f4d188f1) ) ROM_LOAD16_BYTE( "mpr-13454.b2", 0x040001, 0x020000, CRC(5f6b33b1) SHA1(5d397bdaa2c7a9ce82cc9134bfeb78418dc613b0) ) @@ -4103,33 +3981,32 @@ ROM_START( aurail ) ROM_LOAD16_BYTE( "mpr-13443.a4", 0x1c0001, 0x020000, CRC(77a8989e) SHA1(0ad0877a9814fb7c2fb79062a50b1f9ce9420768) ) ROM_LOAD16_BYTE( "mpr-13464.b13", 0x1c0000, 0x020000, CRC(551df422) SHA1(cf4cd2b66335853c7c6cce949e79c05e93a39666) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-13448.a10", 0x00000, 0x08000, CRC(b5183fb9) SHA1(c8372b57fa486256d49dc5851d6b17c92de593fb) ) ROM_LOAD( "mpr-13449.a11", 0x10000, 0x20000, CRC(d3d9aaf9) SHA1(0fb3a8cb11033accceb3a43a691fb424cf8b9619) ) ROM_END -/************************************************************************************************************************** - Aurail, Sega System 16B - CPU: FD1089B (317-0168) - ROM Board type: 171-???? -*/ +//************************************************************************************************************************* +// Aurail, Sega System 16B +// CPU: FD1089B (317-0168) +// ROM Board type: 171-???? +// ROM_START( aurail1 ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13469.a7", 0x000000, 0x20000, CRC(c628b69d) SHA1(839cefe5ab1c58fb3e6af8cba245194d5d672223) ) ROM_LOAD16_BYTE( "epr-13468.a5", 0x000001, 0x20000, CRC(ce092218) SHA1(c93450234bc37060bc4b8bca34ea69154d99be6c) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-13447.a8", 0x080000, 0x20000, CRC(70a52167) SHA1(51512d4ee1e63902375b197cf04170744b099d88) ) - ROM_LOAD16_BYTE( "epr-13445.a6", 0x080001, 0x20000, CRC(28dfc3dd) SHA1(b1d6d3e31a48062a91cc9b7b6ff68bfde0a3ea1c) ) + ROM_LOAD16_BYTE( "epr-13447.a8", 0x040000, 0x20000, CRC(70a52167) SHA1(51512d4ee1e63902375b197cf04170744b099d88) ) + ROM_LOAD16_BYTE( "epr-13445.a6", 0x040001, 0x20000, CRC(28dfc3dd) SHA1(b1d6d3e31a48062a91cc9b7b6ff68bfde0a3ea1c) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "mpr-13450.a14", 0x00000, 0x20000, CRC(0fc4a7a8) SHA1(b46b22a6b0ead19551e67abfb3304c52b02b8d29) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "mpr-13450.a14", 0x00000, 0x20000, CRC(0fc4a7a8) SHA1(b46b22a6b0ead19551e67abfb3304c52b02b8d29) ) // plane 1 ROM_LOAD( "mpr-13465.b14", 0x20000, 0x20000, CRC(e08135e0) SHA1(cd748f4a8f67f562174fa9c6edb966c77b488e75) ) - ROM_LOAD( "mpr-13451.a15", 0x40000, 0x20000, CRC(1c49852f) SHA1(d08d6991c203400f685fada2445a22a7eceeee04) ) /* plane 2 */ + ROM_LOAD( "mpr-13451.a15", 0x40000, 0x20000, CRC(1c49852f) SHA1(d08d6991c203400f685fada2445a22a7eceeee04) ) // plane 2 ROM_LOAD( "mpr-13466.b15", 0x60000, 0x20000, CRC(e14c6684) SHA1(f9b0d45e01a6df2b3875b493db9fa41bf37d79f0) ) - ROM_LOAD( "mpr-13452.a16", 0x80000, 0x20000, CRC(047bde5e) SHA1(e759baedcbb637a6c14af461b8a492554cadc9e4) ) /* plane 3 */ + ROM_LOAD( "mpr-13452.a16", 0x80000, 0x20000, CRC(047bde5e) SHA1(e759baedcbb637a6c14af461b8a492554cadc9e4) ) // plane 3 ROM_LOAD( "mpr-13467.b16", 0xa0000, 0x20000, CRC(6309fec4) SHA1(f90c9679bade3cfbaa7949e412410c29d5bfa4d3) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13453.b1", 0x000001, 0x020000, CRC(5fa0a9f8) SHA1(d9d67cc006a608d48e37aa89359f1a9403172b00) ) ROM_LOAD16_BYTE( "mpr-13457.b5", 0x000000, 0x020000, CRC(0d1b54da) SHA1(c7a6393f9e13adabe93b7a86aa7845c5f4d188f1) ) ROM_LOAD16_BYTE( "mpr-13454.b2", 0x040001, 0x020000, CRC(5f6b33b1) SHA1(5d397bdaa2c7a9ce82cc9134bfeb78418dc613b0) ) @@ -4147,57 +4024,56 @@ ROM_START( aurail1 ) ROM_LOAD16_BYTE( "mpr-13443.a4", 0x1c0001, 0x020000, CRC(77a8989e) SHA1(0ad0877a9814fb7c2fb79062a50b1f9ce9420768) ) ROM_LOAD16_BYTE( "mpr-13464.b13", 0x1c0000, 0x020000, CRC(551df422) SHA1(cf4cd2b66335853c7c6cce949e79c05e93a39666) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-13448.a10", 0x00000, 0x08000, CRC(b5183fb9) SHA1(c8372b57fa486256d49dc5851d6b17c92de593fb) ) ROM_LOAD( "mpr-13449.a11", 0x10000, 0x20000, CRC(d3d9aaf9) SHA1(0fb3a8cb11033accceb3a43a691fb424cf8b9619) ) ROM_RELOAD( 0x30000, 0x20000 ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0168.key", 0x0000, 0x2000, CRC(bc2d1792) SHA1(e66d2582eb74ae35f27715fcc9df3e77aba67509) ) ROM_END -/************************************************************************************************************************** - Aurail, Sega System 16B - CPU: FD1089A (317-0167) - ROM Board type: 171-5704 - - S1 - - - S2 --- - S3 --- - S4 - - - S5 - - - S6 --- - S7 --- - S8 - - - S9 --- - S10 - - - S11 --- - S12 - - - S13 --- - S14 - - - S15 --- - S16 - - - S17 --- - S18 - - - S19 - - -*/ +//************************************************************************************************************************* +// Aurail, Sega System 16B +// CPU: FD1089A (317-0167) +// ROM Board type: 171-5704 +// +// S1 - - +// S2 --- +// S3 --- +// S4 - - +// S5 - - +// S6 --- +// S7 --- +// S8 - - +// S9 --- +// S10 - - +// S11 --- +// S12 - - +// S13 --- +// S14 - - +// S15 --- +// S16 - - +// S17 --- +// S18 - - +// S19 - - +// ROM_START( aurailj ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13446.a7", 0x000000, 0x20000, CRC(d1f57b2a) SHA1(6d7c64ce7634e1661ab5833385055b360c313494) ) ROM_LOAD16_BYTE( "epr-13444.a5", 0x000001, 0x20000, CRC(7a2b045f) SHA1(088b7031cc8ec9431d44f35216fd16a83ef4f0b3) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-13447.a8", 0x080000, 0x20000, CRC(70a52167) SHA1(51512d4ee1e63902375b197cf04170744b099d88) ) - ROM_LOAD16_BYTE( "epr-13445.a6", 0x080001, 0x20000, CRC(28dfc3dd) SHA1(b1d6d3e31a48062a91cc9b7b6ff68bfde0a3ea1c) ) + ROM_LOAD16_BYTE( "epr-13447.a8", 0x040000, 0x20000, CRC(70a52167) SHA1(51512d4ee1e63902375b197cf04170744b099d88) ) + ROM_LOAD16_BYTE( "epr-13445.a6", 0x040001, 0x20000, CRC(28dfc3dd) SHA1(b1d6d3e31a48062a91cc9b7b6ff68bfde0a3ea1c) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "mpr-13450.a14", 0x00000, 0x20000, CRC(0fc4a7a8) SHA1(b46b22a6b0ead19551e67abfb3304c52b02b8d29) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "mpr-13450.a14", 0x00000, 0x20000, CRC(0fc4a7a8) SHA1(b46b22a6b0ead19551e67abfb3304c52b02b8d29) ) // plane 1 ROM_LOAD( "mpr-13465.b14", 0x20000, 0x20000, CRC(e08135e0) SHA1(cd748f4a8f67f562174fa9c6edb966c77b488e75) ) - ROM_LOAD( "mpr-13451.a15", 0x40000, 0x20000, CRC(1c49852f) SHA1(d08d6991c203400f685fada2445a22a7eceeee04) ) /* plane 2 */ + ROM_LOAD( "mpr-13451.a15", 0x40000, 0x20000, CRC(1c49852f) SHA1(d08d6991c203400f685fada2445a22a7eceeee04) ) // plane 2 ROM_LOAD( "mpr-13466.b15", 0x60000, 0x20000, CRC(e14c6684) SHA1(f9b0d45e01a6df2b3875b493db9fa41bf37d79f0) ) - ROM_LOAD( "mpr-13452.a16", 0x80000, 0x20000, CRC(047bde5e) SHA1(e759baedcbb637a6c14af461b8a492554cadc9e4) ) /* plane 3 */ + ROM_LOAD( "mpr-13452.a16", 0x80000, 0x20000, CRC(047bde5e) SHA1(e759baedcbb637a6c14af461b8a492554cadc9e4) ) // plane 3 ROM_LOAD( "mpr-13467.b16", 0xa0000, 0x20000, CRC(6309fec4) SHA1(f90c9679bade3cfbaa7949e412410c29d5bfa4d3) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13453.b1", 0x000001, 0x020000, CRC(5fa0a9f8) SHA1(d9d67cc006a608d48e37aa89359f1a9403172b00) ) ROM_LOAD16_BYTE( "mpr-13457.b5", 0x000000, 0x020000, CRC(0d1b54da) SHA1(c7a6393f9e13adabe93b7a86aa7845c5f4d188f1) ) ROM_LOAD16_BYTE( "mpr-13454.b2", 0x040001, 0x020000, CRC(5f6b33b1) SHA1(5d397bdaa2c7a9ce82cc9134bfeb78418dc613b0) ) @@ -4215,105 +4091,102 @@ ROM_START( aurailj ) ROM_LOAD16_BYTE( "mpr-13443.a4", 0x1c0001, 0x020000, CRC(77a8989e) SHA1(0ad0877a9814fb7c2fb79062a50b1f9ce9420768) ) ROM_LOAD16_BYTE( "mpr-13464.b13", 0x1c0000, 0x020000, CRC(551df422) SHA1(cf4cd2b66335853c7c6cce949e79c05e93a39666) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-13448.a10", 0x00000, 0x08000, CRC(b5183fb9) SHA1(c8372b57fa486256d49dc5851d6b17c92de593fb) ) ROM_LOAD( "mpr-13449.a11", 0x10000, 0x20000, CRC(d3d9aaf9) SHA1(0fb3a8cb11033accceb3a43a691fb424cf8b9619) ) ROM_RELOAD( 0x30000, 0x20000 ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0167.key", 0x0000, 0x2000, CRC(bc2d1792) SHA1(e66d2582eb74ae35f27715fcc9df3e77aba67509) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Bay Route, Sega System 16B - CPU: FD1094 (317-0116) - ROM Board type: 171-5704 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Bay Route, Sega System 16B +// CPU: FD1094 (317-0116) +// ROM Board type: 171-5704 +// ROM_START( bayroute ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12517.a7", 0x000000, 0x20000, CRC(436728a9) SHA1(0f6753493ad2c1776880862b462f10ef936a9ee5) ) ROM_LOAD16_BYTE( "epr-12516.a5", 0x000001, 0x20000, CRC(4ff0353f) SHA1(f5960f9e80e42d0a3f82d6670b1f2e39b51ffcef) ) - /* empty 0x40000-0x80000*/ - ROM_LOAD16_BYTE( "epr-12458.a8", 0x080000, 0x20000, CRC(e7c7476a) SHA1(7b724d76bdc1978ddf78489edfda14533905a360) ) - ROM_LOAD16_BYTE( "epr-12456.a6", 0x080001, 0x20000, CRC(25dc2eaf) SHA1(dda300840b9a90bcce7be16ff1904a7a0456c396) ) + ROM_LOAD16_BYTE( "epr-12458.a8", 0x040000, 0x20000, CRC(e7c7476a) SHA1(7b724d76bdc1978ddf78489edfda14533905a360) ) + ROM_LOAD16_BYTE( "epr-12456.a6", 0x040001, 0x20000, CRC(25dc2eaf) SHA1(dda300840b9a90bcce7be16ff1904a7a0456c396) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0116.key", 0x0000, 0x2000, CRC(8778ee49) SHA1(870923d8380199edfe91bbc407631d72c864de68) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12462.a14", 0x00000, 0x10000, CRC(a19943b5) SHA1(95cd95223ea76677227b807a7c4eff120e690d37) ) ROM_LOAD( "opr-12463.a15", 0x10000, 0x10000, CRC(62f8200d) SHA1(a5a0035249f339396b33f8a908d393777e8951c4) ) ROM_LOAD( "opr-12464.a16", 0x20000, 0x10000, CRC(c8c59703) SHA1(3a4f45b88990d27c55ddfde5fc93496954868200) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12465.b1", 0x00001, 0x20000, CRC(11d61b45) SHA1(01678e07ffcafb8c161b52763f2183dc281c7578) ) ROM_LOAD16_BYTE( "mpr-12467.b5", 0x00000, 0x20000, CRC(c3b4e4c0) SHA1(2d8dbea5278b3fac03c7ad8749f931d36cc8f341) ) ROM_LOAD16_BYTE( "mpr-12466.b2", 0x40001, 0x20000, CRC(a57f236f) SHA1(c83219cdfcee10a4fdffcbf410808f161a2b1aef) ) ROM_LOAD16_BYTE( "mpr-12468.b6", 0x40000, 0x20000, CRC(d89c77de) SHA1(0e903bf57a7515291dda7e11bdef982a1417043a) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12459.a10", 0x00000, 0x08000, CRC(3e1d29d0) SHA1(fe3d985983e5132e8a26a02a3f2d8d420cbf1a49) ) ROM_LOAD( "mpr-12460.a11", 0x10000, 0x20000, CRC(0bae570d) SHA1(05fa4a3405666342ab66e696a7344cca97569f19) ) ROM_LOAD( "mpr-12461.a12", 0x30000, 0x20000, CRC(b03b8b46) SHA1(b0283ac377d464f3d9374a992192ec6c515a3c2f) ) ROM_END -/************************************************************************************************************************** - Bay Route, Sega System 16B - CPU: FD1094 (317-0115) - ROM Board type: 171-5704 -*/ +//************************************************************************************************************************* +// Bay Route, Sega System 16B +// CPU: FD1094 (317-0115) +// ROM Board type: 171-5704 +// ROM_START( bayroutej ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12457.a7", 0x000000, 0x20000, CRC(bc726255) SHA1(2fcf190dab944ea09e7e7574c0dda101bb55424e) ) ROM_LOAD16_BYTE( "epr-12455.a5", 0x000001, 0x20000, CRC(b6a722eb) SHA1(a8cb3ae6a9a7dc7b64be452a64566878e1a54722) ) - /* empty 0x40000-0x80000*/ - ROM_LOAD16_BYTE( "epr-12458.a8", 0x080000, 0x20000, CRC(e7c7476a) SHA1(7b724d76bdc1978ddf78489edfda14533905a360) ) - ROM_LOAD16_BYTE( "epr-12456.a6", 0x080001, 0x20000, CRC(25dc2eaf) SHA1(dda300840b9a90bcce7be16ff1904a7a0456c396) ) + ROM_LOAD16_BYTE( "epr-12458.a8", 0x040000, 0x20000, CRC(e7c7476a) SHA1(7b724d76bdc1978ddf78489edfda14533905a360) ) + ROM_LOAD16_BYTE( "epr-12456.a6", 0x040001, 0x20000, CRC(25dc2eaf) SHA1(dda300840b9a90bcce7be16ff1904a7a0456c396) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0115.key", 0x0000, 0x2000, CRC(75a55614) SHA1(2cc33a0442e64c94e85f933008f79a1e3a71f1ae) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12462.a14", 0x00000, 0x10000, CRC(a19943b5) SHA1(95cd95223ea76677227b807a7c4eff120e690d37) ) ROM_LOAD( "opr-12463.a15", 0x10000, 0x10000, CRC(62f8200d) SHA1(a5a0035249f339396b33f8a908d393777e8951c4) ) ROM_LOAD( "opr-12464.a16", 0x20000, 0x10000, CRC(c8c59703) SHA1(3a4f45b88990d27c55ddfde5fc93496954868200) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12465.b1", 0x00001, 0x20000, CRC(11d61b45) SHA1(01678e07ffcafb8c161b52763f2183dc281c7578) ) ROM_LOAD16_BYTE( "mpr-12467.b5", 0x00000, 0x20000, CRC(c3b4e4c0) SHA1(2d8dbea5278b3fac03c7ad8749f931d36cc8f341) ) ROM_LOAD16_BYTE( "mpr-12466.b2", 0x40001, 0x20000, CRC(a57f236f) SHA1(c83219cdfcee10a4fdffcbf410808f161a2b1aef) ) ROM_LOAD16_BYTE( "mpr-12468.b6", 0x40000, 0x20000, CRC(d89c77de) SHA1(0e903bf57a7515291dda7e11bdef982a1417043a) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12459.a10", 0x00000, 0x08000, CRC(3e1d29d0) SHA1(fe3d985983e5132e8a26a02a3f2d8d420cbf1a49) ) ROM_LOAD( "mpr-12460.a11", 0x10000, 0x20000, CRC(0bae570d) SHA1(05fa4a3405666342ab66e696a7344cca97569f19) ) ROM_LOAD( "mpr-12461.a12", 0x30000, 0x20000, CRC(b03b8b46) SHA1(b0283ac377d464f3d9374a992192ec6c515a3c2f) ) ROM_END -/************************************************************************************************************************** - Bay Route, Sega System 16B - CPU: 68000 - ROM Board type: 171-5358 -*/ +//************************************************************************************************************************* +// Bay Route, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5358 +// ROM_START( bayroute1 ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "br.a4", 0x000000, 0x10000, CRC(91c6424b) SHA1(79a968ade7690d5944ee815e19586cb82c3aa562) ) ROM_LOAD16_BYTE( "br.a1", 0x000001, 0x10000, CRC(76954bf3) SHA1(bd617c6ddaf1e7760479b17205388c201fb67662) ) - /* empty 0x20000-0x80000*/ - ROM_LOAD16_BYTE( "br.a5", 0x080000, 0x10000, CRC(9d6fd183) SHA1(5ae78d33c0e929886d84a25c0fbd62ab45dcbff4) ) - ROM_LOAD16_BYTE( "br.a2", 0x080001, 0x10000, CRC(5ca1e3d2) SHA1(51ce67ed0a0054f9c9c4ac56c5775716c44d74b1) ) - ROM_LOAD16_BYTE( "br.a6", 0x0a0000, 0x10000, CRC(ed97ad4c) SHA1(6c7d671c3046f1adb486f053acdd2be0c981c68b) ) - ROM_LOAD16_BYTE( "br.a3", 0x0a0001, 0x10000, CRC(0d362905) SHA1(04cb35aa44cc1d9ead44c5a7b4f838efec453c85) ) + ROM_LOAD16_BYTE( "br.a5", 0x020000, 0x10000, CRC(9d6fd183) SHA1(5ae78d33c0e929886d84a25c0fbd62ab45dcbff4) ) + ROM_LOAD16_BYTE( "br.a2", 0x020001, 0x10000, CRC(5ca1e3d2) SHA1(51ce67ed0a0054f9c9c4ac56c5775716c44d74b1) ) + ROM_LOAD16_BYTE( "br.a6", 0x040000, 0x10000, CRC(ed97ad4c) SHA1(6c7d671c3046f1adb486f053acdd2be0c981c68b) ) + ROM_LOAD16_BYTE( "br.a3", 0x040001, 0x10000, CRC(0d362905) SHA1(04cb35aa44cc1d9ead44c5a7b4f838efec453c85) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12462.a14", 0x00000, 0x10000, CRC(a19943b5) SHA1(95cd95223ea76677227b807a7c4eff120e690d37) ) ROM_LOAD( "opr-12463.a15", 0x10000, 0x10000, CRC(62f8200d) SHA1(a5a0035249f339396b33f8a908d393777e8951c4) ) ROM_LOAD( "opr-12464.a16", 0x20000, 0x10000, CRC(c8c59703) SHA1(3a4f45b88990d27c55ddfde5fc93496954868200) ) - ROM_REGION16_BE( 0x080000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x080000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "br_obj0o.b1", 0x00001, 0x10000, CRC(098a5e82) SHA1(c5922f418773bc3629071e584457839d67a370e9) ) ROM_LOAD16_BYTE( "br_obj0e.b5", 0x00000, 0x10000, CRC(85238af9) SHA1(39989a8d9b60c6d55272b5e2c213341a563dd993) ) ROM_LOAD16_BYTE( "br_obj1o.b2", 0x20001, 0x10000, CRC(cc641da1) SHA1(28f8a6502702cb9e2cc7f3e98f6c5d201f462fa3) ) @@ -4323,7 +4196,7 @@ ROM_START( bayroute1 ) ROM_LOAD16_BYTE( "br_obj3o.b4", 0x60001, 0x10000, CRC(a2e238ac) SHA1(c854774c0ffd1ccf6e46591a8fa3c80a4630e007) ) ROM_LOAD16_BYTE( "br.b8", 0x60000, 0x10000, CRC(d8de78ff) SHA1(110661ab8008543b47629722b98d0470f73a48c5) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "sound.a7", 0x00000, 0x08000, NO_DUMP ) ROM_LOAD( "sound.a8", 0x10000, 0x10000, NO_DUMP ) ROM_LOAD( "sound.a9", 0x20000, 0x10000, NO_DUMP ) @@ -4332,24 +4205,24 @@ ROM_START( bayroute1 ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Bullet (JPN Ver.) - (c)1987 Sega - System 16B - CPU Custom No. 317-0041 - Rom Board No. 171-5358 - - J1 - - - J2 --- - J3 512 - J4 256 - J5 512 - J6 256 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Bullet (JPN Ver.) +// (c)1987 Sega +// System 16B +// CPU Custom No. 317-0041 +// Rom Board No. 171-5358 +// +// J1 - - +// J2 --- +// J3 512 +// J4 256 +// J5 512 +// J6 256 +// ROM_START( bullet ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11010.a4", 0x000000, 0x08000, CRC(dd9001de) SHA1(6f6775104b7a9779c32da1dc72b92e03373af704) ) ROM_LOAD16_BYTE( "epr-11007.a1", 0x000001, 0x08000, CRC(d9e08110) SHA1(288b50fab079b33a17076b46ac8388c4ce8e68e9) ) ROM_LOAD16_BYTE( "epr-11011.a5", 0x010000, 0x08000, CRC(7f446b9f) SHA1(0b92ab100c13bdcdd0f770da5da5e19cb79afde1) ) @@ -4357,15 +4230,15 @@ ROM_START( bullet ) ROM_LOAD16_BYTE( "epr-11012.a6", 0x020000, 0x08000, CRC(3992f159) SHA1(50686b394693ab01cbd159ae661f326c8eee50b8) ) ROM_LOAD16_BYTE( "epr-11009.a3", 0x020001, 0x08000, CRC(df199999) SHA1(2669e923aa4f1bedc788401f44ad19c318658f00) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0041.key", 0x0000, 0x2000, CRC(4cd4861a) SHA1(7578cfbd3efa28fa5eda0c007750b23060a305eb) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10994.b9", 0x00000, 0x10000, CRC(3035468a) SHA1(778366815a2a74188d72d64c5e1e95215bc4ca81) ) ROM_LOAD( "epr-10995.b10", 0x10000, 0x10000, CRC(6b97aff1) SHA1(323bafe43a703476f6f4e68b46ec86bb9152f88e) ) ROM_LOAD( "epr-10996.b11", 0x20000, 0x10000, CRC(501bddd6) SHA1(545273b1b874b3e68d23b0dcae81c8531bd98756) ) - ROM_REGION16_BE( 0x80000, "gfx2", ROMREGION_ERASE00 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", ROMREGION_ERASE00 ) // sprites ROM_LOAD16_BYTE( "epr-10999.b1", 0x00001, 0x010000, CRC(119f0008) SHA1(6a39b537bb58ea19ed3b0322ebca37e6574289fd) ) ROM_LOAD16_BYTE( "epr-11003.b5", 0x00000, 0x010000, CRC(2f429089) SHA1(08bf9d9c15fafbcb26604ff30be367ecf25404b2) ) ROM_LOAD16_BYTE( "epr-11000.b2", 0x20001, 0x010000, CRC(f5482bbe) SHA1(d8482ba73622798b15e78ab2c123d0fd4c33480a) ) @@ -4375,31 +4248,30 @@ ROM_START( bullet ) ROM_LOAD16_BYTE( "epr-11002.b4", 0x60001, 0x010000, CRC(9e25042b) SHA1(cb0e20ca8ca1c42ad2a95b83ea8711b7ad8e42f5) ) ROM_LOAD16_BYTE( "epr-11006.b8", 0x60000, 0x010000, CRC(6b7384f2) SHA1(5201e3b5e4aeb4bc8f5b3ba3d8a9ffb3705eccf4) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10997.a7", 0x00000, 0x8000, CRC(5dd9cab5) SHA1(b9b27bbdc19feacb83cc5b33a74d910d86ac8f33) ) ROM_LOAD( "epr-10998.a8", 0x10000, 0x8000, CRC(f971a817) SHA1(502c95638e4fd5f87e5fc837cb44b39a5d62f4e4) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Cotton, Sega System 16B - CPU: FD1094 (317-0181A) - ROM Board type: 171-5704 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Cotton, Sega System 16B +// CPU: FD1094 (317-0181A) +// ROM Board type: 171-5704 +// ROM_START( cotton ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13921a.a7", 0x000000, 0x20000, CRC(f047a037) SHA1(e4a9eeb1f2cf6b5ee3b2fcf74be917ffd3e6ca0e) ) ROM_LOAD16_BYTE( "epr-13919a.a5", 0x000001, 0x20000, CRC(651108b1) SHA1(1ab32085ca1a8cb3d464059b0abb10253decd423) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-13922a.a8", 0x080000, 0x20000, CRC(1ca248c5) SHA1(f7df2ccf54a3f1f09334c3b3df3dcd2ec33f99d1) ) - ROM_LOAD16_BYTE( "epr-13920a.a6", 0x080001, 0x20000, CRC(fa3610f9) SHA1(6127496bf7cd47d4343291fc2e11673d77ccc550) ) + ROM_LOAD16_BYTE( "epr-13922a.a8", 0x040000, 0x20000, CRC(1ca248c5) SHA1(f7df2ccf54a3f1f09334c3b3df3dcd2ec33f99d1) ) + ROM_LOAD16_BYTE( "epr-13920a.a6", 0x040001, 0x20000, CRC(fa3610f9) SHA1(6127496bf7cd47d4343291fc2e11673d77ccc550) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0181a.key", 0x0000, 0x2000, CRC(5c419b36) SHA1(df43153fc0420c42ca1559fb318bb21101e10f17) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-13862.a14", 0x00000, 0x20000, CRC(a47354b6) SHA1(ce52813b245f1d491a134d4bd5ab074e71d20129) ) ROM_LOAD( "opr-13877.b14", 0x20000, 0x20000, CRC(d38424b5) SHA1(884ca190936aee2d2cac86491d4d0cdf4a45efe5) ) ROM_LOAD( "opr-13863.a15", 0x40000, 0x20000, CRC(8c990026) SHA1(07b4510936376c171f3b31d87ac6154361eb0cbc) ) @@ -4407,7 +4279,7 @@ ROM_START( cotton ) ROM_LOAD( "opr-13864.a16", 0x80000, 0x20000, CRC(d2b175bf) SHA1(897b7c794d0e7229ea5e9a682f64266a947a818f) ) ROM_LOAD( "opr-13879.b16", 0xa0000, 0x20000, CRC(b9d62531) SHA1(e8c5e7b93339c00f75a3b66ce18f7838255577be) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-13869.b5", 0x000000, 0x20000, CRC(ab4b3468) SHA1(3071654a295152d609d2c2c1d4153b5ba3f174d5) ) ROM_LOAD16_BYTE( "opr-13865.b1", 0x000001, 0x20000, CRC(7024f404) SHA1(4b2f9cdfdd97218797a3e386106e53f713b8650d) ) ROM_LOAD16_BYTE( "opr-13870.b6", 0x040000, 0x20000, CRC(69b41ac3) SHA1(4c5a85e5a5ca9f8260557d4e97eb091dd857d63a) ) @@ -4425,28 +4297,27 @@ ROM_START( cotton ) ROM_LOAD16_BYTE( "opr-13876.b13",0x1c0000, 0x20000, CRC(1c5ffad8) SHA1(13e5886ceece564cc71ba7f43a26d2b1782ccfc8) ) ROM_LOAD16_BYTE( "opr-13855.a4", 0x1c0001, 0x20000, CRC(856f3ee2) SHA1(72346d887ff9738ebe93acb2e3f8cd80d494621e) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-13892.a10", 0x00000, 0x08000, CRC(fdfbe6ad) SHA1(9ebb94889c0e96e6af9cdced084804ca98612d61) ) ROM_LOAD( "opr-13893.a11", 0x10000, 0x20000, CRC(384233df) SHA1(dfdf94697587a5ee45e97700f3741be54b90742b) ) ROM_END -/************************************************************************************************************************** - Cotton, Sega System 16B - CPU: FD1094 (317-0180T) // T could be wrong, it was handwritten - ROM Board type: 171-5704 -*/ +//************************************************************************************************************************* +// Cotton, Sega System 16B +// CPU: FD1094 (317-0180T) // T could be wrong, it was handwritten +// ROM Board type: 171-5704 +// ROM_START( cottonu ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "cotton.a7", 0x000000, 0x20000, CRC(e7ef7d10) SHA1(de70ebf04d78e938bf568df158a47b377ddb3dc5) ) ROM_LOAD16_BYTE( "cotton.a5", 0x000001, 0x20000, CRC(abe4f83e) SHA1(128f1815ecb27ee2a93e9d0708fdf6733dd1ab46) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "cotton.a8", 0x080000, 0x20000, CRC(fc0f4401) SHA1(e20fd6a3906b484c48abd9139744f7f960d751e1) ) - ROM_LOAD16_BYTE( "cotton.a6", 0x080001, 0x20000, CRC(f50f1ea2) SHA1(b53a18a71de4d0c7cba8bfcc156818712af9e2d5) ) + ROM_LOAD16_BYTE( "cotton.a8", 0x040000, 0x20000, CRC(fc0f4401) SHA1(e20fd6a3906b484c48abd9139744f7f960d751e1) ) + ROM_LOAD16_BYTE( "cotton.a6", 0x040001, 0x20000, CRC(f50f1ea2) SHA1(b53a18a71de4d0c7cba8bfcc156818712af9e2d5) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0180.key", 0x0000, 0x2000, CRC(a236b915) SHA1(374f2b23f0822891aadb86b779434ae2a1194932) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-13862.a14", 0x00000, 0x20000, CRC(a47354b6) SHA1(ce52813b245f1d491a134d4bd5ab074e71d20129) ) ROM_LOAD( "opr-13877.b14", 0x20000, 0x20000, CRC(d38424b5) SHA1(884ca190936aee2d2cac86491d4d0cdf4a45efe5) ) ROM_LOAD( "opr-13863.a15", 0x40000, 0x20000, CRC(8c990026) SHA1(07b4510936376c171f3b31d87ac6154361eb0cbc) ) @@ -4454,7 +4325,7 @@ ROM_START( cottonu ) ROM_LOAD( "opr-13864.a16", 0x80000, 0x20000, CRC(d2b175bf) SHA1(897b7c794d0e7229ea5e9a682f64266a947a818f) ) ROM_LOAD( "opr-13879.b16", 0xa0000, 0x20000, CRC(b9d62531) SHA1(e8c5e7b93339c00f75a3b66ce18f7838255577be) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-13869.b5", 0x000000, 0x20000, CRC(ab4b3468) SHA1(3071654a295152d609d2c2c1d4153b5ba3f174d5) ) ROM_LOAD16_BYTE( "opr-13865.b1", 0x000001, 0x20000, CRC(7024f404) SHA1(4b2f9cdfdd97218797a3e386106e53f713b8650d) ) ROM_LOAD16_BYTE( "opr-13870.b6", 0x040000, 0x20000, CRC(69b41ac3) SHA1(4c5a85e5a5ca9f8260557d4e97eb091dd857d63a) ) @@ -4472,29 +4343,28 @@ ROM_START( cottonu ) ROM_LOAD16_BYTE( "opr-13876.b13",0x1c0000, 0x20000, CRC(1c5ffad8) SHA1(13e5886ceece564cc71ba7f43a26d2b1782ccfc8) ) ROM_LOAD16_BYTE( "opr-13855.a4", 0x1c0001, 0x20000, CRC(856f3ee2) SHA1(72346d887ff9738ebe93acb2e3f8cd80d494621e) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-13892.a10", 0x00000, 0x08000, CRC(fdfbe6ad) SHA1(9ebb94889c0e96e6af9cdced084804ca98612d61) ) ROM_LOAD( "opr-13893.a11", 0x10000, 0x20000, CRC(384233df) SHA1(dfdf94697587a5ee45e97700f3741be54b90742b) ) ROM_END -/************************************************************************************************************************** - Cotton (Japan), Sega System 16B - CPU: FD1094 (317-0179A) - ROM Board type: 171-5704 - Sega ID# for ROM board: 834-8022-04 -*/ +//************************************************************************************************************************* +// Cotton (Japan), Sega System 16B +// CPU: FD1094 (317-0179A) +// ROM Board type: 171-5704 +// Sega ID# for ROM board: 834-8022-04 +// ROM_START( cottonj ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13858a.a7", 0x000000, 0x20000, CRC(276f42fe) SHA1(47d2f910f6f101628cb0c660e5fd12c0e331bd99) ) ROM_LOAD16_BYTE( "epr-13856a.a5", 0x000001, 0x20000, CRC(14e6b5e7) SHA1(708c69cddd1c60e729a74f539d40e67b2a6d9d6f) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-13859a.a8", 0x080000, 0x20000, CRC(4703ef9d) SHA1(8b03a71736a599c337ad5d95cbc812ea38b0cc43) ) - ROM_LOAD16_BYTE( "epr-13857a.a6", 0x080001, 0x20000, CRC(de37e527) SHA1(124ce7c7eef1199c89735556cebf71255573a155) ) + ROM_LOAD16_BYTE( "epr-13859a.a8", 0x040000, 0x20000, CRC(4703ef9d) SHA1(8b03a71736a599c337ad5d95cbc812ea38b0cc43) ) + ROM_LOAD16_BYTE( "epr-13857a.a6", 0x040001, 0x20000, CRC(de37e527) SHA1(124ce7c7eef1199c89735556cebf71255573a155) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0179a.key", 0x0000, 0x2000, CRC(488096d3) SHA1(5ffe81c141e1016f6a46f8fcee3e6d79c60151c0) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-13862.a14", 0x00000, 0x20000, CRC(a47354b6) SHA1(ce52813b245f1d491a134d4bd5ab074e71d20129) ) ROM_LOAD( "opr-13877.b14", 0x20000, 0x20000, CRC(d38424b5) SHA1(884ca190936aee2d2cac86491d4d0cdf4a45efe5) ) ROM_LOAD( "opr-13863.a15", 0x40000, 0x20000, CRC(8c990026) SHA1(07b4510936376c171f3b31d87ac6154361eb0cbc) ) @@ -4502,7 +4372,7 @@ ROM_START( cottonj ) ROM_LOAD( "opr-13864.a16", 0x80000, 0x20000, CRC(d2b175bf) SHA1(897b7c794d0e7229ea5e9a682f64266a947a818f) ) ROM_LOAD( "opr-13879.b16", 0xa0000, 0x20000, CRC(b9d62531) SHA1(e8c5e7b93339c00f75a3b66ce18f7838255577be) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-13869.b5", 0x000000, 0x20000, CRC(ab4b3468) SHA1(3071654a295152d609d2c2c1d4153b5ba3f174d5) ) ROM_LOAD16_BYTE( "opr-13865.b1", 0x000001, 0x20000, CRC(7024f404) SHA1(4b2f9cdfdd97218797a3e386106e53f713b8650d) ) ROM_LOAD16_BYTE( "opr-13870.b6", 0x040000, 0x20000, CRC(69b41ac3) SHA1(4c5a85e5a5ca9f8260557d4e97eb091dd857d63a) ) @@ -4520,21 +4390,21 @@ ROM_START( cottonj ) ROM_LOAD16_BYTE( "opr-13876.b13",0x1c0000, 0x20000, CRC(1c5ffad8) SHA1(13e5886ceece564cc71ba7f43a26d2b1782ccfc8) ) ROM_LOAD16_BYTE( "opr-13855.a4", 0x1c0001, 0x20000, CRC(856f3ee2) SHA1(72346d887ff9738ebe93acb2e3f8cd80d494621e) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-13860.a10", 0x00000, 0x08000, CRC(6a57b027) SHA1(8f9de548df203605bb4ab9eececf09739b55adf1) ) ROM_LOAD( "opr-13061.a11", 0x10000, 0x20000, CRC(4d21153f) SHA1(173ddd9633f255c39ca508c37d0562e374704e7b) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Dunk Shot, Sega System 16B - CPU: FD1089A (317-0022) - ROM Board type: 171-5358 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Dunk Shot, Sega System 16B +// CPU: FD1089A (317-0022) +// ROM Board type: 171-5358 +// ROM_START( dunkshot ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10467.a1", 0x000001, 0x8000, CRC(29774114) SHA1(3a88739213afd4ef7807ddbd3acdfddeb9636fd3) ) ROM_LOAD16_BYTE( "epr-10470.a4", 0x000000, 0x8000, CRC(8c60761f) SHA1(aba009f482df7023b460ab20e50225ab5f6dff6d) ) ROM_LOAD16_BYTE( "epr-10468.a2", 0x010001, 0x8000, CRC(e2d5f97a) SHA1(bf7b4a029580633fee65be89d5c9c83ff76a8484) ) @@ -4542,12 +4412,12 @@ ROM_START( dunkshot ) ROM_LOAD16_BYTE( "epr-10469.a3", 0x020001, 0x8000, CRC(aa442b81) SHA1(24f455bc59147ccd948fd89e2048a118b5591d84) ) ROM_LOAD16_BYTE( "epr-10472.a6", 0x020000, 0x8000, CRC(206027a6) SHA1(2b7d4754639d7023bc00f5e0fe9de4d2a971e487) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10485.b9", 0x00000, 0x8000, CRC(f16dda29) SHA1(88f3aa5e6f827e124c5bba0978a6ccfde8cb6fe7) ) ROM_LOAD( "epr-10486.b10", 0x08000, 0x8000, CRC(311d973c) SHA1(c4765917ba788ed45a801499f3d873a86c418eb8) ) ROM_LOAD( "epr-10487.b11", 0x10000, 0x8000, CRC(a8fb179f) SHA1(8a748d537b3d327c41d6dac17342de9be068e53b) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10481.b5", 0x00000, 0x8000, CRC(feb04bc9) SHA1(233dc8e3b887a88ac114723d58a909a58f0ae771) ) ROM_RELOAD( 0x10000, 0x8000 ) ROM_LOAD16_BYTE( "epr-10477.b1", 0x00001, 0x8000, CRC(f9d3b2cb) SHA1(b530fe16882c718122bfd1de098f39e54993de28) ) @@ -4565,127 +4435,122 @@ ROM_START( dunkshot ) ROM_LOAD16_BYTE( "epr-10480.b4", 0x60001, 0x8000, CRC(5dffd9dd) SHA1(256b24613c952d89dbb9971c9091d5a8a7f363b0) ) ROM_RELOAD( 0x70001, 0x8000 ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10473.a7", 0x00000, 0x08000, CRC(7f1f5a27) SHA1(7ff91b95c883b395ab4ff5e440d78e553a09e623) ) ROM_LOAD( "epr-10474.a8", 0x10000, 0x08000, CRC(419a656e) SHA1(aa734ae835761badeb069f99acc5fded2a19b3a3) ) ROM_LOAD( "epr-10475.a9", 0x20000, 0x08000, CRC(17d55e85) SHA1(0c414bafecbfaa82679cc155f15f5255c186358d) ) ROM_LOAD( "epr-10476.a10", 0x30000, 0x08000, CRC(a6be0956) SHA1(fc4d6e25e0b46679f94fddbb1850fb0b02f8d84b) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0022.key", 0x0000, 0x2000, CRC(4eedc66d) SHA1(50588fa13bf25a2d1322579cdc9937450543c978) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Dynamite Dux, Sega System 16B - CPU: FD1094 (317-0096, version uses 317-0094 known to be exist) - ROM Board type: 171-5521 - - Pos. Silk Type Part Pos. Silk Type Part - - A1 OBJ4-O Unused B1 OBJ0-O MPR-11920 27C512 - A2 OBJ5-O Unused B2 OBJ1-O MPR-11921 27C512 - A3 OBJ6-O Unused B3 OBJ2-O Unused - A4 OBJ7-O Unused B4 OBJ3-O Unused - A5 ROM0-O 190 27C1000 B5 OBJ0-E MPR-11922 27C512 - A6 ROM1-O 913 27C1000 B6 OBJ1-E MPR-11923 27C512 - A7 ROM0-E 191 27C1000 B7 OBJ2-E Unused - A8 ROM1-E 915 27C1000 B8 OBJ3-E Unused - A10 S-PROG 916 27C256 B10 OBJ4-E Unused - A11 SPEECH0 Unused B11 OBJ5-E Unused - A12 SPEECH1 Unused B12 OBJ6-E Unused - A13 No text Unused B13 OBJ7-E Unused - A14 SCR01 MPR-11917 27C512 B14 SCR11 Unused - A15 SCR02 MPR-11918 27C512 B15 SCR12 Unused - A16 SCR03 MPR-11919 27C512 B16 SCR13 Unused -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Dynamite Dux, Sega System 16B +// CPU: FD1094 (317-0096, version uses 317-0094 known to be exist) +// ROM Board type: 171-5521 +// +// Pos. Silk Type Part Pos. Silk Type Part +// +// A1 OBJ4-O Unused B1 OBJ0-O MPR-11920 27C512 +// A2 OBJ5-O Unused B2 OBJ1-O MPR-11921 27C512 +// A3 OBJ6-O Unused B3 OBJ2-O Unused +// A4 OBJ7-O Unused B4 OBJ3-O Unused +// A5 ROM0-O 190 27C1000 B5 OBJ0-E MPR-11922 27C512 +// A6 ROM1-O 913 27C1000 B6 OBJ1-E MPR-11923 27C512 +// A7 ROM0-E 191 27C1000 B7 OBJ2-E Unused +// A8 ROM1-E 915 27C1000 B8 OBJ3-E Unused +// A10 S-PROG 916 27C256 B10 OBJ4-E Unused +// A11 SPEECH0 Unused B11 OBJ5-E Unused +// A12 SPEECH1 Unused B12 OBJ6-E Unused +// A13 No text Unused B13 OBJ7-E Unused +// A14 SCR01 MPR-11917 27C512 B14 SCR11 Unused +// A15 SCR02 MPR-11918 27C512 B15 SCR12 Unused +// A16 SCR03 MPR-11919 27C512 B16 SCR13 Unused +// ROM_START( ddux ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11191.a7", 0x000000, 0x20000, CRC(500e400a) SHA1(c4d23cd09baf3049a8014190d82598d1e3f8ce89) ) ROM_LOAD16_BYTE( "epr-11190.a5", 0x000001, 0x20000, CRC(2a698308) SHA1(bf6ad7a2bac77d088537d65041a69e6ea2788b14) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-11915.a8", 0x080000, 0x20000, CRC(d8ed3132) SHA1(a9d5ad8f79fb635cc234a99fad398688a5f15926) ) - ROM_LOAD16_BYTE( "epr-11913.a6", 0x080001, 0x20000, CRC(30c6cb92) SHA1(2e17c74eeb37c9731fc2e365cc0114f7383c0106) ) + ROM_LOAD16_BYTE( "epr-11915.a8", 0x040000, 0x20000, CRC(d8ed3132) SHA1(a9d5ad8f79fb635cc234a99fad398688a5f15926) ) + ROM_LOAD16_BYTE( "epr-11913.a6", 0x040001, 0x20000, CRC(30c6cb92) SHA1(2e17c74eeb37c9731fc2e365cc0114f7383c0106) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0096.key", 0x0000, 0x2000, CRC(6fd7d26e) SHA1(6e8feaf14d0981e8b0fa8dcf4cc45aabb0a09f83) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-11917.a14", 0x00000, 0x10000, CRC(6f772190) SHA1(e68dc78785a1cb0da362efc8c4a088ccc580bd6e) ) ROM_LOAD( "mpr-11918.a15", 0x10000, 0x10000, CRC(c731db95) SHA1(b3b9cbd772f7bfd35355bcb2a7c0801b61eaf19f) ) ROM_LOAD( "mpr-11919.a16", 0x20000, 0x10000, CRC(64d5a491) SHA1(686151c9a58f524f786f52c03f086cdaa5728233) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-11920.b1", 0x00001, 0x020000, CRC(e5d1e3cd) SHA1(d8c0f40dab00f1b09f6d018597fd45147f9ca3f6) ) ROM_LOAD16_BYTE( "mpr-11922.b5", 0x00000, 0x020000, CRC(70b0c4dd) SHA1(b67acab0c6a0f5051fc3fcda2476b8834f65b376) ) ROM_LOAD16_BYTE( "mpr-11921.b2", 0x40001, 0x020000, CRC(61d2358c) SHA1(216fd295ff9d56976f9b1c465a48806be843dd04) ) ROM_LOAD16_BYTE( "mpr-11923.b6", 0x40000, 0x020000, CRC(c9ffe47d) SHA1(fd6dc3781c6e7d1734a9f4a8e4a9c44cfc091e0a) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11916.a10", 0x0000, 0x8000, CRC(7ab541cf) SHA1(feb88022ca1796d020e53e95ad345159bd415530) ) ROM_END -/* - -Dynamite Dux (8751 version) - Sega System16B System - Sega 1988 - -Game Number 837-6768-09 -Rom Number 834-6767-09 - -Rom Board Type 171-5704 - -*/ - +//************************************************************************************************************************* +// Dynamite Dux (8751 version) - Sega System16B System - Sega 1988 +// +// Game Number 837-6768-09 +// Rom Number 834-6767-09 +// +// Rom Board Type 171-5704 +// ROM_START( ddux1 ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12189.a7", 0x000000, 0x20000, CRC(558e9b5d) SHA1(d092fe114578d84a7dbfe7c9591c2c44bf5c46f8) ) ROM_LOAD16_BYTE( "epr-12188.a5", 0x000001, 0x20000, CRC(802a240f) SHA1(f01ca7c38b1fa8baa44eb0f40e74572a45c8f5cc) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-11915.a8", 0x080000, 0x20000, CRC(d8ed3132) SHA1(a9d5ad8f79fb635cc234a99fad398688a5f15926) ) - ROM_LOAD16_BYTE( "epr-11913.a6", 0x080001, 0x20000, CRC(30c6cb92) SHA1(2e17c74eeb37c9731fc2e365cc0114f7383c0106) ) + ROM_LOAD16_BYTE( "epr-11915.a8", 0x040000, 0x20000, CRC(d8ed3132) SHA1(a9d5ad8f79fb635cc234a99fad398688a5f15926) ) + ROM_LOAD16_BYTE( "epr-11913.a6", 0x040001, 0x20000, CRC(30c6cb92) SHA1(2e17c74eeb37c9731fc2e365cc0114f7383c0106) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-11917.a14", 0x00000, 0x10000, CRC(6f772190) SHA1(e68dc78785a1cb0da362efc8c4a088ccc580bd6e) ) ROM_LOAD( "mpr-11918.a15", 0x10000, 0x10000, CRC(c731db95) SHA1(b3b9cbd772f7bfd35355bcb2a7c0801b61eaf19f) ) ROM_LOAD( "mpr-11919.a16", 0x20000, 0x10000, CRC(64d5a491) SHA1(686151c9a58f524f786f52c03f086cdaa5728233) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-11920.b1", 0x00001, 0x020000, CRC(e5d1e3cd) SHA1(d8c0f40dab00f1b09f6d018597fd45147f9ca3f6) ) ROM_LOAD16_BYTE( "mpr-11922.b5", 0x00000, 0x020000, CRC(70b0c4dd) SHA1(b67acab0c6a0f5051fc3fcda2476b8834f65b376) ) ROM_LOAD16_BYTE( "mpr-11921.b2", 0x40001, 0x020000, CRC(61d2358c) SHA1(216fd295ff9d56976f9b1c465a48806be843dd04) ) ROM_LOAD16_BYTE( "mpr-11923.b6", 0x40000, 0x020000, CRC(c9ffe47d) SHA1(fd6dc3781c6e7d1734a9f4a8e4a9c44cfc091e0a) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11916.a10", 0x0000, 0x8000, CRC(7ab541cf) SHA1(feb88022ca1796d020e53e95ad345159bd415530) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // protection MCU ROM_LOAD( "317-0095.bin", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - E-Swat (World), Sega System 16B - CPU: FD1094 (317-0130) - ROM Board type: 171-5797 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// E-Swat (World), Sega System 16B +// CPU: FD1094 (317-0130) +// ROM Board type: 171-5797 +// ROM_START( eswat ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12659.bin", 0x000000, 0x40000, CRC(c5ab2db9) SHA1(5c7ded9a39e03d1f438cff1574b614295c8ebeef) ) ROM_LOAD16_BYTE( "epr-12658.bin", 0x000001, 0x40000, CRC(af40bd71) SHA1(3d7422d5c95fd2cbf1ac4916cc8c625a53391eea) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0130.key", 0x0000, 0x2000, CRC(ba7b717b) SHA1(7a5cef9f525d8b5e4199a94f6ba5e960ab44eb0c) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12624.b11", 0x00000, 0x40000, CRC(375a5ec4) SHA1(42b9116bdc0e0a5b1dd667ac1856b4c2252829ba) ) ROM_LOAD( "mpr-12625.b12", 0x40000, 0x40000, CRC(3b8c757e) SHA1(0b66e8446d059a12e47e2a6fe8f0a333245bb95c) ) ROM_LOAD( "mpr-12626.b13", 0x80000, 0x40000, CRC(3efca25c) SHA1(0d866bf53a16b52719f73081e933f4db27d72ece) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12618.b1", 0x000001, 0x20000, CRC(0d1530bf) SHA1(bb8626cd98761c1c20cee117d00315c85621ba6a) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12621.b4", 0x000000, 0x20000, CRC(18ff0799) SHA1(5417223378aef16ee2b4f438d1f8f11a23fe7265) ) @@ -4699,31 +4564,31 @@ ROM_START( eswat ) ROM_LOAD16_BYTE( "mpr-12623.b6", 0x080000, 0x20000, CRC(6773fef6) SHA1(91e646ea447be02254d060daf255d26afe0cc79e) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12617.a13", 0x00000, 0x08000, CRC(7efecf23) SHA1(2b87af7cfaab5942a3f7b38c987fcba01d3475ab) ) ROM_LOAD( "mpr-12616.a11", 0x10000, 0x40000, CRC(254347c2) SHA1(bf2d83a69a5be375c7e42e9f7d6e65c1095a354c) ) ROM_END -/************************************************************************************************************************** - E-Swat (US), Sega System 16B - CPU: FD1094 (317-0129) - ROM Board type: 171-5797 - Sega ID# for ROM board: 834-7165-01 -*/ +//************************************************************************************************************************* +// E-Swat (US), Sega System 16B +// CPU: FD1094 (317-0129) +// ROM Board type: 171-5797 +// Sega ID# for ROM board: 834-7165-01 +// ROM_START( eswatu ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12657.a2", 0x000000, 0x40000, CRC(43ca72aa) SHA1(4c6c536f0ef50570992116b50ca816bbc7d42801) ) ROM_LOAD16_BYTE( "epr-12656.a1", 0x000001, 0x40000, CRC(5f018967) SHA1(753cd39bdb51126591b5814d54bb57ed1f77cf22) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0129.key", 0x0000, 0x2000, CRC(128302c7) SHA1(6abeab57e3c55ab5e7f57add68a6e6e918d88c1c) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12624.b11", 0x00000, 0x40000, CRC(375a5ec4) SHA1(42b9116bdc0e0a5b1dd667ac1856b4c2252829ba) ) ROM_LOAD( "mpr-12625.b12", 0x40000, 0x40000, CRC(3b8c757e) SHA1(0b66e8446d059a12e47e2a6fe8f0a333245bb95c) ) ROM_LOAD( "mpr-12626.b13", 0x80000, 0x40000, CRC(3efca25c) SHA1(0d866bf53a16b52719f73081e933f4db27d72ece) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12618.b1", 0x000001, 0x20000, CRC(0d1530bf) SHA1(bb8626cd98761c1c20cee117d00315c85621ba6a) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12621.b4", 0x000000, 0x20000, CRC(18ff0799) SHA1(5417223378aef16ee2b4f438d1f8f11a23fe7265) ) @@ -4737,33 +4602,33 @@ ROM_START( eswatu ) ROM_LOAD16_BYTE( "mpr-12623.b6", 0x080000, 0x20000, CRC(6773fef6) SHA1(91e646ea447be02254d060daf255d26afe0cc79e) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12617.a13", 0x00000, 0x08000, CRC(7efecf23) SHA1(2b87af7cfaab5942a3f7b38c987fcba01d3475ab) ) ROM_LOAD( "mpr-12616.a11", 0x10000, 0x40000, CRC(254347c2) SHA1(bf2d83a69a5be375c7e42e9f7d6e65c1095a354c) ) ROM_END -/************************************************************************************************************************** - E-Swat (Japan), Sega System 16B - CPU: FD1094 (317-0128) - ROM Board type: 171-5797 - Sega game ID: 833-7164 - Main board: 837-7166 - ROM board: 834-7165 -*/ +//************************************************************************************************************************* +// E-Swat (Japan), Sega System 16B +// CPU: FD1094 (317-0128) +// ROM Board type: 171-5797 +// Sega game ID: 833-7164 +// Main board: 837-7166 +// ROM board: 834-7165 +// ROM_START( eswatj ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12615.a2", 0x000000, 0x40000, CRC(388c2ea7) SHA1(a1a8ef973dfe3055981c998d780e36a1488e4052) ) ROM_LOAD16_BYTE( "epr-12614.a1", 0x000001, 0x40000, CRC(d5f0fb47) SHA1(d1363eaf74d40a76764fbff217a38e560d8c4c45) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0128.key", 0x0000, 0x2000, CRC(95f96277) SHA1(8e97de40872e113653463ff3787a5b1aa640e630) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12624.b11", 0x00000, 0x40000, CRC(375a5ec4) SHA1(42b9116bdc0e0a5b1dd667ac1856b4c2252829ba) ) ROM_LOAD( "mpr-12625.b12", 0x40000, 0x40000, CRC(3b8c757e) SHA1(0b66e8446d059a12e47e2a6fe8f0a333245bb95c) ) ROM_LOAD( "mpr-12626.b13", 0x80000, 0x40000, CRC(3efca25c) SHA1(0d866bf53a16b52719f73081e933f4db27d72ece) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12618.b1", 0x000001, 0x20000, CRC(0d1530bf) SHA1(bb8626cd98761c1c20cee117d00315c85621ba6a) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12621.b4", 0x000000, 0x20000, CRC(18ff0799) SHA1(5417223378aef16ee2b4f438d1f8f11a23fe7265) ) @@ -4777,21 +4642,21 @@ ROM_START( eswatj ) ROM_LOAD16_BYTE( "mpr-12623.b6", 0x080000, 0x20000, CRC(6773fef6) SHA1(91e646ea447be02254d060daf255d26afe0cc79e) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12617.a13", 0x00000, 0x08000, CRC(7efecf23) SHA1(2b87af7cfaab5942a3f7b38c987fcba01d3475ab) ) ROM_LOAD( "mpr-12616.a11", 0x10000, 0x40000, CRC(254347c2) SHA1(bf2d83a69a5be375c7e42e9f7d6e65c1095a354c) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Excite League, Sega System 16B - CPU: FD1094 (317-0079) - ROM Board type: 171-5358 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Excite League, Sega System 16B +// CPU: FD1094 (317-0079) +// ROM Board type: 171-5358 +// ROM_START( exctleag ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11939.a04", 0x00000, 0x10000, CRC(117dd98f) SHA1(0234c2cf3421849854bec3711ab64f50f12cc5dd) ) ROM_LOAD16_BYTE( "epr-11936.a01", 0x00001, 0x10000, CRC(0863de60) SHA1(540a5cae2623bce296c07603239f737a782e3b0b) ) ROM_LOAD16_BYTE( "epr-11940.a05", 0x20000, 0x10000, CRC(dec83274) SHA1(85919bcd372fbfb9f06c34897b4d28d08ef3c9d1) ) @@ -4799,15 +4664,15 @@ ROM_START( exctleag ) ROM_LOAD16_BYTE( "epr-11941.a06", 0x40000, 0x10000, CRC(4df2d451) SHA1(644541b20e034a0149117874021c158bd3759e35) ) ROM_LOAD16_BYTE( "epr-11938.a03", 0x40001, 0x10000, CRC(07c08d47) SHA1(47d3445cfa2514918206cd29a203837a9f434b42) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0079.key", 0x0000, 0x2000, CRC(effefa1c) SHA1(f42e87f60c9589862ea2c05a29b1b15dc7194051) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11942.b09", 0x00000, 0x10000, CRC(eb70e827) SHA1(0617b4411a90087c277354c3653fe994bc4fc580) ) ROM_LOAD( "epr-11943.b10", 0x10000, 0x10000, CRC(d97c8982) SHA1(3e604af1771caba3aa213796c4a0812a5e352580) ) ROM_LOAD( "epr-11944.b11", 0x20000, 0x10000, CRC(a75cae80) SHA1(17c148a33b09b5403e68f5d96e506545c2ced206) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11950.b01", 0x00001, 0x10000, CRC(af497849) SHA1(c5fdca8d3b1d83e3d377a49ecdc0fc53714afc09) ) ROM_LOAD16_BYTE( "epr-11954.b05", 0x00000, 0x10000, CRC(5fa2106c) SHA1(2f2620fa52d07667dff4720fea32a6615d99e522) ) ROM_LOAD16_BYTE( "epr-11951.b02", 0x20001, 0x10000, CRC(c04fa974) SHA1(b1a4fb8522126113d7857d559f169f09c5f51a13) ) @@ -4817,7 +4682,7 @@ ROM_START( exctleag ) ROM_LOAD16_BYTE( "epr-11953.b04", 0x60001, 0x10000, CRC(4cae3999) SHA1(22089e43a5e2e4fe672015366154e24ad38d3c19) ) ROM_LOAD16_BYTE( "epr-11957.b08", 0x60000, 0x10000, CRC(218f835b) SHA1(bfef3ec45665a5921c095da34701528d4d4e0e3a) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11945.a07", 0x00000, 0x8000, CRC(c2a83012) SHA1(b3de8af803497438aa3e110a9c608ac290f7d1e8) ) ROM_LOAD( "epr-11140.a08", 0x10000, 0x8000, CRC(b297371b) SHA1(4e787aa9ee2aeab4da30237644421df407b684a5) ) ROM_LOAD( "epr-11141.a09", 0x20000, 0x8000, CRC(19756aa6) SHA1(81597e17b848f6a41f5fb117296e7508297815e4) ) @@ -4826,125 +4691,125 @@ ROM_START( exctleag ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Flash Point, Sega System 16B - CPU: FD1094 (317-0127A) - ROM Board type: 171-5358 - - 171-5358 834-6764 - ROW A 171-5358 - PRG 1 12598B - PRG 2 - PRG 3 - PRG 4 12599B - PRG 5 - PRG 6 - SPRG 7 12592 - SND 8 - SND 9 - SND 10 - SND 11 - ROW B - OBJ 1 12596 - OBJ 2 - OBJ 3 - OBJ 4 - OBJ 5 12597 - OBJ 6 - OBJ 7 - OBJ 8 - SCR 9 12593 - SCR 10 12594 - SCR 11 12595 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Flash Point, Sega System 16B +// CPU: FD1094 (317-0127A) +// ROM Board type: 171-5358 +// +// 171-5358 834-6764 +// ROW A 171-5358 +// PRG 1 12598B +// PRG 2 +// PRG 3 +// PRG 4 12599B +// PRG 5 +// PRG 6 +// SPRG 7 12592 +// SND 8 +// SND 9 +// SND 10 +// SND 11 +// ROW B +// OBJ 1 12596 +// OBJ 2 +// OBJ 3 +// OBJ 4 +// OBJ 5 12597 +// OBJ 6 +// OBJ 7 +// OBJ 8 +// SCR 9 12593 +// SCR 10 12594 +// SCR 11 12595 +// ROM_START( fpoint ) - ROM_REGION( 0x020000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12599b.a4", 0x000000, 0x10000, CRC(26e3f354) SHA1(5be263a7d66f09508651c661f90cd4f55ac9631c) ) ROM_LOAD16_BYTE( "epr-12598b.a1", 0x000001, 0x10000, CRC(c0f2c97d) SHA1(0f59e0a848ce8bd2de33a831e09fa5b712553d5d) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0127a.key", 0x0000, 0x2000, CRC(5adb0042) SHA1(07c565cd741df3de2923921b1009dac4021acd41) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12593.a14", 0x00000, 0x10000, CRC(cc0582d8) SHA1(92c7d125a6dcb9c5e6e7bd92a5bf3008385ed487) ) ROM_LOAD( "opr-12594.a15", 0x10000, 0x10000, CRC(8bfc4815) SHA1(08d28b65e5024c592a9a289b270774ef5c553cbf) ) ROM_LOAD( "opr-12595.a16", 0x20000, 0x10000, CRC(5b18d60b) SHA1(8e9c81635dcefa52d1cf53c2937ae560191b5202) ) - ROM_REGION16_BE( 0x20000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x20000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-12596.b1", 0x00001, 0x10000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) ) ROM_LOAD16_BYTE( "opr-12597.b5", 0x00000, 0x10000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12592.a10", 0x0000, 0x8000, CRC(9a8c11bb) SHA1(399f8e9bdd7aaa4d25817fa9cd4bbf413e5baebe) ) ROM_END -/************************************************************************************************************************** - Flash Point, Sega System 16B - CPU: FD1094 (317-0127A) - ROM Board type: 171-5704 - Sega ID# for ROM board: 834-7122-03 - - Pos. Silk Type Part Pos. Silk Type Part - - A1 OBJ4-O Unused B1 OBJ0-O OPR-12596 27C512 - A2 OBJ5-O Unused B2 OBJ1-O Unused - A3 OBJ6-O Unused B3 OBJ2-O Unused - A4 OBJ7-O Unused B4 OBJ3-O Unused - A5 ROM0-O EPR-12590B 27C512 B5 OBJ0-E OPR-12597 27C512 - A6 ROM1-O Unused B6 OBJ1-E Unused - A7 ROM0-E EPR-12591B 27C512 B7 OBJ2-E Unused - A8 ROM1-E Unused B8 OBJ3-E Unused - A10 S-PROG EPR-12592 27C256 B10 OBJ4-E Unused - A11 SPEECH0 Unused B11 OBJ5-E Unused - A12 SPEECH1 Unused B12 OBJ6-E Unused - A13 No text No socket B13 OBJ7-E Unused - A14 SCR01 OPR-12593 27C512 B14 SCR11 Unused - A15 SCR02 OPR-12594 27C512 B15 SCR12 Unused - A16 SCR03 OPR-12595 27C512 B16 SCR13 Unused -*/ +//************************************************************************************************************************* +// Flash Point, Sega System 16B +// CPU: FD1094 (317-0127A) +// ROM Board type: 171-5704 +// Sega ID# for ROM board: 834-7122-03 +// +// Pos. Silk Type Part Pos. Silk Type Part +// +// A1 OBJ4-O Unused B1 OBJ0-O OPR-12596 27C512 +// A2 OBJ5-O Unused B2 OBJ1-O Unused +// A3 OBJ6-O Unused B3 OBJ2-O Unused +// A4 OBJ7-O Unused B4 OBJ3-O Unused +// A5 ROM0-O EPR-12590B 27C512 B5 OBJ0-E OPR-12597 27C512 +// A6 ROM1-O Unused B6 OBJ1-E Unused +// A7 ROM0-E EPR-12591B 27C512 B7 OBJ2-E Unused +// A8 ROM1-E Unused B8 OBJ3-E Unused +// A10 S-PROG EPR-12592 27C256 B10 OBJ4-E Unused +// A11 SPEECH0 Unused B11 OBJ5-E Unused +// A12 SPEECH1 Unused B12 OBJ6-E Unused +// A13 No text No socket B13 OBJ7-E Unused +// A14 SCR01 OPR-12593 27C512 B14 SCR11 Unused +// A15 SCR02 OPR-12594 27C512 B15 SCR12 Unused +// A16 SCR03 OPR-12595 27C512 B16 SCR13 Unused +// ROM_START( fpoint1 ) - ROM_REGION( 0x020000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12591b.a7", 0x000000, 0x10000, CRC(248b3e1b) SHA1(b473c2a057a61896596ac4761e875d72c4f91529) ) ROM_LOAD16_BYTE( "epr-12590b.a5", 0x000001, 0x10000, CRC(75256e3d) SHA1(87a7d9952f29e49958c135906ac2fd19bdc29b67) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0127a.key", 0x0000, 0x2000, CRC(5adb0042) SHA1(07c565cd741df3de2923921b1009dac4021acd41) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12593.a14", 0x00000, 0x10000, CRC(cc0582d8) SHA1(92c7d125a6dcb9c5e6e7bd92a5bf3008385ed487) ) ROM_LOAD( "opr-12594.a15", 0x10000, 0x10000, CRC(8bfc4815) SHA1(08d28b65e5024c592a9a289b270774ef5c553cbf) ) ROM_LOAD( "opr-12595.a16", 0x20000, 0x10000, CRC(5b18d60b) SHA1(8e9c81635dcefa52d1cf53c2937ae560191b5202) ) - ROM_REGION16_BE( 0x20000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x20000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-12596.b1", 0x00001, 0x10000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) ) ROM_LOAD16_BYTE( "opr-12597.b5", 0x00000, 0x10000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12592.a10", 0x0000, 0x8000, CRC(9a8c11bb) SHA1(399f8e9bdd7aaa4d25817fa9cd4bbf413e5baebe) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Golden Axe, Sega System 16B - CPU: 68000 + i8751 (317-123A) - ROM Board type: 171-5797 - Sega ID# for ROM board: 834-7002-07 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Golden Axe, Sega System 16B +// CPU: 68000 + i8751 (317-123A) +// ROM Board type: 171-5797 +// Sega ID# for ROM board: 834-7002-07 +// ROM_START( goldnaxe ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12545.ic2", 0x00000, 0x40000, CRC(a97c4e4d) SHA1(41cda15ae56185725233db669d9f8c4a8c1eb1c3) ) ROM_LOAD16_BYTE( "epr-12544.ic1", 0x00001, 0x40000, CRC(5e38f668) SHA1(3b15a9a30adde6e852c439c8e6e45875b66252cb) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12385.ic19", 0x00000, 0x20000, CRC(b8a4e7e0) SHA1(9b36f50209d45a835ded53eb045f63c649b02fc9) ) ROM_LOAD( "epr-12386.ic20", 0x20000, 0x20000, CRC(25d7d779) SHA1(2de14a76a5176d5abc7e7f7f723146c620927610) ) ROM_LOAD( "epr-12387.ic21", 0x40000, 0x20000, CRC(c7fcadf3) SHA1(5f0fd600a75a02749935af21e1e0d2c714c6417e) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12378.ic9", 0x000001, 0x20000, CRC(119e5a82) SHA1(261ed2bc4ebac7142e2ecca9f03c91242e792a98) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12379.ic12", 0x000000, 0x20000, CRC(1a0e8c57) SHA1(674f1ae7db632876fff346e76786801ae19d9799) ) @@ -4958,34 +4823,34 @@ ROM_START( goldnaxe ) ROM_LOAD16_BYTE( "mpr-12383.ic14", 0x080000, 0x20000, CRC(5dbacf7a) SHA1(236866fb94672b13cbb2cb479324e61de87eeb34) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12390.ic8", 0x00000, 0x08000, CRC(399fc5f5) SHA1(6f290b36dc71ff4759598e2a9c185a8945a3c9e7) ) ROM_LOAD( "mpr-12384.ic6", 0x10000, 0x20000, CRC(6218d8e7) SHA1(5a745c750efb4a61716f99befb7ed14cc84e9973) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // protection MCU ROM_LOAD( "317-0123a.bin", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - Golden Axe, Sega System 16B - CPU: FD1094 (317-0122) - ROM Board type: 171-5797 - Sega ID# for ROM board: 834-7002-06 -*/ +//************************************************************************************************************************* +// Golden Axe, Sega System 16B +// CPU: FD1094 (317-0122) +// ROM Board type: 171-5797 +// Sega ID# for ROM board: 834-7002-06 +// ROM_START( goldnaxeu ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12543.ic2", 0x00000, 0x40000, CRC(b0df9ca4) SHA1(240f3c2998f969569d992f796e006f5ea4434e55) ) ROM_LOAD16_BYTE( "epr-12542.ic1", 0x00001, 0x40000, CRC(b7994d3c) SHA1(87570f23826922fca465c69df6b892c59f14e103) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0122.key", 0x0000, 0x2000, CRC(f123c2fb) SHA1(83463a6918afde0a6f7d919e00127ffdc563efd1) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12385.ic19", 0x00000, 0x20000, CRC(b8a4e7e0) SHA1(9b36f50209d45a835ded53eb045f63c649b02fc9) ) ROM_LOAD( "epr-12386.ic20", 0x20000, 0x20000, CRC(25d7d779) SHA1(2de14a76a5176d5abc7e7f7f723146c620927610) ) ROM_LOAD( "epr-12387.ic21", 0x40000, 0x20000, CRC(c7fcadf3) SHA1(5f0fd600a75a02749935af21e1e0d2c714c6417e) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12378.ic9", 0x000001, 0x20000, CRC(119e5a82) SHA1(261ed2bc4ebac7142e2ecca9f03c91242e792a98) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12379.ic12", 0x000000, 0x20000, CRC(1a0e8c57) SHA1(674f1ae7db632876fff346e76786801ae19d9799) ) @@ -4999,35 +4864,34 @@ ROM_START( goldnaxeu ) ROM_LOAD16_BYTE( "mpr-12383.ic14", 0x080000, 0x20000, CRC(5dbacf7a) SHA1(236866fb94672b13cbb2cb479324e61de87eeb34) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12390.ic8", 0x00000, 0x08000, CRC(399fc5f5) SHA1(6f290b36dc71ff4759598e2a9c185a8945a3c9e7) ) ROM_LOAD( "mpr-12384.ic6", 0x10000, 0x20000, CRC(6218d8e7) SHA1(5a745c750efb4a61716f99befb7ed14cc84e9973) ) ROM_END -/************************************************************************************************************************** - Golden Axe (Japan), Sega System 16B - CPU: FD1094 (317-0121) - ROM Board type: 171-5704 - Sega ID# for ROM board: 834-7002-04 -*/ +//************************************************************************************************************************* +// Golden Axe (Japan), Sega System 16B +// CPU: FD1094 (317-0121) +// ROM Board type: 171-5704 +// Sega ID# for ROM board: 834-7002-04 +// ROM_START( goldnaxej ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ - /* fails rom test on 8 & 6 ?! roms verfied from two separate sources */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code + // fails rom test on 8 & 6 ?! roms verfied from two separate sources ROM_LOAD16_BYTE( "epr-12540.a7", 0x00000, 0x20000, CRC(0c7ccc6d) SHA1(25bc29eee731befc665472c2c1998cac8447cc21) ) ROM_LOAD16_BYTE( "epr-12539.a5", 0x00001, 0x20000, CRC(1f24f7d0) SHA1(a09cdf394c03069707f7ed400b8fbdc13674fa74) ) - /* emtpy 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-12521.a8", 0x80000, 0x20000, CRC(5001d713) SHA1(68cf3f48d6e440e5b800503a211adda02107d956) ) - ROM_LOAD16_BYTE( "epr-12519.a6", 0x80001, 0x20000, CRC(4438ca8e) SHA1(0af53d64f06abf41f4c46540d28d5f008a4835a3) ) + ROM_LOAD16_BYTE( "epr-12521.a8", 0x40000, 0x20000, CRC(5001d713) SHA1(68cf3f48d6e440e5b800503a211adda02107d956) ) + ROM_LOAD16_BYTE( "epr-12519.a6", 0x40001, 0x20000, CRC(4438ca8e) SHA1(0af53d64f06abf41f4c46540d28d5f008a4835a3) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0121.key", 0x0000, 0x2000, CRC(72afed01) SHA1(3967390fde63fa5961e71ab49b6e71c4be2ac96f) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12385.a14", 0x00000, 0x20000, CRC(b8a4e7e0) SHA1(9b36f50209d45a835ded53eb045f63c649b02fc9) ) ROM_LOAD( "epr-12386.a15", 0x20000, 0x20000, CRC(25d7d779) SHA1(2de14a76a5176d5abc7e7f7f723146c620927610) ) ROM_LOAD( "epr-12387.a16", 0x40000, 0x20000, CRC(c7fcadf3) SHA1(5f0fd600a75a02749935af21e1e0d2c714c6417e) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12378.b1", 0x000001, 0x20000, CRC(119e5a82) SHA1(261ed2bc4ebac7142e2ecca9f03c91242e792a98) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12379.b5", 0x000000, 0x20000, CRC(1a0e8c57) SHA1(674f1ae7db632876fff346e76786801ae19d9799) ) @@ -5041,35 +4905,34 @@ ROM_START( goldnaxej ) ROM_LOAD16_BYTE( "mpr-12383.b7", 0x080000, 0x20000, CRC(5dbacf7a) SHA1(236866fb94672b13cbb2cb479324e61de87eeb34) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12390.a10", 0x00000, 0x08000, CRC(399fc5f5) SHA1(6f290b36dc71ff4759598e2a9c185a8945a3c9e7) ) ROM_LOAD( "mpr-12384.a11", 0x10000, 0x20000, CRC(6218d8e7) SHA1(5a745c750efb4a61716f99befb7ed14cc84e9973) ) ROM_END -/************************************************************************************************************************** - Golden Axe (World), Sega System 16B - CPU: FD1094 (317-0120) - ROM Board type: 171-5704 - Sega ID# for ROM board: 834-7002-11 -*/ +//************************************************************************************************************************* +// Golden Axe (World), Sega System 16B +// CPU: FD1094 (317-0120) +// ROM Board type: 171-5704 +// Sega ID# for ROM board: 834-7002-11 +// ROM_START( goldnaxe3 ) - ROM_REGION( 0xc0000, "maincpu", 0) /* 68000 code */ - /* fails rom test on 8 & 6 ?! roms verfied from two separate sources */ + ROM_REGION( 0x80000, "maincpu", 0) // 68000 code + // fails rom test on 8 & 6 ?! roms verfied from two separate sources ROM_LOAD16_BYTE( "epr-12525.a7", 0x00000, 0x20000, CRC(48332c76) SHA1(4cdf7dc2f504a030ae63b4854bb76a3f2cc1d96b) ) ROM_LOAD16_BYTE( "epr-12524.a5", 0x00001, 0x20000, CRC(8e58f342) SHA1(a972b05f7d5d7228067f97724191fce1aeb0371d) ) - /* emtpy 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-12521.a8", 0x80000, 0x20000, CRC(5001d713) SHA1(68cf3f48d6e440e5b800503a211adda02107d956) ) - ROM_LOAD16_BYTE( "epr-12519.a6", 0x80001, 0x20000, CRC(4438ca8e) SHA1(0af53d64f06abf41f4c46540d28d5f008a4835a3) ) + ROM_LOAD16_BYTE( "epr-12521.a8", 0x40000, 0x20000, CRC(5001d713) SHA1(68cf3f48d6e440e5b800503a211adda02107d956) ) + ROM_LOAD16_BYTE( "epr-12519.a6", 0x40001, 0x20000, CRC(4438ca8e) SHA1(0af53d64f06abf41f4c46540d28d5f008a4835a3) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0120.key", 0x0000, 0x2000, CRC(946e9fa6) SHA1(035cfa40143888077c7119ecac3a32e76cedf267) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12385.a14", 0x00000, 0x20000, CRC(b8a4e7e0) SHA1(9b36f50209d45a835ded53eb045f63c649b02fc9) ) ROM_LOAD( "epr-12386.a15", 0x20000, 0x20000, CRC(25d7d779) SHA1(2de14a76a5176d5abc7e7f7f723146c620927610) ) ROM_LOAD( "epr-12387.a16", 0x40000, 0x20000, CRC(c7fcadf3) SHA1(5f0fd600a75a02749935af21e1e0d2c714c6417e) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12378.b1", 0x000001, 0x20000, CRC(119e5a82) SHA1(261ed2bc4ebac7142e2ecca9f03c91242e792a98) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12379.b5", 0x000000, 0x20000, CRC(1a0e8c57) SHA1(674f1ae7db632876fff346e76786801ae19d9799) ) @@ -5083,31 +4946,30 @@ ROM_START( goldnaxe3 ) ROM_LOAD16_BYTE( "mpr-12383.b7", 0x080000, 0x20000, CRC(5dbacf7a) SHA1(236866fb94672b13cbb2cb479324e61de87eeb34) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12390.a10", 0x00000, 0x08000, CRC(399fc5f5) SHA1(6f290b36dc71ff4759598e2a9c185a8945a3c9e7) ) ROM_LOAD( "mpr-12384.a11", 0x10000, 0x20000, CRC(6218d8e7) SHA1(5a745c750efb4a61716f99befb7ed14cc84e9973) ) ROM_END -/************************************************************************************************************************** - Golden Axe (Japan), Sega System 16B - CPU: 68000 + i8751 (317-0112) - ROM Board type: 171-5704 - Sega ID# for ROM board: 834-7002-02 -*/ +//************************************************************************************************************************* +// Golden Axe (Japan), Sega System 16B +// CPU: 68000 + i8751 (317-0112) +// ROM Board type: 171-5704 +// Sega ID# for ROM board: 834-7002-02 +// ROM_START( goldnaxe2 ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12523.a7", 0x00000, 0x20000, CRC(8e6128d7) SHA1(b8de216f4ca08815ca98d39a773024d191d21b4d) ) ROM_LOAD16_BYTE( "epr-12522.a5", 0x00001, 0x20000, CRC(b6c35160) SHA1(88015d0a486f56911360362c96a82f36a13de886) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-12521.a8", 0x80000, 0x20000, CRC(5001d713) SHA1(68cf3f48d6e440e5b800503a211adda02107d956) ) - ROM_LOAD16_BYTE( "epr-12519.a6", 0x80001, 0x20000, CRC(4438ca8e) SHA1(0af53d64f06abf41f4c46540d28d5f008a4835a3) ) + ROM_LOAD16_BYTE( "epr-12521.a8", 0x40000, 0x20000, CRC(5001d713) SHA1(68cf3f48d6e440e5b800503a211adda02107d956) ) + ROM_LOAD16_BYTE( "epr-12519.a6", 0x40001, 0x20000, CRC(4438ca8e) SHA1(0af53d64f06abf41f4c46540d28d5f008a4835a3) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12385.a14", 0x00000, 0x20000, CRC(b8a4e7e0) SHA1(9b36f50209d45a835ded53eb045f63c649b02fc9) ) ROM_LOAD( "epr-12386.a15", 0x20000, 0x20000, CRC(25d7d779) SHA1(2de14a76a5176d5abc7e7f7f723146c620927610) ) ROM_LOAD( "epr-12387.a16", 0x40000, 0x20000, CRC(c7fcadf3) SHA1(5f0fd600a75a02749935af21e1e0d2c714c6417e) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12378.b1", 0x000001, 0x20000, CRC(119e5a82) SHA1(261ed2bc4ebac7142e2ecca9f03c91242e792a98) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12379.b5", 0x000000, 0x20000, CRC(1a0e8c57) SHA1(674f1ae7db632876fff346e76786801ae19d9799) ) @@ -5121,34 +4983,34 @@ ROM_START( goldnaxe2 ) ROM_LOAD16_BYTE( "mpr-12383.b7", 0x080000, 0x20000, CRC(5dbacf7a) SHA1(236866fb94672b13cbb2cb479324e61de87eeb34) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12390.a10", 0x00000, 0x08000, CRC(399fc5f5) SHA1(6f290b36dc71ff4759598e2a9c185a8945a3c9e7) ) ROM_LOAD( "mpr-12384.a11", 0x10000, 0x20000, CRC(6218d8e7) SHA1(5a745c750efb4a61716f99befb7ed14cc84e9973) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // protection MCU ROM_LOAD( "317-0112.bin", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - Golden Axe, Sega System 16B - CPU: FD1094 (317-0110) - ROM Board type: 171-5797 - Sega ID# for ROM board: 834-7002 -*/ +//************************************************************************************************************************* +// Golden Axe, Sega System 16B +// CPU: FD1094 (317-0110) +// ROM Board type: 171-5797 +// Sega ID# for ROM board: 834-7002 +// ROM_START( goldnaxe1 ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12389.ic2", 0x00000, 0x40000, CRC(35d5fa77) SHA1(b16b312eb1c91c412fee61002599812e30e321ee) ) ROM_LOAD16_BYTE( "epr-12388.ic1", 0x00001, 0x40000, CRC(72952a93) SHA1(b31888429ad81388a96333dc0b2c7e2223134834) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0110.key", 0x0000, 0x2000, CRC(cd517dc6) SHA1(db95adac8c089758832897854a9cb4d611974dee) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12385.ic19", 0x00000, 0x20000, CRC(b8a4e7e0) SHA1(9b36f50209d45a835ded53eb045f63c649b02fc9) ) ROM_LOAD( "epr-12386.ic20", 0x20000, 0x20000, CRC(25d7d779) SHA1(2de14a76a5176d5abc7e7f7f723146c620927610) ) ROM_LOAD( "epr-12387.ic21", 0x40000, 0x20000, CRC(c7fcadf3) SHA1(5f0fd600a75a02749935af21e1e0d2c714c6417e) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12378.ic9", 0x000001, 0x20000, CRC(119e5a82) SHA1(261ed2bc4ebac7142e2ecca9f03c91242e792a98) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "mpr-12379.ic12", 0x000000, 0x20000, CRC(1a0e8c57) SHA1(674f1ae7db632876fff346e76786801ae19d9799) ) @@ -5162,36 +5024,36 @@ ROM_START( goldnaxe1 ) ROM_LOAD16_BYTE( "mpr-12383.ic14", 0x080000, 0x20000, CRC(5dbacf7a) SHA1(236866fb94672b13cbb2cb479324e61de87eeb34) ) ROM_CONTINUE( 0x180000, 0x20000 ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12390.ic8", 0x00000, 0x08000, CRC(399fc5f5) SHA1(6f290b36dc71ff4759598e2a9c185a8945a3c9e7) ) ROM_LOAD( "mpr-12384.ic6", 0x10000, 0x20000, CRC(6218d8e7) SHA1(5a745c750efb4a61716f99befb7ed14cc84e9973) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Heavyweight Champ, Sega System 16B - CPU: 68000 - ROM Board type: 171-5521 - Filter Board: 834-6383 (takes input from controls and routes through the CN5 connector on the mainboard) - Sega ID# for ROM board: 834-6398-02 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Heavyweight Champ, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5521 +// Filter Board: 834-6383 (takes input from controls and routes through the CN5 connector on the mainboard) +// Sega ID# for ROM board: 834-6398-02 +// ROM_START( hwchamp ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11239.a7", 0x000000, 0x20000, CRC(e5abfed7) SHA1(1f875dbaf8665c1dbfe336470580361b18a8ed4e) ) ROM_LOAD16_BYTE( "epr-11238.a5", 0x000001, 0x20000, CRC(25180124) SHA1(77b414f8cd88270713c57bddadec5d8dca490e86) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "mpr-11241.a14", 0x00000, 0x20000, CRC(fc586a86) SHA1(2c26ef3ab94089940add3be9952804a6e62f5113) ) /* all MPR-11xxx here are 28 pin Fujitsu MB831000 MASK roms */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "mpr-11241.a14", 0x00000, 0x20000, CRC(fc586a86) SHA1(2c26ef3ab94089940add3be9952804a6e62f5113) ) // all MPR-11xxx here are 28 pin Fujitsu MB831000 MASK roms ROM_LOAD( "mpr-11166.b14", 0x20000, 0x20000, CRC(aeaaa9d8) SHA1(6b7e5320f515c1c35445d3320b3edaef911191e1) ) ROM_LOAD( "mpr-11242.a15", 0x40000, 0x20000, CRC(7715a742) SHA1(e6040ff0e9c68f3f502e5f6d7e7ca04b14059752) ) ROM_LOAD( "mpr-11167.b15", 0x60000, 0x20000, CRC(63a82afa) SHA1(a02bbb6dd84cdf7cdab8e738c6927f5b1e3fcad5) ) ROM_LOAD( "mpr-11243.a16", 0x80000, 0x20000, CRC(f30cd5fd) SHA1(df6118ca4b724c37b11e18d9f2ea18e9591ae7aa) ) ROM_LOAD( "mpr-11168.b16", 0xA0000, 0x20000, CRC(5b8494a8) SHA1(9e3f09f4037a007b6a188dd81ec8f9c635e87650) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ - ROM_LOAD16_BYTE( "mpr-11158.b1", 0x000001, 0x010000, CRC(fc098a13) SHA1(b4a6e00d4765265bad170dabf0b2a4a58e063b16) ) /* all MPR-111xx here are 28 pin Fujitsu MB831000 MASK roms */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites + ROM_LOAD16_BYTE( "mpr-11158.b1", 0x000001, 0x010000, CRC(fc098a13) SHA1(b4a6e00d4765265bad170dabf0b2a4a58e063b16) ) // all MPR-111xx here are 28 pin Fujitsu MB831000 MASK roms ROM_CONTINUE( 0x020001, 0x010000 ) ROM_LOAD16_BYTE( "mpr-11162.b5", 0x000000, 0x010000, CRC(5db934a8) SHA1(ba7cc93025af71ad2674b1376b61afbb7ae910ff) ) ROM_CONTINUE( 0x020000, 0x010000 ) @@ -5208,29 +5070,29 @@ ROM_START( hwchamp ) ROM_LOAD16_BYTE( "mpr-11165.b8", 0x0c0000, 0x010000, CRC(57e8f9d2) SHA1(1804677820d05a421120660f91e3a5f1df1e6a8d) ) ROM_CONTINUE( 0x0e0000, 0x010000 ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11240.a10", 0x00000, 0x08000, CRC(96a12d9d) SHA1(f4ba70c3b5d80a1b6a187c940b922d5182d5ab12) ) - ROM_LOAD( "mpr-11244.a11", 0x10000, 0x20000, CRC(4191c03d) SHA1(40809fb80527980015d3b5c4ca7cf159bc09cf5a) ) /* 28 pin Fujitsu MB831000 MASK rom */ - ROM_LOAD( "mpr-11245.a12", 0x30000, 0x20000, CRC(a4d53f7b) SHA1(71123a8ecfa093897c6f2bb7312e6c755be14521) ) /* 28 pin Fujitsu MB831000 MASK rom */ + ROM_LOAD( "mpr-11244.a11", 0x10000, 0x20000, CRC(4191c03d) SHA1(40809fb80527980015d3b5c4ca7cf159bc09cf5a) ) // 28 pin Fujitsu MB831000 MASK rom + ROM_LOAD( "mpr-11245.a12", 0x30000, 0x20000, CRC(a4d53f7b) SHA1(71123a8ecfa093897c6f2bb7312e6c755be14521) ) // 28 pin Fujitsu MB831000 MASK rom ROM_REGION( 0x0100, "plds", 0 ) ROM_LOAD( "pls153.bin", 0x0000, 0x00eb, CRC(39b47212) SHA1(432b47aee5ecbf08a8a6dc2f8379c816feb86328) ) ROM_END -/************************************************************************************************************************** - Heavyweight Champ (Japan), Sega System 16B - CPU: FD1094 (317-0046) - ROM Board type: 171-5521 -*/ +//************************************************************************************************************************* +// Heavyweight Champ (Japan), Sega System 16B +// CPU: FD1094 (317-0046) +// ROM Board type: 171-5521 +// ROM_START( hwchampj ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11152.a7", 0x000000, 0x20000, CRC(8ab0ce62) SHA1(6af63108c945b055f2960c70e062d452a02b9d71) ) ROM_LOAD16_BYTE( "epr-11153.a5", 0x000001, 0x20000, CRC(84a743de) SHA1(58b2e3d3d548fe23fb74da1beae809b1df7e9f5a) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0046.key", 0x0000, 0x2000, CRC(488b3f8b) SHA1(b381966ae5d810c34d3a8ea9951b8fe166f0e117) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11202.a14", 0x00000, 0x20000, CRC(7c94ede3) SHA1(66e75c2eec5b507b67706eae718de621246cbdc8) ) ROM_LOAD( "epr-11213.b14", 0x20000, 0x20000, CRC(aeaaa9d8) SHA1(6b7e5320f515c1c35445d3320b3edaef911191e1) ) ROM_LOAD( "epr-11203.a15", 0x40000, 0x20000, CRC(327754f7) SHA1(57dc9830d9d63d5b843faca326c2714a580c8b38) ) @@ -5238,7 +5100,7 @@ ROM_START( hwchampj ) ROM_LOAD( "epr-11204.a16", 0x80000, 0x20000, CRC(dfc4cd33) SHA1(880af38b6a3cb52220e7b4f0999cfafade0535f9) ) ROM_LOAD( "epr-11215.b16", 0xA0000, 0x20000, CRC(5b8494a8) SHA1(9e3f09f4037a007b6a188dd81ec8f9c635e87650) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11205.b1", 0x000001, 0x010000, CRC(fc098a13) SHA1(b4a6e00d4765265bad170dabf0b2a4a58e063b16) ) ROM_CONTINUE( 0x020001, 0x010000 ) ROM_LOAD16_BYTE( "epr-11209.b5", 0x000000, 0x010000, CRC(5db934a8) SHA1(ba7cc93025af71ad2674b1376b61afbb7ae910ff) ) @@ -5256,7 +5118,7 @@ ROM_START( hwchampj ) ROM_LOAD16_BYTE( "epr-11212.b8", 0x0c0000, 0x010000, CRC(57e8f9d2) SHA1(1804677820d05a421120660f91e3a5f1df1e6a8d) ) ROM_CONTINUE( 0x0e0000, 0x010000 ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11154.a10", 0x00000, 0x08000, CRC(65791275) SHA1(4fc0dca24411845a3a63282089fad756dedd12d6) ) ROM_LOAD( "epr-11200.a11", 0x10000, 0x20000, CRC(5c41a68a) SHA1(a7357adf3bd777669a8a506f31374615dfbad932) ) ROM_LOAD( "epr-11201.a12", 0x30000, 0x20000, CRC(9a993120) SHA1(0c1ad7568b727e86926b3442e24840de81864dff) ) @@ -5266,27 +5128,27 @@ ROM_START( hwchampj ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - MVP, Sega System 16B - CPU: FD1094 (317-0143) - ROM Board type: 171-5797 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// MVP, Sega System 16B +// CPU: FD1094 (317-0143) +// ROM Board type: 171-5797 +// ROM_START( mvp ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "13000.rom", 0x000000, 0x40000, CRC(2e0e21ec) SHA1(3b72da0746fb0ece4311d6e935bc6b9ece3549ec) ) ROM_LOAD16_BYTE( "12999.rom", 0x000001, 0x40000, CRC(fd213d28) SHA1(5324ee402a2f28a6c152905493da0052d4976b29) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0143.key", 0x0000, 0x2000, CRC(fba2e8da) SHA1(fb891af6a99958ee5b687012309a8107a7c433dd) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "13011.rom", 0x00000, 0x40000, CRC(1cb871fc) SHA1(d20a46e538d57b25d78faa7deb9c11519b4111d3) ) ROM_LOAD( "13012.rom", 0x40000, 0x40000, CRC(b75e6821) SHA1(a2b049995755d79a136a4b4b0dc78d902c5b9eed) ) ROM_LOAD( "13013.rom", 0x80000, 0x40000, CRC(f1944a3c) SHA1(db59cadb435c26f3a957bd4996a083fa30c8bbd0) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "13003.rom", 0x000001, 0x20000, CRC(21424151) SHA1(156e15eee9ff7122c30a42bfec0b307073b7a375) ) ROM_CONTINUE( 0x100001, 0x20000 ) ROM_LOAD16_BYTE( "13006.rom", 0x000000, 0x20000, CRC(2e9afd2f) SHA1(7fe0929e70e061878065fab2d26309066d14c038) ) @@ -5304,28 +5166,27 @@ ROM_START( mvp ) ROM_LOAD16_BYTE( "13010.rom", 0x0c0000, 0x20000, CRC(df37c567) SHA1(05c959e379a3e20fe5e70912410e3bae4db13905) ) ROM_CONTINUE( 0x1c0000, 0x20000 ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "13002.rom", 0x00000, 0x08000, CRC(1b6e1515) SHA1(1816d48dcb1bfd819a2cfa55fb51e1ca04ad4feb) ) ROM_LOAD( "13001.rom", 0x10000, 0x40000, CRC(e8cace8c) SHA1(5f47b935d927f2aa5f7a5f6dc52f5380baebe1bb) ) ROM_END -/************************************************************************************************************************** - MVP (Japan), Sega System 16B - Cpu Custom No. 317-0142 - Rom Board No. 171-5704 (834-7002-04) -*/ +//************************************************************************************************************************* +// MVP (Japan), Sega System 16B +// Cpu Custom No. 317-0142 +// Rom Board No. 171-5704 (834-7002-04) +// ROM_START( mvpj ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12967.a7", 0x00000, 0x20000, CRC(e53ac137) SHA1(0e8e48621b9ece4e65b70b2bd0deaf4f5dec719a) ) ROM_LOAD16_BYTE( "epr-12965.a5", 0x00001, 0x20000, CRC(4266cb9e) SHA1(1c1e1b7b7af40ae119385187810a4fba9fcd72c7) ) - /* emtpy 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-12968.a8", 0x80000, 0x20000, CRC(91c772ac) SHA1(e656faa794e6df9c7e4adaf44fba721753cbb16d) ) - ROM_LOAD16_BYTE( "epr-12966.a6", 0x80001, 0x20000, CRC(39365a79) SHA1(91bdb2e2776416c258be35156888304be973ac21) ) + ROM_LOAD16_BYTE( "epr-12968.a8", 0x40000, 0x20000, CRC(91c772ac) SHA1(e656faa794e6df9c7e4adaf44fba721753cbb16d) ) + ROM_LOAD16_BYTE( "epr-12966.a6", 0x40001, 0x20000, CRC(39365a79) SHA1(91bdb2e2776416c258be35156888304be973ac21) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0142.key", 0x0000, 0x2000, CRC(90468045) SHA1(b0dc8f7f998c8e508022c127262f4ba0d70b9f7c) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12971.a14", 0x00000, 0x20000, CRC(245dcd1f) SHA1(e0f2683798292236931014eece808a47ccc2309b) ) ROM_LOAD( "epr-12983.b14", 0x20000, 0x20000, CRC(f3570fc9) SHA1(3a3f100a6d0cb48f340dadc7d61e50fd8f99bb15) ) ROM_LOAD( "epr-12972.a15", 0x40000, 0x20000, CRC(ff7c4278) SHA1(55b4d0a2e81c8e9afb61d1f1b51c2af2f7fec088) ) @@ -5333,7 +5194,7 @@ ROM_START( mvpj ) ROM_LOAD( "epr-12973.a16", 0x80000, 0x20000, CRC(8dc9b9ea) SHA1(048e129874c6ee9f34c5ee1722b8dffa6db8841c) ) ROM_LOAD( "epr-12985.b16", 0xa0000, 0x20000, CRC(e3f33a8a) SHA1(e7bcc882dcfa926040d0e3e0df54ed924a6b146a) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-12977.b5", 0x000000, 0x20000, CRC(b9eb9762) SHA1(dfcf607b2bc3c742770936a5476335506d778a2d) ) ROM_LOAD16_BYTE( "epr-12974.b1", 0x000001, 0x20000, CRC(e1da5597) SHA1(55e1e0948896f2afbb3b967847a341ee5afac751) ) ROM_LOAD16_BYTE( "epr-12978.b6", 0x040000, 0x20000, CRC(014b5442) SHA1(ab6273bd5107c837f33d31ba5e7efce752ee3649) ) @@ -5344,44 +5205,44 @@ ROM_START( mvpj ) ROM_LOAD16_BYTE( "epr-12980.b10",0x100000, 0x20000, CRC(883b792a) SHA1(9ce2655b6f77352142c6af4fd9f83f141dab942f) ) ROM_LOAD16_BYTE( "epr-12963.a2", 0x140001, 0x20000, CRC(8870f95a) SHA1(f504df78c74d957006de573e272d93901094f292) ) ROM_LOAD16_BYTE( "epr-12981.b11",0x140000, 0x20000, CRC(48636cb0) SHA1(4f47ea9213821de4ec3b197cc233d7d94ed79cf9) ) - /* not 100% sure these 2 go here or at 0x0c0000 (where are they used?) */ + // not 100% sure these 2 go here or at 0x0c0000 (where are they used?) ROM_LOAD16_BYTE( "epr-12964.a3", 0x180001, 0x20000, CRC(f9148c5d) SHA1(217d3527eded0a0332e11d09b84268b28600e6de) ) ROM_LOAD16_BYTE( "epr-12982.b12",0x180000, 0x20000, CRC(c4453292) SHA1(1540e0819d21adf0e950f9dc2f2a706b5973935d) ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12969.a10", 0x00000, 0x08000, CRC(ec621893) SHA1(39fe8e7a05ca43ebf9689f5faf1487064aa43263) ) ROM_LOAD( "epr-12970.a11", 0x10000, 0x20000, CRC(8f7d7657) SHA1(c8d7ef4b227ed73b8f7b98104818cba3e3015933) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Passing Shot (World, 2 Players), Sega System 16B - CPU: FD1094 No. 317-0080 - ROM Board No. 171-5358 - - J1 - - - J2 --- - J3 512 - J4 256 - J5 512 - J6 512 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Passing Shot (World, 2 Players), Sega System 16B +// CPU: FD1094 No. 317-0080 +// ROM Board No. 171-5358 +// +// J1 - - +// J2 --- +// J3 512 +// J4 256 +// J5 512 +// J6 512 +// ROM_START( passsht ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11871.a4", 0x000000, 0x10000, CRC(0f9ccea5) SHA1(515a2721a35332df0303f4b9616122194b5c7170) ) ROM_LOAD16_BYTE( "epr-11870.a1", 0x000001, 0x10000, CRC(df43ebcf) SHA1(3ca11a25819e1e8d5162f7b36cccc928d8efe150) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0080.key", 0x0000, 0x2000, CRC(222d016f) SHA1(e426e5ea231e5b2ec1f40b0b2599269c14fef21a) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-11854.b9", 0x00000, 0x10000, CRC(d31c0b6c) SHA1(610d04988da70c30300cc5614817eda9d2204f39) ) ROM_LOAD( "opr-11855.b10", 0x10000, 0x10000, CRC(b78762b4) SHA1(d594ef846bd7fed8da91a89906b39c1a2867a1fe) ) ROM_LOAD( "opr-11856.b11", 0x20000, 0x10000, CRC(ea49f666) SHA1(36ccd32cdcbb7fcc300628bb59c220ec3c324d82) ) - ROM_REGION16_BE( 0x60000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x60000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-11862.b1", 0x00001, 0x10000, CRC(b6e94727) SHA1(0838e034f1f10d9cd1312c8c94b5c57387c0c271) ) ROM_LOAD16_BYTE( "opr-11865.b5", 0x00000, 0x10000, CRC(17e8d5d5) SHA1(ac1074b0a705be13c6e3391441e6cfec1d2b3f8a) ) ROM_LOAD16_BYTE( "opr-11863.b2", 0x20001, 0x10000, CRC(3e670098) SHA1(2cfc83f4294be30cd868738886ac546bd8489962) ) @@ -5389,7 +5250,7 @@ ROM_START( passsht ) ROM_LOAD16_BYTE( "opr-11864.b3", 0x40001, 0x10000, CRC(05733ca8) SHA1(1dbc7c99450ebe6a9fd8c0244fd3cb38b74984ef) ) ROM_LOAD16_BYTE( "opr-11867.b7", 0x40000, 0x10000, CRC(81e49697) SHA1(a70fa409e3555ad6c8f28930a7026fdf2deb8c65) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11857.a7", 0x00000, 0x08000, CRC(789edc06) SHA1(8c89c94e503513c287807d187de78a7fbd75a7cf) ) ROM_LOAD( "epr-11858.a8", 0x10000, 0x08000, CRC(08ab0018) SHA1(0685f80a7d403208c9cfffea3f2035324f3924fe) ) ROM_LOAD( "epr-11859.a9", 0x20000, 0x08000, CRC(8673e01b) SHA1(e79183ab30e683fdf61ced2e9dbe010567c324cb) ) @@ -5397,28 +5258,25 @@ ROM_START( passsht ) ROM_LOAD( "epr-11861.a11", 0x40000, 0x08000, CRC(38b54a71) SHA1(68ec4ef5b115844214ff2213be1ce6678904fbd2) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Passing Shot (World, 4 Players), Sega System 16B - CPU: FD1094 No. 317-0074 - ROM Board No. 171-5358 -*/ - +//************************************************************************************************************************* +// Passing Shot (World, 4 Players), Sega System 16B +// CPU: FD1094 No. 317-0074 +// ROM Board No. 171-5358 +// ROM_START( passshta ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "8.4a", 0x000000, 0x10000, CRC(b84dc139) SHA1(6cd65a62bf092d8c4785ad8b2618c77d2cfca8e0) ) // no epr# on chips ROM_LOAD16_BYTE( "5.1a", 0x000001, 0x10000, CRC(effe29df) SHA1(e9274454257fb28519be70cefa04157115c5e29c) ) // no epr# on chips - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0074.key", 0x0000, 0x2000, CRC(71bd232d) SHA1(59825414e373b0fb367d6fbac1e82ad4bd6817f1) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-11854.b9", 0x00000, 0x10000, CRC(d31c0b6c) SHA1(610d04988da70c30300cc5614817eda9d2204f39) ) ROM_LOAD( "opr-11855.b10", 0x10000, 0x10000, CRC(b78762b4) SHA1(d594ef846bd7fed8da91a89906b39c1a2867a1fe) ) ROM_LOAD( "opr-11856.b11", 0x20000, 0x10000, CRC(ea49f666) SHA1(36ccd32cdcbb7fcc300628bb59c220ec3c324d82) ) - ROM_REGION16_BE( 0x60000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x60000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-11862.b1", 0x00001, 0x10000, CRC(b6e94727) SHA1(0838e034f1f10d9cd1312c8c94b5c57387c0c271) ) ROM_LOAD16_BYTE( "opr-11865.b5", 0x00000, 0x10000, CRC(17e8d5d5) SHA1(ac1074b0a705be13c6e3391441e6cfec1d2b3f8a) ) ROM_LOAD16_BYTE( "opr-11863.b2", 0x20001, 0x10000, CRC(3e670098) SHA1(2cfc83f4294be30cd868738886ac546bd8489962) ) @@ -5426,7 +5284,7 @@ ROM_START( passshta ) ROM_LOAD16_BYTE( "opr-11864.b3", 0x40001, 0x10000, CRC(05733ca8) SHA1(1dbc7c99450ebe6a9fd8c0244fd3cb38b74984ef) ) ROM_LOAD16_BYTE( "opr-11867.b7", 0x40000, 0x10000, CRC(81e49697) SHA1(a70fa409e3555ad6c8f28930a7026fdf2deb8c65) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11857.a7", 0x00000, 0x08000, CRC(789edc06) SHA1(8c89c94e503513c287807d187de78a7fbd75a7cf) ) ROM_LOAD( "epr-11858.a8", 0x10000, 0x08000, CRC(08ab0018) SHA1(0685f80a7d403208c9cfffea3f2035324f3924fe) ) ROM_LOAD( "epr-11859.a9", 0x20000, 0x08000, CRC(8673e01b) SHA1(e79183ab30e683fdf61ced2e9dbe010567c324cb) ) @@ -5434,35 +5292,32 @@ ROM_START( passshta ) ROM_LOAD( "epr-11861.a11", 0x40000, 0x08000, CRC(38b54a71) SHA1(68ec4ef5b115844214ff2213be1ce6678904fbd2) ) ROM_END - -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Passing Shot (Japan, 4 Players), Sega System 16B - CPU: FD1094 No. 317-0070 - ROM Board No. 171-5358 - - J1 - - - J2 --- - J3 512 - J4 256 - J5 512 - J6 512 -*/ +//************************************************************************************************************************* +// Passing Shot (Japan, 4 Players), Sega System 16B +// CPU: FD1094 No. 317-0070 +// ROM Board No. 171-5358 +// +// J1 - - +// J2 --- +// J3 512 +// J4 256 +// J5 512 +// J6 512 +// ROM_START( passshtj ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11853.a4", 0x000000, 0x10000, CRC(fab337e7) SHA1(dc2d13f31b4f8c834e669262395d5d37958108b1) ) ROM_LOAD16_BYTE( "epr-11852.a1", 0x000001, 0x10000, CRC(892a81fc) SHA1(e2fbdd83143822458463514c7486c09eeecb3547) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0070.key", 0x0000, 0x2000, CRC(5d0308aa) SHA1(263f5b1dfe9c35d78c0b84279aca544439d13a86) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-11854.b9", 0x00000, 0x10000, CRC(d31c0b6c) SHA1(610d04988da70c30300cc5614817eda9d2204f39) ) ROM_LOAD( "opr-11855.b10", 0x10000, 0x10000, CRC(b78762b4) SHA1(d594ef846bd7fed8da91a89906b39c1a2867a1fe) ) ROM_LOAD( "opr-11856.b11", 0x20000, 0x10000, CRC(ea49f666) SHA1(36ccd32cdcbb7fcc300628bb59c220ec3c324d82) ) - ROM_REGION16_BE( 0x60000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x60000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-11862.b1", 0x00001, 0x10000, CRC(b6e94727) SHA1(0838e034f1f10d9cd1312c8c94b5c57387c0c271) ) ROM_LOAD16_BYTE( "opr-11865.b5", 0x00000, 0x10000, CRC(17e8d5d5) SHA1(ac1074b0a705be13c6e3391441e6cfec1d2b3f8a) ) ROM_LOAD16_BYTE( "opr-11863.b2", 0x20001, 0x10000, CRC(3e670098) SHA1(2cfc83f4294be30cd868738886ac546bd8489962) ) @@ -5470,7 +5325,7 @@ ROM_START( passshtj ) ROM_LOAD16_BYTE( "opr-11864.b3", 0x40001, 0x10000, CRC(05733ca8) SHA1(1dbc7c99450ebe6a9fd8c0244fd3cb38b74984ef) ) ROM_LOAD16_BYTE( "opr-11867.b7", 0x40000, 0x10000, CRC(81e49697) SHA1(a70fa409e3555ad6c8f28930a7026fdf2deb8c65) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11857.a7", 0x00000, 0x08000, CRC(789edc06) SHA1(8c89c94e503513c287807d187de78a7fbd75a7cf) ) ROM_LOAD( "epr-11858.a8", 0x10000, 0x08000, CRC(08ab0018) SHA1(0685f80a7d403208c9cfffea3f2035324f3924fe) ) ROM_LOAD( "epr-11859.a9", 0x20000, 0x08000, CRC(8673e01b) SHA1(e79183ab30e683fdf61ced2e9dbe010567c324cb) ) @@ -5478,30 +5333,30 @@ ROM_START( passshtj ) ROM_LOAD( "epr-11861.a11", 0x40000, 0x08000, CRC(38b54a71) SHA1(68ec4ef5b115844214ff2213be1ce6678904fbd2) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Riot City, Sega System 16B - CPU: 68000 - ROM Board type: 171-5704 -*/ + +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Riot City, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5704 +// ROM_START( riotcity ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-14612.bin", 0x000000, 0x20000, CRC(a1b331ec) SHA1(49136ffed35ecc9e5e9a6ea7acbe534e6ccc9dd8) ) ROM_LOAD16_BYTE( "epr-14610.bin", 0x000001, 0x20000, CRC(cd4f2c50) SHA1(c7a7e95901c664a72195c202b50a159db8d5981d) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-14613.bin", 0x080000, 0x20000, CRC(0659df4c) SHA1(a24005ce354113732306c318de373c818400a9c8) ) - ROM_LOAD16_BYTE( "epr-14611.bin", 0x080001, 0x20000, CRC(d9e6f80b) SHA1(5ac56b3685bb121a4f07be3d81209807436e76ec) ) + ROM_LOAD16_BYTE( "epr-14613.bin", 0x040000, 0x20000, CRC(0659df4c) SHA1(a24005ce354113732306c318de373c818400a9c8) ) + ROM_LOAD16_BYTE( "epr-14611.bin", 0x040001, 0x20000, CRC(d9e6f80b) SHA1(5ac56b3685bb121a4f07be3d81209807436e76ec) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ - ROM_LOAD( "epr-14616.bin", 0x00000, 0x20000, CRC(46d30368) SHA1(a791ef0e881345b6be0b28f32af17127edb5b590) ) /* plane 1 */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles + ROM_LOAD( "epr-14616.bin", 0x00000, 0x20000, CRC(46d30368) SHA1(a791ef0e881345b6be0b28f32af17127edb5b590) ) // plane 1 ROM_LOAD( "epr-14625.bin", 0x20000, 0x20000, CRC(abfb80fe) SHA1(5f0d61d55f27e8f776b573e3193164c4d70ec12b) ) - ROM_LOAD( "epr-14617.bin", 0x40000, 0x20000, CRC(884e40f9) SHA1(f7eeae57544e7d95139588137605986732937d38) ) /* plane 2 */ + ROM_LOAD( "epr-14617.bin", 0x40000, 0x20000, CRC(884e40f9) SHA1(f7eeae57544e7d95139588137605986732937d38) ) // plane 2 ROM_LOAD( "epr-14626.bin", 0x60000, 0x20000, CRC(4ef55846) SHA1(2f23474e7d1d8880dc251ada55c5fca2fc19256a) ) - ROM_LOAD( "epr-14618.bin", 0x80000, 0x20000, CRC(00eb260e) SHA1(f293180fb9a053c98022ef086bf4002563752f61) ) /* plane 3 */ + ROM_LOAD( "epr-14618.bin", 0x80000, 0x20000, CRC(00eb260e) SHA1(f293180fb9a053c98022ef086bf4002563752f61) ) // plane 3 ROM_LOAD( "epr-14627.bin", 0xa0000, 0x20000, CRC(961e5f82) SHA1(dc88b511dff6cdebf96fe8bf388bf76098296b0f) ) - ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x1c0000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-14619.bin", 0x000001, 0x020000, CRC(6f2b5ef7) SHA1(a0186fcc5b12c31b65b84355f88bcb10b1434135) ) ROM_CONTINUE( 0x100001, 0x020000 ) ROM_LOAD16_BYTE( "epr-14622.bin", 0x000000, 0x020000, CRC(7ca7e40d) SHA1(57d26cc1b530cb867b2a4779bb5108ac457b2154) ) @@ -5515,53 +5370,53 @@ ROM_START( riotcity ) ROM_LOAD16_BYTE( "epr-14624.bin", 0x080000, 0x020000, CRC(d1a68448) SHA1(7591f0476e899a11042d9b7e93f99b64de48b0ef) ) ROM_CONTINUE( 0x180000, 0x020000 ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-14614.bin", 0x00000, 0x10000, CRC(c65cc69a) SHA1(28a75dd2085b8e1447fe4e6af210a54a6666fcb1) ) ROM_LOAD( "epr-14615.bin", 0x10000, 0x20000, CRC(46653db1) SHA1(7a43d8742ee451d93bb5f1b0f4f261b274c3f0ef) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Ryukyu, Sega System 16B - CPU: FD1094 8J2 (317-5023) - ROM Board type: 171-5521 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Ryukyu, Sega System 16B +// CPU: FD1094 8J2 (317-5023) +// ROM Board type: 171-5521 +// ROM_START( ryukyu ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-13347.a5", 0x00001, 0x10000, CRC(398031fa) SHA1(5c118c85b7af1a83726b95bbeb85cb5020254f57) ) + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13348.a7", 0x00000, 0x10000, CRC(5f0e0c86) SHA1(f8f5912a190d0755cc5158e2e43cceb825f95b4f) ) + ROM_LOAD16_BYTE( "epr-13347.a5", 0x00001, 0x10000, CRC(398031fa) SHA1(5c118c85b7af1a83726b95bbeb85cb5020254f57) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-5023.key", 0x0000, 0x2000, CRC(43704331) SHA1(e827547fa2e80fe641687cb41bb33cb9c5783f56) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-13351.a14", 0x00000, 0x20000, CRC(a68a4e6d) SHA1(ee3e317c7184b41af5dd383d41f7be3eebff0d04) ) ROM_LOAD( "opr-13352.a15", 0x20000, 0x20000, CRC(5e5531e4) SHA1(e8e16b35f7985e6cdd77353ca5235db518914744) ) ROM_LOAD( "opr-13353.a16", 0x40000, 0x20000, CRC(6d23dfd8) SHA1(21266340290b9854cee0b62fc107cc2981519a80) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-13354.b1", 0x00001, 0x20000, CRC(f07aad99) SHA1(71759525a5b7fe76d112cec93984f0f89cadbc00) ) ROM_LOAD16_BYTE( "opr-13356.b5", 0x00000, 0x20000, CRC(5498290b) SHA1(b3115b636d8cb6ecac22d5264b7961e3b807cf04) ) ROM_LOAD16_BYTE( "opr-13355.b2", 0x40001, 0x20000, CRC(67890019) SHA1(165c6a32f305273396ec0e9499e00329caadc484) ) ROM_LOAD16_BYTE( "opr-13357.b6", 0x40000, 0x20000, CRC(f9e7cf03) SHA1(2258111499c79443faf84fb0495007016282bb3c) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-13349.a10", 0x00000, 0x08000, CRC(b83183f8) SHA1(9d6127f51c04a16bb2637dc9992b843b94613c2b) ) ROM_LOAD( "opr-13350.a11", 0x10000, 0x20000, CRC(3c59a658) SHA1(2cef13ee9e666bb850fe6c6e6954d7b75df665a9) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Defense, Sega System 16B - CPU: FD1089A 317-0028 - ROM Board type: 171-5358 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Defense, Sega System 16B +// CPU: FD1089A 317-0028 +// ROM Board type: 171-5358 +// ROM_START( defense ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10917a.a4", 0x000000, 0x8000, CRC(d91ac47c) SHA1(298e4a9c1b00bd6090e7c4f42efd4c6e20b69d62) ) ROM_LOAD16_BYTE( "epr-10915.a1", 0x000001, 0x8000, CRC(7344c510) SHA1(4bee5485204e8ec858726e403c55bb1592a991cc) ) ROM_LOAD16_BYTE( "epr-10918a.a5", 0x010000, 0x8000, CRC(e41befcd) SHA1(bbac5f501d215b18d34e3d366fd39cf7fa38a25c) ) @@ -5569,12 +5424,12 @@ ROM_START( defense ) ROM_LOAD16_BYTE( "epr-10829.a6", 0x020000, 0x8000, CRC(a431ab08) SHA1(95888af6fae598c40e7fefffbfd1f0b551e9f1be) ) ROM_LOAD16_BYTE( "epr-10826.a3", 0x020001, 0x8000, CRC(2ed8e4b7) SHA1(23da16e29a475d6ec7ccec8cdd18a1dc78ae69cd) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "10919.b9", 0x00000, 0x10000, CRC(23b88f82) SHA1(6c1336c17bdd8adc39bf4eca5b3348ac7b1e6559) ) ROM_LOAD( "10920.b10", 0x10000, 0x10000, CRC(22b1fb4c) SHA1(f4721796155f13d472d735c646bc52f20f04debd) ) ROM_LOAD( "10921.b11", 0x20000, 0x10000, CRC(7788f55d) SHA1(435273196a5e812f28a2224807e842ccadff9c10) ) - ROM_REGION16_BE( 0x60000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x60000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "10760.b1", 0x00001, 0x010000, CRC(70de327b) SHA1(11dde9cefd993f5fb02baf5809fae6c1176a58a1) ) ROM_LOAD16_BYTE( "10763.b5", 0x00000, 0x010000, CRC(99ec5cb5) SHA1(933a2216a2c772fc82499c739457865b1c75cdb8) ) ROM_LOAD16_BYTE( "10761.b2", 0x20001, 0x010000, CRC(4e80f80d) SHA1(d168235bdf09317545c999676a4adf015df32366) ) @@ -5582,24 +5437,21 @@ ROM_START( defense ) ROM_LOAD16_BYTE( "10762.b3", 0x40001, 0x010000, CRC(464b5f78) SHA1(b730964a54e6a63fa5b7cc2cbf9ec0ab650626d5) ) ROM_LOAD16_BYTE( "10765.b7", 0x40000, 0x010000, CRC(0a73a057) SHA1(7f31124c67541a245e069e5b6aac59935d99a9a9) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "10775.a7", 0x0000, 0x8000, CRC(4cbd55a8) SHA1(8af2c52ab61338c8a9f1a74a05470dd3d5e0c42f) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0028.key", 0x0000, 0x2000, BAD_DUMP CRC(9a5307b2) SHA1(2fcc576ed95b96ff6ea71252c3fab33b8b3fc1f5) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - SDI, Sega System 16B - CPU: FD1089A 317-0028 - ROM Board type: 171-5358 -*/ - +//************************************************************************************************************************* +// SDI, Sega System 16B +// CPU: FD1089A 317-0028 +// ROM Board type: 171-5358 +// ROM_START( sdib ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ - /* the ic positions given (at the end of the line) can't be right?? */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code + // the ic positions given (at the end of the line) can't be right?? ROM_LOAD16_BYTE( "epr-10986a.a4", 0x000000, 0x8000, CRC(3e136215) SHA1(e90b55d03c515752cc2c647cb30f6f23a0a91b01) ) // .a3?? ROM_LOAD16_BYTE( "epr-10984a.a1", 0x000001, 0x8000, CRC(44bf3cf5) SHA1(fd7bcb25fbbfb01da49892c8b39c1f98e5acf9e6) ) ROM_LOAD16_BYTE( "epr-10987a.a5", 0x010000, 0x8000, CRC(cfd79404) SHA1(5dec1d31cb0fe14a0dbe00df13322f8e2676774b) ) // .a4?? @@ -5607,12 +5459,12 @@ ROM_START( sdib ) ROM_LOAD16_BYTE( "epr-10829.a6", 0x020000, 0x8000, CRC(a431ab08) SHA1(95888af6fae598c40e7fefffbfd1f0b551e9f1be) ) ROM_LOAD16_BYTE( "epr-10826.a3", 0x020001, 0x8000, CRC(2ed8e4b7) SHA1(23da16e29a475d6ec7ccec8cdd18a1dc78ae69cd) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10772.b9", 0x00000, 0x10000, CRC(182b6301) SHA1(bb6f1174f82611c801d2b4b7d3596bf71619e8a1) ) ROM_LOAD( "epr-10773.b10", 0x10000, 0x10000, CRC(8f7129a2) SHA1(094a4065597d8d51fb2232546df1de9043fea731) ) ROM_LOAD( "epr-10774.b11", 0x20000, 0x10000, CRC(4409411f) SHA1(84fd7128e8440d96b0384ae3c391a59bd37ecf9d) ) - ROM_REGION16_BE( 0x60000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x60000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "10760.b1", 0x00001, 0x010000, CRC(70de327b) SHA1(11dde9cefd993f5fb02baf5809fae6c1176a58a1) ) ROM_LOAD16_BYTE( "10763.b5", 0x00000, 0x010000, CRC(99ec5cb5) SHA1(933a2216a2c772fc82499c739457865b1c75cdb8) ) ROM_LOAD16_BYTE( "10761.b2", 0x20001, 0x010000, CRC(4e80f80d) SHA1(d168235bdf09317545c999676a4adf015df32366) ) @@ -5620,23 +5472,21 @@ ROM_START( sdib ) ROM_LOAD16_BYTE( "10762.b3", 0x40001, 0x010000, CRC(464b5f78) SHA1(b730964a54e6a63fa5b7cc2cbf9ec0ab650626d5) ) ROM_LOAD16_BYTE( "10765.b7", 0x40000, 0x010000, CRC(0a73a057) SHA1(7f31124c67541a245e069e5b6aac59935d99a9a9) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "10775.a7", 0x0000, 0x8000, CRC(4cbd55a8) SHA1(8af2c52ab61338c8a9f1a74a05470dd3d5e0c42f) ) - ROM_REGION( 0x2000, "fd1089a", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0028.key", 0x0000, 0x2000, BAD_DUMP CRC(9a5307b2) SHA1(2fcc576ed95b96ff6ea71252c3fab33b8b3fc1f5) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - SDI, Sega System 16B - CPU: 68000 - ROM Board type: 171-5358 - Note: decrypted bootleg -*/ +//************************************************************************************************************************* +// SDI, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5358 +// Note: decrypted bootleg +// ROM_START( sdibl ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "a4.rom", 0x000000, 0x8000, CRC(f2c41dd6) SHA1(7fdbf819e42c7af0efe3976ffd919ee142efe1bc) ) ROM_LOAD16_BYTE( "a1.rom", 0x000001, 0x8000, CRC(a9f816ef) SHA1(5ccab14b088d2249f83ff5e80591eccb4afb6e20) ) ROM_LOAD16_BYTE( "a5.rom", 0x010000, 0x8000, CRC(7952e27e) SHA1(caead75724a6744fc6fc7fbbc9894932a7a22eed) ) @@ -5644,12 +5494,12 @@ ROM_START( sdibl ) ROM_LOAD16_BYTE( "a6.rom", 0x020000, 0x8000, CRC(8ee2c287) SHA1(8ed98334dab51c2eab8e1ff0724abc1f819dc8c2) ) ROM_LOAD16_BYTE( "a3.rom", 0x020001, 0x8000, CRC(193e4231) SHA1(14fecfab010641b83e5b24d0e8003bc0de35e1c8) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10772.b9", 0x00000, 0x10000, CRC(182b6301) SHA1(bb6f1174f82611c801d2b4b7d3596bf71619e8a1) ) ROM_LOAD( "epr-10773.b10", 0x10000, 0x10000, CRC(8f7129a2) SHA1(094a4065597d8d51fb2232546df1de9043fea731) ) ROM_LOAD( "epr-10774.b11", 0x20000, 0x10000, CRC(4409411f) SHA1(84fd7128e8440d96b0384ae3c391a59bd37ecf9d) ) - ROM_REGION16_BE( 0x60000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x60000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "b1.rom", 0x00001, 0x010000, CRC(30e2c50a) SHA1(1fb9e69d4cb97fdcb0f98c2a7ede246aaa4ac382) ) ROM_LOAD16_BYTE( "b5.rom", 0x00000, 0x010000, CRC(794e3e8b) SHA1(91ca1cb9aabf99adc8426feed4494a992afb8c4a) ) ROM_LOAD16_BYTE( "b2.rom", 0x20001, 0x010000, CRC(6a8b3fd0) SHA1(a122d3cb0b3263714f026e57d85b0dbf6cb110d7) ) @@ -5657,93 +5507,90 @@ ROM_START( sdibl ) ROM_LOAD16_BYTE( "b3.rom", 0x40001, 0x010000, CRC(b9de3aeb) SHA1(2f7a55a8377e831338a884f8962d6ab2757e8c9b) ) ROM_LOAD16_BYTE( "10765.b7", 0x40000, 0x010000, CRC(0a73a057) SHA1(7f31124c67541a245e069e5b6aac59935d99a9a9) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "a7.rom", 0x0000, 0x8000, CRC(793f9f7f) SHA1(9e4fde376db9e99a83eb2fc734c6721c122ba9af) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - - Shinobi, Sega System 16B - CPU: 68000 - ROM Board type: 171-5521 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Shinobi, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5521 +// ROM_START( shinobi5 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11360.a7", 0x00000, 0x20000, CRC(b1f67ab9) SHA1(83eddd1ef3fbe58f1f8e8d57229fabf1907fc371) ) ROM_LOAD16_BYTE( "epr-11359.a5", 0x00001, 0x20000, CRC(0f0306e1) SHA1(eebe7c88e5f665d1d0920fb9b545e20b05be9b52) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11363.a14", 0x00000, 0x20000, CRC(40914168) SHA1(cf0508e8c852c24ec3d2fc4a4013aec631d2271f) ) ROM_LOAD( "epr-11364.a15", 0x20000, 0x20000, CRC(e63649a4) SHA1(042dded1ff964889571f63d2642b2b21b75f9763) ) ROM_LOAD( "epr-11365.a16", 0x40000, 0x20000, CRC(1ef55d20) SHA1(314590881a2f18339b7b9c16010e408aa0164e04) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11366.b1", 0x00001, 0x20000, CRC(319ede73) SHA1(c48ba4694ff677f30cc1ced3a3ad11c0feb1122d) ) ROM_LOAD16_BYTE( "epr-11368.b5", 0x00000, 0x20000, CRC(0377d7ce) SHA1(14f9674c142b78bf8b458beccfef93cc3e722c03) ) ROM_LOAD16_BYTE( "epr-11367.b2", 0x40001, 0x20000, CRC(1d06c5c7) SHA1(3a44f5a2058b96f212930c2e838eda1ce1036818) ) ROM_LOAD16_BYTE( "epr-11369.b6", 0x40000, 0x20000, CRC(d751d2a2) SHA1(3659948beacfc8dde5c50775859aa3fed537f768) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11361.a10", 0x00000, 0x08000, CRC(1f47ebcb) SHA1(32837f3f1dd5ff309d1d955c1a738c444b248d3d) ) ROM_LOAD( "epr-11362.a11", 0x10000, 0x20000, CRC(256af749) SHA1(041bd007ea7708c6d69f07865828b9bd17a139f5) ) ROM_END - -/************************************************************************************************************************** - - Shinobi, Sega System 16B - CPU: 68000 + MC8123B (317-0054) - ROM Board type: 171-5521 - Game Nunmber: 834-6496-04 - ROM board: 834-6499-03 -*/ +//************************************************************************************************************************* +// Shinobi, Sega System 16B +// CPU: 68000 + MC8123B (317-0054) +// ROM Board type: 171-5521 +// Game Nunmber: 834-6496-04 +// ROM board: 834-6499-03 +// ROM_START( shinobi4 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11360.a7", 0x00000, 0x20000, CRC(b1f67ab9) SHA1(83eddd1ef3fbe58f1f8e8d57229fabf1907fc371) ) ROM_LOAD16_BYTE( "epr-11359.a5", 0x00001, 0x20000, CRC(0f0306e1) SHA1(eebe7c88e5f665d1d0920fb9b545e20b05be9b52) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11363.a14", 0x00000, 0x20000, CRC(40914168) SHA1(cf0508e8c852c24ec3d2fc4a4013aec631d2271f) ) ROM_LOAD( "epr-11364.a15", 0x20000, 0x20000, CRC(e63649a4) SHA1(042dded1ff964889571f63d2642b2b21b75f9763) ) ROM_LOAD( "epr-11365.a16", 0x40000, 0x20000, CRC(1ef55d20) SHA1(314590881a2f18339b7b9c16010e408aa0164e04) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11366.b1", 0x00001, 0x20000, CRC(319ede73) SHA1(c48ba4694ff677f30cc1ced3a3ad11c0feb1122d) ) ROM_LOAD16_BYTE( "epr-11368.b5", 0x00000, 0x20000, CRC(0377d7ce) SHA1(14f9674c142b78bf8b458beccfef93cc3e722c03) ) ROM_LOAD16_BYTE( "epr-11367.b2", 0x40001, 0x20000, CRC(1d06c5c7) SHA1(3a44f5a2058b96f212930c2e838eda1ce1036818) ) ROM_LOAD16_BYTE( "epr-11369.b6", 0x40000, 0x20000, CRC(d751d2a2) SHA1(3659948beacfc8dde5c50775859aa3fed537f768) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ - ROM_LOAD( "epr-11377.a10", 0x00000, 0x08000, CRC(0fb6af34) SHA1(ae9da18bd2db317ed96c5f642f90cc1eba60ba99) ) /* MC8123B (317-0054) encrypted version of epr-11361.a10 above */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU + ROM_LOAD( "epr-11377.a10", 0x00000, 0x08000, CRC(0fb6af34) SHA1(ae9da18bd2db317ed96c5f642f90cc1eba60ba99) ) // MC8123B (317-0054) encrypted version of epr-11361.a10 above ROM_LOAD( "epr-11362.a11", 0x10000, 0x20000, CRC(256af749) SHA1(041bd007ea7708c6d69f07865828b9bd17a139f5) ) - ROM_REGION( 0x2000, "mcu", 0 ) /* MC8123 key */ + ROM_REGION( 0x2000, "mcu", 0 ) // MC8123 key ROM_LOAD( "317-0054.key", 0x0000, 0x2000, CRC(39fd4535) SHA1(93bbb139d2d5acc6a1e338d92077e79a5e880b2e) ) ROM_END -/************************************************************************************************************************** - Shinobi, Sega System 16B - CPU: 68000 + MC8123B (317-0054) - ROM Board type: 171-5358 - Game Nunmber: 834-6496-04 - ROM board: 834-6499-02 -*/ +//************************************************************************************************************************* +// Shinobi, Sega System 16B +// CPU: 68000 + MC8123B (317-0054) +// ROM Board type: 171-5358 +// Game Nunmber: 834-6496-04 +// ROM board: 834-6499-02 +// ROM_START( shinobi3 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11299.a4", 0x00000, 0x10000, CRC(b930399d) SHA1(955ff2948e1990463631b0bc5c7f5275384236cc) ) ROM_LOAD16_BYTE( "epr-11298.a1", 0x00001, 0x10000, CRC(343f4c46) SHA1(2cf5d00462ad85ae9a2e16d59171c8ab85e10f49) ) ROM_LOAD16_BYTE( "epr-11283.a5", 0x20000, 0x10000, CRC(9d46e707) SHA1(37ab25b3b37365c9f45837bfb6ec80652691dd4c) ) ROM_LOAD16_BYTE( "epr-11281.a2", 0x20001, 0x10000, CRC(7961d07e) SHA1(38cbdab35f901532c0ad99ad0083513abd2ff182) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11284.b9", 0x00000, 0x10000, CRC(5f62e163) SHA1(03f008745a1af84142ada647acf3601049f43ad5) ) ROM_LOAD( "epr-11285.b10", 0x10000, 0x10000, CRC(75f8fbc9) SHA1(29072edcd583af60ec66b4c8bb82b179a3751edf) ) ROM_LOAD( "epr-11286.b11", 0x20000, 0x10000, CRC(06508bb9) SHA1(57c9036123ec8e35d0275ab6eaff25a16aa203d4) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11290.b1", 0x00001, 0x10000, CRC(611f413a) SHA1(180f83216e2dfbfd77b0fb3be83c3042954d12df) ) ROM_LOAD16_BYTE( "epr-11294.b5", 0x00000, 0x10000, CRC(5eb00fc1) SHA1(97e02eee74f61fabcad2a9e24f1868cafaac1d51) ) ROM_LOAD16_BYTE( "epr-11291.b2", 0x20001, 0x10000, CRC(3c0797c0) SHA1(df18c7987281bd9379026c6cf7f96f6ae49fd7f9) ) @@ -5753,37 +5600,37 @@ ROM_START( shinobi3 ) ROM_LOAD16_BYTE( "epr-11293.b4", 0x60001, 0x10000, CRC(41f41063) SHA1(5cc461e9738dddf9eea06831fce3702d94674163) ) ROM_LOAD16_BYTE( "epr-11297.b8", 0x60000, 0x10000, CRC(b6e1fd72) SHA1(eb86e4bf880bd1a1d9bcab3f2f2e917bcaa06172) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11372.a7", 0x00000, 0x8000, CRC(0824269a) SHA1(501ab1b80c6e8a4b0ccda148c13fa96c71c7300d) ) // MC8123B (317-0054) encrypted version of epr-11287.a7 ROM_LOAD( "epr-11288.a8", 0x10000, 0x8000, CRC(c8df8460) SHA1(0aeb41a493df155edb5f600f53ec43b798927dff) ) ROM_LOAD( "epr-11289.a9", 0x20000, 0x8000, CRC(e5a4cf30) SHA1(d1982da7a550c11ab2253f5d64ac6ab847da0a04) ) - ROM_REGION( 0x2000, "mcu", 0 ) /* MC8123 key */ + ROM_REGION( 0x2000, "mcu", 0 ) // MC8123 key ROM_LOAD( "317-0054.key", 0x0000, 0x2000, CRC(39fd4535) SHA1(93bbb139d2d5acc6a1e338d92077e79a5e880b2e) ) ROM_END -/************************************************************************************************************************** - Shinobi, Sega System 16B - CPU: FD1094 (317-0049) - ROM Board type: 171-5358 - ROM board: 834-6499 -*/ +//************************************************************************************************************************* +// Shinobi, Sega System 16B +// CPU: FD1094 (317-0049) +// ROM Board type: 171-5358 +// ROM board: 834-6499 +// ROM_START( shinobi2 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11282.a4", 0x00000, 0x10000, CRC(5f2e5524) SHA1(9e5fcabb95abbe6c8178e82f4971abdbc92bff73) ) ROM_LOAD16_BYTE( "epr-11280.a1", 0x00001, 0x10000, CRC(bdfe5c38) SHA1(65f537e38b74c66576d57c770d182dc13302cca6) ) ROM_LOAD16_BYTE( "epr-11283.a5", 0x20000, 0x10000, CRC(9d46e707) SHA1(37ab25b3b37365c9f45837bfb6ec80652691dd4c) ) ROM_LOAD16_BYTE( "epr-11281.a2", 0x20001, 0x10000, CRC(7961d07e) SHA1(38cbdab35f901532c0ad99ad0083513abd2ff182) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0049.key", 0x0000, 0x2000, CRC(8fac824f) SHA1(602fde7b728163aba5727bcf00707e63ca5bbfa9) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11284.b9", 0x00000, 0x10000, CRC(5f62e163) SHA1(03f008745a1af84142ada647acf3601049f43ad5) ) ROM_LOAD( "epr-11285.b10", 0x10000, 0x10000, CRC(75f8fbc9) SHA1(29072edcd583af60ec66b4c8bb82b179a3751edf) ) ROM_LOAD( "epr-11286.b11", 0x20000, 0x10000, CRC(06508bb9) SHA1(57c9036123ec8e35d0275ab6eaff25a16aa203d4) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11290.b1", 0x00001, 0x10000, CRC(611f413a) SHA1(180f83216e2dfbfd77b0fb3be83c3042954d12df) ) ROM_LOAD16_BYTE( "epr-11294.b5", 0x00000, 0x10000, CRC(5eb00fc1) SHA1(97e02eee74f61fabcad2a9e24f1868cafaac1d51) ) ROM_LOAD16_BYTE( "epr-11291.b2", 0x20001, 0x10000, CRC(3c0797c0) SHA1(df18c7987281bd9379026c6cf7f96f6ae49fd7f9) ) @@ -5793,50 +5640,50 @@ ROM_START( shinobi2 ) ROM_LOAD16_BYTE( "epr-11293.b4", 0x60001, 0x10000, CRC(41f41063) SHA1(5cc461e9738dddf9eea06831fce3702d94674163) ) ROM_LOAD16_BYTE( "epr-11297.b8", 0x60000, 0x10000, CRC(b6e1fd72) SHA1(eb86e4bf880bd1a1d9bcab3f2f2e917bcaa06172) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11287.a7", 0x00000, 0x8000, CRC(e8cccd42) SHA1(39cbf9298540b9d5a26f47fcf6c9b89b6cead6c9) ) ROM_LOAD( "epr-11288.a8", 0x10000, 0x8000, CRC(c8df8460) SHA1(0aeb41a493df155edb5f600f53ec43b798927dff) ) ROM_LOAD( "epr-11289.a9", 0x20000, 0x8000, CRC(e5a4cf30) SHA1(d1982da7a550c11ab2253f5d64ac6ab847da0a04) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Sonic Boom, Sega System 16B - CPU: FD1094 (317-0053) - ROM Board type: 171-5358 - - Pos. Silk Type Part Pos. Silk Type Part - - A1 EPR-11340 27C512 68000 program B1 OPR-11350 27C512 Sprite data - A2 EPR-11341 27C512 68000 program B2 OPR-11351 27C512 Sprite data - A3 Unused 68000 program B3 OPR-11352 27C512 Sprite data - A4 EPR-11342 27C512 68000 program B4 OPR-11353 27C512 Sprite data - A5 EPR-11343 27C512 68000 program B5 OPR-11354 27C512 Sprite data - A6 Unused 68000 program B6 OPR-11355 27C512 Sprite data - A7 EPR-11347 27C256 Z80 program B7 OPR-11356 27C512 Sprite data - A8 EPR-11348 27C256 Z80 sample data B8 OPR-11357 27C512 Sprite data - A9 EPR-11349 27C256 Z80 sample data B9 OPR-11344 27C512 Tile data - A10 Unused Z80 sample data B10 OPR-11345 27C512 Tile data - A11 Unused Z80 sample data B11 OPR-11346 27C512 Tile data -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Sonic Boom, Sega System 16B +// CPU: FD1094 (317-0053) +// ROM Board type: 171-5358 +// +// Pos. Silk Type Part Pos. Silk Type Part +// +// A1 EPR-11340 27C512 68000 program B1 OPR-11350 27C512 Sprite data +// A2 EPR-11341 27C512 68000 program B2 OPR-11351 27C512 Sprite data +// A3 Unused 68000 program B3 OPR-11352 27C512 Sprite data +// A4 EPR-11342 27C512 68000 program B4 OPR-11353 27C512 Sprite data +// A5 EPR-11343 27C512 68000 program B5 OPR-11354 27C512 Sprite data +// A6 Unused 68000 program B6 OPR-11355 27C512 Sprite data +// A7 EPR-11347 27C256 Z80 program B7 OPR-11356 27C512 Sprite data +// A8 EPR-11348 27C256 Z80 sample data B8 OPR-11357 27C512 Sprite data +// A9 EPR-11349 27C256 Z80 sample data B9 OPR-11344 27C512 Tile data +// A10 Unused Z80 sample data B10 OPR-11345 27C512 Tile data +// A11 Unused Z80 sample data B11 OPR-11346 27C512 Tile data +// ROM_START( sonicbom ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x040000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11342.a4", 0x000000, 0x10000, CRC(454693f1) SHA1(3a9542443b4b403ccae968f2b5e2fc9cf810f85a) ) ROM_LOAD16_BYTE( "epr-11340.a1", 0x000001, 0x10000, CRC(03ba3fed) SHA1(2186639e34023690e5b9da942a015e11a6cdcc65) ) ROM_LOAD16_BYTE( "epr-11343.a5", 0x020000, 0x10000, CRC(edfeb7d4) SHA1(0f703e028f9ca9f3c4f5563f3c65ec9b938074a5) ) ROM_LOAD16_BYTE( "epr-11341.a2", 0x020001, 0x10000, CRC(0338f771) SHA1(a1a2928eb3f9826733bad54bbf17f622d9307285) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0053.key", 0x0000, 0x2000, CRC(91c80c88) SHA1(db2345257474c7e74a12ef8d125b7d0ea2ecd4c8) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-11344.b9", 0x00000, 0x10000, CRC(59a9f940) SHA1(b1c13cfa9609a22cbe047ee39681ccf8d0b3cf9c) ) ROM_LOAD( "opr-11345.b10", 0x10000, 0x10000, CRC(b44c068b) SHA1(05e875dc418aef12fc48d1df44f680249f6952de) ) ROM_LOAD( "opr-11346.b11", 0x20000, 0x10000, CRC(e5ada66c) SHA1(7e8e34ea909848d0d1b1fcccf628bf9ec169ae9b) ) - ROM_REGION16_BE( 0x80000, "gfx2", ROMREGION_ERASE00 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", ROMREGION_ERASE00 ) // sprites ROM_LOAD16_BYTE( "opr-11350.b1", 0x00001, 0x010000, CRC(525ba1df) SHA1(e35487c8bf4009a767e54258d9a55056d13ba02a) ) ROM_LOAD16_BYTE( "opr-11354.b5", 0x00000, 0x010000, CRC(793fa3ac) SHA1(14d5a71667b4745d5b556cc15334dd9bff8de93f) ) ROM_LOAD16_BYTE( "opr-11351.b2", 0x20001, 0x010000, CRC(63b1f1ca) SHA1(1f19a3af099d4a6ad196968b0a3c17a11384e474) ) @@ -5846,41 +5693,41 @@ ROM_START( sonicbom ) ROM_LOAD16_BYTE( "opr-11353.b4", 0x60001, 0x010000, CRC(4e0791f8) SHA1(3278bfd478a2fdbcf2d641268c9ca4ccd5a5bd2f) ) ROM_LOAD16_BYTE( "opr-11357.b8", 0x60000, 0x010000, CRC(a7c5ea41) SHA1(405e6ebd2cff22179de70fd31fae5ff967fbaf63) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11347.a7", 0x00000, 0x8000, CRC(b41f0ced) SHA1(946b58c0f5b4541fac93add065916319302fe5e0) ) ROM_LOAD( "epr-11348.a8", 0x10000, 0x8000, CRC(89924588) SHA1(9b97da0f562c5faaf12e0f3f8943cdb4fe7a9d24) ) ROM_LOAD( "epr-11349.a9", 0x20000, 0x8000, CRC(8e4b6204) SHA1(ec0a2812b4726b5ff236f2fbb63fd2dd13cf4935) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Sukeban Jansi Ryuko (JPN Ver.) - CPU: FD1089B 317-5021 (16A/16B) (version uses i8751(317-5019) known to be exist) - ROM Board type: 171-??? - - (c)1988 White Board - - Sega System 16A/16B - - IC61: 839-0068 (16A) - IC69: 315-5150 (16A) -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Sukeban Jansi Ryuko (JPN Ver.) +// CPU: FD1089B 317-5021 (16A/16B) (version uses i8751(317-5019) known to be exist) +// ROM Board type: 171-??? +// +// (c)1988 White Board +// +// Sega System 16A/16B +// +// IC61: 839-0068 (16A) +// IC69: 315-5150 (16A) +// ROM_START( sjryuko ) - ROM_REGION( 0x020000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12256.a4", 0x000000, 0x08000, CRC(5987ee1b) SHA1(70a4e8603491d60a687c10980db02e60f4239779) ) ROM_LOAD16_BYTE( "epr-12253.a1", 0x000001, 0x08000, CRC(26a822df) SHA1(2ec21246f7bc1d4a25ec308853a6543805036df3) ) ROM_LOAD16_BYTE( "epr-12257.a5", 0x010000, 0x08000, CRC(3a2acc3f) SHA1(8776c37b8092bece6928e68a86ed8f6cfbd0d5cf) ) ROM_LOAD16_BYTE( "epr-12254.a2", 0x010001, 0x08000, CRC(7e908217) SHA1(509962c45dda7423ad081acdcac9ffa10807840a) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12224-95.b9", 0x00000, 0x08000, CRC(eac17ba1) SHA1(6dfea3383b7c9c47bc0943a8d86fc89efcb85ae2) ) ROM_LOAD( "epr-12225-94.b10", 0x08000, 0x08000, CRC(2310fc98) SHA1(c40ca62edbe5cfa2f84811426233412cd5bd398c) ) ROM_LOAD( "epr-12226-93.b11", 0x10000, 0x08000, CRC(210e6999) SHA1(5707cc613060b0070a822850b9afab8293f64dd7) ) - /*(epr xxxxx - S16a location . S16b location */ + //(epr xxxxx - S16a location . S16b location - ROM_REGION16_BE( 0x80000, "gfx2", ROMREGION_ERASE00 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", ROMREGION_ERASE00 ) // sprites ROM_LOAD16_BYTE( "epr-12232-10.b1", 0x00001, 0x010000, CRC(0adec62b) SHA1(cd798a7994cea73bffe78feac4e692d755074b1d) ) ROM_LOAD16_BYTE( "epr-12236-11.b5", 0x00000, 0x010000, CRC(286b9af8) SHA1(085251b8ce8b7fadf15b8ebd5872f0337adf142b) ) ROM_LOAD16_BYTE( "epr-12233-17.b2", 0x20001, 0x010000, CRC(3e45969c) SHA1(804f3714c97877c6f0caf458f8af38e8d8179d73) ) @@ -5889,29 +5736,29 @@ ROM_START( sjryuko ) ROM_LOAD16_BYTE( "epr-12238-24.b7", 0x40000, 0x010000, CRC(7ada3304) SHA1(e402442e73d93a1b174e3fcab6a97fb2d450994c) ) ROM_LOAD16_BYTE( "epr-12235-29.b4", 0x60001, 0x010000, CRC(fa45d511) SHA1(41e343b039e8633b2469a5eaf5e4196b682f0d01) ) ROM_LOAD16_BYTE( "epr-12239-30.b8", 0x60000, 0x010000, CRC(91f70c8b) SHA1(c3ac9cf248540d948f7845eb17ec95e1be8d00bb) ) - /*(EPR xxxxx - S16a location . S16b location */ + //(EPR xxxxx - S16a location . S16b location - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12244.a7", 0x00000, 0x8000, CRC(cb2a47e5) SHA1(d7569a78522ec9104da7586ae7d17837599f92ee) ) ROM_LOAD( "epr-12245.a8", 0x10000, 0x8000, CRC(66164134) SHA1(ef9dc24ee0817ffd16416243190f29dc80309966) ) ROM_LOAD( "epr-12246.a9", 0x20000, 0x8000, CRC(f1242582) SHA1(f5734b31b449f3f09a0cacc712059644eedee006) ) ROM_LOAD( "epr-12247.a10",0x30000, 0x8000, CRC(ef8a64c6) SHA1(525e0d968c72c6dd73df69b55b8626495d154649) ) ROM_LOAD( "epr-12248.a11",0x40000, 0x8000, CRC(d1eabdab) SHA1(f255a66e082353768e8d2bb574e883a4a45f7670) ) - ROM_REGION( 0x2000, "fd1089b", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-5021.key", 0x0000, 0x2000, BAD_DUMP CRC(4a3422e4) SHA1(69a32a6987ff2481f6d6cbbe399269a2461b8bad) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Super League, Sega System 16B - CPU: FD1094 (317-0045) - ROM Board type: 171-5358 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Super League, Sega System 16B +// CPU: FD1094 (317-0045) +// ROM Board type: 171-5358 +// ROM_START( suprleag ) - ROM_REGION( 0x060000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-11133.a04", 0x00000, 0x10000, CRC(eed72f37) SHA1(80b68abdb90a63b30754dd031e85b1020dcc0cc4) ) ROM_LOAD16_BYTE( "epr-11130.a01", 0x00001, 0x10000, CRC(e2451676) SHA1(d2f71d9fca933e63e2bd5ee48217801ab0cb049c) ) ROM_LOAD16_BYTE( "epr-11134.a05", 0x20000, 0x10000, CRC(ccd857f5) SHA1(2566bb458bdd365db403e8229ecdad79e23076a1) ) @@ -5919,15 +5766,15 @@ ROM_START( suprleag ) ROM_LOAD16_BYTE( "epr-11135.a06", 0x40000, 0x10000, CRC(3735e0e1) SHA1(ae2910099909245993ee29e5a03a5591f20962c7) ) ROM_LOAD16_BYTE( "epr-11132.a03", 0x40001, 0x10000, CRC(ff199325) SHA1(2ece15b6b79ec3f948f7bec623e1df281cf89382) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0045.key", 0x0000, 0x2000, CRC(0594cc2e) SHA1(8aec3fffd00cbfd50d7cfb92e4748e2653fbb504) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-11136.b09", 0x00000, 0x10000, CRC(c3860ce4) SHA1(af7618f3b5a0e8d6374877c7815ba69fff218a45) ) ROM_LOAD( "epr-11137.b10", 0x10000, 0x10000, CRC(92d96187) SHA1(45138795992b9842d5b0c86a96b300445bf12060) ) ROM_LOAD( "epr-11138.b11", 0x20000, 0x10000, CRC(c01dc773) SHA1(b27da906186e1272cdd6f8d5e5a979f6623255ac) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-11144.b01", 0x00001, 0x10000, CRC(b31de51c) SHA1(011a79a37d32ab4545187e28e61f27aa0601f686) ) ROM_LOAD16_BYTE( "epr-11148.b05", 0x00000, 0x10000, CRC(126e1309) SHA1(7386ac5ac57325d8f661caf8cab0b19a42c0309d) ) ROM_LOAD16_BYTE( "epr-11145.b02", 0x20001, 0x10000, CRC(4223d2c3) SHA1(310d5c411eeaf69fe0dc9350e6bfe6dfe950b373) ) @@ -5937,7 +5784,7 @@ ROM_START( suprleag ) ROM_LOAD16_BYTE( "epr-11147.b04", 0x60001, 0x10000, CRC(3e592772) SHA1(b0fe2c680871dcdbe655c0b1b98bcf8118fb3a50) ) ROM_LOAD16_BYTE( "epr-11151.b08", 0x60000, 0x10000, CRC(9de95169) SHA1(1a2801ecd9dece3dae7ceab3b793d5005caa4614) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-11139.a07", 0x00000, 0x08000, CRC(9cbd99da) SHA1(55960b68b23a4f89ec810e1d31f22ba60cda0cfe) ) ROM_LOAD( "epr-11140.a08", 0x10000, 0x08000, CRC(b297371b) SHA1(4e787aa9ee2aeab4da30237644421df407b684a5) ) ROM_LOAD( "epr-11141.a09", 0x20000, 0x08000, CRC(19756aa6) SHA1(81597e17b848f6a41f5fb117296e7508297815e4) ) @@ -5946,83 +5793,83 @@ ROM_START( suprleag ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Tetris, Sega System 16B - CPU: FD1094 (317-0092) - ROM Board type: 171-5704 -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Tetris, Sega System 16B +// CPU: FD1094 (317-0092) +// ROM Board type: 171-5704 +// ROM_START( tetris2 ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12193.a7", 0x000000, 0x20000, CRC(44466ed4) SHA1(ddb4f0310987e54ce4cd9ffa2813e2d1309aeaaa) ) ROM_LOAD16_BYTE( "epr-12192.a5", 0x000001, 0x20000, CRC(a1c8af00) SHA1(a8e4b289eb3939d6798bb78df1b4ae51c8ccc2d6) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0092.key", 0x0000, 0x2000, CRC(d10e1ad9) SHA1(26e81b5f62d96ea50bf203f66dc3643f29dd1596) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12165.b9", 0x00000, 0x10000, CRC(62640221) SHA1(c311d3847a981d0e1609f9b3d80481565d32d78c) ) ROM_LOAD( "epr-12166.b10", 0x10000, 0x10000, CRC(9abd183b) SHA1(621b017cb34973f9227be383e26b5cd41aea9422) ) ROM_LOAD( "epr-12167.b11", 0x20000, 0x10000, CRC(2495fd4e) SHA1(2db94ead9223a67238a97e724668076fc43e5534) ) - ROM_REGION16_BE( 0x020000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x020000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "obj0-o.rom", 0x00001, 0x10000, CRC(2fb38880) SHA1(0e1b601bbda78d1887951c1f7e752531c281bc83) ) ROM_LOAD16_BYTE( "obj0-e.rom", 0x00000, 0x10000, CRC(d6a02cba) SHA1(d80000f92e754e89c6ca7b7273feab448fc9a061) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12168.a7", 0x0000, 0x8000, CRC(bd9ba01b) SHA1(fafa7dc36cc057a50ae4cdf7a35f3594292336f4) ) ROM_END -/************************************************************************************************************************** - Tetris, Sega System 16B - CPU: FD1094 (317-0091) - ROM Board type: 171-5358 - - Pos. Silk Type Part Pos. Silk Type Part - A1 EPR-12163 27C256 68000 program B1 EPR-12169 27C256 Sprite data - A2 Unused 68000 program B2 Unused Sprite data - A3 Unused 68000 program B3 Unused Sprite data - A4 EPR-12164 27C256 68000 program B4 Unused Sprite data - A5 Unused 68000 program B5 EPR-12170 27C256 Sprite data - A6 Unused 68000 program B6 Unused Sprite data - A7 EPR-12168 27C256 Z80 program B7 Unused Sprite data - A8 Unused Z80 sample data B8 Unused Sprite data - A9 Unused Z80 sample data B9 EPR-12165 27C512 Tile data - A10 Unused Z80 sample data B10 EPR-12166 27C512 Tile data - A11 Unused Z80 sample data B11 EPR-12167 27C512 Tile data - */ +//************************************************************************************************************************* +// Tetris, Sega System 16B +// CPU: FD1094 (317-0091) +// ROM Board type: 171-5358 +// +// Pos. Silk Type Part Pos. Silk Type Part +// A1 EPR-12163 27C256 68000 program B1 EPR-12169 27C256 Sprite data +// A2 Unused 68000 program B2 Unused Sprite data +// A3 Unused 68000 program B3 Unused Sprite data +// A4 EPR-12164 27C256 68000 program B4 Unused Sprite data +// A5 Unused 68000 program B5 EPR-12170 27C256 Sprite data +// A6 Unused 68000 program B6 Unused Sprite data +// A7 EPR-12168 27C256 Z80 program B7 Unused Sprite data +// A8 Unused Z80 sample data B8 Unused Sprite data +// A9 Unused Z80 sample data B9 EPR-12165 27C512 Tile data +// A10 Unused Z80 sample data B10 EPR-12166 27C512 Tile data +// A11 Unused Z80 sample data B11 EPR-12167 27C512 Tile data +// ROM_START( tetris1 ) - ROM_REGION( 0x010000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x10000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12163.a1", 0x000001, 0x08000, CRC(d372d3f3) SHA1(e88fa5e66cc2d3cb9eb6d0f60d81c537e4642500) ) ROM_LOAD16_BYTE( "epr-12164.a4", 0x000000, 0x08000, CRC(b329cd6f) SHA1(409322f32ee676dc72a3b007e3f8d691ca991e60) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0091.key", 0x0000, 0x2000, CRC(a7937661) SHA1(a1f74749641fe5a25696dc328530377c7707adaf) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12165.b9", 0x00000, 0x10000, CRC(62640221) SHA1(c311d3847a981d0e1609f9b3d80481565d32d78c) ) ROM_LOAD( "epr-12166.b10", 0x10000, 0x10000, CRC(9abd183b) SHA1(621b017cb34973f9227be383e26b5cd41aea9422) ) ROM_LOAD( "epr-12167.b11", 0x20000, 0x10000, CRC(2495fd4e) SHA1(2db94ead9223a67238a97e724668076fc43e5534) ) - ROM_REGION16_BE( 0x10000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x10000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-12169.b1", 0x0001, 0x8000, CRC(dacc6165) SHA1(87b1a7643e3630ff73b2b117752496e1ea5da23d) ) ROM_LOAD16_BYTE( "epr-12170.b5", 0x0000, 0x8000, CRC(87354e42) SHA1(e7fd55aee59b51d82cb9b619fbb815ad6839560c) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12168.a7", 0x0000, 0x8000, CRC(bd9ba01b) SHA1(fafa7dc36cc057a50ae4cdf7a35f3594292336f4) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Time Scanner, Sega System 16B - CPU: 68000 - ROM Board type: 171-5358 - */ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Time Scanner, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5358 +// ROM_START( timescan ) - ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-10853.a4", 0x00000, 0x8000, CRC(24d7c5fb) SHA1(b1796e77cf968f9bdae7a47c5c02b93aaec10ade) ) ROM_LOAD16_BYTE( "epr-10850.a1", 0x00001, 0x8000, CRC(f1575732) SHA1(d0c8fc42171c436cc1cd55a33295bd019a474d47) ) ROM_LOAD16_BYTE( "epr-10854.a5", 0x10000, 0x8000, CRC(82d0b237) SHA1(c1defda4785014ccd7164f49f53f77e36fcb3a8d) ) @@ -6030,12 +5877,12 @@ ROM_START( timescan ) ROM_LOAD16_BYTE( "epr-10855.a6", 0x20000, 0x8000, CRC(63e95a53) SHA1(60c42bbb1c316deb493a237990a7938551f8bc2e) ) ROM_LOAD16_BYTE( "epr-10852.a3", 0x20001, 0x8000, CRC(7cd1382b) SHA1(6263cc863cbf0ef66a7ba8cc1c98212917d7c131) ) - ROM_REGION( 0x18000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-10543.b9", 0x00000, 0x8000, CRC(07dccc37) SHA1(544cc6a3b3ef64727ecf5098b84ade2dd5330614) ) ROM_LOAD( "epr-10544.b10", 0x08000, 0x8000, CRC(84fb9a3a) SHA1(efde54cc9582f68e58cae05f717a4fc8f620c0fc) ) ROM_LOAD( "epr-10545.b11", 0x10000, 0x8000, CRC(c8694bc0) SHA1(e48fc349ef454ded86141937f70b006e64da6b6b) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10548.b1", 0x00001, 0x8000, CRC(aa150735) SHA1(b6e6ff9229c641e196fc7a0a2cf7aa362f554676) ) ROM_LOAD16_BYTE( "epr-10552.b5", 0x00000, 0x8000, CRC(6fcbb9f7) SHA1(0a0fab930477d8b79e500263bbc80d3bf73778f8) ) ROM_LOAD16_BYTE( "epr-10549.b2", 0x20001, 0x8000, CRC(2f59f067) SHA1(1fb64cce2f98ddcb5ecb662e63ea636a8da08bcd) ) @@ -6045,30 +5892,30 @@ ROM_START( timescan ) ROM_LOAD16_BYTE( "epr-10551.b4", 0x60001, 0x8000, CRC(435d811f) SHA1(b28eb09620113cd7578387c4d96029f2acb8ec06) ) ROM_LOAD16_BYTE( "epr-10555.b8", 0x60000, 0x8000, CRC(2143c471) SHA1(d413aa216349ddf773a39d2826c3a940b4149229) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-10562.a7", 0x00000, 0x8000, CRC(3f5028bf) SHA1(02081569a5f4dc64771e97651a9902a98d54a952) ) ROM_LOAD( "epr-10563.a8", 0x10000, 0x8000, CRC(9db7eddf) SHA1(8b9a27442a623bee6b9b5b06275226734d132e17) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Toryumon, Sega System 16B - CPU: 68000 - ROM Board type: 171-5797 - */ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Toryumon, Sega System 16B +// CPU: 68000 +// ROM Board type: 171-5797 +// ROM_START( toryumon ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-17689.a2", 0x00000, 0x20000, CRC(4f0dee19) SHA1(efb5bf29e27029e9ea3fdd57ad7af54b4e1e9a97) ) ROM_LOAD16_BYTE( "epr-17688.a1", 0x00001, 0x20000, CRC(717d81c7) SHA1(293cd9859a2a3aad89c47fdad2ca6aa48e9f74cb) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-17700.b11", 0x00000, 0x40000, CRC(8f288b37) SHA1(f0c1bb60ace8078566b51ab91fc35d2981c9f32c) ) ROM_LOAD( "epr-17701.b12", 0x40000, 0x40000, CRC(6dfb025b) SHA1(502c16f650596a791fae1834f9bce6f3aa25c45f) ) ROM_LOAD( "epr-17702.b13", 0x80000, 0x40000, CRC(ae0b7eab) SHA1(403ca2b50913a744e2c5e1cd0d59c69df5464836) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-17692.b1", 0x00001, 0x20000, CRC(543c4327) SHA1(9f40163aaf165f5e4f5aefd8ce083d5f72ded125) ) ROM_LOAD16_BYTE( "epr-17695.b4", 0x00000, 0x20000, CRC(ee60f244) SHA1(21b912e12f6a56ea6b9e5e0be117b447d1ecda43) ) ROM_LOAD16_BYTE( "epr-17693.b2", 0x40001, 0x20000, CRC(4a350b3e) SHA1(70181bf713106475cdf684f86d593ee323ded2ca) ) @@ -6078,30 +5925,30 @@ ROM_START( toryumon ) ROM_LOAD16_BYTE( "epr-17698.b7", 0xc0001, 0x20000, CRC(cd4dfb82) SHA1(def5847a94cd7da96f5434b62b22925fbb8da151) ) ROM_LOAD16_BYTE( "epr-17699.b8", 0xc0000, 0x20000, CRC(2694ecce) SHA1(85d7ab89d4fd0aa0ca942485f94c5737deaa8eff) ) - ROM_REGION( 0x90000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x90000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-17691.a13", 0x00000, 0x08000, CRC(14205388) SHA1(0b580d4ef52eab2d71541d44fbd32676b2277aa1) ) ROM_LOAD( "epr-17690.a11", 0x10000, 0x40000, CRC(4f9ba4e4) SHA1(450d821ef12dbb24cf85ac10c77e9b31c03112b1) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Tough Turf, Sega System 16B - CPU: 68000 + i8751 (317-0104, 317-0100 also known to be exist) - ROM Board type: 171-5704 - */ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Tough Turf, Sega System 16B +// CPU: 68000 + i8751 (317-0104, 317-0100 also known to be exist) +// ROM Board type: 171-5704 +// ROM_START( tturf ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "12327.a7", 0x00000, 0x20000, CRC(0376c593) SHA1(3057828b16ee3b7cbb57a76047eecf74d1d8b465) ) ROM_LOAD16_BYTE( "12326.a5", 0x00001, 0x20000, CRC(f998862b) SHA1(69902ab0162eb42e1d6a9792651a5d41cb77477d) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "12268.a14", 0x00000, 0x10000, CRC(e0dac07f) SHA1(c7f6de42eb93a8f34afdc300628735b5f40a34c2) ) ROM_LOAD( "12269.a15", 0x10000, 0x10000, CRC(457a8790) SHA1(b701e1a1745cefb31083c8a3daa3b23181f89576) ) ROM_LOAD( "12270.a16", 0x20000, 0x10000, CRC(69fc025b) SHA1(20be1242de27f1b997d43890051cc5d5ac8a127a) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "12279.b1", 0x00001, 0x10000, CRC(7a169fb1) SHA1(1ec6da0d2cfcf727e61f61c847fd8b975b64f944) ) ROM_LOAD16_BYTE( "12283.b5", 0x00000, 0x10000, CRC(ae0fa085) SHA1(ae9af92d4dd0c8a0f064d24e647522b588fbd7f7) ) ROM_LOAD16_BYTE( "12278.b2", 0x40001, 0x10000, CRC(961d06b7) SHA1(b1a9dea63785bfa2c0e7b931387b91dfcd27d79b) ) @@ -6111,34 +5958,34 @@ ROM_START( tturf ) ROM_LOAD16_BYTE( "12276.b4", 0xc0001, 0x10000, CRC(838bd71f) SHA1(82d9d127438f5e1906b1cf40bf3b4727f2ee5685) ) ROM_LOAD16_BYTE( "12280.b8", 0xc0000, 0x10000, CRC(639a57cb) SHA1(84fd8b96758d38f9e1ba1a3c2cf8099ec0452784) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "12328.a10", 0x00000, 0x08000, NO_DUMP ) ROM_LOAD( "12329.a11", 0x10000, 0x10000, CRC(ed9a686d) SHA1(da433033d501ee871429ee676b3972b14179df9f) ) // speech ROM_LOAD( "12330.a12", 0x20000, 0x10000, CRC(fb762bca) SHA1(ff9191c5ec38c711ebb7c2ad043f62b6d7e2203c) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // protection MCU ROM_LOAD( "317-0104.bin", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - Tough Turf, Sega System 16B - CPU: 68000 + i8751 (317-0099) - ROM Board type: 171-5358 - Sega ID# for ROM board: 834-6949 - */ +//************************************************************************************************************************* +// Tough Turf, Sega System 16B +// CPU: 68000 + i8751 (317-0099) +// ROM Board type: 171-5358 +// Sega ID# for ROM board: 834-6949 +// ROM_START( tturfu ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12266.bin", 0x00000, 0x10000, CRC(f549def8) SHA1(9e913509d46274bd192455321904ec9884b5f629) ) ROM_LOAD16_BYTE( "epr-12264.bin", 0x00001, 0x10000, CRC(f7cdb289) SHA1(9c386cf33a96a977c623c2f243db38fda2c41ba4) ) ROM_LOAD16_BYTE( "epr-12267.bin", 0x20000, 0x10000, CRC(3c3ce191) SHA1(036ece2be585a85e05c047fe4a1ab3b6814c3490) ) ROM_LOAD16_BYTE( "epr-12265.bin", 0x20001, 0x10000, CRC(8cdadd9a) SHA1(a17852f0eb8f63a82ff44cbeb100da72fe5890e0) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "12268.a14", 0x00000, 0x10000, CRC(e0dac07f) SHA1(c7f6de42eb93a8f34afdc300628735b5f40a34c2) ) ROM_LOAD( "12269.a15", 0x10000, 0x10000, CRC(457a8790) SHA1(b701e1a1745cefb31083c8a3daa3b23181f89576) ) ROM_LOAD( "12270.a16", 0x20000, 0x10000, CRC(69fc025b) SHA1(20be1242de27f1b997d43890051cc5d5ac8a127a) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "12276.b4", 0x00001, 0x10000, CRC(838bd71f) SHA1(82d9d127438f5e1906b1cf40bf3b4727f2ee5685) ) ROM_LOAD16_BYTE( "12280.b8", 0x00000, 0x10000, CRC(639a57cb) SHA1(84fd8b96758d38f9e1ba1a3c2cf8099ec0452784) ) ROM_LOAD16_BYTE( "12277.b3", 0x20001, 0x10000, CRC(f16b6ba2) SHA1(00cc04c7b5aad82d51d2d252e1e57bcdc5e2c9e3) ) @@ -6148,36 +5995,36 @@ ROM_START( tturfu ) ROM_LOAD16_BYTE( "12279.b1", 0x60001, 0x10000, CRC(7a169fb1) SHA1(1ec6da0d2cfcf727e61f61c847fd8b975b64f944) ) ROM_LOAD16_BYTE( "12283.b5", 0x60000, 0x10000, CRC(ae0fa085) SHA1(ae9af92d4dd0c8a0f064d24e647522b588fbd7f7) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12271.a7", 0x00000, 0x8000, CRC(99671e52) SHA1(ab21b7e7a449c8081b5db1fdb579071e31b6852c) ) ROM_LOAD( "epr-12272.a8", 0x10000, 0x8000, CRC(7cf7e69f) SHA1(62c9f75db8e2b4ece517167ba5c0712bac5f1d95) ) ROM_LOAD( "epr-12273.a9", 0x20000, 0x8000, CRC(28f0bb8b) SHA1(d99aff57d213b10ac10c37ceff2f125875816488) ) ROM_LOAD( "epr-12274.a10", 0x30000, 0x8000, CRC(8207f0c4) SHA1(169914861a52fa731a305e1ee2d230aa0d0d97fe) ) ROM_LOAD( "epr-12275.a11", 0x40000, 0x8000, CRC(182f3c3d) SHA1(1482fe08a05a721e315b1a3aa5bef4dddc72e26e) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // protection MCU ROM_LOAD( "317-0099.bin", 0x00000, 0x1000, CRC(f676e3e4) SHA1(b71bad46c8b5f7328fd8d48f18624a620f0d34ce) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Wonder Boy III, Sega System 16B - CPU: 68000 + i8751 (317-0098) - ROM Board type: 171-5704 - */ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Wonder Boy III, Sega System 16B +// CPU: 68000 + i8751 (317-0098) +// ROM Board type: 171-5704 +// ROM_START( wb3 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12259.a7", 0x000000, 0x20000, CRC(54927c7e) SHA1(09a4c25b40aba2056c79b5c2e6e8cb7e6c05bc16) ) ROM_LOAD16_BYTE( "epr-12258.a5", 0x000001, 0x20000, CRC(01f5898c) SHA1(2422b4199ce5b63482f7fa1c790c90fc70a2b872) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12124.a14", 0x00000, 0x10000, CRC(dacefb6f) SHA1(789a5a99ad9419aee9da5397bcea34452ea8b4b3) ) ROM_LOAD( "epr-12125.a15", 0x10000, 0x10000, CRC(9fc36df7) SHA1(b39ccc687489e9781181197505fc78aa5cf7ea55) ) ROM_LOAD( "epr-12126.a16", 0x20000, 0x10000, CRC(a693fd94) SHA1(38e5446f41b6793a8e4134fdd92b02b86e3589f7) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-12090.b1", 0x00001, 0x010000, CRC(aeeecfca) SHA1(496124b170a725ad863c741d4e021ab947511e4c) ) ROM_LOAD16_BYTE( "epr-12094.b5", 0x00000, 0x010000, CRC(615e4927) SHA1(d23f164973afa770714e284a77ddf10f18cc596b) ) ROM_LOAD16_BYTE( "epr-12091.b2", 0x40001, 0x010000, CRC(8409a243) SHA1(bcbb9510a6499d8147543d6befa5a49f4ac055d9) ) @@ -6187,33 +6034,33 @@ ROM_START( wb3 ) ROM_LOAD16_BYTE( "epr-12093.b4", 0xc0001, 0x010000, CRC(4891e7bb) SHA1(1be04fcabe9bfa8cf746263a5bcca67902a021a0) ) ROM_LOAD16_BYTE( "epr-12097.b8", 0xc0000, 0x010000, CRC(e645902c) SHA1(497cfcf6c25cc2e042e16dbcb1963d2223def15a) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12127.a10", 0x0000, 0x8000, CRC(0bb901bb) SHA1(c81b198df8e3b0ec568032c76addf0d1a1711194) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // protection MCU ROM_LOAD( "317-0098.bin", 0x00000, 0x1000, NO_DUMP ) ROM_END -/************************************************************************************************************************** - Wonder Boy III, Sega System 16B - CPU: FD1094 (317-0087) - ROM Board type: 171-5704 - */ +//************************************************************************************************************************* +// Wonder Boy III, Sega System 16B +// CPU: FD1094 (317-0087) +// ROM Board type: 171-5704 +// ROM_START( wb34 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12131.a7", 0x000000, 0x20000, CRC(b95ecf88) SHA1(a431f8ecfffc0090047a6dda23e1f3bf9a46124e) ) ROM_LOAD16_BYTE( "epr-12128.a5", 0x000001, 0x20000, CRC(b711372b) SHA1(f7367ab0ec4e6066148a7821aea6122bc840fd8b) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0087.key", 0x0000, 0x2000, CRC(162cb531) SHA1(b94ae9df54edd228a462af35465d918b17da6d88) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12124.a14", 0x00000, 0x10000, CRC(dacefb6f) SHA1(789a5a99ad9419aee9da5397bcea34452ea8b4b3) ) ROM_LOAD( "epr-12125.a15", 0x10000, 0x10000, CRC(9fc36df7) SHA1(b39ccc687489e9781181197505fc78aa5cf7ea55) ) ROM_LOAD( "epr-12126.a16", 0x20000, 0x10000, CRC(a693fd94) SHA1(38e5446f41b6793a8e4134fdd92b02b86e3589f7) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-12090.b1", 0x00001, 0x010000, CRC(aeeecfca) SHA1(496124b170a725ad863c741d4e021ab947511e4c) ) ROM_LOAD16_BYTE( "epr-12094.b5", 0x00000, 0x010000, CRC(615e4927) SHA1(d23f164973afa770714e284a77ddf10f18cc596b) ) ROM_LOAD16_BYTE( "epr-12091.b2", 0x40001, 0x010000, CRC(8409a243) SHA1(bcbb9510a6499d8147543d6befa5a49f4ac055d9) ) @@ -6223,29 +6070,29 @@ ROM_START( wb34 ) ROM_LOAD16_BYTE( "epr-12093.b4", 0xc0001, 0x010000, CRC(4891e7bb) SHA1(1be04fcabe9bfa8cf746263a5bcca67902a021a0) ) ROM_LOAD16_BYTE( "epr-12097.b8", 0xc0000, 0x010000, CRC(e645902c) SHA1(497cfcf6c25cc2e042e16dbcb1963d2223def15a) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12127.a10", 0x0000, 0x8000, CRC(0bb901bb) SHA1(c81b198df8e3b0ec568032c76addf0d1a1711194) ) ROM_END -/************************************************************************************************************************** - Wonder Boy III, Sega System 16B - CPU: FD1094 (317-0089) - ROM Board type: 171-5704 - */ +//************************************************************************************************************************* +// Wonder Boy III, Sega System 16B +// CPU: FD1094 (317-0089) +// ROM Board type: 171-5704 +// ROM_START( wb33 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12137.a7", 0x000000, 0x20000, CRC(6f81238e) SHA1(b578165c1624f8a112e9eea098fb4551cc38faa1) ) ROM_LOAD16_BYTE( "epr-12136.a5", 0x000001, 0x20000, CRC(4cf05003) SHA1(bd4c64c327e53143aa94062f91946eda0a7146c2) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0089.key", 0x0000, 0x2000, CRC(597d30d3) SHA1(3ee713128595a3423a3c826d6bbcedf4099c1178) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12124.a14", 0x00000, 0x10000, CRC(dacefb6f) SHA1(789a5a99ad9419aee9da5397bcea34452ea8b4b3) ) ROM_LOAD( "epr-12125.a15", 0x10000, 0x10000, CRC(9fc36df7) SHA1(b39ccc687489e9781181197505fc78aa5cf7ea55) ) ROM_LOAD( "epr-12126.a16", 0x20000, 0x10000, CRC(a693fd94) SHA1(38e5446f41b6793a8e4134fdd92b02b86e3589f7) ) - ROM_REGION16_BE( 0x100000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x100000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-12090.b1", 0x00001, 0x010000, CRC(aeeecfca) SHA1(496124b170a725ad863c741d4e021ab947511e4c) ) ROM_LOAD16_BYTE( "epr-12094.b5", 0x00000, 0x010000, CRC(615e4927) SHA1(d23f164973afa770714e284a77ddf10f18cc596b) ) ROM_LOAD16_BYTE( "epr-12091.b2", 0x40001, 0x010000, CRC(8409a243) SHA1(bcbb9510a6499d8147543d6befa5a49f4ac055d9) ) @@ -6255,44 +6102,44 @@ ROM_START( wb33 ) ROM_LOAD16_BYTE( "epr-12093.b4", 0xc0001, 0x010000, CRC(4891e7bb) SHA1(1be04fcabe9bfa8cf746263a5bcca67902a021a0) ) ROM_LOAD16_BYTE( "epr-12097.b8", 0xc0000, 0x010000, CRC(e645902c) SHA1(497cfcf6c25cc2e042e16dbcb1963d2223def15a) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12127.a10", 0x0000, 0x8000, CRC(0bb901bb) SHA1(c81b198df8e3b0ec568032c76addf0d1a1711194) ) ROM_END -/************************************************************************************************************************** - Wonder Boy III, Sega System 16B - CPU: FD1094 (317-0085) - ROM Board type: 171-5358 - - Pos. Silk Type Part Pos. Silk Type Part - A1 EPR-12198 27C512 68000 program B1 EPR-12190 27C512 Sprite data - A2 EPR-12199 27C512 68000 program B2 EPR-12191 27C512 Sprite data - A3 Unused 68000 program B3 EPR-12192 27C512 Sprite data - A4 EPR-12100 27C512 68000 program B4 EPR-12193 27C512 Sprite data - A5 EPR-12101 27C512 68000 program B5 EPR-12194 27C512 Sprite data - A6 Unused 68000 program B6 EPR-12195 27C512 Sprite data - A7 EPR-12127 27C256 Z80 program B7 EPR-12196 27C512 Sprite data - A8 Unused Z80 sample data B8 EPR-12197 27C512 Sprite data - A9 Unused Z80 sample data B9 EPR-12124 27C512 Tile data - A10 Unused Z80 sample data B10 EPR-12125 27C512 Tile data - A11 Unused Z80 sample data B11 EPR-12126 27C512 Tile data - */ +//************************************************************************************************************************* +// Wonder Boy III, Sega System 16B +// CPU: FD1094 (317-0085) +// ROM Board type: 171-5358 +// +// Pos. Silk Type Part Pos. Silk Type Part +// A1 EPR-12198 27C512 68000 program B1 EPR-12190 27C512 Sprite data +// A2 EPR-12199 27C512 68000 program B2 EPR-12191 27C512 Sprite data +// A3 Unused 68000 program B3 EPR-12192 27C512 Sprite data +// A4 EPR-12100 27C512 68000 program B4 EPR-12193 27C512 Sprite data +// A5 EPR-12101 27C512 68000 program B5 EPR-12194 27C512 Sprite data +// A6 Unused 68000 program B6 EPR-12195 27C512 Sprite data +// A7 EPR-12127 27C256 Z80 program B7 EPR-12196 27C512 Sprite data +// A8 Unused Z80 sample data B8 EPR-12197 27C512 Sprite data +// A9 Unused Z80 sample data B9 EPR-12124 27C512 Tile data +// A10 Unused Z80 sample data B10 EPR-12125 27C512 Tile data +// A11 Unused Z80 sample data B11 EPR-12126 27C512 Tile data +// ROM_START( wb32 ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12098.a1", 0x000001, 0x10000, CRC(d998e5e5) SHA1(a7398b7338a33451a650c2f1d382dad2e5130528) ) ROM_LOAD16_BYTE( "epr-12100.a6", 0x000000, 0x10000, CRC(f5ca4abc) SHA1(1331db10cf99905fb13c1606a3f4d8bbf3d681b6) ) ROM_LOAD16_BYTE( "epr-12099.a2", 0x020001, 0x10000, CRC(3e243b45) SHA1(2a079553d1b61aaf18025847570003b79c8d6edf) ) ROM_LOAD16_BYTE( "epr-12101.a5", 0x020000, 0x10000, CRC(6146492b) SHA1(93515578a6ccf770944fea86d2f3200fa08f5075) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0085.key", 0x0000, 0x2000, CRC(8150f38d) SHA1(27baf09294422ff77781449b013f7d0dd0dded9c) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-12124.b9", 0x00000, 0x10000, CRC(dacefb6f) SHA1(789a5a99ad9419aee9da5397bcea34452ea8b4b3) ) ROM_LOAD( "epr-12125.b10", 0x10000, 0x10000, CRC(9fc36df7) SHA1(b39ccc687489e9781181197505fc78aa5cf7ea55) ) ROM_LOAD( "epr-12126.b11", 0x20000, 0x10000, CRC(a693fd94) SHA1(38e5446f41b6793a8e4134fdd92b02b86e3589f7) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-12090.b1", 0x00001, 0x010000, CRC(aeeecfca) SHA1(496124b170a725ad863c741d4e021ab947511e4c) ) ROM_LOAD16_BYTE( "epr-12094.b5", 0x00000, 0x010000, CRC(615e4927) SHA1(d23f164973afa770714e284a77ddf10f18cc596b) ) ROM_LOAD16_BYTE( "epr-12091.b2", 0x20001, 0x010000, CRC(8409a243) SHA1(bcbb9510a6499d8147543d6befa5a49f4ac055d9) ) @@ -6302,51 +6149,50 @@ ROM_START( wb32 ) ROM_LOAD16_BYTE( "epr-12093.b4", 0x60001, 0x010000, CRC(4891e7bb) SHA1(1be04fcabe9bfa8cf746263a5bcca67902a021a0) ) ROM_LOAD16_BYTE( "epr-12097.b8", 0x60000, 0x010000, CRC(e645902c) SHA1(497cfcf6c25cc2e042e16dbcb1963d2223def15a) ) - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12127.a7", 0x0000, 0x8000, CRC(0bb901bb) SHA1(c81b198df8e3b0ec568032c76addf0d1a1711194) ) ROM_END -/************************************************************************************************************************** - ************************************************************************************************************************** - ************************************************************************************************************************** - Wrestle War, Sega System 16B - CPU: 68000 + i8751 (317-0103) - ROM Board type: 171-5704 - GAME NUMBER: 837-6889-02 (MB:833-6887-07, ROM:834-6888-07) - - LOC NAME LOC NAME - A1 OPR-12141 B1 MPR-12153 - A2 OPR-12142 B2 MPR-12154 - A3 - B3 MPR-12155 - A4 - B4 OPR-12156 - A5 EPR-12371 B5 MPR-12157 - A6 EPR-12144 B6 MPR-12158 - A7 EPR-12372 B7 MPR-12159 - A8 EPR-12146 B8 OPR-12160 - - B9 PAL 315-5298 - A10 EPR-12147 B10 OPR-12161 - A11 MPR-12148 B11 OPR-12162 - A12 MPR-12149 B12 - - - B13 - - A14 MPR-12150 B14 - - A15 MPR-12151 B15 - - A16 MPR-12152 B6 - - */ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Wrestle War, Sega System 16B +// CPU: 68000 + i8751 (317-0103) +// ROM Board type: 171-5704 +// GAME NUMBER: 837-6889-02 (MB:833-6887-07, ROM:834-6888-07) +// +// LOC NAME LOC NAME +// A1 OPR-12141 B1 MPR-12153 +// A2 OPR-12142 B2 MPR-12154 +// A3 - B3 MPR-12155 +// A4 - B4 OPR-12156 +// A5 EPR-12371 B5 MPR-12157 +// A6 EPR-12144 B6 MPR-12158 +// A7 EPR-12372 B7 MPR-12159 +// A8 EPR-12146 B8 OPR-12160 +// - B9 PAL 315-5298 +// A10 EPR-12147 B10 OPR-12161 +// A11 MPR-12148 B11 OPR-12162 +// A12 MPR-12149 B12 - +// - B13 - +// A14 MPR-12150 B14 - +// A15 MPR-12151 B15 - +// A16 MPR-12152 B6 - +// ROM_START( wrestwar ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12372.a7", 0x00000, 0x20000, CRC(eeaba126) SHA1(ca1f630ff0cfc301205d2b8226d7614eadc117b7) ) ROM_LOAD16_BYTE( "epr-12371.a5", 0x00001, 0x20000, CRC(6714600a) SHA1(8b04347f39bb8a8bc52b1bbfa367d42ea7c61bc9) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-12146.a8", 0x80000, 0x20000, CRC(b77ba665) SHA1(b6a01ca857b5127ebb763f18cd4123185a7765a6) ) - ROM_LOAD16_BYTE( "epr-12144.a6", 0x80001, 0x20000, CRC(ddf075cb) SHA1(5d887f0d5786fa62757c593d937bba6f150c1b12) ) + ROM_LOAD16_BYTE( "epr-12146.a8", 0x40000, 0x20000, CRC(b77ba665) SHA1(b6a01ca857b5127ebb763f18cd4123185a7765a6) ) + ROM_LOAD16_BYTE( "epr-12144.a6", 0x40001, 0x20000, CRC(ddf075cb) SHA1(5d887f0d5786fa62757c593d937bba6f150c1b12) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12150.a14", 0x00000, 0x20000, CRC(6a821ab9) SHA1(e69f7e534835d4c820746ffc3ad76c3b7bb9b02e) ) ROM_LOAD( "mpr-12151.a15", 0x20000, 0x20000, CRC(2b1a0751) SHA1(8cb1027ef3728f5bdfdb5e2df0f0421f743cdc0a) ) ROM_LOAD( "mpr-12152.a16", 0x40000, 0x20000, CRC(f6e190fe) SHA1(4c8b334fb22c449d8d00c8f49f5eccbe008e244f) ) - ROM_REGION16_BE( 0x180000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x180000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12153.b1", 0x000001, 0x20000, CRC(ffa7d368) SHA1(e5663ef1cbe8ab27be0919a3cd78d9a7747bbac6) ) ROM_LOAD16_BYTE( "mpr-12157.b5", 0x000000, 0x20000, CRC(8d7794c1) SHA1(ace87970cfa02ab8200173622633d0d70ef7aa9e) ) ROM_LOAD16_BYTE( "mpr-12154.b2", 0x040001, 0x20000, CRC(0ed343f2) SHA1(951bd616e63c5fe0aa3f387c9c12153b4f29675f) ) @@ -6360,37 +6206,36 @@ ROM_START( wrestwar ) ROM_LOAD16_BYTE( "opr-12142.a2", 0x140001, 0x10000, CRC(12e38a5c) SHA1(05558a370b4e8100d2fa5e700a5ab76771ff7729) ) ROM_LOAD16_BYTE( "opr-12162.b11", 0x140000, 0x10000, CRC(fa06fd24) SHA1(20a578b82a75fe96a230c91645108fdc8b5bae21) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12147.a10", 0x00000, 0x08000, CRC(c3609607) SHA1(2e0acb775c60851bf0b2037b91b07ead061d5862) ) ROM_LOAD( "mpr-12148.a11", 0x10000, 0x20000, CRC(fb9a7f29) SHA1(7ba79c18ab4e586be2deccd78e4479d55eb75a7e) ) ROM_LOAD( "mpr-12149.a12", 0x30000, 0x20000, CRC(d6617b19) SHA1(aa36d257eaa52c8c871a39aaa2f29c203525dbaf) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x1000, "mcu", 0 ) // protection MCU ROM_LOAD( "317-0103.bin", 0x00000, 0x1000, CRC(aa0710f5) SHA1(61ba8d23d045806b0a7b75184766be00f872cc72) ) ROM_END -/************************************************************************************************************************** - Wrestle War, Sega System 16B - CPU: FD1094 (317-0102) - ROM Board type: 171-5704 -*/ +//************************************************************************************************************************* +// Wrestle War, Sega System 16B +// CPU: FD1094 (317-0102) +// ROM Board type: 171-5704 +// ROM_START( wrestwar2 ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12370.a7", 0x00000, 0x20000, CRC(cb5dbb76) SHA1(c6d8599020b2ce311d1d1cdbdac1f4830327ec9a) ) ROM_LOAD16_BYTE( "epr-12369.a5", 0x00001, 0x20000, CRC(6f47dd2f) SHA1(f970e5e0aad6b4199616eeb60461590817395688) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-12146.a8", 0x80000, 0x20000, CRC(b77ba665) SHA1(b6a01ca857b5127ebb763f18cd4123185a7765a6) ) - ROM_LOAD16_BYTE( "epr-12144.a6", 0x80001, 0x20000, CRC(ddf075cb) SHA1(5d887f0d5786fa62757c593d937bba6f150c1b12) ) + ROM_LOAD16_BYTE( "epr-12146.a8", 0x40000, 0x20000, CRC(b77ba665) SHA1(b6a01ca857b5127ebb763f18cd4123185a7765a6) ) + ROM_LOAD16_BYTE( "epr-12144.a6", 0x40001, 0x20000, CRC(ddf075cb) SHA1(5d887f0d5786fa62757c593d937bba6f150c1b12) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0102.key", 0x0000, 0x2000, CRC(28ba1bf0) SHA1(09de5e764866083a388a239904f16b90fbcba106) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12150.a14", 0x00000, 0x20000, CRC(6a821ab9) SHA1(e69f7e534835d4c820746ffc3ad76c3b7bb9b02e) ) ROM_LOAD( "mpr-12151.a15", 0x20000, 0x20000, CRC(2b1a0751) SHA1(8cb1027ef3728f5bdfdb5e2df0f0421f743cdc0a) ) ROM_LOAD( "mpr-12152.a16", 0x40000, 0x20000, CRC(f6e190fe) SHA1(4c8b334fb22c449d8d00c8f49f5eccbe008e244f) ) - ROM_REGION16_BE( 0x180000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x180000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12153.b1", 0x000001, 0x20000, CRC(ffa7d368) SHA1(e5663ef1cbe8ab27be0919a3cd78d9a7747bbac6) ) ROM_LOAD16_BYTE( "mpr-12157.b5", 0x000000, 0x20000, CRC(8d7794c1) SHA1(ace87970cfa02ab8200173622633d0d70ef7aa9e) ) ROM_LOAD16_BYTE( "mpr-12154.b2", 0x040001, 0x20000, CRC(0ed343f2) SHA1(951bd616e63c5fe0aa3f387c9c12153b4f29675f) ) @@ -6404,34 +6249,33 @@ ROM_START( wrestwar2 ) ROM_LOAD16_BYTE( "opr-12142.a2", 0x140001, 0x10000, CRC(12e38a5c) SHA1(05558a370b4e8100d2fa5e700a5ab76771ff7729) ) ROM_LOAD16_BYTE( "opr-12162.b11", 0x140000, 0x10000, CRC(fa06fd24) SHA1(20a578b82a75fe96a230c91645108fdc8b5bae21) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12147.a10", 0x00000, 0x08000, CRC(c3609607) SHA1(2e0acb775c60851bf0b2037b91b07ead061d5862) ) ROM_LOAD( "mpr-12148.a11", 0x10000, 0x20000, CRC(fb9a7f29) SHA1(7ba79c18ab4e586be2deccd78e4479d55eb75a7e) ) ROM_LOAD( "mpr-12149.a12", 0x30000, 0x20000, CRC(d6617b19) SHA1(aa36d257eaa52c8c871a39aaa2f29c203525dbaf) ) ROM_END -/************************************************************************************************************************** - Wrestle War, Sega System 16B - CPU: FD1094 (317-0090) - ROM Board type: 171-5704 -*/ +//************************************************************************************************************************* +// Wrestle War, Sega System 16B +// CPU: FD1094 (317-0090) +// ROM Board type: 171-5704 +// ROM_START( wrestwar1 ) - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12145.a7", 0x00000, 0x20000, CRC(2af51e2e) SHA1(b9299f17a7b945a8c96a52288e6da8e20651e4e5) ) ROM_LOAD16_BYTE( "epr-12143.a5", 0x00001, 0x20000, CRC(4131e345) SHA1(9f66e50cf76ad77b60f2bef97153d9fe6fc12339) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "epr-12146.a8", 0x80000, 0x20000, CRC(b77ba665) SHA1(b6a01ca857b5127ebb763f18cd4123185a7765a6) ) - ROM_LOAD16_BYTE( "epr-12144.a6", 0x80001, 0x20000, CRC(ddf075cb) SHA1(5d887f0d5786fa62757c593d937bba6f150c1b12) ) + ROM_LOAD16_BYTE( "epr-12146.a8", 0x40000, 0x20000, CRC(b77ba665) SHA1(b6a01ca857b5127ebb763f18cd4123185a7765a6) ) + ROM_LOAD16_BYTE( "epr-12144.a6", 0x40001, 0x20000, CRC(ddf075cb) SHA1(5d887f0d5786fa62757c593d937bba6f150c1b12) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0090.key", 0x0000, 0x2000, CRC(b7c24c4a) SHA1(8daaa03ea49c51b5462872948b0e06606c87f6b5) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12150.a14", 0x00000, 0x20000, CRC(6a821ab9) SHA1(e69f7e534835d4c820746ffc3ad76c3b7bb9b02e) ) ROM_LOAD( "mpr-12151.a15", 0x20000, 0x20000, CRC(2b1a0751) SHA1(8cb1027ef3728f5bdfdb5e2df0f0421f743cdc0a) ) ROM_LOAD( "mpr-12152.a16", 0x40000, 0x20000, CRC(f6e190fe) SHA1(4c8b334fb22c449d8d00c8f49f5eccbe008e244f) ) - ROM_REGION16_BE( 0x180000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x180000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12153.b1", 0x000001, 0x20000, CRC(ffa7d368) SHA1(e5663ef1cbe8ab27be0919a3cd78d9a7747bbac6) ) ROM_LOAD16_BYTE( "mpr-12157.b5", 0x000000, 0x20000, CRC(8d7794c1) SHA1(ace87970cfa02ab8200173622633d0d70ef7aa9e) ) ROM_LOAD16_BYTE( "mpr-12154.b2", 0x040001, 0x20000, CRC(0ed343f2) SHA1(951bd616e63c5fe0aa3f387c9c12153b4f29675f) ) @@ -6445,40 +6289,42 @@ ROM_START( wrestwar1 ) ROM_LOAD16_BYTE( "opr-12142.a2", 0x140001, 0x10000, CRC(12e38a5c) SHA1(05558a370b4e8100d2fa5e700a5ab76771ff7729) ) ROM_LOAD16_BYTE( "opr-12162.b11", 0x140000, 0x10000, CRC(fa06fd24) SHA1(20a578b82a75fe96a230c91645108fdc8b5bae21) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "epr-12147.a10", 0x00000, 0x08000, CRC(c3609607) SHA1(2e0acb775c60851bf0b2037b91b07ead061d5862) ) ROM_LOAD( "mpr-12148.a11", 0x10000, 0x20000, CRC(fb9a7f29) SHA1(7ba79c18ab4e586be2deccd78e4479d55eb75a7e) ) ROM_LOAD( "mpr-12149.a12", 0x30000, 0x20000, CRC(d6617b19) SHA1(aa36d257eaa52c8c871a39aaa2f29c203525dbaf) ) ROM_END -/************************************************************************************************************************** - Fantasy Zone II, Sega System 16C - CPU: 68000 (has Sega part number?) - ROM Board type: 171-5704 + Extra RAM - Sega operated this game on actual System 16 PCBs for various events, - it was also included in the PS2 Sega Ages collection Vol 33. - Various bootlegs were sourced from this version. The dump will have to - be verified if the official PCB ever gets into MAME friendly hands. - - There is also a demo version of the game available on the PC, but - attempting to use those ROMs on a real PCB / emulator will result - in the game failing after a few stages. -*/ +//************************************************************************************************************************* +//************************************************************************************************************************* +//************************************************************************************************************************* +// Fantasy Zone II, Sega System 16C +// CPU: 68000 (has Sega part number?) +// ROM Board type: 171-5704 + Extra RAM +// +// Sega operated this game on actual System 16 PCBs for various events, +// it was also included in the PS2 Sega Ages collection Vol 33. +// Various bootlegs were sourced from this version. The dump will have to +// be verified if the official PCB ever gets into MAME friendly hands. +// +// There is also a demo version of the game available on the PC, but +// attempting to use those ROMs on a real PCB / emulator will result +// in the game failing after a few stages. +// ROM_START( fantzn2x ) // based on PS2 version - ROM_REGION( 0xc0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "fz2.a7", 0x00000, 0x20000, CRC(94c05f0b) SHA1(53da68a919776a46ae96dbc094ff941308d13613) ) ROM_LOAD16_BYTE( "fz2.a5", 0x00001, 0x20000, CRC(f3526895) SHA1(3197956608138601192f111d3bcc26662a7d6ec1) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "fz2.a8", 0x80000, 0x20000, CRC(b2ebb209) SHA1(bd40c90a372ab92a869bdd28d12cf52b45ecc80e) ) - ROM_LOAD16_BYTE( "fz2.a6", 0x80001, 0x20000, CRC(6833f546) SHA1(b4503cdb5bdb1322c34b9da3ff4227c740dad707) ) + ROM_LOAD16_BYTE( "fz2.a8", 0x40000, 0x20000, CRC(b2ebb209) SHA1(bd40c90a372ab92a869bdd28d12cf52b45ecc80e) ) + ROM_LOAD16_BYTE( "fz2.a6", 0x40001, 0x20000, CRC(6833f546) SHA1(b4503cdb5bdb1322c34b9da3ff4227c740dad707) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "fz2.a14", 0x00000, 0x20000, CRC(1c0a4537) SHA1(3abdf51ea81780309bcfaf12c04efdf7cb15a649) ) ROM_LOAD( "fz2.a15", 0x20000, 0x20000, CRC(2b933344) SHA1(5b53ea8d58cc3d157aec6926db048359984e4276) ) ROM_LOAD( "fz2.a16", 0x40000, 0x20000, CRC(e63281a1) SHA1(72379c579484c1ef7784a9598d373446ef0a472b) ) - ROM_REGION16_BE( 0x180000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x180000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "fz2.b1", 0x000001, 0x20000, CRC(46bba615) SHA1(b291df4a83d7155eb7606f86ed733c24362a4db3) ) ROM_LOAD16_BYTE( "fz2.b5", 0x000000, 0x20000, CRC(bebeee5d) SHA1(9e57e62c6b9136667aa90d7d423fc33ac6df4352) ) ROM_LOAD16_BYTE( "fz2.b2", 0x040001, 0x20000, CRC(6681a7b6) SHA1(228df38601ba3895e9449921a64850941715b421) ) @@ -6492,25 +6338,25 @@ ROM_START( fantzn2x ) // based on PS2 version ROM_LOAD16_BYTE( "fz2.a2", 0x140001, 0x20000, CRC(3b4050b7) SHA1(8c7c8051c577a4b2ca54d7e60c100fbd5391551f) ) ROM_LOAD16_BYTE( "fz2.b11", 0x140000, 0x20000, CRC(da8a95dc) SHA1(d44e1515008d4ee302f940ce7799fa9a790799e9) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "fz2.a10", 0x00000, 0x08000, CRC(92c92924) SHA1(3c98cea8f42c316405b28ae03469c6876de5e806) ) ROM_LOAD( "fz2.a11", 0x10000, 0x20000, CRC(8c641bb9) SHA1(920da63961d2f3457c80d4c5f6d4f405374bb23a) ) ROM_END +//************************************************************************************************************************* ROM_START( fantzn2xp ) // based on trial version - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "cpu1b.bin", 0x000000, 0x20000, CRC(d23ef944) SHA1(e147a436a661442dda0e7643e1adc169cc12a9e8) ) ROM_LOAD16_BYTE( "cpu1a.bin", 0x000001, 0x20000, CRC(407490e4) SHA1(19e0db715f8ca647454f9da03a3a944ecc0b956c) ) - /* empty 0x40000 - 0x80000 */ - ROM_LOAD16_BYTE( "cpu1d.bin", 0x080000, 0x20000, CRC(c8c7716b) SHA1(9f8f83307dc47fc7456f292f17d51595fa60a77f) ) - ROM_LOAD16_BYTE( "cpu1c.bin", 0x080001, 0x20000, CRC(242e7b6e) SHA1(25d311d463ba95089be9b0b44c482a634ecb70a0) ) + ROM_LOAD16_BYTE( "cpu1d.bin", 0x040000, 0x20000, CRC(c8c7716b) SHA1(9f8f83307dc47fc7456f292f17d51595fa60a77f) ) + ROM_LOAD16_BYTE( "cpu1c.bin", 0x040001, 0x20000, CRC(242e7b6e) SHA1(25d311d463ba95089be9b0b44c482a634ecb70a0) ) - ROM_REGION( 0x60000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x60000, "gfx1", 0 ) // tiles ROM_LOAD( "tilea.bin", 0x00000, 0x20000, CRC(47e0e5ce) SHA1(604ed062d7e7d640c49732d2c3202c991410381a) ) ROM_LOAD( "tileb.bin", 0x20000, 0x20000, CRC(59e181b7) SHA1(0d57d7b49b85baafa3038dc5b7551fea85f4f5c8) ) ROM_LOAD( "tilec.bin", 0x40000, 0x20000, CRC(375d354c) SHA1(2af5374777b13cb5aefb7fe90adea0b4d79e9202) ) - ROM_REGION16_BE( 0x140000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x140000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "obja.bin", 0x000001, 0x20000, CRC(9af87a4d) SHA1(b4f0f40f96c4081803742bc6576c37edff6eab16) ) ROM_LOAD16_BYTE( "objb.bin", 0x000000, 0x20000, CRC(2fdbca68) SHA1(bc0c96bba9e89f2711267b737ecd4bf2a177edda) ) ROM_LOAD16_BYTE( "objc.bin", 0x040001, 0x20000, CRC(2587487a) SHA1(eb04c03e918f1d98c36360f2b089018fe25f8dad) ) @@ -6522,397 +6368,334 @@ ROM_START( fantzn2xp ) // based on trial version ROM_LOAD16_BYTE( "obji.bin", 0x100001, 0x20000, CRC(c7790fee) SHA1(bd4ce6ad439042f3d2da9f756f7ba82630102386) ) ROM_LOAD16_BYTE( "objj.bin", 0x100000, 0x20000, CRC(4535eb0e) SHA1(aaa067c509bc669a80a42df2f827c2bc0179b721) ) - ROM_REGION( 0x50000, "soundcpu", 0 ) /* sound CPU */ + ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU ROM_LOAD( "cpu2a.bin", 0x00000, 0x08000, CRC(92c92924) SHA1(3c98cea8f42c316405b28ae03469c6876de5e806) ) ROM_LOAD( "cpu2b.bin", 0x10000, 0x20000, CRC(2c8ad475) SHA1(9ef1ed5aab81a82844ccb0949cb393a8d1abac92) ) ROM_END -/************************************* - * - * Generic driver initialization - * - *************************************/ +//************************************************************************** +// CONFIGURATION +//************************************************************************** -static DRIVER_INIT( generic_5358_small ) +//------------------------------------------------- +// init_generic - common initialization +//------------------------------------------------- + +void segas16b_state::init_generic(segas16b_rom_board rom_board) { - system16b_generic_init(machine, ROM_BOARD_171_5358_SMALL); + // remember the ROM board and work RAM size + m_romboard = rom_board; + + // configure the NVRAM to point to our workram + m_nvram->set_base(m_workram, m_workram.bytes()); + + // create default read/write handlers + m_custom_io_r = read16_delegate(FUNC(segas16b_state::standard_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segas16b_state::standard_io_w), this); + + // point globals to allocated memory regions + segaic16_spriteram_0 = reinterpret_cast(memshare("spriteram")->ptr()); + segaic16_paletteram = reinterpret_cast(memshare("paletteram")->ptr()); + segaic16_tileram_0 = reinterpret_cast(memshare("tileram")->ptr()); + segaic16_textram_0 = reinterpret_cast(memshare("textram")->ptr()); + + // save state + save_item(NAME(m_atomicp_sound_count)); + save_item(NAME(m_hwc_input_value)); + save_item(NAME(m_mj_input_num)); + save_item(NAME(m_mj_last_val)); } -static DRIVER_INIT( generic_5358 ) +//------------------------------------------------- +// init_generic_* - ROM board-specific +// initialization +//------------------------------------------------- + +void segas16b_state::init_generic_5358_small() { init_generic(ROM_BOARD_171_5358_SMALL); } +void segas16b_state::init_generic_5358() { init_generic(ROM_BOARD_171_5358); } +void segas16b_state::init_generic_5521() { init_generic(ROM_BOARD_171_5521); } +void segas16b_state::init_generic_5704() { init_generic(ROM_BOARD_171_5704); } +void segas16b_state::init_generic_5797() { init_generic(ROM_BOARD_171_5797); } +void segas16b_state::init_generic_korean() { - system16b_generic_init(machine, ROM_BOARD_171_5358); -} - - -static DRIVER_INIT( generic_5521 ) -{ - system16b_generic_init(machine, ROM_BOARD_171_5521); -} - - -static DRIVER_INIT( generic_5704 ) -{ - system16b_generic_init(machine, ROM_BOARD_171_5704); -} - - -static DRIVER_INIT( generic_5704_extra_ram ) -{ - system16b_generic_init(machine, ROM_BOARD_171_5704_EXTRA_RAM); -} - - -static DRIVER_INIT( generic_5797 ) -{ - system16b_generic_init(machine, ROM_BOARD_171_5797); -} - - - -/************************************* - * - * Game-specific driver inits - * - *************************************/ - -static DRIVER_INIT( aceattac_5358 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5358); - state->m_custom_io_r = aceattac_custom_io_r; -} - - -static DRIVER_INIT( aliensy3_5358 ) -{ - DRIVER_INIT_CALL(generic_5358); - fd1089a_decrypt(machine); -} - - -static DRIVER_INIT( altbeast_5521 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5521); - state->m_i8751_vblank_hook = altbeast_i8751_sim; -} - - -static DRIVER_INIT( altbeasj_5521 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5521); - state->m_i8751_vblank_hook = altbeasj_i8751_sim; -} - - -static DRIVER_INIT( altbeas5_5521 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5521); - state->m_i8751_vblank_hook = altbeas5_i8751_sim; -} - - -static DRIVER_INIT( altbeas4_5521 ) -{ - DRIVER_INIT_CALL(generic_5521); - mc8123_decrypt_rom(machine, "soundcpu", "mcu", NULL, 0); -} - - -static DRIVER_INIT( aurail1_5704 ) -{ - DRIVER_INIT_CALL(generic_5704); - fd1089b_decrypt(machine); -} - - -static DRIVER_INIT( aurailj_5704 ) -{ - DRIVER_INIT_CALL(generic_5704); - fd1089a_decrypt(machine); -} - - -static DRIVER_INIT( ddux_5704 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5704); - state->m_i8751_vblank_hook = ddux_i8751_sim; -} - - -static DRIVER_INIT( dunkshot_5358 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5358); - fd1089a_decrypt(machine); - state->m_custom_io_r = dunkshot_custom_io_r; -} - - -static DRIVER_INIT( exctleag_5358 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5358); - state->m_custom_io_r = sdi_custom_io_r; -} - - -static DRIVER_INIT( goldnaxe_5704 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5704); - goldnaxe_i8751_init(machine); - state->m_i8751_vblank_hook = goldnaxe_i8751_sim; -} - - -static DRIVER_INIT( goldnaxe_5797 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5797); - goldnaxe_i8751_init(machine); - state->m_i8751_vblank_hook = goldnaxe_i8751_sim; -} - - -static DRIVER_INIT( hwchamp_5521 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5521); - state->m_custom_io_r = hwchamp_custom_io_r; - state->m_custom_io_w = hwchamp_custom_io_w; -} - - -static DRIVER_INIT( sdi_5358 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5358); - state->m_custom_io_r = sdi_custom_io_r; -} - -static DRIVER_INIT( defense_5358 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5358); - fd1089a_decrypt(machine); - state->m_custom_io_r = sdi_custom_io_r; -} - - -static DRIVER_INIT( shinobi4_5521 ) -{ - DRIVER_INIT_CALL(generic_5521); - mc8123_decrypt_rom(machine, "soundcpu", "mcu", NULL, 0); -} - - -static DRIVER_INIT( shinobi3_5358 ) -{ - DRIVER_INIT_CALL(generic_5358); - mc8123_decrypt_rom(machine, "soundcpu", "mcu", NULL, 0); -} - - -static DRIVER_INIT( sjryuko_5358 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5358); - fd1089b_decrypt(machine); - state->m_custom_io_r = sjryuko_custom_io_r; - state->m_custom_io_w = sjryuko_custom_io_w; -} - - -static DRIVER_INIT( passshtj_5358 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5358); - state->m_custom_io_r = passshtj_custom_io_r; -} - - -static DRIVER_INIT( tturf_5704 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5704); - state->m_i8751_vblank_hook = tturf_i8751_sim; -} - - -static DRIVER_INIT( wb3_5704 ) -{ - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5704); - state->m_i8751_vblank_hook = wb3_i8751_sim; -} - - -static DRIVER_INIT( atomicp ) -{ - segas1x_state *state = machine.driver_data(); - - system16b_generic_init(machine, ROM_BOARD_ATOMICP); - state->m_disable_screen_blanking = 1; - state->m_atomicp_sound_divisor = 1; - + init_generic(ROM_BOARD_KOREAN); + + // configure special behaviors for the Korean boards + m_disable_screen_blanking = true; + m_atomicp_sound_divisor = 1; segaic16_display_enable = 1; + + // allocate a sound timer + emu_timer *timer = timer_alloc(TID_ATOMICP_SOUND_IRQ); + timer->adjust(attotime::from_hz(10000), 0, attotime::from_hz(10000)); } -static DRIVER_INIT( snapper ) +//------------------------------------------------- +// init_* - game-specific initialization +//------------------------------------------------- + +void segas16b_state::init_aceattac_5358() { - segas1x_state *state = machine.driver_data(); + init_generic_5358(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::aceattac_custom_io_r), this); +} - system16b_generic_init(machine, ROM_BOARD_ATOMICP); - state->m_disable_screen_blanking = 1; - state->m_atomicp_sound_divisor = 4; +void segas16b_state::init_altbeast_5521() +{ + init_generic_5521(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::altbeast_i8751_sim), this); +} - segaic16_display_enable = 1; +void segas16b_state::init_altbeasj_5521() +{ + init_generic_5521(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::altbeasj_i8751_sim), this); +} + +void segas16b_state::init_altbeas5_5521() +{ + init_generic_5521(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::altbeas5_i8751_sim), this); +} + +void segas16b_state::init_altbeas4_5521() +{ + init_generic_5521(); + mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0); +} + +void segas16b_state::init_ddux_5704() +{ + init_generic_5704(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::ddux_i8751_sim), this); +} + +void segas16b_state::init_dunkshot_5358_small() +{ + init_generic_5358_small(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::dunkshot_custom_io_r), this); + m_tilemap_type = SEGAIC16_TILEMAP_16B_ALT; +} + +void segas16b_state::init_exctleag_5358() +{ + init_generic_5358(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::sdi_custom_io_r), this); +} + +void segas16b_state::init_goldnaxe_5704() +{ + init_generic_5704(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::goldnaxe_i8751_sim), this); + + static const UINT8 memory_control_5704[0x10] = + { 0x02,0x00, 0x02,0x08, 0x00,0x1f, 0x00,0xff, 0x00,0x20, 0x01,0x10, 0x00,0x14, 0x00,0xc4 }; + m_i8751_initial_config = memory_control_5704; +} + +void segas16b_state::init_goldnaxe_5797() +{ + init_generic_5797(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::goldnaxe_i8751_sim), this); + + static const UINT8 memory_control_5797[0x10] = + { 0x02,0x00, 0x00,0x1f, 0x00,0x1e, 0x00,0xff, 0x00,0x20, 0x01,0x10, 0x00,0x14, 0x00,0xc4 }; + m_i8751_initial_config = memory_control_5797; +} + +void segas16b_state::init_hwchamp_5521() +{ + init_generic_5521(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::hwchamp_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segas16b_state::hwchamp_custom_io_w), this); +} + +void segas16b_state::init_passshtj_5358() +{ + init_generic_5358(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::passshtj_custom_io_r), this); +} + +void segas16b_state::init_sdi_5358_small() +{ + init_generic_5358_small(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::sdi_custom_io_r), this); +} + +void segas16b_state::init_defense_5358_small() +{ + init_generic_5358_small(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::sdi_custom_io_r), this); +} + +void segas16b_state::init_shinobi4_5521() +{ + init_generic_5521(); + mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0); +} + +void segas16b_state::init_shinobi3_5358() +{ + init_generic_5358(); + mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0); +} + +void segas16b_state::init_sjryuko_5358_small() +{ + init_generic_5358_small(); + m_custom_io_r = read16_delegate(FUNC(segas16b_state::sjryuko_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segas16b_state::sjryuko_custom_io_w), this); + m_tilemap_type = SEGAIC16_TILEMAP_16B_ALT; +} + +void segas16b_state::init_timescan_5358_small() +{ + init_generic_5358_small(); + m_tilemap_type = SEGAIC16_TILEMAP_16B_ALT; +} +void segas16b_state::init_tturf_5704() +{ + init_generic_5704(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::tturf_i8751_sim), this); +} + +void segas16b_state::init_wb3_5704() +{ + init_generic_5704(); + m_i8751_vblank_hook = i8751_sim_delegate(FUNC(segas16b_state::wb3_i8751_sim), this); +} + +void segas16b_state::init_snapper() +{ + init_generic_korean(); + m_atomicp_sound_divisor = 4; } -/************************************* - * - * Game driver(s) - * - *************************************/ +//************************************************************************** +// GAME DRIVERS +//************************************************************************** // YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS -GAME( 1988, aceattac, 0, system16b, aceattac, aceattac_5358, ROT0, "Sega", "Ace Attacker (FD1094 317-0059)", GAME_NOT_WORKING ) +GAME( 1988, aceattac, 0, system16b_fd1094, aceattac, segas16b_state,init_aceattac_5358, ROT0, "Sega", "Ace Attacker (FD1094 317-0059)", GAME_NOT_WORKING ) -GAME( 1987, aliensyn, 0, system16b, aliensyn, generic_5358, ROT0, "Sega", "Alien Syndrome (set 4, System 16B, unprotected)", 0 ) -GAME( 1987, aliensyn3, aliensyn, system16b, aliensyn, aliensy3_5358, ROT0, "Sega", "Alien Syndrome (set 3, System 16B, FD1089A 317-0033)", 0 ) -GAME( 1987, aliensynj, aliensyn, system16b, aliensynj,aliensy3_5358, ROT0, "Sega", "Alien Syndrome (set 6, Japan, new, System 16B, FD1089A 317-0033)", 0 ) +GAME( 1987, aliensyn, 0, system16b, aliensyn, segas16b_state,init_generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 4, System 16B, unprotected)", 0 ) +GAME( 1987, aliensyn3, aliensyn, system16b_fd1089a, aliensyn, segas16b_state,init_generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 3, System 16B, FD1089A 317-0033)", 0 ) +GAME( 1987, aliensynj, aliensyn, system16b_fd1089a, aliensynj,segas16b_state,init_generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 6, Japan, new, System 16B, FD1089A 317-0033)", 0 ) -GAME( 1988, altbeast, 0, system16b_8751, altbeast, altbeast_5521, ROT0, "Sega", "Altered Beast (set 8, 8751 317-0078)", 0 ) -GAME( 1988, altbeastj, altbeast, system16b_8751, altbeast, altbeasj_5521, ROT0, "Sega", "Juuouki (set 7, Japan, 8751 317-0077)", 0 ) -GAME( 1988, altbeast6, altbeast, system16b_8751, altbeast, altbeas5_5521, ROT0, "Sega", "Altered Beast (set 6, 8751 317-0076)", 0 ) -GAME( 1988, altbeast5, altbeast, system16b, altbeast, generic_5521, ROT0, "Sega", "Altered Beast (set 5, FD1094 317-0069)", 0 ) -GAME( 1988, altbeast4, altbeast, system16b, altbeast, altbeas4_5521, ROT0, "Sega", "Altered Beast (set 4, MC-8123B 317-0066)", 0 ) -GAME( 1988, altbeastj3, altbeast, system16b, altbeast, generic_5521, ROT0, "Sega", "Juuouki (set 3, Japan, FD1094 317-0068)", 0 ) -GAME( 1988, altbeast2, altbeast, system16b, altbeast, altbeas4_5521, ROT0, "Sega", "Altered Beast (set 2, MC-8123B 317-0066)", 0 ) -GAME( 1988, altbeastj1, altbeast, system16b, altbeast, generic_5521, ROT0, "Sega", "Juuouki (set 1, Japan, FD1094 317-0065)", GAME_NOT_WORKING ) /* No CPU decrypt key */ +GAME( 1988, altbeast, 0, system16b_i8751, altbeast, segas16b_state,init_altbeast_5521, ROT0, "Sega", "Altered Beast (set 8, 8751 317-0078)", 0 ) +GAME( 1988, altbeastj, altbeast, system16b_i8751, altbeast, segas16b_state,init_altbeasj_5521, ROT0, "Sega", "Juuouki (set 7, Japan, 8751 317-0077)", 0 ) +GAME( 1988, altbeast6, altbeast, system16b_i8751, altbeast, segas16b_state,init_altbeas5_5521, ROT0, "Sega", "Altered Beast (set 6, 8751 317-0076)", 0 ) +GAME( 1988, altbeast5, altbeast, system16b_fd1094, altbeast, segas16b_state,init_generic_5521, ROT0, "Sega", "Altered Beast (set 5, FD1094 317-0069)", 0 ) +GAME( 1988, altbeast4, altbeast, system16b, altbeast, segas16b_state,init_altbeas4_5521, ROT0, "Sega", "Altered Beast (set 4, MC-8123B 317-0066)", 0 ) +GAME( 1988, altbeastj3, altbeast, system16b_fd1094, altbeast, segas16b_state,init_generic_5521, ROT0, "Sega", "Juuouki (set 3, Japan, FD1094 317-0068)", 0 ) +GAME( 1988, altbeast2, altbeast, system16b, altbeast, segas16b_state,init_altbeas4_5521, ROT0, "Sega", "Altered Beast (set 2, MC-8123B 317-0066)", 0 ) +GAME( 1988, altbeastj1, altbeast, system16b_fd1094, altbeast, segas16b_state,init_generic_5521, ROT0, "Sega", "Juuouki (set 1, Japan, FD1094 317-0065)", GAME_NOT_WORKING ) // No CPU decrypt key -GAME( 1990, aurail, 0, system16b, aurail, generic_5704, ROT0, "Sega / Westone", "Aurail (set 3, US, unprotected)", 0 ) -GAME( 1990, aurail1, aurail, system16b, aurail, aurail1_5704, ROT0, "Sega / Westone", "Aurail (set 2, World, FD1089B 317-0168)", 0 ) -GAME( 1990, aurailj, aurail, system16b, aurail, aurailj_5704, ROT0, "Sega / Westone", "Aurail (set 1, Japan, FD1089A 317-0167)", 0 ) +GAME( 1990, aurail, 0, system16b, aurail, segas16b_state,init_generic_5704, ROT0, "Sega / Westone", "Aurail (set 3, US, unprotected)", 0 ) +GAME( 1990, aurail1, aurail, system16b_fd1089b, aurail, segas16b_state,init_generic_5704, ROT0, "Sega / Westone", "Aurail (set 2, World, FD1089B 317-0168)", 0 ) +GAME( 1990, aurailj, aurail, system16b_fd1089a, aurail, segas16b_state,init_generic_5704, ROT0, "Sega / Westone", "Aurail (set 1, Japan, FD1089A 317-0167)", 0 ) -GAME( 1989, bayroute, 0, system16b, bayroute, generic_5704, ROT0, "Sunsoft / Sega", "Bay Route (set 3, World, FD1094 317-0116)", 0 ) -GAME( 1989, bayroutej, bayroute, system16b, bayroute, generic_5704, ROT0, "Sunsoft / Sega", "Bay Route (set 2, Japan, FD1094 317-0115)", 0 ) -GAME( 1989, bayroute1, bayroute, system16b, bayroute, generic_5358, ROT0, "Sunsoft / Sega", "Bay Route (set 1, US, unprotected)", 0 ) +GAME( 1989, bayroute, 0, system16b_fd1094, bayroute, segas16b_state,init_generic_5704, ROT0, "Sunsoft / Sega", "Bay Route (set 3, World, FD1094 317-0116)", 0 ) +GAME( 1989, bayroutej, bayroute, system16b_fd1094, bayroute, segas16b_state,init_generic_5704, ROT0, "Sunsoft / Sega", "Bay Route (set 2, Japan, FD1094 317-0115)", 0 ) +GAME( 1989, bayroute1, bayroute, system16b, bayroute, segas16b_state,init_generic_5358, ROT0, "Sunsoft / Sega", "Bay Route (set 1, US, unprotected)", 0 ) -GAME( 1987, bullet, 0, system16b, bullet, generic_5358_small, ROT0, "Sega", "Bullet (FD1094 317-0041)", 0 ) -/* Charon */ -GAME( 1991, cotton, 0, system16b, cotton, generic_5704, ROT0, "Sega / Success", "Cotton (set 3, World, FD1094 317-0181a)", 0 ) -GAME( 1991, cottonu, cotton, system16b, cotton, generic_5704, ROT0, "Sega / Success", "Cotton (set 2, US, FD1094 317-0180)", 0 ) -GAME( 1991, cottonj, cotton, system16b, cotton, generic_5704, ROT0, "Sega / Success", "Cotton (set 1, Japan, FD1094 317-0179a)", 0 ) +GAME( 1987, bullet, 0, system16b_fd1094, bullet, segas16b_state,init_generic_5358_small, ROT0, "Sega", "Bullet (FD1094 317-0041)", 0 ) -GAME( 1988, ddux, 0, system16b, ddux, generic_5521, ROT0, "Sega", "Dynamite Dux (set 2, FD1094 317-0096)", 0 ) -GAME( 1988, ddux1, ddux, system16b_8751, ddux, ddux_5704, ROT0, "Sega", "Dynamite Dux (set 1, 8751 317-0095)", 0 ) +// Charon -GAME( 1986, dunkshot, 0, timescan, dunkshot, dunkshot_5358, ROT0, "Sega", "Dunk Shot (FD1089A 317-0022)", 0 ) +GAME( 1991, cotton, 0, system16b_fd1094, cotton, segas16b_state,init_generic_5704, ROT0, "Sega / Success", "Cotton (set 3, World, FD1094 317-0181a)", 0 ) +GAME( 1991, cottonu, cotton, system16b_fd1094, cotton, segas16b_state,init_generic_5704, ROT0, "Sega / Success", "Cotton (set 2, US, FD1094 317-0180)", 0 ) +GAME( 1991, cottonj, cotton, system16b_fd1094, cotton, segas16b_state,init_generic_5704, ROT0, "Sega / Success", "Cotton (set 1, Japan, FD1094 317-0179a)", 0 ) -GAME( 1989, eswat, 0, system16b_5248, eswat, generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 3, World, FD1094 317-0130)", 0 ) -GAME( 1989, eswatu, eswat, system16b_5248, eswat, generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 2, US, FD1094 317-0129)", 0 ) -GAME( 1989, eswatj, eswat, system16b_5248, eswat, generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 1, Japan, FD1094 317-0128)", 0 ) +GAME( 1988, ddux, 0, system16b_fd1094, ddux, segas16b_state,init_generic_5521, ROT0, "Sega", "Dynamite Dux (set 2, FD1094 317-0096)", 0 ) +GAME( 1988, ddux1, ddux, system16b_i8751, ddux, segas16b_state,init_ddux_5704, ROT0, "Sega", "Dynamite Dux (set 1, 8751 317-0095)", 0 ) -GAME( 1988, exctleag, 0, system16b, exctleag, exctleag_5358, ROT0, "Sega", "Excite League (FD1094 317-0079)", 0 ) +GAME( 1986, dunkshot, 0, system16b_fd1089a, dunkshot, segas16b_state,init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (FD1089A 317-0022)", 0 ) -GAME( 1989, fpoint, 0, system16b, fpoint, generic_5358, ROT0, "Sega", "Flash Point (set 2, Japan, FD1094 317-0127A)", 0 ) -GAME( 1989, fpoint1, fpoint, system16b, fpoint, generic_5704, ROT0, "Sega", "Flash Point (set 1, Japan, FD1094 317-0127A)", 0 ) +GAME( 1989, eswat, 0, system16b_fd1094_5248,eswat, segas16b_state,init_generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 3, World, FD1094 317-0130)", 0 ) +GAME( 1989, eswatu, eswat, system16b_fd1094_5248,eswat, segas16b_state,init_generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 2, US, FD1094 317-0129)", 0 ) +GAME( 1989, eswatj, eswat, system16b_fd1094_5248,eswat, segas16b_state,init_generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 1, Japan, FD1094 317-0128)", 0 ) -GAME( 1989, goldnaxe, 0, system16b_8751_5248, goldnaxe, goldnaxe_5797, ROT0, "Sega", "Golden Axe (set 6, US, 8751 317-123A)", 0 ) -GAME( 1989, goldnaxeu, goldnaxe, system16b_5248, goldnaxe, generic_5797, ROT0, "Sega", "Golden Axe (set 5, US, FD1094 317-0122)", 0 ) -GAME( 1989, goldnaxej, goldnaxe, system16b, goldnaxe, generic_5704, ROT0, "Sega", "Golden Axe (set 4, Japan, FD1094 317-0121)", 0 ) -GAME( 1989, goldnaxe3, goldnaxe, system16b, goldnaxe, generic_5704, ROT0, "Sega", "Golden Axe (set 3, World, FD1094 317-0120)", 0) -GAME( 1989, goldnaxe2, goldnaxe, system16b_8751, goldnaxe, goldnaxe_5704, ROT0, "Sega", "Golden Axe (set 2, US, 8751 317-0112)", 0 ) -GAME( 1989, goldnaxe1, goldnaxe, system16b_5248, goldnaxe, generic_5797, ROT0, "Sega", "Golden Axe (set 1, World, FD1094 317-0110)", 0 ) +GAME( 1988, exctleag, 0, system16b_fd1094, exctleag, segas16b_state,init_exctleag_5358, ROT0, "Sega", "Excite League (FD1094 317-0079)", 0 ) -GAME( 1987, hwchamp, 0, system16b, hwchamp, hwchamp_5521, ROT0, "Sega", "Heavyweight Champ", 0 ) -GAME( 1987, hwchampj, hwchamp, system16b, hwchamp, hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (Japan, FD1094 317-0046)", 0 ) +GAME( 1989, fpoint, 0, system16b_fd1094, fpoint, segas16b_state,init_generic_5358, ROT0, "Sega", "Flash Point (set 2, Japan, FD1094 317-0127A)", 0 ) +GAME( 1989, fpoint1, fpoint, system16b_fd1094, fpoint, segas16b_state,init_generic_5704, ROT0, "Sega", "Flash Point (set 1, Japan, FD1094 317-0127A)", 0 ) -GAME( 1989, mvp, 0, system16b_5248, mvp, generic_5797, ROT0, "Sega", "MVP (set 2, US, FD1094 317-0143)", 0 ) -GAME( 1989, mvpj, mvp, system16b, mvp, generic_5704, ROT0, "Sega", "MVP (set 1, Japan, FD1094 317-0142)", 0 ) +GAME( 1989, goldnaxe, 0, system16b_i8751_5248,goldnaxe, segas16b_state,init_goldnaxe_5797, ROT0, "Sega", "Golden Axe (set 6, US, 8751 317-123A)", 0 ) +GAME( 1989, goldnaxeu, goldnaxe, system16b_fd1094_5248,goldnaxe,segas16b_state,init_generic_5797, ROT0, "Sega", "Golden Axe (set 5, US, FD1094 317-0122)", 0 ) +GAME( 1989, goldnaxej, goldnaxe, system16b_fd1094, goldnaxe, segas16b_state,init_generic_5704, ROT0, "Sega", "Golden Axe (set 4, Japan, FD1094 317-0121)", 0 ) +GAME( 1989, goldnaxe3, goldnaxe, system16b_fd1094, goldnaxe, segas16b_state,init_generic_5704, ROT0, "Sega", "Golden Axe (set 3, World, FD1094 317-0120)", 0) +GAME( 1989, goldnaxe2, goldnaxe, system16b_i8751, goldnaxe, segas16b_state,init_goldnaxe_5704, ROT0, "Sega", "Golden Axe (set 2, US, 8751 317-0112)", 0 ) +GAME( 1989, goldnaxe1, goldnaxe, system16b_fd1094_5248,goldnaxe,segas16b_state,init_generic_5797, ROT0, "Sega", "Golden Axe (set 1, World, FD1094 317-0110)", 0 ) -GAME( 1988, passsht, 0, system16b, passsht, generic_5358, ROT270, "Sega", "Passing Shot (World, 2 Players, FD1094 317-0080)", 0 ) -GAME( 1988, passshta, passsht, system16b, passshtj, passshtj_5358, ROT270, "Sega", "Passing Shot (World, 4 Players, FD1094 317-0074)", 0 ) -GAME( 1988, passshtj, passsht, system16b, passshtj, passshtj_5358, ROT270, "Sega", "Passing Shot (Japan, 4 Players, FD1094 317-0070)", 0 ) +GAME( 1987, hwchamp, 0, system16b, hwchamp, segas16b_state,init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ", 0 ) +GAME( 1987, hwchampj, hwchamp, system16b_fd1094, hwchamp, segas16b_state,init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (Japan, FD1094 317-0046)", 0 ) -GAME( 1991, riotcity, 0, system16b, riotcity, generic_5704, ROT0, "Sega / Westone", "Riot City (Japan)", 0 ) +GAME( 1989, mvp, 0, system16b_fd1094_5248,mvp, segas16b_state,init_generic_5797, ROT0, "Sega", "MVP (set 2, US, FD1094 317-0143)", 0 ) +GAME( 1989, mvpj, mvp, system16b_fd1094, mvp, segas16b_state,init_generic_5704, ROT0, "Sega", "MVP (set 1, Japan, FD1094 317-0142)", 0 ) -GAME( 1990, ryukyu, 0, system16b, ryukyu, generic_5704, ROT0, "Success / Sega", "RyuKyu (Japan, FD1094 317-5023)", 0 ) +GAME( 1988, passsht, 0, system16b_fd1094, passsht, segas16b_state,init_generic_5358, ROT270, "Sega", "Passing Shot (World, 2 Players, FD1094 317-0080)", 0 ) +GAME( 1988, passshta, passsht, system16b_fd1094, passshtj, segas16b_state,init_passshtj_5358, ROT270, "Sega", "Passing Shot (World, 4 Players, FD1094 317-0074)", 0 ) +GAME( 1988, passshtj, passsht, system16b_fd1094, passshtj, segas16b_state,init_passshtj_5358, ROT270, "Sega", "Passing Shot (Japan, 4 Players, FD1094 317-0070)", 0 ) -GAME( 1987, defense, sdi, system16b, sdi, defense_5358, ROT0, "Sega", "Defense (System 16B, FD1089A 317-0028)", 0 ) -GAME( 1987, sdib, sdi, system16b, sdi, defense_5358, ROT0, "Sega", "SDI - Strategic Defense Initiative (System 16B, FD1089A 317-0028)", 0 ) -GAME( 1987, sdibl, sdi, system16b, sdi, sdi_5358, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg)", 0 ) +GAME( 1991, riotcity, 0, system16b, riotcity, segas16b_state,init_generic_5704, ROT0, "Sega / Westone", "Riot City (Japan)", 0 ) -GAME( 1987, shinobi5, shinobi, system16b, shinobi, generic_5521, ROT0, "Sega", "Shinobi (set 5, System 16B, unprotected)", 0 ) -GAME( 1987, shinobi4, shinobi, system16b, shinobi, shinobi4_5521, ROT0, "Sega", "Shinobi (set 4, System 16B, MC-8123B 317-0054)", 0 ) -GAME( 1987, shinobi3, shinobi, system16b, shinobi, shinobi3_5358, ROT0, "Sega", "Shinobi (set 3, System 16B, MC-8123B 317-0054)", 0 ) -GAME( 1987, shinobi2, shinobi, system16b, shinobi, generic_5358, ROT0, "Sega", "Shinobi (set 2, System 16B, FD1094 317-0049)", 0 ) +GAME( 1990, ryukyu, 0, system16b_fd1094, ryukyu, segas16b_state,init_generic_5704, ROT0, "Success / Sega", "RyuKyu (Japan, FD1094 317-5023)", 0 ) -GAME( 1987, sonicbom, 0, system16b, sonicbom, generic_5358, ROT270, "Sega", "Sonic Boom (FD1094 317-0053)", 0 ) +GAME( 1987, defense, sdi, system16b_fd1089a, sdi, segas16b_state,init_defense_5358_small, ROT0, "Sega", "Defense (System 16B, FD1089A 317-0028)", 0 ) +GAME( 1987, sdib, sdi, system16b_fd1089a, sdi, segas16b_state,init_defense_5358_small, ROT0, "Sega", "SDI - Strategic Defense Initiative (System 16B, FD1089A 317-0028)", 0 ) +GAME( 1987, sdibl, sdi, system16b, sdi, segas16b_state,init_sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg)", 0 ) -GAME( 1988, sjryuko, 0, timescan, sjryuko, sjryuko_5358, ROT0, "White Board", "Sukeban Jansi Ryuko (set 2, System 16B, FD1089B 317-5021)", 0 ) +GAME( 1987, shinobi5, shinobi, system16b, shinobi, segas16b_state,init_generic_5521, ROT0, "Sega", "Shinobi (set 5, System 16B, unprotected)", 0 ) +GAME( 1987, shinobi4, shinobi, system16b, shinobi, segas16b_state,init_shinobi4_5521, ROT0, "Sega", "Shinobi (set 4, System 16B, MC-8123B 317-0054)", 0 ) +GAME( 1987, shinobi3, shinobi, system16b, shinobi, segas16b_state,init_shinobi3_5358, ROT0, "Sega", "Shinobi (set 3, System 16B, MC-8123B 317-0054)", 0 ) +GAME( 1987, shinobi2, shinobi, system16b_fd1094, shinobi, segas16b_state,init_generic_5358, ROT0, "Sega", "Shinobi (set 2, System 16B, FD1094 317-0049)", 0 ) -GAME( 1987, suprleag, 0, system16b, exctleag, exctleag_5358, ROT0, "Sega", "Super League (FD1094 317-0045)", 0 ) +GAME( 1987, sonicbom, 0, system16b_fd1094, sonicbom, segas16b_state,init_generic_5358, ROT270, "Sega", "Sonic Boom (FD1094 317-0053)", 0 ) -GAME( 1988, tetris2, tetris, system16b, tetris, generic_5704, ROT0, "Sega", "Tetris (set 2, Japan, System 16B, FD1094 317-0092)", 0 ) -GAME( 1988, tetris1, tetris, system16b, tetris, generic_5358, ROT0, "Sega", "Tetris (set 1, Japan, System 16B, FD1094 317-0091)", 0 ) +GAME( 1988, sjryuko, 0, system16b_fd1089b, sjryuko, segas16b_state,init_sjryuko_5358_small, ROT0, "White Board", "Sukeban Jansi Ryuko (set 2, System 16B, FD1089B 317-5021)", 0 ) -GAME( 1987, timescan, 0, timescan, timescan, generic_5358, ROT270, "Sega", "Time Scanner (set 2, System 16B)", 0 ) +GAME( 1987, suprleag, 0, system16b_fd1094, exctleag, segas16b_state,init_exctleag_5358, ROT0, "Sega", "Super League (FD1094 317-0045)", 0 ) -GAME( 1994, toryumon, 0, system16b_5248, toryumon, generic_5797, ROT0, "Sega", "Toryumon", 0 ) +GAME( 1988, tetris2, tetris, system16b_fd1094, tetris, segas16b_state,init_generic_5704, ROT0, "Sega", "Tetris (set 2, Japan, System 16B, FD1094 317-0092)", 0 ) +GAME( 1988, tetris1, tetris, system16b_fd1094, tetris, segas16b_state,init_generic_5358_small, ROT0, "Sega", "Tetris (set 1, Japan, System 16B, FD1094 317-0091)", 0 ) -GAME( 1989, tturf, 0, system16b_8751, tturf, tturf_5704, ROT0, "Sega / Sunsoft", "Tough Turf (set 2, Japan, 8751 317-0104)", GAME_NO_SOUND /* due to missing ROM only */) -GAME( 1989, tturfu, tturf, system16b_8751, tturf, generic_5358, ROT0, "Sega / Sunsoft", "Tough Turf (set 1, US, 8751 317-0099)", 0) +GAME( 1987, timescan, 0, system16b, timescan, segas16b_state,init_timescan_5358_small, ROT270, "Sega", "Time Scanner (set 2, System 16B)", 0 ) -GAME( 1988, wb3, 0, system16b_8751, wb3, wb3_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 5, World, System 16B, 8751 317-0098)", 0 ) -GAME( 1988, wb34, wb3, system16b, wb3, generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B, FD1094 317-0087)", 0 ) -GAME( 1988, wb33, wb3, system16b, wb3, generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 3, World, System 16B, FD1094 317-0089)", 0 ) -GAME( 1988, wb32, wb3, system16b, wb3, generic_5358, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B, FD1094 317-0085)", 0 ) +GAME( 1994, toryumon, 0, system16b_5248, toryumon, segas16b_state,init_generic_5797, ROT0, "Sega", "Toryumon", 0 ) -GAME( 1989, wrestwar, 0, system16b_8751, wrestwar, generic_5704, ROT270, "Sega", "Wrestle War (set 3, World, 8751 317-0103)", 0 ) -GAME( 1989, wrestwar2, wrestwar, system16b, wrestwar, generic_5704, ROT270, "Sega", "Wrestle War (set 2, World, FD1094 317-0102)", 0 ) -GAME( 1989, wrestwar1, wrestwar, system16b, wrestwar, generic_5704, ROT270, "Sega", "Wrestle War (set 1, Japan, FD1094 317-0090)", 0 ) +GAME( 1989, tturf, 0, system16b_i8751, tturf, segas16b_state,init_tturf_5704, ROT0, "Sega / Sunsoft", "Tough Turf (set 2, Japan, 8751 317-0104)", GAME_NO_SOUND ) // due to missing ROM only +GAME( 1989, tturfu, tturf, system16b_i8751, tturf, segas16b_state,init_generic_5358, ROT0, "Sega / Sunsoft", "Tough Turf (set 1, US, 8751 317-0099)", 0) -/* Extra RAM, dubbed by M2 as 'System 16C' */ -GAME( 2008, fantzn2x, 0, system16b, fz2, generic_5704_extra_ram, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version)", 0 ) // The 1987 copyright date shown ingame is false -GAME( 2008, fantzn2xp, fantzn2x, system16b, fz2, generic_5704_extra_ram, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype)", 0 ) // " +GAME( 1988, wb3, 0, system16b_i8751, wb3, segas16b_state,init_wb3_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 5, World, System 16B, 8751 317-0098)", 0 ) +GAME( 1988, wb34, wb3, system16b_fd1094, wb3, segas16b_state,init_generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B, FD1094 317-0087)", 0 ) +GAME( 1988, wb33, wb3, system16b_fd1094, wb3, segas16b_state,init_generic_5704, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 3, World, System 16B, FD1094 317-0089)", 0 ) +GAME( 1988, wb32, wb3, system16b_fd1094, wb3, segas16b_state,init_generic_5358, ROT0, "Sega / Westone", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B, FD1094 317-0085)", 0 ) -/* Custom Korean Board - these probably belong with the bootlegs... */ -GAME( 1990, atomicp, 0, atomicp, atomicp, atomicp, ROT0, "Philko", "Atomic Point (Korea)", 0) // korean clone board.. -GAME( 1990, snapper, 0, atomicp, snapper, snapper, ROT0, "Philko", "Snapper (Korea)", 0) // korean clone board.. +GAME( 1989, wrestwar, 0, system16b_i8751, wrestwar, segas16b_state,init_generic_5704, ROT270, "Sega", "Wrestle War (set 3, World, 8751 317-0103)", 0 ) +GAME( 1989, wrestwar2, wrestwar, system16b_fd1094, wrestwar, segas16b_state,init_generic_5704, ROT270, "Sega", "Wrestle War (set 2, World, FD1094 317-0102)", 0 ) +GAME( 1989, wrestwar1, wrestwar, system16b_fd1094, wrestwar, segas16b_state,init_generic_5704, ROT270, "Sega", "Wrestle War (set 1, Japan, FD1094 317-0090)", 0 ) + +// Extra RAM, dubbed by M2 as 'System 16C' +GAME( 2008, fantzn2x, 0, system16c, fz2, segas16b_state,init_generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version)", 0 ) // The 1987 copyright date shown ingame is false +GAME( 2008, fantzn2xp, fantzn2x, system16c, fz2, segas16b_state,init_generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype)", 0 ) // " + +// Custom Korean Board - these probably belong with the bootlegs... +GAME( 1990, atomicp, 0, atomicp, atomicp, segas16b_state,init_generic_korean, ROT0, "Philko", "Atomic Point (Korea)", 0) // korean clone board.. +GAME( 1990, snapper, 0, atomicp, snapper, segas16b_state,init_snapper, ROT0, "Philko", "Snapper (Korea)", 0) // korean clone board.. -/* ISG 'Selection Master' Type 2006 hardware +// ISG 'Selection Master' Type 2006 hardware +/* This is a 'multi-game' cart system (only the operator can select the game, via a dipswitch exposed from the cartridge) The system is designed to look like a PGM system (the ISG logo and fonts are ripped straight from original IGS material, @@ -6933,58 +6716,39 @@ removed. -/* these should probably go in a driver state derived from the Sega one */ -static UINT16 isgsm_cart_addrlatch; -static UINT32 isgsm_cart_addr; -static int isgsm_type = 0; -static UINT32 isgsm_addr; -static UINT8 isgsm_mode; -static UINT16 isgsm_addrlatch; -static UINT32 isgsm_security; -static UINT16 isgsm_securitylatch; -static UINT8 isgsm_rle_control_position = 8; -static UINT8 isgsm_rle_control_byte; -static int isgsm_rle_latched; -static UINT8 isgsm_rle_byte; -static UINT8 isgsm_read_xor; +// these should probably go in a driver state derived from the Sega one -#define ISGSM_CART_BANK "gamecart" #define ISGSM_MAIN_BANK "mainbank" -static WRITE16_HANDLER( isgsm_sound_w16 ) +WRITE16_MEMBER( isgsm_state::sound_w16 ) { - sound_w(space->machine(), data); + mapper_sound_w(data); } -static WRITE16_HANDLER( isgsm_cart_addr_high_w ) +WRITE16_MEMBER( isgsm_state::cart_addr_high_w ) { - isgsm_cart_addrlatch = data; + m_cart_addrlatch = data; } -static WRITE16_HANDLER( isgsm_cart_addr_low_w ) +WRITE16_MEMBER( isgsm_state::cart_addr_low_w ) { - isgsm_cart_addr = data | isgsm_cart_addrlatch<<16; + m_cart_addr = data | (m_cart_addrlatch << 16); } // the cart can be read here 8-bits at a time. // when reading from this port the data is xored by a fixed value depending on the cart -static READ16_HANDLER( isgsm_cart_data_r ) +READ16_MEMBER( isgsm_state::cart_data_r ) { - int size = space->machine().root_device().memregion("gamecart_rgn")->bytes(); - UINT8* rgn = space->machine().root_device().memregion("gamecart_rgn")->base(); - - isgsm_cart_addr++; - - UINT8 data = rgn[(isgsm_cart_addr&(size-1))^1]^isgsm_read_xor; - - return data; + int size = memregion("gamecart_rgn")->bytes(); + UINT8 *rgn = memregion("gamecart_rgn")->base(); + return rgn[(++m_cart_addr & (size - 1)) ^ 1] ^ m_read_xor; } -static WRITE16_HANDLER( isgsm_data_w ) +WRITE16_MEMBER( isgsm_state::data_w ) { - UINT8* dest = 0; + UINT8 *dest = 0; - // isgsm_type + // m_data_type // rrrp o?dd // // r = bit-rotation @@ -6993,18 +6757,18 @@ static WRITE16_HANDLER( isgsm_data_w ) // o = write opcodes? (not used by any dumped carts) - switch (isgsm_type&0x0f) + switch (m_data_type & 0x0f) { - case 0x0: dest = space->machine().root_device().memregion("gfx2")->base(); + case 0x0: dest = memregion("gfx2")->base(); break; - case 0x1: dest = space->machine().root_device().memregion("gfx1")->base(); + case 0x1: dest = memregion("gfx1")->base(); break; - case 0x2: dest = space->machine().root_device().memregion("soundcpu")->base(); + case 0x2: dest = memregion("soundcpu")->base(); break; - case 0x3: dest = space->machine().root_device().memregion("maincpu")->base(); + case 0x3: dest = memregion("maincpu")->base(); break; default: // no other cases? @@ -7012,10 +6776,10 @@ static WRITE16_HANDLER( isgsm_data_w ) } // pre-rotate - if ((isgsm_type&0x10) == 0x00) + if ((m_data_type & 0x10) == 0x00) { // 8-bit rotation - used by bloxeed - switch (isgsm_type&0xe0) + switch (m_data_type & 0xe0) { case 0x00: data = BITSWAP8(data,0,7,6,5,4,3,2,1); break; case 0x20: data = BITSWAP8(data,7,6,5,4,3,2,1,0); break; @@ -7040,67 +6804,65 @@ static WRITE16_HANDLER( isgsm_data_w ) // address can auto-increment or decrement, happens *before* data is written bytes_to_write = 1; - if (isgsm_mode&0x4) + if (m_data_mode & 0x4) { - if (!isgsm_rle_latched) + if (!m_rle_latched) { - if (isgsm_rle_control_position==8) + if (m_rle_control_position == 8) { - isgsm_rle_control_byte = data; - isgsm_rle_control_position = 0; + m_rle_control_byte = data; + m_rle_control_position = 0; bytes_to_write = 0; } else { - if (((isgsm_rle_control_byte<machine().root_device().memregion("gfx1")->base()) + if (dest == memregion("gfx1")->base()) { - // we need to re-decode the tiles if writing to this area to keep MAME happy - gfx_element_mark_dirty(space->machine().gfx[0], (isgsm_addr&0x1ffff)/8); + gfx_element_mark_dirty(machine().gfx[0], (m_data_addr & 0x1ffff) / 8); } } } } -static WRITE16_HANDLER( isgsm_type_w ) +WRITE16_MEMBER( isgsm_state::datatype_w ) { //printf("type set to %04x %04x\n", data, mem_mask); - isgsm_type = data; + m_data_type = data; } -static WRITE16_HANDLER( isgsm_addr_high_w ) +WRITE16_MEMBER( isgsm_state::addr_high_w ) { // this is latched, doesn't get applied until low part is written. - isgsm_addrlatch = data; + m_addr_latch = data; } -static WRITE16_HANDLER( isgsm_addr_low_w ) +WRITE16_MEMBER( isgsm_state::addr_low_w ) { // update the address and mode - isgsm_mode = (isgsm_addrlatch & 0xf000)>>12; - isgsm_addr = data | ((isgsm_addrlatch&0x0fff)<<16); + m_data_mode = (m_addr_latch & 0xf000) >> 12; + m_data_addr = data | ((m_addr_latch & 0x0fff) << 16); // also resets the RLE - isgsm_rle_control_position = 8; - isgsm_rle_control_byte = 0; - isgsm_rle_latched = 0; + m_rle_control_position = 8; + m_rle_control_byte = 0; + m_rle_latched = false; } -static WRITE16_HANDLER( isgsm_cart_security_high_w ) +WRITE16_MEMBER( isgsm_state::cart_security_high_w ) { // this is latched, doesn't get applied until low part is written. - isgsm_securitylatch = data; + m_security_latch = data; } -typedef UINT32 (*isgsm_security_callback)(UINT32 input); -isgsm_security_callback security_callback; - -static UINT32 shinfz_security(UINT32 input) +UINT32 isgsm_state::shinfz_security(UINT32 input) { return BITSWAP32(input, 19, 20, 25, 26, 15, 0, 16, 2, 8, 9, 13, 14, 31, 21, 7, 18, 11, 30, 22, 17, 3, 4, 12, 28, 29, 5, 27, 10, 23, 24, 1, 6); } -static UINT32 tetrbx_security(UINT32 input) +UINT32 isgsm_state::tetrbx_security(UINT32 input) { // no bitswap on this cart? just returns what was written return input; @@ -7172,82 +6930,74 @@ static UINT32 tetrbx_security(UINT32 input) -static WRITE16_HANDLER( isgsm_cart_security_low_w ) +WRITE16_MEMBER( isgsm_state::cart_security_low_w ) { - isgsm_security = data | isgsm_securitylatch << 16; + m_security_value = data | m_security_latch << 16; // come up with security answer // -- this probably depends on the cart. - isgsm_security = (*security_callback)(isgsm_security); + m_security_value = m_security_callback(m_security_value); } -static READ16_HANDLER( isgsm_cart_security_low_r ) +READ16_MEMBER( isgsm_state::cart_security_low_r ) { - return isgsm_security & 0xffff; + return m_security_value & 0xffff; } -static READ16_HANDLER( isgsm_cart_security_high_r ) +READ16_MEMBER( isgsm_state::cart_security_high_r ) { - return (isgsm_security>>16) & 0xffff; + return (m_security_value >> 16) & 0xffff; } -WRITE16_HANDLER( isgsm_sound_reset_w ) +WRITE16_MEMBER( isgsm_state::sound_reset_w ) { - if (data==0) + if (data == 0) { - devtag_reset( space->machine(), "soundcpu" ); - space->machine().device( "soundcpu" )->resume(SUSPEND_REASON_HALT ); + m_soundcpu->reset(); + m_soundcpu->resume(SUSPEND_REASON_HALT); } - else if (data==1) + else if (data == 1) { - devtag_reset( space->machine(), "soundcpu" ); - space->machine().device( "soundcpu" )->suspend(SUSPEND_REASON_HALT, 1 ); + m_soundcpu->reset(); + m_soundcpu->suspend(SUSPEND_REASON_HALT, 1); } } -static WRITE16_HANDLER( isgsm_main_bank_change_w ) +WRITE16_MEMBER( isgsm_state::main_bank_change_w ) { // other values on real hw have strange results, change memory mapping etc?? - if (data==1) - { - space->machine().root_device().membank(ISGSM_MAIN_BANK)->set_base(space->machine().root_device().memregion("maincpu")->base()); - } + if (data == 1) + membank(ISGSM_MAIN_BANK)->set_base(memregion("maincpu")->base()); } -static MACHINE_START( isgsm ) -{ - machine.root_device().membank(ISGSM_CART_BANK)->set_base(machine.root_device().memregion("gamecart_rgn")->base()); - machine.root_device().membank(ISGSM_MAIN_BANK)->set_base(machine.root_device().memregion("bios")->base()); -} +static ADDRESS_MAP_START( isgsm_map, AS_PROGRAM, 16, isgsm_state ) -static ADDRESS_MAP_START( isgsm_map, AS_PROGRAM, 16, segas1x_state ) - - AM_RANGE(0x000000, 0x0fffff) AM_ROMBANK(ISGSM_MAIN_BANK) // this area is ALWAYS read-only, even when the game is banked in + AM_RANGE(0x000000, 0x0fffff) AM_ROMBANK(ISGSM_MAIN_BANK) AM_REGION("bios", 0) // this area is ALWAYS read-only, even when the game is banked in AM_RANGE(0x200000, 0x23ffff) AM_RAM // used during startup for decompression - AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE_LEGACY(rom_5704_bank_w ) - AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE_LEGACY(segaic16_tileram_0_w) AM_BASE_LEGACY(&segaic16_tileram_0) - AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE_LEGACY(segaic16_textram_0_w) AM_BASE_LEGACY(&segaic16_textram_0) - AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_BASE_LEGACY(&segaic16_spriteram_0) - AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE_LEGACY(segaic16_paletteram_w) AM_BASE_LEGACY(&segaic16_paletteram) - AM_RANGE(0xC40000, 0xC43fff) AM_READWRITE_LEGACY(misc_io_r, misc_io_w) + AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE(rom_5704_bank_w) + AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE_LEGACY(segaic16_tileram_0_w) AM_SHARE("tileram") + AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE_LEGACY(segaic16_textram_0_w) AM_SHARE("textram") + AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE_LEGACY(segaic16_paletteram_w) AM_SHARE("paletteram") + AM_RANGE(0xc40000, 0xc43fff) AM_READWRITE(standard_io_r, standard_io_w) - AM_RANGE(0xe00000, 0xe00001) AM_WRITE_LEGACY(isgsm_data_w ) // writes decompressed data here (copied from RAM..) - AM_RANGE(0xe00002, 0xe00003) AM_WRITE_LEGACY(isgsm_type_w ) // selects which 'type' of data we're writing - AM_RANGE(0xe00004, 0xe00005) AM_WRITE_LEGACY(isgsm_addr_high_w ) // high address, and some mode bits - AM_RANGE(0xe00006, 0xe00007) AM_WRITE_LEGACY(isgsm_addr_low_w ) // low address + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(data_w) // writes decompressed data here (copied from RAM..) + AM_RANGE(0xe00002, 0xe00003) AM_WRITE(datatype_w) // selects which 'type' of data we're writing + AM_RANGE(0xe00004, 0xe00005) AM_WRITE(addr_high_w) // high address, and some mode bits + AM_RANGE(0xe00006, 0xe00007) AM_WRITE(addr_low_w) // low address - AM_RANGE(0xe80000, 0xe80001) AM_READ_LEGACY(isgsm_cart_data_r ) // 8-bit port that the entire cart can be read from + AM_RANGE(0xe80000, 0xe80001) AM_READ(cart_data_r) // 8-bit port that the entire cart can be read from AM_RANGE(0xe80002, 0xe80003) AM_READ_PORT("CARDDSW") - AM_RANGE(0xe80004, 0xe80005) AM_WRITE_LEGACY(isgsm_cart_addr_high_w ) - AM_RANGE(0xe80006, 0xe80007) AM_WRITE_LEGACY(isgsm_cart_addr_low_w ) - AM_RANGE(0xe80008, 0xe80009) AM_READWRITE_LEGACY(isgsm_cart_security_high_r, isgsm_cart_security_high_w ) // 32-bit bitswap device.. - AM_RANGE(0xe8000a, 0xe8000b) AM_READWRITE_LEGACY(isgsm_cart_security_low_r, isgsm_cart_security_low_w ) + AM_RANGE(0xe80004, 0xe80005) AM_WRITE(cart_addr_high_w) + AM_RANGE(0xe80006, 0xe80007) AM_WRITE(cart_addr_low_w) + AM_RANGE(0xe80008, 0xe80009) AM_READWRITE(cart_security_high_r, cart_security_high_w) // 32-bit bitswap device.. + AM_RANGE(0xe8000a, 0xe8000b) AM_READWRITE(cart_security_low_r, cart_security_low_w) - AM_RANGE(0xee0000, 0xefffff) AM_ROMBANK(ISGSM_CART_BANK) // only the first 0x20000 bytes of the cart are visible here.. + AM_RANGE(0xee0000, 0xefffff) AM_ROM AM_REGION("gamecart_rgn", 0) // only the first 0x20000 bytes of the cart are visible here.. - AM_RANGE(0xfe0006, 0xfe0007) AM_WRITE_LEGACY(isgsm_sound_w16 ) - AM_RANGE(0xfe0008, 0xfe0009) AM_WRITE_LEGACY(isgsm_sound_reset_w ) - AM_RANGE(0xfe000a, 0xfe000b) AM_WRITE_LEGACY(isgsm_main_bank_change_w ) - AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_BASE_LEGACY(&workram) + AM_RANGE(0xfe0006, 0xfe0007) AM_WRITE(sound_w16) + AM_RANGE(0xfe0008, 0xfe0009) AM_WRITE(sound_reset_w) + AM_RANGE(0xfe000a, 0xfe000b) AM_WRITE(main_bank_change_w) + AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") ADDRESS_MAP_END @@ -7359,100 +7109,71 @@ static INPUT_PORTS_START( tetrbx ) INPUT_PORTS_END -static MACHINE_RESET( isgsm ) +void isgsm_state::machine_reset() { - segaic16_tilemap_reset(machine, 0); + segaic16_tilemap_reset(machine(), 0); - /* configure sprite banks */ + // configure sprite banks for (int i = 0; i < 16; i++) - segaic16_sprites_set_bank(machine, 0, i, i); + segaic16_sprites_set_bank(machine(), 0, i, i); - machine.root_device().membank(ISGSM_CART_BANK)->set_base(machine.root_device().memregion("gamecart_rgn")->base()); - machine.root_device().membank(ISGSM_MAIN_BANK)->set_base(machine.root_device().memregion("bios")->base()); - devtag_reset( machine, "maincpu" ); + membank(ISGSM_MAIN_BANK)->set_base(memregion("bios")->base()); + m_maincpu->reset(); } -static MACHINE_CONFIG_DERIVED( isgsm, system16b ) - /* basic machine hardware */ +static MACHINE_CONFIG_DERIVED_CLASS( isgsm, system16b, isgsm_state ) + // basic machine hardware MCFG_DEVICE_REMOVE("maincpu") MCFG_CPU_ADD("maincpu", M68000, 16000000) // no obvious CPU, but seems to be clocked faster than an original system16 based on the boot times MCFG_CPU_PROGRAM_MAP(isgsm_map) MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) - - MCFG_MACHINE_START(isgsm) - MCFG_MACHINE_RESET(isgsm) - MACHINE_CONFIG_END - -DRIVER_INIT( isgsm ) +void isgsm_state::init_isgsm() { - system16b_common_init(machine, ROM_BOARD_171_5521); - - machine.device("nvram")->set_base(workram, 0x4000); + init_generic_5521(); // decrypt the bios... - UINT16* temp = (UINT16*)malloc(0x20000); - UINT16* rom = (UINT16*)machine.root_device().memregion("bios")->base(); - int i; - - for (i=0;i<0x10000;i++) - { - temp[i^0x4127] = BITSWAP16(rom[i], 6, 14, 4, 2, 12, 10, 8, 0, 1, 9, 11, 13, 3, 5, 7, 15); - } - + dynamic_array temp(0x20000/2); + UINT16 *rom = (UINT16 *)memregion("bios")->base(); + for (int addr = 0; addr < 0x20000/2; addr++) + temp[addr ^ 0x4127] = BITSWAP16(rom[addr], 6, 14, 4, 2, 12, 10, 8, 0, 1, 9, 11, 13, 3, 5, 7, 15); memcpy(rom, temp, 0x20000); - free(temp); } -DRIVER_INIT( shinfz ) +void isgsm_state::init_shinfz() { - DRIVER_INIT_CALL( isgsm ); - - UINT16* temp = (UINT16*)malloc(0x200000); - UINT16* rom = (UINT16*)machine.root_device().memregion("gamecart_rgn")->base(); - int i; - - for (i=0;i<0x100000;i++) - { - temp[i^0x68956] = BITSWAP16(rom[i], 8, 4, 12, 3, 6, 7, 1, 0, 15, 11, 5, 14, 10, 2, 9, 13); - } + init_isgsm(); + dynamic_array temp(0x200000/2); + UINT16 *rom = (UINT16 *)memregion("gamecart_rgn")->base(); + for (int addr = 0; addr < 0x200000/2; addr++) + temp[addr ^ 0x68956] = BITSWAP16(rom[addr], 8, 4, 12, 3, 6, 7, 1, 0, 15, 11, 5, 14, 10, 2, 9, 13); memcpy(rom, temp, 0x200000); - free(temp); - isgsm_read_xor = 0x66; - security_callback = &shinfz_security; + m_read_xor = 0x66; + m_security_callback = security_callback_delegate(FUNC(isgsm_state::shinfz_security), this); } -DRIVER_INIT( tetrbx ) +void isgsm_state::init_tetrbx() { - DRIVER_INIT_CALL( isgsm ); - - UINT16* temp = (UINT16*)malloc(0x80000); - UINT16* rom = (UINT16*)machine.root_device().memregion("gamecart_rgn")->base(); - int i; - - for (i=0;i<0x80000/2;i++) - { - temp[i^0x2A6E6] = BITSWAP16(rom[i], 4, 0, 12, 5, - 7, 3, 1, 14, - 10, 11, 9,6, - 15, 2, 13, 8 ); - } + init_isgsm(); + dynamic_array temp(0x80000/2); + UINT16 *rom = (UINT16 *)memregion("gamecart_rgn")->base(); + for (int addr = 0; addr < 0x80000/2; addr++) + temp[addr ^ 0x2A6E6] = BITSWAP16(rom[addr], 4, 0, 12, 5, 7, 3, 1, 14, 10, 11, 9, 6, 15, 2, 13, 8); memcpy(rom, temp, 0x80000); - free(temp); - isgsm_read_xor = 0x73; - security_callback = &tetrbx_security; + m_read_xor = 0x73; + m_security_callback = security_callback_delegate(FUNC(isgsm_state::tetrbx_security), this); } -/* other regions are filled with data from the game cartridge at run-time via port accesses */ +// other regions are filled with data from the game cartridge at run-time via port accesses #define ISGSM_BIOS \ ROM_REGION16_BE( 0x100000, "bios", 0 ) \ ROM_LOAD16_WORD_SWAP("ism2006v00.u1",0x00000,0x20000, CRC(2292585c) SHA1(97ba0e0f0be832a5114d95151e519bc027f6675b) ) \ @@ -7483,9 +7204,9 @@ ROM_END -// YEAR, NAME, PARENT, MACHINE,INPUT, INIT, MONITOR, COMPANY, FULLNAME, FLAGS -GAME( 2006, isgsm, 0, isgsm, isgsm, isgsm, ROT0, "bootleg (ISG)", "ISG Selection Master Type 2006 BIOS", GAME_IS_BIOS_ROOT ) +// YEAR, NAME, PARENT, MACHINE,INPUT, INIT, MONITOR, COMPANY, FULLNAME, FLAGS +GAME( 2006, isgsm, 0, isgsm, isgsm, isgsm_state,init_isgsm, ROT0, "bootleg (ISG)", "ISG Selection Master Type 2006 BIOS", GAME_IS_BIOS_ROOT ) /* 01 */ // ?? unknown -/* 02 */ GAME( 2006, tetrbx, isgsm, isgsm, tetrbx, tetrbx, ROT0, "bootleg (ISG)", "Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 ) -/* 03 */ GAME( 2008, shinfz, isgsm, isgsm, shinfz, shinfz, ROT0, "bootleg (ISG)", "Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 ) // claims it's released in 2006, but set includes the PS2/S16 remake of Fantasy Zone II which is clearly from 2008 +/* 02 */ GAME( 2006, tetrbx, isgsm, isgsm, tetrbx, isgsm_state,init_tetrbx, ROT0, "bootleg (ISG)", "Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 ) +/* 03 */ GAME( 2008, shinfz, isgsm, isgsm, shinfz, isgsm_state,init_shinfz, ROT0, "bootleg (ISG)", "Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 ) // claims it's released in 2006, but set includes the PS2/S16 remake of Fantasy Zone II which is clearly from 2008 diff --git a/src/mame/drivers/segas18.c b/src/mame/drivers/segas18.c index 7e56f737705..0ee6b325244 100644 --- a/src/mame/drivers/segas18.c +++ b/src/mame/drivers/segas18.c @@ -2,6 +2,37 @@ Sega System 18 hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + **************************************************************************** Known bugs: @@ -27,107 +58,89 @@ ***************************************************************************/ +#define MODERN_DRIVER_INIT + #include "emu.h" -#include "cpu/z80/z80.h" -#include "cpu/m68000/m68000.h" -#include "cpu/mcs51/mcs51.h" #include "machine/segaic16.h" #include "machine/nvram.h" #include "includes/segas16.h" #include "includes/genesis.h" #include "sound/2612intf.h" #include "sound/rf5c68.h" -#include "video/segaic16.h" #include "includes/segaipt.h" -/************************************* - * - * Constants - * - *************************************/ - -#define ROM_BOARD_171_SHADOW (0) /* 171-???? -- used by shadow dancer */ -#define ROM_BOARD_171_5874 (1) /* 171-5874 */ -#define ROM_BOARD_171_5987 (2) /* 171-5987 */ - - -/************************************* - * - * Statics - * - *************************************/ - -static UINT16 *workram; -static UINT16 has_guns; - - -/************************************* - * - * Prototypes - * - *************************************/ - -static READ16_HANDLER( misc_io_r ); -static WRITE16_HANDLER( misc_io_w ); -static WRITE16_HANDLER( rom_5987_bank_w ); - - - /************************************* * * Memory mapping tables * *************************************/ -static const segaic16_memory_map_entry rom_171_shad_info[] = +void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index) { - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x02000, 0xffe000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x10000, 0xff0000, ~0, FUNC_NULL, NULL, FUNC_NULL, NULL, NULL, "????" }, - { 0x25/2, 0x00000, 0x00010, 0xfffff0, ~0, FUNC(genesis_vdp_r), NULL, FUNC(genesis_vdp_w), NULL, NULL, "VDP" }, - { 0x21/2, 0x00000, 0x80000, 0xf80000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry rom_171_5874_info[] = -{ - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x02000, 0xffe000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x00010, 0xfffff0, ~0, FUNC(genesis_vdp_r), NULL, FUNC(genesis_vdp_w), NULL, NULL, "VDP" }, - { 0x25/2, 0x00000, 0x80000, 0xf80000, 0x80000, FUNC_NULL, "bank16", FUNC_NULL, NULL, NULL, "ROM 1" }, - { 0x21/2, 0x00000, 0x80000, 0xf80000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry rom_171_5987_info[] = -{ - { 0x3d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC(misc_io_r), NULL, FUNC(misc_io_w), NULL, NULL, "I/O space" }, - { 0x39/2, 0x00000, 0x02000, 0xffe000, ~0, FUNC_NULL, "bank10", FUNC(segaic16_paletteram_w), NULL, &segaic16_paletteram, "color RAM" }, - { 0x35/2, 0x00000, 0x10000, 0xfe0000, ~0, FUNC_NULL, "bank11", FUNC(segaic16_tileram_0_w), NULL, &segaic16_tileram_0, "tile RAM" }, - { 0x35/2, 0x10000, 0x01000, 0xfef000, ~0, FUNC_NULL, "bank12", FUNC(segaic16_textram_0_w), NULL, &segaic16_textram_0, "text RAM" }, - { 0x31/2, 0x00000, 0x00800, 0xfff800, ~0, FUNC_NULL, "bank13", FUNC_NULL, "bank13", &segaic16_spriteram_0, "object RAM" }, - { 0x2d/2, 0x00000, 0x04000, 0xffc000, ~0, FUNC_NULL, "bank14", FUNC_NULL, "bank14", &workram, "work RAM" }, - { 0x29/2, 0x00000, 0x00010, 0xfffff0, ~0, FUNC(genesis_vdp_r), NULL, FUNC(genesis_vdp_w), NULL, NULL, "VDP" }, - { 0x25/2, 0x00000, 0x80000, 0xf80000, 0x80000, FUNC_NULL, "bank16", FUNC(rom_5987_bank_w), NULL, NULL, "ROM 1/banking" }, - { 0x21/2, 0x00000, 0x100000,0xf00000, 0x00000, FUNC_NULL, "bank17", FUNC_NULL, NULL, NULL, "ROM 0" }, - { 0 } -}; - -static const segaic16_memory_map_entry *const region_info_list[] = -{ - &rom_171_shad_info[0], - &rom_171_5874_info[0], - &rom_171_5987_info[0] -}; + UINT32 romsize = m_maincpu->region()->bytes(); + switch (index) + { + case 7: + mapper.map_as_handler(0x00000, 0x04000, 0xffc000, read16_delegate(FUNC(segas18_state::misc_io_r), this), write16_delegate(FUNC(segas18_state::misc_io_w), this)); + break; + + case 6: + mapper.map_as_ram(0x00000, 0x02000, 0xffe000, "paletteram", write16_delegate(FUNC(segas18_state::legacy_wrapper), this)); + break; + + case 5: + mapper.map_as_ram(0x00000, 0x10000, 0xfe0000, "tileram", write16_delegate(FUNC(segas18_state::legacy_wrapper), this)); + mapper.map_as_ram(0x10000, 0x01000, 0xfef000, "textram", write16_delegate(FUNC(segas18_state::legacy_wrapper), this)); + break; + + case 4: + mapper.map_as_ram(0x00000, 0x00800, 0xfff800, "spriteram", write16_delegate()); + break; + + case 3: + mapper.map_as_ram(0x00000, 0x04000, 0xffc000, "workram", write16_delegate()); + break; + + case 2: + switch (m_romboard) + { + case ROM_BOARD_171_SHADOW: break; // ??? + case ROM_BOARD_171_5874: + case ROM_BOARD_171_5987: mapper.map_as_handler(0x00000, 0x00010, 0xfffff0, read16_delegate(FUNC(segas18_state::legacy_wrapper_r), this), write16_delegate(FUNC(segas18_state::legacy_wrapper), this)); break; + default: assert(false); + } + break; + + case 1: + switch (m_romboard) + { + case ROM_BOARD_171_SHADOW: mapper.map_as_handler(0x00000, 0x00010, 0xfffff0, read16_delegate(FUNC(segas18_state::legacy_wrapper_r), this), write16_delegate(FUNC(segas18_state::legacy_wrapper), this)); break; + case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", 0x80000, write16_delegate()); break; + case ROM_BOARD_171_5987: if (romsize <= 0x100000) + mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", 0x80000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this)); + else + mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom1base",0x100000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this)); + break; + default: assert(false); + } + break; + + case 0: + switch (m_romboard) + { + case ROM_BOARD_171_SHADOW: + case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate()); break; + case ROM_BOARD_171_5987: if (romsize <= 0x100000) + mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate()); + else + mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom0base", 0x00000, write16_delegate()); + break; + default: assert(false); + } + break; + } +} @@ -137,62 +150,38 @@ static const segaic16_memory_map_entry *const region_info_list[] = * *************************************/ -static void sound_w(running_machine &machine, UINT8 data) +UINT8 segas18_state::mapper_sound_r() { - segas1x_state *state = machine.driver_data(); - address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); - - state->soundlatch_byte_w(*space, 0, data & 0xff); - device_set_input_line(state->m_soundcpu, INPUT_LINE_NMI, PULSE_LINE); + return m_mcu_data; } -static UINT8 sound_r(running_machine &machine) +void segas18_state::mapper_sound_w(UINT8 data) { - segas1x_state *state = machine.driver_data(); - return state->m_mcu_data; + soundlatch_write(data & 0xff); + m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } -static void system18_generic_init(running_machine &machine, int _rom_board) +void segas18_state::init_generic(segas18_rom_board rom_board) { - segas1x_state *state = machine.driver_data(); + // set the ROM board + m_romboard = rom_board; - /* set the ROM board */ - state->m_rom_board = _rom_board; + // configure the NVRAM to point to our workram + m_nvram->set_base(m_workram, m_workram.bytes()); - /* allocate memory for regions not autmatically assigned */ - segaic16_spriteram_0 = auto_alloc_array(machine, UINT16, 0x00800/2); - segaic16_paletteram = auto_alloc_array(machine, UINT16, 0x04000/2); - segaic16_tileram_0 = auto_alloc_array(machine, UINT16, 0x10000/2); - segaic16_textram_0 = auto_alloc_array(machine, UINT16, 0x01000/2); - workram = auto_alloc_array(machine, UINT16, 0x04000/2); + // point globals to allocated memory regions + segaic16_spriteram_0 = reinterpret_cast(memshare("spriteram")->ptr()); + segaic16_paletteram = reinterpret_cast(memshare("paletteram")->ptr()); + segaic16_tileram_0 = reinterpret_cast(memshare("tileram")->ptr()); + segaic16_textram_0 = reinterpret_cast(memshare("textram")->ptr()); - /* init the memory mapper */ - segaic16_memory_mapper_init(machine.device("maincpu"), region_info_list[state->m_rom_board], sound_w, sound_r); - - /* init the FD1094 */ - fd1094_driver_init(machine, "maincpu", segaic16_memory_mapper_set_decrypted); - - /* reset the custom handlers and other pointers */ - state->m_custom_io_r = NULL; - state->m_custom_io_w = NULL; - - state->m_maincpu = machine.device("maincpu"); - state->m_soundcpu = machine.device("soundcpu"); - state->m_mcu = machine.device("mcu"); - - machine.device("nvram")->set_base(workram, 0x4000); - - state->save_item(NAME(state->m_mcu_data)); - state->save_item(NAME(state->m_lghost_value)); - state->save_item(NAME(state->m_lghost_select)); - state->save_item(NAME(state->m_misc_io_data)); - state->save_item(NAME(state->m_wwally_last_x)); - state->save_item(NAME(state->m_wwally_last_y)); - state_save_register_global_pointer(machine, segaic16_spriteram_0, 0x00800/2); - state_save_register_global_pointer(machine, segaic16_paletteram, 0x04000/2); - state_save_register_global_pointer(machine, segaic16_tileram_0, 0x10000/2); - state_save_register_global_pointer(machine, segaic16_textram_0, 0x01000/2); - state_save_register_global_pointer(machine, workram, 0x04000/2); + // save state + save_item(NAME(m_mcu_data)); + save_item(NAME(m_lghost_value)); + save_item(NAME(m_lghost_select)); + save_item(NAME(m_misc_io_data)); + save_item(NAME(m_wwally_last_x)); + save_item(NAME(m_wwally_last_y)); } @@ -203,23 +192,24 @@ static void system18_generic_init(running_machine &machine, int _rom_board) * *************************************/ -static TIMER_CALLBACK( boost_interleave ) +void segas18_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - machine.scheduler().boost_interleave(attotime::zero, attotime::from_msec(10)); + switch (id) + { + case TID_INITIAL_BOOST: + machine().scheduler().boost_interleave(attotime::zero, attotime::from_msec(10)); + break; + } } -static MACHINE_RESET( system18 ) +void segas18_state::machine_reset() { - segas1x_state *state = machine.driver_data(); + segaic16_tilemap_reset(machine(), 0); - segaic16_memory_mapper_reset(machine); - segaic16_tilemap_reset(machine, 0); - fd1094_machine_init(machine.device("maincpu")); - - /* if we are running with a real live 8751, we need to boost the interleave at startup */ - if (state->m_mcu != NULL && state->m_mcu->type() == I8751) - machine.scheduler().synchronize(FUNC(boost_interleave)); + // if we are running with a real live 8751, we need to boost the interleave at startup + if (m_mcu != NULL && m_mcu->type() == I8751) + synchronize(TID_INITIAL_BOOST); } @@ -230,15 +220,14 @@ static MACHINE_RESET( system18 ) * *************************************/ -static READ16_HANDLER( io_chip_r ) +READ16_MEMBER( segas18_state::io_chip_r ) { - segas1x_state *state = space->machine().driver_data(); static const char *const portnames[] = { "P1", "P2", "PORTC", "PORTD", "SERVICE", "COINAGE", "DSW", "PORTH" }; offset &= 0x1f/2; switch (offset) { - /* I/O ports */ + // I/O ports case 0x00/2: case 0x02/2: case 0x04/2: @@ -247,14 +236,14 @@ static READ16_HANDLER( io_chip_r ) case 0x0a/2: case 0x0c/2: case 0x0e/2: - /* if the port is configured as an output, return the last thing written */ - if (state->m_misc_io_data[0x1e/2] & (1 << offset)) - return state->m_misc_io_data[offset]; + // if the port is configured as an output, return the last thing written + if (m_misc_io_data[0x1e/2] & (1 << offset)) + return m_misc_io_data[offset]; - /* otherwise, return an input port */ - return space->machine().root_device().ioport(portnames[offset])->read(); + // otherwise, return an input port + return ioport(portnames[offset])->read(); - /* 'SEGA' protection */ + // 'SEGA' protection case 0x10/2: return 'S'; case 0x12/2: @@ -264,118 +253,108 @@ static READ16_HANDLER( io_chip_r ) case 0x16/2: return 'A'; - /* CNT register & mirror */ + // CNT register & mirror case 0x18/2: case 0x1c/2: - return state->m_misc_io_data[0x1c/2]; + return m_misc_io_data[0x1c/2]; - /* port direction register & mirror */ + // port direction register & mirror case 0x1a/2: case 0x1e/2: - return state->m_misc_io_data[0x1e/2]; + return m_misc_io_data[0x1e/2]; } return 0xffff; } -static WRITE16_HANDLER( io_chip_w ) +WRITE16_MEMBER( segas18_state::io_chip_w ) { - segas1x_state *state = space->machine().driver_data(); - UINT8 old; - - /* generic implementation */ + // generic implementation offset &= 0x1f/2; - old = state->m_misc_io_data[offset]; - state->m_misc_io_data[offset] = data; + UINT8 old = m_misc_io_data[offset]; + m_misc_io_data[offset] = data; switch (offset) { - /* I/O ports */ + // I/O ports case 0x00/2: case 0x02/2: case 0x04/2: case 0x08/2: case 0x0a/2: case 0x0c/2: - if (has_guns == 1) - /* outputs for lghost only */ - { - output_set_value("P1_Gun_Recoil",(~data & 0x01)); - output_set_value("P2_Gun_Recoil",(~data & 0x02)>>1); - output_set_value("P3_Gun_Recoil",(~data & 0x04)>>2); - } - - break; - - /* miscellaneous output */ - case 0x06/2: - system18_set_grayscale(space->machine(), ~data & 0x40); - segaic16_tilemap_set_flip(space->machine(), 0, data & 0x20); - segaic16_sprites_set_flip(space->machine(), 0, data & 0x20); -/* These are correct according to cgfm's docs, but mwalker and ddcrew both - enable the lockout and never turn it off - coin_lockout_w(space->machine(), 1, data & 0x08); - coin_lockout_w(space->machine(), 0, data & 0x04); */ - coin_counter_w(space->machine(), 1, data & 0x02); - coin_counter_w(space->machine(), 0, data & 0x01); - break; - - /* tile banking */ - case 0x0e/2: - if (state->m_rom_board == ROM_BOARD_171_5874 || state->m_rom_board == ROM_BOARD_171_SHADOW) + if (m_has_guns) { - int i; - for (i = 0; i < 4; i++) - { - segaic16_tilemap_set_bank(space->machine(), 0, 0 + i, (data & 0xf) * 4 + i); - segaic16_tilemap_set_bank(space->machine(), 0, 4 + i, ((data >> 4) & 0xf) * 4 + i); - } + // outputs for lghost only + output_set_value("P1_Gun_Recoil",(~data & 0x01)); + output_set_value("P2_Gun_Recoil",(~data & 0x02)>>1); + output_set_value("P3_Gun_Recoil",(~data & 0x04)>>2); } break; - /* CNT register */ + // miscellaneous output + case 0x06/2: + set_grayscale(~data & 0x40); + segaic16_tilemap_set_flip(machine(), 0, data & 0x20); + segaic16_sprites_set_flip(machine(), 0, data & 0x20); +// These are correct according to cgfm's docs, but mwalker and ddcrew both +// enable the lockout and never turn it off + coin_lockout_w(machine(), 1, data & 0x08); + coin_lockout_w(machine(), 0, data & 0x04); + coin_counter_w(machine(), 1, data & 0x02); + coin_counter_w(machine(), 0, data & 0x01); + break; + + // tile banking + case 0x0e/2: + if (m_romboard == ROM_BOARD_171_5874 || m_romboard == ROM_BOARD_171_SHADOW) + for (int i = 0; i < 4; i++) + { + segaic16_tilemap_set_bank(machine(), 0, 0 + i, (data & 0xf) * 4 + i); + segaic16_tilemap_set_bank(machine(), 0, 4 + i, ((data >> 4) & 0xf) * 4 + i); + } + break; + + // CNT register case 0x1c/2: - segaic16_set_display_enable(space->machine(), data & 2); + segaic16_set_display_enable(machine(), data & 2); if ((old ^ data) & 4) - system18_set_vdp_enable(space->machine(), data & 4); + set_vdp_enable(data & 4); break; } } -static READ16_HANDLER( misc_io_r ) +READ16_MEMBER( segas18_state::misc_io_r ) { - segas1x_state *state = space->machine().driver_data(); static const char *const portnames[] = { "SERVICE", "COINAGE" }; offset &= 0x1fff; switch (offset & (0x3000/2)) { - /* I/O chip */ + // I/O chip case 0x0000/2: case 0x1000/2: return io_chip_r(space, offset, mem_mask); - /* video control latch */ + // video control latch case 0x2000/2: - return space->machine().root_device().ioport(portnames[offset & 1])->read(); + return ioport(portnames[offset & 1])->read(); } - if (state->m_custom_io_r) - return state->m_custom_io_r(space, offset, mem_mask); - logerror("%06X:misc_io_r - unknown read access to address %04X\n", cpu_get_pc(&space->device()), offset * 2); - return segaic16_open_bus_r(space, 0, mem_mask); + if (!m_custom_io_r.isnull()) + return m_custom_io_r(space, offset, mem_mask); + logerror("%06X:misc_io_r - unknown read access to address %04X\n", cpu_get_pc(&space.device()), offset * 2); + return segaic16_open_bus_r(&space, 0, mem_mask); } -static WRITE16_HANDLER( misc_io_w ) +WRITE16_MEMBER( segas18_state::misc_io_w ) { - segas1x_state *state = space->machine().driver_data(); - offset &= 0x1fff; switch (offset & (0x3000/2)) { - /* I/O chip */ + // I/O chip case 0x0000/2: case 0x1000/2: if (ACCESSING_BITS_0_7) @@ -385,21 +364,21 @@ static WRITE16_HANDLER( misc_io_w ) } break; - /* video control latch */ + // video control latch case 0x2000/2: if (ACCESSING_BITS_0_7) { - system18_set_vdp_mixing(space->machine(), data & 0xff); + set_vdp_mixing(data & 0xff); return; } break; } - if (state->m_custom_io_w) + if (!m_custom_io_w.isnull()) { - state->m_custom_io_w(space, offset, data, mem_mask); + m_custom_io_w(space, offset, data, mem_mask); return; } - logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space->device()), offset * 2, data, mem_mask); + logerror("%06X:misc_io_w - unknown write access to address %04X = %04X & %04X\n", cpu_get_pc(&space.device()), offset * 2, data, mem_mask); } @@ -410,30 +389,30 @@ static WRITE16_HANDLER( misc_io_w ) * *************************************/ -static WRITE16_HANDLER( rom_5987_bank_w ) +WRITE16_MEMBER( segas18_state::rom_5987_bank_w ) { if (!ACCESSING_BITS_0_7) return; offset &= 0xf; data &= 0xff; - /* tile banking */ + // tile banking if (offset < 8) { - int maxbanks = space->machine().gfx[0]->total_elements / 1024; + int maxbanks = machine().gfx[0]->total_elements / 1024; if (data >= maxbanks) data %= maxbanks; - segaic16_tilemap_set_bank(space->machine(), 0, offset, data); + segaic16_tilemap_set_bank(machine(), 0, offset, data); } - /* sprite banking */ + // sprite banking else { - int maxbanks = space->machine().root_device().memregion("gfx2")->bytes() / 0x40000; + int maxbanks = memregion("gfx2")->bytes() / 0x40000; if (data >= maxbanks) data = 255; - segaic16_sprites_set_bank(space->machine(), 0, (offset - 8) * 2 + 0, data * 2 + 0); - segaic16_sprites_set_bank(space->machine(), 0, (offset - 8) * 2 + 1, data * 2 + 1); + segaic16_sprites_set_bank(machine(), 0, (offset - 8) * 2 + 0, data * 2 + 0); + segaic16_sprites_set_bank(machine(), 0, (offset - 8) * 2 + 1, data * 2 + 1); } } @@ -445,20 +424,20 @@ static WRITE16_HANDLER( rom_5987_bank_w ) * *************************************/ -static READ16_HANDLER( ddcrew_custom_io_r ) +READ16_MEMBER( segas18_state::ddcrew_custom_io_r ) { switch (offset) { case 0x3020/2: - return space->machine().root_device().ioport("P3")->read(); + return ioport("P3")->read(); case 0x3022/2: - return space->machine().root_device().ioport("P4")->read(); + return ioport("P4")->read(); case 0x3024/2: - return space->machine().root_device().ioport("P34START")->read(); + return ioport("P34START")->read(); } - return segaic16_open_bus_r(space, 0, mem_mask); + return segaic16_open_bus_r(&space, 0, mem_mask); } @@ -469,9 +448,8 @@ static READ16_HANDLER( ddcrew_custom_io_r ) * *************************************/ -static READ16_HANDLER( lghost_custom_io_r ) +READ16_MEMBER( segas18_state::lghost_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); UINT16 result; switch (offset) { @@ -479,38 +457,36 @@ static READ16_HANDLER( lghost_custom_io_r ) case 0x3012/2: case 0x3014/2: case 0x3016/2: - result = state->m_lghost_value | 0x7f; - state->m_lghost_value <<= 1; + result = m_lghost_value | 0x7f; + m_lghost_value <<= 1; return result; } - return segaic16_open_bus_r(space, 0, mem_mask); + return segaic16_open_bus_r(&space, 0, mem_mask); } -static WRITE16_HANDLER( lghost_custom_io_w ) +WRITE16_MEMBER( segas18_state::lghost_custom_io_w ) { - segas1x_state *state = space->machine().driver_data(); - switch (offset) { case 0x3010/2: - state->m_lghost_value = 255 - state->ioport("GUNY1")->read(); + m_lghost_value = 255 - ioport("GUNY1")->read(); break; case 0x3012/2: - state->m_lghost_value = state->ioport("GUNX1")->read(); + m_lghost_value = ioport("GUNX1")->read(); break; case 0x3014/2: - state->m_lghost_value = 255 - state->ioport(state->m_lghost_select ? "GUNY3" : "GUNY2")->read(); + m_lghost_value = 255 - ioport(m_lghost_select ? "GUNY3" : "GUNY2")->read(); break; case 0x3016/2: - state->m_lghost_value = state->ioport(state->m_lghost_select ? "GUNX3" : "GUNX2")->read(); + m_lghost_value = ioport(m_lghost_select ? "GUNX3" : "GUNX2")->read(); break; case 0x3020/2: - state->m_lghost_select = data & 1; + m_lghost_select = data & 1; break; } } @@ -523,56 +499,52 @@ static WRITE16_HANDLER( lghost_custom_io_w ) * *************************************/ -static READ16_HANDLER( wwally_custom_io_r ) +READ16_MEMBER( segas18_state::wwally_custom_io_r ) { - segas1x_state *state = space->machine().driver_data(); - switch (offset) { case 0x3000/2: - return (state->ioport("TRACKX1")->read() - state->m_wwally_last_x[0]) & 0xff; + return (ioport("TRACKX1")->read() - m_wwally_last_x[0]) & 0xff; case 0x3004/2: - return (state->ioport("TRACKY1")->read() - state->m_wwally_last_y[0]) & 0xff; + return (ioport("TRACKY1")->read() - m_wwally_last_y[0]) & 0xff; case 0x3008/2: - return (state->ioport("TRACKX2")->read() - state->m_wwally_last_x[1]) & 0xff; + return (ioport("TRACKX2")->read() - m_wwally_last_x[1]) & 0xff; case 0x300c/2: - return (state->ioport("TRACKY2")->read() - state->m_wwally_last_y[1]) & 0xff; + return (ioport("TRACKY2")->read() - m_wwally_last_y[1]) & 0xff; case 0x3010/2: - return (state->ioport("TRACKX3")->read() - state->m_wwally_last_x[2]) & 0xff; + return (ioport("TRACKX3")->read() - m_wwally_last_x[2]) & 0xff; case 0x3014/2: - return (state->ioport("TRACKY3")->read() - state->m_wwally_last_y[2]) & 0xff; + return (ioport("TRACKY3")->read() - m_wwally_last_y[2]) & 0xff; } - return segaic16_open_bus_r(space, 0, mem_mask); + return segaic16_open_bus_r(&space, 0, mem_mask); } -static WRITE16_HANDLER( wwally_custom_io_w ) +WRITE16_MEMBER( segas18_state::wwally_custom_io_w ) { - segas1x_state *state = space->machine().driver_data(); - switch (offset) { case 0x3000/2: case 0x3004/2: - state->m_wwally_last_x[0] = state->ioport("TRACKX1")->read(); - state->m_wwally_last_y[0] = state->ioport("TRACKY1")->read(); + m_wwally_last_x[0] = ioport("TRACKX1")->read(); + m_wwally_last_y[0] = ioport("TRACKY1")->read(); break; case 0x3008/2: case 0x300c/2: - state->m_wwally_last_x[1] = state->ioport("TRACKX2")->read(); - state->m_wwally_last_y[1] = state->ioport("TRACKY2")->read(); + m_wwally_last_x[1] = ioport("TRACKX2")->read(); + m_wwally_last_y[1] = ioport("TRACKY2")->read(); break; case 0x3010/2: case 0x3014/2: - state->m_wwally_last_x[2] = state->ioport("TRACKX3")->read(); - state->m_wwally_last_y[2] = state->ioport("TRACKY3")->read(); + m_wwally_last_x[2] = ioport("TRACKX3")->read(); + m_wwally_last_y[2] = ioport("TRACKY3")->read(); break; } } @@ -585,17 +557,16 @@ static WRITE16_HANDLER( wwally_custom_io_w ) * *************************************/ -static WRITE8_HANDLER( soundbank_w ) +WRITE8_MEMBER( segas18_state::soundbank_w ) { - space->machine().root_device().membank("bank1")->set_base(space->machine().root_device().memregion("soundcpu")->base() + 0x10000 + 0x2000 * data); + membank("bank1")->set_base(memregion("soundcpu")->base() + 0x10000 + 0x2000 * data); } -static WRITE8_HANDLER( mcu_data_w ) +WRITE8_MEMBER( segas18_state::mcu_data_w ) { - segas1x_state *state = space->machine().driver_data(); - state->m_mcu_data = data; - device_set_input_line(state->m_mcu, MCS51_INT1_LINE, HOLD_LINE); + m_mcu_data = data; + m_mcu->set_input_line(MCS51_INT1_LINE, HOLD_LINE); } @@ -606,9 +577,17 @@ static WRITE8_HANDLER( mcu_data_w ) * *************************************/ -static ADDRESS_MAP_START( system18_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( system18_map, AS_PROGRAM, 16, segas18_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0xffffff) AM_READWRITE_LEGACY(segaic16_memory_mapper_lsb_r, segaic16_memory_mapper_lsb_w) + AM_RANGE(0x000000, 0xffffff) AM_DEVREADWRITE8("mapper", sega_315_5195_mapper_device, read, write, 0x00ff) + + // these get overwritten by the memory mapper above, but we put them here + // so they are properly allocated and tracked for saving + AM_RANGE(0x100000, 0x1007ff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0x200000, 0x201fff) AM_RAM AM_SHARE("paletteram") + AM_RANGE(0x300000, 0x30ffff) AM_RAM AM_SHARE("tileram") + AM_RANGE(0x400000, 0x400fff) AM_RAM AM_SHARE("textram") + AM_RANGE(0x500000, 0x503fff) AM_RAM AM_SHARE("workram") ADDRESS_MAP_END @@ -619,7 +598,7 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas18_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x9fff) AM_ROM AM_REGION("soundcpu", 0x10000) AM_RANGE(0xa000, 0xbfff) AM_ROMBANK("bank1") @@ -628,13 +607,13 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_state ) AM_RANGE(0xe000, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas18_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x80, 0x83) AM_MIRROR(0x0c) AM_DEVREADWRITE_LEGACY("ym1", ym3438_r, ym3438_w) AM_RANGE(0x90, 0x93) AM_MIRROR(0x0c) AM_DEVREADWRITE_LEGACY("ym2", ym3438_r, ym3438_w) - AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x1f) AM_WRITE_LEGACY(soundbank_w) - AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x1f) AM_READ(soundlatch_byte_r) AM_WRITE_LEGACY(mcu_data_w) + AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x1f) AM_WRITE(soundbank_w) + AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x1f) AM_READ(soundlatch_byte_r) AM_WRITE(mcu_data_w) ADDRESS_MAP_END @@ -645,10 +624,10 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, segas18_state ) ADDRESS_MAP_UNMAP_HIGH - /* port 2 not used for high order address byte */ - AM_RANGE(0x0000, 0x001f) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(segaic16_memory_mapper_r, segaic16_memory_mapper_w) + // port 2 not used for high order address byte + AM_RANGE(0x0000, 0x001f) AM_MIRROR(0xff00) AM_DEVREADWRITE("mapper", sega_315_5195_mapper_device, read, write) ADDRESS_MAP_END @@ -799,11 +778,11 @@ static INPUT_PORTS_START( bloxeed ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("DSW") - PORT_DIPNAME( 0x03, 0x03, "Price Type" ) PORT_DIPLOCATION("SW2:1,2") /* Normal game | VS Mode */ - PORT_DIPSETTING( 0x03, "A" ) /* 1 Start / 1 Continue | 2 Start / 1 Continue */ - PORT_DIPSETTING( 0x02, "B" ) /* 1 Start / 1 Continue | 1 Start / 1 Continue */ - PORT_DIPSETTING( 0x01, "C" ) /* 2 Start / 1 Continue | 4 Start / 2 Continue */ - PORT_DIPSETTING( 0x00, "D" ) /* 2 Start / 1 Continue | 2 Start / 2 Continue */ + PORT_DIPNAME( 0x03, 0x03, "Price Type" ) PORT_DIPLOCATION("SW2:1,2") // Normal game | VS Mode + PORT_DIPSETTING( 0x03, "A" ) // 1 Start / 1 Continue | 2 Start / 1 Continue + PORT_DIPSETTING( 0x02, "B" ) // 1 Start / 1 Continue | 1 Start / 1 Continue + PORT_DIPSETTING( 0x01, "C" ) // 2 Start / 1 Continue | 4 Start / 2 Continue + PORT_DIPSETTING( 0x00, "D" ) // 2 Start / 1 Continue | 2 Start / 2 Continue //"SW2:3" unused PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) @@ -999,7 +978,7 @@ static INPUT_PORTS_START( lghost ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) /* P2 joystick inputs, unused in lghost */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // P2 joystick inputs, unused in lghost PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -1224,9 +1203,9 @@ GFXDECODE_END * *************************************/ -static MACHINE_CONFIG_START( system18, segas1x_state ) +static MACHINE_CONFIG_START( system18, segas18_state ) - /* basic machine hardware */ + // basic machine hardware MCFG_CPU_ADD("maincpu", M68000, 10000000) MCFG_CPU_PROGRAM_MAP(system18_map) MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) @@ -1235,24 +1214,23 @@ static MACHINE_CONFIG_START( system18, segas1x_state ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_IO_MAP(sound_portmap) - MCFG_MACHINE_RESET(system18) MCFG_NVRAM_ADD_0FILL("nvram") - /* video hardware */ + MCFG_SEGA_315_5195_MAPPER_ADD("mapper", "maincpu", segas18_state, memory_mapper, mapper_sound_r, mapper_sound_w) + + // video hardware MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57.23) /* verified on pcb */ + MCFG_SCREEN_REFRESH_RATE(57.23) // verified on pcb MCFG_SCREEN_SIZE(342,262) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_STATIC(system18) + MCFG_SCREEN_UPDATE_DRIVER(segas18_state, screen_update) MCFG_GFXDECODE(segas18) MCFG_PALETTE_LENGTH(2048*3+2048) - MCFG_VIDEO_START(system18) - MCFG_SEGA16SP_ADD_16B("segaspr1") - /* sound hardware */ + // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ym1", YM3438, 8000000) @@ -1266,13 +1244,19 @@ static MACHINE_CONFIG_START( system18, segas1x_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( system18_8751, system18 ) +static MACHINE_CONFIG_DERIVED( system18_fd1094, system18 ) + MCFG_CPU_REPLACE("maincpu", FD1094, 10000000) + MCFG_CPU_PROGRAM_MAP(system18_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( system18_fd1094_i8751, system18_fd1094 ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_VBLANK_INT(NULL, NULL) MCFG_CPU_ADD("mcu", I8751, 8000000) MCFG_CPU_IO_MAP(mcu_io_map) - MCFG_CPU_VBLANK_INT("screen", irq0_line_hold) + MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas18_state, irq0_line_hold) MACHINE_CONFIG_END @@ -1291,19 +1275,19 @@ MACHINE_CONFIG_END ROM Board: 171-5873B */ ROM_START( astorm ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x080000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13182.a6", 0x000000, 0x40000, CRC(e31f2a1c) SHA1(690ee10c36e5bb6175470fb5564527e0e4a94d2c) ) ROM_LOAD16_BYTE( "epr-13181.a5", 0x000001, 0x40000, CRC(78cd3b26) SHA1(a81b807c5da625d8e4648ae80c41e4ca3870c0fa) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0154.key", 0x0000, 0x2000, CRC(b86b6b8f) SHA1(869405383d563a3f3842c89462a7b2e184928532) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-13073.bin", 0x00000, 0x40000, CRC(df5d0a61) SHA1(79ad71de348f280bad847566c507b7a31f022292) ) ROM_LOAD( "epr-13074.bin", 0x40000, 0x40000, CRC(787afab8) SHA1(a119042bb2dad54e9733bfba4eaab0ac5fc0f9e7) ) ROM_LOAD( "epr-13075.bin", 0x80000, 0x40000, CRC(4e01b477) SHA1(4178ce4a87ea427c3b0195e64acef6cddfb3485f) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13082.bin", 0x000001, 0x40000, CRC(a782b704) SHA1(ba15bdfbc267b8d86f03e5310ce60846ff846de3) ) ROM_LOAD16_BYTE( "mpr-13089.bin", 0x000000, 0x40000, CRC(2a4227f0) SHA1(47284dce8f896f8e8eace9c20302842cacb479c1) ) ROM_LOAD16_BYTE( "mpr-13081.bin", 0x080001, 0x40000, CRC(eb510228) SHA1(4cd387b160ec7050e1300ebe708853742169e643) ) @@ -1313,7 +1297,7 @@ ROM_START( astorm ) ROM_LOAD16_BYTE( "epr-13079.bin", 0x180001, 0x40000, CRC(de9221ed) SHA1(5e2e434d1aa547be1e5652fc906d2e18c5122023) ) ROM_LOAD16_BYTE( "epr-13086.bin", 0x180000, 0x40000, CRC(8c9a71c4) SHA1(40b774765ac888792aad46b6351a24b7ef40d2dc) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13083a.bin", 0x010000, 0x20000, CRC(e7528e06) SHA1(1f4e618692c20aeb316d578c5ded12440eb072ab) ) ROM_LOAD( "epr-13076.bin", 0x090000, 0x40000, CRC(94e6c76e) SHA1(f99e58a9bf372c41af211bd9b9ea3ac5b924c6ed) ) ROM_LOAD( "epr-13077.bin", 0x110000, 0x40000, CRC(e2ec0d8d) SHA1(225b0d223b7282cba7710300a877fb4a2c6dbabb) ) @@ -1327,19 +1311,19 @@ ROM_END Game numbers: 833-7379-02 (main pcb: 834-7381-02, rom pcb: 834-7380-02) */ ROM_START( astorm3 ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x080000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13165.a6", 0x000000, 0x40000, CRC(6efcd381) SHA1(547c6703a34c3b9b887f5a63ec59a7055067bf3b) ) ROM_LOAD16_BYTE( "epr-13164.a5", 0x000001, 0x40000, CRC(97d693c6) SHA1(1a9aa98b32aae9367ed897e6931b2633b11b079e) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0148.key", 0x0000, 0x2000, CRC(72e4b64a) SHA1(945580d0cf25691370e9f2056cdffc01331d54ad) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-13073.bin", 0x00000, 0x40000, CRC(df5d0a61) SHA1(79ad71de348f280bad847566c507b7a31f022292) ) ROM_LOAD( "epr-13074.bin", 0x40000, 0x40000, CRC(787afab8) SHA1(a119042bb2dad54e9733bfba4eaab0ac5fc0f9e7) ) ROM_LOAD( "epr-13075.bin", 0x80000, 0x40000, CRC(4e01b477) SHA1(4178ce4a87ea427c3b0195e64acef6cddfb3485f) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13082.bin", 0x000001, 0x40000, CRC(a782b704) SHA1(ba15bdfbc267b8d86f03e5310ce60846ff846de3) ) ROM_LOAD16_BYTE( "mpr-13089.bin", 0x000000, 0x40000, CRC(2a4227f0) SHA1(47284dce8f896f8e8eace9c20302842cacb479c1) ) ROM_LOAD16_BYTE( "mpr-13081.bin", 0x080001, 0x40000, CRC(eb510228) SHA1(4cd387b160ec7050e1300ebe708853742169e643) ) @@ -1349,7 +1333,7 @@ ROM_START( astorm3 ) ROM_LOAD16_BYTE( "epr-13079.bin", 0x180001, 0x40000, CRC(de9221ed) SHA1(5e2e434d1aa547be1e5652fc906d2e18c5122023) ) ROM_LOAD16_BYTE( "epr-13086.bin", 0x180000, 0x40000, CRC(8c9a71c4) SHA1(40b774765ac888792aad46b6351a24b7ef40d2dc) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13083.bin", 0x010000, 0x20000, CRC(5df3af20) SHA1(e49105fcfd5bf37d14bd760f6adca5ce2412883d) ) ROM_LOAD( "epr-13076.bin", 0x090000, 0x40000, CRC(94e6c76e) SHA1(f99e58a9bf372c41af211bd9b9ea3ac5b924c6ed) ) ROM_LOAD( "epr-13077.bin", 0x110000, 0x40000, CRC(e2ec0d8d) SHA1(225b0d223b7282cba7710300a877fb4a2c6dbabb) ) @@ -1361,19 +1345,19 @@ ROM_END CPU: FD1094 (317-0147) */ ROM_START( astormu ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x080000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13095.a6", 0x000000, 0x40000, CRC(55d40742) SHA1(c30fcd7da1fe062b1f00275dc8ac79c3c619b719) ) ROM_LOAD16_BYTE( "epr-13094.a5", 0x000001, 0x40000, CRC(92b305f9) SHA1(d24a1de619d29a8f6ff9dfce455c2c7d6457ddbe) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0147.key", 0x0000, 0x2000, CRC(3fd54ba7) SHA1(2d74f44f2ed779ed2b119b4fc0bc844d90678c74) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-13073.bin", 0x00000, 0x40000, CRC(df5d0a61) SHA1(79ad71de348f280bad847566c507b7a31f022292) ) ROM_LOAD( "epr-13074.bin", 0x40000, 0x40000, CRC(787afab8) SHA1(a119042bb2dad54e9733bfba4eaab0ac5fc0f9e7) ) ROM_LOAD( "epr-13075.bin", 0x80000, 0x40000, CRC(4e01b477) SHA1(4178ce4a87ea427c3b0195e64acef6cddfb3485f) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13082.bin", 0x000001, 0x40000, CRC(a782b704) SHA1(ba15bdfbc267b8d86f03e5310ce60846ff846de3) ) ROM_LOAD16_BYTE( "mpr-13089.bin", 0x000000, 0x40000, CRC(2a4227f0) SHA1(47284dce8f896f8e8eace9c20302842cacb479c1) ) ROM_LOAD16_BYTE( "mpr-13081.bin", 0x080001, 0x40000, CRC(eb510228) SHA1(4cd387b160ec7050e1300ebe708853742169e643) ) @@ -1383,7 +1367,7 @@ ROM_START( astormu ) ROM_LOAD16_BYTE( "epr-13079.bin", 0x180001, 0x40000, CRC(de9221ed) SHA1(5e2e434d1aa547be1e5652fc906d2e18c5122023) ) ROM_LOAD16_BYTE( "epr-13086.bin", 0x180000, 0x40000, CRC(8c9a71c4) SHA1(40b774765ac888792aad46b6351a24b7ef40d2dc) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13083.bin", 0x010000, 0x20000, CRC(5df3af20) SHA1(e49105fcfd5bf37d14bd760f6adca5ce2412883d) ) ROM_LOAD( "epr-13076.bin", 0x090000, 0x40000, CRC(94e6c76e) SHA1(f99e58a9bf372c41af211bd9b9ea3ac5b924c6ed) ) ROM_LOAD( "epr-13077.bin", 0x110000, 0x40000, CRC(e2ec0d8d) SHA1(225b0d223b7282cba7710300a877fb4a2c6dbabb) ) @@ -1396,19 +1380,19 @@ ROM_END ROM Board: 171-5873B */ ROM_START( astormj ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x080000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13085.a6", 0x000000, 0x40000, CRC(15f74e2d) SHA1(30d9d099ec18907edd3d20df312565c3bd5a80de) ) ROM_LOAD16_BYTE( "epr-13084.a5", 0x000001, 0x40000, CRC(9687b38f) SHA1(cdeb5b4f06ad4ad8ca579392c1ec901487b08e76) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0146.key", 0x0000, 0x2000, CRC(e94991c5) SHA1(c9a8b56e01792654436f24b219d7a92c0852461f) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-13073.bin", 0x00000, 0x40000, CRC(df5d0a61) SHA1(79ad71de348f280bad847566c507b7a31f022292) ) ROM_LOAD( "epr-13074.bin", 0x40000, 0x40000, CRC(787afab8) SHA1(a119042bb2dad54e9733bfba4eaab0ac5fc0f9e7) ) ROM_LOAD( "epr-13075.bin", 0x80000, 0x40000, CRC(4e01b477) SHA1(4178ce4a87ea427c3b0195e64acef6cddfb3485f) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13082.bin", 0x000001, 0x40000, CRC(a782b704) SHA1(ba15bdfbc267b8d86f03e5310ce60846ff846de3) ) ROM_LOAD16_BYTE( "mpr-13089.bin", 0x000000, 0x40000, CRC(2a4227f0) SHA1(47284dce8f896f8e8eace9c20302842cacb479c1) ) ROM_LOAD16_BYTE( "mpr-13081.bin", 0x080001, 0x40000, CRC(eb510228) SHA1(4cd387b160ec7050e1300ebe708853742169e643) ) @@ -1418,7 +1402,7 @@ ROM_START( astormj ) ROM_LOAD16_BYTE( "epr-13079.bin", 0x180001, 0x40000, CRC(de9221ed) SHA1(5e2e434d1aa547be1e5652fc906d2e18c5122023) ) ROM_LOAD16_BYTE( "epr-13086.bin", 0x180000, 0x40000, CRC(8c9a71c4) SHA1(40b774765ac888792aad46b6351a24b7ef40d2dc) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13083.bin", 0x010000, 0x20000, CRC(5df3af20) SHA1(e49105fcfd5bf37d14bd760f6adca5ce2412883d) ) ROM_LOAD( "epr-13076.bin", 0x090000, 0x40000, CRC(94e6c76e) SHA1(f99e58a9bf372c41af211bd9b9ea3ac5b924c6ed) ) ROM_LOAD( "epr-13077.bin", 0x110000, 0x40000, CRC(e2ec0d8d) SHA1(225b0d223b7282cba7710300a877fb4a2c6dbabb) ) @@ -1434,23 +1418,23 @@ ROM_END ROM Board: 171-5874B */ ROM_START( bloxeed ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12911.a6", 0x000000, 0x20000, CRC(a481581a)SHA1(5ce5a0a082622919d2fe0e7d52ec807b2e2c25a2) ) ROM_LOAD16_BYTE( "epr-12910.a5", 0x000001, 0x20000, CRC(dd1bc3bf)SHA1(c0d79862a349ea4dac103c17325633c5dd4a93d1) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0139.key", 0x0000, 0x2000, CRC(9aae84cb)SHA1(806515d61ecacb260b2b5e5fe023b494d35ce315) ) - ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x30000, "gfx1", 0 ) // tiles ROM_LOAD( "opr-12884.b1", 0x00000, 0x10000, CRC(e024aa33)SHA1(d734be240cd05031aaadf9735c0b1b00e8e6d4cb) ) ROM_LOAD( "opr-12885.b2", 0x10000, 0x10000, CRC(8041b814)SHA1(29fa49ba9a73eed07865a86ea774e2c6a60aed5b) ) ROM_LOAD( "opr-12886.b3", 0x20000, 0x10000, CRC(de32285e)SHA1(8994dc128d6a23763e5fcfca1868b336d4aa0a21) ) - ROM_REGION( 0x20000, "gfx2", 0 ) /* sprites */ + ROM_REGION( 0x20000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "opr-12891.a11", 0x00001, 0x10000, CRC(90d31a8c)SHA1(1747652a5109ce65add197cf06535f2463a99fdc) ) ROM_LOAD16_BYTE( "opr-12887.b11", 0x00000, 0x10000, CRC(f0c0f49d)SHA1(7ecd591265165f3149241e2ceb5059faab88360f) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-12888.a4", 0x010000, 0x20000, CRC(6f2fc63c)SHA1(3cce22c8f80013f05b5a2d36c42a61a81e4d6cbd) ) ROM_END @@ -1466,21 +1450,21 @@ ROM_END rom No. 834-7917-01 */ ROM_START( cltchitr ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-13794.a4", 0x000000, 0x40000, CRC(c8d80233) SHA1(69cdbb989f580abbb006820347becf8d233fa773) ) - ROM_LOAD16_BYTE( "epr-13795.a6", 0x000001, 0x40000, CRC(b0b60b67) SHA1(ee3325ddb7461008f556c1696157a766225b9ef5) ) - ROM_LOAD16_BYTE( "epr-13784.a5", 0x200000, 0x40000, CRC(80c8180d) SHA1(80e72ab7d97714009fd31b3d50176af84b0dcdb7) ) - ROM_LOAD16_BYTE( "epr-13786.a7", 0x200001, 0x40000, CRC(3095dac0) SHA1(20edce74b6f2a82a3865613e601a0e212615d0e4) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-13794.a4", 0x00000, 0x40000, CRC(c8d80233) SHA1(69cdbb989f580abbb006820347becf8d233fa773) ) + ROM_LOAD16_BYTE( "epr-13795.a6", 0x00001, 0x40000, CRC(b0b60b67) SHA1(ee3325ddb7461008f556c1696157a766225b9ef5) ) + ROM_LOAD16_BYTE( "epr-13784.a5", 0x80000, 0x40000, CRC(80c8180d) SHA1(80e72ab7d97714009fd31b3d50176af84b0dcdb7) ) + ROM_LOAD16_BYTE( "epr-13786.a7", 0x80001, 0x40000, CRC(3095dac0) SHA1(20edce74b6f2a82a3865613e601a0e212615d0e4) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0176.key", 0x0000, 0x2000, CRC(9b072430) SHA1(3bc1c7a6d71b4351a42d85e68e70715a7659c096) ) - ROM_REGION( 0x180000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x180000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-13773.c1", 0x000000, 0x80000, CRC(3fc600e5) SHA1(8bec4ecf6a4e4b38d13133960036a5a4800a668e) ) ROM_LOAD( "mpr-13774.c2", 0x080000, 0x80000, CRC(2411a824) SHA1(0e383ccc4e0830ffb395d5102e2950610c147007) ) ROM_LOAD( "mpr-13775.c3", 0x100000, 0x80000, CRC(cf527bf6) SHA1(1f9cf1f0e92709f0465dc97ebbdaa715a419f7a7) ) - ROM_REGION16_BE( 0x600000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x600000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13779.c10", 0x000001, 0x80000, CRC(c707f416) SHA1(e6a9d89849f7f1c303a3ca29a629f81397945a2d) ) ROM_LOAD16_BYTE( "mpr-13787.a10", 0x000000, 0x80000, CRC(f05c68c6) SHA1(b6a0535b6c734a0c89fdb6506c32ffe6ab3aa8cd) ) ROM_LOAD16_BYTE( "mpr-13780.c11", 0x200001, 0x80000, CRC(a4c341e0) SHA1(15a0b5a42b56465a7b7df98968cc2ed177ce6f59) ) @@ -1488,7 +1472,7 @@ ROM_START( cltchitr ) ROM_LOAD16_BYTE( "mpr-13781.c12", 0x400001, 0x80000, CRC(f33b13af) SHA1(d3eb64dcf12d532454bf3cd6c86528c0f11ee316) ) ROM_LOAD16_BYTE( "mpr-13789.a12", 0x400000, 0x80000, CRC(09ba8835) SHA1(72e83dd1793a7f4b2b881e71f262493e3d4992b3) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13793.c7", 0x010000, 0x80000, CRC(a3d31944) SHA1(44d17aa0598eacfac4b12c8955fd1067ca09abbd) ) ROM_LOAD( "epr-13792.c6", 0x090000, 0x80000, CRC(808f9695) SHA1(d50677d20083ad56dbf0864db05f76f93a4e9eba) ) ROM_LOAD( "epr-13791.c5", 0x110000, 0x80000, CRC(35c16d80) SHA1(7ed04600748c5efb63e25f066daa163e9c0d8038) ) @@ -1500,33 +1484,33 @@ ROM_END ROM Board: 171-???? */ ROM_START( cltchitrj ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-13783.a4", 0x000000, 0x40000, CRC(e2a1d5af) SHA1(cb6710fe2093889d5d159eaf55a3bd95c6f2ef87) ) - ROM_LOAD16_BYTE( "epr-13796.a6", 0x000001, 0x40000, CRC(06001c67) SHA1(3aa48631013e6dc55e4c1d222b465e6b41ece36b) ) - ROM_LOAD16_BYTE( "epr-13785.a5", 0x200000, 0x40000, CRC(09714762) SHA1(c75c88b1c313e172fdb7f9a570d57be38f959b2b) ) - ROM_LOAD16_BYTE( "epr-13797.a7", 0x200001, 0x40000, CRC(361ade9f) SHA1(a7fd48c55695fd322d0456ff7dc2d2b2bc3e561b) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-13783.a4", 0x00000, 0x40000, CRC(e2a1d5af) SHA1(cb6710fe2093889d5d159eaf55a3bd95c6f2ef87) ) + ROM_LOAD16_BYTE( "epr-13796.a6", 0x00001, 0x40000, CRC(06001c67) SHA1(3aa48631013e6dc55e4c1d222b465e6b41ece36b) ) + ROM_LOAD16_BYTE( "epr-13785.a5", 0x80000, 0x40000, CRC(09714762) SHA1(c75c88b1c313e172fdb7f9a570d57be38f959b2b) ) + ROM_LOAD16_BYTE( "epr-13797.a7", 0x80001, 0x40000, CRC(361ade9f) SHA1(a7fd48c55695fd322d0456ff7dc2d2b2bc3e561b) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0175.key", 0x0000, 0x2000, CRC(70d9d283) SHA1(ff309b2a221d9a03ccf301a208c76a7c2eaea790) ) - ROM_REGION( 0x180000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x180000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-13773.c1", 0x000000, 0x80000, CRC(3fc600e5) SHA1(8bec4ecf6a4e4b38d13133960036a5a4800a668e) ) ROM_LOAD( "mpr-13774.c2", 0x080000, 0x80000, CRC(2411a824) SHA1(0e383ccc4e0830ffb395d5102e2950610c147007) ) ROM_LOAD( "mpr-13775.c3", 0x100000, 0x80000, CRC(cf527bf6) SHA1(1f9cf1f0e92709f0465dc97ebbdaa715a419f7a7) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13779.c10", 0x000001, 0x80000, CRC(c707f416) SHA1(e6a9d89849f7f1c303a3ca29a629f81397945a2d) ) ROM_LOAD16_BYTE( "mpr-13787.a10", 0x000000, 0x80000, CRC(f05c68c6) SHA1(b6a0535b6c734a0c89fdb6506c32ffe6ab3aa8cd) ) ROM_LOAD16_BYTE( "mpr-13780.c11", 0x200001, 0x80000, CRC(a4c341e0) SHA1(15a0b5a42b56465a7b7df98968cc2ed177ce6f59) ) ROM_LOAD16_BYTE( "mpr-13788.a11", 0x200000, 0x80000, CRC(0106fea6) SHA1(e16e2a469ecbbc704021dee6264db30aa0898368) ) ROM_LOAD16_BYTE( "mpr-13781.c12", 0x400001, 0x80000, CRC(f33b13af) SHA1(d3eb64dcf12d532454bf3cd6c86528c0f11ee316) ) ROM_LOAD16_BYTE( "mpr-13789.a12", 0x400000, 0x80000, CRC(09ba8835) SHA1(72e83dd1793a7f4b2b881e71f262493e3d4992b3) ) - /* extra gfx roms??*/ + // extra gfx roms??*/ ROM_LOAD16_BYTE( "epr-13782.c13", 0x600001, 0x40000, CRC(73790852) SHA1(891345cb8ce4b04bd293ee9bac9b1b9940d6bcb2) ) ROM_LOAD16_BYTE( "epr-13790.a13", 0x600000, 0x40000, CRC(23849101) SHA1(1aeb0fefb6688dfd841bd7d0b17ffdfce69f1dd9) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ - /* another copy in different set is epr-13778.b7 - 9c54c038 */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU + // another copy in different set is epr-13778.b7 - 9c54c038 ROM_LOAD( "epr-13778.c7", 0x010000, 0x20000, CRC(35e86146) SHA1(9be82165dc12d5f32ef26f37ea02b29e3621893f) ) ROM_LOAD( "epr-13777.c6", 0x090000, 0x80000, CRC(d1524782) SHA1(121c5804927ed686ea50d5d81d0226e041f50f6f) ) ROM_LOAD( "epr-13776.c5", 0x110000, 0x80000, CRC(282ac9fe) SHA1(4f54d93779c35c036d7c85fce6736df80f3bbe33) ) @@ -1541,21 +1525,21 @@ ROM_END ROM Board: 171-5873B */ ROM_START( ddcrew ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-14160.a4", 0x000000, 0x40000, CRC(b9f897b7) SHA1(65cee6c8006f328eee648e144e11fa60b1433ff5) ) - ROM_LOAD16_BYTE( "epr-14161.a6", 0x000001, 0x40000, CRC(bb03c1f0) SHA1(9e7fbd2cda448992c6cbf4b96078b57305def097) ) - ROM_LOAD16_BYTE( "mpr-14139.a5", 0x200000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) - ROM_LOAD16_BYTE( "mpr-14141.a7", 0x200001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-14160.a4", 0x00000, 0x40000, CRC(b9f897b7) SHA1(65cee6c8006f328eee648e144e11fa60b1433ff5) ) + ROM_LOAD16_BYTE( "epr-14161.a6", 0x00001, 0x40000, CRC(bb03c1f0) SHA1(9e7fbd2cda448992c6cbf4b96078b57305def097) ) + ROM_LOAD16_BYTE( "mpr-14139.a5", 0x80000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) + ROM_LOAD16_BYTE( "mpr-14141.a7", 0x80001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0190.key", 0x0000, 0x2000, CRC(2d502b11) SHA1(c4e94da59b0e15a5a302ebe88988d1657e7e9814 ) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-14127.c1", 0x00000, 0x40000, CRC(2228cd88) SHA1(5774bb6a401c3da05c5f3c9d3996b20bb3713cb2) ) ROM_LOAD( "epr-14128.c2", 0x40000, 0x40000, CRC(edba8e10) SHA1(25a2833ead4ca363802ddc2eb97c40976502921a) ) ROM_LOAD( "epr-14129.c3", 0x80000, 0x40000, CRC(e8ecc305) SHA1(a26d0c5c7826cd315f8b2c27e5a503a2a7b535c4) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14134.c10", 0x000001, 0x80000, CRC(4fda6a4b) SHA1(a9e582e494ab967e8f3ccf4d5844bb8ef889928c) ) ROM_LOAD16_BYTE( "mpr-14142.a10", 0x000000, 0x80000, CRC(3cbf1f2a) SHA1(80b6b006936740087786acd538e28aca85fa6894) ) ROM_LOAD16_BYTE( "mpr-14135.c11", 0x200001, 0x80000, CRC(e9c74876) SHA1(aff9d071e77f01c6937188bf67be38fa898343e6) ) @@ -1565,7 +1549,7 @@ ROM_START( ddcrew ) ROM_LOAD16_BYTE( "epr-14137.c13", 0x600001, 0x80000, CRC(846c4265) SHA1(58d0c213d085fb4dee18b7aefb05087d9d522950) ) ROM_LOAD16_BYTE( "epr-14145.a13", 0x600000, 0x80000, CRC(0e76c797) SHA1(9a44dc948e84e5acac36e80105c2349ee78e6cfa) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14133.c7", 0x010000, 0x20000, CRC(cff96665) SHA1(b4dc7f1a03415ebebdb99a82ae89328c345e7678) ) ROM_LOAD( "mpr-14132.c6", 0x090000, 0x80000, CRC(1fae0220) SHA1(8414c74318ea915816c6b67801ac7c8c3fc905f9) ) ROM_LOAD( "mpr-14131.c5", 0x110000, 0x80000, CRC(be5a7d0b) SHA1(c2c598b0cf711273fdd568f3401375e9772c1d61) ) @@ -1578,21 +1562,21 @@ ROM_END ROM Board: 171-5873B */ ROM_START( ddcrewu ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-14152.a4", 0x000000, 0x40000, CRC(69c7b571) SHA1(9fe4815a1cff0a46a754a6bdee12abaf7beb6501) ) - ROM_LOAD16_BYTE( "epr-14153.a6", 0x000001, 0x40000, CRC(e01fae0c) SHA1(7166f955324f73e94d8ae6d2a5b2f4b497e62933) ) - ROM_LOAD16_BYTE( "mpr-14139.a5", 0x200000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) - ROM_LOAD16_BYTE( "mpr-14141.a7", 0x200001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-14152.a4", 0x00000, 0x40000, CRC(69c7b571) SHA1(9fe4815a1cff0a46a754a6bdee12abaf7beb6501) ) + ROM_LOAD16_BYTE( "epr-14153.a6", 0x00001, 0x40000, CRC(e01fae0c) SHA1(7166f955324f73e94d8ae6d2a5b2f4b497e62933) ) + ROM_LOAD16_BYTE( "mpr-14139.a5", 0x80000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) + ROM_LOAD16_BYTE( "mpr-14141.a7", 0x80001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0186.key", 0x0000, 0x2000, CRC(7acaf1fd) SHA1(236d6382072adda8f7907d98d428fcca36700fa0) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-14127.c1", 0x00000, 0x40000, CRC(2228cd88) SHA1(5774bb6a401c3da05c5f3c9d3996b20bb3713cb2) ) ROM_LOAD( "epr-14128.c2", 0x40000, 0x40000, CRC(edba8e10) SHA1(25a2833ead4ca363802ddc2eb97c40976502921a) ) ROM_LOAD( "epr-14129.c3", 0x80000, 0x40000, CRC(e8ecc305) SHA1(a26d0c5c7826cd315f8b2c27e5a503a2a7b535c4) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14134.c10", 0x000001, 0x80000, CRC(4fda6a4b) SHA1(a9e582e494ab967e8f3ccf4d5844bb8ef889928c) ) ROM_LOAD16_BYTE( "mpr-14142.a10", 0x000000, 0x80000, CRC(3cbf1f2a) SHA1(80b6b006936740087786acd538e28aca85fa6894) ) ROM_LOAD16_BYTE( "mpr-14135.c11", 0x200001, 0x80000, CRC(e9c74876) SHA1(aff9d071e77f01c6937188bf67be38fa898343e6) ) @@ -1602,7 +1586,7 @@ ROM_START( ddcrewu ) ROM_LOAD16_BYTE( "epr-14137.c13", 0x600001, 0x80000, CRC(846c4265) SHA1(58d0c213d085fb4dee18b7aefb05087d9d522950) ) ROM_LOAD16_BYTE( "epr-14145.a13", 0x600000, 0x80000, CRC(0e76c797) SHA1(9a44dc948e84e5acac36e80105c2349ee78e6cfa) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14133.c7", 0x010000, 0x20000, CRC(cff96665) SHA1(b4dc7f1a03415ebebdb99a82ae89328c345e7678) ) ROM_LOAD( "mpr-14132.c6", 0x090000, 0x80000, CRC(1fae0220) SHA1(8414c74318ea915816c6b67801ac7c8c3fc905f9) ) ROM_LOAD( "mpr-14131.c5", 0x110000, 0x80000, CRC(be5a7d0b) SHA1(c2c598b0cf711273fdd568f3401375e9772c1d61) ) @@ -1615,21 +1599,21 @@ ROM_END ROM Board: 171-5873B */ ROM_START( ddcrew2 ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-14148.a4", 0x000000, 0x40000, CRC(df4cb0cf) SHA1(153993997e9ceb06a9d4c73794ea66d0c585a291) ) - ROM_LOAD16_BYTE( "epr-14149.a6", 0x000001, 0x40000, CRC(380ff818) SHA1(7c7dd7aa825665f1a9aaebb5af4ecf5dd109b0ca) ) - ROM_LOAD16_BYTE( "mpr-14139.a5", 0x200000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) - ROM_LOAD16_BYTE( "mpr-14141.a7", 0x200001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-14148.a4", 0x00000, 0x40000, CRC(df4cb0cf) SHA1(153993997e9ceb06a9d4c73794ea66d0c585a291) ) + ROM_LOAD16_BYTE( "epr-14149.a6", 0x00001, 0x40000, CRC(380ff818) SHA1(7c7dd7aa825665f1a9aaebb5af4ecf5dd109b0ca) ) + ROM_LOAD16_BYTE( "mpr-14139.a5", 0x80000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) + ROM_LOAD16_BYTE( "mpr-14141.a7", 0x80001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0184.key", 0x0000, 0x2000, CRC(cee06254) SHA1(d64903055fdefb49c584cbcd84f0d4fa811bd789) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-14127.c1", 0x00000, 0x40000, CRC(2228cd88) SHA1(5774bb6a401c3da05c5f3c9d3996b20bb3713cb2) ) ROM_LOAD( "epr-14128.c2", 0x40000, 0x40000, CRC(edba8e10) SHA1(25a2833ead4ca363802ddc2eb97c40976502921a) ) ROM_LOAD( "epr-14129.c3", 0x80000, 0x40000, CRC(e8ecc305) SHA1(a26d0c5c7826cd315f8b2c27e5a503a2a7b535c4) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14134.c10", 0x000001, 0x80000, CRC(4fda6a4b) SHA1(a9e582e494ab967e8f3ccf4d5844bb8ef889928c) ) ROM_LOAD16_BYTE( "mpr-14142.a10", 0x000000, 0x80000, CRC(3cbf1f2a) SHA1(80b6b006936740087786acd538e28aca85fa6894) ) ROM_LOAD16_BYTE( "mpr-14135.c11", 0x200001, 0x80000, CRC(e9c74876) SHA1(aff9d071e77f01c6937188bf67be38fa898343e6) ) @@ -1639,7 +1623,7 @@ ROM_START( ddcrew2 ) ROM_LOAD16_BYTE( "epr-14137.c13", 0x600001, 0x80000, CRC(846c4265) SHA1(58d0c213d085fb4dee18b7aefb05087d9d522950) ) ROM_LOAD16_BYTE( "epr-14145.a13", 0x600000, 0x80000, CRC(0e76c797) SHA1(9a44dc948e84e5acac36e80105c2349ee78e6cfa) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14133.c7", 0x010000, 0x20000, CRC(cff96665) SHA1(b4dc7f1a03415ebebdb99a82ae89328c345e7678) ) ROM_LOAD( "mpr-14132.c6", 0x090000, 0x80000, CRC(1fae0220) SHA1(8414c74318ea915816c6b67801ac7c8c3fc905f9) ) ROM_LOAD( "mpr-14131.c5", 0x110000, 0x80000, CRC(be5a7d0b) SHA1(c2c598b0cf711273fdd568f3401375e9772c1d61) ) @@ -1653,21 +1637,21 @@ ROM_END Rom Board : 171-5987A (834-8166-05) */ ROM_START( ddcrew1 ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-14154.a4", 0x000000, 0x40000, CRC(9a0dadf0) SHA1(b55c8cdd3158607ec8203bfebc9e7aba24d6d565) ) - ROM_LOAD16_BYTE( "epr-14155.a6", 0x000001, 0x40000, CRC(e74362f4) SHA1(a6f96d714baeb826221b712b996e99831cf25abf) ) - ROM_LOAD16_BYTE( "mpr-14139.a5", 0x200000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) - ROM_LOAD16_BYTE( "mpr-14141.a7", 0x200001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-14154.a4", 0x00000, 0x40000, CRC(9a0dadf0) SHA1(b55c8cdd3158607ec8203bfebc9e7aba24d6d565) ) + ROM_LOAD16_BYTE( "epr-14155.a6", 0x00001, 0x40000, CRC(e74362f4) SHA1(a6f96d714baeb826221b712b996e99831cf25abf) ) + ROM_LOAD16_BYTE( "mpr-14139.a5", 0x80000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) + ROM_LOAD16_BYTE( "mpr-14141.a7", 0x80001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0187.key", 0x0000, 0x2000, CRC(1dfb60be) SHA1(7bd42a2e54fca574076e5ed164ab4e0cbb645a4f) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-14127.c1", 0x00000, 0x40000, CRC(2228cd88) SHA1(5774bb6a401c3da05c5f3c9d3996b20bb3713cb2) ) ROM_LOAD( "epr-14128.c2", 0x40000, 0x40000, CRC(edba8e10) SHA1(25a2833ead4ca363802ddc2eb97c40976502921a) ) ROM_LOAD( "epr-14129.c3", 0x80000, 0x40000, CRC(e8ecc305) SHA1(a26d0c5c7826cd315f8b2c27e5a503a2a7b535c4) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14134.c10", 0x000001, 0x80000, CRC(4fda6a4b) SHA1(a9e582e494ab967e8f3ccf4d5844bb8ef889928c) ) ROM_LOAD16_BYTE( "mpr-14142.a10", 0x000000, 0x80000, CRC(3cbf1f2a) SHA1(80b6b006936740087786acd538e28aca85fa6894) ) ROM_LOAD16_BYTE( "mpr-14135.c11", 0x200001, 0x80000, CRC(e9c74876) SHA1(aff9d071e77f01c6937188bf67be38fa898343e6) ) @@ -1677,7 +1661,7 @@ ROM_START( ddcrew1 ) ROM_LOAD16_BYTE( "epr-14137.c13", 0x600001, 0x80000, CRC(846c4265) SHA1(58d0c213d085fb4dee18b7aefb05087d9d522950) ) ROM_LOAD16_BYTE( "epr-14145.a13", 0x600000, 0x80000, CRC(0e76c797) SHA1(9a44dc948e84e5acac36e80105c2349ee78e6cfa) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14133.c7", 0x010000, 0x20000, CRC(cff96665) SHA1(b4dc7f1a03415ebebdb99a82ae89328c345e7678) ) ROM_LOAD( "mpr-14132.c6", 0x090000, 0x80000, CRC(1fae0220) SHA1(8414c74318ea915816c6b67801ac7c8c3fc905f9) ) ROM_LOAD( "mpr-14131.c5", 0x110000, 0x80000, CRC(be5a7d0b) SHA1(c2c598b0cf711273fdd568f3401375e9772c1d61) ) @@ -1691,21 +1675,21 @@ ROM_END (4th Player on Sega System 18,24) I/O Board: 837-7968 */ ROM_START( ddcrewj ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-14138.a4", 0x000000, 0x40000, CRC(df280b1b) SHA1(581e8b6cbf3231d772de6b0e26b94541931215fd) ) - ROM_LOAD16_BYTE( "epr-14140.a6", 0x000001, 0x40000, CRC(48f223ee) SHA1(5192b92d081829d2a4fcf2258675b24c94cfb4e5) ) - ROM_LOAD16_BYTE( "mpr-14139.a5", 0x200000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) - ROM_LOAD16_BYTE( "mpr-14141.a7", 0x200001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-14138.a4", 0x00000, 0x40000, CRC(df280b1b) SHA1(581e8b6cbf3231d772de6b0e26b94541931215fd) ) + ROM_LOAD16_BYTE( "epr-14140.a6", 0x00001, 0x40000, CRC(48f223ee) SHA1(5192b92d081829d2a4fcf2258675b24c94cfb4e5) ) + ROM_LOAD16_BYTE( "mpr-14139.a5", 0x80000, 0x40000, CRC(06c31531) SHA1(d084cb72bf83578b34e959bb60a0695faf4161f8) ) + ROM_LOAD16_BYTE( "mpr-14141.a7", 0x80001, 0x40000, CRC(080a494b) SHA1(64522dccbf6ed856ab80aa185454183df87d7ae9) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0182.key", 0x0000, 0x2000, CRC(2e8a3601) SHA1(8b6e10babfd2398c1669ba6bf9aad61cd02f23ba) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-14127.c1", 0x00000, 0x40000, CRC(2228cd88) SHA1(5774bb6a401c3da05c5f3c9d3996b20bb3713cb2) ) ROM_LOAD( "epr-14128.c2", 0x40000, 0x40000, CRC(edba8e10) SHA1(25a2833ead4ca363802ddc2eb97c40976502921a) ) ROM_LOAD( "epr-14129.c3", 0x80000, 0x40000, CRC(e8ecc305) SHA1(a26d0c5c7826cd315f8b2c27e5a503a2a7b535c4) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14134.c10", 0x000001, 0x80000, CRC(4fda6a4b) SHA1(a9e582e494ab967e8f3ccf4d5844bb8ef889928c) ) ROM_LOAD16_BYTE( "mpr-14142.a10", 0x000000, 0x80000, CRC(3cbf1f2a) SHA1(80b6b006936740087786acd538e28aca85fa6894) ) ROM_LOAD16_BYTE( "mpr-14135.c11", 0x200001, 0x80000, CRC(e9c74876) SHA1(aff9d071e77f01c6937188bf67be38fa898343e6) ) @@ -1715,7 +1699,7 @@ ROM_START( ddcrewj ) ROM_LOAD16_BYTE( "epr-14137.c13", 0x600001, 0x80000, CRC(846c4265) SHA1(58d0c213d085fb4dee18b7aefb05087d9d522950) ) ROM_LOAD16_BYTE( "epr-14145.a13", 0x600000, 0x80000, CRC(0e76c797) SHA1(9a44dc948e84e5acac36e80105c2349ee78e6cfa) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14133.c7", 0x010000, 0x20000, CRC(cff96665) SHA1(b4dc7f1a03415ebebdb99a82ae89328c345e7678) ) ROM_LOAD( "mpr-14132.c6", 0x090000, 0x80000, CRC(1fae0220) SHA1(8414c74318ea915816c6b67801ac7c8c3fc905f9) ) ROM_LOAD( "mpr-14131.c5", 0x110000, 0x80000, CRC(be5a7d0b) SHA1(c2c598b0cf711273fdd568f3401375e9772c1d61) ) @@ -1734,21 +1718,21 @@ ROM_END CPU Hiatchi FD1094 317-0196 */ ROM_START( desertbr ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code - custom CPU 317-0196 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // 68000 code - custom CPU 317-0196 ROM_LOAD16_BYTE( "epr-14802.a4", 0x000000, 0x80000, CRC(9ab93cbc) SHA1(a8d0013e17519c26c6ba7d28ec73e22ea5bde0e9) ) ROM_LOAD16_BYTE( "epr-14902.a6", 0x000001, 0x80000, CRC(6724e7b1) SHA1(540c8bb7e848488dead81ca58f3bece45a87e611) ) - ROM_LOAD16_BYTE( "epr-14793.a5", 0x200000, 0x80000, CRC(dc9d7af3) SHA1(1fc1fedc1a4beed94cece268d0bb4bf62eeb407c) ) - ROM_LOAD16_BYTE( "epr-14795.a7", 0x200001, 0x80000, CRC(7e5bf7d9) SHA1(32ac68ee423a34e0f1bedc8765e03f40e01c3af1) ) + ROM_LOAD16_BYTE( "epr-14793.a5", 0x100000, 0x80000, CRC(dc9d7af3) SHA1(1fc1fedc1a4beed94cece268d0bb4bf62eeb407c) ) + ROM_LOAD16_BYTE( "epr-14795.a7", 0x100001, 0x80000, CRC(7e5bf7d9) SHA1(32ac68ee423a34e0f1bedc8765e03f40e01c3af1) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0196.key", 0x0000, 0x2000, CRC(cb942262) SHA1(7ad7cd3df887c6e6435d74784cb12ce016acd0da) ) - ROM_REGION( 0x300000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x300000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-14781.c1", 0x000000, 0x100000, CRC(c4f7d7aa) SHA1(3c69dd7a26efccd7111ef33dfa6e8b738095c0bf) ) ROM_LOAD( "mpr-14782.c2", 0x100000, 0x100000, CRC(ccc98d05) SHA1(b89594bbfff45e3b4fe433aeeaf8b4073c2cabb5) ) ROM_LOAD( "mpr-14783.c3", 0x200000, 0x100000, CRC(ef202bec) SHA1(b557092f8a3e1c9889d34588344c6dd2c6f06731) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14788.c10", 0x000001, 0x100000, CRC(b5b05536) SHA1(f8fde7ebca38c0a6f6a864c17771aa155e6fc30d) ) ROM_LOAD16_BYTE( "mpr-14796.a10", 0x000000, 0x100000, CRC(c033220a) SHA1(279d3ef62b41d2c6a18ce1217a549402a874638b) ) ROM_LOAD16_BYTE( "mpr-14789.c11", 0x200001, 0x100000, CRC(0f9bcb97) SHA1(c15ab3ece596c54e1c4d8e8a755473609334e8ba) ) @@ -1758,7 +1742,7 @@ ROM_START( desertbr ) ROM_LOAD16_BYTE( "mpr-14791.c13", 0x600001, 0x100000, CRC(a4ae352b) SHA1(dc814e1c2e167e191cd43fa554ff8ee974d47152) ) ROM_LOAD16_BYTE( "mpr-14799.a13", 0x600000, 0x100000, CRC(aeb7b025) SHA1(9ce2a9a46176a110c8d2e77deb3d8b9b69b902fa) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14787.c7", 0x010000, 0x40000, CRC(cc6feec7) SHA1(31cc243178b98681a52500a485d74ed9e1274888) ) ROM_LOAD( "mpr-14786.c6", 0x090000, 0x80000, CRC(cc8349f2) SHA1(9f00d8ea372b70ba44a90dab497deadcc5be3dab) ) ROM_LOAD( "mpr-14785.c5", 0x110000, 0x80000, CRC(7babba13) SHA1(190cd9ea0f73272e0df34bbdfd8e0035f9e9b0b0) ) @@ -1774,21 +1758,21 @@ ROM_END CPU Hiatchi FD1094 317-0194 */ ROM_START( desertbrj ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code - custom CPU 317-0196 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // 68000 code - custom CPU 317-0196 ROM_LOAD16_BYTE( "epr-14792.a4", 0x000000, 0x80000, CRC(453d9d02) SHA1(df5d85c2e1a25c18860aa96462ea4893bb633190) ) ROM_LOAD16_BYTE( "epr-14794.a6", 0x000001, 0x80000, CRC(4426758f) SHA1(d8bebcf05a83d34a93f74e2263f4290e995656ba) ) - ROM_LOAD16_BYTE( "epr-14793.a5", 0x200000, 0x80000, CRC(dc9d7af3) SHA1(1fc1fedc1a4beed94cece268d0bb4bf62eeb407c) ) - ROM_LOAD16_BYTE( "epr-14795.a7", 0x200001, 0x80000, CRC(7e5bf7d9) SHA1(32ac68ee423a34e0f1bedc8765e03f40e01c3af1) ) + ROM_LOAD16_BYTE( "epr-14793.a5", 0x100000, 0x80000, CRC(dc9d7af3) SHA1(1fc1fedc1a4beed94cece268d0bb4bf62eeb407c) ) + ROM_LOAD16_BYTE( "epr-14795.a7", 0x100001, 0x80000, CRC(7e5bf7d9) SHA1(32ac68ee423a34e0f1bedc8765e03f40e01c3af1) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0194.key", 0x0000, 0x2000, CRC(40cbc4cb) SHA1(51777d8a619268ac0b1fda6e7781cde753354419) ) - ROM_REGION( 0x300000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x300000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-14781.c1", 0x000000, 0x100000, CRC(c4f7d7aa) SHA1(3c69dd7a26efccd7111ef33dfa6e8b738095c0bf) ) ROM_LOAD( "mpr-14782.c2", 0x100000, 0x100000, CRC(ccc98d05) SHA1(b89594bbfff45e3b4fe433aeeaf8b4073c2cabb5) ) ROM_LOAD( "mpr-14783.c3", 0x200000, 0x100000, CRC(ef202bec) SHA1(b557092f8a3e1c9889d34588344c6dd2c6f06731) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14788.c10", 0x000001, 0x100000, CRC(b5b05536) SHA1(f8fde7ebca38c0a6f6a864c17771aa155e6fc30d) ) ROM_LOAD16_BYTE( "mpr-14796.a10", 0x000000, 0x100000, CRC(c033220a) SHA1(279d3ef62b41d2c6a18ce1217a549402a874638b) ) ROM_LOAD16_BYTE( "mpr-14789.c11", 0x200001, 0x100000, CRC(0f9bcb97) SHA1(c15ab3ece596c54e1c4d8e8a755473609334e8ba) ) @@ -1798,7 +1782,7 @@ ROM_START( desertbrj ) ROM_LOAD16_BYTE( "mpr-14791.c13", 0x600001, 0x100000, CRC(a4ae352b) SHA1(dc814e1c2e167e191cd43fa554ff8ee974d47152) ) ROM_LOAD16_BYTE( "mpr-14799.a13", 0x600000, 0x100000, CRC(aeb7b025) SHA1(9ce2a9a46176a110c8d2e77deb3d8b9b69b902fa) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14787.c7", 0x010000, 0x40000, CRC(cc6feec7) SHA1(31cc243178b98681a52500a485d74ed9e1274888) ) ROM_LOAD( "mpr-14786.c6", 0x090000, 0x80000, CRC(cc8349f2) SHA1(9f00d8ea372b70ba44a90dab497deadcc5be3dab) ) ROM_LOAD( "mpr-14785.c5", 0x110000, 0x80000, CRC(7babba13) SHA1(190cd9ea0f73272e0df34bbdfd8e0035f9e9b0b0) ) @@ -1814,21 +1798,21 @@ ROM_END ROM Board: 171-5873B */ ROM_START( lghost ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-13429.a4", 0x000000, 0x40000, CRC(09bd65c0) SHA1(f2b332a86d52af3c5270f668bdd43a0d44eca346) ) - ROM_LOAD16_BYTE( "epr-13430.a6", 0x000001, 0x40000, CRC(51009fe0) SHA1(f1e6e3714c01c15c0e932470a9e1a17abb59e958) ) - ROM_LOAD16_BYTE( "epr-13411.a5", 0x200000, 0x40000, CRC(5160167b) SHA1(3d176a18c7527b1e485f10b144bb4db1b945e709) ) - ROM_LOAD16_BYTE( "epr-13413.a7", 0x200001, 0x40000, CRC(656b3bd8) SHA1(db81d4ae3138308dce1e3db7a859f1d63c4ff815) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-13429.a4", 0x00000, 0x40000, CRC(09bd65c0) SHA1(f2b332a86d52af3c5270f668bdd43a0d44eca346) ) + ROM_LOAD16_BYTE( "epr-13430.a6", 0x00001, 0x40000, CRC(51009fe0) SHA1(f1e6e3714c01c15c0e932470a9e1a17abb59e958) ) + ROM_LOAD16_BYTE( "epr-13411.a5", 0x80000, 0x40000, CRC(5160167b) SHA1(3d176a18c7527b1e485f10b144bb4db1b945e709) ) + ROM_LOAD16_BYTE( "epr-13413.a7", 0x80001, 0x40000, CRC(656b3bd8) SHA1(db81d4ae3138308dce1e3db7a859f1d63c4ff815) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0166.key", 0x0000, 0x2000, CRC(8379961f) SHA1(44e0662e92ece65ad2049b2cd804f516e631166e) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-13414.c1", 0x00000, 0x40000, CRC(dada2419) SHA1(f6ffd02d75232a09ea83fd199e5e30b2773b0cf5) ) ROM_LOAD( "epr-13415.c2", 0x40000, 0x40000, CRC(bbb62c48) SHA1(7a4c5bd11b73a92deece72b55627f48ac167acd6) ) ROM_LOAD( "epr-13416.c3", 0x80000, 0x40000, CRC(1d11dbae) SHA1(331aa49c6b38d32ec33184dbd0851888463ddbc7) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-13603.a10", 0x000000, 0x80000, CRC(5350a94e) SHA1(47e99803cab4b508feb51069c940d6c824d6961d) ) ROM_LOAD16_BYTE( "epr-13604.c10", 0x000001, 0x80000, CRC(4009c8e5) SHA1(97f513d312f4c90f8bffdf797afa3749779989a5) ) ROM_LOAD16_BYTE( "mpr-13421.a11", 0x200000, 0x80000, CRC(2fc75890) SHA1(9f97f07dba3b978df8eb357894168ad74f151d30) ) @@ -1838,9 +1822,9 @@ ROM_START( lghost ) ROM_LOAD16_BYTE( "mpr-13423.a13", 0x600000, 0x80000, CRC(335bbc9d) SHA1(78793335b2f8a1bb05809259521db193c17c9b98) ) ROM_LOAD16_BYTE( "mpr-13426.c13", 0x600001, 0x80000, CRC(5cfb1e25) SHA1(1dd57475604f339e58bf946e17ae0dc5cf4a3dba) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13417.c7", 0x010000, 0x20000, CRC(cd7beb49) SHA1(2435ce000f1eefdd06b27ea93e22fd82c0e999d2) ) - /* these seem best 3 from the different sized dumps */ + // these seem best 3 from the different sized dumps ROM_LOAD( "mpr-13420.c6", 0x090000, 0x40000, CRC(3de0dee4) SHA1(31833684df5a34d5e9ef04f2ab42355b8e9cbb45) ) ROM_LOAD( "mpr-13419.c5", 0x110000, 0x40000, CRC(e7021b0a) SHA1(82e390fac63965d4f80ae01758c19ae951c39475) ) ROM_LOAD( "mpr-13418.c4", 0x190000, 0x40000, CRC(0732594d) SHA1(9fbeae29f1a31d136ddc9a49c786b2a08a523e0d) ) @@ -1854,21 +1838,21 @@ ROM_END A/D BD NO. 837-7536 */ ROM_START( lghostu ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "epr-13427.a4", 0x000000, 0x40000, CRC(5bf8fb6b) SHA1(587bbf45b5e470da7d9166b2cbf4ac58a1f2a825) ) - ROM_LOAD16_BYTE( "epr-13428.a6", 0x000001, 0x40000, CRC(276775f5) SHA1(5dd5dabe7e9311b3520d0405dda0c983e9bc4ba2) ) - ROM_LOAD16_BYTE( "epr-13411.a5", 0x200000, 0x40000, CRC(5160167b) SHA1(3d176a18c7527b1e485f10b144bb4db1b945e709) ) - ROM_LOAD16_BYTE( "epr-13413.a7", 0x200001, 0x40000, CRC(656b3bd8) SHA1(db81d4ae3138308dce1e3db7a859f1d63c4ff815) ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-13427.a4", 0x00000, 0x40000, CRC(5bf8fb6b) SHA1(587bbf45b5e470da7d9166b2cbf4ac58a1f2a825) ) + ROM_LOAD16_BYTE( "epr-13428.a6", 0x00001, 0x40000, CRC(276775f5) SHA1(5dd5dabe7e9311b3520d0405dda0c983e9bc4ba2) ) + ROM_LOAD16_BYTE( "epr-13411.a5", 0x80000, 0x40000, CRC(5160167b) SHA1(3d176a18c7527b1e485f10b144bb4db1b945e709) ) + ROM_LOAD16_BYTE( "epr-13413.a7", 0x80001, 0x40000, CRC(656b3bd8) SHA1(db81d4ae3138308dce1e3db7a859f1d63c4ff815) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0165.key", 0x0000, 0x2000, CRC(a04267ab) SHA1(688ee59dfaaf240e23de4cada648689d1717ab04) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-13414.c1", 0x00000, 0x40000, CRC(dada2419) SHA1(f6ffd02d75232a09ea83fd199e5e30b2773b0cf5) ) ROM_LOAD( "epr-13415.c2", 0x40000, 0x40000, CRC(bbb62c48) SHA1(7a4c5bd11b73a92deece72b55627f48ac167acd6) ) ROM_LOAD( "epr-13416.c3", 0x80000, 0x40000, CRC(1d11dbae) SHA1(331aa49c6b38d32ec33184dbd0851888463ddbc7) ) - ROM_REGION16_BE( 0x800000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x800000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-13603.a10", 0x000000, 0x80000, CRC(5350a94e) SHA1(47e99803cab4b508feb51069c940d6c824d6961d) ) ROM_LOAD16_BYTE( "epr-13604.c10", 0x000001, 0x80000, CRC(4009c8e5) SHA1(97f513d312f4c90f8bffdf797afa3749779989a5) ) ROM_LOAD16_BYTE( "mpr-13421.a11", 0x200000, 0x80000, CRC(2fc75890) SHA1(9f97f07dba3b978df8eb357894168ad74f151d30) ) @@ -1878,9 +1862,9 @@ ROM_START( lghostu ) ROM_LOAD16_BYTE( "mpr-13423.a13", 0x600000, 0x80000, CRC(335bbc9d) SHA1(78793335b2f8a1bb05809259521db193c17c9b98) ) ROM_LOAD16_BYTE( "mpr-13426.c13", 0x600001, 0x80000, CRC(5cfb1e25) SHA1(1dd57475604f339e58bf946e17ae0dc5cf4a3dba) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13417.c7", 0x010000, 0x20000, CRC(cd7beb49) SHA1(2435ce000f1eefdd06b27ea93e22fd82c0e999d2) ) - /* these seem best 3 from the different sized dumps */ + // these seem best 3 from the different sized dumps ROM_LOAD( "mpr-13420.c6", 0x090000, 0x40000, CRC(3de0dee4) SHA1(31833684df5a34d5e9ef04f2ab42355b8e9cbb45) ) ROM_LOAD( "mpr-13419.c5", 0x110000, 0x40000, CRC(e7021b0a) SHA1(82e390fac63965d4f80ae01758c19ae951c39475) ) ROM_LOAD( "mpr-13418.c4", 0x190000, 0x40000, CRC(0732594d) SHA1(9fbeae29f1a31d136ddc9a49c786b2a08a523e0d) ) @@ -1895,19 +1879,19 @@ ROM_END ROM Board: 171-5873B */ ROM_START( mwalk ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code - custom cpu 317-0159 */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code - custom cpu 317-0159 ROM_LOAD16_BYTE( "epr-13235.a6", 0x000000, 0x40000, CRC(6983e129) SHA1(a8dd430620ab8ce11df46aa208d762d47f510464) ) ROM_LOAD16_BYTE( "epr-13234.a5", 0x000001, 0x40000, CRC(c9fd20f2) SHA1(9476e6481e6d8f223acd52f543fa04f408d48dc3) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0159.key", 0x0000, 0x2000, CRC(507838f0) SHA1(0c92d313da40b5dec7398c05b57698de6153b4b0) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-13216.b1", 0x00000, 0x40000, CRC(862d2c03) SHA1(3c5446d702a639b62a602c6d687f9875d8450218) ) ROM_LOAD( "mpr-13217.b2", 0x40000, 0x40000, CRC(7d1ac3ec) SHA1(8495357304f1df135bba77ef3b96e79a883b8ff0) ) ROM_LOAD( "mpr-13218.b3", 0x80000, 0x40000, CRC(56d3393c) SHA1(50a2d065060692c9ecaa56046a781cb21d93e554) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13224.b11", 0x000001, 0x40000, CRC(c59f107b) SHA1(10fa60fca6e34eda277c483bb1c0e81bb88c8a47) ) ROM_LOAD16_BYTE( "mpr-13231.a11", 0x000000, 0x40000, CRC(a5e96346) SHA1(a854f4dd5dc16975373255110fdb8ab3d121b1af) ) ROM_LOAD16_BYTE( "mpr-13223.b10", 0x080001, 0x40000, CRC(364f60ff) SHA1(9ac887ec0b2e32b504b7c6a5f3bb1ce3fe41a15a) ) @@ -1917,13 +1901,13 @@ ROM_START( mwalk ) ROM_LOAD16_BYTE( "epr-13221.b8", 0x180001, 0x40000, CRC(9ae7546a) SHA1(5413b0131881b0b32bac8de51da9a299835014bb) ) ROM_LOAD16_BYTE( "epr-13228.a8", 0x180000, 0x40000, CRC(de3786be) SHA1(2279bb390aa3efab9aeee0a643e5cb6a4f5933b6) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13225.a4", 0x010000, 0x20000, CRC(56c2e82b) SHA1(d5755a1bb6e889d274dc60e883d4d65f12fdc877) ) ROM_LOAD( "mpr-13219.b4", 0x090000, 0x40000, CRC(19e2061f) SHA1(2dcf1718a43dab4da53b4f67722664e70ddd2169) ) ROM_LOAD( "mpr-13220.b5", 0x110000, 0x40000, CRC(58d4d9ce) SHA1(725e73a656845b02702ef131b4c0aa2a73cdd02e) ) ROM_LOAD( "mpr-13249.b6", 0x190000, 0x40000, CRC(623edc5d) SHA1(c32d9f818d40f311877fbe6532d9e95b6045c3c4) ) - ROM_REGION( 0x10000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x10000, "mcu", 0 ) // protection MCU ROM_LOAD( "315-5437.ic4", 0x00000, 0x1000, CRC(4bf63bc1) SHA1(2766ab30b466b079febb30c488adad9ea56813f7) ) ROM_END @@ -1933,19 +1917,19 @@ ROM_END ROM Board: 171-5873B */ ROM_START( mwalku ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code - custom cpu 317-0158 */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code - custom cpu 317-0158 ROM_LOAD16_BYTE( "epr-13233.a6", 0x000000, 0x40000, CRC(f3dac671) SHA1(cd9d372c7e272d2371bc1f9fb0167831c804423f) ) ROM_LOAD16_BYTE( "epr-13232.a5", 0x000001, 0x40000, CRC(541d8bdf) SHA1(6a99153fddca246ba070e93c4bacd145f15f76bf) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0158.key", 0x0000, 0x2000, CRC(a8a50e8c) SHA1(6e05a40dbf31b4007df1bb27eee85a78da3d8417) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-13216.b1", 0x00000, 0x40000, CRC(862d2c03) SHA1(3c5446d702a639b62a602c6d687f9875d8450218) ) ROM_LOAD( "mpr-13217.b2", 0x40000, 0x40000, CRC(7d1ac3ec) SHA1(8495357304f1df135bba77ef3b96e79a883b8ff0) ) ROM_LOAD( "mpr-13218.b3", 0x80000, 0x40000, CRC(56d3393c) SHA1(50a2d065060692c9ecaa56046a781cb21d93e554) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13224.b11", 0x000001, 0x40000, CRC(c59f107b) SHA1(10fa60fca6e34eda277c483bb1c0e81bb88c8a47) ) ROM_LOAD16_BYTE( "mpr-13231.a11", 0x000000, 0x40000, CRC(a5e96346) SHA1(a854f4dd5dc16975373255110fdb8ab3d121b1af) ) ROM_LOAD16_BYTE( "mpr-13223.b10", 0x080001, 0x40000, CRC(364f60ff) SHA1(9ac887ec0b2e32b504b7c6a5f3bb1ce3fe41a15a) ) @@ -1955,13 +1939,13 @@ ROM_START( mwalku ) ROM_LOAD16_BYTE( "epr-13221.b8", 0x180001, 0x40000, CRC(9ae7546a) SHA1(5413b0131881b0b32bac8de51da9a299835014bb) ) ROM_LOAD16_BYTE( "epr-13228.a8", 0x180000, 0x40000, CRC(de3786be) SHA1(2279bb390aa3efab9aeee0a643e5cb6a4f5933b6) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13225.a4", 0x010000, 0x20000, CRC(56c2e82b) SHA1(d5755a1bb6e889d274dc60e883d4d65f12fdc877) ) ROM_LOAD( "mpr-13219.b4", 0x090000, 0x40000, CRC(19e2061f) SHA1(2dcf1718a43dab4da53b4f67722664e70ddd2169) ) ROM_LOAD( "mpr-13220.b5", 0x110000, 0x40000, CRC(58d4d9ce) SHA1(725e73a656845b02702ef131b4c0aa2a73cdd02e) ) ROM_LOAD( "mpr-13249.b6", 0x190000, 0x40000, CRC(623edc5d) SHA1(c32d9f818d40f311877fbe6532d9e95b6045c3c4) ) - ROM_REGION( 0x10000, "mcu", 0 ) /* protection MCU */ + ROM_REGION( 0x10000, "mcu", 0 ) // protection MCU ROM_LOAD( "315-5437.ic4", 0x00000, 0x1000, CRC(4bf63bc1) SHA1(2766ab30b466b079febb30c488adad9ea56813f7) ) ROM_END @@ -1971,19 +1955,19 @@ ROM_END ROM Board: 171-5873B */ ROM_START( mwalkj ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code - custom cpu 317-0157 */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code - custom cpu 317-0157 ROM_LOAD16_BYTE( "epr-13227.a6", 0x000000, 0x40000, CRC(6c0534b3) SHA1(23f35d1a15275cbc4b6d2f81f5634abac3832282) ) ROM_LOAD16_BYTE( "epr-13226.a5", 0x000001, 0x40000, CRC(99765854) SHA1(c00776c676b77fed4e94bb02f52f905c845ee73c) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0157.key", 0x0000, 0x2000, CRC(324d6931) SHA1(f8f4530a75aeeace1c8456da37118975c5c43316) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-13216.b1", 0x00000, 0x40000, CRC(862d2c03) SHA1(3c5446d702a639b62a602c6d687f9875d8450218) ) ROM_LOAD( "mpr-13217.b2", 0x40000, 0x40000, CRC(7d1ac3ec) SHA1(8495357304f1df135bba77ef3b96e79a883b8ff0) ) ROM_LOAD( "mpr-13218.b3", 0x80000, 0x40000, CRC(56d3393c) SHA1(50a2d065060692c9ecaa56046a781cb21d93e554) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-13224.b11", 0x000001, 0x40000, CRC(c59f107b) SHA1(10fa60fca6e34eda277c483bb1c0e81bb88c8a47) ) ROM_LOAD16_BYTE( "mpr-13231.a11", 0x000000, 0x40000, CRC(a5e96346) SHA1(a854f4dd5dc16975373255110fdb8ab3d121b1af) ) ROM_LOAD16_BYTE( "mpr-13223.b10", 0x080001, 0x40000, CRC(364f60ff) SHA1(9ac887ec0b2e32b504b7c6a5f3bb1ce3fe41a15a) ) @@ -1993,14 +1977,14 @@ ROM_START( mwalkj ) ROM_LOAD16_BYTE( "epr-13221.b8", 0x180001, 0x40000, CRC(9ae7546a) SHA1(5413b0131881b0b32bac8de51da9a299835014bb) ) ROM_LOAD16_BYTE( "epr-13228.a8", 0x180000, 0x40000, CRC(de3786be) SHA1(2279bb390aa3efab9aeee0a643e5cb6a4f5933b6) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-13225.a4", 0x010000, 0x20000, CRC(56c2e82b) SHA1(d5755a1bb6e889d274dc60e883d4d65f12fdc877) ) ROM_LOAD( "mpr-13219.b4", 0x090000, 0x40000, CRC(19e2061f) SHA1(2dcf1718a43dab4da53b4f67722664e70ddd2169) ) ROM_LOAD( "mpr-13220.b5", 0x110000, 0x40000, CRC(58d4d9ce) SHA1(725e73a656845b02702ef131b4c0aa2a73cdd02e) ) ROM_LOAD( "mpr-13249.b6", 0x190000, 0x40000, CRC(623edc5d) SHA1(c32d9f818d40f311877fbe6532d9e95b6045c3c4) ) - ROM_REGION( 0x10000, "mcu", 0 ) /* protection MCU */ - /* not verified if mcu is the same as the other sets.. */ + ROM_REGION( 0x10000, "mcu", 0 ) // protection MCU + // not verified if mcu is the same as the other sets.. ROM_LOAD( "315-5437.ic4", 0x00000, 0x1000, BAD_DUMP CRC(4bf63bc1) SHA1(2766ab30b466b079febb30c488adad9ea56813f7) ) ROM_END @@ -2013,23 +1997,23 @@ ROM_END ROM Board: 171-5873B */ ROM_START( pontoon ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-13175.a6", 0x000000, 0x40000, CRC(a2a5d0f5) SHA1(e22b13f152e0edadeb0f84b4a93ad366201cbae9) ) ROM_LOAD16_BYTE( "epr-13174.a5", 0x000001, 0x40000, CRC(db976b13) SHA1(3970968b21491beb8aac109eeb753b69ca752205) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0153.key", 0x0000, 0x2000, CRC(bcac8c7a) SHA1(1ee9db8f21a55cbfc391af9731d6a1dcf7f2d4c2) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "epr-13097.b1", 0x00000, 0x40000, CRC(6474b245) SHA1(af7db8ac8e74628a8ba61d0860960deeca4a3e3f) ) ROM_LOAD( "epr-13098.b2", 0x40000, 0x40000, CRC(89fc9a9b) SHA1(d98691eb5fef8aca4ad5e416d0a3797d6ca9b012) ) ROM_LOAD( "epr-13099.b3", 0x80000, 0x40000, CRC(790e0ac6) SHA1(a4999b7015ef27d6cbe4f53bc0d7fe05ee40d178) ) - ROM_REGION16_BE( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x80000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "epr-13173.b11", 0x000001, 0x40000, CRC(40a0ddfa) SHA1(f3917361f627865d2f1a22791904da056ce8a93a) ) ROM_LOAD16_BYTE( "epr-13176.a11", 0x000000, 0x40000, CRC(1184fbd2) SHA1(685ee2d7c4a0134af13ccf5d15f2e56a6b905195) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-12826a.a4", 0x10000, 0x20000, CRC(d41e2a3f) SHA1(087a6515ebefc3252a1feab5bf7b8a22bff9e379) ) ROM_END @@ -2042,16 +2026,16 @@ ROM_END ROM Board: 171-5873B */ ROM_START( shdancer ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "shdancer.a6", 0x000000, 0x40000, CRC(3d5b3fa9) SHA1(370dd6e8ab9fb9e77eee9262d13fbdb4cf575abc) ) ROM_LOAD16_BYTE( "shdancer.a5", 0x000001, 0x40000, CRC(2596004e) SHA1(1b993aa74e7559f7e99253fd2144db9449c04cce) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12712.b1", 0x00000, 0x40000, CRC(9bdabe3d) SHA1(4bb30fa2d4cdefe4a864cef7153b516bc5b02c42) ) ROM_LOAD( "mpr-12713.b2", 0x40000, 0x40000, CRC(852d2b1c) SHA1(8e5bc83d45e48b621ea3016207f2028fe41701e6) ) ROM_LOAD( "mpr-12714.b3", 0x80000, 0x40000, CRC(448226ce) SHA1(3060e4a43311069e2691d659c1e0c1a48edfeedb) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12719.b11", 0x000001, 0x40000, CRC(d6888534) SHA1(2201f1921a68cf39e5a94b487c90e48d032d630f) ) ROM_LOAD16_BYTE( "mpr-12726.a11", 0x000000, 0x40000, CRC(ff344945) SHA1(2743778c42f53321f9691d60bbf94ea8baf1382f) ) ROM_LOAD16_BYTE( "mpr-12718.b10", 0x080001, 0x40000, CRC(ba2efc0c) SHA1(459a1a280f870c94aefb70127ed007cb090ed203) ) @@ -2061,7 +2045,7 @@ ROM_START( shdancer ) ROM_LOAD16_BYTE( "epr-12716.b8", 0x180001, 0x40000, CRC(a870e629) SHA1(29f6633240f9737ec19e16100decc7aa045b2060) ) ROM_LOAD16_BYTE( "epr-12723.a8", 0x180000, 0x40000, CRC(c606cf90) SHA1(cb53ae9a6da1eb31c584173d1fbbd1c8539fb54c) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-12720.a4", 0x10000, 0x20000, CRC(7a0d8de1) SHA1(eca5e2104e5b3e772d083a718171234f06ea8a55) ) ROM_LOAD( "mpr-12715.b4", 0x90000, 0x40000, CRC(07051a52) SHA1(d48658497f4a34665d3e051f893ff057c38925ae) ) ROM_END @@ -2072,16 +2056,16 @@ ROM_END ROM Board: 171-5873B */ ROM_START( shdancerj ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12722b.a6", 0x000000, 0x40000, CRC(c00552a2) SHA1(74fddfe596bc00bc11c4a06e2103417e8fd334f6) ) ROM_LOAD16_BYTE( "epr-12721b.a5", 0x000001, 0x40000, CRC(653d351a) SHA1(1a03a154cb81a5a2f28c38aecdd6b5d107ea7ffa) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12712.b1", 0x00000, 0x40000, CRC(9bdabe3d) SHA1(4bb30fa2d4cdefe4a864cef7153b516bc5b02c42) ) ROM_LOAD( "mpr-12713.b2", 0x40000, 0x40000, CRC(852d2b1c) SHA1(8e5bc83d45e48b621ea3016207f2028fe41701e6) ) ROM_LOAD( "mpr-12714.b3", 0x80000, 0x40000, CRC(448226ce) SHA1(3060e4a43311069e2691d659c1e0c1a48edfeedb) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12719.b11", 0x000001, 0x40000, CRC(d6888534) SHA1(2201f1921a68cf39e5a94b487c90e48d032d630f) ) ROM_LOAD16_BYTE( "mpr-12726.a11", 0x000000, 0x40000, CRC(ff344945) SHA1(2743778c42f53321f9691d60bbf94ea8baf1382f) ) ROM_LOAD16_BYTE( "mpr-12718.b10", 0x080001, 0x40000, CRC(ba2efc0c) SHA1(459a1a280f870c94aefb70127ed007cb090ed203) ) @@ -2091,7 +2075,7 @@ ROM_START( shdancerj ) ROM_LOAD16_BYTE( "epr-12716.b8", 0x180001, 0x40000, CRC(a870e629) SHA1(29f6633240f9737ec19e16100decc7aa045b2060) ) ROM_LOAD16_BYTE( "epr-12723.a8", 0x180000, 0x40000, CRC(c606cf90) SHA1(cb53ae9a6da1eb31c584173d1fbbd1c8539fb54c) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-12720.a4", 0x10000, 0x20000, CRC(7a0d8de1) SHA1(eca5e2104e5b3e772d083a718171234f06ea8a55) ) ROM_LOAD( "mpr-12715.b4", 0x90000, 0x40000, CRC(07051a52) SHA1(d48658497f4a34665d3e051f893ff057c38925ae) ) ROM_END @@ -2106,16 +2090,16 @@ ROM_END rom No. 834-7247-01 */ ROM_START( shdancer1 ) - ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "epr-12772b.a6", 0x000000, 0x40000, CRC(6868a4d4) SHA1(f0d142c81fe1eba4f5c59a0163e25c80ccfe85d7) ) ROM_LOAD16_BYTE( "epr-12771b.a5", 0x000001, 0x40000, CRC(04e30c84) SHA1(6c5705f7de6ee1bd754b51988cc7d1008f817c78) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-12712.b1", 0x00000, 0x40000, CRC(9bdabe3d) SHA1(4bb30fa2d4cdefe4a864cef7153b516bc5b02c42) ) ROM_LOAD( "mpr-12713.b2", 0x40000, 0x40000, CRC(852d2b1c) SHA1(8e5bc83d45e48b621ea3016207f2028fe41701e6) ) ROM_LOAD( "mpr-12714.b3", 0x80000, 0x40000, CRC(448226ce) SHA1(3060e4a43311069e2691d659c1e0c1a48edfeedb) ) - ROM_REGION16_BE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x200000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-12719.b11", 0x000001, 0x40000, CRC(d6888534) SHA1(2201f1921a68cf39e5a94b487c90e48d032d630f) ) ROM_LOAD16_BYTE( "mpr-12726.a11", 0x000000, 0x40000, CRC(ff344945) SHA1(2743778c42f53321f9691d60bbf94ea8baf1382f) ) ROM_LOAD16_BYTE( "mpr-12718.b10", 0x080001, 0x40000, CRC(ba2efc0c) SHA1(459a1a280f870c94aefb70127ed007cb090ed203) ) @@ -2125,7 +2109,7 @@ ROM_START( shdancer1 ) ROM_LOAD16_BYTE( "epr-12716.b8", 0x180001, 0x40000, CRC(a870e629) SHA1(29f6633240f9737ec19e16100decc7aa045b2060) ) ROM_LOAD16_BYTE( "epr-12723.a8", 0x180000, 0x40000, CRC(c606cf90) SHA1(cb53ae9a6da1eb31c584173d1fbbd1c8539fb54c) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-12720.a4", 0x10000, 0x20000, CRC(7a0d8de1) SHA1(eca5e2104e5b3e772d083a718171234f06ea8a55) ) ROM_LOAD( "mpr-12715.b4", 0x90000, 0x40000, CRC(07051a52) SHA1(d48658497f4a34665d3e051f893ff057c38925ae) ) ROM_END @@ -2139,19 +2123,19 @@ ROM_END ROM Board: 171-5873B */ ROM_START( wwallyj ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code - custom CPU 317-0197 (?) */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code - custom CPU 317-0197 (?) ROM_LOAD16_BYTE( "epr-14730b.a4", 0x000000, 0x40000, CRC(e72bc17a) SHA1(ac3b7d86571a6f510c202735134c1bc4809aa26e) ) ROM_LOAD16_BYTE( "epr-14731b.a6", 0x000001, 0x40000, CRC(6e3235b9) SHA1(11d5628644e8301550c36c93e5f137c67c11e735) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0197b.key", 0x0000, 0x2000, CRC(f5b7c5b4) SHA1(be971a2349e7c3adc995581355fea48f5123421c) ) - ROM_REGION( 0x0c0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x0c0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-14719.c1", 0x000000, 0x40000, CRC(8b58c743) SHA1(ee50baa184d68558d62d1817b2b9c138226ed25a) ) ROM_LOAD( "mpr-14720.c2", 0x040000, 0x40000, CRC(f96d19f4) SHA1(e350b551db8d01062397cd9a0c952a7b5dbf3fe6) ) ROM_LOAD( "mpr-14721.c3", 0x080000, 0x40000, CRC(c4ced91d) SHA1(4c8a070959ca10e2dddf407ddbba212415d78727) ) - ROM_REGION16_BE( 0x500000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x500000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14726.c10", 0x000001, 0x100000, CRC(7213d1d3) SHA1(b70346a1dd3aa112bc696a7f4dd9ca908c3e5afa) ) ROM_LOAD16_BYTE( "mpr-14732.a10", 0x000000, 0x100000, CRC(04ced549) SHA1(59fd6510f0e14613d830ac6527f12ccc0b9351a5) ) ROM_LOAD16_BYTE( "mpr-14727.c11", 0x200001, 0x100000, CRC(3b74e0f0) SHA1(40432dbbbf75dae1e5e32b7cc2c4884f5e9e3bf5) ) @@ -2159,7 +2143,7 @@ ROM_START( wwallyj ) ROM_LOAD16_BYTE( "mpr-14728.c12", 0x400001, 0x080000, CRC(5b921587) SHA1(2779dc658bb7a51f2399af5a6463ccb2dd388e88) ) ROM_LOAD16_BYTE( "mpr-14734.a12", 0x400000, 0x080000, CRC(6f3f5ed9) SHA1(01972c8bd5bfde58715bc0adc7dea73bf6350a26) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14725.c7", 0x010000, 0x20000, CRC(2b29684f) SHA1(b83962a4f475f9b3e79d4f7ff577b170c4043156) ) ROM_LOAD( "mpr-14724.c6", 0x090000, 0x80000, CRC(47cbea86) SHA1(c70d1fed2912c7c05223ce0bb0941706f957295f) ) ROM_LOAD( "mpr-14723.c5", 0x110000, 0x80000, CRC(bc5adc27) SHA1(09405002b940a3d3eb0f1258f37af51e0b7581b9) ) @@ -2172,19 +2156,19 @@ ROM_END ROM Board: 171-5873B */ ROM_START( wwallyja ) - ROM_REGION( 0x300000, "maincpu", 0 ) /* 68000 code - custom CPU 317-0197a */ + ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code - custom CPU 317-0197a ROM_LOAD16_BYTE( "epr-14730a.a4", 0x000000, 0x40000, CRC(daa7880e) SHA1(9ea83e04c3e07d84afa67097c28b3951c9db8d00) ) ROM_LOAD16_BYTE( "epr-14731a.a6", 0x000001, 0x40000, CRC(5e36353b) SHA1(488c54bbef3c8a129785465887bff3b301e11387) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key ROM_LOAD( "317-0197a.key", 0x0000, 0x2000, CRC(2fb6a9a1) SHA1(2649d0905527dbe0dd0ad5cf68c457b4aa5fb32c) ) - ROM_REGION( 0x0c0000, "gfx1", 0 ) /* tiles */ + ROM_REGION( 0x0c0000, "gfx1", 0 ) // tiles ROM_LOAD( "mpr-14719.c1", 0x000000, 0x40000, CRC(8b58c743) SHA1(ee50baa184d68558d62d1817b2b9c138226ed25a) ) ROM_LOAD( "mpr-14720.c2", 0x040000, 0x40000, CRC(f96d19f4) SHA1(e350b551db8d01062397cd9a0c952a7b5dbf3fe6) ) ROM_LOAD( "mpr-14721.c3", 0x080000, 0x40000, CRC(c4ced91d) SHA1(4c8a070959ca10e2dddf407ddbba212415d78727) ) - ROM_REGION16_BE( 0x500000, "gfx2", 0 ) /* sprites */ + ROM_REGION16_BE( 0x500000, "gfx2", 0 ) // sprites ROM_LOAD16_BYTE( "mpr-14726.c10", 0x000001, 0x100000, CRC(7213d1d3) SHA1(b70346a1dd3aa112bc696a7f4dd9ca908c3e5afa) ) ROM_LOAD16_BYTE( "mpr-14732.a10", 0x000000, 0x100000, CRC(04ced549) SHA1(59fd6510f0e14613d830ac6527f12ccc0b9351a5) ) ROM_LOAD16_BYTE( "mpr-14727.c11", 0x200001, 0x100000, CRC(3b74e0f0) SHA1(40432dbbbf75dae1e5e32b7cc2c4884f5e9e3bf5) ) @@ -2192,7 +2176,7 @@ ROM_START( wwallyja ) ROM_LOAD16_BYTE( "mpr-14728.c12", 0x400001, 0x080000, CRC(5b921587) SHA1(2779dc658bb7a51f2399af5a6463ccb2dd388e88) ) ROM_LOAD16_BYTE( "mpr-14734.a12", 0x400000, 0x080000, CRC(6f3f5ed9) SHA1(01972c8bd5bfde58715bc0adc7dea73bf6350a26) ) - ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) /* sound CPU */ + ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU ROM_LOAD( "epr-14725.c7", 0x010000, 0x20000, CRC(2b29684f) SHA1(b83962a4f475f9b3e79d4f7ff577b170c4043156) ) ROM_LOAD( "mpr-14724.c6", 0x090000, 0x80000, CRC(47cbea86) SHA1(c70d1fed2912c7c05223ce0bb0941706f957295f) ) ROM_LOAD( "mpr-14723.c5", 0x110000, 0x80000, CRC(bc5adc27) SHA1(09405002b940a3d3eb0f1258f37af51e0b7581b9) ) @@ -2207,19 +2191,19 @@ ROM_END * *************************************/ -static DRIVER_INIT( generic_shad ) +void segas18_state::init_generic_shad() { - system18_generic_init(machine, ROM_BOARD_171_SHADOW); + init_generic(ROM_BOARD_171_SHADOW); } -static DRIVER_INIT( generic_5874 ) +void segas18_state::init_generic_5874() { - system18_generic_init(machine, ROM_BOARD_171_5874); + init_generic(ROM_BOARD_171_5874); } -static DRIVER_INIT( generic_5987 ) +void segas18_state::init_generic_5987() { - system18_generic_init(machine, ROM_BOARD_171_5987); + init_generic(ROM_BOARD_171_5987); } @@ -2230,31 +2214,25 @@ static DRIVER_INIT( generic_5987 ) * *************************************/ -static DRIVER_INIT( ddcrew ) +void segas18_state::init_ddcrew() { - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5987); - state->m_custom_io_r = ddcrew_custom_io_r; + init_generic_5987(); + m_custom_io_r = read16_delegate(FUNC(segas18_state::ddcrew_custom_io_r), this); } -static DRIVER_INIT( lghost ) +void segas18_state::init_lghost() { - has_guns=1; - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5987); - state->m_custom_io_r = lghost_custom_io_r; - state->m_custom_io_w = lghost_custom_io_w; + m_has_guns = true; + init_generic_5987(); + m_custom_io_r = read16_delegate(FUNC(segas18_state::lghost_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segas18_state::lghost_custom_io_w), this); } -static DRIVER_INIT( wwally ) +void segas18_state::init_wwally() { - segas1x_state *state = machine.driver_data(); - - DRIVER_INIT_CALL(generic_5987); - state->m_custom_io_r = wwally_custom_io_r; - state->m_custom_io_w = wwally_custom_io_w; + init_generic_5987(); + m_custom_io_r = read16_delegate(FUNC(segas18_state::wwally_custom_io_r), this); + m_custom_io_w = write16_delegate(FUNC(segas18_state::wwally_custom_io_w), this); } @@ -2265,29 +2243,29 @@ static DRIVER_INIT( wwally ) * *************************************/ -// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS -GAME( 1990, astorm, 0, system18, astorm2p, generic_5874, ROT0, "Sega", "Alien Storm (World, 2 Players, FD1094 317-0154)", 0 ) -GAME( 1990, astorm3, astorm, system18, astorm, generic_5874, ROT0, "Sega", "Alien Storm (World, 3 Players, FD1094 317-0148)", 0 ) -GAME( 1990, astormu, astorm, system18, astorm, generic_5874, ROT0, "Sega", "Alien Storm (US, 3 Players, FD1094 317-0147)", 0 ) -GAME( 1990, astormj, astorm, system18, astorm2p, generic_5874, ROT0, "Sega", "Alien Storm (Japan, 2 Players, FD1094 317-0146)", 0 ) -GAME( 1989, bloxeed, 0, system18, bloxeed, generic_5874, ROT0, "Sega", "Bloxeed (Japan, FD1094 317-0139)", 0 ) -GAME( 1991, cltchitr, 0, system18, cltchitr, generic_5987, ROT0, "Sega", "Clutch Hitter (US, FD1094 317-0176)", 0 ) -GAME( 1991, cltchitrj, cltchitr, system18, cltchitr, generic_5987, ROT0, "Sega", "Clutch Hitter (Japan, FD1094 317-0175)", 0 ) -GAME( 1992, desertbr, 0, system18, desertbr, generic_5987, ROT270, "Sega", "Desert Breaker (World, FD1094 317-0196)", 0 ) -GAME( 1992, desertbrj, desertbr, system18, desertbr, generic_5987, ROT270, "Sega", "Desert Breaker (Japan, FD1094 317-0194)", 0 ) -GAME( 1991, ddcrew, 0, system18, ddcrew, ddcrew, ROT0, "Sega", "D. D. Crew (World, 3 Players, FD1094 317-0190)", 0 ) -GAME( 1991, ddcrewu, ddcrew, system18, ddcrew, ddcrew, ROT0, "Sega", "D. D. Crew (US, 4 Players, FD1094 317-0186)", 0 ) -GAME( 1991, ddcrew2, ddcrew, system18, ddcrew2p, ddcrew, ROT0, "Sega", "D. D. Crew (World, 2 Players, FD1094 317-0184)", 0 ) -GAME( 1991, ddcrew1, ddcrew, system18, ddcrew, ddcrew, ROT0, "Sega", "D. D. Crew (World, 4 Players, FD1094 317-0187)", 0 ) -GAME( 1991, ddcrewj, ddcrew, system18, ddcrew2p, ddcrew, ROT0, "Sega", "D. D. Crew (Japan, 2 Players, FD1094 317-0182)", 0 ) -GAME( 1990, lghost, 0, system18, lghost, lghost, ROT0, "Sega", "Laser Ghost (World, 317-0166)", 0 ) -GAME( 1990, lghostu, lghost, system18, lghost, lghost, ROT0, "Sega", "Laser Ghost (US, 317-0165)", 0 ) -GAME( 1990, mwalk, 0, system18_8751, mwalk, generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (World, FD1094/8751 317-0159)", 0 ) -GAME( 1990, mwalku, mwalk, system18_8751, mwalka, generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (US, FD1094/8751 317-0158)", 0 ) -GAME( 1990, mwalkj, mwalk, system18_8751, mwalk, generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157)", 0 ) -GAME( 1989, pontoon, 0, system18, shdancer, generic_5874, ROT0, "Sega", "Pontoon", GAME_NOT_WORKING ) -GAME( 1989, shdancer, 0, system18, shdancer, generic_shad, ROT0, "Sega", "Shadow Dancer (World)", 0 ) -GAME( 1989, shdancerj, shdancer, system18, shdancer, generic_shad, ROT0, "Sega", "Shadow Dancer (Japan)", 0 ) -GAME( 1989, shdancer1, shdancer, system18, shdancer, generic_shad, ROT0, "Sega", "Shadow Dancer (US)", 0 ) -GAME( 1992, wwallyj, 0, system18, wwally, wwally, ROT0, "Sega", "Wally wo Sagase! (rev B, Japan, FD1094 317-0197B)", 0) /* the roms do contain an english logo so maybe there is a world / us set too */ -GAME( 1992, wwallyja, wwallyj, system18, wwally, wwally, ROT0, "Sega", "Wally wo Sagase! (rev A, Japan, FD1094 317-0197A)", 0 ) +// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS +GAME( 1990, astorm, 0, system18_fd1094, astorm2p, segas18_state,init_generic_5874, ROT0, "Sega", "Alien Storm (World, 2 Players, FD1094 317-0154)", 0 ) +GAME( 1990, astorm3, astorm, system18_fd1094, astorm, segas18_state,init_generic_5874, ROT0, "Sega", "Alien Storm (World, 3 Players, FD1094 317-0148)", 0 ) +GAME( 1990, astormu, astorm, system18_fd1094, astorm, segas18_state,init_generic_5874, ROT0, "Sega", "Alien Storm (US, 3 Players, FD1094 317-0147)", 0 ) +GAME( 1990, astormj, astorm, system18_fd1094, astorm2p, segas18_state,init_generic_5874, ROT0, "Sega", "Alien Storm (Japan, 2 Players, FD1094 317-0146)", 0 ) +GAME( 1989, bloxeed, 0, system18_fd1094, bloxeed, segas18_state,init_generic_5874, ROT0, "Sega", "Bloxeed (Japan, FD1094 317-0139)", 0 ) +GAME( 1991, cltchitr, 0, system18_fd1094, cltchitr, segas18_state,init_generic_5987, ROT0, "Sega", "Clutch Hitter (US, FD1094 317-0176)", 0 ) +GAME( 1991, cltchitrj, cltchitr, system18_fd1094, cltchitr, segas18_state,init_generic_5987, ROT0, "Sega", "Clutch Hitter (Japan, FD1094 317-0175)", 0 ) +GAME( 1992, desertbr, 0, system18_fd1094, desertbr, segas18_state,init_generic_5987, ROT270, "Sega", "Desert Breaker (World, FD1094 317-0196)", 0 ) +GAME( 1992, desertbrj, desertbr, system18_fd1094, desertbr, segas18_state,init_generic_5987, ROT270, "Sega", "Desert Breaker (Japan, FD1094 317-0194)", 0 ) +GAME( 1991, ddcrew, 0, system18_fd1094, ddcrew, segas18_state,init_ddcrew, ROT0, "Sega", "D. D. Crew (World, 3 Players, FD1094 317-0190)", 0 ) +GAME( 1991, ddcrewu, ddcrew, system18_fd1094, ddcrew, segas18_state,init_ddcrew, ROT0, "Sega", "D. D. Crew (US, 4 Players, FD1094 317-0186)", 0 ) +GAME( 1991, ddcrew2, ddcrew, system18_fd1094, ddcrew2p, segas18_state,init_ddcrew, ROT0, "Sega", "D. D. Crew (World, 2 Players, FD1094 317-0184)", 0 ) +GAME( 1991, ddcrew1, ddcrew, system18_fd1094, ddcrew, segas18_state,init_ddcrew, ROT0, "Sega", "D. D. Crew (World, 4 Players, FD1094 317-0187)", 0 ) +GAME( 1991, ddcrewj, ddcrew, system18_fd1094, ddcrew2p, segas18_state,init_ddcrew, ROT0, "Sega", "D. D. Crew (Japan, 2 Players, FD1094 317-0182)", 0 ) +GAME( 1990, lghost, 0, system18_fd1094, lghost, segas18_state,init_lghost, ROT0, "Sega", "Laser Ghost (World, FD1094 317-0166)", 0 ) +GAME( 1990, lghostu, lghost, system18_fd1094, lghost, segas18_state,init_lghost, ROT0, "Sega", "Laser Ghost (US, FD1094 317-0165)", 0 ) +GAME( 1990, mwalk, 0, system18_fd1094_i8751,mwalk, segas18_state,init_generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (World, FD1094/8751 317-0159)", 0 ) +GAME( 1990, mwalku, mwalk, system18_fd1094_i8751,mwalka, segas18_state,init_generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (US, FD1094/8751 317-0158)", 0 ) +GAME( 1990, mwalkj, mwalk, system18_fd1094_i8751,mwalk, segas18_state,init_generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157)", 0 ) +GAME( 1989, pontoon, 0, system18, shdancer, segas18_state,init_generic_5874, ROT0, "Sega", "Pontoon", GAME_NOT_WORKING ) +GAME( 1989, shdancer, 0, system18, shdancer, segas18_state,init_generic_shad, ROT0, "Sega", "Shadow Dancer (World)", 0 ) +GAME( 1989, shdancerj, shdancer, system18, shdancer, segas18_state,init_generic_shad, ROT0, "Sega", "Shadow Dancer (Japan)", 0 ) +GAME( 1989, shdancer1, shdancer, system18, shdancer, segas18_state,init_generic_shad, ROT0, "Sega", "Shadow Dancer (US)", 0 ) +GAME( 1992, wwallyj, 0, system18_fd1094, wwally, segas18_state,init_wwally, ROT0, "Sega", "Wally wo Sagase! (rev B, Japan, FD1094 317-0197B)", 0) // the roms do contain an english logo so maybe there is a world / us set too +GAME( 1992, wwallyja, wwallyj, system18_fd1094, wwally, segas18_state,init_wwally, ROT0, "Sega", "Wally wo Sagase! (rev A, Japan, FD1094 317-0197A)", 0 ) diff --git a/src/mame/drivers/segas24.c b/src/mame/drivers/segas24.c index 3aec111ce9a..062ea164ae3 100644 --- a/src/mame/drivers/segas24.c +++ b/src/mame/drivers/segas24.c @@ -338,6 +338,7 @@ Notes: #include "sound/ym2151.h" #include "sound/dac.h" #include "sound/2151intf.h" +#include "machine/fd1094.h" #include "machine/nvram.h" #include "video/segaic24.h" #include "includes/segas24.h" @@ -686,14 +687,13 @@ void segas24_state::reset_reset() int changed = resetcontrol ^ prev_resetcontrol; if(changed & 2) { if(resetcontrol & 2) { - cputag_set_input_line(machine(), "sub", INPUT_LINE_HALT, CLEAR_LINE); - cputag_set_input_line(machine(), "sub", INPUT_LINE_RESET, PULSE_LINE); + cputag_set_input_line(machine(), "subcpu", INPUT_LINE_HALT, CLEAR_LINE); + cputag_set_input_line(machine(), "subcpu", INPUT_LINE_RESET, PULSE_LINE); // mame_printf_debug("enable 2nd cpu!\n"); // debugger_break(machine); - s24_fd1094_machine_init(machine()); } else - cputag_set_input_line(machine(), "sub", INPUT_LINE_HALT, ASSERT_LINE); + cputag_set_input_line(machine(), "subcpu", INPUT_LINE_HALT, ASSERT_LINE); } if(changed & 4) devtag_reset(machine(), "ymsnd"); @@ -757,7 +757,7 @@ WRITE8_MEMBER( segas24_state::frc_w ) { /* Undocumented behaviour, Bonanza Bros. seems to use this for irq ack'ing ... */ cputag_set_input_line(machine(), "maincpu", IRQ_FRC+1, CLEAR_LINE); - cputag_set_input_line(machine(), "sub", IRQ_FRC+1, CLEAR_LINE); + cputag_set_input_line(machine(), "subcpu", IRQ_FRC+1, CLEAR_LINE); } @@ -876,7 +876,7 @@ static TIMER_DEVICE_CALLBACK( irq_timer_cb ) if(state->irq_allow0 & (1 << IRQ_TIMER)) cputag_set_input_line(timer.machine(), "maincpu", IRQ_TIMER+1, ASSERT_LINE); if(state->irq_allow1 & (1 << IRQ_TIMER)) - cputag_set_input_line(timer.machine(), "sub", IRQ_TIMER+1, ASSERT_LINE); + cputag_set_input_line(timer.machine(), "subcpu", IRQ_TIMER+1, ASSERT_LINE); if(state->irq_tmode == 1 || state->irq_tmode == 2) timer.machine().primary_screen->update_now(); @@ -888,8 +888,8 @@ static TIMER_DEVICE_CALLBACK( irq_timer_clear_cb ) state->irq_sprite = state->irq_vblank = 0; cputag_set_input_line(timer.machine(), "maincpu", IRQ_VBLANK+1, CLEAR_LINE); cputag_set_input_line(timer.machine(), "maincpu", IRQ_SPRITE+1, CLEAR_LINE); - cputag_set_input_line(timer.machine(), "sub", IRQ_VBLANK+1, CLEAR_LINE); - cputag_set_input_line(timer.machine(), "sub", IRQ_SPRITE+1, CLEAR_LINE); + cputag_set_input_line(timer.machine(), "subcpu", IRQ_VBLANK+1, CLEAR_LINE); + cputag_set_input_line(timer.machine(), "subcpu", IRQ_SPRITE+1, CLEAR_LINE); } static TIMER_DEVICE_CALLBACK( irq_frc_cb ) @@ -900,7 +900,7 @@ static TIMER_DEVICE_CALLBACK( irq_frc_cb ) cputag_set_input_line(timer.machine(), "maincpu", IRQ_FRC+1, ASSERT_LINE); if(state->irq_allow1 & (1 << IRQ_FRC) && state->frc_mode == 1) - cputag_set_input_line(timer.machine(), "sub", IRQ_FRC+1, ASSERT_LINE); + cputag_set_input_line(timer.machine(), "subcpu", IRQ_FRC+1, ASSERT_LINE); } void segas24_state::irq_init() @@ -950,11 +950,11 @@ WRITE16_MEMBER(segas24_state::irq_w) case 3: irq_allow1 = data & 0x3f; irq_timer_pend1 = 0; - cputag_set_input_line(machine(), "sub", IRQ_TIMER+1, CLEAR_LINE); - cputag_set_input_line(machine(), "sub", IRQ_YM2151+1, irq_yms && (irq_allow1 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE); - cputag_set_input_line(machine(), "sub", IRQ_VBLANK+1, irq_vblank && (irq_allow1 & (1 << IRQ_VBLANK)) ? ASSERT_LINE : CLEAR_LINE); - cputag_set_input_line(machine(), "sub", IRQ_SPRITE+1, irq_sprite && (irq_allow1 & (1 << IRQ_SPRITE)) ? ASSERT_LINE : CLEAR_LINE); - //cputag_set_input_line(machine(), "sub", IRQ_FRC+1, irq_frc && (irq_allow1 & (1 << IRQ_FRC)) ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(machine(), "subcpu", IRQ_TIMER+1, CLEAR_LINE); + cputag_set_input_line(machine(), "subcpu", IRQ_YM2151+1, irq_yms && (irq_allow1 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(machine(), "subcpu", IRQ_VBLANK+1, irq_vblank && (irq_allow1 & (1 << IRQ_VBLANK)) ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(machine(), "subcpu", IRQ_SPRITE+1, irq_sprite && (irq_allow1 & (1 << IRQ_SPRITE)) ? ASSERT_LINE : CLEAR_LINE); + //cputag_set_input_line(machine(), "subcpu", IRQ_FRC+1, irq_frc && (irq_allow1 & (1 << IRQ_FRC)) ? ASSERT_LINE : CLEAR_LINE); break; } } @@ -978,7 +978,7 @@ READ16_MEMBER(segas24_state::irq_r) break; case 3: irq_timer_pend1 = 0; - cputag_set_input_line(machine(), "sub", IRQ_TIMER+1, CLEAR_LINE); + cputag_set_input_line(machine(), "subcpu", IRQ_TIMER+1, CLEAR_LINE); break; } irq_timer_sync(); @@ -1005,7 +1005,7 @@ static TIMER_DEVICE_CALLBACK(irq_vbl) cputag_set_input_line(timer.machine(), "maincpu", 1+irq, ASSERT_LINE); if(state->irq_allow1 & mask) - cputag_set_input_line(timer.machine(), "sub", 1+irq, ASSERT_LINE); + cputag_set_input_line(timer.machine(), "subcpu", 1+irq, ASSERT_LINE); if(scanline == 384) { // Ensure one index pulse every 20 frames @@ -1025,7 +1025,7 @@ static void irq_ym(device_t *device, int irq) segas24_state *state = device->machine().driver_data(); state->irq_yms = irq; cputag_set_input_line(device->machine(), "maincpu", IRQ_YM2151+1, state->irq_yms && (state->irq_allow0 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE); - cputag_set_input_line(device->machine(), "sub", IRQ_YM2151+1, state->irq_yms && (state->irq_allow1 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine(), "subcpu", IRQ_YM2151+1, state->irq_yms && (state->irq_allow1 & (1 << IRQ_YM2151)) ? ASSERT_LINE : CLEAR_LINE); } @@ -1205,7 +1205,7 @@ static ADDRESS_MAP_START( system24_cpu1_map, AS_PROGRAM, 16, segas24_state ) AM_RANGE(0xcc0002, 0xcc0003) AM_MIRROR(0x03fff8) AM_READWRITE8(frc_mode_r, frc_mode_w,0x00ff) AM_RANGE(0xcc0004, 0xcc0005) AM_MIRROR(0x03fff8) AM_READWRITE8(frc_r, frc_w,0x00ff) AM_RANGE(0xcc0006, 0xcc0007) AM_MIRROR(0x03fff8) AM_READWRITE(mlatch_r, mlatch_w) - AM_RANGE(0xf00000, 0xf3ffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("share2") + AM_RANGE(0xf00000, 0xf3ffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("subcpu") AM_RANGE(0xf80000, 0xfbffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("share1") ADDRESS_MAP_END @@ -1218,7 +1218,7 @@ ADDRESS_MAP_END *************************************/ static ADDRESS_MAP_START( system24_cpu2_map, AS_PROGRAM, 16, segas24_state ) - AM_RANGE(0x000000, 0x03ffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("share2") + AM_RANGE(0x000000, 0x03ffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("subcpu") AM_RANGE(0x080000, 0x0bffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("share1") AM_RANGE(0x100000, 0x13ffff) AM_MIRROR(0x0c0000) AM_ROM AM_REGION("maincpu", 0) AM_RANGE(0x200000, 0x20ffff) AM_MIRROR(0x110000) AM_DEVREADWRITE("tile", segas24_tile, tile_r, tile_w) @@ -1246,7 +1246,7 @@ static ADDRESS_MAP_START( system24_cpu2_map, AS_PROGRAM, 16, segas24_state ) AM_RANGE(0xcc0002, 0xcc0003) AM_MIRROR(0x03fff8) AM_READWRITE8(frc_mode_r, frc_mode_w,0x00ff) AM_RANGE(0xcc0004, 0xcc0005) AM_MIRROR(0x03fff8) AM_READWRITE8(frc_r, frc_w,0x00ff) AM_RANGE(0xcc0006, 0xcc0007) AM_MIRROR(0x03fff8) AM_READWRITE(mlatch_r, mlatch_w) - AM_RANGE(0xf00000, 0xf3ffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("share2") + AM_RANGE(0xf00000, 0xf3ffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("subcpu") AM_RANGE(0xf80000, 0xfbffff) AM_MIRROR(0x040000) AM_RAM AM_SHARE("share1") ADDRESS_MAP_END @@ -1279,7 +1279,7 @@ static MACHINE_START( system24 ) static MACHINE_RESET( system24 ) { segas24_state *state = machine.driver_data(); - cputag_set_input_line(machine, "sub", INPUT_LINE_HALT, ASSERT_LINE); + cputag_set_input_line(machine, "subcpu", INPUT_LINE_HALT, ASSERT_LINE); state->prev_resetcontrol = state->resetcontrol = 0x06; state->fdc_init(); state->curbank = 0; @@ -1950,7 +1950,7 @@ static MACHINE_CONFIG_START( system24, segas24_state ) MCFG_CPU_PROGRAM_MAP(system24_cpu1_map) MCFG_TIMER_ADD_SCANLINE("scantimer", irq_vbl, "screen", 0, 1) - MCFG_CPU_ADD("sub", M68000, MASTER_CLOCK/2) + MCFG_CPU_ADD("subcpu", M68000, MASTER_CLOCK/2) MCFG_CPU_PROGRAM_MAP(system24_cpu2_map) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) @@ -1991,6 +1991,11 @@ static MACHINE_CONFIG_DERIVED( system24_floppy, system24 ) MCFG_NVRAM_ADD_NO_FILL("floppy_nvram") MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( system24_floppy_fd1094, system24_floppy ) + MCFG_CPU_REPLACE("subcpu", FD1094, MASTER_CLOCK/2) + MCFG_CPU_PROGRAM_MAP(system24_cpu2_map) +MACHINE_CONFIG_END + /************************************* * @@ -2154,7 +2159,7 @@ ROM_START( sspirtfc ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-02c.key", 0x0000, 0x2000, CRC(ebae170e) SHA1(b6d1e1b6943a35b96e98e426ecb39bb5a42fb643) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2166,7 +2171,7 @@ ROM_START( sgmast ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-05d.key", 0x0000, 0x2000, NO_DUMP ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2182,7 +2187,7 @@ ROM_START( sgmastc ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-05c.key", 0x0000, 0x2000, CRC(ae0eabe5) SHA1(692d7565bf9c5b32cc80bb4bd88c9193aa04cbb0) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2194,7 +2199,7 @@ ROM_START( sgmastj ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-05b.key", 0x0000, 0x2000, CRC(adc0c83b) SHA1(2328d82d5057062eeb0072fd57f0422218cf24fc) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2206,7 +2211,7 @@ ROM_START( qsww ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-08b.key", 0x0000, 0x2000, CRC(fe0a336a) SHA1(f7a5b2c1a057d0bb8c1ae0453c58aa8f5fb731b9) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2218,7 +2223,7 @@ ROM_START( gground ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-03d.key", 0x0000, 0x2000, CRC(e1785bbd) SHA1(b4bebb2829299f1c0815d6a5f317a2526b322f63) ) /* Also labeled "rev-A" but is it different? */ ROM_REGION( 0x1c2000, "floppy", 0) @@ -2230,7 +2235,7 @@ ROM_START( ggroundj ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-03b.key", 0x0000, 0x2000, CRC(84aecdba) SHA1(ceddf967359a6e76543fe1ab00be53d0a11fe1ab) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2242,7 +2247,7 @@ ROM_START( crkdown ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-04c.key", 0x0000, 0x2000, CRC(16e978cc) SHA1(0e1482b5efa93b732d4cf0990919cb3fc903dca7) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2254,7 +2259,7 @@ ROM_START( crkdownu ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-04d.key", 0x0000, 0x2000, CRC(934ac358) SHA1(73418e22c9d201bc3fec5c63284858958c010e05) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2266,7 +2271,7 @@ ROM_START( crkdownj ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-04b.key", 0x0000, 0x2000, CRC(4a99a202) SHA1(d7375f09e7246ecd60ba0e48f049e9e252af92a8) ) /* Also labeled "rev-A" but is it different? */ ROM_REGION( 0x1c2000, "floppy", 0) @@ -2302,7 +2307,7 @@ ROM_START( dcclubfd ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-09d.key", 0x0000, 0x2000, CRC(a91ebffb) SHA1(70b8b4272ca456491f254d115b434bb4ce73f049) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2314,7 +2319,7 @@ ROM_START( roughrac ) ROM_LOAD16_BYTE( "epr-12187.ic2", 0x000000, 0x20000, CRC(e83783f3) SHA1(4b3b32df7de85aef9cd77c8a4ffc17e10466b638) ) ROM_LOAD16_BYTE( "epr-12186.ic1", 0x000001, 0x20000, CRC(ce76319d) SHA1(0ede61f0700f9161285c768fa97636f0e42b96f8) ) - ROM_REGION( 0x2000, "fd1094key", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "subcpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0058-06b.key", 0x000000, 0x2000, CRC(6a5bf536) SHA1(3fc3e93ce8a47d7ee86da889efad2e7eca6e2ee9) ) ROM_REGION( 0x1c2000, "floppy", 0) @@ -2434,7 +2439,6 @@ static DRIVER_INIT( sspirits ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = 0; state->track_size = 0x2d00; - s24_fd1094_driver_init(machine); } static DRIVER_INIT( sspiritj ) @@ -2444,7 +2448,6 @@ static DRIVER_INIT( sspiritj ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = 0; state->track_size = 0x2f00; - s24_fd1094_driver_init(machine); } static DRIVER_INIT( dcclubfd ) @@ -2454,7 +2457,6 @@ static DRIVER_INIT( dcclubfd ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = segas24_state::dcclub_mlt; state->track_size = 0x2d00; - s24_fd1094_driver_init(machine); } @@ -2465,7 +2467,6 @@ static DRIVER_INIT( sgmast ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = 0; state->track_size = 0x2d00; - s24_fd1094_driver_init(machine); } static DRIVER_INIT( qsww ) @@ -2475,7 +2476,6 @@ static DRIVER_INIT( qsww ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = 0; state->track_size = 0x2d00; - s24_fd1094_driver_init(machine); } static DRIVER_INIT( gground ) @@ -2485,7 +2485,6 @@ static DRIVER_INIT( gground ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = 0; state->track_size = 0x2d00; - s24_fd1094_driver_init(machine); } static DRIVER_INIT( crkdown ) @@ -2495,7 +2494,6 @@ static DRIVER_INIT( crkdown ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = 0; state->track_size = 0x2d00; - s24_fd1094_driver_init(machine); } static DRIVER_INIT( roughrac ) @@ -2505,7 +2503,6 @@ static DRIVER_INIT( roughrac ) state->io_w = &segas24_state::hotrod_io_w; state->mlatch_table = 0; state->track_size = 0x2d00; - s24_fd1094_driver_init(machine); } @@ -2515,27 +2512,27 @@ static DRIVER_INIT( roughrac ) * *************************************/ -// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS +// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS /* Disk Based Games */ -/* 01 */GAME( 1988, hotrod, 0, system24_floppy, hotrod, hotrod, ROT0, "Sega", "Hot Rod (World, 3 Players, Turbo set 1, Floppy Based)", 0 ) -/* 01 */GAME( 1988, hotroda, hotrod, system24_floppy, hotrod, hotrod, ROT0, "Sega", "Hot Rod (World, 3 Players, Turbo set 2, Floppy Based)", 0 ) -/* 01 */GAME( 1988, hotrodj, hotrod, system24_floppy, hotrodj, hotrod, ROT0, "Sega", "Hot Rod (Japan, 4 Players, Floppy Based)", 0 ) -/* 02 */GAME( 1988, sspirits, 0, system24_floppy, sspirits, sspirits, ROT270, "Sega", "Scramble Spirits (World, Floppy Based)", 0 ) -/* 02 */GAME( 1988, sspiritj, sspirits, system24_floppy, sspirits, sspiritj, ROT270, "Sega", "Scramble Spirits (Japan, Floppy DS3-5000-02-REV-A Based)", 0 ) -/* 02 */GAME( 1988, sspirtfc, sspirits, system24_floppy, sspirits, sspirits, ROT270, "Sega", "Scramble Spirits (World, Floppy Based, FD1094 317-0058-02c)", GAME_NOT_WORKING ) /* MISSING disk image */ -/* 03 */GAME( 1988, gground, 0, system24_floppy, gground, gground, ROT270, "Sega", "Gain Ground (World, 3 Players, Floppy Based, FD1094 317-0058-03d Rev A)", 0 ) -/* 03 */GAME( 1988, ggroundj, gground, system24_floppy, gground, gground, ROT270, "Sega", "Gain Ground (Japan, 2 Players, Floppy Based, FD1094 317-0058-03b)", 0 ) -/* 04 */GAME( 1989, crkdown, 0, system24_floppy, crkdown, crkdown, ROT0, "Sega", "Crack Down (World, Floppy Based, FD1094 317-0058-04c)", GAME_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display) -/* 04 */GAME( 1989, crkdownu, crkdown, system24_floppy, crkdown, crkdown, ROT0, "Sega", "Crack Down (US, Floppy Based, FD1094 317-0058-04d)", GAME_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display) -/* 04 */GAME( 1989, crkdownj, crkdown, system24_floppy, crkdown, crkdown, ROT0, "Sega", "Crack Down (Japan, Floppy Based, FD1094 317-0058-04b Rev A)", GAME_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display) -/* 05 */GAME( 1989, sgmast, 0, system24_floppy, sgmast, sgmast, ROT0, "Sega", "Super Masters Golf (World?, Floppy Based, FD1094 317-0058-05d?)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) // NOT decrypted -/* 05 */GAME( 1989, sgmastc, sgmast, system24_floppy, sgmast, sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (World, Floppy Based, FD1094 317-0058-05c)", GAME_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs? -/* 05 */GAME( 1989, sgmastj, sgmast, system24_floppy, sgmastj, sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (Japan, Floppy Based, FD1094 317-0058-05b)", GAME_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs? -/* 06 */GAME( 1990, roughrac, 0, system24_floppy, roughrac, roughrac, ROT0, "Sega", "Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b)", 0 ) -/* 07 */GAME( 1990, bnzabros, 0, system24_floppy, bnzabros, bnzabros, ROT0, "Sega", "Bonanza Bros (US, Floppy DS3-5000-07d? Based)", 0 ) -/* 07 */GAME( 1990, bnzabrosj, bnzabros, system24_floppy, bnzabros, bnzabros, ROT0, "Sega", "Bonanza Bros (Japan, Floppy DS3-5000-07b Based)", 0 ) -/* 08 */GAME( 1991, qsww, 0, system24_floppy, qsww, qsww, ROT0, "Sega", "Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b)", GAME_IMPERFECT_GRAPHICS ) // wrong bg colour on title -/* 09 */GAME( 1991, dcclubfd, dcclub, system24_floppy, dcclub, dcclubfd, ROT0, "Sega", "Dynamic Country Club (US, Floppy Based, FD1094 317-0058-09d)", 0 ) +/* 01 */GAME( 1988, hotrod, 0, system24_floppy, hotrod, hotrod, ROT0, "Sega", "Hot Rod (World, 3 Players, Turbo set 1, Floppy Based)", 0 ) +/* 01 */GAME( 1988, hotroda, hotrod, system24_floppy, hotrod, hotrod, ROT0, "Sega", "Hot Rod (World, 3 Players, Turbo set 2, Floppy Based)", 0 ) +/* 01 */GAME( 1988, hotrodj, hotrod, system24_floppy, hotrodj, hotrod, ROT0, "Sega", "Hot Rod (Japan, 4 Players, Floppy Based)", 0 ) +/* 02 */GAME( 1988, sspirits, 0, system24_floppy, sspirits, sspirits, ROT270, "Sega", "Scramble Spirits (World, Floppy Based)", 0 ) +/* 02 */GAME( 1988, sspiritj, sspirits, system24_floppy, sspirits, sspiritj, ROT270, "Sega", "Scramble Spirits (Japan, Floppy DS3-5000-02-REV-A Based)", 0 ) +/* 02 */GAME( 1988, sspirtfc, sspirits, system24_floppy_fd1094, sspirits, sspirits, ROT270, "Sega", "Scramble Spirits (World, Floppy Based, FD1094 317-0058-02c)", GAME_NOT_WORKING ) /* MISSING disk image */ +/* 03 */GAME( 1988, gground, 0, system24_floppy_fd1094, gground, gground, ROT270, "Sega", "Gain Ground (World, 3 Players, Floppy Based, FD1094 317-0058-03d Rev A)", 0 ) +/* 03 */GAME( 1988, ggroundj, gground, system24_floppy_fd1094, gground, gground, ROT270, "Sega", "Gain Ground (Japan, 2 Players, Floppy Based, FD1094 317-0058-03b)", 0 ) +/* 04 */GAME( 1989, crkdown, 0, system24_floppy_fd1094, crkdown, crkdown, ROT0, "Sega", "Crack Down (World, Floppy Based, FD1094 317-0058-04c)", GAME_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display) +/* 04 */GAME( 1989, crkdownu, crkdown, system24_floppy_fd1094, crkdown, crkdown, ROT0, "Sega", "Crack Down (US, Floppy Based, FD1094 317-0058-04d)", GAME_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display) +/* 04 */GAME( 1989, crkdownj, crkdown, system24_floppy_fd1094, crkdown, crkdown, ROT0, "Sega", "Crack Down (Japan, Floppy Based, FD1094 317-0058-04b Rev A)", GAME_IMPERFECT_GRAPHICS ) // clipping probs / solid layer probs? (radar display) +/* 05 */GAME( 1989, sgmast, 0, system24_floppy_fd1094, sgmast, sgmast, ROT0, "Sega", "Super Masters Golf (World?, Floppy Based, FD1094 317-0058-05d?)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) // NOT decrypted +/* 05 */GAME( 1989, sgmastc, sgmast, system24_floppy_fd1094, sgmast, sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (World, Floppy Based, FD1094 317-0058-05c)", GAME_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs? +/* 05 */GAME( 1989, sgmastj, sgmast, system24_floppy_fd1094, sgmastj, sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (Japan, Floppy Based, FD1094 317-0058-05b)", GAME_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs? +/* 06 */GAME( 1990, roughrac, 0, system24_floppy_fd1094, roughrac, roughrac, ROT0, "Sega", "Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b)", 0 ) +/* 07 */GAME( 1990, bnzabros, 0, system24_floppy, bnzabros, bnzabros, ROT0, "Sega", "Bonanza Bros (US, Floppy DS3-5000-07d? Based)", 0 ) +/* 07 */GAME( 1990, bnzabrosj, bnzabros, system24_floppy, bnzabros, bnzabros, ROT0, "Sega", "Bonanza Bros (Japan, Floppy DS3-5000-07b Based)", 0 ) +/* 08 */GAME( 1991, qsww, 0, system24_floppy_fd1094, qsww, qsww, ROT0, "Sega", "Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b)", GAME_IMPERFECT_GRAPHICS ) // wrong bg colour on title +/* 09 */GAME( 1991, dcclubfd, dcclub, system24_floppy_fd1094, dcclub, dcclubfd, ROT0, "Sega", "Dynamic Country Club (US, Floppy Based, FD1094 317-0058-09d)", 0 ) // YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS /* ROM Based */ diff --git a/src/mame/drivers/segaxbd.c b/src/mame/drivers/segaxbd.c index 4904ad081fc..4113b6176e5 100644 --- a/src/mame/drivers/segaxbd.c +++ b/src/mame/drivers/segaxbd.c @@ -4,6 +4,37 @@ Special thanks to Charles MacDonald for his priceless assistance +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + **************************************************************************** Known bugs: @@ -26,7 +57,7 @@ After Burner (C) Sega 1987 After Burner II (C) Sega 1987 *Caribbean Boule (C) Sega 1992 GP Rider (C) Sega 1990 -*Last Survivor (C) Sega 1989 +Last Survivor (C) Sega 1989 Line of Fire (C) Sega 1989 Racing Hero (C) Sega 1990 Royal Ascot (C) Sega 1991 dumped, but very likely incomplete @@ -267,7 +298,6 @@ ROMs: #include "machine/nvram.h" #include "sound/2151intf.h" #include "sound/segapcm.h" -#include "video/segaic16.h" #include "includes/segaipt.h" @@ -284,7 +314,7 @@ ROMs: static void update_main_irqs(running_machine &machine) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); int irq = 0; if (state->m_timer_irq_state) @@ -311,9 +341,9 @@ static void update_main_irqs(running_machine &machine) } -static TIMER_DEVICE_CALLBACK( scanline_callback ) +static TIMER_CALLBACK( scanline_callback ) { - segas1x_state *state = timer.machine().driver_data(); + segaxbd_state *state = machine.driver_data(); int scanline = param; int next_scanline = (scanline + 2) % 262; @@ -342,16 +372,16 @@ static TIMER_DEVICE_CALLBACK( scanline_callback ) /* update IRQs on the main CPU */ if (update) - update_main_irqs(timer.machine()); + update_main_irqs(machine); /* come back in 2 scanlines */ - timer.adjust(timer.machine().primary_screen->time_until_pos(next_scanline), next_scanline); + state->m_scanline_timer->adjust(machine.primary_screen->time_until_pos(next_scanline), next_scanline); } static void timer_ack_callback(running_machine &machine) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); /* clear the timer IRQ */ state->m_timer_irq_state = 0; @@ -368,7 +398,7 @@ static void timer_ack_callback(running_machine &machine) static TIMER_CALLBACK( delayed_sound_data_w ) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); state->soundlatch_byte_w(*space, 0, param); @@ -388,7 +418,7 @@ static void sound_data_w(running_machine &machine, UINT8 data) static void sound_cpu_irq(device_t *device, int state) { - segas1x_state *driver = device->machine().driver_data(); + segaxbd_state *driver = device->machine().driver_data(); device_set_input_line(driver->m_soundcpu, 0, state); } @@ -396,7 +426,7 @@ static void sound_cpu_irq(device_t *device, int state) static READ8_HANDLER( sound_data_r ) { - segas1x_state *state = space->machine().driver_data(); + segaxbd_state *state = space->machine().driver_data(); device_set_input_line(&space->device(), INPUT_LINE_NMI, CLEAR_LINE); return state->soundlatch_byte_r(*space, offset); @@ -412,7 +442,7 @@ static READ8_HANDLER( sound_data_r ) static READ16_HANDLER( adc_r ) { - segas1x_state *state = space->machine().driver_data(); + segaxbd_state *state = space->machine().driver_data(); static const char *const ports[] = { "ADC0", "ADC1", "ADC2", "ADC3", "ADC4", "ADC5", "ADC6", "ADC7" }; int which = (state->m_iochip_regs[0][2] >> 2) & 7; @@ -435,7 +465,7 @@ static WRITE16_HANDLER( adc_w ) INLINE UINT16 iochip_r(running_machine &machine, int which, int port, int inputval) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); UINT16 result = state->m_iochip_regs[which][port]; /* if there's custom I/O, do that to get the input value */ @@ -445,9 +475,9 @@ INLINE UINT16 iochip_r(running_machine &machine, int which, int port, int inputv /* for ports 0-3, the direction is controlled 4 bits at a time by register 6 */ if (port <= 3) { - if (state->m_iochip_force_input || ((state->m_iochip_regs[which][6] >> (2 * port + 0)) & 1)) + if ((state->m_iochip_regs[which][6] >> (2 * port + 0)) & 1) result = (result & ~0x0f) | (inputval & 0x0f); - if (state->m_iochip_force_input || ((state->m_iochip_regs[which][6] >> (2 * port + 1)) & 1)) + if ((state->m_iochip_regs[which][6] >> (2 * port + 1)) & 1) result = (result & ~0xf0) | (inputval & 0xf0); } @@ -504,7 +534,7 @@ static READ16_HANDLER( iochip_0_r ) static WRITE16_HANDLER( iochip_0_w ) { - segas1x_state *state = space->machine().driver_data(); + segaxbd_state *state = space->machine().driver_data(); UINT8 oldval; /* access is via the low 8 bits */ @@ -590,7 +620,7 @@ static READ16_HANDLER( iochip_1_r ) static WRITE16_HANDLER( iochip_1_w ) { - segas1x_state *state = space->machine().driver_data(); + segaxbd_state *state = space->machine().driver_data(); /* access is via the low 8 bits */ if (!ACCESSING_BITS_0_7) @@ -680,6 +710,21 @@ static void smgp_iochip0_motor_w(running_machine &machine, UINT8 data) } +// Last Survivor +static UINT8 lastsurv_iochip0_port_r(running_machine &machine, UINT8 data) +{ + static const char * const port_names[] = { "MUX0", "MUX1", "MUX2", "MUX3" }; + segaxbd_state *state = machine.driver_data(); + return state->ioport(port_names[state->m_lastsurv_mux])->read_safe(0xff); +} + +static void lastsurv_iochip0_muxer_w(running_machine &machine, UINT8 data) +{ + segaxbd_state *state = machine.driver_data(); + state->m_lastsurv_mux = (data >> 5) & 3; +} + + /************************************* * @@ -687,7 +732,7 @@ static void smgp_iochip0_motor_w(running_machine &machine, UINT8 data) * *************************************/ -static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0x3fffff) AM_RANGE(0x000000, 0x07ffff) AM_ROM @@ -705,7 +750,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, segas1x_state ) AM_RANGE(0x140000, 0x14000f) AM_MIRROR(0x00fff0) AM_READWRITE_LEGACY(iochip_0_r, iochip_0_w) AM_RANGE(0x150000, 0x15000f) AM_MIRROR(0x00fff0) AM_READWRITE_LEGACY(iochip_1_r, iochip_1_w) AM_RANGE(0x160000, 0x16ffff) AM_WRITE_LEGACY(iocontrol_w) - AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("sub", 0x00000) + AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("subcpu", 0x00000) AM_RANGE(0x280000, 0x283fff) AM_MIRROR(0x01c000) AM_RAM AM_SHARE("share3") AM_RANGE(0x2a0000, 0x2a3fff) AM_MIRROR(0x01c000) AM_RAM AM_SHARE("share4") AM_RANGE(0x2e0000, 0x2e0007) AM_MIRROR(0x003ff8) AM_DEVREADWRITE_LEGACY("5248_subx", segaic16_multiply_r, segaic16_multiply_w) @@ -726,7 +771,7 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 16, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xfffff) AM_RANGE(0x000000, 0x07ffff) AM_ROM @@ -748,14 +793,14 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf0ff) AM_MIRROR(0x0700) AM_DEVREADWRITE_LEGACY("pcm", sega_pcm_r, sega_pcm_w) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) @@ -784,27 +829,27 @@ static WRITE16_HANDLER( smgp_excs_w ) // Sound Board // The extra sound is used when the cabinet is Deluxe(Air Drive), or Cockpit. The soundlatch is // shared with the main board sound. -static ADDRESS_MAP_START( smgp_sound2_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( smgp_sound2_map, AS_PROGRAM, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf0ff) AM_MIRROR(0x0700) AM_DEVREADWRITE_LEGACY("pcm2", sega_pcm_r, sega_pcm_w) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( smgp_sound2_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( smgp_sound2_portmap, AS_IO, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_READ_LEGACY(sound_data_r) ADDRESS_MAP_END // Motor Board, not yet emulated -static ADDRESS_MAP_START( smgp_airdrive_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( smgp_airdrive_map, AS_PROGRAM, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xafff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( smgp_airdrive_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( smgp_airdrive_portmap, AS_IO, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x01, 0x01) AM_READNOP @@ -812,14 +857,14 @@ static ADDRESS_MAP_START( smgp_airdrive_portmap, AS_IO, 8, segas1x_state ) ADDRESS_MAP_END // Link Board, not yet emulated -static ADDRESS_MAP_START( smgp_comm_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( smgp_comm_map, AS_PROGRAM, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x3fff) AM_RAM AM_RANGE(0x4000, 0x47ff) AM_RAM // MB8421 Dual-Port SRAM ADDRESS_MAP_END -static ADDRESS_MAP_START( smgp_comm_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( smgp_comm_portmap, AS_IO, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_END @@ -848,13 +893,13 @@ static WRITE16_HANDLER( rascot_excs_w ) } // Z80, unknown function -static ADDRESS_MAP_START( rascot_z80_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( rascot_z80_map, AS_PROGRAM, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xafff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( rascot_z80_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( rascot_z80_portmap, AS_IO, 8, segaxbd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_END @@ -1063,6 +1108,71 @@ static INPUT_PORTS_START( thndrbd1 ) INPUT_PORTS_END +static const ioport_value lastsurv_position_table[] = +{ + 0x0f ^ 0x08 ^ 0x01, // down + left + 0x0f ^ 0x01, // left + 0x0f ^ 0x04 ^ 0x01, // up + left + 0x0f ^ 0x04, // up + 0x0f ^ 0x04 ^ 0x02, // up + right + 0x0f ^ 0x02, // right + 0x0f ^ 0x08 ^ 0x02, // down + right + 0x0f ^ 0x08, // down +}; +static INPUT_PORTS_START( lastsurv ) + PORT_INCLUDE( xboard_generic ) + + PORT_MODIFY("IO1PORTA") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) + + PORT_START("MUX0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0xf0, 0xf0 ^ 0x40, IPT_POSITIONAL ) PORT_PLAYER(2) PORT_POSITIONS(8) PORT_REMAP_TABLE(lastsurv_position_table) PORT_WRAPS PORT_SENSITIVITY(1) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_CODE_DEC(KEYCODE_Q) PORT_CODE_INC(KEYCODE_W) + + PORT_START("MUX1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0xf0, 0xf0 ^ 0x40, IPT_POSITIONAL ) PORT_PLAYER(1) PORT_POSITIONS(8) PORT_REMAP_TABLE(lastsurv_position_table) PORT_WRAPS PORT_SENSITIVITY(1) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) + + PORT_START("MUX2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0e, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("MUX3") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("IO1PORTD") + PORT_DIPNAME( 0x03, 0x03, "I.D. No" ) PORT_DIPLOCATION("SWB:1,2") + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x01, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + PORT_DIPNAME( 0x0c, 0x0c, "Network" ) PORT_DIPLOCATION("SWB:3,4") + PORT_DIPSETTING( 0x0c, "Off" ) + PORT_DIPSETTING( 0x08, "On (2)" ) + PORT_DIPSETTING( 0x04, "On (4)" ) +// PORT_DIPSETTING( 0x00, "No Use" ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:5,6") + PORT_DIPSETTING( 0x20, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x30, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Coin Chute" ) PORT_DIPLOCATION("SWB:8") + PORT_DIPSETTING( 0x80, "Single" ) + PORT_DIPSETTING( 0x00, "Twin" ) +INPUT_PORTS_END + + static INPUT_PORTS_START( loffire ) PORT_INCLUDE( xboard_generic ) @@ -1330,23 +1440,28 @@ GFXDECODE_END static void xboard_reset(device_t *device) { - segas1x_state *state = device->machine().driver_data(); + segaxbd_state *state = device->machine().driver_data(); device_set_input_line(state->m_subcpu, INPUT_LINE_RESET, PULSE_LINE); device->machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } +static MACHINE_START( xboard ) +{ + segaxbd_state *state = machine.driver_data(); + state->m_scanline_timer = machine.scheduler().timer_alloc(FUNC(scanline_callback)); +} + static MACHINE_RESET( xboard ) { - segas1x_state *state = machine.driver_data(); - fd1094_machine_init(machine.device("maincpu")); + segaxbd_state *state = machine.driver_data(); segaic16_tilemap_reset(machine, 0); /* hook the RESET line, which resets CPU #1 */ m68k_set_reset_callback(machine.device("maincpu"), xboard_reset); /* start timers to track interrupts */ - state->m_interrupt_timer->adjust(machine.primary_screen->time_until_pos(1), 1); + state->m_scanline_timer->adjust(machine.primary_screen->time_until_pos(1), 1); } @@ -1360,26 +1475,25 @@ static const ic_315_5250_interface segaxb_5250_2_intf = NULL, NULL }; -static MACHINE_CONFIG_START( xboard, segas1x_state ) +static MACHINE_CONFIG_START( xboard, segaxbd_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, MASTER_CLOCK/4) MCFG_CPU_PROGRAM_MAP(main_map) - MCFG_CPU_ADD("sub", M68000, MASTER_CLOCK/4) + MCFG_CPU_ADD("subcpu", M68000, MASTER_CLOCK/4) MCFG_CPU_PROGRAM_MAP(sub_map) MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK/4) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_IO_MAP(sound_portmap) + MCFG_MACHINE_START(xboard) MCFG_MACHINE_RESET(xboard) MCFG_NVRAM_ADD_0FILL("backup1") MCFG_NVRAM_ADD_0FILL("backup2") MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_TIMER_ADD("int_timer", scanline_callback) - MCFG_315_5248_ADD("5248_main") MCFG_315_5248_ADD("5248_subx") MCFG_315_5249_ADD("5249_main") @@ -1413,8 +1527,13 @@ static MACHINE_CONFIG_START( xboard, segas1x_state ) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( xboard_fd1094, xboard ) + MCFG_CPU_REPLACE("maincpu", FD1094, MASTER_CLOCK/4) + MCFG_CPU_PROGRAM_MAP(main_map) +MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( smgp, xboard ) + +static MACHINE_CONFIG_DERIVED( smgp_fd1094, xboard_fd1094 ) /* basic machine hardware */ MCFG_CPU_ADD("soundcpu2", Z80, SOUND_CLOCK/4) @@ -1492,7 +1611,7 @@ ROM_START( aburner ) ROM_LOAD16_BYTE( "epr-10940.58", 0x00000, 0x20000, CRC(4d132c4e) SHA1(007af52167c369177b86fc0f8b007ebceba2a30c) ) ROM_LOAD16_BYTE( "epr-10941.63", 0x00001, 0x20000, CRC(136ea264) SHA1(606ac67db53a6002ed1bd71287aed2e3e720cdf4) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-10927.20", 0x00000, 0x20000, CRC(66d36757) SHA1(c7f6d653fb6bfd629bb62057010d41f3ccfccc4d) ) ROM_LOAD16_BYTE( "epr-10928.29", 0x00001, 0x20000, CRC(7c01d40b) SHA1(d95b4702a9c813db8bc24c8cd7e0933cbe54a573) ) @@ -1543,7 +1662,7 @@ ROM_START( aburner2 ) ROM_LOAD16_BYTE( "epr-11107.58", 0x00000, 0x20000, CRC(6d87bab7) SHA1(ab34fe78f1f216037b3e3dca3e61f1b31c05cedf) ) ROM_LOAD16_BYTE( "epr-11108.63", 0x00001, 0x20000, CRC(202a3e1d) SHA1(cf2018bbad366de4b222eae35942636ca68aa581) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-11109.20", 0x00000, 0x20000, CRC(85a0fe07) SHA1(5a3a8fda6cb4898cfece4ec865b81b9b60f9ad55) ) ROM_LOAD16_BYTE( "epr-11110.29", 0x00001, 0x20000, CRC(f3d6797c) SHA1(17487b89ddbfbcc32a0b52268259f1c8d10fd0b2) ) @@ -1605,10 +1724,10 @@ ROM_START( loffire ) Nicola Salmoria */ - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0136.key", 0x0000, 0x2000, BAD_DUMP CRC(344bfe0c) SHA1(f6bb8045b46f90f8abadf1dc2e1ae1d7cef9c810) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12804.20", 0x000000, 0x20000, CRC(b853480e) SHA1(de0889e99251da7ea50316282ebf6f434cc2db11) ) ROM_LOAD16_BYTE( "epr-12805.29", 0x000001, 0x20000, CRC(4a7200c3) SHA1(3e6febed36a55438e0d24441b68f2b7952791584) ) ROM_LOAD16_BYTE( "epr-12802.21", 0x040000, 0x20000, CRC(d746bb39) SHA1(08dc8cf565997c7e52329961bf7a229a15900cff) ) @@ -1659,10 +1778,10 @@ ROM_START( loffireu ) ROM_LOAD16_BYTE( "epr-12847a.58", 0x000000, 0x20000, CRC(c50eb4ed) SHA1(18a46c97aec2fefd160338c1760b6ee367dcb57f) ) ROM_LOAD16_BYTE( "epr-12848a.63", 0x000001, 0x20000, CRC(f8ff8640) SHA1(193bb8f42f3c5011ad1fbf87215f012de5e950fb) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0135.key", 0x0000, 0x2000, CRC(c53ad019) SHA1(7e6dc2b35ebfeefb507d4d03f5a59574944177d1) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12804.20", 0x000000, 0x20000, CRC(b853480e) SHA1(de0889e99251da7ea50316282ebf6f434cc2db11) ) ROM_LOAD16_BYTE( "epr-12805.29", 0x000001, 0x20000, CRC(4a7200c3) SHA1(3e6febed36a55438e0d24441b68f2b7952791584) ) ROM_LOAD16_BYTE( "epr-12802.21", 0x040000, 0x20000, CRC(d746bb39) SHA1(08dc8cf565997c7e52329961bf7a229a15900cff) ) @@ -1716,10 +1835,10 @@ ROM_START( loffirej ) ROM_LOAD16_BYTE( "epr-12794.58", 0x000000, 0x20000, CRC(1e588992) SHA1(fe7107e83c12643e7d22fd4b4cd0c7bcff0d84c3) ) ROM_LOAD16_BYTE( "epr-12795.63", 0x000001, 0x20000, CRC(d43d7427) SHA1(ecbd425bab6aa65ffbd441d6a0936ac055d5f06d) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0134.key", 0x0000, 0x2000, CRC(732626d4) SHA1(75ed7ca417758dd62afb4edbb9daee754932c392) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12804.20", 0x000000, 0x20000, CRC(b853480e) SHA1(de0889e99251da7ea50316282ebf6f434cc2db11) ) ROM_LOAD16_BYTE( "epr-12805.29", 0x000001, 0x20000, CRC(4a7200c3) SHA1(3e6febed36a55438e0d24441b68f2b7952791584) ) ROM_LOAD16_BYTE( "epr-12802.21", 0x040000, 0x20000, CRC(d746bb39) SHA1(08dc8cf565997c7e52329961bf7a229a15900cff) ) @@ -1776,10 +1895,10 @@ ROM_START( thndrbld ) ROM_LOAD16_BYTE( "epr-11306.ic57", 0x040000, 0x20000, CRC(4b95f2b4) SHA1(9e0ff898a2af05c35db3551e52c7485748698c28) ) ROM_LOAD16_BYTE( "epr-11307.ic62", 0x040001, 0x20000, CRC(2d6833e4) SHA1(b39a744370014237121f0010d18897e63f7058cf) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0056.key", 0x0000, 0x2000, CRC(b40cd2c5) SHA1(865e70bce4f55f6702960d6eaa780b7b1f880e41) ) - ROM_REGION( 0x100000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x100000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-11390.ic20", 0x000000, 0x20000, CRC(ed988fdb) SHA1(b809b0b7dabd5cb29f5387522c6dfb993d1d0271) ) ROM_LOAD16_BYTE( "epr-11391.ic29", 0x000001, 0x20000, CRC(12523bc1) SHA1(54635d6c4cc97cf4148dcac3bb2056fc414252f7) ) ROM_LOAD16_BYTE( "epr-11310.ic21", 0x040000, 0x20000, CRC(5d9fa02c) SHA1(0ca71e35cf9740e38a52960f7d1ef96e7e1dda94) ) @@ -1833,7 +1952,7 @@ ROM_START( thndrbld1 ) ROM_LOAD16_BYTE( "epr-11306.ic57", 0x040000, 0x20000, CRC(4b95f2b4) SHA1(9e0ff898a2af05c35db3551e52c7485748698c28) ) ROM_LOAD16_BYTE( "epr-11307.ic62", 0x040001, 0x20000, CRC(2d6833e4) SHA1(b39a744370014237121f0010d18897e63f7058cf) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-11308.ic20", 0x00000, 0x20000, CRC(7956c238) SHA1(4608225cfd6ea3d38317cbe970f26a5fc2f8e320) ) ROM_LOAD16_BYTE( "epr-11309.ic29", 0x00001, 0x20000, CRC(c887f620) SHA1(644c47cc2cf75cbe489ea084c13c59d94631e83f) ) ROM_LOAD16_BYTE( "epr-11310.ic21", 0x040000, 0x20000, CRC(5d9fa02c) SHA1(0ca71e35cf9740e38a52960f7d1ef96e7e1dda94) ) @@ -1875,6 +1994,66 @@ ROM_START( thndrbld1 ) ROM_END +/************************************************************************************************************************** + ************************************************************************************************************************** + ************************************************************************************************************************** + Last Survivor, Sega X-board + CPU: FD1094 (317-0083) + + GAME BD NO. 834-6493-03 (Uses "MPR" mask roms) or 834-6493-05 (Uses "EPR" eproms) +*/ +ROM_START( lastsurv ) + ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "epr-12046.ic58", 0x000000, 0x20000, CRC(f94f3a1a) SHA1(f509cbccb1f36ce52ed3e44d4d7b31a047050700) ) + ROM_LOAD16_BYTE( "epr-12047.ic63", 0x000001, 0x20000, CRC(1b45c116) SHA1(c46ad622a145baea52d918537fa43a2009ed0cca) ) + ROM_LOAD16_BYTE( "epr-12048.ic57", 0x040000, 0x20000, CRC(648e38ca) SHA1(e5f7fd42f49dbbddd1a812a04d8b95c1a73e640b) ) + ROM_LOAD16_BYTE( "epr-12049.ic62", 0x040001, 0x20000, CRC(6c5c4753) SHA1(6834542005bc8cad7918ae17d3764306d7f9a959) ) + + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ + ROM_LOAD( "317-0083.key", 0x0000, 0x2000, CRC(dca0b9cc) SHA1(77510804d36d486ffa1e0bb5b0a36d43adc63415) ) + + ROM_REGION( 0x100000, "subcpu", 0 ) /* 2nd 68000 code */ + ROM_LOAD16_BYTE( "epr-12050.ic20", 0x000000, 0x20000, CRC(985a0f36) SHA1(bd0a93aa16565c8338db0c67b031bfa409bce5a9) ) + ROM_LOAD16_BYTE( "epr-12051.ic29", 0x000001, 0x20000, CRC(f967d5a8) SHA1(16d742da755b5b7c3c3a9f6b4baaf242e5e54441) ) + ROM_LOAD16_BYTE( "epr-12052.ic21", 0x040000, 0x20000, CRC(9f7a424d) SHA1(b8c2d3aa08ba71f08f2c1f403edac16bf4334184) ) + ROM_LOAD16_BYTE( "epr-12053.ic30", 0x040001, 0x20000, CRC(efcf30f6) SHA1(55cd42c78f117995a89844529386ae3d11c718c1) ) + + ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_LOAD( "epr-12055.ic154", 0x00000, 0x10000, CRC(150014a4) SHA1(9fbab916ee903c541f61014e137ccecd071b5c3a) ) + ROM_LOAD( "epr-12056.ic153", 0x10000, 0x10000, CRC(3cd4c306) SHA1(b0f178688870c67936a15383024c392072e3bc66) ) + ROM_LOAD( "epr-12057.ic152", 0x20000, 0x10000, CRC(37e91770) SHA1(69e26f4d3c4ebfaf0225a9b1c60038595929ef05) ) + + ROM_REGION32_LE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_LOAD32_BYTE( "mpr-12064.ic90", 0x000000, 0x20000, CRC(84562a69) SHA1(815189a65065def213ef171fe40a44a455dfe75a) ) + ROM_LOAD32_BYTE( "mpr-12063.ic94", 0x000001, 0x20000, CRC(d163727c) SHA1(50ed2b401e107a359874dad5d86eec788f5504eb) ) + ROM_LOAD32_BYTE( "mpr-12062.ic98", 0x000002, 0x20000, CRC(6b57833b) SHA1(1d70894c81a4cd39f43067701a598d2c4fbffa58) ) + ROM_LOAD32_BYTE( "mpr-12061.ic102", 0x000003, 0x20000, CRC(8907d5ba) SHA1(f4f9a19f3c27ef02314e59294a9658e2b20d52e0) ) + ROM_LOAD32_BYTE( "epr-12068.ic91", 0x080000, 0x20000, CRC(8b12d342) SHA1(0356a413c2438e9c6c660454f03c0e24c6325f6b) ) + ROM_LOAD32_BYTE( "epr-12067.ic95", 0x080001, 0x20000, CRC(1a1cdd89) SHA1(cd725aa450efa60ecc7d4111d0690cb441633935) ) + ROM_LOAD32_BYTE( "epr-12066.ic99", 0x080002, 0x20000, CRC(a91d16b5) SHA1(501ddedf79130979c90c72882c2d96f5fd01adea) ) + ROM_LOAD32_BYTE( "epr-12065.ic103", 0x080003, 0x20000, CRC(f4ce14c6) SHA1(42221ee03f363e94bf7b6de0bd89172525500412) ) + ROM_LOAD32_BYTE( "epr-12072.ic92", 0x100000, 0x20000, CRC(222064c8) SHA1(a3914f8dabd8a3d99eaf4e03fa45e177c9f30666) ) + ROM_LOAD32_BYTE( "epr-12071.ic96", 0x100001, 0x20000, CRC(a329b78c) SHA1(33b1f27dcc5ac36fdfd7374e1edda4fc31421126) ) + ROM_LOAD32_BYTE( "epr-12070.ic100", 0x100002, 0x20000, CRC(97cc6706) SHA1(9160f100bd85f9c8b774e27a5d68e1c513111a61) ) + ROM_LOAD32_BYTE( "epr-12069.ic104", 0x100003, 0x20000, CRC(2c3ba66e) SHA1(087fbf9d17f38b06b134088d89965c8d17dd5846) ) + ROM_LOAD32_BYTE( "epr-12076.ic93", 0x180000, 0x20000, CRC(24f628e1) SHA1(abbc22282c7a9df203a8c589ddf08413d67392b1) ) + ROM_LOAD32_BYTE( "epr-12075.ic97", 0x180001, 0x20000, CRC(69b3507f) SHA1(c447ceb38b473a3f65847471ef6de559e6ecce4a) ) + ROM_LOAD32_BYTE( "epr-12074.ic101", 0x180002, 0x20000, CRC(ee6cbb73) SHA1(c68d825ded83dd06ba7b816622db3d57631b4fcc) ) + ROM_LOAD32_BYTE( "epr-12073.ic105", 0x180003, 0x20000, CRC(167e6342) SHA1(2f87074d6821a974cbb137ca2bec28fafc0df46f) ) + + ROM_REGION( 0x20000, "gfx3", ROMREGION_ERASE00 ) /* Road Data */ + /* none */ + + ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_LOAD( "epr-12054.ic17", 0x00000, 0x10000, CRC(e9b39216) SHA1(142764b40b4db69ff08d28338d1b12b1dd1ed0a0) ) + + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* Sega PCM sound data */ + ROM_LOAD( "epr-12058.ic11", 0x00000, 0x20000, CRC(4671cb46) SHA1(03ecaa4409a5b86a558313d4ccfb2334f79cff17) ) + ROM_LOAD( "epr-12059.ic12", 0x20000, 0x20000, CRC(8c99aff4) SHA1(818418e4e92f601b09fcaa0979802a2c2c85b435) ) + ROM_LOAD( "epr-12060.ic13", 0x40000, 0x20000, CRC(7ed382b3) SHA1(c87306d1b9edb8b4b97aee4af1317526750e2da2) ) +ROM_END + + /************************************************************************************************************************** ************************************************************************************************************************** ************************************************************************************************************************** @@ -1888,10 +2067,10 @@ ROM_START( rachero ) ROM_LOAD16_BYTE( "epr-12855.ic57", 0x40000, 0x20000,CRC(cecf1e73) SHA1(3f8631379f32dbfda7720ef345276f9be23ada06) ) ROM_LOAD16_BYTE( "epr-12856.ic62", 0x40001, 0x20000,CRC(da900ebb) SHA1(595ed65248185ddf8666b3f30ad6329162116448) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0144.key", 0x0000, 0x2000, CRC(8740bbff) SHA1(de96e606c04a09258b966532fb01a6b4d4db86a6) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12857.ic20", 0x00000, 0x20000, CRC(8a2328cc) SHA1(c34498428ddfb3eeb986f4153a6165a685d8fc8a) ) ROM_LOAD16_BYTE( "epr-12858.ic29", 0x00001, 0x20000, CRC(38a248b7) SHA1(a17672123665403c1c56fedab6c8abf44b1131f9) ) @@ -1985,10 +2164,10 @@ ROM_START( smgp ) ROM_LOAD16_BYTE( "epr-12563b.58", 0x00000, 0x20000, CRC(baf1f333) SHA1(f91a7a311237b9940a44b815716d4226a7ae1e8b) ) ROM_LOAD16_BYTE( "epr-12564b.63", 0x00001, 0x20000, CRC(b5191af0) SHA1(d6fb19552e4816eefe751907ec55a2e07ad24879) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0126a.key", 0x0000, 0x2000, CRC(2abc1982) SHA1(cc4c36e6ba52431df17c6e36ba08d3a89be7b7e7) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12576a.20", 0x00000, 0x20000, CRC(2c9599c1) SHA1(79206f38c2976bd9299ed37bf62ac26dd3fba801) ) ROM_LOAD16_BYTE( "epr-12577a.29", 0x00001, 0x20000, CRC(abf9a50b) SHA1(e367b305cd45900aae4849af4904543f05456dc6) ) @@ -2051,10 +2230,10 @@ ROM_START( smgp6 ) ROM_LOAD16_BYTE( "epr-12563a.58", 0x00000, 0x20000, CRC(2e64b10e) SHA1(2be1ffb3120e4af6a61880e2a2602db07a73f373) ) ROM_LOAD16_BYTE( "epr-12564a.63", 0x00001, 0x20000, CRC(5baba3e7) SHA1(37194d5a4d3ee48a276f6aeb35b2f20a7661caa2) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0126a.key", 0x0000, 0x2000, CRC(2abc1982) SHA1(cc4c36e6ba52431df17c6e36ba08d3a89be7b7e7) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12576a.20", 0x00000, 0x20000, CRC(2c9599c1) SHA1(79206f38c2976bd9299ed37bf62ac26dd3fba801) ) ROM_LOAD16_BYTE( "epr-12577a.29", 0x00001, 0x20000, CRC(abf9a50b) SHA1(e367b305cd45900aae4849af4904543f05456dc6) ) @@ -2167,10 +2346,10 @@ ROM_START( smgp5 ) ROM_LOAD16_BYTE( "epr-12563.58", 0x00000, 0x20000, CRC(6d7325ae) SHA1(bf88ceddc49dab5b439080d5bf0e7e084a79546c) ) ROM_LOAD16_BYTE( "epr-12564.63", 0x00001, 0x20000, CRC(adfbf921) SHA1(f3321e03dc37b14db065b85d63e321810e4ea797) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0126.key", 0x0000, 0x2000, CRC(4d917996) SHA1(17232c0e35d439a12db3d966064cf00104088903) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12576.20", 0x00000, 0x20000, CRC(23266b26) SHA1(240b9bf198fd2975851e769766566ec4e8379f87) ) ROM_LOAD16_BYTE( "epr-12577.29", 0x00001, 0x20000, CRC(d5b53211) SHA1(b11f5c5094eb7ea9578f15489b00d8bbac1edee6) ) @@ -2232,10 +2411,10 @@ ROM_START( smgpu ) ROM_LOAD16_BYTE( "epr-12561c.58", 0x00000, 0x20000, CRC(a5b0f3fe) SHA1(17103e56f822fdb52e72f597c01415ed375aa102) ) ROM_LOAD16_BYTE( "epr-12562c.63", 0x00001, 0x20000, CRC(799e55f4) SHA1(2e02cdc63bda47b087c81021018287cfa961c083) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0125a.key", 0x0000, 0x2000, CRC(3ecdb120) SHA1(c484198e4509d79214e78d4a47e9a7e339f7a2ed) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12574a.20", 0x00000, 0x20000, CRC(f8b5c38b) SHA1(0184d5a1b71fb42d33dbaaad99d2c0fbc5750e7e) ) ROM_LOAD16_BYTE( "epr-12575a.29", 0x00001, 0x20000, CRC(248b1d17) SHA1(22f1e0d0d698abdf0cb1954f1f6382432a12c186) ) @@ -2298,10 +2477,10 @@ ROM_START( smgpu1 ) ROM_LOAD16_BYTE( "epr-12561b.58", 0x00000, 0x20000, CRC(80a32655) SHA1(fe1ffa8af9f1ca175ba90b24a0853329b08d19af) ) ROM_LOAD16_BYTE( "epr-12562b.63", 0x00001, 0x20000, CRC(d525f2a8) SHA1(f3241e11485c7428cd9f081ec6768fda39ae3250) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0125a.key", 0x0000, 0x2000, CRC(3ecdb120) SHA1(c484198e4509d79214e78d4a47e9a7e339f7a2ed) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12574a.20", 0x00000, 0x20000, CRC(f8b5c38b) SHA1(0184d5a1b71fb42d33dbaaad99d2c0fbc5750e7e) ) ROM_LOAD16_BYTE( "epr-12575a.29", 0x00001, 0x20000, CRC(248b1d17) SHA1(22f1e0d0d698abdf0cb1954f1f6382432a12c186) ) @@ -2535,10 +2714,10 @@ ROM_START( smgpu2 ) ROM_LOAD16_BYTE( "epr-12561a.58", 0x00000, 0x20000, CRC(e505eb89) SHA1(bfb9a7a8b13ae454a92349e57215562477cd2cd2) ) ROM_LOAD16_BYTE( "epr-12562a.63", 0x00001, 0x20000, CRC(c3af4215) SHA1(c46829e08d5492515de5d3269b0e899705d0b108) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0125a.key", 0x0000, 0x2000, CRC(3ecdb120) SHA1(c484198e4509d79214e78d4a47e9a7e339f7a2ed) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12574a.20", 0x00000, 0x20000, CRC(f8b5c38b) SHA1(0184d5a1b71fb42d33dbaaad99d2c0fbc5750e7e) ) ROM_LOAD16_BYTE( "epr-12575a.29", 0x00001, 0x20000, CRC(248b1d17) SHA1(22f1e0d0d698abdf0cb1954f1f6382432a12c186) ) @@ -2600,10 +2779,10 @@ ROM_START( smgpj ) ROM_LOAD16_BYTE( "epr-12432b.58", 0x00000, 0x20000, CRC(c1a29db1) SHA1(0122d366899f98f7a60b0c9bddeece7995cebf83) ) ROM_LOAD16_BYTE( "epr-12433b.63", 0x00001, 0x20000, CRC(97199eb1) SHA1(3baccf8159821d4b4d5caedf5eb691f07372be93) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0124a.key", 0x0000, 0x2000, CRC(022a8a16) SHA1(4fd80105cb85ccba77cf1e76a21d6e245d5d2e7d) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12441a.20", 0x00000, 0x20000, CRC(2c9599c1) SHA1(79206f38c2976bd9299ed37bf62ac26dd3fba801) ) ROM_LOAD16_BYTE( "epr-12442a.29", 0x00001, 0x20000, CRC(77a5ec16) SHA1(b8cf6a3f12689d89bbdd9fb39d1cb7d1a3c10602) ) @@ -2665,10 +2844,10 @@ ROM_START( smgpja ) ROM_LOAD16_BYTE( "epr-12432a.58", 0x00000, 0x20000, CRC(22517672) SHA1(db9ac40e83e9786bc9dad70f62c2080d3df694ee) ) ROM_LOAD16_BYTE( "epr-12433a.63", 0x00001, 0x20000, CRC(a46b5d13) SHA1(3a7de5cb6f3e6d726f0ea886a87125dedc6f849f) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0124a.key", 0x0000, 0x2000, CRC(022a8a16) SHA1(4fd80105cb85ccba77cf1e76a21d6e245d5d2e7d) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-12441a.20", 0x00000, 0x20000, CRC(2c9599c1) SHA1(79206f38c2976bd9299ed37bf62ac26dd3fba801) ) ROM_LOAD16_BYTE( "epr-12442a.29", 0x00001, 0x20000, CRC(77a5ec16) SHA1(b8cf6a3f12689d89bbdd9fb39d1cb7d1a3c10602) ) @@ -2735,10 +2914,10 @@ ROM_START( abcop ) ROM_LOAD16_BYTE( "epr-13559.ic57", 0x40000, 0x20000, CRC(4588bf19) SHA1(6a8b3d4450ac0bc41b46e6a4e1b44d82112fcd64) ) ROM_LOAD16_BYTE( "epr-13558.ic62", 0x40001, 0x20000, CRC(11259ed4) SHA1(e7de174a0bdb1d1111e5e419f1d501ab5be1d32d) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0169b.key", 0x0000, 0x2000, CRC(058da36e) SHA1(ab3f68a90725063c68fc5d0f8dbece1f8940dc7d) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-13566.ic20", 0x00000, 0x20000, CRC(22e52f32) SHA1(c67a4ccb88becc58dddcbfea0a1ac2017f7b2929) ) ROM_LOAD16_BYTE( "epr-13565.ic29", 0x00001, 0x20000, CRC(a21784bd) SHA1(b40ba0ef65bbfe514625253f6aeec14bf4bcf08c) ) @@ -2791,10 +2970,10 @@ ROM_START( gprider ) ROM_LOAD16_BYTE( "epr-13409.ic58", 0x00000, 0x20000, CRC(9abb81b6) SHA1(f6308f3ec99ee66677e86f6a915e4dff8557d25f) ) ROM_LOAD16_BYTE( "epr-13408.ic63", 0x00001, 0x20000, CRC(8e410e97) SHA1(2021d738064e57d175b59ba053d9ee35ed4516c8) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0163.key", 0x0000, 0x2000, CRC(c1d4d207) SHA1(c35b0a49fb6a1e0e9a1c087f0ccd190ad5c2bb2c) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-13395.ic20", 0x00000, 0x20000,CRC(d6ccfac7) SHA1(9287ab08600163a0d9bd33618c629f99391316bd) ) ROM_LOAD16_BYTE( "epr-13394.ic29", 0x00001, 0x20000,CRC(914a55ec) SHA1(84fe1df12478990418b46b6800425e5599e9eff9) ) ROM_LOAD16_BYTE( "epr-13393.ic21", 0x40000, 0x20000,CRC(08d023cc) SHA1(d008d57e494f484a1a84896065d53fb9b1d8d60e) ) @@ -2846,10 +3025,65 @@ ROM_START( gprideru ) ROM_LOAD16_BYTE( "epr-13407.ic58", 0x00000, 0x20000, CRC(03553ebd) SHA1(041a71a2dce2ad56360f500cb11e29a629020160) ) ROM_LOAD16_BYTE( "epr-13406.ic63", 0x00001, 0x20000, CRC(122c711f) SHA1(2bcc51347e771a7e7f770e68b24d82497d24aa2e) ) - ROM_REGION( 0x2000, "user1", 0 ) /* decryption key */ + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ ROM_LOAD( "317-0162.key", 0x0000, 0x2000, CRC(8067de53) SHA1(e8cd1dfbad94856c6bd51569557667e72f0a5dd4) ) - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ + ROM_LOAD16_BYTE( "epr-13395.ic20", 0x00000, 0x20000,CRC(d6ccfac7) SHA1(9287ab08600163a0d9bd33618c629f99391316bd) ) + ROM_LOAD16_BYTE( "epr-13394.ic29", 0x00001, 0x20000,CRC(914a55ec) SHA1(84fe1df12478990418b46b6800425e5599e9eff9) ) + ROM_LOAD16_BYTE( "epr-13393.ic21", 0x40000, 0x20000,CRC(08d023cc) SHA1(d008d57e494f484a1a84896065d53fb9b1d8d60e) ) + ROM_LOAD16_BYTE( "epr-13392.ic30", 0x40001, 0x20000,CRC(f927cd42) SHA1(67eab328c1fb878fe3d086d0639f5051b135a037) ) + + ROM_REGION( 0x30000, "gfx1", 0 ) /* tiles */ + ROM_LOAD( "epr-13383.ic154", 0x00000, 0x10000, CRC(24f897a7) SHA1(68ba17067d90f07bb5a549017be4773b33ae81d0) ) + ROM_LOAD( "epr-13384.ic153", 0x10000, 0x10000, CRC(fe8238bd) SHA1(601910bd86536e6b08f5308b298c8f01fa60f233) ) + ROM_LOAD( "epr-13385.ic152", 0x20000, 0x10000, CRC(6df1b995) SHA1(5aab19b87a9ef162c30ccf5974cb795e37dba91f) ) + + ROM_REGION32_LE( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_LOAD32_BYTE( "epr-13382.ic90", 0x000000, 0x20000, CRC(01dac209) SHA1(4c6b03308193c472f6cdbcede306f8ce6db0cc4b) ) + ROM_LOAD32_BYTE( "epr-13381.ic94", 0x000001, 0x20000, CRC(3a50d931) SHA1(9d9cb1793f3b8f562ce0ea49f2afeef099f20859) ) + ROM_LOAD32_BYTE( "epr-13380.ic98", 0x000002, 0x20000, CRC(ad1024c8) SHA1(86e941424b2e2e00940886e5daed640a78ed7403) ) + ROM_LOAD32_BYTE( "epr-13379.ic102", 0x000003, 0x20000, CRC(1ac17625) SHA1(7aefd382041dd3f97936ecb8738a3f2c9780c58f) ) + ROM_LOAD32_BYTE( "epr-13378.ic91", 0x080000, 0x20000, CRC(50c9b867) SHA1(dd9702b369ea8abd50da22ce721b7040428e9d4b) ) + ROM_LOAD32_BYTE( "epr-13377.ic95", 0x080001, 0x20000, CRC(9b12f5c0) SHA1(2060420611b3354974c49bc80f556f945512570b) ) + ROM_LOAD32_BYTE( "epr-13376.ic99", 0x080002, 0x20000, CRC(449ac518) SHA1(0438a72e53a7889d39ea7e2530e49a2594d97e90) ) + ROM_LOAD32_BYTE( "epr-13375.ic103", 0x080003, 0x20000, CRC(5489a9ff) SHA1(c458cb55d957edae340535f54189438296f3ec2f) ) + ROM_LOAD32_BYTE( "epr-13374.ic92", 0x100000, 0x20000, CRC(6a319e4f) SHA1(d9f92b15f4baa14745048073205add35b7d42d27) ) + ROM_LOAD32_BYTE( "epr-13373.ic96", 0x100001, 0x20000, CRC(eca5588b) SHA1(11def0c293868193d457958fe7459fd8c31dbd2b) ) + ROM_LOAD32_BYTE( "epr-13372.ic100", 0x100002, 0x20000, CRC(0b45a433) SHA1(82fa2b208eaf70b70524681fbc3ec70085e70d83) ) + ROM_LOAD32_BYTE( "epr-13371.ic104", 0x100003, 0x20000, CRC(b68f4cff) SHA1(166f2a685cbc230c098fdc1646b6e632dd2b09dd) ) + ROM_LOAD32_BYTE( "epr-13370.ic93", 0x180000, 0x20000, CRC(78276620) SHA1(2c4505c57a1e765f9cfd48fb1637d67d199a2f1d) ) + ROM_LOAD32_BYTE( "epr-13369.ic97", 0x180001, 0x20000, CRC(8625bf0f) SHA1(0ae70bc0d54e25eecf4a11cf0600225dca35914d) ) + ROM_LOAD32_BYTE( "epr-13368.ic101", 0x180002, 0x20000, CRC(0f50716c) SHA1(eb4c7f47e11c58fe0d58f67e6dafabc6291eabb8) ) + ROM_LOAD32_BYTE( "epr-13367.ic105", 0x180003, 0x20000, CRC(4b1bb51f) SHA1(17fd5ac9e18dd6097a015e9d7b6815826f9c53f1) ) + + ROM_REGION( 0x10000, "gfx3", ROMREGION_ERASE00 ) /* road gfx */ + /* none?? */ + + ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_LOAD( "epr-13388.ic17", 0x00000, 0x10000, CRC(706581e4) SHA1(51c9dbf2bf0d6b8826de24cd33596f5c95136870) ) + + ROM_REGION( 0x80000, "pcm", ROMREGION_ERASEFF ) /* Sega PCM sound data */ + ROM_LOAD( "epr-13391.ic11", 0x00000, 0x20000, CRC(8c30c867) SHA1(0d735291b1311890938f8a1143fae6af9feb2a69) ) + ROM_LOAD( "epr-13390.ic12", 0x20000, 0x20000, CRC(8c93cd05) SHA1(bb08094abac6c104eddf14f634e9791f03122946) ) + ROM_LOAD( "epr-13389.ic13", 0x40000, 0x20000, CRC(4e4c758e) SHA1(181750dfcdd6d5b28b063c980c251991163d9474) ) +ROM_END + +/************************************************************************************************************************** + GP Rider (Japan), Sega X-board + CPU: FD1094 (317-0161) + Custom Chip 315-5304 (IC 127) + IC BD Number: 834-7626-01 (roms are "MPR") / 834-7626-04 (roms are "EPR") +*/ +ROM_START( gpriderj ) + ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "epr-13387.ic58", 0x00000, 0x20000, CRC(a1e8b2c5) SHA1(22b70a9074263af808bb9dffee29cbcff7e304e3) ) + ROM_LOAD16_BYTE( "epr-13386.ic63", 0x00001, 0x20000, CRC(d8be9e66) SHA1(d81c03b08fd6b971554b94e0adac131a1dcf3248) ) + + ROM_REGION( 0x2000, "maincpu:key", 0 ) /* decryption key */ + ROM_LOAD( "317-0161.key", 0x0000, 0x2000, CRC(e38ddc16) SHA1(d1f7f261320cbc605b4f7e5a9c28f49af5471d87) ) + + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-13395.ic20", 0x00000, 0x20000,CRC(d6ccfac7) SHA1(9287ab08600163a0d9bd33618c629f99391316bd) ) ROM_LOAD16_BYTE( "epr-13394.ic29", 0x00001, 0x20000,CRC(914a55ec) SHA1(84fe1df12478990418b46b6800425e5599e9eff9) ) ROM_LOAD16_BYTE( "epr-13393.ic21", 0x40000, 0x20000,CRC(08d023cc) SHA1(d008d57e494f484a1a84896065d53fb9b1d8d60e) ) @@ -2896,7 +3130,7 @@ ROM_START( rascot ) ROM_LOAD16_BYTE( "epr-13965a.ic58", 0x00000, 0x20000, CRC(7eacdfb3) SHA1(fad23352d9c5e266ad9f7fe3ccbd29b5b912b90b) ) ROM_LOAD16_BYTE( "epr-13694a.ic63", 0x00001, 0x20000, CRC(15b86498) SHA1(ccb57063ca53347b5f771b0d7ceaeb9cd50d246a) ) // 13964a? - ROM_REGION( 0x80000, "sub", 0 ) /* 2nd 68000 code */ + ROM_REGION( 0x80000, "subcpu", 0 ) /* 2nd 68000 code */ ROM_LOAD16_BYTE( "epr-13967.ic20", 0x00000, 0x20000, CRC(3b92e2b8) SHA1(5d456d7d6fa540709facda1fd8813707ebfd99d8) ) ROM_LOAD16_BYTE( "epr-13966.ic29", 0x00001, 0x20000, CRC(eaa644e1) SHA1(b9cc171523995f5120ea7b9748af2f8de697b933) ) @@ -2933,10 +3167,7 @@ ROM_END static DRIVER_INIT( generic_xboard ) { - segas1x_state *state = machine.driver_data(); - - /* init the FD1094 */ - fd1094_driver_init(machine, "maincpu", NULL); + segaxbd_state *state = machine.driver_data(); /* set the default road priority */ state->m_road_priority = 1; @@ -2949,25 +3180,16 @@ static DRIVER_INIT( generic_xboard ) state->m_gprider_hack = 0; - state->m_maincpu = machine.device("maincpu"); - state->m_soundcpu = machine.device("soundcpu"); - state->m_soundcpu2 = NULL; - state->m_subcpu = machine.device("sub"); - state->m_315_5250_1 = machine.device("5250_main"); - - state->save_item(NAME(state->m_iochip_force_input)); state->save_item(NAME(state->m_vblank_irq_state)); state->save_item(NAME(state->m_timer_irq_state)); - state->save_item(NAME(state->m_gprider_hack)); state->save_item(NAME(state->m_iochip_regs[0])); state->save_item(NAME(state->m_iochip_regs[1])); - state->save_item(NAME(state->m_adc_reverse)); } static DRIVER_INIT( aburner2 ) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); DRIVER_INIT_CALL( generic_xboard ); state->m_road_priority = 0; @@ -2976,9 +3198,19 @@ static DRIVER_INIT( aburner2 ) } +static DRIVER_INIT( lastsurv ) +{ + segaxbd_state *state = machine.driver_data(); + + DRIVER_INIT_CALL( generic_xboard ); + state->m_iochip_custom_io_r[1][1] = lastsurv_iochip0_port_r; + state->m_iochip_custom_io_w[0][3] = lastsurv_iochip0_muxer_w; +} + + static WRITE16_HANDLER( loffire_sync0_w ) { - segas1x_state *state = space->machine().driver_data(); + segaxbd_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_loffire_sync[offset]); space->machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(10)); @@ -2986,7 +3218,7 @@ static WRITE16_HANDLER( loffire_sync0_w ) static DRIVER_INIT( loffire ) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); DRIVER_INIT_CALL( generic_xboard ); state->m_adc_reverse[1] = state->m_adc_reverse[3] = 1; @@ -2998,10 +3230,9 @@ static DRIVER_INIT( loffire ) static DRIVER_INIT( smgp ) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); DRIVER_INIT_CALL( generic_xboard ); - state->m_soundcpu2 = machine.device("soundcpu2"); state->m_iochip_custom_io_r[0][0] = smgp_iochip0_motor_r; state->m_iochip_custom_io_w[0][1] = smgp_iochip0_motor_w; @@ -3012,7 +3243,7 @@ static DRIVER_INIT( smgp ) static DRIVER_INIT( rascot ) { // patch out bootup link test - UINT16 *rom = (UINT16 *)machine.root_device().memregion("sub")->base(); + UINT16 *rom = (UINT16 *)machine.root_device().memregion("subcpu")->base(); rom[0xb78/2] = 0x601e; // subrom checksum test rom[0x57e/2] = 0x4e71; rom[0x5d0/2] = 0x6008; @@ -3020,13 +3251,13 @@ static DRIVER_INIT( rascot ) DRIVER_INIT_CALL( generic_xboard ); - machine.device("sub")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0x0f0000, 0x0f3fff, FUNC(rascot_excs_r), FUNC(rascot_excs_w)); + machine.device("subcpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0x0f0000, 0x0f3fff, FUNC(rascot_excs_r), FUNC(rascot_excs_w)); } static DRIVER_INIT( gprider ) { - segas1x_state *state = machine.driver_data(); + segaxbd_state *state = machine.driver_data(); DRIVER_INIT_CALL( generic_xboard ); state->m_gprider_hack = 1; @@ -3040,24 +3271,26 @@ static DRIVER_INIT( gprider ) * *************************************/ -// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS -GAME( 1987, aburner2, 0, xboard, aburner2, aburner2, ROT0, "Sega", "After Burner II", 0 ) -GAME( 1987, aburner, aburner2, xboard, aburner, aburner2, ROT0, "Sega", "After Burner (Japan)", 0 ) -GAME( 1987, thndrbld, 0, xboard, thndrbld, generic_xboard, ROT0, "Sega", "Thunder Blade (upright, FD1094 317-0056)", 0 ) -GAME( 1987, thndrbld1,thndrbld, xboard, thndrbd1, generic_xboard, ROT0, "Sega", "Thunder Blade (deluxe/standing, unprotected)", 0 ) -GAME( 1989, loffire, 0, xboard, loffire, loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (World, FD1094 317-0136)", 0 ) -GAME( 1989, loffireu, loffire, xboard, loffire, loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (US, FD1094 317-0135)", 0 ) -GAME( 1989, loffirej, loffire, xboard, loffire, loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (Japan, FD1094 317-0134)", 0 ) -GAME( 1989, rachero, 0, xboard, rachero, generic_xboard, ROT0, "Sega", "Racing Hero (FD1094 317-0144)", 0 ) -GAME( 1989, smgp, 0, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (World, Rev B, FD1094 317-0126a)", 0 ) -GAME( 1989, smgp6, smgp, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (World, Rev A, FD1094 317-0126a)", 0 ) -GAME( 1989, smgp5, smgp, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (World, FD1094 317-0126)", 0 ) -GAME( 1989, smgpu, smgp, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (US, Rev C, FD1094 317-0125a)", 0 ) -GAME( 1989, smgpu1, smgp, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (US, Rev B, FD1094 317-0125a)", 0 ) -GAME( 1989, smgpu2, smgp, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (US, Rev A, FD1094 317-0125a)", 0 ) -GAME( 1989, smgpj, smgp, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev B, FD1094 317-0124a)", 0 ) -GAME( 1989, smgpja, smgp, smgp, smgp, smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev A, FD1094 317-0124a)", 0 ) -GAME( 1990, abcop, 0, xboard, abcop, generic_xboard, ROT0, "Sega", "A.B. Cop (FD1094 317-0169b)", 0 ) -GAME( 1990, gprider, 0, xboard, gprider, gprider, ROT0, "Sega", "GP Rider (World, FD1094 317-0163)", 0 ) -GAME( 1990, gprideru, gprider, xboard, gprider, gprider, ROT0, "Sega", "GP Rider (US, FD1094 317-0162)", 0 ) -GAME( 1991, rascot, 0, rascot, rascot, rascot, ROT0, "Sega", "Royal Ascot (Japan, terminal?)", GAME_NOT_WORKING | GAME_NO_SOUND ) +// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS +GAME( 1987, aburner2, 0, xboard, aburner2, aburner2, ROT0, "Sega", "After Burner II", 0 ) +GAME( 1987, aburner, aburner2, xboard, aburner, aburner2, ROT0, "Sega", "After Burner (Japan)", 0 ) +GAME( 1987, thndrbld, 0, xboard_fd1094, thndrbld, generic_xboard, ROT0, "Sega", "Thunder Blade (upright, FD1094 317-0056)", 0 ) +GAME( 1987, thndrbld1,thndrbld, xboard, thndrbd1, generic_xboard, ROT0, "Sega", "Thunder Blade (deluxe/standing, unprotected)", 0 ) +GAME( 1989, lastsurv, 0, xboard_fd1094, lastsurv, lastsurv, ROT0, "Sega", "Last Survivor (FD1094 317-0083)", 0 ) +GAME( 1989, loffire, 0, xboard_fd1094, loffire, loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (World, FD1094 317-0136)", 0 ) +GAME( 1989, loffireu, loffire, xboard_fd1094, loffire, loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (US, FD1094 317-0135)", 0 ) +GAME( 1989, loffirej, loffire, xboard_fd1094, loffire, loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (Japan, FD1094 317-0134)", 0 ) +GAME( 1989, rachero, 0, xboard_fd1094, rachero, generic_xboard, ROT0, "Sega", "Racing Hero (FD1094 317-0144)", 0 ) +GAME( 1989, smgp, 0, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (World, Rev B, FD1094 317-0126a)", 0 ) +GAME( 1989, smgp6, smgp, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (World, Rev A, FD1094 317-0126a)", 0 ) +GAME( 1989, smgp5, smgp, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (World, FD1094 317-0126)", 0 ) +GAME( 1989, smgpu, smgp, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (US, Rev C, FD1094 317-0125a)", 0 ) +GAME( 1989, smgpu1, smgp, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (US, Rev B, FD1094 317-0125a)", 0 ) +GAME( 1989, smgpu2, smgp, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (US, Rev A, FD1094 317-0125a)", 0 ) +GAME( 1989, smgpj, smgp, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev B, FD1094 317-0124a)", 0 ) +GAME( 1989, smgpja, smgp, smgp_fd1094, smgp, smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev A, FD1094 317-0124a)", 0 ) +GAME( 1990, abcop, 0, xboard_fd1094, abcop, generic_xboard, ROT0, "Sega", "A.B. Cop (FD1094 317-0169b)", 0 ) +GAME( 1990, gprider, 0, xboard_fd1094, gprider, gprider, ROT0, "Sega", "GP Rider (World, FD1094 317-0163)", 0 ) +GAME( 1990, gprideru, gprider, xboard_fd1094, gprider, gprider, ROT0, "Sega", "GP Rider (US, FD1094 317-0162)", 0 ) +GAME( 1990, gpriderj, gprider, xboard_fd1094, gprider, gprider, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161)", 0 ) +GAME( 1991, rascot, 0, rascot, rascot, rascot, ROT0, "Sega", "Royal Ascot (Japan, terminal?)", GAME_NOT_WORKING | GAME_NO_SOUND ) diff --git a/src/mame/drivers/segaybd.c b/src/mame/drivers/segaybd.c index e80ad951852..3b84050a4c1 100644 --- a/src/mame/drivers/segaybd.c +++ b/src/mame/drivers/segaybd.c @@ -2,18 +2,51 @@ Sega Y-board hardware -Games supported: +**************************************************************************** - G-LOC Air Battle - G-LOC R360 - Galaxy Force 2 - Power Drift - Rail Chase - Strike Fighter + Copyright Aaron Giles + All rights reserved. -Known games currently not dumped: + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: - Galaxy Force + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +**************************************************************************** + + Games supported: + + G-LOC Air Battle + G-LOC R360 + Galaxy Force 2 + Power Drift + Rail Chase + Strike Fighter + + Known games currently not dumped: + + Galaxy Force **************************************************************************** @@ -30,7 +63,6 @@ Known games currently not dumped: #include "machine/nvram.h" #include "sound/2151intf.h" #include "sound/segapcm.h" -#include "video/segaic16.h" #include "includes/segaipt.h" #include "pdrift.lh" @@ -64,7 +96,7 @@ static UINT16 pdrift_bank; static void yboard_generic_init( running_machine &machine ) { - segas1x_state *state = machine.driver_data(); + segaybd_state *state = machine.driver_data(); /* reset globals */ state->m_vblank_irq_state = 0; @@ -84,7 +116,7 @@ static void yboard_generic_init( running_machine &machine ) static void update_main_irqs(running_machine &machine) { - segas1x_state *state = machine.driver_data(); + segaybd_state *state = machine.driver_data(); device_set_input_line(state->m_maincpu, 2, state->m_timer_irq_state ? ASSERT_LINE : CLEAR_LINE); device_set_input_line(state->m_subx, 2, state->m_timer_irq_state ? ASSERT_LINE : CLEAR_LINE); @@ -135,9 +167,9 @@ static void update_main_irqs(running_machine &machine) 150-200 = ok */ -static TIMER_DEVICE_CALLBACK( scanline_callback ) +static TIMER_CALLBACK( scanline_callback ) { - segas1x_state *state = timer.machine().driver_data(); + segaybd_state *state = machine.driver_data(); int scanline = param; /* on scanline 'irq2_scanline' generate an IRQ2 */ @@ -169,10 +201,10 @@ static TIMER_DEVICE_CALLBACK( scanline_callback ) } /* update IRQs on the main CPU */ - update_main_irqs(timer.machine()); + update_main_irqs(machine); /* come back at the next appropriate scanline */ - timer.adjust(timer.machine().primary_screen->time_until_pos(scanline), scanline); + state->m_scanline_timer->adjust(machine.primary_screen->time_until_pos(scanline), scanline); #if TWEAK_IRQ2_SCANLINE if (scanline == 223) @@ -180,10 +212,10 @@ static TIMER_DEVICE_CALLBACK( scanline_callback ) int old = state->m_irq2_scanline; /* Q = -10 scanlines, W = -1 scanline, E = +1 scanline, R = +10 scanlines */ - if (timer->machine().input().code_pressed(KEYCODE_Q)) { while (timer->machine().input().code_pressed(KEYCODE_Q)) ; state->m_irq2_scanline -= 10; } - if (timer->machine().input().code_pressed(KEYCODE_W)) { while (timer->machine().input().code_pressed(KEYCODE_W)) ; state->m_irq2_scanline -= 1; } - if (timer->machine().input().code_pressed(KEYCODE_E)) { while (timer->machine().input().code_pressed(KEYCODE_E)) ; state->m_irq2_scanline += 1; } - if (timer->machine().input().code_pressed(KEYCODE_R)) { while (timer->machine().input().code_pressed(KEYCODE_R)) ; state->m_irq2_scanline += 10; } + if (machine.input().code_pressed(KEYCODE_Q)) { while (machine.input().code_pressed(KEYCODE_Q)) ; state->m_irq2_scanline -= 10; } + if (machine.input().code_pressed(KEYCODE_W)) { while (machine.input().code_pressed(KEYCODE_W)) ; state->m_irq2_scanline -= 1; } + if (machine.input().code_pressed(KEYCODE_E)) { while (machine.input().code_pressed(KEYCODE_E)) ; state->m_irq2_scanline += 1; } + if (machine.input().code_pressed(KEYCODE_R)) { while (machine.input().code_pressed(KEYCODE_R)) ; state->m_irq2_scanline += 10; } if (old != state->m_irq2_scanline) popmessage("scanline = %d", state->m_irq2_scanline); } @@ -193,28 +225,25 @@ static TIMER_DEVICE_CALLBACK( scanline_callback ) static MACHINE_START( yboard ) { - segas1x_state *state = machine.driver_data(); - - state->m_maincpu = machine.device("maincpu"); - state->m_soundcpu = machine.device("soundcpu"); - state->m_subx = machine.device("subx"); - state->m_suby = machine.device("suby"); + segaybd_state *state = machine.driver_data(); state->save_item(NAME(state->m_vblank_irq_state)); state->save_item(NAME(state->m_timer_irq_state)); state->save_item(NAME(state->m_irq2_scanline)); state->save_item(NAME(state->m_misc_io_data)); state->save_item(NAME(state->m_analog_data)); + + state->m_scanline_timer = machine.scheduler().timer_alloc(FUNC(scanline_callback)); } static MACHINE_RESET( yboard ) { - segas1x_state *state = machine.driver_data(); + segaybd_state *state = machine.driver_data(); state->m_irq2_scanline = 170; - state->m_interrupt_timer->adjust(machine.primary_screen->time_until_pos(223), 223); + state->m_scanline_timer->adjust(machine.primary_screen->time_until_pos(223), 223); } @@ -227,7 +256,7 @@ static MACHINE_RESET( yboard ) static void sound_cpu_irq(device_t *device, int state) { - segas1x_state *driver = device->machine().driver_data(); + segaybd_state *driver = device->machine().driver_data(); device_set_input_line(driver->m_soundcpu, 0, state); } @@ -235,7 +264,7 @@ static void sound_cpu_irq(device_t *device, int state) static TIMER_CALLBACK( delayed_sound_data_w ) { - segas1x_state *state = machine.driver_data(); + segaybd_state *state = machine.driver_data(); address_space *space = state->m_maincpu->memory().space(AS_PROGRAM); state->soundlatch_byte_w(*space, 0, param); @@ -252,7 +281,7 @@ static WRITE16_HANDLER( sound_data_w ) static READ8_HANDLER( sound_data_r ) { - segas1x_state *state = space->machine().driver_data(); + segaybd_state *state = space->machine().driver_data(); device_set_input_line(state->m_soundcpu, INPUT_LINE_NMI, CLEAR_LINE); return state->soundlatch_byte_r(*space, offset); } @@ -267,7 +296,7 @@ static READ8_HANDLER( sound_data_r ) static READ16_HANDLER( io_chip_r ) { - segas1x_state *state = space->machine().driver_data(); + segaybd_state *state = space->machine().driver_data(); static const char *const portnames[] = { "P1", "GENERAL", "PORTC", "PORTD", "PORTE", "DSW", "COINAGE", "PORTH" }; offset &= 0x1f/2; @@ -315,7 +344,7 @@ static READ16_HANDLER( io_chip_r ) static WRITE16_HANDLER( io_chip_w ) { - segas1x_state *state = space->machine().driver_data(); + segaybd_state *state = space->machine().driver_data(); UINT8 old; /* generic implementation */ @@ -387,7 +416,7 @@ static WRITE16_HANDLER( io_chip_w ) static READ16_HANDLER( analog_r ) { - segas1x_state *state = space->machine().driver_data(); + segaybd_state *state = space->machine().driver_data(); int result = 0xff; if (ACCESSING_BITS_0_7) { @@ -400,7 +429,7 @@ static READ16_HANDLER( analog_r ) static WRITE16_HANDLER( analog_w ) { - segas1x_state *state = space->machine().driver_data(); + segaybd_state *state = space->machine().driver_data(); static const char *const ports[] = { "ADC0", "ADC1", "ADC2", "ADC3", "ADC4", "ADC5", "ADC6" }; int selected = ((offset & 3) == 3) ? (3 + (state->m_misc_io_data[0x08/2] & 3)) : (offset & 3); int value = state->ioport(ports[selected])->read_safe(0xff); @@ -416,7 +445,7 @@ static WRITE16_HANDLER( analog_w ) * *************************************/ -static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, segaybd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0x1fffff) AM_RANGE(0x000000, 0x07ffff) AM_ROM @@ -438,7 +467,7 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( subx_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( subx_map, AS_PROGRAM, 16, segaybd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0x1fffff) AM_RANGE(0x000000, 0x03ffff) AM_ROM @@ -451,7 +480,7 @@ static ADDRESS_MAP_START( subx_map, AS_PROGRAM, 16, segas1x_state ) ADDRESS_MAP_END -static ADDRESS_MAP_START( suby_map, AS_PROGRAM, 16, segas1x_state ) +static ADDRESS_MAP_START( suby_map, AS_PROGRAM, 16, segaybd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0x1fffff) AM_RANGE(0x000000, 0x03ffff) AM_ROM @@ -473,14 +502,14 @@ ADDRESS_MAP_END * *************************************/ -static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segaybd_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf0ff) AM_MIRROR(0x0700) AM_DEVREADWRITE_LEGACY("pcm", sega_pcm_r, sega_pcm_w) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas1x_state ) +static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segaybd_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w) @@ -934,7 +963,7 @@ static const sega_pcm_interface segapcm_interface = * *************************************/ -static MACHINE_CONFIG_START( yboard, segas1x_state ) +static MACHINE_CONFIG_START( yboard, segaybd_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, MASTER_CLOCK/4) @@ -955,8 +984,6 @@ static MACHINE_CONFIG_START( yboard, segas1x_state ) MCFG_NVRAM_ADD_0FILL("backupram") MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_TIMER_ADD("int_timer", scanline_callback) - MCFG_315_5248_ADD("5248_main") MCFG_315_5248_ADD("5248_subx") MCFG_315_5248_ADD("5248_suby") diff --git a/src/mame/includes/beathead.h b/src/mame/includes/beathead.h index a8b52169e02..ed7d0c02443 100644 --- a/src/mame/includes/beathead.h +++ b/src/mame/includes/beathead.h @@ -1,8 +1,39 @@ -/************************************************************************* +/*************************************************************************** Atari "Stella on Steroids" hardware -*************************************************************************/ +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +***************************************************************************/ #include "machine/atarigen.h" #include "cpu/asap/asap.h" diff --git a/src/mame/includes/segas16.h b/src/mame/includes/segas16.h index 7ee17b9711e..c423de8a082 100644 --- a/src/mame/includes/segas16.h +++ b/src/mame/includes/segas16.h @@ -1,105 +1,705 @@ +/*************************************************************************** -class segas1x_state : public driver_device + Sega System 16A/16B/18/Outrun/Hang On/X-Board/Y-Board hardware + +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +***************************************************************************/ + +#include "cpu/m68000/m68000.h" +#include "cpu/mcs48/mcs48.h" +#include "cpu/mcs51/mcs51.h" +#include "cpu/z80/z80.h" +#include "machine/8255ppi.h" +#include "machine/nvram.h" +#include "machine/segaic16.h" +#include "sound/dac.h" +#include "sound/2151intf.h" +#include "sound/2413intf.h" +#include "sound/upd7759.h" +#include "video/segaic16.h" + + +// ======================> segahang_state + +class segahang_state : public driver_device { public: - segas1x_state(const machine_config &mconfig, device_type type, const char *tag) + // construction/destruction + segahang_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_interrupt_timer(*this, "int_timer") + m_maincpu(*this, "maincpu"), + m_subcpu(*this, "subcpu"), + m_soundcpu(*this, "soundcpu"), + m_mcu(*this, "mcu"), + m_ppi8255_1(*this, "ppi8255_1"), + m_ppi8255_2(*this, "ppi8255_2"), + m_i8751_vblank_hook(NULL), + m_adc_select(0) { } - /* memory pointers */ -// UINT16 * m_workram; // this is used in the nvram handler, hence it cannot be added here -// UINT16 * m_paletteram; // this is used in the segaic16 mapper, hence it cannot be added here (yet) -// UINT16 * m_tileram_0; // this is used in the segaic16 mapper, hence it cannot be added here (yet) -// UINT16 * m_textram_0; // this is used in the segaic16 mapper, hence it cannot be added here (yet) -// UINT16 * m_spriteram_0; // this is used in the segaic16 mapper, hence it cannot be added here (yet) - - /* misc video */ - UINT8 m_road_priority; // segaxbd - bitmap_ind16 *m_tmp_bitmap; // segaybd & segas18 - UINT8 m_grayscale_enable; // segas18 - UINT8 m_vdp_enable; // segas18 - UINT8 m_vdp_mixing; // segas18 - - /* misc common */ - UINT8 m_rom_board; // segas16b - UINT8 m_mj_input_num; // segas16a & segas16b - UINT8 m_mj_last_val; // segas16b - UINT8 m_adc_select; // segahang & segaorun - UINT8 m_timer_irq_state; // segaxbd & segaybd - UINT8 m_vblank_irq_state; // segaorun, segaxbd & segaybd - UINT8 m_misc_io_data[0x10]; // system18 & segaybd - +//protected: + // devices + required_device m_maincpu; + required_device m_subcpu; + required_device m_soundcpu; + optional_device m_mcu; + required_device m_ppi8255_1; + required_device m_ppi8255_2; + + // configuration void (*m_i8751_vblank_hook)(running_machine &machine); - const UINT8 *m_i8751_initial_config; - read16_space_func m_custom_io_r; - write16_space_func m_custom_io_w; - - /* misc system 16b */ - UINT8 m_atomicp_sound_divisor; - UINT8 m_atomicp_sound_count; - UINT8 m_disable_screen_blanking; - UINT8 m_hwc_input_value; + // internal state + UINT8 m_adc_select; +}; - /* misc system 16a */ - UINT8 m_video_control; - UINT8 m_mcu_control; - UINT8 m_n7751_command; - UINT32 m_n7751_rom_address; - UINT8 m_last_buttons1; - UINT8 m_last_buttons2; - int m_read_port; +// ======================> segas16a_state +class segas16a_state : public driver_device +{ +public: + // construction/destruction + segas16a_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_soundcpu(*this, "soundcpu"), + m_mcu(*this, "mcu"), + m_ppi8255(*this, "ppi8255"), + m_ymsnd(*this, "ymsnd"), + m_n7751(*this, "n7751") + { } + +//protected: + // devices + required_device m_maincpu; + required_device m_soundcpu; + optional_device m_mcu; + required_device m_ppi8255; + required_device m_ymsnd; + optional_device m_n7751; + + // configuration + read16_space_func m_custom_io_r; + write16_space_func m_custom_io_w; + void (*m_i8751_vblank_hook)(running_machine &machine); void (*m_lamp_changed_w)(running_machine &machine, UINT8 changed, UINT8 newval); - /* misc system 18 */ - UINT8 m_mcu_data; + // internal state + UINT8 m_video_control; + UINT8 m_mcu_control; + UINT8 m_n7751_command; + UINT32 m_n7751_rom_address; + UINT8 m_last_buttons1; + UINT8 m_last_buttons2; + int m_read_port; + UINT8 m_mj_input_num; +}; - UINT8 m_wwally_last_x[3]; - UINT8 m_wwally_last_y[3]; - UINT8 m_lghost_value; - UINT8 m_lghost_select; - /* misc segaorun */ - UINT8 m_irq2_state; - const UINT8 *m_custom_map; +// ======================> segas16b_state - /* misc yboard */ - UINT8 m_analog_data[4]; - int m_irq2_scanline; +class segas16b_state : public driver_device +{ +public: + // construction/destruction + segas16b_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_mapper(*this, "mapper"), + m_maincpu(*this, "maincpu"), + m_soundcpu(*this, "soundcpu"), + m_mcu(*this, "mcu"), + m_ym2151(*this, "ym2151"), + m_ym2413(*this, "ym2413"), + m_upd7759(*this, "upd"), + m_315_5248_1(*this, "315_5248"), + m_315_5250_1(*this, "315_5250_1"), + m_315_5250_2(*this, "315_5250_2"), + m_nvram(*this, "nvram"), + m_workram(*this, "workram"), + m_romboard(ROM_BOARD_INVALID), + m_tilemap_type(SEGAIC16_TILEMAP_16B), + m_disable_screen_blanking(false), + m_i8751_initial_config(NULL), + m_atomicp_sound_divisor(0), + m_atomicp_sound_count(0), + m_hwc_input_value(0), + m_mj_input_num(0), + m_mj_last_val(0) + { } - /* misc xboard */ - UINT8 m_iochip_regs[2][8]; - UINT8 m_iochip_force_input; + // memory mapping + void memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index); + UINT8 mapper_sound_r(); + void mapper_sound_w(UINT8 data); + // main CPU read/write handlers + DECLARE_WRITE16_MEMBER( rom_5704_bank_w ); + DECLARE_READ16_MEMBER( rom_5797_bank_math_r ); + DECLARE_WRITE16_MEMBER( rom_5797_bank_math_w ); + DECLARE_READ16_MEMBER( unknown_rgn2_r ); + DECLARE_WRITE16_MEMBER( unknown_rgn2_w ); + DECLARE_READ16_MEMBER( standard_io_r ); + DECLARE_WRITE16_MEMBER( standard_io_w ); + DECLARE_WRITE16_MEMBER( atomicp_sound_w ); + + // sound CPU read/write handlers + DECLARE_WRITE8_MEMBER( upd7759_control_w ); + DECLARE_READ8_MEMBER( upd7759_status_r ); + + // other callbacks + static void upd7759_generate_nmi(device_t *device, int state); + INTERRUPT_GEN_MEMBER( i8751_main_cpu_vblank ); + + // ROM board-specific driver init + void init_generic_5358_small(); + void init_generic_5358(); + void init_generic_5521(); + void init_generic_5704(); + void init_generic_5797(); + void init_generic_korean(); + + // game-specific driver init + void init_aceattac_5358(); + void init_aliensy3_5358_small(); + void init_altbeast_5521(); + void init_altbeasj_5521(); + void init_altbeas5_5521(); + void init_altbeas4_5521(); + void init_aurail1_5704(); + void init_aurailj_5704(); + void init_ddux_5704(); + void init_dunkshot_5358_small(); + void init_exctleag_5358(); + void init_goldnaxe_5704(); + void init_goldnaxe_5797(); + void init_hwchamp_5521(); + void init_passshtj_5358(); + void init_sdi_5358_small(); + void init_defense_5358_small(); + void init_shinobi4_5521(); + void init_shinobi3_5358(); + void init_sjryuko_5358_small(); + void init_timescan_5358_small(); + void init_tturf_5704(); + void init_wb3_5704(); + void init_snapper(); + + // video updates + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + // wrappers for legacy functions (to be removed) + template + WRITE16_MEMBER( legacy_wrapper ) { _Legacy(&space, offset, data, mem_mask); } + +protected: + // internal types + typedef delegate i8751_sim_delegate; + + // timer IDs + enum + { + TID_INIT_I8751, + TID_ATOMICP_SOUND_IRQ + }; + + // rom board types + enum segas16b_rom_board + { + ROM_BOARD_INVALID, + ROM_BOARD_171_5358_SMALL, // 171-5358 with smaller ROMs + ROM_BOARD_171_5358, // 171-5358 + ROM_BOARD_171_5521, // 171-5521 + ROM_BOARD_171_5704, // 171-5704 - don't know any diff between this and 171-5521 + ROM_BOARD_171_5797, // 171-5797 + ROM_BOARD_KOREAN // (custom Korean) + }; + + // device overrides + virtual void video_start(); + virtual void machine_reset(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + + // internal helpers + void init_generic(segas16b_rom_board rom_board); + + // i8751 simulations + void altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoffs); + void altbeasj_i8751_sim(); + void altbeas5_i8751_sim(); + void altbeast_i8751_sim(); + void ddux_i8751_sim(); + void goldnaxe_i8751_sim(); + void tturf_i8751_sim(); + void wb3_i8751_sim(); + + // custom I/O + DECLARE_READ16_MEMBER( aceattac_custom_io_r ); + DECLARE_READ16_MEMBER( dunkshot_custom_io_r ); + DECLARE_READ16_MEMBER( hwchamp_custom_io_r ); + DECLARE_WRITE16_MEMBER( hwchamp_custom_io_w ); + DECLARE_READ16_MEMBER( passshtj_custom_io_r ); + DECLARE_READ16_MEMBER( sdi_custom_io_r ); + DECLARE_READ16_MEMBER( sjryuko_custom_io_r ); + DECLARE_WRITE16_MEMBER( sjryuko_custom_io_w ); + + // devices + required_device m_mapper; + required_device m_maincpu; + optional_device m_soundcpu; + optional_device m_mcu; + optional_device m_ym2151; + optional_device m_ym2413; + optional_device m_upd7759; + optional_device m_315_5248_1; + optional_device m_315_5250_1; + optional_device m_315_5250_2; + required_device m_nvram; + + // memory pointers + required_shared_ptr m_workram; + + // configuration + segas16b_rom_board m_romboard; + int m_tilemap_type; + read16_delegate m_custom_io_r; + write16_delegate m_custom_io_w; + bool m_disable_screen_blanking; + const UINT8 * m_i8751_initial_config; + i8751_sim_delegate m_i8751_vblank_hook; + UINT8 m_atomicp_sound_divisor; + + // game-specific state + UINT8 m_atomicp_sound_count; + UINT8 m_hwc_input_value; + UINT8 m_mj_input_num; + UINT8 m_mj_last_val; +}; + + +// ======================> isgsm_state + +class isgsm_state : public segas16b_state +{ +public: + // construction/destruction + isgsm_state(const machine_config &mconfig, device_type type, const char *tag) + : segas16b_state(mconfig, type, tag), + m_read_xor(0), + m_cart_addrlatch(0), + m_cart_addr(0), + m_data_type(0), + m_data_addr(0), + m_data_mode(0), + m_addr_latch(0), + m_security_value(0), + m_security_latch(0), + m_rle_control_position(8), + m_rle_control_byte(0), + m_rle_latched(false), + m_rle_byte(0) + { } + + // driver init + void init_isgsm(); + void init_shinfz(); + void init_tetrbx(); + + // read/write handlers + DECLARE_WRITE16_MEMBER( sound_w16 ); + DECLARE_WRITE16_MEMBER( cart_addr_high_w ); + DECLARE_WRITE16_MEMBER( cart_addr_low_w ); + DECLARE_READ16_MEMBER( cart_data_r ); + DECLARE_WRITE16_MEMBER( data_w ); + DECLARE_WRITE16_MEMBER( datatype_w ); + DECLARE_WRITE16_MEMBER( addr_high_w ); + DECLARE_WRITE16_MEMBER( addr_low_w ); + DECLARE_WRITE16_MEMBER( cart_security_high_w ); + DECLARE_WRITE16_MEMBER( cart_security_low_w ); + DECLARE_READ16_MEMBER( cart_security_low_r ); + DECLARE_READ16_MEMBER( cart_security_high_r ); + DECLARE_WRITE16_MEMBER( sound_reset_w ); + DECLARE_WRITE16_MEMBER( main_bank_change_w ); + + // security callbacks + UINT32 shinfz_security(UINT32 input); + UINT32 tetrbx_security(UINT32 input); + +//protected: + // driver overrides + virtual void machine_reset(); + + // configuration + UINT8 m_read_xor; + typedef delegate security_callback_delegate; + security_callback_delegate m_security_callback; + + // internal state + UINT16 m_cart_addrlatch; + UINT32 m_cart_addr; + UINT8 m_data_type; + UINT32 m_data_addr; + UINT8 m_data_mode; + UINT16 m_addr_latch; + UINT32 m_security_value; + UINT16 m_security_latch; + UINT8 m_rle_control_position; + UINT8 m_rle_control_byte; + bool m_rle_latched; + UINT8 m_rle_byte; +}; + + +// ======================> segas18_state + +class segas18_state : public driver_device +{ +public: + // construction/destruction + segas18_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_mapper(*this, "mapper"), + m_maincpu(*this, "maincpu"), + m_soundcpu(*this, "soundcpu"), + m_mcu(*this, "mcu"), + m_nvram(*this, "nvram"), + m_workram(*this, "workram"), + m_romboard(ROM_BOARD_INVALID), + m_has_guns(false), + m_grayscale_enable(false), + m_vdp_enable(false), + m_vdp_mixing(0), + m_mcu_data(0), + m_lghost_value(0), + m_lghost_select(0) + { + memset(m_misc_io_data, 0, sizeof(m_misc_io_data)); + memset(m_wwally_last_x, 0, sizeof(m_wwally_last_x)); + memset(m_wwally_last_y, 0, sizeof(m_wwally_last_y)); + } + + // driver init + void init_generic_shad(); + void init_generic_5874(); + void init_generic_5987(); + void init_ddcrew(); + void init_lghost(); + void init_wwally(); + + // memory mapping + void memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index); + UINT8 mapper_sound_r(); + void mapper_sound_w(UINT8 data); + + // read/write handlers + DECLARE_WRITE16_MEMBER( rom_5987_bank_w ); + DECLARE_READ16_MEMBER( io_chip_r ); + DECLARE_WRITE16_MEMBER( io_chip_w ); + DECLARE_READ16_MEMBER( misc_io_r ); + DECLARE_WRITE16_MEMBER( misc_io_w ); + DECLARE_WRITE8_MEMBER( soundbank_w ); + DECLARE_WRITE8_MEMBER( mcu_data_w ); + + // custom I/O + DECLARE_READ16_MEMBER( ddcrew_custom_io_r ); + DECLARE_READ16_MEMBER( lghost_custom_io_r ); + DECLARE_WRITE16_MEMBER( lghost_custom_io_w ); + DECLARE_READ16_MEMBER( wwally_custom_io_r ); + DECLARE_WRITE16_MEMBER( wwally_custom_io_w ); + + // video rendering + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + // wrappers for legacy functions (to be removed) + template + READ16_MEMBER( legacy_wrapper_r ) { return _Legacy(&space, offset, mem_mask); } + template + WRITE16_MEMBER( legacy_wrapper ) { _Legacy(&space, offset, data, mem_mask); } + +protected: + // timer IDs + enum + { + TID_INITIAL_BOOST + }; + + // rom board types + enum segas18_rom_board + { + ROM_BOARD_INVALID, + ROM_BOARD_171_SHADOW, // 171-???? -- used by shadow dancer + ROM_BOARD_171_5874, // 171-5874 + ROM_BOARD_171_5987 // 171-5987 + }; + + // device overrides + virtual void machine_reset(); + virtual void video_start(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + + // internal helpers + void init_generic(segas18_rom_board rom_board); + void set_grayscale(bool enable); + void set_vdp_enable(bool enable); + void set_vdp_mixing(UINT8 mixing); + void draw_vdp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int priority); + + // devices + required_device m_mapper; + required_device m_maincpu; + required_device m_soundcpu; + optional_device m_mcu; + required_device m_nvram; + + // memory pointers + required_shared_ptr m_workram; + + // configuration + segas18_rom_board m_romboard; + read16_delegate m_custom_io_r; + write16_delegate m_custom_io_w; + bool m_has_guns; + + // internal state + bool m_grayscale_enable; + bool m_vdp_enable; + UINT8 m_vdp_mixing; + bitmap_ind16 m_temp_bitmap; + UINT8 m_mcu_data; + UINT8 m_misc_io_data[0x10]; + + // game-specific state + UINT8 m_wwally_last_x[3]; + UINT8 m_wwally_last_y[3]; + UINT8 m_lghost_value; + UINT8 m_lghost_select; +}; + + +// ======================> segaorun_state + +class segaorun_state : public driver_device +{ +public: + // construction/destruction + segaorun_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_mapper(*this, "mapper"), + m_maincpu(*this, "maincpu"), + m_subcpu(*this, "subcpu"), + m_soundcpu(*this, "soundcpu"), + m_ppi8255(*this, "ppi8255"), + m_nvram(*this, "nvram"), + m_workram(*this, "workram"), + m_custom_map(NULL), + m_is_shangon(false), + m_scanline_timer(NULL), + m_irq2_state(0), + m_adc_select(0), + m_vblank_irq_state(0) + { } + + // driver init + void init_outrun(); + void init_outrunb(); + void init_shangon(); + void init_shangon3(); + + // memory mapping + void memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index); + UINT8 mapper_sound_r(); + void mapper_sound_w(UINT8 data); + + // read/write handlers + DECLARE_READ16_MEMBER( misc_io_r ); + DECLARE_WRITE16_MEMBER( misc_io_w ); + DECLARE_WRITE16_MEMBER( nop_w ); + DECLARE_READ8_MEMBER( unknown_porta_r ); + DECLARE_READ8_MEMBER( unknown_portb_r ); + DECLARE_READ8_MEMBER( unknown_portc_r ); + DECLARE_WRITE8_MEMBER( unknown_porta_w ); + DECLARE_WRITE8_MEMBER( unknown_portb_w ); + DECLARE_WRITE8_MEMBER( video_control_w ); + DECLARE_READ8_MEMBER( sound_data_r ); + + // custom I/O + DECLARE_READ16_MEMBER( outrun_custom_io_r ); + DECLARE_WRITE16_MEMBER( outrun_custom_io_w ); + DECLARE_READ16_MEMBER( shangon_custom_io_r ); + DECLARE_WRITE16_MEMBER( shangon_custom_io_w ); + + // video rendering + UINT32 screen_update_outrun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_shangon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + // wrappers for legacy functions (to be removed) + template + READ16_MEMBER( legacy_wrapper_r ) { return _Legacy(&space, offset, mem_mask); } + template + WRITE16_MEMBER( legacy_wrapper ) { _Legacy(&space, offset, data, mem_mask); } + +protected: + // timer IDs + enum + { + TID_SCANLINE, + TID_IRQ2_GEN, + TID_SOUND_WRITE + }; + + // device overrides + virtual void machine_start(); + virtual void machine_reset(); + virtual void video_start(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + + // internal helpers + void init_generic(); + void update_main_irqs(); + static void m68k_reset_callback(device_t *device); + + // devices + required_device m_mapper; + required_device m_maincpu; + required_device m_subcpu; + required_device m_soundcpu; + required_device m_ppi8255; + optional_device m_nvram; + + // memory + required_shared_ptr m_workram; + + // configuration + read16_delegate m_custom_io_r; + write16_delegate m_custom_io_w; + const UINT8 * m_custom_map; + bool m_is_shangon; + + // internal state + emu_timer * m_scanline_timer; + UINT8 m_irq2_state; + UINT8 m_adc_select; + UINT8 m_vblank_irq_state; +}; + + +// ======================> segaxbd_state + +class segaxbd_state : public driver_device +{ +public: + // construction/destruction + segaxbd_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_subcpu(*this, "subcpu"), + m_soundcpu(*this, "soundcpu"), + m_soundcpu2(*this, "soundcpu2"), + m_mcu(*this, "mcu"), + m_315_5250_1(*this, "5250_main"), + m_gprider_hack(false), + m_timer_irq_state(0), + m_vblank_irq_state(0), + m_road_priority(0), + m_loffire_sync(NULL), + m_lastsurv_mux(0) + { + memset(m_adc_reverse, 0, sizeof(m_adc_reverse)); + memset(m_iochip_custom_io_r, 0, sizeof(m_iochip_custom_io_r)); + memset(m_iochip_custom_io_w, 0, sizeof(m_iochip_custom_io_w)); + memset(m_iochip_regs, 0, sizeof(m_iochip_regs)); + } + +//protected: + // devices + required_device m_maincpu; + required_device m_subcpu; + required_device m_soundcpu; + optional_device m_soundcpu2; + optional_device m_mcu; + required_device m_315_5250_1; + + // configuration + bool m_gprider_hack; + bool m_adc_reverse[8]; UINT8 (*m_iochip_custom_io_r[2][8])(running_machine &machine, UINT8 data); void (*m_iochip_custom_io_w[2][8])(running_machine &machine, UINT8 data); + + // internal state + emu_timer * m_scanline_timer; + UINT8 m_timer_irq_state; + UINT8 m_vblank_irq_state; + UINT8 m_iochip_regs[2][8]; + UINT8 m_road_priority; - UINT8 m_adc_reverse[8]; - - UINT8 m_gprider_hack; - UINT16 *m_loffire_sync; + // game-specific state + UINT16 * m_loffire_sync; + UINT8 m_lastsurv_mux; +}; - /* devices */ - device_t *m_maincpu; - device_t *m_soundcpu; - device_t *m_soundcpu2; - device_t *m_subcpu; - device_t *m_subx; - device_t *m_suby; - device_t *m_mcu; - device_t *m_ymsnd; - device_t *m_ppi8255; - device_t *m_n7751; - device_t *m_ppi8255_1; - device_t *m_ppi8255_2; - optional_device m_interrupt_timer; - device_t *m_315_5248_1; - device_t *m_315_5250_1; - device_t *m_315_5250_2; +// ======================> segaybd_state + +class segaybd_state : public driver_device +{ +public: + // construction/destruction + segaybd_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_subx(*this, "subx"), + m_suby(*this, "suby"), + m_soundcpu(*this, "soundcpu") + { + memset(m_analog_data, 0, sizeof(m_analog_data)); + memset(m_misc_io_data, 0, sizeof(m_misc_io_data)); + } + +//protected: + // devices + required_device m_maincpu; + required_device m_subx; + required_device m_suby; + required_device m_soundcpu; + + // internal state + emu_timer * m_scanline_timer; + UINT8 m_analog_data[4]; + int m_irq2_scanline; + UINT8 m_timer_irq_state; + UINT8 m_vblank_irq_state; + UINT8 m_misc_io_data[0x10]; + bitmap_ind16 * m_tmp_bitmap; }; @@ -114,28 +714,6 @@ SCREEN_UPDATE_IND16( hangon ); VIDEO_START( system16a ); SCREEN_UPDATE_IND16( system16a ); -/*----------- defined in video/segas16b.c -----------*/ - -VIDEO_START( system16b ); -VIDEO_START( timscanr ); -SCREEN_UPDATE_IND16( system16b ); - -/*----------- defined in video/segas18.c -----------*/ - -VIDEO_START( system18 ); -SCREEN_UPDATE_IND16( system18 ); - -void system18_set_grayscale(running_machine &machine, int enable); -void system18_set_vdp_enable(running_machine &machine, int eanble); -void system18_set_vdp_mixing(running_machine &machine, int mixing); - -/*----------- defined in video/segaorun.c -----------*/ - -VIDEO_START( outrun ); -VIDEO_START( shangon ); -SCREEN_UPDATE_IND16( outrun ); -SCREEN_UPDATE_IND16( shangon ); - /*----------- defined in video/segaxbd.c -----------*/ VIDEO_START( xboard ); @@ -145,10 +723,3 @@ SCREEN_UPDATE_IND16( xboard ); VIDEO_START( yboard ); SCREEN_UPDATE_IND16( yboard ); - - -/*----------- defined in machine/s16fd.c -----------*/ - -void *fd1094_get_decrypted_base(void); -void fd1094_machine_init(device_t *device); -void fd1094_driver_init(running_machine &machine, const char* tag, void (*set_decrypted)(running_machine &, UINT8 *)); diff --git a/src/mame/includes/segas24.h b/src/mame/includes/segas24.h index f4fd6519193..18f41644188 100644 --- a/src/mame/includes/segas24.h +++ b/src/mame/includes/segas24.h @@ -96,12 +96,6 @@ public: void reset_control_w(UINT8 data); }; -/*----------- defined in machine/s24fd.c -----------*/ - -extern void s24_fd1094_machine_init(running_machine &machine); -extern void s24_fd1094_driver_init(running_machine &machine); - - /*----------- defined in video/segas24.c -----------*/ SCREEN_UPDATE_IND16(system24); diff --git a/src/mame/machine/fd1089.c b/src/mame/machine/fd1089.c index 612595b471b..d50769e2a0f 100644 --- a/src/mame/machine/fd1089.c +++ b/src/mame/machine/fd1089.c @@ -1,135 +1,147 @@ /*************************************************************************** -Hitachi FD1089A/FD1089B encryption emulation + Hitachi FD1089A/FD1089B encryption emulation -Decryption tables provided by Charles MacDonald -Decryption algorithm by Nicola Salmoria -LCG algorithm by Andreas Naive +**************************************************************************** -The FD1089 is a 68000 with built-in encryption. -It contains some battery-backed RAM, when the battery dies the CPU stops -working. + Copyright Nicola Salmoria, Andreas Naive, and Charles MacDonald. -Both opcodes and data are encrypted, using different (but related) mappings. -Decryption works on 16-bit words, but only 8 bits are affected, the other 8 are -left untouched. A special value in internal RAM disables the encryption, this -is necessary otherwise RAM would not work as expected (writing data and reading -it back would return a different number). + All rights reserved. -The FD1089A and FD1089B work in the same way, but the decryption tables are -different. The internal RAM contains the 8-bit key to use at every address -(only 12 bits of the address are used, so the encryption repeats). +**************************************************************************** -The FD1089 design is clearly derived from the MC8123. The MC8123 is a Z80 so it -made sense to encrypt all 8 data bits and use 12 of the 16 address bits. It makes -a lot less sense to encrypt only half of the 16 data bits; using 12 of the 24 -address bits might be ok, but not in the way it was done. The choice of address -bits to use was probably dictated by the need to not encrypt data in certain areas -of the address space, so they had to include the top 8 bits of the address. -However this means that if you pick e.g. area 000000-00FFFF, where most of the -program code resides, just 4 address bits affect the encryption, making it very -weak when compared to the MC8123. Out of the 16KB of internal RAM, you need less -than 128 bytes to decrypt a whole game - the rest is not used. A waste of space -and security. Also, since only 8 of the 16 bits are encrypted, it is very easy -to use the unencrypted ones to search for known sequences of code or data. + Decryption tables provided by Charles MacDonald + Decryption algorithm by Nicola Salmoria + LCG algorithm by Andreas Naive -Like for the MC8123, the contents of the internal RAM were generated using a -linear congruential generator, so the whole key can be generated starting from -a single 24-bit seed. Note however that the "don't decrypt" data sections need -special treatment so it's not possible to derive the precise key without access -to the CPU. + The FD1089 is a 68000 with built-in encryption. + It contains some battery-backed RAM, when the battery dies the CPU stops + working. -static int rndseed; + Both opcodes and data are encrypted, using different (but related) mappings. + Decryption works on 16-bit words, but only 8 bits are affected, the other 8 are + left untouched. A special value in internal RAM disables the encryption, this + is necessary otherwise RAM would not work as expected (writing data and reading + it back would return a different number). -int rnd() -{ - rndseed = rndseed * 0x290029; - return (rndseed >> 16) & 0xff; -} + The FD1089A and FD1089B work in the same way, but the decryption tables are + different. The internal RAM contains the 8-bit key to use at every address + (only 12 bits of the address are used, so the encryption repeats). -void generate_key(int seed) -{ - int i; + The FD1089 design is clearly derived from the MC8123. The MC8123 is a Z80 so it + made sense to encrypt all 8 data bits and use 12 of the 16 address bits. It makes + a lot less sense to encrypt only half of the 16 data bits; using 12 of the 24 + address bits might be ok, but not in the way it was done. The choice of address + bits to use was probably dictated by the need to not encrypt data in certain areas + of the address space, so they had to include the top 8 bits of the address. + However this means that if you pick e.g. area 000000-00FFFF, where most of the + program code resides, just 4 address bits affect the encryption, making it very + weak when compared to the MC8123. Out of the 16KB of internal RAM, you need less + than 128 bytes to decrypt a whole game - the rest is not used. A waste of space + and security. Also, since only 8 of the 16 bits are encrypted, it is very easy + to use the unencrypted ones to search for known sequences of code or data. - rndseed = seed; - for (i = 0; i < 0x1000; ++i) - { - if ("we must encrypt this data table position") - { - UINT8 byteval; + Like for the MC8123, the contents of the internal RAM were generated using a + linear congruential generator, so the whole key can be generated starting from + a single 24-bit seed. Note however that the "don't decrypt" data sections need + special treatment so it's not possible to derive the precise key without access + to the CPU. - do - { - byteval = rnd(); - } while (byteval == 0x40); + static int rndseed; - opcode_key[i] = byteval; + int rnd() + { + rndseed = rndseed * 0x290029; + return (rndseed >> 16) & 0xff; + } - do - { - byteval = rnd(); - } while (byteval == 0x40); + void generate_key(int seed) + { + int i; - data_key[i] = byteval; - } - } + rndseed = seed; + for (i = 0; i < 0x1000; ++i) + { + if ("we must encrypt this data table position") + { + UINT8 byteval; - for (i = 0; i < 0x1000; ++i) - { - if ("we mustn't encrypt this data table position") - { - UINT8 byteval; + do + { + byteval = rnd(); + } while (byteval == 0x40); - do - { - byteval = rnd(); - } while (byteval == 0x40); + opcode_key[i] = byteval; - opcode_key[i] = byteval; - data_key[i] = 0x40; - } - } -} + do + { + byteval = rnd(); + } while (byteval == 0x40); + + data_key[i] = byteval; + } + } + + for (i = 0; i < 0x1000; ++i) + { + if ("we mustn't encrypt this data table position") + { + UINT8 byteval; + + do + { + byteval = rnd(); + } while (byteval == 0x40); + + opcode_key[i] = byteval; + data_key[i] = 0x40; + } + } + } -Note that when both FD1089A and FD1089B versions of a game exist, they use the -same key. + Note that when both FD1089A and FD1089B versions of a game exist, they use the + same key. -Known games that use this CPU: + Known games that use this CPU: -CPU # Type Status Game Seed Unencrypted data range ---------- ------- --- -------------------- ------ ----------------------------------- -317-0013A FD1089B [1] Enduro Racer 400001 030000-04ffff + 100000-1fffff -317-0018 FD1089A [1] Action Fighter 400003 400000-4fffff + 840000-8dffff + c00000-c4ffff + ff0000-ffffff -317-0021 FD1089A [2] Alex Kidd 40000b ? -317-0022 FD1089A [1] Dunk Shot 40000d 030000-ffffff -317-0024 FD1089B [2] Time Scanner 40000f ? -317-0027 FD1089B [2] SDI 400011 ? -317-0028 FD1089A [2] Defense 400011 ? -317-0033 FD1089A [1] Alien Syndrome 400013 030000-ffffff -317-0037 FD1089B [2] Alien Syndrome 400013 030000-ffffff -317-0034 FD1089B [1] Super Hang-On 400015 030000-06ffff + 100000-2fffff + ff0000-ffffff -317-0167 FD1089A [2] Aurail 400030 010000-ffffff -317-0168 FD1089B [1] Aurail 400030 010000-ffffff -317-???? FD1089A [2] Wonder Boy III 400043 ? -317-5021 FD1089B [2] Sukeban Jansi Ryuko 40004b ? + CPU # Type Status Game Seed Unencrypted data range + --------- ------- --- -------------------- ------ ----------------------------------- + 317-0013A FD1089B [1] Enduro Racer 400001 030000-04ffff + 100000-1fffff + 317-0018 FD1089A [1] Action Fighter 400003 400000-4fffff + 840000-8dffff + c00000-c4ffff + ff0000-ffffff + 317-0021 FD1089A [2] Alex Kidd 40000b ? + 317-0022 FD1089A [1] Dunk Shot 40000d 030000-ffffff + 317-0024 FD1089B [2] Time Scanner 40000f ? + 317-0027 FD1089B [2] SDI 400011 ? + 317-0028 FD1089A [2] Defense 400011 ? + 317-0033 FD1089A [1] Alien Syndrome 400013 030000-ffffff + 317-0037 FD1089B [2] Alien Syndrome 400013 030000-ffffff + 317-0034 FD1089B [1] Super Hang-On 400015 030000-06ffff + 100000-2fffff + ff0000-ffffff + 317-0167 FD1089A [2] Aurail 400030 010000-ffffff + 317-0168 FD1089B [1] Aurail 400030 010000-ffffff + 317-???? FD1089A [2] Wonder Boy III 400043 ? + 317-5021 FD1089B [2] Sukeban Jansi Ryuko 40004b ? -[1] Complete -[2] Partial + [1] Complete + [2] Partial ***************************************************************************/ #include "emu.h" #include "fd1089.h" +#include "segaic16.h" -struct parameters -{ - int xorval; - int s7,s6,s5,s4,s3,s2,s1,s0; -}; +//************************************************************************** +// CONSTANTS +//************************************************************************** -static const UINT8 basetable_fd1089[0x100] = +// device type definition +const device_type FD1089A = &device_creator; +const device_type FD1089B = &device_creator; + +// common base lookup table, shared between A and B variants +const UINT8 fd1089_base_device::s_basetable_fd1089[0x100] = { 0x00,0x1c,0x76,0x6a,0x5e,0x42,0x24,0x38,0x4b,0x67,0xad,0x81,0xe9,0xc5,0x03,0x2f, 0x45,0x69,0xaf,0x83,0xe7,0xcb,0x01,0x2d,0x02,0x1e,0x78,0x64,0x5c,0x40,0x2a,0x36, @@ -149,9 +161,8 @@ static const UINT8 basetable_fd1089[0x100] = 0x35,0x19,0xd3,0xff,0xc9,0xe5,0x23,0x0f,0xbe,0xa2,0xc8,0xd4,0x4e,0x52,0x34,0x28, }; - -/* common to FD1089A and FD1089B */ -static const struct parameters addr_params[16] = +// address decryption parameters, shared between A and B variants +const fd1089_base_device::decrypt_parameters fd1089_base_device::s_addr_params[16] = { { 0x23, 6,4,5,7,3,0,1,2 }, { 0x92, 2,5,3,6,7,1,0,4 }, @@ -171,9 +182,97 @@ static const struct parameters addr_params[16] = { 0x5b, 0,7,5,3,1,4,2,6 }, }; -static UINT8 rearrange_key(UINT8 table, int opcode) +// data decryption parameters for the A variant +const fd1089_base_device::decrypt_parameters fd1089_base_device::s_data_params_a[16] = { - if (opcode == 0) + { 0x55, 6,5,1,0,7,4,2,3 }, + { 0x94, 7,6,4,2,0,5,1,3 }, + { 0x8d, 1,4,2,3,0,6,7,5 }, + { 0x9a, 4,3,5,6,0,2,1,7 }, + { 0x72, 4,3,7,0,5,6,1,2 }, + { 0xff, 1,7,2,3,6,4,5,0 }, + { 0x06, 6,5,3,2,4,1,0,7 }, + { 0xc5, 3,5,1,4,2,7,0,6 }, + { 0xec, 4,7,5,1,6,0,2,3 }, + { 0x89, 3,5,0,6,1,2,7,4 }, + { 0x5c, 1,3,0,7,5,2,4,6 }, + { 0x3f, 7,3,0,2,4,6,1,5 }, + { 0x57, 6,4,7,2,1,5,3,0 }, + { 0xf7, 6,3,7,0,5,4,2,1 }, + { 0x3a, 6,1,3,2,7,4,5,0 }, + { 0xac, 1,6,3,5,0,7,4,2 }, +}; + + + +//************************************************************************** +// CORE IMPLEMENTATION +//************************************************************************** + +//------------------------------------------------- +// fd1089_base_device - constructor +//------------------------------------------------- + +fd1089_base_device::fd1089_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, UINT32 clock, char cputype) + : m68000_device(mconfig, M68000, tag, owner, clock), + m_cputype(cputype) +{ + // override the name after the m68000 initializes + m_name.printf("FD1089%c", m_cputype); +} + + +//------------------------------------------------- +// device_start - one-time device initialization +//------------------------------------------------- + +void fd1089_base_device::device_start() +{ + // start the base device + m68000_device::device_start(); + + // find the key + m_key = memregion("key")->base(); + if (m_key == NULL) + throw emu_fatalerror("FD1089 key region not found!"); + + // get a pointer to the ROM region + UINT16 *rombase = reinterpret_cast(region()->base()); + if (rombase == NULL) + throw emu_fatalerror("FD1089 found no ROM data to decrypt!"); + + // determine length and resize our internal buffers + UINT32 romsize = region()->bytes(); + m_plaintext.resize(romsize/2); + m_decrypted_opcodes.resize(romsize/2); + + // copy the plaintext + memcpy(m_plaintext, rombase, romsize); + + // decrypt it, overwriting original data with the decrypted data + decrypt(0x000000, romsize, m_plaintext, m_decrypted_opcodes, rombase); + + // mark the ROM region as decrypted, pointing to the opcodes (if it is mapped) + address_space *program = space(AS_PROGRAM); + if (program->get_read_ptr(0) != NULL) + program->set_decrypted_region(0x000000, romsize - 1, m_decrypted_opcodes); +} + + + +//************************************************************************** +// INTERNAL HELPERS +//************************************************************************** + +//------------------------------------------------- +// rearrange_key - shuffle bits in the table +// based on whether this is an opcode or a data +// decode +//------------------------------------------------- + +UINT8 fd1089_base_device::rearrange_key(UINT8 table, bool opcode) +{ + if (!opcode) { table ^= (1<<4); table ^= (1<<5); @@ -223,41 +322,21 @@ static UINT8 rearrange_key(UINT8 table, int opcode) } -static int decode_fd1089a(int val,int key,int opcode) +//------------------------------------------------- +// decode_fd1089a - decode an 8-bit value +// according to FD1089A rules +//------------------------------------------------- + +UINT8 fd1089_base_device::decode_fd1089a(UINT8 val, UINT8 key, bool opcode) { - int table; - - static const struct parameters data_params[16] = - { - { 0x55, 6,5,1,0,7,4,2,3 }, - { 0x94, 7,6,4,2,0,5,1,3 }, - { 0x8d, 1,4,2,3,0,6,7,5 }, - { 0x9a, 4,3,5,6,0,2,1,7 }, - { 0x72, 4,3,7,0,5,6,1,2 }, - { 0xff, 1,7,2,3,6,4,5,0 }, - { 0x06, 6,5,3,2,4,1,0,7 }, - { 0xc5, 3,5,1,4,2,7,0,6 }, - { 0xec, 4,7,5,1,6,0,2,3 }, - { 0x89, 3,5,0,6,1,2,7,4 }, - { 0x5c, 1,3,0,7,5,2,4,6 }, - { 0x3f, 7,3,0,2,4,6,1,5 }, - { 0x57, 6,4,7,2,1,5,3,0 }, - { 0xf7, 6,3,7,0,5,4,2,1 }, - { 0x3a, 6,1,3,2,7,4,5,0 }, - { 0xac, 1,6,3,5,0,7,4,2 }, - }; - const struct parameters *p; - const struct parameters *q; - int family; - - /* special case - don't decrypt */ + // special case - don't decrypt if (key == 0x40) return val; - table = rearrange_key(key, opcode); + UINT8 table = rearrange_key(key, opcode); - p = &addr_params[table >> 4]; - val = BITSWAP8(val, p->s7,p->s6,p->s5,p->s4,p->s3,p->s2,p->s1,p->s0) ^ p->xorval; + const decrypt_parameters &p = s_addr_params[table >> 4]; + val = BITSWAP8(val, p.s7,p.s6,p.s5,p.s4,p.s3,p.s2,p.s1,p.s0) ^ p.xorval; if (BIT(table,3)) val ^= 0x01; if (BIT(table,0)) val ^= 0xb1; @@ -266,9 +345,9 @@ static int decode_fd1089a(int val,int key,int opcode) if (BIT(table,6)) val ^= 0x01; - val = basetable_fd1089[val]; + val = s_basetable_fd1089[val]; - family = table & 0x07; + UINT8 family = table & 0x07; if (opcode == 0) { if (BIT(~table,6) & BIT(table,2)) family ^= 8; @@ -294,29 +373,30 @@ static int decode_fd1089a(int val,int key,int opcode) if (BIT(~val,6)) val = BITSWAP8(val, 7,6,5,4,2,3,0,1); - q = &data_params[family]; + const decrypt_parameters &q = s_data_params_a[family]; - val ^= q->xorval; - val = BITSWAP8(val, q->s7,q->s6,q->s5,q->s4,q->s3,q->s2,q->s1,q->s0); + val ^= q.xorval; + val = BITSWAP8(val, q.s7,q.s6,q.s5,q.s4,q.s3,q.s2,q.s1,q.s0); return val; } -static int decode_fd1089b(int val,int key,int opcode) + +//------------------------------------------------- +// decode_fd1089b - decode an 8-bit value +// according to FD1089B rules +//------------------------------------------------- + +UINT8 fd1089_base_device::decode_fd1089b(UINT8 val, UINT8 key, bool opcode) { - int table; - int xorval; - - const struct parameters *p; - - /* special case - don't decrypt */ + // special case - don't decrypt if (key == 0x40) return val; - table = rearrange_key(key, opcode); + UINT8 table = rearrange_key(key, opcode); - p = &addr_params[table >> 4]; - val = BITSWAP8(val, p->s7,p->s6,p->s5,p->s4,p->s3,p->s2,p->s1,p->s0) ^ p->xorval; + const decrypt_parameters &p = s_addr_params[table >> 4]; + val = BITSWAP8(val, p.s7,p.s6,p.s5,p.s4,p.s3,p.s2,p.s1,p.s0) ^ p.xorval; if (BIT(table,3)) val ^= 0x01; if (BIT(table,0)) val ^= 0xb1; @@ -325,9 +405,9 @@ static int decode_fd1089b(int val,int key,int opcode) if (BIT(table,6)) val ^= 0x01; - val = basetable_fd1089[val]; + val = s_basetable_fd1089[val]; - xorval = 0; + UINT8 xorval = 0; if (opcode == 0) { if (BIT(~table,6) & BIT(table,2)) xorval ^= 0x01; @@ -360,32 +440,29 @@ static int decode_fd1089b(int val,int key,int opcode) } -enum +//------------------------------------------------- +// decrypt_one - decrypt a single 16-bit value +// interpreted as being read at the given address +// as either an opcode or as data +//------------------------------------------------- + +UINT16 fd1089_base_device::decrypt_one(offs_t addr, UINT16 val, const UINT8 *key, bool opcode, char cputype) { - FD1089A, - FD1089B -}; - -static UINT16 fd1089_decrypt(offs_t addr,UINT16 val,const UINT8 *key,int opcode,int cputype) -{ - int tbl_num,src; - - /* pick the translation table from bits ff022a of the address */ - tbl_num = ((addr & 0x000002) >> 1) | - ((addr & 0x000008) >> 2) | - ((addr & 0x000020) >> 3) | - ((addr & 0x000200) >> 6) | - ((addr & 0xff0000) >> 12); - - src = ((val & 0x0008) >> 3) | - ((val & 0x0040) >> 5) | - ((val & 0xfc00) >> 8); + // pick the translation table from bits ff022a of the address + int tbl_num = ((addr & 0x000002) >> 1) | + ((addr & 0x000008) >> 2) | + ((addr & 0x000020) >> 3) | + ((addr & 0x000200) >> 6) | + ((addr & 0xff0000) >> 12); + UINT16 src = ((val & 0x0008) >> 3) | + ((val & 0x0040) >> 5) | + ((val & 0xfc00) >> 8); switch (cputype) { - case FD1089A: src = decode_fd1089a(src, key[tbl_num + (1^opcode) * 0x1000], opcode); break; - case FD1089B: src = decode_fd1089b(src, key[tbl_num + (1^opcode) * 0x1000], opcode); break; + case 'A': src = decode_fd1089a(src, key[tbl_num + (opcode ? 0 : 1) * 0x1000], opcode); break; + case 'B': src = decode_fd1089b(src, key[tbl_num + (opcode ? 0 : 1) * 0x1000], opcode); break; } src = ((src & 0x01) << 3) | @@ -395,48 +472,18 @@ static UINT16 fd1089_decrypt(offs_t addr,UINT16 val,const UINT8 *key,int opcode, return (val & ~0xfc48) | src; } -static UINT16 *decrypted; -static void clear_decrypted(running_machine &machine) +//------------------------------------------------- +// decrypt - decrypt a buffers' worth of opcodes +// and data +//------------------------------------------------- + +void fd1089_base_device::decrypt(offs_t baseaddr, UINT32 size, const UINT16 *srcptr, UINT16 *opcodesptr, UINT16 *dataptr) { - decrypted = NULL; -} - -static void sys16_decrypt(running_machine &machine, const UINT8 *key,int cputype) -{ - address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM); - UINT16 *rom = (UINT16 *)machine.root_device().memregion("maincpu")->base(); - int size = machine.root_device().memregion("maincpu")->bytes(); - int A; - decrypted = auto_alloc_array(machine, UINT16, size/2); - - machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(clear_decrypted), &machine)); - space->set_decrypted_region(0x000000, size - 1, decrypted); - - for (A = 0;A < size;A+=2) + for (offs_t offset = 0; offset < size; offset += 2) { - UINT16 src = rom[A/2]; - - /* decode the opcodes */ - decrypted[A/2] = fd1089_decrypt(A,src,key,1,cputype); - - /* decode the data */ - rom[A/2] = fd1089_decrypt(A,src,key,0,cputype); + UINT16 src = srcptr[offset / 2]; + opcodesptr[offset / 2] = decrypt_one(baseaddr + offset, src, m_key, true, m_cputype); + dataptr[offset / 2] = decrypt_one(baseaddr + offset, src, m_key, false, m_cputype); } } - -void *fd1089_get_decrypted_base(void) -{ - return decrypted; -} - -void fd1089a_decrypt(running_machine &machine) -{ - sys16_decrypt(machine, machine.root_device().memregion("fd1089a")->base(), FD1089A); -} - -void fd1089b_decrypt(running_machine &machine) -{ - sys16_decrypt(machine, machine.root_device().memregion("fd1089b")->base(), FD1089B); -} - diff --git a/src/mame/machine/fd1089.h b/src/mame/machine/fd1089.h index 263e2388ae4..c4e0fe9a6b8 100644 --- a/src/mame/machine/fd1089.h +++ b/src/mame/machine/fd1089.h @@ -1,4 +1,100 @@ -void *fd1089_get_decrypted_base(void); +/*************************************************************************** -void fd1089a_decrypt(running_machine &machine); -void fd1089b_decrypt(running_machine &machine); + Hitachi FD1089A/FD1089B encryption emulation + +**************************************************************************** + + Copyright Nicola Salmoria, Andreas Naive, and Charles MacDonald. + + All rights reserved. + +***************************************************************************/ + +#ifndef __FD1089_H__ +#define __FD1089_H__ + +#include "cpu/m68000/m68000.h" + + +//************************************************************************** +// CONSTANTS +//************************************************************************** + +// device type definition +extern const device_type FD1089A; +extern const device_type FD1089B; + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> fd1089_base_device + +// base device, shared implementation between A and B variants +class fd1089_base_device : public m68000_device +{ +public: + // construction/destruction + fd1089_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, UINT32 clock, char cputype); + + // explicit decryption helpers + void decrypt(offs_t baseaddr, UINT32 size, offs_t regionoffs, UINT16 *opcodesptr, UINT16 *dataptr) { decrypt(baseaddr, size, &m_plaintext[regionoffs/2], opcodesptr, dataptr); } + +protected: + // device overrides + virtual void device_start(); + + // internal helpers + UINT8 rearrange_key(UINT8 table, bool opcode); + UINT8 decode_fd1089a(UINT8 val, UINT8 key, bool opcode); + UINT8 decode_fd1089b(UINT8 val, UINT8 key, bool opcode); + UINT16 decrypt_one(offs_t addr, UINT16 val, const UINT8 *key, bool opcode, char cputype); + void decrypt(offs_t baseaddr, UINT32 size, const UINT16 *srcptr, UINT16 *opcodesptr, UINT16 *dataptr); + + // internal state + const UINT8 * m_key; + char m_cputype; + dynamic_array m_plaintext; + dynamic_array m_decrypted_opcodes; + + // internal types + struct decrypt_parameters + { + UINT8 xorval; + UINT8 s7,s6,s5,s4,s3,s2,s1,s0; + }; + + // static tables + static const UINT8 s_basetable_fd1089[0x100]; + static const decrypt_parameters s_addr_params[16]; + static const decrypt_parameters s_data_params_a[16]; +}; + + +// ======================> fd1089a_device + +// FD1089A variant +class fd1089a_device : public fd1089_base_device +{ +public: + // construction/destruction + fd1089a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : fd1089_base_device(mconfig, FD1089A, tag, owner, clock, 'A') { } +}; + + +// ======================> fd1089b_device + +// FD1089B variant +class fd1089b_device : public fd1089_base_device +{ +public: + // construction/destruction + fd1089b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : fd1089_base_device(mconfig, FD1089B, tag, owner, clock, 'B') { } +}; + + +#endif diff --git a/src/mame/machine/fd1094.c b/src/mame/machine/fd1094.c index f696124fb34..96a0f7bbf05 100644 --- a/src/mame/machine/fd1094.c +++ b/src/mame/machine/fd1094.c @@ -1,421 +1,428 @@ -/***************************************************************************** +/*************************************************************************** -FD1094 encryption + Hitachi FD1089FD1094 encryption emulation +**************************************************************************** -The FD1094 is a custom CPU based on the 68000, which runs encrypted code. -The decryption key is stored in 8KB of battery-backed RAM; when the battery -dies, the CPU can no longer decrypt the program code and the game stops -working (though the CPU itself still works - it just uses a wrong decryption -key). + Copyright Nicola Salmoria, Andreas Naive, and Charles MacDonald. -Being a 68000, the encryption works on 16-bit words. Only words fetched from -program space are decrypted; words fetched from data space are not affected. + All rights reserved. -The decryption can logically be split in two parts. The first part consists -of a series of conditional XORs and bitswaps, controlled by the decryption -key, which will be described in the next paragraph. The second part does a -couple more XORs which don't depend on the key, followed by the replacement -of several values with FFFF. This last step is done to prevent usage of any -PC-relative opcode, which would easily allow an intruder to dump decrypted -values from program space. The FFFF replacement may affect either ~300 values -or ~5000, depending on the decryption key. +**************************************************************************** -The main part of the decryption can itself be subdivided in four consecutive -steps. The first one is executed only if bit 15 of the encrypted value is 1; -the second one only if bit 14 of the _current_ value is 1; the third one only -if bit 13 of the current value is 1; the fourth one is always executed. The -first three steps consist of a few conditional XORs and a final conditional -bitswap; the fourth one consists of a fixed XOR and a few conditional -bitswaps. There is, however, a special case: if bits 15, 14 and 13 of the -encrypted value are all 0, none of the above steps are executed, replaced by -a single fixed bitswap. + The FD1094 is a custom CPU based on the 68000, which runs encrypted code. + The decryption key is stored in 8KB of battery-backed RAM; when the battery + dies, the CPU can no longer decrypt the program code and the game stops + working (though the CPU itself still works - it just uses a wrong decryption + key). -In the end, the decryption of a value at a given address is controlled by 32 -boolean variables; 8 of them change at every address (repeating after 0x2000 -words), and constitute the main key which is stored in the battery-backed -RAM; the other 24 don't change with the address, and depend solely on bytes -1, 2, and 3 of the battery-backed RAM, modified by the "state" which the CPU -is in. + Being a 68000, the encryption works on 16-bit words. Only words fetched from + program space are decrypted; words fetched from data space are not affected. -The CPU can be in one of 256 possible states. The 8 bits of the state modify -the 24 bits of the global key in a fixed way, which isn't affected by the -battery-backed RAM. -On reset, the CPU goes in state 0x00. The state can then be modified by the -program, executing the instruction -CMPI.L #$00xxFFFF, D0 -where xx is the state. -When an interrupt happens, the CPU enters "irq mode", forcing a specific -state, which is stored in byte 0 of the battery-backed RAM. Irq mode can also -be selected by the program with the instruction -CMPI.L #$0200FFFF, D0 -When RTE is executed, the CPU leaves irq mode, restoring the previous state. -This can also be done by the program with the instruction -CMPI.L #$0300FFFF, D0 + The decryption can logically be split in two parts. The first part consists + of a series of conditional XORs and bitswaps, controlled by the decryption + key, which will be described in the next paragraph. The second part does a + couple more XORs which don't depend on the key, followed by the replacement + of several values with FFFF. This last step is done to prevent usage of any + PC-relative opcode, which would easily allow an intruder to dump decrypted + values from program space. The FFFF replacement may affect either ~300 values + or ~5000, depending on the decryption key. -Since bytes 0-3 of the battery-backed RAM are used to store the irq state and -the global key, they have a double use: this one, and the normal 8-bit key -that changes at every address. To prevent that double use, the CPU fetches -the 8-bit key from a different place when decrypting words 0-3, but this only -happens after wrapping around at least once; when decrypting the first four -words of memory, which correspond the the initial SP and initial PC vectors, -the 8-bit key is taken from bytes 0-3 of RAM. Instead, when fetching the -vectors, the global key is handled differently, to prevent double use of -those bytes. But this special handling of the global key doesn't apply to -normal operations: reading words 1-3 from program space results in bytes 1-3 -of RAM being used both for the 8-bit key and for the 24-bit global key. + The main part of the decryption can itself be subdivided in four consecutive + steps. The first one is executed only if bit 15 of the encrypted value is 1; + the second one only if bit 14 of the _current_ value is 1; the third one only + if bit 13 of the current value is 1; the fourth one is always executed. The + first three steps consist of a few conditional XORs and a final conditional + bitswap; the fourth one consists of a fixed XOR and a few conditional + bitswaps. There is, however, a special case: if bits 15, 14 and 13 of the + encrypted value are all 0, none of the above steps are executed, replaced by + a single fixed bitswap. + + In the end, the decryption of a value at a given address is controlled by 32 + boolean variables; 8 of them change at every address (repeating after 0x2000 + words), and constitute the main key which is stored in the battery-backed + RAM; the other 24 don't change with the address, and depend solely on bytes + 1, 2, and 3 of the battery-backed RAM, modified by the "state" which the CPU + is in. + + The CPU can be in one of 256 possible states. The 8 bits of the state modify + the 24 bits of the global key in a fixed way, which isn't affected by the + battery-backed RAM. + On reset, the CPU goes in state 0x00. The state can then be modified by the + program, executing the instruction + CMPI.L #$00xxFFFF, D0 + where xx is the state. + When an interrupt happens, the CPU enters "irq mode", forcing a specific + state, which is stored in byte 0 of the battery-backed RAM. Irq mode can also + be selected by the program with the instruction + CMPI.L #$0200FFFF, D0 + When RTE is executed, the CPU leaves irq mode, restoring the previous state. + This can also be done by the program with the instruction + CMPI.L #$0300FFFF, D0 + + Since bytes 0-3 of the battery-backed RAM are used to store the irq state and + the global key, they have a double use: this one, and the normal 8-bit key + that changes at every address. To prevent that double use, the CPU fetches + the 8-bit key from a different place when decrypting words 0-3, but this only + happens after wrapping around at least once; when decrypting the first four + words of memory, which correspond the the initial SP and initial PC vectors, + the 8-bit key is taken from bytes 0-3 of RAM. Instead, when fetching the + vectors, the global key is handled differently, to prevent double use of + those bytes. But this special handling of the global key doesn't apply to + normal operations: reading words 1-3 from program space results in bytes 1-3 + of RAM being used both for the 8-bit key and for the 24-bit global key. -There is still uncertainty about the assignment of two global key bits. + There is still uncertainty about the assignment of two global key bits. -key[1] ------- -key_0b invert; \ bits 7,5 always 1 for now (but 0 in a bad CPU) -global_xor0; / -key_5b invert; bit 6 -key_2b invert; bit 4 -key_1b invert; bit 3 always 1 for now (but 0 in a bad CPU) -global_xor1; bit 2 -key_0c invert; bit 1 -global_swap2; bit 0 + key[1] + ------ + key_0b invert; \ bits 7,5 always 1 for now (but 0 in a bad CPU) + global_xor0; / + key_5b invert; bit 6 + key_2b invert; bit 4 + key_1b invert; bit 3 always 1 for now (but 0 in a bad CPU) + global_xor1; bit 2 + key_0c invert; bit 1 + global_swap2; bit 0 -key[2] ------- -key_1a invert; bit 7 always 1 for now (but 0 in a bad CPU) -key_6b invert; bit 6 always 1 for now (but 0 in a bad CPU) -global_swap0a; bit 5 -key_7a invert; bit 4 -key_4a invert; bit 3 -global_swap0b; bit 2 -key_6a invert; bit 1 -key_3a invert; bit 0 + key[2] + ------ + key_1a invert; bit 7 always 1 for now (but 0 in a bad CPU) + key_6b invert; bit 6 always 1 for now (but 0 in a bad CPU) + global_swap0a; bit 5 + key_7a invert; bit 4 + key_4a invert; bit 3 + global_swap0b; bit 2 + key_6a invert; bit 1 + key_3a invert; bit 0 -key[3] ------- -key_2a invert; bit 7 always 1 for now (but 0 in a bad CPU) -global_swap3; bit 6 always 1 for now (but 0 in a bad CPU) -key_5a_invert; bit 5 -global_swap1; bit 4 -key_3b invert; bit 3 -global_swap4; bit 2 -key_0a invert; bit 1 -key_4b invert; bit 0 + key[3] + ------ + key_2a invert; bit 7 always 1 for now (but 0 in a bad CPU) + global_swap3; bit 6 always 1 for now (but 0 in a bad CPU) + key_5a_invert; bit 5 + global_swap1; bit 4 + key_3b invert; bit 3 + global_swap4; bit 2 + key_0a invert; bit 1 + key_4b invert; bit 0 -Analysis of the data contained in the 8k key data indicates some regularities. -To begin with, in all the keys seen so far, bit 7 ($80) in key values at -addresses $0004-$0FFF is always set to 1. Similarly, bit 6 ($40) in key values -at addresses $1000-$1FFF is always set to 1. + Analysis of the data contained in the 8k key data indicates some regularities. + To begin with, in all the keys seen so far, bit 7 ($80) in key values at + addresses $0004-$0FFF is always set to 1. Similarly, bit 6 ($40) in key values + at addresses $1000-$1FFF is always set to 1. -Even more interesting, however, is that analyzing the low 6 bits of the key -data reveals that a simple linear congruential generator has been used -consistently to generate the key bits. The LCG is of the form: + Even more interesting, however, is that analyzing the low 6 bits of the key + data reveals that a simple linear congruential generator has been used + consistently to generate the key bits. The LCG is of the form: - temp = A * val; - val' = temp + (temp << 16); + temp = A * val; + val' = temp + (temp << 16); -and it appears to be calculated to at least 22 bits. In all cases seen so far, -the value of 'A' is fixed at $29. To generate the low 6 bits of the key, the -result of the LCG is shifted right 16 bits and inverted. + and it appears to be calculated to at least 22 bits. In all cases seen so far, + the value of 'A' is fixed at $29. To generate the low 6 bits of the key, the + result of the LCG is shifted right 16 bits and inverted. -The following pseudo-code will generate 7 of the 8 bits of the key data -successfully for all known keys, given the values of the 'shift' and 'B' -parameters, as well as an initial 'seed' for the generator: + The following pseudo-code will generate 7 of the 8 bits of the key data + successfully for all known keys, given the values of the 'shift' and 'B' + parameters, as well as an initial 'seed' for the generator: -void genkey(UINT32 seed, UINT8 *output) -{ - int bytenum; + void genkey(UINT32 seed, UINT8 *output) + { + int bytenum; - for (bytenum = 4; bytenum < 8192; bytenum++) - { - UINT8 byteval; + for (bytenum = 4; bytenum < 8192; bytenum++) + { + UINT8 byteval; - seed = seed * 0x29; - seed += seed << 16; + seed = seed * 0x29; + seed += seed << 16; - byteval = (~seed >> 16) & 0x3f; - byteval |= (bytenum < 0x1000) ? 0x80 : 0x40; + byteval = (~seed >> 16) & 0x3f; + byteval |= (bytenum < 0x1000) ? 0x80 : 0x40; - output[bytenum] = byteval; - } -} + output[bytenum] = byteval; + } + } -This only leaves one bit per key value (and the global key) left to determine. -It is worth pointing out that this remaining bit is the same bit that controls -how many opcodes to blank to $FFFF: 0 means a smaller subset (~300), while 1 -indicates a much larger subset (~5000). Looking at the correlations between -where the key has this bit set to 0, and the presence of opcodes that would -be blanked as a result, seems to imply that the key is generated based on the -plaintext. That is, this final bit is set to 1 by default (hence blanking -more aggressively), and cleared to 0 if any plaintext words affected by the -byte in question would be incorrectly blanked. + This only leaves one bit per key value (and the global key) left to determine. + It is worth pointing out that this remaining bit is the same bit that controls + how many opcodes to blank to $FFFF: 0 means a smaller subset (~300), while 1 + indicates a much larger subset (~5000). Looking at the correlations between + where the key has this bit set to 0, and the presence of opcodes that would + be blanked as a result, seems to imply that the key is generated based on the + plaintext. That is, this final bit is set to 1 by default (hence blanking + more aggressively), and cleared to 0 if any plaintext words affected by the + byte in question would be incorrectly blanked. -When the keys were generated, the LCG seed wasn't input directly. Instead, -another value was entered, which in most cases was derived from the current -date/time. The LCG seed is obtained from that value via a multiplication. -The current date/time was also used in most cases to select the three bytes of -the global key. Interestingly, the global key must be inverted and read in -decimal representation to see this, while the seed must be read in hexadecimal -representation. + When the keys were generated, the LCG seed wasn't input directly. Instead, + another value was entered, which in most cases was derived from the current + date/time. The LCG seed is obtained from that value via a multiplication. + The current date/time was also used in most cases to select the three bytes of + the global key. Interestingly, the global key must be inverted and read in + decimal representation to see this, while the seed must be read in hexadecimal + representation. -For some reason, bit 3 of the first byte of the global key was always set to 1 -regardless of the value input into the key generator program, so e.g. the -input "88 01 23" would become "80 01 23". + For some reason, bit 3 of the first byte of the global key was always set to 1 + regardless of the value input into the key generator program, so e.g. the + input "88 01 23" would become "80 01 23". -The very first byte of internal RAM, which indicates the IRQ state, doesn't -seem to follow the same procedure. The IRQ state was probably decided at an -earlier time, not during the final key generation. + The very first byte of internal RAM, which indicates the IRQ state, doesn't + seem to follow the same procedure. The IRQ state was probably decided at an + earlier time, not during the final key generation. -summary: --------- + summary: + -------- - +------------------------------------------------- 317- part # - | +----------------------------------------- IRQ state (hex) - | | +----------------------------------- global key (inverted, dec) - | | | +-------------------------- main key seed (hex) (LCG seed = seed * 0x2F1E21) - | | | | +----------------- game - | | | | | +---------- year - | | | | | | +- inferred key generation date - | | | | | | | --------- -- -------- ------ -------- ---- -------------------------- -0041 12 87 06 19 895963 bullet 1987 87/06/19 (atypical) -0045 34 97 02 39 384694 suprleag 1987 (atypical) -0049 F1 87 10 28 8932F7 shinobi2 1987 87/10/28 (atypical) -0050 F1 87 10 28 8932F7 shinobi1 1987 87/10/28 (atypical) -0053 00 00 00 00 020000 sonicbom 1987 atypical -0056 CD 80 01 23 032ABC thndrbld 1987 88/01/23 (atypical) -0059 aceattac 1988 -0060 45 80 03 30 343210 aceattaa 1988 88/03/30 (atypical) -0065 altbeaj1 1988 -0068 20 80 06 10 880610 altbeaj3 1988 88/06/10 -0070 59 80 08 06 880806 passshtj 1988 88/08/06 -0074 47 80 08 06 880806 passshta 1988 88/08/06 -0071 20 80 08 09 880809 passsht 1988 88/08/09 -0079 98 80 09 05 880906 exctleag 1988 88/09/05-88/09/06 (atypical) -0080 96 80 08 26 880826 passsht 1988 88/08/26 -0058-02C FF 80 10 07 881007 sspirtfc 1988 88/10/07 -0084 0E 80 10 31 881031 wb31 1988 88/10/31 -0085 26 80 11 08 881108 wb32 1988 88/11/08 -0087 69 80 11 08 881108 wb34 1988 88/11/08 -0089 52 80 11 29 881129 wb33 1988 88/11/29 -0058-03B 71 80 11 25 881125 ggroundj 1988 88/11/25 -0058-03C 04 80 11 27 881127 gground 1988 88/11/27 -0090 AB 80 01 27 247333 wrestwa1 1989 atypical -0091 68 80 11 27 881127 tetris1 1988 88/11/27 -0092 10 80 11 28 881128 tetris2 1988 88/11/28 -0093 25 80 11 29 881129 tetris 1988 88/11/29 -0093A 35 02 09 17 900209 tetris3 1988 90/02/09 -0096 21 80 11 21 881121 ddux 1988 88/11/21 -0102 AB 80 02 03 04588A wrestwa2 1989 atypical -0058-04B 27 03 27 14 032714 crkdownj 1989 89/03/27 14:xx -0058-04C 19 03 27 05 032705 crkdown 1989 89/03/27 05:xx -0058-04D DC 03 27 06 032706 crkdownu 1989 89/03/27 06:xx -0110 19 81 03 29 032916 goldnax1 1989 89/03/29 16:xx -0115 12 04 05 11 040511 bayroutj 1989 89/04/05 11:xx -0116 11 03 30 09 033009 bayroute 1989 89/03/30 09:xx -0118 22 81 03 07 030719 toutrun 1989 89/03/07 19:xx -toutrun2 22 81 03 07 031113 toutrun2 1989 89/03/11 13:xx (atypical) -0120 0D 81 03 29 032916 goldnax3 1989 89/03/29 16:xx -0121 35 81 03 29 032916 goldnaxj 1989 89/03/29 16:xx -0122 03 81 04 04 890404 goldnaxu 1989 89/04/04 -0058-05B 92 81 06 09 890609 sgmastj 1989 89/06/09 -0058-05C 30 81 06 13 890613 sgmastc 1989 89/06/13 -0058-05D sgmast 1989 -0124A 80 06 21 11 890621 smgpj 1989 89/06/21 11:xx -0125A DE 06 15 16 890615 smgpu 1989 89/06/15 16:xx -0126 54 05 28 01 890528 smgp5 1989 89/05/28 01:xx -0126A 74 06 16 15 890616 smgp 1989 89/06/16 15:xx -0127A 5F 81 07 06 890706 fpoint 1989 89/07/06 -0128 55 00 28 20 890828 eswatj 1989 89/08/28 20:xx -0129 0A 00 28 20 890828 eswatu 1989 89/08/28 20:xx -0130 EC 00 28 19 890828 eswat 1989 89/08/28 19:xx -0134 DE 81 11 30 891130 loffirej 1989 89/11/30 -0135 98 81 11 31 891131 loffireu 1989 89/11/31 -0136 12 81 11 29 891129 loffire 1989 89/11/29 -0139 49 03 25 15 891125 bloxeed 1990 89/11/25 15:xx -0142 91 01 24 17 900124 mvpj 1989 90/01/24 17:xx -0143 20 02 02 18 900202 mvp 1989 90/02/02 18:xx -0144 2E 02 23 18 022318 rachero 1989 90/02/23 18:xx -0058-06B 88 03 15 09 900315 roughrac 1990 90/03/15 09:xx -0146 10 04 26 17 900426 astormj 1990 90/04/26 17:xx -0147 2D 04 14 14 900414 astormu 1990 90/04/14 14:xx -0148 50 04 26 15 900426 astorm3 1990 90/04/26 15:xx -0153 FC 04 10 14 900410 pontoon 1990 90/04/10 14:xx -0157 20 07 20 10 900720 mwalkj 1990 90/07/20 10:xx -0158 DE 07 15 15 900715 mwalku 1990 90/07/15 15:xx -0159 39 07 20 10 900720 mwalk 1990 90/07/20 10:xx -0162 8F 01 14 15 900914 gprider1 1990 90/09/14 15:xx -0163 99 01 13 15 900913 gprider 1990 90/09/13 15:xx -5023 EF 04 18 05 900917 ryukyu 1990 90/09/17 12:18? (atypical) -0165 56 82 11 25 901125 lghostu 1990 90/11/25 -0166 A2 82 11 24 901124 lghost 1990 90/11/24 -0169B 48 06 35 32 901205 abcop 1990 90/12/05 14:35? (atypical) -0058-08B 4E 04 17 15 910206 qsww 1991 91/02/06 12:17? (atypical) -0175 91 83 03 22 910322 cltchtrj 1991 91/03/22 -0176 FC 83 03 14 910314 cltchitr 1991 91/03/14 -0179A 73 06 55 17 910318 cottonj 1991 91/03/18 14:55? (atypical) -0180 73 03 53 00 910403 cottonu 1991 91/04/03 11:53? (atypical) -0181A 73 06 55 17 910318 cotton 1991 91/03/18 14:55? (atypical) -0058-09D 91 83 06 26 910618 dcclubfd 1991 91/06/18-91/06/26 (atypical) -0182 07 07 12 14 921401 ddcrewj 1991 92/07/12 14:01? (atypical) -0184 07 07 12 16 921622 ddcrew2 1991 92/07/12 16:22? (atypical) -0186 5F 83 07 01 912030 ddcrewu 1991 92/07/01 20:30? (atypical) -0190 07 07 17 16 921716 ddcrew 1991 92/07/17 17:16? (atypical) -ddcrew1 91 84 07 42 910744 ddcrew1 1991 92/07/xx 07:44? (atypical) -0196 4A 20 12 22 920623 desertbr 1992 92/06/23 20:12? (atypical) -0197A 3F 84 06 19 920612 wwallyja 1992 92/06/12-92/06/19 (atypical) -0197B 3F 84 06 19 920612 wwallyj 1992 92/06/12-92/06/19 (atypical) + +------------------------------------------------- 317- part # + | +----------------------------------------- IRQ state (hex) + | | +----------------------------------- global key (inverted, dec) + | | | +-------------------------- main key seed (hex) (LCG seed = seed * 0x2F1E21) + | | | | +----------------- game + | | | | | +---------- year + | | | | | | +- inferred key generation date + | | | | | | | + -------- -- -------- ------ -------- ---- -------------------------- + 0041 12 87 06 19 895963 bullet 1987 87/06/19 (atypical) + 0045 34 97 02 39 384694 suprleag 1987 (atypical) + 0049 F1 87 10 28 8932F7 shinobi2 1987 87/10/28 (atypical) + 0050 F1 87 10 28 8932F7 shinobi1 1987 87/10/28 (atypical) + 0053 00 00 00 00 020000 sonicbom 1987 atypical + 0056 CD 80 01 23 032ABC thndrbld 1987 88/01/23 (atypical) + 0059 aceattac 1988 + 0060 45 80 03 30 343210 aceattaa 1988 88/03/30 (atypical) + 0065 altbeaj1 1988 + 0068 20 80 06 10 880610 altbeaj3 1988 88/06/10 + 0070 59 80 08 06 880806 passshtj 1988 88/08/06 + 0074 47 80 08 06 880806 passshta 1988 88/08/06 + 0071 20 80 08 09 880809 passsht 1988 88/08/09 + 0079 98 80 09 05 880906 exctleag 1988 88/09/05-88/09/06 (atypical) + 0080 96 80 08 26 880826 passsht 1988 88/08/26 + 0058-02C FF 80 10 07 881007 sspirtfc 1988 88/10/07 + 0084 0E 80 10 31 881031 wb31 1988 88/10/31 + 0085 26 80 11 08 881108 wb32 1988 88/11/08 + 0087 69 80 11 08 881108 wb34 1988 88/11/08 + 0089 52 80 11 29 881129 wb33 1988 88/11/29 + 0058-03B 71 80 11 25 881125 ggroundj 1988 88/11/25 + 0058-03C 04 80 11 27 881127 gground 1988 88/11/27 + 0090 AB 80 01 27 247333 wrestwa1 1989 atypical + 0091 68 80 11 27 881127 tetris1 1988 88/11/27 + 0092 10 80 11 28 881128 tetris2 1988 88/11/28 + 0093 25 80 11 29 881129 tetris 1988 88/11/29 + 0093A 35 02 09 17 900209 tetris3 1988 90/02/09 + 0096 21 80 11 21 881121 ddux 1988 88/11/21 + 0102 AB 80 02 03 04588A wrestwa2 1989 atypical + 0058-04B 27 03 27 14 032714 crkdownj 1989 89/03/27 14:xx + 0058-04C 19 03 27 05 032705 crkdown 1989 89/03/27 05:xx + 0058-04D DC 03 27 06 032706 crkdownu 1989 89/03/27 06:xx + 0110 19 81 03 29 032916 goldnax1 1989 89/03/29 16:xx + 0115 12 04 05 11 040511 bayroutj 1989 89/04/05 11:xx + 0116 11 03 30 09 033009 bayroute 1989 89/03/30 09:xx + 0118 22 81 03 07 030719 toutrun 1989 89/03/07 19:xx + toutrun2 22 81 03 07 031113 toutrun2 1989 89/03/11 13:xx (atypical) + 0120 0D 81 03 29 032916 goldnax3 1989 89/03/29 16:xx + 0121 35 81 03 29 032916 goldnaxj 1989 89/03/29 16:xx + 0122 03 81 04 04 890404 goldnaxu 1989 89/04/04 + 0058-05B 92 81 06 09 890609 sgmastj 1989 89/06/09 + 0058-05C 30 81 06 13 890613 sgmastc 1989 89/06/13 + 0058-05D sgmast 1989 + 0124A 80 06 21 11 890621 smgpj 1989 89/06/21 11:xx + 0125A DE 06 15 16 890615 smgpu 1989 89/06/15 16:xx + 0126 54 05 28 01 890528 smgp5 1989 89/05/28 01:xx + 0126A 74 06 16 15 890616 smgp 1989 89/06/16 15:xx + 0127A 5F 81 07 06 890706 fpoint 1989 89/07/06 + 0128 55 00 28 20 890828 eswatj 1989 89/08/28 20:xx + 0129 0A 00 28 20 890828 eswatu 1989 89/08/28 20:xx + 0130 EC 00 28 19 890828 eswat 1989 89/08/28 19:xx + 0134 DE 81 11 30 891130 loffirej 1989 89/11/30 + 0135 98 81 11 31 891131 loffireu 1989 89/11/31 + 0136 12 81 11 29 891129 loffire 1989 89/11/29 + 0139 49 03 25 15 891125 bloxeed 1990 89/11/25 15:xx + 0142 91 01 24 17 900124 mvpj 1989 90/01/24 17:xx + 0143 20 02 02 18 900202 mvp 1989 90/02/02 18:xx + 0144 2E 02 23 18 022318 rachero 1989 90/02/23 18:xx + 0058-06B 88 03 15 09 900315 roughrac 1990 90/03/15 09:xx + 0146 10 04 26 17 900426 astormj 1990 90/04/26 17:xx + 0147 2D 04 14 14 900414 astormu 1990 90/04/14 14:xx + 0148 50 04 26 15 900426 astorm3 1990 90/04/26 15:xx + 0153 FC 04 10 14 900410 pontoon 1990 90/04/10 14:xx + 0157 20 07 20 10 900720 mwalkj 1990 90/07/20 10:xx + 0158 DE 07 15 15 900715 mwalku 1990 90/07/15 15:xx + 0159 39 07 20 10 900720 mwalk 1990 90/07/20 10:xx + 0162 8F 01 14 15 900914 gprider1 1990 90/09/14 15:xx + 0163 99 01 13 15 900913 gprider 1990 90/09/13 15:xx + 5023 EF 04 18 05 900917 ryukyu 1990 90/09/17 12:18? (atypical) + 0165 56 82 11 25 901125 lghostu 1990 90/11/25 + 0166 A2 82 11 24 901124 lghost 1990 90/11/24 + 0169B 48 06 35 32 901205 abcop 1990 90/12/05 14:35? (atypical) + 0058-08B 4E 04 17 15 910206 qsww 1991 91/02/06 12:17? (atypical) + 0175 91 83 03 22 910322 cltchtrj 1991 91/03/22 + 0176 FC 83 03 14 910314 cltchitr 1991 91/03/14 + 0179A 73 06 55 17 910318 cottonj 1991 91/03/18 14:55? (atypical) + 0180 73 03 53 00 910403 cottonu 1991 91/04/03 11:53? (atypical) + 0181A 73 06 55 17 910318 cotton 1991 91/03/18 14:55? (atypical) + 0058-09D 91 83 06 26 910618 dcclubfd 1991 91/06/18-91/06/26 (atypical) + 0182 07 07 12 14 921401 ddcrewj 1991 92/07/12 14:01? (atypical) + 0184 07 07 12 16 921622 ddcrew2 1991 92/07/12 16:22? (atypical) + 0186 5F 83 07 01 912030 ddcrewu 1991 92/07/01 20:30? (atypical) + 0190 07 07 17 16 921716 ddcrew 1991 92/07/17 17:16? (atypical) + ddcrew1 91 84 07 42 910744 ddcrew1 1991 92/07/xx 07:44? (atypical) + 0196 4A 20 12 22 920623 desertbr 1992 92/06/23 20:12? (atypical) + 0197A 3F 84 06 19 920612 wwallyja 1992 92/06/12-92/06/19 (atypical) + 0197B 3F 84 06 19 920612 wwallyj 1992 92/06/12-92/06/19 (atypical) ----- + ---- -Bad CPUs that gave some more information about the global key: + Bad CPUs that gave some more information about the global key: - global01 global02 global03 - -------- -------- -------- - ..... .. .. -unknown 11111111 11110110 10111110 (Shinobi 16A, part no. unreadable, could be dead) -unknown 10101011 11111000 11010101 (unknown ddcrewa key) -dead 00001111 00001111 00001111 (Alien Storm CPU with no battery) -bad 11100000 10101011 10111001 (flaky 317-0049) + global01 global02 global03 + -------- -------- -------- + ..... .. .. + unknown 11111111 11110110 10111110 (Shinobi 16A, part no. unreadable, could be dead) + unknown 10101011 11111000 11010101 (unknown ddcrewa key) + dead 00001111 00001111 00001111 (Alien Storm CPU with no battery) + bad 11100000 10101011 10111001 (flaky 317-0049) ----- + ---- -Notes: + Notes: -We start in state 0. -Vectors are fetched: - SP.HI @ $000000 -> mainkey = key[0], globalkey = { $00, $00, $00 }, less aggressive blanking - SP.LO @ $000002 -> mainkey = key[1], globalkey = { $00, $00, $00 }, less aggressive blanking - PC.HI @ $000004 -> mainkey = key[2], globalkey = { key[1], $00, $00 } - PC.LO @ $000006 -> mainkey = key[3], globalkey = { key[1], key[2], $00 } + We start in state 0. + Vectors are fetched: + SP.HI @ $000000 -> mainkey = key[0], globalkey = { $00, $00, $00 }, less aggressive blanking + SP.LO @ $000002 -> mainkey = key[1], globalkey = { $00, $00, $00 }, less aggressive blanking + PC.HI @ $000004 -> mainkey = key[2], globalkey = { key[1], $00, $00 } + PC.LO @ $000006 -> mainkey = key[3], globalkey = { key[1], key[2], $00 } -driver FD1094 SP plain SP enc PC plain PC enc States Used --------- -------- -------- -------- -------- -------- ----------- -aceattaa 317-0060 00000000 A711AF59 00000400 AF59EADD 00 17 31 45 90 FC -altbeaj3 317-0068 FFFFFF00 B2F7F299 00000400 CCDDEF58 00 0F 18 20 93 A7 D8 -altbeaj1 317-0065 C9C5F299 CCDDECDD -bayroute 317-0116 00504000 5EB40000 00001000 5533A184 00 04 11 18 -bayroutj 317-0115 00504000 56150000 00001000 85948DCF 00 05 12 16 -bullet 317-0041 00000000 57355D96 00001882 8DDC8CF4 (deduced, not 100% sure) -cotton 317-0181a 00204000 5DB20000 00000716 CCDD0716 00 0E 73 -cottonu 317-0180 00204000 5DB20000 00000716 A1840716 00 0E 73 -cottonj 317-0179a 00204000 5DB20000 00000716 CCDD0716 00 0E 73 -ddux 317-0096 00000000 5F94AF59 00000406 AF5987A0 00 21 28 70 D9 -eswat 317-0130 00000000 A711AF59 00000400 5533BC59 00 05 0C EC FA -eswatu 317-0129 00000000 5537AF59 00000400 55334735 00 0A 12 C3 CC -eswatj 317-0128 00000000 A711AF59 00000400 55334735 00 63 CB D5 -exctleag 317-0079? 00000000 5537AF59 00000410 83018384 (deduced, not 100% sure) -fpoint 317-0127A 00000000 AF59AF59 00001A40 8DDC9960 00 15 35 5F 82 DB -fpoint1 317-0127A 00000000 AF59AF59 00001A40 8DDC9960 00 15 35 5F 82 DB -goldnaxu 317-0122 FFFFFF00 E53AF2B9 00000400 A184A196 00 03 51 72 99 F6 -goldnaxj 317-0121 FFFFFF00 C9D6F2B9 00000400 AF59A785 00 12 35 58 7A 9E -goldnax3 317-0120 FFFFFF00 ED62F2B9 00000400 AF59A785 00 0A 0D 44 C7 EF -goldnax1 317-0110 FFFFFF00 ED62F2B9 00000400 AF59A785 00 19 2E 31 48 5D -mvp 317-0143 00000000 5F94A711 00000416 BD59DC5B 00 19 20 88 98 -mvpj 317-0142 00000000 5F94AF59 00000416 BD599C7D 00 19 35 91 DA -passsht 317-0080 00000000 AF59AF59 00003202 C2003923 00 11 52 96 EE -passshta 317-0074 00000000 AF59AF59 000031E4 C2003F8C 00 12 47 83 A7 -passshtj 317-0070 00000000 5D92AF59 000031E4 C2003F8C 00 12 59 83 FE -ryukyu 317-5023 00203800 AF49D30B 0000042E FC5863B5 00 DC EF -shinobi2 317-0049 FFFFFF00 C9C5F25F 00000400 AF598395 00 53 88 9B 9C F1 -sonicbom 317-0053 00000000 5735AF59 00001000 FC587133 00 -suprleag 317-0045? 00000000 A711AF59 BD59CE5B -tetris2 317-0092 00000000 5735AF59 00000410 AF598685 00 10 52 74 97 FC -tetris1 317-0091 00000000 5D92AF59 00000410 AF59AE58 99 25 42 5B 68 FC -wb34 317-0087 FFFFFF7E B2978997 00000500 AF590500 00 11 64 69 82 -wb33 317-0089 FFFFFF7E E5C78997 00000500 AF590500 00 23 40 52 71 -wb32 317-0085 FFFFFF7E B2F78997 00000500 AF590500 00 10 13 26 77 -wrestwa2 317-0102 00000000 5D96AF59 00000414 EE588E5B 00 12 A7 AB CC F9 FC -wrestwa1 317-0090 00000000 5D96AF59 00000414 8301AE18 00 12 A7 AB CC F9 FC + driver FD1094 SP plain SP enc PC plain PC enc States Used + -------- -------- -------- -------- -------- -------- ----------- + aceattaa 317-0060 00000000 A711AF59 00000400 AF59EADD 00 17 31 45 90 FC + altbeaj3 317-0068 FFFFFF00 B2F7F299 00000400 CCDDEF58 00 0F 18 20 93 A7 D8 + altbeaj1 317-0065 C9C5F299 CCDDECDD + bayroute 317-0116 00504000 5EB40000 00001000 5533A184 00 04 11 18 + bayroutj 317-0115 00504000 56150000 00001000 85948DCF 00 05 12 16 + bullet 317-0041 00000000 57355D96 00001882 8DDC8CF4 (deduced, not 100% sure) + cotton 317-0181a 00204000 5DB20000 00000716 CCDD0716 00 0E 73 + cottonu 317-0180 00204000 5DB20000 00000716 A1840716 00 0E 73 + cottonj 317-0179a 00204000 5DB20000 00000716 CCDD0716 00 0E 73 + ddux 317-0096 00000000 5F94AF59 00000406 AF5987A0 00 21 28 70 D9 + eswat 317-0130 00000000 A711AF59 00000400 5533BC59 00 05 0C EC FA + eswatu 317-0129 00000000 5537AF59 00000400 55334735 00 0A 12 C3 CC + eswatj 317-0128 00000000 A711AF59 00000400 55334735 00 63 CB D5 + exctleag 317-0079? 00000000 5537AF59 00000410 83018384 (deduced, not 100% sure) + fpoint 317-0127A 00000000 AF59AF59 00001A40 8DDC9960 00 15 35 5F 82 DB + fpoint1 317-0127A 00000000 AF59AF59 00001A40 8DDC9960 00 15 35 5F 82 DB + goldnaxu 317-0122 FFFFFF00 E53AF2B9 00000400 A184A196 00 03 51 72 99 F6 + goldnaxj 317-0121 FFFFFF00 C9D6F2B9 00000400 AF59A785 00 12 35 58 7A 9E + goldnax3 317-0120 FFFFFF00 ED62F2B9 00000400 AF59A785 00 0A 0D 44 C7 EF + goldnax1 317-0110 FFFFFF00 ED62F2B9 00000400 AF59A785 00 19 2E 31 48 5D + mvp 317-0143 00000000 5F94A711 00000416 BD59DC5B 00 19 20 88 98 + mvpj 317-0142 00000000 5F94AF59 00000416 BD599C7D 00 19 35 91 DA + passsht 317-0080 00000000 AF59AF59 00003202 C2003923 00 11 52 96 EE + passshta 317-0074 00000000 AF59AF59 000031E4 C2003F8C 00 12 47 83 A7 + passshtj 317-0070 00000000 5D92AF59 000031E4 C2003F8C 00 12 59 83 FE + ryukyu 317-5023 00203800 AF49D30B 0000042E FC5863B5 00 DC EF + shinobi2 317-0049 FFFFFF00 C9C5F25F 00000400 AF598395 00 53 88 9B 9C F1 + sonicbom 317-0053 00000000 5735AF59 00001000 FC587133 00 + suprleag 317-0045? 00000000 A711AF59 BD59CE5B + tetris2 317-0092 00000000 5735AF59 00000410 AF598685 00 10 52 74 97 FC + tetris1 317-0091 00000000 5D92AF59 00000410 AF59AE58 99 25 42 5B 68 FC + wb34 317-0087 FFFFFF7E B2978997 00000500 AF590500 00 11 64 69 82 + wb33 317-0089 FFFFFF7E E5C78997 00000500 AF590500 00 23 40 52 71 + wb32 317-0085 FFFFFF7E B2F78997 00000500 AF590500 00 10 13 26 77 + wrestwa2 317-0102 00000000 5D96AF59 00000414 EE588E5B 00 12 A7 AB CC F9 FC + wrestwa1 317-0090 00000000 5D96AF59 00000414 8301AE18 00 12 A7 AB CC F9 FC -suprleag pc possibilities: - 101E -> follows an RTS - 108E -> follows 3 NOPs - 11C4 - 11C8 - 1212 - 1214 - 1218 - 1282 - 1284 - 1288 - 1342 - 1416 - 141C - 1486 - 148C - 1606 - 1E52 - 1E54 + suprleag pc possibilities: + 101E -> follows an RTS + 108E -> follows 3 NOPs + 11C4 + 11C8 + 1212 + 1214 + 1218 + 1282 + 1284 + 1288 + 1342 + 1416 + 141C + 1486 + 148C + 1606 + 1E52 + 1E54 -bullet pc possibilities: - 0822 - 0824 - 0882 - 0884 - 0C08 - 137C - 1822 - 1824 - 1882 - 1884 - 1C08 + bullet pc possibilities: + 0822 + 0824 + 0882 + 0884 + 0C08 + 137C + 1822 + 1824 + 1882 + 1884 + 1C08 -tetris1: - 410: 4ff9 0000 0000 lea $0.l, a7 - 416: 46fc 2700 move #$2700, sr - 41a: 0c80 005b ffff cmpi.l #$5bffff, d0 + tetris1: + 410: 4ff9 0000 0000 lea $0.l, a7 + 416: 46fc 2700 move #$2700, sr + 41a: 0c80 005b ffff cmpi.l #$5bffff, d0 - 400: 4e71 nop - 402: 4e73 rte + 400: 4e71 nop + 402: 4e73 rte -tetris2: - 410: 4ff9 0000 0000 lea $0.l, a7 - 416: 46fc 2700 move #$2700, sr - 41a: 0c80 0052 ffff cmpi.l #$52ffff, d0 + tetris2: + 410: 4ff9 0000 0000 lea $0.l, a7 + 416: 46fc 2700 move #$2700, sr + 41a: 0c80 0052 ffff cmpi.l #$52ffff, d0 - 400: 4e71 nop - 402: 4e73 rte + 400: 4e71 nop + 402: 4e73 rte -wrestwa1: - 414: 4ff8 0000 lea $0.w, a7 - 418: 46fc 2700 move #$2700, sr - 41c: 0c80 00fc ffff cmpi.l #$fcffff, d0 + wrestwa1: + 414: 4ff8 0000 lea $0.w, a7 + 418: 46fc 2700 move #$2700, sr + 41c: 0c80 00fc ffff cmpi.l #$fcffff, d0 -mvp: - 416: 4ff8 0000 lea $0.w, a7 - 41a: 46fc 2700 move #$2700, sr - 41e: 7000 moveq #0, d0 - 420: 2200 move.l d0, d1 - ... - 42c: 2e00 move.l d0, d7 - 42e: 2040 movea.l d0, a0 - ... - 43a: 2c40 movea.l d0, a6 - 43c: 0c80 0098 ffff cmpi.l #$98ffff, d0 + mvp: + 416: 4ff8 0000 lea $0.w, a7 + 41a: 46fc 2700 move #$2700, sr + 41e: 7000 moveq #0, d0 + 420: 2200 move.l d0, d1 + ... + 42c: 2e00 move.l d0, d7 + 42e: 2040 movea.l d0, a0 + ... + 43a: 2c40 movea.l d0, a6 + 43c: 0c80 0098 ffff cmpi.l #$98ffff, d0 -wb34: - 500: 46fc 2700 move #$2700, sr - 504: 0c80 0064 ffff cmpi.l #$64ffff, d0 + wb34: + 500: 46fc 2700 move #$2700, sr + 504: 0c80 0064 ffff cmpi.l #$64ffff, d0 -goldnaxu: - 400: 6000 000c bra $40e - 40e: 4ff8 ff00 lea $ff00.w, a7 - 412: 46fc 2700 move #$2700, sr - 416: 0c80 0072 ffff cmpi.l #$72ffff, d0 + goldnaxu: + 400: 6000 000c bra $40e + 40e: 4ff8 ff00 lea $ff00.w, a7 + 412: 46fc 2700 move #$2700, sr + 416: 0c80 0072 ffff cmpi.l #$72ffff, d0 -ryukyu: - 42e: 4e71 nop - ... - 440: 0c80 00dc ffff cmpi.l #$dcffff, d0 + ryukyu: + 42e: 4e71 nop + ... + 440: 0c80 00dc ffff cmpi.l #$dcffff, d0 -eswat: - 400: 4ff8 0000 lea $0.w, a7 - 404: 46fc 2700 move #$2700, sr - 408: 0c80 000c ffff cmpi.l #$cffff, d0 + eswat: + 400: 4ff8 0000 lea $0.w, a7 + 404: 46fc 2700 move #$2700, sr + 408: 0c80 000c ffff cmpi.l #$cffff, d0 *****************************************************************************/ @@ -423,6 +430,13 @@ eswat: #include "fd1094.h" +//************************************************************************** +// CONSTANTS +//************************************************************************** + +// device type definition +const device_type FD1094 = &device_creator; + /* 317-0162 CPU also needs to mask: 0x107a, @@ -435,7 +449,7 @@ eswat: 0x1e7a, this only happens with 317-0162 so far; I assume it is a fault in the CPU. */ -static const UINT16 masked_opcodes[] = +const UINT16 fd1094_device::s_masked_opcodes[] = { 0x013a,0x033a,0x053a,0x073a,0x083a,0x093a,0x0b3a,0x0d3a,0x0f3a, @@ -514,66 +528,313 @@ static const UINT16 masked_opcodes[] = 0xde3a,0xde7a,0xdeba,0xdefa, 0xdffa }; -static UINT8 masked_opcodes_lookup[2][65536/8/2]; -static UINT8 masked_opcodes_created = FALSE; -static int final_decrypt(int i,int moreffff) + +//************************************************************************** +// DECRYPTION CACHE HELPER +//************************************************************************** + +//------------------------------------------------- +// fd1094_decryption_cache - constructor +//------------------------------------------------- + +fd1094_decryption_cache::fd1094_decryption_cache(fd1094_device &fd1094) + : m_fd1094(fd1094), + m_baseaddress(0), + m_size(0), + m_rgnoffset(0) { - int j; - - /* final "obfuscation": invert bits 7 and 14 following a fixed pattern */ - int dec = i; - if ((i & 0xf080) == 0x8000) dec ^= 0x0080; - if ((i & 0xf080) == 0xc080) dec ^= 0x0080; - if ((i & 0xb080) == 0x8000) dec ^= 0x4000; - if ((i & 0xb100) == 0x0000) dec ^= 0x4000; - - /* mask out opcodes doing PC-relative addressing, replace them with FFFF */ - if (!masked_opcodes_created) - { - masked_opcodes_created = TRUE; - for (j = 0; j < ARRAY_LENGTH(masked_opcodes); j++) - { - UINT16 opcode = masked_opcodes[j]; - masked_opcodes_lookup[0][opcode >> 4] |= 1 << ((opcode >> 1) & 7); - masked_opcodes_lookup[1][opcode >> 4] |= 1 << ((opcode >> 1) & 7); - } - for (j = 0; j < 65536; j += 2) - { - if ((j & 0xff80) == 0x4e80 || (j & 0xf0f8) == 0x50c8 || (j & 0xf000) == 0x6000) - masked_opcodes_lookup[1][j >> 4] |= 1 << ((j >> 1) & 7); - } - } - - if ((masked_opcodes_lookup[moreffff][dec >> 4] >> ((dec >> 1) & 7)) & 1) - dec = -1; - - return dec; + reset(); } -/* note: address is the word offset (physical address / 2) */ -static int decode(int address,int val,UINT8 *main_key,int gkey1,int gkey2,int gkey3,int vector_fetch) +//------------------------------------------------- +// reset - reset the cache +//------------------------------------------------- + +void fd1094_decryption_cache::reset() { - int mainkey,key_F,key_6a,key_7a,key_6b; - int key_0a,key_0b,key_0c; - int key_1a,key_1b,key_2a,key_2b,key_3a,key_3b,key_4a,key_4b,key_5a,key_5b; - int global_xor0,global_xor1; - int global_swap0a,global_swap1,global_swap2,global_swap3,global_swap4; - int global_swap0b; + // reset all allocated cache buffers + for (int cache = 0; cache < 256; cache++) + m_decrypted_opcodes[cache].reset(); +} - /* for address xx0000-xx0006 (but only if >= 000008), use key xx2000-xx2006 */ +//------------------------------------------------- +// configure - configure the address and size +// of the region we are caching +//------------------------------------------------- + +void fd1094_decryption_cache::configure(offs_t baseaddress, UINT32 size, offs_t rgnoffset) +{ + // if something important changes, throw away what we have + if (m_baseaddress != baseaddress || m_size != size || m_rgnoffset != rgnoffset) + { + m_baseaddress = baseaddress; + m_size = size; + m_rgnoffset = rgnoffset; + reset(); + } +} + + +//------------------------------------------------- +// decrypted_opcodes - return a pointer to the +// decrypted opcodes for the given state +//------------------------------------------------- + +UINT16 *fd1094_decryption_cache::decrypted_opcodes(UINT8 state) +{ + // if we have already decrypted this state, use it + if (m_decrypted_opcodes[state].count() > 0) + return m_decrypted_opcodes[state]; + + // otherwise, allocate and decrypt + m_decrypted_opcodes[state].resize(m_size); + m_fd1094.decrypt(m_baseaddress, m_size, m_rgnoffset, m_decrypted_opcodes[state], state); + return m_decrypted_opcodes[state]; +} + + + +//************************************************************************** +// CORE IMPLEMENTATION +//************************************************************************** + +//------------------------------------------------- +// fd1094_device - constructor +//------------------------------------------------- + +fd1094_device::fd1094_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : m68000_device(mconfig, M68000, tag, owner, clock), + m_state(0x00), + m_irqmode(false), + m_cache(*this), + m_srcbase(NULL), + m_srcbytes(0), + m_key(NULL) +{ + // override the name after the m68000 initializes + m_name.cpy("FD1094"); + + // create the initial masked opcode table + memset(m_masked_opcodes_lookup, 0, sizeof(m_masked_opcodes_lookup)); + for (int index = 0; index < ARRAY_LENGTH(s_masked_opcodes); index++) + { + UINT16 opcode = s_masked_opcodes[index]; + m_masked_opcodes_lookup[0][opcode >> 4] |= 1 << ((opcode >> 1) & 7); + m_masked_opcodes_lookup[1][opcode >> 4] |= 1 << ((opcode >> 1) & 7); + } + + // add some more opcodes for the more aggressive table + for (int opcode = 0; opcode < 65536; opcode += 2) + if ((opcode & 0xff80) == 0x4e80 || (opcode & 0xf0f8) == 0x50c8 || (opcode & 0xf000) == 0x6000) + m_masked_opcodes_lookup[1][opcode >> 4] |= 1 << ((opcode >> 1) & 7); +} + + +//------------------------------------------------- +// change_state - set the current state of the +// chip +//------------------------------------------------- + +void fd1094_device::change_state(int newstate) +{ + // adjust state and IRQ mode + switch (newstate & 0x300) + { + case 0x0000: // 0x00xx: select state xx + m_state = newstate & 0xff; + break; + + case STATE_RESET: // 0x01xx: select state xx and exit irq mode + m_state = newstate & 0xff; + m_irqmode = false; + break; + + case STATE_IRQ: // 0x02xx: enter irq mode + m_irqmode = true; + break; + + case STATE_RTE: // 0x03xx: exit irq mode + m_irqmode = false; + break; + } + + // notify of the state change + m_state_change(state()); + + // force a flush of the prefetch cache on any state change + set_state(M68K_PREF_ADDR, 0x0010); +} + + + +//************************************************************************** +// DEVICE OVERRIDES +//************************************************************************** + +//------------------------------------------------- +// device_start - one-time device initialization +//------------------------------------------------- + +void fd1094_device::device_start() +{ + // start the base device + m68000_device::device_start(); + + // find the key + m_key = memregion("key")->base(); + if (m_key == NULL) + throw emu_fatalerror("FD1094 key region not found!"); + + // get a pointer to the ROM region + if (region() != NULL) + { + m_srcbase = reinterpret_cast(region()->base()); + m_srcbytes = region()->bytes(); + } + + // if no ROM region, see if there's a memory share with our name + else + { + memory_share *share = owner()->memshare(tag()); + if (share != NULL) + { + m_srcbase = reinterpret_cast(share->ptr()); + m_srcbytes = share->bytes(); + } + } + + // if we got nothing, error + if (m_srcbase == NULL) + throw emu_fatalerror("FD1094 found no data to decrypt!"); + + // if address 0 is mapped to ROM, assume this is a state memory mapping and + // use the internal state change callback + if (space(AS_PROGRAM)->get_read_ptr(0) != NULL) + m_state_change = state_change_delegate(FUNC(fd1094_device::default_state_change), this); + + // determine length and configure our cache + m_cache.configure(0x000000, m_srcbytes, 0x000000); + + // register for the state changing callbacks we need in the m68000 + m68k_set_cmpild_callback(this, &fd1094_device::cmp_callback); + m68k_set_rte_callback(this, &fd1094_device::rte_callback); + device_set_irq_callback(this, &fd1094_device::irq_callback); + + // save state + save_item(NAME(m_state)); + save_item(NAME(m_irqmode)); +} + + +//------------------------------------------------- +// device_reset - one-time device initialization +//------------------------------------------------- + +void fd1094_device::device_reset() +{ + // flush the cache and switch to the reset state + m_cache.reset(); + change_state(STATE_RESET); + + // reset the parent + m68000_device::device_reset(); +} + + +//------------------------------------------------- +// device_postload - post restore initialization +//------------------------------------------------- + +void fd1094_device::device_postload() +{ + // refresh the state + m_state_change(state()); +} + + + +//************************************************************************** +// INTERNAL HELPERS +//************************************************************************** + +//------------------------------------------------- +// decrypt_one - decrypt a single opcode given +// the address, data, and keys; note that the +// address provided is the word address +// (physical address / 2) +//------------------------------------------------- + +UINT16 fd1094_device::decrypt_one(offs_t address, UINT16 val, const UINT8 *main_key, UINT8 state, bool vector_fetch) +{ + // extract and adjust the global key + UINT8 gkey1 = main_key[1]; + UINT8 gkey2 = main_key[2]; + UINT8 gkey3 = main_key[3]; + if (state & 0x0001) + { + gkey1 ^= 0x04; // global_xor1 + gkey2 ^= 0x80; // key_1a invert + gkey3 ^= 0x80; // key_2a invert + } + if (state & 0x0002) + { + gkey1 ^= 0x01; // global_swap2 + gkey2 ^= 0x10; // key_7a invert + gkey3 ^= 0x01; // key_4b invert + } + if (state & 0x0004) + { + gkey1 ^= 0x80; // key_0b invert + gkey2 ^= 0x40; // key_6b invert + gkey3 ^= 0x04; // global_swap4 + } + if (state & 0x0008) + { + gkey1 ^= 0x20; // global_xor0 + gkey2 ^= 0x02; // key_6a invert + gkey3 ^= 0x20; // key_5a invert + } + if (state & 0x0010) + { + gkey1 ^= 0x02; // key_0c invert + gkey1 ^= 0x40; // key_5b invert + gkey2 ^= 0x08; // key_4a invert + } + if (state & 0x0020) + { + gkey1 ^= 0x08; // key_1b invert + gkey3 ^= 0x08; // key_3b invert + gkey3 ^= 0x10; // global_swap1 + } + if (state & 0x0040) + { + gkey1 ^= 0x10; // key_2b invert + gkey2 ^= 0x20; // global_swap0a + gkey2 ^= 0x04; // global_swap0b + } + if (state & 0x0080) + { + gkey2 ^= 0x01; // key_3a invert + gkey3 ^= 0x02; // key_0a invert + gkey3 ^= 0x40; // global_swap3 + } + + // for address xx0000-xx0006 (but only if >= 000008), use key xx2000-xx2006 + UINT8 mainkey; if ((address & 0x0ffc) == 0 && address >= 4) mainkey = main_key[(address & 0x1fff) | 0x1000]; else mainkey = main_key[address & 0x1fff]; - + + UINT8 key_F; if (address & 0x1000) key_F = BIT(mainkey,7); else key_F = BIT(mainkey,6); - /* the CPU has been verified to produce different results when fetching opcodes - from 0000-0006 than when fetching the inital SP and PC on reset. */ + // the CPU has been verified to produce different results when fetching opcodes + // from 0000-0006 than when fetching the inital SP and PC on reset. if (vector_fetch) { if (address <= 3) gkey3 = 0x00; // supposed to always be the case @@ -582,40 +843,40 @@ static int decode(int address,int val,UINT8 *main_key,int gkey1,int gkey2,int gk if (address <= 1) key_F = 0; } - global_xor0 = 1^BIT(gkey1,5); - global_xor1 = 1^BIT(gkey1,2); - global_swap2 = 1^BIT(gkey1,0); + UINT8 global_xor0 = 1^BIT(gkey1,5); + UINT8 global_xor1 = 1^BIT(gkey1,2); + UINT8 global_swap2 = 1^BIT(gkey1,0); - global_swap0a = 1^BIT(gkey2,5); - global_swap0b = 1^BIT(gkey2,2); + UINT8 global_swap0a = 1^BIT(gkey2,5); + UINT8 global_swap0b = 1^BIT(gkey2,2); - global_swap3 = 1^BIT(gkey3,6); - global_swap1 = 1^BIT(gkey3,4); - global_swap4 = 1^BIT(gkey3,2); + UINT8 global_swap3 = 1^BIT(gkey3,6); + UINT8 global_swap1 = 1^BIT(gkey3,4); + UINT8 global_swap4 = 1^BIT(gkey3,2); - key_0a = BIT(mainkey,0) ^ BIT(gkey3,1); - key_0b = BIT(mainkey,0) ^ BIT(gkey1,7); - key_0c = BIT(mainkey,0) ^ BIT(gkey1,1); + UINT8 key_0a = BIT(mainkey,0) ^ BIT(gkey3,1); + UINT8 key_0b = BIT(mainkey,0) ^ BIT(gkey1,7); + UINT8 key_0c = BIT(mainkey,0) ^ BIT(gkey1,1); - key_1a = BIT(mainkey,1) ^ BIT(gkey2,7); - key_1b = BIT(mainkey,1) ^ BIT(gkey1,3); + UINT8 key_1a = BIT(mainkey,1) ^ BIT(gkey2,7); + UINT8 key_1b = BIT(mainkey,1) ^ BIT(gkey1,3); - key_2a = BIT(mainkey,2) ^ BIT(gkey3,7); - key_2b = BIT(mainkey,2) ^ BIT(gkey1,4); + UINT8 key_2a = BIT(mainkey,2) ^ BIT(gkey3,7); + UINT8 key_2b = BIT(mainkey,2) ^ BIT(gkey1,4); - key_3a = BIT(mainkey,3) ^ BIT(gkey2,0); - key_3b = BIT(mainkey,3) ^ BIT(gkey3,3); + UINT8 key_3a = BIT(mainkey,3) ^ BIT(gkey2,0); + UINT8 key_3b = BIT(mainkey,3) ^ BIT(gkey3,3); - key_4a = BIT(mainkey,4) ^ BIT(gkey2,3); - key_4b = BIT(mainkey,4) ^ BIT(gkey3,0); + UINT8 key_4a = BIT(mainkey,4) ^ BIT(gkey2,3); + UINT8 key_4b = BIT(mainkey,4) ^ BIT(gkey3,0); - key_5a = BIT(mainkey,5) ^ BIT(gkey3,5); - key_5b = BIT(mainkey,5) ^ BIT(gkey1,6); + UINT8 key_5a = BIT(mainkey,5) ^ BIT(gkey3,5); + UINT8 key_5b = BIT(mainkey,5) ^ BIT(gkey1,6); - key_6a = BIT(mainkey,6) ^ BIT(gkey2,1); - key_6b = BIT(mainkey,6) ^ BIT(gkey2,6); + UINT8 key_6a = BIT(mainkey,6) ^ BIT(gkey2,1); + UINT8 key_6b = BIT(mainkey,6) ^ BIT(gkey2,6); - key_7a = BIT(mainkey,7) ^ BIT(gkey2,4); + UINT8 key_7a = BIT(mainkey,7) ^ BIT(gkey2,4); if ((val & 0xe000) == 0x0000) @@ -667,109 +928,84 @@ static int decode(int address,int val,UINT8 *main_key,int gkey1,int gkey2,int gk if (!global_swap0a) val = BITSWAP16(val, 15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 0, 3, 2, 1); // 3...0 } - return final_decrypt(val,key_F); + // final "obfuscation": invert bits 7 and 14 following a fixed pattern + UINT16 dec = val; + if ((val & 0xf080) == 0x8000) dec ^= 0x0080; + if ((val & 0xf080) == 0xc080) dec ^= 0x0080; + if ((val & 0xb080) == 0x8000) dec ^= 0x4000; + if ((val & 0xb100) == 0x0000) dec ^= 0x4000; + + // mask out opcodes doing PC-relative addressing, replace them with FFFF + if ((m_masked_opcodes_lookup[key_F][dec >> 4] >> ((dec >> 1) & 7)) & 1) + dec = 0xffff; + + return dec; } -static int global_key1,global_key2,global_key3; +//------------------------------------------------- +// decrypt - decrypt a buffers' worth of opcodes +//------------------------------------------------- -int fd1094_decode(int address,int val,UINT8 *key,int vector_fetch) +void fd1094_device::decrypt(offs_t baseaddr, UINT32 size, const UINT16 *srcptr, UINT16 *opcodesptr, UINT8 state) { - if (!key) return 0; - - return decode(address,val,key,global_key1,global_key2,global_key3,vector_fetch); + for (offs_t offset = 0; offset < size; offset += 2) + opcodesptr[offset / 2] = decrypt_one((baseaddr + offset) / 2, srcptr[offset / 2], m_key, state, (baseaddr + offset) < 8); } -int fd1094_set_state(UINT8 *key,int state) + +//------------------------------------------------- +// default_state_change - handle state changes +// for standard cases +//------------------------------------------------- + +void fd1094_device::default_state_change(UINT8 state) { - static int selected_state,irq_mode; - - if (!key) return 0; - - if (state == -1) - state = selected_state; - - switch (state & 0x300) - { - case 0x0000: // 0x00xx: select state xx - selected_state = state & 0xff; - break; - - case FD1094_STATE_RESET: // 0x01xx: select state xx and exit irq mode - selected_state = state & 0xff; - irq_mode = 0; - break; - - case FD1094_STATE_IRQ: // 0x02xx: enter irq mode - irq_mode = 1; - break; - - case FD1094_STATE_RTE: // 0x03xx: exit irq mode - irq_mode = 0; - break; - } - - if (irq_mode) - state = key[0]; - else - state = selected_state; - - global_key1 = key[1]; - global_key2 = key[2]; - global_key3 = key[3]; - - if (state & 0x0001) - { - global_key1 ^= 0x04; // global_xor1 - global_key2 ^= 0x80; // key_1a invert - global_key3 ^= 0x80; // key_2a invert - } - if (state & 0x0002) - { - global_key1 ^= 0x01; // global_swap2 - global_key2 ^= 0x10; // key_7a invert - global_key3 ^= 0x01; // key_4b invert - } - if (state & 0x0004) - { - global_key1 ^= 0x80; // key_0b invert - global_key2 ^= 0x40; // key_6b invert - global_key3 ^= 0x04; // global_swap4 - } - if (state & 0x0008) - { - global_key1 ^= 0x20; // global_xor0 - global_key2 ^= 0x02; // key_6a invert - global_key3 ^= 0x20; // key_5a invert - } - if (state & 0x0010) - { - global_key1 ^= 0x02; // key_0c invert - global_key1 ^= 0x40; // key_5b invert - global_key2 ^= 0x08; // key_4a invert - } - if (state & 0x0020) - { - global_key1 ^= 0x08; // key_1b invert - global_key3 ^= 0x08; // key_3b invert - global_key3 ^= 0x10; // global_swap1 - } - if (state & 0x0040) - { - global_key1 ^= 0x10; // key_2b invert - global_key2 ^= 0x20; // global_swap0a - global_key2 ^= 0x04; // global_swap0b - } - if (state & 0x0080) - { - global_key2 ^= 0x01; // key_3a invert - global_key3 ^= 0x02; // key_0a invert - global_key3 ^= 0x40; // global_swap3 - } - return (state & 0xff) | (irq_mode ? FD1094_STATE_IRQ : FD1094_STATE_RESET); + space(AS_PROGRAM)->set_decrypted_region(0x000000, m_srcbytes - 1, m_cache.decrypted_opcodes(state)); } + +//************************************************************************** +// STATIC CALLBACKS +//************************************************************************** + +//------------------------------------------------- +// cmp_callback - callback for CMP.L instructions +// (state change) +//------------------------------------------------- + +void fd1094_device::cmp_callback(device_t *device, UINT32 val, UINT8 reg) +{ + if (reg == 0 && (val & 0x0000ffff) == 0x0000ffff) + downcast(device)->change_state(val >> 16); +} + + +//------------------------------------------------- +// irq_callback - callback when the FD1094 enters +// interrupt code +//------------------------------------------------- + +IRQ_CALLBACK( fd1094_device::irq_callback ) +{ + downcast(device)->change_state(STATE_IRQ); + return (0x60 + irqline * 4) / 4; // vector address +} + + +//------------------------------------------------- +// rte_callback - callback when an RTE instruction +// is encountered +//------------------------------------------------- + +void fd1094_device::rte_callback(device_t *device) +{ + downcast(device)->change_state(STATE_RTE); +} + + + #ifdef MAME_DEBUG /* diff --git a/src/mame/machine/fd1094.h b/src/mame/machine/fd1094.h index 3eb4fe06937..6568d5f00c8 100644 --- a/src/mame/machine/fd1094.h +++ b/src/mame/machine/fd1094.h @@ -1,15 +1,126 @@ -#define FD1094_STATE_RESET 0x0100 -#define FD1094_STATE_IRQ 0x0200 -#define FD1094_STATE_RTE 0x0300 +/*************************************************************************** -int fd1094_set_state(UINT8 *key,int state); -int fd1094_decode(int address,int val,UINT8 *key,int vector_fetch); + Hitachi FD1094 encryption emulation -typedef struct _fd1094_constraint fd1094_constraint; -struct _fd1094_constraint +**************************************************************************** + + Copyright Nicola Salmoria, Andreas Naive, and Charles MacDonald. + + All rights reserved. + +***************************************************************************/ + +#ifndef __FD1094_H__ +#define __FD1094_H__ + +#include "cpu/m68000/m68000.h" + + +//************************************************************************** +// CONSTANTS +//************************************************************************** + +// device type definition +extern const device_type FD1094; + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class fd1094_device; + + +// ======================> fd1094_decryption_cache + +class fd1094_decryption_cache +{ +public: + // construction/destruction + fd1094_decryption_cache(fd1094_device &fd1094); + + // getters + fd1094_device &fd1094() const { return m_fd1094; } + UINT16 *decrypted_opcodes(UINT8 state); + + // operations + void reset(); + void configure(offs_t baseaddress, UINT32 size, offs_t rgnoffset); + +protected: + // internal state + fd1094_device & m_fd1094; + UINT32 m_baseaddress; + UINT32 m_size; + UINT32 m_rgnoffset; + dynamic_array m_decrypted_opcodes[256]; +}; + + +// ======================> fd1094_device + +// base device, shared implementation between A and B variants +class fd1094_device : public m68000_device +{ +public: + typedef delegate state_change_delegate; + + // construction/destruction + fd1094_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // explicit decryption helpers + void decrypt(offs_t baseaddr, UINT32 size, offs_t regionoffs, UINT16 *opcodesptr, UINT8 state) { decrypt(baseaddr, size, m_srcbase + regionoffs/2, opcodesptr, state); } + + // live state management + UINT8 state() const { return m_irqmode ? m_key[0] : m_state; } + void change_state(int newstate = -1); + void notify_state_change(state_change_delegate callback) { m_state_change = callback; } + + // constants + enum + { + STATE_RESET = 0x100, + STATE_IRQ = 0x200, + STATE_RTE = 0x300 + }; + +protected: + // device overrides + virtual void device_start(); + virtual void device_reset(); + virtual void device_postload(); + + // internal helpers + UINT16 decrypt_one(offs_t address, UINT16 val, const UINT8 *main_key, UINT8 state, bool vector_fetch); + void decrypt(offs_t baseaddr, UINT32 size, const UINT16 *srcptr, UINT16 *opcodesptr, UINT8 state); + void default_state_change(UINT8 state); + + // static helpers + static void cmp_callback(device_t *device, UINT32 val, UINT8 reg); + static IRQ_CALLBACK( irq_callback ); + static void rte_callback(device_t *device); + + // internal state + UINT8 m_state; + bool m_irqmode; + state_change_delegate m_state_change; + fd1094_decryption_cache m_cache; + UINT16 * m_srcbase; + UINT32 m_srcbytes; + const UINT8 * m_key; + UINT8 m_masked_opcodes_lookup[2][65536/8/2]; + + // static tables + static const UINT16 s_masked_opcodes[]; +}; + +struct fd1094_constraint { offs_t pc; UINT16 state; UINT16 value; UINT16 mask; }; + +#endif diff --git a/src/mame/machine/fddebug.c b/src/mame/machine/fddebug.c index 3d32798566f..f63fbe39530 100644 --- a/src/mame/machine/fddebug.c +++ b/src/mame/machine/fddebug.c @@ -1,11 +1,48 @@ +#include "emu.h" +#include "machine/fddebug.h" + +void fd1094_init_debugging(running_machine &machine, const char *cpureg, const char *keyreg, const char *statreg, void (*changed)(running_machine &)) +{ +} + +#if 0 + /*************************************************************************** fddebug.c FD1094 decryption helper routines. - Copyright Nicola Salmoria and the MAME Team. - Visit http://mamedev.org for licensing and usage restrictions. +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. **************************************************************************** @@ -2414,3 +2451,5 @@ static int validate_opcode(address_space *space, UINT32 pc, const UINT8 *opdata, assert(offset == oplength); return iffy ? -oplength : oplength; } + +#endif diff --git a/src/mame/machine/s16fd.c b/src/mame/machine/s16fd.c deleted file mode 100644 index 405dae94b5e..00000000000 --- a/src/mame/machine/s16fd.c +++ /dev/null @@ -1,234 +0,0 @@ -/* System 16 and friends FD1094 handling */ - -/* -todo: - -support multiple FD1094s (does anything /use/ multiple FD1094s?) -make more configurable (select caches per game?) - -*/ - -#include "emu.h" -#include "cpu/m68000/m68000.h" -#include "machine/fd1094.h" -#include "machine/fddebug.h" -#include "includes/segas16.h" - -#define KEY_DEBUGGING 0 -#define CACHE_ENTRIES 8 - -static UINT8 *fd1094_key; // the memory region containing key -static UINT16 *fd1094_cpuregion; // the CPU region with encrypted code -static UINT32 fd1094_cpuregionsize; // the size of this region in bytes - -static UINT16 *fd1094_userregion; // a user region where the current decrypted state is put and executed from -static UINT16 *fd1094_cacheregion[CACHE_ENTRIES]; // a cache region where CACHE_ENTRIES states are stored to improve performance -static int fd1094_cached_states[CACHE_ENTRIES]; // array of cached state numbers -static int fd1094_current_cacheposition; // current position in cache array - -static int fd1094_state; -static int fd1094_selected_state; - -static char fd1094_cputag[64]; - -static void (*fd1094_set_decrypted)(running_machine &, UINT8 *); - -void *fd1094_get_decrypted_base(void) -{ - if (!fd1094_key) - return NULL; - return fd1094_userregion; -} - -static void set_decrypted_region(running_machine &machine) -{ - if (fd1094_set_decrypted != NULL) - (*fd1094_set_decrypted)(machine, (UINT8 *)fd1094_userregion); - else - machine.device(fd1094_cputag)->space(AS_PROGRAM)->set_decrypted_region(0, fd1094_cpuregionsize - 1, fd1094_userregion); -} - -/* this function checks the cache to see if the current state is cached, - if it is then it copies the cached data to the user region where code is - executed from, if its not cached then it gets decrypted to the current - cache position using the functions in fd1094.c */ -static void fd1094_setstate_and_decrypt(running_machine &machine, int state) -{ - int i; - UINT32 addr; - - switch (state & 0x300) - { - case 0x000: - case FD1094_STATE_RESET: - fd1094_selected_state = state & 0xff; - break; - } - - fd1094_state = state; - - cpu_set_reg(machine.device(fd1094_cputag), M68K_PREF_ADDR, 0x0010); // force a flush of the prefetch cache - - /* set the FD1094 state ready to decrypt.. */ - state = fd1094_set_state(fd1094_key, state) & 0xff; - - /* first check the cache, if its cached we don't need to decrypt it, just copy */ - for (i = 0; i < CACHE_ENTRIES; i++) - { - if (fd1094_cached_states[i] == state) - { - /* copy cached state */ - fd1094_userregion = fd1094_cacheregion[i]; - set_decrypted_region(machine); - m68k_set_encrypted_opcode_range(machine.device(fd1094_cputag), 0, fd1094_cpuregionsize); - - return; - } - } - - /* mark it as cached (because it will be once we decrypt it) */ - fd1094_cached_states[fd1094_current_cacheposition] = state; - - for (addr = 0; addr < fd1094_cpuregionsize / 2; addr++) - { - UINT16 dat; - dat = fd1094_decode(addr,fd1094_cpuregion[addr],fd1094_key,0); - fd1094_cacheregion[fd1094_current_cacheposition][addr]=dat; - } - - /* copy newly decrypted data to user region */ - fd1094_userregion = fd1094_cacheregion[fd1094_current_cacheposition]; - set_decrypted_region(machine); - m68k_set_encrypted_opcode_range(machine.device(fd1094_cputag), 0, fd1094_cpuregionsize); - - fd1094_current_cacheposition++; - - if (fd1094_current_cacheposition >= CACHE_ENTRIES) - { - mame_printf_debug("out of cache, performance may suffer, incrase CACHE_ENTRIES!\n"); - fd1094_current_cacheposition = 0; - } -} - -/* Callback for CMP.L instructions (state change) */ -static void fd1094_cmp_callback(device_t *device, UINT32 val, UINT8 reg) -{ - if (reg == 0 && (val & 0x0000ffff) == 0x0000ffff) // ? - { - fd1094_setstate_and_decrypt(device->machine(), (val & 0xffff0000) >> 16); - } -} - -/* Callback when the FD1094 enters interrupt code */ -static IRQ_CALLBACK(fd1094_int_callback) -{ - fd1094_setstate_and_decrypt(device->machine(), FD1094_STATE_IRQ); - return (0x60+irqline*4)/4; // vector address -} - -static void fd1094_rte_callback (device_t *device) -{ - fd1094_setstate_and_decrypt(device->machine(), FD1094_STATE_RTE); -} - - -/* KLUDGE, set the initial PC / SP based on table as we can't decrypt them yet */ -static void fd1094_kludge_reset_values(void) -{ - int i; - - for (i = 0;i < 4;i++) - fd1094_userregion[i] = fd1094_decode(i,fd1094_cpuregion[i],fd1094_key,1); -} - - -/* function, to be called from MACHINE_RESET (every reset) */ -void fd1094_machine_init(device_t *device) -{ - /* punt if no key; this allows us to be called even for non-FD1094 games */ - if (!fd1094_key) - return; - - fd1094_setstate_and_decrypt(device->machine(), FD1094_STATE_RESET); - fd1094_kludge_reset_values(); - - m68k_set_cmpild_callback(device, fd1094_cmp_callback); - m68k_set_rte_callback(device, fd1094_rte_callback); - device_set_irq_callback(device, fd1094_int_callback); - - device->reset(); -} - -static void fd1094_postload(running_machine &machine) -{ - if (fd1094_state != -1) - { - int selected_state = fd1094_selected_state; - int state = fd1094_state; - - fd1094_machine_init(machine.device(fd1094_cputag)); - - fd1094_setstate_and_decrypt(machine, selected_state); - fd1094_setstate_and_decrypt(machine, state); - } -} - -#if KEY_DEBUGGING -static void key_changed(running_machine &machine) -{ - int addr; - - /* re-decode the against the current parameter into cache entry 0 */ - for (addr = 0; addr < fd1094_cpuregionsize / 2; addr++) - { - UINT16 dat; - dat = fd1094_decode(addr, fd1094_cpuregion[addr], fd1094_key, 0); - fd1094_cacheregion[0][addr]=dat; - } - - /* set cache entry 0 to be the active one, and reset the cache position to 1 */ - fd1094_userregion = fd1094_cacheregion[0]; - set_decrypted_region(machine); - fd1094_current_cacheposition = 1; - - /* flush the prefetch queue */ - cpu_set_reg(machine.device(fd1094_cputag), M68K_PREF_ADDR, 0x0010); -} -#endif - -/* startup function, to be called from DRIVER_INIT (once on startup) */ -void fd1094_driver_init(running_machine &machine, const char* tag, void (*set_decrypted)(running_machine &, UINT8 *)) -{ - int i; - - strcpy(fd1094_cputag, tag); - - fd1094_cpuregion = (UINT16*)machine.root_device().memregion(fd1094_cputag)->base(); - fd1094_cpuregionsize = machine.root_device().memregion(fd1094_cputag)->bytes(); - fd1094_key = machine.root_device().memregion("user1")->base(); - fd1094_set_decrypted = set_decrypted; - - /* punt if no key; this allows us to be called even for non-FD1094 games */ - if (fd1094_key == NULL) - return; - - for (i = 0; i < CACHE_ENTRIES; i++) - { - fd1094_cacheregion[i] = auto_alloc_array(machine, UINT16, fd1094_cpuregionsize / 2); - fd1094_cached_states[i] = -1; - } - fd1094_current_cacheposition = 0; - fd1094_state = -1; - - /* key debugging */ -#if KEY_DEBUGGING - if ((machine.debug_flags & DEBUG_FLAG_ENABLED) != 0 && machine.root_device().memregion("user2")->base() != NULL) - { - fd1094_init_debugging(machine, fd1094_cputag, "user1", "user2", key_changed); - } -#endif - - state_save_register_global(machine, fd1094_selected_state); - state_save_register_global(machine, fd1094_state); - machine.save().register_postload(save_prepost_delegate(FUNC(fd1094_postload), &machine)); -} diff --git a/src/mame/machine/s24fd.c b/src/mame/machine/s24fd.c deleted file mode 100644 index 5fad6367414..00000000000 --- a/src/mame/machine/s24fd.c +++ /dev/null @@ -1,183 +0,0 @@ -/* s16fd.c modified to support s24 - -this could get messy if games change their own code after initial loading as we'll have to invalidate caches etc. - - -*/ - -#include "emu.h" -#include "cpu/m68000/m68000.h" -#include "machine/fd1094.h" -#include "includes/segas24.h" - -#define S16_NUMCACHE 8 - -static UINT8 *s24_fd1094_key; // the memory region containing key -static UINT16 *s24_fd1094_cpuregion; // the CPU region with encrypted code -static UINT32 s24_fd1094_cpuregionsize; // the size of this region in bytes - -static UINT16* s24_fd1094_userregion; // a user region where the current decrypted state is put and executed from -static UINT16* s24_fd1094_cacheregion[S16_NUMCACHE]; // a cache region where S16_NUMCACHE states are stored to improve performance -static int fd1094_cached_states[S16_NUMCACHE]; // array of cached state numbers -static int fd1094_current_cacheposition; // current position in cache array - -static int fd1094_state; -static int fd1094_selected_state; - -/* this function checks the cache to see if the current state is cached, - if it is then it copies the cached data to the user region where code is - executed from, if its not cached then it gets decrypted to the current - cache position using the functions in s24_fd1094.c */ -static void s24_fd1094_setstate_and_decrypt(running_machine &machine, int state) -{ - int i; - UINT32 addr; - - switch (state & 0x300) - { - case 0x000: - case FD1094_STATE_RESET: - fd1094_selected_state = state & 0xff; - break; - } - - fd1094_state = state; - - cpu_set_reg(machine.device("sub"), M68K_PREF_ADDR, 0x0010); // force a flush of the prefetch cache - - /* set the s24_fd1094 state ready to decrypt.. */ - state = fd1094_set_state(s24_fd1094_key,state) & 0xff; - - /* first check the cache, if its cached we don't need to decrypt it, just copy */ - for (i = 0; i < S16_NUMCACHE; i++) - { - if (fd1094_cached_states[i] == state) - { - /* copy cached state */ - s24_fd1094_userregion = s24_fd1094_cacheregion[i]; - machine.device("sub")->space(AS_PROGRAM)->set_decrypted_region(0, s24_fd1094_cpuregionsize - 1, s24_fd1094_userregion); - m68k_set_encrypted_opcode_range(machine.device("sub"), 0, s24_fd1094_cpuregionsize); - - return; - } - } - -// mame_printf_debug("new state %04x\n",state); - - /* mark it as cached (because it will be once we decrypt it) */ - fd1094_cached_states[fd1094_current_cacheposition] = state; - - for (addr = 0; addr < s24_fd1094_cpuregionsize / 2; addr++) - { - UINT16 dat; - dat = fd1094_decode(addr, s24_fd1094_cpuregion[addr], s24_fd1094_key, 0); - s24_fd1094_cacheregion[fd1094_current_cacheposition][addr] = dat; - } - - /* copy newly decrypted data to user region */ - s24_fd1094_userregion = s24_fd1094_cacheregion[fd1094_current_cacheposition]; - machine.device("sub")->space(AS_PROGRAM)->set_decrypted_region(0, s24_fd1094_cpuregionsize - 1, s24_fd1094_userregion); - m68k_set_encrypted_opcode_range(machine.device("sub"), 0, s24_fd1094_cpuregionsize); - - fd1094_current_cacheposition++; - - if (fd1094_current_cacheposition >= S16_NUMCACHE) - { - mame_printf_debug("out of cache, performance may suffer, incrase S16_NUMCACHE!\n"); - fd1094_current_cacheposition = 0; - } -} - -/* Callback for CMP.L instructions (state change) */ -static void s24_fd1094_cmp_callback(device_t *device, UINT32 val, UINT8 reg) -{ - if (reg == 0 && (val & 0x0000ffff) == 0x0000ffff) // ? - { - s24_fd1094_setstate_and_decrypt(device->machine(), (val & 0xffff0000) >> 16); - } -} - -/* Callback when the s24_fd1094 enters interrupt code */ -static IRQ_CALLBACK(s24_fd1094_int_callback) -{ - s24_fd1094_setstate_and_decrypt(device->machine(), FD1094_STATE_IRQ); - return (0x60+irqline*4)/4; // vector address -} - -static void s24_fd1094_rte_callback (device_t *device) -{ - s24_fd1094_setstate_and_decrypt(device->machine(), FD1094_STATE_RTE); -} - - -/* KLUDGE, set the initial PC / SP based on table as we can't decrypt them yet */ -static void s24_fd1094_kludge_reset_values(void) -{ - int i; - - for (i = 0; i < 4; i++) - s24_fd1094_userregion[i] = fd1094_decode(i, s24_fd1094_cpuregion[i], s24_fd1094_key, 1); -} - - -/* function, to be called from MACHINE_RESET (every reset) */ -void s24_fd1094_machine_init(running_machine &machine) -{ - /* punt if no key; this allows us to be called even for non-s24_fd1094 games */ - if (!s24_fd1094_key) - return; - - s24_fd1094_setstate_and_decrypt(machine, FD1094_STATE_RESET); - s24_fd1094_kludge_reset_values(); - - m68k_set_cmpild_callback(machine.device("sub"), s24_fd1094_cmp_callback); - m68k_set_rte_callback(machine.device("sub"), s24_fd1094_rte_callback); - device_set_irq_callback(machine.device("sub"), s24_fd1094_int_callback); - - machine.device("sub")->reset(); -} - -static void s24_fd1094_postload(running_machine &machine) -{ - if (fd1094_state != -1) - { - int selected_state = fd1094_selected_state; - int state = fd1094_state; - - s24_fd1094_machine_init(machine); - - s24_fd1094_setstate_and_decrypt(machine, selected_state); - s24_fd1094_setstate_and_decrypt(machine, state); - } -} - -/* startup function, to be called from DRIVER_INIT (once on startup) */ -void s24_fd1094_driver_init(running_machine &machine) -{ - int i; - - s24_fd1094_cpuregion = (UINT16*)machine.root_device().memshare("share2")->ptr(); - s24_fd1094_cpuregionsize = 0x40000; - s24_fd1094_key = machine.root_device().memregion("fd1094key")->base(); - - /* punt if no key; this allows us to be called even for non-s24_fd1094 games */ - if (!s24_fd1094_key) - return; - - for (i=0;i; -/************************************* - * - * Statics - * - *************************************/ -static struct memory_mapper_chip memory_mapper; - - -/************************************* - * - * Prototypes - * - *************************************/ - -static void update_memory_mapping(running_machine &machine, struct memory_mapper_chip *chip, int decrypt); - - -/************************************* - * - * Misc helpers - * - *************************************/ +//************************************************************************** +// MISC HELPERS +//************************************************************************** READ16_HANDLER( segaic16_open_bus_r ) { static UINT8 recurse = 0; UINT16 result; - /* Unmapped memory returns the last word on the data bus, which is almost always the opcode */ - /* of the next instruction due to prefetch; however, since we may be encrypted, we actually */ - /* need to return the encrypted opcode, not the last decrypted data. */ + // Unmapped memory returns the last word on the data bus, which is almost always the opcode + // of the next instruction due to prefetch; however, since we may be encrypted, we actually + // need to return the encrypted opcode, not the last decrypted data. - /* Believe it or not, this is actually important for Cotton, which has the following evil */ - /* code: btst #0,$7038f7, which tests the low bit of an unmapped address, which thus should */ - /* return the prefetched value. */ + // Believe it or not, this is actually important for Cotton, which has the following evil + // code: btst #0,$7038f7, which tests the low bit of an unmapped address, which thus should + // return the prefetched value. - /* prevent recursion */ + // prevent recursion if (recurse) return 0xffff; - /* read original encrypted memory at that address */ + // read original encrypted memory at that address recurse = 1; result = space->read_word(cpu_get_pc(&space->device())); recurse = 0; @@ -90,149 +91,127 @@ READ16_HANDLER( segaic16_open_bus_r ) -/************************************* - * - * Memory mapping chip - * - *************************************/ +//************************************************************************** +// 315-5195 MEMORY MAPPER +//************************************************************************** -void segaic16_memory_mapper_init(device_t *cpu, const segaic16_memory_map_entry *entrylist, void (*sound_w_callback)(running_machine &, UINT8), UINT8 (*sound_r_callback)(running_machine &)) +//------------------------------------------------- +// sega_315_5195_mapper_device - constructor +//------------------------------------------------- + +sega_315_5195_mapper_device::sega_315_5195_mapper_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, SEGA_MEM_MAPPER, "Sega Memory Mapper", tag, owner, clock), + m_cputag(NULL), + m_cpu(NULL), + m_space(NULL), + m_curregion(0) { - struct memory_mapper_chip *chip = &memory_mapper; - - /* reset the chip structure */ - memset(chip, 0, sizeof(*chip)); - chip->cpu = cpu; - chip->map = entrylist; - chip->sound_w = sound_w_callback; - chip->sound_r = sound_r_callback; - - /* create the initial regions */ - update_memory_mapping(cpu->machine(), chip, 0); - - state_save_register_item_array(cpu->machine(), "segaic16_mapper", NULL, 0, chip->regs); -} - -void segaic16_memory_mapper_reset(running_machine &machine) -{ - struct memory_mapper_chip *chip = &memory_mapper; - - /* zap to 0 and remap everything */ - memset(chip->regs, 0, sizeof(chip->regs)); - update_memory_mapping(machine, chip, 1); } -void segaic16_memory_mapper_config(running_machine &machine, const UINT8 *map_data) -{ - struct memory_mapper_chip *chip = &memory_mapper; +//------------------------------------------------- +// static_set_cputag - configuration helper +// to set the tag of the CPU device +//------------------------------------------------- - /* zap to 0 and remap everything */ - memcpy(&chip->regs[0x10], map_data, 0x10); - update_memory_mapping(machine, chip, 1); +void sega_315_5195_mapper_device::static_set_cputag(device_t &device, const char *cpu) +{ + sega_315_5195_mapper_device &mapper = downcast(device); + mapper.m_cputag = cpu; } -void segaic16_memory_mapper_set_decrypted(running_machine &machine, UINT8 *decrypted) +//------------------------------------------------- +// static_set_mapper - configuration helper +// to set the mapper function +//------------------------------------------------- + +void sega_315_5195_mapper_device::static_set_mapper(device_t &device, mapper_delegate callback) { - struct memory_mapper_chip *chip = &memory_mapper; - offs_t romsize = chip->cpu->region()->bytes(); - int rgnum; - - /* loop over the regions */ - for (rgnum = 0; chip->map[rgnum].regbase != 0; rgnum++) - { - static const offs_t region_size_map[4] = { 0x00ffff, 0x01ffff, 0x07ffff, 0x1fffff }; - const segaic16_memory_map_entry *rgn = &chip->map[rgnum]; - offs_t region_size = region_size_map[chip->regs[rgn->regbase] & 3]; - offs_t region_base = (chip->regs[rgn->regbase + 1] << 16) & ~region_size; - offs_t region_start = region_base + (rgn->regoffs & region_size); - const char *readbank = rgn->readbank; - - /* skip non-ROM regions */ - if (readbank == NULL || rgn->romoffset == ~0) - continue; - - /* skip any mappings beyond the ROM size */ - if (region_start >= romsize) - continue; - - machine.root_device().membank(readbank)->configure_decrypted_entry(0, decrypted + region_start); - machine.root_device().membank(readbank)->set_entry(0); - } + sega_315_5195_mapper_device &mapper = downcast(device); + mapper.m_mapper = callback; } -static void memory_mapper_w(address_space *space, struct memory_mapper_chip *chip, offs_t offset, UINT8 data) -{ - UINT8 oldval; +//------------------------------------------------- +// static_set_sound_readwrite - configuration +// helper to set the sound read/write callbacks +//------------------------------------------------- - /* wraps every 32 bytes */ +void sega_315_5195_mapper_device::static_set_sound_readwrite(device_t &device, sound_read_delegate read, sound_write_delegate write) +{ + sega_315_5195_mapper_device &mapper = downcast(device); + mapper.m_sound_read = read; + mapper.m_sound_write = write; +} + + +//------------------------------------------------- +// write - handle a write to the memory mapper +//------------------------------------------------- + +WRITE8_MEMBER( sega_315_5195_mapper_device::write ) +{ + // wraps every 32 bytes offset &= 0x1f; - /* remember the previous value and swap in the new one */ - oldval = chip->regs[offset]; - chip->regs[offset] = data; +if (LOG_MEMORY_MAP) mame_printf_debug("(Write %02X = %02X)\n", offset, data); - /* switch off the offset */ + // remember the previous value and swap in the new one + UINT8 oldval = m_regs[offset]; + m_regs[offset] = data; + + // switch off the offset switch (offset) { case 0x02: - /* misc commands */ - /* 00 - resume execution after 03 */ - /* 03 - maybe controls halt and reset lines together? */ - if ((oldval ^ chip->regs[offset]) & 3) + // misc commands + // 00 - resume execution after 03 + // 03 - maybe controls halt and reset lines together? + if ((oldval ^ m_regs[offset]) & 3) { - if ((chip->regs[offset] & 3) == 3) - fd1094_machine_init(chip->cpu); - - /* fd1094_machine_init calls device_reset on the CPU, so we must do this afterwards */ - device_set_input_line(chip->cpu, INPUT_LINE_RESET, (chip->regs[offset] & 3) == 3 ? ASSERT_LINE : CLEAR_LINE); + // fd1094_machine_init calls device_reset on the CPU, so we must do this afterwards + m_cpu->set_input_line(INPUT_LINE_RESET, (m_regs[offset] & 3) == 3 ? ASSERT_LINE : CLEAR_LINE); } break; case 0x03: - if (chip->sound_w) - (*chip->sound_w)(space->machine(), data); + // write through to the sound chip + if (!m_sound_write.isnull()) + m_sound_write(data); break; case 0x04: - /* controls IRQ lines to 68000, negative logic -- write $B to signal IRQ4 */ - if ((chip->regs[offset] & 7) != 7) - { - int irqnum; - for (irqnum = 0; irqnum < 8; irqnum++) - device_set_input_line(chip->cpu, irqnum, (irqnum == (~chip->regs[offset] & 7)) ? HOLD_LINE : CLEAR_LINE); - } + // controls IRQ lines to 68000, negative logic -- write $B to signal IRQ4 + if ((m_regs[offset] & 7) != 7) + for (int irqnum = 0; irqnum < 8; irqnum++) + m_cpu->set_input_line(irqnum, (irqnum == (~m_regs[offset] & 7)) ? HOLD_LINE : CLEAR_LINE); break; case 0x05: - /* read/write control */ - /* 01 - write data latched in 00,01 to 2 * (address in 0A,0B,0C) */ - /* 02 - read data into latches 00,01 from 2 * (address in 07,08,09) */ + // read/write control + // 01 - write data latched in 00,01 to 2 * (address in 0A,0B,0C) + // 02 - read data into latches 00,01 from 2 * (address in 07,08,09) if (data == 0x01) { - address_space *targetspace = chip->cpu->memory().space(AS_PROGRAM); - offs_t addr = (chip->regs[0x0a] << 17) | (chip->regs[0x0b] << 9) | (chip->regs[0x0c] << 1); - targetspace->write_word(addr, (chip->regs[0x00] << 8) | chip->regs[0x01]); + offs_t addr = (m_regs[0x0a] << 17) | (m_regs[0x0b] << 9) | (m_regs[0x0c] << 1); + m_space->write_word(addr, (m_regs[0x00] << 8) | m_regs[0x01]); } else if (data == 0x02) { - address_space *targetspace = chip->cpu->memory().space(AS_PROGRAM); - offs_t addr = (chip->regs[0x07] << 17) | (chip->regs[0x08] << 9) | (chip->regs[0x09] << 1); - UINT16 result; - result = targetspace->read_word(addr); - chip->regs[0x00] = result >> 8; - chip->regs[0x01] = result; + offs_t addr = (m_regs[0x07] << 17) | (m_regs[0x08] << 9) | (m_regs[0x09] << 1); + UINT16 result = m_space->read_word(addr); + m_regs[0x00] = result >> 8; + m_regs[0x01] = result; } break; case 0x07: case 0x08: case 0x09: - /* writes here latch a 68000 address for writing */ + // writes here latch a 68000 address for writing break; case 0x0a: case 0x0b: case 0x0c: - /* writes here latch a 68000 address for reading */ + // writes here latch a 68000 address for reading break; case 0x10: case 0x11: @@ -244,7 +223,7 @@ static void memory_mapper_w(address_space *space, struct memory_mapper_chip *chi case 0x1c: case 0x1d: case 0x1e: case 0x1f: if (oldval != data) - update_memory_mapping(space->machine(), chip, 1); + update_mapping(); break; default: @@ -254,153 +233,393 @@ static void memory_mapper_w(address_space *space, struct memory_mapper_chip *chi } -static UINT16 memory_mapper_r(struct memory_mapper_chip *chip, offs_t offset, UINT16 unmapped_val) +//------------------------------------------------- +// read - handle a read from the memory mapper +//------------------------------------------------- + +READ8_MEMBER( sega_315_5195_mapper_device::read ) { - /* wraps every 32 bytes */ + // wraps every 32 bytes offset &= 0x1f; - /* switch off the offset */ + // switch off the offset switch (offset) { case 0x00: case 0x01: - /* data latches - return the values latched */ - return chip->regs[offset]; + // data latches - return the values latched + return m_regs[offset]; case 0x02: - /* various input bits from the 68000 */ - /* 01 - ???? */ - /* 02 - ???? */ - /* 04 - ???? */ - /* 08 - ???? */ - /* 40 - set if busy processing a read/write request */ - /* Together, 01+02 == 00 if the 68000 is halted */ - /* Together, 01+02+04+08 == 0F if the 68000 is executing */ - return (chip->regs[0x02] & 3) == 3 ? 0x00 : 0x0f; + // various input bits from the 68000 + // 01 - ???? + // 02 - ???? + // 04 - ???? + // 08 - ???? + // 40 - set if busy processing a read/write request + // Together, 01+02 == 00 if the 68000 is halted + // Together, 01+02+04+08 == 0F if the 68000 is executing + return (m_regs[0x02] & 3) == 3 ? 0x00 : 0x0f; case 0x03: - /* this returns data that the sound CPU writes */ - if (chip->sound_r) - return (*chip->sound_r)(chip->cpu->machine()); + // this returns data that the sound CPU writes + if (!m_sound_read.isnull()) + return m_sound_read(); return 0xff; default: logerror("Unknown memory_mapper_r from address %02X\n", offset); break; } - return unmapped_val; + return (space.data_width() == 8) ? 0xff : segaic16_open_bus_r(&space, 0, 0xffff); } -static void update_memory_mapping(running_machine &machine, struct memory_mapper_chip *chip, int decrypt) -{ - int rgnum; - address_space *space = chip->cpu->memory().space(AS_PROGRAM); +//------------------------------------------------- +// map_as_rom - map a region as ROM data +//------------------------------------------------- +void sega_315_5195_mapper_device::map_as_rom(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_name, offs_t rgnoffset, write16_delegate whandler) +{ + // determine parameters + region_info info; + compute_region(info, m_curregion, length, mirror, offset); + if (LOG_MEMORY_MAP) + { + mame_printf_debug("Map %06X-%06X (%06X) as ROM+%06X(%s)", info.start, info.end, info.mirror, rgnoffset, bank_name); + if (!whandler.isnull()) mame_printf_debug(" with handler=%s", whandler.name()); + mame_printf_debug("\n"); + } + + // don't map if the start is past the end of the ROM region + offs_t romsize = m_cpu->region()->bytes(); + if (rgnoffset < romsize) + { + // clamp the end to the ROM size + offs_t romend = info.end; + if (rgnoffset + romend + 1 - info.start >= romsize) + romend = romsize - 1 - rgnoffset + info.start; + + // map now + m_space->install_read_bank(info.start, romend, 0, info.mirror, bank_name); + + // configure the bank + memory_bank *bank = owner()->membank(bank_name); + UINT8 *memptr = m_cpu->region()->base() + rgnoffset; + bank->set_base(memptr); + + // remember this bank, and decrypt if necessary + m_banks[m_curregion].set(bank, info.start, romend, rgnoffset, memptr); + } + + // install a write handler if provided + if (!whandler.isnull()) + m_space->install_write_handler(info.start, info.end, 0, info.mirror, whandler); +} + + +//------------------------------------------------- +// map_as_ram - map a region as RAM, with an +// optional write handler +//------------------------------------------------- + +void sega_315_5195_mapper_device::map_as_ram(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_share_name, write16_delegate whandler) +{ + // determine parameters + region_info info; + compute_region(info, m_curregion, length, mirror, offset); + if (LOG_MEMORY_MAP) + { + mame_printf_debug("Map %06X-%06X (%06X) as RAM(%s)", info.start, info.end, info.mirror, bank_share_name); + if (!whandler.isnull()) mame_printf_debug(" with handler=%s", whandler.name()); + mame_printf_debug("\n"); + } + + // map now + m_space->install_read_bank(info.start, info.end, 0, info.mirror, bank_share_name); + + // either install a write handler or a write bank, as appropriate + if (!whandler.isnull()) + m_space->install_write_handler(info.start, info.end, 0, info.mirror, whandler); + else + m_space->install_write_bank(info.start, info.end, 0, info.mirror, bank_share_name); + + // configure the bank + memory_bank *bank = owner()->membank(bank_share_name); + bank->set_base(owner()->memshare(bank_share_name)->ptr()); + + // clear this rom bank reference + m_banks[m_curregion].clear(); +} + + +//------------------------------------------------- +// map_as_handler - map a region as a pair of +// read write handlers +//------------------------------------------------- + +void sega_315_5195_mapper_device::map_as_handler(UINT32 offset, UINT32 length, offs_t mirror, read16_delegate rhandler, write16_delegate whandler) +{ + // determine parameters + region_info info; + compute_region(info, m_curregion, length, mirror, offset); + if (LOG_MEMORY_MAP) + { + mame_printf_debug("Map %06X-%06X (%06X) as handler", info.start, info.end, info.mirror); + if (!rhandler.isnull()) mame_printf_debug(" read=%s", rhandler.name()); + if (!whandler.isnull()) mame_printf_debug(" write=%s", whandler.name()); + mame_printf_debug("\n"); + } + + // install read/write handlers + if (!rhandler.isnull()) + m_space->install_read_handler(info.start, info.end, 0, info.mirror, rhandler); + if (!whandler.isnull()) + m_space->install_write_handler(info.start, info.end, 0, info.mirror, whandler); + + // clear this rom bank reference + m_banks[m_curregion].clear(); +} + + +//------------------------------------------------- +// configure_explicit - explicitly configure the +// memory map +//------------------------------------------------- + +void sega_315_5195_mapper_device::configure_explicit(const UINT8 *map_data) +{ + memcpy(&m_regs[0x10], map_data, 0x10); + update_mapping(); +} + + +//------------------------------------------------- +// fd1094_state_change - handle notifications +// of state changes +//------------------------------------------------- + +void sega_315_5195_mapper_device::fd1094_state_change(UINT8 state) +{ + // iterate over regions and set the decrypted address of any ROM banks + for (int index = 0; index < ARRAY_LENGTH(m_banks); index++) + m_banks[index].update(); +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sega_315_5195_mapper_device::device_start() +{ + // bind our handlers + m_mapper.bind_relative_to(*owner()); + m_sound_read.bind_relative_to(*owner()); + m_sound_write.bind_relative_to(*owner()); + + // find our CPU + m_cpu = siblingdevice(m_cputag); + if (m_cpu == NULL) + throw emu_fatalerror("Unable to find sibling device '%s'", m_cputag); + + // if we are mapping an FD1089, tell all the banks + fd1089_base_device *fd1089 = dynamic_cast(m_cpu); + if (fd1089 != NULL) + for (int banknum = 0; banknum < ARRAY_LENGTH(m_banks); banknum++) + m_banks[banknum].set_decrypt(fd1089); + + // if we are mapping an FD1094, register for state change notifications and tell all the banks + fd1094_device *fd1094 = dynamic_cast(m_cpu); + if (fd1094 != NULL) + { + fd1094->notify_state_change(fd1094_device::state_change_delegate(FUNC(sega_315_5195_mapper_device::fd1094_state_change), this)); + for (int banknum = 0; banknum < ARRAY_LENGTH(m_banks); banknum++) + m_banks[banknum].set_decrypt(fd1094); + } + + // find the address space that is to be mapped + m_space = m_cpu->space(AS_PROGRAM); + if (m_space == NULL) + throw emu_fatalerror("Unable to find program address space on device '%s'", m_cputag); + + // register for saves + save_item(NAME(m_regs)); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void sega_315_5195_mapper_device::device_reset() +{ + // hold the CPU in reset + m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + + // clear registers and recompute the memory mapping + memset(m_regs, 0, sizeof(m_regs)); + update_mapping(); + + // release the CPU + m_cpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); +} + + +//------------------------------------------------- +// compute_region - determine region parameters +// based on current configuration registers and +// actual underlying bus connections +//------------------------------------------------- + +void sega_315_5195_mapper_device::compute_region(region_info &info, UINT8 index, UINT32 length, UINT32 mirror, UINT32 offset) +{ + static const offs_t region_size_map[4] = { 0x00ffff, 0x01ffff, 0x07ffff, 0x1fffff }; + info.size_mask = region_size_map[m_regs[0x10 + 2 * index] & 3]; + info.base = (m_regs[0x11 + 2 * index] << 16) & ~info.size_mask; + info.mirror = mirror & info.size_mask; + info.start = info.base + (offset & info.size_mask); + info.end = info.start + MIN(length - 1, info.size_mask); +} + + +//------------------------------------------------- +// update_mapping - remap the entire CPU address +// space based on updated mappings +//------------------------------------------------- + +void sega_315_5195_mapper_device::update_mapping() +{ if (LOG_MEMORY_MAP) mame_printf_debug("----\nRemapping:\n"); - /* first reset everything back to the beginning */ - space->install_legacy_readwrite_handler(0x000000, 0xffffff, FUNC(segaic16_memory_mapper_lsb_r), FUNC(segaic16_memory_mapper_lsb_w)); + // first reset everything back to the beginning + m_space->install_readwrite_handler(0x000000, 0xffffff, read8_delegate(FUNC(sega_315_5195_mapper_device::read), this), write8_delegate(FUNC(sega_315_5195_mapper_device::write), this), 0x00ff); - /* loop over the regions */ - for (rgnum = 0; chip->map[rgnum].regbase != 0; rgnum++) + // loop over the regions + for (int index = 7; index >= 0; index--) { - static const offs_t region_size_map[4] = { 0x00ffff, 0x01ffff, 0x07ffff, 0x1fffff }; - const segaic16_memory_map_entry *rgn = &chip->map[rgnum]; - offs_t region_size = region_size_map[chip->regs[rgn->regbase] & 3]; - offs_t region_base = (chip->regs[rgn->regbase + 1] << 16) & ~region_size; - offs_t region_mirror = rgn->mirror & region_size; - offs_t region_start = region_base + (rgn->regoffs & region_size); - offs_t region_end = region_start + ((rgn->length - 1 < region_size) ? rgn->length - 1 : region_size); - const char *writebank = rgn->writebank; - write16_space_func write = rgn->write; - const char *writename = rgn->writename; - const char *readbank = rgn->readbank; - read16_space_func read = rgn->read; - const char *readname = rgn->readname; - - /* ROM areas need extra clamping */ - if (rgn->romoffset != ~0) - { - offs_t romsize = chip->cpu->region()->bytes(); - if (region_start >= romsize) - read = NULL, readname = "(null)"; - else if (region_start + rgn->length > romsize) - region_end = romsize - 1; - } - - /* map it */ - if (read != NULL) - space->install_legacy_read_handler(region_start, region_end, 0, region_mirror, read, readname); - else if (readbank != NULL) - space->install_read_bank(region_start, region_end, 0, region_mirror, readbank); - else - space->install_legacy_read_handler(region_start, region_end, 0, region_mirror, FUNC(segaic16_open_bus_r)); - - if (write != NULL) - space->install_legacy_write_handler(region_start, region_end, 0, region_mirror, write, writename); - else if (writebank != NULL) - space->install_write_bank(region_start, region_end, 0, region_mirror, writebank); - else - space->unmap_write(region_start, region_end, 0, region_mirror); - - /* set the bank pointer */ - if (readbank != NULL) - { - if (rgn->base != NULL) - { - machine.root_device().membank(readbank)->configure_entry(0, *rgn->base); - machine.root_device().membank(readbank)->set_entry(0); - } - else if (rgn->romoffset != ~0) - { - UINT8 *decrypted = NULL; - - if (decrypt) - { - decrypted = (UINT8 *)fd1094_get_decrypted_base(); - if (!decrypted) - decrypted = (UINT8 *)fd1089_get_decrypted_base(); - } - - machine.root_device().membank(readbank)->configure_entry(0, chip->cpu->region()->base() + region_start); - if (decrypted) - machine.root_device().membank(readbank)->configure_decrypted_entry(0, decrypted + region_start); - - machine.root_device().membank(readbank)->set_entry(0); - } - } - - if (LOG_MEMORY_MAP) mame_printf_debug(" %06X-%06X (%06X) = %s\n", region_start, region_end, region_mirror, rgn->name); + // note the current region and call the mapper to find out what to do + m_curregion = index; + m_mapper(*this, index); } } -READ8_HANDLER( segaic16_memory_mapper_r ) +//------------------------------------------------- +// decrypt_bank - constructor +//------------------------------------------------- + +sega_315_5195_mapper_device::decrypt_bank::decrypt_bank() + : m_bank(NULL), + m_start(0), + m_end(0), + m_rgnoffs(~0), + m_srcptr(NULL), + m_fd1089(NULL), + m_fd1094_cache(NULL) { - return memory_mapper_r(&memory_mapper, offset, 0xff); + // invalidate all states + reset(); } -WRITE8_HANDLER( segaic16_memory_mapper_w ) +//------------------------------------------------- +// ~decrypt_bank - destructor +//------------------------------------------------- + +sega_315_5195_mapper_device::decrypt_bank::~decrypt_bank() { - memory_mapper_w(space, &memory_mapper, offset, data); + // delete any allocated cache + global_free(m_fd1094_cache); } -READ16_HANDLER( segaic16_memory_mapper_lsb_r ) +//------------------------------------------------- +// set_decrypt - configure the decryption target +// CPU +//------------------------------------------------- + +void sega_315_5195_mapper_device::decrypt_bank::set_decrypt(fd1089_base_device *fd1089) { - return memory_mapper_r(&memory_mapper, offset, segaic16_open_bus_r(space,0,0xffff)); + // set the fd1089 pointer + m_fd1089 = fd1089; + + // clear out all fd1094 stuff + delete m_fd1094_cache; + m_fd1094_cache = NULL; +} + +void sega_315_5195_mapper_device::decrypt_bank::set_decrypt(fd1094_device *fd1094) +{ + // set the fd1094 pointer and allocate a decryption cache + m_fd1094_cache = global_alloc(fd1094_decryption_cache(*fd1094)); + + // clear out all fd1089 stuff + m_fd1089 = NULL; + m_fd1089_decrypted.reset(); } -WRITE16_HANDLER( segaic16_memory_mapper_lsb_w ) +//------------------------------------------------- +// set - set the parameters of this bank after +// a change +//------------------------------------------------- + +void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, offs_t start, offs_t end, offs_t rgnoffs, UINT8 *src) { - if (ACCESSING_BITS_0_7) - memory_mapper_w(space, &memory_mapper, offset, data & 0xff); + // ignore if not encrypted + if (m_fd1089 == NULL && m_fd1094_cache == NULL) + return; + + // ignore if nothing is changing + if (bank == m_bank && start == m_start && end == m_end && rgnoffs == m_rgnoffs && src == m_srcptr) + return; + + // if the start, end, or src change, throw away any cached data + reset(); + + // update to the current state + m_bank = bank; + m_start = start; + m_end = end; + m_rgnoffs = rgnoffs; + m_srcptr = src; + + // configure the fd1094 cache + if (m_fd1094_cache != NULL) + m_fd1094_cache->configure(m_start, m_end + 1 - m_start, m_rgnoffs); + + // force an update of what we have + update(); } +//------------------------------------------------- +// update - update the decrypted memory base +// if this rom bank has been assigned +//------------------------------------------------- + +void sega_315_5195_mapper_device::decrypt_bank::update() +{ + // if this isn't a valid state, don't try to do anything + if (m_bank == NULL || m_srcptr == NULL) + return; + + // fd1089 case + if (m_fd1089 != NULL) + { + m_fd1089_decrypted.resize((m_end + 1 - m_start) / 2); + m_fd1089->decrypt(m_start, m_end + 1 - m_start, m_rgnoffs, m_fd1089_decrypted, reinterpret_cast(m_srcptr)); + m_bank->set_base_decrypted(m_fd1089_decrypted); + } + + // fd1094 case + if (m_fd1094_cache != NULL) + m_bank->set_base_decrypted(m_fd1094_cache->decrypted_opcodes(m_fd1094_cache->fd1094().state())); +} + + + /************************************* * * Multiply chip - 315-5248 @@ -511,17 +730,17 @@ static void update_divide( device_t *device, int mode ) { ic_315_5249_state *ic_315_5249 = _315_5249_get_safe_token(device); - /* clear the flags by default */ + // clear the flags by default ic_315_5249->regs[6] = 0; - /* if mode 0, store quotient/remainder */ + // if mode 0, store quotient/remainder if (mode == 0) { INT32 dividend = (INT32)((ic_315_5249->regs[0] << 16) | ic_315_5249->regs[1]); INT32 divisor = (INT16)ic_315_5249->regs[2]; INT32 quotient, remainder; - /* perform signed divide */ + // perform signed divide if (divisor == 0) { quotient = dividend;//((INT32)(dividend ^ divisor) < 0) ? 0x8000 : 0x7fff; @@ -532,7 +751,7 @@ static void update_divide( device_t *device, int mode ) remainder = dividend - quotient * divisor; - /* clamp to 16-bit signed */ + // clamp to 16-bit signed if (quotient < -32768) { quotient = -32768; @@ -544,19 +763,19 @@ static void update_divide( device_t *device, int mode ) ic_315_5249->regs[6] |= 0x8000; } - /* store quotient and remainder */ + // store quotient and remainder ic_315_5249->regs[4] = quotient; ic_315_5249->regs[5] = remainder; } - /* if mode 1, store 32-bit quotient */ + // if mode 1, store 32-bit quotient else { UINT32 dividend = (UINT32)((ic_315_5249->regs[0] << 16) | ic_315_5249->regs[1]); UINT32 divisor = (UINT16)ic_315_5249->regs[2]; UINT32 quotient; - /* perform unsigned divide */ + // perform unsigned divide if (divisor == 0) { quotient = dividend;//0x7fffffff; @@ -565,7 +784,7 @@ static void update_divide( device_t *device, int mode ) else quotient = dividend / divisor; - /* store 32-bit quotient */ + // store 32-bit quotient ic_315_5249->regs[4] = quotient >> 16; ic_315_5249->regs[5] = quotient & 0xffff; } @@ -575,16 +794,16 @@ READ16_DEVICE_HANDLER ( segaic16_divide_r ) { ic_315_5249_state *ic_315_5249 = _315_5249_get_safe_token(device); - /* 8 effective read registers */ + // 8 effective read registers offset &= 7; switch (offset) { - case 0: return ic_315_5249->regs[0]; /* dividend high */ - case 1: return ic_315_5249->regs[1]; /* dividend low */ - case 2: return ic_315_5249->regs[2]; /* divisor */ - case 4: return ic_315_5249->regs[4]; /* quotient (mode 0) or quotient high (mode 1) */ - case 5: return ic_315_5249->regs[5]; /* remainder (mode 0) or quotient low (mode 1) */ - case 6: return ic_315_5249->regs[6]; /* flags */ + case 0: return ic_315_5249->regs[0]; // dividend high + case 1: return ic_315_5249->regs[1]; // dividend low + case 2: return ic_315_5249->regs[2]; // divisor + case 4: return ic_315_5249->regs[4]; // quotient (mode 0) or quotient high (mode 1) + case 5: return ic_315_5249->regs[5]; // remainder (mode 0) or quotient low (mode 1) + case 6: return ic_315_5249->regs[6]; // flags } return 0xffff; @@ -599,17 +818,17 @@ WRITE16_DEVICE_HANDLER( segaic16_divide_w ) if (LOG_DIVIDE) logerror("divide_w(%X) = %04X\n", offset, data); - /* only 4 effective write registers */ + // only 4 effective write registers offset &= 3; switch (offset) { - case 0: COMBINE_DATA(&ic_315_5249->regs[0]); break; /* dividend high */ - case 1: COMBINE_DATA(&ic_315_5249->regs[1]); break; /* dividend low */ - case 2: COMBINE_DATA(&ic_315_5249->regs[2]); break; /* divisor/trigger */ + case 0: COMBINE_DATA(&ic_315_5249->regs[0]); break; // dividend high + case 1: COMBINE_DATA(&ic_315_5249->regs[1]); break; // dividend low + case 2: COMBINE_DATA(&ic_315_5249->regs[2]); break; // divisor/trigger case 3: break; } - /* if a4 line is high, divide, using a3 as the mode */ + // if a4 line is high, divide, using a3 as the mode if (a4) update_divide(device, a3); } @@ -678,11 +897,11 @@ int segaic16_compare_timer_clock( device_t *device ) int old_counter = ic_315_5250->counter; int result = 0; - /* if we're enabled, clock the upcounter */ + // if we're enabled, clock the upcounter if (ic_315_5250->regs[10] & 1) ic_315_5250->counter++; - /* regardless of the enable, a value of 0xfff will generate the IRQ */ + // regardless of the enable, a value of 0xfff will generate the IRQ if (old_counter == 0xfff) { result = 1; @@ -812,15 +1031,15 @@ DEVICE_GET_INFO( ic_315_5248 ) { switch (state) { - /* --- the following bits of info are returned as 64-bit signed integers --- */ + // --- the following bits of info are returned as 64-bit signed integers --- case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(ic_315_5248_state); break; - /* --- the following bits of info are returned as pointers to data or functions --- */ + // --- the following bits of info are returned as pointers to data or functions --- case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(ic_315_5248); break; - case DEVINFO_FCT_STOP: /* Nothing */ break; + case DEVINFO_FCT_STOP: // Nothing break; case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(ic_315_5248); break; - /* --- the following bits of info are returned as NULL-terminated strings --- */ + // --- the following bits of info are returned as NULL-terminated strings --- case DEVINFO_STR_NAME: strcpy(info->s, "Sega 315-5248"); break; case DEVINFO_STR_FAMILY: strcpy(info->s, "Sega Custom IC"); break; case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; @@ -833,15 +1052,15 @@ DEVICE_GET_INFO( ic_315_5249 ) { switch (state) { - /* --- the following bits of info are returned as 64-bit signed integers --- */ + // --- the following bits of info are returned as 64-bit signed integers --- case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(ic_315_5249_state); break; - /* --- the following bits of info are returned as pointers to data or functions --- */ + // --- the following bits of info are returned as pointers to data or functions --- case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(ic_315_5249); break; - case DEVINFO_FCT_STOP: /* Nothing */ break; + case DEVINFO_FCT_STOP: // Nothing break; case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(ic_315_5249); break; - /* --- the following bits of info are returned as NULL-terminated strings --- */ + // --- the following bits of info are returned as NULL-terminated strings --- case DEVINFO_STR_NAME: strcpy(info->s, "Sega 315-5249"); break; case DEVINFO_STR_FAMILY: strcpy(info->s, "Sega Custom IC"); break; case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; @@ -854,15 +1073,15 @@ DEVICE_GET_INFO( ic_315_5250 ) { switch (state) { - /* --- the following bits of info are returned as 64-bit signed integers --- */ + // --- the following bits of info are returned as 64-bit signed integers --- case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(ic_315_5250_state); break; - /* --- the following bits of info are returned as pointers to data or functions --- */ + // --- the following bits of info are returned as pointers to data or functions --- case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(ic_315_5250); break; - case DEVINFO_FCT_STOP: /* Nothing */ break; + case DEVINFO_FCT_STOP: // Nothing break; case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(ic_315_5250); break; - /* --- the following bits of info are returned as NULL-terminated strings --- */ + // --- the following bits of info are returned as NULL-terminated strings --- case DEVINFO_STR_NAME: strcpy(info->s, "Sega 315-5250"); break; case DEVINFO_STR_FAMILY: strcpy(info->s, "Sega Custom IC"); break; case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; diff --git a/src/mame/machine/segaic16.h b/src/mame/machine/segaic16.h index 279748988fe..eb1e5944764 100644 --- a/src/mame/machine/segaic16.h +++ b/src/mame/machine/segaic16.h @@ -2,41 +2,172 @@ Sega 16-bit common hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ +#pragma once + +#ifndef __SEGAIC16_H__ +#define __SEGAIC16_H__ + +#include "cpu/m68000/m68000.h" +#include "machine/fd1089.h" +#include "machine/fd1094.h" + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_SEGA_315_5195_MAPPER_ADD(_tag, _cputag, _class, _mapper, _read, _write) \ + MCFG_DEVICE_ADD(_tag, SEGA_MEM_MAPPER, 0) \ + sega_315_5195_mapper_device::static_set_cputag(*device, _cputag); \ + sega_315_5195_mapper_device::static_set_mapper(*device, sega_315_5195_mapper_device::mapper_delegate(&_class::_mapper, #_class "::" #_mapper, NULL, (_class *)0)); \ + sega_315_5195_mapper_device::static_set_sound_readwrite(*device, sega_315_5195_mapper_device::sound_read_delegate(&_class::_read, #_class "::" #_read, NULL, (_class *)0), sega_315_5195_mapper_device::sound_write_delegate(&_class::_write, #_class "::" #_write, NULL, (_class *)0)); \ + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + + +// ======================> sega_315_5195_mapper_device + +class sega_315_5195_mapper_device : public device_t +{ +public: + typedef device_delegate mapper_delegate; + typedef device_delegate sound_read_delegate; + typedef device_delegate sound_write_delegate; + + // construction/destruction + sega_315_5195_mapper_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // inline configuration helpers + static void static_set_cputag(device_t &device, const char *cpu); + static void static_set_mapper(device_t &device, mapper_delegate callback); + static void static_set_sound_readwrite(device_t &device, sound_read_delegate read, sound_write_delegate write); + + // public interface + DECLARE_READ8_MEMBER( read ); + DECLARE_WRITE8_MEMBER( write ); + + // mapping helpers + void map_as_rom(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_name, offs_t rgnoffset, write16_delegate whandler); + void map_as_ram(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_share_name, write16_delegate whandler); + void map_as_handler(UINT32 offset, UINT32 length, offs_t mirror, read16_delegate rhandler, write16_delegate whandler); + + // perform an explicit configuration (for bootlegs with hard-coded mappings) + void configure_explicit(const UINT8 *map_data); + +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + +private: + // internal region struct + struct region_info + { + offs_t size_mask; + offs_t base; + offs_t mirror; + offs_t start; + offs_t end; + }; + + // helper class for tracking banks mapped to ROM regions + class decrypt_bank + { + public: + // construction/destruction + decrypt_bank(); + ~decrypt_bank(); + + // configuration + void set_decrypt(fd1089_base_device *fd1089); + void set_decrypt(fd1094_device *fd1094); + void clear() { set(NULL, 0, 0, ~0, NULL); } + void set(memory_bank *bank, offs_t start, offs_t end, offs_t rgnoffs, UINT8 *src); + + // updating + void update(); + void reset() { m_fd1089_decrypted.reset(); if (m_fd1094_cache != NULL) m_fd1094_cache->reset(); } + + private: + // internal state + memory_bank * m_bank; + offs_t m_start; + offs_t m_end; + offs_t m_rgnoffs; + UINT8 * m_srcptr; + fd1089_base_device * m_fd1089; + dynamic_array m_fd1089_decrypted; + fd1094_decryption_cache *m_fd1094_cache; + }; + + // internal helpers + void compute_region(region_info &info, UINT8 index, UINT32 length, UINT32 mirror, UINT32 offset = 0); + void update_mapping(); + void fd1094_state_change(UINT8 state); + + // configuration + const char * m_cputag; + mapper_delegate m_mapper; + sound_read_delegate m_sound_read; + sound_write_delegate m_sound_write; + + // internal state + m68000_device * m_cpu; + address_space * m_space; + UINT8 m_regs[0x20]; + UINT8 m_curregion; + decrypt_bank m_banks[8]; +}; + + +// device type definition +extern const device_type SEGA_MEM_MAPPER; + + + + #include "devlegcy.h" /* open bus read helpers */ READ16_HANDLER( segaic16_open_bus_r ); -/* memory mapping chip */ -typedef struct _segaic16_memory_map_entry segaic16_memory_map_entry; -struct _segaic16_memory_map_entry -{ - UINT8 regbase; /* register offset for this region */ - offs_t regoffs; /* offset within the region for this entry */ - offs_t length; /* length in bytes of this entry */ - offs_t mirror; /* maximal mirror values (will be truncated) */ - offs_t romoffset; /* offset within REGION_CPU0, or ~0 for independent entries */ - read16_space_func read; /* read handler */ - const char * readname; - const char * readbank; /* bank for reading */ - write16_space_func write; /* write handler */ - const char * writename; - const char * writebank; /* bank for writing */ - UINT16 ** base; /* pointer to memory base */ - const char * name; /* friendly name for debugging */ -}; - -void segaic16_memory_mapper_init(device_t *cpu, const segaic16_memory_map_entry *entrylist, void (*sound_w_callback)(running_machine &, UINT8), UINT8 (*sound_r_callback)(running_machine &)); -void segaic16_memory_mapper_reset(running_machine &machine); -void segaic16_memory_mapper_config(running_machine &machine, const UINT8 *map_data); -void segaic16_memory_mapper_set_decrypted(running_machine &machine, UINT8 *decrypted); -READ8_HANDLER( segaic16_memory_mapper_r ); -WRITE8_HANDLER( segaic16_memory_mapper_w ); -READ16_HANDLER( segaic16_memory_mapper_lsb_r ); -WRITE16_HANDLER( segaic16_memory_mapper_lsb_w ); - /*** Sega 16-bit Devices ***/ #include "devcb.h" @@ -91,3 +222,6 @@ WRITE16_DEVICE_HANDLER( segaic16_divide_w ); int segaic16_compare_timer_clock( device_t *device ); READ16_DEVICE_HANDLER( segaic16_compare_timer_r ); WRITE16_DEVICE_HANDLER( segaic16_compare_timer_w ); + + +#endif diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4f7583522f0..ad85f84ecb1 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -4341,7 +4341,7 @@ aburner // 1987.07 After Burner (Japan) aburner2 // 1987.09 After Burner II (Japan) thndrbld1 // 1987.12 Thunder Blade (Japan, deluxe/standard) thndrbld // 1988.02 Thunder Blade (US?, upright, FD1094, decrypted) - // 1989.01 Last Survivor (Japan) +lastsurv // 1989.01 Last Survivor (Japan) smgpj // 1989.06 Super Monaco GP (Japan, FD1094, decrypted) smgpja // 1989.06 Super Monaco GP (Japan, FD1094, decrypted) smgp // 1989.?? Super Monaco GP (World, FD1094, decrypted) @@ -4360,6 +4360,7 @@ abcop // 1990.?? A.B.Cop (World, FD1094, decrypted) // 1990.10 GP Rider (Japan) gprider // 1990.?? GP Rider (World, FD1094, decrypted) gprideru // 1990.12 GP Rider (US, FD1094, decrypted) +gpriderj // 1990.12 GP Rider (Japan, FD1094, decrypted) rascot // 1991.?? Royal Ascot (Japan) diff --git a/src/mame/mame.mak b/src/mame/mame.mak index eebc178c09e..dab6dc6b043 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -1262,8 +1262,6 @@ $(MAMEOBJ)/sega.a: \ $(MACHINE)/fd1094.o \ $(MACHINE)/fddebug.o \ $(MACHINE)/mc8123.o \ - $(MACHINE)/s16fd.o \ - $(MACHINE)/s24fd.o \ $(MACHINE)/scudsp.o \ $(MACHINE)/segaic16.o \ $(AUDIO)/carnival.o \ diff --git a/src/mame/video/beathead.c b/src/mame/video/beathead.c index 8b9e9757909..a57ebad7f93 100644 --- a/src/mame/video/beathead.c +++ b/src/mame/video/beathead.c @@ -2,6 +2,37 @@ Atari "Stella on Steroids" hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ****************************************************************************/ #include "emu.h" diff --git a/src/mame/video/segahang.c b/src/mame/video/segahang.c index 7590fc3a927..cdc84dfc2c4 100644 --- a/src/mame/video/segahang.c +++ b/src/mame/video/segahang.c @@ -2,10 +2,40 @@ Sega Hang On hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ #include "emu.h" -#include "video/segaic16.h" #include "includes/segas16.h" diff --git a/src/mame/video/segaorun.c b/src/mame/video/segaorun.c index 25a5c884ebe..b591613df3d 100644 --- a/src/mame/video/segaorun.c +++ b/src/mame/video/segaorun.c @@ -2,115 +2,139 @@ Sega Outrun hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ #include "emu.h" -#include "video/segaic16.h" #include "includes/segas16.h" -/************************************* - * - * Video startup - * - *************************************/ +//************************************************************************** +// VIDEO STARTUP +//************************************************************************** -VIDEO_START( shangon ) +void segaorun_state::video_start() { - /* compute palette info */ + // compute palette info segaic16_palette_init(0x1000); + + if (m_is_shangon) + { + // initialize the tile/text layers + segaic16_tilemap_init(machine(), 0, SEGAIC16_TILEMAP_16B_ALT, 0x000, 0, 2); - /* initialize the tile/text layers */ - segaic16_tilemap_init(machine, 0, SEGAIC16_TILEMAP_16B_ALT, 0x000, 0, 2); + // initialize the road + segaic16_road_init(machine(), 0, SEGAIC16_ROAD_OUTRUN, 0x7f6, 0x7c0, 0x7c0, 0); + } + else + { + // initialize the tile/text layers + segaic16_tilemap_init(machine(), 0, SEGAIC16_TILEMAP_16B, 0x000, 0, 2); - /* initialize the road */ - segaic16_road_init(machine, 0, SEGAIC16_ROAD_OUTRUN, 0x7f6, 0x7c0, 0x7c0, 0); -} - - -VIDEO_START( outrun ) -{ - /* compute palette info */ - segaic16_palette_init(0x1000); - - /* initialize the tile/text layers */ - segaic16_tilemap_init(machine, 0, SEGAIC16_TILEMAP_16B, 0x000, 0, 2); - - /* initialize the road */ - segaic16_road_init(machine, 0, SEGAIC16_ROAD_OUTRUN, 0x400, 0x420, 0x780, 0); + // initialize the road + segaic16_road_init(machine(), 0, SEGAIC16_ROAD_OUTRUN, 0x400, 0x420, 0x780, 0); + } } -/************************************* - * - * Video update - * - *************************************/ +//************************************************************************** +// VIDEO UPDATE +//************************************************************************** -SCREEN_UPDATE_IND16( shangon ) +UINT32 segaorun_state::screen_update_shangon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - /* reset priorities */ - screen.machine().priority_bitmap.fill(0, cliprect); + // reset priorities + machine().priority_bitmap.fill(0, cliprect); - /* draw the low priority road layer */ + // draw the low priority road layer segaic16_road_draw(0, bitmap, cliprect, SEGAIC16_ROAD_BACKGROUND); - /* draw background */ + // draw background segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 0, 0x01); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 1, 0x02); - /* draw foreground */ + // draw foreground segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 0, 0x02); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 1, 0x04); - /* draw the high priority road */ + // draw the high priority road segaic16_road_draw(0, bitmap, cliprect, SEGAIC16_ROAD_FOREGROUND); - /* text layer */ - /* note that we inflate the priority of the text layer to prevent sprites */ - /* from drawing over the high scores */ + // text layer + // note that we inflate the priority of the text layer to prevent sprites + // from drawing over the high scores segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 0, 0x08); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 1, 0x08); - /* draw the sprites */ + // draw the sprites segaic16_sprites_draw(screen, bitmap, cliprect, 0); return 0; } -SCREEN_UPDATE_IND16( outrun ) +UINT32 segaorun_state::screen_update_outrun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - /* if no drawing is happening, fill with black and get out */ + // if no drawing is happening, fill with black and get out if (!segaic16_display_enable) { - bitmap.fill(get_black_pen(screen.machine()), cliprect); + bitmap.fill(get_black_pen(machine()), cliprect); return 0; } - /* reset priorities */ - screen.machine().priority_bitmap.fill(0, cliprect); + // reset priorities + machine().priority_bitmap.fill(0, cliprect); - /* draw the low priority road layer */ + // draw the low priority road layer segaic16_road_draw(0, bitmap, cliprect, SEGAIC16_ROAD_BACKGROUND); - /* draw background */ + // draw background segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 0, 0x01); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 1, 0x02); - /* draw foreground */ + // draw foreground segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 0, 0x02); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 1, 0x04); - /* draw the high priority road */ + // draw the high priority road segaic16_road_draw(0, bitmap, cliprect, SEGAIC16_ROAD_FOREGROUND); - /* text layer */ + // text layer segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 0, 0x04); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 1, 0x08); - /* draw the sprites */ + // draw the sprites segaic16_sprites_draw(screen, bitmap, cliprect, 0); return 0; } diff --git a/src/mame/video/segas16a.c b/src/mame/video/segas16a.c index d891a2f458e..2410f2166ba 100644 --- a/src/mame/video/segas16a.c +++ b/src/mame/video/segas16a.c @@ -2,10 +2,40 @@ Sega System 16A hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ #include "emu.h" -#include "video/segaic16.h" #include "includes/segas16.h" diff --git a/src/mame/video/segas16b.c b/src/mame/video/segas16b.c index 2f3b1ac641c..de9c0deed70 100644 --- a/src/mame/video/segas16b.c +++ b/src/mame/video/segas16b.c @@ -2,79 +2,92 @@ Sega System 16B hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ #include "emu.h" -#include "video/segaic16.h" #include "includes/segas16.h" -/************************************* - * - * Video startup - * - *************************************/ +//------------------------------------------------- +// video_start - initialize the video system +//------------------------------------------------- -static void video_start_common(running_machine &machine, int type) +void segas16b_state::video_start() { - /* compute palette info */ + // compute palette info segaic16_palette_init(0x800); - /* initialize the tile/text layers */ - segaic16_tilemap_init(machine, 0, type, 0x000, 0, 2); + // initialize the tile/text layers + segaic16_tilemap_init(machine(), 0, m_tilemap_type, 0x000, 0, 2); } -VIDEO_START( system16b ) +//------------------------------------------------- +// screen_update - render all graphics +//------------------------------------------------- + +UINT32 segas16b_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - video_start_common(machine, SEGAIC16_TILEMAP_16B); -} - - -VIDEO_START( timscanr ) -{ - video_start_common(machine, SEGAIC16_TILEMAP_16B_ALT); -} - - - -/************************************* - * - * Video update - * - *************************************/ - -SCREEN_UPDATE_IND16( system16b ) -{ - /* if no drawing is happening, fill with black and get out */ + // if no drawing is happening, fill with black and get out if (!segaic16_display_enable) { - bitmap.fill(get_black_pen(screen.machine()), cliprect); + bitmap.fill(get_black_pen(machine()), cliprect); return 0; } - /* reset priorities */ - screen.machine().priority_bitmap.fill(0, cliprect); + // reset priorities + machine().priority_bitmap.fill(0, cliprect); - /* draw background opaquely first, not setting any priorities */ + // draw background opaquely first, not setting any priorities segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 0 | TILEMAP_DRAW_OPAQUE, 0x00); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 1 | TILEMAP_DRAW_OPAQUE, 0x00); - /* draw background again, just to set the priorities on non-transparent pixels */ + // draw background again, just to set the priorities on non-transparent pixels bitmap_ind16 dummy_bitmap; segaic16_tilemap_draw(screen, dummy_bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 0, 0x01); segaic16_tilemap_draw(screen, dummy_bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 1, 0x02); - /* draw foreground */ + // draw foreground segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 0, 0x02); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 1, 0x04); - /* text layer */ + // text layer segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 0, 0x04); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 1, 0x08); - /* draw the sprites */ + // draw the sprites segaic16_sprites_draw(screen, bitmap, cliprect, 0); return 0; } diff --git a/src/mame/video/segas18.c b/src/mame/video/segas18.c index 76ddcfac376..f4fda5f76a6 100644 --- a/src/mame/video/segas18.c +++ b/src/mame/video/segas18.c @@ -2,10 +2,40 @@ Sega System 18 hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ #include "emu.h" -#include "video/segaic16.h" #include "includes/genesis.h" #include "includes/segas16.h" @@ -26,34 +56,26 @@ * *************************************/ -VIDEO_START( system18 ) +void segas18_state::video_start() { - segas1x_state *state = machine.driver_data(); - int width, height; + m_temp_bitmap.allocate(machine().primary_screen->width(), machine().primary_screen->height()); + m_grayscale_enable = false; + m_vdp_enable = false; + m_vdp_mixing = 0; - state->m_grayscale_enable = 0; - state->m_vdp_enable = 0; - state->m_vdp_mixing = 0; - - /* compute palette info */ + // compute palette info segaic16_palette_init(0x800); - /* initialize the tile/text layers */ - segaic16_tilemap_init(machine, 0, SEGAIC16_TILEMAP_16B, 0x000, 0, 8); + // initialize the tile/text layers + segaic16_tilemap_init(machine(), 0, SEGAIC16_TILEMAP_16B, 0x000, 0, 8); - /* create the VDP */ - system18_vdp_start(machine); + // create the VDP + system18_vdp_start(machine()); - /* create a temp bitmap to draw the VDP data into */ - width = machine.primary_screen->width(); - height = machine.primary_screen->height(); - state->m_tmp_bitmap = auto_bitmap_ind16_alloc(machine, width, height); - - - state->save_item(NAME(state->m_grayscale_enable)); - state->save_item(NAME(state->m_vdp_enable)); - state->save_item(NAME(state->m_vdp_mixing)); - state->save_item(NAME(*state->m_tmp_bitmap)); + save_item(NAME(m_grayscale_enable)); + save_item(NAME(m_vdp_enable)); + save_item(NAME(m_vdp_mixing)); + save_item(NAME(m_temp_bitmap)); } @@ -64,29 +86,23 @@ VIDEO_START( system18 ) * *************************************/ -void system18_set_grayscale(running_machine &machine, int enable) +void segas18_state::set_grayscale(bool enable) { - segas1x_state *state = machine.driver_data(); - - enable = (enable != 0); - if (enable != state->m_grayscale_enable) + if (enable != m_grayscale_enable) { - machine.primary_screen->update_partial(machine.primary_screen->vpos()); - state->m_grayscale_enable = enable; + machine().primary_screen->update_partial(machine().primary_screen->vpos()); + m_grayscale_enable = enable; // mame_printf_debug("Grayscale = %02X\n", enable); } } -void system18_set_vdp_enable(running_machine &machine, int enable) +void segas18_state::set_vdp_enable(bool enable) { - segas1x_state *state = machine.driver_data(); - - enable = (enable != 0); - if (enable != state->m_vdp_enable) + if (enable != m_vdp_enable) { - machine.primary_screen->update_partial(machine.primary_screen->vpos()); - state->m_vdp_enable = enable; + machine().primary_screen->update_partial(machine().primary_screen->vpos()); + m_vdp_enable = enable; #if DEBUG_VDP mame_printf_debug("VDP enable = %02X\n", enable); #endif @@ -94,14 +110,12 @@ void system18_set_vdp_enable(running_machine &machine, int enable) } -void system18_set_vdp_mixing(running_machine &machine, int mixing) +void segas18_state::set_vdp_mixing(UINT8 mixing) { - segas1x_state *state = machine.driver_data(); - - if (mixing != state->m_vdp_mixing) + if (mixing != m_vdp_mixing) { - machine.primary_screen->update_partial(machine.primary_screen->vpos()); - state->m_vdp_mixing = mixing; + machine().primary_screen->update_partial(machine().primary_screen->vpos()); + m_vdp_mixing = mixing; #if DEBUG_VDP mame_printf_debug("VDP mixing = %02X\n", mixing); #endif @@ -116,19 +130,15 @@ void system18_set_vdp_mixing(running_machine &machine, int mixing) * *************************************/ -static void draw_vdp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) +void segas18_state::draw_vdp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) { - segas1x_state *state = screen.machine().driver_data(); - int x, y; bitmap_ind8 &priority_bitmap = screen.machine().priority_bitmap; - - for (y = cliprect.min_y; y <= cliprect.max_y; y++) + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - UINT16 *src = &state->m_tmp_bitmap->pix16(y); - UINT16 *dst = &bitmap.pix16(y); - UINT8 *pri = &priority_bitmap.pix8(y); - - for (x = cliprect.min_x; x <= cliprect.max_x; x++) + UINT16 *src = &m_temp_bitmap.pix(y); + UINT16 *dst = &bitmap.pix(y); + UINT8 *pri = &priority_bitmap.pix(y); + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { UINT16 pix = src[x]; if (pix != 0xffff) @@ -148,11 +158,8 @@ static void draw_vdp(screen_device &screen, bitmap_ind16 &bitmap, const rectangl * *************************************/ -SCREEN_UPDATE_IND16( system18 ) +UINT32 segas18_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - segas1x_state *state = screen.machine().driver_data(); - int vdppri, vdplayer; - /* Current understanding of VDP mixing: @@ -184,68 +191,69 @@ SCREEN_UPDATE_IND16( system18 ) cltchitr: layer = 1 or 2 or 3, pri = 0x02 or 0x04 or 0x08 mwalk: layer = 3, pri = 0x04 or 0x08 */ - vdplayer = (state->m_vdp_mixing >> 1) & 3; - vdppri = (state->m_vdp_mixing & 1) ? (1 << vdplayer) : 0; + + int vdplayer = (m_vdp_mixing >> 1) & 3; + int vdppri = (m_vdp_mixing & 1) ? (1 << vdplayer) : 0; #if DEBUG_VDP - if (screen.machine().input().code_pressed(KEYCODE_Q)) vdplayer = 0; - if (screen.machine().input().code_pressed(KEYCODE_W)) vdplayer = 1; - if (screen.machine().input().code_pressed(KEYCODE_E)) vdplayer = 2; - if (screen.machine().input().code_pressed(KEYCODE_R)) vdplayer = 3; - if (screen.machine().input().code_pressed(KEYCODE_A)) vdppri = 0x00; - if (screen.machine().input().code_pressed(KEYCODE_S)) vdppri = 0x01; - if (screen.machine().input().code_pressed(KEYCODE_D)) vdppri = 0x02; - if (screen.machine().input().code_pressed(KEYCODE_F)) vdppri = 0x04; - if (screen.machine().input().code_pressed(KEYCODE_G)) vdppri = 0x08; + if (machine().input().code_pressed(KEYCODE_Q)) vdplayer = 0; + if (machine().input().code_pressed(KEYCODE_W)) vdplayer = 1; + if (machine().input().code_pressed(KEYCODE_E)) vdplayer = 2; + if (machine().input().code_pressed(KEYCODE_R)) vdplayer = 3; + if (machine().input().code_pressed(KEYCODE_A)) vdppri = 0x00; + if (machine().input().code_pressed(KEYCODE_S)) vdppri = 0x01; + if (machine().input().code_pressed(KEYCODE_D)) vdppri = 0x02; + if (machine().input().code_pressed(KEYCODE_F)) vdppri = 0x04; + if (machine().input().code_pressed(KEYCODE_G)) vdppri = 0x08; #endif - /* if no drawing is happening, fill with black and get out */ + // if no drawing is happening, fill with black and get out if (!segaic16_display_enable) { - bitmap.fill(get_black_pen(screen.machine()), cliprect); + bitmap.fill(get_black_pen(machine()), cliprect); return 0; } - /* if the VDP is enabled, update our tmp_bitmap */ - if (state->m_vdp_enable) - system18_vdp_update(*state->m_tmp_bitmap, cliprect); + // if the VDP is enabled, update our tmp_bitmap + if (m_vdp_enable) + system18_vdp_update(m_temp_bitmap, cliprect); - /* reset priorities */ - screen.machine().priority_bitmap.fill(0, cliprect); + // reset priorities + machine().priority_bitmap.fill(0, cliprect); - /* draw background opaquely first, not setting any priorities */ + // draw background opaquely first, not setting any priorities segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 0 | TILEMAP_DRAW_OPAQUE, 0x00); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 1 | TILEMAP_DRAW_OPAQUE, 0x00); - if (state->m_vdp_enable && vdplayer == 0) draw_vdp(screen, bitmap, cliprect, vdppri); + if (m_vdp_enable && vdplayer == 0) draw_vdp(screen, bitmap, cliprect, vdppri); - /* draw background again to draw non-transparent pixels over the VDP and set the priority */ + // draw background again to draw non-transparent pixels over the VDP and set the priority segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 0, 0x01); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_BACKGROUND, 1, 0x02); - if (state->m_vdp_enable && vdplayer == 1) draw_vdp(screen, bitmap, cliprect, vdppri); + if (m_vdp_enable && vdplayer == 1) draw_vdp(screen, bitmap, cliprect, vdppri); - /* draw foreground */ + // draw foreground segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 0, 0x02); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_FOREGROUND, 1, 0x04); - if (state->m_vdp_enable && vdplayer == 2) draw_vdp(screen, bitmap, cliprect, vdppri); + if (m_vdp_enable && vdplayer == 2) draw_vdp(screen, bitmap, cliprect, vdppri); - /* text layer */ + // text layer segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 0, 0x04); segaic16_tilemap_draw(screen, bitmap, cliprect, 0, SEGAIC16_TILEMAP_TEXT, 1, 0x08); - if (state->m_vdp_enable && vdplayer == 3) draw_vdp(screen, bitmap, cliprect, vdppri); + if (m_vdp_enable && vdplayer == 3) draw_vdp(screen, bitmap, cliprect, vdppri); - /* draw the sprites */ + // draw the sprites segaic16_sprites_draw(screen, bitmap, cliprect, 0); #if DEBUG_VDP - if (state->m_vdp_enable && screen.machine().input().code_pressed(KEYCODE_V)) + if (m_vdp_enable && machine().input().code_pressed(KEYCODE_V)) { - bitmap.fill(get_black_pen(screen.machine()), cliprect); + bitmap.fill(get_black_pen(machine()), cliprect); update_system18_vdp(bitmap, cliprect); } - if (vdp_enable && screen.machine().input().code_pressed(KEYCODE_B)) + if (vdp_enable && machine().input().code_pressed(KEYCODE_B)) { FILE *f = fopen("vdp.bin", "w"); - fwrite(state->m_tmp_bitmap->base, 1, state->m_tmp_bitmap->rowpixels * (state->m_tmp_bitmap->bpp / 8) * state->m_tmp_bitmap->height, f); + fwrite(m_temp_bitmap->base(), 1, m_temp_bitmap->rowpixels() * (m_temp_bitmap->bpp() / 8) * m_temp_bitmap->height(), f); fclose(f); } #endif diff --git a/src/mame/video/segaxbd.c b/src/mame/video/segaxbd.c index 5b0eca97ef2..67ee9579d88 100644 --- a/src/mame/video/segaxbd.c +++ b/src/mame/video/segaxbd.c @@ -2,10 +2,40 @@ Sega X-board hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ #include "emu.h" -#include "video/segaic16.h" #include "includes/segas16.h" @@ -36,7 +66,7 @@ VIDEO_START( xboard ) SCREEN_UPDATE_IND16( xboard ) { - segas1x_state *state = screen.machine().driver_data(); + segaxbd_state *state = screen.machine().driver_data(); /* if no drawing is happening, fill with black and get out */ if (!segaic16_display_enable) diff --git a/src/mame/video/segaybd.c b/src/mame/video/segaybd.c index 8e080be252e..c8053b527bd 100644 --- a/src/mame/video/segaybd.c +++ b/src/mame/video/segaybd.c @@ -2,10 +2,40 @@ Sega Y-board hardware +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ***************************************************************************/ #include "emu.h" -#include "video/segaic16.h" #include "includes/segas16.h" @@ -17,7 +47,7 @@ VIDEO_START( yboard ) { - segas1x_state *state = machine.driver_data(); + segaybd_state *state = machine.driver_data(); /* compute palette info */ segaic16_palette_init(0x2000); @@ -41,7 +71,7 @@ VIDEO_START( yboard ) SCREEN_UPDATE_IND16( yboard ) { - segas1x_state *state = screen.machine().driver_data(); + segaybd_state *state = screen.machine().driver_data(); rectangle yboard_clip; /* if no drawing is happening, fill with black and get out */