|
|
| version 1.1, 2003/10/16 17:58:17 | version 1.7, 2004/02/09 20:39:39 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "memory.h" | #include "cpucore.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| #include "scrndraw.h" | |
| #include "vram.h" | #include "vram.h" |
| #include "scrndraw.h" | |
| #include "dispsync.h" | |
| #include "maketext.h" | #include "maketext.h" |
| #include "font.h" | #include "font.h" |
| #include "dispsync.h" | |
| TRAM_T tramflag; | TRAM_T tramflag; |
| Line 125 BYTE maketext_curblink(void) { | Line 125 BYTE maketext_curblink(void) { |
| void maketext(int text_renewal) { | void maketext(int text_renewal) { |
| UINT8 multiple; | |
| BYTE TEXT_LR; | BYTE TEXT_LR; |
| int TEXT_PL; | int TEXT_PL; |
| int TEXT_BL; | int TEXT_BL; |
| Line 148 void maketext(int text_renewal) { | Line 149 void maketext(int text_renewal) { |
| int linecnt; | int linecnt; |
| BYTE *q; | BYTE *q; |
| UINT y; | UINT y; |
| BYTE line_effect; | BYTE line_effect = 0; // for gcc |
| int x; | int x; |
| UINT32 bitmap[TEXTXMAX]; | UINT32 bitmap[TEXTXMAX]; |
| BYTE curx[TEXTXMAX+1]; | BYTE curx[TEXTXMAX+1]; |
| Line 158 void maketext(int text_renewal) { | Line 159 void maketext(int text_renewal) { |
| tramflag.gaiji = 0; | tramflag.gaiji = 0; |
| } | } |
| multiple = ((!(gdc.mode1 & 8)) && (!(gdc.crt15khz & 1)))?0x20:0x00; | |
| TEXT_LR = gdc.m.para[GDC_CSRFORM] & 0x1f; | TEXT_LR = gdc.m.para[GDC_CSRFORM] & 0x1f; |
| TEXT_PL = crtc.reg.pl; | TEXT_PL = crtc.reg.pl; |
| TEXT_BL = crtc.reg.bl + 1; | TEXT_BL = crtc.reg.bl + 1; |
| Line 191 void maketext(int text_renewal) { | Line 193 void maketext(int text_renewal) { |
| pitch = gdc.m.para[GDC_PITCH] & 0xfe; | pitch = gdc.m.para[GDC_PITCH] & 0xfe; |
| csrw = LOADINTELWORD(gdc.m.para + GDC_CSRW); | csrw = LOADINTELWORD(gdc.m.para + GDC_CSRW); |
| esi = LOADINTELWORD(gdc.m.para + GDC_SCROLL); | esi = LOW12(LOADINTELWORD(gdc.m.para + GDC_SCROLL)); |
| esi &= 0xfff; | |
| scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + 2); | scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + 2); |
| scroll = (scroll >> 4) & 0x3ff; | scroll = LOW14(scroll) >> 4; |
| scrp = 0; | scrp = 0; |
| wait1 = 0; | wait1 = 0; |
| Line 227 void maketext(int text_renewal) { | Line 228 void maketext(int text_renewal) { |
| new_flag = 1; | new_flag = 1; |
| break; | break; |
| } | } |
| edi = (edi + 1) & 0xfff; | edi = LOW12(edi + 1); |
| } | } |
| } | } |
| if (new_flag) { | if (new_flag) { |
| Line 266 void maketext(int text_renewal) { | Line 267 void maketext(int text_renewal) { |
| } | } |
| else { | else { |
| bitmap[x] = 0x82000 + | bitmap[x] = 0x82000 + |
| (mem[0xa0000 + edi*2] << 3); | (mem[0xa0000 + edi*2] << 4); |
| curx[x] |= 0x20; // ver0.28 | curx[x] |= multiple; // ver0.74 |
| if ((curx[x] & TXTATR_BG) && (gdc.mode1 & 1)) { | if ((curx[x] & TXTATR_BG) && (gdc.mode1 & 1)) { |
| bitmap[x] += 0x800; | bitmap[x] += 8; |
| } | } |
| } | } |
| } | } |
| Line 299 void maketext(int text_renewal) { | Line 300 void maketext(int text_renewal) { |
| bitmap[x] += 8; | bitmap[x] += 8; |
| } | } |
| else if (!(gdc.mode1 & 8)) { | else if (!(gdc.mode1 & 8)) { |
| curx[x] |= 0x20; | curx[x] |= multiple; |
| } | } |
| } | } |
| lastbitp = bitmap[x]; | lastbitp = bitmap[x]; |
| Line 312 void maketext(int text_renewal) { | Line 313 void maketext(int text_renewal) { |
| bitmap[x] = 0; | bitmap[x] = 0; |
| } | } |
| } | } |
| edi = (edi+1) & 0x0fff; // width80 | edi = LOW12(edi + 1); |
| } | } |
| if (!tramflag.curdisp) { | if (!tramflag.curdisp) { |
| cur_line = -1; | cur_line = -1; |
| } | } |
| } | } |
| esi = (esi + pitch) & 0x0fff; // ver0.26 | esi = LOW12(esi + pitch); |
| } | } |
| if ((!TEXT_SDR) && (nowline >= topline + crtc.reg.ssl)) { | if ((!TEXT_SDR) && (nowline >= topline + crtc.reg.ssl)) { |
| Line 349 void maketext(int text_renewal) { | Line 350 void maketext(int text_renewal) { |
| // width80 | // width80 |
| for (x=0; x<TEXTXMAX; x++) { | for (x=0; x<TEXTXMAX; x++) { |
| int fntline; | int fntline; |
| BYTE data; | UINT8 data; |
| fntline = nowline & 0x0f; | fntline = nowline; |
| if (curx[x] & 0x20) { | if (curx[x] & 0x20) { |
| fntline >>= 1; | fntline >>= 1; |
| } | } |
| data = font[bitmap[x] + fntline]; | data = fontrom[bitmap[x] + (fntline & 0x0f)]; |
| *(UINT32 *)(q+0) = text_table[color[x] + (data >> 4)]; | *(UINT32 *)(q+0) = text_table[color[x] + (data >> 4)]; |
| *(UINT32 *)(q+4) = text_table[color[x] + (data & 15)]; | *(UINT32 *)(q+4) = text_table[color[x] + (data & 15)]; |
| q += 8; | q += 8; |
| Line 410 void maketext(int text_renewal) { | Line 411 void maketext(int text_renewal) { |
| y++; | y++; |
| if (!(--scroll)) { | if (!(--scroll)) { |
| scrp = (scrp + 4) & 0x0c; | scrp = (scrp + 4) & 0x0c; |
| esi = LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp); | esi = LOW12(LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp)); |
| esi &= 0xfff; | |
| scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp + 2); | scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp + 2); |
| scroll = (scroll >> 4) & 0x3ff; | scroll = LOW14(scroll) >> 4; |
| reloadline = TRUE; | reloadline = TRUE; |
| } | } |
| } | } |
| Line 436 void maketext(int text_renewal) { | Line 436 void maketext(int text_renewal) { |
| void maketext40(int text_renewal) { | void maketext40(int text_renewal) { |
| UINT8 multiple; | |
| BYTE TEXT_LR; | BYTE TEXT_LR; |
| int TEXT_PL; | int TEXT_PL; |
| int TEXT_BL; | int TEXT_BL; |
| Line 459 void maketext40(int text_renewal) { | Line 460 void maketext40(int text_renewal) { |
| int linecnt; | int linecnt; |
| BYTE *q; | BYTE *q; |
| UINT y; | UINT y; |
| BYTE line_effect; | BYTE line_effect = 0; // for gcc |
| int x; | int x; |
| UINT32 bitmap[TEXTXMAX]; | UINT32 bitmap[TEXTXMAX]; |
| BYTE curx[TEXTXMAX+1]; | BYTE curx[TEXTXMAX+1]; |
| Line 469 void maketext40(int text_renewal) { | Line 470 void maketext40(int text_renewal) { |
| tramflag.gaiji = 0; | tramflag.gaiji = 0; |
| } | } |
| multiple = ((!(gdc.mode1 & 8)) && (!(gdc.crt15khz & 1)))?0x20:0x00; | |
| TEXT_LR = gdc.m.para[GDC_CSRFORM] & 0x1f; | TEXT_LR = gdc.m.para[GDC_CSRFORM] & 0x1f; |
| TEXT_PL = crtc.reg.pl; | TEXT_PL = crtc.reg.pl; |
| TEXT_BL = crtc.reg.bl + 1; | TEXT_BL = crtc.reg.bl + 1; |
| Line 502 void maketext40(int text_renewal) { | Line 504 void maketext40(int text_renewal) { |
| pitch = gdc.m.para[GDC_PITCH] & 0xfe; | pitch = gdc.m.para[GDC_PITCH] & 0xfe; |
| csrw = LOADINTELWORD(gdc.m.para + GDC_CSRW); | csrw = LOADINTELWORD(gdc.m.para + GDC_CSRW); |
| esi = LOADINTELWORD(gdc.m.para + GDC_SCROLL); | esi = LOW12(LOADINTELWORD(gdc.m.para + GDC_SCROLL)); |
| esi &= 0xfff; | |
| scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + 2); | scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + 2); |
| scroll = (scroll >> 4) & 0x3ff; | scroll = LOW14(scroll) >> 4; |
| scrp = 0; | scrp = 0; |
| wait1 = 0; | wait1 = 0; |
| Line 538 void maketext40(int text_renewal) { | Line 539 void maketext40(int text_renewal) { |
| new_flag = 1; | new_flag = 1; |
| break; | break; |
| } | } |
| edi = (edi + 1) & 0xfff; | edi = LOW12(edi + 1); |
| } | } |
| } | } |
| if (new_flag) { | if (new_flag) { |
| Line 577 void maketext40(int text_renewal) { | Line 578 void maketext40(int text_renewal) { |
| } | } |
| else { | else { |
| bitmap[x] = 0x82000 + | bitmap[x] = 0x82000 + |
| (mem[0xa0000 + edi*2] << 3); | (mem[0xa0000 + edi*2] << 4); |
| curx[x] |= 0x20; // ver0.28 | curx[x] |= multiple; // ver0.74 |
| if ((curx[x] & TXTATR_BG) && (gdc.mode1 & 1)) { | if ((curx[x] & TXTATR_BG) && (gdc.mode1 & 1)) { |
| bitmap[x] += 0x800; | bitmap[x] += 8; |
| } | } |
| } | } |
| } | } |
| Line 610 void maketext40(int text_renewal) { | Line 611 void maketext40(int text_renewal) { |
| bitmap[x] += 8; | bitmap[x] += 8; |
| } | } |
| else if (!(gdc.mode1 & 8)) { | else if (!(gdc.mode1 & 8)) { |
| curx[x] |= 0x20; | curx[x] |= multiple; |
| } | } |
| } | } |
| lastbitp = bitmap[x]; | lastbitp = bitmap[x]; |
| Line 623 void maketext40(int text_renewal) { | Line 624 void maketext40(int text_renewal) { |
| bitmap[x] = 0; | bitmap[x] = 0; |
| } | } |
| } | } |
| edi = (edi+2) & 0x0fff; // width40 | edi = LOW12(edi + 2); // width40 |
| } | } |
| if (!tramflag.curdisp) { | if (!tramflag.curdisp) { |
| cur_line = -1; | cur_line = -1; |
| } | } |
| } | } |
| esi = (esi + pitch) & 0x0fff; // ver0.26 | esi = LOW12(esi + pitch); |
| } | } |
| if ((!TEXT_SDR) && (nowline >= topline + crtc.reg.ssl)) { | if ((!TEXT_SDR) && (nowline >= topline + crtc.reg.ssl)) { |
| Line 661 void maketext40(int text_renewal) { | Line 662 void maketext40(int text_renewal) { |
| for (x=0; x<(TEXTXMAX/2); x++) { | for (x=0; x<(TEXTXMAX/2); x++) { |
| int fntline; | int fntline; |
| BYTE data; | BYTE data; |
| fntline = nowline & 0x0f; | fntline = nowline; |
| if (curx[x] & 0x20) { | if (curx[x] & 0x20) { |
| fntline >>= 1; | fntline >>= 1; |
| } | } |
| data = font[bitmap[x] + fntline]; | data = fontrom[bitmap[x] + (fntline & 0x0f)]; |
| *(UINT32 *)(q+ 0) = text_tblx2[color[x] + | *(UINT32 *)(q+ 0) = text_tblx2[color[x] + |
| (data>>4)][0]; | (data>>4)][0]; |
| *(UINT32 *)(q+ 4) = text_tblx2[color[x] + | *(UINT32 *)(q+ 4) = text_tblx2[color[x] + |
| Line 735 void maketext40(int text_renewal) { | Line 736 void maketext40(int text_renewal) { |
| y++; | y++; |
| if (!(--scroll)) { | if (!(--scroll)) { |
| scrp = (scrp + 4) & 0x0c; | scrp = (scrp + 4) & 0x0c; |
| esi = LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp); | esi = LOW12(LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp)); |
| esi &= 0xfff; | |
| scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp + 2); | scroll = LOADINTELWORD(gdc.m.para + GDC_SCROLL + scrp + 2); |
| scroll = (scroll >> 4) & 0x3ff; | scroll = LOW14(scroll) >> 4; |
| reloadline = TRUE; | reloadline = TRUE; |
| } | } |
| } | } |