Код:
; ──────────────────────────────────────────────
; петля прогона при TORMOZ =0
TGO_BAN: GET_ES SI ; сюда вылет после команд меняющ.банку
TGO_NOB: ; сюда вылет после команд не мен.банку
MOV BL,ES:[SI]
MOV BP,SI
INC SI
XOR BH,BH
SHL BX,1 ; умножить на 2
JMP [BX+word ptr VECT_580]
; ──────────────────────────────────────────────
@47: MOV BX,DI ; LD B,A
MOV BH,AL
MOV DI,BX
NEXTK4P ; Пауза для 4-тактовых команд
; ──────────────────────────────────────────────
@70: MOV BX,DI ; LD (HL),B
MOV BYTE_TO,BH
MOV BX,DX
if_wr_hi ; BP= адрес начала кода команды
@70_2: MOV BX,DI
XCHG SI,DX
GET_ES SI
MOV ES:[SI],BH
XCHG SI,DX
CMP DX,scr_low
JC @70_1
CMP DX,scr_ovr
JNC @70_1
MOV BX,DX
JMP SCREEN ; запись 1-го байта в экран (BYTE_TO, в BX=адрес)
@70_1: NXTK_B7 ; Пауза для 7-тактовых команд
; ──────────────────────────────────────────────
@FD_36: MOV BP,AX ; LD (IY+disp),nn
MOV BX,ES:[SI] ; диспласемент 'disp'
INC SI
INC SI
MOV AL,BH ; nn
MOV ES,AX
XOR BH,BH
OR BL,BL
JS @FD36_2
ADD BX,_REG_IY
@FD36_0: MOV AX,ES
GET_ES BX
MOV ES:[BX],AL
MOV BYTE_TO,AL
MOV AX,BP
if_noscr @DD70_3
JMP SCREEN ; запись одного байта в экран байт в BYTE_TO, адрес в BX
@FD36_2: NEG BL
MOV AX,_REG_IY
SUB AX,BX
MOV BX,AX
JMP @FD36_0
@DD70_0: GET_ES BX
MOV BP,AX
MOV AX,DI
MOV ES:[BX],AH
MOV BYTE_TO,AH
MOV AX,BP
if_noscr @DD70_3
JMP SCREEN
@DD70_2: NEG BL
MOV BP,_REG_IX
SUB BP,BX
MOV BX,BP
JMP @DD70_0
@DD70_3: NXTK_B
; ──────────────────────────────────────────────
NXTK_B4 MACRO
MOV BL,4 ; загрузка BL числом для балансировки
JMP [word ptr ADR_LOB]
ENDM
ADR_LOB label WORD ; адрес перехода для команд меняющих тек.банку
DW 0
ADR_LON label WORD ; адрес перехода для команд не меняющих банку
DW 0
; ──────────────────────────────────────────────
if_noscr MACRO ADDR
CMP BX,scr_low
JC ADDR
CMP BX,scr_ovr
JNC ADDR
ENDM
; ──────────────────────────────────────────────
if_wr_hi MACRO
CMP BH,0F4H
jmpnc WRIT_HI
ENDM
; ──────────────────────────────────────────────
; на входе BP должен содержать адрес начала кода команды
WRIT_HI: ; Запись одного байта по адресу выше F400
TEST _PFB,00100000B
JNZ WR_MEM ; если FULL RAM
WR_HI_2:
MOV ES,bank0 ; на входе: BX- адрес, BYTE_TO - байт
AND BL,3
CMP BX,0F800H
jmpnc WR_REG ; BP= адрес начала кода команды
CMP BX,0F500H
JNC H_F500 ; если выше F4FF
CMP BX,0F403H
JNZ F400_1
MOV BL,BYTE_TO ; write F403
MOV L_F403,BL
JMP short NO_REGS
; ──────────────────────────────────────────────
comment \
РАСПРЕДЕЛЕНИЕ РЕГИСТРОВ
DS - seg _TEXT AL - A
ES - seg ORION_MEM SI - PC
SS - seg STACK CX - BC
SI - PC DX - DE
_REG_S - SP ; ячейка ОЗУ BX - HL
AL - A BP - рабочий
AH - флаги КР580
DI - BC
CX - DE
DX - HL
BP - рабочий (при прогоне копия SI, текущий адрес PC)
BX - рабочий
SP - стек 8086
\
; ──────────────────────────────────────────────
VECT_580 LABEL BYTE
DW @00,@01,@02,@03,@04,@05,@06,@07
DW @08,@09,@0A,@0B,@0C,@0D,@0E,@0F
DW @10,@11,@12,@13,@14,@15,@16,@17
DW @18,@19,@1A,@1B,@1C,@1D,@1E,@1F
DW @20,@21,@22,@23,@24,@25,@26,@27
DW @28,@29,@2A,@2B,@2C,@2D,@2E,@2F
DW @30,@31,@32,@33,@34,@35,@36,@37
DW @38,@39,@3A,@3B,@3C,@3D,@3E,@3F
DW @40,@41,@42,@43,@44,@45,@46,@47
DW @48,@49,@4A,@4B,@4C,@4D,@4E,@4F
DW @50,@51,@52,@53,@54,@55,@56,@57
DW @58,@59,@5A,@5B,@5C,@5D,@5E,@5F
DW @60,@61,@62,@63,@64,@65,@66,@67
DW @68,@69,@6A,@6B,@6C,@6D,@6E,@6F
DW @70,@71,@72,@73,@74,@75,@76,@77
DW @78,@79,@7A,@7B,@7C,@7D,@7E,@7F
DW @80,@81,@82,@83,@84,@85,@86,@87
DW @88,@89,@8A,@8B,@8C,@8D,@8E,@8F
DW @90,@91,@92,@93,@94,@95,@96,@97
DW @98,@99,@9A,@9B,@9C,@9D,@9E,@9F
DW @A0,@A1,@A2,@A3,@A4,@A5,@A6,@A7
DW @A8,@A9,@AA,@AB,@AC,@AD,@AE,@AF
DW @B0,@B1,@B2,@B3,@B4,@B5,@B6,@B7
DW @B8,@B9,@BA,@BB,@BC,@BD,@BE,@BF
DW @C0,@C1,@C2,@C3,@C4,@C5,@C6,@C7
DW @C8,@C9,@CA,@CB,@CC,@CD,@CE,@CF
DW @D0,@D1,@D2,@D3,@D4,@D5,@D6,@D7
DW @D8,@D9,@DA,@DB,@DC,@DD,@DE,@DF
DW @E0,@E1,@E2,@E3,@E4,@E5,@E6,@E7
DW @E8,@E9,@EA,@EB,@EC,@ED,@EE,@EF
DW @F0,@F1,@F2,@F3,@F4,@F5,@F6,@F7
DW @F8,@F9,@FA,@FB,@FC,@FD,@FE,@FF
VECT_CB LABEL BYTE
DW @CB_00,@CB_01,@CB_02,@CB_03,@CB_04,@CB_05,@CB_06,@CB_07
DW @CB_08,@CB_09,@CB_0A,@CB_0B,@CB_0C,@CB_0D,@CB_0E,@CB_0F
DW @CB_10,@CB_11,@CB_12,@CB_13,@CB_14,@CB_15,@CB_16,@CB_17
DW @CB_18,@CB_19,@CB_1A,@CB_1B,@CB_1C,@CB_1D,@CB_1E,@CB_1F
DW @CB_20,@CB_21,@CB_22,@CB_23,@CB_24,@CB_25,@CB_26,@CB_27
DW @CB_28,@CB_29,@CB_2A,@CB_2B,@CB_2C,@CB_2D,@CB_2E,@CB_2F
DW @CB_30,@CB_31,@CB_32,@CB_33,@CB_34,@CB_35,@CB_36,@CB_37
DW @CB_38,@CB_39,@CB_3A,@CB_3B,@CB_3C,@CB_3D,@CB_3E,@CB_3F
DW @CB_40,@CB_41,@CB_42,@CB_43,@CB_44,@CB_45,@CB_46,@CB_47
DW @CB_48,@CB_49,@CB_4A,@CB_4B,@CB_4C,@CB_4D,@CB_4E,@CB_4F
DW @CB_50,@CB_51,@CB_52,@CB_53,@CB_54,@CB_55,@CB_56,@CB_57
DW @CB_58,@CB_59,@CB_5A,@CB_5B,@CB_5C,@CB_5D,@CB_5E,@CB_5F
DW @CB_60,@CB_61,@CB_62,@CB_63,@CB_64,@CB_65,@CB_66,@CB_67
DW @CB_68,@CB_69,@CB_6A,@CB_6B,@CB_6C,@CB_6D,@CB_6E,@CB_6F
DW @CB_70,@CB_71,@CB_72,@CB_73,@CB_74,@CB_75,@CB_76,@CB_77
DW @CB_78,@CB_79,@CB_7A,@CB_7B,@CB_7C,@CB_7D,@CB_7E,@CB_7F
DW @CB_80,@CB_81,@CB_82,@CB_83,@CB_84,@CB_85,@CB_86,@CB_87
DW @CB_88,@CB_89,@CB_8A,@CB_8B,@CB_8C,@CB_8D,@CB_8E,@CB_8F
DW @CB_90,@CB_91,@CB_92,@CB_93,@CB_94,@CB_95,@CB_96,@CB_97
DW @CB_98,@CB_99,@CB_9A,@CB_9B,@CB_9C,@CB_9D,@CB_9E,@CB_9F
DW @CB_A0,@CB_A1,@CB_A2,@CB_A3,@CB_A4,@CB_A5,@CB_A6,@CB_A7
DW @CB_A8,@CB_A9,@CB_AA,@CB_AB,@CB_AC,@CB_AD,@CB_AE,@CB_AF
DW @CB_B0,@CB_B1,@CB_B2,@CB_B3,@CB_B4,@CB_B5,@CB_B6,@CB_B7
DW @CB_B8,@CB_B9,@CB_BA,@CB_BB,@CB_BC,@CB_BD,@CB_BE,@CB_BF
DW @CB_C0,@CB_C1,@CB_C2,@CB_C3,@CB_C4,@CB_C5,@CB_C6,@CB_C7
DW @CB_C8,@CB_C9,@CB_CA,@CB_CB,@CB_CC,@CB_CD,@CB_CE,@CB_CF
DW @CB_D0,@CB_D1,@CB_D2,@CB_D3,@CB_D4,@CB_D5,@CB_D6,@CB_D7
DW @CB_D8,@CB_D9,@CB_DA,@CB_DB,@CB_DC,@CB_DD,@CB_DE,@CB_DF
DW @CB_E0,@CB_E1,@CB_E2,@CB_E3,@CB_E4,@CB_E5,@CB_E6,@CB_E7
DW @CB_E8,@CB_E9,@CB_EA,@CB_EB,@CB_EC,@CB_ED,@CB_EE,@CB_EF
DW @CB_F0,@CB_F1,@CB_F2,@CB_F3,@CB_F4,@CB_F5,@CB_F6,@CB_F7
DW @CB_F8,@CB_F9,@CB_FA,@CB_FB,@CB_FC,@CB_FD,@CB_FE,@CB_FF
if Z80
VECT_DD LABEL BYTE
DW @DD_00,@DD_01,@DD_02,@DD_03,@DD_04,@DD_05,@DD_06,@DD_07
DW @DD_08,@DD_09,@DD_0A,@DD_0B,@DD_0C,@DD_0D,@DD_0E,@DD_0F
DW @DD_10,@DD_11,@DD_12,@DD_13,@DD_14,@DD_15,@DD_16,@DD_17
DW @DD_18,@DD_19,@DD_1A,@DD_1B,@DD_1C,@DD_1D,@DD_1E,@DD_1F
DW @DD_20,@DD_21,@DD_22,@DD_23,@DD_24,@DD_25,@DD_26,@DD_27
DW @DD_28,@DD_29,@DD_2A,@DD_2B,@DD_2C,@DD_2D,@DD_2E,@DD_2F
DW @DD_30,@DD_31,@DD_32,@DD_33,@DD_34,@DD_35,@DD_36,@DD_37
DW @DD_38,@DD_39,@DD_3A,@DD_3B,@DD_3C,@DD_3D,@DD_3E,@DD_3F
DW @DD_40,@DD_41,@DD_42,@DD_43,@DD_44,@DD_45,@DD_46,@DD_47
DW @DD_48,@DD_49,@DD_4A,@DD_4B,@DD_4C,@DD_4D,@DD_4E,@DD_4F
DW @DD_50,@DD_51,@DD_52,@DD_53,@DD_54,@DD_55,@DD_56,@DD_57
DW @DD_58,@DD_59,@DD_5A,@DD_5B,@DD_5C,@DD_5D,@DD_5E,@DD_5F
DW @DD_60,@DD_61,@DD_62,@DD_63,@DD_64,@DD_65,@DD_66,@DD_67
DW @DD_68,@DD_69,@DD_6A,@DD_6B,@DD_6C,@DD_6D,@DD_6E,@DD_6F
DW @DD_70,@DD_71,@DD_72,@DD_73,@DD_74,@DD_75,@DD_76,@DD_77
DW @DD_78,@DD_79,@DD_7A,@DD_7B,@DD_7C,@DD_7D,@DD_7E,@DD_7F
DW @DD_80,@DD_81,@DD_82,@DD_83,@DD_84,@DD_85,@DD_86,@DD_87
DW @DD_88,@DD_89,@DD_8A,@DD_8B,@DD_8C,@DD_8D,@DD_8E,@DD_8F
DW @DD_90,@DD_91,@DD_92,@DD_93,@DD_94,@DD_95,@DD_96,@DD_97
DW @DD_98,@DD_99,@DD_9A,@DD_9B,@DD_9C,@DD_9D,@DD_9E,@DD_9F
DW @DD_A0,@DD_A1,@DD_A2,@DD_A3,@DD_A4,@DD_A5,@DD_A6,@DD_A7
DW @DD_A8,@DD_A9,@DD_AA,@DD_AB,@DD_AC,@DD_AD,@DD_AE,@DD_AF
DW @DD_B0,@DD_B1,@DD_B2,@DD_B3,@DD_B4,@DD_B5,@DD_B6,@DD_B7
DW @DD_B8,@DD_B9,@DD_BA,@DD_BB,@DD_BC,@DD_BD,@DD_BE,@DD_BF
DW @DD_C0,@DD_C1,@DD_C2,@DD_C3,@DD_C4,@DD_C5,@DD_C6,@DD_C7
DW @DD_C8,@DD_C9,@DD_CA,@DD_CB,@DD_CC,@DD_CD,@DD_CE,@DD_CF
DW @DD_D0,@DD_D1,@DD_D2,@DD_D3,@DD_D4,@DD_D5,@DD_D6,@DD_D7
DW @DD_D8,@DD_D9,@DD_DA,@DD_DB,@DD_DC,@DD_DD,@DD_DE,@DD_DF
DW @DD_E0,@DD_E1,@DD_E2,@DD_E3,@DD_E4,@DD_E5,@DD_E6,@DD_E7
DW @DD_E8,@DD_E9,@DD_EA,@DD_EB,@DD_EC,@DD_ED,@DD_EE,@DD_EF
DW @DD_F0,@DD_F1,@DD_F2,@DD_F3,@DD_F4,@DD_F5,@DD_F6,@DD_F7
DW @DD_F8,@DD_F9,@DD_FA,@DD_FB,@DD_FC,@DD_FD,@DD_FE,@DD_FF
VECT_FD LABEL BYTE
DW @FD_00,@FD_01,@FD_02,@FD_03,@FD_04,@FD_05,@FD_06,@FD_07
DW @FD_08,@FD_09,@FD_0A,@FD_0B,@FD_0C,@FD_0D,@FD_0E,@FD_0F
DW @FD_10,@FD_11,@FD_12,@FD_13,@FD_14,@FD_15,@FD_16,@FD_17
DW @FD_18,@FD_19,@FD_1A,@FD_1B,@FD_1C,@FD_1D,@FD_1E,@FD_1F
DW @FD_20,@FD_21,@FD_22,@FD_23,@FD_24,@FD_25,@FD_26,@FD_27
DW @FD_28,@FD_29,@FD_2A,@FD_2B,@FD_2C,@FD_2D,@FD_2E,@FD_2F
DW @FD_30,@FD_31,@FD_32,@FD_33,@FD_34,@FD_35,@FD_36,@FD_37
DW @FD_38,@FD_39,@FD_3A,@FD_3B,@FD_3C,@FD_3D,@FD_3E,@FD_3F
DW @FD_40,@FD_41,@FD_42,@FD_43,@FD_44,@FD_45,@FD_46,@FD_47
DW @FD_48,@FD_49,@FD_4A,@FD_4B,@FD_4C,@FD_4D,@FD_4E,@FD_4F
DW @FD_50,@FD_51,@FD_52,@FD_53,@FD_54,@FD_55,@FD_56,@FD_57
DW @FD_58,@FD_59,@FD_5A,@FD_5B,@FD_5C,@FD_5D,@FD_5E,@FD_5F
DW @FD_60,@FD_61,@FD_62,@FD_63,@FD_64,@FD_65,@FD_66,@FD_67
DW @FD_68,@FD_69,@FD_6A,@FD_6B,@FD_6C,@FD_6D,@FD_6E,@FD_6F
DW @FD_70,@FD_71,@FD_72,@FD_73,@FD_74,@FD_75,@FD_76,@FD_77
DW @FD_78,@FD_79,@FD_7A,@FD_7B,@FD_7C,@FD_7D,@FD_7E,@FD_7F
DW @FD_80,@FD_81,@FD_82,@FD_83,@FD_84,@FD_85,@FD_86,@FD_87
DW @FD_88,@FD_89,@FD_8A,@FD_8B,@FD_8C,@FD_8D,@FD_8E,@FD_8F
DW @FD_90,@FD_91,@FD_92,@FD_93,@FD_94,@FD_95,@FD_96,@FD_97
DW @FD_98,@FD_99,@FD_9A,@FD_9B,@FD_9C,@FD_9D,@FD_9E,@FD_9F
DW @FD_A0,@FD_A1,@FD_A2,@FD_A3,@FD_A4,@FD_A5,@FD_A6,@FD_A7
DW @FD_A8,@FD_A9,@FD_AA,@FD_AB,@FD_AC,@FD_AD,@FD_AE,@FD_AF
DW @FD_B0,@FD_B1,@FD_B2,@FD_B3,@FD_B4,@FD_B5,@FD_B6,@FD_B7
DW @FD_B8,@FD_B9,@FD_BA,@FD_BB,@FD_BC,@FD_BD,@FD_BE,@FD_BF
DW @FD_C0,@FD_C1,@FD_C2,@FD_C3,@FD_C4,@FD_C5,@FD_C6,@FD_C7
DW @FD_C8,@FD_C9,@FD_CA,@FD_CB,@FD_CC,@FD_CD,@FD_CE,@FD_CF
DW @FD_D0,@FD_D1,@FD_D2,@FD_D3,@FD_D4,@FD_D5,@FD_D6,@FD_D7
DW @FD_D8,@FD_D9,@FD_DA,@FD_DB,@FD_DC,@FD_DD,@FD_DE,@FD_DF
DW @FD_E0,@FD_E1,@FD_E2,@FD_E3,@FD_E4,@FD_E5,@FD_E6,@FD_E7
DW @FD_E8,@FD_E9,@FD_EA,@FD_EB,@FD_EC,@FD_ED,@FD_EE,@FD_EF
DW @FD_F0,@FD_F1,@FD_F2,@FD_F3,@FD_F4,@FD_F5,@FD_F6,@FD_F7
DW @FD_F8,@FD_F9,@FD_FA,@FD_FB,@FD_FC,@FD_FD,@FD_FE,@FD_FF
VECT_ED LABEL BYTE
DW @ED_00,@ED_01,@ED_02,@ED_03,@ED_04,@ED_05,@ED_06,@ED_07
DW @ED_08,@ED_09,@ED_0A,@ED_0B,@ED_0C,@ED_0D,@ED_0E,@ED_0F
DW @ED_10,@ED_11,@ED_12,@ED_13,@ED_14,@ED_15,@ED_16,@ED_17
DW @ED_18,@ED_19,@ED_1A,@ED_1B,@ED_1C,@ED_1D,@ED_1E,@ED_1F
DW @ED_20,@ED_21,@ED_22,@ED_23,@ED_24,@ED_25,@ED_26,@ED_27
DW @ED_28,@ED_29,@ED_2A,@ED_2B,@ED_2C,@ED_2D,@ED_2E,@ED_2F
DW @ED_30,@ED_31,@ED_32,@ED_33,@ED_34,@ED_35,@ED_36,@ED_37
DW @ED_38,@ED_39,@ED_3A,@ED_3B,@ED_3C,@ED_3D,@ED_3E,@ED_3F
DW @ED_40,@ED_41,@ED_42,@ED_43,@ED_44,@ED_45,@ED_46,@ED_47
DW @ED_48,@ED_49,@ED_4A,@ED_4B,@ED_4C,@ED_4D,@ED_4E,@ED_4F
DW @ED_50,@ED_51,@ED_52,@ED_53,@ED_54,@ED_55,@ED_56,@ED_57
DW @ED_58,@ED_59,@ED_5A,@ED_5B,@ED_5C,@ED_5D,@ED_5E,@ED_5F
DW @ED_60,@ED_61,@ED_62,@ED_63,@ED_64,@ED_65,@ED_66,@ED_67
DW @ED_68,@ED_69,@ED_6A,@ED_6B,@ED_6C,@ED_6D,@ED_6E,@ED_6F
DW @ED_70,@ED_71,@ED_72,@ED_73,@ED_74,@ED_75,@ED_76,@ED_77
DW @ED_78,@ED_79,@ED_7A,@ED_7B,@ED_7C,@ED_7D,@ED_7E,@ED_7F
DW @ED_80,@ED_81,@ED_82,@ED_83,@ED_84,@ED_85,@ED_86,@ED_87
DW @ED_88,@ED_89,@ED_8A,@ED_8B,@ED_8C,@ED_8D,@ED_8E,@ED_8F
DW @ED_90,@ED_91,@ED_92,@ED_93,@ED_94,@ED_95,@ED_96,@ED_97
DW @ED_98,@ED_99,@ED_9A,@ED_9B,@ED_9C,@ED_9D,@ED_9E,@ED_9F
DW @ED_A0,@ED_A1,@ED_A2,@ED_A3,@ED_A4,@ED_A5,@ED_A6,@ED_A7
DW @ED_A8,@ED_A9,@ED_AA,@ED_AB,@ED_AC,@ED_AD,@ED_AE,@ED_AF
DW @ED_B0,@ED_B1,@ED_B2,@ED_B3,@ED_B4,@ED_B5,@ED_B6,@ED_B7
DW @ED_B8,@ED_B9,@ED_BA,@ED_BB,@ED_BC,@ED_BD,@ED_BE,@ED_BF
DW @ED_C0,@ED_C1,@ED_C2,@ED_C3,@ED_C4,@ED_C5,@ED_C6,@ED_C7
DW @ED_C8,@ED_C9,@ED_CA,@ED_CB,@ED_CC,@ED_CD,@ED_CE,@ED_CF
DW @ED_D0,@ED_D1,@ED_D2,@ED_D3,@ED_D4,@ED_D5,@ED_D6,@ED_D7
DW @ED_D8,@ED_D9,@ED_DA,@ED_DB,@ED_DC,@ED_DD,@ED_DE,@ED_DF
DW @ED_E0,@ED_E1,@ED_E2,@ED_E3,@ED_E4,@ED_E5,@ED_E6,@ED_E7
DW @ED_E8,@ED_E9,@ED_EA,@ED_EB,@ED_EC,@ED_ED,@ED_EE,@ED_EF
DW @ED_F0,@ED_F1,@ED_F2,@ED_F3,@ED_F4,@ED_F5,@ED_F6,@ED_F7
DW @ED_F8,@ED_F9,@ED_FA,@ED_FB,@ED_FC,@ED_FD,@ED_FE,@ED_FF
endif
.