mirror of
https://github.com/holub/mame
synced 2025-06-05 04:16:28 +03:00
Hooked up sprite buffering in the Jaleco Mega System 1 driver. [Angelo Salese]
This commit is contained in:
parent
c8bfb4755b
commit
f2aff17480
@ -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")
|
||||
|
@ -37,6 +37,7 @@ extern int megasys1_bits_per_color_code;
|
||||
/* Functions */
|
||||
VIDEO_START( megasys1 );
|
||||
VIDEO_UPDATE( megasys1 );
|
||||
VIDEO_EOF( megasys1 );
|
||||
|
||||
PALETTE_INIT( megasys1 );
|
||||
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user