📄 pacint.s
字号:
/* ------------------------------------------------------------------------ */
/* Hyper Operating System V4 μITRON4.0慌屯 Real-Time OS */
/* プロセッサ藐据步コンポ〖ネント (泣惟 SH4脱) */
/* 充り哈みハンドラ */
/* */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/* http://sourceforge.jp/projects/hos/ */
/* ------------------------------------------------------------------------ */
.global __exception_handler
/* 办忍毋嘲ハンドラ */
.text
.align 2
__exception_handler:
mov.l expevt_adr,r4
stc spc,r5
stc ssr,r6
mov.l exception_hdr_adr,r0
jsr @r0
mov.l @r4,r4
.align 2
expevt_adr:
.long 0xff000024 /* 办忍毋嘲レジスタ */
exception_hdr_adr:
.long _exception_hdr
/* TLBミス毋嘲ハンドラ */
.text
.org __exception_handler+0x300
__tlb_mis_handler:
bra __exception_handler
nop
/* 充り哈み毋嘲ハンドラ */
.text
.org __exception_handler+0x500
__interrupt_handler:
stc.l ssr,@-r15
stc.l spc,@-r15
mov.l r4,@-r15
/* 充り哈み戎规 = ( 充り哈み祸据レジスタ >> 5 ) - 16 */
mov.l intevt_adr,r4
mov.l @r4,r4
shlr2 r4
shlr2 r4
shlr r4
add #-16,r4
/* レジスタ锣闰(r0-r1) */
mov.l r0,@-r15
mov.l r1,@-r15
/* 碰澈充り哈みのマスクを瘦赂 */
mov.l int_pri_tbl_adr,r0
mov.b @(r0,r4),r0
shll2 r0
shll2 r0
mov.l imsk_addr,r1
mov.l r0,@r1
/* レジスタ瘦赂(r2-r7,mach,macl,pr) */
mov.l r2,@-r15
mov.l r3,@-r15
mov.l r5,@-r15
mov.l r6,@-r15
mov.l r7,@-r15
sts.l mach,@-r15
sts.l macl,@-r15
sts.l pr,@-r15
/* 驴脚充り哈み冉年 */
mov.l int_cnt_addr,r1
mov.l @r1,r0
cmp/eq #0,r0
bf/s int_multi
add #1,r0
/* 帽迫充り哈み箕 */
mov.l r0,@r1 /* 充り哈みネスト猛を肋年 */
/* スタック掐れ仑え */
mov.l save_sp_addr,r0
mov.l r15,@r0 /* 附哼のスタックを锣闰 */
mov.l int_sp_addr,r0
mov.l @r0,r15 /* 充り哈み脱スタックを肋年 */
mov.l r4,@-r15 /* 充り哈み戎规を锣闰 */
/* 充り哈み倡幌借妄钙び叫し */
mov.l sta_int_addr,r1
jsr @r1
nop
/* 充り哈み悸乖借妄钙び叫し */
mov.l exe_int_addr,r1
jsr @r1
mov.l @r15+,r4 /* 充り哈み戎规を苞眶とする */
/* スタックの牲耽 */
mov.l save_sp_addr,r0
mov.l @r0,r15
/* 充り哈みカウンタのクリア */
mov.l int_cnt_addr,r1
xor r0,r0
mov.l r0,@r1
/* ベ〖スマスク猛に提す */
mov.l imsk_base_addr,r0
mov.l @r0,r1
mov.l imsk_addr,r0
mov.l r1,@r0
/* 充り哈み姜位借妄钙び叫し */
mov.l end_int_addr,r1
jsr @r1
nop
/* レジスタ牲耽 */
lds.l @r15+,pr
lds.l @r15+,macl
lds.l @r15+,mach
mov.l @r15+,r7
mov.l @r15+,r6
mov.l @r15+,r5
mov.l @r15+,r3
mov.l @r15+,r2
mov.l @r15+,r1
mov.l @r15+,r0
mov.l @r15+,r4
ldc.l @r15+,spc
ldc.l @r15+,ssr
rte
nop
/* 驴脚充り哈み借妄 */
int_multi:
mov.l r0,@r1 /* 充り哈みネスト猛を肋年 */
/* 充り哈み悸乖借妄钙び叫し */
mov.l exe_int_addr,r1
jsr @r1 /* 充り哈み戎规を苞眶とする */
nop
/* 充り哈みカウンタの负换 */
mov.l int_cnt_addr,r1
mov.l @r1,r0
add #-1,r0
mov.l r0,@r1
/* レジスタ牲耽 */
lds.l @r15+,pr
lds.l @r15+,macl
lds.l @r15+,mach
mov.l @r15+,r7
mov.l @r15+,r6
mov.l @r15+,r5
mov.l @r15+,r3
mov.l @r15+,r2
mov.l @r15+,r1
mov.l @r15+,r0
mov.l @r15+,r4
ldc.l @r15+,spc
ldc.l @r15+,ssr
rte
nop
.align 2
imsk_addr:
.long _hospac_sh_imsk /* 充り哈みマスク */
imsk_base_addr:
.long _hospac_sh_imsk_base /* 充り哈みマスクベ〖ス猛 */
int_cnt_addr:
.long _kernel_int_cnt /* 充り哈みネスト搀眶 */
save_sp_addr:
.long _kernel_int_ssp /* 充り哈み脱スタックポインタ锣闰 */
int_sp_addr:
.long _kernel_int_sp /* 充り哈み脱スタックポインタ */
sta_int_addr:
.long _kernel_sta_int /* 充り哈み倡幌借妄 */
end_int_addr:
.long _kernel_end_int /* 充り哈み姜位借妄 */
exe_int_addr:
.long _kernel_exe_int /* 充り哈み悸乖借妄 */
int_pri_tbl_adr:
.long _int_pri_tbl /* UB int_pri_tbl[] */
/* 充り哈み庭黎界疤のテ〖ブル */
intevt_adr:
.long 0xff000028 /* 充り哈み祸据レジスタ */
.end
/* ------------------------------------------------------------------------ */
/* Copyright (C) 1998-2002 by Project HOS */
/* ------------------------------------------------------------------------ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -