макросы, продолжение:

Код:
//******************************************************************************
Delay MACRO Time, Mem, Temp=D
  .IF MultiColor
    .IF AntiSlowDown
      CMP EDI, 71690
      JB  @@Delay1_&&
      .IF &Time > 1
        ADD EDI, &Time
      .ELSEIF &Time = 1
        INC EDI
      .ENDIF
      JMP SHORT @@DelayEnd&&
@@Delay1_&&:
    .ENDIF
    .IF NoDelay = 0
      MOVZX E&Temp.X, &Mem.H
      MOV &Temp.H, [&ZX].CurRAMBank
      MOVZX E&Temp.X, B[E&Temp.X+MC_Contended_Mem_Table]
      ADD EDI, D[EDI*8+E&Temp.X+MC_Contended_Delay_Table]
      .IF &Time > 2
        ADD EDI, &Time-1
      .ELSEIF &Time = 2
        INC EDI
      .ENDIF
    .ELSE NoDelay
      .IF &Time > 1
        ADD EDI, &Time
      .ELSEIF &Time = 1
        INC EDI
      .ENDIF
    .ENDIF
    .IF AntiSlowDown
@@DelayEnd&&:
    .ENDIF
  .ENDIF
  END   //MACRO Delay

//******************************************************************************
DelayMore MACRO Time=1, Temp=D, Count=1
  .IF MultiColor
    .IF AntiSlowDown
      CMP EDI, 71690
      JB  @@DelayMore1_&&
      .IF &Time * &Count > 1
        ADD EDI, &Time * &Count
      .ELSEIF &Time * &Count = 1
        INC EDI
      .ENDIF
      JMP SHORT @@DelayMoreEnd&&
@@DelayMore1_&&:
    .ENDIF
    .IF NoDelay = 0
      .REPEAT &Count
        ADD EDI, D[EDI*8+E&Temp.X+MC_Contended_Delay_Table]
        .IF &Time > 2
          ADD EDI, &Time-1
        .ELSEIF &Time = 2
          INC EDI
        .ENDIF
      .ENDREP
    .ELSE NoDelay
      .IF &Time * &Count > 1
        ADD EDI, &Time * &Count
      .ELSEIF &Time * &Count = 1
        INC EDI
      .ENDIF
    .ENDIF
    .IF AntiSlowDown
@@DelayMoreEnd&&:
    .ENDIF
  .ENDIF
  END //MACRO DelayMore

//******************************************************************************
outDelay MACRO Port, Temp=D, io=
  .IF MultiColor
    .IF NoDelay = 0
      .IF "&io" = ""
        //--------------
        MOVZX EDX, &Port.H
        MOV &Temp.H, [&ZX].CurRAMBank
        MOVZX E&Temp.X, B[E&Temp.X+MC_Contended_Mem_Table]
        TEST &Port.L, 1
        JZ   SHORT @@_outFE&&
            // N:4 or C:1 C:1 C:1 C:1
        XOR &Temp.L, 4
        JNZ SHORT @@_outN4&&

        .IF AntiSlowDown
          CMP EDI, 71690
          JB  @@outDelay1_&&
          ADD EDI, 4
          JMP SHORT @@_outN4&&
@@outDelay1_&&:
        .ENDIF
        ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
        ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
        ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
        ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]

@@_outN4&&:
        ADD EDI, E&Temp.X
        JMP SHORT @@_end_out_contention&&

@@_outFE&&:
        xor &Temp.L, 4
        JNZ SHORT @@_outN1C3_&&
        .IF AntiSlowDown
          CMP EDI, 71690
          JAE @@_outN1C3_&&
        .ENDIF
        ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
        DEC EDI
@@_outN1C3_&&:
        INC EDI
        .IF AntiSlowDown
          CMP EDI, 71690
          JB  @@outDelay3_&&
          ADD EDI, 3
          JMP SHORT @@_end_out_contention&&
@@outDelay3_&&:
        .ENDIF
        ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
        ADD EDI, 3-1
@@_end_out_contention&&:
        //--------------
      .ELSE
        //--------------
        .IF AntiSlowDown
          CMP EDI, 71690
          JAE @@outDelay5&&
        .ENDIF
        MOVZX E&Temp.X, &Port.H
        MOV &Temp.H, [&ZX].CurRAMBank
        MOVZX E&Temp.X, B[E&Temp.X+MC_Contended_Mem_Table]
        TEST &Port.L, 1
        JNZ SHORT @@outDelay4&&
        MOV &Temp.L, 4
@@outDelay4&&:
        ADD EDI, D[EDI*8+E&Temp.X+MC_Contended_Delay_Table]
        ADD EDI, &io-1
@@outDelay5&&:
        //--------------
      .ENDIF
    .ELSE NoDelay
      .IF "&io" = ""
        ADD EDI, 4
      .ELSEIF &io > 1
        ADD EDI, &io
      .ELSEIF &io = 1
        INC EDI
      .ENDIF
    .ENDIF
  .ENDIF //MultiColor
  END //MACRO outDelay

//******************************************************************************
inDelay MACRO Port, Temp=D
  .IF MultiColor <> 0
    .IF NoDelay = 0
      MOVZX E&Temp.X, &Port.H
      MOV &Temp.H, [&ZX].CurRAMBank
      MOVZX E&Temp.X, B[E&Temp.X+MC_Contended_Mem_Table]
      TEST &Port.L, 1
      JZ  SHORT @@_inFE&&
           // bit 0 of port addr set - N:4 or C:1 C:1 C:1 C:1
      XOR &Temp.L, 4
      JNZ SHORT @@_inN4&&

      .IF AntiSlowDown
      CMP EDI, 71690
      JB  @@inDelay1_&&
      ADD EDI, 4
      JMP SHORT @@_inN4&&
@@inDelay1_&&:
      .ENDIF
      ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
      ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
      ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
      ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
@@_inN4&&:
      ADD EDI, E&Temp.X
      JMP SHORT @@_end_in_contention&&

@@_inFE&&:
      .IF AntiSlowDown
        CMP EDI, 71690
        JAE @@_end_in_contention&&
      .ENDIF
      XOR &Temp.L, 4
      JnZ SHORT @@_inN1C3_&&
      ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
      DEC EDI
@@_inN1C3_&&:
      INC EDI
      ADD EDI, D[EDI*8+4+MC_Contended_Delay_Table]
      ADD EDI, 3-1
@@_end_in_contention&&:
    .ELSE NoDelay
      ADD EDI, 4
    .ENDIF
  .ENDIF //MultiColor
  //--------------
  END //MACRO inDelay

//******************************************************************************

ioDelay MACRO Port, Temp
    .IF MultiColor
      .IF NoDelay = 0
        .IF AntiSlowDown
          CMP EDI, 71690
          JAE @@ioDelayEnd&&
        .ENDIF
        MOVZX E&Temp.X, &Port.H
        MOV &Temp.H, [&ZX].CurRAMBank
        MOVZX E&Temp.X, B[E&Temp.X+MC_Contended_Mem_Table]
        TEST &Port.L, 1
        JNZ SHORT @@ioDelay1_&&
        MOV &Temp.L, 4
@@ioDelay1_&&:
        ADD EDI, D[EDI*8+ECX+MC_Contended_Delay_Table]
        .IF AntiSlowDown
@@ioDelayEnd&&:
        .ENDIF
      .ELSE NoDelay
        //ADD EDI, 4
      .ENDIF

    .ENDIF
    END //MACRO ioDelay
и еще чуть-чуть...