       ORG   40000

       LD    HL,(23670)
       LD    (RND_VAL),HL

       
       CALL  START_GAME
       RET
       

;------------------------------

KEY_L     DEFB 0
KEY_R     DEFB 0
KEY_U     DEFB 0
KEY_D     DEFB 0
KEY_F     DEFB 0
KEY_EX    DEFB 0

SHOT_SIZE EQU  6

;------------------------------
SH_COORD  DEFB 0,0  ; 
SH_DIRECT DEFB 0
SH_ACTIVE DEFB 0

;-------------------
E_COORD     EQU  0    ; 
E_SPR_H     EQU  2    ;   
E_SPR_W     EQU  3    ;   
E_SPR_ADR   EQU  4    ;    
E_MAS_ADR   EQU  6    ;   
E_DIRECT    EQU  8    ; 
E_LIVE      EQU  9    ;  

ENEMY_LEN   EQU  14   ;    

E_SH_COORD  EQU  10
E_SH_DIRECT EQU  12
E_SH_ACTIVE EQU  13

ENEMY       DEFS 42   ; 
SPAWN_POS   DEFB 0
;---------------------------------------
ENEMYS      DEFB 0
REST        DEFB 0
NUM_LEVEL   DEFB 0
MAX_LEVEL   DEFB 0

;----------------------------------------
T_COORD     DEFB 0,0  ; 
T_SPR_H     DEFB 0    ;   
T_SPR_W     DEFB 0    ;   
T_SPR_ADR   DEFW 0    ;    
T_MAS_ADR   DEFW 0    ;   
T_DIRECT    DEFB 0    ; 
T_LIVE      DEFB 0
T_LIVES     DEFB 0
;----------------------------
COORD       DEFB  0,0   ; 

BUF_H       DEFB  0     ;  
BUF_W       DEFB  0     ;  
BUF_ADR     DEFW  0     ;   

SPR_H       DEFB  0     ;  
SPR_W       DEFB  0     ;  
SPR_ADR     DEFW  0     ;  

;----------------------------
START_GAME
       CALL  FIRST_SCREEN

       XOR    A
       LD     (NUM_LEVEL),A
       LD     A,1
       LD     (MAX_LEVEL),A

       LD     A,3
       LD     (T_LIVES),A

       CALL   LEVEL_INIT
       CALL   COLOR_RIGHT
       CALL   CYCLE

       LD    A,(KEY_EX)
       CP    1
       JR    NZ,START_GAME

       RET


;------------------------------
CYCLE  
       CALL  VERIFY_LEVEL


       LD    A,(MAX_LEVEL)
       LD    B,A
       LD    A,(NUM_LEVEL)
       CP    B
       JP    Z,VIN_SCREEN

       CALL  INIT_EMPTY_ENEMY    ;  
       CALL  T_INIT              ;  
       CALL  PROCESS_SHBUF       ;  
       CALL  PROCESS_E_SHBUF     ;  
       CALL  PROCESS_TBUF        ; 
       CALL  PROCESS_EBUF        ; 

       CALL  KEYB_POLL           ;  
       CALL  K_PRESSED           ;   
       CALL  E_ACTION            ; 
       CALL  T_SHOT_MOVE         ;  
       CALL  E_SHOT_MOVE         ;         

       LD    A,(KEY_EX)
       CP    1
       RET   Z

       LD    A,(T_LIVES)
       CP    0
       JR    NZ,CYCLE 

       CALL  VEIL
       RET

;--------------------------
VERIFY_LEVEL
       LD    A,(REST)
       CP    0
       RET   NZ

       LD    A,(MAX_LEVEL)
       LD    B,A

       LD    A,(NUM_LEVEL)
       INC   A
       LD    (NUM_LEVEL),A
       CP    B
       CALL  NZ,LEVEL_INIT

       RET
;---------------------------
CLS
       LD    (23693),A ;ATTR
       LD    A,B
       CALL  8859      ;BORDER
       CALL  3435
       LD    A,2       ;STREAM
       CALL  5633
       RET
;---------------------------
FIRST_SCREEN
       LD    A,%00000010
       LD    B,0
       CALL  CLS

       LD    HL,UDG-256
       LD    (23606),HL

       LD    HL,#0704
       LD    (ROW),HL
       LD    HL,#1212
       LD    (HGT),HL

       LD    HL,FTEXT
F_S1   CALL  PRINT
       LD    B,8
F_S2   PUSH  HL
       PUSH  BC
       CALL  SCROLL_UP
       POP   BC
       POP   HL
       DJNZ  F_S2
       LD    A,(HL)
       AND   A
       JR    NZ,F_S1

       LD    B,56
F_S3   PUSH  BC
       CALL  SCROLL_UP
       POP   BC
       DJNZ  F_S3

       LD    HL,15360
       LD    (23606),HL

F_S4   CALL  KEYB_POLL
       LD    A,(KEY_F)
       CP    1
       JR    NZ,F_S4

       RET

       ;   
PRINT  PUSH  BC
       LD    DE,PARAM
       LD    BC,5
       CALL  8252
       LD    B,18        ;   
PR_CI  LD    A,(HL)
       RST   16
       INC   HL
       DJNZ  PR_CI
       POP   BC
       RET

PARAM  DEFB  22,21,7,16,0
FTEXT  DEFM  "!!!  !!  !  ! !  !"
       DEFM  " !  !  ! !! ! !!! "
       DEFM  " !  !!!! ! !! !  !"
       DEFM  " !  !  ! !  ! !  !"
       DEFM  "                  "
       DEFM  "  ! !!!! !!!! !!!!"
       DEFM  " !! !  ! !  ! !  !"
       DEFM  "! ! !!!! !!!! !  !"
       DEFM  "  !    !    ! !  !"
       DEFM  "  ! !!!! !!!! !!!!"
       DEFB  0

UDG    DEFB 0,0,0,0,0,0,0,0
       DEFB 247,247,247,0,127,127,127,0

;---------------------------
VIN_SCREEN
       CALL  VEIL


       LD    A,%00000010
       LD    B,0
       CALL  CLS

       LD    HL,UDG-256
       LD    (23606),HL

       LD    HL,#0704
       LD    (ROW),HL
       LD    HL,#1212
       LD    (HGT),HL

       LD    HL,VTEXT
V_S1   CALL  PRINT
       LD    B,8
V_S2   PUSH  HL
       PUSH  BC
       CALL  SCROLL_UP
       POP   BC
       POP   HL
       DJNZ  V_S2
       LD    A,(HL)
       AND   A
       JR    NZ,V_S1

       LD    B,56
V_S3   PUSH  BC
       CALL  SCROLL_UP
       POP   BC
       DJNZ  V_S3

       LD    HL,15360
       LD    (23606),HL

V_S4   CALL  KEYB_POLL
       LD    A,(KEY_F)
       CP    1
       JR    NZ,V_S4
       
       

       RET

VPARAM DEFB  22,21,7,16,0
VTEXT  DEFM  "!!  !! !!!!  !! !!"
       DEFM  " !!!! !!  !! !! !!"
       DEFM  "  !!  !!  !! !! !!"
       DEFM  "  !!   !!!!   !!! "
       DEFM  "                  "
       DEFM  "!!  !!  !!  !!  !!"
       DEFM  "!!  !!  !!  !!! !!"
       DEFM  "!!  !!  !!  !!!!!!"
       DEFM  " !!!!   !!  !! !!!"
       DEFM  "  !!    !!  !!  !!"
       DEFB  0


;---------------------------
SCROLL_UP 
       LD    HL,(ROW)
       CALL  ADR
       
       
       LD    A,(HGT)
       LD    B,A
       SLA   B
       SLA   B
       SLA   B     
       DEC   B

SCR_U1 PUSH  HL
       PUSH  BC

       PUSH  HL
       POP   DE
       CALL  DOWN
       LD    A,(WDT)
       LD    C,A
       LD    B,0
       LDIR

       POP   BC
       POP   HL
       CALL  DOWN
       DJNZ  SCR_U1
       
       ;CALL  DOWN
       PUSH  HL
       POP   DE
       INC   DE
       LD    (HL),0
       LD    A,(WDT)
       DEC   A
       RET   Z
       LD    C,A
       LD    B,0
       LDIR 


       RET
ROW    DEFB  0
COL    DEFB  0
HGT    DEFB  0
WDT    DEFB  0
;---------------------------
RND_255 
       LD    HL,(RND_VAL)
       LD    DE,7        ;   
                         ;  
       ADD   HL,DE
       LD    E,L
       LD    D,H
       ADD   HL,HL
       ADD   HL,HL
       LD    C,L
       LD    B,H
       ADD   HL,HL
       ADD   HL,BC
       ADD   HL,DE
       LD    (RND_VAL),HL   ;   
                         ;    
       LD    A,H         ; A  
                         ;   
       RET
RND_VAL   DEFW  0
;----------------------------
LEVEL_INIT
       
       LD    A,5
       CALL  8859      ;BORDER
       CALL  VEIL


       ;    
       LD    HL,LEVELS 
       LD    A,(NUM_LEVEL)
       CP    0
       JR    Z,NO_ADD_LEV

       LD    DE,624
       LD    B,A
ADD_L  ADD   HL,DE
       DJNZ  ADD_L
       
NO_ADD_LEV
       LD    DE,LEVEL
       LD    BC,624
       LDIR
       
       ; 
       LD    A,20
       LD    (ENEMYS),A
       LD    (REST),A
       LD    HL,ENEMY+E_LIVE
       LD    DE,ENEMY_LEN
       LD    (HL),0
       ADD   HL,DE
       LD    (HL),0
       ADD   HL,DE
       LD    (HL),0

       ; 
       LD    HL,#40B0       
       LD    (T_COORD),HL
       LD    HL,T1_U
       LD    (T_SPR_ADR),HL
       LD    HL,M1_U
       LD    (T_MAS_ADR),HL
       LD    A,2
       LD    (T_SPR_H),A
       LD    (T_SPR_W),A
       LD    A,3
       LD    (T_DIRECT),A

       
       CALL  PRNT_LVL
       CALL  COLORIZE
       CALL  PRINT_MINI


       RET
;----------------------
VEIL
       LD    HL,#5800
       LD    (TOP_A),HL
       LD    HL,#5AE0
       LD    (BOT_A),HL

       LD    B,12
VEIL_1 PUSH  BC

       LD    HL,(TOP_A)
       PUSH  HL
       POP   DE
       INC   DE
       LD    (HL),%00101101
       LD    BC,31
       LDIR

       LD    HL,(BOT_A)
       PUSH  HL
       POP   DE
       INC   DE
       LD    (HL),%00101101
       LD    BC,31
       LDIR

       LD    BC,3
       CALL  7997


       POP   BC
       LD    DE,32
       LD    HL,(TOP_A)
       ADD   HL,DE
       LD    (TOP_A),HL

       LD    HL,(BOT_A)
       AND A ;C  C
       SBC   HL,DE
       LD    (BOT_A),HL

       DJNZ  VEIL_1
       RET

TOP_A  DEFW  0
BOT_A  DEFW  0




;----------------------
COLOR_RIGHT
       LD    HL,#581A
       LD    B,24
BL1    PUSH  HL
       LD    (HL),%00101000
       INC   HL
       LD    (HL),%00101000
       INC   HL
       LD    (HL),%00101000
       INC   HL
       LD    (HL),%00101000
       INC   HL
       LD    (HL),%00101000
       INC   HL
       LD    (HL),%00101000
       POP   HL
       LD    DE,32
       ADD   HL,DE  
       DJNZ  BL1
       RET

;---------------
PRINT_MINI
       PUSH  IX
       PUSH  HL
       

       LD    IX,MINI_COORDS
       LD    A,(ENEMYS)
       LD    C,1
NXTM   LD    L,(IX)
       LD    H,(IX+1)
       CALL  ADR

       LD    DE,MINI
       LD    B,8
NXTL   LD    A,(ENEMYS)
       CP    C
       JR    C,ZERO
       LD    A,(DE)
       JR    NOZERO
ZERO   XOR   A
NOZERO LD    (HL),A
       INC   DE
       CALL  DOWN
       DJNZ  NXTL

       INC   IX
       INC   IX
       INC   C
       LD    A,21
       CP    C
       JR    NZ,NXTM

       POP   HL
       POP   IX

       RET

MINI_COORDS
       DEFB  1,27,1,28
       DEFB  2,27,2,28
       DEFB  3,27,3,28
       DEFB  4,27,4,28
       DEFB  5,27,5,28
       DEFB  6,27,6,28
       DEFB  7,27,7,28
       DEFB  8,27,8,28
       DEFB  9,27,9,28
       DEFB  10,27,10,28


;---------------------------
COLLIS_BOX

       LD    A,(BOX_HL)
       ADD   A,H
       CP    D
       JR    NC,CLS16_1           
       XOR   A
       RET           ; 
CLS16_1
       LD    A,(BOX_DE)
       ADD   A,D
       CP    H
       JR    NC,CLS16_2           
       XOR   A
       RET           ; X  

CLS16_2
       LD    A,(BOX_HL)
       ADD   A,L
       CP    E
       JR    NC,CLS16_3           
       XOR   A
       RET           ; Y  
CLS16_3
       LD    A,(BOX_DE)
       ADD   A,E
       CP    L
       JR    NC,CLS16_4           
       XOR   A
       RET           ; Y  
      
CLS16_4   
       LD    A,1
       RET
BOX_HL DEFB  0
BOX_DE DEFB  0 

;---------------------------
EQUAL_IX_HL  ;    

       PUSH  IX
       POP   DE
 
       LD    A,D
       CP    H
       JR    Z,EIH_1           
       XOR   A
       RET           
EIH_1
       LD    A,E
       CP    L
       JR    Z,EIH_2          
       XOR   A
       RET           
EIH_2  LD    A,1
       RET

;--------------------------
T_DEAD  ;  
       PUSH  HL
       LD    A,(T_LIVES)
       DEC   A
       LD    (T_LIVES),A
       XOR   A
       LD    (T_LIVE),A
       LD    HL,(T_COORD)
       LD    (COORD),HL
       CALL  PROCESS_SH_CLEAR
       POP   HL
       RET

;---------------------------
T_PLAYER_COLLISION  ;    

       LD    A,6
       LD    (BOX_HL),A
       LD    A,16
       LD    (BOX_DE),A

      PUSH  HL
       LD    HL,T_COORD
       LD    E,(HL)
       INC   HL
       LD    D,(HL)
      POP   HL
      
       CALL  COLLIS_BOX
       CP    0    
       RET   Z 
       
       CALL  T_DEAD
       
       LD    A,1
       RET

;---------------------------
ENEMY_TSHOT_COLLISION ;     

       LD    A,(SH_ACTIVE)
       CP    0
       RET   Z

       LD    A,16
       LD    (BOX_HL),A
       LD    A,6
       LD    (BOX_DE),A

      PUSH  HL
       LD    HL,SH_COORD
       LD    E,(HL)
       INC   HL
       LD    D,(HL)
      POP   HL
      
       CALL  COLLIS_BOX
       CP    0    
       RET   Z 
       
       PUSH  HL
       
       EX    DE,HL
       LD    (COORD),HL
       CALL  PROCESS_SH_CLEAR

       POP   HL
       XOR   A
       LD    (SH_ACTIVE),A
       LD    A,1
       RET

;---------------------------
T_SHOT_COLLISION ;    

       LD    A,(SH_ACTIVE)
       CP    0
       RET   Z

       LD    A,6
       LD    (BOX_HL),A
       LD    (BOX_DE),A

      PUSH  HL
       LD    HL,SH_COORD
       LD    E,(HL)
       INC   HL
       LD    D,(HL)
      POP   HL
      
       CALL  COLLIS_BOX
       CP    0    
       RET   Z 
       
       PUSH  HL
       
       EX    DE,HL
       LD    (COORD),HL
       CALL  PROCESS_SH_CLEAR

       POP   HL
       XOR   A
       LD    (SH_ACTIVE),A
       LD    A,1
       RET

;---------------------------
COLLIS_ENEMY  ;      

       LD    A,16
       LD    (BOX_HL),A
       LD    (BOX_DE),A

       LD    (CURRENT_COOR),HL
       PUSH  HL

       LD    HL,ENEMY
       LD    B,3
CO_E1  
       
       CALL  EQUAL_IX_HL
       CP    1
       JR    Z,C_NEXT    ;    

      PUSH  HL
       LD    DE,E_LIVE
       ADD   HL,DE
       LD    A,(HL)
      POP   HL
       CP    0
       JR    Z,C_NEXT    ;   
       

      PUSH  HL
       LD    E,(HL)
       INC   HL
       LD    D,(HL)

       LD    HL,(CURRENT_COOR)

       CALL  COLLIS_BOX
      POP   HL
       
       CP    1    
       JR    Z,IS_COLLIZ       ;     
       

C_NEXT 

       
       LD    DE,ENEMY_LEN
       ADD   HL,DE
       DJNZ  CO_E1

       
       XOR   A            ;  
       POP   HL
       RET

IS_COLLIZ 
       LD    A,1          ; 
       POP   HL
       RET
CURRENT_COOR
       DEFW  0

;--------------------------
T_INIT 
       LD    A,(T_LIVES)
       CP    0
       RET   Z

       LD    A,(T_LIVE)
       CP    1
       RET   Z       

       LD    HL,#40B0       
       LD    (T_COORD),HL
       LD    HL,T1_U
       LD    (T_SPR_ADR),HL
       LD    HL,M1_U
       LD    (T_MAS_ADR),HL

       LD    A,2
       LD    (T_SPR_H),A
       LD    (T_SPR_W),A
       LD    A,3
       LD    (T_DIRECT),A

       LD    A,1
       LD    (T_LIVE),A

       RET

;---------------------------
INIT_EMPTY_ENEMY   ; 
       LD    A,(ENEMYS)
       CP    0
       RET   Z

       LD    IX,ENEMY
       LD    B,3                    
IEE1   LD    A,(IX+E_LIVE)            
       CP    0                          
       JR    Z,IEE2
       LD    DE,ENEMY_LEN
       ADD   IX,DE
       DJNZ  IEE1
       RET

IEE2   ;  
       LD    A,(SPAWN_POS)
       LD    HL,#0000 
       CP    0
       JR    Z,IEE4 
       LD    HL,#6000 
       CP    1
       JR    Z,IEE4 
       LD    HL,#C000
IEE4   
 
       INC   A
       CP    3
       JR    NZ,IEE5
       XOR   A
IEE5   LD    (SPAWN_POS),A
      
       LD    (IX+E_COORD),L
       LD    (IX+E_COORD+1),H
       LD    HL,T1_D
       LD    (IX+E_SPR_ADR),L
       LD    (IX+E_SPR_ADR+1),H
       LD    HL,M1_D
       LD    (IX+E_MAS_ADR),L
       LD    (IX+E_MAS_ADR+1),H
       
       LD    (IX+E_LIVE),1
       LD    (IX+E_SPR_H),2
       LD    (IX+E_SPR_W),2
       LD    (IX+E_DIRECT),4

       LD    A,(ENEMYS)
       DEC   A
       LD    (ENEMYS),A
       CALL  PRINT_MINI
       
RET

;---------------------------
T_SHOT_MOVE
       LD   A,3
       LD   (L_DOP),A

       LD   A,(SH_ACTIVE)
       CP   0
       RET  Z

       LD   A,SHOT_SIZE
       LD   (COLL_SIZE),A
       
       LD   A,(SH_DIRECT)
       LD   HL,(SH_COORD)
       
       CALL UPDATE_COORD
       CALL UPDATE_COORD
 
       CALL LEVEL_COLLISION
       CP   1
       JR   Z,SH_LEVEL_COL

       LD   (SH_COORD),HL
       RET

SH_LEVEL_COL  
       CALL LEVEL_DESTROY
       LD   (COORD),HL
       CALL PROCESS_SH_CLEAR
       LD   HL,(SH_COORD)
       LD   (COORD),HL
       CALL PROCESS_SH_CLEAR
       LD   A,0
       LD   (SH_ACTIVE),A
       RET

T_SHOT_COL



       RET


;---------------------------
E_SHOT_MOVE
       LD   A,3
       LD   (L_DOP),A

       LD   A,SHOT_SIZE
       LD   (COLL_SIZE),A

       LD   IX,ENEMY
       LD   B,3
ESM1   PUSH BC

       LD   A,(IX+E_SH_ACTIVE)
       CP   0
       JR   Z,E_SH_NEXT
       
       LD   L,(IX+E_SH_COORD)
       LD   H,(IX+E_SH_COORD+1)
       LD   A,(IX+E_SH_DIRECT)
       CALL UPDATE_COORD
       CALL UPDATE_COORD

       CALL T_PLAYER_COLLISION
       CP   1
       JR   NZ,SH_C

       LD   (COORD),HL
       CALL PROCESS_SH_CLEAR
       LD   (IX+E_SH_ACTIVE),0
       JR   E_SH_NEXT
       
SH_C   CALL T_SHOT_COLLISION
       CP   1
       JR   NZ,LEV_C

       LD   (COORD),HL
       CALL PROCESS_SH_CLEAR
       LD   (IX+E_SH_ACTIVE),0
       JR   E_SH_NEXT
       
LEV_C  CALL LEVEL_COLLISION
       CP   1
       JR   NZ,E_SH_SAVE

       CALL LEVEL_DESTROY
       LD   (COORD),HL
       CALL PROCESS_SH_CLEAR
       LD   L,(IX+E_SH_COORD)
       LD   H,(IX+E_SH_COORD+1)
       LD   (COORD),HL
       CALL PROCESS_SH_CLEAR

       LD   (IX+E_SH_ACTIVE),0
       JR   E_SH_NEXT


E_SH_SAVE 
       LD   (IX+E_SH_COORD),L
       LD   (IX+E_SH_COORD+1),H

E_SH_NEXT   
       POP  BC
       LD   DE,ENEMY_LEN
       ADD  IX,DE
       DJNZ ESM1
       RET

;---------------------------
PROCESS_EBUF
       LD    IX,ENEMY
       LD    B,3
P_E1   PUSH  BC

       LD    A,(IX+E_LIVE)
       CP    0
       JR    Z,P_E2


       LD   L,(IX+E_COORD) ;  
       LD   H,(IX+E_COORD+1) 

       LD   (COORD),HL
       LD   A,3
       LD   (BUF_H),A    ; 3  3 
       LD   (BUF_W),A
       LD   HL,E_BUF    ; 
       LD   (BUF_ADR),HL
       LD   A,(IX+E_SPR_W)
       LD   (SPR_W),A
       LD   A,(IX+E_SPR_H)
       LD   (SPR_H),A

       CALL LVL_TO_BUF

       ; 
       LD    A,MOD_AND
       LD    (MODE),A
       LD    HL,ISMASK
       LD    (MODMASK),HL
       
       ; 
       LD    L,(IX+E_MAS_ADR)
       LD    H,(IX+E_MAS_ADR+1)
       LD    (SPR_ADR),HL
       ;CALL  SPR_TO_BUF
       
       
       ; 
       LD    A,MOD_OR
       LD    (MODE),A
       LD    HL,NOMASK
       LD    (MODMASK),HL

       ; 
       LD    L,(IX+E_SPR_ADR)
       LD    H,(IX+E_SPR_ADR+1)
       LD    (SPR_ADR),HL
       CALL  SPR_TO_BUF

       CALL WOOD_TO_BUF
       
       CALL BUF_TO_SCR
       
P_E2   POP   BC
       LD    DE,ENEMY_LEN
       ADD   IX,DE
       DJNZ  P_E1

       RET

;---------------------------
PROCESS_TBUF
       LD   A,(T_LIVE)
       CP   0
       RET  Z

       LD   HL,(T_COORD) ;   -  
       LD   (COORD),HL
       LD   A,3
       LD   (BUF_H),A    ; 3  3 
       LD   (BUF_W),A
       LD   HL,T1_BUF    ;    
       LD   (BUF_ADR),HL
       LD   A,(T_SPR_W)
       LD   (SPR_W),A
       LD   A,(T_SPR_H)
       LD   (SPR_H),A

       CALL LVL_TO_BUF

       ; 
       LD    A,MOD_AND
       LD    (MODE),A
       LD    HL,ISMASK
       LD    (MODMASK),HL
       
       ; 
       LD    HL,(T_MAS_ADR)
       LD    (SPR_ADR),HL
       CALL  SPR_TO_BUF

       ; 
       LD    A,MOD_OR
       LD    (MODE),A
       LD    HL,NOMASK
       LD    (MODMASK),HL

       ; 
       LD    HL,(T_SPR_ADR)
       LD    (SPR_ADR),HL
       CALL  SPR_TO_BUF

       CALL WOOD_TO_BUF
       
       CALL BUF_TO_SCR
       
       RET

;---------------------------
PROCESS_SHBUF
       LD   A,(SH_ACTIVE)
       CP   0
       RET  Z
       LD   HL,(SH_COORD) ;  
       LD   (COORD),HL
       LD   A,2
       LD   (BUF_H),A    ; 3  3 
       LD   (BUF_W),A
       LD   HL,SHOT_BUF    ; 
       LD   (BUF_ADR),HL
       LD   A,2
       LD   (SPR_W),A
       LD   (SPR_H),A

       CALL LVL_TO_BUF

       ; 
       LD    A,MOD_AND
       LD    (MODE),A
       LD    HL,ISMASK
       LD    (MODMASK),HL
       
       ; 
       LD    HL,M_SHOT
       LD    (SPR_ADR),HL
       CALL  SPR_TO_BUF

       ; 
       LD    A,MOD_OR
       LD    (MODE),A
       LD    HL,NOMASK
       LD    (MODMASK),HL

       ; 
       LD    HL,SHOT
       LD    (SPR_ADR),HL
       CALL  SPR_TO_BUF

       CALL WOOD_TO_BUF
       
       CALL BUF_TO_SCR
       
       RET

;---------------------------
PROCESS_E_SHBUF

       LD   IX,ENEMY
       LD   B,3
PES1   PUSH BC       

       LD   A,(IX+E_SH_ACTIVE)
       CP   0
       JR   Z,PES2
       LD   L,(IX+E_SH_COORD) 
       LD   H,(IX+E_SH_COORD+1) 
       LD   (COORD),HL      ;  
       LD   A,2
       LD   (BUF_H),A    ; 3  3 
       LD   (BUF_W),A
       LD   HL,SHOT_BUF    ; 
       LD   (BUF_ADR),HL
       LD   A,2
       LD   (SPR_W),A
       LD   (SPR_H),A

       CALL LVL_TO_BUF

       ; 
       LD    A,MOD_AND
       LD    (MODE),A
       LD    HL,ISMASK
       LD    (MODMASK),HL
       
       ; 
       LD    HL,M_SHOT
       LD    (SPR_ADR),HL
       CALL  SPR_TO_BUF

       ; 
       LD    A,MOD_OR
       LD    (MODE),A
       LD    HL,NOMASK
       LD    (MODMASK),HL

       ; 
       LD    HL,SHOT
       LD    (SPR_ADR),HL
       CALL  SPR_TO_BUF

       CALL  WOOD_TO_BUF
       
       CALL  BUF_TO_SCR
       

PES2   POP   BC
       LD    DE,ENEMY_LEN
       ADD   IX,DE
       DJNZ  PES1


       RET

;---------------------------
PROCESS_SH_CLEAR
       LD   A,2
       LD   (BUF_H),A    ; 2  2 
       LD   (BUF_W),A
       LD   HL,SHOT_BUF    ; 
       LD   (BUF_ADR),HL

       CALL LVL_TO_BUF
       CALL WOOD_TO_BUF      
       CALL BUF_TO_SCR
       
       RET
;--------------------------
;--------------------------
LVL_TO_BUF
        ;  DE   
        LD    A,(COORD) ;Y
        CP    186
        JR    C,NO_YMINUS
        XOR   A
NO_YMINUS
        SRL   A
        SRL   A
        SRL   A
        
        LD    HL,LEVEL
        CP    0
        JR    Z,LTB_4
        LD    DE,26
        LD    B,A
LTB_1   ADD   HL,DE
        DJNZ  LTB_1
LTB_4   EX    DE,HL
        LD    A,(COORD+1) ;X
        CP    202
        JR    C,NO_XMINUS
        XOR   A
NO_XMINUS
        SRL   A
        SRL   A
        SRL   A
        LD    L,A
        LD    H,0
        ADD   HL,DE
        EX    DE,HL
        ;-----------------
        
        LD    HL,(BUF_ADR)
        LD    A,(BUF_H)
        LD    B,A;   
LTB_3   PUSH  BC
        PUSH  HL        
        PUSH  DE
        LD    A,(BUF_W)
        LD    C,A;   
LTB_2    
        PUSH  DE
        PUSH  HL

        LD    A,(DE)
        SLA   A
        SLA   A
        SLA   A
        LD    H,0
        LD    L,A
        LD    DE,SPR_C0
        ADD   HL,DE
        EX    DE,HL
        POP   HL
        PUSH  HL
        LD    B,8
LTB_5   LD    A,(DE)
        LD    (HL),A
        PUSH  DE
        LD    A,(BUF_W)
        LD    E,A
        LD    D,0
        ADD   HL,DE
        POP   DE
        INC   DE
        DJNZ  LTB_5

        POP   HL
        POP   DE
        
        INC   DE
        INC   HL

        DEC   C
        JR    NZ,LTB_2
        
        POP   DE 
        LD    HL,26
        ADD   HL,DE
        EX    DE,HL  

        POP   HL
        LD    A,(BUF_W)
        SLA   A
        SLA   A
        SLA   A
        LD    C,A
        LD    B,0
        ADD   HL,BC
        POP   BC
        DJNZ  LTB_3

        RET

;----------------------------------------------------------
BUF_TO_SCR
          LD    HL,(COORD)
          LD    DE,(BUF_ADR)
            
          SRL  H
          SRL  H
          SRL  H
          SRL  L
          SRL  L
          SRL  L

          CALL ADR         ;   .
          LD   A,(BUF_H)
          SLA  A
          SLA  A
          SLA  A
          LD   B,A        ;  B    .
POP1      PUSH HL
          LD   A,(BUF_W)
          LD   C,A         ;  C    .

POP2      LD   A,31
          AND  L
          CP   26
          JR   NC,POP3

          LD   A,H
          CP   88
          JR   NC,POP3

          LD   A,(DE)      ; 
          ;OR   (HL)
          LD   (HL),A      
POP3      INC  DE          ;    
          INC  HL          ;    .
          DEC  C           ;  .
          JR   NZ,POP2     ;    0, 
                           ;  .
          
          POP  HL          ;   .
          CALL DOWN        ;    -
                           ; .
          
          DJNZ POP1        ;    0, 
                           ;.
          RET
;------------------------------
;------------------------------
COLORIZE
          LD   HL,COLORS
          LD   DE,LEVEL

          LD   C,24

CLR_1     PUSH BC
          PUSH HL
          PUSH DE
          LD   B,26
CLR_2     
          LD   A,(DE)
          

          LD   C,%00100010
          CP   1
          JR   Z,CLR_3

          LD   C,%00000111
          CP   2
          JR   Z,CLR_3

          LD   C,%01001111
          CP   3
          JR   Z,CLR_3

          LD   C,%00100110
          CP   4
          JR   Z,CLR_3

          LD   C,%00101111
          CP   5
          JR   Z,CLR_3
          
          LD   C,7

CLR_3     
          LD   (HL),C
          
          INC  HL
          INC  DE
          DJNZ CLR_2
          
          POP  HL
          LD   BC,26
          ADD  HL,BC
          EX   DE,HL

          POP  HL
          LD   BC,26
          ADD  HL,BC

          POP  BC
          DEC  C
          JR   NZ,CLR_1

    ;---------------------------
       LD    HL,#5960
       LD    (TOP_A),HL
       LD    HL,#5980
       LD    (BOT_A),HL
       LD    HL,COLORS+286
       LD    (C_TOP_A),HL
       LD    HL,COLORS+312
       LD    (C_BOT_A),HL

       LD    B,12
CLR_4  PUSH  BC

       LD    HL,(TOP_A)
       PUSH  HL
       POP   DE
       LD    HL,(C_TOP_A)
       LD    BC,26
       LDIR

       LD    HL,(BOT_A)
       PUSH  HL
       POP   DE
       LD    HL,(C_BOT_A)
       LD    BC,26
       LDIR

       LD    BC,3
       CALL  7997

       POP   BC
       LD    DE,32
       LD    HL,(TOP_A)
       AND A ;C  C
       SBC   HL,DE
       LD    (TOP_A),HL

       LD    HL,(BOT_A)
       ADD   HL,DE
       LD    (BOT_A),HL

       LD    DE,26
       LD    HL,(C_TOP_A)
       AND A ;C  C
       SBC   HL,DE
       LD    (C_TOP_A),HL

       LD    HL,(C_BOT_A)
       ADD   HL,DE
       LD    (C_BOT_A),HL

       DJNZ  CLR_4
       
       RET
C_TOP_A  DEFW  0
C_BOT_A  DEFW  0
COLORS   DEFS  624
;-----------------------------
;-----------------------------
DEL_TANK
       LD    (COORD),HL
       CALL  PROCESS_SH_CLEAR
       LD    (IX+E_LIVE),0
       LD    A,(REST)
       DEC   A
       LD    (REST),A
       RET

;-----------------------------
E_ACTION
       XOR   A
       LD    (L_DOP),A

       LD    IX,ENEMY      
       LD    B,3
E_A1   PUSH  BC

       


       LD    A,(IX+E_LIVE)
       CP    0
       JR    Z,E_A2     ; ,   

       ;  
       CALL  RND_255    
       AND   15
       CP    7
       CALL  Z,E_FIRE

       ;   
       CALL  RND_255

       ; (RND  HL,  )
       LD    L,(IX+E_COORD)  
       LD    H,(IX+E_COORD+1)

       CP    32
       CALL  Z,E_RIGHT_DIRECT
       CP    96
       CALL  Z,E_LEFT_DIRECT
       CP    160
       CALL  Z,E_UP_DIRECT
       CP    224
       CALL  Z,E_DOWN_DIRECT


FROM_FAST
       ;    HL
       LD    A,(IX+E_DIRECT)
       CALL  UPDATE_COORD

       CALL  ENEMY_TSHOT_COLLISION
       CP    1
       JR    NZ,E_A33
       CALL  DEL_TANK
       JR    E_A2

E_A33  LD    A,16
       LD    (COLL_SIZE),A
       CALL  LEVEL_COLLISION
       CP    1
       JR    NZ,E_A3
       CALL  E_FAST_DIRECT     ; ,    
       JR    E_A2

E_A3   CALL  COLLIS_ENEMY
       CP    1
       JR    NZ,E_A4;
       CALL  E_FAST_DIRECT     ; ,    
       JR    E_A2

E_A4   CALL  COLLIS_PLAYER
       CP    1
       JR    NZ,E_A5
       CALL  E_FAST_DIRECT     ; ,    
       JR    E_A2




E_A5  ; 
       LD    (IX+E_COORD),L    
       LD    (IX+E_COORD+1),H 

       

E_A2   POP   BC
       
       LD    DE,ENEMY_LEN
       ADD   IX,DE
       DJNZ  E_A1
       RET
;. . . . . . . . . . . . . . . . . . . . .
E_FAST_DIRECT
       ;   
       CALL  RND_255    
       AND   3
       INC   A
       ; 
       LD    L,(IX+E_COORD)  
       LD    H,(IX+E_COORD+1)

       CP    1
       CALL  Z,E_RIGHT_DIRECT
       CP    2
       CALL  Z,E_LEFT_DIRECT
       CP    3
       CALL  Z,E_UP_DIRECT
       CP    4
       CALL  Z,E_DOWN_DIRECT

       RET

;--------------------------------------------
COLLIS_PLAYER
       LD    A,16
       LD    (BOX_HL),A
       LD    (BOX_DE),A

       PUSH  HL
       LD    DE,(T_COORD)
       CALL  COLLIS_BOX
       POP   HL
       CP    1
       JR    Z,IS_COL_PL     ;  

       
       XOR   A
       RET
IS_COL_PL
       LD   A,1
       RET


;-----------------------------
E_RIGHT_DIRECT
       LD    (IX+E_DIRECT),1
       LD    DE,T1_R
       LD    (IX+E_SPR_ADR),E
       LD    (IX+E_SPR_ADR+1),D
       LD    DE,M1_R
       LD    (IX+E_MAS_ADR),E
       LD    (IX+E_MAS_ADR+1),D
       LD    (IX+E_SPR_W),3
       PUSH  AF
       LD    A,L
       AND   248
       LD    L,A
       POP   AF
       RET

;-----------------------------
E_LEFT_DIRECT
       LD    (IX+E_DIRECT),2
       LD    DE,T1_L
       LD    (IX+E_SPR_ADR),E
       LD    (IX+E_SPR_ADR+1),D
       LD    DE,M1_L
       LD    (IX+E_MAS_ADR),E
       LD    (IX+E_MAS_ADR+1),D
       LD    (IX+E_SPR_W),3
       PUSH  AF
       LD    A,L
       AND   248
       LD    L,A
       POP   AF
       RET
;-----------------------------
E_UP_DIRECT
       LD    (IX+E_DIRECT),3
       LD    DE,T1_U
       LD    (IX+E_SPR_ADR),E
       LD    (IX+E_SPR_ADR+1),D
       LD    DE,M1_U
       LD    (IX+E_MAS_ADR),E
       LD    (IX+E_MAS_ADR+1),D
       LD    (IX+E_SPR_W),2
       PUSH  AF
       LD    A,H
       AND   248
       LD    H,A
       POP   AF
       RET
;-----------------------------
E_DOWN_DIRECT
       LD    (IX+E_DIRECT),4
       LD    DE,T1_D
       LD    (IX+E_SPR_ADR),E
       LD    (IX+E_SPR_ADR+1),D
       LD    DE,M1_D
       LD    (IX+E_MAS_ADR),E
       LD    (IX+E_MAS_ADR+1),D
       LD    (IX+E_SPR_W),2
       PUSH  AF
       LD    A,H
       AND   248
       LD    H,A
       POP   AF
       RET

;-----------------------
E_FIRE

       LD    A,(IX+E_SH_ACTIVE)
       CP    1
       RET   Z

       LD    A,(IX+E_DIRECT)
       LD    L,(IX+E_COORD)
       LD    H,(IX+E_COORD+1)
       
       LD    D,4
       LD    E,4 

       ADD   HL,DE
       LD    (IX+E_SH_COORD),L
       LD    (IX+E_SH_COORD+1),H
       LD    (IX+E_SH_DIRECT),A

       LD    (IX+E_SH_ACTIVE),1

       RET


;----------------------------
UPDATE_COORD
       CP    1
       JR    Z,UPD_R  
       CP    2
       JR    Z,UPD_L
       CP    3
       JR    Z,UPD_U
       CP    4
       JR    Z,UPD_D
       RET   ;  ,   
UPD_L  DEC   H
       RET
UPD_R  INC   H
       RET
UPD_U  DEC   L
       RET
UPD_D  INC   L
       RET
;----------------------------
LEVEL_DESTROY

       PUSH  HL
       CALL  COORD_DELETE
       POP   HL

       PUSH  HL
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,L
       LD    L,A
       CALL  COORD_DELETE
       POP   HL

       PUSH  HL
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,H
       LD    H,A
       CALL  COORD_DELETE
       POP   HL

       PUSH  HL
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,H
       LD    H,A
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,L
       LD    L,A  
       CALL  COORD_DELETE
       POP   HL

       RET
;------------------------------
COORD_DELETE
        
        CALL  OUT_OF_LEVEL
        CP    1
        RET   Z
        
        PUSH  HL
        CALL  CALC_LEVEL_POS
        POP   DE
        
        LD    A,(HL)
        CP    0
        RET   Z
        CP    4
        RET   Z
        CP    5
        RET   Z
        CP    2
        RET   Z
        CP    3
        RET   Z
        
        LD    (HL),0 
        EX    DE,HL
        CALL  CALC_ATTR_POS

        LD    (HL),7
        RET

;----------------------------
CALC_LEVEL_POS
        SRL   L
        SRL   L
        SRL   L
        SRL   H
        SRL   H
        SRL   H

        LD    B,L
        LD    C,H
        LD    HL,LEVEL

        LD    A,B
        CP    0
        JR    Z,NO_ADD_Y  ;   

        LD    DE,26
ADD_Y   
        ADD   HL,DE       ; 
        DJNZ  ADD_Y

NO_ADD_Y
        LD    D,0
        LD    E,C
        ADD   HL,DE       ;   X
        RET

;----------------------------
CALC_ATTR_POS
        SRL   L
        SRL   L
        SRL   L
        SRL   H
        SRL   H
        SRL   H

        LD    B,L
        LD    C,H
        LD    HL,#5800

        LD    A,B
        CP    0
        JR    Z,CNO_ADD_Y  ;   

        LD    DE,32
CADD_Y   
        ADD   HL,DE       ; 
        DJNZ  CADD_Y

CNO_ADD_Y
        LD    D,0
        LD    E,C
        ADD   HL,DE       ;   X
        RET

;----------------------------
OUT_OF_LEVEL
       ;    
       LD    A,H
       CP    208       
       JR    NC,IS_OUT   ; X > W  <0
       LD    A,L
       CP    192      
       JR    NC,IS_OUT   ; Y > H  <0
       XOR   A
       RET
IS_OUT LD    A,1
       RET

;----------------------------
LEVEL_COLLISION
       ;    

       LD    DE,(COLL_SIZE)

       LD    A,208
       SUB   E
       CP    H       
       JR    C,L_IS_COL   ; X >192  <0
       LD    A,192
       SUB   E
       CP    L       
       JR    C,L_IS_COL   ; Y >176  <0
       
       PUSH  HL
       CALL  COORD_IS_FILL
       POP   HL
       CP    1
       RET   Z
        
       PUSH  HL
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,L
       LD    L,A
       CALL  COORD_IS_FILL
       POP   HL
       CP    1
       RET   Z

       PUSH  HL
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,H
       LD    H,A
       CALL  COORD_IS_FILL
       POP   HL
       CP    1
       RET   Z

       PUSH  HL
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,H
       LD    H,A
       LD    A,(COLL_SIZE)
       DEC   A
       ADD   A,L
       LD    L,A
       CALL  COORD_IS_FILL
       POP   HL
       CP    1
       RET   Z

       
       XOR   A
       RET

L_IS_COL 
       LD    A,1
       RET

COLL_SIZE
       DEFB  0

;------------------------------
COORD_IS_FILL
        CALL  CALC_LEVEL_POS
        LD    A,(L_DOP)
        LD    D,A
        LD    A,(HL)
        CP    0
        JR    Z,C_NO_FILL
        CP    4
        JR    Z,C_NO_FILL
        CP    5
        JR    Z,C_NO_FILL
        CP    D
        JR    Z,C_NO_FILL

        LD    A,1
        RET
C_NO_FILL
        XOR   A
        RET
L_DOP   DEFB  0,0
;-----------------------------
;-----------------------------
K_PRESSED
       XOR   A
       LD    (L_DOP),A

       LD    A,16
       LD    (COLL_SIZE),A

       LD    A,(KEY_F)
       CP    1
       CALL  Z,PRES_F
       LD    A,(KEY_L)
       CP    1
       JP    Z,PRES_L
       LD    A,(KEY_R)
       CP    1
       JP    Z,PRES_R
       LD    A,(KEY_U)
       CP    1
       JP    Z,PRES_U
       LD    A,(KEY_D)
       CP    1
       JP    Z,PRES_D
       RET



;-----------------------------
PRES_F
       LD    A,(SH_ACTIVE)
       CP    1
       RET   Z

       LD    A,(T_DIRECT)
       LD    HL,(T_COORD)
       
       LD    D,4
       LD    E,4 

       ADD   HL,DE
       LD    (SH_COORD),HL
       LD    (SH_DIRECT),A
       LD    A,1
       LD    (SH_ACTIVE),A
       RET

;-----------------------------
PRES_R 
       LD    A,(T_COORD)
       AND   248

       LD    (T_COORD),A
       LD    HL,T1_R
       LD    (T_SPR_ADR),HL
       LD    HL,M1_R
       LD    (T_MAS_ADR),HL
       LD    A,3
       LD    (T_SPR_W),A

       LD    A,1
       LD    (T_DIRECT),A
       
       LD    HL,(T_COORD)
       INC   H
       CALL  LEVEL_COLLISION
       CP    1
       RET   Z
       CALL  COLLIS_ENEMY
       CP    1
       RET   Z
       LD    (T_COORD),HL
       RET
;-----------------------------
PRES_L
       LD    A,(T_COORD)
       AND   248
       
       LD    (T_COORD),A
       LD    HL,T1_L
       LD    (T_SPR_ADR),HL
       LD    HL,M1_L
       LD    (T_MAS_ADR),HL
       LD    A,3
       LD    (T_SPR_W),A

       LD    A,2
       LD    (T_DIRECT),A


       LD    HL,(T_COORD)
       DEC   H
       CALL  LEVEL_COLLISION
       CP    1
       RET   Z
       CALL  COLLIS_ENEMY
       CP    1
       RET   Z
       LD    (T_COORD),HL
       RET

;-----------------------------
PRES_U
       LD    A,(T_COORD+1)
       AND   248

       LD    (T_COORD+1),A
       LD    HL,T1_U
       LD    (T_SPR_ADR),HL
       LD    HL,M1_U
       LD    (T_MAS_ADR),HL
       LD    A,2
       LD    (T_SPR_W),A

       LD    A,3
       LD    (T_DIRECT),A
       
       LD    HL,(T_COORD)
       DEC   L
       CALL  LEVEL_COLLISION
       CP    1
       RET   Z
       CALL  COLLIS_ENEMY
       CP    1
       RET   Z
       LD    (T_COORD),HL
       RET
;-----------------------------
PRES_D 
       LD    A,(T_COORD+1)
       AND   248
       
       LD    (T_COORD+1),A
       LD    HL,T1_D
       LD    (T_SPR_ADR),HL
       LD    HL,M1_D
       LD    (T_MAS_ADR),HL
       LD    A,2
       LD    (T_SPR_W),A

       LD    A,4
       LD    (T_DIRECT),A

       LD    HL,(T_COORD)
       INC   L
       CALL  LEVEL_COLLISION
       CP    1
       RET   Z
       CALL  COLLIS_ENEMY
       CP    1
       RET   Z
       LD    (T_COORD),HL
       RET

;------------------------------
;------------------------------
KEYB_POLL
          XOR   A
          LD    (KEY_L),A
          LD    (KEY_R),A
          LD    (KEY_U),A
          LD    (KEY_D),A
          LD    (KEY_F),A
          LD    (KEY_EX),A

          LD    A,#FB
          IN    A,(254)
          LD    B,A

          BIT   1,B
          JR    NZ,NO_U
          LD    A,1
          LD    (KEY_U),A
NO_U

          BIT   3,B
          JR    NZ,NO_EX
          LD    A,1
          LD    (KEY_EX),A
NO_EX

          LD    A,#FD
          IN    A,(254)
          LD    B,A

          BIT   0,B
          JR    NZ,NO_L
          LD    A,1
          LD    (KEY_L),A
NO_L

          BIT   1,B
          JR    NZ,NO_D
          LD    A,1
          LD    (KEY_D),A
NO_D

          BIT   2,B
          JR    NZ,NO_R
          LD    A,1
          LD    (KEY_R),A
NO_R

          LD    A,#BF
          IN    A,(254)
          LD    B,A

          BIT   0,B
          JR    NZ,NO_F
          LD    A,1
          LD    (KEY_F),A
NO_F
          RET






;---------------------
;---------------------
SPR_TO_BUF  
          LD   HL,(COORD)
          LD   A,7         ;  X
          AND  H
          LD   (DX),A
          LD   A,7         ;  Y
          AND  L
          LD   HL,(BUF_ADR)
          CP   0
          JR   Z,PR_RL1
          LD   B,A
          LD   A,(BUF_W)
          LD   D,0
          LD   E,A
PR_RL0    ADD  HL,DE
          DJNZ PR_RL0   

          
      
          
PR_RL1    

          LD   DE,(SPR_ADR) 

          LD   A,(SPR_H)
          SLA  A
          SLA  A
          SLA  A
          LD   B,A         ;  B    .
SET_RL1   PUSH BC
          PUSH HL          ;   .
          
        ;  -
          LD   A,(SPR_W)
          LD   C,A
          LD   HL,BUF
B1        LD   A,(DE)
          LD   (HL),A
          INC  DE
          INC  HL
          DEC  C
          JR   NZ,B1
          
        ; 
          CALL ROL_LINE

          POP  HL
          PUSH HL          ;   .

          LD   A,(SPR_W)
          LD   C,A         ;  C    .
          PUSH DE
          LD   DE,BUF
SET_RL2
          LD   A,(DE)      ;  .
MODE      NOP
          LD   (HL),A      ; .
          INC  DE          ;    
          INC  HL          ;    .
          DEC  C           ;  .
          JR   NZ,SET_RL2  ;    0, 
                           ;  .
          POP  DE          ;   .
          POP  HL          ;   .
                    
          LD   A,(BUF_W)   ;      .
          LD   C,A
          LD   B,0
          ADD  HL,BC
          POP  BC
          DJNZ SET_RL1     ;    0, 
                           ;.
          RET

MOD_PUT  EQU   0           ;  NOP
MOD_OR   EQU   #B6         ;  OR (HL)
MOD_AND  EQU   #A6         ;  AND (HL)
MOD_XOR  EQU   #AE         ;  XOR (HL)
;------------------------------------
ROL_LINE  
        LD   A,(DX)
        CP   0
        RET  Z

        LD   C,A
ROLBUF1 LD   HL,BUF
        LD   A,(SPR_W)
        LD   B,A
        

MODMASK CP   255
ROLBUF2 RR   (HL)        ; .
        INC  HL
        DJNZ ROLBUF2
        DEC  C
        JR   NZ,ROLBUF1
        RET

BUF     DEFS 4
DX      DEFB 0
ISMASK  EQU   #FFFE        ;CP    255
NOMASK  EQU   #00FE        ;CP    0


;--------------------------
PRNT_LVL
        LD    HL,#0000
        LD    DE,LEVEL

P_L3    
        PUSH  HL        
        CALL  ADR

        LD    C,26
P_L2    
        PUSH  DE
        PUSH  HL

        LD    A,(DE)
        ;CP    0
        ;JR    Z,P_L4
        ;DEC   A
        SLA   A
        SLA   A
        SLA   A
        LD    H,0
        LD    L,A
        LD    DE,SPR_C0
        ADD   HL,DE
        EX    DE,HL
        POP   HL
        PUSH  HL
        LD    B,8
P_L1    LD    A,(DE)
        LD    (HL),A
        INC   H
        INC   DE
        DJNZ  P_L1

P_L4    POP   HL
        POP   DE
        
        INC   DE
        INC   HL

        DEC   C
        JR    NZ,P_L2
        
        POP   HL
        INC   L
        LD    A,L
        CP    24
        JR    NZ,P_L3

        RET




;--------------------------
WOOD_TO_BUF
        ;  DE   
        LD    A,(COORD) ;Y
        SRL   A
        SRL   A
        SRL   A
        
        LD    HL,LEVEL
        CP    0
        JR    Z,WTB_4
        LD    DE,26
        LD    B,A
WTB_1   ADD   HL,DE
        DJNZ  WTB_1
WTB_4   EX    DE,HL
        LD    A,(COORD+1) ;X
        SRL   A
        SRL   A
        SRL   A
        LD    L,A
        LD    H,0
        ADD   HL,DE
        EX    DE,HL
        ;-----------------
        
        LD    HL,(BUF_ADR)
        LD    A,(BUF_H)
        LD    B,A ;  
WTB_3   PUSH  BC
        PUSH  HL        
        PUSH  DE
        LD    A,(BUF_W)
        LD    C,A ;  
WTB_2    
        PUSH  DE
        PUSH  HL

        LD    A,(DE)
        CP    4
        JR    NZ,WTB_6
        SLA   A
        SLA   A
        SLA   A
        LD    H,0
        LD    L,A
        LD    DE,SPR_C0
        ADD   HL,DE
        EX    DE,HL
        POP   HL
        PUSH  HL
        LD    B,8
WTB_5   LD    A,(DE)
        ;OR    (HL)
        LD    (HL),A
        PUSH  BC
        LD    A,(BUF_W)
        LD    B,0
        LD    C,A
        ADD   HL,BC
        POP   BC
        INC   DE
        DJNZ  WTB_5

WTB_6   POP   HL
        POP   DE
        
        INC   DE
        INC   HL

        DEC   C
        JR    NZ,WTB_2
        
        POP   DE 
        LD    HL,26
        ADD   HL,DE
        EX    DE,HL  


        POP   HL
        LD    A,(BUF_W)
        SLA   A
        SLA   A
        SLA   A
        LD    C,A
        LD    B,0
        ADD   HL,BC
        POP   BC
        DJNZ  WTB_3

        RET
;--------------------------

DOWN      INC  H
          LD   A,H
          AND  #07
          RET  NZ
          LD   A,L
          ADD  A,#20
          LD   L,A
          RET  C
          LD   A,H
          SUB  #08
          LD   H,A
          RET

;------------------------

ADR  LD   A,L
     AND  7
     RRCA
     RRCA
     RRCA
     ADD  A,H
     LD   H,L
     LD   L,A
     LD   A,H
     AND  #18
     OR   #40
     LD   H,A
     RET



;------------------------
PRNT_NUM  PUSH  BC
          PUSH  DE
          PUSH  HL
          PUSH  IX
          CALL  11563       ;    
          CALL  11747
          LD    A,13
          RST   16
          POP   IX
          POP   HL
          POP   DE
          POP   BC
          RET

PRNTAT_NUM  
          PUSH  BC
          PUSH  DE
          PUSH  HL
          PUSH  IX
          LD    A,22
          RST   16
          LD    A,10
          RST   16
          LD    A,10
          RST   16

          CALL  11563       ;    
          CALL  11747


          POP   IX
          POP   HL
          POP   DE
          POP   BC
          RET



T1_U; 
      DEFB 0, 0
      DEFB 0, 0
      DEFB 1, 0
      DEFB 1, 0
      DEFB 113, 28
      DEFB 17, 0
      DEFB 119, 12
      DEFB 31, 192
      DEFB 127, 236
      DEFB 31, 96
      DEFB 127, 108
      DEFB 30, 96
      DEFB 119, 204
      DEFB 16, 0
      DEFB 112, 12
      DEFB 0, 0
T1_D; 
      DEFB 0, 0
      DEFB 0, 0
      DEFB 112, 28
      DEFB 23, 192
      DEFB 127, 204
      DEFB 31, 224
      DEFB 127, 108
      DEFB 31, 96
      DEFB 126, 108
      DEFB 31, 192
      DEFB 113, 12
      DEFB 17, 0
      DEFB 113, 12
      DEFB 1, 0
      DEFB 1, 0
      DEFB 0, 0
T1_R; 
      DEFB 0, 0, 0
      DEFB 0, 0, 0
      DEFB 106, 176, 0
      DEFB 42, 160, 0
      DEFB 63, 224, 0
      DEFB 31, 128, 0
      DEFB 63, 128, 0
      DEFB 63, 128, 0
      DEFB 62, 252, 0
      DEFB 56, 128, 0
      DEFB 47, 128, 0
      DEFB 0, 0, 0
      DEFB 64, 0, 0
      DEFB 42, 160, 0
      DEFB 42, 160, 0
      DEFB 0, 0, 0

T1_L;  
      DEFB 0, 0, 0
      DEFB 0, 0, 0
      DEFB 13, 86, 0
      DEFB 5, 84, 0
      DEFB 7, 252, 0
      DEFB 1, 240, 0
      DEFB 3, 248, 0
      DEFB 3, 248, 0
      DEFB 63, 232, 0
      DEFB 1, 136, 0
      DEFB 1, 240, 0
      DEFB 0, 0, 0
      DEFB 8, 0, 0
      DEFB 5, 84, 0
      DEFB 5, 84, 0
      DEFB 0, 0, 0

M1_U
      DEFB 255, 255
      DEFB 255, 255
      DEFB 254, 255
      DEFB 254, 255
      DEFB 142, 227
      DEFB 142, 227
      DEFB 136, 35
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 136, 35
      DEFB 143, 227
      DEFB 255, 255
M1_D
      DEFB 255, 255
      DEFB 255, 255
      DEFB 143, 227
      DEFB 136, 35
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 128, 3
      DEFB 136, 35
      DEFB 142, 227
      DEFB 142, 227
      DEFB 254, 255
      DEFB 254, 255
      DEFB 255, 255

M1_R
      DEFB 255, 255, 255
      DEFB 255, 255, 255
      DEFB 128, 15, 255
      DEFB 128, 15, 255
      DEFB 128, 15, 255
      DEFB 224, 127, 255
      DEFB 192, 63, 255
      DEFB 192, 63, 255
      DEFB 192, 3, 255
      DEFB 192, 63, 255
      DEFB 192, 63, 255
      DEFB 224, 127, 255
      DEFB 128, 15, 255
      DEFB 128, 15, 255
      DEFB 128, 15, 255
      DEFB 255, 255, 255

M1_L
      DEFB 255, 255, 255
      DEFB 255, 255, 255
      DEFB 240, 1, 255
      DEFB 240, 1, 255
      DEFB 240, 1, 255
      DEFB 254, 7, 255
      DEFB 252, 3, 255
      DEFB 252, 3, 255
      DEFB 192, 3, 255
      DEFB 252, 3, 255
      DEFB 252, 3, 255
      DEFB 254, 7, 255
      DEFB 240, 1, 255
      DEFB 240, 1, 255
      DEFB 240, 1, 255
      DEFB 255, 255, 255

T1_BUF
      DEFS 72
E_BUF
      DEFS 72


SPR_C0
      DEFB 0
      DEFB 0
      DEFB 0
      DEFB 0
      DEFB 0
      DEFB 0
      DEFB 0
      DEFB 0

SPR_C1
      DEFB 247
      DEFB 247
      DEFB 247
      DEFB 0
      DEFB 127
      DEFB 127
      DEFB 127
      DEFB 0
SPR_C2
      DEFB 170
      DEFB 84
      DEFB 188
      DEFB 124
      DEFB 188
      DEFB 124
      DEFB 130
      DEFB 1
SPR_C3
      DEFB 4
      DEFB 0
      DEFB 128
      DEFB 72
      DEFB 20
      DEFB 0
      DEFB 64
      DEFB 34

SPR_C4
      DEFB 2
      DEFB 21
      DEFB 7
      DEFB 25
      DEFB 46
      DEFB 31
      DEFB 251
      DEFB 110

SPR_C5 

      DEFB 17
      DEFB 2
      DEFB 4
      DEFB 136
      DEFB 17
      DEFB 34
      DEFB 68
      DEFB 136

SHOT
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 24, 0
      DEFB 60, 0
      DEFB 60, 0
      DEFB 24, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0
      DEFB 0, 0

M_SHOT
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 231, 255
      DEFB 195, 255
      DEFB 195, 255
      DEFB 231, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      DEFB 255, 255
      
MINI  
      DEFB 0
      DEFB 73
      DEFB 93
      DEFB 119
      DEFB 119
      DEFB 93
      DEFB 73
      DEFB 28

      
SHOT_BUF 
      DEFS 32

LEVELS
LEVEL1
      DEFB 0,0,5,5,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,5,5,0,0
      DEFB 0,0,5,5,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,5,5,0,0
      DEFB 5,5,5,5,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,5,5,5,5
      DEFB 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
      DEFB 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
      DEFB 2,2,0,0,1,1,1,1,0,0,0,0,2,2,0,0,0,0,1,1,1,1,0,0,2,2
      DEFB 2,2,0,0,0,0,0,0,0,0,1,1,2,2,1,1,0,0,0,0,0,0,0,0,2,2
      DEFB 4,4,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4,4
      DEFB 4,4,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,4,4
      DEFB 4,4,1,1,2,2,1,1,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,4,4
      DEFB 4,4,1,1,2,2,1,1,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,4,4
      DEFB 4,4,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,4,4
      DEFB 4,4,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,4,4
      DEFB 4,4,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,4,4
      DEFB 4,4,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,4,4
      DEFB 4,4,4,4,4,4,0,0,0,0,0,1,0,0,1,0,0,0,0,0,4,4,4,4,4,4
      DEFB 4,4,4,4,4,4,0,0,0,0,0,1,0,0,1,0,0,0,0,0,4,4,4,4,4,4
LEVEL2
      DEFB 0,0,1,1,0,0,2,2,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0
      DEFB 0,0,1,1,0,0,2,2,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0
      DEFB 4,4,1,1,0,0,4,4,4,4,4,4,1,1,1,1,0,0,1,1,2,2,1,1,0,0
      DEFB 4,4,1,1,0,0,4,4,4,4,4,4,1,1,1,1,0,0,1,1,2,2,1,1,0,0
      DEFB 4,4,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,2,2,0,0,0,0,5,5
      DEFB 4,4,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,2,2,0,0,0,0,5,5
      DEFB 4,4,0,0,0,0,1,1,0,0,1,1,2,2,0,0,0,0,1,1,4,4,1,1,2,2
      DEFB 4,4,0,0,0,0,1,1,0,0,1,1,2,2,0,0,0,0,1,1,4,4,1,1,2,2
      DEFB 4,4,4,4,0,0,1,1,1,1,1,1,0,0,0,0,2,2,1,1,4,4,0,0,0,0
      DEFB 4,4,4,4,0,0,1,1,1,1,1,1,0,0,0,0,2,2,1,1,4,4,0,0,0,0
      DEFB 1,1,1,1,1,1,1,1,1,1,4,4,4,4,2,2,1,1,1,1,4,4,1,1,0,0
      DEFB 1,1,1,1,1,1,1,1,1,1,4,4,4,4,2,2,1,1,1,1,4,4,1,1,0,0
      DEFB 0,0,0,0,0,0,2,2,4,4,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0
      DEFB 0,0,0,0,0,0,2,2,4,4,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0
      DEFB 2,2,1,1,3,3,2,2,0,0,1,1,0,0,1,1,0,0,3,3,3,3,1,1,3,3
      DEFB 2,2,1,1,3,3,2,2,0,0,1,1,0,0,1,1,0,0,3,3,3,3,1,1,3,3
      DEFB 3,3,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,2,2,1,1,3,3
      DEFB 3,3,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,2,2,1,1,3,3
      DEFB 4,4,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3
      DEFB 4,4,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3
      DEFB 3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,3,3
      DEFB 3,3,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,3,3
      DEFB 3,3,1,1,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0
      DEFB 3,3,1,1,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0

LEVEL DEFS 624 
