 ORG $2C3E
 PUT *
SCRLOC EQU $7F80
GRAD EQU $600
 
GAME LDA GOFL
 BEQ SLL
 PULS X,PC
SLL LDD #$78AA
 STD POS
 LDX #GRAD+4847
 STX OPOS
 LDA #116
 STA BPOS
 LDX #GRAD+5646
 STX BOPOS
 LDX OPOS
 JSR GET2
 CLR SCI
 JSR SCUP
 CLR LIFGON
 CLR ENFLAG
 CLR BFLAG
 CLR IFLAG
 CLR ISFLAG
 CLR SFLAG1
 CLR SFLAG2
 CLR SFLAG3
 CLR LVOL
 CLR CATFL
 LDA #255
 STA CAUGHT
 LDA #9
 STA OFFSET
 CLR LEFT
 STA RIGHT
 CLR SLFL
 CLR SDEC
 CLR BSFL
 CLR BBFL
 CLR PLFL
 CLR PDEC
 CLR LSFL
 CLR SHOT
 JSR ICUPL
 JSR ICUPR
 JSR UL
 JSR CLDR
 LDA $FF22
 ANDA #7
 ORA #$F8
 STA $FF22
GAMEL LDA RAND
 ADDA POS
 ADDA POS+1
 ADDA BPOS
 INCA
 STA RAND
 JSR MOVE
 LDA LIFGON
 BEQ NDED
 LDA ENFLAG
 BEQ JG
 RTS
JG JMP GAME
NDED LDA POS
 ANDA #7
 STA PIX
 LDD POS
 JSR CLCAD
 STX ADDR
 LDX OPOS
 SYNC
 LDA $FF02
 JSR PUTB
 JSR BBAT
 JSR ICONB
 JSR BBOLT
 JSR TSTCOL
 LDA CFLAG
 BEQ GNXT
 LDD CCD
 JSR CLCAD
 LDA [ELEM]
 BPL NIB
 LDA #240
 STA SFLAG1
 CLR SFLAG2
 CLR SFLAG3
 BRA REV
NIB CMPA #2
 BNE CNT
 LDA #240
 STA SFLAG2
 CLR SFLAG1
 CLR SFLAG3
 INC SCI
 JSR CRACK
 BRA DEC
CNT LDA [CDAT]
 STA CHAR
 JSR PUT16
 LDA #248
 STA SFLAG3
 CLR SFLAG1
 CLR SFLAG2
 LDA SCI
 ADDA #2
 STA SCI
DEC DEC [ELEM]
 BNE REV0
DEC2 LDD NOBRK
 SUBD #1
 BNE STNB
 COM ENFLAG
 BRA REV0
STNB STD NOBRK
 CMPB HFBRK
 BNE REV0
 JSR FASTER
REV0 LDA PLFL
 BNE GNXT
REV COM BFLAG
GNXT JSR GET
 JSR LGET
 JSR PBOLT
 JSR ICON
 JSR BAT
 JSR PUT
 JSR SOUND
 JSR SCORE
 LDA BFLAG
 BEQ GNXT2
 JSR BOUNCE
 CLR BFLAG
GNXT2 JSR BATCOL
 LDX ADDR
 STX OPOS
 JSR KEY
 LDA PLFL
 BEQ NPLFL
 COM PDEC
 BEQ NPLFL
 DEC PLFL
 BNE NPLFL
 JSR ICUPR
NPLFL LDA SLFL
 BEQ NSLFL
 COM SDEC
 BEQ NSLFL
 DEC SLFL
 BNE NSLFL
 JSR ICUPR
 JSR FASTER
NSLFL LDA ENFLAG
 LBEQ GAMEL
 LDA SFLAG3
 LBNE GAMEL
 RTS
 
MOVE LDD POS
 TST CHFL
 LBNE MEND
 TST CAUGHT
 BEQ MNXT
 LDA OFFSET
 ADDA BPOS
 STA POS
 CMPA #6
 BHI TTHI
 LDA OFFSET
 ADDA #2
 STA OFFSET
 BRA MEND
TTHI CMPA #242
 BLO MEND
 LDA OFFSET
 SUBA #2
 STA OFFSET
 BRA MEND
MNXT CMPA #6
 BHI M1
 NEG IX
 LDA #240
 STA SFLAG1
 LDA POS
 CLR SFLAG2
 CLR SFLAG3
M1 CMPA #242
 BLO M2
 NEG IX
 LDA #240
 STA SFLAG1
 LDA POS
 CLR SFLAG2
 CLR SFLAG3
M2 CMPB #22
 BHI M3
 NEG IY
 LDA #240
 STA SFLAG1
 LDA POS
 CLR SFLAG2
 CLR SFLAG3
M3 CMPB #180
 BLO M4
 NEG IY
 BRA DEAD
M4 ADDA IX
 ADDB IY
 STD POS
MEND RTS
 
DEAD LDX OPOS
 JSR PUTB
 JSR BBAT
 JSR ICONB
 JSR BBOLT
 LDB #240
 STB LVOL
 LDA BPOS
 ANDA #6
 LDB #26
 MUL
 LDU #BATDAT
 LEAU D,U
 STU OPOS
 CLR OFFSET
DLP JSR BBAT
 LDU OPOS
 LDB BPOS
 LSRB
 LSRB
 LSRB
 LDX #GRAD+5664
 ABX
 LDA OFFSET
 LDB #32
 MUL
 LEAX D,X
 STX CCD
DLP2 LDD ,U++
 ANDA ,X
 ANDB 1,X
 STD ,X
 LDD ,U++
 ANDA 2,X
 ANDB 3,X
 STD 2,X
 LEAX 32,X
 CMPX #GRAD+5632+256
 BLO DLP2
 LDX CCD
 LEAX 32,X
 LDU OPOS
 LEAU 32,U
DLP3 LDD ,U++
 ORA ,X
 ORB 1,X
 STD ,X
 LDD ,U++
 ORA 2,X
 ORB 3,X
 STD 2,X
 LEAX 32,X
 CMPX #GRAD+5632+192
 BLO DLP3
SLP0 LDB #50
 STB TEMP1
 LDB #50
 STB TEMP2
 LDA LVOL
SLP STA $FF20
 LDB TEMP1
DDLY DECB
 BNE DDLY
 CLR $FF20
 LDB TEMP1
DDLY2 DECB
 BNE DDLY2
 INC TEMP1
 DEC TEMP2
 BNE SLP
 LDA LVOL
 SUBA #30
 STA LVOL
 LDY #3000
DDLY3 LEAY -1,Y
 BNE DDLY3
 SYNC
 LDA $FF02
 INC OFFSET
 LDA OFFSET
 CMPA #5
 LBLO DLP
 JSR BBAT
 LDA OFFSET
 CMPA #9
 BLO SLP0
 LDA IX
 BPL IXOK
 NEG IX
IXOK LDD NOBRK
 CMPB HFBRK
 BHI SOK
 JSR FASTER
 BRA SK2
SOK JSR SLOWER
SK2 LDA LIVES
 DECA
 STA LIVES
 ANDA #15
 CMPA #15
 BNE TALL
 LDA LIVES
 ANDA #249
 STA LIVES
TALL COM LIFGON
 LDA LIVES
 BNE SLL2
 COM GOFL
SLL2 RTS
 
KEY LDX #KEYTAB
 LDA #8
 STA COUNT
 LDA #127
KLP STA $FF02
 LDB $FF00
 STB ,X+
 ORCC #1
 RORA
 DEC COUNT
 BNE KLP
 LDA KEYTAB+6
 BITA #16
 BNE NOTQ
 LDA CHFL
 BEQ NOTQ
 COM ENFLAG
 RTS
NOTQ LDA KEYTAB+2
 BITA #32
 BNE NOTL
 LDA #1
 STA LEFT
 CLR RIGHT
 LDA BPOS
KPOS1 SUBA #2
 CMPA #8
 BLO NOTR
 STA BPOS
 BRA NOTR
NOTL LDA KEYTAB+1
 BITA #32
 BNE NOTR
 LDA #1
 STA RIGHT
 CLR LEFT
 LDA BPOS
KPOS2 ADDA #2
 CMPA #222
 BHI TSTBST
 STA BPOS
 BRA NOTR
TSTBST LDA BSFL
 BEQ NOTR
 PULS X,PC
NOTR LDA #2
 STA KPOS1+1
 STA KPOS2+1
 LDA KEYTAB
 BITA #64
 BNE NOTSH
 LDA BBFL
 BEQ NOTBB
 LDA #4
 STA KPOS1+1
 STA KPOS2+1
 RTS
NOTBB LDA CAUGHT
 BEQ NOTCT
 CLR CAUGHT
 LDA LEFT
 BEQ TR
 LDA IX
 BMI DOK
 NEG IX
TR LDA RIGHT
 BEQ DOK
 LDA IX
 BPL DOK
 NEG IX
DOK RTS
NOTCT LDA LSFL
 BEQ NOTSH
 LDA SHOT
 BNE NOTSH
 COM SHOT
 COM NNOW
 LDA #240
 STA LVOL
 LDD #20
 STD PTCH
 LDA BPOS
 LDB BPOS
 STB LASX
 LSRB
 LSRB
 LSRB
 INCB
 LDX #GRAD+5472
 ABX
 STX LASAD
 ANDA #6
 LDX #BOLT
 LEAX A,X
 LDD ,X
 STD CBOLT
 LDA #171
 STA LASY
 RTS
NOTSH LDA KEYTAB+5
 BITA #64
 BNE ENDBAT
WLGK CLR $FF02
 LDA $FF00
 ANDA #127
 CMPA #127
 BNE WLGK
WKP CLR $FF02
 LDA $FF00
 ANDA #127
 CMPA #127
 BEQ WKP
ENDBAT LDA KEYTAB+4
 BITA #4
 BNE ENDB2
 LDA KEYTAB+3
 BITA #8
 BNE ENDB2
 LDA KEYTAB+2
 BITA #4
 BNE ENDB2
 LDA KEYTAB
 BITA #4
 BNE ENDB2
WLGK2 CLR $FF02
 LDA $FF00
 ANDA #127
 CMPA #127
 BNE WLGK2
 COM CHFL
ENDB2 RTS
 
ICON LDA IFLAG
 LBEQ ENDI
 LDX IAD
 STX IADO
 LDU #IBUP
 LDB #8
ILP1 LDA ,X
 STA ,U+
 LEAX 32,X
 DECB
 BNE ILP1
 LEAX -128,X
 LEAX -128,X
 LDU #IMASK
 LDB #8
ILP2 LDA ,U+
 ANDA ,X
 STA ,X
 LEAX 32,X
 DECB
 BNE ILP2
 LEAX -112,X
 LEAX -112,X
 LDU ICHAR
 LDB #6
ILP3 LDA ,U+
 ORA ,X
 STA ,X
 LEAX 32,X
 DECB
 BNE ILP3
 COM ISFLAG
 BEQ ENDI
 LDX IAD
 LEAX 32,X
 STX IAD
 CMPX #GRAD+5824
 BHS IWIPE
 CMPX #GRAD+5440
 BLO ENDI
 TFR X,D
 ANDB #31
 LDA #8
 MUL
 LSRB
 STB TEMP1
 LDB BPOS
 LSRB
 SUBB TEMP1
 CMPB #-11
 BLT ENDI
 CMPB #3
 BGT ENDI
 LDA SCI
 ADDA #5
 STA SCI
 JSR IACT
IWIPE CLR IFLAG
 BRA ICONB2
ENDI RTS
 
ICONB LDA IFLAG
 BEQ IBEND
ICONB2 LDX IADO
 LDU #IBUP
 LDB #8
IBLP LDA ,U+
 STA ,X
 LEAX 32,X
 DECB
 BNE IBLP
IBEND RTS
 
IACT LDB #255
 LDA IFLAG
 CMPA #1
 BEQ CATCH
 CMPA #2
 BEQ SLOW
 CMPA #3
 BEQ BOOST
 CMPA #4
 BEQ BBST
 CMPA #5
 BEQ PLOUGH
 CMPA #6
 BEQ LASER
 CMPA #7
 BEQ EXLIF
CATCH STB CATFL
 CLR LSFL
 CLR BBFL
 JMP ICUPL
 
SLOW STB SLFL
 CLR BSFL
 CLR PLFL
 JSR ICUPR
 JSR CLDR
 JMP SLOWER
 
BOOST STB BSFL
 CLR PLFL
 JSR ICUPR
 LDX #7231
 LDU #ARROW
 JMP ICPUT
 
BBST STB BBFL
 CLR CATFL
 CLR CAUGHT
 CLR LSFL
 JMP ICUPL
 
PLOUGH STB PLFL
 CLR BSFL
 JSR CLDR
 JMP ICUPR
 
LASER STB LSFL
 CLR CATFL
 CLR CAUGHT
 CLR BBFL
 JMP ICUPL
 
EXLIF LDA LIVES
 CMPA #$99
 BEQ XEND
 ADDA #1
 DAA
 STA LIVES
 JMP UL
XEND RTS
 
UL LDA LIVES
 ANDA #240
 LSRA
 LDU #NUM
 LEAU A,U
 LDX #1723
 JSR ICPUT
 LDA LIVES
 ANDA #15
 LSLA
 LSLA
 LSLA
 LDU #NUM
 LEAU A,U
 LDX #1725
 JMP ICPUT
 
CLDR LDX #7199
 LDA #7
 JMP PUT8
 
LEV LDA BCD
 ANDA #240
 LSRA
 LDU #NUM
 LEAU A,U
 LDX #7471
 JSR ICPUT
 LDA BCD
 ANDA #$0F
 LSLA
 LSLA
 LSLA
 LDU #NUM
 LEAU A,U
 LDX #7472
 JMP ICPUT
 
 
B1 EQU $1E00
E1 EQU $1EB0
DATA EQU $1EF0
CRDAT EQU $1FF0
BATDAT EQU $1FFE
IMASK EQU $20CE
ICH EQU $20D6
RITAB EQU $2100
NUM EQU $2140
LAS EQU $2190
BOLT EQU $2198
ARROW EQU $21B0
PUT16 EQU $251D
PUT8 EQU $253D
CALCEL EQU $255C
CALTAB EQU $256A
CLCAD EQU $2575
PUT EQU $2583
PUTB EQU $25C1
GET EQU $25D6
GET2 EQU $25D9
CRACK EQU $25EE
BBAT EQU $2609
ICUPL EQU $261F
ICUPR EQU $264C
BLANK EQU $2679
ICPUT EQU $2685
SETUP EQU $2692
FASTER EQU $27BB
SLOWER EQU $27EB
BOUNCE EQU $281B
TSTCOL EQU $2864
BAT EQU $28ED
BATCOL EQU $295C
SOUND EQU $2A09
SCORE EQU $2A97
SCUP EQU $2ABB
BBOLT EQU $2B0C
LGET EQU $2BE8
PBOLT EQU $2C01
IAD EQU $2C3A
IADO EQU $2C3C
 ORG $400
 PUT *
RAND RMB 1
ADDR RMB 2
COUNT RMB 1
COUNT2 RMB 1
COUNT3 RMB 1
CDAT RMB 2
SCR RMB 1
CHAR RMB 1
MASK RMB 1
POS RMB 2
OPOS RMB 2
BPOS RMB 1
BOPOS RMB 2
PIX RMB 1
IX RMB 1
IY RMB 1
SPEED RMB 1
NEGSPD RMB 1
CCD RMB 2
ELEM RMB 2
CFLAG RMB 1
BFLAG RMB 1
ENFLAG RMB 1
IFLAG RMB 1
ISFLAG RMB 1
SFLAG1 RMB 1
SFLAG2 RMB 1
SFLAG3 RMB 1
NOBRK RMB 2
TEMP1 RMB 1
TEMP2 RMB 1
BKUP RMB 16
IBUP RMB 8
ICHAR RMB 2
BRTAB RMB 336
KEYTAB RMB 8
CATFL RMB 1
CAUGHT RMB 1
SLFL RMB 1
BSFL RMB 1
BBFL RMB 1
PLFL RMB 1
PDEC RMB 1
LSFL RMB 1
OFFSET RMB 1
HFBRK RMB 1
SDEC RMB 1
SC1 RMB 1
SC2 RMB 1
SC3 RMB 1
SCI RMB 1
SHOT RMB 1
LASX RMB 1
LASY RMB 1
LASAD RMB 2
CBOLT RMB 2
LBUP RMB 8
NNOW RMB 1
LVOL RMB 1
PTCH RMB 2
LIVES RMB 1
GOFL RMB 1
LIFGON RMB 1
CHFL RMB 1
LEFT RMB 1
RIGHT RMB 1
BCD RMB 1
XX RMB 2
YY RMB 2
BDED RMB 1
