From 7a0f34cb33b7a7f8a18c493df797d0b21c3f8a3d Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Mon, 20 Apr 2009 09:31:18 +0000 Subject: [PATCH] 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 --- .gitattributes | 2 + src/emu/emu.mak | 1 + src/emu/video/mc6845.c | 3 - src/emu/video/tms9927.c | 319 ++++++++++++ src/emu/video/tms9927.h | 56 ++ src/mame/drivers/atarigt.c | 8 + src/mame/drivers/statriv2.c | 992 +++++++++++++++++++----------------- src/mame/drivers/thief.c | 21 +- src/mame/mamedriv.c | 1 + src/mame/video/thief.c | 7 + 10 files changed, 941 insertions(+), 469 deletions(-) create mode 100644 src/emu/video/tms9927.c create mode 100644 src/emu/video/tms9927.h diff --git a/.gitattributes b/.gitattributes index 51c8658ea9b..c1d7bbb310c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/src/emu/emu.mak b/src/emu/emu.mak index 9de238685ce..0b79f0a40de 100644 --- a/src/emu/emu.mak +++ b/src/emu/emu.mak @@ -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 \ diff --git a/src/emu/video/mc6845.c b/src/emu/video/mc6845.c index 142b1c3a8e6..44c3ed70757 100644 --- a/src/emu/video/mc6845.c +++ b/src/emu/video/mc6845.c @@ -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 }; diff --git a/src/emu/video/tms9927.c b/src/emu/video/tms9927.c new file mode 100644 index 00000000000..62437c1cf0e --- /dev/null +++ b/src/emu/video/tms9927.c @@ -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; + } +} diff --git a/src/emu/video/tms9927.h b/src/emu/video/tms9927.h new file mode 100644 index 00000000000..883695a7ac2 --- /dev/null +++ b/src/emu/video/tms9927.h @@ -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 diff --git a/src/mame/drivers/atarigt.c b/src/mame/drivers/atarigt.c index 9e2a310b54c..211f72ab9a3 100644 --- a/src/mame/drivers/atarigt.c +++ b/src/mame/drivers/atarigt.c @@ -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 */ diff --git a/src/mame/drivers/statriv2.c b/src/mame/drivers/statriv2.c index 26971a3166e..2d6ce2ce3fb 100644 --- a/src/mame/drivers/statriv2.c +++ b/src/mame/drivers/statriv2.c @@ -24,9 +24,6 @@ * it generates lots of errors in error.log, even though the * * sound seems to make sense. Can someone with a PCB stomach * * the game long enough to verify one way or the other? * -* * -* AS: All games in this driver needs the the PPI8255 and the * -* 9937 CRT Controller properly hooked up. * ****************************************************************** ****************************************************************** @@ -58,170 +55,182 @@ U22 is a soldered in 74s287 (compatible with 82s129) PROM use is unknown -*/ +Issues: + * statusbj - very glitchy, bad video, seems to spin + * hangman - keys are weird, spinner is busted + * +quaquiz2 - no inputs, needs NVRAM + +*/ #include "driver.h" #include "cpu/i8085/i8085.h" #include "sound/ay8910.h" #include "machine/8255ppi.h" +#include "video/tms9927.h" -/* Default NVram, we seem to need one or statriv2 crashes during attract - attempting to display an unterminated message */ +#define MASTER_CLOCK 12440000 -static const UINT8 statriv2_default_eeprom[256] = { - 0x24,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x11,0x00, - 0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x05,0x00,0x00,0x11,0x49,0x41,0x41,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x8D,0x03,0x00,0x50, - 0x17,0x00,0x00,0x01,0xB5,0xAC,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; -static const UINT8 quaquiz2_default_eeprom[256] = { - 0x6f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x02,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0xa5,0x6e,0x03,0xff, - 0x50,0x03,0xff,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x05,0x01,0x02,0x03,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x20,0x20,0x20,0x20,0x4d,0x45,0x52,0x4b,0x55, - 0x52,0x20,0x20,0x20,0x20,0x80,0x20,0x20,0x4d,0x55,0x45,0x4e,0x5a,0x53,0x50,0x49, - 0x45,0x4c,0x20,0x20,0x80,0x51,0x55,0x41,0x44,0x52,0x4f,0x20,0x51,0x55,0x49,0x5a, - 0x20,0x49,0x49,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; +static tilemap *statriv2_tilemap; +static UINT8 *question_offset; -static UINT8 *statriv2_videoram; -static tilemap* statriv2_tilemap; +static UINT8 question_offset_low; +static UINT8 question_offset_mid; +static UINT8 question_offset_high; -/* Video Related, move to video later */ +static UINT8 latched_coin; +static UINT8 last_coin; -static TILE_GET_INFO( get_statriv2_tile_info ) + + +/************************************* + * + * Tilemap callbacks + * + *************************************/ + +static TILE_GET_INFO( horizontal_tile_info ) { - int code = statriv2_videoram[0x400+tile_index]; - int attr = statriv2_videoram[tile_index] & 0x3f; + int code = videoram[0x400+tile_index]; + int attr = videoram[tile_index] & 0x3f; SET_TILE_INFO(0, code, attr, 0); } - -static WRITE8_HANDLER( statriv2_videoram_w ) +static TILE_GET_INFO( vertical_tile_info ) { - statriv2_videoram[offset] = data; - tilemap_mark_tile_dirty(statriv2_tilemap,offset & 0x3ff); + int code = videoram[0x400+tile_index]; + int attr = videoram[tile_index] & 0x3f; + + SET_TILE_INFO(0, ((code & 0x7f) << 1) | ((code & 0x80) >> 7), attr, 0); } -static VIDEO_START (statriv2) -{ - statriv2_tilemap = tilemap_create(machine, get_statriv2_tile_info,tilemap_scan_rows,8,16,64, 16); -} -static VIDEO_START (statriv2v) -{ - statriv2_tilemap = tilemap_create(machine, get_statriv2_tile_info,tilemap_scan_rows,16,8,32, 32); -} +/************************************* + * + * Video/palette start + * + *************************************/ - -static VIDEO_UPDATE (statriv2) -{ - tilemap_draw(bitmap,cliprect,statriv2_tilemap,0,0); - return 0; -} - -static PALETTE_INIT(statriv2) +static PALETTE_INIT( statriv2 ) { int i; for (i = 0; i < 64; i++) { - palette_set_color_rgb(machine,2*i+0,pal1bit(i >> 2),pal1bit(i >> 0),pal1bit(i >> 1)); - palette_set_color_rgb(machine,2*i+1,pal1bit(i >> 5),pal1bit(i >> 4),pal1bit(i >> 3)); + palette_set_color_rgb(machine, 2*i+0, pal1bit(i >> 2), pal1bit(i >> 0), pal1bit(i >> 1)); + palette_set_color_rgb(machine, 2*i+1, pal1bit(i >> 5), pal1bit(i >> 3), pal1bit(i >> 4)); } } -/* end video related */ - -static NVRAM_HANDLER (statriv2) +static VIDEO_START( horizontal ) { - if (read_or_write) - mame_fwrite(file, generic_nvram, generic_nvram_size); - else if (file) - mame_fread(file, generic_nvram, generic_nvram_size); + statriv2_tilemap = tilemap_create(machine, horizontal_tile_info ,tilemap_scan_rows, 8,15, 64,16); +} + +static VIDEO_START( vertical ) +{ + statriv2_tilemap = tilemap_create(machine, vertical_tile_info, tilemap_scan_rows, 8,8, 32,32); +} + + + +/************************************* + * + * Video RAM access + * + *************************************/ + +static WRITE8_HANDLER( statriv2_videoram_w ) +{ + videoram[offset] = data; + tilemap_mark_tile_dirty(statriv2_tilemap, offset & 0x3ff); +} + + + +/************************************* + * + * Video update + * + *************************************/ + +static VIDEO_UPDATE( statriv2 ) +{ + if (tms9927_screen_reset(devtag_get_device(screen->machine, "tms"))) + bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); else - memcpy ( generic_nvram, statriv2_default_eeprom, 0x100 ); + tilemap_draw(bitmap, cliprect, statriv2_tilemap, 0, 0); + return 0; } -static NVRAM_HANDLER (quaquiz2) + + +/************************************* + * + * Interrupt generation + * + *************************************/ + +static INTERRUPT_GEN( statriv2_interrupt ) { - if (read_or_write) - mame_fwrite(file, generic_nvram, generic_nvram_size); - else if (file) - mame_fread(file, generic_nvram, generic_nvram_size); - else - memcpy ( generic_nvram, quaquiz2_default_eeprom, 0x100 ); + UINT8 new_coin = input_port_read(device->machine, "COIN"); + + /* check the coin inputs once per frame */ + latched_coin |= new_coin & (new_coin ^ last_coin); + last_coin = new_coin; + + cpu_set_input_line(device, I8085_RST75_LINE, ASSERT_LINE); + cpu_set_input_line(device, I8085_RST75_LINE, CLEAR_LINE); } -static UINT8 *question_offset; -/* question address is stored as L/H/X (low/high/don't care) */ -static READ8_HANDLER( question_lhx_r ) +static CUSTOM_INPUT( latched_coin_r ) { + return latched_coin; +} + + + +/************************************* + * + * Question address computation + * + *************************************/ + +static READ8_HANDLER( question_data_r ) +{ + const UINT8 *qrom = memory_region(space->machine, "questions"); + UINT32 qromsize = memory_region_length(space->machine, "questions"); UINT32 address; - question_offset[0]++; - address = question_offset[0] | (question_offset[1] << 8); - return memory_region(space->machine, "questions")[address]; + if (question_offset_high == 0xff) + question_offset[question_offset_low]++; + + address = question_offset[question_offset_low]; + address |= question_offset[question_offset_mid] << 8; + if (question_offset_high != 0xff) + address |= question_offset[question_offset_high] << 16; + + return (address < qromsize) ? qrom[address] : 0xff; } -/* question address is stored as X/L/H (don't care/low/high) */ -static READ8_HANDLER( question_xlh_r ) -{ - UINT32 address; - - question_offset[1]++; - address = question_offset[1] | (question_offset[2] << 8); - return memory_region(space->machine, "questions")[address]; -} -/* question address is stored as X/H/L (don't care/high/low) */ -static READ8_HANDLER( question_xhl_r ) -{ - UINT32 address; - - question_offset[2]++; - address = question_offset[2] | (question_offset[1] << 8); - return memory_region(space->machine, "questions")[address]; -} -/* question address is stored as L/M/H (low/mid/high) */ -static READ8_HANDLER( question_lmh_r ) -{ - UINT32 address = (question_offset[2] << 16) | (question_offset[1] << 8) | question_offset[0]; - return memory_region(space->machine, "questions")[address]; -} +/************************************* + * + * 8255 PPI interfaces + * + *************************************/ static WRITE8_DEVICE_HANDLER( ppi_portc_hi_w ) { - data &= 0x0f; - if (data != 0 && data != 0xf) - popmessage("PPI port C out: %02X", data); + data >>= 4; + if (data != 0x0f) + latched_coin = 0; } static const ppi8255_interface ppi8255_intf = @@ -239,58 +248,151 @@ static const ppi8255_interface ppi8255_intf = }; + +/************************************* + * + * Address maps + * + *************************************/ + static ADDRESS_MAP_START( statriv2_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x4000, 0x43ff) AM_RAM - AM_RANGE(0x4800, 0x48ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) // backup ram? - AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(statriv2_videoram_w) AM_BASE(&statriv2_videoram) + AM_RANGE(0x4800, 0x48ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(statriv2_videoram_w) AM_BASE(&videoram) ADDRESS_MAP_END static ADDRESS_MAP_START( statriv2_io_map, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) - AM_RANGE(0x28, 0x2b) AM_WRITEONLY AM_BASE(&question_offset) + AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi", ppi8255_r, ppi8255_w) + AM_RANGE(0x28, 0x2b) AM_READ(question_data_r) AM_WRITEONLY AM_BASE(&question_offset) AM_RANGE(0xb0, 0xb1) AM_DEVWRITE("ay", ay8910_address_data_w) - AM_RANGE(0xb1, 0xb1) AM_DEVREAD("ay", ay8910_r) // ??? - AM_RANGE(0xc0, 0xcf) AM_WRITENOP // ??? - AM_RANGE(0xce, 0xce) AM_READNOP // ??? + AM_RANGE(0xb1, 0xb1) AM_DEVREAD("ay", ay8910_r) + AM_RANGE(0xc0, 0xcf) AM_DEVREADWRITE("tms", tms9927_r, tms9927_w) ADDRESS_MAP_END static ADDRESS_MAP_START( statusbj_io, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) + AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi", ppi8255_r, ppi8255_w) AM_RANGE(0xb0, 0xb1) AM_DEVWRITE("ay", ay8910_address_data_w) AM_RANGE(0xb1, 0xb1) AM_DEVREAD("ay", ay8910_r) - AM_RANGE(0xc0, 0xcf) AM_READWRITE(SMH_NOP, SMH_NOP) /* 9927 CRT controller? */ -// AM_RANGE(0xce,0xce) AM_READ(test_r) + AM_RANGE(0xc0, 0xcf) AM_DEVREADWRITE("tms", tms9927_r, tms9927_w) ADDRESS_MAP_END -/*some sort of "simple" protection? This is just a kludge for it,coin chuts doesn't work consistantly, - probably sometimes it reads a protection latch,some other times reads the inputs... -AS*/ -static READ8_DEVICE_HANDLER( prot_r ) -{ - static UINT8 x; - - x^=4; - - return input_port_read(device->machine, "IN1") | x; -} -static const ppi8255_interface statusbj_ppi8255_intf[1] = -{ -/* PPI 8255 group A & B set to Mode 0. - Port A, B and lower 4 bits of C set as Input. - High 4 bits of C set as Output -*/ - { - DEVCB_INPUT_PORT("IN0"), /* Port A read */ - DEVCB_HANDLER(prot_r), /* Port B read */ - DEVCB_INPUT_PORT("IN2"), /* Port C read (Lower Nibble as Input) */ - DEVCB_NULL, /* Port A write */ - DEVCB_NULL, /* Port B write */ - DEVCB_NULL //ppi_portc_hi_w /* Port C write (High nibble as Output) */ - } -}; +/************************************* + * + * Input ports + * + *************************************/ + +static INPUT_PORTS_START( statusbj ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Bet") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Deal") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Hit") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Stand") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Double Down") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Insurance") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Split") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(latched_coin_r, "COIN") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) ) +// PORT_DIPSETTING( 0x30, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x40, 0x40, "DIP switch?" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("IN2") + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) +INPUT_PORTS_END + +static INPUT_PORTS_START( funcsino ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Bet") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Deal") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Draw") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Card 1") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Card 2") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Card 3") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Card 4") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Card 5") + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Stand") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Select Game") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(latched_coin_r, "COIN") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x10, 0x10, "DIP switch? 10" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "DIP switch? 20" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "DIP switch? 40" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "DIP switch? 80" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("IN2") + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) +INPUT_PORTS_END + +static INPUT_PORTS_START( hangman ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Choose") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Go For It") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Spinner") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "Keep High Scores" ) + PORT_DIPSETTING( 0x80, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) +INPUT_PORTS_END static INPUT_PORTS_START( statriv2 ) PORT_START("IN0") @@ -306,7 +408,7 @@ static INPUT_PORTS_START( statriv2 ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Play 1000") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(latched_coin_r, "COIN") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE( 0x10, IP_ACTIVE_HIGH ) PORT_DIPNAME( 0x20, 0x20, "Show Correct Answer" ) @@ -324,6 +426,9 @@ static INPUT_PORTS_START( statriv2 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) INPUT_PORTS_END static INPUT_PORTS_START( statriv4 ) @@ -351,10 +456,10 @@ static INPUT_PORTS_START( quaquiz2 ) PORT_INCLUDE(supertr2) PORT_MODIFY("IN0") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_IMPULSE(1) PORT_NAME("Button A") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_IMPULSE(1) PORT_NAME("Button B") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_IMPULSE(1) PORT_NAME("Button C") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_IMPULSE(1) PORT_NAME("Button D") +// PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_IMPULSE(1) PORT_NAME("Button A") +// PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_IMPULSE(1) PORT_NAME("Button B") +// PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_IMPULSE(1) PORT_NAME("Button C") +// PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_IMPULSE(1) PORT_NAME("Button D") PORT_DIPNAME( 0x80, 0x00, "Port $20 bit 7" ) // coin3? if off it doesn't boot PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -374,42 +479,6 @@ static INPUT_PORTS_START( quaquiz2 ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) INPUT_PORTS_END -static INPUT_PORTS_START( hangman ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_IMPULSE(8) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_IMPULSE(8) PORT_NAME("Choose") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_IMPULSE(8) PORT_NAME("Right") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_IMPULSE(8) PORT_NAME("Go For It") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_IMPULSE(8) PORT_NAME("Spinner") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_IMPULSE(8) PORT_NAME("Left") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_IMPULSE(8) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(8) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, "Keep High Scores" ) - PORT_DIPSETTING( 0x80, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - static INPUT_PORTS_START( sextriv ) PORT_INCLUDE(statriv2) @@ -422,104 +491,98 @@ static INPUT_PORTS_START( sextriv ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) INPUT_PORTS_END -static INPUT_PORTS_START( statusbj ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Bet") PORT_CODE(KEYCODE_Z) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Hit") PORT_CODE(KEYCODE_X) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Stand") PORT_CODE(KEYCODE_C) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-5") PORT_CODE(KEYCODE_V) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_B) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_N) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-8") PORT_CODE(KEYCODE_M) - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-1") PORT_CODE(KEYCODE_Q) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-2") PORT_CODE(KEYCODE_W) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_R) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_T) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-6") PORT_CODE(KEYCODE_Y) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_U) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-8") PORT_CODE(KEYCODE_I) - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-1") PORT_CODE(KEYCODE_A) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-2") PORT_CODE(KEYCODE_S) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-3") PORT_CODE(KEYCODE_D) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-4") PORT_CODE(KEYCODE_F) -INPUT_PORTS_END +/************************************* + * + * Graphics decoding + * + *************************************/ -static const gfx_layout statriv2_tiles8x16_layout = +static const gfx_layout horizontal_tiles_layout = { - 8,16, + 8,15, RGN_FRAC(1,1), 1, { 0 }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, - 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, + { STEP8(0,1) }, + { STEP16(0,8) }, 16*8 }; -static GFXDECODE_START( statriv2 ) - GFXDECODE_ENTRY( "gfx1", 0, statriv2_tiles8x16_layout, 0, 64 ) +static GFXDECODE_START( horizontal ) + GFXDECODE_ENTRY( "tiles", 0, horizontal_tiles_layout, 0, 64 ) GFXDECODE_END -static const gfx_layout statriv2_tiles16x8_layout = +static const gfx_layout vertical_tiles_layout = { - 16,8, + 8,8, RGN_FRAC(1,1), 1, { 0 }, - { 0, 1, 2, 3, 4, 5, 6, 7, 64+0, 64+1, 64+2, 64+3, 64+4, 64+5, 64+6, 64+7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 128, + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 }; -static GFXDECODE_START( statriv2v ) - GFXDECODE_ENTRY( "gfx1", 0, statriv2_tiles16x8_layout, 0, 64 ) +static GFXDECODE_START( vertical ) + GFXDECODE_ENTRY( "tiles", 0, vertical_tiles_layout, 0, 64 ) GFXDECODE_END -static INTERRUPT_GEN( statriv2_interrupt ) + + +/************************************* + * + * TMS9927 interface + * + *************************************/ + +static const tms9927_interface tms9927_intf = { - cpu_set_input_line(device, I8085_RST75_LINE, ASSERT_LINE); - cpu_set_input_line(device, I8085_RST75_LINE, CLEAR_LINE); -} + "screen", + 8 +}; + + + +/************************************* + * + * Machine drivers + * + *************************************/ static MACHINE_DRIVER_START( statriv2 ) /* basic machine hardware */ /* FIXME: The 8085A had a max clock of 6MHz, internally divided by 2! */ - MDRV_CPU_ADD("maincpu", 8085A, 13684000) /* 12.44MHz * 1.1, ugh, glargh, hack, but it makes one in-game second roughly one real-life second */ + MDRV_CPU_ADD("maincpu", 8085A, MASTER_CLOCK) MDRV_CPU_PROGRAM_MAP(statriv2_map,0) MDRV_CPU_IO_MAP(statriv2_io_map,0) MDRV_CPU_VBLANK_INT("screen", statriv2_interrupt) - MDRV_NVRAM_HANDLER(statriv2) + MDRV_NVRAM_HANDLER(generic_0fill) /* 1x 8255 */ - MDRV_PPI8255_ADD("ppi8255_0", ppi8255_intf) + MDRV_PPI8255_ADD("ppi", ppi8255_intf) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) - MDRV_SCREEN_REFRESH_RATE(60) - MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1200)) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(64*8, 32*8) - MDRV_SCREEN_VISIBLE_AREA(4*8, 38*8-1, 0, 32*8-1) + MDRV_SCREEN_RAW_PARAMS(MASTER_CLOCK/2, 384, 0, 320, 270, 0, 240) - MDRV_GFXDECODE(statriv2) + MDRV_TMS9927_ADD("tms", MASTER_CLOCK/2, tms9927_intf) + + MDRV_GFXDECODE(horizontal) MDRV_PALETTE_LENGTH(2*64) MDRV_PALETTE_INIT(statriv2) - MDRV_VIDEO_START(statriv2) + MDRV_VIDEO_START(horizontal) MDRV_VIDEO_UPDATE(statriv2) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") - MDRV_SOUND_ADD("ay", AY8910, 1500000) + MDRV_SOUND_ADD("ay", AY8910, MASTER_CLOCK/8) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_DRIVER_END @@ -527,75 +590,20 @@ static MACHINE_DRIVER_START( statriv2v ) /* basic machine hardware */ MDRV_IMPORT_FROM(statriv2) - MDRV_VIDEO_START(statriv2v) - - MDRV_GFXDECODE(statriv2v) - MDRV_SCREEN_MODIFY("screen") - MDRV_SCREEN_VISIBLE_AREA(0*8, 62*8-1, 0, 30*8-1) + MDRV_SCREEN_RAW_PARAMS(MASTER_CLOCK/2, 392, 0, 256, 262, 0, 256) + + MDRV_VIDEO_START(vertical) + MDRV_GFXDECODE(vertical) MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( statriv4 ) - /* basic machine hardware */ - MDRV_IMPORT_FROM(statriv2) - - MDRV_SCREEN_MODIFY("screen") - MDRV_SCREEN_VISIBLE_AREA(2*8, 36*8-1, 0, 32*8-1) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( supertr2 ) - /* basic machine hardware */ - MDRV_IMPORT_FROM(statriv2) - - MDRV_NVRAM_HANDLER(generic_0fill) - - MDRV_SCREEN_MODIFY("screen") - MDRV_SCREEN_VISIBLE_AREA(2*8, 36*8-1, 0, 32*8-1) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( supertr3 ) - /* basic machine hardware */ - MDRV_IMPORT_FROM(statriv2) - - MDRV_NVRAM_HANDLER(generic_0fill) - - MDRV_SCREEN_MODIFY("screen") - MDRV_SCREEN_VISIBLE_AREA(2*8, 36*8-1, 0, 32*8-1) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( quaquiz2 ) - /* basic machine hardware */ - MDRV_IMPORT_FROM(supertr3) - - MDRV_NVRAM_HANDLER(quaquiz2) - - MDRV_SCREEN_MODIFY("screen") - MDRV_SCREEN_VISIBLE_AREA(4*8, 38*8-1, 0, 32*8-1) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( hangman ) - /* basic machine hardware */ - MDRV_IMPORT_FROM(statriv2) - - MDRV_CPU_REPLACE("maincpu",8085A,12400000/4) - - MDRV_SCREEN_MODIFY("screen") - MDRV_SCREEN_VISIBLE_AREA(1*8, 35*8-1, 0, 32*8-1) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( statusbj ) - /* basic machine hardware */ - MDRV_IMPORT_FROM(statriv2) - - MDRV_CPU_REPLACE("maincpu",8085A,12400000/4) - MDRV_CPU_IO_MAP(statusbj_io,0) - - /* 1x 8255 */ - MDRV_PPI8255_RECONFIG( "ppi8255_0", statusbj_ppi8255_intf[0] ) -MACHINE_DRIVER_END +/************************************* + * + * ROM definitions + * + *************************************/ /* Black Jack (Status 1981) @@ -615,12 +623,85 @@ ROM_START( statusbj ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "statusbj.1", 0x0000, 0x0800, CRC(d3faf340) SHA1(e03f7e3375a02a3bec07d9c7f4f2b1a711d4d1cc) ) ROM_LOAD( "statusbj.2", 0x0800, 0x0800, CRC(3f1727af) SHA1(0df12626591fc70031a9d8615c37243813d67b70) ) - ROM_RELOAD( 0x1000, 0x0800 ) - ROM_REGION( 0x800, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x800, "tiles", ROMREGION_INVERT ) ROM_LOAD( "statusbj.vid", 0x0000, 0x0800, CRC(99ade7a2) SHA1(98704ca3a9fcfc4590f850c8ae24445baaed6dfa) ) - //no proms? + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "prom.u17", 0x0000, 0x0020, NO_DUMP ) /* Socketted */ + ROM_LOAD( "prom.u21", 0x0020, 0x0020, NO_DUMP ) /* Soldered in (Color?) */ + ROM_LOAD( "prom.u22", 0x0040, 0x0100, NO_DUMP ) /* Soldered in */ +ROM_END + +ROM_START( funcsino ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "u7", 0x0000, 0x1000, CRC(e7380a81) SHA1(dbc9646a33bd61cdfab9f8a5ac7db996cfc0eaf9) ) + ROM_LOAD( "u8", 0x1000, 0x1000, CRC(89767226) SHA1(d948c139a876e516fe54b39fd0548a07537f8535) ) + ROM_LOAD( "u9", 0x2000, 0x1000, CRC(d663c0be) SHA1(70a5aa509815ce0992809f88c3bd55e130c03dc4) ) + + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) + ROM_LOAD( "u36", 0x0000, 0x1000, CRC(79eaf78b) SHA1(9df5f90344bbb9f1d196f35d910bb09fe6f74aa1) ) + + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "prom.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted */ + ROM_LOAD( "prom.u21", 0x0020, 0x0020, CRC(e8f60d23) SHA1(2070b8201b75a13e416f597d6b2473d0027f420c) ) /* Soldered in (Color?) */ + ROM_LOAD( "prom.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ +ROM_END + +ROM_START( hangman ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "main_hang_1b_2732.u7", 0x0000, 0x1000, CRC(0d71b2ad) SHA1(636e5e0e356c9c7de174a0b6a5663fedcb1e697f) ) + ROM_LOAD( "main_hang_2b_2732.u8", 0x1000, 0x1000, CRC(77533554) SHA1(fe97a412135b770ce7e85442507eac0c25b7256a) ) + ROM_LOAD( "main_hang_3b_2732.u9", 0x2000, 0x1000, CRC(daab4853) SHA1(b3b8ef051f4b04195cf7b25232f1af561c3ff7ba) ) + + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) + ROM_LOAD( "main_hang_0b_2732.u36", 0x0000, 0x1000, CRC(e031dbf8) SHA1(ae6d34ad02b2d7deb1665d2420f8399a3ca88585) ) + + ROM_REGION( 0x16000, "questions", 0 ) /* question data */ + ROM_LOAD( "aux_27c256.8", 0x00000, 0x8000, CRC(c7d76338) SHA1(40e88efd7e250ad867772258eb6dc3b225de781f) ) + ROM_LOAD( "aux_2764.1", 0x08000, 0x2000, CRC(a88563c8) SHA1(23cb169268ded6c81494197cfb9b34180667fc8c) ) + ROM_LOAD( "aux_2764.2", 0x0a000, 0x2000, CRC(4bddbe3c) SHA1(391012de04e8a3638fac6f173a81cf1f86d8f751) ) + ROM_LOAD( "aux_2764.3", 0x0c000, 0x2000, CRC(3ece427a) SHA1(ff09bf3734ecfa6d848037cca11b80adb8074e39) ) + ROM_LOAD( "aux_2764.4", 0x0e000, 0x2000, CRC(bb0efc98) SHA1(4317d1243f6aaf8178d19574645a43f9c2e42725) ) + ROM_LOAD( "aux_2764.5", 0x10000, 0x2000, CRC(8bebf907) SHA1(76d01b71e696b06cdf9d9c93839ef797c56b78db) ) + ROM_LOAD( "aux_2764.6", 0x12000, 0x2000, CRC(d1732f3b) SHA1(c4e862bd98f237e1d2ecad430226cba6aba4ebb8) ) + ROM_LOAD( "aux_2764.7", 0x14000, 0x2000, CRC(e51d45b8) SHA1(7cd0ced0245dbd55a225182e43b89d55d8d33197) ) + + ROM_REGION( 0x0100, "nvram", 0 ) + ROM_LOAD( "hangman.nv", 0x0000, 0x0100, CRC(4cecee6f) SHA1(bd9fe7bea081c87033993f809ed0b2c727ab5e88) ) + + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted */ + ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ + ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ +ROM_END + +ROM_START( trivquiz ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "triv1-1f.u8", 0x00000, 0x01000, CRC(da9a763a) SHA1(d7a60718a1aeadb247330c939e0ac487015b55b2) ) + ROM_LOAD( "triv1-2f.u9", 0x01000, 0x01000, CRC(270459fe) SHA1(1507a477fe7170d24788c880d43b0a3b08f35748) ) + ROM_LOAD( "triv1-3f.u10", 0x02000, 0x01000, CRC(103f4160) SHA1(487afaf243d144aaee8a2ea76105fba09181dfdb) ) + + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) + ROM_LOAD( "triv1-0f.u7", 0x00000, 0x01000, CRC(af5f434a) SHA1(1e7ae7ad7ea697007a30f5ba89127802a835eddc) ) + + ROM_REGION( 0x10000, "questions", 0 ) /* question data */ + ROM_LOAD( "qmt11.rom", 0x00000, 0x02000, CRC(82107565) SHA1(28d71340873330df7d15f1bc55cee78a9c7c31a6) ) + ROM_LOAD( "qmt12.rom", 0x02000, 0x02000, CRC(68667637) SHA1(df6ad3e624dcad57ce176912931660c6c1780369) ) + ROM_LOAD( "qmt13.rom", 0x04000, 0x02000, CRC(e0d01a68) SHA1(22bb2a8628a3764d733748e4f5f3bad881371a29) ) + ROM_LOAD( "qmt14.rom", 0x06000, 0x02000, CRC(68262b46) SHA1(faba97e5f6475e088554117e4b772e1631d740b2) ) + ROM_LOAD( "qmt15.rom", 0x08000, 0x02000, CRC(d1f39185) SHA1(e46120496e84e224bd15da0652e218cea85c170d) ) + ROM_LOAD( "qmt16.rom", 0x0a000, 0x02000, CRC(1d2ecf1d) SHA1(1d833b57bf4b3ccb3dc60307641ef9476289fe07) ) + ROM_LOAD( "qmt17.rom", 0x0c000, 0x02000, CRC(01840f9c) SHA1(d9b4f7f931657d4e16cf981d887508fd1db5e4c0) ) + ROM_LOAD( "qmt18.rom", 0x0e000, 0x02000, CRC(004a9480) SHA1(7adff194a1549fa42577f969706aab6bb6a58851) ) + + ROM_REGION( 0x0100, "nvram", 0 ) + ROM_LOAD( "trivquiz.nv", 0x0000, 0x0100, CRC(bd07a964) SHA1(a1fe68d95c79ac99cfca8a468073b5c838e1cd49) ) + + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ + ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ + ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ ROM_END ROM_START( statriv2 ) @@ -629,7 +710,7 @@ ROM_START( statriv2 ) ROM_LOAD( "trivii2c.u8", 0x01000, 0x01000, CRC(6fd255f6) SHA1(13c75effda1db8eb3635d955ae11f37388f159aa) ) ROM_LOAD( "trivii3c.u9", 0x02000, 0x01000, CRC(f666dc54) SHA1(757e0e621400d266771ea6db835305208457702f) ) - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) ROM_LOAD( "trivii0c.u36", 0x00000, 0x01000, CRC(af5f434a) SHA1(1e7ae7ad7ea697007a30f5ba89127802a835eddc) ) ROM_REGION( 0x10000, "questions", 0 ) /* question data */ @@ -642,7 +723,10 @@ ROM_START( statriv2 ) ROM_LOAD( "statuspb.u7", 0x0c000, 0x02000, CRC(121d6976) SHA1(2e4da8f2c3620c8f46fd4951551b0747b3c38caf) ) ROM_LOAD( "statuspb.u8", 0x0e000, 0x02000, CRC(5080df10) SHA1(b5cb0868d844bbb598159177fd5ce65ff3f18eda) ) - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ + ROM_REGION( 0x0100, "nvram", 0 ) + ROM_LOAD( "statriv2.nv", 0x0000, 0x0100, CRC(3edb2bd1) SHA1(fdda1310f519054eb5e6ea498d27555f96b370eb) ) + + ROM_REGION( 0x0140, "proms", 0 ) ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ @@ -654,7 +738,7 @@ ROM_START( statrv2v ) ROM_LOAD( "status.u8", 0x01000, 0x01000, CRC(f2de3867) SHA1(ec891d4aa4e8dc0780cf187d8b1548d7e00d4321) ) ROM_LOAD( "status.u9", 0x02000, 0x01000, CRC(d70f5dbf) SHA1(1b21a6d9cc17c7cd03a43056070ab55f3c5d4c58)) - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) ROM_LOAD( "status.u36", 0x00000, 0x00800, CRC(ae1d07c0) SHA1(2b657ba58e3ae7cceb8cf23cba3e1f0d20817933) ) // first half is garbage? ROM_CONTINUE(0x0000, 0x800) @@ -671,7 +755,10 @@ ROM_START( statrv2v ) ROM_LOAD( "statuspb.u7", 0x0c000, 0x02000, CRC(121d6976) SHA1(2e4da8f2c3620c8f46fd4951551b0747b3c38caf) ) ROM_LOAD( "statuspb.u8", 0x0e000, 0x02000, CRC(5080df10) SHA1(b5cb0868d844bbb598159177fd5ce65ff3f18eda) ) - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ + ROM_REGION( 0x0100, "nvram", 0 ) + ROM_LOAD( "statriv2v.nv", 0x0000, 0x0100, CRC(3a9c7db7) SHA1(3d5a78beed26a73320f1f0748944b7fd87794bc7) ) + + ROM_REGION( 0x0140, "proms", 0 ) ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ @@ -683,7 +770,7 @@ ROM_START( statriv4 ) ROM_LOAD( "triv4.u08", 0x01000, 0x01000, CRC(7557e97e) SHA1(9096e7055b7a7579cc9206ad678063f9c882785b) ) ROM_LOAD( "triv4.u09", 0x02000, 0x01000, CRC(7f1b2e1d) SHA1(12249335a1c7fed8912009051e400e216688bdbc) ) - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) ROM_LOAD( "triv4.u36", 0x00000, 0x01000, CRC(af5f434a) SHA1(1e7ae7ad7ea697007a30f5ba89127802a835eddc) ) ROM_REGION( 0x10000, "questions", 0 ) /* question data */ @@ -696,147 +783,22 @@ ROM_START( statriv4 ) ROM_LOAD( "triv4.u47", 0x0c000, 0x02000, CRC(fddbb113) SHA1(a88a1afdb1be035fc71929ef0236b61b8403cc1b) ) ROM_LOAD( "triv4.u48", 0x0e000, 0x02000, CRC(30ca8393) SHA1(dfb2f16f9b014d23793efe085be1ed75342c00dc) ) - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ + ROM_REGION( 0x0100, "nvram", 0 ) + ROM_LOAD( "statriv4.nv", 0x0000, 0x0100, CRC(ab449099) SHA1(80fe9e07068a1034f8c0b233a7d37f6b40644be5) ) + + ROM_REGION( 0x0140, "proms", 0 ) ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, verified */ ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ ROM_END -ROM_START( trivquiz ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "triv1-1f.u8", 0x00000, 0x01000, CRC(da9a763a) SHA1(d7a60718a1aeadb247330c939e0ac487015b55b2) ) - ROM_LOAD( "triv1-2f.u9", 0x01000, 0x01000, CRC(270459fe) SHA1(1507a477fe7170d24788c880d43b0a3b08f35748) ) - ROM_LOAD( "triv1-3f.u10", 0x02000, 0x01000, CRC(103f4160) SHA1(487afaf243d144aaee8a2ea76105fba09181dfdb) ) - - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) - ROM_LOAD( "triv1-0f.u7", 0x00000, 0x01000, CRC(af5f434a) SHA1(1e7ae7ad7ea697007a30f5ba89127802a835eddc) ) - - ROM_REGION( 0x10000, "questions", 0 ) /* question data */ - ROM_LOAD( "qmt11.rom", 0x00000, 0x02000, CRC(82107565) SHA1(28d71340873330df7d15f1bc55cee78a9c7c31a6) ) - ROM_LOAD( "qmt12.rom", 0x02000, 0x02000, CRC(68667637) SHA1(df6ad3e624dcad57ce176912931660c6c1780369) ) - ROM_LOAD( "qmt13.rom", 0x04000, 0x02000, CRC(e0d01a68) SHA1(22bb2a8628a3764d733748e4f5f3bad881371a29) ) - ROM_LOAD( "qmt14.rom", 0x06000, 0x02000, CRC(68262b46) SHA1(faba97e5f6475e088554117e4b772e1631d740b2) ) - ROM_LOAD( "qmt15.rom", 0x08000, 0x02000, CRC(d1f39185) SHA1(e46120496e84e224bd15da0652e218cea85c170d) ) - ROM_LOAD( "qmt16.rom", 0x0a000, 0x02000, CRC(1d2ecf1d) SHA1(1d833b57bf4b3ccb3dc60307641ef9476289fe07) ) - ROM_LOAD( "qmt17.rom", 0x0c000, 0x02000, CRC(01840f9c) SHA1(d9b4f7f931657d4e16cf981d887508fd1db5e4c0) ) - ROM_LOAD( "qmt18.rom", 0x0e000, 0x02000, CRC(004a9480) SHA1(7adff194a1549fa42577f969706aab6bb6a58851) ) - - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ - ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ - ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ - ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ -ROM_END - -ROM_START( supertr2 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "ast2-1d.rom", 0x00000, 0x01000, CRC(e9f0e271) SHA1(c2bae7d5ef04aed3ce14c403c70d2acc1831b763) ) - ROM_LOAD( "ast2-2d.rom", 0x01000, 0x01000, CRC(542ba813) SHA1(1ac063f3678d1295aa728ab7ac43165284b66836) ) - ROM_LOAD( "ast2-3d.rom", 0x02000, 0x01000, CRC(46c467b7) SHA1(2556ce6436112646d8ec3bcff7c32212c5296463) ) - ROM_LOAD( "ast2-4d.rom", 0x03000, 0x01000, CRC(11382c44) SHA1(6b611ad9e591b27d5cb239388e4d27e646be3028) ) - - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) - ROM_LOAD( "ast2-0d.rom", 0x00000, 0x01000, CRC(a40f9201) SHA1(a87cfc3dbe5cff82926f5f8486c37fd3f4449135) ) - - ROM_REGION( 0x40000, "questions", ROMREGION_INVERT ) /* question data - inverted */ - ROM_LOAD( "astq2-1.rom", 0x00000, 0x08000, CRC(4af390cb) SHA1(563c6210f2fcc8ee9b5112e2d6f522ddfca2ddea) ) - ROM_LOAD( "astq2-2.rom", 0x08000, 0x08000, CRC(91a7b4f6) SHA1(c8ff2e8475ae889be14086a04275df94efd66156) ) - ROM_LOAD( "astq2-3.rom", 0x10000, 0x08000, CRC(e6a50944) SHA1(e3fad344d4bedfd14f307445334903c35e745d9b) ) - ROM_LOAD( "astq2-4.rom", 0x18000, 0x08000, CRC(6f9f9cef) SHA1(b43d1a2a714764f46f038f85a8233bf811a877ae) ) - ROM_LOAD( "astq2-5.rom", 0x20000, 0x08000, CRC(a0c0f51e) SHA1(c61518ef53d5bec334062b6853663424853892b9) ) - ROM_LOAD( "astq2-6.rom", 0x28000, 0x08000, CRC(c0f61b5f) SHA1(65398f9d22fce95c4146a2cb8174edd6b336b9e4) ) - ROM_LOAD( "astq2-7.rom", 0x30000, 0x08000, CRC(72461937) SHA1(2f95a708b24f56d9b1293a88aa53eb4a32f89869) ) - ROM_LOAD( "astq2-8.rom", 0x38000, 0x08000, CRC(cd2674d5) SHA1(7fb6513172ffe8e3b9e0f4dc9ecdb42d954b1ff0) ) - - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ - ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ - ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ - ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ -ROM_END - -ROM_START( supertr3 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "triv3.u07", 0x00000, 0x01000, CRC(f04a19d7) SHA1(f887ec976d9eb14329621ac75d6547fca6808bb3) ) - ROM_LOAD( "triv3.u08", 0x01000, 0x01000, CRC(543d5664) SHA1(58ee8b94964b567fc052f7c4df4517ee029046bd) ) - ROM_LOAD( "triv3.u09", 0x02000, 0x01000, CRC(047faed4) SHA1(e24c919434ad4e9a1059e34e6609a7271accd8f1) ) - ROM_LOAD( "triv3.u10", 0x03000, 0x01000, CRC(df4b81b5) SHA1(b1ab666c51b838c4176f8b314677d6ae129997d0) ) - - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) - ROM_LOAD( "triv3.u36", 0x00000, 0x01000, CRC(79277b08) SHA1(e8de06809853e030d1ee29a788f9bc8ff7175af0) ) - - ROM_REGION( 0x40000, "questions", ROMREGION_INVERT ) /* question data - inverted */ - ROM_LOAD( "triv3.u41", 0x00000, 0x08000, CRC(d62960c4) SHA1(d6f7dbdb016c14ca1cab5a0e965c9ae40dcbbc28) ) - ROM_LOAD( "triv3.u42", 0x08000, 0x08000, CRC(6d50fec9) SHA1(6edb3ed92781e8961eacc342c0bceeb052b81a3e) ) - ROM_LOAD( "triv3.u43", 0x10000, 0x08000, CRC(8c0a73de) SHA1(2a7175b7845b26b8d0d53279cd8793edee95d3a1) ) - ROM_LOAD( "triv3.u44", 0x18000, 0x08000, CRC(fec7e3d0) SHA1(6921386be4de06efb2d4c382733c2d22948fdf4f) ) - ROM_LOAD( "triv3.u45", 0x20000, 0x08000, CRC(b28d81dd) SHA1(d4a6026b437dcaf6881232b960b9e870754c9ec6) ) - ROM_LOAD( "triv3.u46", 0x28000, 0x08000, CRC(86cffc1f) SHA1(06557bcc51b415349e5f7440f753ef2f66dcfde2) ) - ROM_LOAD( "triv3.u47", 0x30000, 0x08000, CRC(f316803c) SHA1(31edb97bad7083ed32e0ee75256bc7d488fa234b) ) - ROM_LOAD( "triv3.u48", 0x38000, 0x08000, CRC(1a99b268) SHA1(6369c79f645962b4a2f85b18e9d93c3cc65defc1) ) - - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ - ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, verified */ - ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ - ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ -ROM_END - -ROM_START( quaquiz2 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "qquiz.u7", 0x00000, 0x01000, CRC(8e525abc) SHA1(b03500a2ccb8f0b038093460e38460d29bdf8af3) ) - ROM_LOAD( "qquiz.u8", 0x01000, 0x01000, CRC(2186ceb5) SHA1(c8f74026d18841ebcc4cfc85ba08e68e41e9d1d0) ) - ROM_LOAD( "qquiz.u9", 0x02000, 0x01000, CRC(6d815876) SHA1(275a76e791abd38bc9baf6626edcb6d78259ebc9) ) - ROM_LOAD( "qquiz.u10", 0x03000, 0x01000, CRC(714a9093) SHA1(9ca75565003bd14ca2f0b8882667fe577732a4da) ) - - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) - ROM_LOAD( "qquiz.u36", 0x00000, 0x01000, CRC(468dca15) SHA1(4ace7b3cd233f826949b65e2ab71e94ac6a293a0) ) - - ROM_REGION( 0x40000, "questions", ROMREGION_INVERT ) /* question data - inverted */ - ROM_LOAD( "gst.01", 0x00000, 0x08000, CRC(c0d83049) SHA1(94c750068e550cdaf4f6f5416bc7c160a759dd5a) ) - ROM_LOAD( "gst.02", 0x08000, 0x08000, CRC(b844743e) SHA1(4a75e4956c568bad70130a326c0fc691a11ff04c) ) - ROM_LOAD( "gst.03", 0x10000, 0x08000, CRC(4c734bc5) SHA1(48171494f183dec01732b2d6a0f2af0c1b173dba) ) - ROM_LOAD( "gst.04", 0x18000, 0x08000, CRC(8ddbeca6) SHA1(1e49fb7f1469c0476094d8538473b23ef0b64ac5) ) - ROM_LOAD( "gst.05", 0x20000, 0x08000, CRC(f1e07381) SHA1(3a5f075491840ed214490704453336512ecafc0d) ) - ROM_LOAD( "gst.06", 0x28000, 0x08000, CRC(18855c6d) SHA1(0454eaebc42838c75e7748f8e2c2eb5f58380f51) ) - ROM_LOAD( "gst.07", 0x30000, 0x08000, CRC(1270d5bd) SHA1(826162e37c233639b1f545f4d215a4bf9fcba065) ) - ROM_LOAD( "gst.08", 0x38000, 0x08000, CRC(64a54915) SHA1(13bbdff3617ec14595bc72891f56d327d76f539d) ) - - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ - ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ - ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ - ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ -ROM_END - -ROM_START( hangman ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "main_hang_1b_2732.u7", 0x0000, 0x1000, CRC(0d71b2ad) SHA1(636e5e0e356c9c7de174a0b6a5663fedcb1e697f) ) - ROM_LOAD( "main_hang_2b_2732.u8", 0x1000, 0x1000, CRC(77533554) SHA1(fe97a412135b770ce7e85442507eac0c25b7256a) ) - ROM_LOAD( "main_hang_3b_2732.u9", 0x2000, 0x1000, CRC(daab4853) SHA1(b3b8ef051f4b04195cf7b25232f1af561c3ff7ba) ) - - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) - ROM_LOAD( "main_hang_0b_2732.u36", 0x0000, 0x1000, CRC(e031dbf8) SHA1(ae6d34ad02b2d7deb1665d2420f8399a3ca88585) ) - - ROM_REGION( 0x16000, "questions", 0 ) /* question data */ - ROM_LOAD( "aux_27c256.8", 0x00000, 0x8000, CRC(c7d76338) SHA1(40e88efd7e250ad867772258eb6dc3b225de781f) ) - ROM_LOAD( "aux_2764.1", 0x08000, 0x2000, CRC(a88563c8) SHA1(23cb169268ded6c81494197cfb9b34180667fc8c) ) - ROM_LOAD( "aux_2764.2", 0x0a000, 0x2000, CRC(4bddbe3c) SHA1(391012de04e8a3638fac6f173a81cf1f86d8f751) ) - ROM_LOAD( "aux_2764.3", 0x0c000, 0x2000, CRC(3ece427a) SHA1(ff09bf3734ecfa6d848037cca11b80adb8074e39) ) - ROM_LOAD( "aux_2764.4", 0x0e000, 0x2000, CRC(bb0efc98) SHA1(4317d1243f6aaf8178d19574645a43f9c2e42725) ) - ROM_LOAD( "aux_2764.5", 0x10000, 0x2000, CRC(8bebf907) SHA1(76d01b71e696b06cdf9d9c93839ef797c56b78db) ) - ROM_LOAD( "aux_2764.6", 0x12000, 0x2000, CRC(d1732f3b) SHA1(c4e862bd98f237e1d2ecad430226cba6aba4ebb8) ) - ROM_LOAD( "aux_2764.7", 0x14000, 0x2000, CRC(e51d45b8) SHA1(7cd0ced0245dbd55a225182e43b89d55d8d33197) ) - - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ - ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted */ - ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ - ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ -ROM_END - ROM_START( sextriv ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "sex.u7", 0x00000, 0x1000, CRC(f587bd69) SHA1(47ddc70c3cc75a22ba67833531aeeb409f8d8dc1) ) ROM_LOAD( "sex.u8", 0x01000, 0x1000, CRC(2718c26d) SHA1(b614b4a102ae664c4a3be1e30e515454442de052) ) ROM_LOAD( "sex.u9", 0x02000, 0x1000, CRC(f4f5a651) SHA1(a1e1fa96f7631b2274ef7fbe7e6e1aae1ee540c5) ) - ROM_REGION( 0x1000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) ROM_LOAD( "sex.u36", 0x00000, 0x1000, CRC(fe3fa087) SHA1(356b3fe62b4c600ff5a625bc3e1c53d8143f55df) ) ROM_REGION( 0x10000, "questions", 0 ) /* question data */ @@ -849,35 +811,134 @@ ROM_START( sextriv ) ROM_LOAD( "sex7.bin", 0x0c000, 0x2000, CRC(4bddbe3c) SHA1(391012de04e8a3638fac6f173a81cf1f86d8f751) ) ROM_LOAD( "sex8.bin", 0x0e000, 0x2000, CRC(d4221641) SHA1(d2c0f66c4fe3a77c73cdcc71bbd8c48342d29431) ) - ROM_REGION( 0x0140, "proms", 0 ) /* unknown */ + ROM_REGION( 0x0100, "nvram", 0 ) + ROM_LOAD( "sextriv.nv", 0x0000, 0x0100, CRC(33fae98c) SHA1(11aaca7706460dbad750c11c794bbe20084a8ff6) ) + + ROM_REGION( 0x0140, "proms", 0 ) ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted */ ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ ROM_END +ROM_START( quaquiz2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "qquiz.u7", 0x00000, 0x01000, CRC(8e525abc) SHA1(b03500a2ccb8f0b038093460e38460d29bdf8af3) ) + ROM_LOAD( "qquiz.u8", 0x01000, 0x01000, CRC(2186ceb5) SHA1(c8f74026d18841ebcc4cfc85ba08e68e41e9d1d0) ) + ROM_LOAD( "qquiz.u9", 0x02000, 0x01000, CRC(6d815876) SHA1(275a76e791abd38bc9baf6626edcb6d78259ebc9) ) + ROM_LOAD( "qquiz.u10", 0x03000, 0x01000, CRC(714a9093) SHA1(9ca75565003bd14ca2f0b8882667fe577732a4da) ) + + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) + ROM_LOAD( "qquiz.u36", 0x00000, 0x01000, CRC(468dca15) SHA1(4ace7b3cd233f826949b65e2ab71e94ac6a293a0) ) + + ROM_REGION( 0x40000, "questions", ROMREGION_INVERT ) /* question data - inverted */ + ROM_LOAD( "gst.01", 0x00000, 0x08000, CRC(c0d83049) SHA1(94c750068e550cdaf4f6f5416bc7c160a759dd5a) ) + ROM_LOAD( "gst.02", 0x08000, 0x08000, CRC(b844743e) SHA1(4a75e4956c568bad70130a326c0fc691a11ff04c) ) + ROM_LOAD( "gst.03", 0x10000, 0x08000, CRC(4c734bc5) SHA1(48171494f183dec01732b2d6a0f2af0c1b173dba) ) + ROM_LOAD( "gst.04", 0x18000, 0x08000, CRC(8ddbeca6) SHA1(1e49fb7f1469c0476094d8538473b23ef0b64ac5) ) + ROM_LOAD( "gst.05", 0x20000, 0x08000, CRC(f1e07381) SHA1(3a5f075491840ed214490704453336512ecafc0d) ) + ROM_LOAD( "gst.06", 0x28000, 0x08000, CRC(18855c6d) SHA1(0454eaebc42838c75e7748f8e2c2eb5f58380f51) ) + ROM_LOAD( "gst.07", 0x30000, 0x08000, CRC(1270d5bd) SHA1(826162e37c233639b1f545f4d215a4bf9fcba065) ) + ROM_LOAD( "gst.08", 0x38000, 0x08000, CRC(64a54915) SHA1(13bbdff3617ec14595bc72891f56d327d76f539d) ) + + ROM_REGION( 0x0100, "nvram", 0 ) + ROM_LOAD( "quaquiz2.nv", 0x0000, 0x0100, CRC(dad239cf) SHA1(c46380d7b673a1367f14364ae47cd46ebe080e1b) ) + + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ + ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ + ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ +ROM_END + +ROM_START( supertr2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "ast2-1d.rom", 0x00000, 0x01000, CRC(e9f0e271) SHA1(c2bae7d5ef04aed3ce14c403c70d2acc1831b763) ) + ROM_LOAD( "ast2-2d.rom", 0x01000, 0x01000, CRC(542ba813) SHA1(1ac063f3678d1295aa728ab7ac43165284b66836) ) + ROM_LOAD( "ast2-3d.rom", 0x02000, 0x01000, CRC(46c467b7) SHA1(2556ce6436112646d8ec3bcff7c32212c5296463) ) + ROM_LOAD( "ast2-4d.rom", 0x03000, 0x01000, CRC(11382c44) SHA1(6b611ad9e591b27d5cb239388e4d27e646be3028) ) + + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) + ROM_LOAD( "ast2-0d.rom", 0x00000, 0x01000, CRC(a40f9201) SHA1(a87cfc3dbe5cff82926f5f8486c37fd3f4449135) ) + + ROM_REGION( 0x40000, "questions", ROMREGION_INVERT ) /* question data - inverted */ + ROM_LOAD( "astq2-1.rom", 0x00000, 0x08000, CRC(4af390cb) SHA1(563c6210f2fcc8ee9b5112e2d6f522ddfca2ddea) ) + ROM_LOAD( "astq2-2.rom", 0x08000, 0x08000, CRC(91a7b4f6) SHA1(c8ff2e8475ae889be14086a04275df94efd66156) ) + ROM_LOAD( "astq2-3.rom", 0x10000, 0x08000, CRC(e6a50944) SHA1(e3fad344d4bedfd14f307445334903c35e745d9b) ) + ROM_LOAD( "astq2-4.rom", 0x18000, 0x08000, CRC(6f9f9cef) SHA1(b43d1a2a714764f46f038f85a8233bf811a877ae) ) + ROM_LOAD( "astq2-5.rom", 0x20000, 0x08000, CRC(a0c0f51e) SHA1(c61518ef53d5bec334062b6853663424853892b9) ) + ROM_LOAD( "astq2-6.rom", 0x28000, 0x08000, CRC(c0f61b5f) SHA1(65398f9d22fce95c4146a2cb8174edd6b336b9e4) ) + ROM_LOAD( "astq2-7.rom", 0x30000, 0x08000, CRC(72461937) SHA1(2f95a708b24f56d9b1293a88aa53eb4a32f89869) ) + ROM_LOAD( "astq2-8.rom", 0x38000, 0x08000, CRC(cd2674d5) SHA1(7fb6513172ffe8e3b9e0f4dc9ecdb42d954b1ff0) ) + + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */ + ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ + ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ +ROM_END + +ROM_START( supertr3 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "triv3.u07", 0x00000, 0x01000, CRC(f04a19d7) SHA1(f887ec976d9eb14329621ac75d6547fca6808bb3) ) + ROM_LOAD( "triv3.u08", 0x01000, 0x01000, CRC(543d5664) SHA1(58ee8b94964b567fc052f7c4df4517ee029046bd) ) + ROM_LOAD( "triv3.u09", 0x02000, 0x01000, CRC(047faed4) SHA1(e24c919434ad4e9a1059e34e6609a7271accd8f1) ) + ROM_LOAD( "triv3.u10", 0x03000, 0x01000, CRC(df4b81b5) SHA1(b1ab666c51b838c4176f8b314677d6ae129997d0) ) + + ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT ) + ROM_LOAD( "triv3.u36", 0x00000, 0x01000, CRC(79277b08) SHA1(e8de06809853e030d1ee29a788f9bc8ff7175af0) ) + + ROM_REGION( 0x40000, "questions", ROMREGION_INVERT ) /* question data - inverted */ + ROM_LOAD( "triv3.u41", 0x00000, 0x08000, CRC(d62960c4) SHA1(d6f7dbdb016c14ca1cab5a0e965c9ae40dcbbc28) ) + ROM_LOAD( "triv3.u42", 0x08000, 0x08000, CRC(6d50fec9) SHA1(6edb3ed92781e8961eacc342c0bceeb052b81a3e) ) + ROM_LOAD( "triv3.u43", 0x10000, 0x08000, CRC(8c0a73de) SHA1(2a7175b7845b26b8d0d53279cd8793edee95d3a1) ) + ROM_LOAD( "triv3.u44", 0x18000, 0x08000, CRC(fec7e3d0) SHA1(6921386be4de06efb2d4c382733c2d22948fdf4f) ) + ROM_LOAD( "triv3.u45", 0x20000, 0x08000, CRC(b28d81dd) SHA1(d4a6026b437dcaf6881232b960b9e870754c9ec6) ) + ROM_LOAD( "triv3.u46", 0x28000, 0x08000, CRC(86cffc1f) SHA1(06557bcc51b415349e5f7440f753ef2f66dcfde2) ) + ROM_LOAD( "triv3.u47", 0x30000, 0x08000, CRC(f316803c) SHA1(31edb97bad7083ed32e0ee75256bc7d488fa234b) ) + ROM_LOAD( "triv3.u48", 0x38000, 0x08000, CRC(1a99b268) SHA1(6369c79f645962b4a2f85b18e9d93c3cc65defc1) ) + + ROM_REGION( 0x0140, "proms", 0 ) + ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, verified */ + ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */ + ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */ +ROM_END + + + +/************************************* + * + * Driver setup + * + *************************************/ /* question address is stored as L/H/X (low/high/don't care) */ static DRIVER_INIT( addr_lhx ) { - memory_install_read8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_IO), 0x28, 0x2b, 0, 0, question_lhx_r); + question_offset_low = 0; + question_offset_mid = 1; + question_offset_high = 0xff; } /* question address is stored as X/L/H (don't care/low/high) */ static DRIVER_INIT( addr_xlh ) { - memory_install_read8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_IO), 0x28, 0x2b, 0, 0, question_xlh_r); + question_offset_low = 1; + question_offset_mid = 2; + question_offset_high = 0xff; } /* question address is stored as X/H/L (don't care/high/low) */ static DRIVER_INIT( addr_xhl ) { - memory_install_read8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_IO), 0x28, 0x2b, 0, 0, question_xhl_r); + question_offset_low = 2; + question_offset_mid = 1; + question_offset_high = 0xff; } /* question address is stored as L/M/H (low/mid/high) */ static DRIVER_INIT( addr_lmh ) { - memory_install_read8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_IO), 0x28, 0x2b, 0, 0, question_lmh_r); + question_offset_low = 0; + question_offset_mid = 1; + question_offset_high = 2; } static DRIVER_INIT( addr_lmhe ) @@ -954,13 +1015,22 @@ static DRIVER_INIT( addr_lmhe ) DRIVER_INIT_CALL(addr_lmh); } -GAME( 1981, statusbj, 0, statusbj, statusbj, addr_xlh, ROT0, "Status Games", "Status Black Jack (V1.0c)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING ) -GAME( 1984, hangman, 0, hangman, hangman, addr_lmh, ROT0, "Status Games", "Hangman", GAME_SUPPORTS_SAVE ) + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1981, statusbj, 0, statriv2, statusbj, 0, ROT0, "Status Games", "Status Black Jack (V1.0c)", GAME_SUPPORTS_SAVE ) +GAME( 1981, funcsino, 0, statriv2, funcsino, 0, ROT0, "Status Games", "Status Fun Casino", GAME_SUPPORTS_SAVE ) +GAME( 1984, hangman, 0, statriv2, hangman, addr_lmh, ROT0, "Status Games", "Hangman", GAME_SUPPORTS_SAVE ) GAME( 1984, trivquiz, 0, statriv2, statriv2, addr_lhx, ROT0, "Status Games", "Triv Quiz", GAME_SUPPORTS_SAVE ) GAME( 1984, statriv2, 0, statriv2, statriv2, addr_xlh, ROT0, "Status Games", "Triv Two", GAME_SUPPORTS_SAVE ) GAME( 1985, statrv2v, statriv2, statriv2v, statriv2, addr_xlh, ROT90,"Status Games", "Triv Two (Vertical)", GAME_SUPPORTS_SAVE ) -GAME( 1985, statriv4, 0, statriv4, statriv4, addr_xhl, ROT0, "Status Games", "Triv Four", GAME_SUPPORTS_SAVE ) -GAME( 1985, sextriv, 0, statriv4, sextriv, addr_lhx, ROT0, "Status Games", "Sex Triv", GAME_SUPPORTS_SAVE ) -GAME( 1985, quaquiz2, 0, quaquiz2, quaquiz2, addr_lmh, ROT0, "Status Games", "Quadro Quiz II", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) -GAME( 1986, supertr2, 0, supertr2, supertr2, addr_lmhe, ROT0, "Status Games", "Super Triv II", GAME_SUPPORTS_SAVE ) -GAME( 1988, supertr3, 0, supertr3, supertr2, addr_lmh, ROT0, "Status Games", "Super Triv III", GAME_SUPPORTS_SAVE ) +GAME( 1985, statriv4, 0, statriv2, statriv4, addr_xhl, ROT0, "Status Games", "Triv Four", GAME_SUPPORTS_SAVE ) +GAME( 1985, sextriv, 0, statriv2, sextriv, addr_lhx, ROT0, "Status Games", "Sex Triv", GAME_SUPPORTS_SAVE ) +GAME( 1985, quaquiz2, 0, statriv2, quaquiz2, addr_lmh, ROT0, "Status Games", "Quadro Quiz II", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) +GAME( 1986, supertr2, 0, statriv2, supertr2, addr_lmhe, ROT0, "Status Games", "Super Triv II", GAME_SUPPORTS_SAVE ) +GAME( 1988, supertr3, 0, statriv2, supertr2, addr_lmh, ROT0, "Status Games", "Super Triv III", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/thief.c b/src/mame/drivers/thief.c index 6be93aeca77..296e34697cb 100644 --- a/src/mame/drivers/thief.c +++ b/src/mame/drivers/thief.c @@ -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) diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index fbb3a21a177..0c33617b5f9 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -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 */ diff --git a/src/mame/video/thief.c b/src/mame/video/thief.c index 06efb086d19..9c89281cddd 100644 --- a/src/mame/video/thief.c +++ b/src/mame/video/thief.c @@ -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;