|
|
| version 1.5, 2004/01/30 14:33:27 | version 1.16, 2004/02/20 16:20:41 |
|---|---|
| Line 16 enum { | Line 16 enum { |
| typedef struct { | typedef struct { |
| SINT16 x; | SINT16 x; |
| SINT16 y; | SINT16 y; |
| SINT16 sx; | SINT16 x2; |
| SINT16 sy; | SINT16 y2; |
| } TEXTDIR; | } VECTDIR; |
| const UINT32 gdcplaneseg[4] = {VRAM_E, VRAM_B, VRAM_R, VRAM_G}; | |
| static UINT16 gdc_rt[RT_TABLEMAX+1]; | static UINT16 gdc_rt[RT_TABLEMAX+1]; |
| static const TEXTDIR textdir[8] = { | static const VECTDIR vectdir[16] = { |
| { 0, 1, 1, 0}, { 1, 1, 1,-1}, | { 0, 1, 1, 0}, { 1, 1, 1,-1}, |
| { 1, 0, 0,-1}, { 1,-1,-1,-1}, | { 1, 0, 0,-1}, { 1,-1,-1,-1}, |
| { 0,-1,-1, 0}, {-1,-1,-1, 1}, | { 0,-1,-1, 0}, {-1,-1,-1, 1}, |
| {-1, 0, 0, 1}, {-1, 1, 1, 1}}; | {-1, 0, 0, 1}, {-1, 1, 1, 1}, |
| { 0, 1, 1, 1}, { 1, 1, 1, 0}, // SL | |
| { 1, 0, 1,-1}, { 1,-1, 0,-1}, | |
| { 0,-1,-1,-1}, {-1,-1,-1, 0}, | |
| {-1, 0,-1, 1}, {-1, 1, 0, 1}}; | |
| #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2) | |
| const UINT8 gdcbitreverse[0x100] = { | |
| 0x00, 0x01, 0x01, 0x03, 0x01, 0x05, 0x03, 0x07, | |
| 0x01, 0x09, 0x05, 0x0d, 0x03, 0x0b, 0x07, 0x0f, | |
| 0x01, 0x11, 0x09, 0x19, 0x05, 0x15, 0x0d, 0x1d, | |
| 0x03, 0x13, 0x0b, 0x1b, 0x07, 0x17, 0x0f, 0x1f, | |
| 0x01, 0x21, 0x11, 0x31, 0x09, 0x29, 0x19, 0x39, | |
| 0x05, 0x25, 0x15, 0x35, 0x0d, 0x2d, 0x1d, 0x3d, | |
| 0x03, 0x23, 0x13, 0x33, 0x0b, 0x2b, 0x1b, 0x3b, | |
| 0x07, 0x27, 0x17, 0x37, 0x0f, 0x2f, 0x1f, 0x3f, | |
| 0x01, 0x41, 0x21, 0x61, 0x11, 0x51, 0x31, 0x71, | |
| 0x09, 0x49, 0x29, 0x69, 0x19, 0x59, 0x39, 0x79, | |
| 0x05, 0x45, 0x25, 0x65, 0x15, 0x55, 0x35, 0x75, | |
| 0x0d, 0x4d, 0x2d, 0x6d, 0x1d, 0x5d, 0x3d, 0x7d, | |
| 0x03, 0x43, 0x23, 0x63, 0x13, 0x53, 0x33, 0x73, | |
| 0x0b, 0x4b, 0x2b, 0x6b, 0x1b, 0x5b, 0x3b, 0x7b, | |
| 0x07, 0x47, 0x27, 0x67, 0x17, 0x57, 0x37, 0x77, | |
| 0x0f, 0x4f, 0x2f, 0x6f, 0x1f, 0x5f, 0x3f, 0x7f, | |
| 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, | |
| 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, | |
| 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, | |
| 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, | |
| 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, | |
| 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, | |
| 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, | |
| 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, | |
| 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, | |
| 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, | |
| 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, | |
| 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, | |
| 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, | |
| 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, | |
| 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, | |
| 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff}; | |
| #else | |
| REG8 gdcbitreverse(REG8 data) { | |
| REG8 ret; | |
| UINT cnt; | |
| ret = 0; | |
| cnt = 8; | |
| do { | |
| ret = (ret * 2) + (data & 1); | |
| data >>= 1; | |
| } while(--cnt); | |
| return(ret); | |
| } | |
| #endif | |
| void gdcsub_init(void) { | void gdcsub_initialize(void) { |
| int i; | int i; |
| Line 46 void gdcslavewait(NEVENTITEM item) { | Line 104 void gdcslavewait(NEVENTITEM item) { |
| } | } |
| } | } |
| void gdcsub_setslavewait(UINT32 wait) { | |
| SINT32 clk; | |
| clk = nevent_getremain(NEVENT_GDCSLAVE); | |
| if (clk < 0) { | |
| clk = 0; | |
| } | |
| gdc.s_drawing = 8; // GDC DRAWING! | |
| nevent_set(NEVENT_GDCSLAVE, clk + wait, gdcslavewait, NEVENT_ABSOLUTE); | |
| } | |
| static void calc_gdcslavewait(UINT dots) { | static void calc_gdcslavewait(UINT dots) { |
| SINT32 clk; | SINT32 clk; |
| clk = dots; | clk = dots; |
| if (pccore.baseclock != PCBASECLOCK20) { | if (pccore.cpumode & CPUMODE_8MHZ) { |
| clk *= 27648; | clk *= 22464; |
| } | } |
| else { | else { |
| clk *= 22464; | clk *= 27648; |
| } | } |
| clk *= pccore.multiple; | clk *= pccore.multiple; |
| clk /= 15625; | clk /= 15625; |
| clk += 30 * pccore.multiple; | clk += 30 * pccore.multiple; |
| gdc.s_drawing = 8; // GDC DRAWING! | gdcsub_setslavewait(clk); |
| nevent_set(NEVENT_GDCSLAVE, clk, gdcslavewait, NEVENT_ABSOLUTE); | } |
| void gdcsub_vect0(UINT32 csrw, const GDCVECT *vect, REG16 pat, REG8 ope) { | |
| (void)csrw; | |
| (void)vect; | |
| (void)pat; | |
| (void)ope; | |
| } | } |
| void gdcsub_line(UINT32 csrw, const GDCVECT *vect, UINT16 pat, BYTE ope) { | void gdcsub_vectl(UINT32 csrw, const GDCVECT *vect, REG16 pat, REG8 ope) { |
| _GDCPSET pset; | _GDCPSET pset; |
| UINT dc; | UINT dc; |
| UINT16 x; | REG16 x; |
| UINT16 y; | REG16 y; |
| UINT i; | UINT i; |
| UINT16 step; | UINT16 step; |
| UINT d1; | UINT d1; |
| Line 87 void gdcsub_line(UINT32 csrw, const GDCV | Line 164 void gdcsub_line(UINT32 csrw, const GDCV |
| case 0: | case 0: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, (UINT16)(x + step), y++); | gdcpset(&pset, (REG16)(x + step), y++); |
| } | } |
| break; | break; |
| case 1: | case 1: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, x++, (UINT16)(y + step)); | gdcpset(&pset, x++, (REG16)(y + step)); |
| } | } |
| break; | break; |
| case 2: | case 2: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, x++, (UINT16)(y - step)); | gdcpset(&pset, x++, (REG16)(y - step)); |
| } | } |
| break; | break; |
| case 3: | case 3: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, (UINT16)(x + step), y--); | gdcpset(&pset, (REG16)(x + step), y--); |
| } | } |
| break; | break; |
| case 4: | case 4: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, (UINT16)(x - step), y--); | gdcpset(&pset, (REG16)(x - step), y--); |
| } | } |
| break; | break; |
| case 5: | case 5: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, x--, (UINT16)(y - step)); | gdcpset(&pset, x--, (REG16)(y - step)); |
| } | } |
| break; | break; |
| case 6: | case 6: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, x--, (UINT16)(y + step)); | gdcpset(&pset, x--, (REG16)(y + step)); |
| } | } |
| break; | break; |
| case 7: | case 7: |
| for (i=0; i<=dc; i++) { | for (i=0; i<=dc; i++) { |
| step = (UINT16)((((d1 * i) / dc) + 1) >> 1); | step = (UINT16)((((d1 * i) / dc) + 1) >> 1); |
| gdcpset(&pset, (UINT16)(x - step), y++); | gdcpset(&pset, (REG16)(x - step), y++); |
| } | } |
| break; | break; |
| } | } |
| Line 144 void gdcsub_line(UINT32 csrw, const GDCV | Line 221 void gdcsub_line(UINT32 csrw, const GDCV |
| calc_gdcslavewait(pset.dots); | calc_gdcslavewait(pset.dots); |
| } | } |
| void gdcsub_box(UINT32 csrw, const GDCVECT *vect, UINT16 pat, BYTE ope) { | void gdcsub_vectt(UINT32 csrw, const GDCVECT *vect, REG16 pat, REG8 ope) { |
| _GDCPSET pset; | _GDCPSET pset; |
| UINT d; | BYTE multiple; |
| UINT d2; | UINT sx; |
| UINT16 x; | const VECTDIR *dir; |
| UINT16 y; | BYTE muly; |
| UINT i; | REG16 cx; |
| REG16 cy; | |
| gdcpset_prepare(&pset, csrw, pat, ope); | UINT xrem; |
| d = (LOADINTELWORD(vect->D)) & 0x3fff; | BYTE mulx; |
| d2 = (LOADINTELWORD(vect->D2)) & 0x3fff; | |
| x = pset.x; | |
| y = pset.y; | |
| // 回転はなしよ(手抜き) | |
| switch((vect->ope) & 7) { | |
| case 0: | |
| for (i=0; i<d; i++) { | |
| gdcpset(&pset, x, y++); | |
| } | |
| for (i=0; i<d2; i++) { | |
| gdcpset(&pset, x++, y); | |
| } | |
| for (i=0; i<d; i++) { | |
| gdcpset(&pset, x, y--); | |
| } | |
| for (i=0; i<d2; i++) { | |
| gdcpset(&pset, x--, y); | |
| } | |
| break; | |
| case 2: | |
| for (i=0; i<d; i++) { | |
| gdcpset(&pset, x++, y); | |
| } | |
| for (i=0; i<d2; i++) { | |
| gdcpset(&pset, x, y--); | |
| } | |
| for (i=0; i<d; i++) { | |
| gdcpset(&pset, x--, y); | |
| } | |
| for (i=0; i<d2; i++) { | |
| gdcpset(&pset, x, y++); | |
| } | |
| break; | |
| case 4: | if (vect->ope & 0x80) { // SL |
| for (i=0; i<d; i++) { | pat = (REG16)((GDCPATREVERSE(pat) << 8) + GDCPATREVERSE(pat >> 8)); |
| gdcpset(&pset, x, y--); | } |
| } | gdcpset_prepare(&pset, csrw, 0xffff, ope); |
| for (i=0; i<d2; i++) { | multiple = (gdc.s.para[GDC_ZOOM] & 15) + 1; |
| gdcpset(&pset, x--, y); | |
| } | |
| for (i=0; i<d; i++) { | |
| gdcpset(&pset, x, y++); | |
| } | |
| for (i=0; i<d2; i++) { | |
| gdcpset(&pset, x++, y); | |
| } | |
| break; | |
| case 6: | sx = LOADINTELWORD(vect->D); |
| for (i=0; i<d; i++) { | sx = ((sx - 1) & 0x3fff) + 1; |
| gdcpset(&pset, x--, y); | if (sx >= 768) { |
| } | sx = 768; |
| for (i=0; i<d2; i++) { | } |
| gdcpset(&pset, x, y++); | dir = vectdir + ((vect->ope) & 7); |
| } | |
| for (i=0; i<d; i++) { | muly = multiple; |
| gdcpset(&pset, x++, y); | while(muly--) { |
| } | cx = pset.x; |
| for (i=0; i<d2; i++) { | cy = pset.y; |
| gdcpset(&pset, x, y--); | xrem = sx; |
| while(xrem--) { | |
| mulx = multiple; | |
| if (pat & 1) { | |
| pat >>= 1; | |
| pat |= 0x8000; | |
| while(mulx--) { | |
| gdcpset(&pset, cx, cy); | |
| cx += dir->x; | |
| cy += dir->y; | |
| } | |
| } | |
| else { | |
| pat >>= 1; | |
| while(mulx--) { | |
| cx += dir->x; | |
| cy += dir->y; | |
| } | |
| } | } |
| break; | } |
| pset.x += dir->x2; | |
| pset.y += dir->y2; | |
| } | } |
| calc_gdcslavewait(pset.dots); | calc_gdcslavewait(pset.dots); |
| } | } |
| void gdcsub_circle(UINT32 csrw, const GDCVECT *vect, UINT16 pat, BYTE ope) { | void gdcsub_vectc(UINT32 csrw, const GDCVECT *vect, REG16 pat, REG8 ope) { |
| _GDCPSET pset; | _GDCPSET pset; |
| UINT r; | UINT r; |
| Line 253 void gdcsub_circle(UINT32 csrw, const GD | Line 306 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x + s), (UINT16)(y + i)); | gdcpset(&pset, (REG16)(x + s), (REG16)(y + i)); |
| } | } |
| break; | break; |
| Line 261 void gdcsub_circle(UINT32 csrw, const GD | Line 314 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x + i), (UINT16)(y + s)); | gdcpset(&pset, (REG16)(x + i), (REG16)(y + s)); |
| } | } |
| break; | break; |
| Line 269 void gdcsub_circle(UINT32 csrw, const GD | Line 322 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x + i), (UINT16)(y - s)); | gdcpset(&pset, (REG16)(x + i), (REG16)(y - s)); |
| } | } |
| break; | break; |
| Line 277 void gdcsub_circle(UINT32 csrw, const GD | Line 330 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x + s), (UINT16)(y - i)); | gdcpset(&pset, (REG16)(x + s), (REG16)(y - i)); |
| } | } |
| break; | break; |
| Line 285 void gdcsub_circle(UINT32 csrw, const GD | Line 338 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x - s), (UINT16)(y - i)); | gdcpset(&pset, (REG16)(x - s), (REG16)(y - i)); |
| } | } |
| break; | break; |
| Line 293 void gdcsub_circle(UINT32 csrw, const GD | Line 346 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x - i), (UINT16)(y - s)); | gdcpset(&pset, (REG16)(x - i), (REG16)(y - s)); |
| } | } |
| break; | break; |
| Line 301 void gdcsub_circle(UINT32 csrw, const GD | Line 354 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x - i), (UINT16)(y + s)); | gdcpset(&pset, (REG16)(x - i), (REG16)(y + s)); |
| } | } |
| break; | break; |
| Line 309 void gdcsub_circle(UINT32 csrw, const GD | Line 362 void gdcsub_circle(UINT32 csrw, const GD |
| for (; i<=t; i++) { | for (; i<=t; i++) { |
| s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); | s = (gdc_rt[(i << RT_TABLEBIT) / m] * r); |
| s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; | s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT; |
| gdcpset(&pset, (UINT16)(x - s), (UINT16)(y + i)); | gdcpset(&pset, (REG16)(x - s), (REG16)(y + i)); |
| } | } |
| break; | break; |
| } | } |
| Line 317 void gdcsub_circle(UINT32 csrw, const GD | Line 370 void gdcsub_circle(UINT32 csrw, const GD |
| calc_gdcslavewait(pset.dots); | calc_gdcslavewait(pset.dots); |
| } | } |
| void gdcsub_text(UINT32 csrw, const GDCVECT *vect, UINT16 pat, BYTE ope) { | void gdcsub_vectr(UINT32 csrw, const GDCVECT *vect, REG16 pat, REG8 ope) { |
| _GDCPSET pset; | |
| UINT d; | |
| UINT d2; | |
| REG16 x; | |
| REG16 y; | |
| UINT i; | |
| const VECTDIR *dir; | |
| gdcpset_prepare(&pset, csrw, pat, ope); | |
| d = (LOADINTELWORD(vect->D)) & 0x3fff; | |
| d2 = (LOADINTELWORD(vect->D2)) & 0x3fff; | |
| x = pset.x; | |
| y = pset.y; | |
| dir = vectdir + ((vect->ope) & 7); | |
| for (i=0; i<d; i++) { | |
| gdcpset(&pset, x, y); | |
| x += dir->x; | |
| y += dir->y; | |
| } | |
| for (i=0; i<d2; i++) { | |
| gdcpset(&pset, x, y); | |
| x += dir->x2; | |
| y += dir->y2; | |
| } | |
| for (i=0; i<d; i++) { | |
| gdcpset(&pset, x, y); | |
| x -= dir->x; | |
| y -= dir->y; | |
| } | |
| for (i=0; i<d2; i++) { | |
| gdcpset(&pset, x, y); | |
| x -= dir->x2; | |
| y -= dir->y2; | |
| } | |
| calc_gdcslavewait(pset.dots); | |
| } | |
| void gdcsub_text(UINT32 csrw, const GDCVECT *vect, const BYTE *pat, | |
| REG8 ope) { | |
| _GDCPSET pset; | _GDCPSET pset; |
| BYTE multiple; | BYTE multiple; |
| UINT sx; | UINT sx; |
| UINT sy; | UINT sy; |
| const TEXTDIR *dir; | const VECTDIR *dir; |
| UINT patnum; | UINT patnum; |
| BYTE muly; | BYTE muly; |
| UINT16 cx; | REG16 cx; |
| UINT16 cy; | REG16 cy; |
| UINT xrem; | UINT xrem; |
| BYTE bit; | BYTE bit; |
| BYTE mulx; | BYTE mulx; |
| gdcpset_prepare(&pset, csrw, pat, ope); | gdcpset_prepare(&pset, csrw, 0xffff, ope); |
| multiple = (gdc.s.para[GDC_ZOOM] & 15) + 1; | multiple = (gdc.s.para[GDC_ZOOM] & 15) + 1; |
| #if 0 | #if 1 |
| sx = (LOADINTELWORD(vect->DC)) & 0x3fff) + 1; | sy = LOADINTELWORD(vect->DC); |
| sy = (LOADINTELWORD(vect->D)) & 0x3fff) + 1; | sy = (sy & 0x3fff) + 1; |
| sx = LOADINTELWORD(vect->D); | |
| sx = ((sx - 1) & 0x3fff) + 1; | |
| // てきとーにリミット | |
| if (sx >= 768) { | |
| sx = 768; | |
| } | |
| if (sy >= 768) { | |
| sy = 768; | |
| } | |
| #else | #else |
| sx = 8; | sx = 8; |
| sy = 8; | sy = 8; |
| #endif | #endif |
| dir = textdir + ((vect->ope) & 7); | dir = vectdir + (((vect->ope & 0x80) >> 4) + ((vect->ope) & 7)); |
| patnum = 0; | patnum = 0; |
| while(sy--) { | while(sy--) { |
| Line 350 const TEXTDIR *dir; | Line 453 const TEXTDIR *dir; |
| while(muly--) { | while(muly--) { |
| cx = pset.x; | cx = pset.x; |
| cy = pset.y; | cy = pset.y; |
| bit = gdc.s.para[GDC_TEXTW + (patnum & 7)]; | bit = pat[patnum & 7]; |
| xrem = sx; | xrem = sx; |
| while(xrem--) { | while(xrem--) { |
| mulx = multiple; | mulx = multiple; |
| Line 371 const TEXTDIR *dir; | Line 474 const TEXTDIR *dir; |
| } | } |
| } | } |
| } | } |
| pset.x += dir->sx; | pset.x += dir->x2; |
| pset.y += dir->sy; | pset.y += dir->y2; |
| } | } |
| } | } |
| calc_gdcslavewait(pset.dots); | calc_gdcslavewait(pset.dots); |
| Line 394 void gdcsub_write(void) { | Line 497 void gdcsub_write(void) { |
| TRACEOUT(("gdcsub_write")); | TRACEOUT(("gdcsub_write")); |
| if (grcg.gdcwithgrcg & 0x8) { | if (grcg.gdcwithgrcg & 0x8) { |
| MessageBox(NULL, "!!! grcg working", "?", MB_OK); | MessageBox(NULL, "!!! grcg working", "?", MB_OK); |
| TRACEOUT(("!!! grcg working")); | |
| } | } |
| #endif | #endif |
| Line 457 void gdcsub_write(void) { | Line 559 void gdcsub_write(void) { |
| } | } |
| gdcs.grphdisp |= (BYTE)updatebit; | gdcs.grphdisp |= (BYTE)updatebit; |
| ptr += vramplaneseg[(adrs >> 14) & 3]; | ptr += gdcplaneseg[(adrs >> 14) & 3]; |
| adrs = (adrs & 0x3fff) << 1; | adrs = (adrs & 0x3fff) << 1; |
| calc_gdcslavewait(leng); | calc_gdcslavewait(leng); |