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