diff --git a/src/mame/drivers/megasys1.c b/src/mame/drivers/megasys1.c index 2c9255a3df9..011d8147142 100644 --- a/src/mame/drivers/megasys1.c +++ b/src/mame/drivers/megasys1.c @@ -102,8 +102,10 @@ RAM RW 0f0000-0f3fff 0e0000-0effff? < bootleg version of rodlandj has one instruction patched out to do exactly the same thing that we are doing (ignoring the 6295 status). -- VERY bad sprite lag in iganinju and plusalph and generally others. - Is this a sprites buffer issue ? +- Understand properly how irqs truly works, kazan / iganinju is (again) broken. + +- 64street: player characters in attract mode doesn't move at all, protection + or btanb? - Understand a handful of unknown bits in video regs @@ -1480,6 +1482,7 @@ static MACHINE_DRIVER_START( system_A ) MDRV_PALETTE_INIT(megasys1) MDRV_VIDEO_START(megasys1) MDRV_VIDEO_UPDATE(megasys1) + MDRV_VIDEO_EOF(megasys1) /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -1584,6 +1587,7 @@ static MACHINE_DRIVER_START( system_D ) MDRV_PALETTE_INIT(megasys1) MDRV_VIDEO_START(megasys1) MDRV_VIDEO_UPDATE(megasys1) + MDRV_VIDEO_EOF(megasys1) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/includes/megasys1.h b/src/mame/includes/megasys1.h index 60b191c6261..f22d52f50aa 100644 --- a/src/mame/includes/megasys1.h +++ b/src/mame/includes/megasys1.h @@ -37,6 +37,7 @@ extern int megasys1_bits_per_color_code; /* Functions */ VIDEO_START( megasys1 ); VIDEO_UPDATE( megasys1 ); +VIDEO_EOF( megasys1 ); PALETTE_INIT( megasys1 ); diff --git a/src/mame/video/megasys1.c b/src/mame/video/megasys1.c index be2031b6187..05fe8ad2293 100644 --- a/src/mame/video/megasys1.c +++ b/src/mame/video/megasys1.c @@ -216,6 +216,8 @@ static int hardware_type_z; static void create_tilemaps(running_machine *machine); +static UINT16 *megasys1_buffer_objectram,*megasys1_buffer2_objectram,*megasys1_buffer_spriteram16,*megasys1_buffer2_spriteram16; + #ifdef MAME_DEBUG @@ -247,6 +249,11 @@ VIDEO_START( megasys1 ) spriteram16 = &megasys1_ram[0x8000/2]; + megasys1_buffer_objectram = auto_alloc_array(machine, UINT16, 0x2000); + megasys1_buffer_spriteram16 = auto_alloc_array(machine, UINT16, 0x2000); + megasys1_buffer2_objectram = auto_alloc_array(machine, UINT16, 0x2000); + megasys1_buffer2_spriteram16 = auto_alloc_array(machine, UINT16, 0x2000); + create_tilemaps(machine); megasys1_tmap[0] = megasys1_tilemap[0][0][0]; megasys1_tmap[1] = megasys1_tilemap[1][0][0]; @@ -587,8 +594,8 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan { for (sprite = 0; sprite < 4 ; sprite ++) { - UINT16 *objectdata = &megasys1_objectram[offs + (0x800/2) * sprite]; - UINT16 *spritedata = &spriteram16[ (objectdata[ 0 ] & 0x7f) * 0x10/2]; + UINT16 *objectdata = &megasys1_buffer2_objectram[offs + (0x800/2) * sprite]; + UINT16 *spritedata = &megasys1_buffer2_spriteram16[ (objectdata[ 0 ] & 0x7f) * 0x10/2]; attr = spritedata[ 8/2 ]; if (((attr & 0xc0)>>6) != sprite) continue; // flipping @@ -1020,3 +1027,16 @@ VIDEO_UPDATE( megasys1 ) draw_sprites(screen->machine,bitmap,cliprect); return 0; } + +VIDEO_EOF( megasys1 ) +{ + /* Sprite are TWO frames ahead, like NMK16 HW. */ +//megasys1_objectram + memcpy(megasys1_buffer2_objectram,megasys1_buffer_objectram, 0x2000); + memcpy(megasys1_buffer_objectram, megasys1_objectram, 0x2000); +//spriteram16 + memcpy(megasys1_buffer2_spriteram16, megasys1_buffer_spriteram16, 0x2000); + memcpy(megasys1_buffer_spriteram16, spriteram16, 0x2000); + +} +