mirror of
https://github.com/holub/mame
synced 2025-05-13 17:38:21 +03:00
Rewrote video routines and fixed partial updates in the Dottori Kun driver [Angelo Salese]
This commit is contained in:
parent
554823374b
commit
b7b03068d1
@ -31,8 +31,7 @@ public:
|
|||||||
: driver_device(machine, config) { }
|
: driver_device(machine, config) { }
|
||||||
|
|
||||||
/* memory pointers */
|
/* memory pointers */
|
||||||
UINT8 * videoram;
|
UINT8 * dotrikun_bitmap;
|
||||||
size_t videoram_size;
|
|
||||||
|
|
||||||
/* video-related */
|
/* video-related */
|
||||||
UINT8 color;
|
UINT8 color;
|
||||||
@ -48,39 +47,42 @@ public:
|
|||||||
static WRITE8_HANDLER( dotrikun_color_w )
|
static WRITE8_HANDLER( dotrikun_color_w )
|
||||||
{
|
{
|
||||||
dotrikun_state *state = space->machine->driver_data<dotrikun_state>();
|
dotrikun_state *state = space->machine->driver_data<dotrikun_state>();
|
||||||
space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos());
|
/*
|
||||||
|
x--- ---- screen color swap?
|
||||||
|
---- -x-- B
|
||||||
|
---- --x- G
|
||||||
|
---- ---x R
|
||||||
|
*/
|
||||||
|
|
||||||
state->color = data;
|
state->color = data;
|
||||||
|
space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static VIDEO_UPDATE( dotrikun )
|
static VIDEO_UPDATE( dotrikun )
|
||||||
{
|
{
|
||||||
dotrikun_state *state = screen->machine->driver_data<dotrikun_state>();
|
dotrikun_state *state = screen->machine->driver_data<dotrikun_state>();
|
||||||
int offs;
|
int x,y,i;
|
||||||
|
|
||||||
pen_t back_pen = MAKE_RGB(pal1bit(state->color >> 3), pal1bit(state->color >> 4), pal1bit(state->color >> 5));
|
pen_t back_pen = MAKE_RGB(pal1bit(state->color >> 3), pal1bit(state->color >> 4), pal1bit(state->color >> 5));
|
||||||
pen_t fore_pen = MAKE_RGB(pal1bit(state->color >> 0), pal1bit(state->color >> 1), pal1bit(state->color >> 2));
|
pen_t fore_pen = MAKE_RGB(pal1bit(state->color >> 0), pal1bit(state->color >> 1), pal1bit(state->color >> 2));
|
||||||
|
|
||||||
for (offs = 0; offs < state->videoram_size; offs++)
|
for(y = (cliprect->min_y & ~1); y < cliprect->max_y; y+=2)
|
||||||
{
|
{
|
||||||
int i;
|
for (x = 0; x < 256; x+=16)
|
||||||
UINT8 data = state->videoram[offs];
|
{
|
||||||
|
UINT8 data = state->dotrikun_bitmap[((x/16)+((y/2)*16))];
|
||||||
UINT8 x = offs << 4;
|
|
||||||
UINT8 y = offs >> 4 << 1;
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
pen_t pen = (data & 0x80) ? fore_pen : back_pen;
|
pen_t pen = ((data >> (7 - i)) & 1) ? fore_pen : back_pen;
|
||||||
|
|
||||||
/* I think the video hardware doubles pixels, screen would be too small otherwise */
|
/* I think the video hardware doubles pixels, screen would be too small otherwise */
|
||||||
*BITMAP_ADDR32(bitmap, y + 0, x + 0) = pen;
|
*BITMAP_ADDR32(bitmap, y + 0, (x + 0) + i*2) = pen;
|
||||||
*BITMAP_ADDR32(bitmap, y + 0, x + 1) = pen;
|
*BITMAP_ADDR32(bitmap, y + 0, (x + 1) + i*2) = pen;
|
||||||
*BITMAP_ADDR32(bitmap, y + 1, x + 0) = pen;
|
*BITMAP_ADDR32(bitmap, y + 1, (x + 0) + i*2) = pen;
|
||||||
*BITMAP_ADDR32(bitmap, y + 1, x + 1) = pen;
|
*BITMAP_ADDR32(bitmap, y + 1, (x + 1) + i*2) = pen;
|
||||||
|
}
|
||||||
x = x + 2;
|
|
||||||
data = data << 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +98,8 @@ static VIDEO_UPDATE( dotrikun )
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( dotrikun_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( dotrikun_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE_SIZE_MEMBER(dotrikun_state, videoram, videoram_size)
|
AM_RANGE(0x8000, 0x85ff) AM_RAM AM_BASE_MEMBER(dotrikun_state, dotrikun_bitmap)
|
||||||
|
AM_RANGE(0x8600, 0x87ff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( io_map, ADDRESS_SPACE_IO, 8 )
|
static ADDRESS_MAP_START( io_map, ADDRESS_SPACE_IO, 8 )
|
||||||
@ -143,11 +146,12 @@ static MACHINE_RESET( dotrikun )
|
|||||||
state->color = 0;
|
state->color = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MASTER_CLOCK XTAL_4MHz
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( dotrikun, dotrikun_state )
|
static MACHINE_CONFIG_START( dotrikun, dotrikun_state )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz */
|
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK) /* 4 MHz */
|
||||||
MCFG_CPU_PROGRAM_MAP(dotrikun_map)
|
MCFG_CPU_PROGRAM_MAP(dotrikun_map)
|
||||||
MCFG_CPU_IO_MAP(io_map)
|
MCFG_CPU_IO_MAP(io_map)
|
||||||
MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
|
MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
|
||||||
@ -159,11 +163,8 @@ static MACHINE_CONFIG_START( dotrikun, dotrikun_state )
|
|||||||
MCFG_VIDEO_UPDATE(dotrikun)
|
MCFG_VIDEO_UPDATE(dotrikun)
|
||||||
|
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_REFRESH_RATE(60)
|
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
|
||||||
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
|
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
|
||||||
MCFG_SCREEN_SIZE(256, 256)
|
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK, 256+32, 0, 256, 192+32, 0, 192) // FIXME: h/v params of this are completely inaccurate, shows it especially under the "CRT test"
|
||||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 192-1)
|
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
@ -186,5 +187,5 @@ ROM_START( dotrikun2 )
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
GAME( 1990, dotrikun, 0, dotrikun, dotrikun, 0, ROT0, "Sega", "Dottori Kun (new version)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
|
GAME( 1990, dotrikun, 0, dotrikun, dotrikun, 0, ROT0, "Sega", "Dottori Kun (new version)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW | GAME_IMPERFECT_GRAPHICS )
|
||||||
GAME( 1990, dotrikun2,dotrikun, dotrikun, dotrikun, 0, ROT0, "Sega", "Dottori Kun (old version)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
|
GAME( 1990, dotrikun2,dotrikun, dotrikun, dotrikun, 0, ROT0, "Sega", "Dottori Kun (old version)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW | GAME_IMPERFECT_GRAPHICS )
|
||||||
|
Loading…
Reference in New Issue
Block a user