void cmd108_sub_pset32();
void cmd108_sub()
/* EAX == opt, lines == ECX, dat == ES:EDI, gbox == DS:ESI */
/* EDX == x0, EBX == y0 */
{
GRAPHBOX *gbox == DS:ESI;
EDX <<= 16;
EBX <<= 16;
PUSHAD();
+ PUSH(EAX);
+ AL = gbox->mode;
+ AL &= 0x1f;
+ if (AL == 1)
+ goto mode1;
+ if (AL == 4)
+ goto mode4;
+mode1:
+ POP(EAX);
EAX >>= 6;
EAX &= 0x03;
if (== 0) { /* pset */
...中略...
(unsigned int) EDX >>= 16;
(unsigned int) EBX >>= 16;
return;
// }
+
+mode4:
+ POP(EAX);
+ EAX >>= 6;
+ EAX &= 0x03;
+ if (== 0) { /* pset */
+ do {
+ PUSH(ESI);
+ EDX = [ES:EDI + 8];
+ PUSH(ECX);
+ EBX = [ES:EDI + 12];
+ EBP = [ES:EDI + 16];
+ EAX = [ES:EDI + 20];
+ PUSH(EDI);
+ ECX = (offset) gbox;
+ ESI = [ES:EDI + 0];
+ EDI = [ES:EDI + 4];
+ ESI += [SS:ESP + 32]; /* x0 */
+ EDI += [SS:ESP + 28]; /* y0 */
+ cmd108_sub_pset32();
+ POP(EDI);
+ POP(ECX);
+ EDI += 24;
+ POP(ESI);
+ ECX--;
+ } while (!= 0);
+ POPAD();
+ (unsigned int) EDX >>= 16;
+ (unsigned int) EBX >>= 16;
+ return;
+ }
+ INT(0x03); /*pest以外はとりあえず未サポート */
}
void cmd108_sub_pset32()
{
GRAPHBOX *gbox == DS:ECX;
PUSH(ECX);
PUSH(gbox->x_bsize);
PUSH(EDX);
do {
EDX = EDI;
ECX = ESI;
(unsigned int) EDX >>= 16;
(unsigned int) ECX >>= 16;
IMUL(EDX, (int) [SS:ESP + 4]);
ESI += [SS:ESP];
EDX += ECX;
ECX = (int) [SS:ESP + 8];
EDI += EBX;
(int) [DS:ECX + EDX * 4 + 64] = EAX;
(int) [DS:ECX + EDX * 4 + 64] = EAX; /* この *4 がミソ */
EBP--;
} while (!= 0);
POP(EDX);
POP(EAX);
POP(ECX);
return;
}