robotron/RRG23.ASM

1573 lines
24 KiB
NASM
Executable File

STTL ROBOT GAME
OPT NOL
LIB RRF
OPT LIS
ORG RGORG
JMP PLAYRV
JMP RNDXYV
JMP CKOBSV
JMP MANDSV
JMP START1
JMP START2
JMP TDISP
FDB MANLP1
FDB LLPIC
*
*SOUNDS
*
PDSND FCB $EE,$02,$08,$11,$01,$20,$17,0 PLAYER DEATH
ST1SND FCB $F0,$01,$10,$28,0 START 1
ST2SND FCB $F0,$01,$10,$25,0 START 2
WVSND FCB $E0,$1D,$04,$0E,0 WAVE END
LASSND FCB $D0,$01,$08,1,0 LASER SOUND
*
*GAME START
*
START2 LDA #2
BRA SST0
STRTX JMP SUCIDE
START1 LDA #1
SST0 LDY #HCK2+1345
TST STATUS
BPL STRTX
LDB COINSL+1 CHECK FREEBY
ANDB #$F
CMPB #9
BNE SST00 NO FREE PLAY
STA CREDIT
SST00 CMPA CREDIT
BHI STRTX INSUFFICIENT FUNDS
STA PLRCNT MAKE APPROPRIATE SOUND
CLR BUNITS
CLR CUNITS
LDB #8
JSR AUD GAMES PLAYED
LDU #$D015
NEGA
ADDA #$9A
ADDA CREDIT
DAA
STA CREDIT
LDX #CREDST
JSR WCMOSA
LDA PLRCNT
SUBA #2
LDD #ST1SND
BCS SST01
LDD #ST2SND
SST01 JSR SNDLD
CLRA
CKS11 ADDA ,U ADD NEXT BYTE
LEAU $8,U NEXT ONE
CMPU #$EAB1
BLO CKS11
STA -1345,Y STORE
LDA #$7F
STA STATUS
JSR SCRCLR
LDX #PLDATA
SST1 CLR ,X+
CMPX #PLDEND
BNE SST1
LDX #NSHIP GET # OF SHIPS
JSR RCMOSA
JSR NEWBCH IN BINARY PLEASE
STA ZP1LAS
LDA #1
STA CURPLR
LDA #1
STA ZP1WAV
STA PCFLG
LDX #REPLAY
JSR RCMOSA
CLRB
LSRA
RORB
LSRA
RORB
LSRA
RORB
LSRA
RORB
STD REPLA
STD ZP1RP+1
JSR GETWV
LDX #PLDATA
SSTRAN LDA ,X+
STA PLDLEN-1,X
CMPX #ZP1END
BNE SSTRAN
LDA PLRCNT
DECA
BNE PLSTRT
CLR ZP2LAS NO PLAYER 2
PLSTRT LDA #$7F
STA STATUS
JSR PLINDX
DEC PLAS,X
JSR SCRCLR
JSR GNCIDE
LDX [ACTIVE] REINIT PROC STRUCT IF NO COINS
BNE PLS0
JSR PINIT
MAKP PLS0
JMP EXECV
PLS0 JSR CRINIT
JSR EXINIT
JSR OINIT
JSR GTWCOL GET WALL COLOR
JSR P1SW
LDA PIA3 COCKTAIL??
BPL PLS000 NO
LDA CURPLR PLAYER 2?
DECA
BEQ PLS000 NO
JSR P2SW
PLS000 JSR TDISP
JSR COLST
CLR RIPFLG
LDA PCFLG
BNE PLS00C
JSR WVMESS
BRA PLS0A NO DEATH.. NO MESSIE POOH
PLS00C LDD ZP1SCR+1
BNE PLS0C NOT GAME START
LDA #$11
STA TEXCOL
LDA #113
JSR WRD5V COPYRIGHT MESSAGE
BRA PLS0D
PLS0C JSR WVMESS
PLS0D CLR PCFLG
LDA PLRCNT
DECA
BEQ PLS0A 1 PLAYER GAME
LDA PSTCOL
STA TEXCOL
LDB CURPLR
LDA #103
JSR WRD7V
NAP 115,PLS0B PLAYER UP MESSAGE
PLS0B CLR TEXCOL
LDB CURPLR
LDA #103
JSR WRD7V ERASE MESSAGE
PLS0A JSR PLRES
JSR PLINIT
CLR PCRAM+6
CLR CRAM+6
JSR HULKST
JSR BRNST
JSR TANKST
JSR HUMST
JSR PSINIT
JSR RINIT
JSR ROBOFF
LDA #8
STA PSTREF DOUBLE REFRESH RATE
MAKP PSTRPC REFRESH POSTS
JSR PSTON
JSR CRINIT
JSR CIRCST
JSR SQST
LDA #$19
STA STATUS
LDA BRNCNT BRAIN WAVE???
BEQ PLS00 NO
MAKP TRANST TRANSPORT EM
NAP 150,PLS1
PLS00 JMP APPEAR
PLS1 JSR PAPPR PLAYER APPEAR
JSR PSTON ON POSTS
NAP 06,PLS1A
PLS1A JSR PDAPPR DIAG PLAYER APPEAR
NAP 4,PLS2
PLS2 JSR ROBON
MAKP LSPROC
MAKP COLCHK
CLR STATUS
NAP 12,PLS3
PLS3 JSR ROBON TURN THEM ON
JSR PSTON
NAP 10,PLS4
PLS4 JSR ROBON
JSR PSTON
LDA #4
STA PSTREF STD REFRESH RATE
CLR TEXCOL OFF CPM
LDA #113
JSR WRD5V
JSR WVMESS ON WAVE #
LDX #$20FB COPIERS TAKE NOTE:
LDU #HIDTAB HIDDEN COPY RIGHT HERE
HIDLP LDA ,U+
EORA #$5A
BEQ HIDEND
JSR PR35V
BRA HIDLP
HIDEND JMP GEXEC
FCC ' (C) 1982 WILLIAMS ELECTRONICS INC. '
*
*MAKE YOUR ROBOTS APPEAR
*PD=CNT,PD2=PTR,PD4=REFPTR,PD6=REF LIM
*
APPEAR LDU CRPROC
CLR PD,U
LDX #RPTR
STX PD2,U
LDX RPTR
STX PD4,U
STX PD6,U
APL LDA #1
PSHS A 1/FRAME
APL1 LDX PD2,U GET INDEX
LDX ,X
BEQ AP3 ALL DONE
JSR APCENT GET CENTER
LDA PD,U
ANDA #3
CMPA #3
BNE AP1
JSR HAPST
BRA AP2
AP1 JSR APST
AP2 STX PD2,U
AP3 INC PD,U
LDA PD,U
CMPA #32
BLS AP4
LDY PD6,U EXPAND REFRESH LIST
BEQ APX1
LDY ,Y
BEQ APX1 DONE
STY PD6,U
AP4 DEC ,S
BNE APL1
PULS A
BSR APREF
NAP 1,APL
APX1 PULS A
NAP 2,APX2 LET EVERYONE FINISH
APX2 BSR ROBON TURN EVERYONE ON
NAP 10,PLS1
*
*REFRESH APEAREES
*
APREF PSHS X
LDA #4 4 PER FRAME
STA XTEMP
LDX PD4,U
APRL CMPX PD6,U
BNE APR1
LDX #RPTR
BRA APRX
APR1 JSR DMAON
APRX LDX ,X
DEC XTEMP
BNE APRL
STX PD4,U
PULS X,PC
*
*ON ROBOTS
*
ROBON LDX RPTR
BEQ ROBONX
ROBON1 JSR DMAON
LDX ,X
BNE ROBON1
ROBONX RTS
*
*ON POSTS
*
PSTON LDX PPTR
BEQ PSTONX
PSTON1 LDA PSTCOL
JSR OPON
STX [OBJID,X]
PSTONL LDX ,X
BNE PSTON1
PSTONX RTS
*
*OFF POSTS
*
PSTOFF LDX PPTR
BRA ROBOF0
*
*OFF ROBOTS
*
ROBOFF LDX RPTR
ROBOF0 BEQ ROBOFX
ROBOF1 LDD OBJX,X
LDY OPICT,X
JSR PCTOFF
LDX ,X
BNE ROBOF1
ROBOFX RTS
*
*APPEAR CENTER CALCULATE
*X=OBJ, STORES CENT-CENTMP
APCENT PSHS D,U
LDU OPICT,X X CENTER
LDB OBJW,U
LDA OBJX,X
ASLA
BCC APC1
LDA #$FF
APC1 MUL
ADDA OBJX,X
STA CENTMP
LDB OBJH,U
LDA OBJY,X
MUL
ADDA OBJY,X
STA CENTMP+1
PULS D,U,PC
*
*PLAYER DIAGONAL APPEAR
*
PDAPPR LDX #PLOBJ
LDY OPICT,X
LDA OBJH,Y
PSHS A
DPAPP1 LDA ,S
ADDA PX+1
DECA
STA CENTMP+1
CLRA
JSR DAPST
COMA
JSR DAPST
LDA ,S
SUBA #3
STA ,S
BPL DPAPP1
PULS A,PC
*
*SUPER PLAYER APPEAR
*
PAPPR LDX #PLOBJ
LDY OPICT,X
LDA OBJH,Y
PSHS A
PAPPR1 LDA ,S
ADDA PX+1
DECA
STA CENTMP+1
JSR APST VERTS
DEC ,S
BNE PAPPR1
LDA OBJW,Y
STA ,S
PAPPR2 LDA ,S
ADDA PX
DECA
STA CENTMP
JSR HAPST
DEC ,S
BNE PAPPR2
PULS A,PC
*
*GET WALL COLOR
*
GTWCOL JSR PLINDX
LDU #WCTAB
LDA PWAV,X
DECA
GTWL CMPA #9
BLS GTW1
SUBA #10
BRA GTWL
GTW1 LEAU A,U
LDA ,U
STA WALCOL
LDA 10,U
STA PSTCOL
LDB 20,U
LDX PSTP1
ABX
STX PSTANI POST IMAGE
LDA 30,U
STA LASCOL
RTS
*WAVE COLOR TABLES
WCTAB EQU *
FCB $22,$55,$11,$EE,$77,$33,$44,$88,$00,$CC
*POST COLOR TABLES
FCB $FF,$EE,$BB,$DD,$EE,$FF,$11,$BB,$DD,$AA
*POST IMAGES
FCB $00,$10,$20,$30,$40,$50,$70,$80,$00,$60
*LASER COLOR
FCB $99,$00,$99,$66,$99,$99,$99,$11,$AA,$99
*CHECK END OF WAVE
WVCHEK LDA ROBCNT
ADDA CIRCNT
ADDA ENFCNT
ADDA BRNCNT
ADDA TNKCNT
ADDA SQCNT
RTS
*
*GAME EXEC
*
GEXEC LDU CRPROC
LDA #18
STA PD,U
CLR SCRFLG
GEXEC0 BSR WVCHEK
BNE GEXEC1
JSR PLINDX
GEXX INC PWAV,X
BNE GEXX1
INC PWAV,X
GEXX1 INC PLAS,X
LDD #WVSND
JSR SNDLD
JSR GETWV
JSR GNCIDE
LDA #$7F
STA STATUS TURN EVERYTHING OFF
JSR SCRCLR
JSR RMST DO MARQUEE EFFECT
JMP PLSTRT
GEXEC1 LDA PIA2
CMPA #$58
BNE NORIPP
JSR RIPV
NORIPP DEC PD,U
BNE GEXECX
LDA #15
STA PD,U
LDA ROBCNT TOO MANY ROBOTS
CMPA #30
BHS GEXECX
LDD #$FFFE
TST SCRFLG
BNE GEXEC2
LDD #$FEFC BONE HIM FOR STALLING
GEXEC2 ADDA RMXSPD
CLR SCRFLG
CMPA #1
BGE GEXEC3
LDA #1
GEXEC3 STA RMXSPD
ADDB ROBSPD
CMPB RMXSPD
BGE GEXEC4
LDB RMXSPD
GEXEC4 STB ROBSPD
GEXECX LDA GAMTIM
INCA
CMPA #150 1/4 SEC. CTS
BLO GEXX2
LDB #6 HIT THE TIMER
JSR AUD1
CLRA
GEXX2 STA GAMTIM
NAP 15,GEXEC0
*
*PLAYER RESTORE
*
PLRES JSR PLINDX
LEAX PENEMY,X
LDU #ELIST
PLRES1 LDA ,X+
STA ,U+
CMPU #ELEND
BNE PLRES1
JSR PLINDX
LDA PWAV,X
CMPA #4
BHI PLRESX NO BOZO
LDB PLAS,X
STD XTEMP SAVE WAVE,SHIPS
TSTB
BEQ BOZO LAST SHIP
CMPA #2
BHI PLRESX NOT WAVE 1,2
LDX #NSHIP
JSR RCMOSA
JSR NEWBCH
DECA
CMPA XTEMP+1
BLS PLRESX NOT DOWN SHIPS
BOZO LDA XTEMP
LDX #BOZOTB-4
ASLA
ASLA
LEAX A,X
LDD ,X++
STA CDPTIM
STB ENSTIM
LDD ,X
STA ROBSPD
STB RMXSPD
PLRESX RTS
*
*BOZO TABLE: FOR ALL YOU BOZOS OUT THERE
*
BOZOTB EQU *
FCB 38,96,30,15 WAVE 1
FCB 38,96,25,12 2
FCB 36,48,20,10 3
FCB 30,30,15,7 4
*
*SAVE PLAYER STATE
*
PLSAV JSR PLINDX
LEAX PENEMY,X
LDU #ELIST
PLSAV1 LDA ,U+
STA ,X+
CMPU #ELEND
BNE PLSAV1
RTS
*
*GET NEXT WAVE
*
GETWV LDX #GA1 GET DIFFICULTY
JSR RCMOSB
JSR BCDBIN
JSR PLINDX
CMPB #5 EASY SET UP??
BHS GTWV0X NO
LDA PWAV,X
CMPA #14 WAVE 14 OR GREATER
BLO GTWV01 NO
LDB #5
GTWV01 CMPA #5 WAVE 5 OR GT?
BLO GTWV0X NO
LDA PLAS,X 4 OR MORE LASERS LEFT?
CMPA #3
BLO GTWV0X NO
LDB #5 YES SCREW HIM
GTWV0X SUBB #5
STB XTEMP+1 SAVE SIGN
BPL GETWV0
NEGB
GETWV0 STB XTEMP MAGNITUDE
LDB PWAV,X
LDU #WVTAB+2
LEAX PENEMY,X
GETWV1 CMPB #40
BLS GETWV2
SUBB #20
BRA GETWV1
GETWV2 EQU *
CMPU #WVCNT
BLO GETWV3
LEAU -3,U NO MAX/MINS
LDA B,U
BRA GETWV9
GETWV3 LDA B,U
PSHS D
LDB -2,U GET FRACTION
ANDB #$1F
LDA XTEMP
MUL MULTIPLY BY MAGNITUDE
PULS A
MUL
ADCA #0 ROUND
LDB XTEMP+1
EORB -2,U PLUS OR MINUS ????
PULS B
BPL GETWV4
NEGA
BEQ GETWV4 ZERO CASE
ADDA B,U
BCS GETWV5 O.K.
BRA GETWV6 UNDERFLOW GET MIN
GETWV4 ADDA B,U
BCS GETWV8 OVERFLOW GET MAX
GETWV5 CMPA -1,U CHECK MIN
BHS GETWV7
GETWV6 LDA -1,U
GETWV7 CMPA ,U
BLS GETWV9
GETWV8 LDA ,U
GETWV9 STA ,X+
LEAU 43,U
CMPU #WVTEND-1
BLO GETWV2
CLR ,X+ GET TANK COUNT
RTS
HIDTAB FCB $01,$19,$06,$7A,$6B,$63,$62,$68,$7A,$0D,$13,$16,$16,$13,$1B
FCB $17,$09,$7A,$1F,$16,$1F,$19,$67,$7A,$13,$14,$19,$67,$5A
WVTAB EQU *
FCB $8E,10,20 SIGN/DELTA,MIN,MAX
FCB 20,15,15,15,15,15,15,15,15,15,14,14,14,14,14,13,13,13,13,13 ROBSPD
FCB 14,14,14,14,14,14,13,13,13,13,13,13,12,12,12,12,12,12,15,12
FCB $8E,03,10
FCB 09,07,06,05,05,05,05,04,04,04,04,04,04,04,04,04,04,04,04,04 RMXSPD
FCB 04,04,04,04,04,04,03,03,04,03,03,03,03,03,03,03,03,03,04,03
FCB $0E,$08,12
FCB 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ENFNUM
FCB 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11
FCB $8E,13,40
FCB 30,28,26,24,22,20,18,18,16,14,14,14,14,14,14,14,14,14,14,14 ENSTIM
FCB 15,15,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14,14,14,14
FCB $8E,12,40
FCB 30,28,26,24,30,20,18,16,18,25,12,12,12,25,25,12,12,12,18,20 CDPTIM
FCB 14,14,14,14,14,25,14,14,18,25,12,12,12,12,25,12,12,12,18,20
FCB $8E,05,09
FCB 08,08,07,07,07,07,07,06,06,06,06,05,05,05,05,05,05,05,05,05 HLKSPD
FCB 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05
FCB $8E,25,80
FCB 64,64,64,64,64,40,40,38,38,38,38,38,38,38,38,38,36,36,36,36 BSHTIM
FCB 32,32,32,32,32,32,32,30,30,30,30,30,25,25,25,25,25,25,25,25
FCB $8E,6,10
FCB 08,08,08,08,08,07,07,07,07,07,07,07,07,07,07,06,06,06,06,06 BRNSPD
FCB 06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06
FCB $8E,20,40
FCB 32,32,32,32,32,32,32,30,30,30,30,30,30,28,28,28,28,28,28,28 THKSHT
FCB 30,30,30,30,30,30,28,28,28,28,28,26,26,26,26,26,24,24,24,24
FCB $0E,$A0,$FF
FDB $B0B0,$B0B0,$B0B0,$B0B0,$B0B0,$B0B0,$B0B0,$B0B0,$B0B0,$B0B0 SHLSPD
FDB $B8B8,$B8B8,$B8B8,$B8B8,$B8B8,$C0C0,$C0C0,$C0C0,$C0C0,$C0C0
FCB $8E,$0C,$30
FDB $1010,$1010,$1010,$1010,$1010,$1010,$1010,$0F0F,$0F0F,$0F0F TDPTIM
FDB $0E0E,$0E0E,$0E0E,$0E0E,$0E0E,$0E0E,$0E0E,$0E0E,$0E0E,$0E0E
FCB $0E,$28,$44
FDB $3232,$3232,$3232,$3232,$3232,$3232,$3838,$3838,$3838,$3838 SQSPD
FDB $3838,$3838,$3838,$3838,$3C3C,$3C3C,$3C3C,$3C3C,$3C3C,$3C3C
WVCNT EQU *
FCB 15,17,22,34,20,32,00,35,60,25,35,00,35,27,25,35,00,35,70,25 ROBCNT
FCB 35,00,35,00,25,35,00,35,75,25,35,00,35,30,27,35,00,35,80,30
FCB 05,15,25,25,20,25,00,25,00,20,25,00,25,05,20,25,00,25,00,20 PSTCNT
FCB 25,00,25,00,20,25,00,25,00,20,25,00,25,00,15,25,00,25,00,15
FCB 01,01,02,02,15,03,04,03,03,00,03,03,03,05,00,03,03,03,03,08 MOMCNT
FCB 03,03,03,03,25,03,03,03,03,00,03,03,03,03,00,03,03,03,03,10
FCB 01,01,02,02,00,03,04,03,03,22,03,03,03,05,00,03,03,03,03,08 DADCNT
FCB 03,03,03,03,00,03,03,03,03,25,03,03,03,03,00,03,03,03,03,10
FCB 00,01,02,02,01,03,04,03,03,00,03,03,03,05,22,03,03,03,03,08 KIDCNT
FCB 03,03,03,03,01,03,03,03,03,00,03,03,03,03,25,03,03,03,03,10
FCB 00,05,06,07,00,07,12,08,04,00,08,13,08,20,02,03,14,08,03,02 HLKCNT
FCB 08,15,08,13,01,08,16,08,04,01,08,16,08,25,02,08,16,08,06,02
FCB 00,00,00,00,15,00,00,00,00,20,00,00,00,00,20,00,00,00,00,20 BRNCNT
FCB 00,00,00,00,21,00,00,00,00,22,00,00,00,00,23,00,00,00,00,25
FCB 00,01,03,04,01,04,00,05,05,01,05,00,05,02,01,05,00,05,05,02 CIRCNT
FCB 05,00,05,06,01,05,00,05,05,01,05,00,05,02,01,05,00,05,05,01
FCB 00,00,00,00,00,00,10,00,00,00,00,12,00,00,00,00,12,00,00,00 SQCNT
FCB 00,12,00,07,00,00,12,01,01,01,01,13,01,02,02,02,14,02,01,01
WVTEND EQU *
*
*PLAYER INITIALIZE
*
PLINIT LDX #PLOBJ
LDD #MANDP1
STD OPICT,X
STD OLDPIC,X
CLR PLAIMC ANI COUNT+NUM
CLR PLAIMN
LDD #PISD
STD PLAIMB ANI BASE
LDD #PCOORD
STD OBJX,X
STA OX16,X
CLR OX16+1,X
STB OY16,X
CLR OY16+1,X
CLR LCNT
CLR PCFLG
CLR SAVCNT MAN SAVED COUNTER
CLR BCMCNT
CLR SPKCNT
CLR BRNFLG
CLR ENFCNT
LDA #2
STA TNKSPD
CLR SHLCNT
RTS
*
*PLAYER MOTION+OUTPUT
*
PLAYRV LDA STATUS
BITA #$01
BEQ PL00
RTS
PL00 TSTA
BPL PL01
LDA ATRSW2 FONY SWITCH
BRA PL02
PL01 LDA PIA2
PL02 LDX #PLOBJ
LDU #PITAB
ANDA #$F
ASLA
ASLA
LEAU A,U
LDD ,U GET YOUR TABLE ENTRY FOR SWITCH POSITION
ADDB PY16
CMPB #YMIN
BLO PL1
CMPB #YMAX-11
BHI PL1
STB PY16
PL1 CLRB
ASRA
RORB
ADDD PX16
CMPA #XMIN
BLO PL2
CMPA #XMAX-3
BHI PL2
STD PX16
PL2 LDD 2,U
BEQ PLXX NO IMAGE CHANGE
CMPD PLAIMB BASE CHANGE?
BEQ PL3
STD PLAIMB
CLR PLAIMN
CLR PLAIMC
PL3 LDB PLAIMC COUNT READY?
BNE PL10
LDU PLAIMB
LDA PLAIMN
LDB A,U
BNE PL4
CLR PLAIMN END OF SEQUENCE
LDB ,U
PL4 INC PLAIMN
DECB
ASLB
ASLB
CLRA
ADDD #MANLP1
STD PPICT
PL10 LDA PLAIMC
INCA
CMPA #2
BLO PL11
CLRA
PL11 STA PLAIMC
PLXX RTS
*
*PLAYER IMAGE TABLE
*DX,DY,IMAGE SEQ
*B0=U,B1=D,B2=L,B3=R
PITAB FDB 0,0 0000
FDB $00FF,PISU 0001 U
FDB $0001,PISD 0010 D
FDB $0,0 0011
FDB $FF00,PISL 0100 L
FDB $FFFF,PISL 0101 U+L
FDB $FF01,PISL 0110 D+L
FDB 0,0 0111
FDB $0100,PISR 1000 R
FDB $01FF,PISR 1001 U+R
FDB $0101,PISR 1010 D+R
FDB 0,0 1011
FDB 0,0 1100
FDB 0,0 1101
FDB 0,0 1110
FDB 0,0 1111
*
*PLAYER ANIMATION TABLE
*
PISL FCB 1,2,1,3,0
PISR FCB 4,5,4,6,0
PISD FCB 7,8,7,9,0
PISU FCB 10,11,10,12,0
*
*CHECK FOR OBSTACLE
*CARDBOARD BOX
*D= SCREEN ADDR X,Y
*X=OBJ,U=LIST TO CHECK AGAINST
*RET NE IF BLOCKED, EQ OTHERWISE
CKOBSV PSHS U,D
PSHS D
ADDD [OPICT,X]
PSHS D
BRA CKOBLP
CKOB1 LDD OBJX,U
CMPA ,S
BHS CKOBLP
CMPB 1,S
BHS CKOBLP
ADDD [OPICT,U]
CMPA 2,S
BLS CKOBLP
CMPB 3,S
BLS CKOBLP
PSHS U IS IT ITSELF??
CMPX ,S++
BNE CKOBX NOPE
CKOBLP LDU ,U
BNE CKOB1
CKOBX LEAS 4,S CLEAN UP YOUR MESS
PULS U,D,PC
*
*CHECK PLAYER COLLISION
*
COLCHK LDA #1
STA PCFLG
LDD PX PLAYER
LDU POLDPC
LDX #RPTR ROBOTS
JSR COL0
BNE PLEND DIE
LDD PX
LDU POLDPC
LDX #PPTR POSTS (FATAL OBSTACLES)
JSR COL0
BNE PLEND
LDD PX
LDU POLDPC
LDX #OPTR MOTION OBJECTS
JSR COL0
BNE PLEND
LDD PX HUMANS
LDU POLDPC
LDX #HPTR
JSR COL0
CLR PCFLG
NAP 1,COLCHK
*
*PLAYER DEAD
*
PLEND LDD #PDSND
JSR SNDLD
LDA #$1B
STA STATUS
JSR GNCIDE
LDB #7
JSR AUD1 MEN PLAYED
JSR COLST START YOUR COLORS
JSR PDEATH GO FOR IT...
JSR PLINDX
LDA ZP1LAS
ORA ZP2LAS
BNE PLEND1
LDA #$FF
STA STATUS
LDD #$1C0A GAME OVER MESSAGE
LDX #$3C7E
JSR BLKCLR
LDA #40
LDB #$AA
STB TEXCOL
JSR WRD7V
NAP 120,ENDPRC
PLEND1 JSR PLINDX
LDA RMXSPD-ELIST+PENEMY,X RESTORE MAX SPEED
STA RMXSPD
CMPA ROBSPD
BLS PLEND2
STA ROBSPD
PLEND2 CLRA
LDB ENFCNT CONVERT LEFTOVER ENFORCERS INTO CIRCLES
BEQ PLE2C
PLE0A SUBB #4
BMI PLE1A
INCA
BRA PLE0A
PLE1A TSTA
BNE PLE2A
TST CIRCNT
BNE PLE2A
INCA
PLE2A ADDA CIRCNT
CMPA CIRCNT-ELIST+PENEMY,X NO MORE THAN YOU STARTED WITH
BLS PLE2B
LDA CIRCNT-ELIST+PENEMY,X
PLE2B STA CIRCNT
PLE2C JSR PLSAV
PLEND3 JSR PLINDX
LDB PLAS,X
BNE PLE1B
LDD #$1C20 PLAYER N GAME OVER MESSAGE
LDX #$3C77
JSR BLKCLR
LDA #75
LDB #$AA
STB TEXCOL
LDB CURPLR
JSR WRD7V
NAP $60,PLE1B
PLE1B LDA CURPLR
PLE1 EORA #3
JSR PLDX
LDB PLAS,X
BEQ PLE1
STA CURPLR
JMP PLSTRT
*
*RANDOM X,Y->D ON PLAYFIELD FOR OBJECT X
*
RNDXYV EQU *
LDD [OPICT,X]
PSHS D
LDA #XMAX-XMIN
SUBA ,S+
JSR RANDU
ADDA #XMIN-1
TFR A,B
LDA #YMAX-YMIN
SUBA ,S+
JSR RANDU
ADDA #YMIN-1
EXG A,B
RTS
*LASER START
LSPROC CLR PD,U PREV STATE
CLR PD1,U TIMECOUNT
LSPLP LDA STATUS
BPL LSP0
LDD ATRSW2
BRA LSP00
LSP0 LDA PIA2
LDB PIA3
LSP00 LSRB
RORA
LSRB
RORA
ANDA #$F0
LDB PD,U
STA PD,U
CMPB PD,U
BNE LSPX
INC PD1,U
LDB PD1,U
CMPB #2
BEQ LSP1
ANDB #$7
BNE LSPNAP
LSP1 LDB LCNT
CMPB #4
BHS LSPX1
TST FREE
BEQ LSPNAP NO MORE PROCS
LSRA
LSRA
PSHS A
LSRA
ADDA ,S+
LDY #LTAB
LEAY A,Y
CMPA #LTEND-LTAB
BHS LSPNAP DUD
LDX ,Y
BEQ LSPNAP DUD
CLRA
JSR MKPROC
TFR X,U
JSR GETOBJ
STX PD,U
LDD 4,Y
ADDD #LLPIC
STD OPICT,X
STD OLDPIC,X
LDD PX
ADDA 2,Y
STA OX16,X
ADDB 3,Y
STB OY16,X
INC LCNT
LDD #LASSND
JSR SNDLD
BRA LSPNAP
LSPX CLR PD1,U
BRA LSPNAP
LSPX1 DEC PD1,U
LSPNAP NAP 1,LSPLP
*LASER TABLE: ROUTINE,XY OFFSET,OBJECT
LTAB EQU *
FDB 0,0,0 0000 CASE
FDB ULASR,$02FF,4 0001
FDB DLASR,$0204,4 0010
FDB 0,0,0 0011
FDB LLASR,$0004,0 0100
FDB ULLASR,$0000,12 0101
FDB DLLASR,$0004,8 0110
FDB 0,0,0 0111
FDB RLASR,$0204,0 1000
FDB URLASR,$0200,8 1001
FDB DRLASR,$0204,12 1010
LTEND EQU *
*RT. LASER
RLASR LDX PD,U
LDA OX16,X
ADDA #3
CMPA #XMAX-2
BHI RLDIE
STA OX16,X
LDD #$0100
JSR LASOUT
NAP 1,RLASR
*LEFT LASER
LLASR LDX PD,U
LDA OX16,X
SUBA #3
CMPA #XMIN
BLO LLDIE
STA OX16,X
LDD #$FF00
JSR LASOUT
NAP 1,LLASR
*UP LASER
ULASR LDX PD,U
LDA OY16,X
ADDA #-6
CMPA #YMIN
BLO ULDIE
STA OY16,X
LDD #$00FF
JSR LASOUT
NAP 1,ULASR
*DOWN LASER
DLASR LDX PD,U
LDA OY16,X
ADDA #6
CMPA #YMAX-5
BHI DLDIE
STA OY16,X
LDD #$0001
JSR LASOUT
NAP 1,DLASR
*
*LASER OUT OF BOUNDS
*
RLDIE LDA #XMAX+1 RT LASER DIE
BRA LLDIE1
LLDIE LDA #XMIN-1 LFT LASER DIE
LLDIE1 LDB OY16,X
BRA LASDIH
ULDIE LDB #YMIN-1
BRA DLDIE1
DLDIE LDB #YMAX+1
DLDIE1 LDA OX16,X GLOW POINT
BRA LASDIV
*
*LASER DIE HORIZONTAL
*
LASDIH STD PD2,U
JSR LASOFF
LDX PD2,U
LDA LASCOL
LDB LASCOL
STD -1,X
STA 1,X
NAP 2,LDH1
LDH1 LDA WALCOL
LDX PD2,U
STA -1,X
STA 1,X
NAP 1,LDH2
LDH2 LDA WALCOL
STA [PD2,U]
JMP SUCIDE
*
*LASER DIE VERTICAL
*
LASDIV CMPB #YMAX
BHS LDV0
LDB #YMIN-2
LDV0 CMPA #XMIN-1
BHI LDV00
INCA
LDV00 STD PD2,U
JSR LASOFF
LDA LASCOL
LDB LASCOL
LDX PD2,U
STD ,X
LDA WALCOL
ANDA #$F0
PSHS A
LDA LASCOL
ANDA #$0F
ADDA ,S+
TFR A,B
STD -$100,X
NAP 2,LDV1
LDV1 LDX PD2,U
LDA WALCOL
LDB WALCOL
STD -$100,X
ANDA #$0F
ANDB #$0F
PSHS D
LDA LASCOL
LDB LASCOL
ANDA #$F0
ANDB #$F0
ADDD ,S++
STD ,X
NAP 1,LDV2
LDV2 LDA WALCOL
LDB WALCOL
STD [PD2,U]
JMP SUCIDE DONE!!!
LASDH JMP LASDIH
LASDV BRA LASDIV
*
*LASER DIE SCAN
*FIND WHERE WE RAN OFF
LDSCAN STB XTEMP+1
CLRB
ASRA
RORB
STD XTEMP2
TFR Y,D
ADDA OX16,X
ADDB OY16,X
STA OX16,X
STB OY16,X
LDSCXL LDD XTEMP2
ADDD OX16,X
STD OX16,X
LDB OY16,X
ADDB XTEMP+1
STB OY16,X
CMPB #YMAX
BHI LASDV
CMPB #YMIN
BLO LASDV
CMPA #XMAX
BHI LASDH
CMPA #XMIN
BLO LASDH
BRA LDSCXL
*
*DOWN LEFT DIE
DLLDIE LDY #$0005
LDD #$FF01
BRA LDSCAN
*UP LEFT DIE
ULLDIE LDY #$0000
LDD #$FFFF
BRA LDSCAN
*UP RIGHT DIE
URLDIE LDY #$0200
LDD #$01FF
BRA LDSCAN
*DOWN RT DIE
DRLDIE LDY #$0205
LDD #$0101
BRA LDSCAN
*DOWN LEFT DIAG LASER
DLLASR LDX PD,U
LDA OX16,X
SUBA #3
LDB OY16,X
ADDB #6
CMPA #XMIN
BLO DLLDIE
CMPB #YMAX-5
BHI DLLDIE
STA OX16,X
STB OY16,X
LDD #$FF01
BSR LASOUT
NAP 1,DLLASR
*UPPER LEFT DIAG
ULLASR LDX PD,U
LDA OX16,X
SUBA #3
CMPA #XMIN
BLO ULLDIE
LDB OY16,X
SUBB #6
CMPB #YMIN
BLO ULLDIE
STA OX16,X
STB OY16,X
LDD #$FFFF
BSR LASOUT
NAP 1,ULLASR
*UPPER RIGHT DIAG
URLASR LDX PD,U
LDA OX16,X
ADDA #3
CMPA #XMAX-2
BHI URLDIE
LDB OY16,X
SUBB #6
CMPB #YMIN
BLO URLDIE
STA OX16,X
STB OY16,X
LDD #$01FF
BSR LASOUT
NAP 1,URLASR
*DOWN RT DIAG
DRLASR LDX PD,U
LDA OX16,X
ADDA #3
CMPA #XMAX-2
BHI DRLDIE
LDB OY16,X
ADDB #6
CMPB #YMAX-5
BLS DRL1
JMP DRLDIE
DRL1 STA OX16,X
STB OY16,X
LDD #$0101
BSR LASOUT
NAP 1,DRLASR
*OUTPUT LASER
LASOUT STD LASDIR SAVE DIRECTION FOR HITS
JSR DMAOFN
PSHS U,X
LDU OPICT,X
LDD OBJX,X
LDX #PPTR
JSR COL0
BNE LASDIE
LDX ,S
LDU OPICT,X
LDD OBJX,X
LDX #RPTR
JSR COL0
BNE LASDIE
LDX ,S
LDU OPICT,X
LDD OBJX,X
LDX #OPTR
JSR COL0
BNE LASDIE
PULS X,U,PC
*LASER DIE
LASDIE PULS X,U
BSR LASOFF
JMP SUCIDE
*LASER OFF
LASOFF JSR DMAOFF
LDD OFREE RETURN OBJECT TO FREE LIST
STD ,X
STX OFREE
DEC LCNT
RTS
*
*DISPLAY TOP OF SCREEN
*
TDISP PSHS D,X,Y,U
LDA PLRCNT
TD1 JSR SCRTR0
DECA
BNE TD1
BSR BORDER
JSR MANDSP
PULS D,X,Y,U,PC
*
*DISPLAY WAVE # MESSAGE
*
WVMESS LDA ZP1WAV
JSR HEXBCD
TFR A,B
LDA #104
JSR WRD5V
LDA PLRCNT
DECA
BEQ WVMESX
LDA ZP2WAV
JSR HEXBCD
TFR A,B
LDA #114
JSR WRD5V
WVMESX RTS
*
*DISPLAY MEN LEFT
*MAX OF 7
*
MANDSV LDX #P1MAN
LDD #$1508
JSR BLKCLR CLEAR MAN DISPLAY
LDX #P2MAN
JSR BLKCLR CLEAR EM OUT
LDY #MNPIC
LDA ZP1LAS
BEQ MAND2
CMPA #7
BLS MAND1
LDA #7
MAND1 STA XTEMP
LDD #P1MAN
MAND1L JSR PCTON
ADDA #4
DEC XTEMP
BNE MAND1L
MAND2 LDA ZP2LAS
BEQ MAND3
CMPA #7
BLS MAND2A
LDA #7
MAND2A STA XTEMP
LDD #P2MAN
MAND2L JSR PCTON
ADDA #4
DEC XTEMP
BNE MAND2L
MAND3 RTS
*
*DISPLAY BORDER
*
BORDER LDX #(XMIN-1)*256+YMIN-2
LDA WALCOL
BORD1 STA (XMAX-XMIN)*$100+$200,X
STA ,X+
CMPX #(XMIN-1)*256+YMAX+2
BLS BORD1
LDX #XMIN*256+YMIN-2
LDB WALCOL
BORD2 STD ,X
STD YMAX-YMIN+3,X
LEAX 256,X
CMPX #XMAX*256+YMIN-2
BLS BORD2
RTS
*
*POST REFRESH PROCESS
*PSTREF=#TO REF EVERY 2 FRAME
PSTRPC LDU PSTIN
CMPU #PSLIST+64
BLO PSTP0
LDU #PSLIST
PSTP0 LDA PSTREF
PSHS A
LDY PSTANI
PSTPL LDX ,U++
BEQ PSTP01
LDD ,Y
EORA #4
EORB #4
SEI
STD DMASIZ SETUP SIZE
LDB PSTCOL
STB DMACON
LDD OBJDAT,Y
STD DMAORG
LDD OBJX,X
STD DMADES
LDB #$1A
STB DMACTL
CLI
PSTP01 DEC ,S
BNE PSTPL
LEAS 1,S
STU PSTIN
NAP 2,PSTRPC
*
*MINI MAN PICT
*
MNPIC FCB 3,8
FDB MANPD
MANPD FCB $02,$22,$00
FCB $BB,$0B,$B0
FCB $BB,$0B,$B0
FCB $00,$20,$00
FCB $88,$08,$80
FCB $30,$80,$30
FCB $08,$08,$00
FCB $88,$08,$80
*
*LASER PICT PTRS
*
LLPIC FCB 3,1
FDB LLPC
ULPIC FCB 1,6
FDB ULPC
DLLPIC FCB 3,6
FDB DLLPC
ULLPIC FCB 3,6
FDB ULLPC
*LASER PICTURES
LLPC FCB $AA,$AA,$AA
ULPC FCB $A0,$A0,$A0,$A0,$A0,$A0
DLLPC FCB $00,$00,$0A
FCB $00,$00,$A0
FCB $00,$0A,$00
FCB $00,$A0,$00
FCB $0A,$00,$00
FCB $A0,$00,$00
ULLPC FCB $A0,$00,$00
FCB $0A,$00,$00
FCB $00,$A0,$00
FCB $00,$0A,$00
FCB $00,$00,$A0
FCB $00,$00,$0A
*
*PLAYER IMAGES...
MANLP1 FCB 4,12
FDB MANLD1
MANLP2 FCB 4,12
FDB MANLD2
MANLP3 FCB 4,12
FDB MANLD3
MANRP1 FCB 4,12
FDB MANRD1
MANRP2 FCB 4,12
FDB MANRD2
MANRP3 FCB 4,12
FDB MANRD3
MANDP1 FCB 4,12
FDB MANDD1
MANDP2 FCB 4,12
FDB MANDD2
MANDP3 FCB 4,12
FDB MANDD3
MANUP1 FCB 4,12
FDB MANUD1
MANUP2 FCB 4,12
FDB MANUD2
MANUP3 FCB 4,12
FDB MANUD3
MANLD1 EQU *
FDB $0B22,$2000
FDB $0BBB,$BB00
FDB $0B22,$2B00
FDB $0022,$2000
FDB $0009,$0000
FDB $0099,$9000
FDB $0093,$9000
FDB $0093,$9000
FDB $0003,$0000
FDB $0001,$0000
FDB $0099,$0000
FDB $0000,$0000
MANLD2 EQU *
FDB $0B22,$2000
FDB $0BBB,$BB00
FDB $0B22,$2B00
FDB $0022,$2000
FDB $0009,$0000
FDB $0009,$9000
FDB $0333,$9300
FDB $0009,$9300
FDB $0090,$9300
FDB $0090,$9000
FDB $0990,$9000
FDB $0000,$0000
MANLD3 EQU *
FDB $0B22,$2000
FDB $0BBB,$BB00
FDB $0B22,$2B00
FDB $0022,$2000
FDB $0009,$0000
FDB $0009,$9000
FDB $0339,$9300
FDB $0009,$9300
FDB $0090,$9300
FDB $0090,$9000
FDB $0990,$9000
FDB $0000,$0000
MANRD1 EQU *
FDB $0222,$B000
FDB $BBBB,$B000
FDB $B222,$B000
FDB $0222,$0000
FDB $0090,$0000
FDB $0999,$0000
FDB $0939,$0000
FDB $0939,$0000
FDB $0030,$0000
FDB $0090,$0000
FDB $0099,$0000
FDB $0000,$0000
MANRD2 EQU *
FDB $0222,$B000
FDB $BBBB,$B000
FDB $B222,$B000
FDB $0222,$0000
FDB $0090,$0000
FDB $0990,$0000
FDB $3993,$3000
FDB $3990,$0000
FDB $3909,$0000
FDB $0909,$0000
FDB $0909,$9000
FDB $0000,$0000
MANRD3 EQU *
FDB $0222,$B000
FDB $BBBB,$B000
FDB $B222,$B000
FDB $0222,$0000
FDB $0090,$0000
FDB $0990,$0000
FDB $3933,$3000
FDB $3990,$0000
FDB $3909,$0000
FDB $0909,$0000
FDB $0909,$9000
FDB $0000,$0000
MANDD1 EQU *
FDB $0022,$2000
FDB $BBB2,$BBB0
FDB $B0B0,$B0B0
FDB $0B22,$2B00
FDB $0009,$0000
FDB $0993,$9900
FDB $3993,$9930
FDB $3093,$9030
FDB $3090,$9030
FDB $0090,$9000
FDB $0990,$9900
FDB $0000,$0000
MANDD2 EQU *
FDB $0022,$2000
FDB $BBB2,$BBB0
FDB $B0B0,$B0B0
FDB $0B22,$2B00
FDB $0009,$0000
FDB $0993,$9900
FDB $3993,$9930
FDB $3093,$9030
FDB $3090,$9000
FDB $0990,$9000
FDB $0000,$9000
FDB $0000,$9900
MANDD3 EQU *
FDB $0022,$2000
FDB $BBB2,$BBB0
FDB $B0B0,$B0B0
FDB $0B22,$2B00
FDB $0009,$0000
FDB $0993,$9900
FDB $3993,$9930
FDB $3093,$9030
FDB $0090,$9030
FDB $0090,$9900
FDB $0090,$0000
FDB $0990,$0000
MANUD1 EQU *
FDB $BB22,$2BB0
FDB $B222,$22B0
FDB $B222,$22B0
FDB $0022,$2000
FDB $0009,$0000
FDB $0999,$9900
FDB $3999,$9930
FDB $3099,$9030
FDB $3090,$9030
FDB $0090,$9000
FDB $0990,$9900
FDB $0000,$0000
MANUD2 EQU *
FDB $BB22,$2BB0
FDB $B222,$22B0
FDB $B222,$22B0
FDB $0022,$2000
FDB $0009,$0000
FDB $0999,$9900
FDB $3999,$9930
FDB $3099,$9030
FDB $3090,$9000
FDB $0990,$9000
FDB $0000,$9000
FDB $0000,$9900
MANUD3 EQU *
FDB $BB22,$2BB0
FDB $B222,$22B0
FDB $B222,$22B0
FDB $0022,$2000
FDB $0009,$0000
FDB $0999,$9900
FDB $3999,$9930
FDB $3099,$9030
FDB $0090,$9030
FDB $0090,$9900
FDB $0090,$0000
FDB $0990,$0000
END