📄 basiccrt.s
字号:
if !cc jump go_tex; // 傕偟僨傿僗僷僢僠嬛巭側傜椺奜僠僃僢僋偵
LOAD( p0, __kernel_schedtsk) // 僨傿僗僷僢僠壜擻偺応崌
r1 = [p1]; // runtsk
r0 = [p0]; // schedtsk
cc = r0 == r1; // schedtsk == runtsk丂偐丠
if cc jump go_tex(bp); // 傕偟 schedtsk == runtsk丂側傜偽丄僞僗僋椺奜偵峴偔
// 偦偆偱側偗傟偽僨傿僗僷僢僠偡傞
sp += -12; // 僟儈乕堷悢椞堟妋曐 (C)
call __kernel_dispatch; // 儗僢僣僑乕
sp += 12; // 僟儈乕堷悢椞堟奐曻 (C)
jump return_as_task; // 僞僗僋偵栠傞
go_tex:
p1 = [p1]; // runtsk
r0 = [p1 + TCB_texptn]; // runtsk->texptrn傪庢摼 ( UINT )
cc = r0 == 0; // texptn偑0側傜1
r0 = [p1 + TCB_enatex]; // runtsk->enatex傪庢摼
LOAD( r1, TCB_enatex_mask)
r1 = r0 & r1; // 僞僗僋椺奜偑嫋壜偝傟偰偄側偗傟偽1
cc |= az; // 椺奜偑嫋壜偝傟偰偄側偄偐丄texptn偑0側傜偽懄婣傞
if cc jump return_as_task(bp); // 嫋壜偝傟偰偄側偗傟偽僞僗僋偵栠傞
sp += -12; // 僟儈乕堷悢椞堟妋曐 (D)
call __kernel_call_texrtn; // 忦審偑偦傠偭偨偺偱僞僗僋椺奜張棟傪峴偆丅
sp += 12; // 僟儈乕堷悢椞堟奐曻 (D)
return_as_task: // 僞僗僋僐儞僥僉僗僩忬懺偱偺栠傝
r0 = [sp++]; // 戅旔偟偰偄偨儘僢僋忬懺
reti = [sp++]; // 栠傝斣抧傪暅婣丅埲屻rti傑偱妱崬傒嬛巭
#ifdef UNMANAGED_INT
cli r1; // 尰嵼偺儘僢僋忬懺傪庢傝弌偡
r2 = UNMANAGED_INT(z);
r1 = r1 & r2; // 幚峴拞偺儅僗僋偐傜娗棟奜妱傝崬傒偺忬懺傪拪弌
r2 = ~ r2; // UNMANAGED_INT偺媡儅僗僋
r0 = r0 & r2; // 戅旔拞偺儘僢僋忬懺偐傜娗棟奜妱傝崬傒儅僗僋傪僋儕傾
r0 = r0 | r1; // 戅旔偟偰偄偨儘僢僋忬懺傪傾僢僾僨乕僩
#endif
sti r0; // CPU儘僢僋傪夝彍(B)(F)
get_back: // 旕僞僗僋僐儞僥僉僗僩忬懺偱偺栠傝
restore_regs; // 戅旔偟偨儗僕僗僞傪慡偰栠偡
p0=[sp++];
rti; // 僞僗僋偵栠傞
interrupt_dispatcher.end:
/*
* 椺奜張棟偺僄儞僩儕
*
* 妱傝崬傒偲偺僱僗僩娭學傪挷傋丄僱僗僩偟偰偄側偄側傜僀儀儞僩僗僞僢僋傪僙僢僩偡傞丅
* p0 : 儐乕僓乕掕媊偺椺奜僴儞僪儔偺傾僪儗僗
* p1 : IPEND偺傾僪儗僗
* p2 : reqflg偺傾僪儗僗
* r6 : 僞僗僋僗僞僢僋
* r7 : ASTAT偺戅旔忣曬
*
*/
expEntry:
[--sp] = p0;
save_regs; // 儐乕僓乕儗僕僗僞偺戅旔
LOAD( p0, __kernel_exc_vector) // 儐乕僓乕掕媊椺奜僴儞僪儔偺奿擺傾僪儗僗
LOAD( p1, IPEND ) // IPEND儗僕僗僞偺傾僪儗僗
l0 = r0;
l1 = r0;
l2 = r0;
l3 = r0;
lc0 = r0; // 惈擻掅壓梷惂偺偨傔偵LCx傪僋儕傾
lc1 = r0;
p0 = [p0]; // p0 = exc_vector
r0 = [p1]; // IPEND偺抣傪庢摼
r1 = 0x7fef; //
r0 = r0 & r1; // IVG15偲GID埲奜傪挷傋傞. r0.H偼昁偢0
r0.L = ones r0; // 張棟拞偺僀儀儞僩偺悢傪悢偊傞
r0 += -1; // 僀儀儞僩偺悢-1丅僱僗僩偟偰偄側偗傟偽0偵側傞丅
cc = r0 == 0; // 僱僗僩偟偰側偗傟偽恀
if !cc jump call_exception; // 傕偟僱僗僩偟偰偄傟偽僴儞僪儔傪屇傇
// 僱僗僩偟偰偄側偄僀儀儞僩側傜丄僗僞僢僋傪愗傝懼偊傞
r6 = sp; // 僞僗僋僗僞僢僋億僀儞僞傪戅旔
LOAD( r0, ldf_stack_end) // 僀儀儞僩僗僞僢僋億僀儞僞傪愝掕
sp = r0;
call_exception:
r7 = astat; // cc偵偼僱僗僩忣曬偑擖偭偰偄傞丅偦傟傪戅旔
r0 = p1; // 戞堦堷悢偼IPEND偺傾僪儗僗
nop;
nop;
sp += -12; // 僟儈乕堷悢椞堟妋曐 (E)
call (p0); // C尵岅偱彂偐傟偨椺奜僴儞僪儔傪屇傇
sp += 12; // 僟儈乕堷悢椞堟奐曻 (E)
astat = r7; // cc傪暅婣
if !cc jump get_back_x; // 傕偟僱僗僩偟偰偄傞側傜偽丄偙偺傑傑婣傞
// 偙偙偱偼僀儀儞僩偼僱僗僩偟偰偄側偄
sp = r6; // 僗僞僢僋傪僞僗僋僗僞僢僋偵愝掕
LOAD( p2, __kernel_reqflg )
r0 = [p2]; // reqflg偺抣傪庢摼
cc = r0; // 僨傿僗僷僢僠偐僞僗僋椺奜偺梫媮偼弌偰偄傞偐
if !cc jump get_back_x; // 弌偰偄側偄側傜偽妱傝崬傑傟偨僞僗僋偵栠傞
// 僐儞僥僉僗僩愗傝懼偊嶌嬈奐巒
r0 = 0; //
[p2] = r0; // reqflg傪僋儕傾偡傞.
r0 = retx; // 僞僗僋偺栠傝斣抧傪庢傝弌偡
r1 = 1;
r0 = r1 | r0; // 僙儖僼丒僱僗僩偱偁傞偲婾憰偡傞
[--sp] = r0; // 栠傝斣抧傪僗僞僢僋偵偮傓
LOAD( p0, task_context)
cli r0; // 尰嵼偺CPU儘僢僋忬懺傪庢摼
[--sp] = r0; // 儘僢僋忬懺傪戅旔
r1 = 0xC01F(z); // 僞僗僋僐儞僥僉僗僩偼偼CPU儘僢僋忬懺偱幚峴偡傞
#ifdef UNMANAGED_INT
r2 = UNMANAGED_INT(z);
r0 = r0 & r2; // 娗棟奜妱傝崬傒偺儅僗僋忬懺傪拪弌
r1 = r0 | r1; // 僞僗僋僐儞僥僉僗僩偼CPU儘僢僋忬懺偱幚峴偡傞
#endif
sti r1; // CPU儘僢僋 (F)
retx = p0; // 儔儀儖"task_context"傪椺奜偐傜偺栠傝斣抧偵偡傞
csync;
rtx; // 椺奜偐傜栠傞丅僐儞僥僉僗僩偼僞僗僋偵側傞
get_back_x:
restore_regs; // 戅旔偟偨儗僕僗僞傪慡偰栠偡
p0=[sp++];
rtx;
expEntry.end:
// 僀儀儞僩僴儞僪儔偺僄儞僩儕乕僐乕僪孮丅
// EVT偺僄儞僩儕偵偼懳墳偡傞埲壓偺僐乕僪偺儔儀儖偑奿擺偝傟傞丅
// 偦傟偧傟偺僐乕僪偼僀儀儞僩拞偵傪p0偵奿擺偟偨屻丄
// interrupt_dispatcher偵僕儍儞僾偡傞
// evtvector偼儐乕僓乕僴儞僪儔傊偺億僀儞僞偺攝楍
ivHWEntry:
[--sp] = p0;
p0 = 5;
jump interrupt_dispatcher;
ivHWEntry.end:
ivTMREntry:
[--sp] = p0;
p0 = 6;
jump interrupt_dispatcher;
ivTMREntry.end:
ivg7Entry:
[--sp] = p0;
p0 = 7;
jump interrupt_dispatcher;
ivg7Entry.end:
ivg8Entry:
[--sp] = p0;
p0 = 8;
jump interrupt_dispatcher;
ivg8Entry.end:
ivg9Entry:
[--sp] = p0;
p0 = 9;
jump interrupt_dispatcher;
ivg9Entry.end:
ivg10Entry:
[--sp] = p0;
p0 = 10;
jump interrupt_dispatcher;
ivg10Entry.end:
ivg11Entry:
[--sp] = p0;
p0 = 11;
jump interrupt_dispatcher;
ivg11Entry.end:
ivg12Entry:
[--sp] = p0;
p0 = 12;
jump interrupt_dispatcher;
ivg12Entry.end:
ivg13Entry:
[--sp] = p0;
p0 = 13;
jump interrupt_dispatcher;
ivg13Entry.end:
ivg14Entry: // dispatch()偺妱傝崬傒懸偪晹
#if !defined(USE_TIC_CORE) && !defined(USE_HW_ERROR)
csync; // 僐傾僞僀儅乕偱僥傿僢僋傪崗傓偲偒偵偼idle柦椷傪巊偊側偄丅
idle; // 僀儀儞僩懸偪
csync;
#endif
[--sp] = reti; // 妱崬傒僱僗僩嫋壜
r1 = 0xffff(z); // CPU 傾儞儘僢僋梡僷僞乕儞
#ifdef UNMANAGED_INT
cli r0; // 尰嵼偺儅僗僋傪庢傝弌偡
r2 = UNMANAGED_INT(z);
r0 = r0 & r2; // 娗棟奜妱傝崬傒偺傒庢傝弌偡
r2 = ~r2; // 媡儅僗僋
r1 = r1 & r2; //
r1 = r1 | r0; // 娗棟奜妱傝崬傒傪峫椂偟偨儅僗僋
#endif
sti r1; // CPU 傾儞儘僢僋
r1 = 0xC01F(z); // CPU 儘僢僋梡僷僞乕儞
#ifdef UNMANAGED_INT
cli r0; // 尰嵼偺儅僗僋傪庢傝弌偡
r2 = UNMANAGED_INT(z);
r0 = r0 & r2; // 娗棟奜妱傝崬傒偺傒庢傝弌偡
r1 = r1 | r0; // 娗棟奜妱傝崬傒傪峫椂偟偨儅僗僋
#endif
sti r1;
reti=[sp++]; // 妱崬傒僱僗僩嬛巭
rti;
ivg14Entry.end:
nmiEntry:
jump nmiEntry;
rtn;
nmiEntry.end:
#ifdef INIT_C_PLUS_PLUS
.section ctor;
.align 4;
___ctor_table:
.byte4=0;
.global ___ctor_table;
.type ___ctor_table,STT_OBJECT;
.extern ___ctorloop;
.section .gdt;
.align 4;
___eh_gdt:
.global ___eh_gdt;
.byte4=0;
.type ___eh_gdt,STT_OBJECT;
.section .frt;
.align 4;
___eh_frt:
.global ___eh_frt;
.byte4=0;
.type ___eh_frt,STT_OBJECT;
#endif /* INIT_C_PLUS_PLUS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -