Code: Select all
; Дизассемблированное ПЗУ из файла "okoshki.zip" (с вышеупомянутым исправлением в DIR_R):
.Z80
aseg
ORG 100H
RABADR EQU 0F800H
DOPPPA EQU 0A000H
BASE EQU 7600H ; выше D0H байтов - служебные ячейки
EK_ADR EQU BASE ; текущий адрес на экране
POSX EQU BASE+02H
POSY EQU BASE+03H
ESC_F EQU BASE+04H
KBDFLG EQU BASE+05H ; если =0, то есть символ в SYMBUF
RUSLAT EQU BASE+06H ; допустимо только 0 или FF
CBEEP EQU BASE+07H
LAST_K EQU BASE+09H ; эти 2 байта должны следовать подряд
COUNT EQU BASE+0AH ; счётчик опросов (вначале 15)
APVFLG EQU BASE+0BH ; флаг автоповтора
FRELOC EQU BASE+0CH ; эта ячейка не используется
TMPSTK EQU BASE+0DH ; временно храним стек при МГ п/п-ммах
WINKOO EQU BASE+10H ; Левый верхний угол окна
DH EQU BASE+12H ; ширина окна -1
DV EQU BASE+13H ; высота окна -1
POINT EQU BASE+14H ; адрес откуда произошёл RST_30H
R_HL EQU BASE+16H
R_BC EQU BASE+18H
R_SP EQU BASE+1CH
R_AF EQU BASE+1EH ; ниже откладываются AF,HL,DE,BC
ABREAK EQU BASE+20H
LNSTEP EQU BASE+22H
STOP_A EQU BASE+23H
TMP_COD EQU BASE+25H
P_JMP EQU BASE+26H ; для байта C3H (JMP)
PAR_HL EQU BASE+27H
PAR_DE EQU BASE+29H
PAR_BC EQU BASE+2BH
FLG_P2 EQU BASE+2DH ; флаг, что есть параметры 2 или 2,3
INV_MG EQU BASE+2EH
KNS_RD EQU BASE+2FH
KNS_WR EQU BASE+30H
RAMTOP EQU BASE+31H
COMBUF EQU BASE+33H ; буфер ввода директивы
STACK EQU BASE+0CFH ; стек монитора
SA EQU 76D0H ; 76D0 начало экранной области
SCBASE EQU 77C2H ; 77C2 ЛЕВ.ВЕРХН.УГОЛ ЭКР.
VG_75 EQU 0C000H
VT_57 EQU 0E000H
RKDOS EQU 0E000H
XROM EQU 0F000H
PA EQU 8000H
PB EQU PA+1
PC EQU PA+2
PU EQU PA+3
PDA EQU DOPPPA
PDB EQU PDA+1
PDC EQU PDA+2
PDU EQU PDA+3
; ----------------------------------------------
.phase 0F800H
JP START
JP CONIN
JP LDBYTE
JP COUT_C
JP WRBYTE
JP COUT_C
JP STATUS
JP HEX_A
JP MSGH
JP XF81B
JP ASKCUR
JP RD_SCR
JP RD_BLK
JP WR_BLK
JP CHSUMM
JP PUSK_VG
ASKTOP: LD HL,(RAMTOP)
JP SETTOP
ABORT: LD HL,(BASE+0CDH)
JP (HL)
; ----------------------------------------------
START: LD HL,PU
LD (HL),8AH
AF83F:
DEC HL
LD (HL),0
LD A,H
CP 75H
JP NZ,AF83F
LD (RAMTOP),HL
LD HL,221DH ; 1D2AH
LD (KNS_RD),HL
LD HL,P_JMP
LD (HL),0C3H
LD HL,(WARMST+1) ; STACK
LD (R_SP),HL
LD SP,HL
LD HL,TITR
CALL MSGH
CALL PUSK_VG
LD HL,5F0H
LD (CBEEP),HL
if $ ne RABADR + 06CH
if1
.printx * Standard subroutine WARMST shifted ! *
endif
endif
WARMST:
LD SP,STACK
CALL RST_18
defb 13,10,':','>'+80H
LD HL,XORA
LD (ABREAK),HL
LD HL,WARMST
PUSH HL
CALL GETLIN
LD A,(COMBUF)
SBC A,'A'-1
LD C,A
LD A,92H
LD HL,0CB1DH
LD DE,MASKA
AF891: INC DE
INC DE
AF893: ADD HL,HL
ADC A,A
JP Z,XROM
DEC C
JP C,AF893
JP NZ,AF891
EX DE,HL
LD E,(HL)
INC HL
LD D,(HL)
PUSH DE
CALL GETPRM
LD A,L
LD HL,(PAR_BC)
LD C,L
LD B,H
LD HL,(PAR_DE)
EX DE,HL
LD HL,(PAR_HL)
RET
; ----------------------------------------------
TITR: defb 1Fh,'oko{e~ki-86rk '
MASKA: DW 1010100100111010B
TABLE: DW DIR_C
DW DIR_D
DW DIR_F
DW DIR_G
DW DIR_I
DW RKDOS
DW DIR_M
DW DIR_O
DW DIR_R
DW DIR_S
DW DIR_T
DW DIR_X
; ----------------------------------------------
ZABOJ: OR H
JP P,GTLLO2
DEC H
DEC L
DEC DE
CALL RST_18
defb 8,32,8+80H
JP GTLLO2
; ----------------------------------------------
if $ ne RABADR + 0EEH
if1
.printx * Internal subroutine GETLIN shifted ! *
endif
endif
GETLIN: LD HL,3FF0H
GTLLO1: LD DE,COMBUF
ADD HL,HL
RET Z
GTLLO2: CALL CONIN
CP '.'
JP Z,ABORT
CP 8
JP Z,ZABOJ
CP 7FH
JP Z,ZABOJ
LD (DE),A
CP 13
CALL NZ,COUT_A
JP Z,GTLLO1
INC H
INC L
JP Z,ERROR
INC DE
JP GTLLO2
; ----------------------------------------------
RST_18: EX (SP),HL
CALL MSGH
INC HL
EX (SP),HL
RET
; ----------------------------------------------
MSGLOO: INC HL
MSGH: LD A,(HL)
OR A
RET Z
CALL COUT_A
RET M
JP MSGLOO
; ----------------------------------------------
if $ ne RABADR + 012CH
if1
.printx * Internal subroutine GETPRM shifted ! *
endif
endif
GETPRM: LD HL,PAR_HL
LD DE,FLG_P2
LD C,0
CALL DIR_F
LD DE,BASE+34H
CALL GET_HL
LD (PAR_HL),HL
LD (PAR_DE),HL
RET C
LD A,0FFH
LD (FLG_P2),A
CALL GET_HL
LD (PAR_DE),HL
RET C
CALL GET_HL
LD (PAR_BC),HL
RET C
NOP
NOP
NOP
GET_HL: LD HL,0
LD BC,ERROR
AF960: LD A,(DE)
INC DE
CP 13
SCF
RET Z
CP ','
RET Z
CP 20H
JP Z,AF960
PUSH BC
SUB 30H
RET M
CP 10
JP M,JJJ_01
CP 11H
RET M
CP 17H
RET P
SUB 7
JJJ_01: ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD A,L
LD L,A
POP BC
JP AF960
; ----------------------------------------------
SETTOP: LD (RAMTOP),HL
RET
; ----------------------------------------------
LD A,H
CP D
RET C
if $ ne RABADR + 0190H
if1
.printx * Internal subroutine CMPDH shifted ! *
endif
endif
CMPDH: LD A,H
CP D
RET NZ
LD A,L
CP E
RET
; ----------------------------------------------
AF996: CALL AF9A1
AF999: CALL CMPDH
INC HL
RET NZ
DEC HL
POPAF: POP AF
RET
; ----------------------------------------------
AF9A1: CALL XF81B
AF9A4: CP 27
RET NZ
CALL PUSK_VG
JP ERROR
; ----------------------------------------------
if $ ne RABADR + 01B0H
if1
.printx * Internal subroutine RIGHT4 shifted ! *
endif
endif
RIGHT4: CALL RST_18
defb 13,10,18h,18h,18h +128
RET
; ----------------------------------------------
LDXHX@: LD A,(HL)
HEXABL: PUSH BC
@HEXA@: CALL HEX_A
LD C,20H
CALL COUT_C
POP BC
RET
; ----------------------------------------------
DIR_D: CALL Z,CHXHL@
PUSH HL
AF9C6: CALL LDXHX@
INC HL
LD A,L
AND 3
LD C,8
CALL NZ,COUT_C
LD A,L
AND 0FH
JP NZ,AF9C6
POP HL
AF9D9: LD A,(HL)
LD C,A
SUB 20H
CP 60H
JP C,AF9E4
LD C,'.'
AF9E4: CALL COUT_C
CALL AF996
LD A,L
AND 0FH
JP NZ,AF9D9
JP DIR_D
; ----------------------------------------------
DIR_C: LD A,(BC)
CP (HL)
JP Z,AFA02
CALL CHXHL@
CALL LDXHX@
LD A,(BC)
CALL HEXABL
AFA02: INC BC
CALL AF996
JP DIR_C
; ----------------------------------------------
DIR_F: LD (HL),C
CALL AF999
JP DIR_F
; ----------------------------------------------
DIR_S: LD A,C
CP (HL)
CALL Z,CHXHL@
CALL AF996
JP DIR_S
; ----------------------------------------------
DIR_T: LD A,(HL)
LD (BC),A
INC BC
CALL CMPDH
JP DIR_T
; ----------------------------------------------
DIR_M: CALL Z,CHXHL@
CALL LDXHX@
PUSH HL
CALL GETLIN
POP HL
JP NC,AFA3E
LD C,';'
CALL COUT_C
PUSH HL
CALL GET_HL
LD A,L
POP HL
LD (HL),A
AFA3E: INC HL
LD A,L
AND 7
JP DIR_M
; ----------------------------------------------
AFA45: PUSH BC
SBC A,A
LD B,A
LD A,(LNSTEP)
XOR B
SUB B
LD C,A
ADD HL,BC
LD A,B
SCF
ADC A,A
ADD A,D
LD D,A
POP BC
RET
; ----------------------------------------------
AFA56: DEC L
LD HL,(EK_ADR)
JP Z,AFA6B
JP PO,AFD9D
JP P,AFDAB
CP 27
JP NZ,AFCEF
LD A,1
RET
; ----------------------------------------------
AFA6B: CP 1FH
JP Z,AFD80
CP 10
JP NZ,AFDB7
SCF
CALL AFDD5
XORA: XOR A ; CY=0
RET
; ----------------------------------------------
ASKCUR: LD HL,(POSX)
RET
; ----------------------------------------------
RD_SCR: PUSH HL
LD HL,(EK_ADR)
LD A,(HL)
POP HL
RET
; ----------------------------------------------
DIR_I: LD A,(FLG_P2)
OR A
JP Z,AFA91
LD A,E
LD (KNS_RD),A
AFA91: CALL RD_BLK
CALL CHXHL@
EX DE,HL
CALL CHXHL@
EX DE,HL
PUSH BC
CALL CHSUMM
LD H,B
LD L,C
CALL CHXHL@
POP DE
CALL CMPDH
RET Z
EX DE,HL
CALL CHXHL@
ERROR:
CALL RST_18
defb 7,'?'+128
JP ABORT
; ----------------------------------------------
RD_BLK: LD A,255
CALL LD_BC
PUSH HL
ADD HL,BC
EX DE,HL
CALL LDBCBS
POP HL
ADD HL,BC
EX DE,HL
PUSH HL
CALL AFB0A
LD A,255
CALL LD_BC
POP HL
if $ ne RABADR + 02CEH ; FACE
if1
.printx * Internal subroutine PUSK_VG shifted ! *
endif
endif
PUSK_VG:
PUSH HL
LD HL,VG_75+1
LD (HL),0
DEC HL
LD (HL),4DH
LD (HL),1DH
LD (HL),99H
LD (HL),93H
INC HL
LD (HL),27H
LD A,(HL)
AFAE1: LD A,(HL)
AND 20H
JP Z,AFAE1
LD HL,VT_57+8
LD (HL),80H
LD L,4
LD (HL),0D0H
LD (HL),76H
INC L
LD (HL),23H
LD (HL),49H
LD L,8
LD (HL),0A4H
POP HL
RET
; ----------------------------------------------
LDBCBS: LD A,8
LD_BC: CALL LDBYTE
LD B,A
LD A,8
CALL LDBYTE
LD C,A
RET
; ----------------------------------------------
AFB0A: LD A,8
CALL LDBYTE
LD (HL),A
CALL AF999
JP AFB0A
; ----------------------------------------------
CHSUMM: LD BC,0
CHSLOO: LD A,(HL)
ADD A,C
LD C,A
PUSH AF
CALL CMPDH
JP Z,POPAF
POP AF
LD A,B
ADC A,(HL)
LD B,A
CALL AF999
JP CHSLOO
; ----------------------------------------------
DIR_O: LD A,C
OR A
JP Z,AFB35 ; если не указано константы
LD (KNS_WR),A
AFB35: PUSH HL
CALL CHSUMM
POP HL
CALL CHXHL@
EX DE,HL
CALL CHXHL@
EX DE,HL
PUSH HL
LD H,B
LD L,C
CALL CHXHL@
POP HL
WR_BLK:
PUSH BC
LD BC,0
AFB4D: CALL WRBYTE
DEC B
EX (SP),HL
EX (SP),HL
JP NZ,AFB4D
LD C,0E6H
CALL WRBYTE
CALL WR_HL
EX DE,HL
CALL WR_HL
EX DE,HL
CALL AFB86
LD HL,0
CALL WR_HL
LD C,0E6H
CALL WRBYTE
POP HL
CALL WR_HL
JP PUSK_VG
; ----------------------------------------------
if $ ne RABADR + 0378H
if1
.printx * Internal subroutine CHXHL@ shifted ! *
endif
endif
CHXHL@: PUSH BC ; <ВК>, HEX_HL, SPACE
CALL RIGHT4
LD A,H
CALL HEX_A
LD A,L
JP @HEXA@
; ----------------------------------------------
DS 2
; ----------------------------------------------
AFB86: LD C,(HL)
CALL WRBYTE
CALL AF999
JP AFB86
; ----------------------------------------------
WR_HL: LD C,H
CALL WRBYTE
LD C,L
JP WRBYTE
; ----------------------------------------------
if $ ne RABADR + 0398H
if1
.printx * LDBYTE for emulator B2M need be at FB98 ! *
endif
endif
LDBYTE: PUSH HL
PUSH BC
PUSH DE
LD D,A
AFB9C: LD A,80H
LD (VT_57+8),A
LD HL,0
ADD HL,SP
LD SP,0
LD (TMPSTK),HL
LD C,0
LD A,(PC)
RRCA
RRCA
RRCA
RRCA
AND 1
LD E,A
AFBB7: POP AF
LD A,C
AND 7FH
RLCA
LD C,A
LD H,0
AFBBF: DEC H
JP Z,AFC34
POP AF
LD A,(PC)
RRCA
RRCA
RRCA
RRCA
AND 1
CP E
JP Z,AFBBF
OR C
LD C,A
DEC D
LD A,(KNS_RD)
JP NZ,AFBDC
SUB 12H
AFBDC: LD B,A
AFBDD: POP AF
DEC B
JP NZ,AFBDD
INC D
LD A,(PC)
RRCA
RRCA
RRCA
RRCA
AND 1
LD E,A
LD A,D
OR A
JP P,AFC0B
LD A,C
CP 0E6H
JP NZ,AFBFF
XOR A
LD (INV_MG),A
JP AFC09
; ----------------------------------------------
AFBFF: CP 19H
JP NZ,AFBB7
LD A,0FFH
LD (INV_MG),A
AFC09: LD D,9
AFC0B: DEC D
JP NZ,AFBB7
LD HL,VT_57+4
LD (HL),0D0H
LD (HL),76H
INC HL
LD (HL),23H
LD (HL),49H
LD A,27H
LD (VG_75+1),A
LD A,0E0H
LD (VG_75+1),A
LD L,8
LD (HL),0A4H
LD HL,(TMPSTK)
LD SP,HL
LD A,(INV_MG)
XOR C
JP POPDBH
; ----------------------------------------------
AFC34: LD HL,(TMPSTK)
LD SP,HL
CALL PUSK_VG
LD A,D
OR A
JP P,ERROR
CALL AF9A4
JP AFB9C
; ----------------------------------------------
if $ ne RABADR + 0446H
if1
.printx * WRBYTE for emulator B2M need be at FC46 ! *
endif
endif
WRBYTE: PUSH HL
PUSH BC
PUSH DE
PUSH AF
LD A,80H
LD (VT_57+8),A
LD HL,0
ADD HL,SP
LD SP,0
LD D,8
AFC58: POP AF
LD A,C
RLCA
LD C,A
LD A,1
XOR C
LD (PC),A
LD A,(KNS_WR)
LD B,A
AFC66: POP AF
DEC B
JP NZ,AFC66
LD A,0
XOR C
LD (PC),A
DEC D
LD A,(KNS_WR)
JP NZ,AFC7A
SUB 14
AFC7A: LD B,A
AFC7B: POP AF
DEC B
JP NZ,AFC7B
INC D
DEC D
JP NZ,AFC58
LD SP,HL
LD HL,VT_57+4
LD (HL),0D0H
LD (HL),76H
INC HL
LD (HL),23H
LD (HL),49H
LD A,27H
LD (VG_75+1),A
LD A,0E0H
LD (VG_75+1),A
LD L,8
LD (HL),0A4H
POP AF
POPDBH: POP DE
POP BC
POP HL
RET
if $-1 ne 0FCA4H
if1
.printx * Internal point 0FCA4H (need for emulator B2M) shifted ! *
endif
endif
; ----------------------------------------------
HEX_A: PUSH AF
RRCA
RRCA
RRCA
RRCA
CALL NIBBLE
POP AF
NIBBLE: AND 0FH
CP 10
JP M,JJJ_02
ADD A,7
JJJ_02: ADD A,30H
COUT_A:
LD C,A
COUT_C: PUSH HL
PUSH BC
PUSH DE
PUSH AF
CALL STATUS
LD A,C
AND 7FH
LD HL,(WINKOO)
EX DE,HL
LD HL,(DH)
ADD HL,DE
LD B,H
LD C,L
LD HL,(POSX)
EX DE,HL
LD HL,(ESC_F)
CALL AFA56
LD (ESC_F),A
LD (EK_ADR),HL
LD HL,VG_75+1
LD (HL),80H
DEC L
LD (HL),E
LD (HL),D
EX DE,HL
LD (POSX),HL
POP AF
POP DE
POP BC
POP HL
RET
; ----------------------------------------------
AFCEF: CP 8
EX (SP),HL
INC HL
INC HL
INC HL
EX (SP),HL
JP Z,COD_08
CP 18H
JP Z,COD_18
CP 1AH
JP Z,COD_1A
CP 19H
JP Z,COD_19
CP 1FH
JP Z,CLS
CP 0CH
JP Z,HOME
CP 13
JP Z,COD_0D
CP 10
JP Z,COD_0A
CP 7
JP NZ,AFDC6
PUSH HL
LD HL,(CBEEP)
EX (SP),HL
POP BC
BEEP:
LD A,B
BP1: EI
DEC A
JP NZ,BP1
LD A,B
BP2: DI
DEC A
JP NZ,BP2
DEC C
JP NZ,BEEP
RET
; ----------------------------------------------
COD_18: INC HL
LD A,E
INC E
CP C
RET C
CALL COD_0D
COD_1A: CALL AFA45
DEC A
CP B
RET C
AFD46: LD A,(WINKOO+1)
CP D
RET NC
CALL AFA45
JP AFD46
; ----------------------------------------------
AFD51: INC HL
INC E
LD A,E
CP C
JP NZ,AFD51
COD_19: LD A,(WINKOO+1)
CP D
JP C,AFA45
AFD5F: CALL AFA45
CP B
CCF
JP NC,AFD5F
RET
; ----------------------------------------------
CLS: LD A,78
LD (LNSTEP),A
LD HL,308H
LD (WINKOO),HL
EX DE,HL
LD HL,183FH
LD (DH),HL
ADD HL,DE
LD B,H
LD C,L
LD HL,SCBASE
AFD80: CALL HOME
AFD83: XOR A
CALL AFDC6
LD A,D
CP B
SBC A,A
OR C
SUB E
JP NZ,AFD83
LD (HL),A
HOME:
CALL AFD46
COD_0D: LD A,(WINKOO)
SUB E
RET Z
DEC E
DEC HL
JP COD_0D
; ----------------------------------------------
AFD9D: SUB 1CH
AFD9F: CP 4
RET Z
PUSH AF
CALL NC,COD_1A
POP AF
DEC A
JP AFD9F
; ----------------------------------------------
AFDAB: SUB 1FH
AFDAD: DEC A
RET Z
PUSH AF
CALL COD_18
POP AF
JP AFDAD
; ----------------------------------------------
AFDB7: PUSH HL
LD HL,(ABREAK)
EX (SP),HL
CP 'Y'
RET NZ
POP AF
CALL HOME
LD A,2
RET
; ----------------------------------------------
AFDC6: LD (HL),A
INC HL
LD A,E
INC E
CP C
RET C
CALL COD_0D
COD_0A: LD A,B
DEC A
CP D
JP NC,AFA45
AFDD5: PUSH DE
PUSH HL
SBC A,A
LD B,A
LD A,(WINKOO+1)
XOR B
SBC A,B
ADD A,D
INC D
LD D,A
CALL COD_0D
LD A,C
SUB E
LD E,A
LD A,(LNSTEP)
XOR B
SBC A,B
LD C,A
AFDED: PUSH DE
PUSH HL
XOR A
AFDF0: LD E,(HL)
LD (HL),A
ADD HL,BC
LD A,E
DEC D
JP P,AFDF0
POP HL
POP DE
INC HL
DEC E
JP P,AFDED
POP HL
POP DE
STATUS: LD A,(PC)
AND 80H
JP Z,AFE0E
LD A,(KBDFLG)
OR A
RET NZ
AFE0E: PUSH HL
LD HL,(LAST_K)
CALL XF81B
CP L
LD L,A
JP Z,AFE2A
AFE1A: LD A,1
LD (APVFLG),A
LD H,15H
AFE21: XOR A
AFE22: LD (LAST_K),HL
POP HL
LD (KBDFLG),A
RET
; ----------------------------------------------
AFE2A: DEC H
JP NZ,AFE21
INC A
JP Z,AFE22
INC A
JP Z,AFE51
PUSH BC
LD BC,5003H
CALL BEEP
POP BC
LD A,(APVFLG)
LD H,0E0H
DEC A
LD (APVFLG),A
JP Z,AFE4C
LD H,40H
AFE4C: LD A,0FFH
JP AFE22
; ----------------------------------------------
AFE51: LD A,(PC)
AND 80H
JP Z,AFE51
LD A,(RUSLAT)
CPL
LD (RUSLAT),A
JP AFE1A
; ----------------------------------------------
if $ ne 0FE63H
if1
.printx * Internal point FE63 (need for emulator emu80) shifted ! *
endif
endif
CONIN: CALL STATUS
OR A
JP Z,CONIN
XOR A
LD (KBDFLG),A
LD A,(LAST_K)
RET
; ----------------------------------------------
XF81B: LD A,(PC)
AND 80H
JP NZ,AFE7D
LD A,0FEH
RET
; ----------------------------------------------
AFE7D: XOR A
LD (PA),A
LD (PC),A ; ненужное и вредное
LD A,(RUSLAT)
AND 1
OR 6
LD (PU),A
LD A,(PB)
INC A
JP NZ,AFE97
DEC A
RET
; ----------------------------------------------
AFE97: PUSH HL
LD L,1
LD H,7
AFE9C: LD A,L
RRCA
LD L,A
CPL
LD (PA),A
LD A,(PB)
CPL
OR A
JP NZ,AFEB3
DEC H
JP P,AFE9C
AFEAF: LD A,0FFH
POP HL
RET
; ----------------------------------------------
AFEB3: LD L,20H
AFEB5: LD A,(PB)
CPL
OR A
JP Z,AFEAF
DEC L
JP NZ,AFEB5
LD L,8
AFEC3: DEC L
RLCA
JP NC,AFEC3
LD A,H
LD H,L
LD L,A
CP 1
JP Z,AFEFA
JP C,AFEF3
RLCA
RLCA
RLCA
ADD A,20H
OR H
CP 5FH
JP NZ,AFF06
LD A,20H
POP HL
RET
; ----------------------------------------------
TABK1: defb 9,0AH,0DH,7FH,8,19H,18H,1AH
TABK2: defb 0CH,1FH,1BH,0,1,2,3,4,5
; ----------------------------------------------
AFEF3: LD A,H
LD HL,TABK2
JP AFEFE
; ----------------------------------------------
AFEFA: LD A,H
LD HL,TABK1
AFEFE: ADD A,L
LD L,A
LD A,(HL)
CP 40H
POP HL
RET C
PUSH HL
AFF06: LD L,A
LD A,(PC)
LD H,A
AND 40H
JP NZ,AFF1A
LD A,L
CP 40H
JP M,AFF3F
AND 1FH
POP HL
RET
; ----------------------------------------------
AFF1A: LD A,(RUSLAT)
OR A
JP Z,AFF2A
LD A,L
CP 40H
JP M,AFF2A
OR 20H
LD L,A
AFF2A: LD A,H
AND 20H
JP NZ,AFF3F
LD A,L
CP 40H
JP M,AFF3B
LD A,L
XOR 20H
POP HL
RET
; ----------------------------------------------
AFF3B: LD A,L
AND 00101111B
LD L,A
AFF3F: LD A,L
CP 40H
POP HL
RET P
PUSH HL
LD L,A
AND 0FH
CP 0CH
LD A,L
JP M,POPHL
XOR 10H
POPHL: POP HL
RET
; ----------------------------------------------
COD_08: LD A,(WINKOO)
CP E
JP NC,AFD51
DEC HL
DEC E
RET
; ----------------------------------------------
DIR_R: OUT (80H),A
LD A,90H
OUT ((high PDA)+3),A ; 0A3H
DIRRLO: LD (PDB),HL
IN A,(high PDA) ; 0A0H
LD (BC),A
INC BC
CALL AF999
JP DIRRLO
; ----------------------------------------------
DIR_G: CALL CMPDH
JP Z,AFF86 ; если нет 2-го параметра
EX DE,HL
LD A,(HL)
LD (TMP_COD),A
LD (HL),0CDH
INC HL
LD SP,HL
POP HL
LD (STOP_A),HL
LD HL,AFF94
PUSH HL
AFF86: LD SP,R_BC
POP BC
POP DE
POP HL
POP AF
LD SP,HL
LD HL,(R_HL)
CALL P_JMP
AFF94: LD (R_HL),HL
PUSH AF
POP HL
LD (R_AF),HL
POP HL
LD (POINT),HL
LD HL,-2
ADD HL,SP
LD SP,R_AF
PUSH HL
PUSH DE
PUSH BC
LD HL,(POINT)
LD SP,HL
LD HL,(STOP_A)
PUSH HL
DEC SP
POP HL
LD A,(TMP_COD)
LD L,A
PUSH HL
JP WARMST
; ----------------------------------------------
DIR_X: CALL RST_18
defb 13,10,'HL'
defb 13,10,'BC'
defb 13,10,'DE'
defb 13,10,'SP'
defb 13,10,'AF'
defb 19H,19H,19H,19H,19H +128
LD HL,R_HL
LD B,5
AFFDD: LD E,(HL)
INC HL
LD D,(HL)
PUSH BC
PUSH HL
EX DE,HL
CALL CHXHL@
CALL GETLIN
JP NC,AFFF5
CALL GET_HL
POP DE
PUSH DE
EX DE,HL
LD (HL),D
DEC HL
LD (HL),E
AFFF5: POP HL
POP BC
DEC B
INC HL
JP NZ,AFFDD
RET
; ----------------------------------------------
defb 3AH,2DH,44H
.dephase
END