213 lines
2.9 KiB
ArmAsm
213 lines
2.9 KiB
ArmAsm
|
.global _start
|
||
|
.global start
|
||
|
|
||
|
.global udelay
|
||
|
|
||
|
.global RegWrite
|
||
|
.global RegRead
|
||
|
|
||
|
.global DRAMWrite
|
||
|
.global DRAMRead
|
||
|
|
||
|
.global DRAMCTRLRead
|
||
|
.global DRAMCTRLWrite
|
||
|
|
||
|
.extern main
|
||
|
.extern Syscall
|
||
|
.extern SWI
|
||
|
.extern PrefetchAbort
|
||
|
.extern DataAbort
|
||
|
.extern IRQHandler
|
||
|
.extern FIQHandler
|
||
|
.arm
|
||
|
|
||
|
.section ".init"
|
||
|
_start:
|
||
|
ldr pc, =start
|
||
|
ldr pc, =Syscall
|
||
|
ldr pc, =SWI
|
||
|
ldr pc, =PrefetchAbort
|
||
|
ldr pc, =DataAbort
|
||
|
ldr pc, =0
|
||
|
ldr pc, =IRQHandler
|
||
|
movs pc, lr
|
||
|
|
||
|
start:
|
||
|
mov r0, #0
|
||
|
ldr r1, =0xd80003c
|
||
|
str r0, [r1]
|
||
|
|
||
|
mov r0, #0
|
||
|
mcr p15, 0, r0,c7,c5
|
||
|
mcr p15, 0, r0,c7,c6
|
||
|
|
||
|
mrc p15, 0, r0,c1,c0
|
||
|
bic r0, r0, #4
|
||
|
bic r0, r0, #0x1000
|
||
|
mcr p15, 0, r0,c1,c0
|
||
|
|
||
|
ldr r0,=__bss_start
|
||
|
ldr r1,=__bss_end
|
||
|
mov r2,#0
|
||
|
mov r3,#4
|
||
|
clearbss:
|
||
|
cmp r0, r1
|
||
|
bcs clearbss_end
|
||
|
str r2, [r0], r3
|
||
|
b clearbss
|
||
|
|
||
|
clearbss_end:
|
||
|
|
||
|
msr CPSR_c, #211
|
||
|
ldr sp, =0xFFFF7E60
|
||
|
msr CPSR_c, #210
|
||
|
ldr sp, =0xFFFF7E60
|
||
|
msr CPSR_c, #209
|
||
|
ldr sp, =0xFFFF7E60
|
||
|
msr CPSR_c, #215
|
||
|
ldr sp, =0xFFFF7E60
|
||
|
msr CPSR_c, #219
|
||
|
ldr sp, =0xFFFF7E60
|
||
|
msr CPSR_c, #31
|
||
|
ldr sp, =0xFFFE4000
|
||
|
|
||
|
#enable IRQs
|
||
|
|
||
|
mrs r1, cpsr
|
||
|
bic r1, r1, #0xC0
|
||
|
msr cpsr_c, r1
|
||
|
|
||
|
mov lr, pc
|
||
|
ldr pc, =main
|
||
|
|
||
|
RegWrite:
|
||
|
ldr r3,=0xd8b4000
|
||
|
lsl r0, r0, #1
|
||
|
add r0, r0, r3
|
||
|
strh r1, [r0]
|
||
|
bx lr
|
||
|
|
||
|
RegRead:
|
||
|
ldr r3,=0xd8b4000
|
||
|
lsl r0, r0, #1
|
||
|
add r0, r0, r3
|
||
|
ldrh r0, [r0]
|
||
|
lsl r0, r0, #0x10
|
||
|
lsr r0, r0, #0x10
|
||
|
bx lr
|
||
|
|
||
|
DRAMWrite:
|
||
|
push {r4,lr}
|
||
|
add r3, r0, #0
|
||
|
add r4, r1, #0
|
||
|
mov r0, #0x3a
|
||
|
add r1, r3, #0
|
||
|
bl RegWrite
|
||
|
|
||
|
mov r0, #0x3a
|
||
|
bl RegRead
|
||
|
|
||
|
mov r0, #0x3b
|
||
|
add r1, r4, #0
|
||
|
bl RegWrite
|
||
|
|
||
|
pop {r4}
|
||
|
pop {r0}
|
||
|
bx r0
|
||
|
|
||
|
DRAMRead:
|
||
|
push {lr}
|
||
|
add r1, r0, #0
|
||
|
mov r0, #0x3a
|
||
|
bl RegWrite
|
||
|
|
||
|
mov r0, #0x3a
|
||
|
bl RegRead
|
||
|
|
||
|
mov r0, #0x3b
|
||
|
bl RegRead
|
||
|
|
||
|
pop {r1}
|
||
|
bx r1
|
||
|
|
||
|
DRAMCTRLWrite:
|
||
|
push {r4,r5,lr}
|
||
|
ldr r4, =0x163
|
||
|
add r3, r0, #0
|
||
|
add r5, r1, #0
|
||
|
add r0, r4, #0
|
||
|
add r1, r3, #0
|
||
|
bl DRAMWrite
|
||
|
|
||
|
add r0, r4, #0
|
||
|
bl DRAMRead
|
||
|
|
||
|
mov r0, #0xb1
|
||
|
add r1, r5, #0
|
||
|
lsl r0, r0, #1
|
||
|
bl DRAMWrite
|
||
|
|
||
|
pop {r4,r5}
|
||
|
pop {r0}
|
||
|
bx r0
|
||
|
|
||
|
DRAMCTRLRead:
|
||
|
push {r4,lr}
|
||
|
ldr r4, =0x163
|
||
|
add r1, r0, #0
|
||
|
add r0, r4, #0
|
||
|
bl DRAMWrite
|
||
|
|
||
|
add r0, r4, #0
|
||
|
bl DRAMRead
|
||
|
|
||
|
ldr r0, =0x162
|
||
|
bl DRAMRead
|
||
|
|
||
|
pop {r4}
|
||
|
pop {r1}
|
||
|
bx r1
|
||
|
|
||
|
udelay:
|
||
|
|
||
|
push {lr}
|
||
|
|
||
|
lsr r3, r0, #2
|
||
|
add r3, r3, r0
|
||
|
lsr r2, r0, #6
|
||
|
|
||
|
add r0, r3, r2
|
||
|
cmp r0, #1
|
||
|
bhi loc_ffff20e8
|
||
|
|
||
|
mov r0, #2
|
||
|
|
||
|
loc_ffff20e8:
|
||
|
ldr r1, =0xd800010
|
||
|
ldr r3, [r1]
|
||
|
add r2, r3, r0
|
||
|
cmp r2, r3
|
||
|
bls loc_ffff211c
|
||
|
|
||
|
loc_ffff20f2:
|
||
|
ldr r3, [r1]
|
||
|
cmp r3, r2
|
||
|
bcc loc_ffff20f2
|
||
|
|
||
|
loc_ffff20f8:
|
||
|
pop {r0}
|
||
|
bx r0
|
||
|
|
||
|
loc_ffff211c:
|
||
|
add r3, r1, #0
|
||
|
|
||
|
loc_ffff211e:
|
||
|
ldr r0, [r3]
|
||
|
cmp r0, #0
|
||
|
blt loc_ffff211e
|
||
|
|
||
|
cmp r0, r2
|
||
|
bcc loc_ffff211e
|
||
|
b loc_ffff20f8
|
||
|
|
||
|
.end
|