
PROGRAM LISTING: 90-04/INVASION.SRC
0100 .OPT NOLIST
0105 *=$1F00
0110 BP
0115 LDA #2 ;INIT RESET KEY
0120 STA 9
0125 LDA #BP&255
0130 STA 2
0135 LDA #BP/256
0140 STA 3
0145 LDA #0
0150 STA 580
0155 STA LN ;LVL VAR=0
0160 STA SP ;SPD VAR=0
0165 STA 82 ;LMAR=0
0170 STA JLOCK ;UNLOK JOYSTIK
0175 LDA #39
0180 STA 83 ;RMAR=0
0185 LDA #7
0190 JSR GRAPHICS
0195 LDA #64
0200 STA 16
0205 STA 53774 ;NO BREAK
0210 LDA #HPOS&255
0215 STA $C0 ;DEC ADR L
0220 STA PHPOS ;HPOS PTR L
0225 LDA #HPOS/256
0230 STA $C1 ;DEC ADR H
0235 STA PHPOS+1 ;HPOS PTR H
0240 LDY #0
0245 MAKEDEC
0250 LDA #$DE ;"DEC ABS,X"
0255 STA DECS,Y
0260 LDA $C0 ; ADR TO DEC L
0265 INY
0270 STA DECS,Y
0275 LDA $C1 ; ADR TO DEC H
0280 INY
0285 STA DECS,Y
0290 LDA $C0 ;INC BY 8 ADR FOR
0295 CLC ; 'DEC' INSTR TO
0300 ADC #$08 ; GET NXT IN LYR
0305 STA $C0 ; OF STRS
0310 LDA $C1
0315 ADC #0
0320 STA $C1
0325 INY ;MAKE NXT INSTR.
0330 CPY #72 ;DONE ALL?
0335 BCC MAKEDEC ;N:CONT
0340 LDA #DLII&255 ;Y:INIT ADR TO
0345 STA $C0 ; MAKE DLI IN
0350 LDA #DLII/256
0355 STA $C1
0360 LDA #LT&255 ;INIT PTR TO
0365 STA PLT ; LUM TBL
0370 LDA #LT/256
0375 STA PLT+1
0380 LDX #0 ;#DLI'S DONE
0385 OMDLI
0390 LDY #0 ;#INSTR'S DONE
0395 IMDLI
0400 LDA DLIP,Y ;GET INSTR.
0405 STA ($C0),Y ;PUT IN DLI
0410 INY ;NXT BYT
0415 CPY #15 ;DONE?
0420 BCC IMDLI ;N:GET ANOTHER
0425 LDA $C0 ;Y:INC ADR WHERE
0430 CLC ; DLI IS PUT IN
0435 ADC #15 ; MEM
0440 STA $C0
0445 LDA $C1
0450 ADC #0
0455 STA $C1
0460 LDA PHPOS ;CHG DLI INSTR
0465 CLC ; TBL SO NXT DLI
0470 ADC #1 ; REFERS TO NXT
0475 STA PHPOS ; STAR'S HPOS
0480 LDA PHPOS+1
0485 ADC #0
0490 STA PHPOS+1
0495 LDA PLT ;SAME FOR LUM.
0500 CLC
0505 ADC #1
0510 STA PLT
0515 LDA PLT+1
0520 ADC #0
0525 STA PLT+1
0530 INX
0535 CPX #192 ;DONE 192 DLIS?
0540 BCC OMDLI ;N:KEEP MAKING
0545 LDA #3 ;Y:ENABLE P/M
0550 STA 53277
0555 STA ERP ;LVL 1 PSE
0560 LDA #$40 ;PMBASE=$4000
0565 STA 54279
0570 LDA #62 ;SDMCTL=SGL LINE
0575 STA 559
0580 LDA #1 ;GRPRIOR
0585 STA 623
0590 STA 752 ;CURSOR OFF
0595 LDA ELVT ;GET LVL 1 SPD
0600 STA ELVL ;STORE IN PGM
0605 LDA #$31 ;INIT MSGS
0610 STA LNGM
0615 STA SPGM
0620 LDA #14 ;SET UP P/M COL
0625 STA 704
0630 STA 705
0635 STA 706
0640 LDY #0
0645 TYA
0650 BLANKPM
0655 STA $4300,Y ;CLR M1-4
0660 STA $4400,Y ; P0
0665 STA $4500,Y ; P1
0670 STA $4600,Y ; P2
0675 INY
0680 BNE BLANKPM ;DONE ALL 256?
0685 LDX #32 ;Y:X=OFSET TO M0
0690 LDA #$80
0695 STA X ;INIT CRSHR POS
0700 STA Y
0705 FM STA $4300,X ;FILL M3
0710 INX
0715 CPX #224 ;BOT OF SCREEN?
0720 BCC FM ;N:CONT FILL
0725 LDX #0 ;Y:INIT STR COLS
0730 STX CTR
0735 OLP
0740 LDY #0
0745 ILP
0750 LDA C,Y ;GET LUM FROM TBL
0755 STA LT,X ;STORE IN BIG TBL
0760 INX
0765 INY
0770 CPY #8 ;DONE W/SML TBL?
0775 BCC ILP ;N:KEEP XFER
0780 INC CTR ;Y:NXT GRP
0785 LDA CTR
0790 CMP #24 ;DONE W/SCREEN?
0795 BCC OLP ;N:XFER SML TBL
0800 LDA #0 ;Y:BLK BCKGROUND
0805 STA 710
0810 TAX
0815 FILL
0820 LDA $D20A
0825 STA HPOS,X ;RND STAR HPOS
0830 INX
0835 CPX #192 ;DONE 192?
0840 BCC FILL ;N:MORE RND HPOS
0845 LDA 560 ;Y:SET UP DLI
0850 STA $C0 ; LINE
0855 LDA 561
0860 STA $C1
0865 LDY #2
0870 LDA ($C0),Y
0875 ORA #$80
0880 STA ($C0),Y
0885 LDA #SVBI&255 ;ADR FOR SETUP
0890 STA $0228 ; COUNTDOWN TIMER
0895 LDA #SVBI/256 ; ROUTINE
0900 STA $0229
0905 LDA #DLI&255 ;DLI ADR
0910 STA 512
0915 LDA #DLI/256
0920 STA 513
0925 LDX #0
0930 INITE
0935 LDA $D20A
0940 AND #$7F
0945 CLC
0950 ADC #60 ;RND ENM X
0955 STA EX,X
0960 AND #$3F ;RND ENM MOVE
0965 STA ELIM,X ; LIMIT
0970 AND #$03 ;RND ENM DX
0975 SEC
0980 SBC #1
0985 STA EDX,X
0990 REINITY
0995 LDA $D20A ;RND ENM Y
1000 AND #$7F
1005 CLC
1010 ADC #46
1015 STA EY,X
1020 AND #$03 ;RND ENM DY
1025 SEC
1030 SBC #1
1035 BEQ REINITY ;NO ZERO DY!
1040 STA EDY,X
1045 LDA #0 ;MVMENT CTR=0
1050 STA ECTR,X
1055 STA ELOCK,X ;UNLOK ENM
1060 LDA #$FF ;#VECTS MOVED=
1065 STA NV,X ; NEG:ENM ADVANC
1070 LDA #5 ;ENM SHP CTR=5=
1075 STA ESC,X ; SMALLEST FRAME
1080 LDA #7
1085 STA EP,X ;TMR PSE=7
1090 STA ET,X ;TMR=7
1095 INX
1100 CPX #3 ;DONE ALL 3 ENM?
1105 BCC INITE ;N:INIT NEXT
1110 LDA ERP ;Y:ENM RTN PSE*8=
1115 ASL A ; ENM FIRING PSE
1120 ASL A
1125 ASL A
1130 STA OKF
1135 LDA #$70
1140 STA SHIELD ;INIT SHIELD
1145 LDA #$99
1150 STA REM ;INIT REMAINING
1155 LDA #0 ;POS 0,0
1160 STA 656
1165 STA 657
1170 STA 658
1175 TAX ;X=IOCB0=SCRN
1180 LDA #11 ;ICCOM=PUTCHR
1185 STA $0342
1190 LDA #SMSG&255 ;ICBADR=SMSG
1195 STA $0344
1200 LDA #SMSG/256
1205 STA $0345
1210 LDA #158 ;ICBLEN=158
1215 STA $0348
1220 STX $0349
1225 STX $02FF ;NO CTRL-1
1230 JSR $E456 ;CIOV
1235 ST LDX #0 ;PSE ABT 1 SEC
1240 OP
1245 LDY #0
1250 IP
1255 DEY
1260 BNE IP
1265 DEX
1270 BNE OP
1275 STX $02FF ;NO CTRL-1
1280 LDA 53279 ;CONSOLE KEY
1285 CMP #7 ;TOUCHING A KEY?
1290 BEQ ST
1295 CMP #5 ;SELECT?
1300 BNE NSEL
1305 JMP SELECT
1310 NSEL CMP #3 ;OPTION?
1315 BNE NOPT
1320 JMP OPTION
1325 NOPT CMP #6 ;START?
1330 BNE ST
1335 JMP START
1340 OPTION
1345 LDX LN ;INC LEVEL NUMBER
1350 INX
1355 CPX #3
1360 BCC LNS
1365 LDX #0
1370 LNS STX LN
1375 LDA ELVT,X ;GET ENM LVL
1380 STA ELVL ;STORE IN PGM
1385 LDA #35 ;POS 33,0
1390 STA 657
1395 LDA #0
1400 STA 658
1405 STA 656
1410 STA $0348 ;ICBLEN=0:DATA
1415 STA $0349 ; STORED IN ACCU.
1420 LDA #11 ;ICCOM=PUTCHR
1425 STA $0342
1430 INX ;CHG LVL TO ASCII
1435 TXA
1440 ORA #$30
1445 STA LNGM ;STORE IN GMSG
1450 LDX #$00 ;X=IOCB0:SCREEN
1455 JSR $E456 ;CIOV
1460 JMP ST ;BACK TO PAUSE
1465 SELECT
1470 LDX SP ;INC ENM SPD BY 1
1475 INX
1480 CPX #3
1485 BCC SPS
1490 LDX #0
1495 SPS STX SP
1500 LDA ERPT,X ;GET NEW PAUSE
1505 STA ERP ; &STORE IN PGM
1510 LDA #35 ;POS 33,1
1515 STA 657
1520 LDA #0
1525 STA 658
1530 STA $0348 ;ICBLEN=0:DATA IN
1535 STA $0349 ; ACCU.
1540 LDA #1
1545 STA 656
1550 LDA #11 ;ICCOM=PUTCHR
1555 STA $0342
1560 INX ;CHG SPD TO ASCII
1565 TXA
1570 ORA #$30
1575 STA SPGM ;STORE IN GMSG
1580 LDX #0 ;X=IOCB0:SCREEN
1585 JSR $E456 ;CIOV
1590 JMP ST ;BACK TO PAUSE
1595 START
1600 LDX #0 ;POS 0,0
1605 STX 656
1610 STX 657
1615 STX 658
1620 LDA #11 ;ICCOM=PUTCHR
1625 STA $342
1630 LDA #GMSG&255 ;ICBADR=GMSG
1635 STA $0344
1640 LDA #GMSG/256
1645 STA $0345
1650 LDA #158 ;ICBLEN=158
1655 STA $0348
1660 LDA #0
1665 STA $0349
1670 JSR $E456 ;CIOV
1675 LDA #1 ;SET FLAG=PUT
1680 STA EFLAG ; CRSHAIR ON SCR
1685 STA $21A ;ENABLE SET RTN
1690 LDA #192
1695 STA 54286 ;ENABLE DLI
1700 MAIN
1705 LDA $D20F
1710 AND #$04 ;PRESSNG ANY KEY?
1715 BNE NOSPACE
1720 LDA 53769
1725 CMP #$21 ;PRESSING SPACE?
1730 BNE NOSPACE
1735 JSR STPI ;STP ALL INTER.
1740 KEYED
1745 LDA $D20F
1750 AND #$04 ;STILL PRESSING?
1755 BEQ KEYED
1760 PAUSED
1765 LDA $D20F
1770 AND #$04 ;PRESSING A KEY?
1775 BNE PAUSED
1780 LDA 53769
1785 CMP #$21 ;PRESSING SPACE?
1790 BNE PAUSED
1795 RELEASE
1800 LDA $D20F
1805 AND #$04 ;STILL PRESSING?
1810 BEQ RELEASE
1815 JSR STRI ;RESTART INTER.
1820 NOSPACE
1825 LDA #0
1830 STA 77 ;NO ATTRACT MODE
1835 LDA $D010 ;FIRE BUTTON?
1840 BNE EFIRE ;N:ENM'S FIRE
1845 JMP FIRE ;Y:YOU FIRE
1850 EFIRE
1855 LDA OKF ;TIME FOR ENM TO
1860 BEQ DOEFIRE ; FIRE?
1865 JMP MAIN
1870 DOEFIRE
1875 LDA ERP ;RESTORE ENM FIRE
1880 ASL A ; CTR
1885 ASL A
1890 ASL A
1895 STA OKF
1900 LDA $D20A
1905 ELVL=*+1
1910 CMP #64 ;FIRE ACCORDING
1915 BCS MAIN ; TO PROBABILITY
1920 AND #$03
1925 CMP #3
1930 BEQ MAIN
1935 TAX ;ENEMY # FIRING
1940 LDA NV,X
1945 BEQ MAIN ;IF RECEDING,QUIT
1950 BMI MAIN ;IF ADVANCNG,QUIT
1955 LDA ELOCK,X
1960 BNE MAIN ;IF LOCKED,QUIT
1965 STX EL
1970 LDA #$20 ;START ENM LASER
1975 STA $D200 ; SOUND
1980 LDA #$4F
1985 STA $D201
1990 LDA #1 ;LOCK ENEMY
1995 STA ELOCK,X
2000 LDA #2 ;COLOR 2
2005 JSR COLOR
2010 LDX EL
2015 LDA EY,X ;CHG ENM PLR Y
2020 SEC ; INTO GR 7 YPOS
2025 SBC #26
2030 LSR A
2035 PHA
2040 TAY
2045 LDA EX,X ;CHG ENM PLR X
2050 SEC ; INTO GR 7 XPOS
2055 SBC #45
2060 PHA
2065 TAX
2070 LDA #0
2075 JSR PLOT ;PLOT
2080 LDA $D20A ;RND YPOS
2085 AND #$3F
2090 CLC
2095 ADC #8
2100 TAY
2105 STA LY
2110 LDA $D20A ;RND XPOS
2115 AND #$7F
2120 CLC
2125 ADC #16
2130 TAX
2135 STA LX
2140 LDA #0
2145 JSR DRAWTO ;DRAWTO TO HERE
2150 LDA #64 ;FLASH SCREEN RED
2155 STA 712
2160 STA 710
2165 LDA #0 ;COLOR 0
2170 JSR COLOR
2175 PLA ;START XPOS FOR
2180 TAX ; LASER
2185 PLA ;START YPOS FOR
2190 TAY ; LASER
2195 LDA #0
2200 JSR PLOT ;'UNPLOT' THIS PT
2205 LDA #0 ;END XPOS FOR
2210 LDX LX ; LASER
2215 LDY LY ;END YPOS
2220 JSR DRAWTO ;ERASE LINE
2225 LDX EL
2230 LDA #0 ;UNLOCK ENEMY
2235 STA ELOCK,X
2240 STA $D200 ;TURN OFF SOUND
2245 STA $D201
2250 STA 712 ;BLACKEN SCREEN
2255 STA 710
2260 LDA SHIELD
2265 PHA
2270 CMP #2
2275 BCC LOSE ;YOU KILLED?
2280 JSR STPI
2285 SED
2290 PLA
2295 SEC
2300 SBC #2 ;DECREASE SHIELD
2305 STA SHIELD
2310 PHA
2315 CLD
2320 JSR STRI
2325 LDA #36 ;POS 36,0
2330 STA 657
2335 LDA #0
2340 STA 658
2345 STA 656
2350 PLA
2355 JSR PN ;PRINT NEW SHIELD
2360 JMP MAIN ;BACK TO MAIN
2365 LOSE
2370 LDA #$8F ;DISTORTION,VOL
2375 STA $D201 ; FOR YOUR EXPL
2380 STA JLOCK ;LOCK JSTICK
2385 LDX #$80 ;EXPL DURATION
2390 LO LDY #0
2395 LI LDA $D20A
2400 STA $D200 ;RND FREQ
2405 STA 712 ;RND COL
2410 STA 710
2415 DEY
2420 BNE LI
2425 DEX
2430 BNE LO ;LOOP YOUR EXPL
2435 STX $D200 ;TURN OFF SOUND
2440 STX $D201
2445 STX 712 ;BCK COL=0
2450 STX 710
2455 STX 656 ;POS 0,0
2460 STX 657
2465 STX 658
2470 LDA #11
2475 STA $0342 ;ICCOM=PRNCHR
2480 LDA #LMSG&255 ;ICBADR=LMSG
2485 STA $0344
2490 LDA #LMSG/256
2495 STA $0345
2500 LDA #39 ;ICBLEN=39
2505 STA $0348
2510 STX $0349
2515 JSR $E456 ;CIOV
2520 JMP RES ;WAIT FOR RESTART
2525 FIRE LDA #$4F ;START YOUR LASER
2530 STA $D201 ; SOUND
2535 LDA #1
2540 STA $D200
2545 STA JLOCK ;LOCK JOYSTIK
2550 JSR COLOR ;COLOR 1
2555 LDA #0
2560 STA 53278 ;CLR OLD COLL.
2565 LDX #80
2570 LDY #79
2575 JSR PLOT ;PLOT 80,79
2580 LDA X ;CHG CROSSHAIR X
2585 SEC ; TO GR.7 XPOS
2590 SBC #45
2595 PHA
2600 TAX
2605 LDA Y ;CHG CROSSHAIR Y
2610 SEC ; TO GR.7 YPOS
2615 SBC #26
2620 LSR A
2625 PHA
2630 TAY
2635 LDA #0
2640 JSR DRAWTO ;DRAWTO TO HERE
2645 LDA #0
2650 JSR COLOR ;COLOR 0
2655 LDA #0
2660 LDX #80
2665 LDY #79
2670 JSR PLOT ;ERASE LASER STRT
2675 PLA ;LASER END Y
2680 TAY
2685 PLA ;LASER END X
2690 TAX
2695 LDA #0 ;TURN OFF SOUND
2700 STA $D200
2705 STA $D201
2710 JSR DRAWTO ;ERASE LASER
2715 LDA #0 ;UNLOK JOYSTIK
2720 STA JLOCK
2725 LDA $D008 ;CHECK FOR ANY
2730 BEQ CH2 ; COLLISIONS
2735 JSR HIT
2740 CH2 LDA $D009
2745 BEQ CH3
2750 JSR HIT
2755 CH3 LDA $D00A
2760 BEQ NOHIT
2765 JSR HIT
2770 NOHIT
2775 JMP EFIRE ;LET ENM FIRE
2780 HIT
2785 BIT ONE ;HIT P0?
2790 BEQ ONEOK
2795 LDX #0
2800 JSR EXPLODE
2805 ONEOK
2810 BIT TWO ;HIT P1?
2815 BEQ TWOOK
2820 LDX #1
2825 JSR EXPLODE
2830 TWOOK
2835 BIT FOUR ;HIT P2?
2840 BEQ FOUROK
2845 LDX #2
2850 JSR EXPLODE
2855 FOUROK
2860 RTS
2865 EXPLODE
2870 PHA ;SAVE COLL REG
2875 TXA ;SAVE WHICH ENM
2880 PHA ; TO EXPLODE
2885 LDA ELOCK,X ;ENM LOCKED?
2890 BEQ CANEXP
2895 PLA
2900 PLA
2905 RTS
2910 CANEXP PLA ;RESTORE WHICH TO
2915 PHA ; EXPL.&SAVE AGN
2920 CLC ;GET WHICH PLR
2925 ADC #$44 ; BAND TO USE
2930 STA EXPADR
2935 LDA #1 ;LOCK ENEMY
2940 STA ELOCK,X
2945 LDA EY,X ;GET ENM YPOS
2950 TAY
2955 LDX #0
2960 EXPLP
2965 LDA EXPSHP,X ;PUT EXPLOSION
2970 EXPADR=*+2
2975 STA $FF00,Y
2980 INX
2985 INY
2990 CPX #12 ;ALL 12?
2995 BCC EXPLP
3000 PLA
3005 TAX
3010 LDA #60 ;KEEP THIS EXPL.
3015 STA EXPCTR,X ; ON FOR 1 SEC
3020 JSR STPI ;STP INT
3025 SED
3030 LDA REM
3035 SEC
3040 SBC #1
3045 STA REM ;REM=REM-1(DEC)
3050 LDA SHIELD
3055 CMP #$99
3060 BEQ NOIS
3065 CLC
3070 ADC #1
3075 STA SHIELD ;SHIELD=SHIELD+1
3080 NOIS CLD
3085 JSR STRI ;STR INT
3090 LDA REM
3095 PHA
3100 CMP #3 ;>=3 LEFT?
3105 BCS CANR
3110 LDA #0 ;CANT RESTORE
3115 JMP STORR
3120 CANR LDA #1 ;CAN RESTORE
3125 STORR STA R,X
3130 PLA
3135 BEQ WIN ;IF KILL ALL,WIN!
3140 LDY #36 ;POS 36,1
3145 STY 657
3150 LDY #0
3155 STY 658
3160 LDY #1
3165 STY 656
3170 JSR PN ;PRNT #REMAINING
3175 LDA #36 ;POS 36,0
3180 STA 657
3185 LDA #0
3190 STA 658
3195 STA 656
3200 LDA SHIELD
3205 JSR PN ;PRINT NEW SHIELD
3210 PLA ;RESTORE COL REG
3215 RTS ;BACK TO CALLER
3220 WIN LDX #0 ;POS 0,0
3225 STX 656
3230 STX 657
3235 STX 658
3240 LDA #11 ;ICCOM=PUTCHR
3245 STA $342
3250 LDA #WMSG&255 ;ICBADR=WMSG
3255 STA $344
3260 LDA #WMSG/256
3265 STA $345
3270 LDA #79 ;ICBLEN=79
3275 STA $348
3280 STX $349
3285 JSR $E456 ;CIOV
3290 RES LDA 53279 ;PRESSING START?
3295 CMP #6
3300 BNE RES
3305 JMP $E474 ;'PRESS' RESET
3310 PN PHA
3315 LSR A ;GET HIGH NIBBLE
3320 LSR A
3325 LSR A
3330 LSR A
3335 JSR CA ;PRINT
3340 PLA
3345 AND #$0F ;GET LOW NBL&PRT
3350 CA ORA #$30 ;CHG TO ASCII
3355 LDX #11 ;ICCOM=PUTCHR
3360 STX $342
3365 LDX #0 ;ICBLEN=0=DATA IN
3370 STX $348 ; ACCU.
3375 STX $349
3380 JMP $E456 ;CIOV
3385 STPI
3390 LDA #$80 ;STOP INTERRUPTS
3395 STA $D40E
3400 SEI
3405 RTS
3410 STRI LDA #$C0 ;ENABLE INTER.'S
3415 STA $D40E
3420 CLI
3425 RTS
3430 SVBI
3435 LDA #DVBI&255 ;ENABLE DEF VBI
3440 STA $0224
3445 LDA #DVBI/256
3450 STA $0225
3455 LDA #IVBI&255 ;ENABLE IMM VBI
3460 STA $0222
3465 LDA #IVBI/256
3470 STA $0223
3475 LDA #CRTN&255 ;ENABLE CTDN TMR
3480 STA $0228 ; ROUTINE
3485 LDA #CRTN/256
3490 STA $0229
3495 LDA #1
3500 STA $021A
3505 RTS
3510 CRTN
3515 LDA #0
3520 STA $02FF ;NO CTRL-1
3525 INC 708 ;PULSE YOUR LASER
3530 LDA OKF ;UPDATE OKF (ENM
3535 BEQ NUOKF ; FIRE CTR)
3540 DEC OKF
3545 NUOKF
3550 LDX #2
3555 CKEXP
3560 LDA EXPCTR,X ;ENM EXPLODING?
3565 BEQ NXEXP
3570 DEC EXPCTR,X ;DEC EXPL CTR
3575 BEQ STPEXP ;IF DONE EXP,STOP
3580 LDA #$20 ;ELSE,KEEP EXPL
3585 STA $D202 ; SOUND ON
3590 LDA #$0F
3595 STA $D203
3600 NXEXP DEX
3605 BPL CKEXP ;DONE ALL ENM'S?
3610 LDA #1 ;RESET CTDN TMR
3615 STA $21A
3620 RTS
3625 STPEXP
3630 TXA
3635 PHA
3640 CLC ;GET WHICH PLR
3645 ADC #$44 ; BAND TO USE
3650 STA EREXAD
3655 LDA EY,X
3660 TAY
3665 LDA #0
3670 STA $D202 ;STOP EXPL SOUND
3675 STA $D203
3680 TAX
3685 EREX
3690 EREXAD=*+2
3695 STA $FF00,Y ;ERASE EXPL
3700 INX
3705 INY
3710 CPX #12 ;DONE ERASING?
3715 BCC EREX
3720 PLA
3725 TAX
3730 LDA $D20A ;RND XPOS
3735 AND #$7F
3740 CLC
3745 ADC #60
3750 STA EX,X
3755 LDA $D20A ;RND YPOS
3760 AND #$7F
3765 CLC
3770 ADC #46
3775 STA EY,X
3780 LDA #$FF ;ENEMY=ADVANCING
3785 STA NV,X
3790 LDA #0
3795 STA 53278 ;NO COLL W/EXPL.
3800 LDA #5 ;ENEMY=STARTS
3805 STA ESC,X ; OUT SMALL
3810 LDA #7
3815 STA ET,X ;ENM TMR=7
3820 STA EP,X ;ENM TMR PSE=7
3825 LDA R,X
3830 BEQ NOU ;CAN WE UNLOK?
3835 LDA #0
3840 STA ELOCK,X ;UNLOK
3845 NOU JMP NXEXP ;NXT EXPL.
3850 DVBI
3855 INC S1 ;STAR1 CTR=..+1
3860 INC S2 ; 2
3865 INC S3 ; 3
3870 INC S4 ; 4
3875 INC S5 ; 5
3880 INC S6 ; 6
3885 INC S7 ; 7
3890 INC S8 ; 8
3895 LDX #0
3900 PAUSE
3905 LDA S1,X ;NEED TO RESET
3910 CMP PS,X ; THIS CTR?
3915 BCC SKIP
3920 LDA #0 ;RESET CTR
3925 STA S1,X
3930 JSR DECS ;AND MOV THE STRS
3935 CPX #1
3940 BCS SKIP
3945 JSR DECS
3950 SKIP
3955 INX ;NEXT LEVEL
3960 CPX #8 ;DONE ALL 8 LVLS?
3965 BCC PAUSE
3970 JMP $E462 ;RET TO SYSTEM
3975 DECS
3980 *=*+72 ;DEC STRS IN LYR
3985 RTS ; (CREATED RTNE)
3990 DLI
3995 PHA ;SAVE REGS
4000 TXA
4005 PHA
4010 TYA
4015 PHA
4020 DLII
4025 *=*+2880 ;SET STR HPOS,LUM
4030 PLA ;RESTORE REGS
4035 TAY
4040 PLA
4045 TAX
4050 PLA
4055 RTI
4060 IVBI
4065 LDA JLOCK ;LOCKED JOYSTIK?
4070 BEQ JMOVE
4075 JMP ERTN
4080 JMOVE
4085 LDX #1
4090 CHECKJOY
4095 LDA #15 ;GET 15-STICK(0)
4100 SEC
4105 SBC 632
4110 BIT ONE ;UP?
4115 BEQ NOTONE
4120 LDY Y
4125 CPY #32 ;IS Y AT TOP?
4130 BCC NOTONE
4135 DEC Y ;DEC Y TWICE
4140 DEC Y
4145 STX EFLAG ;FLAG-REDRAW
4150 NOTONE
4155 BIT TWO ;DOWN?
4160 BEQ NOTTWO
4165 LDY Y
4170 CPY #182 ;IS Y AT BOT?
4175 BCS NOTTWO
4180 INC Y ;INC Y TWICE
4185 INC Y
4190 STX EFLAG ;FLAG-REDRAW
4195 NOTTWO
4200 BIT FOUR ;LEFT?
4205 BEQ NOTFOUR
4210 LDY X
4215 CPY #50 ;IS X LEFTMOST?
4220 BCC NOTFOUR
4225 DEC X ;DEC X TWICE
4230 DEC X
4235 NOTFOUR
4240 BIT EIGHT ;RIGHT?
4245 BEQ NOTEIGHT
4250 LDY X
4255 CPY #201 ;IS X RTMOST?
4260 BCS NOTEIGHT
4265 INC X ;INC X TWICE
4270 INC X
4275 NOTEIGHT
4280 LDX X ;UPDATE XPOS
4285 STX $D004
4290 INX
4295 INX
4300 STX $D005
4305 INX
4310 INX
4315 STX $D006 ;STORE IN HPOSM2
4320 LDA EFLAG ;NEED TO REDRAW?
4325 BEQ ERTN ;N:MOVE ENEMIES
4330 LDA #0 ;Y:REDRAW CROSS-
4335 STA EFLAG ; HAIR
4340 TAX
4345 LDY Y
4350 PUTLOOP
4355 LDA $4300,Y ;GET OLD MBYTE
4360 AND #$C0 ;SAVE ONLY M3
4365 ORA PSHAP,X ;FORCE IN C-HAIR
4370 STA $4300,Y ;STORE FINAL BYT
4375 INX
4380 INY
4385 CPX #12 ;DONE ALL 12?
4390 BCC PUTLOOP
4395 ERTN
4400 LDA #0
4405 STA EC
4410 STA $C0 ;($C0)=PTR TO PLR
4415 LDA #$44 ; BAND CURRENTLY
4420 STA $C1 ; IN USE
4425 LDX EC
4430 ELOOP
4435 LDA ELOCK,X ;ENEMY LOCKED?
4440 BEQ CKTM
4445 JMP NEXENM
4450 CKTM DEC ET,X ;DEC ENM'S TIMER
4455 BEQ DOTHISENM ;IF ZERO,MOVE HIM
4460 JMP NEXENM ;ELSE DO NEXT ENM
4465 DOTHISENM
4470 LDA EP,X ;RESET THIS ENM'S
4475 STA ET,X ; TIMER
4480 LDA NV,X ;GET #VECTRS MOVD
4485 BEQ DSAPPR ;ZERO=DSAPPR
4490 BMI APPEAR ;NEG#=APPEAR
4495 JMP CONTERTN ;POS#=MOVING
4500 DSAPPR
4505 STA CTR
4510 LDA ESC,X
4515 CMP #5
4520 BCS SETAPR ;DONE DISAPPRING?
4525 ASL A
4530 CLC
4535 ADC ESC,X
4540 ASL A
4545 ASL A
4550 LDY EY,X ;Y=PTR TO ENM PLR
4555 TAX ;X=PTR 2 ESHP TBL
4560 RECLP
4565 LDA ESHAP,X ;GET SHAPE BYTE
4570 STA ($C0),Y ;STORE IT IN P0
4575 INX
4580 INY
4585 INC CTR
4590 LDA CTR
4595 CMP #12
4600 BCC RECLP
4605 LDX EC
4610 INC ESC,X ;NEXT FRAME
4615 JMP NEXENM ;NXT ENM
4620 SETAPR
4625 LDA #$FF ;#VECT CTR=NEG #:
4630 STA NV,X ; ENM WILL APPEAR
4635 LDA EY,X
4640 CLC
4645 ADC #5
4650 STA EY,X
4655 TAY
4660 LDA #0 ;ERASE ENEMY
4665 STA ($C0),Y
4670 LDA $D20A ;RND ENM XPOS
4675 AND #$7F
4680 CLC
4685 ADC #60
4690 STA EX,X
4695 LDA $D20A ;RND ENM YPOS
4700 AND #$7F
4705 CLC
4710 ADC #46
4715 STA EY,X
4720 JMP NEXENM ;NXT ENM
4725 APPEAR
4730 DEC ESC,X
4735 BMI DNAPPR ;DONE APPEARING?
4740 LDA ESC,X
4745 ASL A
4750 CLC
4755 ADC ESC,X
4760 ASL A
4765 ASL A
4770 LDY EY,X ;Y=PTR TO ENM PLR
4775 TAX ;X=PTR TO SHP TBL
4780 LDA #0
4785 STA CTR
4790 APLP
4795 LDA ESHAP,X ;GET ENM SHP BYT
4800 STA ($C0),Y ;PUT IT IN PLR
4805 INX
4810 INY
4815 INC CTR
4820 LDA CTR ;DONE 12 BYTES?
4825 CMP #12
4830 BCC APLP
4835 LDX EC
4840 LDA EX,X ;GET ENM'S XPOS
4845 STA $D000,X ;STORE IN HPOS
4850 JMP NEXENM ;NXT ENM
4855 DNAPPR
4860 LDA $D20A ;RND MAX # VECTRS
4865 AND #$07
4870 CLC
4875 ADC #4
4880 STA MNV,X
4885 ERP=*+1
4890 LDA #1
4895 STA ET,X ;ENM TMR=1
4900 STA EP,X ;ENM TMR PSE=1
4905 LDA #1
4910 STA NV,X ;#VETCS MOVED=1
4915 JMP NEXENM ;NXT ENM
4920 CONTERTN
4925 LDA EX,X ;ENM'S X=..+DX
4930 CLC
4935 ADC EDX,X
4940 STA EX,X
4945 CMP #48 ;OFF LEFT EDGE?
4950 BCC CEDIR
4955 CMP #201 ;OFF RIGHT EDG?
4960 BCS CEDIR
4965 LDA EY,X ;ENM Y=..+DY
4970 CLC
4975 ADC EDY,X
4980 STA EY,X
4985 CMP #186 ;OFF BOT EDGE?
4990 BCS CEDIR
4995 CMP #33 ;OFF TOP EDGE?
5000 BCC CEDIR
5005 INC ECTR,X ;N:INC CTR 4 ENM
5010 LDA ECTR,X ;HAS IT MOVED
5015 CMP ELIM,X ; THE LIMIT?
5020 BCS CEDIR
5025 PUTENM
5030 LDY EY,X ;Y=PTR TO ENM PLR
5035 LDX #0 ;X=PTR TO SHP TBL
5040 PUTELP
5045 LDA ESHAP,X ;GET ENM SHAPBYT
5050 STA ($C0),Y ;STORE IN ENM PLR
5055 INY
5060 INX
5065 CPX #12 ;DONE ALL 12?
5070 BCC PUTELP
5075 LDX EC
5080 LDA EX,X ;GET ENM XPOS
5085 STA $D000,X ;STORE IN HPOS
5090 NEXENM INC $C1 ;NXT PLR BAND
5095 INC EC ;NXT ENM CTR
5100 LDX EC ;DONE W/ALL 3
5105 CPX #3 ; ENMS?
5110 BCS RETIMM
5115 JMP ELOOP ;CONT W/NXT ENM
5120 RETIMM
5125 JMP $E45F ;BACK TO SYSTEM
5130 CEDIR
5135 LDA EY,X ;RESTORE ENM YPOS
5140 SEC
5145 SBC EDY,X
5150 STA EY,X
5155 LDA EX,X ;RESTORE ENM XPOS
5160 SEC
5165 SBC EDX,X
5170 STA EX,X
5175 INC NV,X ;#VECTS MVED=..+1
5180 LDA NV,X ;LIMIT YET?
5185 CMP MNV,X
5190 BCC CNTCEDIR
5195 LDA #0 ;NV=0:FLAG-ENM
5200 STA NV,X ; WILL RECEDE
5205 STA ESC,X ;RSET ENM SHP CTR
5210 LDA #7
5215 STA ET,X ;ENM TMR=7
5220 STA EP,X ;ENM TMR PSE=7
5225 JMP NEXENM ;UPDATE NXT ENM
5230 CNTCEDIR
5235 LDA #0 ;RESET MVEMNT CTR
5240 STA ECTR,X
5245 LDA 53770 ;SET A NEW
5250 AND #$3F ; MOVEMENT LIMIT
5255 STA ELIM,X
5260 LDA EX,X
5265 BPL POSEDX ;IF X=LF,DX=RT
5270 BMI NEGEDX ;IF X=RT,DX=LF
5275 NEWEDY LDA EY,X
5280 BPL POSEDY ;IF Y=UP,DY=DN
5285 BMI NEGEDY ;IF Y=DN,DY=UP
5290 JMP PUTENM ;DRAW SHAPE
5295 POSEDX
5300 JSR GETPOS ;GET RND ENM +DX
5305 STA EDX,X
5310 JMP NEWEDY
5315 NEGEDX
5320 JSR GETNEG ;GET RND ENM -DX
5325 STA EDX,X
5330 JMP NEWEDY
5335 POSEDY
5340 JSR GETPOS ;GET RND ENM +DY
5345 STA EDY,X
5350 JMP PUTENM
5355 NEGEDY
5360 JSR GETNEG ;GET RND ENM -DY
5365 STA EDY,X
5370 JMP PUTENM
5375 GETPOS
5380 LDA 53770 ;GET RND 1-3
5385 AND #$03
5390 BEQ GETPOS
5395 RTS
5400 GETNEG
5405 LDA 53770 ;GET RND -1 TO -3
5410 AND #$03
5415 BEQ GETNEG
5420 EOR #$FF
5425 CLC
5430 ADC #1
5435 RTS
5440 ONE
5445 .BYTE 1 ;FOR 'BIT' INSTR.
5450 TWO
5455 .BYTE 2 ; SAME
5460 FOUR
5465 .BYTE 4 ; SAME
5470 EIGHT
5475 .BYTE 8 ; SAME
5480 Y
5485 .BYTE 0 ;CROSSHAIR Y
5490 X
5495 .BYTE 0 ;CROSSHAIR X
5500 EFLAG
5505 .BYTE 0 ;C-HAIR REDRAW FLAG
5510 PSHAP
5515 .BYTE $00,$00,$0C,$0C,$0C,$3F,$3F,$0C,$0C,$0C,$00,$00 ;CRSSHAIR SHAPE
5520 C
5525 .BYTE 14,12,10,8,8,6,4,2 ;STARS' COLOR (LUMINANCE) TABLE
5530 S1
5535 .BYTE 0 ;CTR FOR STAR LAYER 1
5540 S2
5545 .BYTE 0 ; 2
5550 S3
5555 .BYTE 0 ; 3
5560 S4
5565 .BYTE 0 ; 4
5570 S5
5575 .BYTE 0 ; 5
5580 S6
5585 .BYTE 0 ; 6
5590 S7
5595 .BYTE 0 ; 7
5600 S8
5605 .BYTE 0 ; 8
5610 PS
5615 .BYTE 1,1,2,3,4,6,9,14 ;STR SPD
5620 CTR
5625 .BYTE 0 ;MISC COUNTER
5630 DLIP
5635 .BYTE $AD ;"LDA ABSOLUTE"
5640 PHPOS
5645 .WORD HPOS ; ADR FOR LDA
5650 .BYTE $AC ;"LDY ABSOLUTE"
5655 PLT
5660 .WORD LT ;ADR FOR LDY
5665 .BYTE $8D,$0A,$D4 ;STA WSYNC
5670 .BYTE $8D,$07,$D0 ;STA HPOSM3
5675 .BYTE $8C,$15,$D0 ;STY COLRM3
5680 EX
5685 .BYTE 0,0,0 ;ENEMY XPOS TABLE
5690 EY
5695 .BYTE 0,0,0 ;ENEMY YPOS TABLE
5700 ESHAP
5705 .BYTE 0,0,0,0,146,186,254,198,0,0,0,0
5710 .BYTE 0,0,0,0,146,254,198,0,0,0,0,0
5715 .BYTE 0,0,0,0,84,124,68,0,0,0,0,0
5720 .BYTE 0,0,0,0,0,56,0,0,0,0,0,0
5725 .BYTE 0,0,0,0,0,16,0,0,0,0,0,0
5730 EDX
5735 .BYTE 0,0,0 ;ENEMY DX TABLE
5740 EDY
5745 .BYTE 0,0,0 ;ENEMY DY TABLE
5750 ECTR
5755 .BYTE 0,0,0 ;# STEPS TRAVELED
5760 ELIM
5765 .BYTE 0,0,0 ;MAX # STEPS TO XVL
5770 NV
5775 .BYTE 0,0,0 ;#VECTORS TRAVELED
5780 MNV
5785 .BYTE 0,0,0 ;MAX VECTS TO XVEL
5790 ESC
5795 .BYTE 0,0,0 ;ENM SHAPE CTR
5800 EP
5805 .BYTE 0,0,0 ;ENM TIMER PAUSES
5810 ET
5815 .BYTE 0,0,0 ;ENM TIMERS
5820 EC
5825 .BYTE 0 ;CTR FOR ENM MVEMNT
5830 JLOCK
5835 .BYTE 0
5840 ELOCK
5845 .BYTE 0,0,0 ;ENM 'LOCK' STATUS
5850 EL
5855 .BYTE 0 ;ENEMY FIRING LASER
5860 LX
5865 .BYTE 0 ;LASER TERMINAL X
5870 LY
5875 .BYTE 0 ;LASER TERMINAL Y
5880 EXPSHP
5885 .BYTE 20,64,10,160,4,17,132,33,4,80,2,40 ;EXPLOS SHAPE
5890 EXPCTR
5895 .BYTE 0,0,0 ;EXPLOSION COUNTER
5900 OKF
5905 .BYTE 0 ;ENM OK2FIRE CTR
5910 ELVT
5915 .BYTE 64,128,192 ;ENM LVL TBL
5920 ERPT
5925 .BYTE 3,2,1 ;ENM RTN PAUSE TBL
5930 LN
5935 .BYTE 0 ;LEVEL #
5940 SP
5945 .BYTE 0 ;ENEMY SPEED
5950 SMSG
5955 .BYTE " 牋牋晌至由衔牋牋 OPTION-Level:1 "
5960 .BYTE " 牋牋崓崓崓崓牋牋 SELECT-Speed:1 "
5965 .BYTE " 犫犖矧磲顮涕顮 START -Play Game "
5970 .BYTE " 牋牋ㄣ惫父牋牋 SPACE -Pause "
5975 GMSG
5980 .BYTE " 牋牋晌至由衔牋牋 Shield Energy:70 "
5985 .BYTE " 牋牋崓崓崓崓牋牋 Enemies Left :99 "
5990 LNGM=*+37
5995 .BYTE " 犫犖矧磲顮涕顮 Level Number : 1 "
6000 SPGM=*+37
6005 .BYTE " 牋牋ㄣ惫父牋牋 Enemy Speed : 1 "
6010 WMSG
6015 .BYTE " 牋牋晌至由衔牋牋 窍夏犑下≠险犠晌 "
6020 .BYTE " 牋牋崓崓崓崓牋牋 拘遗佑犛粤以辑 "
6025 LMSG
6030 .BYTE " 牋牋晌至由衔牋牋YOU LOSE-PUSH START "
6035 SHIELD .BYTE 0 ;SHIELD ENERGY
6040 REM .BYTE 0 ;#ENM LEFT
6045 R .BYTE 0,0,0 ;ENM UNLOCK FLAG
6050 GRAPHICS
6055 PHA ;SAVE ORIG. #
6060 LDX #$60 ;IOCB 6(SCREEN)
6065 LDA #12 ;CLOSE #6
6070 STA $342,X ;(JUST TO BE
6075 JSR $E456 ; SAFE!)
6080 LDA #3 ;OPEN #6
6085 STA $342,X ;COMMAND #
6090 LDA #SCRDEV&255 ;ADDR OF "S:"
6095 STA $344,X ;LO BYTE
6100 LDA #SCRDEV/256 ;AND NOW THE
6105 STA $345,X ; HI BYTE
6110 LDA #1 ;LENGTH OF SCRN
6115 STA $348,X ; I.D. IS ONLY
6120 LDA #0 ; ONE CHARACTER
6125 STA $349,X ; (THE 'S')
6130 PLA ;GET IT BACK
6135 PHA ;BUT STILL SAVE
6140 EOR #16 ;REVERSE BIT 5
6145 AND #16 ;KEEP ONLY BIT 5
6150 CLC ;ADD 12 TO IT
6155 ADC #12
6160 STA $34A,X ;=ICAX1 SPEC
6165 PLA ;ORIG. MODE #=
6170 STA $34B,X ; ICAX2 SPEC
6175 JMP $E456 ;AND JMP TO CIO!
6180 COLOR
6185 STA COLNUM ;STORE IT FOR
6190 RTS ; LATER USE
6195 POSITION
6200 STY 84 ;VERT POS
6205 STX 85 ;HOR POS LO BYTE
6210 STA 86 ;HOR POS HI BYTE
6215 RTS ;BYE!
6220 PLOT
6225 JSR POSITION ;POSITION CURSOR
6230 LDX #$60 ;SCREEN (IOCB6)
6235 LDA #11 ;PUT CHARS COMD
6240 STA $342,X ;STORE IN ICCOM
6245 LDA #$00 ;BUFLEN OF ZERO
6250 STA $348,X ; MEANS GET/PUT
6255 STA $349,X ; DATA TO/FROM
6260 ; THE ACCUM.
6265 LDA COLNUM ;PUT COLOR # IN
6270 ; ACCU B/C LEN=0
6275 JMP $E456 ;JMP TO CIO
6280 DRAWTO
6285 JSR POSITION ;POSITION CURSR
6290 LDX #$60 ;SCRN (IOCB6)
6295 LDA #17 ;DRAW LINE CMD
6300 STA $342,X ;STORE IN ICCOM
6305 LDA #0 ;ZERO BUF LEN
6310 STA $348,X ; B/C NO DATA
6315 STA $349,X ; IS XFERRED!
6320 LDA COLNUM ;STORE COL # IN
6325 STA $02FB ; 2FB FOR CIO
6330 JMP $E456 ;AND GO TO CIO
6335 SCRDEV
6340 .BYTE "S" ;SCREEN I.D.
6345 COLNUM
6350 BRK ;COLOR# STORAGE
6355 HPOS
6360 *=*+192 ;TBL STR POS
6365 LT
6370 *=*+192 ;TBL STR LUM
6375 *=$02E0
6380 .WORD BP ;DOS RUN ADR
Back to previous page