diff options
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 |
commit | f0dad1a2584c97fc8927fc5e9060dbd0489dfe2d (patch) | |
tree | e8ab8b2e8e41b20fc50d42b5f3f015f2e3b6c679 | |
parent | aaa98beff20b748b14d3f52768b4c736244f3ba6 (diff) |
tvi990: WIP (nw)
-rw-r--r-- | src/mame/drivers/tv990.cpp | 125 |
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)]; + } } - } + } } } |