summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xengine/bank1.asm2
-rwxr-xr-xengine/bank3.asm14
-rwxr-xr-xengine/home.asm532
-rwxr-xr-xengine/music1.asm4
-rwxr-xr-xwram.asm92
5 files changed, 475 insertions, 169 deletions
diff --git a/engine/bank1.asm b/engine/bank1.asm
index be626fb..c29a4c4 100755
--- a/engine/bank1.asm
+++ b/engine/bank1.asm
@@ -218,7 +218,7 @@ Duel_Start: ; 409f (1:409f)
.asm_41f3
call $0f58
ld h, $c2
- ld a, [wBufSerial]
+ ld a, [wSerialOp]
cp $29
jr z, .asm_4201
ld h, $c3
diff --git a/engine/bank3.asm b/engine/bank3.asm
index 64bf841..38a56cd 100755
--- a/engine/bank3.asm
+++ b/engine/bank3.asm
@@ -242,11 +242,11 @@ Func_c1b1: ; c1b1 (3:41b1)
farcall Func_1c82e
farcall Func_131b3
xor a
- ld [wCounter0], a
- ld [wCounter1], a
- ld [wCounter2], a
- ld [wCounter3], a
- ld [wCounter4], a
+ ld [wCounter + 0], a
+ ld [wCounter + 1], a
+ ld [wCounter + 2], a
+ ld [wCounter + 3], a
+ ld [wCounter + 4], a
ret
Func_c1ed: ; c1ed (3:41ed)
@@ -289,7 +289,7 @@ Func_c241: ; c241 (3:4241)
push hl
push bc
push de
- ld de, Unknown_307f
+ ld de, $307f
call Func_2275
call Func_c258
pop de
@@ -365,7 +365,7 @@ Func_c2a3: ; c2a3 (3:42a3)
farcall Func_10ab4
ld a, $80
call Func_c29b
- ld de, Unknown_307f
+ ld de, $307f
call Func_2275
farcall Func_12ba7
call Func_3ca0
diff --git a/engine/home.asm b/engine/home.asm
index 33c72c2..51a6e1c 100755
--- a/engine/home.asm
+++ b/engine/home.asm
@@ -56,7 +56,7 @@ Start: ; 0150 (0:0150)
call SetupVRAM
call SetupLCD
call SetupPalettes
- call Func_377f
+ call SetupSound_T
call SetupTimer
call ResetSerial
call CopyDMAFunction
@@ -73,17 +73,18 @@ VBlankHandler: ; 019b (0:019b)
push hl
ld a, [hBankROM]
push af
- ld hl, $caba
+ ld hl, wReentrancyFlag
bit 0, [hl]
- jr nz, .asm_1dd
+ jr nz, .done
set 0, [hl]
- ld a, [$cac0]
+ ld a, [wVBlankOAMCopyToggle]
or a
- jr z, .asm_1b8
- call hDMAFunction
+ jr z, .no_oam_copy
+ call hDMAFunction ; DMA-copy $ca00-$ca9f to OAM memory
xor a
- ld [$cac0], a
-.asm_1b8
+ ld [wVBlankOAMCopyToggle], a
+.no_oam_copy
+ ; flush scaling/windowing parameters
ld a, [hSCX]
ld [rSCX], a
ld a, [hSCY]
@@ -92,16 +93,17 @@ VBlankHandler: ; 019b (0:019b)
ld [rWX], a
ld a, [hWY]
ld [rWY], a
+ ; flush LCDC
ld a, [wLCDC]
ld [rLCDC], a
ei
call $cad0
- call Func_042d
+ call FlushPalettes
ld hl, wVBlankCtr
inc [hl]
- ld hl, $caba
+ ld hl, wReentrancyFlag
res 0, [hl]
-.asm_1dd
+.done
pop af
call BankswitchHome
pop hl
@@ -116,27 +118,31 @@ TimerHandler: ; 01e6 (0:01e6)
push de
push bc
ei
- call Func_0c91
- ld hl, $cac3
+ call SerialTimerHandler
+ ; only trigger every fourth interrupt ≈ 60.24 Hz
+ ld hl, wCounterCtr
ld a, [hl]
inc [hl]
and $3
- jr nz, .asm_217
+ jr nz, .done
+ ; increment the 60-60-60-255-255 counter
call IncrementCounter
- ld hl, $caba
+ ; check in-timer flag
+ ld hl, wReentrancyFlag
bit 1, [hl]
- jr nz, .asm_217
+ jr nz, .done
set 1, [hl]
ld a, [hBankROM]
push af
- ld a, BANK(Func_f4003)
+ ld a, BANK(SoundTimerHandler_Ext)
call BankswitchHome
- call Func_f4003
+ call SoundTimerHandler_Ext
pop af
call BankswitchHome
- ld hl, $caba
+ ; clear in-timer flag
+ ld hl, wReentrancyFlag
res 1, [hl]
-.asm_217
+.done
pop bc
pop de
pop hl
@@ -144,12 +150,11 @@ TimerHandler: ; 01e6 (0:01e6)
reti
; increment timer counter by a tick
-; the counter consists of three fields 0..60 and two fields 0..255
IncrementCounter: ; 021c (0:021c)
ld a, [wCounterEnable]
or a
ret z
- ld hl, wCounter0
+ ld hl, wCounter
inc [hl]
ld a, [hl]
cp 60
@@ -174,15 +179,16 @@ IncrementCounter: ; 021c (0:021c)
inc [hl]
ret
-; setup timer to roughly 60 Hz
+; setup timer to 16384/68 ≈ 240.94 Hz
SetupTimer: ; 0241 (0:0241)
- ld b, $bc
+ ld b, $100 - 68
+ ; ld b, $bc
call CheckForCGB
jr c, .asm_250
ld a, [rKEY1]
and $80
jr z, .asm_250
- ld b, $78
+ ld b, $100 - 2*68
.asm_250
ld a, b
ld [rTMA], a
@@ -225,7 +231,7 @@ EnableLCD: ; 0277 (0:0277)
ld [wLCDC], a ;
ld [rLCDC], a ; turn LCD on
ld a, $c0
- ld [$cabf], a
+ ld [wFlushPaletteFlags], a
ret
; wait for vblank, then turn LCD off
@@ -303,14 +309,14 @@ SetupLCD: ; 030b (0:030b)
ld [hWX], a
ld [hWY], a
xor a
- ld [$caba], a
- ld a, $c3
+ ld [wReentrancyFlag], a
+ ld a, $c3 ; $c3 = jp nn
ld [$cacd], a
- ld [$cad0], a
- ld hl, $cad1
- ld [hl], NopF & $ff
- inc hl
- ld [hl], NopF >> $8
+ ld [wVBlankFunctionTrampoline], a
+ ld hl, wVBlankFunctionTrampoline + 1
+ ld [hl], NopF & $ff ;
+ inc hl ; load `jp NopF`
+ ld [hl], NopF >> $8 ;
ld a, $47
ld [wLCDC], a
ld a, $1
@@ -350,7 +356,7 @@ SetupPalettes: ; 036a (0:036a)
ld [hli], a
ld [hl], a
xor a
- ld [$cabf], a
+ ld [wFlushPaletteFlags], a
ld a, [wConsole]
cp CONSOLE_CGB
ret nz
@@ -367,7 +373,7 @@ SetupPalettes: ; 036a (0:036a)
jr nz, .asm_38c
dec c
jr nz, .asm_387
- call Func_0458
+ call FlushBothCGBPalettes
ret
InitialPalette: ; 0399 (0:0399)
@@ -457,14 +463,14 @@ Func_040c: ; 040c (0:040c)
asm_40f
ld a, $80
asm_411
- ld [$cabf], a
+ ld [wFlushPaletteFlags], a
ld a, [wLCDC]
rla
ret c
push hl
push de
push bc
- call Func_042d
+ call FlushPalettes
pop bc
pop de
pop hl
@@ -478,10 +484,16 @@ Set_OBP1: ; 0428 (0:0428)
ld [wOBP1], a
jr asm_40f
-Func_042d: ; 042d (0:042d)
- ld a, [$cabf]
+; flushes non-CGB palettes from [wBGP], [wOBP0], [wOBP1] as well as CGB
+; palettes from [wBufPalette..wBufPalette+$1f] (BG palette) and
+; [wBufPalette+$20..wBufPalette+$3f] (sprite palette).
+; only flushes if [wFlushPaletteFlags] is nonzero, and only flushes sprite
+; palette if bit6 of that location is set.
+FlushPalettes: ; 042d (0:042d)
+ ld a, [wFlushPaletteFlags]
or a
ret z
+ ; flush grayscale (non-CGB) palettes
ld hl, wBGP
ld a, [hli]
ld [rBGP], a
@@ -491,29 +503,33 @@ Func_042d: ; 042d (0:042d)
ld [rOBP1], a
ld a, [wConsole]
cp CONSOLE_CGB
- jr z, asm_44a
-asm_445
+ jr z, flushPaletteCGB
+flushPaletteDone
xor a
- ld [$cabf], a
+ ld [wFlushPaletteFlags], a
ret
-asm_44a
- ld a, [$cabf]
+flushPaletteCGB
+ ; flush BG palette (BGP)
+ ; if bit6 of [wFlushPaletteFlags] is set, flush OBP too
+ ld a, [wFlushPaletteFlags]
bit 6, a
- jr nz, Func_0458
+ jr nz, FlushBothCGBPalettes
ld b, $8
- call InitializePalettes
- jr asm_445
+ call CopyPalette
+ jr flushPaletteDone
-Func_0458: ; 0458 (0:0458)
+FlushBothCGBPalettes: ; 0458 (0:0458)
xor a
ld b, $40
- call InitializePalettes
+ ; flush BGP $00-$1f
+ call CopyPalette
ld a, $8
ld b, $40
- call InitializePalettes
- jr asm_445
+ ; flush OBP $00-$1f
+ call CopyPalette
+ jr flushPaletteDone
-InitializePalettes: ; 0467 (0:0467)
+CopyPalette: ; 0467 (0:0467)
add a
add a
add a
@@ -559,10 +575,10 @@ Func_04a2: ; 04a2 (0:04a2)
ld a, [wConsole]
cp CONSOLE_SGB
ret nz
- call EnableLCD
- ld hl, SGB_04bf
- call SendSGB
- call DisableLCD
+ call EnableLCD ;
+ ld hl, SGB_04bf ; send SGB data
+ call SendSGB ;
+ call DisableLCD ;
ret
SGB_04bf: ; 04bf (0:04bf)
@@ -1061,7 +1077,7 @@ SetupExtRAM: ; 080b (0:080b)
Func_084d: ; 084d (0:084d)
ld a, $3
.asm_84f
- call Func_0863
+ call ClearExtRAMBank
dec a
cp $ff
jr nz, .asm_84f
@@ -1073,7 +1089,7 @@ Func_084d: ; 084d (0:084d)
ld [hl], $5
ret
-Func_0863: ; 0863 (0:0863)
+ClearExtRAMBank: ; 0863 (0:0863)
push af
call BankswitchRAM
call EnableExtRAM
@@ -1580,37 +1596,40 @@ MemcpyDEHL_hblank: ; 0c32 (0:0c32)
INCBIN "baserom.gbc",$0c4b,$0c91 - $0c4b
-Func_0c91: ; 0c91 (0:0c91)
- ld a, [$cb74]
+; called at roughly 240Hz by TimerHandler
+SerialTimerHandler: ; 0c91 (0:0c91)
+ ld a, [wSerialOp]
cp $29
- jr z, .asm_c9d
+ jr z, .begin_transfer
cp $12
- jr z, .asm_caa
+ jr z, .check_for_timeout
ret
-.asm_c9d
- ld a, [rSC]
- add a
- ret c
+.begin_transfer
+ ld a, [rSC] ;
+ add a ; make sure that no serial transfer is active
+ ret c ;
ld a, $1
- ld [rSC], a
+ ld [rSC], a ; use internal clock
ld a, $81
- ld [rSC], a
+ ld [rSC], a ; use internal clock, set transfer start flag
ret
-.asm_caa
- ld a, [$cb76]
- ld hl, $cb77
+.check_for_timeout
+ ; sets bit7 of [wSerialFlags] if the serial interrupt hasn't triggered
+ ; within four timer interrupts (60Hz)
+ ld a, [wSerialCounter]
+ ld hl, wSerialCounter2
cp [hl]
ld [hl], a
- ld hl, $cb78
- jr nz, .asm_cc2
+ ld hl, wSerialTimeoutCounter
+ jr nz, .clear_counter
inc [hl]
ld a, [hl]
cp $4
ret c
- ld hl, $cb75
+ ld hl, wSerialFlags
set 7, [hl]
ret
-.asm_cc2
+.clear_counter
ld [hl], $0
ret
; 0xcc5
@@ -1622,44 +1641,46 @@ SerialHandler: ; 0d26 (0:0d26)
push hl
push de
push bc
- ld a, [$ce63]
- or a
- jr z, .asm_d35
- call Func_3189
- jr .asm_d6e
+ ld a, [$ce63] ;
+ or a ;
+ jr z, .asm_d35 ; if [$ce63] nonzero:
+ call Func_3189 ; ?
+ jr .done ; return
.asm_d35
- ld a, [$cb74]
- or a
- jr z, .asm_d55
+ ld a, [wSerialOp] ;
+ or a ;
+ jr z, .asm_d55 ; skip ahead if [$cb74] zero
+ ; send/receive a byte
ld a, [rSB]
- call Func_0d77
- call Func_0dc8
+ call SerialHandleRecv
+ call SerialHandleSend ; returns byte to actually send
push af
-.asm_d44
+.wait_for_completion
ld a, [rSC]
add a
- jr c, .asm_d44
+ jr c, .wait_for_completion
pop af
- ld [rSB], a
- ld a, [$cb74]
+ ; end send/receive
+ ld [rSB], a ; prepare sending byte (from Func_0dc8?)
+ ld a, [wSerialOp]
cp $29
- jr z, .asm_d6e
- jr .asm_d6a
+ jr z, .done ; if [$cb74] != $29, use external clock
+ jr .asm_d6a ; and prepare for next byte. either way, return
.asm_d55
ld a, $1
- ld [$cba2], a
+ ld [wSerialRecvCounter], a
ld a, [rSB]
- ld [$cba5], a
+ ld [wSerialRecvBuf], a
ld a, $ac
ld [rSB], a
- ld a, [$cba5]
- cp $12
- jr z, .asm_d6e
+ ld a, [wSerialRecvBuf]
+ cp $12 ; if [$cba5] != $12, use external clock
+ jr z, .done ; and prepare for next byte. either way, return
.asm_d6a
- ld a, $80
- ld [rSC], a
-.asm_d6e
- ld hl, $cb76
+ ld a, $80 ;
+ ld [rSC], a ; transfer start, use external clock
+.done
+ ld hl, wSerialCounter
inc [hl]
pop bc
pop de
@@ -1667,101 +1688,116 @@ SerialHandler: ; 0d26 (0:0d26)
pop af
reti
-Func_0d77: ; 0d77 (0:0d77)
- ld hl, $cba1
+; handles a byte read from serial transfer by decoding it and storing it into
+; the receive buffer
+SerialHandleRecv: ; 0d77 (0:0d77)
+ ld hl, wSerialLastReadCA
ld e, [hl]
dec e
- jr z, .asm_d94
+ jr z, .last_was_ca
cp $ac
- ret z
+ ret z ; return if read_data == $ac
cp $ca
- jr z, .asm_d92
+ jr z, .read_ca
or a
- jr z, .asm_d8c
+ jr z, .read_00_or_ff
cp $ff
- jr nz, .asm_d99
-.asm_d8c
- ld hl, $cb75
+ jr nz, .read_data
+.read_00_or_ff
+ ld hl, wSerialFlags
set 6, [hl]
ret
-.asm_d92
- inc [hl]
+.read_ca
+ inc [hl] ; inc [wSerialLastReadCA]
ret
-.asm_d94
+.last_was_ca
+ ; if last byte read was $ca, flip all bits of data received
ld [hl], $0
cpl
- jr .asm_d9b
-.asm_d99
+ jr .handle_byte
+.read_data
+ ; flip top2 bits of data received
xor $c0
-.asm_d9b
+.handle_byte
push af
- ld a, [$cba4]
+ ld a, [wSerialRecvIndex]
ld e, a
ld a, [$cba3]
dec a
and $1f
cp e
- jr z, .asm_dc1
+ jr z, .set_flag_and_return
ld d, $0
- ld hl, $cba5
+ ; store into receive buffer
+ ld hl, wSerialRecvBuf
add hl, de
pop af
ld [hl], a
+ ; increment buffer index (mod 32)
ld a, e
inc a
and $1f
ld [$cba4], a
- ld hl, $cba2
+ ; increment received bytes counter & clear flags
+ ld hl, wSerialRecvCounter
inc [hl]
xor a
- ld [$cb75], a
+ ld [wSerialFlags], a
ret
-.asm_dc1
+.set_flag_and_return
pop af
- ld hl, $cb75
+ ld hl, wSerialFlags
set 0, [hl]
ret
-Func_0dc8: ; 0dc8 (0:0dc8)
- ld hl, $cb7d
+; prepares a byte to send over serial transfer, either from the send-save byte
+; slot or the send buffer
+SerialHandleSend: ; 0dc8 (0:0dc8)
+ ld hl, wSerialSendSave
ld a, [hl]
or a
- jr nz, .asm_dd9
- ld hl, $cb7e
+ jr nz, .send_saved
+ ld hl, wSerialSendBufToggle
ld a, [hl]
or a
- jr nz, .asm_ddd
+ jr nz, .send_buf
+ ; no more data--send $ac to indicate this
ld a, $ac
ret
-.asm_dd9
+.send_saved
ld a, [hl]
ld [hl], $0
ret
-.asm_ddd
+.send_buf
+ ; grab byte to send from send buffer, increment buffer index
+ ; and decrement to-send length
dec [hl]
- ld a, [$cb7f]
+ ld a, [wSerialSendBufIndex]
ld e, a
ld d, $0
- ld hl, $cb81
+ ld hl, wSerialSendBuf
add hl, de
inc a
and $1f
- ld [$cb7f], a
+ ld [wSerialSendBufIndex], a
ld a, [hl]
+ ; flip top2 bits of sent data
xor $c0
cp $ac
- jr z, .asm_e01
+ jr z, .send_escaped
cp $ca
- jr z, .asm_e01
+ jr z, .send_escaped
cp $ff
- jr z, .asm_e01
+ jr z, .send_escaped
or a
- jr z, .asm_e01
+ jr z, .send_escaped
ret
-.asm_e01
+.send_escaped
+ ; escape tricky data by prefixing it with $ca and flipping all bits
+ ; instead of just top2
xor $c0
cpl
- ld [$cb7d], a
+ ld [wSerialSendSave], a
ld a, $ca
ret
; 0xe0a
@@ -1775,7 +1811,7 @@ ResetSerial: ; 0ea6 (0:0ea6)
xor a
ld [rSB], a
ld [rSC], a
- ld hl, wBufSerial
+ ld hl, wSerialOp
ld bc, $0051
.asm_eb7
xor a
@@ -3578,10 +3614,218 @@ LoadDeck: ; 302c (0:302c)
ret
; 0x3055
-INCBIN "baserom.gbc",$3055,$307f - $3055
+Func_3055: ; 3055 (0:3055)
+ push hl
+ ld hl, $ccb9
+ add [hl]
+ ld [hli], a
+ ld a, $0
+ adc [hl]
+ ld [hl], a
+ pop hl
+ ret
+
+Func_3061: ; 3061 (0:3061)
+ push de
+ push hl
+ ld e, a
+ ld hl, $ccb9
+ ld a, [hl]
+ sub e
+ ld [hli], a
+ ld a, [hl]
+ sbc $0
+ ld [hl], a
+ pop hl
+ pop de
+ ret
+
+Func_3071: ; 3071 (0:3071)
+ push hl
+ ld hl, $ce4e
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ rst $18
+ xor l
+ ld [hl], c
+ pop hl
+ ret
+
+Func_307d: ; 307d (0:307d)
+ push hl
+ ld hl, $ce4e
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld a, $1
+ rst $18
+ xor l
+ ld [hl], c
+ ld hl, $cac2
+ ld [hl], $0
+ pop hl
+ ret
-Unknown_307f: ; 307f (0:307f)
-INCBIN "baserom.gbc",$307f,$3189 - $307f
+Func_3090: ; 3090 (0:3090)
+ ld a, d
+ cp b
+ ret nz
+ ld a, e
+ cp c
+ ret
+
+Func_3096: ; 3096 (0:3096)
+ ld a, [hBankROM]
+ push af
+ ld a, $2
+ call BankswitchHome
+ call $4000
+ pop af
+ call BankswitchHome
+ ret
+
+Func_30a6: ; 30a6 (0:30a6)
+ ld a, [hBankROM]
+ push af
+ ld a, $6
+ call BankswitchHome
+ ld a, $1
+ ld [$ce60], a
+ call $40d5
+ pop bc
+ ld a, b
+ call BankswitchHome
+ ret
+
+Func_30bc: ; 30bc (0:30bc)
+ ld a, h
+ ld [$ce50], a
+ ld a, l
+ ld [$ce51], a
+ ld a, [hBankROM]
+ push af
+ ld a, $2
+ call BankswitchHome
+ call $4211
+ call Func_2a9e
+ pop af
+ call BankswitchHome
+ ret
+
+Func_30d7: ; 30d7 (0:30d7)
+ ld a, [hBankROM]
+ push af
+ ld a, $2
+ call BankswitchHome
+ call $433c
+ pop af
+ call BankswitchHome
+ ret
+
+Func_30e7: ; 30e7 (0:30e7)
+ ld a, [hBankROM]
+ push af
+ ld a, $2
+ call BankswitchHome
+ call $4764
+ ld b, a
+ pop af
+ call BankswitchHome
+ ld a, b
+ ret
+
+Func_30f9: ; 30f9 (0:30f9)
+ ld b, a
+ ld a, [hBankROM]
+ push af
+ ld a, $2
+ call BankswitchHome
+ call $4932
+ pop af
+ call BankswitchHome
+ ret
+
+Func_310a: ; 310a (0:310a)
+ ld [$ce59], a
+ ld a, [hBankROM]
+ push af
+ ld a, $2
+ call BankswitchHome
+ call $4aaa
+ pop af
+ call BankswitchHome
+ ret
+
+Func_311d: ; 311d (0:311d)
+ ld a, [hBankROM]
+ push af
+ ld a, $2
+ call BankswitchHome
+ call $4b85
+ pop af
+ call BankswitchHome
+ ret
+
+Func_312d: ; 312d (0:312d)
+ push hl
+ ld hl, $ce64
+ ld a, $88
+ ld [hli], a
+ ld a, $33
+ ld [hli], a
+ ld [hl], d
+ inc hl
+ ld [hl], e
+ inc hl
+ ld [hl], c
+ inc hl
+ ld [hl], b
+ inc hl
+ pop de
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ inc hl
+ ld de, $ff45
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld hl, $ce70
+ ld [hl], $64
+ inc hl
+ ld [hl], $ce
+ call $0e8e
+ ld a, $1
+ ld [$ce63], a
+ call Func_31fc
+.asm_315d
+ call Func_053f
+ ld a, [$ce63]
+ or a
+ jr nz, .asm_315d
+ call ResetSerial
+ ld bc, $05dc
+.asm_316c
+ dec bc
+ ld a, b
+ or c
+ jr nz, .asm_316c
+ ld a, [$ce6e]
+ cp $81
+ jr nz, .asm_3182
+ ld a, [$ce6f]
+ ld l, a
+ and $f1
+ ld a, l
+ ret z
+ scf
+ ret
+.asm_3182
+ ld a, $ff
+ ld [$ce6f], a
+ scf
+ ret
Func_3189: ; 3189 (0:3189)
ld hl, PointerTable_3190
@@ -3695,8 +3939,8 @@ Func_3212: ; 3212 (0:3212)
INCBIN "baserom.gbc",$321d,$377f - $321d
-Func_377f: ; 377f (0:377f)
- farcall Func_f4000
+SetupSound_T: ; 377f (0:377f)
+ farcall SetupSound_Ext
ret
Func_3784: ; 3784 (0:3784)
diff --git a/engine/music1.asm b/engine/music1.asm
index 22392bb..21b7007 100755
--- a/engine/music1.asm
+++ b/engine/music1.asm
@@ -1,7 +1,7 @@
-Func_f4000: ; f4000 (3d:4000)
+SetupSound_Ext: ; f4000 (3d:4000)
jp Func_f407d
-Func_f4003: ; f4003 (3d:4003)
+SoundTimerHandler_Ext: ; f4003 (3d:4003)
jp Func_f40e9
Func_f4006: ; f4006 (3d:4006)
diff --git a/wram.asm b/wram.asm
index 5e186cd..79ae8e8 100755
--- a/wram.asm
+++ b/wram.asm
@@ -1,12 +1,20 @@
;--- Bank 0: $Cxxx ----------------------------------------
SECTION "WRAM0", WRAM0
- ds $ab3
+ ds $a00
+wBufOAM: ; ca00
+ ds $a0
+ ds $13
+
+; initial value of the A register--used to tell the console when reset
wInitialA: ; cab3
ds $1
+; what console we are playing on, either 0 (DMG), 1 (SGB) or 2 (CGB)
+; use constants CONSOLE_DMG, CONSOLE_SGB and CONSOLE_CGB for checks
wConsole: ; cab4
- ds $2
+ ds $1
+ ds $1
wTileMapFill: ; cab6
ds $1
@@ -15,7 +23,13 @@ wIE: ; cab7
ds $1
wVBlankCtr: ; cab8
- ds $3
+ ds $1
+ ds $1
+
+; bit0: is in vblank interrupt?
+; bit1: is in timer interrupt?
+wReentrancyFlag: ; caba
+ ds $1
wLCDC: ; cabb
ds $1
@@ -27,31 +41,80 @@ wOBP0: ; cabd
ds $1
wOBP1: ; cabe
- ds $6
+ ds $1
+
+wFlushPaletteFlags: ; cabf
+ ds $1
+
+wVBlankOAMCopyToggle: ; cac0
+ ds $1
+ ds $2
+
+wCounterCtr: ; cac3
+ ds $1
wCounterEnable: ; cac4
ds $1
-wCounter0: ; cac5
+; byte0: 1/60ths of a second
+; byte1: seconds
+; byte2: minutes
+; byte3: hours (lower byte)
+; byte4: hours (upper byte)
+wCounter: ; cac5
+ ds $5
+ ds $6
+
+wVBlankFunctionTrampoline: ; cad0
+ ds $20 ; unknown length
+
+wBufPalette: ; caf0 - cab7f
+ ds $80
+ ds $4
+
+;--- Serial transfer bytes (cb74-cbc4) ----------
+wSerialOp: ; cb74
+ ds $1
+
+wSerialFlags: ; cb75
+ ds $1
+
+wSerialCounter: ; cb76
+ ds $1
+
+wSerialCounter2: ; cb77
+ ds $1
+
+wSerialTimeoutCounter: ; cb78
ds $1
+ ds $4
-wCounter1: ; cac6
+wSerialSendSave: ; cb7d
ds $1
-wCounter2: ; cac7
+wSerialSendBufToggle: ; cb7e
+ ds $1
+
+wSerialSendBufIndex: ; cb7f
+ ds $1
ds $1
-wCounter3: ; cac8
+wSerialSendBuf: ; cb81
+ ds $20
+
+wSerialLastReadCA: ; cba1
ds $1
-wCounter4: ; cac9
- ds $27
+wSerialRecvCounter: ; cba2
+ ds $1
+ ds $1
-wBufPalette: ; caf0
- ds $84
+wSerialRecvIndex: ; cba4
+ ds $1
-wBufSerial: ; cb74
- ds $9a
+wSerialRecvBuf: ; $cba5 - $cbc4
+ ds $20
+ ds $49
; this seems to hold the current opponent's deck id - 2,
; perhaps to account for the two unused pointers at the
@@ -65,7 +128,6 @@ wIsPracticeDuel: ; cc13
wDuelTheme: ; cc1a
ds $1
-
;--- Bank 1: $Dxxx ----------------------------------------
SECTION "WRAM1", WRAMX, BANK[1]
ds $113