diff options
Diffstat (limited to 'src/mame/drivers/spacefb.c')
-rw-r--r-- | src/mame/drivers/spacefb.c | 567 |
1 files changed, 567 insertions, 0 deletions
diff --git a/src/mame/drivers/spacefb.c b/src/mame/drivers/spacefb.c new file mode 100644 index 00000000000..c32a34baac3 --- /dev/null +++ b/src/mame/drivers/spacefb.c @@ -0,0 +1,567 @@ +/*************************************************************************** + + Space Firebird hardware + + Memory Map figured out by Chris Hardy, Paul Johnson and Andy Clark + MAME driver by Chris Hardy + + Schematics scanned and provided by James Twine + Thanks to Gary Walton for lending me his REAL Space Firebird + + Known issues/to-do's: + * Bullet colors are incorrect. The schematics cannot be right, so + I am using pure red for now + * Analog sounds + + + 0000-3FFF ROM Code + 8000-83FF RAM Sprite RAM + C000-C7FF RAM Game ram + + IO Ports + + IN: + Port 0 + + bit 0 = Player 1 Right + bit 1 = Player 1 Left + bit 2 = unused + bit 3 = unused + bit 4 = Player 1 Escape + bit 5 = unused + bit 6 = unused + bit 7 = Player 1 Fire + + Port 1 + + bit 0 = Player 2 Right + bit 1 = Player 2 Left + bit 2 = unused + bit 3 = unused + bit 4 = Player 2 Escape + bit 5 = unused + bit 6 = unused + bit 7 = Player 2 Fire + + Port 2 + + bit 0 = unused + bit 1 = unused + bit 2 = Start 1 Player game + bit 3 = Start 2 Players game + bit 4 = unused + bit 5 = unused + bit 6 = Test switch + bit 7 = Coin and Service switch + + Port 3 + + bit 0 = Dipswitch 1 + bit 1 = Dipswitch 2 + bit 2 = Dipswitch 3 + bit 3 = Dipswitch 4 + bit 4 = Dipswitch 5 + bit 5 = Dipswitch 6 + bit 6 = unused (Debug switch - Code jumps to $3800 on reset if on) + bit 7 = unused + + OUT: + Port 0 - Video + + bit 0 = Screen flip. (RV) + bit 1 = unused + bit 2 = unused + bit 3 = unused + bit 4 = unused + bit 5 = Char/Sprite Bank switch (VREF) + bit 6 = Turns on Bit 2 of the color PROM. Used to change the bird colors. (CREF) + bit 7 = unused + + Port 1 + bit 0 = discrete sound (Enemy death) + bit 1 = INT to 8035 + bit 2 = T1 input to 8035 + bit 3 = PB4 input to 8035 + bit 4 = PB5 input to 8035 + bit 5 = T0 input to 8035 + bit 6 = discrete sound (Ship fire) + bit 7 = discrete sound (Explosion noise) + + Port 2 - Video control + + These are passed to the sound board and are used to produce a + red flash effect when you die. + + bit 0 = CONT R Changes contrast of the red/green/blue part of the stars. This is used to make the starfield flicker + bit 1 = CONT G + bit 2 = CONT B + bit 3 = ALRD Turns background red on + bit 4 = ALBU Turns background blue on + bit 5 = unused + bit 6 = unused + bit 7 = ALBA Turns off star field (no star field) + + +****************************************************************************/ + +#include "driver.h" +#include "spacefb.h" +#include "cpu/i8039/i8039.h" +#include "sound/dac.h" + + + +/************************************* + * + * Interrupt generation + * + *************************************/ + +static emu_timer *interrupt_timer; + + +static TIMER_CALLBACK( interrupt_callback ) +{ + int next_vpos; + + /* compute vector and set the interrupt line */ + int vpos = video_screen_get_vpos(0); + UINT8 vector = 0xc7 | ((vpos & 0x40) >> 2) | ((~vpos & 0x40) >> 3); + cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, vector); + + /* set up for next interrupt */ + if (vpos == SPACEFB_INT_TRIGGER_COUNT_1) + next_vpos = SPACEFB_INT_TRIGGER_COUNT_2; + else + next_vpos = SPACEFB_INT_TRIGGER_COUNT_1; + + timer_adjust(interrupt_timer, video_screen_get_time_until_pos(0, next_vpos, 0), 0, attotime_zero); +} + + +static void create_interrupt_timer(void) +{ + interrupt_timer = timer_alloc(interrupt_callback); +} + + +static void start_interrupt_timer(void) +{ + timer_adjust(interrupt_timer, video_screen_get_time_until_pos(0, SPACEFB_INT_TRIGGER_COUNT_1, 0), 0, attotime_zero); +} + + + +/************************************* + * + * Output port writes + * + *************************************/ + +static WRITE8_HANDLER( spacefb_port_0_w ) +{ + spacefb_set_flip_screen((data >> 0) & 0x01); + + spacefb_set_gfx_bank((data >> 5) & 0x01); + + spacefb_set_palette_bank((data >> 6) & 0x01); +} + + +static WRITE8_HANDLER( spacefb_port_2_w ) +{ + spacefb_set_color_contrast_r((data >> 0) & 0x01); + + spacefb_set_color_contrast_g((data >> 1) & 0x01); + + spacefb_set_color_contrast_b((data >> 2) & 0x01); + + spacefb_set_background_red((data >> 3) & 0x01); + + spacefb_set_background_blue((data >> 4) & 0x01); + + spacefb_set_disable_star_field((data >> 7) & 0x01); + +} + + + +/************************************* + * + * Machine start + * + *************************************/ + +static MACHINE_START( spacefb ) +{ + create_interrupt_timer(); +} + + + +/************************************* + * + * Machine reset + * + *************************************/ + +static MACHINE_RESET( spacefb ) +{ + /* the 3 output ports are cleared on reset */ + spacefb_port_0_w(0, 0); + spacefb_port_1_w(0, 0); + spacefb_port_2_w(0, 0); + + start_interrupt_timer(); +} + + + +/************************************* + * + * Memory handlers + * + *************************************/ + +static ADDRESS_MAP_START( spacefb_main_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x4000, 0x7fff) AM_NOP + AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x3c00) AM_RAM AM_BASE(&spacefb_videoram) AM_SIZE(&spacefb_videoram_size) + AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3000) AM_RAM + AM_RANGE(0xc800, 0xcfff) AM_MIRROR(0x3000) AM_NOP +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( spacefb_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(10) ) + AM_RANGE(0x0000, 0x03ff) AM_ROM +ADDRESS_MAP_END + + + +/************************************* + * + * Port handlers + * + *************************************/ + +static ADDRESS_MAP_START( spacefb_main_io_map, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(3) ) + AM_RANGE(0x00, 0x00) AM_READ(input_port_0_r) + AM_RANGE(0x01, 0x01) AM_READ(input_port_1_r) + AM_RANGE(0x02, 0x02) AM_READ(input_port_2_r) + AM_RANGE(0x03, 0x03) AM_READ(input_port_3_r) + AM_RANGE(0x04, 0x07) AM_READNOP /* yes, this is correct (1-of-8 decoder) */ + + AM_RANGE(0x00, 0x00) AM_MIRROR(0x04) AM_WRITE(spacefb_port_0_w) + AM_RANGE(0x01, 0x01) AM_MIRROR(0x04) AM_WRITE(spacefb_port_1_w) + AM_RANGE(0x02, 0x02) AM_MIRROR(0x04) AM_WRITE(spacefb_port_2_w) + AM_RANGE(0x03, 0x03) AM_MIRROR(0x04) AM_WRITENOP +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( spacefb_audio_io_map, ADDRESS_SPACE_IO, 8 ) + AM_RANGE(I8039_p1, I8039_p1) AM_WRITE(DAC_0_data_w) + AM_RANGE(I8039_p2, I8039_p2) AM_READ(spacefb_audio_p2_r) + AM_RANGE(I8039_t0, I8039_t0) AM_READ(spacefb_audio_t0_r) + AM_RANGE(I8039_t1, I8039_t1) AM_READ(spacefb_audio_t1_r) +ADDRESS_MAP_END + + + +/************************************* + * + * Port definitions + * + *************************************/ + +static INPUT_PORTS_START( spacefb ) + PORT_START /* IN0 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + + PORT_START /* IN1 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL + + PORT_START /* Coin - Start */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE ) /* Test ? */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) + + PORT_START /* DSW0 */ + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:1,2") + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x01, "4" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x03, "6" ) + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:3,4") + PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:5") + PORT_DIPSETTING( 0x00, "5000" ) + PORT_DIPSETTING( 0x10, "8000" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:6") + PORT_DIPSETTING( 0x20, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) +INPUT_PORTS_END + + +/* same as Space Firebird, except for the difficulty switch */ +static INPUT_PORTS_START( spacedem ) + PORT_START /* IN0 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + + PORT_START /* IN1 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL + + PORT_START /* Coin - Start */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE ) /* Test ? */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) + + PORT_START /* DSW0 */ + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x01, "4" ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x00, "5000" ) + PORT_DIPSETTING( 0x10, "8000" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) +INPUT_PORTS_END + + + +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_DRIVER_START( spacefb ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, SPACEFB_MAIN_CPU_CLOCK) + MDRV_CPU_PROGRAM_MAP(spacefb_main_map,0) + MDRV_CPU_IO_MAP(spacefb_main_io_map,0) + + MDRV_CPU_ADD(I8035, SPACEFB_AUDIO_CPU_CLOCK) + MDRV_CPU_PROGRAM_MAP(spacefb_audio_map,0) + MDRV_CPU_IO_MAP(spacefb_audio_io_map,0) + + MDRV_INTERLEAVE(3) + + MDRV_MACHINE_START(spacefb) + MDRV_MACHINE_RESET(spacefb) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_VIDEO_START(spacefb) + MDRV_VIDEO_UPDATE(spacefb) + + MDRV_SCREEN_ADD("main", 0) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) + MDRV_SCREEN_RAW_PARAMS(SPACEFB_PIXEL_CLOCK, SPACEFB_HTOTAL, SPACEFB_HBEND, SPACEFB_HBSTART, SPACEFB_VTOTAL, SPACEFB_VBEND, SPACEFB_VBSTART) + + /* audio hardware */ + MDRV_IMPORT_FROM(spacefb_audio) + +MACHINE_DRIVER_END + + + +/************************************* + * + * ROM definitions + * + *************************************/ + +ROM_START( spacefb ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "5e.cpu", 0x0000, 0x0800, CRC(2d406678) SHA1(9dff1980fc5267313f99f9f67d2d83eda8aae00e) ) + ROM_LOAD( "5f.cpu", 0x0800, 0x0800, CRC(89f0c34a) SHA1(4d8652fb7c4f22ddbac8c2d7ca7df675eaa2a447) ) + ROM_LOAD( "5h.cpu", 0x1000, 0x0800, CRC(c4bcac3e) SHA1(5364d6fc9d3402b2def163dee7c39fe3fe57eea3) ) + ROM_LOAD( "5i.cpu", 0x1800, 0x0800, CRC(61c00a65) SHA1(afc93e320478c70b3ddca8375fd648c9f2572dab) ) + ROM_LOAD( "5j.cpu", 0x2000, 0x0800, CRC(598420b9) SHA1(92ea695177c7297699d1d18f166e98392ef0e0f9) ) + ROM_LOAD( "5k.cpu", 0x2800, 0x0800, CRC(1713300c) SHA1(9a7b6cc0d79cccadd4988e0e791c1598813b6552) ) + ROM_LOAD( "5m.cpu", 0x3000, 0x0800, CRC(6286f534) SHA1(c47d0df85a52c774a4bc26351fdae18795062b6e) ) + ROM_LOAD( "5n.cpu", 0x3800, 0x0800, CRC(1c9f91ee) SHA1(481a309fe9aa9ce6fd18d7d908c18790f594057d) ) + + ROM_REGION( 0x1000, REGION_CPU2, 0 ) + ROM_LOAD( "ic20.snd", 0x0000, 0x0400, CRC(1c8670b3) SHA1(609124caa11498fc6a6bdf6cdbb8003bbc249dd8) ) + + ROM_REGION( 0x1000, REGION_GFX1, 0 ) /* sprites */ + ROM_LOAD( "5k.vid", 0x0000, 0x0800, CRC(236e1ff7) SHA1(575b8ed9ab054a864207e0fde3ae93cdcafbebf2) ) + ROM_LOAD( "6k.vid", 0x0800, 0x0800, CRC(bf901a4e) SHA1(71207ad1ca60aa617dbbc3cd2e4e42520b7c8513) ) + + ROM_REGION( 0x0100, REGION_GFX2, 0 ) /* bullets */ + ROM_LOAD( "4i.vid", 0x0000, 0x0100, CRC(528e8533) SHA1(8e41eee1016c98a4f08acbd902daf8e32aa9d9ab) ) + + ROM_REGION( 0x0020, REGION_PROMS, 0 ) + ROM_LOAD( "mb7051.3n", 0x0000, 0x0020, CRC(465d07af) SHA1(25e246f7674c25d05e5f6e68db88c15aaa10cee1) ) +ROM_END + +ROM_START( spacefbg ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "tst-c.5e", 0x0000, 0x0800, CRC(07949110) SHA1(b090e629203c54fc0937d82b0cfe355153a65d6b) ) + ROM_LOAD( "tst-c.5f", 0x0800, 0x0800, CRC(ce591929) SHA1(c9cf7b8a77c108e004e8863b6a08392204e9d434) ) + ROM_LOAD( "tst-c.5h", 0x1000, 0x0800, CRC(55d34ea5) SHA1(d98125e4a33c00285a14cb6cc9880d215b4c29d2) ) + ROM_LOAD( "tst-c.5i", 0x1800, 0x0800, CRC(a11e2881) SHA1(c084a0975b88a981f23a52baa6b8c239dae00e5c) ) + ROM_LOAD( "tst-c.5j", 0x2000, 0x0800, CRC(a6aff352) SHA1(a7fd6b5fe5c76aad726d599142b4cca88109fa10) ) + ROM_LOAD( "tst-c.5k", 0x2800, 0x0800, CRC(f4213603) SHA1(cf39027f2a77cab02d1117025a8eccb868f6a1b0) ) + ROM_LOAD( "5m.cpu", 0x3000, 0x0800, CRC(6286f534) SHA1(c47d0df85a52c774a4bc26351fdae18795062b6e) ) + ROM_LOAD( "5n.cpu", 0x3800, 0x0800, CRC(1c9f91ee) SHA1(481a309fe9aa9ce6fd18d7d908c18790f594057d) ) + + ROM_REGION( 0x1000, REGION_CPU2, 0 ) + ROM_LOAD( "ic20.snd", 0x0000, 0x0400, CRC(1c8670b3) SHA1(609124caa11498fc6a6bdf6cdbb8003bbc249dd8) ) + + ROM_REGION( 0x1000, REGION_GFX1, 0 ) /* sprites */ + ROM_LOAD( "tst-v.5k", 0x0000, 0x0800, CRC(bacc780d) SHA1(fe498b477bbf7f03fd256de2f799483383a7e819) ) + ROM_LOAD( "tst-v.6k", 0x0800, 0x0800, CRC(1645ff26) SHA1(34cfa0e6221bf53b1bda8609eb14fbcc5fb5bdcd) ) + + ROM_REGION( 0x0100, REGION_GFX2, 0 ) /* bullets */ + ROM_LOAD( "4i.vid", 0x0000, 0x0100, CRC(528e8533) SHA1(8e41eee1016c98a4f08acbd902daf8e32aa9d9ab) ) + + ROM_REGION( 0x0020, REGION_PROMS, 0 ) + ROM_LOAD( "mb7051.3n", 0x0000, 0x0020, CRC(465d07af) SHA1(25e246f7674c25d05e5f6e68db88c15aaa10cee1) ) +ROM_END + +ROM_START( spacebrd ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "sb5e.cpu", 0x0000, 0x0800, CRC(232d66b8) SHA1(d443651819007828a40cea05b6936b762375c48f) ) + ROM_LOAD( "sb5f.cpu", 0x0800, 0x0800, CRC(99504327) SHA1(043182097680b5d6164157055a1a5b95759ca64d) ) + ROM_LOAD( "sb5h.cpu", 0x1000, 0x0800, CRC(49a26fe5) SHA1(851f62df651aa180b6fa236f4c54ed7791d92a21) ) + ROM_LOAD( "sb5i.cpu", 0x1800, 0x0800, CRC(c23025da) SHA1(ccc73ca9754b04e49733661cbd9e788b13163100) ) + ROM_LOAD( "sb5j.cpu", 0x2000, 0x0800, CRC(5e97baf0) SHA1(5e1985b8e3354a0c3454a5e43f80e69f1e1f77c0) ) + ROM_LOAD( "5k.cpu", 0x2800, 0x0800, CRC(1713300c) SHA1(9a7b6cc0d79cccadd4988e0e791c1598813b6552) ) + ROM_LOAD( "sb5m.cpu", 0x3000, 0x0800, CRC(4cbe92fc) SHA1(903b617e42f740e94a6edb6a973dc0d57ac0abee) ) + ROM_LOAD( "sb5n.cpu", 0x3800, 0x0800, CRC(1a798fbf) SHA1(65ff2fe91c2037378314c4a68b2bd21fd167c64a) ) + + ROM_REGION( 0x1000, REGION_CPU2, 0 ) + ROM_LOAD( "ic20.snd", 0x0000, 0x0400, CRC(1c8670b3) SHA1(609124caa11498fc6a6bdf6cdbb8003bbc249dd8) ) + + ROM_REGION( 0x1000, REGION_GFX1, 0 ) /* sprites */ + ROM_LOAD( "5k.vid", 0x0000, 0x0800, CRC(236e1ff7) SHA1(575b8ed9ab054a864207e0fde3ae93cdcafbebf2) ) + ROM_LOAD( "6k.vid", 0x0800, 0x0800, CRC(bf901a4e) SHA1(71207ad1ca60aa617dbbc3cd2e4e42520b7c8513) ) + + ROM_REGION( 0x0100, REGION_GFX2, 0 ) /* bullets */ + ROM_LOAD( "4i.vid", 0x0000, 0x0100, CRC(528e8533) SHA1(8e41eee1016c98a4f08acbd902daf8e32aa9d9ab) ) + + ROM_REGION( 0x0020, REGION_PROMS, 0 ) + ROM_LOAD( "spcbird.clr", 0x0000, 0x0020, CRC(25c79518) SHA1(e8f7e8b3d0cf1ed9d723948548f58abf0e2c6d1f) ) +ROM_END + +/* only a few bytes are different between this and spacebrd above */ +ROM_START( spacefbb ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "fc51", 0x0000, 0x0800, CRC(5657bd2f) SHA1(0e615a7dd5efbbf6f543480bc150f45089c41d32) ) + ROM_LOAD( "fc52", 0x0800, 0x0800, CRC(303b0294) SHA1(a2f5637e201739b440e7ea0868d2d5745fbb4f5b) ) + ROM_LOAD( "sb5h.cpu", 0x1000, 0x0800, CRC(49a26fe5) SHA1(851f62df651aa180b6fa236f4c54ed7791d92a21) ) + ROM_LOAD( "sb5i.cpu", 0x1800, 0x0800, CRC(c23025da) SHA1(ccc73ca9754b04e49733661cbd9e788b13163100) ) + ROM_LOAD( "fc55", 0x2000, 0x0800, CRC(946bee5d) SHA1(6e668cec5986af3d319bf9aa8962a3d9008d0156) ) + ROM_LOAD( "5k.cpu", 0x2800, 0x0800, CRC(1713300c) SHA1(9a7b6cc0d79cccadd4988e0e791c1598813b6552) ) + ROM_LOAD( "sb5m.cpu", 0x3000, 0x0800, CRC(4cbe92fc) SHA1(903b617e42f740e94a6edb6a973dc0d57ac0abee) ) + ROM_LOAD( "sb5n.cpu", 0x3800, 0x0800, CRC(1a798fbf) SHA1(65ff2fe91c2037378314c4a68b2bd21fd167c64a) ) + + ROM_REGION( 0x1000, REGION_CPU2, 0 ) + ROM_LOAD( "fb.snd", 0x0000, 0x0400, CRC(f7a59492) SHA1(22bdc02c72086c38acd9d9675da54ce6ba3f80a3) ) + + ROM_REGION( 0x1000, REGION_GFX1, 0 ) /* sprites */ + ROM_LOAD( "fc59", 0x0000, 0x0800, CRC(a00ad16c) SHA1(6130b2250b492b56e3ea94e44f7b2ddf45908d00) ) + ROM_LOAD( "6k.vid", 0x0800, 0x0800, CRC(bf901a4e) SHA1(71207ad1ca60aa617dbbc3cd2e4e42520b7c8513) ) + + ROM_REGION( 0x0100, REGION_GFX2, 0 ) /* bullets */ + ROM_LOAD( "4i.vid", 0x0000, 0x0100, CRC(528e8533) SHA1(8e41eee1016c98a4f08acbd902daf8e32aa9d9ab) ) + + ROM_REGION( 0x0020, REGION_PROMS, 0 ) + ROM_LOAD( "mb7051.3n", 0x0000, 0x0020, CRC(465d07af) SHA1(25e246f7674c25d05e5f6e68db88c15aaa10cee1) ) +ROM_END + +ROM_START( spacedem ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "sdm-c-5e", 0x0000, 0x0800, CRC(be4b9cbb) SHA1(345ea1e56754e0c8300148b53346dbec50b3608e) ) + ROM_LOAD( "sdm-c-5f", 0x0800, 0x0800, CRC(0814f964) SHA1(0186d11ca98f4b2e4c2572db9d440456370275e7) ) + ROM_LOAD( "sdm-c-5h", 0x1000, 0x0800, CRC(ebfff682) SHA1(e060627de302a9ce125d939d9890739d2154a507) ) + ROM_LOAD( "sdm-c-5i", 0x1800, 0x0800, CRC(dd7e1378) SHA1(94a756036e7d03c42ee896b794cb1f8753a67b91) ) + ROM_LOAD( "sdm-c-5j", 0x2000, 0x0800, CRC(98334fda) SHA1(9990bbfb2aa4d953e531bb49eab1c3a999b78b9c) ) + ROM_LOAD( "sdm-c-5k", 0x2800, 0x0800, CRC(ba4933b2) SHA1(9e5003849185ea35b5929c9a8ae188a87bb522cc) ) + ROM_LOAD( "sdm-c-5m", 0x3000, 0x0800, CRC(14d3c656) SHA1(55522df8c2e484b8d5d4a32bf7cfb2b30dcdab4a) ) + ROM_LOAD( "sdm-c-5n", 0x3800, 0x0800, CRC(7e0e41b0) SHA1(e7dd509ab36e0f9be6350b5fa9de4694224477db) ) + + ROM_REGION( 0x1000, REGION_CPU2, 0 ) + ROM_LOAD( "sdm-e-20", 0x0000, 0x0400, CRC(55f40a0b) SHA1(8dff27b636f7f1831f71816505e451cf97fc3f98) ) + + ROM_REGION( 0x1000, REGION_GFX1, 0 ) /* sprites */ + ROM_LOAD( "sdm-v-5k", 0x0000, 0x0800, CRC(55758e4d) SHA1(1338b45f76f5a31a5350c953eac36cc543fbe62e) ) + ROM_LOAD( "sdm-v-6k", 0x0800, 0x0800, CRC(3fcbb20c) SHA1(674de509f7b6c5d7c41112881b0c3093b9b176a0) ) + + ROM_REGION( 0x0100, REGION_GFX2, 0 ) /* bullets */ + ROM_LOAD( "4i.vid", 0x0000, 0x0100, CRC(528e8533) SHA1(8e41eee1016c98a4f08acbd902daf8e32aa9d9ab) ) + + ROM_REGION( 0x0020, REGION_PROMS, 0 ) + ROM_LOAD( "sdm-v-3n", 0x0000, 0x0020, CRC(6d8ad169) SHA1(6ccc931774183e14e28bb9b93223d366fd596f30) ) +ROM_END + + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1980, spacefb, 0, spacefb, spacefb, 0, ROT270, "Nintendo", "Space Firebird (Nintendo)", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) +GAME( 1980, spacefbg, spacefb, spacefb, spacefb, 0, ROT270, "Gremlin", "Space Firebird (Gremlin)", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) +GAME( 1980, spacebrd, spacefb, spacefb, spacefb, 0, ROT270, "bootleg", "Space Bird (bootleg)", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) +GAME( 1980, spacefbb, spacefb, spacefb, spacefb, 0, ROT270, "bootleg", "Space Firebird (bootleg)", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) +GAME( 1980, spacedem, spacefb, spacefb, spacedem, 0, ROT270, "Nintendo (Fortrek license)", "Space Demon", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) |