-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsnake_asm.txt
More file actions
972 lines (972 loc) · 22.9 KB
/
snake_asm.txt
File metadata and controls
972 lines (972 loc) · 22.9 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
1010 .TF GAME
1020 *--------------------------------
1030 * CONSTANT
1040 *--------------------------------
1050 GETKEY .EQ $C000
1060 CLRKEY .EQ $C010
1070 PRTHEX .EQ $FDDA
1080 PRTCHR .EQ $FDED
1090 *--------------------------------
1100 * START PROGRAM
1110 *--------------------------------
1120 SET LDA #$00
1130 TAX
1140 .1 STA SROW,X
1150 INX
1160 BNE .1
1170 LDA #$31
1180 STA ROMNUM
1190 LDA #$03
1200 STA LIFE
1210 LDA #$C0
1220 STA SOUND+13
1230 LDX #3
1240 .2 LDA KEYSTR,X
1250 STA KEYDAT,X
1260 DEX
1270 BPL .2
1280 *--------------------------------
1290 * PRINT SCREEN
1300 *--------------------------------
1310 LDA $C051
1320 LDA $C052
1330 JSR PRINT
1340 .HS 80800D04
1350 .AS "BLOAD HIGH SCORE"
1360 .HS 8D
1370 JSR PRINT
1380 .HS FF0A00
1390 .AS "THE ANNOYING SNAKE"
1400 .HS 0D
1410 .AS "MADE BY ALON FLIESS 1987 WHITEFISH BAY"
1420 .HS 0D0D
1430 .AS " HIGH SCORE TABLE"
1440 .HS 0D
1450 .AS " NAME ROOM LEVEL SCORE"
1460 .HS 0D
1470 .AS " ---- ---- ----- -----"
1480 .HS 8D
1490 LDA #10
1500 STA NCOUNT
1510 PTBLE LDX #00
1520 .2 LDY #14
1530 .1 LDA $2000,X
1540 JSR PRTCHR
1550 INX
1560 DEY
1570 BNE .1
1580 LDA #$A0
1590 JSR PRTCHR
1600 JSR PRTCHR
1610 LDA $2000,X
1620 JSR PRTCHR
1630 LDA #$A0
1640 LDY #9
1650 .3 JSR PRTCHR
1660 DEY
1670 BNE .3
1680 INX
1690 LDA $2000,X
1700 JSR PRTCHR
1710 INX
1720 LDA #$A0
1730 LDY #7
1740 .4 JSR PRTCHR
1750 DEY
1760 BNE .4
1770 LDA $2000,X
1780 JSR PRTHEX
1790 INX
1800 LDA $2000,X
1810 JSR PRTHEX
1820 INX
1830 LDA #$8D
1840 JSR PRTCHR
1850 DEC NCOUNT
1860 BNE .2
1870 JSR PRINT
1880 .HS 80800D0D
1890 .AS "MOVE-"
1900 .HS 0D
1910 .AS " I"
1920 .HS 0D
1930 .AS " J L"
1940 .HS 0D
1950 .AS " M"
1960 .HS 0D0D
1970 .AS "LEVEL (1-5)"
1972 .AS -"?"
1980 *--------------------------------
1990 * GET LEVEL
2000 *--------------------------------
2010 GET.LEVEL
2020 .2 LDA GETKEY
2030 BPL .2
2040 STA CLRKEY
2050 CMP #$B6
2060 BCS .2
2070 CMP #$B1
2080 BCC .2
2090 STA SLEVEL
2100 JSR PRTCHR
2110 AND #$07
2120 TAX
2130 DEX
2140 LDA LEVELT,X
2150 STA LEVEL
2160
2170 *--------------------------------
2180 * GET NEW KEYS
2190 *--------------------------------
2200 DEFKEY JSR PRINT
2210 .HS FF8080
2220 .AS "DO YOU WANT TO CHANGE KEYS"
2225 .AS -"?"
2230 .1 LDA GETKEY
2240 BPL .1
2250 STA CLRKEY
2260 JSR PRTCHR
2270 CMP #$D9
2280 BEQ .2
2290 JMP STRTGM
2300 .2 JSR PRINT
2310 .HS 80800D0D
2320 .AS "DOWN"
2325 .AS -"?"
2330 .3 LDA GETKEY
2340 BPL.3
2350 STA CLRKEY
2360 STA KEYDAT
2370 JSR PRTCHR
2380 JSR PRINT
2390 .HS 80800D
2400 .AS "RIGHT"
2405 .AS -"?"
2410 .4 LDA GETKEY
2420 BPL .4
2430 STA CLRKEY
2440 STA KEYDAT+1
2450 JSR PRTCHR
2460 JSR PRINT
2470 .HS 80800D
2480 .AS "UP"
2485 .AS -"?"
2490 .5 LDA GETKEY
2500 BPL .5
2510 STA CLRKEY
2520 STA KEYDAT+2
2530 JSR PRTCHR
2540 JSR PRINT
2550 .HS 80800D
2560 .AS "LEFT"
2565 .AS -"?"
2570 .6 LDA GETKEY
2580 BPL .6
2590 STA CLRKEY
2600 STA KEYDAT+3
2610 JSR PRTCHR
2620 JSR PRINT
2630 .HS 80800D0D0D0D0D
2640 .AS "PRESS SPACE BAR TO CONTINU"
2645 .AS -"E"
2650 .7 LDA GETKEY
2660 BPL .7
2670 STA CLRKEY
2680 CMP #$A0
2690 BNE .7
2700 *--------------------------------
2710 * START GAME
2720 *--------------------------------
2730 STRTGM LDA $C050
2740 LDA $C053
2750 LDA $C054
2760 LDA $C056
2770 START JSR SETSCR
2780 LDA ROMNUM
2790 AND #$0F
2800 ASL
2810 STA LENGTH
2820 *--------------------------------
2830 * MAIN LOOP
2840 *--------------------------------
2850 LOOP LDA TAIL
2860 CLC
2870 ADC LENGTH
2880 CMP HEAD
2890 BNE .1
2900 LDX TAIL
2910 LDA ARRAYX,X
2920 STA COLOMN
2930 LDA ARRAYY,X
2940 STA SROW
2950 LDA #$00
2960 STA SCOLOR
2970 SEC
2980 JSR SPLOT
2990 INC TAIL
3000 .1 LDX HEAD
3010 DEX
3020 LDA ARRAYX,X
3030 STA COLOMN
3040 LDA ARRAYY,X
3050 STA SROW
3060 LDA #$0F
3070 STA SCOLOR
3080 SEC
3090 JSR SPLOT
3100 LDX HEAD
3110 LDA ARRAYX,X
3120 STA COLOMN
3130 LDA ARRAYY,X
3140 STA SROW
3150 LDA #$01
3160 STA SCOLOR
3170 SEC
3180 JSR SPLOT
3190 BCC .3
3200 CMP #$03
3210 BNE .4
3220 JMP NXTSCR
3230 .4 CMP #$02
3240 BEQ .5
3250 CMP #$0F
3260 BNE .6
3270 .5 JMP CRASH
3280 .6 JSR EATBOX
3290 .3 LDA ROMNUM
3300 AND #$0F
3310 ASL
3320 ASL
3330 ASL
3340 ADC LEVEL
3350 EOR #$FF
3360 CLC
3370 ADC #$01
3380 STA DUR
3390 LDX SCOUNT
3400 LDA MUSICT,X
3410 STA FREQ
3420 INC SCOUNT
3430 LDA SCOUNT
3440 CMP #41
3450 BNE .8
3460 LDA #$00
3470 STA SCOUNT
3480 .8 JSR SOUND
3490 LDA GETKEY
3500 BPL .7
3510 JSR GETDIR
3520 .7 STA CLRKEY
3530 LDX HEAD
3540 LDA ARRAYX,X
3550 CLC
3560 ADC DX
3570 INX
3580 STA ARRAYX,X
3590 DEX
3600 LDA ARRAYY,X
3610 CLC
3620 ADC DY
3630 INX
3640 STA ARRAYY,X
3650 STX HEAD
3660 JMP LOOP
3670 *--------------------------------
3680 * GET DIRECTION
3690 *--------------------------------
3700 GETDIR LDX #$03
3710 .2 CMP KEYDAT,X
3720 BEQ .1
3730 DEX
3740 BPL .2
3750 CMP #147
3760 BNE .3
3770 LDA #$FF
3780 EOR SOUND+13
3790 STA SOUND+13
3800 .3 RTS
3810 .1 LDA DIRX,X
3820 STA DX
3830 LDA DIRY,X
3840 STA DY
3850 RTS
3860 KEYDAT .HS CDCCC9CA
3870 DIRX .HS 000100FF
3880 DIRY .HS 0100FF00
3890 *--------------------------------
3900 * SET SCREEN
3910 *--------------------------------
3920 SETSCR JSR PRINT
3930 .HS FF80800D04
3940 .AS "BLOAD ROOM "
3950 ROMNUM .HS 008D
3960 SETBOX JSR HOME
3970 LDA ROMNUM
3980 AND #$0F
3990 CLC
4000 ADC #$02
4010 STA COUNT
4020 STA BOXNUM
4030 .2 LDY #$01
4040 .1 JSR RANDOM
4050 LSR
4060 LSR
4070 CMP #40
4080 BCS .1
4090 STA SROW,Y
4100 DEY
4110 BPL .1
4120 CLC
4130 JSR SPLOT
4140 BCS .2
4150 LDA COUNT
4160 ADC #$04
4170 STA SCOLOR
4180 SEC
4190 JSR SPLOT
4200 DEC COUNT
4210 BNE .2
4220 JSR SCOREP
4230 JSR BOXP
4240 JSR LIFEP
4250 JSR ROOMP
4260 LDA #38
4270 STA ARRAYX+1
4280 STA ARRAYX
4290 STA ARRAYY
4300 LDA #37
4310 STA ARRAYY+1
4320 LDA #$FF
4330 STA DY
4340 LDA #$00
4350 STA DX
4360 STA TAIL
4370 LDA #$01
4380 STA HEAD
4390 STA CLRKEY
4400 RTS
4410 *--------------------------------
4420 * HOME/CLEAR TEXT SCREEN
4430 *--------------------------------
4440 HOME LDX #20
4450 .2 LDA TBLELO,X
4460 STA $F9
4470 LDA TBLEHI,X
4480 STA $FA
4490 LDY #39
4500 LDA #$A0
4510 .1 STA ($F9),Y
4520 DEY
4530 BPL .1
4540 INX
4550 CPX #24
4560 BNE .2
4570 RTS
4580 *-------------------------------
4590 * PRINT THE SCORE
4600 *-------------------------------
4610 SCOREP JSR PRINT
4620 .HS 0015
4630 .AS "SCORE"
4635 .AS -":"
4640 LDA SCORE+1
4650 JSR PRTHEX
4660 LDA SCORE
4670 JSR PRTHEX
4680 RTS
4690 *-------------------------------
4700 * PRINT NUMBER OF BOX
4710 *-------------------------------
4720 BOXP JSR PRINT
4730 .HS 1E17
4740 .AS "BOX"
4745 .AS -":"
4750 SED
4760 LDA BOXNUM
4770 CLC
4780 ADC #$00
4790 CLD
4800 JSR PRTHEX
4810 RTS
4820 *-------------------------------
4830 * PRINT NUMBER OF LIFE
4840 *-------------------------------
4850 LIFEP JSR PRINT
4860 .HS 0C17
4870 .AS "LIFE"
4875 .AS -":"
4880 LDA LIFE
4890 ORA #$B0
4900 JSR PRTCHR
4910 RTS
4920 *-------------------------------
4930 * PRINT ROOM NUMBER
4940 *-------------------------------
4950 ROOMP JSR PRINT
4960 .HS 1517
4970 .AS "ROOM"
4975 .AS -":"
4980 LDA ROMNUM
4990 ORA #$80
5000 JSR PRTCHR
5010 RTS
5020 *-------------------------------
5030 * COLLISION
5040 *-------------------------------
5050 CRASH LDX #$04
5060 LDA #200
5070 STA FREQ
5080 .1 LDA #$02
5090 STA DUR
5100 JSR SOUND
5110 INC FREQ
5120 LDA FREQ
5130 CMP #230
5140 BNE .1
5150 .2 LDA #$02
5160 STA DUR
5170 JSR SOUND
5180 DEC FREQ
5190 LDA FREQ
5200 CMP #200
5210 BNE .2
5220 DEX
5230 BNE .1
5240 JSR ERASES
5250 DEC LIFE
5260 LDA LIFE
5270 CMP #$FF
5280 BNE .3
5310 JMP GMOVER
5320 .3 JMP START
5330 *-------------------------------
5340 * ERASE THE SNAKE
5350 *-------------------------------
5360 ERASES LDX TAIL
5370 LDA #230
5380 STA FREQ
5390 LDA #$00
5400 STA SCOLOR
5410 .1 LDA ARRAYX,X
5420 STA COLOMN
5430 LDA ARRAYY,X
5440 STA SROW
5450 STX TEMP2
5460 SEC
5470 JSR SPLOT
5480 LDX TEMP2
5490 LDA #$08
5500 STA DUR
5510 JSR SOUND
5520 DEC FREQ
5530 INX
5540 CPX HEAD
5550 BNE .1
5560 RTS
5570 *-------------------------------
5580 * NEXT SCREEN
5590 *-------------------------------
5600 NXTSCR JSR ERASES
5610 INC ROMNUM
5620 LDA ROMNUM
5630 CMP #$39
5640 BNE .2
5650 DEC ROMNUM
5680 JMP END
5690 .2 LDA SLEVEL
5700 AND #$07
5710 CMP LIFE
5720 BCC .3
5730 INC LIFE
5740 .3 JMP START
5750 *-------------------------------
5760 * COLLISION IN BOX
5770 *-------------------------------
5780 EATBOX LDX #50
5790 STX FREQ
5800 .1 LDX #$02
5810 STX DUR
5820 JSR SOUND
5830 DEC FREQ
5840 LDX FREQ
5850 CPX #$20
5860 BNE .1
5870 .2 LDX #$02
5880 STX DUR
5890 JSR SOUND
5900 INC FREQ
5910 LDX FREQ
5920 CPX #50
5930 BNE .2
5940 PHA
5950 SED
5960 CLC
5970 ADC #$00
5980 ADC SCORE
5990 STA SCORE
6000 LDA #$00
6010 ADC SCORE+1
6020 STA SCORE+1
6030 CLD
6040 JSR SCOREP
6050 PLA
6060 CLC
6070 ADC LENGTH
6080 STA LENGTH
6090 DEC BOXNUM
6100 BNE .3
6110 JSR BOXP
6120 LDA #$F5
6130 STA FREQ
6140 LDA #$D0
6150 STA DUR
6160 JSR SOUND
6170 LDA #$03
6180 STA SCOLOR
6190 LDX #$03
6200 .4 LDA OPENX,X
6210 STA COLOMN
6220 LDA OPENY,X
6230 STA SROW
6240 SEC
6250 STX TEMP2
6260 JSR SPLOT
6270 LDX TEMP2
6280 DEX
6290 BPL .4
6300 LDA #$05
6310 STA FREQ
6320 STA DUR
6330 JSR SOUND
6340 RTS
6350 .3 JSR BOXP
6360 RTS
6370 OPENX .HS 18271000
6380 OPENY .HS 00182710
6390 *------------------------------
6400 * GAME OVER
6410 *------------------------------
6420 GMOVER LDA $C051
6430 LDA $C052
6440 JSR PRINT
6450 .HS FF0000
6460 .AS " ***********"
6470 .HS 0D
6480 .AS " *GAME OVER*"
6490 .HS 0D
6500 .AS " ***********"
6510 .HS 0D0D0D
6520 .AS "YOU DIDN'T FINISH, MAYBE NEXT TIME."
6530 .HS 0D
6540 .AS "TRY AGAIN!!!"
6550 .HS 0D0D80
6560 JSR ROOMP
6570 JSR SCOREP
6580 JMP HSCORE
6590 *-------------------------------
6600 * END OF GAME
6610 *-------------------------------
6620 END LDA $C051
6630 LDA $C052
6635 JSR HOME
6640 JSR PRINT
6650 .HS FF0000
6660 .AS " ************"
6670 .HS 0D
6680 .AS " *YOU DID IT*"
6690 .HS 0D
6700 .AS " ************"
6710 .HS 0D0D
6720 .AS "LEVEL"
6725 .AS -" "
6730 LDA SLEVEL
6740 JSR PRTCHR
6750 CMP #$B5
6760 BEQ .1
6770 JSR PRINT
6780 .HS 80800D0D
6790 .AS "TRY NOW LEVEL"
6795 .AS -" "
6800 LDX SLEVEL
6810 INX
6820 TXA
6830 JSR PRTCHR
6840 .1 JSR SCOREP
6850 JSR ROOMP
6860 HSCORE LDA SCORE+1
6870 STA CLRKEY
6880 CMP $20B2
6890 BCS .2
6900 .4 JMP .12
6910 .2 BNE .3
6920 LDA SCORE
6930 CMP $20B3
6940 BCC .4
6950 BEQ .4
6960 .3 JSR PRINT
6970 .HS 000B0D
6980 .AS "NEW HIGH SCORE!!"
6985 .AS -"!"
6990 LDX #162
7000 .7 LDA SCORE+1
7010 CMP $2000+16,X
7020 BCC .6
7030 BNE .5
7040 LDA SCORE
7050 CMP $2000+17,X
7060 BCC .6
7070 .5 STX TEMP
7080 LDY #18
7090 .14 LDA $2000,X
7100 STA $2000+18,X
7110 INX
7120 DEY
7130 BNE .14
7140 LDA TEMP
7150 SEC
7160 SBC #18
7170 TAX
7180 BCS .7
7190 LDX #$00
7200 JMP VERYFH
7210 .6 JSR PRINT
7220 .HS 80800D0D
7230 .AS "INPUT YOUR NAME. (UP TO 14 LETTERS)."
7240 .HS 0D
7250 .AS -"?"
7260 LDY #14
7270 .8 LDA GETKEY
7280 BPL .8
7290 STA CLRKEY
7300 CMP #$8D
7310 BEQ .9
7320 STA $2000+18,X
7330 JSR PRTCHR
7340 INX
7350 DEY
7360 BNE .8
7370 .9 CPY #$00
7380 BEQ .10
7390 LDA #$A0
7400 .11 STA $2000+18,X
7410 INX
7420 DEY
7430 BNE .11
7440 .10 LDA ROMNUM
7450 ORA #$80
7460 STA $2000+18,X
7470 INX
7480 LDA SLEVEL
7490 STA $2000+18,X
7500 INX
7510 LDA SCORE+1
7520 STA $2000+18,X
7530 INX
7540 LDA SCORE
7550 STA $2000+18,X
7560 JSR PRINT
7570 .HS 80800D04
7580 .AS "BSAVE HIGH SCORE,A$2000,L$B4"
7590 .HS 8D
7600 .12 JSR PRINT
7610 .HS 0012
7620 .AS "PRESS SPACE BAR TO CONTINU"
7625 .AS -"E"
7630 L13 LDA GETKEY
7640 BPL L13
7650 STA CLRKEY
7660 CMP #$A0
7670 BNE L13
7680 JMP SET
7690 *-------------------------------
7700 * WRITE THE FIRST HIGH SCORE
7710 *-------------------------------
7720 VERYFH JSR PRINT
7730 .HS 80800D0D
7740 .AS "INPUT YOUR NAME. (UP TO 14 LETTERS)."
7750 .HS 0D
7760 .AS -"?"
7770 LDY #14
7780 .8 LDA GETKEY
7790 BPL .8
7800 STA CLRKEY
7810 CMP #$8D
7820 BEQ .9
7830 STA $2000,X
7840 JSR PRTCHR
7850 INX
7860 DEY
7870 BNE .8
7880 .9 CPY #$00
7890 BEQ .10
7900 LDA #$A0
7910 .11 STA $2000,X
7920 INX
7930 DEY
7940 BNE .11
7950 .10 LDA ROMNUM
7960 ORA #$80
7970 STA $2000,X
7980 INX
7990 LDA SLEVEL
8000 STA $2000,X
8010 INX
8020 LDA SCORE+1
8030 STA $2000,X
8040 INX
8050 LDA SCORE
8060 STA $2000,X
8070 JSR PRINT
8080 .HS 80800D04
8090 .AS "BSAVE HIGH SCORE,A$2000,L$B4"
8100 .HS 8D
8110 .12 JSR PRINT
8120 .HS 0012
8130 .AS "PRESS SPACE BAR TO CONTINU"
8135 .AS -"E"
8140 V13 LDA GETKEY
8150 BPL V13
8160 STA CLRKEY
8170 CMP #$A0
8180 BNE V13
8190 JMP SET
8200 *--------------------------------
8210 * RANDOM
8220 *--------------------------------
8230 RANDOM STX TEMP
8240 SEC
8250 LDA R
8260 ADC R+3
8270 ADC R+4
8280 STA R
8290 LDX #3
8300 .1 LDA R,X
8310 STA R+1,X
8320 DEX
8330 BPL .1
8340 LDX TEMP
8350 RTS
8360 R .BS 5
8370 *--------------------------------
8380 * SOUND ROUTINE
8390 *--------------------------------
8400 SOUND PHP
8410 PHA
8420 TXA
8430 PHA
8440 TYA
8450 PHA
8460 LDY #$00
8470 .1 LDX FREQ
8480 LDA BEEP
8490 .2 NOP
8500 DEX
8510 BEQ .1
8520 DEY
8530 BNE .2
8540 DEC DUR
8550 BNE .2
8560 PLA
8570 TAY
8580 PLA
8590 TAX
8600 PLA
8610 PLP
8620 RTS
8630 BEEP .EQ $C030
8640 FREQ .HS 00
8650 DUR .HS 00
8660 *-------------------------------
8670 * PLOT/GET COLOR ROUTINE
8680 *-------------------------------
8690 SPLOT PHP
8700 LDA SROW
8710 LSR
8720 TAX
8730 LDA TBLELO,X
8740 STA $F9
8750 LDA TBLEHI,X
8760 STA $FA
8770 LDY COLOMN
8780 LDA ($F9),Y
8790 BCC .1
8800 AND #$F0
8810 STA TEMP
8820 LDA ($F9),Y
8830 AND #$0F
8840 STA TEMP3
8850 LDA SCOLOR
8860 ASL
8870 ASL
8880 ASL
8890 ASL
8900 PLP
8910 BCC .2
8920 ORA TEMP3
8930 STA ($F9),Y
8940 .2 CLC
8950 LDA TEMP
8960 LSR
8970 LSR
8980 LSR
8990 LSR
9000 BEQ .3
9010 SEC
9020 .3 RTS
9040 .1 AND #$0F
9050 STA TEMP
9060 LDA ($F9),Y
9070 AND #$F0
9080 STA TEMP3
9090 LDA SCOLOR
9100 PLP
9110 BCC .4
9120 ORA TEMP3
9130 STA ($F9),Y
9140 CLC
9150 .4 LDA TEMP
9160 BEQ .5
9170 SEC
9180 .5 RTS
9190 *-------------------------------
9200 * PRINT SUBROUTINE
9210 *-------------------------------
9220 *
9230 * GET RETURN ADDRESS FROM THE STACK
9240 * AND USE IT AS A POINTER TO THE DATA
9250 *
9260 PRINT PLA
9270 STA $CE
9280 PLA
9290 STA $CF
9300 *
9310 * CHECK FIRST NUMBER FOR HOME
9320 *
9330 LDY #$01 ;INDEX TO DATA
9340 .1 LDA ($CE),Y ;GET CHARACTER
9350 CMP #$FF ;$FF IS CODE FOR HOME
9360 BNE .2
9370 JSR $FC58 ;HOME
9380 LDY #2 ;HOME SETS Y = 0
9390 BNE .1 ;ALWAYS!
9400 *
9410 * NEXT TWO BYTES ARE X,Y POSITION OF CURSOR
9420 *
9430 .2 BMI .10
9440 STA $24 ;CURRENT HORIZONTAL POSITION
9450 .10 INY ;NEXT CHARACTER
9460 LDA ($CE),Y ;VERTICAL POSITION
9470 BMI .11
9480 JSR $FB58 ;VERTICAL TAB
9490 .11 INY ;NEXT CHARACTER
9500 *
9510 * PRINT DATA
9520 *
9530 .3 LDA ($CE),Y ;GET CHARACTER
9540 ORA #$80 ;SET HIGH BIT
9550 JSR $FDED ;COUT
9560 LDA ($CE),Y ;GET CHARACTER AGAIN
9570 BMI .5 ;NEGATIVE = DONE
9580 INC $CE ;NEXT CHARACTER
9590 BNE .3
9600 INC $CF
9610 .4 BNE .3 ;ALWAYS!
9620 *
9630 * STORE RETURN ADDRESS ON STACK
9640 *
9650 .5 TYA ;ADD Y TO $CE
9660 CLC
9670 ADC $CE
9680 STA $CE
9690 BCC .6
9700 INC $CF
9710 .6 LDA $CF ;RESTORE STACK
9720 PHA
9730 LDA $CE
9740 PHA
9750 RTS
9760 *-------------------------------
9770 * LO-RES GRAPHIC ADDRESS TABLE
9780 *-------------------------------
9790 TBLEHI .DA #$04
9792 .DA #$04
9794 .DA #$05
9796 .DA #$05
9800 .DA #$06
9802 .DA #$06
9804 .DA #$07
9806 .DA #$07
9810 .DA #$04
9812 .DA #$04
9814 .DA #$05
9816 .DA #$05
9820 .DA #$06
9822 .DA #$06
9824 .DA #$07
9826 .DA #$07
9830 .DA #$04
9832 .DA #$04
9834 .DA #$05
9836 .DA #$05
9840 .DA #$06
9842 .DA #$06
9844 .DA #$07
9846 .DA #$07
9850 TBLELO .DA #$00
9852 .DA #$80
9854 .DA #$00
9856 .DA #$80
9860 .DA #$00
9862 .DA #$80
9864 .DA #$00
9866 .DA #$80
9870 .DA #$28
9872 .DA #$A8
9874 .DA #$28
9876 .DA #$A8
9880 .DA #$28
9882 .DA #$A8
9884 .DA #$28
9886 .DA #$A8
9890 .DA #$50
9892 .DA #$D0
9894 .DA #$50
9896 .DA #$D0
9900 .DA #$50
9902 .DA #$D0
9904 .DA #$50
9906 .DA #$D0
9910 *-------------------------------
9912 * DATA
9914 *-------------------------------
9916 SROW .HS 00
9918 COLOMN .HS 00
9920 SCOLOR .HS 00
9922 DOTE .HS 00
9924 COLDOT .HS 00
9926 LIFE .HS 00
9928 LEVEL .HS 00
9930 LENGTH .HS 00
9932 TAIL .HS 00
9934 HEAD .HS 00
9936 DX .HS 00
9938 DY .HS 00
9940 COUNT .HS 00
9942 BOXNUM .HS 00
9944 SCORE .HS 0000
9946 TEMP .HS 00
9948 TEMP2 .HS 00
9950 SCOUNT .HS 00
9952 SLEVEL .HS 00
9954 NCOUNT .HS 00
9956 TEMP3 .HS 00
9958 ARRAYX .BS 256
9960 ARRAYY .BS 256
9962 MUSICT .HS 161617171A1A1D
9964 .HS 1A1A1D1A1A1D16
9966 .HS 1617171A1A1D1A
9968 .HS 1A171716161617
9970 .HS 1A1D1A1D1A1D16
9972 .HS 171A1D1A1716
9974 KEYSTR .HS CDCCC9CA
9976 LEVELT .HS 78828C96BE