--- xmil/io/vramio.c 2004/08/07 10:53:01 1.4 +++ xmil/io/vramio.c 2008/06/02 20:07:31 1.8 @@ -5,119 +5,142 @@ #include "makescrn.h" -// ---- text +/* text */ -void IOOUTCALL tram_o(UINT port, REG8 value) { +void IOOUTCALL tram_atr_o(UINT port, REG8 value) { UINT addr; addr = LOW11(port); - if (port < 0x3000) { - if (tram[TRAM_ATR + addr] == value) { - return; - } - if ((tram[TRAM_ATR + addr] ^ value) & (X1ATR_Yx2 | X1ATR_Xx2)) { - makescrn.remakeattr = 1; - } - if (value & X1ATR_BLINK) { - makescrn.existblink = 1; - } - tram[TRAM_ATR + addr] = value; - } - else if ((port >= 0x3800) && (pccore.ROM_TYPE >= 2)) { - if (tram[TRAM_KNJ + addr] == value) { - return; - } - tram[TRAM_KNJ + addr] = value; - } - else { - if (tram[TRAM_ANK + addr] == value) { - return; - } - tram[TRAM_ANK + addr] = value; - } - makescrn.scrnflash = 1; - if (tram[TRAM_ATR + addr] & X1ATR_Xx2) { - updatetmp[LOW11(addr + 1)] |= UPDATE_TVRAM; + if (TRAM_ATR(addr) == value) { + return; + } + if ((TRAM_ATR(addr) ^ value) & (TRAMATR_Yx2 | TRAMATR_Xx2)) { + crtc.e.remakeattr = 1; + } + if (value & TRAMATR_BLINK) { + crtc.e.existblink = 1; + } + TRAM_ATR(addr) = value; + crtc.e.scrnflash = 1; + if (TRAM_ATR(addr) & TRAMATR_Xx2) { + TRAMUPDATE(LOW11(addr + 1)) |= UPDATE_TRAM; } - updatetmp[addr] |= UPDATE_TVRAM; + TRAMUPDATE(addr) |= UPDATE_TRAM; } -REG8 IOINPCALL tram_i(UINT port) { +void IOOUTCALL tram_ank_o(UINT port, REG8 value) { UINT addr; addr = LOW11(port); - if (port < 0x3000) { - return(tram[TRAM_ATR + addr]); + if (TRAM_ANK(addr) == value) { + return; } - else if ((port >= 0x3800) && (pccore.ROM_TYPE >= 2)) { - return(tram[TRAM_KNJ + addr]); + TRAM_ANK(addr) = value; + crtc.e.scrnflash = 1; + if (TRAM_ATR(addr) & TRAMATR_Xx2) { + TRAMUPDATE(LOW11(addr + 1)) |= UPDATE_TRAM; } - return(tram[TRAM_ANK + addr]); + TRAMUPDATE(addr) |= UPDATE_TRAM; } +void IOOUTCALL tram_knj_o(UINT port, REG8 value) { + + UINT addr; + + addr = LOW11(port); + if (TRAM_KNJ(addr) == value) { + return; + } + TRAM_KNJ(addr) = value; + crtc.e.scrnflash = 1; + if (TRAM_ATR(addr) & TRAMATR_Xx2) { + TRAMUPDATE(LOW11(addr + 1)) |= UPDATE_TRAM; + } + TRAMUPDATE(addr) |= UPDATE_TRAM; +} -// ---------------------------------------------------------------------- grph +REG8 IOINPCALL tram_atr_i(UINT port) { + + return(TRAM_ATR(LOW11(port))); +} + +REG8 IOINPCALL tram_ank_i(UINT port) { + + return(TRAM_ANK(LOW11(port))); +} + +REG8 IOINPCALL tram_knj_i(UINT port) { + + return(TRAM_KNJ(LOW11(port))); +} + + +/* grph */ void IOOUTCALL gram_o(UINT port, REG8 value) { UINT8 *p; - p = crtc.e.gram + (LOW11(port) << 5) + (port >> 11); + p = crtc.e.gramacc + PORT2GRAM(port); if (*p == value) { return; } *p = value; - updatetmp[port & crtc.e.updatemask] |= crtc.e.updatebit; - makescrn.scrnflash = 1; + TRAMUPDATE(port & crtc.e.updatemask) |= crtc.e.updatebit; + crtc.e.scrnflash = 1; } REG8 IOINPCALL gram_i(UINT port) { - return(crtc.e.gram[(LOW11(port) << 5) + (port >> 11)]); + return(crtc.e.gramacc[PORT2GRAM(port)]); } void IOOUTCALL gram2_o(UINT port, REG8 value) { UINT8 *p; - p = crtc.e.gram + (((port << 5) + (port >> 11)) & 0xffe7); - switch(port & 0xc000) { - case 0x0000: - p[PLANE_B] = value; - p[PLANE_R] = value; - p[PLANE_G] = value; + p = crtc.e.gramacc + PORT2GRAM2(port); + switch((port >> 14) & 3) { + case 0: + p[GRAM_B] = value; + p[GRAM_R] = value; + p[GRAM_G] = value; break; - case 0x4000: - p[PLANE_R] = value; - p[PLANE_G] = value; + case 1: + p[GRAM_R] = value; + p[GRAM_G] = value; break; - case 0x8000: - p[PLANE_B] = value; - p[PLANE_G] = value; + case 2: + p[GRAM_B] = value; + p[GRAM_G] = value; break; - case 0xc000: - p[PLANE_B] = value; - p[PLANE_R] = value; + case 3: + p[GRAM_B] = value; + p[GRAM_R] = value; break; } - updatetmp[port & crtc.e.updatemask] |= crtc.e.updatebit; - makescrn.scrnflash = 1; + TRAMUPDATE(port & crtc.e.updatemask) |= crtc.e.updatebit; + crtc.e.scrnflash = 1; } -// ---- +/* reset */ void vramio_reset(void) { - ZeroMemory(GRP_RAM, 0x20000); - ZeroMemory(tram, 0x01800); - memset(tram + TRAM_ATR, 0x07, 0x800); - memset(tram + TRAM_ANK, 0x20, 0x800); - ZeroMemory(updatetmp, sizeof(updatetmp)); + UINT i; + + ZeroMemory(gram, GRAM_SIZE); + for (i=0; i<0x800; i++) { + TRAM_ATR(i) = 0x07; + TRAM_ANK(i) = 0x20; + TRAM_KNJ(i) = 0x00; + TRAMUPDATE(i) = 0; + } }