-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathspritecol.asm
2590 lines (2590 loc) · 60.9 KB
/
spritecol.asm
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
; RULE: datatype: int
.org $0834
; =========================================================
; main()
; =========================================================
; RULE: datatype: word
; RULE: init: '=' expression
; one
; w1
; unknown type
; w1
; RULE: statement: datatype ID init
; WORD one=w1 datatype#: 02
LDA #$01; 0834
LDX #$00; 0836
STA $0336; 0838
STX $0337; 083B
; =========================================================
; RULE: datatype: word
; RULE: statement: datatype ID '[' (U)INTIMM ']' <== ARRAY
; =========================================================
; RULE: datatype: uint
; RULE: statement: datatype ID '[' (U)INTIMM ']' <== ARRAY
; =========================================================
LDA #$02; 083E
; RULE: datatype: uint
; RULE: statement: datatype ID init
; UINT x1d=A datatype#: 00
; UINT UintID A
STA $0350; 0840
; =========================================================
; RULE: datatype: uint
; RULE: statement: datatype ID init
; UINT y2d=A datatype#: 00
; UINT UintID A
STA $0351; 0843
; =========================================================
JSR LBL0L14; shortcls(); 0846
; Switch out the ROM
SEI; 0849
LDA $01; 084A
AND #$FE; 084C
STA $01; 084E
CLI; 0850
; ------------------
JSR LBL0L12; saveregs(); 0851
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$00; 0854
STA $D020; 0856
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$00; 0859
STA $D021; 085B
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$05; 085E
STA $0286; 0860
; =========================================================
; printf("SPRITE COLLISION TEST\nBY MICHAEL K. PELLEGRINO\nUSING 64C COMPILER\nFEBRUARY 11, 2023\nUP: 8, DOWN: K, LEFT: U, RIGHT: O");
; =========================================================
LDA #$14; 0863
STA $03; 0865
LDA #$35; 0867
STA $02; 0869
JSR PRN; 086B
; spriteon( exp );
LDA #$00; 086E
ORA $D015; 0870
STA $D015; 0873
; bank( IMM );
LDA #$03; 0876
ORA $DD02; 0878
STA $DD02; 087B
LDA #$01; 087E
EOR #$FF; 0880
AND #$03; 0882
STA $02; 0884
LDA #$FC; 0886
AND $DD00; 0888
ORA $02; 088B
STA $DD00; 088D
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite1
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite1=m datatype#: 00
; MOB Detected
LDA #$F7; 0890
STA LBL1L0; 0892
LDA #$03; 0895
STA LBL1L0+1; 0897
LDA #$00; <- Sprite #; 089A
ADC LBL1L0; 089C
STA LBL1L0; 089F
JSR SCRMEM; 08A2
PLA; 08A5
ADC LBL1L0+1; 08A6
STA LBL1L0+1; 08A9
JSR BNKMEM; 08AC
PLA; 08AF
ADC LBL1L0+1; 08B0
STA LBL1L0+1; 08B3
LDA #$01; 08B6
.BYTE #$8D; 08B8
LBL1L0:
.BYTE #$00, #$00; 08B9
JSR LBL1L1; 08BB
sprite1:
.BYTE #$FF, #$FF, #$FF, #$EA, #$AA, #$AB, #$E5, #$55, #$5B, #$E5, #$55, #$5B, #$E5, #$65, #$9B, #$E5, #$75, #$DB, #$E5, #$96, #$5B, #$E5, #$A6, #$9B, #$E5, #$B6, #$DB, #$E5, #$D7, #$5B, #$E5, #$E7, #$9B, #$E5, #$F7, #$DB, #$E6, #$59, #$5B, #$E6, #$69, #$9B, #$E6, #$79, #$DB, #$E6, #$9A, #$5B, #$E6, #$AA, #$9B, #$E6, #$BA, #$DB, #$E5, #$55, #$5B, #$EA, #$AA, #$AB, #$FF, #$FF, #$FF
LBL1L1:
PLA; 08FD
STA $FB; 08FE
PLA; 0900
STA $FC; 0901
LDA #$40; 0903
STA $FD; 0905
LDA #$00; 0907
STA $FE; 0909
JSR BNKMEM; 090B
PLA; 090E
CLC; 090F
ADC $FE; 0910
STA $FE; 0912
JSR MOBCPY; 0914
; =========================================================
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite2
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite2=m datatype#: 00
; MOB Detected
LDA #$F7; 0917
STA LBL1L2; 0919
LDA #$03; 091C
STA LBL1L2+1; 091E
LDA #$01; <- Sprite #; 0921
ADC LBL1L2; 0923
STA LBL1L2; 0926
JSR SCRMEM; 0929
PLA; 092C
ADC LBL1L2+1; 092D
STA LBL1L2+1; 0930
JSR BNKMEM; 0933
PLA; 0936
ADC LBL1L2+1; 0937
STA LBL1L2+1; 093A
LDA #$02; 093D
.BYTE #$8D; 093F
LBL1L2:
.BYTE #$00, #$00; 0940
JSR LBL1L3; 0942
sprite2:
.BYTE #$69, #$EA, #$5A, #$DD, #$7F, #$5E, #$79, #$96, #$6D, #$FD, #$9E, #$A6, #$6D, #$AD, #$DE, #$E9, #$7E, #$DA, #$EF, #$5D, #$76, #$DD, #$57, #$5F, #$59, #$DB, #$F5, #$ED, #$F5, #$96, #$BB, #$6A, #$EA, #$FB, #$9D, #$FD, #$E6, #$F6, #$FA, #$EF, #$EE, #$DF, #$95, #$59, #$96, #$56, #$AB, #$DB, #$E9, #$FA, #$D7, #$55, #$F7, #$B9, #$E5, #$A7, #$F6, #$D5, #$F6, #$7D, #$59, #$6A, #$5E
LBL1L3:
PLA; 0984
STA $FB; 0985
PLA; 0987
STA $FC; 0988
LDA #$80; 098A
STA $FD; 098C
LDA #$00; 098E
STA $FE; 0990
JSR BNKMEM; 0992
PLA; 0995
CLC; 0996
ADC $FE; 0997
STA $FE; 0999
JSR MOBCPY; 099B
; =========================================================
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite3
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite3=m datatype#: 00
; MOB Detected
LDA #$F7; 099E
STA LBL1L4; 09A0
LDA #$03; 09A3
STA LBL1L4+1; 09A5
LDA #$02; <- Sprite #; 09A8
ADC LBL1L4; 09AA
STA LBL1L4; 09AD
JSR SCRMEM; 09B0
PLA; 09B3
ADC LBL1L4+1; 09B4
STA LBL1L4+1; 09B7
JSR BNKMEM; 09BA
PLA; 09BD
ADC LBL1L4+1; 09BE
STA LBL1L4+1; 09C1
LDA #$03; 09C4
.BYTE #$8D; 09C6
LBL1L4:
.BYTE #$00, #$00; 09C7
JSR LBL1L5; 09C9
sprite3:
.BYTE #$69, #$EA, #$5A, #$DD, #$7F, #$5E, #$79, #$96, #$6D, #$FD, #$9E, #$A6, #$6D, #$AD, #$DE, #$E9, #$7E, #$DA, #$EF, #$5D, #$76, #$DD, #$57, #$5F, #$59, #$DB, #$F5, #$ED, #$F5, #$96, #$BB, #$6A, #$EA, #$FB, #$9D, #$FD, #$E6, #$F6, #$FA, #$EF, #$EE, #$DF, #$95, #$59, #$96, #$56, #$AB, #$DB, #$E9, #$FA, #$D7, #$55, #$F7, #$B9, #$E5, #$A7, #$F6, #$D5, #$F6, #$7D, #$59, #$6A, #$5E
LBL1L5:
PLA; 0A0B
STA $FB; 0A0C
PLA; 0A0E
STA $FC; 0A0F
LDA #$C0; 0A11
STA $FD; 0A13
LDA #$00; 0A15
STA $FE; 0A17
JSR BNKMEM; 0A19
PLA; 0A1C
CLC; 0A1D
ADC $FE; 0A1E
STA $FE; 0A20
JSR MOBCPY; 0A22
; =========================================================
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite4
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite4=m datatype#: 00
; MOB Detected
LDA #$F7; 0A25
STA LBL1L6; 0A27
LDA #$03; 0A2A
STA LBL1L6+1; 0A2C
LDA #$03; <- Sprite #; 0A2F
ADC LBL1L6; 0A31
STA LBL1L6; 0A34
JSR SCRMEM; 0A37
PLA; 0A3A
ADC LBL1L6+1; 0A3B
STA LBL1L6+1; 0A3E
JSR BNKMEM; 0A41
PLA; 0A44
ADC LBL1L6+1; 0A45
STA LBL1L6+1; 0A48
LDA #$04; 0A4B
.BYTE #$8D; 0A4D
LBL1L6:
.BYTE #$00, #$00; 0A4E
JSR LBL1L7; 0A50
sprite4:
.BYTE #$BD, #$6F, #$D5, #$E6, #$F9, #$EE, #$5D, #$EF, #$B7, #$5D, #$D7, #$BD, #$6E, #$75, #$D5, #$E5, #$5B, #$59, #$AF, #$DF, #$7F, #$9D, #$D9, #$69, #$77, #$F9, #$F5, #$75, #$F5, #$66, #$5B, #$5B, #$AA, #$B7, #$ED, #$BB, #$E7, #$BB, #$77, #$DE, #$65, #$FD, #$E5, #$DE, #$55, #$95, #$6D, #$BB, #$65, #$75, #$EF, #$5B, #$AD, #$7F, #$FE, #$6F, #$75, #$AF, #$57, #$9D, #$9B, #$FB, #$99
LBL1L7:
PLA; 0A92
STA $FB; 0A93
PLA; 0A95
STA $FC; 0A96
LDA #$00; 0A98
STA $FD; 0A9A
LDA #$01; 0A9C
STA $FE; 0A9E
JSR BNKMEM; 0AA0
PLA; 0AA3
CLC; 0AA4
ADC $FE; 0AA5
STA $FE; 0AA7
JSR MOBCPY; 0AA9
; =========================================================
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite5
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite5=m datatype#: 00
; MOB Detected
LDA #$F7; 0AAC
STA LBL1L8; 0AAE
LDA #$03; 0AB1
STA LBL1L8+1; 0AB3
LDA #$04; <- Sprite #; 0AB6
ADC LBL1L8; 0AB8
STA LBL1L8; 0ABB
JSR SCRMEM; 0ABE
PLA; 0AC1
ADC LBL1L8+1; 0AC2
STA LBL1L8+1; 0AC5
JSR BNKMEM; 0AC8
PLA; 0ACB
ADC LBL1L8+1; 0ACC
STA LBL1L8+1; 0ACF
LDA #$05; 0AD2
.BYTE #$8D; 0AD4
LBL1L8:
.BYTE #$00, #$00; 0AD5
JSR LBL1L9; 0AD7
sprite5:
.BYTE #$BD, #$AE, #$99, #$AD, #$E5, #$AE, #$7F, #$A6, #$6B, #$5B, #$5F, #$B9, #$EA, #$D6, #$ED, #$7B, #$69, #$FA, #$FF, #$F6, #$FA, #$9E, #$96, #$9A, #$5B, #$FB, #$AF, #$FD, #$A7, #$79, #$99, #$EE, #$E6, #$6A, #$9F, #$E5, #$F9, #$A9, #$DB, #$59, #$F5, #$DE, #$9F, #$BA, #$6A, #$ED, #$D7, #$7F, #$A6, #$DA, #$E6, #$B7, #$99, #$67, #$95, #$65, #$DF, #$6F, #$B9, #$59, #$DD, #$BF, #$F7
LBL1L9:
PLA; 0B19
STA $FB; 0B1A
PLA; 0B1C
STA $FC; 0B1D
LDA #$40; 0B1F
STA $FD; 0B21
LDA #$01; 0B23
STA $FE; 0B25
JSR BNKMEM; 0B27
PLA; 0B2A
CLC; 0B2B
ADC $FE; 0B2C
STA $FE; 0B2E
JSR MOBCPY; 0B30
; =========================================================
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite6
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite6=m datatype#: 00
; MOB Detected
LDA #$F7; 0B33
STA LBL1L10; 0B35
LDA #$03; 0B38
STA LBL1L10+1; 0B3A
LDA #$05; <- Sprite #; 0B3D
ADC LBL1L10; 0B3F
STA LBL1L10; 0B42
JSR SCRMEM; 0B45
PLA; 0B48
ADC LBL1L10+1; 0B49
STA LBL1L10+1; 0B4C
JSR BNKMEM; 0B4F
PLA; 0B52
ADC LBL1L10+1; 0B53
STA LBL1L10+1; 0B56
LDA #$06; 0B59
.BYTE #$8D; 0B5B
LBL1L10:
.BYTE #$00, #$00; 0B5C
JSR LBL1L11; 0B5E
sprite6:
.BYTE #$6D, #$57, #$96, #$EA, #$E9, #$DE, #$B5, #$F7, #$DF, #$FD, #$B9, #$6E, #$DE, #$EB, #$67, #$DD, #$DA, #$F5, #$67, #$E9, #$BA, #$7F, #$BD, #$9A, #$E6, #$DF, #$95, #$EF, #$56, #$6D, #$F5, #$66, #$E9, #$F7, #$D6, #$D9, #$9D, #$56, #$5E, #$7A, #$DD, #$79, #$7B, #$EA, #$57, #$97, #$AE, #$57, #$B7, #$67, #$9F, #$F9, #$7A, #$AE, #$56, #$ED, #$9B, #$E5, #$BB, #$5D, #$69, #$DA, #$6A
LBL1L11:
PLA; 0BA0
STA $FB; 0BA1
PLA; 0BA3
STA $FC; 0BA4
LDA #$80; 0BA6
STA $FD; 0BA8
LDA #$01; 0BAA
STA $FE; 0BAC
JSR BNKMEM; 0BAE
PLA; 0BB1
CLC; 0BB2
ADC $FE; 0BB3
STA $FE; 0BB5
JSR MOBCPY; 0BB7
; =========================================================
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite7
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite7=m datatype#: 00
; MOB Detected
LDA #$F7; 0BBA
STA LBL1L12; 0BBC
LDA #$03; 0BBF
STA LBL1L12+1; 0BC1
LDA #$06; <- Sprite #; 0BC4
ADC LBL1L12; 0BC6
STA LBL1L12; 0BC9
JSR SCRMEM; 0BCC
PLA; 0BCF
ADC LBL1L12+1; 0BD0
STA LBL1L12+1; 0BD3
JSR BNKMEM; 0BD6
PLA; 0BD9
ADC LBL1L12+1; 0BDA
STA LBL1L12+1; 0BDD
LDA #$07; 0BE0
.BYTE #$8D; 0BE2
LBL1L12:
.BYTE #$00, #$00; 0BE3
JSR LBL1L13; 0BE5
sprite7:
.BYTE #$79, #$FD, #$A6, #$D7, #$7E, #$D5, #$6D, #$E6, #$55, #$EB, #$55, #$A9, #$EF, #$BE, #$FB, #$A9, #$65, #$76, #$ED, #$E9, #$BB, #$FD, #$55, #$9A, #$9A, #$6A, #$6F, #$6B, #$6F, #$E6, #$57, #$F7, #$6F, #$7E, #$EE, #$DB, #$BF, #$56, #$9A, #$6B, #$7F, #$6A, #$A7, #$FE, #$DD, #$B7, #$9A, #$AA, #$9F, #$D5, #$DB, #$7A, #$FA, #$6E, #$AF, #$A5, #$EF, #$B5, #$B7, #$5E, #$F9, #$7E, #$DD
LBL1L13:
PLA; 0C27
STA $FB; 0C28
PLA; 0C2A
STA $FC; 0C2B
LDA #$C0; 0C2D
STA $FD; 0C2F
LDA #$01; 0C31
STA $FE; 0C33
JSR BNKMEM; 0C35
PLA; 0C38
CLC; 0C39
ADC $FE; 0C3A
STA $FE; 0C3C
JSR MOBCPY; 0C3E
; =========================================================
; RULE: datatype: mob
; RULE: init: '=' expression
; sprite8
; m
; MOB
; RULE: statement: datatype ID init
; MOB sprite8=m datatype#: 00
; MOB Detected
LDA #$F7; 0C41
STA LBL1L14; 0C43
LDA #$03; 0C46
STA LBL1L14+1; 0C48
LDA #$07; <- Sprite #; 0C4B
ADC LBL1L14; 0C4D
STA LBL1L14; 0C50
JSR SCRMEM; 0C53
PLA; 0C56
ADC LBL1L14+1; 0C57
STA LBL1L14+1; 0C5A
JSR BNKMEM; 0C5D
PLA; 0C60
ADC LBL1L14+1; 0C61
STA LBL1L14+1; 0C64
LDA #$08; 0C67
.BYTE #$8D; 0C69
LBL1L14:
.BYTE #$00, #$00; 0C6A
JSR LBL1L15; 0C6C
sprite8:
.BYTE #$E5, #$56, #$6B, #$F7, #$F9, #$A7, #$FE, #$6A, #$9A, #$76, #$FF, #$7E, #$D6, #$DD, #$D7, #$AE, #$AE, #$59, #$FB, #$75, #$66, #$65, #$75, #$A6, #$F7, #$BD, #$7E, #$B7, #$57, #$DE, #$9D, #$55, #$6D, #$F5, #$DE, #$9D, #$EE, #$D9, #$95, #$AE, #$DB, #$7B, #$E7, #$6F, #$A5, #$B7, #$59, #$EA, #$75, #$9D, #$E6, #$F7, #$67, #$AA, #$DE, #$7B, #$F6, #$9F, #$AB, #$E5, #$BE, #$9A, #$95
LBL1L15:
PLA; 0CAE
STA $FB; 0CAF
PLA; 0CB1
STA $FC; 0CB2
LDA #$00; 0CB4
STA $FD; 0CB6
LDA #$02; 0CB8
STA $FE; 0CBA
JSR BNKMEM; 0CBC
PLA; 0CBF
CLC; 0CC0
ADC $FE; 0CC1
STA $FE; 0CC3
JSR MOBCPY; 0CC5
; =========================================================
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$3B; 0CC8
STA $D011; 0CCA
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$18; 0CCD
STA $D016; 0CCF
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$18; 0CD2
STA $D018; 0CD4
JSR LBL0L1; clearhires(); 0CD7
; RULE: init: '=' expression
; 0
; w288
; unknown type
; w288
LDX #$00; 0CDA
LDA #$20; 0CDC
STA $0338,X; 0CDE
INX; 0CE1
LDA #$01; 0CE2
STA $0338,X; 0CE4
; =========================================================
; RULE: init: '=' expression
; 1
; w128
; unknown type
; w128
LDX #$02; 0CE7
LDA #$80; 0CE9
STA $0338,X; 0CEB
INX; 0CEE
LDA #$00; 0CEF
STA $0338,X; 0CF1
; =========================================================
; RULE: init: '=' expression
; 2
; w240
; unknown type
; w240
LDX #$04; 0CF4
LDA #$F0; 0CF6
STA $0338,X; 0CF8
INX; 0CFB
LDA #$00; 0CFC
STA $0338,X; 0CFE
; =========================================================
; RULE: init: '=' expression
; 3
; w32
; unknown type
; w32
LDX #$06; 0D01
LDA #$20; 0D03
STA $0338,X; 0D05
INX; 0D08
LDA #$00; 0D09
STA $0338,X; 0D0B
; =========================================================
; RULE: init: '=' expression
; 4
; w128
; unknown type
; w128
LDX #$08; 0D0E
LDA #$80; 0D10
STA $0338,X; 0D12
INX; 0D15
LDA #$00; 0D16
STA $0338,X; 0D18
; =========================================================
; RULE: init: '=' expression
; 5
; w240
; unknown type
; w240
LDX #$0A; 0D1B
LDA #$F0; 0D1D
STA $0338,X; 0D1F
INX; 0D22
LDA #$00; 0D23
STA $0338,X; 0D25
; =========================================================
; RULE: init: '=' expression
; 6
; w32
; unknown type
; w32
LDX #$0C; 0D28
LDA #$20; 0D2A
STA $0338,X; 0D2C
INX; 0D2F
LDA #$00; 0D30
STA $0338,X; 0D32
; =========================================================
; RULE: init: '=' expression
; 7
; w128
; unknown type
; w128
LDX #$0E; 0D35
LDA #$80; 0D37
STA $0338,X; 0D39
INX; 0D3C
LDA #$00; 0D3D
STA $0338,X; 0D3F
; =========================================================
; RULE: init: '=' expression
; 0
; u64
LDA #$40; 0D42
; UintID_array[(U)IntIMM] = A
LDX #$00; 0D44
STA $0348,X; 0D46
; =========================================================
; RULE: init: '=' expression
; 1
; u64
LDA #$40; 0D49
; UintID_array[(U)IntIMM] = A
LDX #$01; 0D4B
STA $0348,X; 0D4D
; =========================================================
; RULE: init: '=' expression
; 2
; u64
LDA #$40; 0D50
; UintID_array[(U)IntIMM] = A
LDX #$02; 0D52
STA $0348,X; 0D54
; =========================================================
; RULE: init: '=' expression
; 3
; u112
LDA #$70; 0D57
; UintID_array[(U)IntIMM] = A
LDX #$03; 0D59
STA $0348,X; 0D5B
; =========================================================
; RULE: init: '=' expression
; 4
; u112
LDA #$70; 0D5E
; UintID_array[(U)IntIMM] = A
LDX #$04; 0D60
STA $0348,X; 0D62
; =========================================================
; RULE: init: '=' expression
; 5
; u112
LDA #$70; 0D65
; UintID_array[(U)IntIMM] = A
LDX #$05; 0D67
STA $0348,X; 0D69
; =========================================================
; RULE: init: '=' expression
; 6
; u160
LDA #$A0; 0D6C
; UintID_array[(U)IntIMM] = A
LDX #$06; 0D6E
STA $0348,X; 0D70
; =========================================================
; RULE: init: '=' expression
; 7
; u160
LDA #$A0; 0D73
; UintID_array[(U)IntIMM] = A
LDX #$07; 0D75
STA $0348,X; 0D77
; =========================================================
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$0D; 0D7A
STA $D025; 0D7C
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$05; 0D7F
STA $D026; 0D81
LDA #$0A; 0D84
STA $D027; 0D86
LDA #$0B; 0D89
STA $D028; 0D8B
LDA #$0C; 0D8E
STA $D029; 0D90
LDA #$01; 0D93
STA $D02A; 0D95
LDA #$02; 0D98
STA $D02B; 0D9A
LDA #$03; 0D9D
STA $D02C; 0D9F
LDA #$04; 0DA2
STA $D02D; 0DA4
LDA #$05; 0DA7
STA $D02E; 0DA9
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$FF; 0DAC
STA $D01C; 0DAE
JSR LBL0L0; updateSpritePositions(); 0DB1
; spriteon( exp );
LDA #$FF; 0DB4
ORA $D015; 0DB6
STA $D015; 0DB9
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$01; 0DBC
STA $47F8; 0DBE
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$02; 0DC1
STA $47F9; 0DC3
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$03; 0DC6
STA $47FA; 0DC8
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$04; 0DCB
STA $47FB; 0DCD
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$05; 0DD0
STA $47FC; 0DD2
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$06; 0DD5
STA $47FD; 0DD7
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$07; 0DDA
STA $47FE; 0DDC
; poke( expression, expression );
; POKE(wIMM,IMM)
LDA #$08; 0DDF
STA $47FF; 0DE1
; RULE: datatype: uint
; RULE: init: '=' expression
; timer
; u0
LDA #$00; 0DE4
; RULE: statement: datatype ID init
; UINT timer=A datatype#: 00
; UINT UintID A
STA $0352; 0DE6
; =========================================================
; RULE: datatype: uint
; =========================================================
; getin()
; =========================================================
LDA $CB; 0DE9
; RULE: init: '=' expression
; c
; A
; initialising an unknown type with A
; unknown type
; A
; RULE: statement: datatype ID init
; UINT c=A datatype#: 00
; UINT UintID A
STA $0353; 0DEB
; =========================================================
; =========================================================
; WHILE LOOP
; =========================================================
PHA; 0DEE
LBL1L16:
; ---------------------------------------------------------
; UintID
; $0353
; vs.
; UintIMM
; u62
LBL1L17: ; Top of WHILE Loop
LDA $0353; 0DEF
CMP #$3E; 0DF2
.BYTE #$D0, #$03; 0DF4
JMP LBL1L19; if z==1 jump to ELSE; 0DF6
; =========================================================
LBL1L18:
; =========================================================
; IF STATEMENT
; =========================================================
LBL2L0:
; UintID
; $0352
; vs.
; UintIMM
; u10
LBL2L1: ; Top of IF statement
LDA $0352; 0DF9
CMP #$0A; 0DFC
.BYTE #$F0, #$03; BEQ +3; 0DFE
JMP LBL2L3; jump to ELSE; 0E00
; =========================================================
; ---------------------------------------------------------
; THEN:
LBL2L2:
JSR LBL0L3; checkRight(); 0E03
JSR LBL0L2; checkLeft(); 0E06
JSR LBL0L4; checkUp(); 0E09
JSR LBL0L5; checkDown(); 0E0C
JSR LBL0L7; updateAIPositions(); 0E0F
JSR LBL0L0; updateSpritePositions(); 0E12
JSR LBL0L6; checkCollision(); 0E15
JMP LBL2L4; 0E18
LBL2L3:
; ---------------------------------------------------------
; ELSE:
; ---------------------------------------------------------
; ---------------------------------------------------------
LBL2L4:
; inc(expression)
INC $0352; 0E1B
; =========================================================
LDA #$3F; 0E1E
AND $0352; 0E20
; RULE: init: '=' expression
; timer
; A
; initialising an int/uint with accumulator
; unknown type
; A
; RULE: statement: ID init
STA $0352; 0E23
; =========================================================
; =========================================================
; getin()
; =========================================================
LDA $CB; 0E26
; RULE: init: '=' expression
; c
; A
; initialising an int/uint with accumulator
; unknown type
; A
; RULE: statement: ID init
STA $0353; 0E28
; =========================================================
JMP LBL1L17; jump to top of WHILE loop; 0E2B
LBL1L19:
PLA; 0E2E
JSR LBL0L11; clearkb(); 0E2F
; spriteset( exp );
LDA #$00; 0E32
STA $D015; 0E34
; bank( IMM );
LDA #$03; 0E37
ORA $DD02; 0E39
STA $DD02; 0E3C
LDA #$00; 0E3F
EOR #$FF; 0E41
AND #$03; 0E43
STA $02; 0E45
LDA #$FC; 0E47
AND $DD00; 0E49
ORA $02; 0E4C
STA $DD00; 0E4E
JSR LBL0L13; restoreregs(); 0E51
; Switch the ROM back in
SEI; 0E54
LDA $01; 0E55
ORA #$01; 0E57
STA $01; 0E59
CLI; 0E5B
; ------------------
RTS; 0E5C
; RULE: datatype: void
; ======================== updateSpritePositions ========================
LBL0L0:
; Preserve $02
LDA $02; 0E5D
PHA; 0E5F
; =========================================================
; FOR LOOP
; =========================================================
LBL1L20:
PHA; 0E60
; ---------------------------------------------------------
; RULE: datatype: uint
; RULE: init: '=' expression
; uspI
; u0
LDA #$00; 0E61
; RULE: statement: datatype ID init
; UINT uspI=A datatype#: 00
; UINT UintID A
STA $0354; 0E63
; ---------------------------------------------------------
; UintID
; $0354
; vs.
; UintIMM
; u8
LBL1L21: ; Top of FOR Loop
LDA $0354; 0E66
CMP #$08; 0E69
.BYTE #$B0, #$03; BCS +3; 0E6B
JMP LBL1L23; if c==0 jump to BODY; 0E6D
JMP LBL1L24; jump out of FOR; 0E70
; =========================================================
; ---------------------------------------------------------
LBL1L22:
; inc(expression)
INC $0354; 0E73
JMP LBL1L21; jump to top of FOR loop; 0E76
; ---------------------------------------------------------
LBL1L23:
; ID '[' (U)IntID ']' -> XA
LDA $0354; 0E79
ASL; 0E7C
TAX; 0E7D
LDA $0338,X; 0E7E
PHA; 0E81
INX; 0E82
LDA $0338,X; 0E83
TAX; 0E86
PLA; 0E87
; spritex( $0354, XA );
; spritex( UINTID, XA );
TAY; 0E88
LDA $02; 0E89
PHA; 0E8B
LDA $03; 0E8C
PHA; 0E8E
STY $02; 0E8F
STX $03; temporarily store the High Byte; 0E91
LDA $0354; sprite # -> A; 0E93
ASL; multiply it by 2; 0E96
TAX; make Sprite# * 2 the index (X); 0E97
TYA; move the Low Byte of x-coord to A; 0E98
STA $D000,X; set the low-byte value; 0E99
LDA $0354; 0E9C
PHA; 0E9F
JSR BIN2BIT; 0EA0
PLA; 0EA3
EOR #$FF; 0EA4
AND $D010; 0EA6
STA $05; 0EA9
LDX $0354; 0EAB
INX; 0EAE
LDA $03; puts the High Byte of the x-coord into A (it's a 1 or a 0); 0EAF
LSR; puts that 1 or 0 into the carry flag; 0EB1
; top-of-loop
ROL; 0EB2
DEX; 0EB3
.BYTE #$D0, #$FC; BNE top-of-loop; 0EB4
ORA $05; 0EB6
STA $D010; 0EB8
PLA; 0EBB
STA $03; 0EBC
PLA; 0EBE
STA $02; 0EBF
; ID '[' expression ']' -> A
LDX $0354; 0EC1
LDA $0348,X; 0EC4
; spritey( $0354, A );
; spritey( (U)IntID, A );
PHA; 0EC7
LDA $0354; 0EC8
ASL; 0ECB
TAX; 0ECC
PLA; 0ECD
STA $D001,X; set the y-coord; 0ECE
; ---------------------------------------------------------
JMP LBL1L22; jump to iterator; 0ED1
LBL1L24:
PLA; 0ED4
; ---------------------------------------------------------
; Restore $02
PLA; 0ED5
STA $02; 0ED6
RTS; 0ED8
; RULE: datatype: void
; ======================== clearhires ========================
LBL0L1:
; RULE: datatype: word
; RULE: init: '=' expression
; mem1
; w0
; unknown type
; w0
; RULE: statement: datatype ID init
; WORD mem1=w0 datatype#: 02
LDA #$00; 0ED9
LDX #$00; 0EDB
STA $0355; 0EDD
STX $0356; 0EE0
; =========================================================
; Preserve $02
LDA $02; 0EE3
PHA; 0EE5
; =========================================================
; FOR LOOP
; =========================================================
LBL1L25:
PHA; 0EE6
; ---------------------------------------------------------
; RULE: init: '=' expression
; mem1
; w55296
LDA #$00; 0EE7
LDX #$D8; 0EE9
; RULE: statement: ID init
; WordID = XA
STA $0355; 0EEB
STX $0356; 0EEE
; ---------------------------------------------------------
; WordID
; $0355
; vs.
; WordIMM
; w56319
LBL1L26: ; Top of FOR Loop
; =========================================================
; WORD ID vs. WORD IMM
; =========================================================
; $0355 v. w56319
LDA $0356; 0EF1
CMP #$DB; 0EF4
.BYTE #$D0, #$05; 0EF6
LDA $0355; 0EF8
CMP #$FF; 0EFB
.BYTE #$B0, #$03; BCS +3; 0EFD
JMP LBL1L28; if c==0 jump to BODY; 0EFF
JMP LBL1L29; jump out of FOR; 0F02
; =========================================================
; ---------------------------------------------------------
LBL1L27:
; OP2
; RULE: expression: expression arithmetic expression
; $0355 + w1
; $0355 (2) + w1 (-1)
CLC; 0F05
; WordID + WordIMM -> XA
LDA $0355; 0F06
ADC #$01; 0F09
TAY; 0F0B
LDA $0356; 0F0C
ADC #$00; 0F0F
TAX; 0F11
TYA; 0F12
; RULE: init: '=' expression
; mem1
; XA
; initialising a word with XA
; unknown type
; XA