diff options
author | red031000 <rubenru09@aol.com> | 2020-05-03 19:22:26 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-05-03 19:23:58 +0100 |
commit | 4f6c75ac8381a7a3c2902c97870066ee90f1d320 (patch) | |
tree | dddb158e8ec903382b383796bac8708ce8f8492f | |
parent | 2ee7030776461ee835dbbd44149f90ae79e7d4c5 (diff) |
match OS_GetLowEntropyData
-rw-r--r-- | arm9/asm/OS_entropy.s | 68 | ||||
-rw-r--r-- | arm9/lib/include/OS_entropy.h | 17 | ||||
-rw-r--r-- | arm9/lib/include/consts.h | 13 | ||||
-rw-r--r-- | arm9/lib/include/mmap.h | 2 | ||||
-rw-r--r-- | arm9/lib/include/types.h | 10 | ||||
-rw-r--r-- | arm9/lib/src/OS_entropy.c | 30 |
6 files changed, 54 insertions, 86 deletions
diff --git a/arm9/asm/OS_entropy.s b/arm9/asm/OS_entropy.s deleted file mode 100644 index 839d54f9..00000000 --- a/arm9/asm/OS_entropy.s +++ /dev/null @@ -1,68 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start OS_GetLowEntropyData -OS_GetLowEntropyData: ; 0x020CD754 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r1, _020CD82C ; =0x04000006 - ldr r2, _020CD830 ; =0x027FFC00 - ldrh r7, [r1, #0x0] - add r4, r2, #0x80 - mov r6, r0 - add r5, r4, #0x74 - bl OS_GetTickLo - orr r0, r0, r7, lsl #0x10 - str r0, [r6, #0x0] - ldr r1, _020CD834 ; =OSi_TickCounter - ldr r0, _020CD830 ; =0x027FFC00 - ldr r3, [r1, #0x0] - ldrh r5, [r5, #0x4] - ldr r2, [r1, #0x4] - ldr r2, _020CD838 ; =0x04000600 - eor r3, r3, r5, lsl #0x10 - str r3, [r6, #0x4] - ldr r3, [r1, #0x0] - ldr r3, [r1, #0x4] - ldr r1, [r4, #0x74] - ldr r4, [r0, #0x3c] - eor r1, r3, r1 - eor r1, r4, r1 - str r1, [r6, #0x8] - ldr r3, [r6, #0x8] - ldr r2, [r2, #0x0] - add r1, r0, #0x300 - eor r2, r3, r2 - str r2, [r6, #0x8] - ldr r2, [r0, #0x1e8] - ldr r3, _020CD83C ; =0x04000130 - str r2, [r6, #0xc] - ldr r4, [r0, #0x1ec] - ldr r2, _020CD840 ; =0x027FFFA8 - str r4, [r6, #0x10] - ldrh r4, [r1, #0x94] - ldr r0, [r0, #0x390] - eor r0, r0, r4, lsl #0x10 - str r0, [r6, #0x14] - ldrh r4, [r1, #0xaa] - ldrh r0, [r1, #0xac] - orr r0, r0, r4, lsl #0x10 - str r0, [r6, #0x18] - ldrh r3, [r3, #0x0] - ldrh r0, [r2, #0x0] - ldrh r1, [r1, #0x98] - orr r0, r3, r0 - orr r0, r0, r1, lsl #0x10 - str r0, [r6, #0x1c] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020CD82C: .word 0x04000006 -_020CD830: .word 0x027FFC00 -_020CD834: .word OSi_TickCounter -_020CD838: .word 0x04000600 -_020CD83C: .word 0x04000130 -_020CD840: .word 0x027FFFA8 diff --git a/arm9/lib/include/OS_entropy.h b/arm9/lib/include/OS_entropy.h index f4eef4b5..b4695a72 100644 --- a/arm9/lib/include/OS_entropy.h +++ b/arm9/lib/include/OS_entropy.h @@ -5,6 +5,23 @@ #ifndef POKEDIAMOND_OS_ENTROPY_H #define POKEDIAMOND_OS_ENTROPY_H +#include "consts.h" + void OS_GetLowEntropyData(u32 * arr); +typedef struct NVRAMConfig{ + u8 ncd[110]; // todo: typeof NVRAMConfigData + u16 saveCount; + u16 rc16; +} NVRAMConfig; + +extern vu64 OSi_TickCounter; + +extern u16 OS_GetTickLo(); + +static inline s32 GX_GetVCount() +{ + return reg_GX_VCOUNT; +} + #endif //POKEDIAMOND_OS_ENTROPY_H diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h index 930f9af5..e07fe323 100644 --- a/arm9/lib/include/consts.h +++ b/arm9/lib/include/consts.h @@ -13,6 +13,19 @@ #define HW_PSR_DISABLE_IRQ 0x80 // Disable IRQ #define HW_PSR_DISABLE_IRQ_FIQ 0xc0 // Disable FIQ and IRQ +#define HW_REG_BASE 0x04000000 +#define REG_VCOUNT_OFFSET 0x006 +#define REG_VCOUNT_ADDR (HW_REG_BASE + REG_VCOUNT_OFFSET) +#define reg_GX_VCOUNT (*(REGType16v *)REG_VCOUNT_ADDR) + +#define REG_KEYINPUT_OFFSET 0x130 +#define REG_KEYINPUT_ADDR (HW_REG_BASE + REG_KEYINPUT_OFFSET) +#define reg_PAD_KEYINPUT (*(REGType16v *)REG_KEYINPUT_ADDR) + +#define REG_GXSTAT_OFFSET 0x600 +#define REG_GXSTAT_ADDR (HW_REG_BASE + REG_GXSTAT_OFFSET) +#define reg_G3X_GXSTAT (*(REGType32v *)REG_GXSTAT_ADDR) + #define HW_C6_PR_4KB 0x16 #define HW_C6_PR_8KB 0x18 #define HW_C6_PR_16KB 0x1a diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index ddbd8883..d94df843 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -35,6 +35,8 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_DTCM_SVC_STACK (HW_DTCM_SVC_STACK_END - HW_SVC_STACK_SIZE) #define HW_DTCM_IRQ_STACK_END (HW_DTCM_SVC_STACK) +#define HW_BUTTON_XY_BUF (HW_MAIN_MEM + 0x007fffa8) + #define OSi_MAIN_ARENA_HI_DEFAULT (HW_MAIN_MEM_MAIN_END) #define OSi_MAINEX_ARENA_HI_DEFAULT (HW_MAIN_MEM + HW_MAIN_MEM_DEBUGGER_OFFSET) #define HW_ITCM_ARENA_HI_DEFAULT (HW_ITCM + HW_ITCM_SIZE) diff --git a/arm9/lib/include/types.h b/arm9/lib/include/types.h index 5ad2c75e..40f8207d 100644 --- a/arm9/lib/include/types.h +++ b/arm9/lib/include/types.h @@ -25,6 +25,16 @@ typedef volatile s64 vs64; typedef float f32; typedef volatile f32 vf32; +typedef u8 REGType8; +typedef u16 REGType16; +typedef u32 REGType32; +typedef u64 REGType64; + +typedef vu8 REGType8v; +typedef vu16 REGType16v; +typedef vu32 REGType32v; +typedef vu64 REGType64v; + typedef int BOOL; #define TRUE 1 #define FALSE 0 diff --git a/arm9/lib/src/OS_entropy.c b/arm9/lib/src/OS_entropy.c index bfc95882..b33781cc 100644 --- a/arm9/lib/src/OS_entropy.c +++ b/arm9/lib/src/OS_entropy.c @@ -6,23 +6,17 @@ #include "consts.h" #include "OS_entropy.h" -u32 * const HW_REG_006 = (u32 *) 0x04000006; -u32 * const HW_REG_130 = (u32 *) 0x04000130; -u32 * const HW_REG_600 = (u32 *) 0x04000600; - -u32 * const OSi_TickCounter = (u32 *) 0x021D37B4; - ARM_FUNC void OS_GetLowEntropyData(u32 * arr) { - OSSystemWork* work = OS_GetSystemWork(); - u16 x = *((u16 *)HW_REG_006); - u8 * nvramUserInfo = work->nvramUserInfo; - u8 r5 = nvramUserInfo[0x74]; - arr[0] = (OS_GetTickLo()<<0x10) | x ; - arr[1] = (OSi_TickCounter[0]<<0x10) ^ r5[2]; - u32 what = OSi_TickCounter[0]; - what = OSi_TickCounter[1]; - arr[2] = *((u32 *)r4) ^ what ^ *(u32 *)((u8 *)work+0x3c); - arr[2] ^= *HW_REG_600; - // ... -}
\ No newline at end of file + const OSSystemWork* work = OS_GetSystemWork(); + const u8 * macAddress = (u8 *)((u32)(work->nvramUserInfo) + ((sizeof(NVRAMConfig) + 3) & ~3)); + arr[0] = (u32)((GX_GetVCount() << 16) | OS_GetTickLo()); + arr[1] = (u32)(*(u16 *)(macAddress + 4) << 16) ^ (u32)(OSi_TickCounter); + arr[2] = (u32)(OSi_TickCounter >> 32) ^ *(u32 *)macAddress ^ work->vblankCount; + arr[2] ^= reg_G3X_GXSTAT; + arr[3] = *(u32 *)(&work->real_time_clock[0]); + arr[4] = *(u32 *)(&work->real_time_clock[4]); + arr[5] = (((u32)work->mic_sampling_data) << 16) ^ work->mic_last_address; + arr[6] = (u32) ((*(u16 *)(&work->touch_panel[0]) << 16) | *(u16 *)(&work->touch_panel[2])); + arr[7] = (u32)((work->wm_rssi_pool << 16) | (reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF)); +} |