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; /* この *4 がミソ */ EBP--; } while (!= 0); POP(EDX); POP(EAX); POP(ECX); return; } |