-
Notifications
You must be signed in to change notification settings - Fork 8
/
bank5.asm
12691 lines (12671 loc) · 125 KB
/
bank5.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
.include "nes.inc"
.include "zelda.inc"
;Program ROM Bank 5
.segment "PRG_5"
;There are a select few places where LDA and STA use absolute addressing to access variables in the
;zero page instead of using zero page addressing. The assembler always uses zero page addressing
;where appropriate, so these macros provide an absolute addressing version of these instructions.
.macro STA_absolute addr
.byte $8D, .lobyte(addr), .hibyte(addr)
.endmacro
.macro LDA_absolute addr
.byte $AD, .lobyte(addr), .hibyte(addr)
.endmacro
segment_start:
lbl_8000:
JSR lbl_8006
JMP $ED89
lbl_8006:
LDA $E1
LDY $10
BEQ lbl_8021
JSR switch_jump
.addr lbl_8056
.addr lbl_8038
.addr lbl_8057
.addr lbl_805e
.addr lbl_8062
.addr lbl_8066
.addr lbl_8076
.addr lbl_80d4
.addr lbl_810f
lbl_8021:
JSR switch_jump
.addr lbl_8056
.addr lbl_819a
.addr lbl_8038
.addr lbl_8057
.addr lbl_805e
.addr lbl_8062
.addr lbl_806c
.addr lbl_8070
.addr lbl_80d4
.addr lbl_810f
lbl_8038:
JSR $E5F7
JSR $71DE
JSR $E679
LDA #$EF
STA $FC
STA $5C
LDA #$01
JSR lbl_8130
INC $E1
LDA #$2B
STA $5E
LDA #$7F
STA $5D
lbl_8056:
RTS
lbl_8057:
LDA #$48
lbl_8059:
STA $14
lbl_805b:
INC $E1
RTS
lbl_805e:
LDA #$4A
BNE lbl_8059
lbl_8062:
LDA #$4C
BNE lbl_8059
lbl_8066:
JSR lbl_b23a
JMP lbl_805b
lbl_806c:
LDA #$5C
BNE lbl_8059
lbl_8070:
JSR lbl_b282
JMP lbl_8079
lbl_8076:
JSR lbl_b23a
lbl_8079:
LDA #$03
JSR lbl_8130
LDA $FC
SEC
SBC #$03
STA $FC
CMP #$41
BNE lbl_80d3
INC $E1
LDA $10
BEQ lbl_80d3
LDA $12
CMP #$09
BEQ lbl_80d3
LDA $EB
AND #$0F
ASL
ASL
ASL
STA $00
LDA $6BAB
CMP #$08
BCC lbl_80b3
LDA #$10
SBC $6BAB
ASL
ASL
ASL
JSR $7021
JMP lbl_80b6
lbl_80b3:
ASL
ASL
ASL
lbl_80b6:
CLC
ADC $00
CLC
ADC #$62
STA $0253
LDA $EB
AND #$F0
LSR
ADC #$69
STA $0250
LDA #$3E
STA $0251
LDA #$00
STA $0252
lbl_80d3:
RTS
lbl_80d4:
JSR lbl_b6a7
JSR lbl_b726
LDA $FB
AND #$88
CMP #$88
BNE lbl_80f3
JSR $EBA3
STA $E1
LDA #$08
STA $12
LDA #$00
STA $0619
JMP lbl_8a8e
lbl_80f3:
LDA $F8
AND #$10
BEQ lbl_8151
LDA $0254
PHA
LDA $0258
PHA
JSR $E5F7
PLA
STA $0258
PLA
STA $0254
INC $E1
RTS
lbl_810f:
LDA #$FD
JSR lbl_8130
LDA $FC
CLC
ADC #$03
STA $FC
CMP #$F0
BCC lbl_8151
STA $5C
LDA $10
BEQ lbl_8128
JSR $7512
lbl_8128:
LDA #$00
STA $FC
STA $E1
LDA #$02
lbl_8130:
STA $00
LDA $0254
CMP #$F8
BEQ lbl_813f
CLC
ADC $00
STA $0254
lbl_813f:
LDA $10
BEQ lbl_8151
JSR lbl_b5eb
BEQ lbl_8151
LDA $0258
CLC
ADC $00
STA $0258
lbl_8151:
RTS
.byte $00
.byte $08
.byte $09
.byte $01
.byte $0A
.byte $0B
.byte $12
.byte $1E
.byte $1F
.byte $17
.byte $24
.byte $25
.byte $13
.byte $14
.byte $21
.byte $13
.byte $20
.byte $21
.byte $15
.byte $16
.byte $22
.byte $16
.byte $22
.byte $23
.byte $E7
.byte $E7
.byte $F5
.byte $E8
.byte $F5
.byte $E8
.byte $E7
.byte $E7
.byte $F5
.byte $E8
.byte $F5
.byte $E8
.byte $E5
.byte $F5
.byte $E5
.byte $E8
.byte $F5
.byte $E8
.byte $F5
.byte $E6
.byte $E6
.byte $E7
.byte $E7
.byte $F5
.byte $E9
.byte $E9
.byte $24
.byte $EA
.byte $24
.byte $EA
.byte $E9
.byte $E9
.byte $24
.byte $EA
.byte $24
.byte $EA
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
.byte $24
lbl_819a:
LDY #$17
lbl_819c:
LDX $8152,Y
LDA $8182,Y
STA $684B,X
DEY
BPL lbl_819c
INY
LDA #$01
STA $06
lbl_81ad:
LDA #$03
STA $07
lbl_81b1:
LDX $8152,Y
LDA $06
BIT $0671
BEQ lbl_81d1
LDA $684B,X
CMP #$E5
BEQ lbl_81cc
CMP #$E6
BEQ lbl_81cc
LDA $816A,Y
JMP lbl_81ce
lbl_81cc:
LDA #$F5
lbl_81ce:
STA $684B,X
lbl_81d1:
INY
DEC $07
BNE lbl_81b1
ASL $06
BNE lbl_81ad
INC $E1
RTS
lbl_81dd:
LDA $15
AND #$03
LDY $10
BNE lbl_81e7
AND #$01
lbl_81e7:
CMP $E6
BNE lbl_8255
LDA #$08
BIT $98
BEQ lbl_8228
DEC $E9
LDA $84
CMP #$DD
BCS lbl_81fd
ADC #$08
STA $84
lbl_81fd:
LDA $E2
SEC
SBC #$20
STA $E2
BCS lbl_8208
DEC $58
lbl_8208:
CMP #$E0
BNE lbl_821e
LDA $58
CMP #$20
BEQ lbl_821f
CMP #$27
BNE lbl_821e
LDA #$23
STA $58
LDA #$A0
STA $E2
lbl_821e:
RTS
lbl_821f:
INC $58
lbl_8221:
LDA #$00
STA $E2
lbl_8225:
INC $13
RTS
lbl_8228:
LSR
BIT $98
BEQ lbl_8255
INC $E9
LDA $84
CMP #$3E
BCC lbl_8239
SBC #$08
STA $84
lbl_8239:
LDA $E2
CLC
ADC #$20
STA $E2
BCC lbl_8244
INC $58
lbl_8244:
CMP #$C0
BNE lbl_8287
LDA $58
CMP #$23
BNE lbl_8287
LDA #$28
STA $58
JMP lbl_8221
lbl_8255:
LDA #$02
LDX #$FE
LDY $10
BNE lbl_8260
ASL
LDX #$FC
lbl_8260:
STA $00
STX $01
LDA #$02
BIT $98
BEQ lbl_8288
DEC $E8
LDA $70
CMP #$F0
BCS lbl_8276
ADC $00
STA $70
lbl_8276:
LDA $FD
SEC
SBC $00
STA $FD
BEQ lbl_8225
CMP $01
BNE lbl_8287
lbl_8283:
LDA #$01
STA $5F
lbl_8287:
RTS
lbl_8288:
LSR
BIT $98
BEQ lbl_8287
INC $E8
LDA $70
CMP #$01
BCC lbl_8299
SBC $00
STA $70
lbl_8299:
LDA $FD
CLC
ADC $00
STA $FD
BNE lbl_8287
JSR lbl_8283
JMP lbl_8225
lbl_82a8:
LDA $13
JSR switch_jump
.addr lbl_830e
.addr lbl_82bb
.addr lbl_831f
.addr lbl_833d
.addr lbl_833d
.addr lbl_835c
.addr lbl_839e
lbl_82bb:
JSR $EA3D
JSR $F238
LDA $EE
STA $0521
JSR lbl_83c2
DEC $ED
INC $13
JSR $E68F
LDA $EC
BMI lbl_82f4
LDA $EB
PHA
LDY $98
CPY #$08
BEQ lbl_82e1
LDA $EC
STA $EB
lbl_82e1:
JSR lbl_83d7
LDA #$15
STA $E9
LDY $98
CPY #$08
BEQ lbl_82f5
JSR lbl_a8c4
lbl_82f1:
PLA
STA $EB
lbl_82f4:
RTS
lbl_82f5:
JSR lbl_82fb
JMP lbl_82f1
lbl_82fb:
LDA $10
BEQ lbl_830d
LDA $EE
PHA
LDA $0521
STA $EE
JSR lbl_a4f6
PLA
STA $EE
lbl_830d:
RTS
lbl_830e:
LDA $0522
BEQ lbl_8317
LDA $EA
STA $EB
lbl_8317:
LDA $051A
BEQ lbl_833a
JMP $FF34
lbl_831f:
JSR lbl_a924
LDA $0302
AND #$0F
CLC
ADC #$27
STA $0302
LDA $98
CMP #$04
BCS lbl_8336
INC $0302
lbl_8336:
DEC $E9
BPL lbl_833c
lbl_833a:
INC $13
lbl_833c:
RTS
lbl_833d:
LDA #$08
BIT $98
BNE lbl_8348
LSR
BIT $98
BEQ lbl_8358
lbl_8348:
LDA #$C0
lbl_834a:
LDY #$17
LDX $13
CPX #$03
BEQ lbl_8355
JSR lbl_848c
lbl_8355:
JMP lbl_8ca4
lbl_8358:
LDA #$D0
BNE lbl_834a
lbl_835c:
LDA #$00
STA $051C
LDA $98
CMP #$04
BCS lbl_836b
LDY #$4E
STY $14
lbl_836b:
CMP #$08
BNE lbl_837c
LDA $EB
PHA
LDA $EC
STA $EB
JSR lbl_a8c4
PLA
STA $EB
lbl_837c:
LDY $EC
JSR lbl_b68d
BEQ lbl_83a3
LDY $EB
JSR lbl_b68d
BNE lbl_8397
lbl_838a:
LDA #$00
STA $051F
LDA #$40
STA $051C
INC $13
RTS
lbl_8397:
LDA $051F
BNE lbl_838a
BEQ lbl_83a3
lbl_839e:
JSR $74B7
BNE lbl_83ad
lbl_83a3:
LDA $EC
STA $EB
JSR lbl_83b2
JSR $6C90
lbl_83ad:
RTS
.byte $27
.byte $61
.byte $20
.byte $58
lbl_83b2:
LDA #$01
STA $E3
LDY #$03
lbl_83b8:
LDA $83AE,Y
STA $0200,Y
DEY
BPL lbl_83b8
RTS
lbl_83c2:
LDA $98
LSR
AND #$05
STA $00
LDA $98
ASL
AND #$0A
ORA $00
STA $EE
RTS
.byte $00
.byte $55
.byte $AA
.byte $FF
lbl_83d7:
TAY
LDA $687E,Y
AND #$03
TAX
LDA $83D3,X
LDX #$2F
lbl_83e3:
STA $0530,X
DEX
BPL lbl_83e3
LDA $68FE,Y
AND #$03
TAX
LDY #$09
lbl_83f1:
TYA
AND #$07
BEQ lbl_8404
CMP #$07
BEQ lbl_8404
CPY #$21
BCS lbl_840a
LDA $83D3,X
STA $0530,Y
lbl_8404:
INY
CPY #$27
BCC lbl_83f1
RTS
lbl_840a:
LDA $83D3,X
AND #$0F
STA $00
LDA $0530,Y
AND #$F0
ORA $00
STA $0530,Y
JMP lbl_8404
lbl_841e:
JSR lbl_8424
JMP $F238
lbl_8424:
LDA $13
JSR switch_jump
.addr lbl_8439
.addr lbl_847e
.addr lbl_8492
.addr lbl_84a4
.addr lbl_84df
.addr lbl_84e8
.addr lbl_84ba
.addr lbl_84cc
lbl_8439:
LDA #$00
STA $E2
STA $FD
LDA #$08
BIT $98
BNE lbl_8471
LSR
BIT $98
BEQ lbl_8457
LDA #$21
STA $58
LDA #$FF
STA $E9
lbl_8452:
INC $13
INC $13
RTS
lbl_8457:
LDY #$A0
LDX $10
BNE lbl_845f
LDY #$E0
lbl_845f:
LSR
BIT $98
BEQ lbl_846c
LDY #$81
LDX $10
BNE lbl_846c
LDY #$41
lbl_846c:
STY $E8
JMP lbl_8452
lbl_8471:
LDA #$28
STA $58
LDA #$16
STA $E9
LDA $EB
JSR lbl_83d7
lbl_847e:
JSR lbl_8484
JMP lbl_8501
lbl_8484:
LDA #$D0
LDY #$17
LDX $13
BEQ lbl_8491
lbl_848c:
LDY #$2F
CLC
ADC #$18
lbl_8491:
RTS
lbl_8492:
INC $13
LDA $15
CLC
ADC #$01
AND #$03
LDY $10
BNE lbl_84a1
AND #$01
lbl_84a1:
STA $E6
RTS
lbl_84a4:
JSR lbl_81dd
JSR lbl_8506
LDA $13
CMP #$03
BEQ lbl_84b9
LDY #$FF
STY $E9
STY $ED
INY
STY $E8
lbl_84b9:
RTS
lbl_84ba:
LDA $10
BEQ lbl_84cc
LDY $EB
JSR lbl_b68d
BEQ lbl_84cc
LDA #$00
STA $E9
INC $13
RTS
lbl_84cc:
LDA #$01
STA $13
LSR
STA $11
STA $010C
STA $E7
STA $E3
LDA #$04
STA $12
RTS
lbl_84df:
LDA #$08
BIT $98
BEQ lbl_84e8
JMP lbl_8452
lbl_84e8:
LDA #$D0
LDY #$17
LDX $13
CPX #$04
BEQ lbl_8501
PHA
LDA $98
CMP #$04
BCS lbl_84fd
LDA #$00
STA $5F
lbl_84fd:
PLA
JSR lbl_848c
lbl_8501:
LDX #$23
JMP lbl_8ca6
lbl_8506:
LDA $E9
CMP #$16
BCS lbl_8515
CMP $ED
BEQ lbl_8520
STA $ED
JMP lbl_a924
lbl_8515:
LDA $E8
BEQ lbl_8520
CMP #$21
BCS lbl_8520
JMP lbl_a8de
lbl_8520:
RTS
lbl_8521:
LDA PPUSTATUS
AND #$40
BEQ lbl_8521
LDA PPUSTATUS
LDY #$03
lbl_852d:
LDX #$30
lbl_852f:
DEX
BPL lbl_852f
DEY
BPL lbl_852d
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA $12
CMP #$08
BCS lbl_858c
LDA $13
BEQ lbl_858b
LDA $98
CMP #$04
BCC lbl_856d
LDY #$5E
lbl_8550:
NOP
DEY
BPL lbl_8550
NOP
NOP
NOP
NOP
NOP
LDA PPUSTATUS
LDA $58
LDY $E2
STA PPUADDR
STY PPUADDR
LDA PPUDATA
LDA PPUDATA
RTS
lbl_856d:
LDY #$5E
lbl_856f:
NOP
DEY
BPL lbl_856f
NOP
NOP
NOP
LDA $FF
AND #$FE
ORA $5F
STA $FF
STA PPUCTRL
LDA $FD
STA PPUSCROLL
LDA #$00
STA PPUSCROLL
lbl_858b:
RTS
lbl_858c:
CMP #$11
BCS lbl_8593
JMP disable_rendering
lbl_8593:
LDA $FF
ORA #$01
STA $FF
STA PPUCTRL
RTS
.repeat $63
.byte $FF
.endrepeat
lbl_8600:
JSR disable_rendering
LDA $13
BNE lbl_8613
STA_absolute $0005A
JSR $E46D
JSR $EA2B
JMP $EA00
lbl_8613:
LDA #$04
STA $14
JMP $6C90
lbl_861a:
JSR $E46D
JSR lbl_b4ac
BCS lbl_8625
JMP $6C90
lbl_8625:
JMP $FF50
lbl_8628:
LDX #$00
JSR $EDF4
CMP #$24
BNE lbl_8643
LDA #$00
STA $0619
LDA #$08
STA $0603
LDA $84
CLC
ADC #$10
STA $0412
lbl_8643:
INC $11
RTS
.byte $4E
.byte $57
.byte $60
.byte $69
.byte $86
.byte $86
.byte $86
.byte $86
.byte $55
.byte $B5
.byte $78
.byte $98
.byte $7A
.byte $9A
.byte $6C
.byte $AC
.byte $8D
.byte $82
.byte $63
.byte $A3
.byte $75
.byte $95
.byte $77
.byte $97
.byte $5A
.byte $BA
.byte $A3
.byte $75
.byte $B5
.byte $96
.byte $87
.byte $99
.byte $7A
.byte $BA
.byte $AC
.byte $63
.byte $55
.byte $95
.byte $76
.byte $88
.byte $79
.byte $5A
.byte $9A
.byte $6C
.byte $18
.byte $E8
.byte $28
.byte $D8
.byte $03
.byte $03
.byte $04
.byte $03
.byte $04
.byte $03
.byte $04
.byte $03
.byte $04
.byte $1A
.byte $1A
.byte $02
.byte $01
.byte $02
.byte $01
.byte $01
.byte $02
.byte $01
.byte $02