-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy paths2.sounddriver.asm
2471 lines (2146 loc) · 74.4 KB
/
s2.sounddriver.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
Go_SoundTypes: dc.l SoundTypes
Go_SoundD0: dc.l SoundD0Index
Go_MusicIndex: dc.l MusicIndex
Go_SoundIndex: dc.l SoundIndex
off_719A0: dc.l byte_71A94
Go_PSGIndex: dc.l PSG_Index
; ---------------------------------------------------------------------------
; PSG instruments used in music
; ---------------------------------------------------------------------------
PSG_Index: dc.l PSG1, PSG2, PSG3, PSG4, PSG5, PSG6, PSG7, PSG8, PSG9
PSG1: dc.b 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7,$80
PSG2: dc.b 0, 2, 4, 6, 8,$10,$80
PSG3: dc.b 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,$80
PSG4: dc.b 0, 0, 2, 3, 4, 4, 5, 5, 5, 6,$80
PSG6: dc.b 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0,$80
PSG5: dc.b 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4,$80
PSG7: dc.b 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 7,$80
PSG8: dc.b 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7,$80
PSG9: dc.b 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $A, $B, $C, $D, $E, $F,$80
byte_71A94: dc.b 7,$72,$73,$26,$15, 8,$FF, 5
; ---------------------------------------------------------------------------
; Music Pointers
; ---------------------------------------------------------------------------
MusicIndex:
MusPtr_GHZ: dc.l Music81
MusPtr_LZ: dc.l Music82
MusPtr_CPZ: dc.l Music83
MusPtr_EHZ: dc.l Music84
MusPtr_HPZ: dc.l Music85
MusPtr_HTZ: dc.l Music86
MusPtr_Invincible: dc.l Music87
MusPtr_ExtraLife: dc.l Music88
MusPtr_SpecialStage: dc.l Music89
MusPtr_Title: dc.l Music8A
MusPtr_Ending: dc.l Music8B
MusPtr_Boss: dc.l Music8C
dc.l Music8D, Music8E, Music8F, Music90, Music91, Music92
dc.l Music93
; ---------------------------------------------------------------------------
; Type of sound being played ($90 = music; $70 = normal sound effect)
; ---------------------------------------------------------------------------
SoundTypes: dc.b $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90
dc.b $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$80
dc.b $70,$70,$70,$70,$70,$70,$70,$70,$70,$68,$70,$70,$70,$60,$70,$70
dc.b $60,$70,$60,$70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$7F,$60
dc.b $70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$70,$80
dc.b $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$90
dc.b $90,$90,$90,$90
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
sub_71B4C:
move.w #$100,(Z80_Bus_Request).l ; stop the Z80
nop
nop
nop
loc_71B5A:
btst #0,(Z80_Bus_Request).l
bne.s loc_71B5A
btst #7,($A01FFD).l
beq.s UpdateMusic
startZ80
nop
nop
nop
nop
nop
bra.s sub_71B4C
; ===========================================================================
; loc_71B82:
UpdateMusic:
lea ($FFF000).l,a6
clr.b $E(a6)
tst.b StopMusic(a6) ; is music paused?
bne.w loc_71E50 ; if yes, branch
subq.b #1,TempoTimeout(a6)
bne.s loc_71B9E
jsr TempoWait(pc)
loc_71B9E:
move.b FadeOutCounter(a6),d0
beq.s loc_71BA8
jsr sub_72504(pc)
loc_71BA8:
tst.b $24(a6)
beq.s loc_71BB2
jsr sub_7267C(pc)
loc_71BB2:
tst.w SFXToPlay(a6) ; is music or sound being played?
beq.s loc_71BBC ; if not, branch
jsr CycleQueue(pc)
loc_71BBC:
cmpi.b #$80,QueueToPlay(a6)
beq.s loc_71BC8
jsr PlaySoundByIndex(pc)
loc_71BC8:
lea $40(a6),a5
tst.b (a5)
bpl.s loc_71BD4
jsr DACUpdateTrack(pc)
loc_71BD4:
clr.b DACUpdating(a6)
moveq #5,d7
loc_71BDA:
adda.w #$30,a5
tst.b (a5)
bpl.s loc_71BE6
jsr FMUpdateTrack(pc)
loc_71BE6:
dbf d7,loc_71BDA
moveq #2,d7
loc_71BEC:
adda.w #$30,a5
tst.b (a5)
bpl.s loc_71BF8
jsr sub_72850(pc)
loc_71BF8:
dbf d7,loc_71BEC
move.b #-$80,$E(a6)
moveq #2,d7
loc_71C04:
adda.w #$30,a5
tst.b (a5)
bpl.s loc_71C10
jsr FMUpdateTrack(pc)
loc_71C10:
dbf d7,loc_71C04
moveq #2,d7
loc_71C16:
adda.w #$30,a5
tst.b (a5)
bpl.s loc_71C22
jsr sub_72850(pc)
loc_71C22:
dbf d7,loc_71C16
move.b #$40,$E(a6)
adda.w #$30,a5
tst.b (a5)
bpl.s loc_71C38
jsr FMUpdateTrack(pc)
loc_71C38:
adda.w #$30,a5
tst.b (a5)
bpl.s loc_71C44
jsr sub_72850(pc)
loc_71C44:
startZ80
rts
; End of function sub_71B4C
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
; sub_71C4E:
DACUpdateTrack:
subq.b #1,$E(a5)
bne.s locret_71CAA
move.b #$80,DACUpdating(a6)
movea.l 4(a5),a4
loc_71C5E:
moveq #0,d5
move.b (a4)+,d5
cmpi.b #$E0,d5
bcs.s loc_71C6E
jsr CoordFlag(pc)
bra.s loc_71C5E
; ===========================================================================
loc_71C6E:
tst.b d5
bpl.s loc_71C84
move.b d5,$10(a5)
move.b (a4)+,d5
bpl.s loc_71C84
subq.w #1,a4
move.b $F(a5),$E(a5)
bra.s DACAfterDur
; ===========================================================================
loc_71C84:
jsr SetDuration(pc)
; loc_71C88:
DACAfterDur:
move.l a4,4(a5)
btst #2,(a5)
bne.s locret_71CAA
moveq #0,d0
move.b $10(a5),d0
cmpi.b #$80,d0
beq.s locret_71CAA
btst #3,d0
bne.s SetTimpaniTempo
move.b d0,($A01FFF).l
locret_71CAA:
rts
; ===========================================================================
; loc_71CAC:
SetTimpaniTempo:
subi.b #$88,d0
move.b TimpaniTempo(pc,d0.w),d0
move.b d0,($A000EA).l
move.b #$83,($A01FFF).l
rts
; End of function DACUpdateTrack
; ===========================================================================
; byte_71CC4:
TimpaniTempo: dc.b $12,$15,$1C,$1D,$FF,$FF
; ||||||||||||||| S U B R O U T I N E||||||||||||||||||||||||||||||||||||||||
; sub_71CCA:
FMUpdateTrack:
subq.b #1,$E(a5)
bne.s loc_71CE0
bclr #4,(a5)
jsr sub_71CEC(pc)
jsr sub_71E18(pc)
bra.w loc_726E2
; ===========================================================================
loc_71CE0: ; CODE XREF: FMUpdateTrack+4j
jsr sub_71D9E(pc)
jsr sub_71DC6(pc)
bra.w loc_71E24
; End of function FMUpdateTrack
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
sub_71CEC: ; DATA XREF: FMUpdateTrack+At
movea.l 4(a5),a4
bclr #1,(a5)
loc_71CF4: ; CODE XREF: sub_71CEC+16j
moveq #0,d5
move.b (a4)+,d5
cmpi.b #$E0,d5
bcs.s loc_71D04
jsr CoordFlag(pc)
bra.s loc_71CF4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71D04: ; CODE XREF: sub_71CEC+10j
jsr sub_726FE(pc)
tst.b d5
bpl.s loc_71D1A
jsr sub_71D22(pc)
move.b (a4)+,d5
bpl.s loc_71D1A
subq.w #1,a4
bra.w sub_71D60
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71D1A: ; CODE XREF: sub_71CEC+1Ej
; sub_71CEC+26j
jsr SetDuration(pc)
bra.w sub_71D60
; End of function sub_71CEC
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
sub_71D22:
subi.b #-$80,d5
beq.s loc_71D58
add.b 8(a5),d5
andi.w #$7F,d5
lsl.w #1,d5
lea FMFrequencies(pc),a0
move.w (a0,d5.w),d6
move.w d6,$10(a5)
rts
; End of function sub_71D22
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
; sub_71D40:
SetDuration:
move.b d5,d0
move.b 2(a5),d1
loc_71D46:
subq.b #1,d1
beq.s loc_71D4E
add.b d5,d0
bra.s loc_71D46
; ===========================================================================
loc_71D4E:
move.b d0,$F(a5)
move.b d0,$E(a5)
rts
; End of function SetDuration
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
; START OF FUNCTION CHUNK FOR sub_71D22
loc_71D58: ; CODE XREF: sub_71D22+4j
bset #1,(a5)
clr.w $10(a5)
; END OF FUNCTION CHUNK FOR sub_71D22
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
sub_71D60: ; CODE XREF: sub_71CEC+2Aj
; sub_71CEC+32j ...
move.l a4,4(a5)
move.b $F(a5),$E(a5)
btst #4,(a5)
bne.s locret_71D9C
move.b $13(a5),$12(a5)
clr.b $C(a5)
btst #3,(a5)
beq.s locret_71D9C
movea.l $14(a5),a0
move.b (a0)+,$18(a5)
move.b (a0)+,$19(a5)
move.b (a0)+,$1A(a5)
move.b (a0)+,d0
lsr.b #1,d0
move.b d0,$1B(a5)
clr.w $1C(a5)
locret_71D9C: ; CODE XREF: sub_71D60+Ej
; sub_71D60+1Ej
rts
; End of function sub_71D60
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
sub_71D9E: ; DATA XREF: FMUpdateTrack:loc_71CE0t
; sub_72850:loc_72866t
tst.b $12(a5)
beq.s locret_71DC4
subq.b #1,$12(a5)
bne.s locret_71DC4
bset #1,(a5)
tst.b 1(a5)
bmi.w loc_71DBE
jsr sub_726FE(pc)
addq.w #4,sp
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71DBE: ; CODE XREF: sub_71D9E+14j
jsr sub_729A0(pc)
addq.w #4,sp
locret_71DC4: ; CODE XREF: sub_71D9E+4j sub_71D9E+Aj
rts
; End of function sub_71D9E
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
sub_71DC6: ; DATA XREF: FMUpdateTrack+1At
; sub_72850+1Et
addq.w #4,sp
btst #3,(a5)
beq.s locret_71E16
tst.b $18(a5)
beq.s loc_71DDA
subq.b #1,$18(a5)
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71DDA: ; CODE XREF: sub_71DC6+Cj
subq.b #1,$19(a5)
beq.s loc_71DE2
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71DE2: ; CODE XREF: sub_71DC6+18j
movea.l $14(a5),a0
move.b 1(a0),$19(a5)
tst.b $1B(a5)
bne.s loc_71DFE
move.b 3(a0),$1B(a5)
neg.b $1A(a5)
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71DFE: ; CODE XREF: sub_71DC6+2Aj
subq.b #1,$1B(a5)
move.b $1A(a5),d6
ext.w d6
add.w $1C(a5),d6
move.w d6,$1C(a5)
add.w $10(a5),d6
subq.w #4,sp
locret_71E16: ; CODE XREF: sub_71DC6+6j
rts
; End of function sub_71DC6
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
sub_71E18: ; DATA XREF: FMUpdateTrack+Et
btst #1,(a5)
bne.s locret_71E48
move.w $10(a5),d6
beq.s loc_71E4A
loc_71E24: ; CODE XREF: FMUpdateTrack+1Ej
move.b $1E(a5),d0
ext.w d0
add.w d0,d6
btst #2,(a5)
bne.s locret_71E48
move.w d6,d1
lsr.w #8,d1
move.b #$A4,d0
jsr WriteFMIorII(pc)
move.b d6,d1
move.b #$A0,d0
jsr WriteFMIorII(pc)
locret_71E48: ; CODE XREF: sub_71E18+4j
; sub_71E18+18j
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71E4A: ; CODE XREF: sub_71E18+Aj
bset #1,(a5)
rts
; End of function sub_71E18
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
; START OF FUNCTION CHUNK FOR sub_71B4C
loc_71E50: ; CODE XREF: sub_71B4C+44j
bmi.s loc_71E94
cmpi.b #2,StopMusic(a6)
beq.w loc_71EFE
move.b #2,StopMusic(a6)
moveq #2,d3
move.b #$B4,d0
moveq #0,d1
loc_71E6A: ; CODE XREF: sub_71B4C+328j
jsr WriteFMI(pc)
jsr WriteFMII(pc)
addq.b #1,d0
dbf d3,loc_71E6A
moveq #2,d3
moveq #$28,d0
loc_71E7C: ; CODE XREF: sub_71B4C+33Cj
move.b d3,d1
jsr WriteFMI(pc)
addq.b #4,d1
jsr WriteFMI(pc)
dbf d3,loc_71E7C
jsr sub_729B6(pc)
bra.w loc_71C44
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_71E94: ; CODE XREF: sub_71B4C:loc_71E50j
clr.b StopMusic(a6)
moveq #$30,d3
lea $40(a6),a5
moveq #6,d4
loc_71EA0: ; CODE XREF: sub_71B4C+36Ej
btst #7,(a5)
beq.s loc_71EB8
btst #2,(a5)
bne.s loc_71EB8
move.b #$B4,d0
move.b $A(a5),d1
jsr WriteFMIorII(pc)
loc_71EB8: ; CODE XREF: sub_71B4C+358j
; sub_71B4C+35Ej
adda.w d3,a5
dbf d4,loc_71EA0
lea $220(a6),a5
moveq #2,d4
loc_71EC4: ; CODE XREF: sub_71B4C+392j
btst #7,(a5)
beq.s loc_71EDC
btst #2,(a5)
bne.s loc_71EDC
move.b #$B4,d0
move.b $A(a5),d1
jsr WriteFMIorII(pc)
loc_71EDC: ; CODE XREF: sub_71B4C+37Cj
; sub_71B4C+382j
adda.w d3,a5
dbf d4,loc_71EC4
lea $340(a6),a5
btst #7,(a5)
beq.s loc_71EFE
btst #2,(a5)
bne.s loc_71EFE
move.b #$B4,d0
move.b $A(a5),d1
jsr WriteFMIorII(pc)
loc_71EFE:
bra.w loc_71C44
; ---------------------------------------------------------------------------
; Subroutine to cycle through the sound queue
; ---------------------------------------------------------------------------
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
; Sound_Play:
CycleQueue:
movea.l (Go_SoundTypes).l,a0
lea SFXToPlay(a6),a1 ; load music track number
move.b SFXPriorityVal(a6),d3
moveq #2,d4
loc_71F12:
move.b (a1),d0 ; move track number to d0
move.b d0,d1
clr.b (a1)+
subi.b #MusID__First,d0
bcs.s loc_71F3E
cmpi.b #$80,QueueToPlay(a6)
beq.s loc_71F2C
move.b d1,SFXToPlay(a6)
bra.s loc_71F3E
; ---------------------------------------------------------------------------
loc_71F2C:
andi.w #$7F,d0
move.b (a0,d0.w),d2
cmp.b d3,d2
bcs.s loc_71F3E
move.b d2,d3
move.b d1,QueueToPlay(a6) ; set music flag
loc_71F3E:
dbf d4,loc_71F12
tst.b d3
bmi.s locret_71F4A
move.b d3,SFXPriorityVal(a6)
locret_71F4A:
rts
; End of function CycleQueue
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
; loc_71F4C: Sound_ChkValue:
PlaySoundByIndex:
moveq #0,d7
move.b QueueToPlay(a6),d7
beq.w Sound_E4
bpl.s locret_71F8C
move.b #$80,QueueToPlay(a6) ; reset music flag
; music
cmpi.b #$9F,d7
bls.w PlayMusic
; redundant check unless the above is changed to a lower value
cmpi.b #$A0,d7
bcs.w locret_71F8C
; sounds
cmpi.b #$CF,d7
bls.w PlaySound_CheckRing
; redundant check unless the above is changed to a lower value
cmpi.b #$D0,d7
bcs.w locret_71F8C
; special sounds
cmpi.b #$E0,d7
bcs.w loc_7230C
; sound commands
cmpi.b #$E4,d7
bls.s PlayCommand
locret_71F8C:
rts
; ---------------------------------------------------------------------------
; loc_71F8E:
PlayCommand:
subi.b #$E0,d7
lsl.w #2,d7
jmp CommandIndex(pc,d7.w)
; ===========================================================================
; loc_71F98:
CommandIndex:
bra.w Sound_E0
bra.w PlaySegaSound
bra.w Sound_E2
bra.w Sound_E3
bra.w Sound_E4
; ===========================================================================
; ---------------------------------------------------------------------------
; Play the 'SEEEEEEEEGA!' sound
; ---------------------------------------------------------------------------
; loc_71FAC: Sound_E1:
PlaySegaSound:
move.b #$88,($A01FFF).l
startZ80
move.w #$11,d1
loc_71FC0:
move.w #-1,d0
loc_71FC4:
nop
dbf d0,loc_71FC4
dbf d1,loc_71FC0
addq.w #4,sp
rts
; End of function PlaySegaSound
; ===========================================================================
; ---------------------------------------------------------------------------
; Play music tracks (uses sound IDs $81-$9F)
; ---------------------------------------------------------------------------
; loc_71FD2: Music_81to9F:
PlayMusic:
cmpi.b #MusID_ExtraLife,d7 ; is "extra life" music played?
bne.s loc_72024 ; if not, branch
tst.b $27(a6)
bne.w loc_721B6
lea $40(a6),a5
moveq #9,d0
loc_71FE6: ; CODE XREF: PlaySoundByIndex+A2j
bclr #2,(a5)
adda.w #$30,a5
dbf d0,loc_71FE6
lea $220(a6),a5
moveq #5,d0
loc_71FF8: ; CODE XREF: PlaySoundByIndex+B4j
bclr #7,(a5)
adda.w #$30,a5
dbf d0,loc_71FF8
clr.b SFXPriorityVal(a6)
movea.l a6,a0
lea $3A0(a6),a1
move.w #$87,d0
loc_72012: ; CODE XREF: PlaySoundByIndex+C8j
move.l (a0)+,(a1)+
dbf d0,loc_72012
move.b #-$80,$27(a6)
clr.b SFXPriorityVal(a6)
bra.s loc_7202C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_72024: ; CODE XREF: PlaySoundByIndex+8Aj
clr.b $27(a6)
clr.b $26(a6)
loc_7202C: ; CODE XREF: PlaySoundByIndex+D6j
jsr sub_725CA(pc)
movea.l (off_719A0).l,a4
subi.b #MusID__First,d7
move.b (a4,d7.w),$29(a6)
movea.l (Go_MusicIndex).l,a4
lsl.w #2,d7
movea.l (a4,d7.w),a4
moveq #0,d0
move.w (a4),d0
add.l a4,d0
move.l d0,$18(a6)
move.b 5(a4),d0
move.b d0,$28(a6)
tst.b $2A(a6)
beq.s loc_72068
move.b $29(a6),d0
loc_72068: ; CODE XREF: PlaySoundByIndex+116j
move.b d0,CurrentTempo(a6)
move.b d0,TempoTimeout(a6)
moveq #0,d1
movea.l a4,a3
addq.w #6,a4
moveq #0,d7
move.b 2(a3),d7
beq.w loc_72114
subq.b #1,d7
move.b #$C0,d1
move.b 4(a3),d4
moveq #$30,d6
move.b #1,d5
lea $40(a6),a1
lea byte_721BA(pc),a2
loc_72098: ; CODE XREF: PlaySoundByIndex+174j
bset #7,(a1)
move.b (a2)+,1(a1)
move.b d4,2(a1)
move.b d6,$D(a1)
move.b d1,$A(a1)
move.b d5,$E(a1)
moveq #0,d0
move.w (a4)+,d0
add.l a3,d0
move.l d0,4(a1)
move.w (a4)+,8(a1)
adda.w d6,a1
dbf d7,loc_72098
cmpi.b #7,2(a3)
bne.s loc_720D8
moveq #$2B,d0
moveq #0,d1
jsr WriteFMI(pc)
bra.w loc_72114
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_720D8: ; CODE XREF: PlaySoundByIndex+17Ej
moveq #$28,d0
moveq #6,d1
jsr WriteFMI(pc)
move.b #$42,d0
moveq #$7F,d1
jsr WriteFMII(pc)
move.b #$4A,d0
moveq #$7F,d1
jsr WriteFMII(pc)
move.b #$46,d0
moveq #$7F,d1
jsr WriteFMII(pc)
move.b #$4E,d0
moveq #$7F,d1
jsr WriteFMII(pc)
move.b #$B6,d0
move.b #$C0,d1
jsr WriteFMII(pc)
loc_72114: ; CODE XREF: PlaySoundByIndex+130j
; PlaySoundByIndex+188j
moveq #0,d7
move.b 3(a3),d7
beq.s loc_72154
subq.b #1,d7
lea $190(a6),a1
lea byte_721C2(pc),a2
loc_72126: ; CODE XREF: PlaySoundByIndex+204j
bset #7,(a1)
move.b (a2)+,1(a1)
move.b d4,2(a1)
move.b d6,$D(a1)
move.b d5,$E(a1)
moveq #0,d0
move.w (a4)+,d0
add.l a3,d0
move.l d0,4(a1)
move.w (a4)+,8(a1)
move.b (a4)+,d0
move.b (a4)+,$B(a1)
adda.w d6,a1
dbf d7,loc_72126
loc_72154: ; CODE XREF: PlaySoundByIndex+1CEj
lea $220(a6),a1
moveq #5,d7
loc_7215A: ; CODE XREF: PlaySoundByIndex+232j
tst.b (a1)
bpl.w loc_7217C
moveq #0,d0
move.b 1(a1),d0
bmi.s loc_7216E
subq.b #2,d0
lsl.b #2,d0
bra.s loc_72170
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_7216E: ; CODE XREF: PlaySoundByIndex+21Aj
lsr.b #3,d0
loc_72170: ; CODE XREF: PlaySoundByIndex+220j
lea dword_722CC(pc),a0
movea.l (a0,d0.w),a0
bset #2,(a0)
loc_7217C: ; CODE XREF: PlaySoundByIndex+210j
adda.w d6,a1
dbf d7,loc_7215A
tst.w $340(a6)
bpl.s loc_7218E
bset #2,$100(a6)
loc_7218E: ; CODE XREF: PlaySoundByIndex+23Aj
tst.w $370(a6)
bpl.s loc_7219A
bset #2,$1F0(a6)
loc_7219A: ; CODE XREF: PlaySoundByIndex+246j
lea $70(a6),a5
moveq #5,d4
loc_721A0: ; CODE XREF: PlaySoundByIndex+25Aj
jsr sub_726FE(pc)
adda.w d6,a5
dbf d4,loc_721A0
moveq #2,d4
loc_721AC: ; CODE XREF: PlaySoundByIndex+266j
jsr sub_729A0(pc)
adda.w d6,a5
dbf d4,loc_721AC
loc_721B6: ; CODE XREF: PlaySoundByIndex+90j
addq.w #4,sp
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
byte_721BA: dc.b 6, 0, 1, 2, 4, 5, 6, 0 ; DATA XREF: PlaySoundByIndex+148t
byte_721C2: dc.b $80, $A0, $C0, 0 ; DATA XREF: PlaySoundByIndex+1D6t
; ===========================================================================
; ---------------------------------------------------------------------------
; Play normal sound effect (uses IDs $A0-$CF)
; ---------------------------------------------------------------------------
; loc_721C6:
PlaySound_CheckRing:
tst.b $27(a6)
bne.w loc_722C6
tst.b FadeOutCounter(a6)
bne.w loc_722C6
tst.b $24(a6)
bne.w loc_722C6
cmpi.b #-$4B,d7 ; is ring sound effect played?
bne.s loc_721F4 ; if not, branch
tst.b $2B(a6)
bne.s loc_721EE
move.b #-$32,d7 ; play ring sound in left speaker
loc_721EE:
bchg #0,$2B(a6) ; change speaker
loc_721F4:
cmpi.b #-$59,d7 ; is "pushing" sound played?
bne.s loc_72208 ; if not, branch
tst.b $2C(a6)
bne.w locret_722C4
move.b #-$80,$2C(a6)
loc_72208:
movea.l (Go_SoundIndex).l,a0
subi.b #-$60,d7
lsl.w #2,d7
movea.l (a0,d7.w),a3
movea.l a3,a1
moveq #0,d1
move.w (a1)+,d1
add.l a3,d1
move.b (a1)+,d5
move.b (a1)+,d7
subq.b #1,d7
moveq #$30,d6
loc_72228: ; CODE XREF: PlaySoundByIndex:loc_722A8j
moveq #0,d3
move.b 1(a1),d3
move.b d3,d4
bmi.s loc_72244
subq.w #2,d3
lsl.w #2,d3
lea dword_722CC(pc),a5
movea.l (a5,d3.w),a5
bset #2,(a5)
bra.s loc_7226E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_72244: ; CODE XREF: PlaySoundByIndex+2E4j
lsr.w #3,d3
lea dword_722CC(pc),a5
movea.l (a5,d3.w),a5
bset #2,(a5)
cmpi.b #-$40,d4
bne.s loc_7226E
move.b d4,d0
ori.b #$1F,d0
move.b d0,(PSG_input).l
bchg #5,d0
move.b d0,(PSG_input).l
loc_7226E: ; CODE XREF: PlaySoundByIndex+2F6j
; PlaySoundByIndex+30Aj
movea.l dword_722EC(pc,d3.w),a5
movea.l a5,a2
moveq #$B,d0
loc_72276: ; CODE XREF: PlaySoundByIndex+32Cj
clr.l (a2)+
dbf d0,loc_72276
move.w (a1)+,(a5)
move.b d5,2(a5)
moveq #0,d0
move.w (a1)+,d0
add.l a3,d0
move.l d0,4(a5)
move.w (a1)+,8(a5)
move.b #1,$E(a5)
move.b d6,$D(a5)
tst.b d4
bmi.s loc_722A8
move.b #-$40,$A(a5)
move.l d1,$20(a5)
loc_722A8: ; CODE XREF: PlaySoundByIndex+350j
dbf d7,loc_72228
tst.b $250(a6)
bpl.s loc_722B8
bset #2,$340(a6)
loc_722B8: ; CODE XREF: PlaySoundByIndex+364j
tst.b $310(a6)
bpl.s locret_722C4
bset #2,$370(a6)
locret_722C4: ; CODE XREF: PlaySoundByIndex+2B2j
; PlaySoundByIndex+370j
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_722C6:
clr.b SFXPriorityVal(a6)
rts
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
dword_722CC: dc.l $FFF0D0, 0, $FFF100, $FFF130; 0
; DATA XREF: PlaySoundByIndex:loc_72170t
; PlaySoundByIndex+2EAt ...
dc.l $FFF190, $FFF1C0, $FFF1F0, $FFF1F0; 4
dword_722EC: dc.l $FFF220, 0, $FFF250, $FFF280; 0
dc.l $FFF2B0, $FFF2E0, $FFF310, $FFF310; 4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
; ---------------------------------------------------------------------------
; Play GHZ waterfall sound
; ---------------------------------------------------------------------------
loc_7230C: ; CODE XREF: PlaySoundByIndex+36j
tst.b $27(a6)
bne.w locret_723C6
tst.b FadeOutCounter(a6)
bne.w locret_723C6
tst.b $24(a6)
bne.w locret_723C6
movea.l (Go_SoundD0).l,a0
subi.b #-$30,d7
lsl.w #2,d7
movea.l (a0,d7.w),a3
movea.l a3,a1
moveq #0,d0
move.w (a1)+,d0
add.l a3,d0
move.l d0,$20(a6)
move.b (a1)+,d5
move.b (a1)+,d7
subq.b #1,d7
moveq #$30,d6
loc_72348: ; CODE XREF: PlaySoundByIndex:loc_72396j
move.b 1(a1),d4
bmi.s loc_7235A
bset #2,$100(a6)
lea $340(a6),a5
bra.s loc_72364
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_7235A: ; CODE XREF: PlaySoundByIndex+400j
bset #2,$1F0(a6)
lea $370(a6),a5
loc_72364: ; CODE XREF: PlaySoundByIndex+40Cj
movea.l a5,a2
moveq #$B,d0