|
|
| version 1.1, 2004/08/07 07:19:56 | version 1.2, 2004/08/07 10:53:01 |
|---|---|
| Line 10 | Line 10 |
| MAKESCRN makescrn; | MAKESCRN makescrn; |
| BYTE updatetmp[0x800+0x101]; | |
| BYTE scrnallflash; | BYTE scrnallflash; |
| BYTE blinktest = 0; | BYTE blinktest = 0; |
| Line 18 | Line 17 |
| extern BYTE dispmode; | extern BYTE dispmode; |
| static BYTE lastdisp = 0; | static BYTE lastdisp = 0; |
| BYTE dispflg = UPDATE_VRAM0; | BYTE dispflg; |
| BYTE *dispp = &GRP_RAM[GRAM_BANK0]; | BYTE *dispp = &GRP_RAM[GRAM_BANK0]; |
| BYTE *dispp2 = &GRP_RAM[GRAM_BANK1]; | BYTE *dispp2 = &GRP_RAM[GRAM_BANK1]; |
| static BYTE blinktime = 1; | static BYTE blinktime = 1; |
| Line 31 void init_draw(void) { | Line 30 void init_draw(void) { |
| makesub_initialize(); | makesub_initialize(); |
| reflesh_palette(); | reflesh_palette(); |
| lastdisp = 0; | lastdisp = 0; |
| dispflg = UPDATE_VRAM0; | dispflg = UPDATE_TRAM | UPDATE_VRAM0; |
| dispp = &GRP_RAM[GRAM_BANK0]; | dispp = &GRP_RAM[GRAM_BANK0]; |
| } | } |
| static void fillupdatetmp(void) { | |
| void fillupdatetmp(void) { | UINT32 *p; |
| UINT i; | |
| __asm { | p = (UINT32 *)updatetmp; |
| mov ebx, offset updatetmp | for (i=0; i<0x200; i++) { |
| mov ecx, 0x200 | p[i] |= (UPDATE_TVRAM << 24) | (UPDATE_TVRAM << 16) | |
| filludt_lp: or dword ptr [ebx], (UPDATE_TVRAM * 01010101h) | (UPDATE_TVRAM << 8) | UPDATE_TVRAM; |
| add ebx, 4 | } |
| loop filludt_lp | |
| } | |
| } | } |
| #if 1 | |
| static void flashupdatetmp(void) { | |
| UINT posl; | |
| UINT y; | |
| UINT x; | |
| UINT r; | |
| UINT posr; | |
| BRESULT y2; | |
| REG16 atr; | |
| REG16 udtbase; | |
| REG16 udt; | |
| posl = crtc.s.TXT_TOP; | |
| y = crtc.s.TXT_YL; | |
| do { | |
| for (x=0; x<crtc.s.TXT_XL; x++) { | |
| if (!(tram[TRAM_ATR + LOW11(posl + x)] & X1ATR_Yx2)) { | |
| break; | |
| } | |
| } | |
| y2 = (x < crtc.s.TXT_XL)?FALSE:TRUE; | |
| udtbase = (x < crtc.s.TXT_XL)?0x0000:0x0404; | |
| r = (crtc.s.TXT_XL + 1) >> 1; | |
| do { | |
| posr = LOW11(posl + 1); | |
| atr = (tram[TRAM_ATR + posl] << 8) | tram[TRAM_ATR + posr]; | |
| udt = udtbase; | |
| if (!y2) { | |
| if (atr & (X1ATR_Yx2 << 8)) { | |
| udt |= (UPDATE_TRAM | 1) << 8; // º¸ÄÙ¤ì½ÄÇÜ³Ñ | |
| } | |
| else { | |
| y2 = TRUE; | |
| } | |
| } | |
| if (!y2) { | |
| if (atr & (X1ATR_Yx2 << 0)) { | |
| udt |= (UPDATE_TRAM | 1) << 0; // ±¦ÄÙ¤ì½ÄÇÜ³Ñ | |
| } | |
| else { | |
| y2 = TRUE; | |
| } | |
| } | |
| if (atr & (X1ATR_Xx2 << 8)) { // º¸Â¦ÇܳÑ? | |
| udt |= 0x0812; | |
| } | |
| if (atr & (X1ATR_Xx2 << 0)) { // ±¦Â¦ÇܳÑ? | |
| udt |= 0x0008; | |
| } | |
| if ((updatetmp[posl] ^ (udt >> 8)) & 0x1f) { | |
| updatetmp[posl] = (UINT8)((udt >> 8) | UPDATE_TVRAM); | |
| } | |
| if ((updatetmp[posr] ^ (udt >> 0)) & 0x1f) { | |
| updatetmp[posr] = (UINT8)((udt >> 0) | UPDATE_TVRAM); | |
| } | |
| posl = LOW11(posl + 2); | |
| } while(--r); | |
| if (crtc.s.TXT_XL & 1) { | |
| posl = LOW11(posl - 1); | |
| } | |
| } while(--y); | |
| } | |
| #else | |
| static LABEL void flashupdatetmp(void) { | static LABEL void flashupdatetmp(void) { |
| __asm { | __asm { |
| Line 145 nextlinecheck: inc dl | Line 208 nextlinecheck: inc dl |
| ret | ret |
| } | } |
| } | } |
| #endif | |
| void updateblink(void) { | static BRESULT updateblink(void) { |
| __asm { | UINT pos; |
| dec blinktime | REG8 update; |
| jns blinkupflg_ed | UINT r; |
| mov blinktime, 30-1 | |
| push edi | if (blinktime) { |
| movzx edi, crtc.s.TXT_TOP | blinktime--; |
| mov ax, 010h | return(FALSE); |
| xor blinktest, al | } |
| mov cx, word ptr (makescrn.vramsize) | else { |
| or cx, cx | blinktime = 30 - 1; |
| je blinkupflg | pos = makescrn.vramtop; |
| blinktest ^= 0x10; | |
| blinkup_lp: test tram[TRAM_ATR + edi], al | update = 0; |
| je short blinknup_ed | r = makescrn.vramsize; |
| mov ah, UPDATE_TVRAM | while(r) { |
| or updatetmp[edi], ah | r--; |
| blinknup_ed: inc edi | if (tram[TRAM_ATR + pos] & 0x10) { |
| dec cx | updatetmp[pos] |= UPDATE_TRAM; |
| jne blinkup_lp | update = UPDATE_TRAM; |
| or makescrn.scrnflash, ah | } |
| shr ah, 5 | pos = LOW11(pos + 1); |
| blinkupflg: pop edi | } |
| mov makescrn.existblink, ah | if (update) { |
| blinkupflg_ed: | makescrn.existblink = 1; |
| return(TRUE); | |
| } | |
| else { | |
| return(FALSE); | |
| } | } |
| } | |
| } | } |
| Line 187 static void x1vram_adjust(void) { | Line 256 static void x1vram_adjust(void) { |
| UINT charcy; | UINT charcy; |
| UINT surfcy; | UINT surfcy; |
| makescrn.vramtop = LOW11(crtc.s.TXT_TOP); | |
| if (crtc.s.TXT_XL <= 40) { | if (crtc.s.TXT_XL <= 40) { |
| if (dispmode & SCRN_DRAW4096) { | if (dispmode & SCRN_DRAW4096) { |
| widthmode = SCRNWIDTHMODE_4096; | widthmode = SCRNWIDTHMODE_4096; |
| Line 238 static void x1vram_adjust(void) { | Line 309 static void x1vram_adjust(void) { |
| } | } |
| makescrn.surfcy = surfcy; | makescrn.surfcy = surfcy; |
| makescrn.surfstep = (SURFACE_WIDTH * charcy * 2) - (makescrn.surfcx * 8); | makescrn.surfstep = (SURFACE_WIDTH * charcy * 2) - (makescrn.surfcx * 8); |
| makescrn.vramsize = min(0x800, charcy * crtc.s.TXT_XL); | makescrn.vramsize = min(0x800, surfcy * crtc.s.TXT_XL); |
| scrnmng_setheight(0, charcy * surfcy * 2); | scrnmng_setheight(0, charcy * surfcy * 2); |
| } | } |
| Line 277 void scrnupdate(void) { | Line 348 void scrnupdate(void) { |
| if (!(dispmode & SCRN_BANK1)) { | if (!(dispmode & SCRN_BANK1)) { |
| dispp = GRP_RAM + GRAM_BANK0; | dispp = GRP_RAM + GRAM_BANK0; |
| dispp2 = GRP_RAM + GRAM_BANK1; | dispp2 = GRP_RAM + GRAM_BANK1; |
| dispflg = UPDATE_VRAM0; | dispflg = UPDATE_TRAM | UPDATE_VRAM0; |
| } | } |
| else { | else { |
| dispp = GRP_RAM + GRAM_BANK1; | dispp = GRP_RAM + GRAM_BANK1; |
| dispp2 = GRP_RAM + GRAM_BANK0; | dispp2 = GRP_RAM + GRAM_BANK0; |
| dispflg = UPDATE_VRAM1; | dispflg = UPDATE_TRAM | UPDATE_VRAM1; |
| } | } |
| } | } |
| if (scrnallflash) { | if (scrnallflash) { |
| Line 301 void scrnupdate(void) { | Line 372 void scrnupdate(void) { |
| ddrawflash = 1; | ddrawflash = 1; |
| } | } |
| if (makescrn.existblink) { | if (makescrn.existblink) { |
| updateblink(); | makescrn.scrnflash |= updateblink(); |
| } | } |
| if (makescrn.scrnflash) { | if (makescrn.scrnflash) { |