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;
  }

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS