diff options
Diffstat (limited to 'src/mame/drivers/turbosub.c')
-rw-r--r-- | src/mame/drivers/turbosub.c | 464 |
1 files changed, 464 insertions, 0 deletions
diff --git a/src/mame/drivers/turbosub.c b/src/mame/drivers/turbosub.c new file mode 100644 index 00000000000..90a4d7e82b7 --- /dev/null +++ b/src/mame/drivers/turbosub.c @@ -0,0 +1,464 @@ +/*********************************************************************** + + Entertainment Sciences Real-Time Image Processor System + +Turbo Sub 1986 +Bouncer 1983 (No ROMs available) + +Hardware +======== +* 6809 (Game Processor) + - i8251A (USART) +* 6809 (Frame Processor) +* 6809 (Sound Processor) + - TMS5220NL + - DAC +* AM29116DC (Video Processor) + +Useful References +================= +http://www.turbosub.com/schematics.htm +http://www.turbosub.com/ripdoc1.jpg (1 to 4) +http://www.ionpool.net/arcade/es/turbo_sub.html +http://www.bitsavers.org/pdf/amd/_dataSheets/29116_dataSheet_Mar86.pdf + +Note: The schematics do not represent exactly the final hardware. + +Information +=========== + +The game processor is responsible for gameplay and reading inputs +(keypad, ADC and digital). It shares 16kB of RAM with the frame processor. +According to the schematics, it also has access to collision detection RAM +and palette RAM used by the video system. + +The frame processor organises data supplied by the game processor into a +suitable format for the video processor and video hardware. It shares 8kB of +banked RAM (Frame Drive Table) with the video processor. + +The video processor instructions are stored in 6 PROMS (which are ARE +NOT DUMPED). + +Each CPU has a R/W status port used to communicate with the other CPUs +and hardware. + +***********************************************************************/ + +#include "driver.h" +#include "cpu/m6809/m6809.h" + +/* Set to 1 to display test results and skip on errors */ +#define ROM_PATCHES 1 + +/* Frame Drive Table bank indicators */ +static int _FASEL = 0; +static int _FBSEL = 1; + +static UINT8 *FDT_A; +static UINT8 *FDT_B; +static UINT8 INTER_CPU_REG; + +static VIDEO_START( turbosub ) +{ +} + +static VIDEO_UPDATE( turbosub ) +{ + return 0; +} + + +static MACHINE_RESET( turbosub ) +{ +#if ROM_PATCHES + UINT8 *rom = (UINT8 *)memory_region(REGION_CPU1); + + rom[0xf564]=0; /* Display test status */ + rom[0xf60a]=0x20; /* Skip on error */ +#endif +} + +static DRIVER_INIT( turbosub ) +{ + FDT_A = auto_malloc(0x1000); + FDT_B = auto_malloc(0x1000); +} + +/* i8251A UART */ +static WRITE8_HANDLER( UART_W ) +{ + if (offset==0) + mame_printf_debug("%c",data); +} + +static READ8_HANDLER( UART_R ) +{ + return 0; +} + +/* + Game Processor + ============== + +Status Write Status Read +============ =========== +0: 6809 #0 ROM bank bit 0 0: Frame CPU status out D0 +1: 6809 #0 ROM bank bit 1 1: Frame CPU status out D0 +2: 2: Frame CPU status out D0 +3: 3: Frame CPU status out D0 +4: ? (usually 1) 4: +5: ? (usually 1) 5: +6: V0? (AM29116)(active high?) 6: +7: Game/Frame CPU NMI 7: /RIPERR ? + +*/ + +static READ8_HANDLER( G_STATUS_R ) +{ + return 0x80 | INTER_CPU_REG; +} + +static WRITE8_HANDLER( G_STATUS_W ) +{ + int bankaddress; + UINT8 *ROM = memory_region(REGION_CPU1); + bankaddress = 0x10000 + (data & 0x03) * 0x10000; + memory_set_bankptr(1,&ROM[bankaddress]); + + cpunum_set_input_line(0, INPUT_LINE_NMI, (data&0x80) ? ASSERT_LINE : CLEAR_LINE); + cpunum_set_input_line(1, INPUT_LINE_NMI, (data&0x80) ? ASSERT_LINE : CLEAR_LINE); +} + +/* + Frame Processor + =============== + +Status Write Status Read +============ =========== +0: Game CPU status in D0 0: /VBLANK ? +1: Game CPU status in D1 1: +2: Game CPU status in D2 2: +3: Game CPU status in D3 3: +4: 4: +5: 5: +6: 6: /FBSEL +7: 7: + +*/ + +static READ8_HANDLER( F_STATUS_R ) +{ + return (_FBSEL << 6); +} + +static WRITE8_HANDLER( F_STATUS_W ) +{ + INTER_CPU_REG = data; +} + +static WRITE8_HANDLER( FRAME ) +{ + _FASEL = !_FASEL; + _FBSEL = !_FBSEL; +} + +static READ8_HANDLER( FDT_R ) +{ + if(!_FASEL) + return FDT_A[offset]; + else + return FDT_B[offset]; +} + +static WRITE8_HANDLER( FDT_W ) +{ + if(!_FASEL) + FDT_A[offset] = data; + else + FDT_B[offset] = data; +} + +static INPUT_PORTS_START( turbosub ) +PORT_START +INPUT_PORTS_END + +/* +TURBOSUB.U85 +============ + +Vectors +======= + +Reset = E002 +/NMI = E3D0 (Not used = RTI) +SWI = E8D0 +IRQ = E133 +FIRQ = E319 +Others = E3D0 (Not used = RTI) + + +Self-tests (initiated by CPU 0) +=============================== + + f561: LDY, #$0001 Change to 0 to print out test results. + f737: JMP [A,X] A = test number/2 + + Test Loc. Desc. Status + ==== ==== ===== ====== + 0-16 CPU 0 ROM checksums OK + 17 CPU 0 RAM 0000-07ff OK + 18 CPU 0 RAM 0800-0fff OK + 19 CPU 0 RAM 1000-17ff OK + 20 CPU 0 RAM 1800-1fff OK + 21 CPU 0 RAM 2000-27ff OK + 22 CPU 0 RAM 2800-2fff OK + 23 CPU 0 RAM 3000-37ff OK + 24 0xf90d ? FAIL + [4800]<-b10010000 + [4800]<-b11010000 + Expect bit 7 of [4800] == 1 on SECOND access or thereafter. + + 25 0xf966 CPU 0<->1 communication test OK + 26 0xf98b CPU 1 ROM e000-ffff checksum OK + 27 0xf990 CPU 1 RAM 3000-37ff OK + 28 0xf995 CPU 1 RAM 0000-0fff OK + 29 0xf99a CPU 1 RAM 1000-17ff OK + 30 0xf99f CPU 1 RAM 1800-1fff OK + 31 0xf9a4 CPU 1 RAM 2000-27ff OK + 32 0xf9a9 CPU 1 RAM 2800-2fff OK + 33 0xf9ae CPU 1 RAM 3000-37ff OK + 34 0xf9b3 CPU 1 RAM 3800-3fff OK + + 35 0xf9dd/0xf115 FAIL + + 36 0xf9e3/f151 TEST banked FDT? OK + 37 0xf9e3 TEST banked FDT? OK + 38 0xf9e3 CPU 1 FDT (even bytes) OK + 39 0xf9e3 CPU 1 FDT (odd bytes) OK + + 40 0xfa06 FAIL + 41 0xfafd OK + 42 0xfb0e FAIL + 43 0xfb2a FAIL + 44 0xfbc9 FAIL + 45 0xfd61 FAIL + 46 0xfd70 FAIL + 47 0xfd97 FAIL + 48 0xfdc9 FAIL + 49 0xfdee FAIL + 50 0xfe05 FAIL + 51 0xfe3d FAIL + 52 0xfe54 FAIL + 53 0xfe6b FAIL + 54 0xfe82 FAIL + 55 0xfe99 FAIL +*/ + +static ADDRESS_MAP_START( game_cpu_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_RAM AM_SHARE(1) + AM_RANGE(0x40ff, 0x40ff) AM_RAM /* W */ + AM_RANGE(0x41ff, 0x41ff) AM_RAM /* W */ + AM_RANGE(0x42ff, 0x4300) AM_RAM /* W */ + AM_RANGE(0x4800, 0x4800) AM_READWRITE(G_STATUS_R, G_STATUS_W) /* Status port */ + AM_RANGE(0x4C00, 0x4C00) AM_RAM /* R/W - An input device? (doesn't enter auto mode depending on read) */ + AM_RANGE(0x5000, 0x5000) AM_RAM /* Write - related to 4C00. Bit 8 = ? bits0..3 =???? */ + AM_RANGE(0x5400, 0x54ff) AM_RAM /* UART buffer? */ + AM_RANGE(0x5c00, 0x5c01) AM_READWRITE(UART_R, UART_W) /* i8251A USART */ + AM_RANGE(0x6000, 0xdfff) AM_READWRITE(MRA8_BANK1, MWA8_ROM) /* Bank switched ROMs */ + AM_RANGE(0xe000, 0xffff) AM_ROM +ADDRESS_MAP_END + +/* +TURBOSUB.U63 +============ + +Vectors +======= + +Reset: EF2A +/NMI: EF30 +Others: E064 + +*/ + +static ADDRESS_MAP_START( frame_cpu_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_RAM AM_SHARE(1) /* 16kB RAM: Shared with game CPU */ + AM_RANGE(0x4000, 0x4fff) AM_READWRITE(FDT_R, FDT_W) /* 8kB RAM: Frame Drive Table (banked) */ + AM_RANGE(0x6000, 0x6000) AM_READWRITE(F_STATUS_R, F_STATUS_W) /* Status port */ + AM_RANGE(0x8000, 0x8000) AM_WRITE(FRAME) + AM_RANGE(0xc000, 0xffff) AM_ROM +ADDRESS_MAP_END + +/* +TURBOSUB.U66 +============ + +Vectors +======= + +Reset: ecb5 ` +/NMI: ecb5 +FIRQ: e114 +IRQ: e0d3 + +SWI: e13d +SWI2: e13d +SWI3: e13d + +*/ + + +/* Sound CPU */ + +static ADDRESS_MAP_START( sound_cpu_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x07ff) AM_RAM + AM_RANGE(0x2008, 0x2008) AM_RAM /* R=status line? D7 0=Ready? 1=Not ready? */ + AM_RANGE(0x2009, 0x2009) AM_RAM /* W (only written once - with value read from 2008) */ + AM_RANGE(0x200a, 0x200b) AM_RAM /* W 16-bit value during FIRQ */ + AM_RANGE(0x200c, 0x200c) AM_RAM /* W */ + AM_RANGE(0x200d, 0x200d) AM_RAM /* W - 03 */ + AM_RANGE(0x200e, 0x200e) AM_RAM /* R/W - communication with game processor */ + AM_RANGE(0x200f, 0x200f) AM_RAM /* R/W - communication with game processor */ + AM_RANGE(0x2020, 0x2020) AM_RAM /* W - 42 */ + AM_RANGE(0x2021, 0x2021) AM_RAM /* W - 42,1 and R during FIRQ? */ + AM_RANGE(0x2022, 0x2023) AM_RAM /* R/W rarely */ + AM_RANGE(0x2024, 0x2025) AM_RAM /* R/W rarely */ + AM_RANGE(0x8000, 0x8006) AM_RAM /* R */ + AM_RANGE(0xc000, 0xffff) AM_ROM +ADDRESS_MAP_END + + +static MACHINE_DRIVER_START( turbosub ) + + MDRV_CPU_ADD(M6809E,4000000) + MDRV_CPU_PROGRAM_MAP(game_cpu_map,0) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) /* Unverified */ + + MDRV_CPU_ADD(M6809E,4000000) + MDRV_CPU_PROGRAM_MAP(frame_cpu_map,0) + + MDRV_CPU_ADD(M6809E,4000000) + MDRV_CPU_PROGRAM_MAP(sound_cpu_map,0) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(34*8, 34*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 34*8-1, 0, 34*8-1) + MDRV_PALETTE_LENGTH(512) + MDRV_MACHINE_RESET( turbosub ) + MDRV_INTERLEAVE(100) + + MDRV_VIDEO_START(turbosub) + MDRV_VIDEO_UPDATE(turbosub) +MACHINE_DRIVER_END + +ROM_START( turbosub ) + ROM_REGION( 0xc0000, REGION_USER1, 0) /* Non-bankswitched, 6809 #0 code */ + ROM_LOAD( "turbosub.u85", 0x18000, 0x4000, CRC(eabb9509) SHA1(cbfb6c5becb3fe1b4ed729e92a0f4029a5df7d67) ) + + ROM_REGION( 0x48000, REGION_CPU1, 0 ) /* Bankswitched 6809 code */ + ROM_LOAD( "turbosub.u82", 0x10000, 0x2000, CRC(de32eb6f) SHA1(90bf31a5adf261d47b4f52e93b5e97f343b7ebf0) ) + ROM_CONTINUE( 0x20000, 0x2000 ) + ROM_LOAD( "turbosub.u81", 0x12000, 0x2000, CRC(9ae09613) SHA1(9b5ada4a21473b30be98bcc461129b6ed4e0bb11) ) + ROM_CONTINUE( 0x22000, 0x2000 ) + ROM_LOAD( "turbosub.u87", 0x14000, 0x2000, CRC(ad2284f7) SHA1(8e11b8ad0a98dd1fe6ec8f7ea9e6e4f4a45d8a1b) ) + ROM_CONTINUE( 0x24000, 0x2000 ) + ROM_LOAD( "turbosub.u86", 0x16000, 0x2000, CRC(4f51e6fd) SHA1(8f51ac6412aace29279ce7b02cad45ed681c2065) ) + ROM_CONTINUE( 0x26000, 0x2000 ) + + ROM_LOAD( "turbosub.u80", 0x30000, 0x2000, CRC(ff2e2870) SHA1(45f91d63ad91585482c9dd05290b204b007e3f44) ) + ROM_CONTINUE( 0x40000, 0x2000 ) + ROM_LOAD( "turbosub.u79", 0x32000, 0x2000, CRC(13680923) SHA1(14e3daa2178853cef1fd96a68305420c11fceb96) ) + ROM_CONTINUE( 0x42000, 0x2000 ) + ROM_LOAD( "turbosub.u84", 0x34000, 0x2000, CRC(7059842d) SHA1(c20a8accd3fc23bc4476e1d08798d7a80915d37c) ) + ROM_CONTINUE( 0x44000, 0x2000 ) + ROM_LOAD( "turbosub.u83", 0x36000, 0x2000, CRC(31b86fc6) SHA1(8e56e8a75f653c3c4da2c9f31f739894beb194db) ) + ROM_CONTINUE( 0x46000, 0x2000 ) + + /* e000 - ffff = Upper half of U85 (lower half is blank) */ + ROM_COPY( REGION_USER1, 0x18000+0x2000, 0xe000, 0x2000 ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "turbosub.u63", 0xc000, 0x4000, CRC(35701532) SHA1(77d957682aab10ee902c1e47c468b9ab8fe6a512) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "turbosub.u66", 0xc000, 0x4000, CRC(5091bf3d) SHA1(7ab872cef1562a45f7533c16bbbae8772673465b) ) + + ROM_REGION( 0xc0000, REGION_USER2, 0) /* Unknown */ + ROM_LOAD( "turbosub.u67", 0x00000, 0x4000, CRC(f8ae82e9) SHA1(fd27b9fe7872c3c680a1f71a4a5d5eeaa12e4a19) ) + ROM_LOAD( "turbosub.u68", 0x04000, 0x4000, CRC(72e3d09b) SHA1(eefdfcd0c4c32e465f18d40f46cb5bc022c22bfd) ) + ROM_LOAD( "turbosub.u69", 0x00000, 0x4000, CRC(ad04193b) SHA1(2f660302e60a7e68e079a8dd13266a77c077f939) ) + + ROM_REGION( 0x80000, REGION_GFX1, 0 ) /* Incorrect */ + ROMX_LOAD( "turbosub.u4", 0x00000, 0x4000, CRC(08303604) SHA1(f075b645d89a2d91bd9b621748906a9f9890ee60), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u14", 0x00001, 0x4000, CRC(83b26c8d) SHA1(2dfa3b45c44652d255c402511bb3810fffb0731d), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u24", 0x00002, 0x4000, CRC(6bbb6cb3) SHA1(d513e547a05b34076bb8261abd51301ac5f3f5d4), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u34", 0x00003, 0x4000, CRC(7b844f4a) SHA1(82467eb7e116f9f225711a1698c151945e1de6e4), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u9", 0x10000, 0x4000, CRC(9a03eadf) SHA1(25ee1ebe52f030b2fa09d76161e46540c91cbc4c), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u19", 0x10001, 0x4000, CRC(498253b8) SHA1(dd74d4f9f19d8a746415baea604116faedb4fb31), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u29", 0x10002, 0x4000, CRC(809c374f) SHA1(d3849eed8441e4641ffcbca7c83ee3bb16681a0b), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u39", 0x10003, 0x4000, CRC(3e4e0681) SHA1(ac834f6823ffe835d6f149e79c1d31ae2b89e85d), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u3", 0x20000, 0x4000, CRC(825ef29c) SHA1(affadd0976f793b8bdbcbc4768b7de27121e7b11), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u13", 0x20001, 0x4000, CRC(350cc17a) SHA1(b98d16be997fc0576d3206f51f29ce3e257492d3), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u23", 0x20002, 0x4000, CRC(b1531916) SHA1(805a23f40aa875f431e835fdaceba87261c14155), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u33", 0x20003, 0x4000, CRC(0d5130cb) SHA1(7e4e4e5ea50c581a60d15964571464029515c720), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u8", 0x30000, 0x4000, CRC(01118737) SHA1(3a8e998b80dffe82296170273dcbbe9870c5b695), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u18", 0x30001, 0x4000, CRC(39fd8e57) SHA1(392f8a8cf58fc4813de840775d9c53561488152d), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u28", 0x30002, 0x4000, CRC(0628586d) SHA1(e37508c2812e1c98659aaba9c495e7396842614e), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u38", 0x30003, 0x4000, CRC(7d597a7e) SHA1(2f48faf75406ab3ff0b954040b74e68b7ca6f7a5), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u2", 0x40000, 0x4000, CRC(a8b8c032) SHA1(20512a3a1f8b9c0361e6f5a7e9a50605be3ae650), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u12", 0x40001, 0x4000, CRC(a2c4badf) SHA1(267af1be6261833211270af25045e306efffee80), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u22", 0x40002, 0x4000, CRC(97b7cf0e) SHA1(888fb2f384a5cba8a6f7569886eb6dc27e2b024f), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u32", 0x40003, 0x4000, CRC(b286710e) SHA1(5082db13630ba0967006619027c39ee3607b838d), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u7", 0x50000, 0x4000, CRC(50eea315) SHA1(567dbb3cb3a75a7507f4cb4748c7dd878e69d6b7), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u17", 0x50001, 0x4000, CRC(8a9e19e6) SHA1(19067e153c0002edfd4a756f92ad75d9a0cbc3dd), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u27", 0x50002, 0x4000, CRC(1c81a8d9) SHA1(3d13d1ccd7ec3dddf2a27600eb64b5be386e868c), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u37", 0x50003, 0x4000, CRC(59f978cb) SHA1(e99d6378de941cad92e9702fcb18aea87acd371f), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u1", 0x60000, 0x4000, CRC(88b0a7a9) SHA1(9012c8059cf60131efa6a0432accd87813187206), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u11", 0x60001, 0x4000, CRC(9f0ff723) SHA1(54b52b4ebc32f10aa32c799ac819928290e70455), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u21", 0x60002, 0x4000, CRC(b4122fe2) SHA1(50e8b488a7b7f739336b60a3fd8a5b14f5010b75), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u31", 0x60003, 0x4000, CRC(3fa15c78) SHA1(bf5cb85fc26b5045ad5acc944c917b068ace2c49), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u6", 0x70000, 0x4000, CRC(841e00bd) SHA1(f777cc8dd8dd7c8baa2007355a76db782a218efc), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u16", 0x70001, 0x4000, CRC(d3b63d81) SHA1(e86dd64825f6d9e7bebc26413f524a8962f68f2d), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u26", 0x70002, 0x4000, CRC(867cfe32) SHA1(549e4e557d63dfab8e8c463916512a1b422ce425), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u36", 0x70003, 0x4000, CRC(0d8ebc21) SHA1(7ae65edae05869376caa975ff2c778a08e8ad8a2), ROM_SKIP(3) ) + + ROM_REGION( 0x40000, REGION_GFX2, 0) /* Incorrect */ + ROMX_LOAD( "turbosub.u44", 0x00000, 0x4000, CRC(eaa05860) SHA1(f649891dae9354b7f2e46e6a380b52a569229d64), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u54", 0x00001, 0x4000, CRC(bebf98d8) SHA1(170502bb44fc6d6bf14d8dac4778b37888c14a7b), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u49", 0x00002, 0x4000, CRC(b4170ac2) SHA1(bdbfc43c891c8d525dcc46fb9d05602263ab69cd), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u59", 0x00003, 0x4000, CRC(9c1f4397) SHA1(94335f2db2650f8b7e24fc3f92a04b73325ab164), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u43", 0x10000, 0x4000, CRC(5d76237c) SHA1(3d50347856039e43290497348447b1c4581f3a33), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u53", 0x10001, 0x4000, CRC(1352d58a) SHA1(76ae86c365dd4c9e1a6c5af91c01d31e7ee35f0f), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u48", 0x10002, 0x4000, CRC(cea4e036) SHA1(4afce4f2a09adf9c83ab7188c05cd7236dea16a3), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u58", 0x10003, 0x4000, CRC(5024d83f) SHA1(a293d92a0ae01901b5618b0250d48e3ba631dfcb), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u42", 0x20000, 0x4000, CRC(057a1c72) SHA1(5af89b128b7818550572d02e5ff724c415fa8b8b), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u52", 0x20001, 0x4000, CRC(070d07d6) SHA1(4c81310cd646641a380817fedffab66e76529c97), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u47", 0x20002, 0x4000, CRC(10def494) SHA1(a3ba691eb2b0d782162ffc6c081761965844a3a9), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u57", 0x20003, 0x4000, CRC(5ddb0458) SHA1(d1169882397f364ca38fbd563250b33d13b1a7c6), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u41", 0x30000, 0x4000, CRC(014bb06b) SHA1(97276ba26b60c2907e59b92cc9de5251298579cf), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u51", 0x30001, 0x4000, CRC(43cdcb5c) SHA1(3dd966daa904d3be7be63c584ba033c0e7904d5c), ROM_SKIP(3) ) + + ROMX_LOAD( "turbosub.u46", 0x30002, 0x4000, CRC(3b866e2c) SHA1(c0dd4827a18eb9f4b1055d92544beed10f01fd86), ROM_SKIP(3) ) + ROMX_LOAD( "turbosub.u56", 0x30003, 0x4000, CRC(6d116adf) SHA1(f808e28cef41dc86e43d8c12966037213da87c87), ROM_SKIP(3) ) +ROM_END + +GAME( 1986, turbosub, 0, turbosub, turbosub, turbosub, ROT0, "Entertainment Sciences", "Turbo Sub",GAME_NO_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) +/* One day, perhaps Bouncer will be added here... */ |