/* D-DAY (c)Jaleco 1984 driver by Pierpaolo Prazzoli and Tomasz Slanina ------------------------------------------------------- Is it 1984 or 1987 game ? There's text inside rom "1987.07 BY ELS" $842f = lives ------------------------------------------------------- CPU : Z80 Sound: Z80 AY-3-8910(x2) OSC : 12.000MHz Other: Intel 8257 DMA controller ------- DD-8416 ------- ROMs: 1 - (2764) 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 / ------- DD-8417 ------- ROMs: 12 - (2732) 13 / 14 - (2732) 15 / 16 - (2764) 17 | 18 | 19 / */ #include "driver.h" #include "sound/ay8910.h" static INT32 char_bank = 0; static tilemap *bg_tilemap; static UINT8 *bgram; static UINT8 *mainram; static INT32 bgadr=0; static INT32 sound_nmi_enable=0; static INT32 main_nmi_enable=0; static INT32 e00x_l[4]; static INT32 e00x_d[4][2]; static UINT8 protAdr; /* Protection device 24 pin IC with scratched surface, probably a mcu Pinout: 1 - vcc 2 - ? 3 - I/O (input) 4 - I/O (input) 5 - I/O (input) 6 - I/O (input) 7 - vcc 8 - xtal 9 - ? 10 - gnd 11 - ? 12 - ? 13 - I/O (input) 14 - ? 15 - I/O (input) 16 - ? 17 - ? 18 - I/O (input) 19 - ? 20 - ? 21 - I/O (input) 22 - ? 23 - ? 24 - ? */ static const UINT8 protData[0x10]= { 0x40,0x40,0x40,0x40, 0x40,0x00,0x40,0x00, 0x40,0x40,0x40,0x00, 0x60,0x20,0x00,0x60 }; static READ8_HANDLER(prot_r) { return (input_port_1_r(0)&0x1f)|protData[protAdr]; } static WRITE8_HANDLER(prot_w) { protAdr=(protAdr&(~(1<2) bgadr=0; memory_set_bankptr( 1, memory_region(REGION_USER1)+bgadr*0x4000 ); } static WRITE8_HANDLER( sound_w ) { soundlatch_w(offset,data); cpunum_set_input_line_and_vector(1,0,HOLD_LINE,0xff); } static WRITE8_HANDLER( i8257_CH0_w ) { e00x_d[offset][e00x_l[offset]]=data; e00x_l[offset]^=1; } static WRITE8_HANDLER( i8257_LMSR_w ) { if(!data) { INT32 src=e00x_d[0][1]*256+e00x_d[0][0]; INT32 dst=e00x_d[2][1]*256+e00x_d[2][0]; INT32 size=(e00x_d[1][1]*256+e00x_d[1][0])&0x3ff; INT32 i; size++; //?? for(i=0;igfx[0], code, 1, xflip, yflip, x, y, cliprect, TRANSPARENCY_PEN, 0); } { UINT32 x,y,c; for(y=0;y<32;y++) for(x=0;x<32;x++) { c=videoram[y*32+x]; if(x>1&&x<30) drawgfx(bitmap, machine->gfx[1], c+char_bank*0x100, 1, 0, 0, x*8, y*8, cliprect, TRANSPARENCY_PEN, 0); else drawgfx(bitmap, machine->gfx[1], c+char_bank*0x100, 1, 0, 0, x*8, y*8, cliprect, TRANSPARENCY_NONE, 0); } } return 0; } static struct AY8910interface ay8910_interface = { soundlatch_r }; static INTERRUPT_GEN( ddayjlc_interrupt ) { if(main_nmi_enable) cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE); } static INTERRUPT_GEN( ddayjlc_snd_interrupt ) { if(sound_nmi_enable) cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE); } static MACHINE_DRIVER_START( ddayjlc ) MDRV_CPU_ADD(Z80,12000000/3) MDRV_CPU_PROGRAM_MAP(main_cpu,0) MDRV_CPU_VBLANK_INT(ddayjlc_interrupt,1) MDRV_CPU_ADD(Z80, 12000000/4) /* audio CPU */ MDRV_CPU_PROGRAM_MAP(sound_cpu,0) MDRV_CPU_VBLANK_INT(ddayjlc_snd_interrupt,1) MDRV_INTERLEAVE(100) 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(32*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MDRV_GFXDECODE(ddayjlc) MDRV_PALETTE_LENGTH(32) MDRV_VIDEO_START(ddayjlc) MDRV_VIDEO_UPDATE(ddayjlc) MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD(AY8910, 12000000/6) MDRV_SOUND_CONFIG(ay8910_interface) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MDRV_SOUND_ADD(AY8910, 12000000/6) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_DRIVER_END ROM_START( ddayjlc ) ROM_REGION( 0x10000, REGION_CPU1, 0 ) ROM_LOAD( "1", 0x0000, 0x2000, CRC(dbfb8772) SHA1(1fbc9726d0cd1f8781ced2f8233107b65b9bdb1a) ) ROM_LOAD( "2", 0x2000, 0x2000, CRC(f40ea53e) SHA1(234ef686d3e9fe12aceada7098c4cc53e56eb1a3) ) ROM_LOAD( "3", 0x4000, 0x2000, CRC(0780ef60) SHA1(9247af38acbaea0f78892fc50081b2400abbdc1f) ) ROM_LOAD( "4", 0x6000, 0x2000, CRC(75991a24) SHA1(175f505da6eb80479a70181d6aed01130f6a64cc) ) ROM_REGION( 0x10000, REGION_CPU2, 0 ) ROM_LOAD( "11", 0x0000, 0x2000, CRC(fe4de019) SHA1(16c5402e1a79756f8227d7e99dd94c5896c57444) ) ROM_REGION( 0x8000, REGION_GFX1, ROMREGION_DISPOSE ) ROM_LOAD( "16", 0x0000, 0x2000, CRC(a167fe9a) SHA1(f2770d93ee5ae4eb9b3bcb052e14e36f53eec707) ) ROM_LOAD( "17", 0x2000, 0x2000, CRC(13ffe662) SHA1(2ea7855a14a4b8429751bae2e670e77608f93406) ) ROM_LOAD( "18", 0x4000, 0x2000, CRC(debe6531) SHA1(34b3b70a1872527266c664b2a82014d028a4ff1e) ) ROM_LOAD( "19", 0x6000, 0x2000, CRC(5816f947) SHA1(2236bed3e82980d3e7de3749aef0fbab042086e6) ) ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) ROM_LOAD( "14", 0x0000, 0x1000, CRC(2c0e9bbe) SHA1(e34ab774d2eb17ddf51af513dbcaa0c51f8dcbf7) ) ROM_LOAD( "15", 0x1000, 0x1000, CRC(a6eeaa50) SHA1(052cd3e906ca028e6f55d0caa1e1386482684cbf) ) ROM_REGION( 0x2000, REGION_GFX3, ROMREGION_DISPOSE ) ROM_LOAD( "12", 0x0000, 0x1000, CRC(7f7afe80) SHA1(e8a549b8a8985c61d3ba452e348414146f2bc77e) ) ROM_LOAD( "13", 0x1000, 0x1000, CRC(f169b93f) SHA1(fb0617162542d688503fc6618dd430308e259455) ) ROM_REGION( 0xc0000, REGION_USER1, 0 ) ROM_LOAD( "5", 0x00000, 0x2000, CRC(299b05f2) SHA1(3c1804bccb514bada4bed68a6af08db63a8f1b19) ) ROM_LOAD( "6", 0x02000, 0x2000, CRC(38ae2616) SHA1(62c96f32532f0d7e2cf1606a303d81ebb4aada7d) ) ROM_LOAD( "7", 0x04000, 0x2000, CRC(4210f6ef) SHA1(525d8413afabf97cf1d04ee9a3c3d980b91bde65) ) ROM_LOAD( "8", 0x06000, 0x2000, CRC(91a32130) SHA1(cbcd673b47b672b9ce78c7354dacb5964a81db6f) ) ROM_LOAD( "9", 0x08000, 0x2000, CRC(ccb82f09) SHA1(37c23f13aa0728bae82dba9e2858a8d81fa8afa5) ) ROM_LOAD( "10", 0x0a000, 0x2000, CRC(5452aba1) SHA1(03ef47161d0ab047c8675d6ffd3b7acf81f74721) ) ROM_REGION( 0x0400, REGION_PROMS, 0 ) ROM_LOAD( "prom1", 0x00000, 0x0100, NO_DUMP ) ROM_LOAD( "prom2", 0x00100, 0x0100, NO_DUMP ) ROM_LOAD( "prom3", 0x00200, 0x0100, NO_DUMP ) ROM_LOAD( "prom4", 0x00300, 0x0100, NO_DUMP ) ROM_END ROM_START( ddayjlca ) ROM_REGION( 0x10000, REGION_CPU1, 0 ) ROM_LOAD( "1a", 0x0000, 0x2000, CRC(d8e4f3d4) SHA1(78b30b4896a7f718975b1502c6253819bceee922) ) ROM_LOAD( "2", 0x2000, 0x2000, CRC(f40ea53e) SHA1(234ef686d3e9fe12aceada7098c4cc53e56eb1a3) ) ROM_LOAD( "3", 0x4000, 0x2000, CRC(0780ef60) SHA1(9247af38acbaea0f78892fc50081b2400abbdc1f) ) ROM_LOAD( "4", 0x6000, 0x2000, CRC(75991a24) SHA1(175f505da6eb80479a70181d6aed01130f6a64cc) ) ROM_REGION( 0x10000, REGION_CPU2, 0 ) ROM_LOAD( "11", 0x0000, 0x2000, CRC(fe4de019) SHA1(16c5402e1a79756f8227d7e99dd94c5896c57444) ) ROM_REGION( 0x8000, REGION_GFX1, ROMREGION_DISPOSE ) ROM_LOAD( "16", 0x0000, 0x2000, CRC(a167fe9a) SHA1(f2770d93ee5ae4eb9b3bcb052e14e36f53eec707) ) ROM_LOAD( "17", 0x2000, 0x2000, CRC(13ffe662) SHA1(2ea7855a14a4b8429751bae2e670e77608f93406) ) ROM_LOAD( "18", 0x4000, 0x2000, CRC(debe6531) SHA1(34b3b70a1872527266c664b2a82014d028a4ff1e) ) ROM_LOAD( "19", 0x6000, 0x2000, CRC(5816f947) SHA1(2236bed3e82980d3e7de3749aef0fbab042086e6) ) ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) ROM_LOAD( "14", 0x0000, 0x1000, CRC(2c0e9bbe) SHA1(e34ab774d2eb17ddf51af513dbcaa0c51f8dcbf7) ) ROM_LOAD( "15", 0x1000, 0x1000, CRC(a6eeaa50) SHA1(052cd3e906ca028e6f55d0caa1e1386482684cbf) ) ROM_REGION( 0x2000, REGION_GFX3, ROMREGION_DISPOSE ) ROM_LOAD( "12", 0x0000, 0x1000, CRC(7f7afe80) SHA1(e8a549b8a8985c61d3ba452e348414146f2bc77e) ) ROM_LOAD( "13", 0x1000, 0x1000, CRC(f169b93f) SHA1(fb0617162542d688503fc6618dd430308e259455) ) ROM_REGION( 0xc0000, REGION_USER1, 0 ) ROM_LOAD( "5", 0x00000, 0x2000, CRC(299b05f2) SHA1(3c1804bccb514bada4bed68a6af08db63a8f1b19) ) ROM_LOAD( "6", 0x02000, 0x2000, CRC(38ae2616) SHA1(62c96f32532f0d7e2cf1606a303d81ebb4aada7d) ) ROM_LOAD( "7", 0x04000, 0x2000, CRC(4210f6ef) SHA1(525d8413afabf97cf1d04ee9a3c3d980b91bde65) ) ROM_LOAD( "8", 0x06000, 0x2000, CRC(91a32130) SHA1(cbcd673b47b672b9ce78c7354dacb5964a81db6f) ) ROM_LOAD( "9", 0x08000, 0x2000, CRC(ccb82f09) SHA1(37c23f13aa0728bae82dba9e2858a8d81fa8afa5) ) ROM_LOAD( "10", 0x0a000, 0x2000, CRC(5452aba1) SHA1(03ef47161d0ab047c8675d6ffd3b7acf81f74721) ) ROM_REGION( 0x0400, REGION_PROMS, 0 ) ROM_LOAD( "prom1", 0x00000, 0x0100, NO_DUMP ) ROM_LOAD( "prom2", 0x00100, 0x0100, NO_DUMP ) ROM_LOAD( "prom3", 0x00200, 0x0100, NO_DUMP ) ROM_LOAD( "prom4", 0x00300, 0x0100, NO_DUMP ) ROM_END static DRIVER_INIT( ddayjlc ) { #define repack(n)\ dst[newadr+0+n] = src[oldaddr+0+n];\ dst[newadr+1+n] = src[oldaddr+1+n];\ dst[newadr+2+n] = src[oldaddr+2+n];\ dst[newadr+3+n] = src[oldaddr+3+n];\ dst[newadr+4+n] = src[oldaddr+4+n];\ dst[newadr+5+n] = src[oldaddr+5+n];\ dst[newadr+6+n] = src[oldaddr+6+n];\ dst[newadr+7+n] = src[oldaddr+7+n];\ dst[newadr+8+n] = src[oldaddr+0+0x2000+n];\ dst[newadr+9+n] = src[oldaddr+1+0x2000+n];\ dst[newadr+10+n] = src[oldaddr+2+0x2000+n];\ dst[newadr+11+n] = src[oldaddr+3+0x2000+n];\ dst[newadr+12+n] = src[oldaddr+4+0x2000+n];\ dst[newadr+13+n] = src[oldaddr+5+0x2000+n];\ dst[newadr+14+n] = src[oldaddr+6+0x2000+n];\ dst[newadr+15+n] = src[oldaddr+7+0x2000+n];\ dst[newadr+16+n] = src[oldaddr+0+8+n];\ dst[newadr+17+n] = src[oldaddr+1+8+n];\ dst[newadr+18+n] = src[oldaddr+2+8+n];\ dst[newadr+19+n] = src[oldaddr+3+8+n];\ dst[newadr+20+n] = src[oldaddr+4+8+n];\ dst[newadr+21+n] = src[oldaddr+5+8+n];\ dst[newadr+22+n] = src[oldaddr+6+8+n];\ dst[newadr+23+n] = src[oldaddr+7+8+n];\ dst[newadr+24+n] = src[oldaddr+0+0x2008+n];\ dst[newadr+25+n] = src[oldaddr+1+0x2008+n];\ dst[newadr+26+n] = src[oldaddr+2+0x2008+n];\ dst[newadr+27+n] = src[oldaddr+3+0x2008+n];\ dst[newadr+28+n] = src[oldaddr+4+0x2008+n];\ dst[newadr+29+n] = src[oldaddr+5+0x2008+n];\ dst[newadr+30+n] = src[oldaddr+6+0x2008+n];\ dst[newadr+31+n] = src[oldaddr+7+0x2008+n]; { UINT32 oldaddr, newadr, length,j; UINT8 *src, *dst, *temp; temp = malloc_or_die(0x10000); src = temp; dst = memory_region(REGION_GFX1); length = memory_region_length(REGION_GFX1); memcpy(src, dst, length); newadr=0; oldaddr=0; for (j = 0; j < length/2; j+=32) { repack(0); repack(0x4000) newadr+=32; oldaddr+=16; } free(temp); } memory_set_bankptr( 1, memory_region(REGION_USER1) ); } GAME( 1984, ddayjlc, 0, ddayjlc, ddayjlc, ddayjlc, ROT90, "Jaleco", "D-Day (Jaleco - set 1)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_IMPERFECT_SOUND ) GAME( 1984, ddayjlca, ddayjlc, ddayjlc, ddayjlc, ddayjlc, ROT90, "Jaleco", "D-Day (Jaleco - set 2)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_IMPERFECT_SOUND )