PS55DA2: cleanup, remove unused code

This commit is contained in:
Akamaki
2025-04-04 08:55:14 +09:00
parent b4f3e06c1e
commit beb417cc85

View File

@@ -490,20 +490,6 @@ getFontIBMJ(int32_t code, int line, int x, void *p)
font <<= 8; font <<= 8;
font |= da2->mmio.ram[code + 1]; font |= da2->mmio.ram[code + 1];
font <<= 16; font <<= 16;
return font;
}
if ((code >= 0x8000) && (code <= 0x8183))
code -= 0x6000; /* shift for IBM extended characters */
if ((code < (DA2_FONTROM_SIZE / 72)) && (fline >= 0) && (fline < 24)) { /* DBCS 24x24 */
code = (code * 72) + (fline * 3) + x;
// font = da2->mmio.font[code]; /* 0000 0000 0000 0000 0000 0000 1111 1111 */
// font <<= 8; /* 0000 0000 0000 0000 1111 1111 0000 0000 */
// font |= da2->mmio.font[code + 1] & 0xf0; /* 0000 0000 0000 0000 1111 1111 2222 0000 */
// font <<= 3; /* 0000 0000 0000 0111 1111 1222 2000 0000 */
// font |= da2->mmio.font[code + 1] & 0x0f; /* 0000 0000 0000 0111 1111 1222 2000 2222 */
// font <<= 8; /* 0000 0111 1111 1222 2000 2222 0000 0000 */
// font |= da2->mmio.font[code + 2]; /* 0000 0111 1111 1222 2000 2222 3333 3333 */
// font <<= 4; /* 0111 1111 1222 2000 2222 3333 3333 0000 */
} else if ((code >= 0xb000) && (code <= 0xb75f)) { /* DBCS 26x29 */ } else if ((code >= 0xb000) && (code <= 0xb75f)) { /* DBCS 26x29 */
/* convert code->address in gaiji memory */ /* convert code->address in gaiji memory */
code -= 0xb000; code -= 0xb000;
@@ -515,9 +501,7 @@ getFontIBMJ(int32_t code, int line, int x, void *p)
font |= da2->mmio.ram[code + 2]; font |= da2->mmio.ram[code + 2];
font <<= 8; font <<= 8;
font |= da2->mmio.ram[code + 3]; font |= da2->mmio.ram[code + 3];
// font <<= 16; }
} else if (code > (DA2_FONTROM_SIZE / 72))
font = 0xffffffffu;
else else
font = 0; font = 0;
return font; return font;
@@ -594,7 +578,7 @@ Param Desc
01 Color 01 Color
03 Bit Shift 03 Bit Shift
04 Select plane? 04 Select plane?
05 Dir(1000h or 1100h) + Command?(40 or 48) 05 Direction (1000h or 1100h) + Command? (40 or 48)
08 Mask Left 08 Mask Left
09 Mask Right 09 Mask Right
0A Plane Mask? 0A Plane Mask?
@@ -607,15 +591,19 @@ Param Desc
0-3 Bit op (0 None, 1 AND, 2 OR, 3 XOR) 0-3 Bit op (0 None, 1 AND, 2 OR, 3 XOR)
0D 0D
20 Exec (1) or Exec without reset regs? (21h) 20 Exec (1) or Exec without reset regs? (21h)
21 ? 21 Dest Pitch
22 ? 22 Src Pitch
23 Tile W 23 Tile W
28 Tile H 28 Tile H
29 Dest Addr 29 Dest Addr
2A Src Addr 2A Src Addr
2B Tile Addr 2B Tile Addr
33 Size W 2D Octant for line drawing
35 Size H 2F Dest Write Option
32 wx1, Dest X
33 wx2, Size W
34 wy1, Dest Y
35 wy2, Size H
*/ */
static void static void
DA2_CopyPlaneDataWithBitmask(uint32_t srcaddr, uint32_t destaddr, uint16_t mask, da2_t *da2) DA2_CopyPlaneDataWithBitmask(uint32_t srcaddr, uint32_t destaddr, uint16_t mask, da2_t *da2)
@@ -642,55 +630,42 @@ static void
DA2_PutcharWithBitmask(uint32_t codeIBMJ, int width, uint16_t attr, int line, uint32_t destaddr, uint16_t maskl, uint16_t maskr, da2_t *da2) DA2_PutcharWithBitmask(uint32_t codeIBMJ, int width, uint16_t attr, int line, uint32_t destaddr, uint16_t maskl, uint16_t maskr, da2_t *da2)
{ {
pixel32 srcpx; pixel32 srcpx;
// if (codeIBMJ >= DA2_FONTROM_SIZE / 72) { uint8_t fg = (~attr >> 8) & 0x0f;
// da2_log("DA2 Putchar Addr Error %x\n", srcaddr);
// return;
// }
uint8_t color = (~attr >> 8) & 0x0f;
// color = IBGRtoIRGB(color);
uint8_t bg = (~attr >> 12) & 0x0f; uint8_t bg = (~attr >> 12) & 0x0f;
// bg = 0x00;
// bg = IBGRtoIRGB(bg);
uint32_t font = getFontIBMJ(codeIBMJ, line, 0, da2); uint32_t font = getFontIBMJ(codeIBMJ, line, 0, da2);
uint32_t fontinv; uint32_t fontinv;
if (width <= 2) { if (width <= 2) {
fontinv = ~font; fontinv = ~font;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
srcpx.p8[i] = (color & (1 << i)) ? font >> 16 : 0; srcpx.p8[i] = (fg & (1 << i)) ? font >> 16 : 0;
srcpx.p8[i] |= (bg & (1 << i)) ? fontinv >> 16 : 0; srcpx.p8[i] |= (bg & (1 << i)) ? fontinv >> 16 : 0;
} }
// pclog("putchar: %08X mask %04X %04X\n", srcpx.p8[0], maskl, maskr);
DA2_WritePlaneDataWithBitmask(destaddr, maskl, &srcpx, da2); DA2_WritePlaneDataWithBitmask(destaddr, maskl, &srcpx, da2);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
srcpx.p8[i] = (color & (1 << i)) ? font : 0; srcpx.p8[i] = (fg & (1 << i)) ? font : 0;
srcpx.p8[i] |= (bg & (1 << i)) ? fontinv : 0; srcpx.p8[i] |= (bg & (1 << i)) ? fontinv : 0;
} }
// pclog("putchar: %08X mask %04X %04X\n", srcpx.p8[0], maskl, maskr);
DA2_WritePlaneDataWithBitmask(destaddr + 2, maskr, &srcpx, da2); DA2_WritePlaneDataWithBitmask(destaddr + 2, maskr, &srcpx, da2);
} else { } else {
font = (font & 0xfff80000) | ((font & 0x0000ffff) << 3); font = (font & 0xfff80000) | ((font & 0x0000ffff) << 3);
fontinv = ~font; fontinv = ~font;
// pclog("putchar: ft %08X shftr %X\n", font, da2->bitblt.bitshift_destr);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
srcpx.p8[i] = (color & (1 << i)) ? font >> 16 : 0; srcpx.p8[i] = (fg & (1 << i)) ? font >> 16 : 0;
srcpx.p8[i] |= (bg & (1 << i)) ? fontinv >> 16 : 0; srcpx.p8[i] |= (bg & (1 << i)) ? fontinv >> 16 : 0;
} }
// pclog("putchar: %08X mask %04X\n", srcpx.p8[3], maskl);
DA2_WritePlaneDataWithBitmask(destaddr, maskl, &srcpx, da2); DA2_WritePlaneDataWithBitmask(destaddr, maskl, &srcpx, da2);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
srcpx.p8[i] = (color & (1 << i)) ? font : 0; srcpx.p8[i] = (fg & (1 << i)) ? font : 0;
srcpx.p8[i] |= (bg & (1 << i)) ? fontinv : 0; srcpx.p8[i] |= (bg & (1 << i)) ? fontinv : 0;
} }
// pclog("putchar: %08X mask %04X\n", srcpx.p8[3], maskr);
if (da2->bitblt.destoption & 0x20) { if (da2->bitblt.destoption & 0x20) {
DA2_WritePlaneDataWithBitmask(destaddr + 2, maskr, &srcpx, da2); DA2_WritePlaneDataWithBitmask(destaddr + 2, maskr, &srcpx, da2);
} else { } else {
DA2_WritePlaneDataWithBitmask(destaddr + 2, 0xffff, &srcpx, da2); DA2_WritePlaneDataWithBitmask(destaddr + 2, 0xffff, &srcpx, da2);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
srcpx.p8[i] = (color & (1 << i)) ? font << 16 : 0; srcpx.p8[i] = (fg & (1 << i)) ? font << 16 : 0;
srcpx.p8[i] |= (bg & (1 << i)) ? fontinv << 16 : 0; srcpx.p8[i] |= (bg & (1 << i)) ? fontinv << 16 : 0;
} }
// pclog("putchar: %08X mask %04X %04X\n", srcpx.p8[3], maskl, maskr);
DA2_WritePlaneDataWithBitmask(destaddr + 4, maskr, &srcpx, da2); DA2_WritePlaneDataWithBitmask(destaddr + 4, maskr, &srcpx, da2);
} }
} }
@@ -772,16 +747,6 @@ da2_bitblt_parse(da2_t *da2)
{ {
uint32_t value32; uint32_t value32;
uint64_t value64; uint64_t value64;
#ifdef ENABLE_DA2_DEBUGBLT
// da2_log("bltload: loading params\n");
// da2_log("BitBlt memory:\n");
// if (da2->bitblt.payload[0] != 0)
// for (int j = 0; j < DA2_BLT_MEMSIZE / 8; j++) {
// int i = j * 8;
// da2_log("%02x %02x %02x %02x %02x %02x %02x %02x \n", da2->bitblt.payload[i], da2->bitblt.payload[1], da2->bitblt.payload[2], da2->bitblt.payload[3],
// da2->bitblt.payload[4], da2->bitblt.payload[5], da2->bitblt.payload[6], da2->bitblt.payload[7]);
// }
#endif
switch (da2->bitblt.payload[0]) { switch (da2->bitblt.payload[0]) {
case 0x88: case 0x88:
case 0x89: case 0x89:
@@ -858,8 +823,6 @@ da2_bitblt_parse(da2_t *da2)
static void static void
da2_bitblt_load(da2_t *da2) da2_bitblt_load(da2_t *da2)
{ {
/* [89] 20: 0001 (1) then execute payload */
// if (da2->bitblt.reg[0x20] & 0x1) {
da2->bitblt.reg[0x20] = 0; /* need to stop execution */ da2->bitblt.reg[0x20] = 0; /* need to stop execution */
#ifdef ENABLE_DA2_DEBUGBLT #ifdef ENABLE_DA2_DEBUGBLT
for (int i = 0; i < DA2_DEBUG_BLTLOG_SIZE; i++) { for (int i = 0; i < DA2_DEBUG_BLTLOG_SIZE; i++) {
@@ -878,10 +841,8 @@ da2_bitblt_load(da2_t *da2)
da2->bitblt.size_y = da2->bitblt.reg[0x35]; da2->bitblt.size_y = da2->bitblt.reg[0x35];
da2->bitblt.destpitch = da2->bitblt.reg[0x21]; da2->bitblt.destpitch = da2->bitblt.reg[0x21];
da2->bitblt.srcpitch = da2->bitblt.reg[0x22]; da2->bitblt.srcpitch = da2->bitblt.reg[0x22];
/* 80h = 128d = 10000000b, 90h = 144d = 10010000b, B0h = 176d = 10110000 */
/* /*
DOS/V Extension 1040x725 some DBCS uses 0xB0 others 0x90 DOS/V Extension 1040x725 some DBCS uses 0xB0 others 0x90
B0: BitShift is 1-6
*/ */
da2->bitblt.destoption = da2->bitblt.reg[0x2F]; da2->bitblt.destoption = da2->bitblt.reg[0x2F];
if (da2->bitblt.destoption & 0x10) /* destaddr -= 2, length += 1; */ if (da2->bitblt.destoption & 0x10) /* destaddr -= 2, length += 1; */
@@ -898,21 +859,12 @@ da2_bitblt_load(da2_t *da2)
da2->bitblt.y = 0; da2->bitblt.y = 0;
da2->bitblt.exec = DA2_BLT_CDONE; da2->bitblt.exec = DA2_BLT_CDONE;
/* Put DBCS char used by OS/2 (i'm not sure what the condition is) */ /* Put DBCS char used by OS/2 and DOS/V Extension */
if (!(da2->bitblt.reg[0xb] & 0x08)) { if (!(da2->bitblt.reg[0xb] & 0x08)) {
da2->bitblt.exec = DA2_BLT_CPUTCHAR; da2->bitblt.exec = DA2_BLT_CPUTCHAR;
/* Todo: addressing */
// if (da2->bitblt.reg[0x2F] == 0x90) /* destaddr -= 2, length += 1; */
//{
// da2->bitblt.destaddr += 2;
// da2->bitblt.size_x -= 1;
// da2->bitblt.destpitch += 2;
// da2->bitblt.srcpitch += 2;
// }
da2->bitblt.fcolor = da2->bitblt.reg[0x1]; da2->bitblt.fcolor = da2->bitblt.reg[0x1];
da2->bitblt.srcaddr = da2->bitblt.reg[0x12]; da2->bitblt.srcaddr = da2->bitblt.reg[0x12];
da2->bitblt.destaddr += 2; da2->bitblt.destaddr += 2;
// da2->bitblt.srcpitch = 0;
#ifdef ENABLE_DA2_DEBUGBLT #ifdef ENABLE_DA2_DEBUGBLT
uint8_t sjis_h = IBMJtoSJIS(da2->bitblt.reg[0x12]) >> 8; uint8_t sjis_h = IBMJtoSJIS(da2->bitblt.reg[0x12]) >> 8;
uint8_t sjis_l = IBMJtoSJIS(da2->bitblt.reg[0x12]) & 0xff; uint8_t sjis_l = IBMJtoSJIS(da2->bitblt.reg[0x12]) & 0xff;
@@ -1020,9 +972,7 @@ da2_log("put char src=%x, dest=%x, x=%d, y=%d, w=%d, h=%d\n",
da2->bitblt.reg[0x2A] % (da2->rowoffset * 2), da2->bitblt.reg[0x2A] / (da2->rowoffset * 2), da2->bitblt.reg[0x2A] % (da2->rowoffset * 2), da2->bitblt.reg[0x2A] / (da2->rowoffset * 2),
da2->bitblt.reg[0x29] % (da2->rowoffset * 2), da2->bitblt.reg[0x29] / (da2->rowoffset * 2), da2->bitblt.reg[0x29] % (da2->rowoffset * 2), da2->bitblt.reg[0x29] / (da2->rowoffset * 2),
da2->bitblt.size_x, da2->bitblt.size_y); da2->bitblt.size_x, da2->bitblt.size_y);
// da2_log(" mask8=%x, mask9=%x\n", da2->bitblt.reg[0x8], da2->bitblt.reg[0x9]);
} }
// }
} }
static void static void
da2_bitblt_exec(void *p) da2_bitblt_exec(void *p)
@@ -1046,7 +996,6 @@ da2_bitblt_exec(void *p)
break; break;
case DA2_BLT_CLINE: case DA2_BLT_CLINE:
/* Draw a dot */ /* Draw a dot */
// outb(0x680, da2->bitblt.octdir);
da2_bltlog("point: %d %d %d %d %d\n", da2->bitblt.x, da2->bitblt.y, da2->bitblt.d, da2->bitblt.x, da2->bitblt.y); da2_bltlog("point: %d %d %d %d %d\n", da2->bitblt.x, da2->bitblt.y, da2->bitblt.d, da2->bitblt.x, da2->bitblt.y);
int destaddr = da2->bitblt.y * (da2->rowoffset * 2) + da2->bitblt.x / 8; int destaddr = da2->bitblt.y * (da2->rowoffset * 2) + da2->bitblt.x / 8;
int pixelmask = da2->bitblt.x % 16; int pixelmask = da2->bitblt.x % 16;
@@ -1061,7 +1010,6 @@ da2_bitblt_exec(void *p)
; ;
else else
DA2_DrawColorWithBitmask(destaddr, da2->bitblt.fcolor, pixelmask, da2); DA2_DrawColorWithBitmask(destaddr, da2->bitblt.fcolor, pixelmask, da2);
// da2_log("draw: %x %x %x\n", destaddr, da2->bitblt.fcolor, pixelmask);
da2->bitblt.count++; da2->bitblt.count++;
/* calculate the next position with Bresenham's line algorithm */ /* calculate the next position with Bresenham's line algorithm */
@@ -1182,26 +1130,14 @@ da2_bitblt_exec(void *p)
da2->bitblt.srcaddr -= 2; da2->bitblt.srcaddr -= 2;
break; break;
case DA2_BLT_CPUTCHAR: /* used in OS/2 J1.3 wo ROM patch. TODO: still not work */ case DA2_BLT_CPUTCHAR: /* used in OS/2 J1.3 wo ROM patch. TODO: still not work */
// da2->bitblt.destaddr = da2->bitblt.reg[0x29] + da2->bitblt.y * 130;
// da2->bitblt.srcaddr += 2;
// if (da2->bitblt.reg[0x12] < 0x100)
// da2->bitblt.srcaddr = DA2_FONTROM_BASESBCS + da2->bitblt.reg[0x12] * 64 + (da2->bitblt.x * 2) + (da2->bitblt.y * 2) - 2;
// else
// da2->bitblt.srcaddr = da2->bitblt.reg[0x12] * 72 + (da2->bitblt.x * 2) + (da2->bitblt.y * 3) - 2;
// da2->bitblt.srcaddr = da2->bitblt.reg[0x12];
// da2->bitblt.size_x = da2->bitblt.reg[0x33];
// pclog("scr %x dest %x x %x y %x\n", da2->bitblt.srcaddr, da2->bitblt.destaddr, da2->bitblt.x, da2->bitblt.y); // pclog("scr %x dest %x x %x y %x\n", da2->bitblt.srcaddr, da2->bitblt.destaddr, da2->bitblt.x, da2->bitblt.y);
if (da2->bitblt.y >= da2->bitblt.size_y) { if (da2->bitblt.y >= da2->bitblt.size_y) {
da2->bitblt.exec = DA2_BLT_CDONE; da2->bitblt.exec = DA2_BLT_CDONE;
} else { } else {
DA2_PutcharWithBitmask(da2->bitblt.srcaddr, da2->bitblt.size_x, da2->bitblt.fcolor, da2->bitblt.y, da2->bitblt.destaddr, da2->bitblt.maskl, da2->bitblt.maskr, da2); DA2_PutcharWithBitmask(da2->bitblt.srcaddr, da2->bitblt.size_x, da2->bitblt.fcolor, da2->bitblt.y, da2->bitblt.destaddr, da2->bitblt.maskl, da2->bitblt.maskr, da2);
} }
da2->bitblt.y++; da2->bitblt.y++;
da2->bitblt.destaddr += da2->bitblt.size_x * 2 + da2->bitblt.destpitch + 2; da2->bitblt.destaddr += da2->bitblt.size_x * 2 + da2->bitblt.destpitch + 2;
// }
// da2->bitblt.destaddr = da2->bitblt.reg[0x29] + da2->bitblt.x + da2->bitblt.y * 130 + 2;
////da2->bitblt.srcaddr += 2;
// da2->bitblt.srcaddr = da2->bitblt.reg[0x12] * 72 + (da2->bitblt.x * 2 ) + (da2->bitblt.y * 3) + 2;
break; break;
case DA2_BLT_CDONE: case DA2_BLT_CDONE:
// if (!(da2->bitblt.reg[0x20] & 0x20)) { // if (!(da2->bitblt.reg[0x20] & 0x20)) {
@@ -1352,12 +1288,6 @@ da2_out(uint16_t addr, uint16_t val, void *p)
val = 0x400; /* for debugging bitblt in Win 3.x */ val = 0x400; /* for debugging bitblt in Win 3.x */
#endif #endif
break; break;
// case LC_START_ADDRESS_HIGH:
// if (val == 0xff) /* adjust (need to confirm) */
// val = 0;
// case LC_START_ADDRESS_LOW:
// val = 0;
// break;
} }
da2->crtc[da2->crtcaddr] = val; da2->crtc[da2->crtcaddr] = val;
switch (da2->crtcaddr) { switch (da2->crtcaddr) {
@@ -1406,7 +1336,6 @@ da2_out(uint16_t addr, uint16_t val, void *p)
case LV_PORT: case LV_PORT:
// da2_iolog("DA2 Out addr %03X val %02X ff %d %04X:%04X\n", addr, val, da2->attrff,cs >> 4, cpu_state.pc); // da2_iolog("DA2 Out addr %03X val %02X ff %d %04X:%04X\n", addr, val, da2->attrff,cs >> 4, cpu_state.pc);
if (!da2->attrff) { if (!da2->attrff) {
// da2->attraddr = val & 31;
da2->attraddr = val & 0x3f; da2->attraddr = val & 0x3f;
if ((val & 0x20) != (da2->attr_palette_enable & 0x20)) { if ((val & 0x20) != (da2->attr_palette_enable & 0x20)) {
da2->fullchange = 3; da2->fullchange = 3;
@@ -1596,11 +1525,7 @@ da2_in(uint16_t addr, void *p)
case LC_DATA: case LC_DATA:
if (da2->crtcaddr > 0x1f) if (da2->crtcaddr > 0x1f)
return DA2_INVALIDACCESS16; return DA2_INVALIDACCESS16;
// if ((da2->crtcaddr == LC_START_ADDRESS_HIGH || da2->crtcaddr == LC_START_ADDRESS_LOW) temp = da2->crtc[da2->crtcaddr];
// & (da2->crtc[LC_VIEWPORT_SELECT] & 0x80))
// temp = 0;
// else
temp = da2->crtc[da2->crtcaddr];
break; break;
case LV_PORT: case LV_PORT:
temp = da2->attraddr | da2->attr_palette_enable; temp = da2->attraddr | da2->attr_palette_enable;
@@ -1699,9 +1624,6 @@ da2_outw(uint16_t addr, uint16_t val, void *p)
break; break;
case 0x3EC: case 0x3EC:
// da2_iolog("DA2 Outw addr %03X val %04X %04X:%04X\n", addr, val, cs >> 4, cpu_state.pc); // da2_iolog("DA2 Outw addr %03X val %04X %04X:%04X\n", addr, val, cs >> 4, cpu_state.pc);
da2_iolog(" ");
// val = rightRotate(val, 8);
// da2_out(LG_DATA, val, da2);
da2_out(LG_DATA, val >> 8, da2); da2_out(LG_DATA, val >> 8, da2);
/* reset masks for compatibility with Win 3.1 solitaire */ /* reset masks for compatibility with Win 3.1 solitaire */
if (da2->gdcaddr == LG_MODE) { if (da2->gdcaddr == LG_MODE) {
@@ -2347,18 +2269,11 @@ da2_recalctimings(da2_t *da2)
double crtcconst; double crtcconst;
double _dispontime, _dispofftime, disptime; double _dispontime, _dispofftime, disptime;
// /* if output disabled or VGA passthrough */
// if (da2->ioctl[LS_MODE] & 0x02 || !(da2->attrc[LV_COMPATIBILITY] & 0x08)) {
// da2->render = da2_render_blank;
// return;
// }
da2->vtotal = da2->crtc[LC_VERTICAL_TOTALJ] & 0xfff; da2->vtotal = da2->crtc[LC_VERTICAL_TOTALJ] & 0xfff;
da2->dispend = da2->crtc[LC_V_DISPLAY_ENABLE_END] & 0xfff; da2->dispend = da2->crtc[LC_V_DISPLAY_ENABLE_END] & 0xfff;
da2->vsyncstart = da2->crtc[LC_VERTICAL_SYNC_START] & 0xfff; da2->vsyncstart = da2->crtc[LC_VERTICAL_SYNC_START] & 0xfff;
da2->split = da2->crtc[LC_LINE_COMPAREJ] & 0xfff; da2->split = da2->crtc[LC_LINE_COMPAREJ] & 0xfff;
da2->split -= 1; da2->split -= 1;
// da2->split = 0xfff;
da2->vblankstart = da2->crtc[LC_START_VERTICAL_BLANK] & 0xfff; da2->vblankstart = da2->crtc[LC_START_VERTICAL_BLANK] & 0xfff;
da2->hdisp = da2->crtc[LC_H_DISPLAY_ENABLE_END]; da2->hdisp = da2->crtc[LC_H_DISPLAY_ENABLE_END];
@@ -2374,21 +2289,16 @@ da2_recalctimings(da2_t *da2)
da2->clock = da2->da2const; da2->clock = da2->da2const;
// da2->lowres = da2->attrc[LV_MODE_CONTROL] & 0x40;
// da2->interlace = 0;
// if (da2->crtc[LC_VIEWPORT_SELECT] & 0x80 || da2->split == 0)
if (da2->vtotal == 0) if (da2->vtotal == 0)
da2->vtotal = da2->vsyncstart = da2->vblankstart = 256; da2->vtotal = da2->vsyncstart = da2->vblankstart = 256;
if (da2->htotal == 0) if (da2->htotal == 0)
da2->htotal = da2->dispend = da2->hdisp = 64; da2->htotal = da2->dispend = da2->hdisp = 64;
if (da2->rowoffset == 0) if (da2->rowoffset == 0)
da2->rowoffset = 64 * 2; /* To avoid causing a DBZ error */ da2->rowoffset = 64 * 2; /* To avoid causing a DBZ error */
if (da2->split == 0) if (da2->split == 0) /* To avoid a glitch in MODE 1 of OS/2 J1.3 DOSBox. */
da2->ma_latch = 0; da2->ma_latch = 0;
else else
da2->ma_latch = ((da2->crtc[LC_START_ADDRESS_HIGH] & 0x3ff) << 8) | da2->crtc[LC_START_ADDRESS_LOW]; // w + b da2->ma_latch = ((da2->crtc[LC_START_ADDRESS_HIGH] & 0x3ff) << 8) | da2->crtc[LC_START_ADDRESS_LOW];
da2->ca_adj = 0; da2->ca_adj = 0;
da2->rowcount = da2->crtc[LC_MAXIMUM_SCAN_LINE]; da2->rowcount = da2->crtc[LC_MAXIMUM_SCAN_LINE];
@@ -2427,15 +2337,6 @@ da2_recalctimings(da2_t *da2)
da2->hdisp *= 13; da2->hdisp *= 13;
da2->char_width = 13; da2->char_width = 13;
} }
// if (!da2->scrblank && da2->attr_palette_enable)
//{
// da2->render = da2_draw_text;
//}
// da2_log("da2_render %08X : %08X %08X %08X %08X %08X %i %i %02X %i %i\n", da2_render, da2_render_text_40, da2_render_text_80, da2_render_8bpp_lowres, da2_render_8bpp_highres, da2_render_blank, scrblank,gdcreg[6]&1,gdcreg[5]&0x60,bpp,seqregs[1]&8);
// if (da2->recalctimings_ex)
// da2->recalctimings_ex(da2);
if (da2->vblankstart < da2->dispend) if (da2->vblankstart < da2->dispend)
da2->dispend = da2->vblankstart; da2->dispend = da2->vblankstart;
@@ -2446,7 +2347,7 @@ da2_recalctimings(da2_t *da2)
_dispontime = da2->hdisp_time; _dispontime = da2->hdisp_time;
da2_log("Disptime %f dispontime %f hdisp %i\n", disptime, _dispontime, da2->hdisp); da2_log("Disptime %f dispontime %f hdisp %i\n", disptime, _dispontime, da2->hdisp);
// if (da2->seqregs[1] & 8) { disptime *= 2; _dispontime *= 2; }
_dispofftime = disptime - _dispontime; _dispofftime = disptime - _dispontime;
_dispontime *= crtcconst; _dispontime *= crtcconst;
_dispofftime *= crtcconst; _dispofftime *= crtcconst;
@@ -2785,10 +2686,8 @@ da2_mmio_write(uint32_t addr, uint8_t val, void *p)
index = da2->fctl[LF_MMIO_MODE] & 0x0f; index = da2->fctl[LF_MMIO_MODE] & 0x0f;
index <<= 8; index <<= 8;
index |= da2->fctl[LF_MMIO_ADDR]; index |= da2->fctl[LF_MMIO_ADDR];
// addr += index * 0x40; // da2_log("da2_mmio_w io %x, sl %x, 09 %x, ad %x, mm %x, addr %x, val %x\n", da2->ioctl[LS_MMIO],da2->fctl[LF_MMIO_SEL],
// addr += index * 0x80; // da2->fctl[LF_MMIO_09],da2->fctl[LF_MMIO_ADDR], da2->fctl[LF_MMIO_MODE], addr, val);
da2_log("da2_mmio_w io %x, sl %x, 09 %x, ad %x, mm %x, addr %x, val %x\n", da2->ioctl[LS_MMIO],da2->fctl[LF_MMIO_SEL],
da2->fctl[LF_MMIO_09],da2->fctl[LF_MMIO_ADDR], da2->fctl[LF_MMIO_MODE], addr, val);
} }
switch (da2->fctl[LF_MMIO_MODE] & 0xf0) { switch (da2->fctl[LF_MMIO_MODE] & 0xf0) {
case 0xb0: /* Gaiji RAM 1011 0000 */ case 0xb0: /* Gaiji RAM 1011 0000 */
@@ -2802,12 +2701,6 @@ da2_mmio_write(uint32_t addr, uint8_t val, void *p)
addr += index * 0x40; addr += index * 0x40;
da2->mmio.ram[(DA2_GAIJIRAM_SBCS + addr) & DA2_MASK_GAIJIRAM] = val; da2->mmio.ram[(DA2_GAIJIRAM_SBCS + addr) & DA2_MASK_GAIJIRAM] = val;
// da2_log("da2_mmio_write %x %x %04X:%04X\n", addr, val, CS, cpu_state.pc); // da2_log("da2_mmio_write %x %x %04X:%04X\n", addr, val, CS, cpu_state.pc);
// addr &= 0x7f;/* OS/2 write addr 1cf80-1cfc3, val xx */
// if (addr >= DA2_BLT_MEMSIZE)
//{
// da2_log("da2_mmio_write failed mem %x, addr %x, val %x\n", da2->fctl[LF_MMIO_MODE], addr, val);
// return;
// }
break; break;
default: default:
da2_log("da2_mmio_write failed io %x, mm %x, addr %x, val %x\n", da2->ioctl[LS_MMIO] ,da2->fctl[LF_MMIO_MODE], addr, val); da2_log("da2_mmio_write failed io %x, mm %x, addr %x, val %x\n", da2->ioctl[LS_MMIO] ,da2->fctl[LF_MMIO_MODE], addr, val);
@@ -3138,8 +3031,6 @@ da2_poll(void *priv)
// da2_log("%03i %06X %06X\n", da2->displine, da2->ma,da2->vram_display_mask); // da2_log("%03i %06X %06X\n", da2->displine, da2->ma,da2->vram_display_mask);
da2->displine++; da2->displine++;
// if (da2->interlace)
// da2->displine++;
if ((da2->cgastat & 8) && ((da2->displine & 0xf) == (da2->crtc[LC_VERTICAL_SYNC_END] & 0xf)) && da2->vslines) { if ((da2->cgastat & 8) && ((da2->displine & 0xf) == (da2->crtc[LC_VERTICAL_SYNC_END] & 0xf)) && da2->vslines) {
// da2_log("Vsync off at line %i\n",displine); // da2_log("Vsync off at line %i\n",displine);
da2->cgastat &= ~8; da2->cgastat &= ~8;
@@ -3153,7 +3044,6 @@ da2_poll(void *priv)
// da2_log("VC %i ma %05X\n", da2->vc, da2->ma); // da2_log("VC %i ma %05X\n", da2->vc, da2->ma);
timer_advance_u64(&da2->timer, da2->dispontime); timer_advance_u64(&da2->timer, da2->dispontime);
// if (output) printf("Display on %f\n",vidtime);
if (da2->dispon) if (da2->dispon)
da2->cgastat &= ~1; da2->cgastat &= ~1;
da2->hdisp_on = 0; da2->hdisp_on = 0;