diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h index 77aedb49edc..5d219ec003c 100644 --- a/src/emu/drivers/xtal.h +++ b/src/emu/drivers/xtal.h @@ -92,7 +92,7 @@ enum XTAL_17_73447MHz = 17734470, /* 4 times the PAL subcarrier */ XTAL_18MHz = 18000000, /* S.A.R, Ikari Warriors 3 */ XTAL_18_432MHz = 18432000, /* Extremely common, used on 100's of PCBs */ - XTAL_19_6608MHz = 19660800, /* Euro League (bootleg), labeled as "UKI 19.6608 20PF" */ + XTAL_19_6608MHz = 19660800, /* Euro League (bootleg), labeled as "UKI 19.6608 20PF" */ XTAL_19_923MHz = 19923000, /* Cinematronics vectors */ XTAL_19_968MHz = 19968000, /* Used mostly by some Taito games */ XTAL_20MHz = 20000000, diff --git a/src/mame/drivers/armedf.c b/src/mame/drivers/armedf.c index 5f12fe8df2d..e7ab2c8ee22 100644 --- a/src/mame/drivers/armedf.c +++ b/src/mame/drivers/armedf.c @@ -835,10 +835,10 @@ static MACHINE_DRIVER_START( kodure ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MDRV_SOUND_ADD(DAC, 0) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MDRV_SOUND_ADD(DAC, 0) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MACHINE_DRIVER_END static MACHINE_DRIVER_START( armedf ) diff --git a/src/mame/drivers/suprridr.c b/src/mame/drivers/suprridr.c index 6f9b7b55dcb..d957cd586d8 100644 --- a/src/mame/drivers/suprridr.c +++ b/src/mame/drivers/suprridr.c @@ -352,12 +352,12 @@ static const struct AY8910interface ay8910_interface = static MACHINE_DRIVER_START( suprridr ) /* basic machine hardware */ - MDRV_CPU_ADD(Z80, 10000000/4) /* just a guess */ + MDRV_CPU_ADD(Z80, XTAL_49_152MHz/16) /* 3 MHz */ MDRV_CPU_PROGRAM_MAP(main_map,0) MDRV_CPU_IO_MAP(main_portmap,0) MDRV_CPU_VBLANK_INT("main", main_nmi_gen) - MDRV_CPU_ADD(Z80, 10000000/4) /* just a guess */ + MDRV_CPU_ADD(Z80, 10000000/4) /* 2.5 MHz */ /* audio CPU */ MDRV_CPU_PROGRAM_MAP(sound_map,0) MDRV_CPU_IO_MAP(sound_portmap,0) @@ -380,10 +380,10 @@ static MACHINE_DRIVER_START( suprridr ) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") - MDRV_SOUND_ADD(AY8910, 10000000/8) + MDRV_SOUND_ADD(AY8910, XTAL_49_152MHz/32) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MDRV_SOUND_ADD(AY8910, 10000000/8) + MDRV_SOUND_ADD(AY8910, XTAL_49_152MHz/32) MDRV_SOUND_CONFIG(ay8910_interface) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_DRIVER_END diff --git a/src/mame/drivers/tmnt.c b/src/mame/drivers/tmnt.c index 4c593016102..5f60c63b71f 100644 --- a/src/mame/drivers/tmnt.c +++ b/src/mame/drivers/tmnt.c @@ -2563,13 +2563,13 @@ static MACHINE_DRIVER_START( blswhstl ) MDRV_SPEAKER_STANDARD_STEREO("left", "right") MDRV_SOUND_ADD(YM2151, XTAL_3_579545MHz) - MDRV_SOUND_ROUTE(0, "left", 1.0) - MDRV_SOUND_ROUTE(1, "right", 1.0) + MDRV_SOUND_ROUTE(0, "left", 0.70) + MDRV_SOUND_ROUTE(1, "right", 0.70) MDRV_SOUND_ADD(K053260, XTAL_3_579545MHz) MDRV_SOUND_CONFIG(k053260_interface) - MDRV_SOUND_ROUTE(0, "right", 0.75) /* fixed inverted stereo channels */ - MDRV_SOUND_ROUTE(1, "left", 0.75) + MDRV_SOUND_ROUTE(0, "right", 0.50) /* fixed inverted stereo channels */ + MDRV_SOUND_ROUTE(1, "left", 0.50) MACHINE_DRIVER_END @@ -2721,8 +2721,8 @@ static MACHINE_DRIVER_START( tmnt2 ) MDRV_SOUND_ADD(K053260, XTAL_3_579545MHz) MDRV_SOUND_CONFIG(k053260_interface) - MDRV_SOUND_ROUTE(0, "left", 0.70) - MDRV_SOUND_ROUTE(1, "right", 0.70) + MDRV_SOUND_ROUTE(0, "left", 0.75) + MDRV_SOUND_ROUTE(1, "right", 0.75) MACHINE_DRIVER_END @@ -2764,8 +2764,8 @@ static MACHINE_DRIVER_START( ssriders ) MDRV_SOUND_ADD(K053260, XTAL_3_579545MHz) MDRV_SOUND_CONFIG(k053260_interface) - MDRV_SOUND_ROUTE(0, "left", 0.75) - MDRV_SOUND_ROUTE(1, "right", 0.75) + MDRV_SOUND_ROUTE(0, "left", 0.70) + MDRV_SOUND_ROUTE(1, "right", 0.70) MACHINE_DRIVER_END @@ -2839,8 +2839,8 @@ static MACHINE_DRIVER_START( thndrx2 ) MDRV_SOUND_ADD(K053260, XTAL_3_579545MHz) MDRV_SOUND_CONFIG(k053260_interface) - MDRV_SOUND_ROUTE(0, "left", 0.70) - MDRV_SOUND_ROUTE(1, "right", 0.70) + MDRV_SOUND_ROUTE(0, "left", 0.75) + MDRV_SOUND_ROUTE(1, "right", 0.75) MACHINE_DRIVER_END diff --git a/src/mame/drivers/toaplan1.c b/src/mame/drivers/toaplan1.c index 262a79c7c42..ac13f78527a 100644 --- a/src/mame/drivers/toaplan1.c +++ b/src/mame/drivers/toaplan1.c @@ -1357,7 +1357,7 @@ static MACHINE_DRIVER_START( zerowing ) MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) MDRV_SCREEN_ADD("main", RASTER) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE( (28000000.0 / 4) / (450 * 282) ) /* fixed by SUZ */ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(432, 262) /* copied these from toaplan2, to be verified */ MDRV_SCREEN_VISIBLE_AREA(0, 319, 16, 255) diff --git a/src/mame/drivers/twin16.c b/src/mame/drivers/twin16.c index 3b3962ee1ad..8131973f67d 100644 --- a/src/mame/drivers/twin16.c +++ b/src/mame/drivers/twin16.c @@ -71,6 +71,7 @@ extern VIDEO_UPDATE( twin16 ); extern VIDEO_EOF( twin16 ); extern VIDEO_UPDATE( vulcan ); + extern void twin16_spriteram_process( void ); UINT16 twin16_custom_video; @@ -958,11 +959,11 @@ static MACHINE_DRIVER_START( twin16 ) /* audio CPU */ MDRV_CPU_PROGRAM_MAP(readmem_sound,writemem_sound) - MDRV_CPU_ADD(M68000, 10000000) + MDRV_CPU_ADD(M68000, XTAL_18_432MHz/2) MDRV_CPU_PROGRAM_MAP(readmem_sub,writemem_sub) MDRV_CPU_VBLANK_INT("main", CPUB_interrupt) - MDRV_CPU_ADD(M68000, 10000000) + MDRV_CPU_ADD(M68000, XTAL_18_432MHz/2) MDRV_CPU_PROGRAM_MAP(readmem,writemem) MDRV_CPU_VBLANK_INT("main", CPUA_interrupt) @@ -972,7 +973,7 @@ static MACHINE_DRIVER_START( twin16 ) MDRV_VIDEO_ATTRIBUTES(VIDEO_BUFFERS_SPRITERAM) MDRV_SCREEN_ADD("main", RASTER) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(((double)XTAL_18_432MHz / 2) / (576 * 264)) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(40*8, 32*8) @@ -1069,6 +1070,7 @@ static MACHINE_DRIVER_START( mia ) MDRV_SCREEN_MODIFY("main") MDRV_SCREEN_VISIBLE_AREA(1*8, 39*8-1, 2*8, 30*8-1) MDRV_VIDEO_START(fround) + MACHINE_DRIVER_END static MACHINE_DRIVER_START( vulcan ) diff --git a/src/mame/drivers/xmen.c b/src/mame/drivers/xmen.c index 5c719c6e2d9..f550e391667 100644 --- a/src/mame/drivers/xmen.c +++ b/src/mame/drivers/xmen.c @@ -494,8 +494,7 @@ static MACHINE_DRIVER_START( xmen ) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(64*8, 32*8) - MDRV_SCREEN_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 ) - + MDRV_SCREEN_VISIBLE_AREA(13*8, (64-13)*8-1, 2*8, 30*8-1 ) /* correct, same issue of TMNT2 */ MDRV_PALETTE_LENGTH(2048) MDRV_VIDEO_START(xmen) diff --git a/src/mame/includes/snk.h b/src/mame/includes/snk.h index bfc6ad1cf85..cb3bc94dc43 100644 --- a/src/mame/includes/snk.h +++ b/src/mame/includes/snk.h @@ -31,6 +31,7 @@ extern VIDEO_START( snk ); extern VIDEO_START( sgladiat ); extern VIDEO_UPDATE( tnk3 ); +extern VIDEO_UPDATE( athena ); extern VIDEO_UPDATE( ikari ); extern VIDEO_UPDATE( tdfever ); extern VIDEO_UPDATE( gwar ); diff --git a/src/mame/machine/s16fd.c b/src/mame/machine/s16fd.c index fab58de0b04..06e3c198b0b 100644 --- a/src/mame/machine/s16fd.c +++ b/src/mame/machine/s16fd.c @@ -26,6 +26,9 @@ static UINT16 *fd1094_cacheregion[CACHE_ENTRIES]; // a cache region where CACHE_ 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 void (*fd1094_set_decrypted)(UINT8 *); void *fd1094_get_decrypted_base(void) @@ -52,6 +55,16 @@ static void fd1094_setstate_and_decrypt(int state) int i; UINT32 addr; + switch (state & 0x300) + { + case 0x000: + case FD1094_STATE_RESET: + fd1094_selected_state = state & 0xff; + break; + } + + fd1094_state = state; + cpunum_set_info_int(0, CPUINFO_INT_REGISTER + M68K_PREF_ADDR, 0x0010); // force a flush of the prefetch cache /* set the FD1094 state ready to decrypt.. */ @@ -142,6 +155,20 @@ void fd1094_machine_init(void) cpunum_set_irq_callback(0, fd1094_int_callback); } +static STATE_POSTLOAD( fd1094_postload ) +{ + if (fd1094_state != -1) + { + int selected_state = fd1094_selected_state; + int state = fd1094_state; + + fd1094_machine_init(); + + fd1094_setstate_and_decrypt(selected_state); + fd1094_setstate_and_decrypt(state); + } +} + #ifdef ENABLE_DEBUGGER static void key_changed(void) @@ -186,7 +213,8 @@ void fd1094_driver_init(void (*set_decrypted)(UINT8 *)) fd1094_cacheregion[i] = auto_malloc(fd1094_cpuregionsize); fd1094_cached_states[i] = -1; } - fd1094_current_cacheposition = 0; + fd1094_current_cacheposition = 0; + fd1094_state = -1; #ifdef ENABLE_DEBUGGER /* key debugging */ @@ -196,4 +224,8 @@ void fd1094_driver_init(void (*set_decrypted)(UINT8 *)) fd1094_init_debugging(REGION_CPU1, REGION_USER1, REGION_USER2, key_changed); } #endif + + state_save_register_global(fd1094_selected_state); + state_save_register_global(fd1094_state); + state_save_register_postload(Machine, fd1094_postload, NULL); } diff --git a/src/mame/machine/s24fd.c b/src/mame/machine/s24fd.c index a64b0fb75e5..e87300bf0a2 100644 --- a/src/mame/machine/s24fd.c +++ b/src/mame/machine/s24fd.c @@ -22,6 +22,9 @@ static UINT16* s24_fd1094_cacheregion[S16_NUMCACHE]; // a cache region where S16 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 @@ -31,6 +34,16 @@ static void s24_fd1094_setstate_and_decrypt(int state) int i; UINT32 addr; + switch (state & 0x300) + { + case 0x000: + case FD1094_STATE_RESET: + fd1094_selected_state = state & 0xff; + break; + } + + fd1094_state = state; + cpunum_set_info_int(1, CPUINFO_INT_REGISTER + M68K_PREF_ADDR, 0x0010); // force a flush of the prefetch cache /* set the s24_fd1094 state ready to decrypt.. */ @@ -123,6 +136,20 @@ void s24_fd1094_machine_init(void) cpunum_set_irq_callback(1, s24_fd1094_int_callback); } +static STATE_POSTLOAD( s24_fd1094_postload ) +{ + if (fd1094_state != -1) + { + int selected_state = fd1094_selected_state; + int state = fd1094_state; + + s24_fd1094_machine_init(); + + s24_fd1094_setstate_and_decrypt(selected_state); + s24_fd1094_setstate_and_decrypt(state); + } +} + /* startup function, to be called from DRIVER_INIT (once on startup) */ void s24_fd1094_driver_init(void) { @@ -146,4 +173,10 @@ void s24_fd1094_driver_init(void) fd1094_cached_states[i] = -1; fd1094_current_cacheposition = 0; + + fd1094_state = -1; + + state_save_register_global(fd1094_selected_state); + state_save_register_global(fd1094_state); + state_save_register_postload(Machine, s24_fd1094_postload, NULL); } diff --git a/src/mame/video/snk.c b/src/mame/video/snk.c index 160db1e0e58..d36c81eba58 100644 --- a/src/mame/video/snk.c +++ b/src/mame/video/snk.c @@ -169,6 +169,7 @@ static void tnk3_draw_sprites(running_machine *machine, bitmap_t *bitmap, const const gfx_element *gfx = machine->gfx[2]; int tile_number, attributes, color, sx, sy; + int yflip; int offs; for(offs = 0; offs < 50*4; offs+=4) @@ -176,9 +177,8 @@ static void tnk3_draw_sprites(running_machine *machine, bitmap_t *bitmap, const if(*(UINT32*)(spriteram+offs) == 0 || *(UINT32*)(spriteram+offs) == -1) continue; tile_number = spriteram[offs+1]; - attributes = spriteram[offs+3]; /* YBBX.CCCC */ + attributes = spriteram[offs+3]; /* YBFX.CCCC */ if(attributes & 0x40) tile_number |= 256; - if(attributes & 0x20) tile_number |= 512; color = attributes & 0xf; sx = xscroll - spriteram[offs+2]; @@ -189,8 +189,9 @@ static void tnk3_draw_sprites(running_machine *machine, bitmap_t *bitmap, const sy &= 0x1ff; if (sx > 512-16) sx -= 512; if (sy > 512-16) sy -= 512; + yflip = attributes & 0x20; - drawgfx(bitmap,gfx,tile_number,color,0,0,sx,sy,cliprect,TRANSPARENCY_PEN_TABLE,7); + drawgfx(bitmap,gfx,tile_number,color,0,yflip,sx,sy,cliprect,TRANSPARENCY_PEN_TABLE,7); } } @@ -237,6 +238,80 @@ VIDEO_UPDATE( tnk3 ) return 0; } +void athena_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int xscroll, int yscroll ) +{ + const gfx_element *gfx = machine->gfx[2]; + + int tile_number, attributes, color, sx, sy; + int offs; + + for(offs = 0; offs < 50*4; offs+=4) + { + if(*(UINT32*)(spriteram+offs) == 0 || *(UINT32*)(spriteram+offs) == -1) continue; + + tile_number = spriteram[offs+1]; + attributes = spriteram[offs+3]; /* YBBX.CCCC */ + if(attributes & 0x40) tile_number |= 256; + if(attributes & 0x20) tile_number |= 512; + + color = attributes & 0xf; + sx = xscroll - spriteram[offs+2]; + if(!(attributes & 0x80)) sx += 256; + sy = -yscroll + spriteram[offs]; + if(attributes & 0x10) sy += 256; + sx &= 0x1ff; + sy &= 0x1ff; + if (sx > 512-16) sx -= 512; + if (sy > 512-16) sy -= 512; + + drawgfx(bitmap,gfx,tile_number,color,0,0,sx,sy,cliprect,TRANSPARENCY_PEN_TABLE,7); + } +} + +/* Same as tnk3 but sprite attribute bit 5 is extra bank bit instead of y-flip. */ +VIDEO_UPDATE( athena ) +{ + UINT8 *ram = snk_rambase - 0xd000; + int attributes = ram[0xc800]; + /* + X------- + -X------ character bank (for text layer) + --X----- + ---X---- scrolly MSB (background) + ----X--- scrolly MSB (sprites) + -----X-- + ------X- scrollx MSB (background) + -------X scrollx MSB (sprites) + */ + + /* to be moved to memmap */ + spriteram = &ram[0xd000]; + + { + int bg_scrollx = -ram[0xcc00] + 15; + int bg_scrolly = -ram[0xcb00] + 8; + if(attributes & 0x02) bg_scrollx += 256; + if(attributes & 0x10) bg_scrolly += 256; + tnk3_draw_background(screen->machine, bitmap, cliprect, bg_scrollx, bg_scrolly, 64, 64, 0 ); + } + + { + int sp_scrollx = ram[0xca00] + 29; + int sp_scrolly = ram[0xc900] + 9; + if(attributes & 0x01) sp_scrollx += 256; + if(attributes & 0x08) sp_scrolly += 256; + athena_draw_sprites(screen->machine, bitmap, cliprect, sp_scrollx, sp_scrolly ); + } + + { + int bank = (attributes & 0x40) ? 1:0; + + tnk3_draw_text(screen->machine, bitmap, cliprect, bank, &ram[0xf800] ); + tnk3_draw_status(screen->machine, bitmap, cliprect, bank, &ram[0xfc00] ); + } + return 0; +} + /************************************************************************************/ VIDEO_START( sgladiat )