--- xmil/io/cgrom.c 2004/08/01 05:31:30 1.1 +++ xmil/io/cgrom.c 2008/06/02 20:07:31 1.4 @@ -6,16 +6,16 @@ void IOOUTCALL cgrom_o(UINT port, REG8 value) { - switch(port & 0x0f) { - case 0: // 0x0e80 + switch(port) { + case 0x0e80: cgrom.reg[0] = value; break; - case 1: // 0x0e81 + case 0x0e81: cgrom.reg[1] = value; break; - case 2: // 0x0e82 + case 0x0e82: cgrom.face = (LOADINTELWORD(cgrom.reg) & (~15)); break; } @@ -25,27 +25,27 @@ REG8 IOINPCALL cgrom_i(UINT port) { REG8 ret; + if ((port & (~1)) != 0x0e80) { + return(0xff); + } ret = 0; - port &= 0x000f; if (cgrom.reg[1]) { - switch(port) { - case 0: // 0x0e80 - ret = font_knjx1[cgrom.face + cgrom.count]; - cgrom.flag |= 1; - break; - - case 1: // 0x0e81 - ret = font_knjx1[cgrom.face + cgrom.count + FONTX1_LR]; - cgrom.flag |= 2; - break; + if (!(port & 1)) { /* 0x0e80 */ + ret = font_knjx1[cgrom.face + cgrom.count]; + cgrom.flag |= 1; + } + else { /* 0x0e81 */ + ret = font_knjx1[cgrom.face + cgrom.count + FONTX1_LR]; + cgrom.flag |= 2; } + /* 0x0e81 ポートリードの時だけインクリメントの筈だが…? */ if (cgrom.flag == 3) { cgrom.flag = 0; cgrom.count = (cgrom.count + 1) & 15; } } else { - if (port == 0) { // 0x0e80 + if (!(port & 1)) { /* 0x0e80 */ if (cgrom.reg[0] >= 0x30) { ret = 0x40 + ((cgrom.reg[0] - 0x30) * 6); } @@ -58,7 +58,7 @@ REG8 IOINPCALL cgrom_i(UINT port) { } -// ---- +/* reset */ void cgrom_reset(void) {