-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathRRTEST2.ASM
More file actions
executable file
·712 lines (644 loc) · 17 KB
/
RRTEST2.ASM
File metadata and controls
executable file
·712 lines (644 loc) · 17 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
FDRET LDU #RAMERJ RAM ERROR RETURN
BRA FDROM0
FDROM LDU #DIG11Z
FDROM0 LDS #HSTK
FDROM5 LDY #FDROM6
LDA #1
JMP DELA1
FDROM6 LDA PIA0
BITA #$2
BNE FDROM5
FDROM1 LDY #FDROM7
LDA #1
JMP DELA1
FDROM7 LDA PIA0
BITA #$2
BEQ FDROM1
FDROM2 LDY #FDROM8
LDA #1
JMP DELA1
FDROM8 LDA PIA0
BITA #2
BNE FDROM2
JMP ,U
AVWAIT PULS D
LDU CRPROC
STD PD+6,U
AVWAIZ LDA PIA0 SEE IF ADVANCE PRESSED
BITA #$2 WELL??
BNE AVWAT2
NAP 1,AVWAIZ WELL, WAIT FOR IT.
AVWAT2 CLR PCRAM
JSR SCRCLR
BRA AVWAT5
AVWAT4 LDA PIA0
BITA #$2 WAIT FOR IT TO BE RELEASED
BEQ AVWAT3
AVWAT5 NAP 2,AVWAT4
AVWAT3 JMP [PD+6,U]
AVCHK PSHS A
LDA PIA0
BITA #$2
BEQ AVCHK1
SEC
PULS A,PC
AVCHK1 CLC
PULS A,PC
*
* DISPLAY BOOKKEEPPING
*
BOOK LDA #$FF
STA STATUS
JSR INITCM COLOR MATRIX PROPER.
BSR AVCHK
BCC BOOK3
BSR AVWAIT WAIT FOR HIM TO LET GO.
BOOK3 LDA #BOOKM
JSR WRD7V PRINT THE BOOKKEEPING MESSAGE
LDU #SLOT1
LDA #AUDMES FIRST OF THE AUDIT MESSAGES
BOOK0 PSHS A SAVE MESSAGE NUMBER
JSR WRD7V PRINT IT.
EXG U,X
JSR RCMOSB GET THE TOP BYTE
PSHS B
JSR RCMOSD
TFR D,Y
PULS B
EXG U,X
BSR BOOKSB PRINT B,Y WITH APPROPRIATE BLANKING
PULS A RESTORE A
INCA
CMPU #BKEND
BLO BOOK0 THANK YOU SIR, MAY I HAVE ANOTHER??
*
* COMPUTE AVERAGE PLAY TIME, AVERAGE LIVES PER GAME
*
LDA #AVTIM
JSR WRD7V
PSHS X
LDX #BKTIME
LDY #BKPLAY PLAYS
JSR BCDIV DO THE DIVIDE
PULS X
LDB QUO GET TOP OF QUOTIENT
LDY QUO+1
BSR BOOKSB PRINT OUT TH 6 WITH THE RITE KIND OF BLANKING
LDA QUO+3 GET 100THS
ANDA #$F 1/10
STA DVTEMP SAVE
LDA QUO+3
BITA #$10 1 IN THE 10'S
BEQ BOOK45
ANDA #$EF TAKE THE BIT AWAY
LSRA 1/2
ADDA #5 RESTORE THE WHATEVER
DAA
BRA BOOK46
BOOK45 LSRA 1/2
BOOK46 ADDA DVTEMP ADD THE 1/10
DAA
TFR A,B
LDA #AVTEND
JSR WRD7V PUT OUT : END
LDA #AVPLA
JSR WRD7V
PSHS X
LDX #BKMEN
LDY #BKPLAY PLAYS
BSR BCDIV DO THE DIVIDE
PULS X
LDB QUO GET TOP OF QUOTIENT
LDY QUO+1
BSR BOOKSB PRINT OUT TH 6 WITH THE RITE KIND OF BLANKING
LDB QUO+3 GET 100THS
LDA #AVPLEN
JSR WRD7V
JSR AVWAIT
JMP ADJV NOW GO DO ADJUSTMENT MODE
BOOKSB TSTB
BEQ BOOK1
LDA #AUDM1
JSR WRD7V FULL SIX DIGITS USED
LDA #AUDM2
JSR WRD7V
BRA BOOK2
BOOK1 LDA #AUDM3
JSR WRD7V
BOOK2 RTS
CBCDA PSHS B
JSR RCMOSA GET THE BYTE
TFR A,B
ANDA #$F
CMPA #$9
BLS CMCDB
LDA #9
CMCDB ANDB #$F0
CMPB #$90
BLS CMCDC
LDB #$90
CMCDC PSHS B
ORA ,S+
PULS B,PC
* DIVIDE - PASS X POINTS AT DIVIDEND
* PASS Y POINTS AT DIVISOR
* QUOTIENT 4 BYTES AT QUO IN BCD WITH 100THS
* QUO: QQ QQ QQ . DD
BCDIV PSHS X,Y,D,U
LDD #0
STD QUO
STD QUO+2 ZERO QUOTIENT IN CASE OF ZERO DIVIDE
BSR CBCDA GET 2 BYTES OF DIVIDEND
STA DIV
BSR CBCDA
STA DIV+1
BSR CBCDA
STA DIV+2
LDD #0
STA DIV+3
STD DIV+4
STA DIVSOR+3
STD DIVSOR+4
TFR Y,X POINT AT DIVISOR
JSR CBCDA
STA DIVSOR
JSR CBCDA
STA DIVSOR+1
JSR CBCDA
STA DIVSOR+2
BNE BCDIV1 NOT ZERO....WE MAY CONTIUE
LDD DIVSOR CHECK FOR ALL ZERO
BEQ DIVEX EXIT...ZERO DIVISOR
BCDIV1 LDU #QUO+2 POINT AT UNITS QUOTIENT VALUE
BCDIV4 TST DIVSOR WE NEED TO SHIFT DIVISOR DOWN
BNE BCDIV2 ITS IN THE RANGE WE LIKE
LEAU -1,U MOVE TO PROPER SIGNIF
LDB #5 BYTES TO SHIFT
LDX #DIVSOR
BCDIV3 LDA 1,X
STA 0,X+
DECB
BNE BCDIV3
CLR ,X SHIFT IN ZEROS
BRA BCDIV4
BCDIV2 LDX #DIV
BCDIV5 BSR SUBME DO A SUBTRACT
BCC BCDIV5 DONE WITH THIS DIGIT
LDY #DIVSOR+5 LAST DIGIT
LDB #5 SHIFT 3 DOWN
BCDIV6 LDA -1,Y GET PREVIOUS BYTE
STA ,Y
LEAY -1,Y PUSH BACK
DECB
BNE BCDIV6
CLR ,Y SHIFTED
LEAU 1,U
CMPU #QUO+3 LAST QUO BYTE
BLS BCDIV5
DIVEX PULS X,Y,D,U,PC
SUBME LDY #DIVSOR POINT AT DIVISOR
LDA #0 MAKE SURE WE FIT
SUBM1 LDB A,X GET DIVIDEND BYTE (MUST BE LARGER)
SUBB ,Y+ WELL??
BHI SUBGO IT IS
BLO SUBBYE IT ISN'T..DONE
INCA
CMPA #6
BLO SUBM1
SUBGO LDB #6
LDY #DIVTMP
SUBGO1 LDA #$99 GET A BYTE
SUBA 6,Y
STA ,Y+
DECB
BNE SUBGO1
LDB #6
CLC
LDA #1
SUBGO2 ADCA ,-Y
DAA
STA ,Y AND STORE BACK
LDA #0
DECB
BNE SUBGO2
LDB #5 INITIAL OFFSET WHILE WALKING
LDY #DIVTMP+6
CLC
SUBGO3 LDA ,-Y GET THE SUBTREHEND
ADCA B,X "SUBTRACT" FROM DIVISOR
DAA
STA B,X STORE BACK TO DIVISOR
DECB
BPL SUBGO3
LDA ,U GET CURRENT QUOTIENT BYTE
ADDA #1
DAA
STA ,U KICK IT
CLC
RTS
SUBBYE SEC
RTS
*
* SOUND TEST
*
SNDSRT JSR SCRCLR CLEAR THE SCREEN
SNDSR1 LDD #$FE01 SET UP FOR SOUND LINE 1
STD PD,U
RTS
SNDCYC PULS D
STD PD+6,U
LDA #$3F
STA SOUND
NAP 1,SNDC55
SNDC55 LDA #$2C
STA SOUND
NAP 1,SNDCY6
SNDCY6 LDA #$3F
STA SOUND
NAP 1,SNDCY1
SNDCY1 LDD PD,U
ANDA #$3F
STA SOUND
LDA #SNDTEX
JSR WRD7V
LDA #$40
STA PD+4,U
SNDCY4 NAP 1,SNDCY5
SNDCY5 JSR AVCHK ADVANCE???
BCS SNDCY3 THEN GO
DEC PD+4,U
BNE SNDCY4
SNDCY3 LDA PD+2,U SEE WHO SET THIS UP??
BNE SNDC90 AUTOCY DID....ALWAYS ADVANCE
LDA PIA0 CHECK MANUAL/AUTO
RORA
BCC SNDC91 MANUAL...DON'T MOVE ON.
SNDC90 LDD PD,U
SEC
ROLA MOVE TO NEXT LINE
INCB
CMPB #7 UP TO LINE 7??
BLO SNDCY2
BSR SNDSR1
SNDCY2 STD PD,U
SNDC91 JMP [PD+6,U]
*
* CMOS RAM TEST
*
CMTEST LDX #CMOS
LDY #RAMALS USE SAMRAM
CMTST1 LDA ,X+ DON'T DO DOUBLES BECAUSE OF HARDWARE BRAIN DAM.
STA ,Y+
CMPX #CMOS+$400 DONE??
BNE CMTST1
LDB #6 ENOUGH ITERATIONS TO ASSURE
ORCC #$3F STOP INTERRUPTS
CMTST2 LDU HSEED
LDY SEED
LDX #CMOS
CMTST3 JSR RAND
STA ,X+
LDA #WDATA
STA WDOG
CMPX #CMOS+$400 DONE??
BNE CMTST3
STY SEED RESTORE SEED
STU HSEED
LDX #CMOS
CMTST4 JSR RAND
EORA ,X+
ANDA #$F
BNE CMEROR
LDA #WDATA
STA WDOG
CMPX #CMOS+$400
BNE CMTST4
DECB ANOTHER PASS...DONE??
BNE CMTST2
BSR RAMBAK
CLC CLEAR IT FOR REAL
RTS AND RETURN
RAMBAK LDU #RAMALS
LDY #CMOS
RAMBK0 LDA ,U+
STA ,Y+
CMPY #CMOS+$400
BNE RAMBK0
RTS
CMEROR BSR RAMBAK
SEC
RTS
* RAM TEST....Y = PLACE TO RETURN IF NO ERROR
* X = SEED TO START WITH
* A = ITERATIONS TO MAKE
RAMTST ORCC #$3F NO INTERRUPTS DURING TEST
CLR RWCNTL SET TO RAM READ
TFR A,DP COUNT AT DP.
TFR X,D START WITH A PASSED SEED.
RAM2 TFR D,U SAVE THE SEED
RAM0 LDX #0 MEMORY POINTER
RAM3 COMB DONT ASK
BITB #9
BNE RAM4
COMB
RORA
RORB
BRA RAM6
RAM4 COMB
BITB #9
BNE RAM5
RORA
RORB
BRA RAM6
RAM5 LSRA
RORB
RAM6 STD ,X++
EXG X,D SINCE IRQ RUNS OUT OF RAM, STROKE ROVER
TSTB
BNE RAM6B EVERY 256!
LDB #WDATA
STB WDOG HAVE A BONE..EVER BEEN BONED.....
TFR DP,B CHECK IS NORMAL DIAGS
CMPB #$FF FF MEANS FRONT DOOR
BNE RAM6C
LDB PIA0 CHECK FOR ADV.
BITB #2
BEQ RAM6C NOT PRESSED.
JMP ,Y TIME TO RETURN
RAM6C CLRB RETURN B TO ZERO
RAM6B EXG X,D TRADE BACK
CMPX #RAMTOP DONE??
BNE RAM3 NOPE..CONTINUE
*
TFR U,D RESTORE SEED.
LDX #0
RAM7 COMB
BITB #9
BNE RAM8
COMB
RORA
RORB
BRA RAM10
RAM8 COMB
BITB #9
BNE RAM9
RORA
RORB
BRA RAM10
RAM9 LSRA
RORB
RAM10 CMPD ,X++
BNE RERROR RAM ERROR!
RAM25 EXG X,D CHECK FOR END OF PAGE
TSTB
BNE RAM17
LDB #WDATA
STB WDOG
TFR DP,B SEE IF NORMAL RUN
CMPB #$FF FRONT DOOR??
BNE RAM17C NOPE
LDB PIA0 CHECK ADV.
BITB #2
BEQ RAM17C
JMP ,Y JUST RETURN (NO ERRORS)
RAM17C CLRB
RAM17 EXG X,D TRADE BACK
CPX #RAMTOP DONE??
BNE RAM7
TFR D,U SHOVE NEW SEED OVER
TFR DP,A
CMPA #$FF FF INDICATES FRONT DOOR
BNE RAM99
TFR U,D
JMP RAM0 DO ANOTHER ITERATION IN THIS TEST.
RAM99 DECA TAKE ONE AWAY
TFR A,DP RETURN
CMPA #$80 ZERO OUT IN AUTO CYCLE???
BEQ RAM99Z YEP....
TSTA SET FOR BELOW BRANCH
TFR U,D MAKE SEED AND SAVED SEED LOOK ALIKE
LBNE RAM0 DO ANOTHER ITERATION
RAM99Z LDB #1 SET BACK TO ROM
STB RWCNTL
JMP ,Y RETURN
RERROR LEAX -2,X BACK TO ERROR POINT
EORA ,X FIND DIFFERENCE.
EORB 1,X
TSTA NO DIFFERENCE?
BNE RERR2 DIFF.
TSTB
BNE RERR2
LEAX 2,X UNDO THIS BULLSHIT...MAYBE ALPHA BABY.
BRA RAM25 AND CONTINUE
RERR2 LDU #$30 FIND BANK NUMBER
EXG X,D
CLRB
EXG X,D
RERR0 CMPX #0
BEQ RERR1 DONE.
LEAX -$100,X
LEAU $10,U
CMPU #$30
BLS RERR0
LDU #$10
BRA RERR0
RERR1 LEAU 1,U
ASRA
BCS RERR5 THIS IS THE BIT
ASRB
BCS RERR5
BRA RERR1
RERR5 TFR U,D BRING THE BANK,BIT INTO B
LDA #1 INDICATE RAM ERROR
STA RWCNTL BACK TO THAT JAZZ
LDS #RERR6 RETURN HERE
BRA PULSE PULSE THE LEDS
RERR6 LDA #RAM>>8
TFR A,DP
TFR CC,A
COMA
BITA #$C0 INITIAL TEST???
BEQ RER098 YEP
LDA #FDRAMM
BRA RER099
RER098 LDA #RERRM
RER099 LDS #HSTK SET UP THE STACK
JSR SCRCLR
JSR WRD7V PRINT THE MESSAGE.
TFR CC,A SEE WHICH TEST
BITA #$40 FIRQ SAYS FRONT DOOR
BNE REROR7 NOPE
JMP FDRET DO THE FRONT DOOR RETURN
REROR7 LDY #INIT OTHERWISE START...TRY AND RUN THE GAME.
BRA DELAY
DELAY LDA #32
DELA1 LDX #$5800
DELA2 LEAX -1,X
LDB #WDATA
STB WDOG
CMPX #0
BNE DELA2
DECA
BNE DELA1
JMP ,Y RETURN
*
* PULSE......PUT SOME CRAP IN LED'S
* LOW HALF OF A IS ERROR CODE...
* BOTH HALVES OF B ARE THE RELEVANT DATA.
*
PULSE TFR D,U SAVE A,B
LDA #2
TFR A,DP
PULSE0 TFR U,D
LDY #PULSE1
BRA PSSUB
PULSE1 LDA #2
LDY #PULSE2
BRA DELA1
PULSE2 LDY #PULSE3
BRA BLKLED
PULSE3 LDA #1
LDY #PULSE4
BRA DELA1
PULSE4 TFR U,D GET DATA BACK
TFR B,A SHIFT B DOWN
LSRA
LSRA
LSRA
LSRA PROPER HALF
LDY #PULSE5
BRA PSSUB PULSE IT.
PULSE5 LDA #2
LDY #PULSE6
BRA DELA1
PULSE6 LDY #PULSE7
BRA BLKLED
PULSE7 LDA #1
LDY #PULSE8
BRA DELA1
PULSE8 TFR U,D
TFR B,A
LDY #PULSE9
BRA PSSUB
PULSE9 LDA #2
LDY #PULS10
BRA DELA1
PULS10 LDY #PULS11
BRA BLKLED
PULS11 LDA #5
LDY #PULS12
JMP DELA1
PULS12 TFR DP,A SEE IF FIRST PASS??
DECA
TFR A,DP
BNE PULSE0
LDY #PULS95
BRA BLKLED BLANK EM.
PULS95 TFR U,D RESTORE D
JMP ,S AND RETURN
BLKLED LDA #$3C
STA PIA0+1
INCA
STA PIA1+1
LDA #$C0
STA PIA1
JMP ,Y AND RETURN
* PSSUB - PUT LOW HALF OF A TO LEDS
PSSUB TFR A,B SAVE A COPY.
RORA BIT 0 - CARRY
RORA BIT 0 - BIT 7
RORA BIT 0 - BIT 6
ANDA #$C0
STA PIA1 THOSE BITS OUT.
LDA #$34 ASSUME ZERO
BITB #$4 SEE IF 1
BEQ PSSUB1 NOPE
LDA #$3C
PSSUB1 STA PIA1+1 THATS ALL FOR THAT BIT
LDA #$34
BITB #$8
BEQ PSSUB2
LDA #$3C
PSSUB2 STA PIA0+1
JMP ,Y AND RETURN
ROMTST ORCC #$3F NO INTERRUPTS WHILE THIS RUNS
LDX #ROMTAB INDEX INTO TABLE
ROM0 CMPX #ROMEND DONE??
BEQ ROMDUN YEP
LDA 1,X LOOK TO SEE IF PART STUFFED??
BEQ ROMBOT NOPE...MOVE TO NEXT
LDA ,X GET BASE
CLRB
TFR D,U USE U TO POINT THROUGH
LDA #WDATA FOR ROVER
ROM1 ADDB ,U+ ADD A BYTE
STA WDOG
EXG D,U SEE IF DUN
CMPA 2,X ARE WE TO NEXT PART
EXG D,U CHANGE BACK
BNE ROM1 NOPE
CMPB 1,X EXPECTED SUM???
BNE ROMERR NOPE....LETS SEND OUT PROBLEM WARNING.
ROMBOT LEAX 2,X MOVE TO NEXT PART
BRA ROM0
ROMERR LDA ,X GET THE ADDRESS OF THE BAD PART
LSRA
LSRA
LSRA
LSRA
CMPA #$D ONE OF TOP 3 PARTS??
BLO ROMER1 NOPE
SUBA #4 GROUP THEM WITH THE LOWER PARTS
ROMER1 ADDA #1 MAKE ERRORS FROM 1-12
DAA AND MAKE BCK
TFR A,B
LDA #2 ROM ERROR
LDS #RERR3 RETURN
JMP PULSE AND SEND OUT THE CODE
RERR3 LDA #RAM>>8
TFR A,DP
LDA #WDATA
STA WDOG
LDS #HSTK
JSR SCRCLR
TFR CC,A
COMA
BITA #$C0 INITIAL TEST??
BEQ RERR94
LDA #FDROMM
BRA RERR95
RERR94 LDA #ROMERM
RERR95 JSR WRD7V PUT THE MESSAGE ON THE SCREEN
TFR CC,B SEE WHERE WE CAM FROM
BITB #$40 FIRQ SAYS FRONT DOOR
BNE ROMER3
JMP FDROM
ROMER3 LDY #INIT NOW TRY AND RUN THE GAME
JMP DELAY BUT NOT UNTIL A SHORT DELAY.
ROMDUN JMP ,Y ALL ROMS OK...RETURN.
* ROMTAB - THIS TABLE INDICATES THE BASE OF THE PART, AND THE
* RESULTING SUM. IF SUM=0 THEN PART IS NOT STUFFED.
ROMTAB FCB $00,0 0000
FCB $10,0 1000
FCB $20,0 2000
FCB $30,0 3000
FCB $40,0 4000
FCB $50,0 5000
FCB $60,0 6000
FCB $70,0 7000
FCB $80,0 8000
FCB $90,0 9000
FCB $A0,0 A000
FCB $B0,0 B000
FCB $C0,0 C000
FCB $D0,0 D000
FCB $E0,0 E000
FCB $F0,0 F000
ROMEND FCB 0
FCB 0 CHECK BYTE (FUDGER) FOR THIS PART ($F000)
FCC '(C)1982 WILLIAMS ELEC.INC'
ORG $FFF0
FDB PWRUPV,PWRUPV,PWRUPV,PWRUPV
FDB PWRUPV
FDB PWRUPV,PWRUPV,PWRUPV
END