summaryrefslogtreecommitdiff
path: root/arm7/asm/NVRAM.s
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-07-27 10:22:09 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-07-27 10:22:09 -0400
commit8a3102ca979fe327001be6fa00a42fea0120ce6c (patch)
treef7602dfa72569e996ac5fe77ff1ff6a1c4f7e61c /arm7/asm/NVRAM.s
parent3bf0b69ed022f38ed9d325b07d03888f57a69e3e (diff)
parent8e1946da03f96b5696d3f8f248a2b675ba80d594 (diff)
Merge branch 'master' of github.com:pret/pokediamond into pikalax_work
Diffstat (limited to 'arm7/asm/NVRAM.s')
-rw-r--r--arm7/asm/NVRAM.s1053
1 files changed, 1053 insertions, 0 deletions
diff --git a/arm7/asm/NVRAM.s b/arm7/asm/NVRAM.s
new file mode 100644
index 00000000..3257e7b4
--- /dev/null
+++ b/arm7/asm/NVRAM.s
@@ -0,0 +1,1053 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global _0380A018
+_0380A018: ;0x0380A018
+ .space 0x0380A038 - 0x0380A018
+
+ .section .text
+
+ arm_func_start FUN_0380428C
+FUN_0380428C: ;@ 0x0380428C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl NVRAM_ReadStatusRegister
+ ldrh r1, [sp]
+ ands r0, r1, #1
+ movne r0, #0
+ bne _038042B8
+ ands r0, r1, #2
+ movne r0, #1
+ moveq r0, #0
+_038042B8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038042C4
+FUN_038042C4: ;@ 0x038042C4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl NVRAM_ReadStatusRegister
+ ldrh r0, [sp]
+ ands r0, r0, #1
+ moveq r0, #1
+ movne r0, #0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start NVRAM_ExecuteProcess
+NVRAM_ExecuteProcess: ;@ 0x038042F0
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, #1
+ bl SPIi_CheckException
+ cmp r0, #0
+ bne _03804334
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl SPIi_ReturnResult
+ b _038045C0
+_03804334:
+ mov r0, #1
+ bl SPIi_GetException
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r0, [r4, #4]
+ sub r0, r0, #32
+ cmp r0, #13
+ addls pc, pc, r0, lsl #2
+ b _03804584
+ b _03804390
+ b _03804398
+ b _038043A0
+ b _038043AC
+ b _038043EC
+ b _0380442C
+ b _03804474
+ b _038044BC
+ b _038044F4
+ b _0380452C
+ b _03804534
+ b _0380453C
+ b _03804570
+ b _0380457C
+_03804390:
+ bl NVRAM_WriteEnable
+ b _038045A4
+_03804398:
+ bl NVRAM_WriteDisable
+ b _038045A4
+_038043A0:
+ ldr r0, [r4, #16]
+ bl NVRAM_ReadStatusRegister
+ b _038045A4
+_038043AC:
+ bl FUN_038042C4
+ cmp r0, #0
+ bne _038043D8
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_038043D8:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ ldr r2, [r4, #16]
+ bl NVRAM_ReadDataBytes
+ b _038045A4
+_038043EC:
+ bl FUN_038042C4
+ cmp r0, #0
+ bne _03804418
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804418:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ ldr r2, [r4, #16]
+ bl NVRAM_ReadDataBytesAtHigherSpeed
+ b _038045A4
+_0380442C:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804458
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804458:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ ldr r2, [r4, #16]
+ bl NVRAM_PageWrite
+ b _038045A4
+_03804474:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _038044A0
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_038044A0:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ ldr r2, [r4, #16]
+ bl NVRAM_PageProgram
+ b _038045A4
+_038044BC:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _038044E8
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_038044E8:
+ ldr r0, [r4, #8]
+ bl NVRAM_PageErase
+ b _038045A4
+_038044F4:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804520
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804520:
+ ldr r0, [r4, #8]
+ bl NVRAM_SectorErase
+ b _038045A4
+_0380452C:
+ bl NVRAM_DeepPowerDown
+ b _038045A4
+_03804534:
+ bl NVRAM_ReleaseFromDeepPowerDown
+ b _038045A4
+_0380453C:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804568
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+ b _038045C0
+_03804568:
+ bl NVRAM_ChipErase
+ b _038045A4
+_03804570:
+ ldr r0, [r4, #16]
+ bl NVRAM_ReadSiliconId
+ b _038045A4
+_0380457C:
+ bl NVRAM_SoftwareReset
+ b _038045A4
+_03804584:
+ mov r0, #1
+ bl SPIi_ReleaseException
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #1
+ bl SPIi_ReturnResult
+ b _038045C0
+_038045A4:
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl SPIi_ReturnResult
+ mov r0, #1
+ bl SPIi_ReleaseException
+_038045C0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start NVRAM_AnalyzeCommand
+NVRAM_AnalyzeCommand: ;@ 0x038045CC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #12
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _038045FC
+ mov r5, #0
+ mov lr, r5
+ ldr r1, _0380476C ;@ =_0380A018
+_038045E8:
+ mov r4, r5, lsl #1
+ strh lr, [r1, r4]
+ add r5, r5, #1
+ cmp r5, #16
+ blt _038045E8
+_038045FC:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r4, r1, lsl #1
+ ldr r1, _0380476C ;@ =_0380A018
+ strh r0, [r1, r4]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03804760
+ ldrh r0, [r1]
+ and r4, r0, #65280 ;@ 0xff00
+ mov r4, r4, lsl #8
+ mov r4, r4, lsr #16
+ sub lr, r4, #34 ;@ 0x22
+ cmp lr, #10
+ addls pc, pc, lr, lsl #2
+ b _03804734
+ b _03804664
+ b _038046A0
+ b _038046A0
+ b _038046E8
+ b _038046E8
+ b _03804728
+ b _03804728
+ b _03804734
+ b _03804734
+ b _03804734
+ b _03804664
+_03804664:
+ ldrh ip, [r1, #4]
+ and lr, ip, #65280 ;@ 0xff00
+ and r0, r0, #255 ;@ 0xff
+ mov ip, r0, lsl #24
+ ldrh r0, [r1, #2]
+ orr r0, ip, r0, lsl #8
+ orr ip, r0, lr, lsr #8
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _03804690
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _03804734
+_03804690:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03804760
+_038046A0:
+ ldrh r3, [r1, #8]
+ ldrh r2, [r1, #10]
+ orr ip, r2, r3, lsl #16
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _038046BC
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _038046CC
+_038046BC:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03804760
+_038046CC:
+ and r2, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r2, lsl #16
+ ldrh r2, [r1, #4]
+ ldrh r0, [r1, #6]
+ orr r2, r0, r2, lsl #16
+ b _03804734
+_038046E8:
+ ldrh r3, [r1, #6]
+ ldrh r2, [r1, #8]
+ orr ip, r2, r3, lsl #16
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _03804704
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _03804714
+_03804704:
+ mov r0, r4
+ mov r1, #2
+ bl SPIi_ReturnResult
+ b _03804760
+_03804714:
+ and r2, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r2, lsl #16
+ ldrh r2, [r1, #4]
+ b _03804734
+_03804728:
+ and r3, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r3, lsl #16
+_03804734:
+ str r2, [sp]
+ str ip, [sp, #4]
+ mov r0, #1
+ mov r1, r4
+ mov r2, #3
+ bl SPIi_SetEntry
+ cmp r0, #0
+ bne _03804760
+ mov r0, r4
+ mov r1, #4
+ bl SPIi_ReturnResult
+_03804760:
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_0380476C: .word _0380A018
+
+ arm_func_start NVRAM_Init
+NVRAM_Init: ;@ 0x03804770
+ mov r3, #0
+ mov r2, r3
+ ldr r0, _03804794 ;@ =_0380A018
+_0380477C:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _0380477C
+ bx lr
+_03804794: .word _0380A018
+
+ arm_func_start NVRAM_SoftwareReset
+NVRAM_SoftwareReset: ;@ 0x03804798
+ ldr r1, _038047D0 ;@ =0x040001C0
+_0380479C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380479C
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #255 ;@ 0xff
+ ldr r0, _038047D4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038047D0 ;@ =0x040001C0
+_038047C0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038047C0
+ bx lr
+_038047D0: .word 0x040001C0
+_038047D4: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadSiliconId
+NVRAM_ReadSiliconId: ;@ 0x038047D8
+ ldr r2, _0380486C ;@ =0x040001C0
+_038047DC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _038047DC
+ mov r1, #35072 ;@ 0x8900
+ strh r1, [r2]
+ mov r2, #159 ;@ 0x9f
+ ldr r1, _03804870 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _0380486C ;@ =0x040001C0
+_03804800:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804800
+ mov r2, #0
+ ldr r1, _03804870 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r3, _0380486C ;@ =0x040001C0
+_0380481C:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _0380481C
+ ldr r2, _03804870 ;@ =0x040001C2
+ ldrh r1, [r2]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0]
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r3]
+ mov r1, #0
+ strh r1, [r2]
+ ldr r2, _0380486C ;@ =0x040001C0
+_0380484C:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _0380484C
+ ldr r1, _03804870 ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0, #1]
+ bx lr
+_0380486C: .word 0x040001C0
+_03804870: .word 0x040001C2
+
+ arm_func_start NVRAM_ChipErase
+NVRAM_ChipErase: ;@ 0x03804874
+ ldr r1, _038048AC ;@ =0x040001C0
+_03804878:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804878
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #199 ;@ 0xc7
+ ldr r0, _038048B0 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038048AC ;@ =0x040001C0
+_0380489C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380489C
+ bx lr
+_038048AC: .word 0x040001C0
+_038048B0: .word 0x040001C2
+
+ arm_func_start NVRAM_ReleaseFromDeepPowerDown
+NVRAM_ReleaseFromDeepPowerDown: ;@ 0x038048B4
+ ldr r1, _038048EC ;@ =0x040001C0
+_038048B8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048B8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #171 ;@ 0xab
+ ldr r0, _038048F0 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038048EC ;@ =0x040001C0
+_038048DC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048DC
+ bx lr
+_038048EC: .word 0x040001C0
+_038048F0: .word 0x040001C2
+
+ arm_func_start NVRAM_DeepPowerDown
+NVRAM_DeepPowerDown: ;@ 0x038048F4
+ ldr r1, _0380492C ;@ =0x040001C0
+_038048F8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048F8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #185 ;@ 0xb9
+ ldr r0, _03804930 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380492C ;@ =0x040001C0
+_0380491C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380491C
+ bx lr
+_0380492C: .word 0x040001C0
+_03804930: .word 0x040001C2
+
+ arm_func_start NVRAM_SectorErase
+NVRAM_SectorErase: ;@ 0x03804934
+ and r1, r0, #16711680 ;@ 0xff0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #16
+ mov r2, r1, lsr #16
+ and r1, r0, #65280 ;@ 0xff00
+ mov r1, r1, lsl #8
+ mov r1, r1, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr ip, _038049F0 ;@ =0x040001C0
+_03804960:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804960
+ mov r3, #35072 ;@ 0x8900
+ strh r3, [ip]
+ mov ip, #216 ;@ 0xd8
+ ldr r3, _038049F4 ;@ =0x040001C2
+ strh ip, [r3]
+ ldr ip, _038049F0 ;@ =0x040001C0
+_03804984:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804984
+ and r3, r2, #255 ;@ 0xff
+ ldr r2, _038049F4 ;@ =0x040001C2
+ strh r3, [r2]
+ ldr r3, _038049F0 ;@ =0x040001C0
+_038049A0:
+ ldrh r2, [r3]
+ ands r2, r2, #128 ;@ 0x80
+ bne _038049A0
+ and r2, r1, #255 ;@ 0xff
+ ldr r1, _038049F4 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _038049F0 ;@ =0x040001C0
+_038049BC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _038049BC
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _038049F4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038049F0 ;@ =0x040001C0
+_038049E0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038049E0
+ bx lr
+_038049F0: .word 0x040001C0
+_038049F4: .word 0x040001C2
+
+ arm_func_start NVRAM_PageErase
+NVRAM_PageErase: ;@ 0x038049F8
+ and r1, r0, #16711680 ;@ 0xff0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #16
+ mov r2, r1, lsr #16
+ and r1, r0, #65280 ;@ 0xff00
+ mov r1, r1, lsl #8
+ mov r1, r1, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr ip, _03804AB4 ;@ =0x040001C0
+_03804A24:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804A24
+ mov r3, #35072 ;@ 0x8900
+ strh r3, [ip]
+ mov ip, #219 ;@ 0xdb
+ ldr r3, _03804AB8 ;@ =0x040001C2
+ strh ip, [r3]
+ ldr ip, _03804AB4 ;@ =0x040001C0
+_03804A48:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804A48
+ and r3, r2, #255 ;@ 0xff
+ ldr r2, _03804AB8 ;@ =0x040001C2
+ strh r3, [r2]
+ ldr r3, _03804AB4 ;@ =0x040001C0
+_03804A64:
+ ldrh r2, [r3]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03804A64
+ and r2, r1, #255 ;@ 0xff
+ ldr r1, _03804AB8 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804AB4 ;@ =0x040001C0
+_03804A80:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804A80
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804AB8 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804AB4 ;@ =0x040001C0
+_03804AA4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804AA4
+ bx lr
+_03804AB4: .word 0x040001C0
+_03804AB8: .word 0x040001C2
+
+ arm_func_start NVRAM_PageProgram
+NVRAM_PageProgram: ;@ 0x03804ABC
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804BD4
+ add r3, r0, r1
+ sub r3, r3, #1
+ mov r3, r3, lsr #8
+ cmp r3, r0, lsr #8
+ andhi r1, r0, #255 ;@ 0xff
+ rsbhi r1, r1, #256 ;@ 0x100
+ movhi r1, r1, lsl #16
+ movhi r1, r1, lsr #16
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804BE0 ;@ =0x040001C0
+_03804B10:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804B10
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #2
+ ldr lr, _03804BE4 ;@ =0x040001C2
+ strh r0, [lr]
+ mov r4, #0
+ add r3, sp, #0
+ ldr ip, _03804BE0 ;@ =0x040001C0
+_03804B3C:
+ ldrh r0, [ip]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804B3C
+ mov r0, r4, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [lr]
+ add r4, r4, #1
+ cmp r4, #3
+ blt _03804B3C
+ mov ip, #0
+ sub lr, r1, #1
+ ldr r3, _03804BE0 ;@ =0x040001C0
+ ldr r0, _03804BE4 ;@ =0x040001C2
+ b _03804B94
+_03804B78:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804B78
+ ldrb r1, [r2, ip]
+ and r1, r1, #255 ;@ 0xff
+ strh r1, [r0]
+ add ip, ip, #1
+_03804B94:
+ cmp ip, lr
+ blt _03804B78
+ ldr r1, _03804BE0 ;@ =0x040001C0
+_03804BA0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804BA0
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ ldrb r0, [r2, ip]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804BE4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804BE0 ;@ =0x040001C0
+_03804BC8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804BC8
+_03804BD4:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804BE0: .word 0x040001C0
+_03804BE4: .word 0x040001C2
+
+ arm_func_start NVRAM_PageWrite
+NVRAM_PageWrite: ;@ 0x03804BE8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804D00
+ add r3, r0, r1
+ sub r3, r3, #1
+ mov r3, r3, lsr #8
+ cmp r3, r0, lsr #8
+ andhi r1, r0, #255 ;@ 0xff
+ rsbhi r1, r1, #256 ;@ 0x100
+ movhi r1, r1, lsl #16
+ movhi r1, r1, lsr #16
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804D0C ;@ =0x040001C0
+_03804C3C:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804C3C
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #10
+ ldr lr, _03804D10 ;@ =0x040001C2
+ strh r0, [lr]
+ mov r4, #0
+ add r3, sp, #0
+ ldr ip, _03804D0C ;@ =0x040001C0
+_03804C68:
+ ldrh r0, [ip]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804C68
+ mov r0, r4, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [lr]
+ add r4, r4, #1
+ cmp r4, #3
+ blt _03804C68
+ mov ip, #0
+ sub lr, r1, #1
+ ldr r3, _03804D0C ;@ =0x040001C0
+ ldr r0, _03804D10 ;@ =0x040001C2
+ b _03804CC0
+_03804CA4:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804CA4
+ ldrb r1, [r2, ip]
+ and r1, r1, #255 ;@ 0xff
+ strh r1, [r0]
+ add ip, ip, #1
+_03804CC0:
+ cmp ip, lr
+ blt _03804CA4
+ ldr r1, _03804D0C ;@ =0x040001C0
+_03804CCC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804CCC
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ ldrb r0, [r2, ip]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804D0C ;@ =0x040001C0
+_03804CF4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804CF4
+_03804D00:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804D0C: .word 0x040001C0
+_03804D10: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadDataBytesAtHigherSpeed
+NVRAM_ReadDataBytesAtHigherSpeed: ;@ 0x03804D14
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804E3C
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804D48:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804D48
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #11
+ ldr ip, _03804E4C ;@ =0x040001C2
+ strh r0, [ip]
+ mov lr, #0
+ add r3, sp, #0
+ ldr r4, _03804E48 ;@ =0x040001C0
+_03804D74:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804D74
+ mov r0, lr, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [ip]
+ add lr, lr, #1
+ cmp lr, #3
+ blt _03804D74
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804DA0:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804DA0
+ mov r3, #0
+ ldr r0, _03804E4C ;@ =0x040001C2
+ strh r3, [r0]
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804DBC:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804DBC
+ mov r0, #0
+ ldr ip, _03804E48 ;@ =0x040001C0
+ mov r4, r0
+ ldr lr, _03804E4C ;@ =0x040001C2
+ sub r1, r1, #1
+ b _03804E00
+_03804DE0:
+ strh r4, [lr]
+_03804DE4:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804DE4
+ ldrh r3, [lr]
+ and r3, r3, #255 ;@ 0xff
+ strb r3, [r2, r0]
+ add r0, r0, #1
+_03804E00:
+ cmp r0, r1
+ bcc _03804DE0
+ mov r1, #33024 ;@ 0x8100
+ ldr ip, _03804E48 ;@ =0x040001C0
+ strh r1, [ip]
+ mov r3, #0
+ ldr r1, _03804E4C ;@ =0x040001C2
+ strh r3, [r1]
+_03804E20:
+ ldrh r1, [ip]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804E20
+ ldr r1, _03804E4C ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r2, r0]
+_03804E3C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804E48: .word 0x040001C0
+_03804E4C: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadDataBytes
+NVRAM_ReadDataBytes: ;@ 0x03804E50
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804F5C
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804F68 ;@ =0x040001C0
+_03804E84:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804E84
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #3
+ ldr ip, _03804F6C ;@ =0x040001C2
+ strh r0, [ip]
+ mov lr, #0
+ add r3, sp, #0
+ ldr r4, _03804F68 ;@ =0x040001C0
+_03804EB0:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804EB0
+ mov r0, lr, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [ip]
+ add lr, lr, #1
+ cmp lr, #3
+ blt _03804EB0
+ ldr r3, _03804F68 ;@ =0x040001C0
+_03804EDC:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804EDC
+ mov r0, #0
+ ldr ip, _03804F68 ;@ =0x040001C0
+ mov r4, r0
+ ldr lr, _03804F6C ;@ =0x040001C2
+ sub r1, r1, #1
+ b _03804F20
+_03804F00:
+ strh r4, [lr]
+_03804F04:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804F04
+ ldrh r3, [lr]
+ and r3, r3, #255 ;@ 0xff
+ strb r3, [r2, r0]
+ add r0, r0, #1
+_03804F20:
+ cmp r0, r1
+ bcc _03804F00
+ mov r1, #33024 ;@ 0x8100
+ ldr ip, _03804F68 ;@ =0x040001C0
+ strh r1, [ip]
+ mov r3, #0
+ ldr r1, _03804F6C ;@ =0x040001C2
+ strh r3, [r1]
+_03804F40:
+ ldrh r1, [ip]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F40
+ ldr r1, _03804F6C ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r2, r0]
+_03804F5C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804F68: .word 0x040001C0
+_03804F6C: .word 0x040001C2
+
+ arm_func_start NVRAM_ReadStatusRegister
+NVRAM_ReadStatusRegister: ;@ 0x03804F70
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804F74:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F74
+ mov r1, #35072 ;@ 0x8900
+ strh r1, [r2]
+ mov r2, #5
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804F98:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F98
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ mov r2, #0
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804FBC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804FBC
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0]
+ bx lr
+_03804FDC: .word 0x040001C0
+_03804FE0: .word 0x040001C2
+
+ arm_func_start NVRAM_WriteDisable
+NVRAM_WriteDisable: ;@ 0x03804FE4
+ ldr r1, _0380501C ;@ =0x040001C0
+_03804FE8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804FE8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #4
+ ldr r0, _03805020 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380501C ;@ =0x040001C0
+_0380500C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380500C
+ bx lr
+_0380501C: .word 0x040001C0
+_03805020: .word 0x040001C2
+
+ arm_func_start NVRAM_WriteEnable
+NVRAM_WriteEnable: ;@ 0x03805024
+ ldr r1, _0380505C ;@ =0x040001C0
+_03805028:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03805028
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #6
+ ldr r0, _03805060 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380505C ;@ =0x040001C0
+_0380504C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380504C
+ bx lr
+_0380505C: .word 0x040001C0
+_03805060: .word 0x040001C2