
 *=$1F00
BP
 LDA #2        ;INIT RESET KEY
 STA 9
 LDA #<BP
 STA 2
 LDA #>BP
 STA 3
 LDA #0
 STA 580
 STA LN        ;LVL VAR=0
 STA SP        ;SPD VAR=0
 STA 82        ;LMAR=0
 STA JLOCK     ;UNLOK JOYSTIK
 LDA #39
 STA 83        ;RMAR=0
 LDA #7
 JSR GRAPHICS
 LDA #64
 STA 16
 STA 53774     ;NO BREAK
 LDA #<HPOS
 STA $C0       ;DEC ADR L
 STA PHPOS     ;HPOS PTR L
 LDA #>HPOS
 STA $C1       ;DEC ADR H
 STA PHPOS+1   ;HPOS PTR H
 LDY #0
MAKEDEC
 LDA #$DE      ;"DEC ABS,X"
 STA DECS,Y
 LDA $C0       ; ADR TO DEC L
 INY
 STA DECS,Y
 LDA $C1       ; ADR TO DEC H
 INY
 STA DECS,Y
 LDA $C0       ;INC BY 8 ADR FOR
 CLC           ; 'DEC' INSTR TO
 ADC #$08      ; GET NXT IN LYR
 STA $C0       ; OF STRS
 LDA $C1
 ADC #0
 STA $C1
 INY           ;MAKE NXT INSTR.
 CPY #72       ;DONE ALL?
 BCC MAKEDEC   ;N:CONT
 LDA #<DLII ;Y:INIT ADR TO
 STA $C0       ; MAKE DLI IN
 LDA #>DLII
 STA $C1
 LDA #<LT   ;INIT PTR TO
 STA PLT       ; LUM TBL
 LDA #>LT
 STA PLT+1
 LDX #0        ;#DLI'S DONE
OMDLI
 LDY #0        ;#INSTR'S DONE
IMDLI
 LDA DLIP,Y    ;GET INSTR.
 STA ($C0),Y   ;PUT IN DLI
 INY           ;NXT BYT
 CPY #15       ;DONE?
 BCC IMDLI     ;N:GET ANOTHER
 LDA $C0       ;Y:INC ADR WHERE
 CLC           ; DLI IS PUT IN
 ADC #15       ; MEM
 STA $C0
 LDA $C1
 ADC #0
 STA $C1
 LDA PHPOS     ;CHG DLI INSTR
 CLC           ; TBL SO NXT DLI
 ADC #1        ; REFERS TO NXT
 STA PHPOS     ; STAR'S HPOS
 LDA PHPOS+1
 ADC #0
 STA PHPOS+1
 LDA PLT       ;SAME FOR LUM.
 CLC
 ADC #1
 STA PLT
 LDA PLT+1
 ADC #0
 STA PLT+1
 INX
 CPX #192      ;DONE 192 DLIS?
 BCC OMDLI     ;N:KEEP MAKING
 LDA #3        ;Y:ENABLE P/M
 STA 53277
 STA ERP       ;LVL 1 PSE
 LDA #$40      ;PMBASE=$4000
 STA 54279
 LDA #62       ;SDMCTL=SGL LINE
 STA 559
 LDA #1        ;GRPRIOR
 STA 623
 STA 752       ;CURSOR OFF
 LDA ELVT      ;GET LVL 1 SPD
 STA ELVL      ;STORE IN PGM
 LDA #$31      ;INIT MSGS
 STA LNGM
 STA SPGM
 LDA #14       ;SET UP P/M COL
 STA 704
 STA 705
 STA 706
 LDY #0
 TYA
BLANKPM
 STA $4300,Y   ;CLR M1-4
 STA $4400,Y   ; P0
 STA $4500,Y   ; P1
 STA $4600,Y   ; P2
 INY
 BNE BLANKPM   ;DONE ALL 256?
 LDX #32       ;Y:X=OFSET TO M0
 LDA #$80
 STA X         ;INIT CRSHR POS
 STA Y
FM STA $4300,X ;FILL M3
 INX
 CPX #224      ;BOT OF SCREEN?
 BCC FM        ;N:CONT FILL
 LDX #0        ;Y:INIT STR COLS
 STX CTR
OLP
 LDY #0
ILP
 LDA C,Y       ;GET LUM FROM TBL
 STA LT,X      ;STORE IN BIG TBL
 INX
 INY
 CPY #8        ;DONE W/SML TBL?
 BCC ILP       ;N:KEEP XFER
 INC CTR       ;Y:NXT GRP
 LDA CTR
 CMP #24       ;DONE W/SCREEN?
 BCC OLP       ;N:XFER SML TBL
 LDA #0        ;Y:BLK BCKGROUND
 STA 710
 TAX
FILL
 LDA $D20A
 STA HPOS,X    ;RND STAR HPOS
 INX
 CPX #192      ;DONE 192?
 BCC FILL      ;N:MORE RND HPOS
 LDA 560       ;Y:SET UP DLI
 STA $C0       ; LINE
 LDA 561
 STA $C1
 LDY #2
 LDA ($C0),Y
 ORA #$80
 STA ($C0),Y
 LDA #<SVBI ;ADR FOR SETUP
 STA $0228     ; COUNTDOWN TIMER
 LDA #>SVBI ; ROUTINE
 STA $0229
 LDA #<DLI  ;DLI ADR
 STA 512
 LDA #>DLI
 STA 513
 LDX #0
