mirror of
https://github.com/holub/mame
synced 2025-06-04 03:46:29 +03:00
Added basic TMS9927 implementation. Hooked it up to the statriv2
and thief drivers. Bunch of improvements to the Status system emulation. Correct video timing, hooked up TMS9927, corrected colors, etc. Still some work to do. New games ========= Status Blackjack Status Fun Casino
This commit is contained in:
parent
3ad403ee61
commit
7a0f34cb33
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -978,6 +978,8 @@ src/emu/video/tlc34076.c svneol=native#text/plain
|
||||
src/emu/video/tlc34076.h svneol=native#text/plain
|
||||
src/emu/video/tms34061.c svneol=native#text/plain
|
||||
src/emu/video/tms34061.h svneol=native#text/plain
|
||||
src/emu/video/tms9927.c svneol=native#text/plain
|
||||
src/emu/video/tms9927.h svneol=native#text/plain
|
||||
src/emu/video/tms9928a.c svneol=native#text/plain
|
||||
src/emu/video/tms9928a.h svneol=native#text/plain
|
||||
src/emu/video/v9938.c svneol=native#text/plain
|
||||
|
@ -185,6 +185,7 @@ EMUVIDEOOBJS = \
|
||||
$(EMUVIDEO)/s2636.o \
|
||||
$(EMUVIDEO)/tlc34076.o \
|
||||
$(EMUVIDEO)/tms34061.o \
|
||||
$(EMUVIDEO)/tms9927.o \
|
||||
$(EMUVIDEO)/tms9928a.o \
|
||||
$(EMUVIDEO)/v9938.o \
|
||||
$(EMUVIDEO)/vector.o \
|
||||
|
@ -51,9 +51,6 @@ enum
|
||||
#define MODE_TRANSPARENT_BLANK(d) (((d)->mode_control & 0x88) == 0x08)
|
||||
#define MODE_UPDATE_STROBE(d) (((d)->mode_control & 0x40) != 0)
|
||||
|
||||
/* tags for state saving */
|
||||
static const char * const device_tags[NUM_TYPES] = { "mc6845", "mc6845-1", "c6545-1", "r6545-1", "h46505", "hd6845", "sy6545-1" };
|
||||
|
||||
/* capabilities */
|
||||
static const int supports_disp_start_addr_r[NUM_TYPES] = { TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE };
|
||||
static const int supports_vert_sync_width[NUM_TYPES] = { FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE };
|
||||
|
319
src/emu/video/tms9927.c
Normal file
319
src/emu/video/tms9927.c
Normal file
@ -0,0 +1,319 @@
|
||||
/**********************************************************************
|
||||
|
||||
TI TMS9927 and compatible CRT controller emulation
|
||||
|
||||
Copyright Nicola Salmoria and the MAME Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "tms9927.h"
|
||||
|
||||
|
||||
static const UINT8 chars_per_row_value[8] = { 20, 32, 40, 64, 72, 80, 96, 132 };
|
||||
static const UINT8 skew_bits_value[4] = { 0, 1, 2, 2 };
|
||||
|
||||
|
||||
#define HCOUNT(t) ((t)->reg[0] + 1)
|
||||
#define INTERLACED(t) (((t)->reg[1] >> 7) & 0x01)
|
||||
#define HSYNC_WIDTH(t) (((t)->reg[1] >> 4) & 0x0f)
|
||||
#define HSYNC_DELAY(t) (((t)->reg[1] >> 0) & 0x07)
|
||||
#define SCANS_PER_DATA_ROW(t) ((((t)->reg[2] >> 3) & 0x0f) + 1)
|
||||
#define CHARS_PER_DATA_ROW(t) (chars_per_row_value[((t)->reg[2] >> 0) & 0x07])
|
||||
#define SKEW_BITS(t) (skew_bits_value[((t)->reg[3] >> 6) & 0x03])
|
||||
#define DATA_ROWS_PER_FRAME(t) ((((t)->reg[3] >> 0) & 0x3f) + 1)
|
||||
#define SCAN_LINES_PER_FRAME(t) (((t)->reg[4] * 2) + 256)
|
||||
#define VERTICAL_DATA_START(t) ((t)->reg[5])
|
||||
#define LAST_DISP_DATA_ROW(t) ((t)->reg[6] & 0x3f)
|
||||
|
||||
|
||||
typedef struct _tms9927_state tms9927_state;
|
||||
struct _tms9927_state
|
||||
{
|
||||
/* driver-controlled state */
|
||||
const tms9927_interface *intf;
|
||||
const device_config *screen;
|
||||
const UINT8 *selfload;
|
||||
|
||||
/* live state */
|
||||
UINT32 clock;
|
||||
UINT8 reg[9];
|
||||
UINT8 start_datarow;
|
||||
UINT8 reset;
|
||||
UINT8 hpixels_per_column;
|
||||
|
||||
/* derived state; no need to save */
|
||||
UINT8 valid_config;
|
||||
UINT16 total_hpix, total_vpix;
|
||||
UINT16 visible_hpix, visible_vpix;
|
||||
};
|
||||
|
||||
|
||||
static STATE_POSTLOAD( tms9927_state_save_postload );
|
||||
static void recompute_parameters(tms9927_state *tms, int postload);
|
||||
|
||||
|
||||
tms9927_interface tms9927_null_interface = { 0 };
|
||||
|
||||
|
||||
/* makes sure that the passed in device is the right type */
|
||||
INLINE tms9927_state *get_safe_token(const device_config *device)
|
||||
{
|
||||
assert(device != NULL);
|
||||
assert(device->token != NULL);
|
||||
assert(device->type == TMS9927);
|
||||
return (tms9927_state *)device->token;
|
||||
}
|
||||
|
||||
|
||||
static STATE_POSTLOAD( tms9927_state_save_postload )
|
||||
{
|
||||
recompute_parameters((tms9927_state *)param, TRUE);
|
||||
}
|
||||
|
||||
|
||||
static void generic_access(const device_config *device, offs_t offset)
|
||||
{
|
||||
tms9927_state *tms = get_safe_token(device);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x07: /* Processor Self Load */
|
||||
case 0x0f: /* Non-processor self-load */
|
||||
if (tms->selfload != NULL)
|
||||
{
|
||||
int cur;
|
||||
|
||||
for (cur = 0; cur < 7; cur++)
|
||||
tms9927_w(device, cur, tms->selfload[cur]);
|
||||
for (cur = 0; cur < 1; cur++)
|
||||
tms9927_w(device, cur + 0xc, tms->selfload[cur + 7]);
|
||||
}
|
||||
else
|
||||
popmessage("tms9927: self-load initiated with no PROM!");
|
||||
|
||||
/* processor self-load waits with reset enabled;
|
||||
non-processor just goes ahead */
|
||||
tms->reset = (offset == 0x07);
|
||||
break;
|
||||
|
||||
case 0x0a: /* Reset */
|
||||
if (!tms->reset)
|
||||
{
|
||||
video_screen_update_now(tms->screen);
|
||||
tms->reset = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x0b: /* Up scroll */
|
||||
mame_printf_debug("Up scroll\n");
|
||||
video_screen_update_now(tms->screen);
|
||||
tms->start_datarow = (tms->start_datarow + 1) % DATA_ROWS_PER_FRAME(tms);
|
||||
break;
|
||||
|
||||
case 0x0e: /* Start timing chain */
|
||||
if (tms->reset)
|
||||
{
|
||||
video_screen_update_now(tms->screen);
|
||||
tms->reset = FALSE;
|
||||
recompute_parameters(tms, FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE8_DEVICE_HANDLER( tms9927_w )
|
||||
{
|
||||
tms9927_state *tms = get_safe_token(device);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: /* HORIZONTAL CHARACTER COUNT */
|
||||
case 0x01: /* INTERLACED / HSYNC WIDTH / HSYNC DELAY */
|
||||
case 0x02: /* SCANS PER DATA ROW / CHARACTERS PER DATA ROW */
|
||||
case 0x03: /* SKEW BITS / DATA ROWS PER FRAME */
|
||||
case 0x04: /* SCAN LINES / FRAME */
|
||||
case 0x05: /* VERTICAL DATA START */
|
||||
case 0x06: /* LAST DISPLAYED DATA ROW */
|
||||
tms->reg[offset] = data;
|
||||
recompute_parameters(tms, FALSE);
|
||||
break;
|
||||
|
||||
case 0x0c: /* LOAD CURSOR CHARACTER ADDRESS */
|
||||
case 0x0d: /* LOAD CURSOR ROW ADDRESS */
|
||||
tms->reg[offset - 0x0c + 7] = data;
|
||||
recompute_parameters(tms, FALSE);
|
||||
break;
|
||||
|
||||
default:
|
||||
generic_access(device, offset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
READ8_DEVICE_HANDLER( tms9927_r )
|
||||
{
|
||||
tms9927_state *tms = get_safe_token(device);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x08: /* READ CURSOR CHARACTER ADDRESS */
|
||||
case 0x09: /* READ CURSOR ROW ADDRESS */
|
||||
return tms->reg[offset - 0x08 + 7];
|
||||
|
||||
default:
|
||||
generic_access(device, offset);
|
||||
break;
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
|
||||
int tms9927_screen_reset(const device_config *device)
|
||||
{
|
||||
tms9927_state *tms = get_safe_token(device);
|
||||
return tms->reset;
|
||||
}
|
||||
|
||||
|
||||
int tms9927_upscroll_offset(const device_config *device)
|
||||
{
|
||||
tms9927_state *tms = get_safe_token(device);
|
||||
return tms->start_datarow;
|
||||
}
|
||||
|
||||
|
||||
static void recompute_parameters(tms9927_state *tms, int postload)
|
||||
{
|
||||
UINT16 offset_hpix, offset_vpix;
|
||||
attoseconds_t refresh;
|
||||
rectangle visarea;
|
||||
|
||||
if (tms->intf == NULL || tms->reset)
|
||||
return;
|
||||
|
||||
/* compute the screen sizes */
|
||||
tms->total_hpix = HCOUNT(tms) * tms->hpixels_per_column;
|
||||
tms->total_vpix = SCAN_LINES_PER_FRAME(tms);
|
||||
|
||||
/* determine the visible area, avoid division by 0 */
|
||||
tms->visible_hpix = CHARS_PER_DATA_ROW(tms) * tms->hpixels_per_column;
|
||||
tms->visible_vpix = (LAST_DISP_DATA_ROW(tms) + 1) * SCANS_PER_DATA_ROW(tms);
|
||||
|
||||
/* determine the horizontal/vertical offsets */
|
||||
offset_hpix = HSYNC_DELAY(tms) * tms->hpixels_per_column;
|
||||
offset_vpix = VERTICAL_DATA_START(tms);
|
||||
|
||||
mame_printf_debug("TMS9937: Total = %dx%d, Visible = %dx%d, Offset=%dx%d, Skew=%d\n", tms->total_hpix, tms->total_vpix, tms->visible_hpix, tms->visible_vpix, offset_hpix, offset_vpix, SKEW_BITS(tms));
|
||||
|
||||
/* see if it all makes sense */
|
||||
tms->valid_config = TRUE;
|
||||
if (tms->visible_hpix > tms->total_hpix || tms->visible_vpix > tms->total_vpix)
|
||||
{
|
||||
tms->valid_config = FALSE;
|
||||
logerror("tms9927: invalid visible size (%dx%d) versus total size (%dx%d)\n", tms->visible_hpix, tms->visible_vpix, tms->total_hpix, tms->total_vpix);
|
||||
}
|
||||
|
||||
/* update */
|
||||
if (!tms->valid_config)
|
||||
return;
|
||||
|
||||
/* create a visible area */
|
||||
/* fix me: how do the offsets fit in here? */
|
||||
visarea.min_x = 0;
|
||||
visarea.max_x = tms->visible_hpix - 1;
|
||||
visarea.min_y = 0;
|
||||
visarea.max_y = tms->visible_vpix - 1;
|
||||
|
||||
refresh = HZ_TO_ATTOSECONDS(tms->clock) * tms->total_hpix * tms->total_vpix;
|
||||
|
||||
video_screen_configure(tms->screen, tms->total_hpix, tms->total_vpix, &visarea, refresh);
|
||||
}
|
||||
|
||||
|
||||
/* device interface */
|
||||
static DEVICE_START( tms9927 )
|
||||
{
|
||||
tms9927_state *tms = get_safe_token(device);
|
||||
|
||||
/* validate arguments */
|
||||
assert(device != NULL);
|
||||
assert(device->tag != NULL);
|
||||
|
||||
tms->intf = (const tms9927_interface *)device->static_config;
|
||||
|
||||
if (tms->intf != NULL)
|
||||
{
|
||||
assert(device->clock > 0);
|
||||
assert(tms->intf->hpixels_per_column > 0);
|
||||
|
||||
/* copy the initial parameters */
|
||||
tms->clock = device->clock;
|
||||
tms->hpixels_per_column = tms->intf->hpixels_per_column;
|
||||
|
||||
/* get the screen device */
|
||||
tms->screen = devtag_get_device(device->machine, tms->intf->screen_tag);
|
||||
assert(tms->screen != NULL);
|
||||
|
||||
/* get the self-load PROM */
|
||||
if (tms->intf->selfload_region != NULL)
|
||||
{
|
||||
tms->selfload = memory_region(device->machine, tms->intf->selfload_region);
|
||||
assert(tms->selfload != NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* register for state saving */
|
||||
state_save_register_postload(device->machine, tms9927_state_save_postload, tms);
|
||||
|
||||
state_save_register_device_item(device, 0, tms->clock);
|
||||
state_save_register_device_item_array(device, 0, tms->reg);
|
||||
state_save_register_device_item(device, 0, tms->start_datarow);
|
||||
state_save_register_device_item(device, 0, tms->reset);
|
||||
state_save_register_device_item(device, 0, tms->hpixels_per_column);
|
||||
}
|
||||
|
||||
|
||||
static DEVICE_STOP( tms9927 )
|
||||
{
|
||||
tms9927_state *tms = get_safe_token(device);
|
||||
|
||||
mame_printf_debug("TMS9937: Final params: (%d, %d, %d, %d, %d, %d, %d)\n",
|
||||
tms->clock,
|
||||
tms->total_hpix,
|
||||
0, tms->visible_hpix,
|
||||
tms->total_vpix,
|
||||
0, tms->visible_vpix);
|
||||
}
|
||||
|
||||
|
||||
static DEVICE_RESET( tms9927 )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DEVICE_GET_INFO( tms9927 )
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
/* --- the following bits of info are returned as 64-bit signed integers --- */
|
||||
case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tms9927_state); break;
|
||||
case DEVINFO_INT_INLINE_CONFIG_BYTES: info->i = 0; break;
|
||||
case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_PERIPHERAL; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to functions --- */
|
||||
case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tms9927); break;
|
||||
case DEVINFO_FCT_STOP: info->stop = DEVICE_STOP_NAME(tms9927); break;
|
||||
case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tms9927); break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case DEVINFO_STR_NAME: strcpy(info->s, "TMS9927"); break;
|
||||
case DEVINFO_STR_FAMILY: strcpy(info->s, "TMS9927 CRTC"); break;
|
||||
case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break;
|
||||
case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break;
|
||||
case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright Nicola Salmoria and the MAME Team"); break;
|
||||
}
|
||||
}
|
56
src/emu/video/tms9927.h
Normal file
56
src/emu/video/tms9927.h
Normal file
@ -0,0 +1,56 @@
|
||||
/**********************************************************************
|
||||
|
||||
TI TMS9927 and compatible CRT controller emulation
|
||||
|
||||
Copyright Nicola Salmoria and the MAME Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __TMS9927__
|
||||
#define __TMS9927__
|
||||
|
||||
|
||||
#define TMS9927 DEVICE_GET_INFO_NAME(tms9927)
|
||||
|
||||
|
||||
#define MDRV_TMS9927_ADD(_tag, _clock, _config) \
|
||||
MDRV_DEVICE_ADD(_tag, TMS9927, _clock) \
|
||||
MDRV_DEVICE_CONFIG(_config)
|
||||
|
||||
#define MDRV_TMS9927_RECONFIG(_tag, _clock, _config) \
|
||||
MDRV_DEVICE_MODIFY(_tag) \
|
||||
MDRV_DEVICE_CLOCK(_clock) \
|
||||
MDRV_DEVICE_CONFIG(_config)
|
||||
|
||||
#define MDRV_TMS9927_REMOVE(_tag) \
|
||||
MDRV_DEVICE_REMOVE(_tag)
|
||||
|
||||
|
||||
|
||||
/* interface */
|
||||
typedef struct _tms9927_interface tms9927_interface;
|
||||
struct _tms9927_interface
|
||||
{
|
||||
const char *screen_tag; /* screen we are acting on */
|
||||
int hpixels_per_column; /* number of pixels per video memory address */
|
||||
const char *selfload_region; /* name of the region with self-load data */
|
||||
};
|
||||
|
||||
extern tms9927_interface tms9927_null_interface;
|
||||
|
||||
|
||||
/* device interface */
|
||||
DEVICE_GET_INFO( tms9927 );
|
||||
|
||||
/* basic read/write handlers */
|
||||
WRITE8_DEVICE_HANDLER( tms9927_w );
|
||||
READ8_DEVICE_HANDLER( tms9927_r );
|
||||
|
||||
/* other queries */
|
||||
int tms9927_screen_reset(const device_config *device);
|
||||
int tms9927_upscroll_offset(const device_config *device);
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -278,6 +278,14 @@ static void tmek_update_mode(offs_t offset)
|
||||
|
||||
static void tmek_protection_w(const address_space *space, offs_t offset, UINT16 data)
|
||||
{
|
||||
/*
|
||||
T-Mek init:
|
||||
($387C0) = $0001
|
||||
Read ($38010), add to memory
|
||||
Write $3C0 bytes to low half of words from $38000-$3877E
|
||||
Read ($38488)
|
||||
*/
|
||||
|
||||
if (LOG_PROTECTION) logerror("%06X:Protection W@%06X = %04X\n", cpu_get_previouspc(space->cpu), offset, data);
|
||||
|
||||
/* track accesses */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -15,10 +15,6 @@ Credits:
|
||||
|
||||
- 8255 emulation (ports 0x30..0x3f) could be better abstracted
|
||||
|
||||
- TMS9927 VTAC: do we need to emulate this?
|
||||
The video controller registers effect screen size (currently
|
||||
hard-coded on a per-game basis).
|
||||
|
||||
- minor blitting glitches in playfield of Thief (XOR vs copy?)
|
||||
|
||||
- Nato Defense gfx ROMs may be hooked up wrong;
|
||||
@ -30,6 +26,10 @@ Credits:
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/samples.h"
|
||||
#include "video/tms9927.h"
|
||||
|
||||
#define MASTER_CLOCK XTAL_20MHz
|
||||
|
||||
|
||||
static UINT8 thief_input_select;
|
||||
|
||||
@ -198,7 +198,7 @@ static ADDRESS_MAP_START( io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x42, 0x43) AM_DEVWRITE("ay2", ay8910_address_data_w)
|
||||
AM_RANGE(0x43, 0x43) AM_DEVREAD("ay2", ay8910_r)
|
||||
AM_RANGE(0x50, 0x50) AM_WRITE(thief_color_plane_w)
|
||||
AM_RANGE(0x60, 0x6f) AM_WRITE(thief_vtcsel_w)
|
||||
AM_RANGE(0x60, 0x6f) AM_DEVREADWRITE("tms", tms9927_r, tms9927_w)
|
||||
AM_RANGE(0x70, 0x7f) AM_WRITE(thief_color_map_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -443,6 +443,11 @@ static const samples_interface natodef_samples_interface =
|
||||
natodef_sample_names
|
||||
};
|
||||
|
||||
static const tms9927_interface tms9927_intf =
|
||||
{
|
||||
"screen",
|
||||
8
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( sharkatt )
|
||||
@ -461,6 +466,8 @@ static MACHINE_DRIVER_START( sharkatt )
|
||||
MDRV_SCREEN_SIZE(32*8, 32*8)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 24*8-1)
|
||||
|
||||
MDRV_TMS9927_ADD("tms", MASTER_CLOCK/4, tms9927_intf)
|
||||
|
||||
MDRV_PALETTE_LENGTH(16)
|
||||
|
||||
MDRV_VIDEO_START(thief)
|
||||
@ -497,6 +504,8 @@ static MACHINE_DRIVER_START( thief )
|
||||
MDRV_SCREEN_SIZE(32*8, 32*8)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
|
||||
|
||||
MDRV_TMS9927_ADD("tms", MASTER_CLOCK/4, tms9927_intf)
|
||||
|
||||
MDRV_PALETTE_LENGTH(16)
|
||||
|
||||
MDRV_VIDEO_START(thief)
|
||||
@ -533,6 +542,8 @@ static MACHINE_DRIVER_START( natodef )
|
||||
MDRV_SCREEN_SIZE(32*8, 32*8)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
|
||||
|
||||
MDRV_TMS9927_ADD("tms", MASTER_CLOCK/4, tms9927_intf)
|
||||
|
||||
MDRV_PALETTE_LENGTH(16)
|
||||
|
||||
MDRV_VIDEO_START(thief)
|
||||
|
@ -8431,6 +8431,7 @@ Other Sun games
|
||||
DRIVER( dblpoint ) /* (c) 1995 Min Corp. */
|
||||
DRIVER( dblpoind ) /* (c) 1995 Dong Bang Electron */
|
||||
DRIVER( statusbj ) /* (c) 1981 Status Games */
|
||||
DRIVER( funcsino ) /* (c) 1981 Status Games */
|
||||
DRIVER( hangman ) /* (c) 1984 Status Games */
|
||||
DRIVER( trivquiz ) /* (c) 1984 Status Games */
|
||||
DRIVER( statriv2 ) /* (c) 1984 Status Games */
|
||||
|
@ -3,6 +3,7 @@
|
||||
*/
|
||||
|
||||
#include "driver.h"
|
||||
#include "video/tms9927.h"
|
||||
|
||||
static UINT8 thief_read_mask, thief_write_mask;
|
||||
static UINT8 thief_video_control;
|
||||
@ -114,6 +115,12 @@ VIDEO_UPDATE( thief ){
|
||||
int flipscreen = thief_video_control&1;
|
||||
const UINT8 *source = videoram;
|
||||
|
||||
if (tms9927_screen_reset(devtag_get_device(screen->machine, "tms")))
|
||||
{
|
||||
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( thief_video_control&4 ) /* visible page */
|
||||
source += 0x2000*4;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user