PCS_AppleII/source_disc1/RUN2.S

1263 lines
15 KiB
ArmAsm

LST OFF
*
* PCS -- PINBALL STUFF
*
ORG $8554
OBJ $7000
*
* CONSTANTS
*
LIBOBJ EQU 3
*
PARAM EQU $00
TEMP EQU $07
XTEMP EQU TEMP+1
YTEMP EQU XTEMP+1
TEMP2 EQU YTEMP+1
*
BASE1 EQU $10
BASE2 EQU BASE1+2
SHIFTOUT EQU BASE2+2
SIGN EQU SHIFTOUT+1
SHIFTCOUNT EQU SIGN+1
*
PLAYER EQU $80
PLAYERCNT EQU PLAYER+1
BALLS EQU PLAYERCNT+1
SLEEPCNT EQU BALLS+1
PBASE1 EQU SLEEPCNT+1
PBASE2 EQU PBASE1+2
PBASE3 EQU PBASE2+2
PBASE4 EQU PBASE3+2
LASTY EQU PBASE4+2
LIVEBALLS EQU LASTY+1
GAMEMODE EQU LIVEBALLS+1
*
STGL EQU $3E
*
OBJ EQU $91
NEXTOBJ EQU OBJ+2
OBJCOUNT EQU NEXTOBJ+1
OBJID EQU OBJCOUNT+5
FILLCOLOR EQU OBJID+1
VRTXCOUNT EQU FILLCOLOR+1
LBASE EQU VRTXCOUNT+1
*
STACKTEMP EQU $AE
RELOAD EQU $1E1C
*
RUNLEN EQU $C0
PDL0 EQU RUNLEN+1
PDL1 EQU PDL0+1
BUTN0 EQU PDL1+1
BUTN1 EQU BUTN0+1
PTIMER1 EQU BUTN1+1
PTIMER2 EQU PTIMER1+1
KBD EQU PTIMER2+1
*
SERIES EQU KBD+1
SLICE EQU SERIES+1
STEMP EQU SLICE+1
DSCORE EQU STEMP+1
DBONUS EQU DSCORE+1
BMULT EQU DBONUS+1
INITMODE EQU BMULT+1
SCBASE EQU INITMODE+1
*
BSTAT EQU SCBASE+2
Y2 EQU BSTAT+4
*
SHFRSLT EQU $800
SHFOUT EQU SHFRSLT+$600
DIV7 EQU SHFOUT+$600
MOD7 EQU DIV7+$100
LO EQU MOD7+$100
HI EQU LO+$C0
*
SETMODE EQU HI+$10F
XOFFDRAW EQU SETMODE+$62
CHARTO EQU XOFFDRAW+$435
PRCHAR EQU CHARTO+$A
PRINT EQU PRCHAR+$38
CHAR EQU PRINT+$19
*
DRAWBALL EQU $7C66
INITBALL EQU $7C90 ;INITB2
ADVANCE EQU $80DE
*
P1STATE EQU $8F00
P2STATE EQU P1STATE+$200
P3STATE EQU P2STATE+$200
P4STATE EQU P3STATE+$200
*
SLEEPCODE EQU $9700
SLEEPLO EQU $9800
SLEEPHI EQU $9900
SLEEPERS EQU $9A00
*
PBTBLO EQU $400
PBTBHI EQU PBTBLO+$C0
VECTLO EQU PBTBHI+$C0
VECTHI EQU VECTLO+$80
RUNCHN EQU VECTHI+$80
TIME EQU RUNCHN+$80
*
LOGIC EQU $4000
WSET EQU $4018
PBDATA EQU $401C
PBDX EQU $6F40
WMOD2 EQU $80BC
WMOD3 EQU $7CD6
WMOD4 EQU $81DA
*
* MAIN PINBALL CONTROL
*
MAIN LDA #0
STA STGL
LDA #$FF
MAIN0 STA GAMEMODE
JSR MAKETBLS
JSR INITWORLD
STA $C050
STA $C052
STA $C054
STA $C057
MAIN1 JSR MAIN2
JMP MAIN1
*
DISKPLAY LDA #0
BEQ MAIN0
*
MAIN2 JSR MAKEBDSPLY
*
LDA #14
STA TEMP
WAIT1 LDA #0
JSR $FCA8
DEC TEMP
BNE WAIT1
*
LDA #0
STA SLEEPCNT
JSR INITPLAYERS
JSR GETPLAYERCNT
LDY #0
MAIN3 STY BALLS
LDY #0
MAIN4 STY PLAYER
JSR PRINTPLAYER
LDA #$38
JSR DOSOUND
JSR DOBALL
JSR TALLY
LDA #0
STA BMULT
JSR PRBMULT
LDY PLAYER
JSR PRINTPLAYER
LDY PLAYER
INY
CPY PLAYERCNT
BCC MAIN4
*
LDY BALLS
JSR MAKEBALL
LDY BALLS
INY
CPY #5
BCC MAIN3
BCS MAIN2
*
GETPLAYERCNT LDY #0
JSR PRINTPLAYER
STA $C010
GETPL2 LDY #0
GETPL3 LDA $C061
ORA $C062
BPL GETPL5
*
STY PLAYERCNT
GETPL4 STY XTEMP
JSR PRINTPLAYER
LDY XTEMP
DEY
BPL GETPL4
INC PLAYERCNT
WAIT3 LDA $C061
ORA $C062
BMI WAIT3
RTS
*
QUIT PLA
PLA
PLA
PLA
JSR CLOSE2
LDA STACKTEMP
JMP RELOAD
*
GETPL5 LDA $C000
BPL GETPL3
STA $C010
CMP #$9B
BNE NOQUIT
BIT GAMEMODE
BPL QUIT
NOQUIT AND #$7F
CMP #$20
BNE GETPL3
INY
CPY #4
BCC GETPL6
*
LDY #1
JSR PRINTPLAYER
LDY #2
JSR PRINTPLAYER
LDY #3
JSR PRINTPLAYER
JMP GETPL2
*
GETPL6 STY XTEMP
JSR PRINTPLAYER
LDY XTEMP
BNE GETPL3
*
MAKEBDSPLY LDY #4
MAKBD2 STY YTEMP
JSR MAKEBALL
LDY YTEMP
DEY
BPL MAKBD2
RTS
*
MAKEBALL TYA
CLC
ADC #$23
STA MBALL+3
LDA #<MBALL
LDX #>MBALL
JMP XOFFDRAW
*
MBALL DA *+7
HEX 4800000501
HEX 0E1F1F1F0E
*
INITPLAYERS LDY #44
LDA #0
STA DSCORE
STA DBONUS
INITPL2 STA SCORE1,Y
DEY
BPL INITPL2
*
JSR INITSOUND
LDA #0
STA INITMODE
JSR INITOBJS
*
LDX #0
JSR SAVEPLAYER
LDX #1
JSR SAVEPLAYER
LDX #2
JSR SAVEPLAYER
LDX #3
JMP SAVEPLAYER
*
* TALLY BMULT * BONUS, SCORE
*
TALLY LDY PLAYER
LDA SCTBLO,Y
STA SCBASE
LDA SCTBHI,Y
STA SCBASE+1
TALLY2 LDY #7
TALLY3 LDX #0
LDA (SCBASE),Y
CLC
ADC BONUS,Y
TALLY4 CMP #10
BCC TALLY5
SBC #10
INX
BCS TALLY4
TALLY5 STA (SCBASE),Y
TXA
DEY
ADC (SCBASE),Y
STA (SCBASE),Y
TYA
BNE TALLY3
*
LDA BMULT
CMP #1
BEQ TALLY7
TALLY6 DEC BMULT
BPL TALLY2
TALLY7 LDA #0
LDY #7
TALLY8 STA BONUS,Y
DEY
BPL TALLY8
JMP SCORE
*
* MAKE SOME TABLES
*
MAKETBLS LDA #>SHFRSLT
STA BASE1+1
LDA #>SHFOUT
STA BASE2+1
LDY #0
STY BASE1
STY BASE2
LDA #1
STA SHIFTCOUNT
*
MAKT2 LDA #0
STA SHIFTOUT
TYA
AND #$80
STA SIGN
TYA
AND #$7F
LDX SHIFTCOUNT
MAKT3 ASL
ROL SHIFTOUT
DEX
BNE MAKT3
*
ROL ;TO 7-BIT FORMAT
ROL SHIFTOUT
LSR
*
ORA SIGN ;ADD ORIGINAL SIGN
CMP #$80
BNE *+4
LDA #$00 ;FILTER OUT $80'S
STA (BASE1),Y
*
LDA SHIFTOUT
ORA SIGN
CMP #$80
BNE *+4
LDA #$00
STA (BASE2),Y
*
INY
BNE MAKT2
*
INC BASE1+1
INC BASE2+1
INC SHIFTCOUNT
LDA SHIFTCOUNT
CMP #7
BNE MAKT2
*
* NOW MAKE DIV7,MOD7,LO,HI
*
LDA #0
TAY
TAX
MAKT4 STA MOD7,Y
PHA
TXA
STA DIV7,Y
PLA
CLC
ADC #1
CMP #7
BCC *+5
INX
SBC #7
*
INY
BNE MAKT4
*
LDY #0
LDA #$20
STA TEMP
MAKT5 STA HI,Y
STA HI+8,Y
STA HI+64,Y
STA HI+72,Y
STA HI+128,Y
STA HI+136,Y
PHA
LDA #$00
STA LO,Y
LDA #$80
STA LO+8,Y
LDA #$28
STA LO+64,Y
LDA #$A8
STA LO+72,Y
LDA #$50
STA LO+128,Y
LDA #$D0
STA LO+136,Y
PLA
CLC
ADC #4
CMP #$40
BCS MAKT7
MAKT6 INY
BNE MAKT5
*
MAKT7 INC TEMP
TYA
CLC
ADC #8
TAY
LDA TEMP
CMP #$24
BCC MAKT6
*
* MAKE SLEEPLO, HI
*
LDA #<SLEEPERS
STA TEMP
LDA #>SLEEPERS
STA TEMP+1
LDY #0
STY SLEEPCNT
MAKT8 STA SLEEPHI,Y
LDA TEMP
STA SLEEPLO,Y
CLC
ADC #22
STA TEMP
LDA TEMP+1
ADC #0
STA TEMP+1
INY
BNE MAKT8
*
* NOW SET UP THE GAME
*
LDA PBDATA
STA OBJCOUNT
LDY #0
STY RUNLEN
JSR GETOBJ
SETUP2 LDA OBJID
CMP #<LIBOBJ
BNE SETUP4
*
LDX NEXTOBJ
LDA LBASE
STA VECTLO,X
LDA LBASE+1
STA VECTHI,X
LDY #8
LDA (LBASE),Y
STA TIME,X
LDA #0
STA (LBASE),Y
TXA
LDX RUNLEN
STA RUNCHN,X
INC RUNLEN
JMP SETUP5
*
SETUP4 LDX NEXTOBJ
LDA #0
STA VECTLO,X
STA VECTHI,X
*
SETUP5 INC NEXTOBJ
LDY NEXTOBJ
JSR GETNEXTOBJ
LDY NEXTOBJ
CPY OBJCOUNT
BNE SETUP2
*
LDY #1
LDA OBJ
LDX OBJ+1
SETUP6 CLC
ADC PBDX-1,Y
STA PBTBLO,Y
BCC *+3
INX
TXA
STA PBTBHI,Y
LDA PBTBLO,Y
INY
CPY #192
BCC SETUP6
*
SETUP7 DEY
LDA PBDX,Y
BEQ SETUP7
STY LASTY
*
* INIT SCORES
*
INITSCORES LDY #$48
LDX #$18
LDA #0
STA BMULT
JSR CHARTO
LDA #<BMMSG
LDX #>BMMSG
JSR PRINT
JSR PRBMULT
*
LDX #3
INITSCR2 STX PLAYER
LDA SCVERT,X
STA CHAR+2
LDA SCTBLO,X
TAY
LDA SCTBHI,X
TAX
JSR PRSCORE
LDX PLAYER
DEX
BPL INITSCR2
*
LDY #$58
LDX #$18
LDA #0
JSR CHARTO
LDA #<BMSG
LDX #>BMSG
JSR PRINT
LDY #<BONUS
LDX #>BONUS
*
PRSCORE STY SCBASE
STX SCBASE+1
*
PRSCORE2 LDY #0
JSR SETMODE
*
LDY CHAR+2
LDX #$27
LDA #0
JSR CHARTO
*
LDY #8
PRSCR2 STY YTEMP
LDA (SCBASE),Y
JSR PRCHAR
DEC CHAR+3
LDA #0
STA CHAR+4
LDY YTEMP
DEY
BNE PRSCR2
*
LDY #2
JMP SETMODE
*
SCORE LDX PLAYER
LDA SCVERT,X
STA CHAR+2
LDY SCTBLO,X
LDA SCTBHI,X
TAX
LDA DSCORE
JSR DOSCORE
*
LDA #$58
STA CHAR+2
LDA #<BONUS
STA SCBASE
LDA #>BONUS
STA SCBASE+1
LDA DBONUS
LDY #5
JSR DOSCORE2
LDA #0
STA DSCORE
STA DBONUS
RTS
*
DOSCORE STY SCBASE
STX SCBASE+1
LDY #7
DOSCORE2 CLC
ADC (SCBASE),Y
BCC *+4
LDA #255
STA (SCBASE),Y
DOSCOR2 LDX #0
LDA (SCBASE),Y
DOSCOR3 CMP #10
BCC DOSCOR4
SBC #10
INX
BCS DOSCOR3
DOSCOR4 STA (SCBASE),Y
TXA
DEY
ADC (SCBASE),Y
STA (SCBASE),Y
TYA
BNE DOSCOR2
JMP PRSCORE2
*
PRBMULT LDY #0
JSR SETMODE
LDY #$48
LDX #$20
LDA #0
JSR CHARTO
LDX BMULT
INX
CPX #6
BCS PRBMUL2
STX BMULT
TXA
JSR PRCHAR
PRBMUL2 LDY #2
JMP SETMODE
*
PRINTPLAYER LDA SCVERT,Y
STA CHAR+2
LDA #$18
STA CHAR+3
LDA #0
STA CHAR+4
LDA PMSGLO,Y
LDX PMSGHI,Y
JMP PRINT
*
PMSGLO DA <P1MSG
DA <P2MSG
DA <P3MSG
DA <P4MSG
PMSGHI DA >P1MSG
DA >P2MSG
DA >P3MSG
DA >P4MSG
*
P1MSG HEX 19150A220E1B81
P2MSG HEX 19150A220E1B82
P3MSG HEX 19150A220E1B83
P4MSG HEX 19150A220E1B84
BMSG HEX 0B18171E9C
BMMSG HEX 0B18171E1CA1
*
SCVERT HEX 788898A8
SCTBLO DA <SCORE1
DA <SCORE2
DA <SCORE3
DA <SCORE4
SCTBHI DA >SCORE1
DA >SCORE2
DA >SCORE3
DA >SCORE4
*
SCORE1 HEX 000000000000000000
SCORE2 HEX 000000000000000000
SCORE3 HEX 000000000000000000
SCORE4 HEX 000000000000000000
BONUS HEX 000000000000000000
*
DOSOUND CMP SERIES
BMI DOS2
STA SERIES
LDA #0
STA SLICE
DOS2 RTS
*
SOUND BIT STGL
BMI SOUND5
LDA SERIES
BMI SOUND5
SOUND1 CLC
ADC SLICE
TAX
STX STEMP
LDY EFFECTS,X
SOUND2 LDX NOTES-12,Y
BEQ SOUND4
SOUND3 PHA
PLA
DEX
BNE SOUND3
LDA $C030
INY
BNE SOUND2
SOUND4 INC SLICE
LDX STEMP
LDA EFFECTS+1,X
BNE SOUND5
*
INITSOUND LDY #$FF
STY SERIES
INY
STY SLICE
SOUND5 RTS
*
EFFECTS HEX 540C5400 ;0
HEX 0C1824303C485400 ;4
HEX 54483C3024180C00 ;12
HEX 540C540C540C540C0C243C54543C2400 ;20
HEX 0C1824303C4854483C303C483C303C483C303C00 ;36
HEX 0C1824303C485454483C3024180C1824303C4800 ;56
HEX 0C1824300C1824300C1824300C1824300C182400 ;76
*
NOTES HEX 103010301030103010301000 ;$0
HEX 183818381838183818381800 ;$0C
HEX 204020402040204020402000 ;$18
HEX 284828482848284828482800 ;$24
HEX 305030503050305030503000 ;$30
HEX 385838583858385838583800 ;$3C
HEX 406040604060406040604000 ;$48
HEX 486848684868486848684800 ;$54
*
WIRING LDX #0
WIR2 LDA #0
STA TEMP
STX XTEMP
JSR GETST
BPL WIR4
INX
JSR GETST
BPL WIR4
INX
JSR GETST
BPL WIR4
*
INX
STX XTEMP
LDA TEMP
BEQ WIR4
LDA LOGIC,X
STA YTEMP
AND #$0F
TAY
LDA BONUSTBL,Y
CLC
ADC DBONUS
BCC *+4
LDA #255
STA DBONUS
LDA YTEMP
BPL WIR3
*
JSR PRBMULT
*
WIR3 LDA YTEMP
AND #$70
LSR
LSR
LSR
LSR
BEQ *+9
TAX
LDA SOUNDTBL-1,X
JSR DOSOUND
*
DEC XTEMP
JSR TURNOFF
DEC XTEMP
JSR TURNOFF
DEC XTEMP
JSR TURNOFF
*
WIR4 LDA XTEMP
AND #$FC
CLC
ADC #4
TAX
CPX #24
BCC WIR2
RTS
*
BONUSTBL HEX 000102030405060708090A141E283264
SOUNDTBL HEX 00040C1424384C
*
GETST LDA LOGIC,X
BEQ GETS2
INC TEMP
TAY
LDA VECTLO,Y
STA BASE1
LDA VECTHI,Y
STA BASE1+1
LDY #8
LDA (BASE1),Y
RTS
GETS2 LDA #$80
GETS3 RTS
*
TURNOFF LDX XTEMP
LDA LOGIC,X
BEQ GETS3
TAY
LDA VECTLO,Y
STA LBASE
LDA VECTHI,Y
STA LBASE+1
LDY #12
LDA (LBASE),Y
STA TMOD1
INY
LDA (LBASE),Y
STA TMOD1+1
TMOD1 EQU *+1
JMP $FFFF
*
* DO A BALL
*
DOBALL LDA #0
STA INITMODE
JSR INITOBJS
LDX PLAYER
JSR RESTOREPLAYER
DOBALL2 LDA #0
STA LIVEBALLS
JSR PLAY
*
LDA $C000
BPL DOBALL2B
STA $C010
CMP #$9B
BNE DOBALL2A
BIT GAMEMODE
BMI DOBALL2B
PLA
PLA
PLA
PLA
JSR CLOSEOBJS
LDX PLAYER
JSR SAVEPLAYER
LDA STACKTEMP
JMP RELOAD
*
DOBALL2A CMP #$93
BNE DOBALL2B
EOR STGL
STA STGL
*
DOBALL2B LDA LIVEBALLS
BNE DOBALL2
*
LDA #0
STA PTIMER1
DOBALL3 JSR PLAY
LDA PTIMER1
BNE DOBALL3
*
LDX PLAYER
JSR SAVEPLAYER
LDA #$80
STA INITMODE
JMP INITOBJS
*
* PINBALL MAIN LOOP
*
PLAY INC PTIMER1
BNE *+4
INC PTIMER2
LDA PTIMER1
AND #$1F
BNE PLAY2
LDX #0
JSR $FB1E
TYA
STA PDL0
PLAY2 LDA PTIMER1
CLC
ADC #$10
AND #$1F
BNE PLAY3
LDX #1
JSR $FB1E
TYA
STA PDL1
PLAY3 LDA $C061
STA BUTN0
LDA $C062
STA BUTN1
*
WMOD1 EQU *+1
LDA #16
JSR $FCA8
*
LDY #0
PLAY4 CPY RUNLEN ;127 LIBOBJS
BCS PLAY10
STY NEXTOBJ
*
LDX RUNCHN,Y
LDA TIME,X
AND PTIMER1
BNE PLAY9
*
LDA VECTLO,X
STA LBASE
LDA VECTHI,X
STA LBASE+1
LDY #10
LDA (LBASE),Y
STA PMOD1
INY
LDA (LBASE),Y
STA PMOD1+1
PMOD1 EQU *+1
JSR $FFFF
*
LDY NEXTOBJ
LDX RUNCHN,Y
LDA TIME,X
BNE PLAY9
LDY #16
LDA (LBASE),Y
ROL
BCS PLAY9
BPL PLAY6
*
LDY SLEEPCNT
CPY #255
BEQ PLAY9
INC SLEEPCNT
LDA PLAYER
STA SLEEPCODE,Y
LDA SLEEPLO,Y
STA BASE1
LDA SLEEPHI,Y
STA BASE1+1
LDY #22
PLAY5 LDA (LBASE),Y
STA (BASE1),Y
DEY
BPL PLAY5
JSR INITBALL
JSR DRAWBALL
JMP PLAY7
*
PLAY6 LDA Y2
CMP LASTY
BEQ PLAY8
PLAY7 LDA #$FF
STA LIVEBALLS
BNE PLAY9
PLAY8 LDA #$80
STA (LBASE),Y
JSR DRAWBALL
*
PLAY9 LDY NEXTOBJ
INY
BNE PLAY4
*
PLAY10 LDA PTIMER1
AND #$1F
BNE *+5
JSR SCORE
LDA PTIMER1
AND #$03
BNE SLEEP
JSR SOUND
JSR WIRING
*
SLEEP LDY #0
SLEEP2 CPY SLEEPCNT
BCS SLEEP7
STY NEXTOBJ
LDA SLEEPCODE,Y
CMP PLAYER
BNE SLEEP6
*
LDA SLEEPLO,Y
STA LBASE
LDA SLEEPHI,Y
STA LBASE+1
LDY #10
LDA (LBASE),Y
STA PMOD2
INY
LDA (LBASE),Y
STA PMOD2+1
PMOD2 EQU *+1
JSR $FFFF
*
LDA BSTAT
ROL
BCS SLEEP3 ;EATEN
BMI SLEEP6 ;CAUGHT
LDA Y2
CMP LASTY
BEQ SLEEP3 ;OFF BOARD
LDA #$FF
STA LIVEBALLS
BNE SLEEP6
*
SLEEP3 JSR DRAWBALL
LDY NEXTOBJ
CPY SLEEPCNT
BEQ SLEEP5
LDX SLEEPCNT
LDA SLEEPLO-1,X
STA BASE1
LDA SLEEPHI-1,X
STA BASE1+1
LDA SLEEPCODE-1,X
STA SLEEPCODE,Y
LDY #22
SLEEP4 LDA (BASE1),Y
STA (LBASE),Y
DEY
BPL SLEEP4
SLEEP5 DEC SLEEPCNT
*
SLEEP6 LDY NEXTOBJ
INY
BNE SLEEP2
SLEEP7 RTS
*
INITOBJS LDY #0
INITOBJ2 CPY RUNLEN
BEQ SLEEP7
STY NEXTOBJ
*
LDX RUNCHN,Y
LDA VECTLO,X
STA LBASE
LDA VECTHI,X
STA LBASE+1
LDY #12
LDA (LBASE),Y
STA IMOD2
INY
LDA (LBASE),Y
STA IMOD2+1
IMOD2 EQU *+1
JSR $FFFF
LDY NEXTOBJ
INY
BNE INITOBJ2
*
CLOSEOBJS LDA #$FF
STA INITMODE
JSR INITOBJS
CLOSE2 LDY #0
CLOSOBJS2 CPY RUNLEN
BEQ SLEEP7
STY NEXTOBJ
LDX RUNCHN,Y
LDA VECTLO,X
STA LBASE
LDA VECTHI,X
STA LBASE+1
LDA TIME,X
LDY #8
STA (LBASE),Y
LDY NEXTOBJ
INY
BNE CLOSOBJS2
*
GETOBJ LDA #<PBDATA+1
STA OBJ
LDA #>PBDATA+1
STA OBJ+1
STY NEXTOBJ
LDY #0
GETNEXTOBJ LDA PBDATA,Y
CLC
ADC OBJ
STA OBJ
LDA #0
ADC OBJ+1
STA OBJ+1
CPY NEXTOBJ
BEQ GETOBJ3
INY
BNE GETNEXTOBJ
GETOBJ3 LDY #0
LDA (OBJ),Y ;GET OBJECT ID
STA OBJID
*
* GET THE OBJECT'S L-BASE
*
INY
LDA (OBJ),Y
STA FILLCOLOR
INY
LDA (OBJ),Y
STA VRTXCOUNT
*
LDA VRTXCOUNT
ASL
ADC #3
ADC OBJ
STA LBASE
LDA OBJ+1
ADC #0
STA LBASE+1
RTS
*
* SAVE PLAYER'S STATE
*
SAVEPLAYER JSR PBASES
LDY #0
SAVEP2 CPY RUNLEN
BCS SAVEP3
STY NEXTOBJ
LDX RUNCHN,Y
LDA VECTLO,X
STA LBASE
LDA VECTHI,X
STA LBASE+1
*
LDY #0
LDA (LBASE),Y
STA PARAM
INY
LDA (LBASE),Y
STA PARAM+1
LDY #8
LDA (LBASE),Y
STA PARAM+2
LDY #16
LDA (LBASE),Y
STA PARAM+3
*
LDY NEXTOBJ
LDA PARAM
STA (PBASE1),Y
LDA PARAM+1
STA (PBASE2),Y
LDA PARAM+2
STA (PBASE3),Y
LDA PARAM+3
STA (PBASE4),Y
INY
BNE SAVEP2
*
SAVEP3 LDY #0
SAVEP4 CPY SLEEPCNT
BCS SAVEP6
STY NEXTOBJ
LDA SLEEPCODE,Y
CMP PLAYER
BNE SAVEP5
LDA SLEEPLO,Y
STA LBASE
LDA SLEEPHI,Y
STA LBASE+1
JSR DRAWBALL
SAVEP5 LDY NEXTOBJ
INY
BNE SAVEP4
SAVEP6 RTS
*
* RESTORE A PLAYER
*
RESTOREPLAYER JSR PBASES
LDA #$80
STA BUTN0
STA BUTN1 ;FLIPPER PROBLEM
*
LDY #0
RESTP2 CPY RUNLEN
BCS SAVEP3
STY NEXTOBJ
LDX RUNCHN,Y
LDA VECTLO,X
STA LBASE
LDA VECTHI,X
STA LBASE+1
LDA TIME,X
STA STEMP
*
LDA (PBASE1),Y
STA PARAM
LDA (PBASE2),Y
STA PARAM+1
LDA (PBASE3),Y
STA PARAM+2
LDA (PBASE4),Y
STA PARAM+3
*
RESTP3 LDY #0
LDA (LBASE),Y
CMP PARAM
BNE RESTP4
INY
LDA (LBASE),Y
CMP PARAM+1
BEQ RESTP6
*
RESTP4 LDA STEMP
CMP #3
BNE RESTP5
LDY #10
LDA (LBASE),Y
STA RMOD1
INY
LDA (LBASE),Y
STA RMOD1+1
RMOD1 EQU *+1
JSR $FFFF
JMP RESTP3
RESTP5 JSR ADVANCE
JMP RESTP3
*
RESTP6 LDA PARAM+2
LDX STEMP
CPX #$1F ;DROPTARGETS
BEQ *+6
LDY #8
STA (LBASE),Y
LDA PARAM+3
LDX STEMP ;BALLS
BEQ *+12
CPX #$1F
BNE *+4
ORA PARAM+2
LDY #16
STA (LBASE),Y
*
LDY NEXTOBJ
INY
BNE RESTP2
*
PBASES LDA #0
STA PBASE1
STA PBASE3
LDA #$80
STA PBASE2
STA PBASE4
LDA PLTBHI,X
STA PBASE1+1
STA PBASE2+1
CLC
ADC #1
STA PBASE3+1
STA PBASE4+1
RTS
*
PLTBHI DA >P1STATE
DA >P2STATE
DA >P3STATE
DA >P4STATE
*
INITWORLD LDX WSET
LDA GRAVTBL,X
STA WMOD4
LDX WSET+1
LDA TIMETBL,X
STA WMOD1
LDX WSET+2
LDA KICKTBL,X
STA WMOD3
LDX WSET+3
LDA ELASTLO,X
STA WMOD2
LDA ELASTHI,X
STA WMOD2+1
RTS
*
GRAVTBL HEX FF7F3F1F0F070301
TIMETBL HEX 302018100C080401
KICKTBL HEX 04080C1018202838
ELASTLO HEX 80400000C0804000
ELASTHI HEX 7878787877777777