	DEVICE ZXSPECTRUM128

; WORM-255F tinygame
; by Shiru Otaku/ANGEL2 18.o9.2oo2
; mailto: shiru@mail.ru

;      ""   255 .
;      ,   128    
;     :).

;      48basic rom ( BREAK).
;      RND -    R.
;        ( 2;).
;    -  ( FLASH).
;        .
;           (  
;   INK  PAPER).

;  - SINCLAIR JOY.
;    - BREAK KEY (IY    ).

;    - 255.


WORMBUF  EQU #C16F      ;   (   
                ;     
                ;  .

WORMCOL  EQU #2D        ; ,    (bit 0 is set).
RAMKCOL  EQU #09        ;  ,   .


;...

     ORG #C000-1
STARTFORSNA
     EI ;    1  

;   -      ,  
;  .

START

;        -   
;      ( ).
;          , 
;.   ,       
;  ( ).

; HL -   .

     LD HL,#5800

;      .

     LD B,#20
     LD A,RAMKCOL
     LD (HL),A
     INC HL
     DJNZ $-2

;  22  -    , 30   0, 
;    .

     LD B,22
SUDA
     LD (HL),A
     INC HL

;      DJNZ,   (30 ) - 
; ,        .

     LD C,#1E
     LD (HL),0
     INC HL
     DEC C
     JR NZ,$-4
     LD (HL),A
     INC HL
     DJNZ SUDA

;         .

     LD B,#20
     LD (HL),A
     INC HL
     DJNZ $-2

;  .     4-. 
;  3 , 4- -    - 
; ,       .

     LD A,4
     LD (WORMLEN), A

;      -  ( )
;     RRA.    
;   ,   -.

     RRA
     LD (BORDCOL), A