INITE
 LDA $D20A
 AND #$7F
 CLC
 ADC #60       ;RND ENM X
 STA EX,X
 AND #$3F      ;RND ENM MOVE
 STA ELIM,X    ; LIMIT
 AND #$03      ;RND ENM DX
 SEC
 SBC #1
 STA EDX,X
REINITY
 LDA $D20A     ;RND ENM Y
 AND #$7F
 CLC
 ADC #46
 STA EY,X
 AND #$03      ;RND ENM DY
 SEC
 SBC #1
 BEQ REINITY   ;NO ZERO DY!
 STA EDY,X
 LDA #0        ;MVMENT CTR=0
 STA ECTR,X
 STA ELOCK,X   ;UNLOK ENM
 LDA #$FF      ;#VECTS MOVED=
 STA NV,X      ; NEG:ENM ADVANC
 LDA #5        ;ENM SHP CTR=5=
 STA ESC,X     ; SMALLEST FRAME
 LDA #7
 STA EP,X      ;TMR PSE=7
 STA ET,X      ;TMR=7
 INX
 CPX #3        ;DONE ALL 3 ENM?
 BCC INITE     ;N:INIT NEXT
 LDA ERP       ;Y:ENM RTN PSE*8=
 ASL A         ; ENM FIRING PSE
 ASL A
 ASL A
 STA OKF
 LDA #$70
 STA SHIELD    ;INIT SHIELD
 LDA #$99
 STA REM       ;INIT REMAINING
 LDA #0        ;POS 0,0
 STA 656
 STA 657
 STA 658
 TAX           ;X=IOCB0=SCRN
 LDA #11       ;ICCOM=PUTCHR
 STA $0342
 LDA #<SMSG ;ICBADR=SMSG
 STA $0344
 LDA #>SMSG
 STA $0345
 LDA #158      ;ICBLEN=158
 STA $0348
 STX $0349
 STX $02FF     ;NO CTRL-1
 JSR $E456     ;CIOV
ST LDX #0      ;PSE ABT 1 SEC
OP
 LDY #0
IP
 DEY
 BNE IP
 DEX
 BNE OP
 STX $02FF     ;NO CTRL-1
 LDA 53279     ;CONSOLE KEY
 CMP #7        ;TOUCHING A KEY?
 BEQ ST
 CMP #5        ;SELECT?
 BNE NSEL
 JMP SELECT
NSEL CMP #3    ;OPTION?
 BNE NOPT
 JMP OPTION
NOPT CMP #6    ;START?
 BNE ST
 JMP START
OPTION
 LDX LN        ;INC LEVEL NUMBER
 INX
 CPX #3
 BCC LNS
 LDX #0
LNS STX LN
 LDA ELVT,X    ;GET ENM LVL
 STA ELVL      ;STORE IN PGM
 LDA #35       ;POS 33,0
 STA 657
 LDA #0
 STA 658
 STA 656
 STA $0348     ;ICBLEN=0:DATA
 STA $0349     ; STORED IN ACCU.
 LDA #11       ;ICCOM=PUTCHR
 STA $0342
 INX           ;CHG LVL TO ASCII
 TXA
 ORA #$30
 STA LNGM      ;STORE IN GMSG
 LDX #$00      ;X=IOCB0:SCREEN
 JSR $E456     ;CIOV
 JMP ST        ;BACK TO PAUSE
SELECT
 LDX SP        ;INC ENM SPD BY 1
 INX
 CPX #3
 BCC SPS
 LDX #0
SPS STX SP
 LDA ERPT,X    ;GET NEW PAUSE
 STA ERP       ; &STORE IN PGM
 LDA #35       ;POS 33,1
 STA 657
 LDA #0
 STA 658
 STA $0348     ;ICBLEN=0:DATA IN
 STA $0349     ; ACCU.
 LDA #1
 STA 656
 LDA #11       ;ICCOM=PUTCHR
 STA $0342
 INX           ;CHG SPD TO ASCII
 TXA
 ORA #$30
 STA SPGM      ;STORE IN GMSG
 LDX #0        ;X=IOCB0:SCREEN
 JSR $E456     ;CIOV
 JMP ST        ;BACK TO PAUSE
START
 LDX #0        ;POS 0,0
 STX 656
 STX 657
 STX 658
 LDA #11       ;ICCOM=PUTCHR
 STA $342
 LDA #<GMSG ;ICBADR=GMSG
 STA $0344
 LDA #>GMSG
 STA $0345
 LDA #158      ;ICBLEN=158
 STA $0348
 LDA #0
 STA $0349
 JSR $E456     ;CIOV
 LDA #1        ;SET FLAG=PUT
 STA EFLAG     ; CRSHAIR ON SCR
 STA $21A      ;ENABLE SET RTN
 LDA #192
 STA 54286     ;ENABLE DLI
MAIN
 LDA $D20F
 AND #$04      ;PRESSNG ANY KEY?
 BNE NOSPACE
 LDA 53769
 CMP #$21      ;PRESSING SPACE?
 BNE NOSPACE
 JSR STPI      ;STP ALL INTER.
