-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathRRTESTB.ASM
More file actions
executable file
·1066 lines (989 loc) · 26.3 KB
/
RRTESTB.ASM
File metadata and controls
executable file
·1066 lines (989 loc) · 26.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
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