📄 cpu_a.i
字号:
# 1 "../832/cpu_a.s"
# 1 "../include/bsp.h" 1
# 20 "../832/cpu_a.s" 2
# 1 "../include/cpu.h" 1
# 21 "../832/cpu_a.s" 2
.extern _OSTCBCur,4
.extern _OSTCBHighRdy,4
.extern _debval1,4
.extern _debval2,4
.extern _debval3,4
.extern _debval4,4
.text
.align 4
.globl _IRQTrap
_IRQTrap:
rd %psr, %l0
or %l0, 0x0F00, %l0
wr %l0, %g0, %psr
sub %sp, 104, %sp
mov %wim, %l4
srl %l4, %l0, %l5
cmp %l5, 1
bne CPU_window_fine
nop
mov %g1, %l6
srl %l4, 1, %g1
tst %g1
bg CPU_good_wim
nop
not %g1
mov %g1, %wim
nop
nop
nop
mov %wim, %g1
inc %g1
srl %g1, 1, %g1
mov %g0, %wim
nop
nop
nop
CPU_good_wim:
save
mov %g1, %wim
std %l0, [%sp + 0 * 4]
std %l2, [%sp + 2 * 4]
std %l4, [%sp + 4 * 4]
std %l6, [%sp + 6 * 4]
std %i0, [%sp + 8 * 4]
std %i2, [%sp + 10 * 4]
std %i4, [%sp + 12 * 4]
std %i6, [%sp + 14 * 4]
restore
mov %l6, %g1
CPU_window_fine:
mov %tbr, %l3
and %l3, 0x0FF0, %l3
srl %l3, 4, %l3
sub %l3, 16, %o0
mov 1,%l3
sll %l3,%o0,%l3
set (0x00000000 ), %l4
add %l4, 0x0C, %l4
sta %l3, [%l4] 7
set (0x00000000 ), %l4
add %l4, 0x14, %l4
set (0x00100000 >>16), %l3
sta %l3, [%l4] 7
lda [%l4] 7 , %l3
andn %l0, 0x0F00, %o1
or %o1, 0x0020, %o1
wr %o1, %g0, %psr
nop
nop
call _CPUDispatchIRQ
nop
or %l0, 0x0F00, %o1
wr %o1, %g0, %psr
cmp %o0, 0
be CPU_NoTaskSwitch
nop
call _OSCtxSw
nop
CPU_NoTaskSwitch:
andn %l0, 0x0F20, %o1
wr %o1, %g0, %psr
or %g0, 0x1, %l3
or %g0, 0x10, %l4
sta %l3, [%l4] 1
jmpl %l1, %g0
rett %l2
.globl _OSDisableInt
_OSDisableInt:
rd %psr, %o0
or %o0, 0x0F00, %o0
wr %o0, %g0, %psr
retl
nop
.globl _OSEnableInt
_OSEnableInt:
rd %psr, %o0
andn %o0, 0x0F00, %o0
wr %o0, %g0, %psr
retl
nop
.globl _IRQSetIntLevel
_IRQSetIntLevel:
sll %o0, 8, %o1
rd %psr, %o0
andn %o0, 0x0F00, %o2
or %o1, %02, %o2
wr %o2, %g0, %psr
and %o0, 0x0F00, %o0
retl
srl %o0, 8, %o0
.globl IRQIntEnable
IRQIntEnable:
set (0x00000000 ), %o4
add %o4, 0x14, %o3
add %o4, 0x0C, %o4
srl %o1, 4, %o1
sub %o1, 16, %o1
mov 1, %o2
sll %o2, %o1, %o2
sta %o2, [%o4] 7
set (0x00100000 >>16), %o1
sta %o1, [%o3] 7
lda [%o4] 7 , %o1
nop
nop
lda [%o3] 7 , %o1
nop
nop
retl
nop
.globl _OSCtxSw
_OSCtxSw:
sub %sp, 144, %sp
std %o6, [%sp + 30 * 4]
std %o4, [%sp + 28 * 4]
std %o2, [%sp + 26 * 4]
std %o0, [%sp + 24 * 4]
std %g6, [%sp + 22 * 4]
std %g4, [%sp + 20 * 4]
std %g2, [%sp + 18 * 4]
st %g1, [%sp + 17 * 4]
mov %wim, %g2
mov %psr, %g3
mov %tbr, %g4
mov %y, %g5
std %g2, [%sp + 34 * 4]
std %g4, [%sp + 32 * 4]
sethi %hi(_OSTCBCur), %g1
ld [%lo(_OSTCBCur) + %g1], %g3
st %sp, [%g3]
mov %g2, %g1
sll %g1, 8, %g1
or %g1, %g2, %g1
mov 1, %g3
mov %psr, %g4
sll %g3, %g4, %g3
mov %g0, %wim
save_current_registers:
std %i6, [%sp + 14 * 4]
std %i4, [%sp + 12 * 4]
std %i2, [%sp + 10 * 4]
std %i0, [%sp + 8 * 4]
std %l6, [%sp + 6 * 4]
std %l4, [%sp + 4 * 4]
std %l2, [%sp + 2 * 4]
std %l0, [%sp + 0 * 4]
restore
sll %g3, 1, %g3
andcc %g1, %g3, %g0
be save_current_registers
nop
CPU_all_windows_saved:
save
mov %g2, %wim
.globl _OSStartHighRdy
_OSStartHighRdy:
sethi %hi(_OSTCBHighRdy), %l0
ld [%lo(_OSTCBHighRdy) + %l0], %l1
sethi %hi(_OSTCBCur), %l0
st %l1, [%lo(_OSTCBCur) + %l0]
ld [%l1], %l1
mov %l1, %sp
nop
nop
ld [%sp + 31 * 4], %o7
ldd [%sp + 28 * 4], %o4
ldd [%sp + 26 * 4], %o2
ldd [%sp + 24 * 4], %o0
ldd [%sp + 22 * 4], %g6
ldd [%sp + 20 * 4], %g4
ldd [%sp + 18 * 4], %g2
ld [%sp + 17 * 4], %g1
ldd [%sp + 14 * 4], %i6
ldd [%sp + 12 * 4], %i4
ldd [%sp + 10 * 4], %i2
ldd [%sp + 8 * 4], %i0
ldd [%sp + 6 * 4], %l6
ldd [%sp + 4 * 4], %l4
ldd [%sp + 2 * 4], %l2
ldd [%sp + 32 * 4], %l0
mov %l0, %tbr
mov %l1, %y
sethi %hi(preserveg1), %l0
st %g1, [%lo(preserveg1) + %l0]
rd %psr, %g1
and %g1, 0xFFFFF0BF, %g1
ld [%sp + 35 * 4], %l1
and %l1, 0x0FC0, %l1
or %l1, %g1, %g1
and %g1, 0x0007, %l0
add %l0, 1, %l0
and %l0, 0x0007, %l0
mov 1, %l1
sll %l1, %l0, %l1
mov %l1, %wim
ldd [%sp], %l0
add %sp, 144, %sp
mov %g1, %psr
sethi %hi(preserveg1), %g1
retl
ld [%lo(preserveg1) + %g1], %g1
.globl _CPUDebugWriteMem
.reserve debugwritearea, 0x400, "bss", 8
_CPUDebugWriteMem:
sethi %hi(debugptr), %o1
ld [%lo(debugptr) + %o1], %o2
stb %o0,[%o2]
inc %o2
retl
st %o2,[%lo(debugptr) + %o1]
.data
curIRQlevel:
.word -1
preserveg1:
.word 0
debugptr:
.word debugwritearea
dplace:
.word debugwritearea
.text
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -