
               org $480
               opt %10101

reals          equ $f0
zn             equ $f2
sp             equ $f4
tl             equ $f6
def            equ $f8
_table         equ $9f00 tablica do mnozenia
table          equ $a000 tablica masek
dane_and_4plus equ $a200 adres dolaczanych danych



               lda #4
               sta 708
               lda #10
               sta 709
               lda #15
               sta 710

               lda <pl1
               sta reals
               lda >pl1
               sta reals+1

               jsr init
               jsr dli_on
               jsr translacja
               jsr _makemask
               jsr _maketable

               jsr _newwsp

               lda <nmi
               sta 552
               lda >nmi
               sta 553

nmi            equ *

               lda tempo
               sta 538

               lda spkontrolbyte
               and #%00010000
               beq n4
               lda #255
               sta spnr

n4             inc spnr
               lda spnr
               cmp #4
               bne n2
               lda #0
               sta spnr

n2             ldx spnr
               lda stend,x
               sta start

               ldy #0
               ldx start
_loop          lda dane,x
               sta X_old,y
               iny
               inx
               cpy #9
               bne _loop

               jsr killlife

               ldy #0
               ldx start
_loop2         lda X_old,y
               sta dane,x
               iny
               inx
               cpy #9
               bne _loop2
               rts

killlife       equ *

               lda spkontrolbyte
               and #%00001000
               bne defnr
               lda 53770
               cmp #6
               bcs wysexit
               lda spkontrolbyte
               ora #%00001000
               sta spkontrolbyte
wysexit        rts


defnr          equ *

               lda Xaktual
               and #%10000000
               beq defprawo
               lda dfnr
               and #%00001111
               asl @
               jmp defnr_
defprawo       lda dfnr
               lsr @
               lsr @
               lsr @
defnr_         tay
               lda _fztable,y
               sta def
               lda _fztable+1,y
               sta def+1


spkier         equ *

               lda Xaktual
               and #%01111111
               cmp minX
               beq kierchange
               cmp maxX
               bne movesp
kierchange     lda Xaktual
               eor #%10000000
               sta Xaktual

movesp         equ *

               lda Xaktual
               and #%10000000
               beq _sp_prawo
               dec Xaktual
               jmp _loadY
_sp_prawo      inc Xaktual

_loadY         equ *

               lda spkontrolbyte
               and #%00000111
               sta Y_old

               lda spnr
               asl @
               tay

               lda znspadres,y
               sta zn
               lda znspadres+1,y
               sta zn+1

               lda firstold
               bne empty2
               ldx X_old
               ldy Y_old
               jsr locate
               cmp #112
               bcc empty1

empty2         ldx X_old
               ldy Y_old
               lda firstold
               jsr position

empty1         lda secondold
               bne empty3

               ldx X_old
               ldy Y_old
               inx
               jsr locate
               cmp #112
               bcc rozpisanie

empty3         ldx X_old
               ldy Y_old
               inx
               lda secondold
               jsr position

rozpisanie     equ *


               lda Xaktual
               and #%00000111
               asl @
               tay
               lda (def),y
               sta sp
               iny
               lda (def),y
               sta sp+1
               lda Xaktual
               and #%01111111
               lsr @
               lsr @
               lsr @
               sta X_old

zapamietaj     equ *

               ldx X_old
               ldy Y_old
               jsr locate
               sta firstold
               tay
               jsr _mnozenie
               stx firadr
               sty firadr+1

               ldx X_old
               ldy Y_old
               inx
               jsr locate
               sta secondold
               tay
               jsr _mnozenie
               stx secadr
               sty secadr+1

               jsr animacja
               jmp showsp


animacja       equ *

               lda firadr
               sta tl
               lda firadr+1
               sta tl+1
               jsr anim

               jsr zwsp
               jsr zwzn
               lda secadr
               sta tl
               lda secadr+1
               sta tl+1
               jsr anim

               jsr zwsp
               jsr zmzn
               lda firadr
               sta tl
               lda firadr+1
               clc
               adc #4
               sta tl+1
               lda zn+1
               clc
               adc #4
               sta zn+1
               jsr anim

               jsr zwsp
               jsr zwzn
               lda secadr
               sta tl
               lda secadr+1
               clc
               adc #4
               sta tl+1
               jsr anim
               rts

zwsp           equ *

               lda sp
               clc
               adc #16
               sta sp
               bcc zwsp2
               inc sp+1
zwsp2          rts

zwzn           equ *

               lda zn
               clc
               adc #16
               sta zn
               bcc zwzn2
               inc zn+1
zwzn2          rts

zmzn           equ *

               lda zn
               sec
               sbc #16
               sta zn
               bcs zmzn2
               dec zn+1
zmzn2          rts

anim           equ *

               ldy #0
anim2          lda (sp),y
               tax
               lda (tl),y
               and table,x
               ora (sp),y
               sta (zn),y
               iny
               cpy #16
               bne anim2
               rts

showsp         equ *

               ldy spnr
               lda znsptable,y
               ldx X_old
               ldy Y_old
               jsr position
               ldy spnr
               lda znsptable,y
               clc
               adc #2
               ldx X_old
               ldy Y_old
               inx
               jsr position
               rts


dana           dta b(0)
maska          dta d'    '


znsptable      equ *

    dta b(112),b(116),b(120),b(124),b(126)

znspadres      equ *

    dta a(fonts+896),a(fonts+928),a(fonts+960),a(fonts+992)


X_old          dta b(0)
Y_old          dta b(0)
firstold       dta b(0)
secondold      dta b(0)
Xaktual        dta b(0)
minX           dta b(0)
maxX           dta b(0)
dfnr           dta b(0)
spkontrolbyte  dta b(0)

firadr         dta a(0)
secadr         dta a(0)
spnr           dta b(0)
tempo          dta b(1)
start          dta b(0)

dane           equ *

   dta d'                  '
   dta d'                  '

stend          equ *

   dta b(0),b(9),b(18),b(27)

               org dane_and_4plus

               icl '4PLUS'
               icl 'DANE5_SP'

_makemask      equ *

               lda #0
               tay
               sta dana

_make2         jsr _make3
               inc dana
               iny
               bne _make2
               rts

_make3         lda dana
               and #170
               eor #255
               sta maska
               lda dana
               and #170
               lsr @
               eor #255
               sta maska+1
               lda dana
               and #85
               eor #255
               sta maska+2
               lda dana
               and #85
               asl @
               eor #255
               sta maska+3

               lda maska
               and maska+1
               and maska+2
               and maska+3
               sta table,y
               rts

_mnozenie      equ *


               lda _table,y
               tax
               lda _table+1,y
               clc
               adc #$b8
               tay
               rts

_maketable     equ *

               ldy #0
               sty maketb
               sty maketb+1

loop           lda maketb+1
               sta _table+1,y
               lda maketb
               sta _table,y

               clc
               adc #16
               sta maketb
               bcc loop2
               inc maketb+1
loop2          iny
               iny
               cpy #128
               bne loop
               rts

_newwsp        equ *

               ldy #136
               ldx #0
newws2         lda (reals),y
               sta dane,x
               iny
               inx
               cpx #36
               bne newws2
               rts

maketb         dta b(0),b(0)

               icl 'GAMEFONT'
