|
|
| version 1.8, 2004/02/09 20:39:39 | version 1.9, 2004/02/11 04:22:18 |
|---|---|
| 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; |
| 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}}; | |
| void gdcsub_init(void) { | void gdcsub_init(void) { |
| Line 160 void gdcsub_box(UINT32 csrw, const GDCVE | Line 165 void gdcsub_box(UINT32 csrw, const GDCVE |
| REG16 x; | REG16 x; |
| REG16 y; | REG16 y; |
| UINT i; | UINT i; |
| const VECTDIR *dir; | |
| gdcpset_prepare(&pset, csrw, pat, ope); | gdcpset_prepare(&pset, csrw, pat, ope); |
| d = (LOADINTELWORD(vect->D)) & 0x3fff; | d = (LOADINTELWORD(vect->D)) & 0x3fff; |
| Line 167 void gdcsub_box(UINT32 csrw, const GDCVE | Line 173 void gdcsub_box(UINT32 csrw, const GDCVE |
| x = pset.x; | x = pset.x; |
| y = pset.y; | y = pset.y; |
| // 回転はなしよ(手抜き) | // 回転はなしよ(手抜き) |
| switch((vect->ope) & 7) { | dir = vectdir + ((vect->ope) & 7); |
| case 0: | for (i=0; i<d; i++) { |
| for (i=0; i<d; i++) { | gdcpset(&pset, x, y); |
| gdcpset(&pset, x, y++); | x += dir->x; |
| } | y += dir->y; |
| for (i=0; i<d2; i++) { | } |
| gdcpset(&pset, x++, y); | for (i=0; i<d2; i++) { |
| } | gdcpset(&pset, x, y); |
| for (i=0; i<d; i++) { | x += dir->x2; |
| gdcpset(&pset, x, y--); | y += dir->y2; |
| } | } |
| for (i=0; i<d2; i++) { | for (i=0; i<d; i++) { |
| gdcpset(&pset, x--, y); | gdcpset(&pset, x, y); |
| } | x -= dir->x; |
| break; | y -= dir->y; |
| } | |
| case 2: | for (i=0; i<d2; i++) { |
| for (i=0; i<d; i++) { | gdcpset(&pset, x, y); |
| gdcpset(&pset, x++, y); | x -= dir->x2; |
| } | y -= dir->y2; |
| 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: | |
| 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 6: | |
| 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; | |
| } | } |
| calc_gdcslavewait(pset.dots); | calc_gdcslavewait(pset.dots); |
| } | } |
| Line 332 void gdcsub_text(UINT32 csrw, const GDCV | Line 298 void gdcsub_text(UINT32 csrw, const GDCV |
| 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; |
| REG16 cx; | REG16 cx; |
| Line 343 const TEXTDIR *dir; | Line 309 const TEXTDIR *dir; |
| gdcpset_prepare(&pset, csrw, 0xffff, 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 380 const TEXTDIR *dir; | Line 356 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); |