diff options
-rw-r--r-- | asm/help_system.s | 170 | ||||
-rw-r--r-- | src/help_system.c | 91 |
2 files changed, 89 insertions, 172 deletions
diff --git a/asm/help_system.s b/asm/help_system.s index a53ad9457..276195831 100644 --- a/asm/help_system.s +++ b/asm/help_system.s @@ -5,176 +5,6 @@ .text - thumb_func_start sub_813BB38 -sub_813BB38: @ 813BB38 - ldr r2, _0813BB60 @ =gUnknown_203F178 - ldr r1, _0813BB64 @ =gMain - ldr r0, [r1, 0xC] - str r0, [r2] - ldr r0, [r1, 0x10] - str r0, [r2, 0x4] - movs r0, 0 - str r0, [r1, 0xC] - str r0, [r1, 0x10] - ldr r1, _0813BB68 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0813BB6C @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0813BB70 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bx lr - .align 2, 0 -_0813BB60: .4byte gUnknown_203F178 -_0813BB64: .4byte gMain -_0813BB68: .4byte 0x040000b0 -_0813BB6C: .4byte 0x0000c5ff -_0813BB70: .4byte 0x00007fff - thumb_func_end sub_813BB38 - - thumb_func_start sub_813BB74 -sub_813BB74: @ 813BB74 - push {r4,lr} - movs r0, 0 - bl GetGpuReg - ldr r4, _0813BBA8 @ =gUnknown_203F178 - strh r0, [r4, 0x8] - movs r0, 0x8 - bl GetGpuReg - strh r0, [r4, 0xA] - movs r0, 0x10 - bl GetGpuReg - strh r0, [r4, 0xC] - movs r0, 0x12 - bl GetGpuReg - strh r0, [r4, 0xE] - movs r0, 0x50 - bl GetGpuReg - strh r0, [r4, 0x10] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813BBA8: .4byte gUnknown_203F178 - thumb_func_end sub_813BB74 - - thumb_func_start sub_813BBAC -sub_813BBAC: @ 813BBAC - push {lr} - ldr r0, _0813BBC0 @ =0x0600c000 - ldr r1, _0813BBC4 @ =gUnknown_203B174 - movs r2, 0x80 - lsls r2, 7 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_0813BBC0: .4byte 0x0600c000 -_0813BBC4: .4byte gUnknown_203B174 - thumb_func_end sub_813BBAC - - thumb_func_start sub_813BBC8 -sub_813BBC8: @ 813BBC8 - push {lr} - ldr r0, _0813BBD8 @ =gUnknown_203F178 + 0x12 - adds r1, r0, 0x1 - adds r2, r0, 0x2 - bl SaveTextColors - pop {r0} - bx r0 - .align 2, 0 -_0813BBD8: .4byte gUnknown_203F178 + 0x12 - thumb_func_end sub_813BBC8 - - thumb_func_start sub_813BBDC -sub_813BBDC: @ 813BBDC - ldr r2, _0813BBEC @ =gMain - ldr r1, _0813BBF0 @ =gUnknown_203F178 - ldr r0, [r1] - str r0, [r2, 0xC] - ldr r0, [r1, 0x4] - str r0, [r2, 0x10] - bx lr - .align 2, 0 -_0813BBEC: .4byte gMain -_0813BBF0: .4byte gUnknown_203F178 - thumb_func_end sub_813BBDC - - thumb_func_start sub_813BBF4 -sub_813BBF4: @ 813BBF4 - push {r4,lr} - ldr r4, _0813BC28 @ =gUnknown_203F178 - ldrh r1, [r4, 0x10] - movs r0, 0x50 - bl SetGpuReg - ldrh r1, [r4, 0xC] - movs r0, 0x10 - bl SetGpuReg - ldrh r1, [r4, 0xE] - movs r0, 0x12 - bl SetGpuReg - ldrh r1, [r4, 0xA] - movs r0, 0x8 - bl SetGpuReg - ldrh r1, [r4, 0x8] - movs r0, 0 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813BC28: .4byte gUnknown_203F178 - thumb_func_end sub_813BBF4 - - thumb_func_start sub_813BC2C -sub_813BC2C: @ 813BC2C - push {lr} - ldr r0, _0813BC40 @ =gUnknown_203B174 - ldr r1, _0813BC44 @ =0x0600c000 - movs r2, 0x80 - lsls r2, 7 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_0813BC40: .4byte gUnknown_203B174 -_0813BC44: .4byte 0x0600c000 - thumb_func_end sub_813BC2C - - thumb_func_start sub_813BC48 -sub_813BC48: @ 813BC48 - push {lr} - ldr r0, _0813BC58 @ =gUnknown_203F178 + 0x12 - adds r1, r0, 0x1 - adds r2, r0, 0x2 - bl RestoreTextColors - pop {r0} - bx r0 - .align 2, 0 -_0813BC58: .4byte gUnknown_203F178 + 0x12 - thumb_func_end sub_813BC48 - - thumb_func_start sub_813BC5C -sub_813BC5C: @ 813BC5C - push {lr} - ldr r0, _0813BC70 @ =gDecompressionBuffer - ldr r1, _0813BC74 @ =0x0600c000 - movs r2, 0x80 - lsls r2, 7 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_0813BC70: .4byte gDecompressionBuffer -_0813BC74: .4byte 0x0600c000 - thumb_func_end sub_813BC5C - thumb_func_start sub_813BC78 sub_813BC78: @ 813BC78 push {r4-r7,lr} diff --git a/src/help_system.c b/src/help_system.c index e7c29a39d..79ae6ac90 100644 --- a/src/help_system.c +++ b/src/help_system.c @@ -8,8 +8,24 @@ #include "list_menu.h" #include "sound.h" #include "strings.h" +#include "text.h" #include "constants/songs.h" +struct DmaController +{ + void * dest; + void * src; + u32 size:21; + u32 destMode:2; + u32 srcMode:2; + u32 repeat:1; + u32 width:1; + u32 dreqOn:1; + u32 startMode:3; + u32 intrEnable:1; + u32 dmaEnable:1; +}; + struct HelpSystemVideoState { /*0x00*/ MainCallback savedVblankCb; @@ -19,7 +35,7 @@ struct HelpSystemVideoState /*0x0c*/ u16 savedBg0Hofs; /*0x0e*/ u16 savedBg0Vofs; /*0x10*/ u16 savedBldCnt; - /*0x12*/ u8 savedTextColor[3]; + /*0x12*/ struct TextColor savedTextColor; /*0x15*/ u8 state; }; @@ -38,7 +54,7 @@ void sub_813BC5C(void); void sub_813C454(const u8 * str); void sub_813C5D4(void); -EWRAM_DATA u8 gUnknown_203B174[0x4000] = {0}; +EWRAM_DATA u8 gUnknown_203B174[BG_CHAR_SIZE] = {0}; EWRAM_DATA u8 gUnknown_203F174 = 0; EWRAM_DATA u8 gUnknown_203F175 = 0; EWRAM_DATA u8 gUnknown_203F176 = 0; @@ -148,3 +164,74 @@ u8 sub_813B870(void) } return gUnknown_203F178.state; } + +void sub_813BB38(void) +{ + vu16 * dma; + gUnknown_203F178.savedVblankCb = gMain.vblankCallback; + gUnknown_203F178.savedHblankCb = gMain.hblankCallback; + gMain.vblankCallback = NULL; + gMain.hblankCallback = NULL; + + dma = (void *)REG_ADDR_DMA0; + dma[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); + dma[5] &= ~DMA_ENABLE; + dma[5]; +} + +void sub_813BB74(void) +{ + gUnknown_203F178.savedDispCnt = GetGpuReg(REG_OFFSET_DISPCNT); + gUnknown_203F178.savedBg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT); + gUnknown_203F178.savedBg0Hofs = GetGpuReg(REG_OFFSET_BG0HOFS); + gUnknown_203F178.savedBg0Vofs = GetGpuReg(REG_OFFSET_BG0VOFS); + gUnknown_203F178.savedBldCnt = GetGpuReg(REG_OFFSET_BLDCNT); +} + +void sub_813BBAC(void) +{ + RequestDma3Copy((void *)BG_CHAR_ADDR(3), gUnknown_203B174, BG_CHAR_SIZE, 0); +} + +void sub_813BBC8(void) +{ + SaveTextColors( + &gUnknown_203F178.savedTextColor.fgColor, + &gUnknown_203F178.savedTextColor.bgColor, + &gUnknown_203F178.savedTextColor.shadowColor + ); +} + +void sub_813BBDC(void) +{ + gMain.vblankCallback = gUnknown_203F178.savedVblankCb; + gMain.hblankCallback = gUnknown_203F178.savedHblankCb; +} + +void sub_813BBF4(void) +{ + SetGpuReg(REG_OFFSET_BLDCNT, gUnknown_203F178.savedBldCnt); + SetGpuReg(REG_OFFSET_BG0HOFS, gUnknown_203F178.savedBg0Hofs); + SetGpuReg(REG_OFFSET_BG0VOFS, gUnknown_203F178.savedBg0Vofs); + SetGpuReg(REG_OFFSET_BG0CNT, gUnknown_203F178.savedBg0Cnt); + SetGpuReg(REG_OFFSET_DISPCNT, gUnknown_203F178.savedDispCnt); +} + +void sub_813BC2C(void) +{ + RequestDma3Copy(gUnknown_203B174, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0); +} + +void sub_813BC48(void) +{ + RestoreTextColors( + &gUnknown_203F178.savedTextColor.fgColor, + &gUnknown_203F178.savedTextColor.bgColor, + &gUnknown_203F178.savedTextColor.shadowColor + ); +} + +void sub_813BC5C(void) +{ + RequestDma3Copy(gDecompressionBuffer, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0); +} |