ZXNet эхоконференция «zxnet.pc»


тема: продолжение про ULA в EmuZWin



от: Владимир Кладов
кому: All
дата: 19 Jan 2007
Hello, boo_boo

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

//*****************************************************************************
*
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


└── CODE ───
и еще чуть-чуть...




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
About KrNews13 - "чего не хватает сцене сегодня?" насущные вопросы и пути решения.
Почему - Почему я все еще выбираю Speccy! Спектрум компьютер для бедных?
Вступление - Трепещите и внимайте!
Приколы - Описание ЕСННС (Единый Стандарт на Совкового СисОпа).
Лучшие солюшены SOSG - COLONY.

В этот день...   29 апреля