KEYED
 LDA $D20F
 AND #$04      ;STILL PRESSING?
 BEQ KEYED
PAUSED
 LDA $D20F
 AND #$04      ;PRESSING A KEY?
 BNE PAUSED
 LDA 53769
 CMP #$21      ;PRESSING SPACE?
 BNE PAUSED
RELEASE
 LDA $D20F
 AND #$04      ;STILL PRESSING?
 BEQ RELEASE
 JSR STRI      ;RESTART INTER.
NOSPACE
 LDA #0
 STA 77        ;NO ATTRACT MODE
 LDA $D010     ;FIRE BUTTON?
 BNE EFIRE     ;N:ENM'S FIRE
 JMP FIRE      ;Y:YOU FIRE
EFIRE
 LDA OKF       ;TIME FOR ENM TO
 BEQ DOEFIRE   ; FIRE?
 JMP MAIN
DOEFIRE
 LDA ERP       ;RESTORE ENM FIRE
 ASL A         ; CTR
 ASL A
 ASL A
 STA OKF
 LDA $D20A
ELVL=*+1
 CMP #64       ;FIRE ACCORDING
 BCS MAIN      ; TO PROBABILITY
 AND #$03
 CMP #3
 BEQ MAIN
 TAX           ;ENEMY # FIRING
 LDA NV,X
 BEQ MAIN      ;IF RECEDING,QUIT
 BMI MAIN      ;IF ADVANCNG,QUIT
 LDA ELOCK,X
 BNE MAIN      ;IF LOCKED,QUIT
 STX EL
 LDA #$20      ;START ENM LASER
 STA $D200     ; SOUND
 LDA #$4F
 STA $D201
 LDA #1        ;LOCK ENEMY
 STA ELOCK,X
 LDA #2        ;COLOR 2
 JSR COLOR
 LDX EL
 LDA EY,X      ;CHG ENM PLR Y
 SEC           ; INTO GR 7 YPOS
 SBC #26
 LSR A
 PHA
 TAY
 LDA EX,X      ;CHG ENM PLR X
 SEC           ; INTO GR 7 XPOS
 SBC #45
 PHA
 TAX
 LDA #0
 JSR PLOT      ;PLOT
 LDA $D20A     ;RND YPOS
 AND #$3F
 CLC
 ADC #8
 TAY
 STA LY
 LDA $D20A     ;RND XPOS
 AND #$7F
 CLC
 ADC #16
 TAX
 STA LX
 LDA #0
 JSR DRAWTO    ;DRAWTO TO HERE
 LDA #64       ;FLASH SCREEN RED
 STA 712
 STA 710
 LDA #0        ;COLOR 0
 JSR COLOR
 PLA           ;START XPOS FOR
 TAX           ; LASER
 PLA           ;START YPOS FOR
 TAY           ; LASER
 LDA #0
 JSR PLOT      ;'UNPLOT' THIS PT
 LDA #0        ;END XPOS FOR
 LDX LX        ; LASER
 LDY LY        ;END YPOS
 JSR DRAWTO    ;ERASE LINE
 LDX EL
 LDA #0        ;UNLOCK ENEMY
 STA ELOCK,X
 STA $D200     ;TURN OFF SOUND
 STA $D201
 STA 712       ;BLACKEN SCREEN
 STA 710
 LDA SHIELD
 PHA
 CMP #2
 BCC LOSE      ;YOU KILLED?
 JSR STPI
 SED
 PLA
 SEC
 SBC #2        ;DECREASE SHIELD
 STA SHIELD
 PHA
 CLD
 JSR STRI
 LDA #36       ;POS 36,0
 STA 657
 LDA #0
 STA 658
 STA 656
 PLA
 JSR PN        ;PRINT NEW SHIELD
 JMP MAIN      ;BACK TO MAIN
LOSE
 LDA #$8F      ;DISTORTION,VOL
 STA $D201     ; FOR YOUR EXPL
 STA JLOCK     ;LOCK JSTICK
 LDX #$80      ;EXPL DURATION
LO LDY #0
LI LDA $D20A
 STA $D200     ;RND FREQ
 STA 712       ;RND COL
 STA 710
 DEY
 BNE LI
 DEX
 BNE LO        ;LOOP YOUR EXPL
 STX $D200     ;TURN OFF SOUND
 STX $D201
 STX 712       ;BCK COL=0
 STX 710
 STX 656       ;POS 0,0
 STX 657
 STX 658
 LDA #11
 STA $0342     ;ICCOM=PRNCHR
 LDA #<LMSG    ;ICBADR=LMSG
 STA $0344
 LDA #>LMSG
 STA $0345
 LDA #39       ;ICBLEN=39
 STA $0348
 STX $0349
 JSR $E456     ;CIOV
 JMP RES       ;WAIT FOR RESTART
FIRE LDA #$4F  ;START YOUR LASER
 STA $D201     ; SOUND
 LDA #1
 STA $D200
 STA JLOCK     ;LOCK JOYSTIK
 JSR COLOR     ;COLOR 1
 LDA #0
 STA 53278     ;CLR OLD COLL.
 LDX #80
 LDY #79
 JSR PLOT      ;PLOT 80,79
 LDA X         ;CHG CROSSHAIR X
 SEC           ; TO GR.7 XPOS
 SBC #45
 PHA
 TAX
 LDA Y         ;CHG CROSSHAIR Y
 SEC           ; TO GR.7 YPOS
 SBC #26
 LSR A
 PHA
 TAY
 LDA #0
 JSR DRAWTO    ;DRAWTO TO HERE
 LDA #0
 JSR COLOR     ;COLOR 0
 LDA #0
 LDX #80
 LDY #79
 JSR PLOT      ;ERASE LASER STRT
 PLA           ;LASER END Y
 TAY
 PLA           ;LASER END X
 TAX
 LDA #0        ;TURN OFF SOUND
 STA $D200
 STA $D201
 JSR DRAWTO    ;ERASE LASER
 LDA #0        ;UNLOK JOYSTIK
 STA JLOCK
 LDA $D008     ;CHECK FOR ANY
 BEQ CH2       ; COLLISIONS
 JSR HIT
CH2 LDA $D009
 BEQ CH3
 JSR HIT
CH3 LDA $D00A
 BEQ NOHIT
 JSR HIT
NOHIT
 JMP EFIRE     ;LET ENM FIRE
HIT
 BIT ONE       ;HIT P0?
 BEQ ONEOK
 LDX #0
 JSR EXPLODE
ONEOK
 BIT TWO       ;HIT P1?
 BEQ TWOOK
 LDX #1
 JSR EXPLODE
TWOOK
 BIT FOUR      ;HIT P2?
 BEQ FOUROK
 LDX #2
 JSR EXPLODE
FOUROK
 RTS
EXPLODE
 PHA           ;SAVE COLL REG
 TXA           ;SAVE WHICH ENM
 PHA           ; TO EXPLODE
 LDA ELOCK,X   ;ENM LOCKED?
 BEQ CANEXP
 PLA
 PLA
 RTS
CANEXP PLA     ;RESTORE WHICH TO
 PHA           ; EXPL.&SAVE AGN
 CLC           ;GET WHICH PLR
 ADC #$44      ; BAND TO USE
 STA EXPADR
 LDA #1        ;LOCK ENEMY
 STA ELOCK,X
 LDA EY,X      ;GET ENM YPOS
 TAY
 LDX #0
EXPLP
 LDA EXPSHP,X  ;PUT EXPLOSION
EXPADR=*+2
 STA $FF00,Y
 INX
 INY
 CPX #12       ;ALL 12?
 BCC EXPLP
 PLA
 TAX
 LDA #60       ;KEEP THIS EXPL.
 STA EXPCTR,X  ; ON FOR 1 SEC
 JSR STPI      ;STP INT
 SED
 LDA REM
 SEC
 SBC #1
 STA REM       ;REM=REM-1(DEC)
 LDA SHIELD
 CMP #$99
 BEQ NOIS
 CLC
 ADC #1
 STA SHIELD    ;SHIELD=SHIELD+1
NOIS CLD
 JSR STRI      ;STR INT
 LDA REM
 PHA
 CMP #3        ;>=3 LEFT?
 BCS CANR
 LDA #0        ;CANT RESTORE
 JMP STORR
CANR LDA #1    ;CAN RESTORE
STORR STA R,X
 PLA
 BEQ WIN       ;IF KILL ALL,WIN!
 LDY #36       ;POS 36,1
 STY 657
 LDY #0
 STY 658
 LDY #1
 STY 656
 JSR PN        ;PRNT #REMAINING
 LDA #36       ;POS 36,0
 STA 657
 LDA #0
 STA 658
 STA 656
 LDA SHIELD
 JSR PN        ;PRINT NEW SHIELD
 PLA           ;RESTORE COL REG
 RTS           ;BACK TO CALLER
WIN LDX #0     ;POS 0,0
 STX 656
 STX 657
 STX 658
 LDA #11       ;ICCOM=PUTCHR
 STA $342
 LDA #<WMSG    ;ICBADR=WMSG
 STA $344
 LDA #>WMSG
 STA $345
 LDA #79       ;ICBLEN=79
 STA $348
 STX $349
 JSR $E456     ;CIOV
RES LDA 53279  ;PRESSING START?
 CMP #6
 BNE RES
 JMP $E474     ;'PRESS' RESET
PN PHA
 LSR A         ;GET HIGH NIBBLE
 LSR A
 LSR A
 LSR A
 JSR CA        ;PRINT
 PLA
 AND #$0F      ;GET LOW NBL&PRT
CA ORA #$30    ;CHG TO ASCII
 LDX #11       ;ICCOM=PUTCHR
 STX $342
 LDX #0        ;ICBLEN=0=DATA IN
 STX $348      ; ACCU.
 STX $349
 JMP $E456     ;CIOV
STPI
 LDA #$80      ;STOP INTERRUPTS
 STA $D40E
 SEI
 RTS
STRI LDA #$C0  ;ENABLE INTER.'S
 STA $D40E
 CLI
 RTS
SVBI
 LDA #<DVBI ;ENABLE DEF VBI
 STA $0224
 LDA #>DVBI
 STA $0225
 LDA #<IVBI ;ENABLE IMM VBI
 STA $0222
 LDA #>IVBI
 STA $0223
 LDA #<CRTN ;ENABLE CTDN TMR
 STA $0228     ; ROUTINE
 LDA #>CRTN
 STA $0229
 LDA #1
 STA $021A
 RTS
CRTN
 LDA #0
 STA $02FF     ;NO CTRL-1
 INC 708       ;PULSE YOUR LASER
 LDA OKF       ;UPDATE OKF (ENM
 BEQ NUOKF     ; FIRE CTR)
 DEC OKF
NUOKF
 LDX #2
CKEXP
 LDA EXPCTR,X  ;ENM EXPLODING?
 BEQ NXEXP
 DEC EXPCTR,X  ;DEC EXPL CTR
 BEQ STPEXP    ;IF DONE EXP,STOP
 LDA #$20      ;ELSE,KEEP EXPL
 STA $D202     ; SOUND ON
 LDA #$0F
 STA $D203
NXEXP DEX
 BPL CKEXP     ;DONE ALL ENM'S?
 LDA #1        ;RESET CTDN TMR
 STA $21A
 RTS
STPEXP
 TXA
 PHA
 CLC           ;GET WHICH PLR
 ADC #$44      ; BAND TO USE
 STA EREXAD
 LDA EY,X
 TAY
 LDA #0
 STA $D202     ;STOP EXPL SOUND
 STA $D203
 TAX
EREX
EREXAD=*+2
 STA $FF00,Y   ;ERASE EXPL
 INX
 INY
 CPX #12       ;DONE ERASING?
 BCC EREX
 PLA
 TAX
 LDA $D20A     ;RND XPOS
 AND #$7F
 CLC
 ADC #60
 STA EX,X
 LDA $D20A     ;RND YPOS
 AND #$7F
 CLC
 ADC #46
 STA EY,X
 LDA #$FF      ;ENEMY=ADVANCING
 STA NV,X
 LDA #0
 STA 53278     ;NO COLL W/EXPL.
 LDA #5        ;ENEMY=STARTS
 STA ESC,X     ; OUT SMALL
 LDA #7
 STA ET,X      ;ENM TMR=7
 STA EP,X      ;ENM TMR PSE=7
 LDA R,X
 BEQ NOU       ;CAN WE UNLOK?
 LDA #0
 STA ELOCK,X   ;UNLOK
NOU JMP NXEXP  ;NXT EXPL.
DVBI
 INC S1        ;STAR1 CTR=..+1
 INC S2        ; 2
 INC S3        ; 3
 INC S4        ; 4
 INC S5        ; 5
 INC S6        ; 6
 INC S7        ; 7
 INC S8        ; 8
 LDX #0
PAUSE
 LDA S1,X      ;NEED TO RESET
 CMP PS,X      ; THIS CTR?
 BCC SKIP
 LDA #0        ;RESET CTR
 STA S1,X
 JSR DECS      ;AND MOV THE STRS
 CPX #1
 BCS SKIP
 JSR DECS
SKIP
 INX           ;NEXT LEVEL
 CPX #8        ;DONE ALL 8 LVLS?
 BCC PAUSE
 JMP $E462     ;RET TO SYSTEM
DECS
      Org *+72        ;DEC STRS IN LYR
 RTS           ; (CREATED RTNE)
DLI
 PHA           ;SAVE REGS
 TXA
 PHA
 TYA
 PHA
DLII
      Org *+2880      ;SET STR HPOS,LUM
 PLA           ;RESTORE REGS
 TAY
 PLA
 TAX
 PLA
 RTI
IVBI
 LDA JLOCK     ;LOCKED JOYSTIK?
 BEQ JMOVE
 JMP ERTN
JMOVE
 LDX #1
CHECKJOY
 LDA #15       ;GET 15-STICK(0)
 SEC
 SBC 632
 BIT ONE       ;UP?
 BEQ NOTONE
 LDY Y
 CPY #32       ;IS Y AT TOP?
 BCC NOTONE
 DEC Y         ;DEC Y TWICE
 DEC Y
 STX EFLAG     ;FLAG-REDRAW
NOTONE
 BIT TWO       ;DOWN?
 BEQ NOTTWO
 LDY Y
 CPY #182      ;IS Y AT BOT?
 BCS NOTTWO
 INC Y         ;INC Y TWICE
 INC Y
 STX EFLAG     ;FLAG-REDRAW
NOTTWO
 BIT FOUR      ;LEFT?
 BEQ NOTFOUR
 LDY X
 CPY #50       ;IS X LEFTMOST?
 BCC NOTFOUR
 DEC X         ;DEC X TWICE
 DEC X
NOTFOUR
 BIT EIGHT     ;RIGHT?
 BEQ NOTEIGHT
 LDY X
 CPY #201      ;IS X RTMOST?
 BCS NOTEIGHT
 INC X         ;INC X TWICE
 INC X
NOTEIGHT
 LDX X         ;UPDATE XPOS
 STX $D004
 INX
 INX
 STX $D005
 INX
 INX
 STX $D006     ;STORE IN HPOSM2
 LDA EFLAG     ;NEED TO REDRAW?
 BEQ ERTN      ;N:MOVE ENEMIES
 LDA #0        ;Y:REDRAW CROSS-
 STA EFLAG     ; HAIR
 TAX
 LDY Y
PUTLOOP
 LDA $4300,Y   ;GET OLD MBYTE
 AND #$C0      ;SAVE ONLY M3
 ORA PSHAP,X   ;FORCE IN C-HAIR
 STA $4300,Y   ;STORE FINAL BYT
 INX
 INY
 CPX #12       ;DONE ALL 12?
 BCC PUTLOOP
ERTN
 LDA #0
 STA EC
 STA $C0       ;($C0)=PTR TO PLR
 LDA #$44      ; BAND CURRENTLY
 STA $C1       ; IN USE
 LDX EC
ELOOP
 LDA ELOCK,X   ;ENEMY LOCKED?
 BEQ CKTM
 JMP NEXENM
CKTM DEC ET,X  ;DEC ENM'S TIMER
 BEQ DOTHISENM ;IF ZERO,MOVE HIM
 JMP NEXENM    ;ELSE DO NEXT ENM
DOTHISENM
 LDA EP,X      ;RESET THIS ENM'S
 STA ET,X      ; TIMER
 LDA NV,X      ;GET #VECTRS MOVD
 BEQ DSAPPR    ;ZERO=DSAPPR
 BMI APPEAR    ;NEG#=APPEAR
 JMP CONTERTN  ;POS#=MOVING
DSAPPR
 STA CTR
 LDA ESC,X
 CMP #5
 BCS SETAPR    ;DONE DISAPPRING?
 ASL A
 CLC
 ADC ESC,X
 ASL A
 ASL A
 LDY EY,X      ;Y=PTR TO ENM PLR
 TAX           ;X=PTR 2 ESHP TBL
RECLP
 LDA ESHAP,X   ;GET SHAPE BYTE
 STA ($C0),Y   ;STORE IT IN P0
 INX
 INY
 INC CTR
 LDA CTR
 CMP #12
 BCC RECLP
 LDX EC
 INC ESC,X     ;NEXT FRAME
 JMP NEXENM    ;NXT ENM
SETAPR
 LDA #$FF      ;#VECT CTR=NEG #:
 STA NV,X      ; ENM WILL APPEAR
 LDA EY,X
 CLC
 ADC #5
 STA EY,X
 TAY
 LDA #0        ;ERASE ENEMY
 STA ($C0),Y
 LDA $D20A     ;RND ENM XPOS
 AND #$7F
 CLC
 ADC #60
 STA EX,X
 LDA $D20A     ;RND ENM YPOS
 AND #$7F
 CLC
 ADC #46
 STA EY,X
 JMP NEXENM    ;NXT ENM
APPEAR
 DEC ESC,X
 BMI DNAPPR    ;DONE APPEARING?
 LDA ESC,X
 ASL A
 CLC
 ADC ESC,X
 ASL A
 ASL A
 LDY EY,X      ;Y=PTR TO ENM PLR
 TAX           ;X=PTR TO SHP TBL
 LDA #0
 STA CTR
APLP
 LDA ESHAP,X   ;GET ENM SHP BYT
 STA ($C0),Y   ;PUT IT IN PLR
 INX
 INY
 INC CTR
 LDA CTR       ;DONE 12 BYTES?
 CMP #12
 BCC APLP
 LDX EC
 LDA EX,X      ;GET ENM'S XPOS
 STA $D000,X   ;STORE IN HPOS
 JMP NEXENM    ;NXT ENM
DNAPPR
 LDA $D20A     ;RND MAX # VECTRS
 AND #$07
 CLC
 ADC #4
 STA MNV,X
ERP=*+1
 LDA #1
 STA ET,X      ;ENM TMR=1
 STA EP,X      ;ENM TMR PSE=1
 LDA #1
 STA NV,X      ;#VETCS MOVED=1
 JMP NEXENM    ;NXT ENM
CONTERTN
 LDA EX,X      ;ENM'S X=..+DX
 CLC
 ADC EDX,X
 STA EX,X
 CMP #48       ;OFF LEFT EDGE?
 BCC CEDIR
 CMP #201      ;OFF RIGHT EDG?
 BCS CEDIR
 LDA EY,X      ;ENM Y=..+DY
 CLC
 ADC EDY,X
 STA EY,X
 CMP #186      ;OFF BOT EDGE?
 BCS CEDIR
 CMP #33       ;OFF TOP EDGE?
 BCC CEDIR
 INC ECTR,X    ;N:INC CTR 4 ENM
 LDA ECTR,X    ;HAS IT MOVED
 CMP ELIM,X    ; THE LIMIT?
 BCS CEDIR
PUTENM
 LDY EY,X      ;Y=PTR TO ENM PLR
 LDX #0        ;X=PTR TO SHP TBL
PUTELP
 LDA ESHAP,X   ;GET ENM SHAPBYT
 STA ($C0),Y   ;STORE IN ENM PLR
 INY
 INX
 CPX #12       ;DONE ALL 12?
 BCC PUTELP
 LDX EC
 LDA EX,X      ;GET ENM XPOS
 STA $D000,X   ;STORE IN HPOS
NEXENM INC $C1 ;NXT PLR BAND
 INC EC        ;NXT ENM CTR
 LDX EC        ;DONE W/ALL 3
 CPX #3        ; ENMS?
 BCS RETIMM
 JMP ELOOP     ;CONT W/NXT ENM
RETIMM
 JMP $E45F     ;BACK TO SYSTEM
CEDIR
 LDA EY,X      ;RESTORE ENM YPOS
 SEC
 SBC EDY,X
 STA EY,X
 LDA EX,X      ;RESTORE ENM XPOS
 SEC
 SBC EDX,X
 STA EX,X
 INC NV,X      ;#VECTS MVED=..+1
 LDA NV,X      ;LIMIT YET?
 CMP MNV,X
 BCC CNTCEDIR
 LDA #0        ;NV=0:FLAG-ENM
 STA NV,X      ; WILL RECEDE
 STA ESC,X     ;RSET ENM SHP CTR
 LDA #7
 STA ET,X      ;ENM TMR=7
 STA EP,X      ;ENM TMR PSE=7
 JMP NEXENM    ;UPDATE NXT ENM
CNTCEDIR
 LDA #0        ;RESET MVEMNT CTR
 STA ECTR,X
 LDA 53770     ;SET A NEW
 AND #$3F      ; MOVEMENT LIMIT
 STA ELIM,X
 LDA EX,X
 BPL POSEDX    ;IF X=LF,DX=RT
 BMI NEGEDX    ;IF X=RT,DX=LF
NEWEDY LDA EY,X
 BPL POSEDY    ;IF Y=UP,DY=DN
 BMI NEGEDY    ;IF Y=DN,DY=UP
 JMP PUTENM    ;DRAW SHAPE
POSEDX
 JSR GETPOS    ;GET RND ENM +DX
 STA EDX,X
 JMP NEWEDY
NEGEDX
 JSR GETNEG    ;GET RND ENM -DX
 STA EDX,X
 JMP NEWEDY
POSEDY
 JSR GETPOS    ;GET RND ENM +DY
 STA EDY,X
 JMP PUTENM
NEGEDY
 JSR GETNEG    ;GET RND ENM -DY
 STA EDY,X
 JMP PUTENM
GETPOS
 LDA 53770     ;GET RND 1-3
 AND #$03
 BEQ GETPOS
 RTS
GETNEG
 LDA 53770     ;GET RND -1 TO -3
 AND #$03
 BEQ GETNEG
 EOR #$FF
 CLC
 ADC #1
 RTS
ONE
 .BYTE 1 ;FOR 'BIT' INSTR.
TWO
 .BYTE 2 ; SAME
FOUR
 .BYTE 4 ; SAME
EIGHT
 .BYTE 8 ; SAME
Y .BYTE 0 ;CROSSHAIR Y
X .BYTE 0 ;CROSSHAIR X
EFLAG
 .BYTE 0 ;C-HAIR REDRAW FLAG
PSHAP
 .BYTE $00,$00,$0C,$0C,$0C,$3F,$3F,$0C,$0C,$0C,$00,$00 ;CRSSHAIR SHAPE
C .BYTE 14,12,10,8,8,6,4,2 ;STARS' COLOR (LUMINANCE) TABLE

S1
 .BYTE 0 ;CTR FOR STAR LAYER 1
S2
 .BYTE 0 ;                   2
S3
 .BYTE 0 ;                   3
S4
 .BYTE 0 ;                   4
S5
 .BYTE 0 ;                   5
S6
 .BYTE 0 ;                   6
S7
 .BYTE 0 ;                   7
S8
 .BYTE 0 ;                   8
PS
 .BYTE 1,1,2,3,4,6,9,14 ;STR SPD
CTR
 .BYTE 0 ;MISC COUNTER
DLIP
 .BYTE $AD  ;"LDA ABSOLUTE"
PHPOS
 .WORD HPOS ; ADR FOR LDA
 .BYTE $AC  ;"LDY ABSOLUTE"
PLT
 .WORD LT          ;ADR FOR LDY
 .BYTE $8D,$0A,$D4 ;STA WSYNC
 .BYTE $8D,$07,$D0 ;STA HPOSM3
 .BYTE $8C,$15,$D0 ;STY COLRM3
EX
 .BYTE 0,0,0 ;ENEMY XPOS TABLE
EY
 .BYTE 0,0,0 ;ENEMY YPOS TABLE
ESHAP
 .BYTE 0,0,0,0,146,186,254,198,0,0,0,0
 .BYTE 0,0,0,0,146,254,198,0,0,0,0,0
 .BYTE 0,0,0,0,84,124,68,0,0,0,0,0
 .BYTE 0,0,0,0,0,56,0,0,0,0,0,0
 .BYTE 0,0,0,0,0,16,0,0,0,0,0,0
EDX
 .BYTE 0,0,0 ;ENEMY DX TABLE
EDY
 .BYTE 0,0,0 ;ENEMY DY TABLE
ECTR
 .BYTE 0,0,0 ;# STEPS TRAVELED
ELIM
 .BYTE 0,0,0 ;MAX # STEPS TO XVL
NV
 .BYTE 0,0,0 ;#VECTORS TRAVELED
MNV
 .BYTE 0,0,0 ;MAX VECTS TO XVEL
ESC
 .BYTE 0,0,0 ;ENM SHAPE CTR
EP
 .BYTE 0,0,0 ;ENM TIMER PAUSES
ET
 .BYTE 0,0,0 ;ENM TIMERS
EC
 .BYTE 0     ;CTR FOR ENM MVEMNT
JLOCK
 .BYTE 0
ELOCK
 .BYTE 0,0,0 ;ENM 'LOCK' STATUS
EL
 .BYTE 0     ;ENEMY FIRING LASER
LX
 .BYTE 0     ;LASER TERMINAL X
LY
 .BYTE 0     ;LASER TERMINAL Y
EXPSHP
 .BYTE 20,64,10,160,4,17,132,33,4,80,2,40 ;EXPLOS SHAPE
EXPCTR
 .BYTE 0,0,0 ;EXPLOSION COUNTER
OKF
 .BYTE 0     ;ENM OK2FIRE CTR
ELVT
 .BYTE 64,128,192 ;ENM LVL TBL
ERPT
 .BYTE 3,2,1 ;ENM RTN PAUSE TBL
LN
 .BYTE 0     ;LEVEL #
SP
 .BYTE 0     ;ENEMY SPEED
SMSG
 .BYTE "        INVASION      OPTION-Level:1    "
 .BYTE "                      SELECT-Speed:1    "
 .BYTE "     by: Norman Lin   START -Play Game  "
 .BYTE "        (c) 1988      SPACE -Pause      "
GMSG
 .BYTE "        INVASION      Shield Energy:70  "
 .BYTE "                      Enemies Left :99  "
LNGM=*+37
 .BYTE "     by: Norman Lin   Level Number : 1  "
SPGM=*+37
 .BYTE "        (c) 1988      Enemy Speed  : 1  "
WMSG
 .BYTE "        INVASION      GOOD JOB!YOU WIN! "
 .BYTE "                      -->PRESS START<-- "
LMSG
 .BYTE "        INVASION    YOU LOSE-PUSH START "
SHIELD .BYTE 0 ;SHIELD ENERGY
REM .BYTE 0   ;#ENM LEFT
R .BYTE 0,0,0 ;ENM UNLOCK FLAG
GRAPHICS
 PHA          ;SAVE ORIG. #
 LDX #$60     ;IOCB 6(SCREEN)
 LDA #12      ;CLOSE #6
 STA $342,X   ;(JUST TO BE
 JSR $E456    ; SAFE!)
 LDA #3       ;OPEN #6
 STA $342,X   ;COMMAND #
 LDA <SCRDEV  ;ADDR OF "S:"
 STA $344,X   ;LO BYTE
 LDA >SCRDEV  ;AND NOW THE
 STA $345,X   ;    HI BYTE
 LDA #1       ;LENGTH OF SCRN
 STA $348,X   ; I.D. IS ONLY
 LDA #0       ; ONE CHARACTER
 STA $349,X   ; (THE 'S')
 PLA          ;GET IT BACK
 PHA          ;BUT STILL SAVE
 EOR #16      ;REVERSE BIT 5
 AND #16      ;KEEP ONLY BIT 5
 CLC          ;ADD 12 TO IT
 ADC #12
 STA $34A,X   ;=ICAX1 SPEC
 PLA          ;ORIG. MODE #=
 STA $34B,X   ; ICAX2 SPEC
 JMP $E456    ;AND JMP TO CIO!
COLOR
 STA COLNUM    ;STORE IT FOR
 RTS          ; LATER USE
POSITION
 STY 84       ;VERT POS
 STX 85       ;HOR POS LO BYTE
 STA 86       ;HOR POS HI BYTE
 RTS          ;BYE!
PLOT
 JSR POSITION ;POSITION CURSOR
 LDX #$60     ;SCREEN (IOCB6)
 LDA #11      ;PUT CHARS COMD
 STA $342,X   ;STORE IN ICCOM
 LDA #$00     ;BUFLEN OF ZERO
 STA $348,X   ; MEANS GET/PUT
 STA $349,X   ; DATA TO/FROM
;               THE ACCUM.
 LDA COLNUM   ;PUT COLOR # IN
;               ACCU B/C LEN=0
 JMP $E456    ;JMP TO CIO
DRAWTO
 JSR POSITION ;POSITION CURSR
 LDX #$60     ;SCRN (IOCB6)
 LDA #17      ;DRAW LINE CMD
 STA $342,X   ;STORE IN ICCOM
 LDA #0       ;ZERO BUF LEN
 STA $348,X   ; B/C NO DATA
 STA $349,X   ; IS XFERRED!
 LDA COLNUM   ;STORE COL # IN
 STA $02FB    ; 2FB FOR CIO
 JMP $E456    ;AND GO TO CIO
SCRDEV
 .BYTE "S"    ;SCREEN I.D.
COLNUM
 BRK          ;COLOR# STORAGE
HPOS
      Org *+192      ;TBL STR POS
LT
      Org *+192      ;TBL STR LUM

 *=$02E0
 .WORD BP     ;DOS RUN ADR
