mirror of
https://github.com/holub/mame
synced 2025-05-22 13:48:55 +03:00
From: David Haywood [hazemamewip@hotmail.com]
Sent: Thursday, September 03, 2009 12:25 PM To: Mamedev Submission Subject: Black Touch '96 improvements I'm sending the complete file this time. Unzip it after applying the previous update. It improves the sprite emulation (still wrong tho) Seems Seta/Taitoish
This commit is contained in:
parent
34b73aeace
commit
e1d0914552
@ -42,6 +42,9 @@ Notes:
|
|||||||
2008-07
|
2008-07
|
||||||
Added Dip Locations based on Service Mode
|
Added Dip Locations based on Service Mode
|
||||||
|
|
||||||
|
|
||||||
|
Is this based on some Seta / Taito HW design, the sprite-tilemaps look familiar
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
@ -57,109 +60,74 @@ static VIDEO_START( blackt96 )
|
|||||||
static UINT16* blackt96_tilemapram;
|
static UINT16* blackt96_tilemapram;
|
||||||
static UINT16* blackt96_tilemapram2;
|
static UINT16* blackt96_tilemapram2;
|
||||||
|
|
||||||
|
static void draw_strip(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int stripnum, int xbase, int ybase, int bg)
|
||||||
|
{
|
||||||
|
const gfx_element *gfxspr = machine->gfx[1];
|
||||||
|
const gfx_element *gfxbg = machine->gfx[0];
|
||||||
|
|
||||||
|
int base = stripnum;
|
||||||
|
int count = 0;
|
||||||
|
int y;
|
||||||
|
|
||||||
|
for (y=0;y<32;y++)
|
||||||
|
{
|
||||||
|
UINT16 tile = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x3fff);
|
||||||
|
UINT16 flipx = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x4000);
|
||||||
|
UINT16 colour = (blackt96_tilemapram2[count*2 + (base/2)]&0x00ff);
|
||||||
|
|
||||||
|
if (tile&0x2000)
|
||||||
|
{
|
||||||
|
if (bg) drawgfx_transpen(bitmap,cliprect,gfxbg,tile&0x1fff,colour>>4,flipx,0,xbase,ybase+y*16,0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!bg) drawgfx_transpen(bitmap,cliprect,gfxspr,tile&0x1fff,colour,flipx,0,xbase,ybase+y*16,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void draw_main(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int bg)
|
||||||
|
{
|
||||||
|
|
||||||
|
int x;
|
||||||
|
|
||||||
|
|
||||||
|
for (x=(0x1000/2)-2;x>=0;x-=2)
|
||||||
|
{
|
||||||
|
int xx;
|
||||||
|
int yy;
|
||||||
|
int s = 0;
|
||||||
|
|
||||||
|
xx= ((blackt96_tilemapram2[x+0]&0x001f)<<4) | (blackt96_tilemapram2[x+1]&0xf000)>>12;
|
||||||
|
yy = ((blackt96_tilemapram2[x+1]&0x1ff));
|
||||||
|
|
||||||
|
if (xx&0x100) xx-=0x200;
|
||||||
|
yy = 0x1ff-yy;
|
||||||
|
if (yy&0x100) yy-=0x200;
|
||||||
|
|
||||||
|
s = x*2;
|
||||||
|
s &=0xfff;
|
||||||
|
s += (x&7)*0x800;
|
||||||
|
|
||||||
|
|
||||||
|
draw_strip(machine,bitmap,cliprect,s,xx,yy,bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static VIDEO_UPDATE( blackt96 )
|
static VIDEO_UPDATE( blackt96 )
|
||||||
{
|
{
|
||||||
int y,x;
|
int count;
|
||||||
int count = 0;
|
int x,y;
|
||||||
int base;
|
|
||||||
const gfx_element *gfx = screen->machine->gfx[2];
|
const gfx_element *gfx = screen->machine->gfx[2];
|
||||||
const gfx_element *gfxbg = screen->machine->gfx[0];
|
|
||||||
const gfx_element *gfxspr = screen->machine->gfx[1];
|
|
||||||
|
|
||||||
count = 0;
|
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||||
for (x=0;x<64;x++)
|
|
||||||
{
|
|
||||||
for (y=0;y<32;y++)
|
|
||||||
{
|
|
||||||
UINT16 tile = (blackt96_tilemapram2[count*2 + (0x2000/2)+1]);
|
|
||||||
drawgfx_opaque(bitmap,cliprect,gfxbg,tile,6,0,0,x*16,y*16);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the sprite are arranged in tilemaps.. I don't know how this works yet */
|
draw_main(screen->machine,bitmap,cliprect,1);
|
||||||
count = 0;
|
draw_main(screen->machine,bitmap,cliprect,0);
|
||||||
base = 0x1000;
|
|
||||||
for (x=0;x<32;x++)
|
|
||||||
{
|
|
||||||
for (y=0;y<32;y++)
|
|
||||||
{
|
|
||||||
UINT16 tile = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x1fff);
|
|
||||||
UINT16 flipx = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x4000);
|
|
||||||
UINT16 colour = (blackt96_tilemapram2[count*2 + (base/2)]&0x00ff);
|
|
||||||
|
|
||||||
drawgfx_transpen(bitmap,cliprect,gfxspr,tile,colour,flipx,0,x*16,y*16,0);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
count = 0;
|
|
||||||
base = 0x1800;
|
|
||||||
for (x=0;x<32;x++)
|
|
||||||
{
|
|
||||||
for (y=0;y<32;y++)
|
|
||||||
{
|
|
||||||
UINT16 tile = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x1fff);
|
|
||||||
UINT16 flipx = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x4000);
|
|
||||||
UINT16 colour = (blackt96_tilemapram2[count*2 + (base/2)]&0x00ff);
|
|
||||||
|
|
||||||
drawgfx_transpen(bitmap,cliprect,gfxspr,tile,colour,flipx,0,x*16,y*16,0);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
count = 0;
|
|
||||||
base = 0x3000;
|
|
||||||
for (x=0;x<32;x++)
|
|
||||||
{
|
|
||||||
for (y=0;y<32;y++)
|
|
||||||
{
|
|
||||||
UINT16 tile = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x1fff);
|
|
||||||
UINT16 flipx = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x4000);
|
|
||||||
UINT16 colour = (blackt96_tilemapram2[count*2 + (base/2)]&0x00ff);
|
|
||||||
|
|
||||||
drawgfx_transpen(bitmap,cliprect,gfxspr,tile,colour,flipx,0,x*16,y*16,0);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
count = 0;
|
|
||||||
base = 0x3800;
|
|
||||||
for (x=0;x<32;x++)
|
|
||||||
{
|
|
||||||
for (y=0;y<32;y++)
|
|
||||||
{
|
|
||||||
UINT16 tile = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x1fff);
|
|
||||||
UINT16 flipx = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x4000);
|
|
||||||
UINT16 colour = (blackt96_tilemapram2[count*2 + (base/2)]&0x00ff);
|
|
||||||
|
|
||||||
drawgfx_transpen(bitmap,cliprect,gfxspr,tile,colour,flipx,0,x*16,y*16,0);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
base = 0x4000;
|
|
||||||
for (x=0;x<32;x++)
|
|
||||||
{
|
|
||||||
for (y=0;y<32;y++)
|
|
||||||
{
|
|
||||||
UINT16 tile = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x1fff);
|
|
||||||
UINT16 flipx = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x4000);
|
|
||||||
UINT16 colour = (blackt96_tilemapram2[count*2 + (base/2)]&0x00ff);
|
|
||||||
|
|
||||||
drawgfx_transpen(bitmap,cliprect,gfxspr,tile,colour,flipx,0,x*16,y*16,0);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
base = 0x4800;
|
|
||||||
for (x=0;x<32;x++)
|
|
||||||
{
|
|
||||||
for (y=0;y<32;y++)
|
|
||||||
{
|
|
||||||
UINT16 tile = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x1fff);
|
|
||||||
UINT16 flipx = (blackt96_tilemapram2[count*2 + (base/2)+1]&0x4000);
|
|
||||||
UINT16 colour = (blackt96_tilemapram2[count*2 + (base/2)]&0x00ff);
|
|
||||||
|
|
||||||
drawgfx_transpen(bitmap,cliprect,gfxspr,tile,colour,flipx,0,x*16,y*16,0);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Text Layer */
|
/* Text Layer */
|
||||||
count = 0;
|
count = 0;
|
||||||
@ -168,15 +136,11 @@ static VIDEO_UPDATE( blackt96 )
|
|||||||
for (y=0;y<32;y++)
|
for (y=0;y<32;y++)
|
||||||
{
|
{
|
||||||
UINT16 tile = (blackt96_tilemapram[count*2]&0x7ff)+0x800; // +0xc00 for korean text
|
UINT16 tile = (blackt96_tilemapram[count*2]&0x7ff)+0x800; // +0xc00 for korean text
|
||||||
drawgfx_transpen(bitmap,cliprect,gfx,tile,0,0,0,x*8,y*8,0);
|
drawgfx_transpen(bitmap,cliprect,gfx,tile,0,0,0,x*8,-16+y*8,0);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +167,7 @@ static ADDRESS_MAP_START( blackt96_map, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW2")
|
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW2")
|
||||||
|
|
||||||
AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE(&blackt96_tilemapram) // text tilemap
|
AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE(&blackt96_tilemapram) // text tilemap
|
||||||
AM_RANGE(0x200000, 0x207fff) AM_RAM AM_BASE(&blackt96_tilemapram2)// sprite list?
|
AM_RANGE(0x200000, 0x207fff) AM_RAM AM_BASE(&blackt96_tilemapram2)// sprite list + sprite tilemaps
|
||||||
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xxxxRRRRGGGGBBBB_word_w) AM_BASE(&paletteram16)
|
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xxxxRRRRGGGGBBBB_word_w) AM_BASE(&paletteram16)
|
||||||
AM_RANGE(0xc00000, 0xc03fff) AM_RAM // main ram
|
AM_RANGE(0xc00000, 0xc03fff) AM_RAM // main ram
|
||||||
|
|
||||||
@ -443,7 +407,7 @@ static const gfx_layout blackt962_layout =
|
|||||||
16,16,
|
16,16,
|
||||||
RGN_FRAC(1,1),
|
RGN_FRAC(1,1),
|
||||||
4,
|
4,
|
||||||
{ 0, 24, 8, 16 },
|
{ 0,24,8, 16 },
|
||||||
{ 519, 515, 518, 514, 517,513, 516,512, 7,3,6,2,5,1,4,0 },
|
{ 519, 515, 518, 514, 517,513, 516,512, 7,3,6,2,5,1,4,0 },
|
||||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,8*32,9*32,10*32,11*32,12*32,13*32,14*32,15*32 },
|
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,8*32,9*32,10*32,11*32,12*32,13*32,14*32,15*32 },
|
||||||
32*32
|
32*32
|
||||||
@ -486,9 +450,9 @@ static MACHINE_DRIVER_START( blackt96 )
|
|||||||
MDRV_SCREEN_REFRESH_RATE(60)
|
MDRV_SCREEN_REFRESH_RATE(60)
|
||||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||||
MDRV_SCREEN_SIZE(64*16, 64*8)
|
MDRV_SCREEN_SIZE(256, 256)
|
||||||
// MDRV_SCREEN_VISIBLE_AREA(0*8, 16*32-1, 0*8, 16*32-1)
|
// MDRV_SCREEN_VISIBLE_AREA(0*8, 16*32-1, 0*8, 16*32-1)
|
||||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 8*32-1, 2*8, 8*30-1)
|
MDRV_SCREEN_VISIBLE_AREA(0*8, 256-1, 0*8, 208-1)
|
||||||
|
|
||||||
MDRV_PALETTE_LENGTH(0x800)
|
MDRV_PALETTE_LENGTH(0x800)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user