Vhex-kernel/src/kernel/drivers/vbr/utils.s

36 lines
616 B
ArmAsm

.global _vbr_get
.global _vbr_set
.type _vbr_set, @function
.type _vbr_get, @function
.text
.align 2
_vbr_get:
stc vbr, r0 ! Get VBR register.
rts ! Exit
nop ! (db) nop
_vbr_set:
! Block interrupt
stc sr, r1 ! Get SR register.
mov r1, r3 ! Save current SR data.
mov.l .bl_mask, r2 ! Get SR.BL mask.
or r2, r1 ! Set SR.BL to 1.
ldc r1, sr ! Update SR register.
! Get / Changle VBR
stc vbr, r0 ! Get VBR register.
ldc r4, vbr ! Update VBR register.
! Unblock interrupt.
ldc r3, sr ! Restore SR register.
! Exit
rts ! Exit
nop ! (db) nop
.align 4
.bl_mask: .long (1 << 28)
.end