diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-01 22:02:57 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-01 22:02:57 -0400 |
commit | ff1da361388c9f38813e6622839e702740b2974c (patch) | |
tree | 418829d89591bb57782d2bcaf010684871db230b | |
parent | 67d86d6a4cf715b9089f420c067935bcee9d1d7f (diff) |
nonmatching sub_8048B0C
-rw-r--r-- | asm/trade.s | 163 | ||||
-rw-r--r-- | include/graphics.h | 4 | ||||
-rw-r--r-- | src/trade.c | 235 |
3 files changed, 236 insertions, 166 deletions
diff --git a/asm/trade.s b/asm/trade.s index f4ddba518..95c9c4b15 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -10,169 +10,6 @@ .set sub_804A96C_alt, sub_804A96C .endif - thumb_func_start sub_8048B0C -sub_8048B0C: @ 8048B0C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08048B1C - cmp r0, 0x1 - beq _08048BD0 - b _08048C3A -_08048B1C: - ldr r5, _08048BA0 @ =gUnknown_08EA0348 - ldr r0, _08048BA4 @ =gTradeStripesBG2Tilemap - mov r12, r0 - ldr r1, _08048BA8 @ =gUnknown_08EA02C8 - ldr r4, _08048BAC @ =gPlttBufferFaded - ldr r3, _08048BB0 @ =gPlttBufferUnfaded - movs r2, 0x2F -_08048B2A: - ldrh r0, [r1] - strh r0, [r3] - ldrh r0, [r1] - strh r0, [r4] - adds r1, 0x2 - adds r4, 0x2 - adds r3, 0x2 - subs r2, 0x1 - cmp r2, 0 - bge _08048B2A - adds r3, r5, 0 - movs r4, 0xC0 - lsls r4, 19 - movs r5, 0x94 - lsls r5, 5 - ldr r1, _08048BB4 @ =0x040000d4 - ldr r6, _08048BB8 @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_08048B54: - str r3, [r1] - str r4, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r2 - adds r4, r2 - subs r5, r2 - cmp r5, r2 - bhi _08048B54 - str r3, [r1] - str r4, [r1, 0x4] - lsrs r0, r5, 1 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0 - ldr r5, _08048BBC @ =0x000003ff - ldr r4, _08048BC0 @ =gUnknown_03004824 - ldr r3, _08048BC4 @ =gUnknown_08EA15C8 -_08048B7A: - ldr r0, [r4] - lsls r1, r2, 1 - adds r0, 0xDA - adds r0, r1 - ldrh r1, [r3] - strh r1, [r0] - adds r3, 0x2 - adds r2, 0x1 - cmp r2, r5 - ble _08048B7A - ldr r1, _08048BC8 @ =0x06003000 - ldr r0, _08048BB4 @ =0x040000d4 - mov r2, r12 - str r2, [r0] - str r1, [r0, 0x4] - ldr r1, _08048BCC @ =0x80000400 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - b _08048C3A - .align 2, 0 -_08048BA0: .4byte gUnknown_08EA0348 -_08048BA4: .4byte gTradeStripesBG2Tilemap -_08048BA8: .4byte gUnknown_08EA02C8 -_08048BAC: .4byte gPlttBufferFaded -_08048BB0: .4byte gPlttBufferUnfaded -_08048BB4: .4byte 0x040000d4 -_08048BB8: .4byte 0x80000800 -_08048BBC: .4byte 0x000003ff -_08048BC0: .4byte gUnknown_03004824 -_08048BC4: .4byte gUnknown_08EA15C8 -_08048BC8: .4byte 0x06003000 -_08048BCC: .4byte 0x80000400 -_08048BD0: - ldr r1, _08048C40 @ =gTradeStripesBG3Tilemap - ldr r2, _08048C44 @ =0x06003800 - ldr r0, _08048C48 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08048C4C @ =0x80000400 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - movs r0, 0 - bl sub_804A6DC - movs r0, 0x1 - bl sub_804A6DC - ldr r0, _08048C50 @ =gUnknown_03004824 - ldr r0, [r0] - adds r0, 0xC8 - bl sub_804A938 - ldr r2, _08048C54 @ =REG_BG0CNT - ldrh r1, [r2] - ldr r0, _08048C58 @ =0x0000fffc - ands r0, r1 - strh r0, [r2] - ldr r1, _08048C5C @ =REG_BG1CNT - ldr r2, _08048C60 @ =0x00000501 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _08048C64 @ =0x00000602 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _08048C68 @ =0x00000703 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08048C6C @ =REG_BG0HOFS - movs r1, 0 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - subs r0, 0xA - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] -_08048C3A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048C40: .4byte gTradeStripesBG3Tilemap -_08048C44: .4byte 0x06003800 -_08048C48: .4byte 0x040000d4 -_08048C4C: .4byte 0x80000400 -_08048C50: .4byte gUnknown_03004824 -_08048C54: .4byte REG_BG0CNT -_08048C58: .4byte 0x0000fffc -_08048C5C: .4byte REG_BG1CNT -_08048C60: .4byte 0x00000501 -_08048C64: .4byte 0x00000602 -_08048C68: .4byte 0x00000703 -_08048C6C: .4byte REG_BG0HOFS - thumb_func_end sub_8048B0C - thumb_func_start sub_8048C70 sub_8048C70: @ 8048C70 push {r4-r7,lr} diff --git a/include/graphics.h b/include/graphics.h index 72688ec44..09ef5343c 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2566,5 +2566,7 @@ extern const u8 gUnknown_08E8D9C0[]; extern const u8 gUnknown_08EA1DEC[]; extern const u16 gUnknown_08EA0328[]; - +extern const u16 gUnknown_08EA02C8[]; +extern const u16 gUnknown_08EA0348[]; +extern const u16 gUnknown_08EA15C8[]; #endif // GUARD_GRAPHICS_H diff --git a/src/trade.c b/src/trade.c index 4e1c74b83..38cde38de 100644 --- a/src/trade.c +++ b/src/trade.c @@ -56,6 +56,7 @@ struct UnkStructE { /*0x08*/ void *vramAddr; /*0x0c*/ u8 filler_0c[4]; /*0x10*/ u8 unk_10; + /*0x12*/ u16 unk_12[0x400]; }; struct TradeEwramSubstruct { @@ -84,9 +85,9 @@ struct TradeEwramSubstruct { /*0x008a*/ u8 unk_008a; /*0x008b*/ u8 filler_008b[0x29]; /*0x00b4*/ u8 unk_00b4; - /*0x00b5*/ u8 filler_00b4[0x13]; + /*0x00b5*/ u8 filler_00b5[0x13]; /*0x00c8*/ struct UnkStructE unk_00c8; - /*0x00dc*/ u8 filler_00dc[0xf24]; + /*0x08dc*/ u8 filler_04dc[0x724]; }; struct UnkStructF { @@ -128,6 +129,8 @@ void sub_804B41C(void); void sub_8049DE0(void); void sub_804AB30(void); void sub_8049ED4(u8); +void sub_804A6DC(u8); +void sub_804A938(struct UnkStructE *); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -953,6 +956,234 @@ void sub_8048AB4(void) UpdatePaletteFade(); } +#ifdef NONMATCHING +// Only minor register permutations +#pragma push_macro("BLOCKSIZE") +#define BLOCKSIZE 0x800 +void sub_8048B0C(u8 a0) +{ + int i; + u16 *dest; + const u16 *src; + u32 size; + switch (a0) + { + case 0: + for (i = 0; i < 48; i ++) + { + gPlttBufferUnfaded[i] = *(gUnknown_08EA02C8 + i); + gPlttBufferFaded[i] = *(gUnknown_08EA02C8 + i); + } + src = gUnknown_08EA0348; + dest = (u16 *)BG_VRAM; + size = 0x1280; + while (1) + { + DmaCopy16(3, src, dest, BLOCKSIZE * sizeof(u16)); + src += BLOCKSIZE; + dest += BLOCKSIZE; + size -= BLOCKSIZE * sizeof(u16); + if (size <= BLOCKSIZE * sizeof(u16)) + { + DmaCopy16(3, src, dest, size); + break; + } + } + for (i = 0; i < 0x400; i ++) + gUnknown_03004824->unk_00c8.unk_12[i] = gUnknown_08EA15C8[i]; + dest = (u16 *)BG_SCREEN_ADDR(6); + DmaCopy16(3, gTradeStripesBG2Tilemap, dest, 0x800); + break; + case 1: + src = gTradeStripesBG3Tilemap; + dest = (u16 *)BG_SCREEN_ADDR(7); + DmaCopy16(3, src, dest, 0x800); + sub_804A6DC(0); + sub_804A6DC(1); + sub_804A938(&gUnknown_03004824->unk_00c8); + REG_BG0CNT &= ~0x03; // BGCNT_PRIORITY(0) + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(5); + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(6); + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(7); + REG_BG0HOFS = 0; + REG_BG1HOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG3VOFS = 0; + break; + } +} +#pragma pop_macro("BLOCKSIZE") +#else +asm(".include \"constants/gba_constants.inc\""); +__attribute__((naked)) +void sub_8048B0C(u8 a0) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08048B1C\n" + "\tcmp r0, 0x1\n" + "\tbeq _08048BD0\n" + "\tb _08048C3A\n" + "_08048B1C:\n" + "\tldr r5, _08048BA0 @ =gUnknown_08EA0348\n" + "\tldr r0, _08048BA4 @ =gTradeStripesBG2Tilemap\n" + "\tmov r12, r0\n" + "\tldr r1, _08048BA8 @ =gUnknown_08EA02C8\n" + "\tldr r4, _08048BAC @ =gPlttBufferFaded\n" + "\tldr r3, _08048BB0 @ =gPlttBufferUnfaded\n" + "\tmovs r2, 0x2F\n" + "_08048B2A:\n" + "\tldrh r0, [r1]\n" + "\tstrh r0, [r3]\n" + "\tldrh r0, [r1]\n" + "\tstrh r0, [r4]\n" + "\tadds r1, 0x2\n" + "\tadds r4, 0x2\n" + "\tadds r3, 0x2\n" + "\tsubs r2, 0x1\n" + "\tcmp r2, 0\n" + "\tbge _08048B2A\n" + "\tadds r3, r5, 0\n" + "\tmovs r4, 0xC0\n" + "\tlsls r4, 19\n" + "\tmovs r5, 0x94\n" + "\tlsls r5, 5\n" + "\tldr r1, _08048BB4 @ =0x040000d4\n" + "\tldr r6, _08048BB8 @ =0x80000800\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 5\n" + "\tmovs r7, 0x80\n" + "\tlsls r7, 24\n" + "_08048B54:\n" + "\tstr r3, [r1]\n" + "\tstr r4, [r1, 0x4]\n" + "\tstr r6, [r1, 0x8]\n" + "\tldr r0, [r1, 0x8]\n" + "\tadds r3, r2\n" + "\tadds r4, r2\n" + "\tsubs r5, r2\n" + "\tcmp r5, r2\n" + "\tbhi _08048B54\n" + "\tstr r3, [r1]\n" + "\tstr r4, [r1, 0x4]\n" + "\tlsrs r0, r5, 1\n" + "\torrs r0, r7\n" + "\tstr r0, [r1, 0x8]\n" + "\tldr r0, [r1, 0x8]\n" + "\tmovs r2, 0\n" + "\tldr r5, _08048BBC @ =0x000003ff\n" + "\tldr r4, _08048BC0 @ =gUnknown_03004824\n" + "\tldr r3, _08048BC4 @ =gUnknown_08EA15C8\n" + "_08048B7A:\n" + "\tldr r0, [r4]\n" + "\tlsls r1, r2, 1\n" + "\tadds r0, 0xDA\n" + "\tadds r0, r1\n" + "\tldrh r1, [r3]\n" + "\tstrh r1, [r0]\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x1\n" + "\tcmp r2, r5\n" + "\tble _08048B7A\n" + "\tldr r1, _08048BC8 @ =0x06003000\n" + "\tldr r0, _08048BB4 @ =0x040000d4\n" + "\tmov r2, r12\n" + "\tstr r2, [r0]\n" + "\tstr r1, [r0, 0x4]\n" + "\tldr r1, _08048BCC @ =0x80000400\n" + "\tstr r1, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tb _08048C3A\n" + "\t.align 2, 0\n" + "_08048BA0: .4byte gUnknown_08EA0348\n" + "_08048BA4: .4byte gTradeStripesBG2Tilemap\n" + "_08048BA8: .4byte gUnknown_08EA02C8\n" + "_08048BAC: .4byte gPlttBufferFaded\n" + "_08048BB0: .4byte gPlttBufferUnfaded\n" + "_08048BB4: .4byte 0x040000d4\n" + "_08048BB8: .4byte 0x80000800\n" + "_08048BBC: .4byte 0x000003ff\n" + "_08048BC0: .4byte gUnknown_03004824\n" + "_08048BC4: .4byte gUnknown_08EA15C8\n" + "_08048BC8: .4byte 0x06003000\n" + "_08048BCC: .4byte 0x80000400\n" + "_08048BD0:\n" + "\tldr r1, _08048C40 @ =gTradeStripesBG3Tilemap\n" + "\tldr r2, _08048C44 @ =0x06003800\n" + "\tldr r0, _08048C48 @ =0x040000d4\n" + "\tstr r1, [r0]\n" + "\tstr r2, [r0, 0x4]\n" + "\tldr r1, _08048C4C @ =0x80000400\n" + "\tstr r1, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tmovs r0, 0\n" + "\tbl sub_804A6DC\n" + "\tmovs r0, 0x1\n" + "\tbl sub_804A6DC\n" + "\tldr r0, _08048C50 @ =gUnknown_03004824\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0xC8\n" + "\tbl sub_804A938\n" + "\tldr r2, _08048C54 @ =REG_BG0CNT\n" + "\tldrh r1, [r2]\n" + "\tldr r0, _08048C58 @ =0x0000fffc\n" + "\tands r0, r1\n" + "\tstrh r0, [r2]\n" + "\tldr r1, _08048C5C @ =REG_BG1CNT\n" + "\tldr r2, _08048C60 @ =0x00000501\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tldr r2, _08048C64 @ =0x00000602\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tldr r2, _08048C68 @ =0x00000703\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tldr r0, _08048C6C @ =REG_BG0HOFS\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tsubs r0, 0xA\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "_08048C3A:\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08048C40: .4byte gTradeStripesBG3Tilemap\n" + "_08048C44: .4byte 0x06003800\n" + "_08048C48: .4byte 0x040000d4\n" + "_08048C4C: .4byte 0x80000400\n" + "_08048C50: .4byte gUnknown_03004824\n" + "_08048C54: .4byte REG_BG0CNT\n" + "_08048C58: .4byte 0x0000fffc\n" + "_08048C5C: .4byte REG_BG1CNT\n" + "_08048C60: .4byte 0x00000501\n" + "_08048C64: .4byte 0x00000602\n" + "_08048C68: .4byte 0x00000703\n" + "_08048C6C: .4byte REG_BG0HOFS"); +} +#endif + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { |