Dump audio engine

This commit is contained in:
dannye
2021-05-03 00:11:51 -05:00
parent 7d960e4d95
commit 4d2eb182f7
8 changed files with 8383 additions and 3 deletions

View File

@@ -19,7 +19,7 @@ compare: baserom.gbc pokepuzzle.gbc
$(OBJS): $$*.asm $$($$*_dep)
@python $(EXTRAS)/gfx.py 2bpp $(2bppq)
@python $(EXTRAS)/gfx.py 1bpp $(1bppq)
rgbasm -E -i src/ -o $@ $<
rgbasm -E -L -i src/ -o $@ $<
pokepuzzle.gbc: $(OBJS)
rgblink -p 0xff -n $*.sym -m $*.map -O baserom.gbc -o $@ $^

7341
src/audio/engine.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1,2 @@
INCLUDE "constants/hardware_constants.asm"
INCLUDE "constants/music_constants.asm"

View File

@@ -0,0 +1,74 @@
; Hardware registers
rJOYP EQU $ff00 ; Joypad (R/W)
rSB EQU $ff01 ; Serial transfer data (R/W)
rSC EQU $ff02 ; Serial Transfer Control (R/W)
rSC_ON EQU 7
rSC_CGB EQU 1
rSC_CLOCK EQU 0
rDIV EQU $ff04 ; Divider Register (R/W)
rTIMA EQU $ff05 ; Timer counter (R/W)
rTMA EQU $ff06 ; Timer Modulo (R/W)
rTAC EQU $ff07 ; Timer Control (R/W)
rTAC_ON EQU 2
rTAC_4096_HZ EQU 0
rTAC_262144_HZ EQU 1
rTAC_65536_HZ EQU 2
rTAC_16384_HZ EQU 3
rIF EQU $ff0f ; Interrupt Flag (R/W)
rNR10 EQU $ff10 ; Channel 1 Sweep register (R/W)
rNR11 EQU $ff11 ; Channel 1 Sound length/Wave pattern duty (R/W)
rNR12 EQU $ff12 ; Channel 1 Volume Envelope (R/W)
rNR13 EQU $ff13 ; Channel 1 Frequency lo (Write Only)
rNR14 EQU $ff14 ; Channel 1 Frequency hi (R/W)
rNR21 EQU $ff16 ; Channel 2 Sound Length/Wave Pattern Duty (R/W)
rNR22 EQU $ff17 ; Channel 2 Volume Envelope (R/W)
rNR23 EQU $ff18 ; Channel 2 Frequency lo data (W)
rNR24 EQU $ff19 ; Channel 2 Frequency hi data (R/W)
rNR30 EQU $ff1a ; Channel 3 Sound on/off (R/W)
rNR31 EQU $ff1b ; Channel 3 Sound Length
rNR32 EQU $ff1c ; Channel 3 Select output level (R/W)
rNR33 EQU $ff1d ; Channel 3 Frequency's lower data (W)
rNR34 EQU $ff1e ; Channel 3 Frequency's higher data (R/W)
rNR41 EQU $ff20 ; Channel 4 Sound Length (R/W)
rNR42 EQU $ff21 ; Channel 4 Volume Envelope (R/W)
rNR43 EQU $ff22 ; Channel 4 Polynomial Counter (R/W)
rNR44 EQU $ff23 ; Channel 4 Counter/consecutive; Initial (R/W)
rNR50 EQU $ff24 ; Channel control / ON-OFF / Volume (R/W)
rNR51 EQU $ff25 ; Selection of Sound output terminal (R/W)
rNR52 EQU $ff26 ; Sound on/off
rWave EQU $ff30
rLCDC EQU $ff40 ; LCD Control (R/W)
rLCDC_ENABLE EQU 7
rLCDC_ENABLE_MASK EQU 1 << rLCDC_ENABLE
rSTAT EQU $ff41 ; LCDC Status (R/W)
rSCY EQU $ff42 ; Scroll Y (R/W)
rSCX EQU $ff43 ; Scroll X (R/W)
rLY EQU $ff44 ; LCDC Y-Coordinate (R)
rLYC EQU $ff45 ; LY Compare (R/W)
rDMA EQU $ff46 ; DMA Transfer and Start Address (W)
rBGP EQU $ff47 ; BG Palette Data (R/W) - Non CGB Mode Only
rOBP0 EQU $ff48 ; Object Palette 0 Data (R/W) - Non CGB Mode Only
rOBP1 EQU $ff49 ; Object Palette 1 Data (R/W) - Non CGB Mode Only
rWY EQU $ff4a ; Window Y Position (R/W)
rWX EQU $ff4b ; Window X Position minus 7 (R/W)
rKEY1 EQU $ff4d ; CGB Mode Only - Prepare Speed Switch
rVBK EQU $ff4f ; CGB Mode Only - VRAM Bank
rHDMA1 EQU $ff51 ; CGB Mode Only - New DMA Source, High
rHDMA2 EQU $ff52 ; CGB Mode Only - New DMA Source, Low
rHDMA3 EQU $ff53 ; CGB Mode Only - New DMA Destination, High
rHDMA4 EQU $ff54 ; CGB Mode Only - New DMA Destination, Low
rHDMA5 EQU $ff55 ; CGB Mode Only - New DMA Length/Mode/Start
rRP EQU $ff56 ; CGB Mode Only - Infrared Communications Port
rBGPI EQU $ff68 ; CGB Mode Only - Background Palette Index
rBGPD EQU $ff69 ; CGB Mode Only - Background Palette Data
rOBPI EQU $ff6a ; CGB Mode Only - Sprite Palette Index
rOBPD EQU $ff6b ; CGB Mode Only - Sprite Palette Data
rUNKNOWN1 EQU $ff6c ; (FEh) Bit 0 (Read/Write) - CGB Mode Only
rSVBK EQU $ff70 ; CGB Mode Only - WRAM Bank
rUNKNOWN2 EQU $ff72 ; (00h) - Bit 0-7 (Read/Write)
rUNKNOWN3 EQU $ff73 ; (00h) - Bit 0-7 (Read/Write)
rUNKNOWN4 EQU $ff74 ; (00h) - Bit 0-7 (Read/Write) - CGB Mode Only
rUNKNOWN5 EQU $ff75 ; (8Fh) - Bit 4-6 (Read/Write)
rUNKNOWN6 EQU $ff76 ; (00h) - Always 00h (Read Only)
rUNKNOWN7 EQU $ff77 ; (00h) - Always 00h (Read Only)
rIE EQU $ffff ; Interrupt Enable (R/W)

View File

@@ -53,3 +53,764 @@ SECTION "SGB Flag", ROM0[$146]
SECTION "Start", ROM0[$150]
Start: ; 0150 (0:0150)
SECTION "Func_10c4", ROM0[$10c4]
Func_10c4: ; 10c4 (0:10c4)
ld de, $2100
ldh a, [hROMBank]
push af
ld a, [wSongBank]
ldh [hROMBank], a
ld [de], a
ld l, c
ld h, b
ld a, [hli]
ld c, a
ld b, [hl]
pop af
ldh [hROMBank], a
ld [de], a
jp Func_80000.asm_80023
; 0x10dc
Func_10dc: ; 10dc (0:10dc)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_83401)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc61e], a
ld a, [hld]
ld [wc61e + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x10f5
Func_10f5: ; 10f5 (0:10f5)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld a, [bc]
ld l, a
pop af
ldh [hROMBank], a
ld [$2100], a
jp Func_803e6
; 0x110a
Func_110a: ; 110a (0:110a)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld l, c
ld h, b
ld a, [hli]
ld c, a
ld b, [hl]
pop af
ldh [hROMBank], a
ld [$2100], a
jp Func_803cd.asm_803e3
; 0x1122
Func_1122: ; 1122 (0:1122)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_82230)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc624], a
ld a, [hli]
ld [wc624 + 1], a
ld a, [hli]
ld [wc629], a
ld a, [hli]
ld [wc629 + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1143
Func_1143: ; 1143 (0:1143)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld a, [bc]
ld e, a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1156
Func_1156: ; 1156 (0:1156)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_81a31)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc6c3], a
ld a, [hld]
ld [wc6c3 + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x116f
Func_116f: ; 116f (0:116f)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
call wc6c2
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1183
Func_1183: ; 1183 (0:1183)
ld de, $2100
ldh a, [hROMBank]
push af
ld a, [wSongBank]
ldh [hROMBank], a
ld [de], a
ld l, c
ld h, b
ld a, [hli]
ld c, a
ld b, [hl]
pop af
ldh [hROMBank], a
ld [de], a
jp Func_80525.asm_80548
; 0x119b
Func_119b: ; 119b (0:119b)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_83401)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc64e], a
ld a, [hld]
ld [wc64e + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x11b4
Func_11b4: ; 11b4 (0:11b4)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld a, [bc]
ld l, a
pop af
ldh [hROMBank], a
ld [$2100], a
jp Func_8090b
; 0x11c9
Func_11c9: ; 11c9 (0:11c9)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld l, c
ld h, b
ld a, [hli]
ld c, a
ld b, [hl]
pop af
ldh [hROMBank], a
ld [$2100], a
jp Func_808f2.asm_80908
; 0x11e1
Func_11e1: ; 11e1 (0:11e1)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_82230)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc654], a
ld a, [hli]
ld [wc654 + 1], a
ld a, [hli]
ld [wc659], a
ld a, [hli]
ld [wc659 + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1202
Func_1202: ; 1202 (0:1202)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld a, [bc]
ld e, a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1215
Func_1215: ; 1215 (0:1215)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_81a3f)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc6c6], a
ld a, [hld]
ld [wc6c6 + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x122e
Func_122e: ; 122e (0:122e)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
call wc6c5
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1242
Func_1242: ; 1242 (0:1242)
ld de, $2100
ldh a, [hROMBank]
push af
ld a, [wSongBank]
ldh [hROMBank], a
ld [de], a
ld l, c
ld h, b
ld a, [hli]
ld c, a
ld b, [hl]
pop af
ldh [hROMBank], a
ld [de], a
jp Func_80a4a.asm_80a6d
; 0x125a
Func_125a: ; 125a (0:125a)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_83401)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc67e], a
ld a, [hld]
ld [wc67e + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1273
Func_1273: ; 1273 (0:1273)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld a, [bc]
ld l, a
pop af
ldh [hROMBank], a
ld [$2100], a
jp Func_80e34
; 0x1288
Func_1288: ; 1288 (0:1288)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld l, c
ld h, b
ld a, [hli]
ld c, a
ld b, [hl]
pop af
ldh [hROMBank], a
ld [$2100], a
jp Func_80e1b.asm_80e31
; 0x12a0
Func_12a0: ; 12a0 (0:12a0)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_82230)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc684], a
ld a, [hli]
ld [wc684 + 1], a
ld a, [hli]
ld [wc689], a
ld a, [hli]
ld [wc689 + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x12c1
Func_12c1: ; 12c1 (0:12c1)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld a, [bc]
ld e, a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x12d4
Func_12d4: ; 12d4 (0:12d4)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_81a3f)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc6c9], a
ld a, [hld]
ld [wc6c9 + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x12ed
Func_12ed: ; 12ed (0:12ed)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
call wc6c8
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1301
Func_1301: ; 1301 (0:1301)
ld de, $2100
ldh a, [hROMBank]
push af
ld a, [wSongBank]
ldh [hROMBank], a
ld [de], a
ld l, c
ld h, b
ld a, [hli]
ld c, a
ld b, [hl]
pop af
ldh [hROMBank], a
ld [de], a
jp Func_80f80.asm_80fa3
; 0x1319
Func_1319: ; 1319 (0:1319)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_82230)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc6b4], a
ld a, [hli]
ld [wc6b4 + 1], a
ld a, [hli]
ld [wc6b9], a
ld a, [hli]
ld [wc6b9 + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x133a
Func_133a: ; 133a (0:133a)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
ld a, [bc]
ld e, a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x134d
Func_134d: ; 134d (0:134d)
ldh a, [hROMBank]
push af
ld a, BANK(PointerTable_81a3f)
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld [wc6cc], a
ld a, [hld]
ld [wc6cc + 1], a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1366
Func_1366: ; 1366 (0:1366)
ldh a, [hROMBank]
push af
ld a, $20
ldh [hROMBank], a
ld [$2100], a
call wc6cb
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x137a
Func_137a: ; 137a (0:137a)
ldh a, [hROMBank]
push af
ld a, BANK(Func_81383)
ldh [hROMBank], a
ld [$2100], a
call Func_81383
pop af
ldh [hROMBank], a
ld [$2100], a
ldh a, [hROMBank]
push af
ld a, $21
ldh [hROMBank], a
ld [$2100], a
call $4000
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x13a1
; play song
; input:
; a: song id
Func_13a1: ; 13a1 (0:13a1)
push af
push hl
ld l, a
ld a, [wc601]
and a
jr nz, .asm_13bd
ldh a, [hROMBank]
push af
ld a, BANK(Func_813ba)
ldh [hROMBank], a
ld [$2100], a
call Func_813ba
pop af
ldh [hROMBank], a
ld [$2100], a
.asm_13bd
pop hl
pop af
ret
; 0x13c0
; get song header
; input:
; hl: header pointer
; output:
; wSongBank: song bank
; hl: song pointer
Func_13c0: ; 13c0 (0:13c0)
ld de, $2100
ldh a, [hROMBank] ; hROMBank
push af
ld a, BANK(SongPointers)
ldh [hROMBank], a
ld [de], a
ld a, [hld]
ld [wSongBank], a
ld a, [hld]
ld l, [hl]
ld h, a
pop af
ldh [hROMBank], a
ld [de], a
ret
; 0x13d7
; get next song byte
; input:
; hl: song pointer
; wSongBank: song bank
; output:
; e: song byte
Func_13d7: ; 13d7 (0:13d7)
ldh a, [hROMBank]
push af
ld a, [wSongBank]
ldh [hROMBank], a
ld [$2100], a
ld a, [hli]
ld e, a
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x13eb
; update sound
Func_13eb: ; 13eb (0:13eb)
ldh a, [hROMBank]
push af
ld a, $21
ldh [hROMBank], a
ld [$2100], a
call $4012
pop af
ldh [hROMBank], a
ld [$2100], a
ldh a, [hROMBank]
push af
ld a, BANK(Func_814c5)
ldh [hROMBank], a
ld [$2100], a
call Func_814c5 ; update sound
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1412
; get next song byte via bc
; input:
; bc: song pointer
; wSongBank: song bank
; output:
; e: song byte
Func_1412: ; 1412 (0:1412)
ld hl, $2100
ldh a, [hROMBank]
push af
ld a, [wSongBank]
ldh [hROMBank], a
ld [hl], a
ld a, [bc]
inc bc
ld e, a
pop af
ldh [hROMBank], a
ld [hl], a
ret
; 0x1426
Func_1426: ; 1426 (0:1426)
ldh a, [hROMBank]
push af
ld a, $21
ldh [hROMBank], a
ld [$2100], a
call $40c0
pop af
ldh [hROMBank], a
ld [$2100], a
ldh a, [hROMBank]
push af
ld a, BANK(Func_8143e)
ldh [hROMBank], a
ld [$2100], a
call Func_8143e
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x144d
Func_144d: ; 144d (0:144d)
ld e, a
ldh a, [hROMBank]
push af
ld a, BANK(Func_816fd)
ldh [hROMBank], a
ld [$2100], a
call Func_816fd
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1462
Func_1462: ; 1462 (0:1462)
ldh a, [hROMBank]
push af
ld a, BANK(Func_81817)
ldh [hROMBank], a
ld [$2100], a
call Func_81817
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1476
Func_1476: ; 1476 (0:1476)
ldh a, [hROMBank]
push af
ld a, BANK(DataTable_82f71)
ldh [hROMBank], a
ld [$2100], a
.asm_1480
ld a, [hli]
ld [$ff00+c], a
inc c
dec b
jr nz, .asm_1480
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x148d
Func_148d: ; 148d (0:148d)
ldh a, [hROMBank]
push af
ld a, BANK(Func_81468)
ldh [hROMBank], a
ld [$2100], a
call Func_81468
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x14a1
Func_14a1: ; 14a1 (0:14a1)
ldh a, [hROMBank]
push af
ld a, BANK(Func_81482)
ldh [hROMBank], a
ld [$2100], a
call Func_81482
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x14b5
Func_14b5: ; 14b5 (0:14b5)
ldh a, [hROMBank]
push af
ld a, BANK(Func_81490)
ldh [hROMBank], a
ld [$2100], a
call Func_81490
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x14c9
Func_14c9: ; 14c9 (0:14c9)
ldh a, [hROMBank]
push af
ld a, BANK(Func_814a9)
ldh [hROMBank], a
ld [$2100], a
call Func_814a9
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x14dd
Func_14dd: ; 14dd (0:14dd)
ld a, [wc601]
and a
jr z, .asm_14e5
scf
ret
.asm_14e5
ld a, [wc5fd]
and a
ret nz
ld a, [wChannel1Pointer + 1]
and a
ret nz
ld a, [wChannel2Pointer + 1]
and a
ret nz
ld a, [wChannel3Pointer + 1]
and a
ret nz
ld a, [wChannel4Pointer + 1]
and a
ret nz
scf
ret
; 0x1500
Func_1500: ; 1500 (0:1500)
ldh a, [hROMBank]
push af
ld a, BANK(Func_81857)
ldh [hROMBank], a
ld [$2100], a
call Func_81857
pop af
ldh [hROMBank], a
ld [$2100], a
ret
; 0x1514

9
src/hram.asm Normal file
View File

@@ -0,0 +1,9 @@
SECTION "High RAM", HRAM[$ff80]
ds $23
hROMBank:: ds 1 ; ffa3
ds $1a
hffbe:: ds 1 ; ffbe

View File

@@ -1,10 +1,12 @@
INCLUDE "constants.asm"
INCLUDE "wram.asm"
INCLUDE "hram.asm"
INCLUDE "home.asm"
SECTION "Song Pointers", ROMX[$590e], BANK[$20]
SECTION "Audio Engine", ROMX[$4000], BANK[$20]
INCLUDE "audio/song_pointers.asm"
INCLUDE "audio/engine.asm"
SECTION "Panel de Pon 3", ROMX[$7689], BANK[$23]

192
src/wram.asm Normal file
View File

@@ -0,0 +1,192 @@
SECTION "Audio RAM", WRAM0[$c5f0]
wAudioStart::
wc5f0:: ds 1 ; c5f0
wc5f1:: ds 1 ; c5f1
; unused ?
ds $4
wc5f6:: ds 1 ; c5f6
wc5f7:: ds 1 ; c5f7
wc5f8:: ds 1 ; c5f8
wc5f9:: ds 1 ; c5f9
wc5fa:: ds 1 ; c5fa
wc5fb:: ds 1 ; c5fb
wSongBank:: ds 1 ; c5fc
wc5fd:: ds 1 ; c5fd
wc5fe:: ds 1 ; c5fe
wc5ff:: ds 1 ; c5ff
wc600:: ds 1 ; c600
wc601:: ds 1 ; c601
; channel 1
wc602:: ds 1 ; c602
wc603:: ds 1 ; c603
wc604:: ds 1 ; c604
wc605:: ds 1 ; c605
wc606:: ds 1 ; c606
wc607:: ds 1 ; c607
wc608:: ds 1 ; c608
wChannel1Pointer:: ds 2 ; c609
wc60b:: ds 1 ; c60b
wc60c:: ds 1 ; c60c
wc60d:: ds 1 ; c60d
wc60e:: ds 1 ; c60e
wc60f:: ds 1 ; c60f
wc610:: ds 1 ; c610
wc611:: ds 2 ; c611
; unused ?
ds $4
wc617:: ds 1 ; c617
wc618:: ds 1 ; c618
wc619:: ds 1 ; c619
wc61a:: ds 1 ; c61a
wc61b:: ds 1 ; c61b
wc61c:: ds 2 ; c61c
wc61e:: ds 2 ; c61e
wc620:: ds 2 ; c620
wc622:: ds 1 ; c622
wc623:: ds 1 ; c623
wc624:: ds 2 ; c624
wc626:: ds 2 ; c626
wc628:: ds 1 ; c628
wc629:: ds 2 ; c629
wc62b:: ds 1 ; c62b
wc62c:: ds 3 ; c62c
wc62f:: ds 2 ; c62f
wc631:: ds 1 ; c631
; channel 2
wc632:: ds 1 ; c632
wc633:: ds 1 ; c633
ds 1 ; c634
wc635:: ds 1 ; c635
wc636:: ds 1 ; c636
wc637:: ds 1 ; c637
wc638:: ds 1 ; c638
wChannel2Pointer:: ds 2 ; c639
wc63b:: ds 1 ; c63b
wc63c:: ds 1 ; c63c
wc63d:: ds 1 ; c63d
wc63e:: ds 1 ; c63e
wc63f:: ds 1 ; c63f
wc640:: ds 1 ; c640
wc641:: ds 2 ; c641
; unused ?
ds $4
wc647:: ds 1 ; c647
wc648:: ds 1 ; c648
wc649:: ds 1 ; c649
wc64a:: ds 1 ; c64a
wc64b:: ds 1 ; c64b
wc64c:: ds 2 ; c64c
wc64e:: ds 2 ; c64e
wc650:: ds 2 ; c650
wc652:: ds 1 ; c652
wc653:: ds 1 ; c653
wc654:: ds 2 ; c654
wc656:: ds 2 ; c656
wc658:: ds 1 ; c658
wc659:: ds 2 ; c659
wc65b:: ds 1 ; c65b
wc65c:: ds 3 ; c65c
wc65f:: ds 2 ; c65f
wc661:: ds 1 ; c661
; channel 3
wc662:: ds 1 ; c662
wc663:: ds 1 ; c663
wc664:: ds 1 ; c664
wc665:: ds 1 ; c665
wc666:: ds 1 ; c666
wc667:: ds 1 ; c667
wc668:: ds 1 ; c668
wChannel3Pointer:: ds 2 ; c669
wc66b:: ds 1 ; c66b
wc66c:: ds 1 ; c66c
wc66d:: ds 1 ; c66d
wc66e:: ds 1 ; c66e
wc66f:: ds 1 ; c66f
wc670:: ds 1 ; c670
wc671:: ds 2 ; c671
; unused ?
ds $4
wc677:: ds 1 ; c677
wc678:: ds 1 ; c678
wc679:: ds 1 ; c679
wc67a:: ds 1 ; c67a
wc67b:: ds 1 ; c67b
wc67c:: ds 2 ; c67c
wc67e:: ds 2 ; c67e
wc680:: ds 2 ; c680
wc682:: ds 1 ; c682
wc683:: ds 1 ; c683
wc684:: ds 2 ; c684
wc686:: ds 2 ; c686
wc688:: ds 1 ; c688
wc689:: ds 2 ; c689
wc68b:: ds 1 ; c68b
wc68c:: ds 3 ; c68c
wc68f:: ds 2 ; c68f
wc691:: ds 1 ; c691
; channel 4
wc692:: ds 1 ; c692
wc693:: ds 1 ; c693
ds 1 ; c694
wc695:: ds 1 ; c695
wc696:: ds 1 ; c696
wc697:: ds 1 ; c697
wc698:: ds 1 ; c698
wChannel4Pointer:: ds 2 ; c699
wc69b:: ds 1 ; c69b
wc69c:: ds 1 ; c69c
wc69d:: ds 1 ; c69d
wc69e:: ds 1 ; c69e
wc69f:: ds 1 ; c69f
wc6a0:: ds 1 ; c6a0
wc6a1:: ds 2 ; c6a1
; unused ?
ds $4
wc6a7:: ds 1 ; c6a7
wc6a8:: ds 1 ; c6a8
wc6a9:: ds 1 ; c6a9
wc6aa:: ds 1 ; c6aa
wc6ab:: ds 1 ; c6ab
wc6ac:: ds 2 ; c6ac
wc6ae:: ds 2 ; c6ae
wc6b0:: ds 2 ; c6b0
wc6b2:: ds 1 ; c6b2
wc6b3:: ds 1 ; c6b3
wc6b4:: ds 2 ; c6b4
wc6b6:: ds 2 ; c6b6
wc6b8:: ds 1 ; c6b8
wc6b9:: ds 2 ; c6b9
wc6bb:: ds 1 ; c6bb
wc6bc:: ds 3 ; c6bc
wc6bf:: ds 2 ; c6bf
wc6c1:: ds 1 ; c6c1
; channel trampolines
wc6c2:: ds 1 ; c6c2
wc6c3:: ds 2 ; c6c3
wc6c5:: ds 1 ; c6c5
wc6c6:: ds 2 ; c6c6
wc6c8:: ds 1 ; c6c8
wc6c9:: ds 2 ; c6c9
wc6cb:: ds 1 ; c6cb
wc6cc:: ds 2 ; c6cc
wc6ce:: ds 1 ; c6ce
wAudioEnd:: ; c6cf