summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRangi <remy.oukaour+rangi42@gmail.com>2020-09-15 20:28:57 -0400
committerRangi <remy.oukaour+rangi42@gmail.com>2020-09-15 20:28:57 -0400
commite66c7236877b2410dd20ed548480bdc8cfe3e266 (patch)
tree7585e141ea3855dc921d13c6ef90939e7b8d23c1
parente0a4184dc2ec6075d5d581789396f0764cc5efd3 (diff)
Disasemble more of bank0
-rw-r--r--shim.sym7
-rw-r--r--source/bank_00.asm231
2 files changed, 234 insertions, 4 deletions
diff --git a/shim.sym b/shim.sym
index f1f8eb6..7bcee8d 100644
--- a/shim.sym
+++ b/shim.sym
@@ -10,7 +10,6 @@
00:162f lcd_function_a
00:1776 lcd_function_b
-00:0bc0 function_00_0bc0
00:0df5 function_00_0df5
00:0ecf function_00_0ecf
00:0f20 function_00_0f20
@@ -206,15 +205,21 @@
01:d60f w_d60f
01:d61b w_d61b
01:d625 w_level_index ; dw
+01:d628 w_d628 ; ds 3
01:d62d w_d62d
01:d630 w_d630
01:d641 w_tutorial_scene ; db
01:d642 w_d642
01:d647 w_d647
01:d6b5 w_d6b5
+01:d6c8 w_d6c8
01:d6c9 w_d6c9
01:d6ca w_d6ca
01:dbe4 w_dbe4 ; db
+01:dbe6 w_dbe6
+01:dbe8 w_dbe8
+01:dbea w_dbea
+01:dbec w_dbec
01:dbee w_dbee ; dw
01:dbf0 w_dbf0 ; db/dw
01:df3f w_df3f ; ds 3
diff --git a/source/bank_00.asm b/source/bank_00.asm
index b28da3f..43369b0 100644
--- a/source/bank_00.asm
+++ b/source/bank_00.asm
@@ -516,6 +516,7 @@ lcd::
.return:
ld hl, w_c343
inc [hl]
+
ld hl, rSTAT
.hblank_enter
ld a, STATF_LCD
@@ -851,7 +852,6 @@ vwf_char_draw_dark::
ldh a, [rSTAT]
and STATF_LCD
jr z, .hblank_finish
-
.hblank_enter
ldh a, [rSTAT]
and STATF_LCD
@@ -1386,7 +1386,6 @@ vwf_char_draw::
ldh a, [rSTAT]
and STATF_LCD
jr z, .hblank_finish
-
.hblank_enter
ldh a, [rSTAT]
and STATF_LCD
@@ -1715,7 +1714,233 @@ function_00_0b54::
ld [rROMB0], a
ret
-SECTION "farcall_a_hl", ROM0[$0d36]
+function_00_0bc0::
+ push hl
+
+ ld e, 0
+ ld d, 0
+ ld c, 0
+ ld b, 0
+ ld a, $08
+ ld [w_dbe6], a
+ ld a, [hl+]
+ ld [w_dbe8], a
+ ld a, [hl+]
+ ld [w_dbea], a
+ ld a, [hl+]
+ ld [w_dbec], a
+
+.jump_000_0bda
+ ld a, [w_dbe8]
+ bit 7, a
+ jr nz, .jump_000_0c00
+ sla a
+ ld [w_dbe8], a
+ ld a, [w_dbea]
+ sla a
+ ld [w_dbea], a
+ rl e
+ ld a, [w_dbec]
+ sla a
+ ld [w_dbec], a
+ rl d
+ sla c
+ sla b
+ jr .jump_000_0c1d
+.jump_000_0c00
+ sla a
+ ld [w_dbe8], a
+ ld a, [w_dbea]
+ sla a
+ ld [w_dbea], a
+ rl c
+ ld a, [w_dbec]
+ sla a
+ ld [w_dbec], a
+ rl b
+ sla e
+ sla d
+.jump_000_0c1d
+ ld a, [w_dbe6]
+ dec a
+ ld [w_dbe6], a
+ and a
+ jp nz, .jump_000_0bda
+
+ ld hl, w_dbee
+ ld a, [hl+]
+ ld h, [hl]
+ ld l, a
+ call hblank_wait
+ ld a, e
+ ld [hl+], a
+ ld a, d
+ ld [hl+], a
+ ld16 w_dbee, hl
+ ld a, $01
+ call function_00_1bd5
+
+ ld hl, w_dbf0
+ ld a, [hl+]
+ ld h, [hl]
+ ld l, a
+ call hblank_wait
+ ld a, c
+ ld [hl+], a
+ ld a, b
+ ld [hl+], a
+ ld16 w_dbf0, hl
+ ld a, $00
+ call function_00_1bd5
+
+ pop hl
+ ret
+
+hblank_wait::
+ ldh a, [rLCDC]
+ bit LCDCF_ON_F, a
+ ret z
+.hblank_finish
+ ldh a, [rSTAT]
+ and STATF_LCD
+ jr z, .hblank_finish
+.hblank_enter
+ ldh a, [rSTAT]
+ and STATF_LCD
+ jr nz, .hblank_enter
+ ret
+
+function_00_0c70::
+ ld a, [w_d6c8]
+ and a
+ ret nz
+
+ ld a, [w_bank_rom]
+ push af
+ ld a, $09 ; BANK(???)
+ ld [w_bank_rom], a
+ ld [rROMB0], a
+
+ ld hl, $4000 ; ???
+ ld a, [w_level_index + 0]
+ ld c, a
+ ld a, [w_level_index + 1]
+ ld b, a
+ sla c
+ rl b
+ add hl, bc
+ ld a, [hl+]
+ ld h, [hl]
+ ld l, a
+
+.loop
+ ld a, [hl]
+ and a
+ jr z, .done
+
+ ; Get text coordinates
+ call function_00_0cc3
+ ld a, [hl+]
+ add b
+ sub $80
+ ld b, a
+ inc hl
+
+.string_loop
+ ld a, [hl+]
+ ld e, a
+ ld a, [hl+]
+ ld d, a
+ and e
+ cp TX_END
+ jr z, .loop
+
+ ld a, e
+ cp " "
+ jr z, .done
+
+ push bc
+ push hl
+ call text_draw_char
+ pop hl
+ pop bc
+
+ ; Leave one pixel between each character
+ add b
+ inc a
+ ld b, a
+ jr .string_loop
+
+.done
+ pop af
+ ld [w_bank_rom], a
+ ld [rROMB0], a
+ ret
+
+function_00_0cc3::
+ push hl
+ ld a, [w_d628 + 0]
+ add a
+ ld c, a
+ ld a, [w_d628 + 1]
+ add c
+ add a
+ add a
+ ld c, a
+ ld a, [w_d628 + 2]
+ add c
+ add a
+ ld l, a
+ ld h, 0
+ ld de, .data
+ add hl, de
+ ld a, [hl+]
+ ld b, a
+ ld c, [hl]
+ pop hl
+ ret
+
+.data
+ db $68, $1c, $00, $00, $00, $00, $00, $00
+ db $68, $2c, $00, $00, $00, $00, $00, $00
+ db $68, $1c, $38, $1c, $38, $6c, $68, $6c
+ db $50, $34, $48, $34, $48, $54, $50, $54
+ db $50, $1c, $00, $00, $00, $00, $00, $00
+
+farcall_table_entry::
+ ld e, a
+ add a
+ add e
+ pop hl
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+
+ ld a, [w_bank_rom]
+ push af
+ ld a, [hl]
+ ld [w_bank_rom], a
+ ld [rROMB0], a
+
+ ld l, e
+ ld h, d
+ ld de, .return
+ push de
+ ld a, [w_bank_rom]
+ ld e, a
+ push de
+ jp hl
+
+.return
+ pop af
+ ld [w_bank_rom], a
+ ld [rROMB0], a
+ jp farcall_ret
+
farcall_a_hl::
ld [w_bank_temp], a
ld a, [w_bank_rom]