;z80
;assembler
;zx-spectrum


KEY     LD      A,1
        CP      #FF
        JR      Z,KEYS1
        CP      #FE
        RET     Z
        CP      #FD
        JR      Z,KEYS2
        DEC     A
        JR      Z,KEYS
        LD      (KEY+1),A
        JP      VIEV
KEYS1   CALL    CLS_EK
        LD      A,10
        LD      (KEY+1),A
        JR      KEY
KEYS2   LD      A,#FF
        LD      (STR+1),A
        DEC     A
        LD      (KEY+1),A
        JR      KEY
KEYS    CALL    KLAVS
        RR      C
        CALL    NC,LEFT
        RR      C
        CALL    NC,RIGHT
        RR      C
        CALL    NC,UP
        RR      C
        CALL    NC,DOWN
        RR      C
        CALL    NC,FIRE
;-----------------------------------
        LD      A,#FE
        IN      A,(#FE)
        RRA 
        JR      C,CH_SPR1
        LD      A,#7F
        IN      A,(#FE)
        RRA 
        CALL    NC,EXIT                 ;EXIT
;-----------------------------------

CH_SPR1 LD      A,0
        XOR     1
        LD      (CH_SPR1+1),A
        JR      Z,CH_SPR2
        LD      HL,BUFER5+336-48
        JR      CH_SPR3
CH_SPR2 LD      HL,BUFER2+336-48
CH_SPR3 LD      (CH_SPR+1),HL
        JP      VIEV
EXIT    LD      A,5
        LD      (STR+1),A
        RET 
LEFT    LD      A,(COORDX)
        OR      A
        RET     Z
        SUB     2
        LD      (COORDX),A
        RET 
RIGHT   LD      A,(COORDX)
        CP      255-16
        RET     NC
        ADD     A,2
        LD      (COORDX),A
        RET 
DOWN    LD      A,(COORDY)
        CP      191-4
        RET     NC
        ADD     A,2
        LD      (COORDY),A
        RET 
UP      LD      A,(COORDY)
        OR      A
        RET     Z
        SUB     2
        LD      (COORDY),A
        RET 
VIEV    CALL    SOHR
VIV     LD      A,1
        OR      A
        CALL    Z,VIEV_SP
        LD      HL,(COORDX)
        CALL    NPOS
VIEV3   PUSH    HL
CH_SPR  LD      HL,BUFER2+336-48
        LD      DE,48
        LD      A,(COORDX)
        AND     7
        JR      Z,VIEV5
        LD      B,A
VIEV6   OR      A
        SBC     HL,DE
        DJNZ    VIEV6
VIEV5   PUSH    HL
MASK    LD      HL,BUFER7+336-48
        OR      A
        JR      Z,VIEV8
        LD      B,A
VIEV9   OR      A
        SBC     HL,DE
        DJNZ    VIEV9
VIEV8   PUSH    HL
        POP     IX
        POP     HL
        POP     DE
        LD      B,COORY
VIEV7   LD      A,D
        CP      #58
        RET     NC
        PUSH    DE
        LD      A,(DE)
        AND     (IX+0)
        OR      (HL)
        LD      (DE),A
        INC     E
        INC     HL
        INC     IX
        LD      A,(DE)
        AND     (IX+0)
        OR      (HL)
        LD      (DE),A
        INC     E
        INC     HL
        INC     IX
        LD      A,(DE)
        AND     (IX+0)
        OR      (HL)
        LD      (DE),A
        INC     HL
        INC     IX
        POP     DE
        CALL    DPIX_DE
        DJNZ    VIEV7
        RET 
VIEV_SP LD      HL,BUFER9+336-48
        LD      (CH_SPR+1),HL
        LD      HL,BUFER10+336-48
        LD      (MASK+1),HL
        RET 
SOHR    LD      HL,(COORDX)
        CALL    NPOS
        LD      DE,BUFER3
        LD      B,COORY
SOHR1   LD      A,H
        CP      #58
        RET     NC
        PUSH    HL
        LD      A,(HL)
        LD      (DE),A
        INC     L
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     L
        INC     DE
        LD      A,(HL)
        LD      (DE),A
        INC     DE
        POP     HL
        CALL    DPIX_HL
        DJNZ    SOHR1
        RET 
VIEV_B  PUSH    AF
        LD      HL,(COORDX)
        CALL    NPOS
        LD      DE,BUFER3
        LD      B,COORY
VIEV_B1 LD      A,H
        CP      #58
        JR      NC,VIEV_B2
        PUSH    HL
        LD      A,(DE)
        LD      (HL),A
        INC     L
        INC     DE
        LD      A,(DE)
        LD      (HL),A
        INC     L
        INC     DE
        LD      A,(DE)
        LD      (HL),A
        INC     DE
        POP     HL
        CALL    DPIX_HL
        DJNZ    VIEV_B1
VIEV_B2 POP     AF
        RET 
;----------------------------------
NPOS    LD      A,L
        RLCA 
        RLCA 
        RLCA 
        XOR     H
        AND     199
        XOR     H
        RLCA 
        RLCA 
        LD      L,A
        LD      A,H
        AND     A
        RRA 
        SCF 
        RRA 
        AND     A
        RRA 
        XOR     H
        AND     248
        XOR     H
        LD      H,A
        RET 
;---------------------------------
DPIX_DE INC     D
        LD      A,D
        AND     7
        RET     NZ
        LD      A,E
        ADD     A,#20
        LD      E,A
        RET     C
        LD      A,D
        SUB     8
        LD      D,A
        RET 
DPIX_HL EX      DE,HL
        CALL    DPIX_DE
        EX      DE,HL
        RET 
UPIX_HL LD      A,H
        DEC     H
        AND     7
        RET     NZ
        LD      A,L
        SUB     #20
        LD      L,A
        RET     C
        LD      A,H
        ADD     A,8
        LD      H,A
        RET 
UPIX_DE EX      DE,HL
        CALL    UPIX_HL
        EX      DE,HL
        RET 
;----------------------------------

