aboutsummaryrefslogtreecommitdiff
path: root/music/load.gbasm
blob: dde56272e512fba26a71d93a587071741fd8e605 (plain)
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
Load_Music:
	.LOAD_BANK_OF =_music_Test

	LD HL, ptr(=_music_Test+52)
	LD A, L
	ADD (HL)
	LD L, A
	LD A, H
	ADC $00
	LD H, A

	LD A, bank(=_music_Test)
	LD ($mem_current_vgm_pc), A
	LD A, H
	LD ($mem_current_vgm_pc+1), A
	LD A, L
	LD ($mem_current_vgm_pc+2), A
	RET

Loop_Music:
	.LOAD_BANK_OF =_music_Test

	LD HL, ptr(=_music_Test+28)
	LD BC, ptr(=_music_Test+28)
	LD E, bank(=_music_Test+28)

	LD A, B
	SUB $40
	LD B, A

	LD A, (HL+)
	ADD C
	LD C, A
	LD A, (HL+)
	ADC B
	LD B, A
	LD A, (HL+)
	ADC E
	LD E, A

	LD A, $00
	SLA B
	RL A
	ADD E
	LD E, A

	SRA B
	LD A, $40
	ADD B
	LD B, A

	LD A, E
	LD ($mem_current_vgm_pc), A
	LD A, B
	LD ($mem_current_vgm_pc+1), A
	LD A, C
	LD ($mem_current_vgm_pc+2), A
	RET

Inc_HL_Fix_Bank:
	PUSH AF
	INC HL
	LD A, H
	CP $80
	JR C, =.end
	SUB $40
	LD H, A

	LD A, $saved_rom_bank
	INC A
	.CHANGE_BANK_TO_A

	.end:
	POP AF
	RET

Play_Music:
	LD A, ($mem_current_vgm_pc)
	.CHANGE_BANK_TO_A
	LD A, ($mem_current_vgm_pc+1)
	LD H, A
	LD A, ($mem_current_vgm_pc+2)
	LD L, A

	.next:
	LD A, (HL)
	CALL =Inc_HL_Fix_Bank
	CP $b3
	JR NZ, =.set_register.end
	.set_register:
		LD A, (HL)
		CALL =Inc_HL_Fix_Bank
		ADD $10
		LD C, A
		LD A, (HL)
		CALL =Inc_HL_Fix_Bank
		LD (C), A
		JR =.next
	.set_register.end:

	CP $66
	JP Z, =Loop_Music


	CP $62
	JR Z, =.panic.end
	CP $61
	JR NZ, =.the61thingy.end
	.the61thingy:
	CALL =Inc_HL_Fix_Bank
	CALL =Inc_HL_Fix_Bank
	JR =.panic.end
	.the61thingy.end:

	.panic:
		LD A, $saved_rom_bank
		STOP
	.panic.end:

	LD A, H
	LD ($mem_current_vgm_pc+1), A
	LD A, L
	LD ($mem_current_vgm_pc+2), A
	LD A, $saved_rom_bank
	LD ($mem_current_vgm_pc), A
	RET