diff options
author | Aaron Giles <aaron@aarongiles.com> | 2008-10-20 15:34:27 +0000 |
---|---|---|
committer | Aaron Giles <aaron@aarongiles.com> | 2008-10-20 15:34:27 +0000 |
commit | 13ad68bca4ed4014717f02c625fa0eef6c4b2a59 (patch) | |
tree | 66bd350a8a0a99f73029bf1466c7e07a3f2eaff0 | |
parent | f7c8307f90f62312560d589dd93e0b094b1f4cee (diff) |
New games added: Grudge Match (Yankee Game Technology)
Yet another 8-bit Incredible Technologies board. Different in several
significant ways from previous models:
* YM2608B for audio, replacing YM3812+OKI6295
* TMS34070 for palettes instead of PC RAMDAC
* Different video memory layout
-rw-r--r-- | src/emu/video/tms34061.c | 6 | ||||
-rw-r--r-- | src/mame/drivers/itech8.c | 259 | ||||
-rw-r--r-- | src/mame/includes/itech8.h | 5 | ||||
-rw-r--r-- | src/mame/mamedriv.c | 1 | ||||
-rw-r--r-- | src/mame/video/itech8.c | 106 |
5 files changed, 334 insertions, 43 deletions
diff --git a/src/emu/video/tms34061.c b/src/emu/video/tms34061.c index 8f6919b02cc..bccbdecf932 100644 --- a/src/emu/video/tms34061.c +++ b/src/emu/video/tms34061.c @@ -86,6 +86,8 @@ void tms34061_start(running_machine *machine, const struct tms34061_interface *i /* allocate memory for VRAM */ tms34061.vram = auto_malloc(tms34061.intf.vramsize + 256 * 2); memset(tms34061.vram, 0, tms34061.intf.vramsize + 256 * 2); + /* not really a save state, just there for debugging purposes */ + state_save_register_global_pointer(tms34061.vram, tms34061.intf.vramsize); /* allocate memory for latch RAM */ tms34061.latchram = auto_malloc(tms34061.intf.vramsize + 256 * 2); @@ -369,6 +371,7 @@ static void xypixel_w(int offset, UINT8 data) /* mask to the VRAM size */ pixeloffs &= tms34061.vrammask; + if (VERBOSE) logerror("%04X:tms34061 xy (%04x) = %02x/%02x\n", activecpu_get_pc(), pixeloffs, data, tms34061.latchdata); /* set the pixel data */ tms34061.vram[pixeloffs] = data; @@ -424,6 +427,7 @@ void tms34061_w(int col, int row, int func, UINT8 data) offs = ((row << tms34061.intf.rowshift) | col) & tms34061.vrammask; if (tms34061.regs[TMS34061_CONTROL2] & 0x0040) offs |= (tms34061.regs[TMS34061_CONTROL2] & 3) << 16; + if (VERBOSE) logerror("%04X:tms34061 direct (%04x) = %02x/%02x\n", activecpu_get_pc(), offs, data, tms34061.latchdata); if (tms34061.vram[offs] != data || tms34061.latchram[offs] != tms34061.latchdata) { tms34061.vram[offs] = data; @@ -437,6 +441,7 @@ void tms34061_w(int col, int row, int func, UINT8 data) if (tms34061.regs[TMS34061_CONTROL2] & 0x0040) offs |= (tms34061.regs[TMS34061_CONTROL2] & 3) << 16; offs &= tms34061.vrammask; + if (VERBOSE) logerror("%04X:tms34061 shiftreg write (%04x)\n", activecpu_get_pc(), offs); memcpy(&tms34061.vram[offs], tms34061.shiftreg, (size_t)1 << tms34061.intf.rowshift); memset(&tms34061.latchram[offs], tms34061.latchdata, (size_t)1 << tms34061.intf.rowshift); @@ -448,6 +453,7 @@ void tms34061_w(int col, int row, int func, UINT8 data) if (tms34061.regs[TMS34061_CONTROL2] & 0x0040) offs |= (tms34061.regs[TMS34061_CONTROL2] & 3) << 16; offs &= tms34061.vrammask; + if (VERBOSE) logerror("%04X:tms34061 shiftreg read (%04x)\n", activecpu_get_pc(), offs); tms34061.shiftreg = &tms34061.vram[offs]; break; diff --git a/src/mame/drivers/itech8.c b/src/mame/drivers/itech8.c index 48b2460b3eb..bb8139fe8f9 100644 --- a/src/mame/drivers/itech8.c +++ b/src/mame/drivers/itech8.c @@ -9,6 +9,7 @@ * Strata Bowling [2 sets] * Super Strike Bowling * Wheel of Fortune [2 sets] + * Grudge Match * Golden Tee Golf [2 sets] * Golden Tee Golf II [3 sets] * Slick Shot [3 sets] @@ -143,7 +144,7 @@ Summary: - There are 7 known variants of PCBs for these games. All the PCBs + There are 8 known variants of PCBs for these games. All the PCBs have the following features in common: 68B09 @ 2 MHz for the main CPU @@ -151,21 +152,26 @@ 68B09 @ 2 MHz for the sound CPU 2k RAM for the sound CPU - YM2203C or YM3812 for music - OKI M6295 for speech + YM2203C, YM2608B or YM3812 for music + OKI M6295 for speech (except for YM2608B-based system) TMS34061 for the video controller ITV4400 custom blitter for rendering - 6-bit RAMDAC for palette + 6-bit RAMDAC for palette, or 2xTMS34070NL (Grudge Match only) From 2-8 64k x 4-bit VRAM chips for frame buffers An overview of each style PCB is given below: - Wheel of Fortune-style + Wheel Watcher (Wheel of Fortune)-style * Single board * YM2203C for music * 2 VRAM chips for a single 8-bit 256x256 video page + Grudge Match-style + * Single board + * YM2608B for music + * 4 VRAM chips for two 4-bit 512x256 layers + Strata Bowling-style * Single board * YM2203C for music @@ -202,9 +208,9 @@ **************************************************************************** - ---------------- - Wheel of Fortune - ---------------- + -------------------------------- + Wheel Watcher (Wheel of Fortune) + -------------------------------- +------------------------------------+-+ | Bt476KP35 | | @@ -240,6 +246,44 @@ ITV4400 = IT custom blitter + ------------- + Grudge Match + ------------ + + +------------------------------------+-+ + | TMS34070NL | | + | TMS34070NL DIPSW4 | | + | TMS4461-15 8MHz | | + | TMS4461-15 | | + | TMS4461-15 | | + | TMS4461-15 | | + | | | + | TMS34061 +- + | | + | ITV4400 | + | GROM6 SROM0 | + | GROM5 | + | GROM4 | + | GROM3 MK40702B-20 YM2608B | + | GROM2 U5-PGM MK6116 | + | GROM1 U27-SND | + | GROM0 | + | MC68B09 MC68B09 | + +--------------------------------------+ + + GROM0-3 = AM27C010-25 + U5-PGM = D27512-25 + U27-SND = 27C256-20 + SROM0 = AM27C010-25 + ITVS = ??? + MT42C4064Z = 64k x 4 VRAM (2 populated on Wheel of Fortune) + MK40702B = zero-power RAM + MK6116 = 2k x 8 RAM + TMS34070NL = 16-color RAMDAC + TMS34061 = video controller + ITV4400 = IT custom blitter + + ------------------------------ Strata Bowling/Golden Tee Golf ------------------------------ @@ -459,6 +503,7 @@ #include "video/tlc34076.h" #include "itech8.h" #include "sound/2203intf.h" +#include "sound/2608intf.h" #include "sound/3812intf.h" #include "sound/okim6295.h" @@ -944,6 +989,19 @@ static ADDRESS_MAP_START( sound2203_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_END +/*------ YM2608B-based sound ------*/ +static ADDRESS_MAP_START( sound2608b_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x1000, 0x1000) AM_WRITENOP + AM_RANGE(0x2000, 0x2000) AM_READ(sound_data_r) + AM_RANGE(0x4000, 0x4000) AM_READWRITE(ym2608_status_port_0_a_r, ym2608_control_port_0_a_w) + AM_RANGE(0x4001, 0x4001) AM_WRITE(ym2608_data_port_0_a_w) + AM_RANGE(0x4002, 0x4002) AM_READWRITE(ym2608_status_port_0_b_r, ym2608_control_port_0_b_w) + AM_RANGE(0x4003, 0x4003) AM_WRITE(ym2608_data_port_0_b_w) + AM_RANGE(0x6000, 0x67ff) AM_RAM + AM_RANGE(0x8000, 0xffff) AM_ROM +ADDRESS_MAP_END + + /*------ YM3812-based sound ------*/ static ADDRESS_MAP_START( sound3812_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x0000) AM_WRITENOP @@ -1024,6 +1082,44 @@ static INPUT_PORTS_START( wfortune ) INPUT_PORTS_END +static INPUT_PORTS_START( grmatch ) + PORT_START("40") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(special_r, NULL) /* input from sound board */ + PORT_BIT( 0x06, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x08, 0x08, "Adjustments Lockout" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_1C ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x20, "1" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) + + PORT_START("60") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START("80") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) +INPUT_PORTS_END + + static INPUT_PORTS_START( stratab ) PORT_START("40") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(special_r, NULL) /* input from sound board */ @@ -1615,6 +1711,20 @@ static const ym2203_interface ym2203_config = }; +static const ym2608_interface ym2608b_config = +{ + { + AY8910_LEGACY_OUTPUT, + AY8910_DEFAULT_LOADS, + NULL, + NULL, + NULL, + ym2203_portb_out, + }, + generate_sound_irq +}; + + static const ym3812_interface ym3812_config = { generate_sound_irq @@ -1652,10 +1762,6 @@ static MACHINE_DRIVER_START( itech8_core_lo ) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") - - MDRV_SOUND_ADD("oki", OKIM6295, CLOCK_8MHz/8) // was /128?? - MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // was /128, not /132, so unsure so pin 7 not verified - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_DRIVER_END @@ -1681,6 +1787,23 @@ static MACHINE_DRIVER_START( itech8_sound_ym2203 ) MDRV_SOUND_ROUTE(1, "mono", 0.07) MDRV_SOUND_ROUTE(2, "mono", 0.07) MDRV_SOUND_ROUTE(3, "mono", 0.75) + + MDRV_SOUND_ADD("oki", OKIM6295, CLOCK_8MHz/8) // was /128?? + MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // was /128, not /132, so unsure so pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( itech8_sound_ym2608b ) + + /* basic machine hardware */ + MDRV_CPU_ADD("sound", M6809, CLOCK_8MHz/4) + MDRV_CPU_PROGRAM_MAP(sound2608b_map,0) + + /* sound hardware */ + MDRV_SOUND_ADD("ym", YM2608, CLOCK_8MHz) + MDRV_SOUND_CONFIG(ym2608b_config) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_DRIVER_END @@ -1694,6 +1817,10 @@ static MACHINE_DRIVER_START( itech8_sound_ym3812 ) MDRV_SOUND_ADD("ym", YM3812, CLOCK_8MHz/2) MDRV_SOUND_CONFIG(ym3812_config) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) + + MDRV_SOUND_ADD("oki", OKIM6295, CLOCK_8MHz/8) // was /128?? + MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // was /128, not /132, so unsure so pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_DRIVER_END @@ -1707,6 +1834,10 @@ static MACHINE_DRIVER_START( itech8_sound_ym3812_external ) MDRV_SOUND_ADD("ym", YM3812, CLOCK_8MHz/2) MDRV_SOUND_CONFIG(ym3812_config) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) + + MDRV_SOUND_ADD("oki", OKIM6295, CLOCK_8MHz/8) // was /128?? + MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // was /128, not /132, so unsure so pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_DRIVER_END @@ -1725,6 +1856,22 @@ static MACHINE_DRIVER_START( wfortune ) MACHINE_DRIVER_END +static MACHINE_DRIVER_START( grmatch ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(itech8_core_hi) + MDRV_IMPORT_FROM(itech8_sound_ym2608b) + + /* video hardware */ + MDRV_SCREEN_MODIFY("main") + MDRV_SCREEN_VISIBLE_AREA(0, 399, 0, 239) + MDRV_VIDEO_UPDATE(itech8_grmatch) + + /* palette updater */ + MDRV_TIMER_ADD_SCANLINE("palette", grmatch_palette_update, "main", 0, 0) +MACHINE_DRIVER_END + + static MACHINE_DRIVER_START( stratab_hi ) /* basic machine hardware */ @@ -1896,7 +2043,7 @@ ROM_START( wfortune ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "wofsnd", 0x08000, 0x8000, CRC(0a6aa5dc) SHA1(42eef40a4300d6d16d9e2af678432a02be05f104) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "wofgrom0", 0x00000, 0x10000, CRC(9a157b2c) SHA1(c349b41ba00cf6e2fec32872627c8cfdd8b5c1b9) ) ROM_LOAD( "wofgrom1", 0x10000, 0x10000, CRC(5064739b) SHA1(424e3f94333f8ca21ac39b64b684cf6b487164d3) ) ROM_LOAD( "wofgrom2", 0x20000, 0x10000, CRC(3d393b2b) SHA1(2c94d2dab7369c099c470cf96391b033f39add78) ) @@ -1916,7 +2063,7 @@ ROM_START( wfortuna ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "wofsnd", 0x08000, 0x8000, CRC(0a6aa5dc) SHA1(42eef40a4300d6d16d9e2af678432a02be05f104) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "wofgrom0", 0x00000, 0x10000, CRC(9a157b2c) SHA1(c349b41ba00cf6e2fec32872627c8cfdd8b5c1b9) ) ROM_LOAD( "wofgrom1", 0x10000, 0x10000, CRC(5064739b) SHA1(424e3f94333f8ca21ac39b64b684cf6b487164d3) ) ROM_LOAD( "wofgrom2", 0x20000, 0x10000, CRC(3d393b2b) SHA1(2c94d2dab7369c099c470cf96391b033f39add78) ) @@ -1927,6 +2074,29 @@ ROM_START( wfortuna ) ROM_END +ROM_START( grmatch ) + ROM_REGION( 0x1c000, "main", 0 ) + ROM_LOAD( "grudgematch.u5", 0x04000, 0x4000, CRC(11cadec9) SHA1(e21df623d1311ea63bafa2d6d0d94eb7d13232da) ) + ROM_CONTINUE( 0x10000, 0xc000 ) + ROM_COPY( "main", 0x14000, 0x8000, 0x8000 ) + + ROM_REGION( 0x10000, "sound", 0 ) + ROM_LOAD( "grudgematch.u27", 0x08000, 0x8000, CRC(59c18e63) SHA1(0d00c9cc683ff17e3213ba343ae65d533b57a243) ) + + ROM_REGION( 0xe0000, "grom", 0 ) + ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(9064eff9) SHA1(4c80432ef359266c43b4691b503f529ed018a655) ) + ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(6919c314) SHA1(e4a7ca77ee27ea8e41a236806e689c964d981210) ) + ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(36b1682c) SHA1(6098b8aa576522c3cea66b5ac8f9406bf4222008) ) + ROM_LOAD( "grom3.bin", 0x60000, 0x20000, CRC(7bf05f61) SHA1(269e1cacf319d9f2a2b865ac6573e690f36827a1) ) + ROM_LOAD( "grom4.bin", 0x80000, 0x20000, CRC(55bded89) SHA1(61e0c60e391327a5fdda704c7756fcd6e11253c5) ) + ROM_LOAD( "grom5.bin", 0xa0000, 0x20000, CRC(37b47b2e) SHA1(352204d3e95e6db556aacf053c42d0d5871245a7) ) + ROM_LOAD( "grom6.bin", 0xc0000, 0x20000, CRC(860ee822) SHA1(2ca821c2fa220065b99b99b7487fe9666f338c75) ) + + ROM_REGION( 0x20000, "ym", 0 ) + ROM_LOAD( "srom0.bin", 0x00000, 0x20000, CRC(49bce954) SHA1(68a8b11c03722349d673f7383288c63054f0d6f6) ) +ROM_END + + ROM_START( stratab ) ROM_REGION( 0x1c000, "main", 0 ) ROM_LOAD( "sbprogv3.bin", 0x08000, 0x8000, CRC(a5ae728f) SHA1(85098eef1614d5148e8082df4c936883662292ee) ) @@ -1935,7 +2105,7 @@ ROM_START( stratab ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "sbsnds.bin", 0x08000, 0x8000, CRC(b36c8f0a) SHA1(c4c3edf3352d95561f76705087338c1946137447) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(a915b0bd) SHA1(0955c7ebb48e97ccffc18c5deec6eccce1d68de8) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(340c661f) SHA1(150f9158fa6d956d08051c67c17723b1d8c66867) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(5df9f1cf) SHA1(cad87f63ac0e902dffeeaa42538fc73f792d87d9) ) @@ -1953,7 +2123,7 @@ ROM_START( stratab1 ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "sbsnds.bin", 0x08000, 0x8000, CRC(b36c8f0a) SHA1(c4c3edf3352d95561f76705087338c1946137447) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(a915b0bd) SHA1(0955c7ebb48e97ccffc18c5deec6eccce1d68de8) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(340c661f) SHA1(150f9158fa6d956d08051c67c17723b1d8c66867) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(5df9f1cf) SHA1(cad87f63ac0e902dffeeaa42538fc73f792d87d9) ) @@ -1972,7 +2142,7 @@ ROM_START( gtg ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "u27.bin", 0x08000, 0x8000, CRC(358d2440) SHA1(7b09350c89f9d2c86dc187d8812bbf26b576a38f) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(a29c688a) SHA1(32dbb996a5e4c23cfd44b79312ac4a767658f20a) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(b52a23f6) SHA1(092961acf47875179b44342e2dd8955670e67ea2) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(9b8e3a61) SHA1(1b5682b1328d6c97b604fb71512e8f72322a688f) ) @@ -1994,7 +2164,7 @@ ROM_START( gtgt ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "snd-u27.256", 0x08000, 0x8000, CRC(471da557) SHA1(32bfe450a42d9eb6c14edcfa2b4e33f65a11126e) ) - ROM_REGION( 0xb0000, "gfx1", 0 ) + ROM_REGION( 0xb0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(a29c688a) SHA1(32dbb996a5e4c23cfd44b79312ac4a767658f20a) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(b52a23f6) SHA1(092961acf47875179b44342e2dd8955670e67ea2) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(9b8e3a61) SHA1(1b5682b1328d6c97b604fb71512e8f72322a688f) ) @@ -2017,7 +2187,7 @@ ROM_START( gtg2t ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "u27.bin", 0x08000, 0x8000, CRC(dd2a5905) SHA1(dc93f13de3953852a6757361eb9683a57d3ed326) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(a29c688a) SHA1(32dbb996a5e4c23cfd44b79312ac4a767658f20a) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(a4182776) SHA1(9f4704d1a61a4fffce454c82cb3eb4629d9a2006) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(0580bb99) SHA1(012d473bc63632a5ed1a250daa54a00a4e30e8b2) ) @@ -2042,7 +2212,7 @@ ROM_START( gtg2j ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "u27.bin", 0x08000, 0x8000, CRC(dd2a5905) SHA1(dc93f13de3953852a6757361eb9683a57d3ed326) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(a29c688a) SHA1(32dbb996a5e4c23cfd44b79312ac4a767658f20a) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(a4182776) SHA1(9f4704d1a61a4fffce454c82cb3eb4629d9a2006) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(0580bb99) SHA1(012d473bc63632a5ed1a250daa54a00a4e30e8b2) ) @@ -2073,7 +2243,7 @@ ROM_START( slikshot ) ROM_CONTINUE( 0x00000, 0x0800 ) ROM_CONTINUE( 0x00000, 0x0800 ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(e60c2804) SHA1(e62d11b6c4439a70a2f32df72c8c64e2f110351e) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(d764d542) SHA1(43fc0c9b627484a670d87da91e212741b137e995) ) @@ -2097,7 +2267,7 @@ ROM_START( sliksh17 ) ROM_CONTINUE( 0x00000, 0x0800 ) ROM_CONTINUE( 0x00000, 0x0800 ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(e60c2804) SHA1(e62d11b6c4439a70a2f32df72c8c64e2f110351e) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(d764d542) SHA1(43fc0c9b627484a670d87da91e212741b137e995) ) @@ -2121,7 +2291,7 @@ ROM_START( sliksh16 ) ROM_CONTINUE( 0x00000, 0x0800 ) ROM_CONTINUE( 0x00000, 0x0800 ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "pool-grom.0", 0x00000, 0x10000, CRC(e6d0edc6) SHA1(5287a31bbdde1e4291d8e9e6b99d3aa12bfb6e18) ) ROM_LOAD( "pool-grom.1", 0x10000, 0x10000, CRC(5a071aa2) SHA1(9c5506e37625d213429b1231d457d7ce8a7a81ff) ) ROM_LOAD( "pool-grom.2", 0x20000, 0x10000, CRC(c0bdf4e0) SHA1(3b7c635375c5e5fddcbc1bd1b186c960081ec37e) ) @@ -2147,7 +2317,7 @@ ROM_START( dynobop ) ROM_CONTINUE( 0x00000, 0x0800 ) ROM_CONTINUE( 0x00000, 0x0800 ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "dynobop.gr0", 0x00000, 0x20000, CRC(3525a7a3) SHA1(fe0b08203c135d55507506936dc34e1503e4906b) ) ROM_LOAD( "dynobop.gr1", 0x20000, 0x20000, CRC(1544a232) SHA1(60bba76537c82887db8e38c6a87c528afdd385d0) ) @@ -2170,7 +2340,7 @@ ROM_START( sstrike ) ROM_CONTINUE( 0x00000, 0x0800 ) ROM_CONTINUE( 0x00000, 0x0800 ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "sstgrom0.bin", 0x00000, 0x20000, CRC(9cfb9849) SHA1(5aa860c0c6e3916ebdb8898ee44f633bf3347ca8) ) ROM_LOAD( "sstgrom1.bin", 0x20000, 0x20000, CRC(d9ea14e1) SHA1(4cddf3237c203b0a3f7ae770f85f1be35e9e1b78) ) ROM_LOAD( "sstgrom2.bin", 0x40000, 0x20000, CRC(dcd97bf7) SHA1(95361222ac58bf74539f2a7e80574bcd848c615e) ) @@ -2189,7 +2359,7 @@ ROM_START( pokrdice ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "pd-snd.bin", 0x08000, 0x8000, CRC(4925401c) SHA1(e35983bec4a0dd4cb1d942fd909790b1adeb415d) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "pd-grom0.bin", 0x00000, 0x20000, CRC(7c2573e7) SHA1(d6a2a16277ad854c66927d88c5617d05eefe1057) ) ROM_LOAD( "pd-grom1.bin", 0x20000, 0x20000, CRC(e7c06aeb) SHA1(4be54b078d886359bf6ed376019cc1f6f04f52d6) ) @@ -2207,7 +2377,7 @@ ROM_START( hstennis ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "tensnd.v1", 0x08000, 0x8000, CRC(f034a694) SHA1(3540e2edff2ce47504260ec856bab9b638d9260d) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(1e69ebae) SHA1(a32e2c2f4e4a527ae6b57adeccd2c4d2045ab5fe) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(4e6a22d5) SHA1(3c2d51dd874f61c0a557ea2c1968afa02d9bfc42) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(c0b643a9) SHA1(d240f703a55c39ce4a969612fbb9cd76e4b849ac) ) @@ -2231,7 +2401,7 @@ ROM_START( hstenn10 ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "tensnd.v1", 0x08000, 0x8000, CRC(f034a694) SHA1(3540e2edff2ce47504260ec856bab9b638d9260d) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(1e69ebae) SHA1(a32e2c2f4e4a527ae6b57adeccd2c4d2045ab5fe) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(4e6a22d5) SHA1(3c2d51dd874f61c0a557ea2c1968afa02d9bfc42) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(c0b643a9) SHA1(d240f703a55c39ce4a969612fbb9cd76e4b849ac) ) @@ -2256,7 +2426,7 @@ ROM_START( arlingtn ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "ahrsnd11.bin", 0x08000, 0x8000, CRC(dec57dca) SHA1(21a8ead10b0434629f41f6b067c49b6622569a6c) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(5ef57fe5) SHA1(e877979e034a61968b432037501e25a302a17a9a) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(6aca95c0) SHA1(da7a899bf0812a7af178e48b5a626ce56a836579) ) ROM_LOAD( "grom2.bin", 0x40000, 0x10000, CRC(6d6fde1b) SHA1(aaabc45d4b566be42e8d28d767e4771a96d9caae) ) @@ -2275,7 +2445,7 @@ ROM_START( peggle ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "sound.u27", 0x08000, 0x8000, CRC(b99beb70) SHA1(8d82c3b081a1afb236afa658abb3aa605c6c2264) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(5c02348d) SHA1(c85352728d94b3a5ca78c2493e98bdb4b3206bed) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(85a7a3a2) SHA1(7fb7be67c75867fcccf4272f1ce42f2af94c16e6) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(bfe11f18) SHA1(5e8d36c6a86a8eb883f50620fbfcea3d8398faeb) ) @@ -2294,7 +2464,7 @@ ROM_START( pegglet ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "sound.u27", 0x08000, 0x8000, CRC(b99beb70) SHA1(8d82c3b081a1afb236afa658abb3aa605c6c2264) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(5c02348d) SHA1(c85352728d94b3a5ca78c2493e98bdb4b3206bed) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(85a7a3a2) SHA1(7fb7be67c75867fcccf4272f1ce42f2af94c16e6) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(bfe11f18) SHA1(5e8d36c6a86a8eb883f50620fbfcea3d8398faeb) ) @@ -2314,7 +2484,7 @@ ROM_START( neckneck ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "nn_snd10.u27", 0x08000, 0x8000, CRC(74771b2f) SHA1(0a963d2962699bb1b4d08bd486979151d0a228da) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "nn_grom0.bin", 0x00000, 0x20000, CRC(064d1464) SHA1(4ce5bcadad93586c9af2b0c499d7a7140b080cdb) ) ROM_LOAD( "nn_grom1.bin", 0x20000, 0x20000, CRC(622d9a0b) SHA1(f084dcf194cfc658f97f36972f2b2ff30e834fc5) ) ROM_LOAD( "nn_grom2.bin", 0x40000, 0x20000, CRC(e7eb4020) SHA1(29ceb535d1dfddf8c12cf78919ea10f6b956b8b3) ) @@ -2339,7 +2509,7 @@ ROM_START( rimrockn ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "u27", 0x08000, 0x8000, CRC(59f87f0e) SHA1(46f38aca35a7c2faee227b4c950d20a6076c6fa7) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "grom", 0 ) ROM_LOAD( "grom00", 0x00000, 0x40000, CRC(3eacbad9) SHA1(bff1ec6a24ccf983434e4e9453c30f36fa397534) ) ROM_LOAD( "grom01", 0x40000, 0x40000, CRC(864cc269) SHA1(06f92889cd20881faeb59ec06ca1578ead2294f4) ) ROM_LOAD( "grom02-2.st2", 0x80000, 0x40000, CRC(47904233) SHA1(6a4d10e8f7b75582f706a74b37d59788613ffc61) ) @@ -2369,7 +2539,7 @@ ROM_START( rimrck20 ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "u27", 0x08000, 0x8000, CRC(59f87f0e) SHA1(46f38aca35a7c2faee227b4c950d20a6076c6fa7) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "grom", 0 ) ROM_LOAD( "grom00", 0x00000, 0x40000, CRC(3eacbad9) SHA1(bff1ec6a24ccf983434e4e9453c30f36fa397534) ) ROM_LOAD( "grom01", 0x40000, 0x40000, CRC(864cc269) SHA1(06f92889cd20881faeb59ec06ca1578ead2294f4) ) ROM_LOAD( "grom02-2.st2", 0x80000, 0x40000, CRC(47904233) SHA1(6a4d10e8f7b75582f706a74b37d59788613ffc61) ) @@ -2394,7 +2564,7 @@ ROM_START( rimrck16 ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "u27", 0x08000, 0x8000, CRC(59f87f0e) SHA1(46f38aca35a7c2faee227b4c950d20a6076c6fa7) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "grom", 0 ) ROM_LOAD( "grom00", 0x00000, 0x40000, CRC(3eacbad9) SHA1(bff1ec6a24ccf983434e4e9453c30f36fa397534) ) ROM_LOAD( "grom01", 0x40000, 0x40000, CRC(864cc269) SHA1(06f92889cd20881faeb59ec06ca1578ead2294f4) ) ROM_LOAD( "grom02", 0x80000, 0x40000, CRC(34e567d5) SHA1(d0eb6fd0da8b9c3bfe7d4ecfb4bd903e4926b63a) ) @@ -2419,7 +2589,7 @@ ROM_START( rimrck12 ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "rrbsndv1.u27", 0x08000, 0x8000, CRC(8eda5f53) SHA1(f256544a8c87125587719460ed0fef14efef9015) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "grom", 0 ) ROM_LOAD( "grom00", 0x00000, 0x40000, CRC(3eacbad9) SHA1(bff1ec6a24ccf983434e4e9453c30f36fa397534) ) ROM_LOAD( "grom01", 0x40000, 0x40000, CRC(864cc269) SHA1(06f92889cd20881faeb59ec06ca1578ead2294f4) ) ROM_LOAD( "grom02", 0x80000, 0x40000, CRC(34e567d5) SHA1(d0eb6fd0da8b9c3bfe7d4ecfb4bd903e4926b63a) ) @@ -2439,7 +2609,7 @@ ROM_START( ninclown ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "nc-snd", 0x08000, 0x8000, CRC(f9d5b4e1) SHA1(e5c3774db349b60baf11baecf55ac432871e612c) ) - ROM_REGION( 0x180000, "gfx1", 0 ) + ROM_REGION( 0x180000, "grom", 0 ) ROM_LOAD( "nc-grom0", 0x000000, 0x40000, CRC(532f7bff) SHA1(cc7a64ad1581f37ff4bcad78c11aad355a6e9aa8) ) ROM_LOAD( "nc-grom1", 0x040000, 0x40000, CRC(45640d4a) SHA1(1b59ae2a74fef535c646586422f17b39c9ae247b) ) ROM_LOAD( "nc-grom2", 0x080000, 0x40000, CRC(c8281d06) SHA1(f75d4e858f9bc19e5234f184b75818e448638c15) ) @@ -2461,7 +2631,7 @@ ROM_START( gpgolf ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "sndv1.u27", 0x08000, 0x8000, CRC(55734876) SHA1(eb5ef816acbc6e35642749e38a2908b7ba359b9d) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom00.bin", 0x00000, 0x40000, CRC(c3a7b54b) SHA1(414d693bc5337d578d2630817dd647cf7e5cbcf7) ) ROM_LOAD( "grom01.bin", 0x40000, 0x40000, BAD_DUMP CRC(2c834cf9) SHA1(49eb070ca4439d4fcd2d8a2db62d3c99b824bf99) ) /* Self test checksum reports BAD */ ROM_LOAD( "grom02.bin", 0x80000, 0x40000, CRC(aebe6c45) SHA1(15e64fcb36cb1064988ee5cd45699d501a6e7f01) ) @@ -2481,7 +2651,7 @@ ROM_START( gtg2 ) ROM_REGION( 0x10000, "sound", 0 ) ROM_LOAD( "sndv1.u27", 0x08000, 0x8000, CRC(55734876) SHA1(eb5ef816acbc6e35642749e38a2908b7ba359b9d) ) - ROM_REGION( 0xc0000, "gfx1", 0 ) + ROM_REGION( 0xc0000, "grom", 0 ) ROM_LOAD( "grom0.bin", 0x00000, 0x20000, CRC(a29c688a) SHA1(32dbb996a5e4c23cfd44b79312ac4a767658f20a) ) ROM_LOAD( "grom1.bin", 0x20000, 0x20000, CRC(a4182776) SHA1(9f4704d1a61a4fffce454c82cb3eb4629d9a2006) ) ROM_LOAD( "grom2.bin", 0x40000, 0x20000, CRC(0580bb99) SHA1(012d473bc63632a5ed1a250daa54a00a4e30e8b2) ) @@ -2504,6 +2674,14 @@ ROM_END * *************************************/ +static DRIVER_INIT( grmatch ) +{ + memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x0160, 0x0160, 0, 0, grmatch_palette_w); + memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x0180, 0x0180, 0, 0, grmatch_xscroll_w); + memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x01e0, 0x01ff, 0, 0, SMH_UNMAP); +} + + static DRIVER_INIT( slikshot ) { memory_install_read8_handler (machine, 0, ADDRESS_SPACE_PROGRAM, 0x0180, 0x0180, 0, 0, slikshot_z80_r); @@ -2574,6 +2752,9 @@ static DRIVER_INIT( rimrockn ) GAME( 1989, wfortune, 0, wfortune, wfortune, 0, ROT0, "GameTek", "Wheel Of Fortune", 0 ) GAME( 1989, wfortuna, wfortune, wfortune, wfortune, 0, ROT0, "GameTek", "Wheel Of Fortune (alternate)", 0 ) +/* Grudge Match-style PCB */ +GAME( 1989, grmatch, 0, grmatch, grmatch, grmatch, ROT0, "Yankee Game Technology", "Grudge Match (Yankee Game Technology)", 0 ) + /* Strata Bowling-style PCB */ GAME( 1990, stratab, 0, stratab_hi, stratab, 0, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V3)", 0 ) GAME( 1990, stratab1, stratab, stratab_hi, stratab, 0, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V1)", 0 ) diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h index 8e093b53e41..6ce2a95f49b 100644 --- a/src/mame/includes/itech8.h +++ b/src/mame/includes/itech8.h @@ -38,6 +38,11 @@ WRITE8_HANDLER( itech8_blitter_w ); WRITE8_HANDLER( itech8_tms34061_w ); READ8_HANDLER( itech8_tms34061_r ); +WRITE8_HANDLER( grmatch_palette_w ); +WRITE8_HANDLER( grmatch_xscroll_w ); +TIMER_DEVICE_CALLBACK( grmatch_palette_update ); + VIDEO_UPDATE( itech8_2layer ); +VIDEO_UPDATE( itech8_grmatch ); VIDEO_UPDATE( itech8_2page ); VIDEO_UPDATE( itech8_2page_large ); diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 8b5aa364ae7..996bc0567cc 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -3095,6 +3095,7 @@ V-V TP-027 DRIVER( bowlrama ) /* (c) 1991 P & P Marketing */ DRIVER( wfortune ) /* (c) 1989 GameTek */ DRIVER( wfortuna ) /* (c) 1989 GameTek */ + DRIVER( grmatch ) /* (c) 1989 GameTek */ DRIVER( stratab ) /* (c) 1990 Strata/Incredible Technologies */ DRIVER( stratab1 ) /* (c) 1990 Strata/Incredible Technologies */ DRIVER( sstrike ) /* (c) 1990 Strata/Incredible Technologies */ diff --git a/src/mame/video/itech8.c b/src/mame/video/itech8.c index 5099a44e336..b99d47d8629 100644 --- a/src/mame/video/itech8.c +++ b/src/mame/video/itech8.c @@ -154,6 +154,10 @@ static struct tms34061_display tms_state; static UINT8 *grom_base; static UINT32 grom_size; +static UINT8 grmatch_palcontrol; +static UINT8 grmatch_xscroll; +static rgb_t grmatch_palette[2][16]; + /************************************* @@ -198,8 +202,8 @@ VIDEO_START( itech8 ) page_select = 0xc0; /* fetch the GROM base */ - grom_base = memory_region(machine, "gfx1"); - grom_size = memory_region_length(machine, "gfx1"); + grom_base = memory_region(machine, "grom"); + grom_size = memory_region_length(machine, "grom"); } @@ -396,11 +400,12 @@ static void perform_blit(running_machine *machine) /* swap pixels for X flip in 4bpp mode */ if (xflip && transmaskhi != 0xff) pix = (pix >> 4) | (pix << 4); + pix &= mask; /* draw upper pixel */ if (!transparent || (pix & transmaskhi)) { - tms_state.vram[addr] = (tms_state.vram[addr] & (0x0f << shift)) | ((pix & mask & 0xf0) >> shift); + tms_state.vram[addr] = (tms_state.vram[addr] & (0x0f << shift)) | ((pix & 0xf0) >> shift); tms_state.latchram[addr] = (tms_state.latchram[addr] & (0x0f << shift)) | ((color & 0xf0) >> shift); } @@ -408,7 +413,7 @@ static void perform_blit(running_machine *machine) if (!transparent || (pix & transmasklo)) { offs_t addr1 = addr + shift/4; - tms_state.vram[addr1] = (tms_state.vram[addr1] & (0xf0 >> shift)) | ((pix & mask & 0x0f) << shift); + tms_state.vram[addr1] = (tms_state.vram[addr1] & (0xf0 >> shift)) | ((pix & 0x0f) << shift); tms_state.latchram[addr1] = (tms_state.latchram[addr1] & (0xf0 >> shift)) | ((color & 0x0f) << shift); } @@ -566,6 +571,52 @@ READ8_HANDLER( itech8_tms34061_r ) /************************************* * + * Special Grudge Match handlers + * + *************************************/ + +WRITE8_HANDLER( grmatch_palette_w ) +{ + /* set the palette control; examined in the scanline callback */ + grmatch_palcontrol = data; +} + + +WRITE8_HANDLER( grmatch_xscroll_w ) +{ + /* update the X scroll value */ + video_screen_update_now(machine->primary_screen); + grmatch_xscroll = data; +} + + +TIMER_DEVICE_CALLBACK( grmatch_palette_update ) +{ + /* if the high bit is set, we are supposed to latch the palette values */ + if (grmatch_palcontrol & 0x80) + { + /* the TMS34070s latch at the start of the frame, based on the first few bytes */ + UINT32 page_offset = (tms_state.dispstart & 0x0ffff) | grmatch_xscroll; + int page, x; + + /* iterate over both pages */ + for (page = 0; page < 2; page++) + { + const UINT8 *base = &tms_state.vram[(page * 0x20000 + page_offset) & 0x3ffff]; + for (x = 0; x < 16; x++) + { + UINT8 data0 = base[x * 2 + 0]; + UINT8 data1 = base[x * 2 + 1]; + grmatch_palette[page][x] = MAKE_RGB(pal4bit(data0 >> 0), pal4bit(data1 >> 4), pal4bit(data1 >> 0)); + } + } + } +} + + + +/************************************* + * * Main refresh * *************************************/ @@ -606,6 +657,53 @@ VIDEO_UPDATE( itech8_2layer ) } +VIDEO_UPDATE( itech8_grmatch ) +{ + UINT32 page_offset; + int x, y; + + /* first get the current display state */ + tms34061_get_display_state(&tms_state); + + /* if we're blanked, just fill with black */ + if (tms_state.blanked) + { + fillbitmap(bitmap, get_black_pen(screen->machine), cliprect); + return 0; + } + + /* there are two layers: */ + /* top layer @ 0x00000 is 4bpp, colors come from TMS34070, enabled via palette control */ + /* bottom layer @ 0x20000 is 4bpp, colors come from TMS34070, enabled via palette control */ + /* 4bpp pixels are packed 2 to a byte */ + /* xscroll is set via a separate register */ + page_offset = (tms_state.dispstart & 0x0ffff) | grmatch_xscroll; + for (y = cliprect->min_y; y <= cliprect->max_y; y++) + { + UINT8 *base0 = &tms_state.vram[0x00000 + ((page_offset + y * 256) & 0xffff)]; + UINT8 *base2 = &tms_state.vram[0x20000 + ((page_offset + y * 256) & 0xffff)]; + UINT32 *dest = BITMAP_ADDR32(bitmap, y, 0); + + for (x = cliprect->min_x & ~1; x <= cliprect->max_x; x += 2) + { + UINT8 pix0 = base0[x / 2]; + UINT8 pix2 = base2[x / 2]; + + if ((pix0 & 0xf0) != 0) + dest[x] = grmatch_palette[0][pix0 >> 4]; + else + dest[x] = grmatch_palette[1][pix2 >> 4]; + + if ((pix0 & 0x0f) != 0) + dest[x + 1] = grmatch_palette[0][pix0 & 0x0f]; + else + dest[x + 1] = grmatch_palette[1][pix2 & 0x0f]; + } + } + return 0; +} + + VIDEO_UPDATE( itech8_2page ) { UINT32 page_offset; |