;  .     
; (  HL)         
;   ,     .
;       (#71 ),  
; -        DJNZ.

     LD HL,WORMBUF
     ADD A,L

     LD (HL),A
     INC HL
     LD (HL),#59
     INC HL
     DEC A
     JR NZ,$-6

;        DEC HL (#2B)
;        .

     LD A,#2B
     LD (WORMDIR), A

;    -. 
; -       - 
;     .

     CALL GENKROL


;    .

MAINLOOP

;    BORDCOL     
;  LD A,n -     
;       A    0,   .

BORDCOL=$+1
     LD A,0

;    .

     OUT (#FE), A

;    BORDCOL  -     
; (..  HALT -     ).

     LD A,1
     LD (BORDCOL), A

; KROLADR -       -
;    (LD HL,nn).

KROLADR=$+1
     LD HL,0

;      .    
; -     FLASH -   
;  ,        (  
;        BASIC-:)
;    #36 -  INK  PAPER.

KROLCOL=$+1
     LD A,#36
     LD (HL),A

; .      LD B,n.   
;    1 ,      - 
;       .

WORMLEN=$+1
     LD B,0
     LD HL,WORMBUF

;        A.   
;, ..         ( 
;     ).

     XOR A

;       IX -    
;   LD IX,nn ( ).

     PUSH HL
     POP IX

;  .

PRWORM0

;      DE (   , 
; -    ).

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

;        A.

     LD (DE),A

;  ()  ,      A 
;   (       
; -   :).

     LD A,WORMCOL

;            -
;     ,    .
;..  IX        HL -  
;,  ,        .

     LD (IX-2),E
     LD (IX-1),D
     INC IX
     INC IX
     DJNZ PRWORM0

;   DE     -     
; ,    (    ,  
;   ,    ).   .
;

     XOR 64
     LD (DE),A

;          
;     (   HL   ).

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

; HL  DE, ..        
; ,       HL.

     EX DE,HL

; BC   #20 -   HL  BC    
;   .    (B)   , ..
;   DJNZ  .

     LD C,#20

;          HL BC.
;    , ..  SUB HL,BC     
;    ADD HL,BC.     ,   
;      ,   
;  -    (  
;NOP),          
;.          DE  #FFE0.
;     #20,       HL,
;     ,  -  #20.

     LD DE,#FFE0

; WORMDIR     ,     
;     INC HL/DEC HL/ADD HL,BC/ADD HL,DE
;     .

WORMDIR=$
     NOP

;      DE, ..    
;         
;       .

     EX DE,HL

;      -     ,
;          
;  .

     LD B,7
     HALT
     DJNZ $-1

;     ( FLASH) XOR`.   
;     HL, ..     .
;      C   

     LD HL,KROLCOL
     LD A,(HL)
     LD C,A
     XOR 9
     LD (HL),A

;      ,  -  -
;( :).   ,  -  .

     LD A,(DE)

;   ?

     CP C
     JR NZ,CHKDEAD      ; ...

; !
;  -      .
;.     -       ,
;     -   ,   
;      255.      
; -:)   INC (HL)  
;,    -  -. - 
;    255,     .

     LD HL,WORMLEN
     INC (HL)
     JR NZ,$+3
     DEC (HL)

;   -       IX
;  (-   ).  ,    
;  (  ) -   IX  
;   ,     ,    - .

     INC IX
     INC IX

;    :).

     CALL GENKROL

; GENKROL   A   -       , 
;  -         
;  - 

     LD (DE),A

;         .

     LD A,4
     LD (BORDCOL), A

;   :) ..        - 
;    .     
; A -       (    
; ).         ...
;  C     ( ).

     LD C,70
;   -    4-    #FE  0  1
     XOR 16
     OUT (#FE), A
;     ,    
;  ,      ,    .
     LD B,C
     DJNZ $
     DEC C
     JR NZ,$-8

;  ,  -   ( / ).
;       RRA ( ), 
;   - ,   -    
;. ,     RRA  
;.     -   , ..   
;   A   (   ).

CHKDEAD

;?..

     RRA
     JR NC,NODEAD       ;!:)..

;...  ...
;       ;).  
; ,       ,   - 
;   4-     ,   
; R.         A  
;2 -  .

     LD C,250
     LD A,R
     AND 18
     OR 2
     OUT (#FE), A
     LD B,C
     DJNZ $
     DEC C
     JR NZ,$-12

;...       ...

     JP START

;        -     
;    .       
;   (,   IX - HL   )  2 
;  (INC'- );        -
;  IX     ,    
;  . ,  DE   IX,     2 
;(   ).

NODEAD
     LD (IX-1),D
     LD (IX-2),E

;   ,   -    
; ?..     67890 (Sinclair joy)?..

     LD BC,#EFFE

; HL   WORMDIR - ,    
;    (  ,   
; ).

     LD HL,WORMDIR
     IN A,(C)

;   67890     BT n,r    
;CP n -       ,     
;.      RRA (
;     ,      -
; 0,     ).

     RRA
     RRA
     JR C,$+4
;   (9) -   WORMDIR   ADD HL,DE
     LD (HL),#19
     RRA
     JR C,$+4
;   (8) -   WORMDIR   ADD HL,BC
     LD (HL),#09
     RRA
     JR C,$+4
;   (7) -   WORMDIR   INC HL
     LD (HL),#23
     RRA
     JR C,$+4
;   (6) -   WORMDIR   DEC HL
     LD (HL),#2B

; ,  -  BREAK (   :).
;     ROM BASIC48.    -
;  ,  ...
     CALL #1F54
     JP C,MAINLOOP

;...  ,   ...
     RET


; -    ,    
;KROLADR,   - -      
;, . RND   ,    R,
;      (    ).
;         ( ).

GENKROL

;     -      #58..#5A.
;  ,   0..2 (AND`,    3 - 
; ).      #58,  
;  .

     LD A,R
     LD H,3
     AND H
     CP H
     JR Z,GENKROL
     ADD A,#58
     LD H,A

;    ,      
;#00..#FF,       .
     LD A,R
     LD L,A

;,       ,   
;    -   .

     LD A,(HL)
     CP 0
     JR NZ,GENKROL

;     KROLADR.

     LD (KROLADR), HL

;  ,       A  
; -     .

     RET

;  .

	SAVESNA "worm255.sna",STARTFORSNA
