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