📄 selfboot.asm
字号:
.mmregs
.def _c_int00
.text
_c_int00:
;初始化DSP
SSBX INTM ;close interrupt
RSBX CPL
NOP
NOP
NOP
NOP
LD #0,DP ;reset DP
ORM 2b00h,ST1 ;set XF,OVM,SXM
ORM 20h,PMST ;set OVLY
ANDM 0fff7h,PMST ;set DROM=0:make *(fffeh:ffffh) accessible
STM 110h,SP ;set SP
;寻找boot表地址(0ffffh)
STM 0ffffh,AR1
NOP
NOP
LDU *AR1,A
NOP
NOP
STLM A,AR1
NOP
NOP
;判断16为Boot表标志
LD *AR1+,A
SUB #0x10aa,0,A,A
BC b_end,ANEQ
;设置寄存器:SWWSR,BSCR
LD *AR1+,A
STLM A,SWWSR
LD *AR1+,A
STLM A,BSCR
;将入口地址XPC保存于*(61h),将PC保存于*(62h)
LD *AR1+,A
STL A,61h
LD *AR1+,A
STL A,62h
;将每一段大小保存于BRC
loop_SEC:
LD *AR1+,A
BCD b_entry,AEQ
SUB #1h,0,A,B
STLM B,BRC
;保存每一段目的地址
;A = XPC << 16 + PC
LD *AR1+,A
STL A,66h
LD *AR1+,A
ADD 66h,16,A,A
;引导程序
RPTB b_run+1
LD *AR1+,B
RPT #0ah
NOP
WRITA BL ;save data(in BL) in *A
b_run: ADD #1h,0,A,A
B loop_SEC
b_entry:LDU 62h,A
ADD 61h,16,A,A
;set options:project menu,option... submenu,compiler tab,Advanced selection,Use Farcalls(-mf) checkbox
BACC A
b_end: B b_end
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -