summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2016-07-24 19:43:11 -0500
committer cracyc <cracyc@users.noreply.github.com>2016-07-24 19:43:11 -0500
commitf0dad1a2584c97fc8927fc5e9060dbd0489dfe2d (patch)
treee8ab8b2e8e41b20fc50d42b5f3f015f2e3b6c679
parentaaa98beff20b748b14d3f52768b4c736244f3ba6 (diff)
tvi990: WIP (nw)
-rw-r--r--src/mame/drivers/tv990.cpp125
1 files changed, 65 insertions, 60 deletions
diff --git a/src/mame/drivers/tv990.cpp b/src/mame/drivers/tv990.cpp
index 574cf9eeee8..6e5da4f3a23 100644
--- a/src/mame/drivers/tv990.cpp
+++ b/src/mame/drivers/tv990.cpp
@@ -173,75 +173,80 @@ UINT32 tv990_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, c
UINT8 *fontptr;
int miny = cliprect.min_y / 16;
int maxy = cliprect.max_y / 16;
- int minx = cliprect.min_x / 16;
- int maxx = cliprect.max_x / 16;
-
+
for (y = miny; y <= maxy; y++)
{
// this isn't exactly right.
- int i;
- for(i = 0x50; i < 0x68; i++)
+ int i, minx, maxx;
+ for(i = 0; i < 8; i++)
{
- if(tvi1111_regs[i] != 0x1ad5)
- break;
- }
- curchar = &vram[tvi1111_regs[i]];
+ if(tvi1111_regs[i + 0x50] == 0x1ad5)
+ continue;
- for (x = minx; x <= maxx; x++)
- {
- fontptr = (UINT8 *)&fontram[(((curchar[x]>>8) & 0xff) + (curchar[x] & 0x40 ? 256 : 0)) * 64];
-
- for (int chary = 0; chary < 16; chary++)
+ curchar = &vram[tvi1111_regs[i + 0x50]];
+ minx = tvi1111_regs[i + 0x30] >> 8;
+ maxx = tvi1111_regs[i + 0x30] & 0xff;
+
+ if(maxx > 79)
+ maxx = 79;
+ for (x = minx; x <= maxx; x++)
{
- scanline = &bitmap.pix32((y*16)+chary, (x*16));
-
- pixels = *fontptr++;
- pixels2 = *fontptr++;
- if((curchar[x] & 0x8) && (chary == 15))
- {
- pixels = 0xff;
- pixels2 = 0xff;
- }
+ UINT8 chr = curchar[x - minx] >> 8;
+ UINT8 attr = curchar[x - minx] & 0xff;
+ fontptr = (UINT8 *)&fontram[(chr + (attr & 0x40 ? 256 : 0)) * 64];
- if (curchar[x] & 0x4) // inverse video?
- {
- *scanline++ = invpalette[(pixels>>7)&1];
- *scanline++ = invpalette[(pixels2>>7)&1];
- *scanline++ = invpalette[(pixels>>6)&1];
- *scanline++ = invpalette[(pixels2>>6)&1];
- *scanline++ = invpalette[(pixels>>5)&1];
- *scanline++ = invpalette[(pixels2>>5)&1];
- *scanline++ = invpalette[(pixels>>4)&1];
- *scanline++ = invpalette[(pixels2>>4)&1];
- *scanline++ = invpalette[(pixels>>3)&1];
- *scanline++ = invpalette[(pixels2>>3)&1];
- *scanline++ = invpalette[(pixels>>2)&1];
- *scanline++ = invpalette[(pixels2>>2)&1];
- *scanline++ = invpalette[(pixels>>1)&1];
- *scanline++ = invpalette[(pixels2>>1)&1];
- *scanline++ = invpalette[(pixels&1)];
- *scanline++ = invpalette[(pixels2&1)];
- }
- else
+ for (int chary = 0; chary < 16; chary++)
{
- *scanline++ = palette[(pixels>>7)&1];
- *scanline++ = palette[(pixels2>>7)&1];
- *scanline++ = palette[(pixels>>6)&1];
- *scanline++ = palette[(pixels2>>6)&1];
- *scanline++ = palette[(pixels>>5)&1];
- *scanline++ = palette[(pixels2>>5)&1];
- *scanline++ = palette[(pixels>>4)&1];
- *scanline++ = palette[(pixels2>>4)&1];
- *scanline++ = palette[(pixels>>3)&1];
- *scanline++ = palette[(pixels2>>3)&1];
- *scanline++ = palette[(pixels>>2)&1];
- *scanline++ = palette[(pixels2>>2)&1];
- *scanline++ = palette[(pixels>>1)&1];
- *scanline++ = palette[(pixels2>>1)&1];
- *scanline++ = palette[(pixels&1)];
- *scanline++ = palette[(pixels2&1)];
+ scanline = &bitmap.pix32((y*16)+chary, (x*16));
+
+ pixels = *fontptr++;
+ pixels2 = *fontptr++;
+ if((attr & 0x8) && (chary == 15))
+ {
+ pixels = 0xff;
+ pixels2 = 0xff;
+ }
+
+ if (attr & 0x4) // inverse video?
+ {
+ *scanline++ = invpalette[(pixels>>7)&1];
+ *scanline++ = invpalette[(pixels2>>7)&1];
+ *scanline++ = invpalette[(pixels>>6)&1];
+ *scanline++ = invpalette[(pixels2>>6)&1];
+ *scanline++ = invpalette[(pixels>>5)&1];
+ *scanline++ = invpalette[(pixels2>>5)&1];
+ *scanline++ = invpalette[(pixels>>4)&1];
+ *scanline++ = invpalette[(pixels2>>4)&1];
+ *scanline++ = invpalette[(pixels>>3)&1];
+ *scanline++ = invpalette[(pixels2>>3)&1];
+ *scanline++ = invpalette[(pixels>>2)&1];
+ *scanline++ = invpalette[(pixels2>>2)&1];
+ *scanline++ = invpalette[(pixels>>1)&1];
+ *scanline++ = invpalette[(pixels2>>1)&1];
+ *scanline++ = invpalette[(pixels&1)];
+ *scanline++ = invpalette[(pixels2&1)];
+ }
+ else
+ {
+ *scanline++ = palette[(pixels>>7)&1];
+ *scanline++ = palette[(pixels2>>7)&1];
+ *scanline++ = palette[(pixels>>6)&1];
+ *scanline++ = palette[(pixels2>>6)&1];
+ *scanline++ = palette[(pixels>>5)&1];
+ *scanline++ = palette[(pixels2>>5)&1];
+ *scanline++ = palette[(pixels>>4)&1];
+ *scanline++ = palette[(pixels2>>4)&1];
+ *scanline++ = palette[(pixels>>3)&1];
+ *scanline++ = palette[(pixels2>>3)&1];
+ *scanline++ = palette[(pixels>>2)&1];
+ *scanline++ = palette[(pixels2>>2)&1];
+ *scanline++ = palette[(pixels>>1)&1];
+ *scanline++ = palette[(pixels2>>1)&1];
+ *scanline++ = palette[(pixels&1)];
+ *scanline++ = palette[(pixels2&1)];
+ }
}
- }
+ }
}
}