;z80
;zx-spectrum
;assembler

;  48
;    " " N1
;    (  BORN DEAD-16)
;   + 7  (  2 )
;   1 ,  
; 24x- ,  -    
; 340.     .  - <=512
; BORN DEAD   192)

;WRTTEN BY WOCEN/TRIUMPH 7-10  2000

; 

;5-
;#4000-#5AFF [#1B00] -  0
;#5B00-#5FFF [#500] - 
;#6000-#1FF [#200] -  
;#6200-#65FF [#400] -  
;#6600-#7FFF [#1A00] - 

;2-
;    
;#8000-#955C [#155D] - 
;#955D-#BDFF [#28A3] -   ,  25 
;#BE00-#BF00 [#101] -   IM2
;#BF01-#BFBE [#BE] -     IM2
;#BFBF-#BFC1 [3] -   IM2
;#BFC2-#BFFF [#3E] -   

;0- 

;1,3,4,6  

;7-
;#4000-#DAFF [#1B00] - 2- 
;#DB00-#F050 [#1551] - 4x8, 8x8, 8x8 , MAINMENU,
;                      MUS_MENU, FQ_PT3.4, HELP
;#FO51-#E5FF [#FAF] - 

COL_LINE EQU    #6000           ;   
ADR_LINE EQU    #6200           ;  
PRN_SCR EQU     #955D           ;   
TIME_SP EQU     #BFBF           ; 

;  ,      7 .   0

        ORG     #7F00
ANIMA
+       INCBIN  "bec_spr "      ;[#100]

        ORG     #8000
+       INCBIN  "yama!!!.p"

        ORG     #5B00
DEHRUST
+       INCBIN  "DEHR21.C"      ;[#100] 

        ORG     #DB00
FONT
+       INCBIN  "becfont.p"     ;[#35A] 4x8

        ORG     #DE5A
FONT2
+       INCBIN  "becfont2.p"    ;[#195] 8x8

        ORG     #DFEF
FONT3
+       INCBIN  "becfont3.p"    ;[#1A6] 8x8   90

        ORG     #E195
FON
+       INCBIN  "mainmenu.p"    ;[#881]   

        ORG     #EA32
MUS
+       INCBIN  "mus_menu.p"    ;[#229]   

        ORG     #EC5B
FM_TAB
+       INCBIN  "FQ_PT3?4.p"    ;[#20F]  

        ORG     #EE6A
HELP
+       INCBIN  "help2   .p"    ;[#203]    .

        ORG     #F06D
NAME_MUS
+       INCBIN  "name_mus.p"    ;[#D6]  

        ORG     #F143
NAME_TXT
+       INCBIN  "name2txt.p"    ;[#10D]  
END1
LEN1=END1-#DB00

STR_7   EQU     6               ;   7

        ORG     #C000
MUSIC
+       INCBIN  "MAIN_MUS.p"    ;

        ORG     #6600

        LD      A,0             ;0 - KEMPSTON JOY ON
        OR      A
        LD      A,#DB           ;IN A,(n)
        JR      Z,$+2+2
        LD      A,#E6           ;AND n
        LD      (JOY_OFF),A

        LD      A,0             ;0 - KEMPSTON MOUSE ON
        OR      A
        LD      A,#69           ;LD L,C
        JR      Z,$+2+2
        LD      A,#C9           ;RET
        LD      (M_OFF),A
        XOR     A
        OUT     (#FE),A
        LD      HL,#C9F1        ;  TR-DOS
        LD      (#5CC2),HL

        XOR     A
        CALL    PAGE
        LD      HL,#C000
        LD      DE,#C000
        CALL    DEHRUST
        CALL    MUSIC

        CALL    _IM2
        EI 

        XOR     A               ; 
        LD      (CUR_LINE),A    ;   
        LD      H,A
        LD      L,A
        LD      (CUR_STR),HL    ;  
        CALL    TEXT_KAK        ; 
        LD      A,#FF
        LD      (OLD_TXT),A     ;   

START_1 CALL    SCR_0
        HALT                    ; 0 
        CALL    COPY            ;  0  1
        CALL    SCR_1
        HALT                    ; 1 
        CALL    CLS             ; 0 

        CALL    MENU_OUT        ; 

        CALL    INST_ART        ;  

        CALL    PRN_ART         ;  
        CALL    PRN_ANIM        ;  2x2

        CALL    SCR_0
        HALT                    ; 0 
        CALL    COPY            ;  0  1

        CALL    MENU_KEY        ;  

        CALL    LOAD            ; , 
        LD      A,(ERROR)
        OR      A
        JR      NZ,START_1
        CALL    TEXT_KAK        ; 
        JR      START_1


TEXT_KAK                        ;  
        CALL    COPY            ;  0  1
        CALL    SCR_1
        HALT                    ; 1 
        LD      A,(CUR_TXT)     ; 
        LD      C,A
        LD      A,(OLD_TXT)     ; 
        CP      C               ;  ?
        JR      Z,TEXT_OK       ;

        XOR     A               ; 
        LD      (CUR_LINE),A    ;   
        LD      (SPEED),A       ;
        LD      H,A
        LD      L,A
        LD      (CUR_STR),HL    ;  
        LD      (ALL_LINE),HL   ; - 
        INC     A               ;    
        LD      (DOWN_0+1),A
        LD      (UP_0+1),A

        CALL    INST_FONT
        CALL    INST_TEXT
TEXT_OK CALL    INST_PRNT       ; 
        LD      A,(CUR_TXT)
        LD      (OLD_TXT),A     ; 

        CALL    CLS             ; 0 
        LD      A,5
        CALL    PAGE

        LD      DE,#C004+24     ;   0 
        LD      B,192
FORM_1  LD      H,D
        LD      A,E
        AND     %11100000
        OR      2
        LD      L,A

        INC     D
        LD      A,D
        AND     7
        JR      NZ,FORM_2
        LD      A,E
        ADD     A,#20
        LD      E,A
        JR      C,FORM_2
        LD      A,D
        SUB     8
        LD      D,A
FORM_2
        LD      (HL),E
        INC     L
        LD      (HL),D
        DEC     L
        DJNZ    FORM_1

        CALL    PRN_ALL         ;    
        LD      A,5
        CALL    PAGE
        CALL    PRN_SCR_        ;  0 
        CALL    SCR_0
        HALT 
        CALL    COPY            ; 0  1
        HALT 

L1      CALL    SCR_0
        HALT 
        LD      A,7             ;7 
        CALL    PAGE            ;0 
        CALL    PRN_SCR_
        CALL    UPR_KEY

        CALL    SCR_1           ;1 
        HALT 
        LD      A,5             ;5 
        CALL    PAGE
        CALL    PRN_SCR_
        CALL    UPR_KEY

        LD      A,(KOD)
        BIT     5,A             ;  ESCAPE ?
        RET     NZ              ;
        BIT     6,A
        JP      NZ,TRACK_LIST
        BIT     7,A
        JP      NZ,HELP_

        LD      A,#FB           ;W
        IN      A,(#FE)
        BIT     1,A
        JR      Z,_PLUS
L2      LD      A,#FD           ;S
        IN      A,(#FE)
        BIT     1,A
        JP      Z,_MINUS
        JR      L1

;------- -   
_PLUS
        LD      A,(KOL_STR)
        CP      24
        JR      Z,L2

        CALL    SCR_0           ; 0 
        HALT 

        LD      HL,(ADR_OUT)
        LD      DE,0-#20
        ADD     HL,DE
        LD      (ADR_OUT),HL
        LD      (PRN_S4+1),HL
        LD      H,#D8
        LD      (PRN_ATR+1),HL

        LD      A,(KOL_STR)
        LD      C,A
        ADD     A,2
        LD      (KOL_STR),A
        LD      (DOWN_11+1),A
        LD      (INST_T8+1),A
        INC     A
        LD      (PRN_N+1),A

        LD      A,24
        SUB     C
        LD      B,A
        XOR     A
        ADD     A,18    ;    1 
        DJNZ    $-2
        LD      E,A
        LD      D,0
        LD      HL,OUT_SP
        SBC     HL,DE
        LD      (HL),#DD        ;  LD C,(IX+)
        INC     HL
        LD      (HL),#4E

        LD      A,(INST_P0+1)
        ADD     A,16
        LD      (INST_P0+1),A

        LD      A,(PRN_S1+1)
        ADD     A,16
        LD      (PRN_S1+1),A
        ADD     A,8
        LD      (LINE_1+1),A
        LD      (LINE_2+1),A
        LD      (LINE_3+1),A
        LD      (LINE_4+1),A
        LD      (LINE_5+1),A
        LD      (LINE_6+1),A

        LD      HL,(ALL_LINE)
        OR      A
        INC     C
        INC     C
        SBC     HL,BC
        DEC     HL
        LD      (DW_STR),HL     ; ,  
        EX      DE,HL

        LD      HL,(CUR_STR)
        LD      A,H             ; 
        OR      L               ;  ?
        JR      Z,_PLUS_2       ;
        DEC     HL              ;  
        OR      A               ; 
        SBC     HL,DE           ;   ?
        ADD     HL,DE
        JR      C,_PLUS_1       ;
        XOR     A
        LD      (DOWN_0+1),A    ;  
        LD      (CUR_LINE),A
        EX      DE,HL           ; MAX  
_PLUS_1 LD      (CUR_STR),HL    ;  
        JP      _MINUS1
_PLUS_2 XOR     A
        LD      (CUR_LINE),A
        JR      _PLUS_1

;------- -   
_MINUS
        LD      A,(KOL_STR)
        CP      18
        JP      Z,L1

        CALL    SCR_0           ; 0 
        HALT 

        LD      HL,(ADR_OUT)
        LD      DE,#20
        ADD     HL,DE
        LD      (ADR_OUT),HL
        LD      (PRN_S4+1),HL
        LD      H,#D8
        LD      (PRN_ATR+1),HL

        LD      A,(KOL_STR)
        SUB     2
        LD      (KOL_STR),A
        LD      (DOWN_11+1),A
        LD      (INST_T8+1),A
        LD      C,A
        INC     A
        LD      (PRN_N+1),A

        LD      A,24
        SUB     C
        LD      B,A
        XOR     A
        ADD     A,18    ;    1 
        DJNZ    $-2
        LD      E,A
        LD      D,0
        LD      HL,OUT_SP
        SBC     HL,DE
        LD      (HL),#18        ; JR OUT_SP
        INC     HL
        DEC     A
        DEC     A
        LD      (HL),A

        LD      A,(INST_P0+1)
        SUB     16
        LD      (INST_P0+1),A

        LD      A,(PRN_S1+1)
        SUB     8
        LD      (LINE_1+1),A
        LD      (LINE_2+1),A
        LD      (LINE_3+1),A
        LD      (LINE_4+1),A
        LD      (LINE_5+1),A
        LD      (LINE_6+1),A
        SUB     8
        LD      (PRN_S1+1),A

        LD      HL,(CUR_STR)
        INC     HL
        LD      (CUR_STR),HL

        LD      HL,(ALL_LINE)
        OR      A
        SBC     HL,BC
        DEC     HL
        LD      (DW_STR),HL     ; ,  

        LD      A,1
        LD      (DOWN_0+1),A
        LD      (UP_0+1),A

_MINUS1 CALL    INST_PRNT       ;  
        CALL    PRN_ALL         ;    
        LD      A,7             ;7 
        CALL    PAGE            ;0 
        LD      HL,#D800
        LD      DE,#D801
        LD      BC,#02FF
        LD      (HL),L
        CALL    _LDIR           ; .  1 

        CALL    PRN_SCR_        ;  1 
        CALL    SCR_1
        HALT 
        LD      HL,#C000
        LD      DE,#4000
        LD      BC,#1B00
        CALL    _LDIR           ;  0 
        JP      L1


UPR_KEY CALL    OPROS_K
        LD      A,C
        RRA 
        RRA 
        AND     #03
        JR      Z,UPR_1         ;  /
        CP      #03
        JR      Z,UPR_1         ;  
        LD      (UPR_1+1),A     ;  
        EX      AF,AF'
        LD      HL,SPEED
        LD      A,(HL)
        CP      #1F
        JR      NC,$+2+1
        INC     A
        LD      (HL),A
UPR_0   SRL     A
        LD      C,A
        LD      B,0
        LD      HL,T_SPEED
        ADD     HL,BC           ;  
        LD      C,(HL)          ;  SIN
        LD      HL,CUR_LINE
        LD      A,(HL)
        RRCA 
        RRCA 
        RRCA 
        AND     #1F
        LD      D,A             ; 
        LD      A,(HL)
        EX      AF,AF'
        RRA 
        JR      NC,UP
        JR      DOWN

UPR_1   LD      A,0             ;  
        EX      AF,AF'
        LD      A,(SPEED)
        OR      A
        RET     Z
        DEC     A
        LD      (SPEED),A
        JR      UPR_0

DOWN    LD      A,1
        LD      (UP_0+1),A
        EX      AF,AF'
        ADD     A,C
        RRCA 
        RRCA 
        RRCA 
        AND     #1F
        LD      E,A             ; 
        SUB     D
        LD      B,A             ;- 
        JR      NZ,DOWN_1
DOWN_0  LD      A,1             ; 0,   
        OR      A               ;
        RET     Z
        LD      A,(HL)          ;  1 
        ADD     A,C
LINE_1  CP      200
        JR      C,$+2+2
LINE_2  SUB     200
        LD      (HL),A
        RET 

DOWN_1  LD      HL,(CUR_STR)
        INC     HL
        LD      DE,(DW_STR)
        OR      A
        SBC     HL,DE
        JR      NC,DOWN_2       ; 
        ADD     HL,DE
        LD      (CUR_STR),HL
DOWN_11 LD      DE,24
        ADD     HL,DE
        PUSH    BC
        CALL    PRN_STR         ; 1 
        POP     BC
        LD      HL,CUR_LINE
        DEC     B
        JR      Z,DOWN_0        ;.   1 
        LD      A,C
        SUB     8
        LD      C,A
        LD      A,(HL)
        ADD     A,8
LINE_3  CP      200
        JR      C,$+2+2
LINE_4  SUB     200
        LD      (HL),A
        JR      DOWN_1

DOWN_2  EX      DE,HL
        LD      (CUR_STR),HL
        LD      HL,CUR_LINE
        XOR     A
        LD      (SPEED),A
        LD      (DOWN_0+1),A
        LD      A,(HL)
        AND     7
        RET     Z
        LD      A,(HL)
        AND     %11111000
        ADD     A,8
        JR      LINE_1


UP      LD      A,1
        LD      (DOWN_0+1),A
        EX      AF,AF'
        INC     D
        INC     D       ;+16
        ADD     A,16
        SUB     C
        RRCA 
        RRCA 
        RRCA 
        AND     #1F
        LD      E,A             ; 
        LD      A,D
        SUB     E
        LD      B,A
        JR      NZ,UP_1
UP_0    LD      A,1             ; 0,   
        OR      A               ;
        RET     Z
        LD      A,(HL)          ;  1 
        SUB     C
        JR      NC,$+2+2
LINE_5  ADD     A,200
        LD      (HL),A
        RET 

UP_1    LD      HL,(CUR_STR)
        LD      A,H
        OR      L
        JR      Z,UP_2          ; 
        DEC     HL
        LD      (CUR_STR),HL
        PUSH    HL
        LD      HL,CUR_LINE
        DEC     B
        JR      NZ,UP_11        ;.   1 
        CALL    UP_0
        POP     HL
        JP      PRN_STR         ; 1 

UP_11   LD      A,C
        SUB     8
        LD      C,A
        LD      A,(HL)
        SUB     8
        JR      NC,$+2+2
LINE_6  ADD     A,200
        LD      (HL),A
        POP     HL
        PUSH    BC
        CALL    PRN_STR         ; 1 
        POP     BC
        JR      UP_1

UP_2    LD      HL,CUR_LINE
        LD      A,(HL)
        AND     7
        JR      Z,UP_3
        LD      A,(HL)
        AND     %11111000
        LD      (HL),A
        RET 

UP_3    XOR     A
        LD      (SPEED),A
        LD      (UP_0+1),A
        RET 


EXIT    POP     AF
        DI 
        LD      A,#3F
        LD      I,A
        IM      1
        EI 
        RET 

;-------   
PRN_ALL
        LD      A,(CUR_LINE)    ; 
        AND     7
        LD      (CUR_LINE),A
        PUSH    AF
PRN_N   LD      B,25            ;  +1
        LD      HL,(CUR_STR)
PRN_AL1 PUSH    BC
        PUSH    HL
        CALL    PRN_STR         ;   
        LD      HL,CUR_LINE
        LD      A,8             ; 
        ADD     A,(HL)          ;+  
        LD      (HL),A
        POP     HL
        POP     BC
        INC     HL              ;.  
        DJNZ    PRN_AL1
        POP     AF
        LD      (CUR_LINE),A
        RET 


;-------   
;:  (CUR_LINE)    
;HL=   
PRN_STR
                        ;     
        EX      DE,HL
        LD      HL,(FIRST_3)    ;  3 -1
        OR      A
        SBC     HL,DE           ;   1  ?
        LD      A,1
        JR      NC,FIND_OK      ;

        LD      HL,(FIRST_4)
        OR      A
        SBC     HL,DE
        LD      A,3
        JR      NC,FIND_OK      ; 3 
        LD      HL,(FIRST_6)
        INC     A               ;A=4
        OR      A
        SBC     HL,DE
        JR      NC,FIND_OK      ; 4
        LD      A,6             ; 6
FIND_OK EX      DE,HL           ;.  
        CALL    PAGE            ;   

        ADD     HL,HL
        LD      DE,ADR_LINE
        ADD     HL,DE
        LD      A,(HL)
        INC     L
        LD      H,(HL)          ;DE=   
        LD      L,A
        LD      (PRN_LSP+1),SP
        DI 
        LD      SP,HL

        LD      HL,PRN_SCR+52-3 ;    
                                ; 
        LD      DE,416          ;    1 
        LD      A,(CUR_LINE)
        RRA 
        RRA 
        RRA 
        AND     #1F             ;    
        SUB     31
        NEG 
        LD      ($+3+1),A
        JR      $
       DUP      31
        ADD     HL,DE
       EDUP 
                                ;HL=   
        LD      BC,0-5
        LD      A,8
PRN_LINE
       DUP      11
        POP     DE
        LD      (HL),E
        INC     HL
        LD      (HL),D
        ADD     HL,BC           ;BC=0-5
       EDUP 
        POP     DE
        LD      (HL),E
        INC     HL
        LD      (HL),D
        LD      DE,52+52-9
        ADD     HL,DE
        DEC     A
        JP      NZ,PRN_LINE
PRN_LSP LD      SP,0
        EI 
        RET 

;-------   
;  1 ,     = JP (IX), 
; ,   ,  

PRN_SCR_
        LD      A,(CUR_LINE)    ; 
        LD      HL,(CUR_STR)
        AND     7
        JR      Z,$+2+1
        INC     HL
        LD      DE,COL_LINE
        ADD     HL,DE           ; 
        PUSH    HL
        POP     IX
PRN_ATR LD      HL,#D804+24
        LD      DE,#20
        LD      (OUT_SP+1),SP
        DI 
MEM=0
      DUP       24
        LD      C,(IX+MEM)
        LD      B,C
        LD      SP,HL
       DUP      12
        PUSH    BC
       EDUP 
        ADD     HL,DE
MEM=MEM+1
      EDUP 
OUT_SP  LD      SP,0
        EI 
                                ;   
        LD      A,(CUR_LINE)    ;0-199
        CP      8
        JR      C,PRN_S1        ;    
        JR      Z,PRN_S2        ;    
        SUB     8               ;   
        JR      PRN_S3
PRN_S1  ADD     A,192           ;   
        JR      PRN_S3
PRN_S2  XOR     A               ; 
PRN_S3  LD      C,A
        LD      HL,PRN_SCR
        LD      DE,416          ;    1 
        RRA 
        RRA 
        RRA 
        AND     #1F             ; 
        SUB     #1F
        NEG 
        LD      ($+3+1),A
        JR      $
       DUP      31
        ADD     HL,DE
       EDUP 
        LD      A,C
        LD      DE,52           ;    1 
        AND     7
        SUB     7
        NEG 
        LD      ($+3+1),A
        JR      $
       DUP      7
        ADD     HL,DE
       EDUP 
        LD      (E_CUR+1),HL    ;HL=  
        LD      (HL),#C3
        INC     HL
        LD      (HL),E_CUR      ;JP E_CUR
        INC     HL
        LD      (HL),'E_CUR
                                ;  
        LD      A,(CUR_LINE)    ;0-199
        LD      C,A
        LD      HL,PRN_SCR+3
        LD      DE,416          ;    1 
        RRA 
        RRA 
        RRA 
        AND     #1F             ; 
        SUB     #1F
        NEG 
        LD      ($+3+1),A
        JR      $
       DUP      31
        ADD     HL,DE
       EDUP 
        LD      A,C
        LD      DE,52           ;    1 
        AND     7
        SUB     7
        NEG 
        LD      ($+3+1),A
        JR      $
       DUP      7
        ADD     HL,DE
       EDUP 

        DI                      ;HL=  
        LD      (SP_EXIT+1),SP
        PUSH    HL
PRN_S4  LD      HL,#C004+24
        RET                     ;   

E_CUR   LD      HL,0            ; 
        LD      (HL),#3B        ;DEC SP
        INC     HL
        LD      (HL),#3B        ;DEC SP
        INC     HL
        LD      (HL),#E1        ;POP HL
SP_EXIT LD      SP,0            ; 
        EI 
        RET                     ;


; 
PAGE    PUSH    BC
        LD      (OLD_PAGE+1),A
OLD_SCR OR      #10
        LD      BC,#7FFD
        OUT     (C),A
        POP     BC
        RET 

; 
CH_SCR  LD      A,(OLD_SCR+1)
        XOR     8
CH_SCR1 LD      (OLD_SCR+1),A
        RET 
SCR_0   LD      A,#10
        JR      CH_SCR1
SCR_1   LD      A,#18
        JR      CH_SCR1

;  LDIR
_LDIR   LD      A,C             ;  BC
        AND     #1F
        JR      Z,_32_LDI
        SUB     32
        NEG 
        ADD     A,A             ;*2
        LD      (_LDIR0+1),A
_LDIR0  JR      $
_32_LDI
       DUP      32
        LDI 
       EDUP 
        JP      PE,_32_LDI
        RET 

COPY    LD      A,7
        CALL    PAGE
        LD      HL,#4000
        LD      DE,#C000
        LD      BC,#1B00
        LD      A,(OLD_SCR+1)
        BIT     3,A             ;0  
        JR      Z,$+2+3         ;
        LD      A,D
        LD      D,H
        LD      H,A
        CALL    _LDIR
        XOR     A
        JP      PAGE

CLS     LD      A,7
        CALL    PAGE
        LD      HL,#4000
        LD      DE,#4001
        LD      BC,#1AFF
        LD      A,(OLD_SCR+1)
        BIT     3,A             ;0  
        JR      NZ,$+2+3        ;
        LD      H,#C0
        LD      D,H
        CALL    _LDIR
        XOR     A
        JP      PAGE

;------- 
INTA:
        DI 
        LD      (OLD_SP+1),SP
        LD      SP,TIME_SP
        PUSH    HL,DE,BC,AF,IX,IY
        EXX 
        EX      AF,AF'
        PUSH    HL,DE,BC,AF
        LD      A,(OLD_SCR+1)
        LD      BC,#7FFD
        OUT     (C),A           ;  
        CALL    MUSIC+5         ;0 
OLD_PAGE LD     A,0             ; 
        CALL    PAGE
        POP     AF,BC,DE,HL
        EX      AF,AF'
        EXX 
        POP     IY,IX,AF,BC,DE,HL
OLD_SP  LD      SP,0
        EI 
        RET 

;------- , , -------
OPROS_K:
        XOR     A
JOY_OFF IN      A,(#1F)         ;KEMPSTON JOY
        AND     #1F             ;#10-FIRE, 8-UP, 4-DOWN
        LD      C,A             ;2-, 1-

        LD      A,#FE
        IN      A,(#FE)         ;CAPS  ?
        RRA 
        JR      C,SINCLAR       ;
        LD      HL,CUR_KEY      ;HL=  CURSOR JOY
        LD      B,7             ;  
        JR      OTHER

SINCLAR LD      HL,SIN_KEY      ;HL=  SINCLAIR JOY 1,2
        LD      B,11            ;  
OTHER   CALL    READKEY         ;

        LD      HL,OTH_KEY      ;   
        LD      B,8             ;    
        CALL    READKEY         ;CAPS SHIFT

M_OFF   LD      L,C
        LD      H,0
        LD      BC,#FADF        ; 
        IN      A,(C)           ;   ''
        RRA 
        JR      C,$+2+2         ;   
        SET     2,H             ;UP
        RRA 
        JR      C,$+2+2         ;   
        SET     3,H             ;DOWN
        RRA 
        JR      C,$+2+2
        SET     4,L             ;FIRE

        LD      A,H
        OR      A               ;   ?
        JR      Z,M_4           ;
        XOR     #0C             ; 2  ?
        JR      Z,M_5           ;
                                ; 
        LD      A,(TIME_13)
        CP      7               ;  DOUBLE CLICK ?
        JR      NC,M_1          ;

        LD      A,(TIME_1)
        OR      A               ;   ?
        JR      Z,M_1           ;

DERVIM  LD      A,0
        OR      A
        JR      NZ,M_1

        LD      A,(OLD_K)
        CP      H               ;   ?
        JR      Z,M_3           ;
M_1
        LD      A,H
        LD      (OLD_K),A       ; 
        XOR     A
        LD      (TIME_13),A     ; DOUBLE CLICK
        CPL 
        LD      (DERVIM+1),A

        LD      A,(TIME_1)      ;  ?
        OR      A
        JR      Z,M_2           ;
        DEC     A
        LD      (TIME_1),A
        JR      ONE_KEY
M_2
        LD      A,H             ;UP, DOWN
        OR      L
        LD      L,A
        JR      ONE_KEY
M_3
        BIT     2,H
        JR      Z,$+2+2
        SET     4,L             ;FIRE
        BIT     3,H
        JR      Z,$+2+2
        SET     5,L             ;ESCAPE

        XOR     A               ;  
        LD      (TIME_13),A
        LD      A,6             ; 
        LD      (TIME_1),A

ONE_KEY LD      A,L
        LD      C,A             ; 
ONE_K1  LD      (KOD),A
        RET 

M_4     LD      A,(TIME_13)     ;  
        CP      255             ;  MAX ?
        JR      Z,$+2+1         ;
        INC     A               ;  
        LD      (TIME_13),A
        LD      A,6
        LD      (TIME_1),A      ;  
        XOR     A
        LD      (DERVIM+1),A    ;  
        JR      ONE_KEY         ;H=0

M_5     LD      A,(TIME_13)     ;    -
        OR      A               ;  ?
        JR      Z,ONE_KEY       ;
        SET     6,L             ;TRACK-LIST
        JR      ONE_KEY


OLD_K   DEFB    0
TIME_1  DEFB    6               ;   
TIME_13 DEFB    0               ;   
KOD     DEFB    0               ; 


READKEY LD      A,(HL)
        INC     HL
        IN      A,(#FE)
        CPL 
        AND     (HL)
        INC     HL
        JR      Z,READ_1
        LD      A,(HL)
        OR      C
        LD      C,A
READ_1  INC     HL
        DJNZ    READKEY
        LD      A,C
        JR      ONE_K1

CUR_KEY DEFB    #EF,#01,#10     ;0 FIRE
        DEFB    #EF,#08,#08     ;7 UP
        DEFB    #EF,#10,#04     ;6 DOWN
        DEFB    #F7,#10,#02     ;5 LEFT
        DEFB    #EF,#04,#01     ;8 RIGHT
        DEFB    #F7,#01,#20     ;EDIT
        DEFB    #7F,#01,#20     ;BREAK

SIN_KEY DEFB    #EF,#01,#10     ;0 FIRE
        DEFB    #EF,#02,#08     ;9 UP
        DEFB    #EF,#04,#04     ;8 DOWN
        DEFB    #EF,#10,#02     ;6 LEFT
        DEFB    #EF,#08,#01     ;7 RIGHT

        DEFB    #7F,#01,#10     ;SPACE FIRE
        DEFB    #F7,#10,#10     ;5 FIRE
        DEFB    #F7,#08,#08     ;4 UP
        DEFB    #F7,#04,#04     ;3 DOWN
        DEFB    #F7,#01,#02     ;0 LEFT
        DEFB    #F7,#02,#01     ;9 RIGHT

OTH_KEY DEFB    #BF,#01,#10     ;ENTER FIRE
        DEFB    #FB,#01,#08     ;Q UP
        DEFB    #FD,#01,#04     ;A DOWN
        DEFB    #DF,#02,#02     ;O LEFT
        DEFB    #DF,#01,#01     ;P RIGHT
        DEFB    #FB,#04,#20     ;E EXIT
        DEFB    #7F,#04,#40     ;M-TRACK LIST
        DEFB    #BF,#10,#80     ;H-HELP

        INCLUDE "6ECCUL31",12
END

