diff options
author | xCrystal <rgr.crystal@gmail.com> | 2018-07-15 17:57:20 +0200 |
---|---|---|
committer | xCrystal <rgr.crystal@gmail.com> | 2018-07-15 17:57:20 +0200 |
commit | a32f257d89e9f92c8962130724ff36a4b28d2be8 (patch) | |
tree | 95cb1bdc13830cdb16542d2e9811aabbce54b47c /src | |
parent | 6f9b7d17ccfa4c7c7ba0e33b23a78074495adf16 (diff) |
Disassemble more from home.asm
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/home.asm | 289 | ||||
-rw-r--r-- | src/gfx.asm | 2 | ||||
-rw-r--r-- | src/wram.asm | 9 |
3 files changed, 273 insertions, 27 deletions
diff --git a/src/engine/home.asm b/src/engine/home.asm index fe6a148..7d6381c 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -120,7 +120,7 @@ TimerHandler: ; 01e6 (0:01e6) ei call SerialTimerHandler ; only trigger every fourth interrupt ≈ 60.24 Hz - ld hl, wCounterCtr + ld hl, wTimerCounter ld a, [hl] inc [hl] and $3 @@ -1080,10 +1080,14 @@ WriteByteToBGMap0: ; 06c3 (0:06c3) ret .lcd_on pop af +; fallthrough + +; writes a to [v*BGMap0 + BG_MAP_WIDTH * c + b] during hblank +HblankWriteByteToBGMap0: ; 06d9 push hl push de push bc - ld hl, wcac1 + ld hl, wTempByte push hl ld [hl], a call BCCoordToBGMap0Address @@ -1475,7 +1479,7 @@ UpdateRNGSources: ; 089b (0:089b) push de ld hl, wRNG1 ld a, [hli] - ld d, [hl] + ld d, [hl] ; wRNG2 inc hl ld e, a ld a, d @@ -1487,7 +1491,7 @@ UpdateRNGSources: ; 089b (0:089b) ld a, d xor e ld d, a - ld a, [hl] + ld a, [hl] ; wRNGCounter xor e ld e, a pop af @@ -1495,11 +1499,11 @@ UpdateRNGSources: ; 089b (0:089b) rl d ld a, d xor e - inc [hl] + inc [hl] ; wRNGCounter dec hl - ld [hl], d + ld [hl], d ; wRNG2 dec hl - ld [hl], e + ld [hl], e ; wRNG1 pop de pop hl ret @@ -5844,7 +5848,195 @@ FillRectangle: ; 1f5f (0:1f5f) ret ; 0x1f96 - INCROM $1f96, $208d +Func_1f96: ; 1f96 (0:1f96) + add sp, -10 + ld hl, sp+0 + ld [hli], a ; sp-10 <- a + ld [hl], $00 ; sp-9 <- 0 + inc hl + ld a, [de] + inc de + ld [hli], a ; sp-8 <- [de] + ld [hl], $00 ; sp-7 <- 0 + ld hl, sp+5 + ld a, [de] + inc de + ld [hld], a ; sp-5 <- [de+1] + ld a, [de] + inc de + ld [hl], a ; sp-6 <- [de+2] + ld hl, sp+6 + ld a, [de] + inc de + ld [hli], a ; sp-4 <- [de+3] + ld a, [de] + inc de + ld [hli], a ; sp-3 <- [de+4] + ld a, [de] + inc de + ld l, a ; l <- [de+5] + ld a, [de] + dec de + ld h, a ; h <- [de+6] + or l + jr z, .asm_1fbd + add hl, de +.asm_1fbd + ld e, l + ld d, h ; de += hl + ld hl, sp+8 + ld [hl], e ; sp-2 <- e + inc hl + ld [hl], d ; sp-1 <- d + ld hl, sp+0 + ld e, [hl] ; e <- sp + jr .asm_2013 + push hl + push de + push hl + add sp, -4 + ld hl, sp+0 + ld [hl], c + inc hl + ld [hl], $00 + inc hl + ld [hl], b + ld hl, sp+8 + xor a + ld [hli], a + ld [hl], a +.asm_1fdb + call DoFrame + ld hl, sp+3 + ld [hl], a + ld c, a + and $09 + jr nz, .asm_2032 + ld a, c + and $06 + jr nz, .asm_203c + ld hl, sp+2 + ld b, [hl] + ld hl, sp+0 + ld a, [hl] + bit 6, c + jr nz, .asm_1ffe + bit 7, c + jr nz, .asm_2007 + call Func_2046 + jr .asm_1fdb +.asm_1ffe + dec a + bit 7, a + jr z, .asm_200c + ld a, b + dec a + jr .asm_200c +.asm_2007 + inc a + cp b + jr c, .asm_200c + xor a +.asm_200c + ld e, a + call Func_2051 + ld hl, sp+0 + ld [hl], e +.asm_2013 + inc hl + ld [hl], $00 + inc hl + ld b, [hl] + inc hl + ld c, [hl] + ld hl, sp+8 + ld a, [hli] + ld h, [hl] + ld l, a + or h + jr z, .asm_202d + ld a, e + ld de, .asm_2028 + push de + jp hl +.asm_2028 + jr nc, .asm_202d + ld hl, sp+0 + ld [hl], a +.asm_202d + call Func_2046 + jr .asm_1fdb +.asm_2032 + call Func_2051 + ld hl, sp+0 + ld a, [hl] + add sp, 10 + or a + ret +.asm_203c + call Func_2051 + ld hl, sp+0 + ld a, [hl] + add sp, 10 + scf + ret +; 0x2046 + +Func_2046: ; 2046 (0:2046) + ld hl, sp+3 + ld a, [hl] + inc [hl] + and $0f + ret nz + bit 4, [hl] + jr z, Func_2055 +; fallthrough + +Func_2051: ; 2051 (0:2051) + ld hl, sp+9 + jr Func_2057 + +Func_2055: ; 2055 (0:2055) + ld hl, sp+8 +; fallthrough + +Func_2057: ; 2057 (0:2057) + ld e, [hl] + ld hl, sp+2 + ld a, [hl] + ld hl, sp+6 + add [hl] + inc hl + ld c, a + ld b, [hl] + ld a, e + call HblankWriteByteToBGMap0 + ret +; 0x2066 + +; loads the four tiles of the card set 2 icon constant provided in register a +LoadCardSetTiles: ; 2066 (0:2066) + and $7 + ld e, a + ld d, 0 + ld hl, .tile_offsets + add hl, de + ld a, [hl] + cp -1 + ccf + ret z + ld e, a + ld d, 0 + ld hl, DuelOtherGraphics + $1d tiles + add hl, de + ld de, v0Tiles1 + $7c tiles + ld b, $04 + call CopyFontsOrDuelGraphicsTiles + or a + ret + +.tile_offsets + db -1, $0 tiles, $4 tiles, -1, -1, -1, -1, $8 tiles ; loads the Deck and Hand icons for the "Draw X card(s) from the deck." screen LoadDuelDrawCardsScreenTiles: ; 208d (0:208d) @@ -5953,7 +6145,7 @@ LoadSymbolsFont: ; 2119 (0:2119) ; if $4000 ≤ hl ≤ $7fff ; copy b tiles from Gfx2:hl to de CopyFontsOrDuelGraphicsTiles: ; 2121 (0:2121) - ld a, BANK(FullWidthFonts); BANK(DuelGraphics); BANK(HalfWidthFont) + ld a, BANK(Fonts); BANK(DuelGraphics) call BankpushHome ld c, TILE_SIZE call CopyGfxData @@ -5990,17 +6182,18 @@ Func_212f: ; 212f (0:212f) jr CopyFontsOrDuelGraphicsTiles ; 0x2167 +; load the graphics and draw the duel box message given a BOXMSC_* constant in a DrawDuelBoxMessage: ; 2167 (0:2167) ld l, a ld h, 40 tiles / 4 ; boxes are 10x4 tiles call HtimesL add hl, hl add hl, hl - ; hl = a * $280 + ; hl = a * 40 tiles ld de, DuelBoxMessages add hl, de ld de, v0Tiles1 + $20 tiles - ld b, $28 + ld b, 40 call CopyFontsOrDuelGraphicsTiles ld a, $a0 lb hl, 1, 10 @@ -6009,7 +6202,55 @@ DrawDuelBoxMessage: ; 2167 (0:2167) jp FillRectangle ; 0x2189 - INCROM $2189, $21c5 +; load the tiles for the latin, katakana, and hiragana fonts into VRAM +; from gfx/fonts/full_width/3.1bpp and gfx/fonts/full_width/4.t3.1bpp +LoadFullWidthFontTiles: ; 2189 (0:2189) + ld hl, FullWidthFonts + $3cc tiles_1bpp - $4000 + ld a, BANK(Fonts); BANK(DuelGraphics) + call BankpushHome + push hl + ld e, l + ld d, h + ld hl, v0Tiles0 + call Copy1bppTiles + pop de + ld hl, v0Tiles2 + call Copy1bppTiles + ld hl, v0Tiles1 + call Copy1bppTiles + call BankpopHome + ret +; 0x21ab + +; copy 128 1bpp tiles from de to hl as 2bpp +Copy1bppTiles: ; 21ab (0:21ab) + ld b, $80 +.tile_loop + ld c, TILE_SIZE_1BPP +.pixel_loop + ld a, [de] + inc de + ld [hli], a + ld [hli], a + dec c + jr nz, .pixel_loop + dec b + jr nz, .tile_loop + ret +; 0x21ba + +; similar to ProcessText except it calls InitTextPrinting first +; with register de as an argument to set hTextBGMap0Address. +; (the caller to ProcessText usually calls InitTextPrinting first) +ProcessText_InitTextPrinting: ; 21ba (0:21ba) + push de + push bc + ld d, [hl] + inc hl + ld e, [hl] + inc hl + call InitTextPrinting + jr ProcessText.next_char ; reads the characters from the text at hl processes them. loops until TX_END ; is found. ignores TX_RAM1, TX_RAM2, and TX_RAM3 characters. @@ -6639,7 +6880,7 @@ ConvertTileNumberToTileDataAddress: ; 2518 (0:2518) ; create, at wTextTileBuffer, a full-width font tile given its ; within the full-width font graphics (FullWidthFonts) in hl CreateFullWidthFontTile: ; 252e (0:252e) - ld a, BANK(FullWidthFonts); BANK(DuelGraphics); BANK(HalfWidthFont) + ld a, BANK(Fonts); BANK(DuelGraphics) call BankpushHome ld de, wTextTileBuffer push de @@ -6979,7 +7220,7 @@ HandleDuelMenuInput: ; 271a (0:271a) push af ld a, $1 call PlaySFX - call .asm_2772 + call .erase_cursor pop af ld [wCurMenuItem], a ldh [hCurMenuItem], a @@ -6997,12 +7238,12 @@ HandleDuelMenuInput: ; 271a (0:271a) inc [hl] and $f ret nz - ld a, $f + ld a, SYM_CURSOR_R bit 4, [hl] - jr z, .asm_2774 -.asm_2772 - ld a, $0 -.asm_2774 + jr z, .draw_cursor +.erase_cursor + ld a, SYM_SPACE +.draw_cursor ld e, a ld a, [wCurMenuItem] add a @@ -7900,7 +8141,7 @@ PrintScrollableText: ; 2c84 (0:2c84) push af call GetTextOffsetFromTextID call Func_2d15 - call InitRegistersForPrintingText + call ResetTxRam_WriteToTextHeader .print_char_loop ld a, [wTextSpeed] ld c, a @@ -7938,7 +8179,7 @@ PrintScrollableText: ; 2c84 (0:2c84) ; zero wWhichTextHeader, wWhichTxRam2 and wWhichTxRam3, and set hJapaneseSyllabary to TX_KATAKANA ; fill wTextHeader1 with TX_KATAKANA, wFontWidth, hBankROM, and register bc for the text's pointer. -InitRegistersForPrintingText: ; 2cc8 (0:2cc8) +ResetTxRam_WriteToTextHeader: ; 2cc8 (0:2cc8) xor a ld [wWhichTextHeader], a ld [wWhichTxRam2], a @@ -8219,7 +8460,7 @@ PrintText: ; 2e41 (0:2e41) .from_ram ld hl, wDefaultText .print_text - call InitRegistersForPrintingText + call ResetTxRam_WriteToTextHeader .next_tile_loop ldh a, [hButtonsHeld] ld b, a @@ -8248,7 +8489,7 @@ PrintTextNoDelay: ; 2e76 (0:2e76) ldh a, [hBankROM] push af call GetTextOffsetFromTextID - call InitRegistersForPrintingText + call ResetTxRam_WriteToTextHeader .next_tile_loop call ProcessTextHeader jr nc, .next_tile_loop @@ -8475,7 +8716,7 @@ LoadCardGfx: ; 2fa0 (0:2fa0) ; identical to CopyFontsOrDuelGraphicsTiles CopyFontsOrDuelGraphicsTiles2: ; 2fcb (0:2fcb) - ld a, BANK(FullWidthFonts); BANK(DuelGraphics); BANK(HalfWidthFont) + ld a, BANK(Fonts); BANK(DuelGraphics) call BankpushHome ld c, TILE_SIZE call CopyGfxData diff --git a/src/gfx.asm b/src/gfx.asm index c2e3489..d568802 100644 --- a/src/gfx.asm +++ b/src/gfx.asm @@ -2,6 +2,8 @@ INCLUDE "macros.asm" SECTION "Gfx 1", ROMX +Fonts:: + FullWidthFonts:: ; 74000 (1d:4000) INCBIN "gfx/fonts/full_width/0_0_katakana.1bpp" INCBIN "gfx/fonts/full_width/0_1_hiragana.1bpp" diff --git a/src/wram.asm b/src/wram.asm index 34993bc..f1cfb5f 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -394,6 +394,7 @@ wInitialA:: ; cab3 wConsole:: ; cab4 ds $1 +; used to select a sprite or a starting sprite from wOAM wOAMOffset:: ; cab5 ds $1 @@ -431,13 +432,15 @@ wFlushPaletteFlags:: ; cabf wVBlankOAMCopyToggle:: ; cac0 ds $1 -wcac1:: ; cac1 +; used by HblankWriteByteToBGMap0 +wTempByte:: ; cac1 ds $1 wcac2:: ; cac2 ds $1 -wCounterCtr:: ; cac3 +; used to increase the play time counter every four timer interrupts (60.24 Hz) +wTimerCounter:: ; cac3 ds $1 wPlayTimeCounterEnable:: ; cac4 @@ -457,7 +460,7 @@ wRNG1:: ; caca wRNG2:: ; cacb ds $1 -wCounter:: ; cacc +wRNGCounter:: ; cacc ds $1 ; the LCDC status interrupt is always disabled and this always reads as jp $0000 |