Код:
; *** Монитор ЮТ-88 ***
; Disassembler v2.1 (DSDOS)
; Cracked by Denn, 26.12.2017
STACK:EQU 0F7AFh; стэк
BUF_SCREEN:EQU 0E800h; а/н экрана
DIR_W:EQU 0C000h; Директива 'W'
DIR_U:EQU 0F000h; Директива 'U'
VAR_POS:EQU 0F7B0h; позиция курсора
MF7B2:EQU 0F7B2H; PRINT_C
MF7B4:EQU 0F7B4H; RST 6
MF7B6:EQU 0F7B6H; DIR_G
MF7B8:EQU 0F7B8H; DIR_G
VAR_STACK:EQU 0F7BCh; значение вершины стека
MF7BE:EQU 0F7BEH; RST 6
MF7C0:EQU 0F7C0H; сохр. стека в TAPE_LdBYTE
MF7C3:EQU 0F7C3H; DIR_G, RST 6
MF7C5:EQU 0F7C5H; DIR_G, RST 6
MF7C6:EQU 0F7C6H; переход на обр. DIR_G
VAR_[HL]:EQU 0F7C7h; INPUT_CMDL
VAR_[DE]:EQU 0F7C9h; INPUT_CMDL
VAR_[BC]:EQU 0F7CBh; INPUT_CMDL
MF7CD:EQU 0F7CDH; DIR_I
MF7CE:EQU 0F7CEH; TAPE_LdBYTE
MF7CF:EQU 0F7CFh; константа чтения (2Ah)
MF7D0:EQU 0F7D0h; константа записи (1Dh)
MF7D1:EQU 0F7D1H; [DFFFh] (?)
BUF_CMDL:EQU 0F7D3h; буфер командной строки
MF7F4:EQU 0F7F4H; INPUT_KEY
MF7F3:EQU 0F7F3H; INPUT_KEY
MF7F8:EQU 0F7F8H; PRINT_C
ORG 0F800h
; Керналь переходов
JMP START ; F800h
JMP INPUT_KEY ; F803h
JMP TAPE_LdBYTE ; F806h
JMP PRINT_C ; F809h
JMP TAPE_SvBYTE ; F80Ch
JMP PRINT_C ; F80Fh
JMP KBRD_STAT ; F812h
JMP PRINT_HEX ; F815h
JMP PRINT_MSG ; F818h
JMP SCAN_KEYS ; F81Bh
JMP GET_POS ; F81Eh
JMP GET_SIMB_A ; F821h
JMP TAPE_LdDUMP ; F824h
JMP TAPE_SvDUMP ; F827h
JMP GET_CSUM ; F82Ah
RET
DDB 0FFh,2
JMP MFE77 ; неведомая фигня
JMP MFE7B ; неведомая фигня
START:
; Холодный старт
; инициализация порта клавиатуры
MVI A,8Bh
OUT 4
; инициализация порта ROM-диска
MVI A,82h
OUT 0FBh
; инициализация стека
LXI SP,STACK
LXI H,VAR_POS
LXI D,0F7FFh
MVI C,0
CALL DIR_F
LXI H,STACK
SHLD VAR_STACK
; вывод заставки
LXI H,MSG_UT88
CALL PRINT_MSG
NOP
NOP
NOP
LXI H,0DFFFh
SHLD MF7D1
; инициализация констант МГ
LXI H,1D2Ah
SHLD MF7CF
MVI A,0C3h
STA MF7C6
HOT_START:
; Горячий старт
LXI SP,STACK
; вывод промпта
LXI H,MSG_PROMPT
CALL PRINT_MSG
NOP
NOP
NOP
NOP
CALL INPUT_CMDL
; запись в стек адреса горячего старта
LXI H,HOT_START
PUSH H
LXI H,BUF_CMDL
MOV A,M
CPI 'X'
JZ DIR_X
CPI 'U'
JZ DIR_U
PUSH PSW
CALL GET_CMD
LHLD VAR_[BC]
MOV C,L
MOV B,H
LHLD VAR_[DE]
XCHG
LHLD VAR_[HL]
POP PSW
CPI 'D'
JZ DIR_D
CPI 'C'
JZ DIR_C
CPI 'F'
JZ DIR_F
CPI 'S'
JZ DIR_S
CPI 'T'
JZ DIR_T
CPI 'M'
JZ DIR_M
CPI 'G'
JZ DIR_G
CPI 'I'
JZ DIR_I
CPI 'O'
JZ DIR_O
CPI 'L'
JZ DIR_L
CPI 'R'
JZ DIR_R
JMP CPI_PART2
InpCMDL_ZB:
; обработка удаления символа
MVI A,63h
CMP L
JZ INP_CMDL0
PUSH H
LXI H,MSG_BKSPC
CALL PRINT_MSG
POP H
DCX H
JMP INP_CMDL1
INPUT_CMDL:
; Ввод командной строки
LXI H,BUF_CMDL
INP_CMDL0:
MVI B,0
INP_CMDL1:
CALL INPUT_KEY
CPI 8
JZ InpCMDL_ZB
CPI 7Fh
JZ InpCMDL_ZB
CNZ PRINT_A
MOV M,A
CPI 13
JZ InpCMDL_BK
CPI '.'
JZ HOT_START
MVI B,0FFh
MVI A,0F2h
CMP L
JZ ERR_EXIT
INX H
JMP INP_CMDL1
InpCMDL_BK:
; Обработка [
]
MOV A,B
RAL
LXI D,BUF_CMDL
MVI B,0
RET
PRINT_MSG:
; Вывод сообщения
; I: [HL]-а/н сообщения/0
MOV A,M
ANA A
RZ
CALL PRINT_A
INX H
JMP PRINT_MSG
GET_CMD:
LXI H,VAR_[HL]
LXI D,MF7CD
MVI C,0
CALL DIR_F
LXI D,BUF_CMDL+1
CALL MF957
SHLD VAR_[HL]
SHLD VAR_[DE]
RC
MVI A,0FFh
STA MF7CD
CALL MF957
SHLD VAR_[DE]
RC
CALL MF957
SHLD VAR_[BC]
RC
JMP ERR_EXIT
MF957:
LXI H,0
MF95A:
LDAX D
INX D
CPI 13
JZ StcRET
CPI ','
RZ
CPI ' '
JZ MF95A
SUI '0'
JM ERR_EXIT
CPI 10
JM MF97F
CPI 11h
JM ERR_EXIT
CPI 17h
JP ERR_EXIT
SUI 7
MF97F:
MOV C,A
DAD H
DAD H
DAD H
DAD H
JC ERR_EXIT
DAD B
JMP MF95A
StcRET:
STC
RET
TSTHD:
MOV A,H
CMP D
RNZ
MOV A,L
CMP E
RET
TstEND:
CALL CHK_ERR
TstEND1:
CALL TSTHD
JNZ TstEND2
INX SP
INX SP
RET
TstEND2:
INX H
RET
CHK_ERR:
MVI A,0FFh
ANA A
CPI 3
RNZ
JMP ERR_EXIT
PR_4RIGHT:
PUSH H
LXI H,MSG_4RIGHT
CALL PRINT_MSG
POP H
RET
PRM_SPC:
MOV A,M
PRH_SPC:
PUSH B
CALL PRINT_HEX
MVI A,' '
CALL PRINT_A
POP B
RET
DIR_D:
; Директива 'D'
CALL PR[HL]
DIR_D1:
CALL PRM_SPC
CALL TstEND
MOV A,L
ANI 0Fh
JZ DIR_D
JMP DIR_D1
DIR_C:
; Директива 'C'
LDAX B
CMP M
JZ DIR_C1
CALL PR[HL]
CALL PRM_SPC
LDAX B
CALL PRH_SPC
DIR_C1:
INX B
CALL TstEND
JMP DIR_C
DIR_F:
; Директива 'F'
MOV M,C
CALL TstEND1
JMP DIR_F
DIR_S:
; Директива 'S'
MOV A,C
CMP M
CZ PR[HL]
CALL TstEND
JMP DIR_S
DIR_T:
; Директива 'T'
MOV A,M
STAX B
INX B
CALL TstEND1
JMP DIR_T
DIR_L:
; Директива 'L'
CALL PR[HL]
DIR_L1:
MOV A,M
ORA A
JM DIR_L2
CPI ' '
JNC DIR_L3
DIR_L2:
MVI A,'.'
DIR_L3:
CALL PRINT_A
CALL TstEND
MOV A,L
ANI 0Fh
JZ DIR_L
JMP DIR_L1
DIR_M:
; Директива 'M'
CALL PR[HL]
CALL PRM_SPC
PUSH H
CALL INPUT_CMDL
POP H
JNC DIR_M1
PUSH H
CALL MF957
MOV A,L
POP H
MOV M,A
DIR_M1:
INX H
JMP DIR_M
DIR_G:
; Директива 'G'
CALL TSTHD
JZ DIR_G1
XCHG
SHLD MF7C3
MOV A,M
STA MF7C5
MVI M,0F7h
MVI A,0C3h
STA 0030h
LXI H,RST6_VECTOR
SHLD 0031h
DIR_G1:
LXI SP,MF7B8
POP B
POP D
POP H
POP PSW
SPHL
LHLD MF7B6
JMP MF7C6
DIR_R:
; Директива 'R'
MOV A,H
OUT 0FAh
DIR_R1:
MOV A,L
OUT 0F9h
IN 0F8h
STAX B
INX B
CALL TstEND1
JMP DIR_R1
GET_POS:
LHLD VAR_POS
RET
GET_SIMB_A:
; Символ в позиции курсора
; O: [A]=код символа
PUSH H
LHLD VAR_POS
MOV A,M
POP H
RET
DIR_I:
; Директива 'I'
LDA MF7CD
ORA A
JZ DIR_I1
MOV A,E
STA MF7CF
DIR_I1:
CALL TAPE_LdDUMP
CALL PR[HL]
XCHG
CALL PR[HL]
XCHG
PUSH B
CALL GET_CSUM
MOV H,B
MOV L,C
CALL PR[HL]
POP D
CALL TSTHD
RZ
XCHG
CALL PR[HL]
ERR_EXIT:
; Выход по ошибке
MVI A,'?'
CALL PRINT_A
JMP HOT_START
TAPE_LdDUMP:
; Загрузка блока с МГ
MVI A,0FFh
CALL TAPE_LdWRD2
PUSH H
DAD B
XCHG
CALL TAPE_LdWORD
POP H
DAD B
XCHG
PUSH H
CALL TAPE_LdDMPE
MVI A,0FFh
CALL TAPE_LdWRD2
POP H
RET
; %%% ???
MVI B,0
MFAC8:
MOV M,B
INX H
MOV A,H
CPI 0F0h
JNZ MFAC8
POP D
POP H
RET
MSG_UT88:DB 31,26
DB '*`t/88*',0 ; *ЮТ/88*
TAPE_LdWORD:
MVI A,8
TAPE_LdWRD2:
CALL TAPE_LdBYTE
MOV B,A
MVI A,8
CALL TAPE_LdBYTE
MOV C,A
RET
TAPE_LdDMPE:
MVI A,8
CALL TAPE_LdBYTE
MOV M,A
CALL TstEND1
JMP TAPE_LdDMPE
GET_CSUM:
; Вычисление контрольной суммы
LXI B,0
GET_CSUM1:
MOV A,M
ADD C
MOV C,A
JNC GET_CSUM2
INR B
GET_CSUM2:
CALL TSTHD
RZ
INX H
JMP GET_CSUM1
DIR_O:
; Директива 'O'
MOV A,C
ORA A
JZ DIR_O1
STA MF7D0
DIR_O1:
PUSH H
CALL GET_CSUM
POP H
CALL PR[HL]
XCHG
CALL PR[HL]
XCHG
PUSH H
MOV H,B
MOV L,C
CALL PR[HL]
POP H
TAPE_SvDUMP:
; Запись блока на МГ
PUSH B
LXI B,0
TAPE_SvDMP1:
CALL TAPE_SvBYTE
DCR B
XTHL
XTHL
JNZ TAPE_SvDMP1
MVI C,0E6h
CALL TAPE_SvBYTE
CALL TAPE_SvWORD
XCHG
CALL TAPE_SvWORD
XCHG
CALL TAPE_SvEBYT
LXI H,0
CALL TAPE_SvWORD
MVI C,0E6h
CALL TAPE_SvBYTE
POP H
CALL TAPE_SvWORD
RET
PR[HL]:
PUSH B
CALL PR_4RIGHT
MOV A,H
CALL PRINT_HEX
MOV A,L
CALL PRH_SPC
POP B
RET
TAPE_SvEBYT:
MOV C,M
CALL TAPE_SvBYTE
CALL TstEND1
JMP TAPE_SvEBYT
TAPE_SvWORD:
; Запись слова на МГ
; I: [HL]=word
MOV C,H
CALL TAPE_SvBYTE
MOV C,L
JMP TAPE_SvBYTE
TAPE_LdBYTE:
JMP TAPE_L_BYTE
TAPE_LBYTE:
MOV D,A
TAPE_LBYTE1:
LXI H,0
DAD SP
LXI SP,0
SHLD MF7C0
MVI C,0
IN 0A1h
ANI 1
MOV E,A
TAPE_LBYTE2:
POP PSW
MOV A,C
ANI 7Fh
RLC
MOV C,A
MVI H,0
;$-10
DCR H
JZ TAPE_LBYTE6
POP PSW
IN 0A1h
ANI 1
CMP E
JZ $-10
ORA C
MOV C,A
DCR D
LDA MF7CF
JNZ $+5
SUI 12h
;$+5
MOV B,A
;$-2
POP PSW
DCR B
JNZ $-2
INR D
IN 0A1h
ANI 1
MOV E,A
MOV A,D
ORA A
JP TAPE_LBYTE5
MOV A,C
CPI 0E6h
JNZ TAPE_LBYTE3
XRA A
STA MF7CE
JMP TAPE_LBYTE4
TAPE_LBYTE3:
CPI 19h
JNZ TAPE_LBYTE2
MVI A,0FFh
STA MF7CE
TAPE_LBYTE4:
MVI D,9
TAPE_LBYTE5:
DCR D
JNZ TAPE_LBYTE2
LHLD MF7C0
SPHL
LDA MF7CE
XRA C
JMP EI_AllRET
TAPE_LBYTE6:
LHLD MF7C0
SPHL
MOV A,D
ORA A
JP ERR_EXIT
CALL CHK_ERR
JMP TAPE_LBYTE1
TAPE_SvBYTE:
; Запись байта на МГ
JMP TAPE_S_BYTE
TAPE_sBYTE:
PUSH PSW
LXI H,0
DAD SP
LXI SP,0
MVI D,8
TAPE_sBYTE1:
POP PSW
MOV A,C
RLC
MOV C,A
MVI A,1
XRA C
OUT 0A1h
NOP
LDA MF7D0
MOV B,A
TAPE_sBYTE2:
POP PSW
DCR B
JNZ TAPE_sBYTE2
MVI A,0
XRA C
OUT 0A1h
NOP
DCR D
LDA MF7D0
JNZ TAPE_sBYTE3
SUI 0Eh
TAPE_sBYTE3:
MOV B,A
TAPE_sBYTE4:
POP PSW
DCR B
JNZ TAPE_sBYTE4
INR D
DCR D
JNZ TAPE_sBYTE1
SPHL
POP PSW
JMP EI_AllRET
ExRET:
RET
PRINT_HEX:
PUSH PSW
RRC
RRC
RRC
RRC
CALL PRINT_HEX1
POP PSW
PRINT_HEX1:
ANI 0Fh
CPI 10
JM PRINT_DIG
ADI 7
PRINT_DIG:
ADI '0'
PRINT_A:
MOV C,A
PRINT_C:
; ВывоД символа
; I: [C]=код (ASCII)
PUSH H
PUSH B
PUSH D
PUSH PSW
LHLD MF7B2
INX H
MOV A,M
ANI 7Fh
MOV M,A
DCX H
LXI D,E_PRINTC
PUSH D
LDA MF7F8
DCR A
JM PRINT_C4
JZ PRINT_C1
JPO PRINT_C6
MOV A,C
SBI ' '
MOV C,A
;$-7
DCR C
JM PRINT_C2
CALL PRC_RIGHT
JMP $-7
PRINT_C2:
XRA A
PRINT_C3:
STA MF7F8
RET
PRINT_C4:
MOV A,C
CPI 27
JZ PRC_AR2
CPI 31
JZ PRC_CLS
CPI 8
JZ PRC_LEFT
CPI 24
JZ PRC_RIGHT
CPI 25
JZ PRC_UP
CPI 26
JZ PRC_DOWN
CPI 10
JZ PRC_PS
CPI 12
JZ PRC_HOME
MOV A,H
CPI 0EFh
JNZ PRINT_C7
PRINT_C5:
CALL KBRD_STAT
ORA A
JZ $+6
CALL INPUT_KEY
;$+6
CALL PRINT_C9
LXI H,0EEBFh
PRINT_C7:
MOV A,M
ANI 80h
ORA C
MOV M,A
INX H
POP D
E_PRINTC:
SHLD MF7B2
INX H
MOV A,M
ORI 80h
MOV M,A
LXI D,1800h
DAD D
SHLD VAR_POS
POP PSW
POP D
POP B
POP H
RET
PRC_CLS:
CALL CLS
PRC_HOME:
LXI H,BUF_SCREEN
RET
CLS:
; Очистка экрана
LXI H,BUF_SCREEN
CLS1:
MVI M,' '
INX H
MOV A,H
CPI 0F0h
RZ
JMP CLS1
PRC_RIGHT:
INX H
MOV A,H
CPI 0EFh
RNZ
JZ PRC_HOME
PRC_LEFT:
DCX H
MOV A,H
CPI 0E7h
RNZ
LXI H,0EEFFh
RET
PRC_DOWN:
LXI D,0040h
DAD D
MOV A,H
CPI 0EFh
RNZ
MVI H,0E8h
RET
PRC_UP:
LXI D,0FFC0h
DAD D
MOV A,H
CPI 0E7h
RNZ
LXI D,0800h
DAD D
RET
PRC_PS:
INX H
MOV A,L
ANI 3Fh
JNZ PRC_PS
MOV A,H
CPI 0EFh
JZ PRINT_C5
RET
PRINT_C9:
LXI H,BUF_SCREEN+40h
LXI D,BUF_SCREEN
;$-7
MOV A,M
STAX D
INX D
INX H
MOV A,H
CPI 0EFh
JNZ $-7
LXI H,0EEC0h
MVI A,' '
;$-2
MOV M,A
INR L
JNZ $-2
RET
PRINT_C1:
MOV A,C
CPI 59h
JNZ PRINT_C2
CALL PRC_HOME
MVI A,2
JMP PRINT_C3
PRINT_C6:
MOV A,C
SBI ' '
MOV C,A
;$-9
DCR C
MVI A,4
JM PRINT_C3
CALL PRC_DOWN
JMP $-9
PRC_AR2:
MVI A,1
JMP PRINT_C3
INPUT_KEY:
; Ввод символа с клавиатуры
; O: [A]=код символа
PUSH H
PUSH D
PUSH B
MVI A,7Fh
STA MF7F3
INKEY1:
CALL SCAN_KEYS
CPI 0FFh
JNZ INKEY2
MVI A,0
STA MF7F3
MVI A,0
STA MF7F4
JMP INKEY1
INKEY2:
MOV D,A
LDA MF7F4
ANA A
JNZ INKEY3
LDA MF7F3
ANA A
JZ INKEY3
LDA MF7F3
DCR A
STA MF7F3
JNZ INKEY1
MVI A,1
STA MF7F4
INKEY3:
CALL INKEY4
MOV A,D
POP B
POP D
POP H
RET
SCAN_KEYS:
; Опрос клавиатуры
; O: [A]=код нажатой клавиши или FFh
PUSH B
SCAN_KEY1:
CALL SCAN_KEY2
MOV B,A
; задержка
MVI C,0FFh
;$-1
DCR C
JNZ $-1
CALL SCAN_KEY2
CMP B
JNZ SCAN_KEY1
POP B
RET
SCAN_KEY2:
PUSH B
PUSH D
PUSH H
MVI B,0
MVI C,0FEh
MVI D,8
SCAN_KEY3:
MOV A,C
OUT 7
RLC
MOV C,A
IN 6
ANI 7Fh
CPI 7Fh
JNZ SCAN_KEY4
MOV A,B
ADI 7
MOV B,A
DCR D
JNZ SCAN_KEY3
IN 6
ANI 80h
JZ AFF_AllRET
MVI A,0FEh
JMP AllRET
AFF_AllRET:
MVI A,0FFh
AllRET:
POP H
POP D
POP B
RET
SCAN_KEY4:
RAR
JNC SCAN_KEY5
INR B
JMP SCAN_KEY4
SCAN_KEY5:
MOV A,B
CPI '0'
JNC SCAN_KEY7
ADI '0'
CPI '<'
JC SCAN_KEY6
CPI '@'
JNC SCAN_KEY6
ANI 2Fh
SCAN_KEY6:
MOV C,A
JMP SCAN_KEY8
SCAN_KEY7:
LXI H,ESC_CODES
SUI '0'
MOV C,A
MVI B,0
DAD B
MOV A,M
JMP AllRET
SCAN_KEY8:
IN 5
ANI 7
CPI 7
JZ SCAN_KEY12
RAR
RAR
JNC SCAN_KEY9
RAR
JNC SCAN_KEY10
MOV A,C
ORI 20h
JMP AllRET
SCAN_KEY9:
MOV A,C
ANI 1Fh
JMP AllRET
SCAN_KEY10:
MOV A,C
CPI 40h
JNC AllRET
CPI 30h
JNC SCAN_KEY11
ORI 10h
JMP AllRET
SCAN_KEY11:
ANI 2Fh
JMP AllRET
SCAN_KEY12:
MOV A,C
JMP AllRET
ESC_CODES:DB 32,24,8,25,26,13,31,12
INKEY4:
MVI C,0BFh
;$-12
CALL INKEY5
OUT 0A1h
CMA
CALL INKEY5
OUT 0A1h
DCR C
JNZ $-12
INKEY5:
MVI B,2Fh
;$-1
DCR B
JNZ $-1
RET
; %%% FE63h:
;$-4
IN 6
ANI 80h
JNZ $-4
RET
KBRD_STAT:
XRA A
OUT 7
IN 6
CMA
ANI 7Fh
RZ
ORI 0FFh
RET
MFE77:
LHLD MF7D1
RET
MFE7B:
SHLD MF7D1
RET
MSG_PROMPT:DB 13,10,24,'=>',0
MSG_4RIGHT:DB 13,10,24,24,24,24,0
MSG_REGS:DB 13,10
DB ' PC-',13,10
DB ' HL-',13,10
DB ' BC-',13,10
DB ' DE-',13,10
DB ' SP-',13,10
DB ' AF-'
DDB 25,6
DB 0
MSG_BKSPC:DB 8,32,8,0
RST6_VECTOR:
; Обработчик RST 6 (CALL 30h)
SHLD MF7B6
PUSH PSW
POP H
SHLD MF7BE
POP H
DCX H
SHLD MF7B4
LXI H,0
DAD SP
LXI SP,MF7BE
PUSH H
PUSH D
PUSH B
LHLD MF7B4
LXI SP,STACK
CALL PR[HL]
XCHG
LHLD MF7C3
CALL TSTHD
JNZ HOT_START
LDA MF7C5
MOV M,A
JMP HOT_START
DIR_X:
; Директива 'X'
LXI H,MSG_REGS
CALL PRINT_MSG
LXI H,MF7B4
MVI B,6
DIR_X1:
MOV E,M
INX H
MOV D,M
PUSH B
PUSH H
XCHG
CALL PR[HL]
CALL INPUT_CMDL
JNC DIR_X2
CALL MF957
POP D
PUSH D
XCHG
MOV M,D
DCX H
MOV M,E
DIR_X2:
POP H
POP B
DCR B
INX H
JNZ DIR_X1
RET
CPI_PART2:
CPI 'B'
JZ DIR_B
CPI 'W'
JZ DIR_W
CPI 'V'
JZ DIR_V
JMP CPI_PART3
DIR_V:
; Директива 'V'
DI
LXI H,0
LXI B,017Ah
IN 0A1h
ANA B
MOV E,A
DIR_V1:
IN 0A1h
ANA B
CMP E
JZ DIR_V1
MOV E,A
DIR_V2:
IN 0A1h
ANA B
INX H
CMP E
JZ DIR_V2
MOV E,A
DCR C
JNZ DIR_V2
DAD H
DAD H
MOV A,H
ORA A
JM DIR_V3
CMA
ANI 20h
RRC
RRC
RRC
MOV B,A
RRC
RAR
ADD B
INR A
MOV B,A
MOV A,H
SUB B
DIR_V3:
STA MF7CF
EI
CALL PRH_SPC
JMP HOT_START
DB 0FFh
TAPE_L_BYTE:
DI
PUSH H
PUSH B
PUSH D
JMP TAPE_LBYTE
EI_AllRET:
POP D
POP B
POP H
EI
JMP ExRET
TAPE_S_BYTE:
DI
PUSH H
PUSH B
PUSH D
JMP TAPE_sBYTE
CPI_PART3:
CPI 'K'
JZ DIR_K
JMP HOT_START
DIR_K:
; Директива 'K'
PUSH H
CALL GET_CSUM
POP H
CALL PR[HL]
XCHG
CALL PR[HL]
XCHG
PUSH H
MOV H,B
MOV L,C
CALL PR[HL]
POP H
JMP HOT_START
DDB 0FFh,35
; %%% FFC0h:
NOP
DI
PUSH PSW
PUSH B
PUSH D
PUSH H
LXI H,BUF_CONST
LXI D,0F6FDh
MVI B,3
;$-13
LDAX D
INR A
DAA
STAX D
CMP M
JNZ $+11
XRA A
STAX D
INX H
INX D
DCR B
JNZ $-13
;$+11
LHLD 0F6FEh
LDA 0F6FDh
STA 9000h
SHLD 9001h
POP H
POP D
POP B
POP PSW
EI
RET
BUF_CONST:
DB 60h
DB 60h
DB 24h
DIR_B:
; Директива 'B'
LHLD 0C3FEh
LDA 0C3FDh
RST 5
RST 3
JMP HOT_START
NOP
NOP
END