Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .extern entry
- .section .init
- .globl _start
- _start:
- ldr pc, reset_handler
- ldr pc, undefined_handler
- ldr pc, swi_handler
- ldr pc, pref_abort_handler
- ldr pc, data_abort_handler
- ldr pc, dummy_handler
- ldr pc, irq_handler
- ldr pc, fiq_handler
- reset_handler: .word reset
- undefined_handler: .word dummy
- swi_handler: .word dummy
- pref_abort_handler: .word dummy
- data_abort_handler: .word dummy
- dummy_handler: .word dummy
- irq_handler: .word kIrq
- fiq_handler: .word dummy
- reset:
- mov r0, $0x0000
- mov r1, $0x8000
- ldmia r1!, {r2,r3,r4,r5,r6,r7,r8,r9}
- stmia r0!, {r2,r3,r4,r5,r6,r7,r8,r9}
- ldmia r1!, {r2,r3,r4,r5,r6,r7,r8,r9}
- stmia r0!, {r2,r3,r4,r5,r6,r7,r8,r9}
- mov sp, $0x8000
- @ set stack in irq mode
- mrs r0, cpsr
- bic r0, $0b11111111
- orr r0, $0b11010010
- msr cpsr, r0
- mov sp, $0x4000
- @ come back to svc mode
- mrs r0, cpsr
- bic r0, $0b11111111
- orr r0, $0b11010011
- msr cpsr, r0
- @ fill .bss section with zeros
- ldr r0, =_bss_start
- ldr r1, =_bss_end
- mov r2, $0
- loop:
- cmp r0, r1
- strlo r2, [r0], $4
- blo loop
- bl entry
- dummy:
- b dummy
- kIrq:
- push {r0-r7, lr}
- ldr r0, =0x20200040
- ldr r1, =0x8068000 @ clear event statuses
- str r1, [r0]
- bl kIrqHandler
- pop {r0-r7, lr}
- subs pc, lr, $4
- .section .text
- .globl irqEnable
- irqEnable:
- mrs r0, cpsr
- bic r0, $0b10000000
- msr cpsr, r0
- mov pc, lr
- .globl irqDisable
- irqDisable:
- mrs r0, cpsr
- mvn r2, $0b10000000
- orr r2, r2, r0
- msr cpsr, r0
- mov pc, lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement