diff options
Diffstat (limited to 'src/mame/drivers/tecmosys.c')
-rw-r--r-- | src/mame/drivers/tecmosys.c | 692 |
1 files changed, 692 insertions, 0 deletions
diff --git a/src/mame/drivers/tecmosys.c b/src/mame/drivers/tecmosys.c new file mode 100644 index 00000000000..09647c09c14 --- /dev/null +++ b/src/mame/drivers/tecmosys.c @@ -0,0 +1,692 @@ +/* Tecmo System + Driver by Farfetch & David Haywood + +can't do anything with this, its protected and expects to read back 68k code :-( + +T.Slanina 20040530 : + - preliminary gfx decode, + - Angel Eyes - patched interrupt level1 vector + - EEPROM r/w + - txt layer + - added hacks to see more gfx (press Z or X) + - palette (press X in angel eyes to see 'color bar chack'(!)) + - watchdog (?) simulation +*/ + + +/* + +Deroon DeroDero +(c)1996 Tecmo +Tecmo System Board + +CPU : TMP68HC000P-16 +Sound: TMPZ84C00AP-8 YMF262 YMZ280B M6295 +OSC : 14.3181MHz (X1) 28.0000MHz (X2) 16.0000MHz (X3) 16.9MHz (X4) + +Custom chips: +TECMO AA02-1927 (160pin PQFP) (x4) +TECMO AA03-8431 (208pin PQFP) (x4) + +Others: +93C46 EEPROM (settings are stored to this) + +EPROMs: +t001upau.bin - Main program (even) (27c4001) +t002upal.bin - Main program (odd) (27c4001) + +t003uz1.bin - Sound program (27c2001) + +Mask ROMs: +t101uah1.j66 - Graphics (23c16000 SOP) +t102ual1.j67 | +t103ubl1.j08 | +t104ucl1.j68 / + +t201ubb1.w61 - Graphics (23c8000) +t202ubc1.w62 / + +t301ubd1.w63 - Graphics (23c8000) + +t401uya1.w16 - YMZ280B Samples (23c16000) + +t501uad1.w01 - M6295 Samples (23c4001) + +*/ + +/* + +Touki Denshou -Angel Eyes- +(c)1996 Tecmo +Tecmo System Board + +CPU : TMP68HC000P-16 +Sound: TMPZ84C00AP-8 YMF262 YMZ280B M6295 +OSC : 14.3181MHz (X1) 28.0000MHz (X2) 16.0000MHz (X3) 16.9MHz (X4) + +Custom chips: +TECMO AA02-1927 (160pin PQFP) (x4) +TECMO AA03-8431 (208pin PQFP) (x4) + +Others: +93C46 EEPROM (settings are stored to this) + +EPROMs: +aeprge-2.pal - Main program (even) (27c4001) +aeprgo-2.pau - Main program (odd) (27c4001) + +aesprg-2.z1 - Sound program (27c1001) + +Mask ROMs: +ae100h.ah1 - Graphics (23c32000/16000 SOP) +ae100.al1 | +ae101h.bh1 | +ae101.bl1 | +ae102h.ch1 | +ae102.cl1 | +ae104.el1 | +ae105.fl1 | +ae106.gl1 / + +ae200w74.ba1 - Graphics (23c16000) +ae201w75.bb1 | +ae202w76.bc1 / + +ae300w36.bd1 - Graphics (23c4000) + +ae400t23.ya1 - YMZ280B Samples (23c16000) +ae401t24.yb1 / + +ae500w07.ad1 - M6295 Samples (23c4001) + +*/ + +#include "driver.h" +#include "machine/eeprom.h" +#include "cpu/m68000/m68k.h" +#include "sound/okim6295.h" +#include "sound/262intf.h" +#include "sound/ymz280b.h" + +static int gametype; + +static tilemap *txt_tilemap; +static TILE_GET_INFO( get_tile_info ) +{ + + SET_TILE_INFO( + 0, + videoram16[2*tile_index+1], + videoram16[2*tile_index]&0xf, + 0); +} + + + +static UINT16* protram; + +static UINT8 device[0x10000]; +static UINT32 device_read_ptr = 0; +static UINT32 device_write_ptr = 0; + +enum DEV_STATUS +{ + DS_CMD, + DS_WRITE, + DS_WRITE_ACK, + DS_READ, + DS_READ_ACK +}; + +static UINT8 device_status = DS_CMD; + +static READ16_HANDLER(reg_f80000_r) +{ + UINT16 dt; + // 0 means ok, no errors. -1 means error + if (device_status == DS_CMD) + return 0; + + if (device_status == DS_WRITE_ACK) + { + // Notice, this is the maximum. I think the device lets 68k just writes 4/5 bytes, + // they contain "LUNA". Then, it starts sending to the 68k a bunch of stuff, including + // 68k code. + if (device_write_ptr == 0x10000) + { +// logerror("DEVICE write finished\n"); + device_status = DS_READ_ACK; + device_write_ptr = 0; + device_read_ptr = 0; + } + else + device_status = DS_WRITE; + + return 0; + } + + if (device_status == DS_WRITE) + { + logerror("UNEXPECTED read DS_WRITE (write ptr %x)\n", device_write_ptr); + return 0; + } + + + if (device_status == DS_READ_ACK) + { +// logerror("Read ACK\n"); + device_status = DS_READ; + return 0; + } + + dt = device[device_read_ptr]; + +// logerror("DEVICE read %x: %x (at %x)\n", device_read_ptr, dt, cpunum_get_pc(0)); + + device_read_ptr++; + device_read_ptr &= 0xFFFF; + + device_status = DS_READ_ACK; + + return dt<<8; +} + +// Write 0x13 +// Read something (acknowledge? If -1, write -1 and restart) +// Write data +// Read value (!=1 is ok) + +static READ16_HANDLER(reg_b80000_r) +{ + if (ACCESSING_MSB) + { + // Bit 7: 0 = ready to write + // Bit 6: 0 = ready to read + return 0; + } + + return 0; +} + +static WRITE16_HANDLER(reg_e80000_w) +{ + // Only LSB + data >>= 8; + + if (device_status == DS_CMD) + { + switch (data) + { + case 0x13: +// logerror("DEVICE mode WRITE (cmd 0x13)\n"); + device_status = DS_WRITE; + device_write_ptr = 0; + break; + } + + return; + } + + // @@@ Should skip the writes while in read mode? + if (device_status == DS_READ || device_status == DS_READ_ACK) + { +// logerror("EEPROM write %x: %x\n", device_write_ptr, data); + return; + } + + device[device_write_ptr] = (UINT8)data; + device_write_ptr++; + device_status = DS_WRITE_ACK; + +} + +static READ16_HANDLER( eeprom_r ) +{ + return ((EEPROM_read_bit() & 0x01) << 11); +} + + +static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM) + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM) + AM_RANGE(0x210000, 0x210001) AM_READ(MRA16_RAM) + AM_RANGE(0x300000, 0x3013ff) AM_READ(MRA16_RAM) + AM_RANGE(0x400000, 0x4013ff) AM_READ(MRA16_RAM) + AM_RANGE(0x500000, 0x5013ff) AM_READ(MRA16_RAM) + AM_RANGE(0x700000, 0x703fff) AM_READ(MRA16_RAM) + AM_RANGE(0x880000, 0x880001) AM_READ(input_port_0_word_r) + AM_RANGE(0x880002, 0x880007) AM_READ(input_port_1_word_r) /* test */ + AM_RANGE(0x900000, 0x907fff) AM_READ(MRA16_RAM) + AM_RANGE(0x980000, 0x980fff) AM_READ(MRA16_RAM) + AM_RANGE(0xb80000, 0xb80001) AM_READ(reg_b80000_r) + AM_RANGE(0xd00000, 0xd80003) AM_READ(MRA16_RAM) + AM_RANGE(0xd80000, 0xd80001) AM_READ(eeprom_r) + AM_RANGE(0xf00000, 0xf00001) AM_READ(MRA16_RAM) + AM_RANGE(0xf80000, 0xf80001) AM_READ(reg_f80000_r) + +ADDRESS_MAP_END + +static WRITE16_HANDLER( eeprom_w ) +{ + if ( ACCESSING_MSB ) + { + EEPROM_write_bit(data & 0x0800); + EEPROM_set_cs_line((data & 0x0200) ? CLEAR_LINE : ASSERT_LINE ); + EEPROM_set_clock_line((data & 0x0400) ? CLEAR_LINE: ASSERT_LINE ); + } +} + +static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM) AM_BASE(&protram) + AM_RANGE(0x300000, 0x3013ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x400000, 0x4013ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x500000, 0x5013ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x700000, 0x703fff) AM_WRITE(MWA16_RAM) AM_BASE(&videoram16) + AM_RANGE(0x800000, 0x80ffff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x900000, 0x907fff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x980000, 0x980fff) AM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE(&paletteram16) + + AM_RANGE(0x880000, 0x88002f) AM_WRITE(MWA16_RAM ) + AM_RANGE(0xa00000, 0xa00001) AM_WRITE(eeprom_w ) + AM_RANGE(0xa80000, 0xa80005) AM_WRITE(MWA16_RAM ) + AM_RANGE(0xb00000, 0xb00005) AM_WRITE(MWA16_RAM ) + AM_RANGE(0xb80000, 0xb80005) AM_WRITE(MWA16_RAM ) + AM_RANGE(0xc00000, 0xc00005) AM_WRITE(MWA16_RAM ) + AM_RANGE(0xc80000, 0xc80005) AM_WRITE(MWA16_RAM ) + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(MWA16_RAM ) + AM_RANGE(0xe80000, 0xe80001) AM_WRITE(reg_e80000_w) +ADDRESS_MAP_END + +static INPUT_PORTS_START( deroon ) + PORT_START + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH,IPT_UNKNOWN ) + + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) +INPUT_PORTS_END + +static const gfx_layout gfxlayout = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { 0,1,2,3 }, + { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4}, + { 0*4*8, 1*4*8, 2*4*8, 3*4*8, 4*4*8, 5*4*8, 6*4*8, 7*4*8}, + 8*8*4 +}; + +static const gfx_layout gfxlayout2 = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { 0, 1, 2, 3 }, + { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, + 8*8*4*1+0*4, 8*8*4*1+1*4, 8*8*4*1+2*4, 8*8*4*1+3*4, 8*8*4*1+4*4, 8*8*4*1+5*4,8*8*4*1+6*4, 8*8*4*1+7*4 }, + { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, + 8*8*4*2+0*32, 8*8*4*2+1*32, 8*8*4*2+2*32, 8*8*4*2+3*32, 8*8*4*2+4*32, 8*8*4*2+5*32, 8*8*4*2+6*32, 8*8*4*2+7*32 }, + 128*8 +}; + + +static GFXDECODE_START( tecmosys ) + GFXDECODE_ENTRY( REGION_GFX2, 0, gfxlayout, 0x40*16, 16 ) + GFXDECODE_ENTRY( REGION_GFX3, 0, gfxlayout2, 0, 16 ) +GFXDECODE_END + + + +static WRITE8_HANDLER( deroon_bankswitch_w ) +{ + memory_set_bankptr( 1, memory_region(REGION_CPU2) + ((data-2) & 0x0f) * 0x4000 + 0x10000 ); +} + +static ADDRESS_MAP_START( sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM) + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1) + AM_RANGE(0xe000, 0xf7ff) AM_READ(MRA8_RAM) + +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xbfff) AM_WRITE(MWA8_ROM) + AM_RANGE(0xe000, 0xf7ff) AM_WRITE(MWA8_RAM) +ADDRESS_MAP_END + + + +static ADDRESS_MAP_START( readport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_READ(YMF262_status_0_r) + AM_RANGE(0x40, 0x40) AM_READ(soundlatch_r) + //AM_RANGE(0x60, 0x60) AM_READ(YMZ280B_status_0_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( writeport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_WRITE(YMF262_register_A_0_w) + AM_RANGE(0x01, 0x01) AM_WRITE(YMF262_data_A_0_w) + AM_RANGE(0x02, 0x02) AM_WRITE(YMF262_register_B_0_w) + AM_RANGE(0x03, 0x03) AM_WRITE(YMF262_data_B_0_w) + + AM_RANGE(0x10, 0x10) AM_WRITE(OKIM6295_data_0_w) + AM_RANGE(0x20, 0x20) AM_NOP + + AM_RANGE(0x30, 0x30) AM_WRITE(deroon_bankswitch_w) + + //AM_RANGE(0x50, 0x50) AM_WRITE(to_main_cpu_latch_w) + AM_RANGE(0x50, 0x50) AM_WRITE(MWA8_NOP) + + AM_RANGE(0x60, 0x60) AM_WRITE(YMZ280B_register_0_w) + AM_RANGE(0x61, 0x61) AM_WRITE(YMZ280B_data_0_w) +ADDRESS_MAP_END + + + +static VIDEO_START(deroon) +{ + txt_tilemap = tilemap_create(get_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32*2,32*2); + tilemap_set_transparent_pen(txt_tilemap,0); +} + + + + +static VIDEO_UPDATE(deroon) +{ + + + +#if 0 +/* simulate sound commands writes here ... to test OPL3 emulator */ + int j; + char buf[64]; + static int command_data=0; + + if (input_code_pressed_once(KEYCODE_Q)) + { + command_data++; + } + if (input_code_pressed_once(KEYCODE_A)) + { + command_data--; + } + command_data &= 0xff; + + sprintf(buf,"keys: Q,A and C\ncommand code: %2x", command_data); + ui_draw_text(buf,10,20); + + if (input_code_pressed_once(KEYCODE_C)) + { + soundlatch_w(0,command_data); + cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE); + popmessage("command write=%2x",command_data); + } +#endif + + + + + // bg color , to see text in deroon + if(!gametype) + palette_set_color(machine,0x800,MAKE_RGB(0x80,0x80,0x80)); + else + palette_set_color(machine,0x800,MAKE_RGB(0x0,0x0,0x0)); + + fillbitmap(bitmap,0x800,cliprect); + + tilemap_mark_all_tiles_dirty(txt_tilemap); + tilemap_draw(bitmap,cliprect,txt_tilemap,0,0); + + +//hacks + + if(input_code_pressed_once(KEYCODE_Z)) + { + if(!gametype) + cpunum_set_reg(0, M68K_PC, 0x23ae8); /* deroon */ + else + { + UINT16 *ROM = (UINT16 *)memory_region(REGION_CPU1); + ROM[0x3aaa/2] = 0x4e73; // rte (trap 0) + cpunum_set_reg(0, M68K_PC, 0x182a0); /* angel eyes */ + } + } + + if(input_code_pressed_once(KEYCODE_X)) + { + if(gametype) + { + UINT16 *ROM = (UINT16 *)memory_region(REGION_CPU1); + ROM[0x3aaa/2] = 0x4e73; // rte (trap 0) + cpunum_set_reg(0, M68K_PC, 0x17d2a); /* angel eyes */ + } + } + return 0; +} + +/* +>>> Richard wrote: +> Here's the sound info (I got it playing in M1, I +> didn't bother "porting" it since the main game doesn't +> even boot). +> +> memory map: +> 0000-7fff: fixed program ROM +> 8000-bfff: banked ROM +> e000-f7ff: work RAM +> +> I/O ports: + +> 0-3: YMF262 OPL3 +> 0x10: OKIM6295 +> 0x30: bank select, in 0x4000 byte units based at the +> start of the ROM (so 2 = 0x8000). +> 0x40: latch from 68000 +> 0x50: latch to 68000 +> 0x60/0x61: YMZ280B +> +> IRQ from YMF262 goes to Z80 IRQ. +> +> NMI is asserted when the 68000 writes a command. +> +> Z80 clock appears to be 8 MHz (music slows down in +> "intense" sections if it's 4 MHz, and the crystals are +> all in the area of 16 MHz). +> +> The YMZ280B samples for both games may be misdumped, +> deroon has lots of "bad" noises but tkdensho only has +> a few. +*/ + + +static void sound_irq(int irq) +{ + /* IRQ */ + cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE); +} + +static struct YMF262interface ymf262_interface = +{ + sound_irq /* irq */ +}; + + +static struct YMZ280Binterface ymz280b_interface = +{ + REGION_SOUND1, + 0 /* irq */ +}; + +static MACHINE_DRIVER_START( deroon ) + MDRV_CPU_ADD(M68000, 16000000/8) /* the /8 divider is here only for OPL3 testing */ + MDRV_CPU_PROGRAM_MAP(readmem,writemem) + MDRV_CPU_VBLANK_INT(irq1_line_hold,1) + + MDRV_CPU_ADD(Z80, 16000000/2 ) /* 8 MHz ??? */ + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem) + MDRV_CPU_IO_MAP(readport,writeport) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_GFXDECODE(tecmosys) + + MDRV_NVRAM_HANDLER(93C46) + + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_UPDATE_AFTER_VBLANK) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 64*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 42*8-1, 0*8, 32*8-1) + MDRV_PALETTE_LENGTH(0x800+1) + + MDRV_VIDEO_START(deroon) + MDRV_VIDEO_UPDATE(deroon) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YMF262, 14318180) + MDRV_SOUND_CONFIG(ymf262_interface) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) + MDRV_SOUND_ROUTE(2, "left", 1.0) + MDRV_SOUND_ROUTE(3, "right", 1.0) + + MDRV_SOUND_ADD(OKIM6295, 14318180/2048*132) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) // clock frequency & pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.50) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.50) + + MDRV_SOUND_ADD(YMZ280B, 16900000) + MDRV_SOUND_CONFIG(ymz280b_interface) + MDRV_SOUND_ROUTE(0, "left", 0.30) + MDRV_SOUND_ROUTE(1, "right", 0.30) +MACHINE_DRIVER_END + + +ROM_START( deroon ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) // Main Program + ROM_LOAD16_BYTE( "t001upau.bin", 0x00000, 0x80000, CRC(14b92c18) SHA1(b47b8c828222a3f7c0fe9271899bd38171d972fb) ) + ROM_LOAD16_BYTE( "t002upal.bin", 0x00001, 0x80000, CRC(0fb05c68) SHA1(5140592e15414770fb46d5ac9ba8f76e3d4ab323) ) + + ROM_REGION( 0x048000, REGION_CPU2, 0 ) // Sound Porgram + ROM_LOAD( "t003uz1.bin", 0x000000, 0x008000, CRC(8bdfafa0) SHA1(c0cf3eb7a65d967958fe2aace171859b0faf7753) ) + ROM_CONTINUE( 0x010000, 0x038000 ) /* banked part */ + + ROM_REGION( 0x800000, REGION_GFX1, 0 ) // Graphics - mostly (maybe all?) not tile based + ROM_LOAD( "t101uah1.j66", 0x000000, 0x200000, CRC(74baf845) SHA1(935d2954ba227a894542be492654a2750198e1bc) ) + ROM_LOAD( "t102ual1.j67", 0x200000, 0x200000, CRC(1a02c4a3) SHA1(5155eeaef009fc9a9f258e3e54ca2a7f78242df5) ) + ROM_LOAD( "t103ubl1.j08", 0x400000, 0x200000, CRC(75431ec5) SHA1(c03e724c15e1fe7a0a385332f849e9ac9d149887) ) + ROM_LOAD( "t104ucl1.j68", 0x600000, 0x200000, CRC(66eb611a) SHA1(64435d35677fea3c06fdb03c670f3f63ee481c02) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) // 8x8 4bpp tiles + ROM_LOAD( "t301ubd1.w63", 0x000000, 0x100000, CRC(8b026177) SHA1(3887856bdaec4d9d3669fe3bc958ef186fbe9adb) ) + + ROM_REGION( 0x300000, REGION_GFX3, ROMREGION_DISPOSE ) // 16x16 4bpp tiles + ROM_LOAD( "t201ubb1.w61", 0x000000, 0x100000, CRC(d5a087ac) SHA1(5098160ce7719d93e3edae05f6edd317d4c61f0d) ) + ROM_LOAD( "t202ubc1.w62", 0x100000, 0x100000, CRC(f051dae1) SHA1(f5677c07fe644b3838657370f0309fb09244c619) ) + + + ROM_REGION( 0x200000, REGION_SOUND1, 0 ) // YMZ280B Samples + ROM_LOAD( "t401uya1.w16", 0x000000, 0x200000, CRC(92111992) SHA1(ae27e11ae76dec0b9892ad32e1a8bf6ab11f2e6c) ) + + ROM_REGION( 0x080000, REGION_SOUND2, 0 ) // M6295 Samples + ROM_LOAD( "t501uad1.w01", 0x000000, 0x080000, CRC(2fbcfe27) SHA1(f25c830322423f0959a36955edb563a6150f2142) ) +ROM_END + +ROM_START( tkdensho ) + ROM_REGION( 0x600000, REGION_CPU1, 0 ) + ROM_LOAD16_BYTE( "aeprge-2.pal", 0x00000, 0x80000, CRC(25e453d6) SHA1(9c84e2af42eff5cc9b14c1759d5bab42fa7bb663) ) + ROM_LOAD16_BYTE( "aeprgo-2.pau", 0x00001, 0x80000, CRC(22d59510) SHA1(5ade482d6ab9a22df2ee8337458c22cfa9045c73) ) + + ROM_REGION( 0x038000, REGION_CPU2, 0 ) // Sound Porgram + ROM_LOAD( "aesprg-2.z1", 0x000000, 0x008000, CRC(43550ab6) SHA1(2580129ef8ebd9295249175de4ba985c752e06fe) ) + ROM_CONTINUE( 0x010000, 0x018000 ) /* banked part */ + + ROM_REGION( 0x1e00000, REGION_GFX1, 0 ) // Graphics - mostly (maybe all?) not tile based + ROM_LOAD( "ae100h.ah1", 0x0000000, 0x0400000, CRC(06be252b) SHA1(08d1bb569fd2e66e2c2f47da7780b31945232e62) ) + ROM_LOAD( "ae100.al1", 0x0400000, 0x0400000, CRC(009cdff4) SHA1(fd88f07313d14fd4429b09a1e8d6b595df3b98e5) ) + ROM_LOAD( "ae101h.bh1", 0x0800000, 0x0400000, CRC(f2469eff) SHA1(ba49d15cc7949437ba9f56d9b425a5f0e62137df) ) + ROM_LOAD( "ae101.bl1", 0x0c00000, 0x0400000, CRC(db7791bb) SHA1(1fe40b747b7cee7a9200683192b1d60a735a0446) ) + ROM_LOAD( "ae102h.ch1", 0x1000000, 0x0200000, CRC(f9d2a343) SHA1(d141ac0b20be587e77a576ef78f15d269d9c84e5) ) + ROM_LOAD( "ae102.cl1", 0x1200000, 0x0200000, CRC(681be889) SHA1(8044ca7cbb325e6dcadb409f91e0c01b88a1bca7) ) + ROM_LOAD( "ae104.el1", 0x1400000, 0x0400000, CRC(e431b798) SHA1(c2c24d4f395bba8c78a45ecf44009a830551e856) ) + ROM_LOAD( "ae105.fl1", 0x1800000, 0x0400000, CRC(b7f9ebc1) SHA1(987f664072b43a578b39fa6132aaaccc5fe5bfc2) ) + ROM_LOAD( "ae106.gl1", 0x1c00000, 0x0200000, CRC(7c50374b) SHA1(40865913125230122072bb13f46fb5fb60c088ea) ) + + ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) // 8x8 4bpp tiles + ROM_LOAD( "ae300w36.bd1", 0x000000, 0x0080000, CRC(e829f29e) SHA1(e56bfe2669ed1d1ae394c644def426db129d97e3) ) + + ROM_REGION( 0x300000, REGION_GFX3, ROMREGION_DISPOSE ) // 16x16 4bpp tiles + ROM_LOAD( "ae200w74.ba1", 0x000000, 0x0100000, CRC(c1645041) SHA1(323670a6aa2a4524eb968cc0b4d688098ffeeb12) ) + ROM_LOAD( "ae201w75.bb1", 0x100000, 0x0100000, CRC(3f63bdff) SHA1(0d3d57fdc0ec4bceef27c11403b3631d23abadbf) ) + ROM_LOAD( "ae202w76.bc1", 0x200000, 0x0100000, CRC(5cc857ca) SHA1(2553fb5220433acc15dfb726dc064fe333e51d88) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) // YMZ280B Samples + ROM_LOAD( "ae400t23.ya1", 0x000000, 0x200000, CRC(c6ffb043) SHA1(e0c6c5f6b840f63c9a685a2c3be66efa4935cbeb) ) + ROM_LOAD( "ae401t24.yb1", 0x200000, 0x200000, CRC(d83f1a73) SHA1(412b7ac9ff09a984c28b7d195330d78c4aac3dc5) ) + + ROM_REGION( 0x080000, REGION_SOUND2, 0 ) // M6295 Samples + ROM_LOAD( "ae500w07.ad1", 0x000000, 0x080000, CRC(3734f92c) SHA1(048555b5aa89eaf983305c439ba08d32b4a1bb80) ) +ROM_END + +static TIMER_CALLBACK( reset_callback ) +{ + cpunum_set_input_line(0, INPUT_LINE_RESET, PULSE_LINE); +} + + +static DRIVER_INIT( deroon ) +{ + UINT16 *ROM = (UINT16 *)memory_region(REGION_CPU1); + ROM[0x39C2/2] = 0x0001; + ROM[0x0448/2] = 0x4E71; + ROM[0x044A/2] = 0x4E71; + ROM[0x04bc/2] = 0x0000; + ROM[0x302c/2] = 0x60a4; + timer_set(ATTOTIME_IN_SEC(2),0,reset_callback); + gametype=0; +} + +static DRIVER_INIT( tkdensho ) +{ + UINT16 *ROM = (UINT16 *)memory_region(REGION_CPU1); + ROM[0x222c/2] = 0x4E71; + ROM[0x222c/2] = 0x4E71; + + /* interrupt vector */ + ROM[0x64/2] = 0x0000; + ROM[0x66/2] = 0x22c4; + + /* protection ? */ + ROM[0x3a3c/2] = 0x4E71; + ROM[0x3a84/2] = 0x4E71; + + ROM[0x1759a/2] = 0x4E71; //trap 0 + ROM[0x04822/2] = 0x4E71; + ROM[0x04862/2] = 0x4E71; + + timer_set(ATTOTIME_IN_SEC(2),0,reset_callback); + gametype=1; + +} + +GAME( 1996, deroon, 0, deroon, deroon, deroon, ROT0, "Tecmo", "Deroon DeroDero", GAME_NOT_WORKING | GAME_NO_SOUND ) +GAME( 1996, tkdensho, 0, deroon, deroon, tkdensho, ROT0, "Tecmo", "Touki Denshou -Angel Eyes-", GAME_NOT_WORKING | GAME_NO_SOUND ) + |