1263 lines
15 KiB
ArmAsm
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
|