1067 lines
26 KiB
NASM
Executable File
1067 lines
26 KiB
NASM
Executable File
OPT NOL
|
|
LIB RRFRED
|
|
OPT LIS
|
|
|
|
ORG RAMALS USE SAM RAM FOR STORAGE
|
|
XSTOR RMB 2
|
|
YSTOR RMB 2
|
|
ASTOR RMB 1
|
|
USTOR RMB 2
|
|
|
|
FROBX EQU $C
|
|
ADJX EQU $11
|
|
ADVALX EQU $59
|
|
|
|
ORG TSBORG
|
|
JMP ADJUST
|
|
JMP CKCMOS
|
|
JMP OPTSTZ
|
|
JMP GETLET
|
|
JMP CMOSMV
|
|
FDB OPD1
|
|
*
|
|
* CMOS MOVE: DESTINATION=Y, SOURCE=X, COUNT=B
|
|
*
|
|
CMOSMV PSHS A NEED A
|
|
CMMV1 LDA ,X+ GET SOURCE
|
|
EXG X,Y SWAP
|
|
JSR WCMOSA RITE IT
|
|
EXG X,Y SWAP BACK
|
|
DECB DONE?
|
|
BNE CMMV1 NO,LOOP
|
|
PULS A,PC RETURN CLEAN
|
|
*
|
|
* CLEAR CMOS: CRASHES A,B,X
|
|
*
|
|
CLRALL LDX #CMOS POINT TO START
|
|
CLRA1 CLR ,X+
|
|
CMPX #CMOS+$400
|
|
BNE CLRA1 NO, LOOP
|
|
RTS BYE
|
|
*
|
|
* INIT CMOS: SAVES STATE
|
|
*
|
|
CMINIZ PSHS X,Y,D SAVE STATE
|
|
LDX #DEFALT POINT TO ROM
|
|
LDY #CMOS POINT TO DESTINATION
|
|
LDAB #DEFSIZ LENGTH
|
|
BSR CMOSMV MOVE THEM ALL
|
|
PULS X,Y,D,PC ALL DONE
|
|
|
|
OPSET PSHS X,Y,D
|
|
LDX #OPD1
|
|
LDY #OPMESS
|
|
LDB #52 50 BYTES WORTH
|
|
BSR CMOSMV DO THE XFER
|
|
JSR OPCHK FIND THE CHECK BYTE
|
|
LDX #OMESUM PLACE TO STORE IT
|
|
JSR WCMOSA WRITE IT
|
|
PULS X,Y,D,PC
|
|
*
|
|
*
|
|
* DEFAULT HERE FOR NOW
|
|
*
|
|
DEFALT FCB $25 REPLAY @10,000
|
|
FCB $3 NSHIP
|
|
FCB $03 CSELCT
|
|
FCB $01 SLOT1M
|
|
FCB $04 SLOT2M
|
|
FCB $01 SLOT3M
|
|
FCB $01 CUNITC
|
|
FCB $00 CUNITB
|
|
FCB $00 MINUNT
|
|
FCB $01 "GAME WORKS = 0" ADJUSTMENT
|
|
FCB $02 GA1 MASTER DIFFICULTY
|
|
FCB $03 GA2 NUMBER OF LETTERS FOR GOD
|
|
FCB 0 FACTORY SETTINGS
|
|
FCB 0 CLEAR AUDIT TOTALS
|
|
FCB 0 CLEAR HSTD
|
|
FCB 0 AUTOCYCLE
|
|
FCB 0 ENTER OPERATOR MESSAGE
|
|
FCB 0 ENTER HSTD
|
|
DEFSIZ EQU *-DEFALT
|
|
OPD1 FCC ' PRESENTED BY'
|
|
FCC ' ' SPACES AFTER PRESENTED BY
|
|
OPD2 FCC 'WILLIAMS ELECTRONICS INC'
|
|
FCB $3D PERIOD
|
|
FCB $2F,$28
|
|
*
|
|
* COINAGE SELECT TABLE
|
|
*
|
|
CSELCT FCB $01,$04,$01,$01,$0,$0 FACTORY USE FOR CUSTOM START
|
|
FCB $01,$04,$01,$02,$04,$00 50C..3/$1.00
|
|
FCB $06,$00,$01,$01,$00,$00 NEWNEW GERMAN
|
|
FCB $01,$04,$01,$01,$00,$00 25C
|
|
FCB $01,$16,$06,$02,$00,$00 NEW FRENCH
|
|
FCB $01,$04,$01,$02,$00,$00 50C
|
|
FCB $01,$00,$04,$01,$00,$00
|
|
FCB $01,$00,$02,$01,$00,$00
|
|
FCB $01,$00,$02,$02,$00,$00
|
|
FCB $01,$04,$01,$01,$00,$00 FREE PLAY
|
|
*
|
|
ADJH EQU 30
|
|
|
|
ADJTBL FCB 0,$50 REPLAY LEVEL
|
|
FDB REPTTT
|
|
FCB 0,ADJH
|
|
*
|
|
FCB 1,$20 SHIPS FOR 1 CREDIT
|
|
FDB CRED1T
|
|
FCB 0,ADJH+9
|
|
*
|
|
FCB 0,9 CSELECT
|
|
FDB CONSLT
|
|
FCB 0,ADJH+20
|
|
*
|
|
FCB 0,$99 LEFT MULT
|
|
FDB NOWORD
|
|
FCB 1,ADJH+29
|
|
*
|
|
FCB 0,$99 CENTER
|
|
FDB NOWORD
|
|
FCB 1,ADJH+38
|
|
*
|
|
FCB 0,$99 RIGHT
|
|
FDB NOWORD
|
|
FCB 1,ADJH+47
|
|
*
|
|
FCB 1,$99 COIN UNITS FOR CREDIT
|
|
FDB NOWORD
|
|
FCB 1,ADJH+56
|
|
*
|
|
FCB 0,$99 COIN UNITS FOR BONUS
|
|
FDB NOWORD
|
|
FCB 1,ADJH+65
|
|
*
|
|
FCB 0,$99 MINIMUM COINAGE NEEDED
|
|
FDB NOWORD
|
|
FCB 1,ADJH+74
|
|
*
|
|
FCB 0,1 FREE PLAY
|
|
FDB YESNO
|
|
FCB 0,ADJH+85
|
|
*
|
|
FCB 0,$10 MASTER DIFFICULTY
|
|
FDB MASTT
|
|
FCB 0,ADJH+94
|
|
*
|
|
FCB 3,$20 LETTERS IN GODS NAME
|
|
FDB GODLT
|
|
FCB 0,ADJH+103
|
|
*
|
|
FCB 0,1
|
|
FDB YESNO1
|
|
FCB 0,ADJH+114
|
|
*
|
|
FCB 0,1
|
|
FDB YESNO1
|
|
FCB 0,ADJH+123
|
|
*
|
|
FCB 0,1
|
|
FDB YESNO1
|
|
FCB 0,ADJH+132
|
|
*
|
|
FCB 0,1
|
|
FDB YESNO1
|
|
FCB 0,ADJH+141
|
|
*
|
|
FCB 0,1
|
|
FDB YESNO1
|
|
FCB 0,ADJH+150
|
|
*
|
|
FCB 0,1
|
|
FDB YESNO1
|
|
FCB 0,ADJH+159
|
|
|
|
REPTTT FCB 0,NOREPM
|
|
FCB $20,REPMM1
|
|
FCB $25,REPMM2
|
|
FCB $30,REPMM3
|
|
FCB $50,REPMM4
|
|
FCB $FF
|
|
|
|
CRED1T FCB 0,NOMESS
|
|
FCB 2,HIVOL
|
|
FCB 3,RECOM
|
|
FCB 4,POORP
|
|
FCB 5,NOMESS
|
|
FCB $FF
|
|
|
|
NOWORD FCB 0,NOMESS
|
|
FCB $FF
|
|
|
|
CONSLT FCB 0,CUSTM
|
|
FCB 1,COINM1
|
|
FCB 2,COINM1+1
|
|
FCB 3,COINM1+2
|
|
FCB 4,COINM1+3
|
|
FCB 5,COINM1+4
|
|
FCB 6,COINM1+5
|
|
FCB 7,COINM1+6
|
|
FCB 8,COINM1+7
|
|
FCB 9,COINMF
|
|
FCB $FF
|
|
|
|
YESNO FCB 0,NOM
|
|
FCB 1,YESM
|
|
FCB $FF
|
|
|
|
YESNO1 FCB 0,NOM
|
|
FCB 1,YES1M
|
|
FCB $FF
|
|
|
|
MASTT FCB 0,EXLIB
|
|
FCB 3,LIB
|
|
FCB 5,RECOM
|
|
FCB 6,CONS
|
|
FCB 8,EXCON
|
|
FCB $FF
|
|
|
|
GODLT FCB 0,RECOM
|
|
FCB $4,NOMESS
|
|
FCB $FF
|
|
|
|
*
|
|
*** DISPLAY FULL TEXT FOR A LINE.
|
|
*
|
|
* Y = CMOS LOCATION
|
|
* U = POINTER TO TABLE ENTRY FOR THIS LOCATION.
|
|
* A = TEXT MESSAGE FOR LOCATION
|
|
|
|
DISADJ PSHS A,Y SAVE TEXT
|
|
LDA #ADJX ADJUSTMENT X
|
|
TST 4,U PROTECTED??
|
|
BEQ DSADJ1
|
|
LDA #ADJX+5 THEN INDENT.
|
|
DSADJ1 LDB 5,U GET Y FOR THIS GUY
|
|
TFR D,X AND MAKE IT CURSOR
|
|
LDA ,S RESTORE A
|
|
JSR WRD5FV PRINT THE NAME OF THE ADJUSTMENT
|
|
BSR PRVAL PRINT THE VALUE APPROPRIATELY (AND MESSAGE)
|
|
PULS A,Y,PC AND RETURN
|
|
|
|
PRVAL PSHS Y,D,X
|
|
EXG X,Y
|
|
JSR RCMOSB GET THE VALUE
|
|
CMPB #$FF
|
|
BNE PRVALZ STUPID FIX
|
|
LDB #$EE
|
|
PRVALZ EXG X,Y CHANGE BACK
|
|
EXG X,D
|
|
LDA #ADVALX
|
|
LDB 5,U HEIGHT
|
|
EXG X,D
|
|
PSHS D
|
|
LDD #$3C05
|
|
JSR BLKCLR
|
|
PULS D
|
|
BSR GETMES GET THE ACCOMANYING MESSAGE
|
|
JSR WRD5FV AND PRINT
|
|
PULS Y,D,PC,X AND RETURN
|
|
|
|
GETMES PSHS Y
|
|
LDY 2,U GET TO AREA TO PARSE
|
|
GETMS1 CMPB ,Y++ DO WE RATE OVER THIS ONE
|
|
BHS GETMS1
|
|
LDA -3,Y GRAB THE APPROPRIATE MESSAGE POINTER
|
|
PULS Y,PC AND RETURN
|
|
|
|
PAGE1 JSR SCRCLR
|
|
LDA #$66
|
|
STA TEXCOL GREEN FOR WALLY!
|
|
LDU #ADJTBL
|
|
LDY #CMOS
|
|
LDA #ADJMES
|
|
LDX #ENDADJ PLACE TO FINISH
|
|
|
|
PSHS X ARCHAIC PUSH
|
|
PRNPG1 BSR DISADJ PRINT OUT THE CURRENT LINE
|
|
LEAU 6,U PUSH TO NEXT ENTRY
|
|
LEAY 2,Y
|
|
INCA
|
|
CMPY 0,S SEE IF DONE
|
|
BNE PRNPG1
|
|
LDA #CONTMS TITLES AND STUFF
|
|
JSR WRD5V PUT THEM IN
|
|
PULS X,PC
|
|
|
|
ADJUST JSR CKADJ SEE IF OUT OF WHACK TO BEGIN WITH
|
|
BEQ ADJJJJ LOOKS OK TO ME
|
|
JSR CMINIZ INITIALIZE THE SETTINGS
|
|
ADJJJJ LDX #SPECFN ZERO OUT THE SPECIAL FUNCTION BYTES
|
|
ADJS11 CLR ,X+
|
|
CMPX #ENDADJ
|
|
BLO ADJS11
|
|
JSR MAKCHK PUT DOWN THE APPROPRIATE CHECKSUM
|
|
BSR PAGE1 PUT THE FIRST PAGE UP
|
|
LDU #ADJTBL START OF TABLE
|
|
LDY #CMOS START OF MEMORY
|
|
LDA #ADJMES
|
|
JSR SSTATE STORE THE STATE
|
|
JSR FROBON PUT FROB IN PLACE.
|
|
MAKP ADVSCN PROCESS TO SCAN ADVANCE AND TERMINATE IF HIT.
|
|
*
|
|
* BEGIN STEADY STATE MODE.
|
|
*
|
|
ADJST0 JSR UPDOWN CHECK FOR UP/DOWN
|
|
BSR INCDEC CHECK FOR THRUST/FIRE
|
|
NAP 1,ADJST0
|
|
|
|
INCDEC PULS D
|
|
LDU CRPROC
|
|
STD PD+6,U
|
|
LDA #$20
|
|
STA PD,U
|
|
LDA PIA2 CHECK FOR FIRE UP, FIRE DOWN
|
|
BMI DECME FIRE DOWN...DECREMENT
|
|
BITA #$40
|
|
BNE INCME FIRE UP...
|
|
IDRET JMP [PD+6,U]
|
|
|
|
INCME BSR INC1 ONE INCREMENT
|
|
INCME0 NAP 1,INCME1
|
|
INCME1 LDA PIA2
|
|
BITA #$40
|
|
BEQ IDRET LET GO
|
|
DEC PD,U DELAY
|
|
BNE INCME0
|
|
LDA #5
|
|
STA PD,U
|
|
BRA INCME
|
|
|
|
DECME BSR DEC1
|
|
DECME0 NAP 1,DECME1
|
|
DECME1 LDA PIA2
|
|
BPL IDRET HE LET GO
|
|
DEC PD,U
|
|
BNE DECME0
|
|
LDA #5
|
|
STA PD,U
|
|
BRA DECME
|
|
|
|
INC1 JSR LSTATE GET THE STATE LOADED
|
|
TFR Y,X COPY POINTER
|
|
JSR RCMOSA GET THE CURRENT VALUE
|
|
CMPY #REPLAY IS THIS THE REPLAY LEVEL??
|
|
BEQ INC22
|
|
ADDA #1
|
|
DAA FORM NEW VALUE
|
|
BCS INC11 NO WRAP AROUND
|
|
CMPA 1,U COMPARE TO HIGHEST ALLOWED.
|
|
BHI INC11 TOO HIGH....GET OUT OF HERE
|
|
DEC11 TFR Y,X RESTORE POINTER
|
|
JSR WCMOSA PUT THE NUMBER BACK IN MEMORY
|
|
JSR MAKCHK REFORM THE CHECK BYTE
|
|
JSR PRVAL PRINT OUT THE NEW VALUE AND INFORMATION.
|
|
JSR SPCASE CHECK FOR SPECIAL CASES.
|
|
INC11 RTS AND RETURN
|
|
|
|
DEC1 JSR LSTATE
|
|
TFR Y,X
|
|
JSR RCMOSA
|
|
TSTA
|
|
BEQ INC11 ALL THE WAY DOWN
|
|
CMPY #REPLAY IS THIS THE REPLAY ADJUSTMENT??
|
|
BEQ DEC22
|
|
ADDA #$99
|
|
DAA
|
|
CMPA 0,U SEE IF TOO LOW
|
|
BLO INC11 TOO LOW...BYE
|
|
BRA DEC11 DO THE REST
|
|
|
|
INC22 BSR FINDME
|
|
LDA 1,X
|
|
BRA DEC11 AND FINISH
|
|
|
|
DEC22 BSR FINDME MAKE X POINT TO CLOSEST APPROX
|
|
LDA -1,X FETCH THE VALUE BEFORE
|
|
BRA DEC11
|
|
|
|
FINDME LDX #RVTAB
|
|
FINDM1 CMPA ,X ARE WE NEAR??
|
|
BLS FMBYE YEP
|
|
LEAX 1,X
|
|
CMPX #RVEND
|
|
BLO FINDM1
|
|
FMBYE RTS
|
|
|
|
* REPLAY ADJUSTMENT TABLE
|
|
|
|
FCB 0
|
|
RVTAB FCB 0
|
|
FCB $20
|
|
FCB $25
|
|
FCB $30
|
|
RVEND FCB $50
|
|
FCB $50
|
|
|
|
PROTCK PSHS A,X
|
|
LDA 4,U CHECK PROTECTION CODE
|
|
BEQ PROTOK
|
|
LDX #COINSL COIN PROTECTED
|
|
DECA 1??
|
|
BEQ PROTC1
|
|
LDX #GA1
|
|
PROTC1 JSR RCMOSA
|
|
TSTA
|
|
BEQ PROTOK
|
|
SEC
|
|
PULS A,X,PC
|
|
PROTOK CLC
|
|
PULS A,X,PC
|
|
|
|
FROBON PSHS X,D
|
|
LDB 5,U Y COORD OF FROB
|
|
LDA #FROBX
|
|
TFR D,X
|
|
LDA #FROBM
|
|
JSR WRD5FV
|
|
PULS X,D,PC
|
|
|
|
FROBOF PSHS X,D
|
|
LDB 5,U
|
|
LDA #FROBX
|
|
TFR D,X
|
|
LDD #$0305 WIDTH,HEIGHT
|
|
JSR BLKCLR
|
|
PULS X,D,PC
|
|
|
|
UPDOWN PULS D
|
|
LDU CRPROC
|
|
STD PD+6,U SAVE RETURN ADDRESS
|
|
LDA #$30 TYPOMATIC FIRST DELAY
|
|
STA PD,U INDICATE VIRGIN SCAN
|
|
LDA PIA2 CHECK FOR DOWN
|
|
RORA MOVE UP??
|
|
BCS UPPER
|
|
RORA
|
|
BCS DOWNER
|
|
UDRET JMP [PD+6,U] NO ACTION...RETURN
|
|
|
|
DOWNER BSR DOWN1 GO DOWN ONE (WHATEVER THAT MEANS)
|
|
DOWN2 NAP 1,DOWN3
|
|
DOWN3 LDA PIA2 CHECK IF STILL PRESSED
|
|
BITA #$2 WELL??
|
|
BEQ UDRET DONE WITH THIS PASS...NO LONGER PRESSED
|
|
DEC PD,U TIME ME
|
|
BNE DOWN2 SLEEP ANOTHER FRAME BABE
|
|
LDA #8 FAST RATE
|
|
STA PD,U
|
|
BRA DOWNER NOW DO ANOTHER STEP.
|
|
|
|
UPPER BSR UP1
|
|
UPPER1 NAP 1,UPPER2
|
|
UPPER2 LDA PIA2
|
|
RORA
|
|
BCC UDRET LET GO
|
|
DEC PD,U
|
|
BNE UPPER1
|
|
LDA #8
|
|
STA PD,U
|
|
BRA UPPER
|
|
|
|
DOWN1 JSR LSTATE GET US OUR STATE
|
|
BSR FROBOF CAN THE FROB
|
|
DOWN11 CMPY #ENDADJ-2 ARE WE ON LAST ENTRY??
|
|
BEQ DOWNRT THEN RETURN
|
|
LEAY 2,Y MOVE TO NEXT
|
|
INCA
|
|
LEAU 6,U
|
|
JSR PROTCK CHECK PROTECTION
|
|
BCS DOWN11
|
|
JSR SSTATE
|
|
DOWNRT JSR FROBON NOW TURN THE FROB ON.
|
|
RTS
|
|
|
|
UP1 JSR LSTATE
|
|
BSR FROBOF CAN THE FROB
|
|
UP11 CMPY #CMOS FIRST ENTRY
|
|
BEQ DOWNRT YEP...BYE
|
|
LEAY -2,Y
|
|
DECA
|
|
LEAU -6,U
|
|
JSR PROTCK
|
|
BCS UP11 PROTECTED...PUSH TO NEXT ONE.
|
|
JSR SSTATE
|
|
JMP FROBON TURN THE FROB ON AND RETURN.
|
|
|
|
ADVSCN NAP 1,ADVSC1
|
|
ADVSC1 LDA PIA0 SCAN FOR ADVANCE
|
|
BITA #2
|
|
BEQ ADVSCN JUST KEEP ON SCANNING
|
|
JSR GNCIDE KILL THE TEST PROCESS
|
|
JSR SCRCLR
|
|
ADVSC2 LDA PIA0
|
|
BITA #2
|
|
BNE ADVSC2 WAIT FOR RELEASE
|
|
ADVSC3 LDA SPECFN+3 CLEAR AUDITS??
|
|
ANDA #$F
|
|
BEQ ADVSC4
|
|
CLR SPECFN+3
|
|
JSR MAKCHK
|
|
JSR SCRCLR
|
|
JSR AUDCK4 CLEAR THE AUDIT TOTALS AND PRINT THE MESSAGE.
|
|
NAP $40,ADVSC4
|
|
ADVSC4 LDA SPECFN+5 CHECK AUDIT MESSAGE
|
|
ANDA #$F
|
|
BEQ ADVSC6 NOT THERE
|
|
CLR SPECFN+5
|
|
JSR MAKCHK
|
|
JSR HIGHRS GO AND DO IT
|
|
NAP $40,ADVSC6
|
|
ADVSC6 LDA SPECFN+9 OPERATOR MESSAGE
|
|
ANDA #$F LOOK AT RELEVANCE
|
|
BEQ ADVSC5
|
|
CLR SPECFN+9
|
|
JSR MAKCHK
|
|
LDA #$3A FILL WITH SPACES
|
|
LDX #OPMESS
|
|
LDB #50 50 CHARACTERS
|
|
ADV6ZZ JSR WCMOSA
|
|
DECB
|
|
BNE ADV6ZZ
|
|
JSR SCRCLR CLEAR THE SCREEN
|
|
LDA #OMESM
|
|
JSR WRD7V PRINT A PROMPTING MESSAGE
|
|
LDY #OPMESS POINT AT CMOS AREA
|
|
LDX #$2530 SCREEN ECHO
|
|
LDD #$1980 25 CHARS, SPECIALS ALLOWED
|
|
JSR GETLET GET THE MESSAGE
|
|
LDB #$30 DISPLAY HEIGHT
|
|
LDX #OPL1 PLACE TO STORE RESULT
|
|
LDY #OPMESS CMOS
|
|
JSR SLIDE
|
|
LDA #OMESM
|
|
JSR WRD7V
|
|
JSR REDISP DISPLAY CENTERED TOP LINE
|
|
LDY #OPMESS+50
|
|
LDX #$2540
|
|
LDD #$1980
|
|
JSR GETLET
|
|
LDB #$40
|
|
LDX #OPL2
|
|
LDY #OPMESS+50
|
|
BSR SLIDE
|
|
JSR OPCHK FORM THE CHECK BYTE
|
|
LDX #OMESUM POINT
|
|
JSR WCMOSA AND STORE IT.
|
|
ADVSC5 LDA SPECFN+11 ENTER GOD'S NAME??
|
|
ANDA #$F
|
|
BEQ ADVSC8
|
|
CLR SPECFN+11
|
|
JSR MAKCHK
|
|
JSR GODSET GO AND DO IT
|
|
ADVSC8 LDA SPECFN+7 AUTO CYCLE
|
|
ANDA #$F
|
|
BEQ NOAUTZ
|
|
CLR SPECFN+7
|
|
JSR MAKCHK
|
|
BSR FSCHK
|
|
JMP AUTOCY
|
|
NOAUTZ BSR FSCHK
|
|
****************************************************
|
|
*
|
|
* INHIBIT SWITCHES (ADVANCE IN PARTIC)
|
|
*
|
|
* LDD #0
|
|
* STD SWPROC
|
|
* STD SWPROC+4
|
|
*
|
|
*
|
|
*****************************************************
|
|
JMP INIT NOW GO INTO GAME OVER.
|
|
|
|
FSCHK LDA SPECFN+1
|
|
ANDA #$F FACTORY SETTINGS??
|
|
BEQ ADVS33
|
|
INC ADJSUM
|
|
INC ADJSUM BASH THE CHECK BYTE...THIS WILL RESTORE.
|
|
CLR SPECFN+1 AND UNDO IT
|
|
ADVS33 RTS
|
|
|
|
* PD = ECHO PTR
|
|
* PD+2 = CMOS OF 25 CHARS
|
|
* PD+4 = CMOS OF STORED OFFSET
|
|
* PD+6 = RETURN
|
|
|
|
SLIDE LDU CRPROC
|
|
LDA #$25 START X
|
|
STD PD,U SAVE ECHO POINTER
|
|
PULS D
|
|
STD PD+6,U
|
|
STX PD+4,U
|
|
STY PD+2,U
|
|
LDA #$25
|
|
JSR WCMOSA
|
|
LDA #OPCNTM
|
|
JSR WRD7V
|
|
SLIDE0 NAP 4,SLIDE1
|
|
SLIDE1 LDA PIA0
|
|
BITA #2 DEBOUNCE ADV.
|
|
BNE SLIDE0
|
|
SLIDE5 LDA PIA3 CHECK FOR THRUST OF FIRE RIGHT
|
|
BITA #2 FIRE??
|
|
BEQ SLIDE3 NOPE
|
|
LDX PD+4,U GET MEMORY POINTER
|
|
JSR RCMOSA FETCH THE BYTE
|
|
LDX PD+4,U RESTORE POINTER
|
|
INCA ADD ONE
|
|
CMPA #$3A NO FARTHER RIGHT THAN 38
|
|
BLS SLIDE4
|
|
LDA #$3A
|
|
BRA SLIDE4
|
|
SLIDE3 RORA FIRE LEFT??
|
|
BCC SLIDE6 NOTHING PRESSED...LOOP
|
|
LDX PD+4,U
|
|
JSR RCMOSA
|
|
LDX PD+4,U
|
|
DECA
|
|
CMPA #$13
|
|
BHS SLIDE4
|
|
LDA #$13
|
|
SLIDE4 JSR WCMOSA
|
|
STA PD,U ALSO MAKE X OF ECHO POINTER
|
|
BSR REDISP
|
|
NAP $10,SLIDE5
|
|
SLIDE6 LDA PIA0 CHECK FOR ADVANCE
|
|
BITA #2
|
|
BNE SLIDE7 TIME TO LEAVE
|
|
NAP 4,SLIDE5
|
|
SLIDE7 JSR SCRCLR
|
|
SLIDE8 NAP 4,SLIDE9
|
|
SLIDE9 LDA PIA0
|
|
BITA #2
|
|
BNE SLIDE8
|
|
JMP [PD+6,U]
|
|
|
|
REDISP CLR TXFLAV
|
|
LDX PD,U UPPER LEFT TO ECHO
|
|
LEAX -$100,X
|
|
LDA #90
|
|
LDB #9
|
|
JSR BLKCLR CLEAR THE BLOCK
|
|
LDX PD,U CURSOR
|
|
CLR TXFLAV
|
|
LDY PD+2,U DATA POINTER
|
|
LDB #25
|
|
RDSP1 EXG X,Y
|
|
JSR RCMOSA
|
|
EXG X,Y
|
|
JSR PR57V
|
|
DECB
|
|
BNE RDSP1
|
|
RTS DONE!
|
|
|
|
SSTATE STY YSTOR
|
|
STU USTOR
|
|
STA ASTOR
|
|
RTS
|
|
|
|
LSTATE LDY YSTOR
|
|
LDU USTOR
|
|
LDA ASTOR
|
|
RTS
|
|
|
|
SPCASE CMPY #COINSL COIN SELECT
|
|
BEQ INCOIN
|
|
RTS
|
|
INCOIN TFR Y,X
|
|
JSR RCMOSA GET THE INDEX
|
|
ASLA
|
|
PSHS A
|
|
ASLA
|
|
ADDA ,S+ 6X
|
|
LDX #CSELCT
|
|
LEAX A,X SLIDE DOWN
|
|
INCON1 LEAU 6,U
|
|
LEAY 2,Y
|
|
LDA ,X+
|
|
PSHS X
|
|
TFR Y,X
|
|
JSR WCMOSA
|
|
PULS X
|
|
JSR PRVAL
|
|
CMPY #MINUNT
|
|
BLO INCON1
|
|
|
|
MAKCHK PSHS X,A
|
|
BSR FCHK FIND THE NEW CHECKSUM.
|
|
LDX #ADJSUM
|
|
JSR WCMOSA
|
|
PULS X,A,PC
|
|
|
|
FCHK PSHS B,X,Y
|
|
LDX #CMOS
|
|
LDY #ENDADJ
|
|
BSR FCHKZ
|
|
PULS B,X,Y,PC
|
|
|
|
OPCHK LDX #OPMESS
|
|
LDY #OPMESS+104
|
|
*
|
|
FCHKZ STY XTEMP
|
|
CLRA
|
|
FCHK1 LDB ,X+
|
|
ANDB #$F
|
|
PSHS B
|
|
ADDA ,S+
|
|
CMPX XTEMP
|
|
BNE FCHK1
|
|
ADDA #$37 FUDGE FACTOR
|
|
RTS
|
|
|
|
CKADJ BSR FCHK
|
|
PSHS A
|
|
LDX #ADJSUM
|
|
JSR RCMOSA
|
|
CMPA ,S+
|
|
RTS
|
|
|
|
CKCMOS BSR OPTST CHECK OPERATOR MESSAGE
|
|
BSR CKADJ CHECK ADJ
|
|
BEQ CKSRT0
|
|
LDA #WDATA
|
|
STA WDOG
|
|
JSR CMINIZ
|
|
LDA #WDATA
|
|
STA WDOG
|
|
BSR MAKCHK
|
|
LDA #WDATA
|
|
STA WDOG
|
|
JSR SCRCLR CLEAR THE SCREEN
|
|
LDA #WDATA
|
|
STA WDOG
|
|
BSR AUDCHK CHECK FOR FAULTY AUDITS
|
|
JSR HSCHKV CHECK FOR FAULTY HIGH SCORES
|
|
JSR PUPHSC NOW VALIDATE
|
|
BSR CKADJ
|
|
BEQ CKSNOR
|
|
LDA #CMIMES TELL THE OPERATOR WHAT IS GOING ON.
|
|
CMLOP0 JSR WRD7V
|
|
CMLOP LDA #WDATA
|
|
STA WDOG
|
|
LDA PIA0 CHECK
|
|
BITA #2
|
|
BEQ CMLOP NOT PRESSED CONTINUE TO HANG
|
|
CKSMRT RTS
|
|
CKSRT0 JMP PUPHSC FIX UP THE HIGH SCORE AREA AND RETURN
|
|
CKSNOR LDA #RESMES
|
|
BRA CMLOP0
|
|
|
|
AUDCHK LDX #SLOT1
|
|
LDAB #4 FOUR BAD BYTES IN AUDIT AREA AFTER RESET IS ENOUGH.
|
|
AUDCK2 LDA ,X+ GET A BYTE
|
|
ANDA #$F
|
|
CMPA #9 HEX???
|
|
BLS AUDCK1 NOPE
|
|
DECB ONE MORE
|
|
BEQ AUDCK4
|
|
AUDCK1 CMPX #BKEND DONE??
|
|
BNE AUDCK2
|
|
RTS
|
|
AUDCK4 LDA #BOOKRS
|
|
JSR WRD7V PRINT IT
|
|
LDX #SLOT1
|
|
AUDCK5 CLR ,X+ AND CLEAR EM.
|
|
CMPX #BKEND
|
|
BNE AUDCK5
|
|
OPTRTS RTS
|
|
|
|
OPTST BSR OPTSTZ CHECK THE BYTE
|
|
BEQ OPTRTS ITS OK
|
|
JMP OPSET NO GOOD DEFAULT IT.
|
|
|
|
*
|
|
* COMPARE FOR OPERATOR MESSAGE CHECK BYTE
|
|
* BEQ FOR OK
|
|
*
|
|
|
|
OPTSTZ JSR OPCHK FORM CHECK BYTE
|
|
PSHS A SAVE
|
|
LDX #OMESUM GET THE SUM
|
|
JSR RCMOSA
|
|
CMPA ,S+
|
|
RTS
|
|
*
|
|
*** GETLET GET A STRING OF LETTERS FROM THE USER
|
|
*
|
|
* A = NUMBER OF LETTERS TO FETCH
|
|
* B = $80 FOR ALL, 00 FOR ALPHA ONLY.
|
|
* X = UPPER LEFT OF REGION TO ECHO IN
|
|
* Y = ADDRESS TO STORE IN (RAM OR CMOS)
|
|
*
|
|
* PD = NUMBER OF LETTERS LEFT TO GET
|
|
* PD+1 = 0 FOR SPECIALS ALLOWED, $80 FOR ALPHA ONLY
|
|
* PD+2 = ECHO ADDR
|
|
* PD+4 = ADDRESS TO STORE LETTER
|
|
* PD+6 = RETURN
|
|
GETLET LDU CRPROC
|
|
STD PD,U SAVE COUNT
|
|
STX PD+2,U
|
|
STY PD+4,U
|
|
PULS D GET RETURN ADDRESS
|
|
STD PD+6,U
|
|
GETLZZ NAP 4,GETLZ1
|
|
GETLZ1 BSR GETFIR
|
|
BNE GETLZZ IT IS PRESSED!
|
|
MAKP TIMPRC
|
|
LDD PD+6,U
|
|
STD PD+6,X PASS RETURN ADDRESS
|
|
LDD PD,U
|
|
STD PD,X
|
|
STU PD+2,X PASS US TO KILL
|
|
STX GETLRM SAVE HIS ID
|
|
LDA #$99 SET COLOR TO WHITE
|
|
STA TEXCOL
|
|
CLR TXFLAV MAKE ZERO FLAVOR
|
|
GETLLL CLR GETLST MAKE LAST NOT AVAILABLE.
|
|
CLR GETLST+1
|
|
CLR GETLST+2
|
|
GETLT0 BSR G0SUB CLEAR THE REGION
|
|
GETLT1 NAP 2,GETLT2
|
|
|
|
G0SUB JSR CLRREG
|
|
JSR PRFROB
|
|
LDA #$3A
|
|
JMP LSTY
|
|
|
|
GETFIR LDA PIA2
|
|
BITA #$40 FIRE UP?
|
|
GETFR RTS RETURN PROPER CC
|
|
|
|
GETLT2 LDA PIA2 SCAN FOR DOWN
|
|
RORA CHECK FOR MOVE UP
|
|
LBCS LUP
|
|
RORA
|
|
LBCS LDOWN
|
|
|
|
GETRET BSR GETFIR CHECK FOR FIRE UP
|
|
BEQ GETLT1 NOT PRESSED..LOOP
|
|
|
|
LDA PD+1,U GET ALPHA 'BIT'
|
|
ANDA #$80
|
|
ADDA #$20 TIME FOR CHASE = 1/4
|
|
|
|
G1LET STA PD+1,U
|
|
JSR LLDY GET THE CURRENT LETTER
|
|
CMPA #$5E IS IT A RUB
|
|
BEQ GETRUB
|
|
LDA TXFLAV
|
|
STA GETLST+2
|
|
JSR NOFROB TAKE THE FROB AWAY
|
|
JSR LLDY GET CURRENT LETTER
|
|
LDX PD+2,U GET POINTER
|
|
STX GETLST SAVE CURRENT ECHO POINTER
|
|
JSR PR57V PUT THE LETTER OUT
|
|
STX PD+2,U THIS MAKES NEW POINTER
|
|
JSR PUSHY PUSH THE Y POINTER TO NEXT
|
|
DEC PD,U 1 LESS
|
|
BEQ G2LET
|
|
JSR G0SUB MAKE IT LOOK LIKE WE'RE GETTING NEXT
|
|
|
|
GETLT3 NAP 2,GETLT4
|
|
GETLT4 BSR GETFIR STILL DOWN??
|
|
BEQ GETLT5 NOPE
|
|
|
|
LDA PD,U GET LETTERS LEFT
|
|
DECA 1???
|
|
BEQ GETLT3 NO TYPOMATIC OF LAST LETTER
|
|
DEC PD+1,U ONE LESS COUNT
|
|
BEQ GETLT5
|
|
LDA PD+1,U CHECK FOR 80
|
|
CMPA #$80
|
|
BNE GETLT3
|
|
GETLT5 JSR GETFIR
|
|
BEQ GETLT1 NOT PRESSED...BACK TO MAIN LOOP
|
|
LDA PD+1,U GET COUNTER
|
|
ANDA #$80
|
|
ADDA #4
|
|
BRA G1LET
|
|
G2LET LDX GETLRM KILL THE TIMER PROCESS
|
|
JSR KILL
|
|
JMP [PD+6,U]
|
|
|
|
GETRUB BSR NOFROB MAKE LIKE WE'RE NOT HERE.
|
|
BSR CLRREG
|
|
LDA #$3A
|
|
BSR LSTY STORE A SPACE AT THE CURRENT SPOT
|
|
LDX GETLST
|
|
STX PD+2,U
|
|
LDB GETLST+2
|
|
STB TXFLAV
|
|
INC PD,U ONE MORE CHARACTER TO GET.
|
|
LDY PD+4,U GET THE Y
|
|
LEAY -1,Y MOVE BACK ONE ASSUMING RAM
|
|
CMPY #$C000 CMOS??
|
|
BLO GETRB1 NOPE
|
|
LEAY -1,Y
|
|
GETRB1 STY PD+4,U
|
|
GETRB6 NAP 1,GETRB5
|
|
GETRB5 JSR GETFIR
|
|
BNE GETRB6
|
|
JMP GETLLL NOW GO AND GET THE LAST CHARACTER AGAIN.
|
|
|
|
CLRREG PSHS D
|
|
LDX PD+2,U GET POINTER TO REGION
|
|
LDD #$407 WIDTH,HEIGHT
|
|
JSR BLKCLR CLEAR THE BLOCK
|
|
PULS D,PC
|
|
|
|
PRFROB LDA #$99
|
|
PRFRB1 LDX PD+2,U GET POINTER
|
|
STA 8,X
|
|
STA $108,X
|
|
STA $208,X
|
|
RTS
|
|
|
|
NOFROB CLRA
|
|
BRA PRFRB1
|
|
|
|
LLDY LDY PD+4,U GET Y POINTER
|
|
CMPY #$C000
|
|
BHS LDCMOS CMOS
|
|
LDA ,Y ELSE LOAD THE NUMBER
|
|
RTS
|
|
LDCMOS PSHS X
|
|
LDX PD+4,U LOAD INTO X
|
|
JSR RCMOSA LOAD IT
|
|
PULS X,PC AND RETURN
|
|
|
|
LSTY LDY PD+4,U GET POINTER
|
|
CMPY #$C000 CMOS??
|
|
BHS LSCMOS
|
|
STA ,Y
|
|
RTS
|
|
LSCMOS PSHS X
|
|
LDX PD+4,U
|
|
JSR WCMOSA
|
|
PULS X,PC
|
|
|
|
PUSHY LDY PD+4,U
|
|
LEAY 1,Y
|
|
CMPY #$C000
|
|
BLO PUSHY1 NOT CMOS..DONE
|
|
LEAY 1,Y
|
|
PUSHY1 STY PD+4,U
|
|
LDRET RTS
|
|
|
|
DELAY1 LDX #$2000
|
|
DELAY2 LEAX -1,X
|
|
BNE DELAY2
|
|
RTS
|
|
|
|
LDOWN LDA #10 1 DOWN ITERATION
|
|
LDOWN0 BSR LDN1 1 SHOT
|
|
LDOWN1 BSR DELAY1 SHORT DELAY
|
|
LDB PIA2 SCAN
|
|
BITB #$2
|
|
LBEQ GETRET GONE
|
|
DECA
|
|
BNE LDOWN1
|
|
NAP 1,LDOWN3
|
|
LDOWN3 LDA #1
|
|
BRA LDOWN0
|
|
|
|
LUP LDA #10
|
|
LUP0 BSR LUPP1
|
|
LUP1 BSR DELAY1
|
|
LDB PIA2
|
|
RORB
|
|
LBCC GETRET
|
|
DECA
|
|
BNE LUP1
|
|
NAP 1,LUP3
|
|
LUP3 LDA #1
|
|
BRA LUP0
|
|
|
|
LUPP1 PSHS A SAVE A PLEASE
|
|
JSR LLDY GET THE CURRENT VALUE
|
|
INCA PUSH TO NEXT
|
|
TST PD+1,U SEE IF ALPHA ONLY
|
|
BPL LUPP2 YES
|
|
TST GETLST RUB ALLOWED??
|
|
BEQ LUP1ZZ NOPE.
|
|
CMPA #$5E
|
|
BLS LUPP1Z IN RANGE.
|
|
LUP1ZZ CMPA #$5D HIGHER THAN SLASH
|
|
BLS LUPP1Z
|
|
LDA #$30 THEN MAKE 0
|
|
LUPP1Z CMPA #$3E UNUSED PLACE??
|
|
BNE LUPP3
|
|
INCA
|
|
BRA LUPP3 PRINT TIME
|
|
LUPP2 CMPA #$5A HIGHER THAN Z??
|
|
BLS LUPP2Z
|
|
TST GETLST RUB ALLOWED??
|
|
BEQ LUP2ZZ NO...MOVE TO SPACE
|
|
CMPA #$5E PAST BACK FRBO
|
|
BHI LUP2ZZ YEP
|
|
LDA #$5E MAKE US THE BACK FROB
|
|
BRA LUPP2Z
|
|
LUP2ZZ LDA #$3A THEN MAKE SPACE
|
|
LUPP2Z CMPA #$3B 1 AFTER SPACE (ALPHA)
|
|
BNE LUPP3
|
|
LDA #$41 PUSH TO A.
|
|
LUPP3 JSR LSTY STORE THE NEW ONE.
|
|
JSR CLRREG CUT CLEAR OUT THE REGION
|
|
LDB TXFLAV SAVE THE FLAVOR
|
|
LDX PD+2,U GET CURSOR
|
|
JSR PR57V
|
|
STB TXFLAV RESTORE FLAVOR
|
|
LUPBYE PULS A,PC AND RETURN
|
|
|
|
LDN1 PSHS A
|
|
JSR LLDY GET THE CURRENT VALUE
|
|
DECA
|
|
TST PD+1,U ALPHA ONLY??
|
|
BPL LDN2
|
|
CMPA #$30 COMPARE TO ZERO
|
|
BHS LDN1Z
|
|
TST GETLST
|
|
BEQ LDN1ZZ NO RUB...SET TO SLASH
|
|
LDA #$5E RUB
|
|
BRA LDN1Z
|
|
LDN1ZZ LDA #$5D SET TO SLASH
|
|
LDN1Z CMPA #$3E UNUSED ONE??
|
|
BNE LDN3ZZ
|
|
DECA
|
|
BRA LDN3ZZ
|
|
LDN2 CMPA #$39 BEFORE SPACE
|
|
BNE LDN2Z THEN EXIT
|
|
TST GETLST RUB??
|
|
BEQ LDN2ZZ NO...LOAD Z
|
|
LDA #$5E
|
|
BRA LDN2Z
|
|
LDN2ZZ LDA #$5A THEN LOAD Z
|
|
LDN2Z CMPA #$40 BEFORE A
|
|
BNE LDN3 NOPE
|
|
LDA #$3A MAKE SPACE
|
|
LDN3 CMPA #$5D BELOW RUB
|
|
BNE LDN3ZZ
|
|
LDA #$5A THEN LOAD Z
|
|
LDN3ZZ BRA LUPP3
|
|
|
|
TIMPRC TST PD+1,U DIAGNOSTIC CALL??
|
|
BMI TIMADV
|
|
TIMPR0 NAP $FF,TIMPR1 4 SECONDS OF SLEEP
|
|
TIMPR1 NAP $FF,TIMPR6
|
|
TIMPR6 NAP $82,TIMPR7
|
|
TIMPR7 DEC PD,U
|
|
BNE TIMPR0 8 SECONDS PER LETTER
|
|
TIMPR2 LDX PD+2,U
|
|
LEAU ,X PUT IN U PLEASE
|
|
JSR LLDY LOAD THE CURRENT CHARACTER
|
|
CMPA #$5E RUB???
|
|
BNE TIMAZZ
|
|
LDA #$3A
|
|
JSR LSTY AND STORE IT
|
|
TIMAZZ LDU CRPROC
|
|
JSR KILL
|
|
JMP [PD+6,U]
|
|
TIMADV LDA PIA0
|
|
BITA #2
|
|
BNE TIMPR2 CAN IT ON ADVANCE
|
|
NAP 1,TIMADV
|
|
|
|
END
|