charset=UTF-8 Content-Disposition: inline; filename="aeb29c33a2dec9d7de69b2d7549488a613eeb61e..81d3e50238dc12e6be1acf9d1f164b954b382db8.patch" Last-Modified: Sat, 03 May 2025 11:46:01 GMT Expires: Tue, 01 May 2035 11:46:01 GMT From 81d3e50238dc12e6be1acf9d1f164b954b382db8 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Tue, 17 Jan 2012 06:16:20 +0000 Subject: Remove support for 4bpp packed graphics. These only manifested for drivers that used GFX_RAW support for 4bpp systems, and yet we had a bunch of extra code to support it. Updated these drivers to do without it and removed all the extra code for supporting it. --- src/emu/drawgfx.c | 73 +++------ src/emu/drawgfx.h | 10 +- src/emu/drawgfxm.h | 348 ++++++++++++++----------------------------- src/emu/tilemap.c | 51 +------ src/emu/tilemap.h | 6 - src/emu/uigfx.c | 7 +- src/mame/drivers/bnstars.c | 20 +-- src/mame/drivers/cps1.c | 24 ++- src/mame/drivers/cps2.c | 24 ++- src/mame/drivers/cybertnk.c | 14 +- src/mame/drivers/hyprduel.c | 13 +- src/mame/drivers/metro.c | 26 +++- src/mame/drivers/ms32.c | 142 +++++++++--------- src/mame/drivers/stepstag.c | 2 +- src/mame/drivers/tetrisp2.c | 2 +- src/mame/includes/hyprduel.h | 1 + src/mame/includes/metro.h | 2 + src/mame/video/hyprduel.c | 30 +++- src/mame/video/metro.c | 51 ++++--- src/mame/video/stvvdp2.c | 120 ++++----------- 20 files changed, 398 insertions(+), 568 deletions(-) (limited to 'src') diff --git a/src/emu/drawgfx.c b/src/emu/drawgfx.c index 12c297beb2d..d06d1d69c7a 100644 --- a/src/emu/drawgfx.c +++ b/src/emu/drawgfx.c @@ -295,8 +295,6 @@ gfx_element *gfx_element_alloc(running_machine &machine, const gfx_layout *gl, c // don't free the data because we will get a pointer at decode time gfx->flags |= GFX_ELEMENT_DONT_FREE; - if (planes <= 4) - gfx->flags |= GFX_ELEMENT_PACKED; // RAW graphics must have a pointer up front gfx->gfxdata = (UINT8 *)gfx->srcdata; @@ -398,25 +396,13 @@ static void calc_penusage(const gfx_element *gfx, UINT32 code) if (gfx->pen_usage == NULL) return; - // packed case - if (gfx->flags & GFX_ELEMENT_PACKED) - for (y = 0; y < gfx->origheight; y++) - { - for (x = 0; x < gfx->origwidth/2; x++) - usage |= (1 << (dp[x] & 0x0f)) | (1 << (dp[x] >> 4)); - - dp += gfx->line_modulo; - } - - // unpacked case - else - for (y = 0; y < gfx->origheight; y++) - { - for (x = 0; x < gfx->origwidth; x++) - usage |= 1 << dp[x]; + for (y = 0; y < gfx->origheight; y++) + { + for (x = 0; x < gfx->origwidth; x++) + usage |= 1 << dp[x]; - dp += gfx->line_modulo; - } + dp += gfx->line_modulo; + } // store the final result gfx->pen_usage[code] = usage; @@ -444,46 +430,21 @@ static void decodechar(const gfx_element *gfx, UINT32 code, const UINT8 *src) { // zap the data to 0 memset(dp, 0, gfx->char_modulo); + for (plane = 0; plane < planes; plane++) + { + int planebit = 1 << (planes - 1 - plane); + int planeoffs = code * charincrement + poffset[plane]; - // packed case - if (gfx->flags & GFX_ELEMENT_PACKED) - for (plane = 0; plane < planes; plane++) - { - int planebit = 1 << (planes - 1 - plane); - int planeoffs = code * charincrement + poffset[plane]; - - for (y = 0; y < gfx->origheight; y++) - { - int yoffs = planeoffs + yoffset[y]; - - dp = gfx->gfxdata + code * gfx->char_modulo + y * gfx->line_modulo; - for (x = 0; x < gfx->origwidth; x += 2) - { - if (readbit(src, yoffs + xoffset[x+0])) - dp[x+0] |= planebit; - if (readbit(src, yoffs + xoffset[x+1])) - dp[x+1] |= planebit; - } - } - } - - // unpacked case - else - for (plane = 0; plane < planes; plane++) + for (y = 0; y < gfx->origheight; y++) { - int planebit = 1 << (planes - 1 - plane); - int planeoffs = code * charincrement + poffset[plane]; - - for (y = 0; y < gfx->origheight; y++) - { - int yoffs = planeoffs + yoffset[y]; + int yoffs = planeoffs + yoffset[y]; - dp = gfx->gfxdata + code * gfx->char_modulo + y * gfx->line_modulo; - for (x = 0; x < gfx->origwidth; x++) - if (readbit(src, yoffs + xoffset[x])) - dp[x] |= planebit; - } + dp = gfx->gfxdata + code * gfx->char_modulo + y * gfx->line_modulo; + for (x = 0; x < gfx->origwidth; x++) + if (readbit(src, yoffs + xoffset[x])) + dp[x] |= planebit; } + } } // compute pen usage diff --git a/src/emu/drawgfx.h b/src/emu/drawgfx.h index 5138390907d..44d9b89030b 100644 --- a/src/emu/drawgfx.h +++ b/src/emu/drawgfx.h @@ -31,8 +31,7 @@ #define EXTENDED_XOFFS { 0 } #define EXTENDED_YOFFS { 0 } -#define GFX_ELEMENT_PACKED 1 /* two 4bpp pixels are packed in one byte of gfxdata */ -#define GFX_ELEMENT_DONT_FREE 2 /* gfxdata was not malloc()ed, so don't free it on exit */ +#define GFX_ELEMENT_DONT_FREE 1 /* gfxdata was not malloc()ed, so don't free it on exit */ #define GFX_RAW 0x12345678 /* When planeoffset[0] is set to GFX_RAW, the gfx data is left as-is, with no conversion. @@ -41,7 +40,6 @@ xoffset[0] is an optional displacement (*8) from the beginning of the source data, while yoffset[0] is the line modulo (*8) and charincrement the char modulo (*8). They are *8 for consistency with the usual behaviour, but the bottom 3 bits are not used. - GFX_ELEMENT_PACKED is automatically set if planes is <= 4. This special mode can be used to save memory in games that require several different handlings of the same ROM data (e.g. metro.c can use both 4bpp and 8bpp tiles, and both @@ -92,8 +90,8 @@ enum #define GFXDECODE_END { 0 } }; /* these macros are used for declaring gfx_layout structures. */ -#define GFXLAYOUT_RAW( name, planes, width, height, linemod, charmod ) \ -const gfx_layout name = { width, height, RGN_FRAC(1,1), planes, { GFX_RAW }, { 0 }, { linemod }, charmod }; +#define GFXLAYOUT_RAW( name, width, height, linemod, charmod ) \ +const gfx_layout name = { width, height, RGN_FRAC(1,1), 8, { GFX_RAW }, { 0 }, { linemod }, charmod }; @@ -142,7 +140,7 @@ public: UINT32 * pen_usage; /* bitmask of pens that are used (pens 0-31 only) */ - UINT8 * gfxdata; /* pixel data, 8bpp or 4bpp (if GFX_ELEMENT_PACKED) */ + UINT8 * gfxdata; /* pixel data, 8bpp */ UINT32 line_modulo; /* bytes between each row of data */ UINT32 char_modulo; /* bytes between each element */ const UINT8 * srcdata; /* pointer to the source data for decoding */ diff --git a/src/emu/drawgfxm.h b/src/emu/drawgfxm.h index 74b96e7bc03..a6e68c6b133 100644 --- a/src/emu/drawgfxm.h +++ b/src/emu/drawgfxm.h @@ -418,175 +418,82 @@ do { \ /* fetch the source data */ \ srcdata = gfx_element_get_data(gfx, code); \ \ - /* draw normal 8bpp source data */ \ - if (!(gfx->flags & GFX_ELEMENT_PACKED)) \ - { \ - /* compute how many blocks of 4 pixels we have */ \ - UINT32 numblocks = (destendx + 1 - destx) / 4; \ - UINT32 leftovers = (destendx + 1 - destx) - 4 * numblocks; \ - \ - /* adjust srcdata to point to the first source pixel of the row */ \ - srcdata += srcy * gfx->line_modulo + srcx; \ - \ - /* non-flipped 8bpp case */ \ - if (!flipx) \ - { \ - /* iterate over pixels in Y */ \ - for (cury = desty; cury <= destendy; cury++) \ - { \ - PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ - PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ - const UINT8 *srcptr = srcdata; \ - srcdata += dy; \ - \ - /* iterate over unrolled blocks of 4 */ \ - for (curx = 0; curx < numblocks; curx++) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[0]); \ - PIXEL_OP(destptr[1], priptr[1], srcptr[1]); \ - PIXEL_OP(destptr[2], priptr[2], srcptr[2]); \ - PIXEL_OP(destptr[3], priptr[3], srcptr[3]); \ - \ - srcptr += 4; \ - destptr += 4; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 4); \ - } \ - \ - /* iterate over leftover pixels */ \ - for (curx = 0; curx < leftovers; curx++) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[0]); \ - srcptr++; \ - destptr++; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ - } \ - } \ - } \ - \ - /* flipped 8bpp case */ \ - else \ - { \ - /* iterate over pixels in Y */ \ - for (cury = desty; cury <= destendy; cury++) \ - { \ - PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ - PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ - const UINT8 *srcptr = srcdata; \ - srcdata += dy; \ - \ - /* iterate over unrolled blocks of 4 */ \ - for (curx = 0; curx < numblocks; curx++) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[ 0]); \ - PIXEL_OP(destptr[1], priptr[1], srcptr[-1]); \ - PIXEL_OP(destptr[2], priptr[2], srcptr[-2]); \ - PIXEL_OP(destptr[3], priptr[3], srcptr[-3]); \ - \ - srcptr -= 4; \ - destptr += 4; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 4); \ - } \ - \ - /* iterate over leftover pixels */ \ - for (curx = 0; curx < leftovers; curx++) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[0]); \ - srcptr--; \ - destptr++; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ - } \ - } \ - } \ - } \ - \ - /* draw packed 4bpp source data */ \ - else \ - { \ - /* adjust srcdata to point to the first source pixel of the row */ \ - srcdata += srcy * gfx->line_modulo + srcx / 2; \ - \ - /* non-flipped 4bpp case */ \ - if (!flipx) \ - { \ - /* compute how many blocks of 2 pixels we have */ \ - UINT32 oddstart = srcx & 1; \ - UINT32 numblocks = (destendx + 1 - destx - oddstart) / 2; \ - UINT32 leftovers = (destendx + 1 - destx - oddstart) - 2 * numblocks; \ - \ - /* iterate over pixels in Y */ \ - for (cury = desty; cury <= destendy; cury++) \ - { \ - PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ - PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ - const UINT8 *srcptr = srcdata; \ - srcdata += dy; \ - \ - /* odd starting pixel */ \ - if (oddstart) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[0] >> 4); \ - srcptr++; \ - destptr++; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ - } \ - \ - /* iterate over unrolled blocks of 2 */ \ - for (curx = 0; curx < numblocks; curx++) \ - { \ - UINT8 srcbyte = *srcptr++; \ - PIXEL_OP(destptr[0], priptr[0], srcbyte & 15); \ - PIXEL_OP(destptr[1], priptr[1], srcbyte >> 4); \ - destptr += 2; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 2); \ - } \ - \ - /* iterate over leftover pixels */ \ - if (leftovers > 0) \ - PIXEL_OP(destptr[0], priptr[0], srcptr[0] & 15); \ - } \ - } \ - \ - /* flipped 4bpp case */ \ - else \ - { \ - /* compute how many blocks of 2 pixels we have */ \ - UINT32 oddstart = ~srcx & 1; \ - UINT32 numblocks = (destendx + 1 - destx - oddstart) / 2; \ - UINT32 leftovers = (destendx + 1 - destx - oddstart) - 2 * numblocks; \ - \ - /* iterate over pixels in Y */ \ - for (cury = desty; cury <= destendy; cury++) \ - { \ - PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ - PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ - const UINT8 *srcptr = srcdata; \ - srcdata += dy; \ - \ - /* odd right pixel */ \ - if (oddstart) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[0] & 15); \ - srcptr--; \ - destptr++; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ - } \ - \ - /* middle pixels */ \ - for (curx = 0; curx < numblocks; curx++) \ - { \ - UINT8 srcbyte = *srcptr--; \ - PIXEL_OP(destptr[0], priptr[0], srcbyte >> 4); \ - PIXEL_OP(destptr[1], priptr[1], srcbyte & 15); \ - destptr += 2; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 2); \ - } \ - \ - /* odd left pixel */ \ - if (leftovers > 0) \ - PIXEL_OP(destptr[0], priptr[0], srcptr[0] >> 4); \ - } \ - } \ - } \ + /* compute how many blocks of 4 pixels we have */ \ + UINT32 numblocks = (destendx + 1 - destx) / 4; \ + UINT32 leftovers = (destendx + 1 - destx) - 4 * numblocks; \ + \ + /* adjust srcdata to point to the first source pixel of the row */ \ + srcdata += srcy * gfx->line_modulo + srcx; \ + \ + /* non-flipped 8bpp case */ \ + if (!flipx) \ + { \ + /* iterate over pixels in Y */ \ + for (cury = desty; cury <= destendy; cury++) \ + { \ + PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ + PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ + const UINT8 *srcptr = srcdata; \ + srcdata += dy; \ + \ + /* iterate over unrolled blocks of 4 */ \ + for (curx = 0; curx < numblocks; curx++) \ + { \ + PIXEL_OP(destptr[0], priptr[0], srcptr[0]); \ + PIXEL_OP(destptr[1], priptr[1], srcptr[1]); \ + PIXEL_OP(destptr[2], priptr[2], srcptr[2]); \ + PIXEL_OP(destptr[3], priptr[3], srcptr[3]); \ + \ + srcptr += 4; \ + destptr += 4; \ + PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 4); \ + } \ + \ + /* iterate over leftover pixels */ \ + for (curx = 0; curx < leftovers; curx++) \ + { \ + PIXEL_OP(destptr[0], priptr[0], srcptr[0]); \ + srcptr++; \ + destptr++; \ + PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ + } \ + } \ + } \ + \ + /* flipped 8bpp case */ \ + else \ + { \ + /* iterate over pixels in Y */ \ + for (cury = desty; cury <= destendy; cury++) \ + { \ + PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ + PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ + const UINT8 *srcptr = srcdata; \ + srcdata += dy; \ + \ + /* iterate over unrolled blocks of 4 */ \ + for (curx = 0; curx < numblocks; curx++) \ + { \ + PIXEL_OP(destptr[0], priptr[0], srcptr[ 0]); \ + PIXEL_OP(destptr[1], priptr[1], srcptr[-1]); \ + PIXEL_OP(destptr[2], priptr[2], srcptr[-2]); \ + PIXEL_OP(destptr[3], priptr[3], srcptr[-3]); \ + \ + srcptr -= 4; \ + destptr += 4; \ + PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 4); \ + } \ + \ + /* iterate over leftover pixels */ \ + for (curx = 0; curx < leftovers; curx++) \ + { \ + PIXEL_OP(destptr[0], priptr[0], srcptr[0]); \ + srcptr--; \ + destptr++; \ + PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ + } \ + } \ + } \ } while (0); \ g_profiler.stop(); \ } while (0) @@ -699,71 +606,44 @@ do { \ /* fetch the source data */ \ srcdata = gfx_element_get_data(gfx, code); \ \ - /* draw normal */ \ - if (!(gfx->flags & GFX_ELEMENT_PACKED)) \ - { \ - /* compute how many blocks of 4 pixels we have */ \ - UINT32 numblocks = (destendx + 1 - destx) / 4; \ - UINT32 leftovers = (destendx + 1 - destx) - 4 * numblocks; \ - \ - /* iterate over pixels in Y */ \ - for (cury = desty; cury <= destendy; cury++) \ - { \ - PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ - PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ - const UINT8 *srcptr = srcdata + (srcy >> 16) * gfx->line_modulo; \ - INT32 cursrcx = srcx; \ - srcy += dy; \ - \ - /* iterate over unrolled blocks of 4 */ \ - for (curx = 0; curx < numblocks; curx++) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[cursrcx >> 16]); \ - cursrcx += dx; \ - PIXEL_OP(destptr[1], priptr[1], srcptr[cursrcx >> 16]); \ - cursrcx += dx; \ - PIXEL_OP(destptr[2], priptr[2], srcptr[cursrcx >> 16]); \ - cursrcx += dx; \ - PIXEL_OP(destptr[3], priptr[3], srcptr[cursrcx >> 16]); \ - cursrcx += dx; \ - \ - destptr += 4; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 4); \ - } \ - \ - /* iterate over leftover pixels */ \ - for (curx = 0; curx < leftovers; curx++) \ - { \ - PIXEL_OP(destptr[0], priptr[0], srcptr[cursrcx >> 16]); \ - cursrcx += dx; \ - destptr++; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ - } \ - } \ - } \ - \ - /* draw packed */ \ - else \ - { \ - /* iterate over pixels in Y */ \ - for (cury = desty; cury <= destendy; cury++) \ - { \ - PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ - PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ - const UINT8 *srcptr = srcdata + (srcy >> 16) * gfx->line_modulo; \ - INT32 cursrcx = srcx; \ - srcy += dy; \ - \ - /* iterate over pixels in X */ \ - for (curx = destx; curx <= destendx; curx++) \ - { \ - PIXEL_OP(destptr[0], priptr[0], (srcptr[cursrcx >> 17] >> ((cursrcx >> 14) & 4)) & 15); \ - cursrcx += dx; \ - destptr++; \ - PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ - } \ - } \ - } \ + /* compute how many blocks of 4 pixels we have */ \ + UINT32 numblocks = (destendx + 1 - destx) / 4; \ + UINT32 leftovers = (destendx + 1 - destx) - 4 * numblocks; \ + \ + /* iterate over pixels in Y */ \ + for (cury = desty; cury <= destendy; cury++) \ + { \ + PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, destx); \ + PIXEL_TYPE *destptr = &dest.pixt(cury, destx); \ + const UINT8 *srcptr = srcdata + (srcy >> 16) * gfx->line_modulo; \ + INT32 cursrcx = srcx; \ + srcy += dy; \ + \ + /* iterate over unrolled blocks of 4 */ \ + for (curx = 0; curx < numblocks; curx++) \ + { \ + PIXEL_OP(destptr[0], priptr[0], srcptr[cursrcx >> 16]); \ + cursrcx += dx; \ + PIXEL_OP(destptr[1], priptr[1], srcptr[cursrcx >> 16]); \ + cursrcx += dx; \ + PIXEL_OP(destptr[2], priptr[2], srcptr[cursrcx >> 16]); \ + cursrcx += dx; \ + PIXEL_OP(destptr[3], priptr[3], srcptr[cursrcx >> 16]); \ + cursrcx += dx; \ + \ + destptr += 4; \ + PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 4); \ + } \ + \ + /* iterate over leftover pixels */ \ + for (curx = 0; curx < leftovers; curx++) \ + { \ + PIXEL_OP(destptr[0], priptr[0], srcptr[cursrcx >> 16]); \ + cursrcx += dx; \ + destptr++; \ + PRIORITY_ADVANCE(PRIORITY_TYPE, priptr, 1); \ + } \ + } \ } while (0); \ g_profiler.stop(); \ } while (0) diff --git a/src/emu/tilemap.c b/src/emu/tilemap.c index badcf5993a6..31e12cc6b48 100644 --- a/src/emu/tilemap.c +++ b/src/emu/tilemap.c @@ -793,14 +793,6 @@ UINT8 tilemap_t::tile_draw(const UINT8 *pendata, UINT32 x0, UINT32 y0, UINT32 pa dx0 = -1; } - // in 4bpp mode, we draw in groups of 2 pixels, so halve the width now - int width = m_tilewidth; - if (flags & TILE_4BPP) - { - assert(width % 2 == 0); - width /= 2; - } - // iterate over rows const UINT8 *penmap = m_pen_to_flags + group * MAX_PEN_TO_FLAGS; UINT8 andmask = ~0, ormask = 0; @@ -813,43 +805,14 @@ UINT8 tilemap_t::tile_draw(const UINT8 *pendata, UINT32 x0, UINT32 y0, UINT32 pa y0 += dy0; // 8bpp data - if (!(flags & TILE_4BPP)) - { - for (int tx = 0, xoffs = 0; tx < width; tx++, xoffs += dx0) - { - UINT8 pen = (*pendata++) & pen_mask; - UINT8 map = penmap[pen]; - pixptr[xoffs] = palette_base + pen; - flagsptr[xoffs] = map | category; - andmask &= map; - ormask |= map; - } - } - - // 4bpp data - else + for (int tx = 0, xoffs = 0; tx < m_tilewidth; tx++, xoffs += dx0) { - for (int tx = 0, xoffs = 0; tx < width; tx++) - { - UINT8 data = *pendata++; - UINT8 pen, map; - - pen = (data & 0x0f) & pen_mask; - map = penmap[pen]; - pixptr[xoffs] = palette_base + pen; - flagsptr[xoffs] = map | category; - andmask &= map; - ormask |= map; - xoffs += dx0; - - pen = (data >> 4) & pen_mask; - map = penmap[pen]; - pixptr[xoffs] = palette_base + pen; - flagsptr[xoffs] = map | category; - andmask &= map; - ormask |= map; - xoffs += dx0; - } + UINT8 pen = (*pendata++) & pen_mask; + UINT8 map = penmap[pen]; + pixptr[xoffs] = palette_base + pen; + flagsptr[xoffs] = map | category; + andmask &= map; + ormask |= map; } } return andmask ^ ormask; diff --git a/src/emu/tilemap.h b/src/emu/tilemap.h index 54ea5795f56..956a3fc95f5 100644 --- a/src/emu/tilemap.h +++ b/src/emu/tilemap.h @@ -78,9 +78,6 @@ TILE_FLIPY means render the tile flipped vertically - TILE_4BPP means pen_data is actually packed 4bpp pixels - (low 4 bits first, then upper 4 bits) - TILE_FORCE_LAYERn means all pixels are forced to be in layer n, where n = 0,1,2 @@ -357,7 +354,6 @@ const UINT8 TILEMAP_PIXEL_LAYER2 = 0x40; // pixel is opaque in layer 2 // per-tile flags, set by get_tile_info callback const UINT8 TILE_FLIPX = 0x01; // draw this tile horizontally flipped const UINT8 TILE_FLIPY = 0x02; // draw this tile vertically flipped -const UINT8 TILE_4BPP = 0x04; // tile data is packed 4bpp const UINT8 TILE_FORCE_LAYER0 = TILEMAP_PIXEL_LAYER0; // force all pixels to be layer 0 (no transparency) const UINT8 TILE_FORCE_LAYER1 = TILEMAP_PIXEL_LAYER1; // force all pixels to be layer 1 (no transparency) const UINT8 TILE_FORCE_LAYER2 = TILEMAP_PIXEL_LAYER2; // force all pixels to be layer 2 (no transparency) @@ -403,8 +399,6 @@ struct tile_data pen_data = gfx_element_get_data(gfx, code); palette_base = gfx->color_base + gfx->color_granularity * rawcolor; flags = _flags; - if (gfx->flags & GFX_ELEMENT_PACKED) - flags |= TILE_4BPP; gfxnum = _gfxnum; } }; diff --git a/src/emu/uigfx.c b/src/emu/uigfx.c index e3d5abe52fb..f5580a30ff1 100644 --- a/src/emu/uigfx.c +++ b/src/emu/uigfx.c @@ -789,7 +789,6 @@ static void gfxset_draw_item(running_machine &machine, const gfx_element *gfx, i for (x = 0; x < width; x++) { int effx = x, effy = y; - rgb_t pixel; const UINT8 *s; /* compute effective x,y values after rotation */ @@ -814,11 +813,7 @@ static void gfxset_draw_item(running_machine &machine, const gfx_element *gfx, i s = src + effy * gfx->line_modulo; /* extract the pixel */ - if (gfx->flags & GFX_ELEMENT_PACKED) - pixel = (s[effx/2] >> ((effx & 1) * 4)) & 0xf; - else - pixel = s[effx]; - *dest++ = 0xff000000 | palette[pixel & palette_mask]; + *dest++ = 0xff000000 | palette[s[effx] & palette_mask]; } } } diff --git a/src/mame/drivers/bnstars.c b/src/mame/drivers/bnstars.c index 7fe58777242..b02245f7f72 100644 --- a/src/mame/drivers/bnstars.c +++ b/src/mame/drivers/bnstars.c @@ -1203,9 +1203,9 @@ INPUT_PORTS_END /* sprites are contained in 256x256 "tiles" */ -static GFXLAYOUT_RAW( spritelayout, 8, 256, 256, 256*8, 256*256*8 ) -static GFXLAYOUT_RAW( bglayout, 8, 16, 16, 16*8, 16*16*8 ) -static GFXLAYOUT_RAW( txlayout, 8, 8, 8, 8*8, 8*8*8 ) +static GFXLAYOUT_RAW( spritelayout, 256, 256, 256*8, 256*256*8 ) +static GFXLAYOUT_RAW( bglayout, 16, 16, 16*8, 16*16*8 ) +static GFXLAYOUT_RAW( txlayout, 8, 8, 8*8, 8*8*8 ) static GFXDECODE_START( bnstars ) GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0x0000, 0x10 ) @@ -1413,7 +1413,7 @@ ROM_START( bnstars1 ) ROM_LOAD32_BYTE( "mb-93142.39", 0x000000, 0x80000, CRC(56b98539) SHA1(5eb0e77729b31e6a100c1b43813a39fea57bedee) ) /* Sprites - shared by both screens? */ - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr96004-01.20", 0x0000000, 0x200000, CRC(3366d104) SHA1(2de0cabe2ead777b5b02cade7f2003ef7f90b75b) ) ROM_LOAD32_WORD( "mr96004-02.28", 0x0000002, 0x200000, CRC(ad556664) SHA1(4b36f8d8d9efa37cf515af41d14433e7eafa27a2) ) ROM_LOAD32_WORD( "mr96004-03.21", 0x0400000, 0x200000, CRC(b399e2b1) SHA1(9b6a00a219db8d66dcf592160b7b5f7a86b8f0c9) ) @@ -1424,27 +1424,27 @@ ROM_START( bnstars1 ) ROM_LOAD32_WORD( "mr96004-08.31", 0x0c00002, 0x200000, CRC(f6df27b2) SHA1(60590976020d86bdccd4eaf57b349ea31bec6830) ) /* Roz Tiles #1 (Screen 1) */ - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr96004-09.1", 0x000000, 0x400000, CRC(7f8ea9f0) SHA1(f1fe682dcb884f1aa4a5536e17ab94157a99f519) ) /* Roz Tiles #2 (Screen 2) */ - ROM_REGION( 0x400000, "gfx3", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx3", 0 ) /* roz tiles */ ROM_LOAD( "mr96004-09.7", 0x000000, 0x400000, CRC(7f8ea9f0) SHA1(f1fe682dcb884f1aa4a5536e17ab94157a99f519) ) /* BG Tiles #1 (Screen 1?) */ - ROM_REGION( 0x200000, "gfx4", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx4", 0 ) /* bg tiles */ ROM_LOAD( "mr96004-11.11", 0x000000, 0x200000, CRC(e6da552c) SHA1(69a5af3015883793c7d1343243ccae23db9ef77c) ) /* TX Tiles #1 (Screen 1?) */ - ROM_REGION( 0x080000, "gfx5", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx5", 0 ) /* tx tiles */ ROM_LOAD( "vsjanshi6.5", 0x000000, 0x080000, CRC(fdbbac21) SHA1(c77d852e53126cc8ebfe1e79d1134e42b54d1aab) ) /* BG Tiles #2 (Screen 2?) */ - ROM_REGION( 0x200000, "gfx6", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx6", 0 ) /* bg tiles */ ROM_LOAD( "mr96004-11.13", 0x000000, 0x200000, CRC(e6da552c) SHA1(69a5af3015883793c7d1343243ccae23db9ef77c) ) /* TX Tiles #2 (Screen 2?) */ - ROM_REGION( 0x080000, "gfx7", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx7", 0 ) /* tx tiles */ ROM_LOAD( "vsjanshi5.6", 0x000000, 0x080000, CRC(fdbbac21) SHA1(c77d852e53126cc8ebfe1e79d1134e42b54d1aab) ) /* Sound Program (one, driving both screen sound) */ diff --git a/src/mame/drivers/cps1.c b/src/mame/drivers/cps1.c index 8c3f2ef92b7..680d1503389 100644 --- a/src/mame/drivers/cps1.c +++ b/src/mame/drivers/cps1.c @@ -2983,8 +2983,28 @@ static const gfx_layout cps1_layout8x8_2 = 64*8 }; -static GFXLAYOUT_RAW( cps1_layout16x16, 4, 16, 16, 8*8, 128*8 ) -static GFXLAYOUT_RAW( cps1_layout32x32, 4, 32, 32, 16*8, 512*8 ) +static const gfx_layout cps1_layout16x16 = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4, 9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4 }, + { STEP16(0,4*16) }, + 4*16*16 +}; + +static const gfx_layout cps1_layout32x32 = +{ + 32,32, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4, 9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4, + 17*4, 16*4, 19*4, 18*4, 21*4, 20*4, 23*4, 22*4, 25*4, 24*4, 27*4, 26*4, 29*4, 28*4, 31*4, 30*4 }, + { STEP32(0,4*32) }, + 4*32*32 +}; GFXDECODE_START( cps1 ) GFXDECODE_ENTRY( "gfx", 0, cps1_layout8x8, 0, 0x100 ) diff --git a/src/mame/drivers/cps2.c b/src/mame/drivers/cps2.c index fdf7ac70043..d2e84ee65c5 100644 --- a/src/mame/drivers/cps2.c +++ b/src/mame/drivers/cps2.c @@ -1177,8 +1177,28 @@ static const gfx_layout cps1_layout8x8_2 = 64*8 }; -static GFXLAYOUT_RAW( layout16x16, 4, 16, 16, 8*8, 128*8 ) -static GFXLAYOUT_RAW( layout32x32, 4, 32, 32, 16*8, 512*8 ) +static const gfx_layout layout16x16 = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4, 9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4 }, + { STEP16(0,4*16) }, + 4*16*16 +}; + +static const gfx_layout layout32x32 = +{ + 32,32, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4, 9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4, + 17*4, 16*4, 19*4, 18*4, 21*4, 20*4, 23*4, 22*4, 25*4, 24*4, 27*4, 26*4, 29*4, 28*4, 31*4, 30*4 }, + { STEP32(0,4*32) }, + 4*32*32 +}; static GFXDECODE_START( cps2 ) GFXDECODE_ENTRY( "gfx", 0, cps1_layout8x8, 0, 0x100 ) diff --git a/src/mame/drivers/cybertnk.c b/src/mame/drivers/cybertnk.c index 136127c0c83..d6ed89c3a03 100644 --- a/src/mame/drivers/cybertnk.c +++ b/src/mame/drivers/cybertnk.c @@ -839,7 +839,19 @@ static const gfx_layout tile_8x8x4 = 8*8 }; -static GFXLAYOUT_RAW( roadlayout, 4, 1024, 1, 1024*4, 1024*4 ) // could be wrong.. needs to be 512 wide, might not be 8bpp +// could be wrong.. needs to be 512 wide, might not be 8bpp +static const UINT32 xoffsets[] = { STEP1024(0,4) }; +static const gfx_layout roadlayout = +{ + 1024,1, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + EXTENDED_XOFFS, + { 0 }, + 1024*4, + xoffsets +}; static GFXDECODE_START( cybertnk ) GFXDECODE_ENTRY( "gfx1", 0, tile_8x8x4, 0x1400, 16 ) /*Pal offset???*/ diff --git a/src/mame/drivers/hyprduel.c b/src/mame/drivers/hyprduel.c index a74ad156d47..25bad50cbfc 100644 --- a/src/mame/drivers/hyprduel.c +++ b/src/mame/drivers/hyprduel.c @@ -606,10 +606,19 @@ INPUT_PORTS_END ***************************************************************************/ /* 8x8x4 tiles */ -static GFXLAYOUT_RAW( layout_8x8x4, 4, 8, 8, 4*8, 32*8 ) +static const gfx_layout layout_8x8x4 = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 4*1,4*0, 4*3,4*2, 4*5,4*4, 4*7,4*6 }, + { STEP8(0,4*8) }, + 4*8*8 +}; /* 8x8x8 tiles for later games */ -static GFXLAYOUT_RAW( layout_8x8x8h, 8, 8, 8, 8*8, 32*8 ) +static GFXLAYOUT_RAW( layout_8x8x8h, 8, 8, 8*8, 32*8 ) static GFXDECODE_START( 14220 ) GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0x0, 0x200 ) // [0] 4 Bit Tiles diff --git a/src/mame/drivers/metro.c b/src/mame/drivers/metro.c index 9027aa8116a..53857dd1efe 100644 --- a/src/mame/drivers/metro.c +++ b/src/mame/drivers/metro.c @@ -3393,16 +3393,34 @@ INPUT_PORTS_END /* 8x8x4 tiles */ -static GFXLAYOUT_RAW( layout_8x8x4, 4, 8, 8, 4*8, 32*8 ) +static const gfx_layout layout_8x8x4 = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 4*1,4*0, 4*3,4*2, 4*5,4*4, 4*7,4*6 }, + { STEP8(0,4*8) }, + 4*8*8 +}; /* 8x8x8 tiles for later games */ -static GFXLAYOUT_RAW( layout_8x8x8h, 8, 8, 8, 8*8, 32*8 ) +static GFXLAYOUT_RAW( layout_8x8x8h, 8, 8, 8*8, 32*8 ) /* 16x16x4 tiles for later games */ -static GFXLAYOUT_RAW( layout_16x16x4q, 4, 16, 16, 8*8, 32*8 ) +static const gfx_layout layout_16x16x4q = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 4*1,4*0, 4*3,4*2, 4*5,4*4, 4*7,4*6, 4*9,4*8, 4*11,4*10, 4*13,4*12, 4*15,4*14 }, + { STEP16(0,4*16) }, + 4*8*8 +}; /* 16x16x8 tiles for later games */ -static GFXLAYOUT_RAW( layout_16x16x8o, 8, 16, 16, 16*8, 32*8 ) +static GFXLAYOUT_RAW( layout_16x16x8o, 16, 16, 16*8, 32*8 ) static const gfx_layout layout_053936 = { diff --git a/src/mame/drivers/ms32.c b/src/mame/drivers/ms32.c index ad4817195e2..ea87c292d3f 100644 --- a/src/mame/drivers/ms32.c +++ b/src/mame/drivers/ms32.c @@ -1265,11 +1265,11 @@ INPUT_PORTS_END /********** GFX DECODE **********/ /* sprites are contained in 256x256 "tiles" */ -static GFXLAYOUT_RAW( spritelayout, 8, 256, 256, 256*8, 256*256*8 ) -static GFXLAYOUT_RAW( bglayout, 8, 16, 16, 16*8, 16*16*8 ) -static GFXLAYOUT_RAW( txlayout, 8, 8, 8, 8*8, 8*8*8 ) +static GFXLAYOUT_RAW( spritelayout, 256, 256, 256*8, 256*256*8 ) +static GFXLAYOUT_RAW( bglayout, 16, 16, 16*8, 16*16*8 ) +static GFXLAYOUT_RAW( txlayout, 8, 8, 8*8, 8*8*8 ) -static GFXLAYOUT_RAW( f1layout, 8, 2048, 1, 2048*8, 2048*8 ) +static GFXLAYOUT_RAW( f1layout, 2048, 1, 2048*8, 2048*8 ) static GFXDECODE_START( ms32 ) @@ -1467,7 +1467,7 @@ ROM_START( bbbxing ) ROM_LOAD32_BYTE( "bbbx29.bin", 0x000001, 0x80000, CRC(85bbbe79) SHA1(bc5ebb96491762e6a0d202ddf7faeb57c66211b4) ) ROM_LOAD32_BYTE( "bbbx31.bin", 0x000000, 0x80000, CRC(e0c865ed) SHA1(f21e8dc174c50d7afdd3f82c1c66dfcc002bdd07) ) - ROM_REGION( 0x1100000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1100000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "bbbx1.bin", 0x0000002, 0x200000, CRC(c1c10c3b) SHA1(e1f739f38e148c4d7aff6b81b3e42131c5c6c3dd) ) ROM_LOAD32_WORD( "bbbx13.bin", 0x0000000, 0x200000, CRC(4b8c1574) SHA1(c389c70b532d54528a175f460ca3f329b34cf67c) ) ROM_LOAD32_WORD( "bbbx2.bin", 0x0400002, 0x200000, CRC(03b77c1e) SHA1(f156ae6a4f2a8ae99815eb5a7b28425d273c1c3e) ) @@ -1479,13 +1479,13 @@ ROM_START( bbbxing ) ROM_LOAD32_WORD( "bbbx5.bin", 0x1000002, 0x080000, CRC(64989edf) SHA1(033eab0e8a53607b2bb420f6356804b2cfa1544c) ) ROM_LOAD32_WORD( "bbbx17.bin", 0x1000000, 0x080000, CRC(1d7ebaf0) SHA1(5aac7cb01013ce3be206318678aced5812bff9a9) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "bbbx9.bin", 0x000000, 0x200000, CRC(a41cb650) SHA1(1c55a4afe55c1250806f2d93c25842dc3fb7f987) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "bbbx11.bin", 0x000000, 0x200000, CRC(85238ca9) SHA1(1ce32d585fe66764d621c11882ef9d2abaea6256) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "bbbx32-2.bin",0x000000, 0x080000, CRC(3ffdae75) SHA1(2b837d28f7ecdd49e8525bd5c249e83021d5fe9f) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1507,7 +1507,7 @@ ROM_START( 47pie2 ) ROM_LOAD32_BYTE( "93166-28.v11", 0x000001, 0x80000, CRC(aa49eec2) SHA1(173afc596caa1c464fc3247cb64d36c1d97a1520) ) ROM_LOAD32_BYTE( "93166-29.v11", 0x000000, 0x80000, CRC(92763e41) SHA1(eb593bbb586661c4c4e8728d845b146974d0bdf8) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "94019-02.1", 0x000002, 0x200000, CRC(f9d692f2) SHA1(666df55d26e00be39073173fa3616ac9dafbe615) ) ROM_LOAD32_WORD( "94019-01.13", 0x000000, 0x200000, CRC(1ddfe825) SHA1(27fbf492fdb4f0b4b8db18330e840c130213e15e) ) ROM_LOAD32_WORD( "94019-04.2", 0x400002, 0x200000, CRC(24ca77ec) SHA1(a5c575224ab276cbed5785f40fc0d35dd2748e74) ) @@ -1517,13 +1517,13 @@ ROM_START( 47pie2 ) ROM_LOAD32_WORD( "94019-08.4", 0xc00002, 0x200000, CRC(4b07edc9) SHA1(22aaa923a94a7bec997d2adabc8ec2c7696c33a5) ) ROM_LOAD32_WORD( "94019-07.16", 0xc00000, 0x200000, CRC(34f471a8) SHA1(4c9c358a9bfdb436a211caa14d085e631609681d) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "94019-09.11", 0x000000, 0x200000, CRC(cde7bb6f) SHA1(47454dac4ce67ce8d7e0c5ef3a732477ac8170a7) ) - ROM_REGION( 0x100000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x100000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "94019-12.10", 0x000000, 0x100000, CRC(15ae05d9) SHA1(ac00d3766c42ccba4585b9acfacc81bcb940ac26) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "93166-30.bin", 0x000000, 0x080000, CRC(0c738883) SHA1(e552c1842d759e5e617eb9c6cc178620a461b4dd) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1545,7 +1545,7 @@ ROM_START( 47pie2o ) ROM_LOAD32_BYTE( "93166-28.v10", 0x000001, 0x80000, CRC(b1261d51) SHA1(3f393aeb7a076c4d2d2cc7f22ead05f405186d80) ) ROM_LOAD32_BYTE( "93166-29.v10", 0x000000, 0x80000, CRC(9211c82a) SHA1(0aa3f93293b81e0f66b985046eb5e91708693959) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "94019-02.1", 0x000002, 0x200000, CRC(f9d692f2) SHA1(666df55d26e00be39073173fa3616ac9dafbe615) ) ROM_LOAD32_WORD( "94019-01.13", 0x000000, 0x200000, CRC(1ddfe825) SHA1(27fbf492fdb4f0b4b8db18330e840c130213e15e) ) ROM_LOAD32_WORD( "94019-04.2", 0x400002, 0x200000, CRC(24ca77ec) SHA1(a5c575224ab276cbed5785f40fc0d35dd2748e74) ) @@ -1555,13 +1555,13 @@ ROM_START( 47pie2o ) ROM_LOAD32_WORD( "94019-08.4", 0xc00002, 0x200000, CRC(4b07edc9) SHA1(22aaa923a94a7bec997d2adabc8ec2c7696c33a5) ) ROM_LOAD32_WORD( "94019-07.16", 0xc00000, 0x200000, CRC(34f471a8) SHA1(4c9c358a9bfdb436a211caa14d085e631609681d) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "94019-09.11", 0x000000, 0x200000, CRC(cde7bb6f) SHA1(47454dac4ce67ce8d7e0c5ef3a732477ac8170a7) ) - ROM_REGION( 0x100000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x100000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "94019-12.10", 0x000000, 0x100000, CRC(15ae05d9) SHA1(ac00d3766c42ccba4585b9acfacc81bcb940ac26) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "93166-30.bin", 0x000000, 0x080000, CRC(0c738883) SHA1(e552c1842d759e5e617eb9c6cc178620a461b4dd) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1583,7 +1583,7 @@ ROM_START( desertwr ) ROM_LOAD32_BYTE( "93166-28.39", 0x000001, 0x80000, CRC(0de40efb) SHA1(c49c3b27939e428dec1f642b7fdb9a1ff760289a) ) ROM_LOAD32_BYTE( "93166-29.40", 0x000000, 0x80000, CRC(fc25eae2) SHA1(a4d47fcb4d4c3285cf67d77d8a21478f344b98ca) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "94038-01.20", 0x000000, 0x200000, CRC(f11f83e2) SHA1(e3c99e6583003210483163c79182cb14aa334702) ) ROM_LOAD32_WORD( "94038-02.3", 0x000002, 0x200000, CRC(3d1fa710) SHA1(5fae3e8c714cca88e22e432dd7275c6898c631a8) ) ROM_LOAD32_WORD( "94038-03.21", 0x400000, 0x200000, CRC(84fd5790) SHA1(6187ff32a63f3b4105ea875f52237f0d4314f8b6) ) @@ -1593,15 +1593,15 @@ ROM_START( desertwr ) ROM_LOAD32_WORD( "94038-07.23", 0xc00000, 0x200000, CRC(426f4193) SHA1(98a16a70c225d7cd061fcd6e88992d393e6ef9fd) ) ROM_LOAD32_WORD( "94038-08.6", 0xc00002, 0x200000, CRC(f4088399) SHA1(9d53880996f85776815840bca1f8c3958de4c275) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "94038-11.13", 0x000000, 0x200000, CRC(bf2ec3a3) SHA1(904cd5ab2e855bdb94bc70efa6db42af672337d7) ) ROM_LOAD( "94038-12.14", 0x200000, 0x200000, CRC(d0e113da) SHA1(57f27cbd58421a0afe724fec5628c4a29aad8868) ) - ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "94038-09.12", 0x000000, 0x200000, CRC(72ec1ce7) SHA1(88bd9ca3aa7a6410e8fcf6fd70304f12724653bb) ) ROM_LOAD( "94038-10.11", 0x200000, 0x200000, CRC(1e17f2a9) SHA1(19e6be1daa157593fbab84149f1f739dd39c9226) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "93166-30.41", 0x000000, 0x080000, CRC(980ab89c) SHA1(8468fc13a5988e25750e8d99ff464f46e86ab412) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1641,16 +1641,16 @@ ROM_START( f1superb ) ROM_LOAD32_WORD( "f1sb8.bin", 0x1c00002, 0x200000, CRC(ba3f1533) SHA1(3ff1c4cca8358fc8daf0d2c381672569085ac9ae) ) ROM_LOAD32_WORD( "f1sb20.bin", 0x1c00000, 0x200000, CRC(fa349897) SHA1(31e08aa2821e409057e3094333b9ecbe04a6a38a) ) - ROM_REGION( 0x800000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x800000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "f1sb9.bin", 0x000000, 0x200000, CRC(66b12e1f) SHA1(4dc3f162a5116403cc0c491af335208672c8e9af) ) ROM_LOAD( "f1sb10.bin", 0x200000, 0x200000, CRC(893d7f4b) SHA1(b2734f20f703a0dcf8b1fdaebf2b6198b2fb0f51) ) ROM_LOAD( "f1sb11.bin", 0x400000, 0x200000, CRC(0b848bb5) SHA1(e4c0e434add151112352d6068e5de1a7098e6346) ) ROM_LOAD( "f1sb12.bin", 0x600000, 0x200000, CRC(edecd5f4) SHA1(9b86802d08e5c8ec1a6dcea75dc8f050d3e96970) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "f1sb31.bin", 0x000000, 0x200000, CRC(1d0d2efd) SHA1(e6446ef9c71be9316c286157f71e0043347c6a5c) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "f1sb32.bin", 0x000000, 0x080000, CRC(1b31fcce) SHA1(354cc6f43cd3bf3ba921ac8c5631ab993bedf563) ) ROM_REGION( 0x800000, "gfx5", 0 ) /* extra data? doesn't seem to be tiles */ @@ -1678,7 +1678,7 @@ ROM_START( gratia ) ROM_LOAD32_BYTE( "94019.028", 0x000001, 0x80000, CRC(e0762e89) SHA1(a567c347e7f73f1ef1c753d14ac4f58311380fac) ) ROM_LOAD32_BYTE( "94019.029", 0x000000, 0x80000, CRC(8059800b) SHA1(7548d01b6ea15e962353b3585db6515e5819e5ce) ) - ROM_REGION( 0x0c00000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x0c00000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "94019.01", 0x000000, 0x200000, CRC(92d8ae9b) SHA1(02b36e6e14b28a9830e07fd328772dbb20b76889) ) ROM_LOAD32_WORD( "94019.02", 0x000002, 0x200000, CRC(f7bd9cc4) SHA1(5658bfb4081439ab06c6ade2531581aa60d1c6be) ) ROM_LOAD32_WORD( "94019.03", 0x400000, 0x200000, CRC(62a69590) SHA1(d95cc1e1ec85161ee6cd1ae77b405cf8ef81217a) ) @@ -1686,14 +1686,14 @@ ROM_START( gratia ) ROM_LOAD32_WORD( "94019.05", 0x800000, 0x200000, CRC(a16994df) SHA1(9170b1fd9252d7a9601c3b2e6b1ba86686730b86) ) ROM_LOAD32_WORD( "94019.06", 0x800002, 0x200000, CRC(01d52ef1) SHA1(1585c7eb3729bab78467f627b7b671d619451a74) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "94019.08", 0x000000, 0x200000, CRC(abd124e0) SHA1(2da1d818c909e4abbb79ed03f3dbf15d744439ce) ) ROM_LOAD( "94019.09", 0x200000, 0x200000, CRC(711ab08b) SHA1(185b80b965ac3aba4857b4f83637008c2c1cc6ff) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "94019_2.07", 0x000000, 0x200000, CRC(043f969b) SHA1(ad10339e561c1a65451a2e9a8e79ceda3787674a) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "94019_2.030",0x000000, 0x080000, CRC(f9543fcf) SHA1(8466c7893bc6c43e2a80b8f91a776fd0a345ea6c) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1715,7 +1715,7 @@ ROM_START( gratiaa ) ROM_LOAD32_BYTE( "94019.028", 0x000001, 0x80000, CRC(e0762e89) SHA1(a567c347e7f73f1ef1c753d14ac4f58311380fac) ) ROM_LOAD32_BYTE( "94019.029", 0x000000, 0x80000, CRC(8059800b) SHA1(7548d01b6ea15e962353b3585db6515e5819e5ce) ) - ROM_REGION( 0x0c00000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x0c00000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "94019.01", 0x000000, 0x200000, CRC(92d8ae9b) SHA1(02b36e6e14b28a9830e07fd328772dbb20b76889) ) ROM_LOAD32_WORD( "94019.02", 0x000002, 0x200000, CRC(f7bd9cc4) SHA1(5658bfb4081439ab06c6ade2531581aa60d1c6be) ) ROM_LOAD32_WORD( "94019.03", 0x400000, 0x200000, CRC(62a69590) SHA1(d95cc1e1ec85161ee6cd1ae77b405cf8ef81217a) ) @@ -1723,14 +1723,14 @@ ROM_START( gratiaa ) ROM_LOAD32_WORD( "94019.05", 0x800000, 0x200000, CRC(a16994df) SHA1(9170b1fd9252d7a9601c3b2e6b1ba86686730b86) ) ROM_LOAD32_WORD( "94019.06", 0x800002, 0x200000, CRC(01d52ef1) SHA1(1585c7eb3729bab78467f627b7b671d619451a74) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "94019.08", 0x000000, 0x200000, CRC(abd124e0) SHA1(2da1d818c909e4abbb79ed03f3dbf15d744439ce) ) ROM_LOAD( "94019.09", 0x200000, 0x200000, CRC(711ab08b) SHA1(185b80b965ac3aba4857b4f83637008c2c1cc6ff) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "94019.07", 0x000000, 0x200000, BAD_DUMP CRC(acb75824) SHA1(3b43e00a2d240761565042c8feead25a83ef0eb1) ) // FIXED BITS (xxxxxxxx11111111) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "94019.030",0x000000, 0x080000, CRC(026b5379) SHA1(b9237477f1bf8ae83174e8231492fe667e6d6a13) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1752,7 +1752,7 @@ ROM_START( gametngk ) ROM_LOAD32_BYTE( "mr94041.28", 0x000001, 0x80000, CRC(b3738934) SHA1(cd07572e55e83807e76179cfc6b97e0410067911) ) ROM_LOAD32_BYTE( "mr94041.29", 0x000000, 0x80000, CRC(45154a45) SHA1(4c7c2c6738fdfe54ebe41a0ac6222cbfce5d7757) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr94041.01", 0x0000000, 0x200000, CRC(3f99adf7) SHA1(cbb8d2fc253b0c58e7eb9286c66e6b36daf9d4af) ) ROM_LOAD32_WORD( "mr94041.02", 0x0000002, 0x200000, CRC(c3c5ae69) SHA1(5ed7f57a7139f87c680c68e44ea4022b917a9381) ) ROM_LOAD32_WORD( "mr94041.03", 0x0400000, 0x200000, CRC(d858b6de) SHA1(a06cf529c9508c8c8508894e2e004373edd9debf) ) @@ -1762,15 +1762,15 @@ ROM_START( gametngk ) ROM_LOAD32_WORD( "mr94041.07", 0x0c00000, 0x200000, CRC(a6966af5) SHA1(3a65824f3f325af39d8e9932357ce9f8878f0321) ) ROM_LOAD32_WORD( "mr94041.08", 0x0c00002, 0x200000, CRC(d7d2f73a) SHA1(0eb28f4cdea73aa8fed0b62cbac6cd7d7694c2ee) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr94041.11", 0x000000, 0x200000, CRC(00dcdbc3) SHA1(f7e34bc9f714ea81fc9855d90db792dd1e99bae8) ) ROM_LOAD( "mr94041.12", 0x200000, 0x200000, CRC(0ce48329) SHA1(9c198cef998eb3b9c33123bd8cc02210498f82d9) ) - ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "mr94041.09", 0x000000, 0x200000, CRC(a33e6051) SHA1(d6e34b022eb36dcfa8cfe6d6d1254f994b3b3dca) ) ROM_LOAD( "mr94041.10", 0x200000, 0x200000, CRC(b3497147) SHA1(df7d8ea7ec3e3df5e0c6658f14995df5479181bf) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "mr94041.30", 0x000000, 0x080000, CRC(c0f27b7f) SHA1(874fe80aa4b46520f844ef6efa61f28eabccbc4f) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1792,7 +1792,7 @@ ROM_START( hayaosi2 ) ROM_LOAD32_BYTE( "mb93138a.29", 0x000001, 0x80000, CRC(e6fe3d0d) SHA1(9a0caab82b160991b4f2ac993e7e4b4c5d3bb15e) ) ROM_LOAD32_BYTE( "mb93138a.31", 0x000000, 0x80000, CRC(d944bf8c) SHA1(ce93b5d2ebe886b38dc42b1e554b17dc951a51b4) ) - ROM_REGION( 0x900000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x900000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr93038.04", 0x000000, 0x200000, CRC(ab5edb11) SHA1(b7742aefbce9efc512c3526714b6f20a6c03af60) ) ROM_LOAD32_WORD( "mr93038.05", 0x000002, 0x200000, CRC(274522f1) SHA1(717435d6bf1b2a2220a2f0a53b070bb81cc2ed2b) ) ROM_LOAD32_WORD( "mr93038.06", 0x400000, 0x200000, CRC(f9961ebf) SHA1(e91b160cb5a76e3f6044cc71681dadf2fbff7e8b) ) @@ -1800,13 +1800,13 @@ ROM_START( hayaosi2 ) ROM_LOAD32_WORD( "mb93138a.15", 0x800000, 0x080000, CRC(a5f64d87) SHA1(11bf017f700faba57a5a2edced7a5d81a581bc50) ) ROM_LOAD32_WORD( "mb93138a.3", 0x800002, 0x080000, CRC(a2ae2b21) SHA1(65cee4e5e0a9b8dcac578e34210e1af7d7b2e6f7) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr93038.03", 0x000000, 0x200000, CRC(6999dec9) SHA1(eb4c6ba200cd08b41509314c659feb3af12117ee) ) - ROM_REGION( 0x100000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x100000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "mr93038.08", 0x000000, 0x100000, CRC(21282cb0) SHA1(52ea94a6457f7684674783c362052bcc40086dd0) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "mb93138a.32", 0x000000, 0x080000, CRC(f563a144) SHA1(14d86e4992329811857e1faf282cd9ec530a364c) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1895,7 +1895,7 @@ ROM_START( hayaosi3 ) ROM_LOAD32_BYTE( "mb93138.29", 0x000001, 0x80000, CRC(da891976) SHA1(27e8c395e92ca01b47bffdf766bc95a6c2150815) ) ROM_LOAD32_BYTE( "mb93138.31", 0x000000, 0x80000, CRC(2d17bb06) SHA1(623b603c4002734427c882424a1e0dc889cf7e02) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr94027.01", 0x000000, 0x200000, CRC(c72e5c6e) SHA1(b98cd656c48c775953d00b5d8bafd4ffde76d8df) ) ROM_LOAD32_WORD( "mr94027.02", 0x000002, 0x200000, CRC(59976568) SHA1(a280c352d612913834c76b8e23d86c937fd21281) ) ROM_LOAD32_WORD( "mr94027.03", 0x400000, 0x200000, CRC(3ff68f4f) SHA1(1e367b92560c32c87e27fc0e99be3bdb5eb0510b) ) @@ -1905,13 +1905,13 @@ ROM_START( hayaosi3 ) ROM_LOAD32_WORD( "mr94027.07", 0xc00000, 0x200000, CRC(c66099c4) SHA1(5a6edffa39a98f38cc3cffbad9191fb2e794a812) ) ROM_LOAD32_WORD( "mr94027.08", 0xc00002, 0x200000, CRC(753b05e0) SHA1(0424e92b32a73c27ecb549e6e9449446ea938e40) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr94027.09", 0x000000, 0x200000, CRC(32ead437) SHA1(b94175cf186b4ebcc180a4c092d2ffcdd9ff3b1d) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "mr94027.11", 0x000000, 0x200000, CRC(b65d5096) SHA1(2c4e1e3e9f96be8369cb2de142a82f94506f85c0) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "mb93138.32", 0x000000, 0x080000, CRC(df5d00b4) SHA1(2bbbcd546d5b5170d81bf33b37b46b70b417c9c7) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1933,7 +1933,7 @@ ROM_START( kirarast ) ROM_LOAD32_BYTE( "mr95025.28", 0x000001, 0x80000, CRC(6df8c384) SHA1(3ad01d3d51cfc1f48029c16ee1cc74fc59d7603c) ) ROM_LOAD32_BYTE( "mr95025.29", 0x000000, 0x80000, CRC(3b6e681b) SHA1(148fa10631db53a4ad1dcdfb60b4f0654e077396) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr95025.01", 0x000000, 0x200000, CRC(02279069) SHA1(fb3ce00701271d0163f72e4f2e56faa9f16d8fd0) ) ROM_LOAD32_WORD( "mr95025.02", 0x000002, 0x200000, CRC(885161d4) SHA1(1bc82de0b2759758d437db3ef9f0f7805f759b59) ) ROM_LOAD32_WORD( "mr95025.03", 0x400000, 0x200000, CRC(1ae06df9) SHA1(e1493a386fd8c54c88afab43d13d73869ae467ee) ) @@ -1943,14 +1943,14 @@ ROM_START( kirarast ) ROM_LOAD32_WORD( "mr95025.07", 0xc00000, 0x200000, CRC(0263a010) SHA1(b9c85647b406c89f0e839eac93eaf5d2e6963f7d) ) ROM_LOAD32_WORD( "mr95025.08", 0xc00002, 0x200000, CRC(8efc00d6) SHA1(f750e0e21310ceceeae3ad80eb2fe2920f5a0076) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr95025.10", 0x000000, 0x200000, CRC(ba7ad413) SHA1(b1f1c218dea3217f21d5e2f44db3786055ed879a) ) ROM_LOAD( "mr95025.11", 0x200000, 0x200000, CRC(11557299) SHA1(6efa56f897ab026f965376a0d4032f7a0d20cafe) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "mr95025.09", 0x000000, 0x200000, CRC(ca6cbd17) SHA1(9d16ef187b062590315066218e89bdf33cfd9865) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "mr95025.30", 0x000000, 0x080000, CRC(aee6e0c2) SHA1(dee985f7a9773ba7a4d31a3833a7775d778bbe5a) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -1972,7 +1972,7 @@ ROM_START( akiss ) ROM_LOAD32_BYTE( "93166.28", 0x000001, 0x80000, CRC(20565478) SHA1(d532ab55be287f45d8d81317bb844c675eb1292c) ) ROM_LOAD32_BYTE( "93166.29", 0x000000, 0x80000, CRC(ff454f0d) SHA1(db81aaaf4160eb62badbe08fc01543463470ac97) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "95008-01.13", 0x000000, 0x200000, CRC(1be66420) SHA1(9fc85e6108f230418e012ad05586010235139039)) ROM_LOAD32_WORD( "95008-02.1", 0x000002, 0x200000, CRC(1cc4808e) SHA1(70a19d66b4f187320c67760bc453b6afb7d66f9a) ) ROM_LOAD32_WORD( "95008-03.14", 0x400000, 0x200000, CRC(4045f0dc) SHA1(5ba9786618ecad9410dbdf3664f9dda848a754f7) ) @@ -1982,13 +1982,13 @@ ROM_START( akiss ) ROM_LOAD32_WORD( "95008-07.16", 0xc00000, 0x200000, CRC(bf47747e) SHA1(b97121953f41039182e25ea023802df4524cf9bd) ) ROM_LOAD32_WORD( "95008-08.4", 0xc00002, 0x200000, CRC(34829a09) SHA1(7229c56fee53a9d4d29cf0c9dec471b6cc4dc30b) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "95008-10.11", 0x000000, 0x200000, CRC(52da2e9e) SHA1(d7a29bdd1c6801aa8d36bc098e75091c63ba0766) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "95008-09.10", 0x000000, 0x200000,CRC(7236f6a0) SHA1(98dbb55f08d669ef3bf69394bb9739d0e6137fcb) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "93166.30", 0x000000, 0x080000, CRC(1807c1ea) SHA1(94696b8319c4982cb5d33423f56e2348f210cdb5) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -2010,7 +2010,7 @@ ROM_START( p47aces ) ROM_LOAD32_BYTE( "p47-28.bin", 0x000001, 0x80000, CRC(4742a5f7) SHA1(cd297aa150082c545647c9a755cf2cdbdc98c988) ) ROM_LOAD32_BYTE( "p47-29.bin", 0x000000, 0x80000, CRC(86e17d8b) SHA1(73004f243c6dfb86ce4cc61475dc7caaf452750e) ) - ROM_REGION( 0xe00000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0xe00000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "p47-01.bin", 0x000002, 0x200000, CRC(28732d3c) SHA1(15b2687bcad31793fc7d6a9dc3eccb7ad9b5f659) ) ROM_LOAD32_WORD( "p47-13.bin", 0x000000, 0x200000, CRC(a6ccf999) SHA1(5d32fb6f6987ede6c125bec9581da4695ad64dff) ) ROM_LOAD32_WORD( "p47-02.bin", 0x400002, 0x200000, CRC(128db576) SHA1(f6561f54f6b95842a5f14d29682449bf0d837a85) ) @@ -2020,15 +2020,15 @@ ROM_START( p47aces ) ROM_LOAD32_WORD( "p47-04.bin", 0xc00002, 0x100000, CRC(4b3372be) SHA1(cdc7d7615b6b5d45ca071b2967980dc6c6294ac0) ) ROM_LOAD32_WORD( "p47-16.bin", 0xc00000, 0x100000, CRC(c23c5467) SHA1(5ff51ecb86ccbae2af160599890e13a7cc70072d) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "p47-11.bin", 0x000000, 0x200000, CRC(c1fe16b3) SHA1(8b9d2483ba06ab8072676e73d949c696535b3d26) ) ROM_LOAD( "p47-12.bin", 0x200000, 0x200000, CRC(75871325) SHA1(9191263a52ec6ac325cf6130b35be7cdd1ec2f50) ) - ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "p47-10.bin", 0x000000, 0x200000, CRC(a44e9e06) SHA1(ff51796e160d996e931b92049e6214982f270caa) ) ROM_LOAD( "p47-09.bin", 0x200000, 0x200000, CRC(226014a6) SHA1(090bdc1f6d2b9d33b431dbb49a457a4bb36cd3ad) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "p47-30.bin", 0x000000, 0x080000, CRC(7ba90fad) SHA1(c0a3d4458816f00b8f5eb4b6d4531d1abeaccbe5) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -2050,17 +2050,17 @@ ROM_START( tetrisp ) ROM_LOAD32_BYTE( "mr95024.28", 0x000001, 0x80000, CRC(87522e16) SHA1(4f0d8abec046884d89c559e3a4a5ac9e0e47a0dc) ) ROM_LOAD32_BYTE( "mr95024.29", 0x000000, 0x80000, CRC(43a61941) SHA1(a097c88c45d8486eb6ffdd13904b6eb2a3fa45b9) ) - ROM_REGION( 0x400000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr95024.01", 0x000002, 0x200000, CRC(cb0e92b9) SHA1(179cc9e2d819d7f6238e924184e8a383d172aa72) ) ROM_LOAD32_WORD( "mr95024.13", 0x000000, 0x200000, CRC(4a825990) SHA1(f99ba9f88f5582259ba0e50480451d4e9d1d03b7) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr95024.11", 0x000000, 0x200000, CRC(c0d5246f) SHA1(413285f6b40001281c4fcec1ce73400c3ae610ed) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "mr95024.10", 0x000000, 0x200000, CRC(a03e4a8d) SHA1(d52c78d5e9d874dce514ffb035f2424409d8fb7a) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "mr95024.30", 0x000000, 0x080000, CRC(cea7002d) SHA1(5462edaeb9339790b95ed15a4bfaab8fae655b12) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -2082,17 +2082,17 @@ ROM_START( tp2m32 ) ROM_LOAD32_BYTE( "tp2m3228.28", 0x000001, 0x80000, CRC(041aac23) SHA1(3f7863ffa897978493e98445fe020dccbe521752) ) ROM_LOAD32_BYTE( "tp2m3229.29", 0x000000, 0x80000, CRC(4e83b2ca) SHA1(2766793f050a6952f4f53a763686f95bd7544f3f) ) - ROM_REGION( 0x800000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x800000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "96019-01.9", 0x000000, 0x400000, CRC(06f7dc64) SHA1(722c51b707b9854c0293afdff18b27ec7cae6719) ) ROM_LOAD32_WORD( "96019-02.8", 0x000002, 0x400000, CRC(3e613bed) SHA1(038b5e43fa3d69654107c8093126eeb2e8fa4ddc) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "tp2m3204.11", 0x000000, 0x200000, CRC(b5a03129) SHA1(a50d8b70615c49216f647534d1658c1a6d58a783) ) - ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "tp2m3203.10", 0x000000, 0x400000, CRC(94af8057) SHA1(e3bc6e02fe4c503ae51284770a76abbeff989147) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "tp2m3230.30", 0x000000, 0x080000, CRC(6845e476) SHA1(61c33714db2e2b5ccdcef0e0d3efdc391fe6aba2) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -2115,7 +2115,7 @@ ROM_START( bnstars ) /* ver 1.1 */ ROM_LOAD32_BYTE( "vsjanshi28.39", 0x000001, 0x80000, CRC(d075cfb6) SHA1(f70741e9f536d5c7604126d36c7aa8ed8f25c329) ) ROM_LOAD32_BYTE( "vsjanshi29.40", 0x000000, 0x80000, CRC(bc395b50) SHA1(84d7cc492a11a5a9402e929f0bd138ad63e3d079) ) - ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x1000000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr96004-01.13", 0x000000, 0x200000, CRC(3366d104) SHA1(2de0cabe2ead777b5b02cade7f2003ef7f90b75b) ) ROM_LOAD32_WORD( "mr96004-02.1", 0x000002, 0x200000, CRC(ad556664) SHA1(4b36f8d8d9efa37cf515af41d14433e7eafa27a2) ) ROM_LOAD32_WORD( "mr96004-03.14", 0x400000, 0x200000, CRC(b399e2b1) SHA1(9b6a00a219db8d66dcf592160b7b5f7a86b8f0c9) ) @@ -2125,13 +2125,13 @@ ROM_START( bnstars ) /* ver 1.1 */ ROM_LOAD32_WORD( "mr96004-07.16", 0xc00000, 0x200000, CRC(177e32fa) SHA1(3ca1f397dc28f1fa3a4136705b92c63e4e438f05) ) ROM_LOAD32_WORD( "mr96004-08.4", 0xc00002, 0x200000, CRC(f6df27b2) SHA1(60590976020d86bdccd4eaf57b349ea31bec6830) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x400000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr96004-09.11", 0x000000, 0x400000, CRC(7f8ea9f0) SHA1(f1fe682dcb884f1aa4a5536e17ab94157a99f519) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "mr96004-11.10", 0x000000, 0x200000, CRC(e6da552c) SHA1(69a5af3015883793c7d1343243ccae23db9ef77c) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "vsjanshi30.41", 0x000000, 0x080000, CRC(fdbbac21) SHA1(c77d852e53126cc8ebfe1e79d1134e42b54d1aab) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ @@ -2190,7 +2190,7 @@ ROM_START( wpksocv2 ) ROM_LOAD32_BYTE( "29", 0x000001, 0x80000, CRC(22acd835) SHA1(0fa96a6dfde737d541842f85dc257776044e15b5) ) ROM_LOAD32_BYTE( "31", 0x000000, 0x80000, CRC(f25e50f5) SHA1(b58722f11a8b94ef053caf531ac94a959350288a) ) - ROM_REGION( 0xc00000, "gfx1", 0 ) /* sprites, don't dispose since we use GFX_RAW */ + ROM_REGION( 0xc00000, "gfx1", 0 ) /* sprites */ ROM_LOAD32_WORD( "mr95033-01.13", 0x000000, 0x200000, CRC(1f76ed57) SHA1(af9076b4b4c26b362825d892f46d2c04b4bb9d07) ) ROM_LOAD32_WORD( "mr95033-02.1", 0x000002, 0x200000, CRC(5b119910) SHA1(aff44e355227dd159e388ab85a5b6d48644ff421) ) ROM_LOAD32_WORD( "mr95033-03.14", 0x400000, 0x200000, CRC(8b6099ed) SHA1(c514cec1491aed00a5714c0b8d17c96e87ba50aa) ) @@ -2198,13 +2198,13 @@ ROM_START( wpksocv2 ) ROM_LOAD32_WORD( "mr95033-05.15", 0x800000, 0x200000, CRC(cc5b8d0b) SHA1(70a5b9db600fc168d13ad54653cf1c8d2a45d991) ) ROM_LOAD32_WORD( "mr95033-06.3", 0x800002, 0x200000, CRC(2f79942f) SHA1(73417d10f37bcd539b8081312226cf142a5a0d3d) ) - ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx2", 0 ) /* roz tiles */ ROM_LOAD( "mr95033-07.9", 0x000000, 0x200000, CRC(76cd2e0b) SHA1(41aa18dfb4e06547d1f6d7ce49e5225027d16bbb) ) - ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x200000, "gfx3", 0 ) /* bg tiles */ ROM_LOAD( "mr95033-09.11", 0x000000, 0x200000, CRC(8a6dae81) SHA1(e235f2865a9a003330bff1e4d0a017e5d10efd2a) ) - ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles, don't dispose since we use GFX_RAW */ + ROM_REGION( 0x080000, "gfx4", 0 ) /* tx tiles */ ROM_LOAD( "32", 0x000000, 0x080000, CRC(becc25c2) SHA1(4ae7665cd45ebd9586068e99327145194ba216fc) ) ROM_REGION( 0x50000, "audiocpu", 0 ) /* z80 program */ diff --git a/src/mame/drivers/stepstag.c b/src/mame/drivers/stepstag.c index 57da9b2a2c8..0627979c516 100644 --- a/src/mame/drivers/stepstag.c +++ b/src/mame/drivers/stepstag.c @@ -215,7 +215,7 @@ static const gfx_layout layout_8x8x8 = }; /* sprites are contained in 256x256 "tiles" */ -static GFXLAYOUT_RAW( spritelayout, 8, 256, 256, 256*8, 256*256*8 ) +static GFXLAYOUT_RAW( spritelayout, 256, 256, 256*8, 256*256*8 ) static GFXDECODE_START( stepstag ) diff --git a/src/mame/drivers/tetrisp2.c b/src/mame/drivers/tetrisp2.c index 59758ae01e2..71fd69700b3 100644 --- a/src/mame/drivers/tetrisp2.c +++ b/src/mame/drivers/tetrisp2.c @@ -995,7 +995,7 @@ static const gfx_layout layout_16x16x8 = /* sprites are contained in 256x256 "tiles" */ -static GFXLAYOUT_RAW( spritelayout, 8, 256, 256, 256*8, 256*256*8 ) +static GFXLAYOUT_RAW( spritelayout, 256, 256, 256*8, 256*256*8 ) static GFXDECODE_START( tetrisp2 ) diff --git a/src/mame/includes/hyprduel.h b/src/mame/includes/hyprduel.h index b0e9253f117..7aea055692f 100644 --- a/src/mame/includes/hyprduel.h +++ b/src/mame/includes/hyprduel.h @@ -35,6 +35,7 @@ public: int m_sprite_xoffs; int m_sprite_yoffs; int m_sprite_yoffs_sub; + UINT8 * m_expanded_gfx1; /* misc */ emu_timer *m_magerror_irq_timer; diff --git a/src/mame/includes/metro.h b/src/mame/includes/metro.h index 2bba30bd464..93663ef3034 100644 --- a/src/mame/includes/metro.h +++ b/src/mame/includes/metro.h @@ -54,6 +54,8 @@ public: int m_has_zoom; int m_sprite_xoffs; int m_sprite_yoffs; + + UINT8 * m_expanded_gfx1; /* blitter */ int m_blitter_bit; diff --git a/src/mame/video/hyprduel.c b/src/mame/video/hyprduel.c index 504711ad765..9798bfea41b 100644 --- a/src/mame/video/hyprduel.c +++ b/src/mame/video/hyprduel.c @@ -351,9 +351,23 @@ static void hyprduel_postload(running_machine &machine) } +static void expand_gfx1(hyprduel_state &state) +{ + UINT8 *base_gfx = state.machine().region("gfx1")->base(); + UINT32 length = 2 * state.machine().region("gfx1")->bytes(); + state.m_expanded_gfx1 = auto_alloc_array(state.machine(), UINT8, length); + for (int i = 0; i < length; i += 2) + { + UINT8 src = base_gfx[i / 2]; + state.m_expanded_gfx1[i+0] = src & 15; + state.m_expanded_gfx1[i+1] = src >> 4; + } +} + static VIDEO_START( common_14220 ) { hyprduel_state *state = machine.driver_data(); + expand_gfx1(*state); alloc_empty_tiles(machine); state->m_tiletable_old = auto_alloc_array(machine, UINT16, state->m_tiletable_size / 2); state->m_dirtyindex = auto_alloc_array(machine, UINT8, state->m_tiletable_size / 4); @@ -462,8 +476,9 @@ VIDEO_START( magerror_14220 ) static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) { hyprduel_state *state = machine.driver_data(); - UINT8 *base_gfx = machine.region("gfx1")->base(); - UINT8 *gfx_max = base_gfx + machine.region("gfx1")->bytes(); + UINT8 *base_gfx4 = state->m_expanded_gfx1; + UINT8 *base_gfx8 = machine.region("gfx1")->base(); + UINT32 gfx_size = machine.region("gfx1")->bytes(); int max_x = machine.primary_screen->width(); int max_y = machine.primary_screen->height(); @@ -498,7 +513,6 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const for (j = 0; j < sprites; j++) { int x, y, attr, code, color, flipx, flipy, zoom, curr_pri, width, height; - UINT8 *gfxdata; /* Exponential zoom table extracted from daitoride */ static const int zoomtable[0x40] = @@ -546,7 +560,7 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const width = (((attr >> 11) & 0x7) + 1) * 8; height = (((attr >> 8) & 0x7) + 1) * 8; - gfxdata = base_gfx + (8 * 8 * 4 / 8) * (((attr & 0x000f) << 16) + code); + UINT32 gfxstart = (8 * 8 * 4 / 8) * (((attr & 0x000f) << 16) + code); if (flip_screen_get(machine)) { @@ -557,10 +571,10 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const if (color == 0xf) /* 8bpp */ { /* Bounds checking */ - if ((gfxdata + width * height - 1) >= gfx_max) + if ((gfxstart + width * height - 1) >= gfx_size) continue; - gfx_element_build_temporary(&gfx, machine, gfxdata, width, height, width, 0, 256, 0); + gfx_element_build_temporary(&gfx, machine, base_gfx8 + gfxstart, width, height, width, 0, 256, 0); pdrawgfxzoom_transpen(bitmap,cliprect, &gfx, 0, @@ -573,10 +587,10 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const else { /* Bounds checking */ - if ( (gfxdata + width / 2 * height - 1) >= gfx_max ) + if ((gfxstart + width / 2 * height - 1) >= gfx_size) continue; - gfx_element_build_temporary(&gfx, machine, gfxdata, width, height, width / 2, 0, 16, GFX_ELEMENT_PACKED); + gfx_element_build_temporary(&gfx, machine, base_gfx4 + 2 * gfxstart, width, height, width, 0, 16, 0); pdrawgfxzoom_transpen(bitmap,cliprect, &gfx, 0, diff --git a/src/mame/video/metro.c b/src/mame/video/metro.c index a5d2dc4a0f6..a05240ff2cf 100644 --- a/src/mame/video/metro.c +++ b/src/mame/video/metro.c @@ -215,21 +215,10 @@ INLINE UINT8 get_tile_pix( running_machine &machine, UINT16 code, UINT8 x, UINT8 switch (flipxy) { default: - case 0x0: *pix = data[(y * (big?8:4)) + (x>>1)]; break; - case 0x1: *pix = data[(((big?15:7)-y) * (big?8:4)) + (x>>1)]; break; - case 0x2: *pix = data[(y * (big?8:4)) + ((big?7:3)-(x>>1))]; break; - case 0x3: *pix = data[(((big?15:7)-y) * (big?8:4)) + ((big?7:3)-(x>>1))]; break; - } - - if (!(flipxy&2)) - { - if (x&1) *pix >>= 4; - else *pix &= 0xf; - } - else - { - if (x&1) *pix &= 0xf; - else *pix >>= 4; + case 0x0: *pix = data[(y * (big?16:8)) + x]; break; + case 0x1: *pix = data[(((big?15:7)-y) * (big?16:8)) + x]; break; + case 0x2: *pix = data[(y * (big?16:8)) + ((big?15:7)-x)]; break; + case 0x3: *pix = data[(((big?15:7)-y) * (big?16:8)) + ((big?15:7)-x)]; break; } *pix |= (((((tile & 0x0ff00000) >> 20)) + 0x100)*0x10); @@ -284,9 +273,23 @@ WRITE16_HANDLER( metro_window_w ) /* Dirty tilemaps when the tiles set changes */ +static void expand_gfx1(metro_state &state) +{ + UINT8 *base_gfx = state.machine().region("gfx1")->base(); + UINT32 length = 2 * state.machine().region("gfx1")->bytes(); + state.m_expanded_gfx1 = auto_alloc_array(state.machine(), UINT8, length); + for (int i = 0; i < length; i += 2) + { + UINT8 src = base_gfx[i / 2]; + state.m_expanded_gfx1[i+0] = src & 15; + state.m_expanded_gfx1[i+1] = src >> 4; + } +} + VIDEO_START( metro_14100 ) { metro_state *state = machine.driver_data(); + expand_gfx1(*state); state->m_support_8bpp = 0; state->m_support_16x16 = 0; @@ -308,6 +311,7 @@ VIDEO_START( metro_14100 ) VIDEO_START( metro_14220 ) { metro_state *state = machine.driver_data(); + expand_gfx1(*state); state->m_support_8bpp = 1; state->m_support_16x16 = 0; @@ -329,6 +333,7 @@ VIDEO_START( metro_14220 ) VIDEO_START( metro_14300 ) { metro_state *state = machine.driver_data(); + expand_gfx1(*state); state->m_support_8bpp = 1; state->m_support_16x16 = 1; @@ -442,8 +447,9 @@ VIDEO_START( gstrik2 ) void metro_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) { metro_state *state = machine.driver_data(); - UINT8 *base_gfx = machine.region("gfx1")->base(); - UINT8 *gfx_max = base_gfx + machine.region("gfx1")->bytes(); + UINT8 *base_gfx4 = state->m_expanded_gfx1; + UINT8 *base_gfx8 = machine.region("gfx1")->base(); + UINT32 gfx_size = machine.region("gfx1")->bytes(); const rectangle &visarea = machine.primary_screen->visible_area(); int max_x = visarea.max_x + 1; @@ -479,7 +485,6 @@ void metro_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const r for (j = 0; j < sprites; j++) { int x, y, attr, code, color, flipx, flipy, zoom, curr_pri, width, height; - UINT8 *gfxdata; /* Exponential zoom table extracted from daitoride */ static const int zoomtable[0x40] = @@ -525,7 +530,7 @@ void metro_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const r width = (((attr >> 11) & 0x7) + 1) * 8; height = (((attr >> 8) & 0x7) + 1) * 8; - gfxdata = base_gfx + (8 * 8 * 4 / 8) * (((attr & 0x000f) << 16) + code); + UINT32 gfxstart = (8 * 8 * 4 / 8) * (((attr & 0x000f) << 16) + code); if (state->m_flip_screen) { @@ -536,10 +541,10 @@ void metro_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const r if (state->m_support_8bpp && color == 0xf) /* 8bpp */ { /* Bounds checking */ - if ((gfxdata + width * height - 1) >= gfx_max) + if ((gfxstart + width * height - 1) >= gfx_size) continue; - gfx_element_build_temporary(&gfx, machine, gfxdata, width, height, width, 0, 256, 0); + gfx_element_build_temporary(&gfx, machine, base_gfx8 + gfxstart, width, height, width, 0, 256, 0); pdrawgfxzoom_transpen( bitmap,cliprect, &gfx, 0, @@ -552,10 +557,10 @@ void metro_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const r else { /* Bounds checking */ - if ((gfxdata + width / 2 * height - 1) >= gfx_max) + if ((gfxstart + width / 2 * height - 1) >= gfx_size) continue; - gfx_element_build_temporary(&gfx, machine, gfxdata, width, height, width/2, 0, 16, GFX_ELEMENT_PACKED); + gfx_element_build_temporary(&gfx, machine, base_gfx4 + 2 * gfxstart, width, height, width, 0, 16, 0); pdrawgfxzoom_transpen( bitmap,cliprect, &gfx, 0, diff --git a/src/mame/video/stvvdp2.c b/src/mame/video/stvvdp2.c index 4a98328b459..ffee7b6ff9f 100644 --- a/src/mame/video/stvvdp2.c +++ b/src/mame/video/stvvdp2.c @@ -2553,80 +2553,39 @@ static void stv_vdp2_drawgfxzoom( /* case 0: STV_TRANSPARENCY_NONE */ if (transparency == STV_TRANSPARENCY_NONE) { - if (gfx->flags & GFX_ELEMENT_PACKED) + for( y=sy; y>16) * gfx->line_modulo; - UINT32 *dest = &dest_bmp.pix32(y); - - int x, x_index = x_index_base; - for( x=sx; x>17] >> ((x_index & 0x10000) >> 14)) & 0x0f]; - x_index += dx; - } + const UINT8 *source = source_base + (y_index>>16) * gfx->line_modulo; + UINT32 *dest = &dest_bmp.pix32(y); - y_index += dy; - } - } - else - { - for( y=sy; y>16) * gfx->line_modulo; - UINT32 *dest = &dest_bmp.pix32(y); - - int x, x_index = x_index_base; - for( x=sx; x>16]]; - x_index += dx; - } - - y_index += dy; + dest[x] = pal[source[x_index>>16]]; + x_index += dx; } + + y_index += dy; } } /* case 1: STV_TRANSPARENCY_PEN */ if (transparency == STV_TRANSPARENCY_PEN) { - if (gfx->flags & GFX_ELEMENT_PACKED) + for( y=sy; y>16) * gfx->line_modulo; - UINT32 *dest = &dest_bmp.pix32(y); - - int x, x_index = x_index_base; - for( x=sx; x>17] >> ((x_index & 0x10000) >> 14)) & 0x0f; - if( c != transparent_color ) dest[x] = pal[c]; - x_index += dx; - } + const UINT8 *source = source_base + (y_index>>16) * gfx->line_modulo; + UINT32 *dest = &dest_bmp.pix32(y); - y_index += dy; - } - } - else - { - for( y=sy; y>16) * gfx->line_modulo; - UINT32 *dest = &dest_bmp.pix32(y); - - int x, x_index = x_index_base; - for( x=sx; x>16]; - if( c != transparent_color ) dest[x] = pal[c]; - x_index += dx; - } - - y_index += dy; + int c = source[x_index>>16]; + if( c != transparent_color ) dest[x] = pal[c]; + x_index += dx; } + + y_index += dy; } } @@ -2653,41 +2612,20 @@ static void stv_vdp2_drawgfxzoom( /* case : STV_TRANSPARENCY_ADD_BLEND */ if (transparency == STV_TRANSPARENCY_ADD_BLEND ) { - if (gfx->flags & GFX_ELEMENT_PACKED) + for( y=sy; y>16) * gfx->line_modulo; - UINT32 *dest = &dest_bmp.pix32(y); - - int x, x_index = x_index_base; - for( x=sx; x>17] >> ((x_index & 0x10000) >> 14)) & 0x0f; - if( c != transparent_color ) dest[x] = stv_add_blend(dest[x],pal[c]); - x_index += dx; - } + const UINT8 *source = source_base + (y_index>>16) * gfx->line_modulo; + UINT32 *dest = &dest_bmp.pix32(y); - y_index += dy; - } - } - else - { - for( y=sy; y>16) * gfx->line_modulo; - UINT32 *dest = &dest_bmp.pix32(y); - - int x, x_index = x_index_base; - for( x=sx; x>16]; - if( c != transparent_color ) dest[x] = stv_add_blend(dest[x],pal[c]); - x_index += dx; - } - - y_index += dy; + int c = source[x_index>>16]; + if( c != transparent_color ) dest[x] = stv_add_blend(dest[x],pal[c]); + x_index += dx; } + + y_index += dy; } } -- cgit v1.2.3-70-g09d2 an class="nb">true; return data; } WRITE8_MEMBER(dectalk_state::duart_output) { m_duart_outport = data; #ifdef SERIAL_TO_STDERR fprintf(stderr, "RTS: %01X, DTR: %01X\n", data&1, (data&4)>>2); #endif } WRITE_LINE_MEMBER(dectalk_state::duart_txa) { //TODO: this needs to be plumbed so it shows up optionally on a second terminal somehow, or connects to diserial // it is the second 'alternate' serial connection on the DTC-01, used for a serial passthru and other stuff. #ifdef SERIAL_TO_STDERR fprintf(stderr, "TXA:%02X ",data); #endif } /* FIFO and TMS32010 stuff */ #define SPC_INITIALIZE state->m_m68k_spcflags_latch&0x1 // speech initialize flag #define SPC_IRQ_ENABLED ((state->m_m68k_spcflags_latch&0x40)>>6) // irq enable flag void dectalk_state::outfifo_check() { // check if output fifo is full; if it isn't, set the int on the dsp if (m_outfifo_count < 16) m_dsp->set_input_line(0, ASSERT_LINE); // TMS32010 INT else m_dsp->set_input_line(0, CLEAR_LINE); // TMS32010 INT } void dectalk_state::clear_all_fifos() { // clear fifos (TODO: memset would work better here...) int i; for (i=0; i<16; i++) m_outfifo[i] = 0; m_outfifo_count = 0; m_outfifo_tail_ptr = m_outfifo_head_ptr = 0; for (i=0; i<32; i++) m_infifo[i] = 0; m_infifo_count = 0; m_infifo_tail_ptr = m_infifo_head_ptr = 0; outfifo_check(); } // helper for dsp infifo_semaphore flag to make dealing with interrupts easier void dectalk_state::dsp_semaphore_w(bool state) { m_infifo_semaphore = state; if ((m_infifo_semaphore) && (m_m68k_spcflags_latch&0x40)) { #ifdef VERBOSE logerror("speech int fired!\n"); #endif m_maincpu->set_input_line_and_vector(M68K_IRQ_5, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR); } else m_maincpu->set_input_line_and_vector(M68K_IRQ_5, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR); } // read the output fifo and set the interrupt line active on the dsp uint16_t dectalk_state::dsp_outfifo_r ( ) { uint16_t data = 0xffff; #ifdef USE_LOOSE_TIMING_OUTPUT // if outfifo count is less than two, boost the interleave to prevent running the fifo out if (m_outfifo_count < 2) machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(25)); #endif #ifdef VERBOSE if (m_outfifo_count == 0) logerror("output fifo is EMPTY! repeating previous sample!\n"); #endif data = m_outfifo[m_outfifo_tail_ptr]; // if fifo is empty (tail ptr == head ptr), do not increment the tail ptr, otherwise do. if (m_outfifo_count > 0) { m_outfifo_tail_ptr++; m_outfifo_count--; } m_outfifo_tail_ptr&=0xf; outfifo_check(); return ((data&0xfff0)^0x8000); // yes this is right, top bit is inverted and bottom 4 are ignored //return data; // not right but want to get it working first } /* Machine reset and friends: stuff that needs setting up which IS directly affected by reset */ WRITE_LINE_MEMBER(dectalk_state::dectalk_reset) { m_hack_self_test_is_second_read = false; // hack // stuff that is DIRECTLY affected by the RESET line machine().device<x2212_device>("x2212")->recall(0); machine().device<x2212_device>("x2212")->recall(1); machine().device<x2212_device>("x2212")->recall(0); // nvram recall m_m68k_spcflags_latch = 1; // initial status is speech reset(d0) active and spc int(d6) disabled m_m68k_tlcflags_latch = 0; // initial status is tone detect int(d6) off, answer phone(d8) off, ring detect int(d14) off m_duart->reset(); // reset the DUART // stuff that is INDIRECTLY affected by the RESET line clear_all_fifos(); // speech reset clears the fifos, though we have to do it explicitly here since we're not actually in the m68k_spcflags_w function. dsp_semaphore_w(false); // on the original DECtalk DTC-01 pcb revision, this is a semaphore for the INPUT fifo, later dec hacked on a check for the 3 output fifo chips to see if they're in sync, and set both of these latches if true. m_spc_error_latch = false; // spc error latch is cleared on /reset m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); // speech reset forces the CLR line active on the tms32010 m_tlc_tonedetect = false; // TODO, needed for selftest pass m_tlc_ringdetect = false; // TODO m_tlc_dtmf = 0; // TODO m_duart_inport = 0xf; m_duart_outport = 0; } void dectalk_state::machine_start() { m_outfifo_read_timer = timer_alloc(TIMER_OUTFIFO_READ); m_outfifo_read_timer->adjust(attotime::from_hz(10000)); save_item(NAME(m_infifo)); save_item(NAME(m_infifo_count)); save_item(NAME(m_infifo_tail_ptr)); save_item(NAME(m_infifo_head_ptr)); save_item(NAME(m_outfifo)); save_item(NAME(m_outfifo_count)); save_item(NAME(m_outfifo_tail_ptr)); save_item(NAME(m_outfifo_head_ptr)); save_item(NAME(m_infifo_semaphore)); save_item(NAME(m_spc_error_latch)); save_item(NAME(m_m68k_spcflags_latch)); save_item(NAME(m_m68k_tlcflags_latch)); save_item(NAME(m_simulate_outfifo_error)); save_item(NAME(m_tlc_tonedetect)); save_item(NAME(m_tlc_ringdetect)); save_item(NAME(m_tlc_dtmf)); save_item(NAME(m_duart_inport)); save_item(NAME(m_duart_outport)); save_item(NAME(m_hack_self_test_is_second_read)); clear_all_fifos(); m_simulate_outfifo_error = false; // TODO: HACK for now, should be hooked to a fake dipswitch to simulate fifo errors } void dectalk_state::machine_reset() { /* hook the RESET line, which resets a slew of other components */ m_maincpu->set_reset_callback(write_line_delegate(FUNC(dectalk_state::dectalk_reset),this)); } /* Begin 68k i/o handlers */ READ8_MEMBER(dectalk_state::nvram_recall)// recall from x2212 nvram chip { #ifdef NVRAM_LOG fprintf(stderr,"NVRAM RECALL executed: offset %03x\n", offset); #endif m_nvram->recall(0); m_nvram->recall(1); m_nvram->recall(0); return 0xff; } WRITE8_MEMBER(dectalk_state::led_write) { popmessage("LED status: %02X\n", data&0xff); #ifdef VERBOSE logerror("m68k: LED status: %02X\n", data&0xff); #endif //popmessage("LED status: %x %x %x %x %x %x %x %x\n", data&0x80, data&0x40, data&0x20, data&0x10, data&0x8, data&0x4, data&0x2, data&0x1); } WRITE8_MEMBER(dectalk_state::nvram_store) // store to X2212 NVRAM chip { #ifdef NVRAM_LOG fprintf(stderr,"NVRAM STORE executed: offset %03x, data written (and ignored) is %02x\n", offset, data); #endif m_nvram->store(0); m_nvram->store(1); m_nvram->store(0); } WRITE16_MEMBER(dectalk_state::m68k_infifo_w)// 68k write to the speech input fifo { #ifdef USE_LOOSE_TIMING machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(25)); #endif #ifdef SPC_LOG_68K logerror("m68k: SPC infifo written with data = %04X, fifo head was: %02X; fifo tail: %02X\n",data, m_infifo_head_ptr, m_infifo_tail_ptr); #endif // if fifo is full (head ptr = tail ptr-1), do not increment the head ptr and do not store the data if (m_infifo_count == 32) { #ifdef SPC_LOG_68K logerror("infifo was full, write ignored!\n"); #endif return; } m_infifo[m_infifo_head_ptr] = data; m_infifo_head_ptr++; m_infifo_count++; m_infifo_head_ptr&=0x1f; } READ16_MEMBER(dectalk_state::m68k_spcflags_r)// 68k read from the speech flags { uint8_t data = 0; data |= m_m68k_spcflags_latch; // bits 0 and 6 data |= m_spc_error_latch?0x20:0; // bit 5 data |= m_infifo_semaphore?0x80:0; // bit 7 #ifdef SPC_LOG_68K logerror("m68k: SPC flags read, returning data = %04X\n",data); #endif return data; } WRITE16_MEMBER(dectalk_state::m68k_spcflags_w)// 68k write to the speech flags (only 3 bits do anything) { #ifdef USE_LOOSE_TIMING machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(25)); #endif #ifdef SPC_LOG_68K logerror("m68k: SPC flags written with %04X, only storing %04X\n",data, data&0x41); #endif m_m68k_spcflags_latch = data&0x41; // ONLY store bits 6 and 0! // d0: initialize speech flag (reset tms32010 and clear infifo and outfifo if high) if ((data&0x1) == 0x1) // bit 0 { #ifdef SPC_LOG_68K logerror(" | 0x01: initialize speech: fifos reset, clear error+semaphore latches and dsp reset\n"); #endif clear_all_fifos(); m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); // speech reset forces the CLR line active on the tms32010 // clear the two speech side latches m_spc_error_latch = false; dsp_semaphore_w(false); } else // (data&0x1) == 0 { #ifdef SPC_LOG_68K logerror(" | 0x01 = 0: initialize speech off, dsp running\n"); #endif m_dsp->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); // speech reset deassert clears the CLR line on the tms32010 } if ((data&0x2) == 0x2) // bit 1 - clear error and semaphore latches { #ifdef SPC_LOG_68K logerror(" | 0x02: clear error+semaphore latches\n"); #endif // clear the two speech side latches m_spc_error_latch = false; dsp_semaphore_w(false); } if ((data&0x40) == 0x40) // bit 6 - spc irq enable { #ifdef SPC_LOG_68K logerror(" | 0x40: speech int enabled\n"); #endif if (m_infifo_semaphore) { #ifdef SPC_LOG_68K logerror(" speech int fired!\n"); #endif m_maincpu->set_input_line_and_vector(M68K_IRQ_5, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR); // set int because semaphore was set } } else // data&0x40 == 0 { #ifdef SPC_LOG_68K logerror(" | 0x40 = 0: speech int disabled\n"); #endif m_maincpu->set_input_line_and_vector(M68K_IRQ_5, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR); // clear int because int is now disabled } } READ16_MEMBER(dectalk_state::m68k_tlcflags_r)// dtmf flags read { uint16_t data = 0; data |= m_m68k_tlcflags_latch; // bits 6, 8, 14: tone detected int enable, answer phone relay enable, and ring int enable respectively data |= m_tlc_tonedetect?0x0080:0; // bit 7 is tone detected data |= m_tlc_ringdetect?0x8000:0; // bit 15 is ring detected #ifdef TLC_LOG logerror("m68k: TLC flags read, returning data = %04X\n",data); #endif return data; } WRITE16_MEMBER(dectalk_state::m68k_tlcflags_w)// dtmf flags write { #ifdef TLC_LOG logerror("m68k: TLC flags written with %04X, only storing %04X\n",data, data&0x4140); #endif m_m68k_tlcflags_latch = data&0x4140; // ONLY store bits 6 8 and 14! if (data&0x40) // bit 6: tone detect interrupt enable { #ifdef TLC_LOG logerror(" | 0x40: tone detect int enabled\n"); #endif if (m_tlc_tonedetect) { #ifdef TLC_LOG logerror(" TLC int fired!\n"); #endif m_maincpu->set_input_line_and_vector(M68K_IRQ_4, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR); // set int because tone detect was set } } else // data&0x40 == 0 { #ifdef TLC_LOG logerror(" | 0x40 = 0: tone detect int disabled\n"); #endif if ((!(data&0x4000)) || (!m_tlc_ringdetect)) // check to be sure we don't disable int if both ints fired at once m_maincpu->set_input_line_and_vector(M68K_IRQ_4, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR); // clear int because int is now disabled } if (data&0x100) // bit 8: answer phone relay enable { #ifdef TLC_LOG logerror(" | 0x100: answer phone relay enabled\n"); #endif } else // data&0x100 == 0 { #ifdef TLC_LOG logerror(" | 0x100 = 0: answer phone relay disabled\n"); #endif } if (data&0x4000) // bit 14: ring int enable { #ifdef TLC_LOG logerror(" | 0x4000: ring detect int enabled\n"); #endif if (m_tlc_ringdetect == 1) { #ifdef TLC_LOG logerror(" TLC int fired!\n"); #endif m_maincpu->set_input_line_and_vector(M68K_IRQ_4, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR); // set int because tone detect was set } } else // data&0x4000 == 0 { #ifdef TLC_LOG logerror(" | 0x4000 = 0: ring detect int disabled\n"); #endif if ((!(data&0x40)) || (!m_tlc_tonedetect)) // check to be sure we don't disable int if both ints fired at once m_maincpu->set_input_line_and_vector(M68K_IRQ_4, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR); // clear int because int is now disabled } } READ16_MEMBER(dectalk_state::m68k_tlc_dtmf_r)// dtmf chip read { #ifdef TLC_LOG uint16_t data = 0xffff; data = m_tlc_dtmf&0xf; logerror("m68k: TLC dtmf detector read, returning data = %02X", data); #endif return 0; } /* End 68k i/o handlers */ /* Begin tms32010 i/o handlers */ WRITE16_MEMBER(dectalk_state::spc_latch_outfifo_error_stats)// latch 74ls74 @ E64 upper and lower halves with d0 and 1 respectively { #ifdef USE_LOOSE_TIMING machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(25)); #endif #ifdef SPC_LOG_DSP logerror("dsp: set fifo semaphore and set error status = %01X\n",data&1); #endif dsp_semaphore_w(m_simulate_outfifo_error?false:true); // always set to true here, unless outfifo desync-between-the-three-parallel-fifo-chips error occurs. m_spc_error_latch = (data&1); // latch the dsp 'soft error' state aka "ERROR DETECTED D5 H" on schematics (different from the outfifo error state above!) } READ16_MEMBER(dectalk_state::spc_infifo_data_r) { uint16_t data = 0xffff; data = m_infifo[m_infifo_tail_ptr]; #ifdef SPC_LOG_DSP logerror("dsp: SPC infifo read with data = %04X, fifo head: %02X; fifo tail was: %02X\n",data, m_infifo_head_ptr, m_infifo_tail_ptr); #endif // if fifo is empty (tail ptr == head ptr), do not increment the tail ptr, otherwise do. if (m_infifo_count > 0) { m_infifo_tail_ptr++; m_infifo_count--; } m_infifo_tail_ptr&=0x1f; return data; } WRITE16_MEMBER(dectalk_state::spc_outfifo_data_w) { // the low 4 data bits are thrown out on the real unit due to use of a 12 bit dac (and to save use of another 16x4 fifo chip), though technically they're probably valid, and with suitable hacking a dtc-01 could probably output full 16 bit samples at 10khz. #ifdef SPC_LOG_DSP logerror("dsp: SPC outfifo write, data = %04X, fifo head was: %02X; fifo tail: %02X\n", data, m_outfifo_head_ptr, m_outfifo_tail_ptr); #endif m_dsp->set_input_line(0, CLEAR_LINE); //TMS32010 INT (cleared because LDCK inverts the IR line, clearing int on any outfifo write... for a moment at least.) // if fifo is full (head ptr = tail ptr-1), do not increment the head ptr and do not store the data if (m_outfifo_count == 16) { #ifdef SPC_LOG_DSP logerror("outfifo was full, write ignored!\n"); #endif return; } m_outfifo[m_outfifo_head_ptr] = data; m_outfifo_head_ptr++; m_outfifo_count++; m_outfifo_head_ptr&=0xf; //outfifo_check(); // outfifo check should only be done in the audio 10khz polling function } READ_LINE_MEMBER(dectalk_state::spc_semaphore_r)// Return state of d-latch 74ls74 @ E64 'lower half' in d0 which indicates whether infifo is readable { #ifdef SPC_LOG_DSP //logerror("dsp: read infifo semaphore, returned %d\n", m_infifo_semaphore); // commented due to extreme annoyance factor if (!m_infifo_semaphore) logerror("dsp: read infifo semaphore, returned %d\n", m_infifo_semaphore); #endif return m_infifo_semaphore; } /* end tms32010 i/o handlers */ /****************************************************************************** Address Maps ******************************************************************************/ /* Address maps (x = ignored; * = selects address within this range; a = see description at right of row) 68k address map: a23 a22 a21 a20 a19 a18 a17 a16 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 (a0 via UDS/LDS) 0 x x x 0 x 0 0 0 * * * * * * * * * * * * * * a R ROM a=0:E8, a=1:E22 0 x x x 0 x 0 0 1 * * * * * * * * * * * * * * a R ROM E7,E21 0 x x x 0 x 0 1 0 * * * * * * * * * * * * * * a R ROM E6,E20 0 x x x 0 x 0 1 1 * * * * * * * * * * * * * * a R ROM E5,E19 0 x x x 0 x 1 0 0 * * * * * * * * * * * * * * a R ROM E4,E18 0 x x x 0 x 1 0 1 * * * * * * * * * * * * * * a R ROM E3,E17 0 x x x 0 x 1 1 0 * * * * * * * * * * * * * * a R ROM E2,E16 0 x x x 0 x 1 1 1 * * * * * * * * * * * * * * a R ROM E1,E15 0 x x x 1 x x 0 0 0 * * * * * * * * * * * * * a RW RAM E36,E49 0 x x x 1 x x 0 0 1 * * * * * * * * * * * * * a RW RAM E35,E48 0 x x x 1 x x 0 1 0 * * * * * * * * * * * * * a RW RAM E34,E47 0 x x x 1 x x 0 1 1 * * * * * * * * * * * * * a RW RAM E33,E46 0 x x x 1 x x 1 0 0 * * * * * * * * * * * * * a RW RAM E32,E45 0 x x x 1 x x 1 0 1 x x x x x x x x x x x x x 0 W Status LED <d7-d0> 0 x x x 1 x x 1 0 1 x x x x 0 * * * * * * * * 1 RW NVRAM (read/write volatile ram, does not store to eeprom) 0 x x x 1 x x 1 0 1 x x x x 1 * * * * * * * * 1 RW NVRAM (all reads do /recall from eeprom, all writes do /store to eeprom) 0 x x x 1 x x 1 1 0 x x x x x x x x x * * * * x RW DUART (keep in mind that a0 is not connected) 0 x x x 1 x x 1 1 1 x x x x x x x x x x x 0 0 0? RW SPC SR (flags): fifo-not-full (spc writable) flag (readonly, d7), fifo-not-full spc irq mask (readwrite, d6), fifo error status (readonly, d5), 'fifo release'/clear-tms-fifo-error-status-bits (writeonly, d1), speech initialize/clear (readwrite, d0) [see schematic sheet 4] 0 x x x 1 x x 1 1 1 x x x x x x x x x x x 0 1 * W SPC DR fifo write (clocks fifo) 0 x x x 1 x x 1 1 1 x x x x x x x x x x x 1 0 * RW TLC SR (flags): ring detect (readonly, d15), ring detected irq enable (readwrite, d14), answer phone (readwrite, d8), tone detected (readonly, d7), tone detected irq enable (readwrite, d6) [see schematic sheet 6] 0 x x x 1 x x 1 1 1 x x x x x x x x x x x 1 1 * R TLC DR tone chip read, reads on bits d0-d7 only, d4-d7 are tied low; d15-d8 are probably open bus 1 x x x x x x x x x x x x x x x x x x x x x x x OPEN BUS | | | | | */ void dectalk_state::m68k_mem(address_map &map) { map.unmap_value_high(); map(0x000000, 0x03ffff).mirror(0x740000).rom(); /* ROM */ map(0x080000, 0x093fff).mirror(0x760000).ram(); /* RAM */ map(0x094000, 0x0943ff).mirror(0x763c00).w(this, FUNC(dectalk_state::led_write)).umask16(0x00ff); /* LED array */ map(0x094000, 0x0941ff).mirror(0x763c00).rw(m_nvram, FUNC(x2212_device::read), FUNC(x2212_device::write)).umask16(0xff00); /* Xicor X2212 NVRAM */ map(0x094200, 0x0943ff).mirror(0x763c00).rw(this, FUNC(dectalk_state::nvram_recall), FUNC(dectalk_state::nvram_store)).umask16(0xff00); /* Xicor X2212 NVRAM */ map(0x098000, 0x09801f).mirror(0x763fe0).rw(m_duart, FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask16(0x00ff); /* DUART */ map(0x09c000, 0x09c001).mirror(0x763ff8).rw(this, FUNC(dectalk_state::m68k_spcflags_r), FUNC(dectalk_state::m68k_spcflags_w)); /* SPC flags reg */ map(0x09c002, 0x09c003).mirror(0x763ff8).w(this, FUNC(dectalk_state::m68k_infifo_w)); /* SPC fifo reg */ map(0x09c004, 0x09c005).mirror(0x763ff8).rw(this, FUNC(dectalk_state::m68k_tlcflags_r), FUNC(dectalk_state::m68k_tlcflags_w)); /* telephone status flags */ map(0x09c006, 0x09c007).mirror(0x763ff8).r(this, FUNC(dectalk_state::m68k_tlc_dtmf_r)); /* telephone dtmf read */ } void dectalk_state::tms32010_mem(address_map &map) { map(0x000, 0x7ff).rom(); /* ROM */ } void dectalk_state::tms32010_io(address_map &map) { map(0, 0).w(this, FUNC(dectalk_state::spc_latch_outfifo_error_stats)); // *set* the outfifo_status_r semaphore, and also latch the error bit at D0. map(1, 1).rw(this, FUNC(dectalk_state::spc_infifo_data_r), FUNC(dectalk_state::spc_outfifo_data_w)); //read from input fifo, write to sound fifo //AM_RANGE(8, 8) //the newer firmware seems to want something mapped here? } /****************************************************************************** Input Ports ******************************************************************************/ static INPUT_PORTS_START( dectalk ) PORT_START("duart_in") // IP4, IP5, IP6 bits on duart are dipswitches (really unsoldered holes in the pcb where jumper wires can be soldered or shorted over) PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // these bits are dealt with elsewhere PORT_DIPNAME( 0x10, 0x00, "Skip Self Test (IP4)" ) PORT_DIPSETTING( 0x10, "Open (VCC)" ) PORT_DIPSETTING( 0x00, "Short to GND" ) PORT_DIPNAME( 0x20, 0x20, "Unknown (IP5)" ) PORT_DIPSETTING( 0x20, "Open (VCC)" ) PORT_DIPSETTING( 0x00, "Short to GND" ) PORT_DIPNAME( 0x40, 0x40, "Unknown (IP6)" ) PORT_DIPSETTING( 0x40, "Open (VCC)" ) PORT_DIPSETTING( 0x00, "Short to GND" ) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // this pin (IP7) doesn't actually exist as a pin at all, reads as 1 PORT_START("hacks") PORT_CONFNAME( 0x01, 0x01, "Hack to prevent hang when skip self test is shorted" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x01, DEF_STR( On ) ) INPUT_PORTS_END /****************************************************************************** Machine Drivers ******************************************************************************/ void dectalk_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch (id) { case TIMER_OUTFIFO_READ: outfifo_read_cb(ptr, param); break; default: assert_always(false, "Unknown id in dectalk_state::device_timer"); } } TIMER_CALLBACK_MEMBER(dectalk_state::outfifo_read_cb) { uint16_t data = dsp_outfifo_r(); #ifdef VERBOSE if (data!= 0x8000) logerror("sample output: %04X\n", data); #endif m_outfifo_read_timer->adjust(attotime::from_hz(10000)); m_dac->write(data >> 4); // hack for break key, requires hacked up duart core so disabled for now // also it doesn't work well, the setup menu is badly corrupt /*device_t *duart = machine().device("duart"); if (machine.input().code_pressed(KEYCODE_F1)) duart_rx_break(duart, 1, 1); else duart_rx_break(duart, 1, 0);*/ } MACHINE_CONFIG_START(dectalk_state::dectalk) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", M68000, XTAL(20'000'000)/2) /* E74 20MHz OSC (/2) */ MCFG_DEVICE_PROGRAM_MAP(m68k_mem) MCFG_DEVICE_ADD("duart", SCN2681, XTAL(3'686'400)) // MC2681 DUART ; Y3 3.6864MHz xtal */ MCFG_MC68681_IRQ_CALLBACK(WRITELINE(*this, dectalk_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(*this, dectalk_state, duart_txa)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE("rs232", rs232_port_device, write_txd)) MCFG_MC68681_INPORT_CALLBACK(READ8(*this, dectalk_state, duart_input)) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(*this, dectalk_state, duart_output)) MCFG_DEVICE_ADD("dsp", TMS32010, XTAL(20'000'000)) /* Y1 20MHz xtal */ MCFG_DEVICE_PROGRAM_MAP(tms32010_mem) MCFG_DEVICE_IO_MAP(tms32010_io) MCFG_TMS32010_BIO_IN_CB(READLINE(*this, dectalk_state, spc_semaphore_r)) //read infifo-has-data-in-it fifo readable status #ifdef USE_LOOSE_TIMING MCFG_QUANTUM_TIME(attotime::from_hz(100)) #else MCFG_QUANTUM_PERFECT_CPU("dsp") #endif MCFG_X2212_ADD("x2212") /* video hardware */ /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("speaker") MCFG_DEVICE_ADD("dac", AD7541, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.9) // ad7541.e107 (E88 10KHz OSC, handled by timer) MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) /* Y2 is a 3.579545 MHz xtal for the dtmf decoder chip */ MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_b_w)) MACHINE_CONFIG_END /****************************************************************************** ROM Definitions ******************************************************************************/ ROM_START( dectalk ) ROM_REGION16_BE(0x40000,"maincpu", 0) // DECtalk DTC-01 firmware v2.0 (first half: 23Jul84 tag; second half: 02Jul84 tag), all roms are 27128 eproms // technically the correct rom names are 23-123e5.e8, etc, but the chips they were dumped from were NOT labeled that way // labels were SP8510123E5 etc, which means the chips were burned at dec in week 10, 1985 /* the labels dec uses for most non-factory-programmed eproms, proms and pals is something like SPddddnnnto or WBddddnnto * where: * SP or WB = ? * dddd is a 4 digit datecode with yyww (i.e. 8510 = week 10, 1985) * nnn = the dec internal rom number for that type * t = programmable chip type (e = eprom, otprom or mask rom; a,b,f = proms of various sorts; there are others for plas and pals) * o = size of rom * for eproms/otproms or mask roms it is: e1 = 0x400, e2 = 0x800, e3 = 0x1000, e4 = 0x2000, e5 = 0x4000, e6 = 0x8000, etc) * for proms it is: a1 = 82s123(0x20, 8b TS); a2 = 82s129(0x100 4b TS); a9 = 82s131(0x200 4b TS); b1 = 82s135(0x100 8b TS); f1 = 82s137(0x400 4b TS); f4 = 82s191(0x800 8b TS); s0 = MC68HC05; m2 = i8051 or other MCS-51; (there are more) */ ROM_SYSTEM_BIOS( 0, "v20", "DTC-01 Version 2.0") ROMX_LOAD("23-123e5.e8", 0x00000, 0x4000, CRC(03e1eefa) SHA1(e586de03e113683c2534fca1f3f40ba391193044), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510123E5" @ E8 ROMX_LOAD("23-119e5.e22", 0x00001, 0x4000, CRC(af20411f) SHA1(7954bb56b7591f8954403a22d34de31c7d5441ac), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510119E5" @ E22 ROMX_LOAD("23-124e5.e7", 0x08000, 0x4000, CRC(9edeafcb) SHA1(7724babf4ae5d77c0b4200f608d599058d04b25c), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510124E5" @ E7 ROMX_LOAD("23-120e5.e21", 0x08001, 0x4000, CRC(f2a346a6) SHA1(af5e4ea0b3631f7d6f16c22e86a33fa2cb520ee0), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510120E5" @ E21 ROMX_LOAD("23-125e5.e6", 0x10000, 0x4000, CRC(1c0100d1) SHA1(1b60cd71dfa83408b17e13f683b6bf3198c905cc), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510125E5" @ E6 ROMX_LOAD("23-121e5.e20", 0x10001, 0x4000, CRC(4cb081bd) SHA1(4ad0b00628a90085cd7c78a354256c39fd14db6c), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510121E5" @ E20 ROMX_LOAD("23-126e5.e5", 0x18000, 0x4000, CRC(7823dedb) SHA1(e2b2415eec838ddd46094f2fea93fd289dd0caa2), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510126E5" @ E5 ROMX_LOAD("23-122e5.e19", 0x18001, 0x4000, CRC(b86370e6) SHA1(92ab22a24484ad0d0f5c8a07347105509999f3ee), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510122E5" @ E19 ROMX_LOAD("23-103e5.e4", 0x20000, 0x4000, CRC(35aac6b9) SHA1(b5aec0bf37a176ff4d66d6a10357715957662ebd), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510103E5" @ E4 ROMX_LOAD("23-095e5.e18", 0x20001, 0x4000, CRC(2296fe39) SHA1(891f3a3b4ce75ef14001257bc8f1f60463a9a7cb), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510095E5" @ E18 ROMX_LOAD("23-104e5.e3", 0x28000, 0x4000, CRC(9658b43c) SHA1(4d6808f67cbdd316df23adc8ddf701df57aa854a), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510104E5" @ E3 ROMX_LOAD("23-096e5.e17", 0x28001, 0x4000, CRC(cf236077) SHA1(496c69e52cfa013173f7b9c500ce544a03ad01f7), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510096E5" @ E17 ROMX_LOAD("23-105e5.e2", 0x30000, 0x4000, CRC(09cddd28) SHA1(de0c25687bab3ff0c88c98622092e0b58331aa16), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510105E5" @ E2 ROMX_LOAD("23-097e5.e16", 0x30001, 0x4000, CRC(49434da1) SHA1(c450abae0ccf372d7eb87370b8a8c97a45e164d3), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510097E5" @ E16 ROMX_LOAD("23-106e5.e1", 0x38000, 0x4000, CRC(a389ab31) SHA1(355348bfc96a04193136cdde3418366e6476c3ca), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510106E5" @ E1 ROMX_LOAD("23-098e5.e15", 0x38001, 0x4000, CRC(3d8910e7) SHA1(01921e77b46c2d4845023605239c45ffa4a35872), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "SP8510098E5" @ E15 // DECtalk DTC-01 firmware v1.8 (first half: 05Dec83 tag; second half: 11Oct83 tag), all roms are 27128 eproms ROM_SYSTEM_BIOS( 1, "v18", "DTC-01 Version 1.8") ROMX_LOAD("23-063e5.e8", 0x00000, 0x4000, CRC(9f5ca045) SHA1(1b1b9c1e092c44329b385fb04001e13422eb8d39), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-059e5.e22", 0x00001, 0x4000, CRC(b299cf64) SHA1(84bbe9ff303ea6ce7b1c0b1ad05421edd18fae49), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-064e5.e7", 0x08000, 0x4000, CRC(e4ff20f4) SHA1(fdd91e4d2ef92608a08b2e78b6108e31ff53a1f9), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-060e5.e21", 0x08001, 0x4000, CRC(213c65ba) SHA1(c95662d0d40499af01cdc23f05936762ab54081a), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-065e5.e6", 0x10000, 0x4000, CRC(38ea0c75) SHA1(232b622cef6d69a493db1ed02e5236235c68daba), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-061e5.e20", 0x10001, 0x4000, CRC(44f6fe5c) SHA1(81daa4abae273c7f0aead902b5c3c842f7e7f116), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-066e5.e5", 0x18000, 0x4000, CRC(957aa8cf) SHA1(5f9f916b99867d1adbafd58d411feb630f6e4b6d), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-062e5.e19", 0x18001, 0x4000, CRC(10ab969c) SHA1(46ee22a295b8709b6f829751aca5f92e4f459a9f), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-032e5.e4", 0x20000, 0x4000, CRC(0f805e3a) SHA1(1d8008e30a448358224364fd8237dbb08907b219), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-031e5.e18", 0x20001, 0x4000, CRC(846b5b68) SHA1(55c759b3fb927d2dfc9d77e8e080748866bea854), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-034e5.e3", 0x28000, 0x4000, CRC(90700738) SHA1(738337c5b6acd3f30c3c4be2457370d2ce9313f9), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-033e5.e17", 0x28001, 0x4000, CRC(48756a4d) SHA1(5946ccd367d88a484bb1549d0cc990b9b7d88f0c), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-036e5.e2", 0x30000, 0x4000, CRC(5c2d4f73) SHA1(30f95e5383c4f71bc700346e2d49e8ad70b94c8c), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-035e5.e16", 0x30001, 0x4000, CRC(80116443) SHA1(7b3b68e61b421dedaad88b5600c739943a316c9e), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-038e5.e1", 0x38000, 0x4000, CRC(c840493f) SHA1(abd6af442690e981a9089f19febffc8f3fb52717), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD("23-037e5.e15", 0x38001, 0x4000, CRC(d62ab309) SHA1(a743a23625feadf6e46ef889e2bb04af88589992), ROM_SKIP(1) | ROM_BIOS(2)) ROM_REGION(0x2000,"dsp", 0) // older dsp firmware from earlier dectalk firmware 2.0 units, both proms are 82s191 equivalent; this dsp firmware clips with the 1.8 dectalk firmware. this lacks the debug code? ROMX_LOAD("23-205f4.e70", 0x000, 0x800, CRC(ed76a3ad) SHA1(3136bae243ef48721e21c66fde70dab5fc3c21d0), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "LM8506205F4 // M1-76161-5" @ E70 ROMX_LOAD("23-204f4.e69", 0x001, 0x800, CRC(79bb54ff) SHA1(9409f90f7a397b041e4440341f2d7934cb479285), ROM_SKIP(1) | ROM_BIOS(1)) // Label: "LM8504204F4 // 78S191" @ E69 // Final? firmware from 2.0 dectalk firmware units; this dsp firmware clips with the 1.8 dectalk firmware // this firmware seems to have some leftover test garbage mapped into its space, which is not present on the dtc-01 board // it writes 0x0000 to 0x90 on start, and it writes a sequence of values to 0xFF down to 0xE9 // it also wants something readable mapped at 0x08 (for debug purposes?) or else it waits for an interrupt (as the older firmware always does) ROMX_LOAD("23-410f4.e70", 0x000, 0x800, CRC(121e2ec3) SHA1(3fabe018d0e0b478093951cb20501853358faa18), ROM_SKIP(1) | ROM_BIOS(1)) ROMX_LOAD("23-409f4.e69", 0x001, 0x800, CRC(61f67c79) SHA1(9a13426c92f879f2953f180f805990a91c37ac43), ROM_SKIP(1) | ROM_BIOS(1)) // older dsp firmware from dectalk firmware 1.8 units; while this dsp firmware works with 2.0 dectalk firmware, its a bit quieter than the proper one. ROMX_LOAD("23-166f4.e70", 0x000, 0x800, CRC(2d036ffc) SHA1(e8c25ca092dde2dc0aec73921af806026bdfbbc3), ROM_SKIP(1) | ROM_BIOS(2)) // HM1-76161-5 ROMX_LOAD("23-165f4.e69", 0x001, 0x800, CRC(a3019ca4) SHA1(249f269c38f7f44edb6d025bcc867c8ca0de3e9c), ROM_SKIP(1) | ROM_BIOS(2)) // HM1-76161-5 // TODO: load this as default if the nvram file is missing, OR get the setup page working enough that it can be saved properly to the chip from an NVR FAULT state! // NOTE: this nvram image is ONLY VALID for v2.0; v1.8 expects a different image. ROM_REGION(0x100,"nvram", 0) // default nvram image is at 0x1A7AE in main rom, read lsn first so 0x0005 in rom becomes 05 00 00 00 etc for all words of main rom ROM_FILL(0x00, 0xff, 0x00) // blank it first; ROM_FILL(0x00, 0x01, 0x05) ROM_FILL(0x04, 0x01, 0x00) ROM_FILL(0x08, 0x01, 0x06) ROM_FILL(0x0c, 0x01, 0x01) ROM_FILL(0x10, 0x01, 0x06) ROM_FILL(0x14, 0x01, 0x0b) ROM_FILL(0x18, 0x01, 0x02) ROM_FILL(0x1c, 0x01, 0x02) ROM_FILL(0x20, 0x01, 0x01) ROM_FILL(0x24, 0x01, 0x01) ROM_FILL(0x28, 0x01, 0x00) ROM_FILL(0x2c, 0x01, 0x01) ROM_FILL(0xfc, 0x01, 0x0d) // checksum, calculated some weird way which I haven't figured out yet ROM_FILL(0xfd, 0x01, 0x02) // " ROM_FILL(0xfe, 0x01, 0x05) // " ROM_FILL(0xff, 0x01, 0x0b) // " ROM_END /****************************************************************************** Drivers ******************************************************************************/ /* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */ COMP( 1984, dectalk, 0, 0, dectalk, dectalk, dectalk_state, 0, "Digital Equipment Corporation", "DECtalk DTC-01", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )