📄 cstartup.s31
字号:
; Now when we are ready with our C program we must perform a ;
; system-dependent action. In this case we just stop. ;
; ==========================================================================;
; DO NOT CHANGE THE NEXT LINE OF CSTARTUP IF YOU WANT TO RUN ;
; YOUR SOFTWARE WITH THE HELP OF THE DEBUGGER. ;
; ==========================================================================;
JMP REFFN exit
; ==========================================================================;
; Copy initialized PROMmed code to shadow RAM and clear ;
; uninitialized variables. ;
; ==========================================================================;
EXTERN ?DP0_L00, ?DP1_L00
seg_init
; ==========================================================================;
; Initialize recursive stack RF_STACK ;
; ==========================================================================;
LDA #LOW(SFB(RF_STACK)+2)
STA np:SFB(RF_STACK)+0
LDA #HIGH(SFB(RF_STACK)+2)
STA np:SFB(RF_STACK)+1
; ==========================================================================;
; Zero out Z_UDATA ;
; ==========================================================================;
LDY #SIZEOF(Z_UDATA)
BEQ skip1
LDX #SFB(Z_UDATA)
LDA #0
loop1 STA 0,X
INX
DEY
BNE loop1
skip1
; ==========================================================================;
; Copy Z_CDATA into Z_IDATA ;
; ==========================================================================;
LDY #SIZEOF(Z_CDATA)
BEQ skip2
loop2: LDA NP:SFB(Z_CDATA)-1,Y
STA NP:SFB(Z_IDATA)-1,Y
DEY
BNE loop2
skip2
; ==========================================================================;
; Zero out N_UDATA ;
; ==========================================================================;
LDM #LOW(SFB(N_UDATA)),?DP0_L00
LDM #HIGH(SFB(N_UDATA)),?DP0_L00+1
LDA #0
TAY
LDX #HIGH(SIZEOF(N_UDATA))
BEQ skip3
loop3 STA (?DP0_L00),Y
INY
BNE loop3
INC ZP:?DP0_L00+1
DEX
BNE loop3
skip3
LDX #LOW(SIZEOF(N_UDATA))
BEQ skip4
loop4 STA (?DP0_L00),Y
INY
DEX
BNE loop4
skip4
; ==========================================================================;
; Copy CCSTR into ECSTR ;
; ==========================================================================;
LDM #LOW(SFB(CCSTR)),?DP0_L00
LDM #HIGH(SFB(CCSTR)),?DP0_L00+1
LDM #LOW(SFB(ECSTR)),?DP1_L00
LDM #HIGH(SFB(ECSTR)),?DP1_L00+1
LDX #HIGH(SIZEOF(CCSTR))
BEQ skip5
JSR large_copy_mem
skip5
LDX #LOW(SIZEOF(CCSTR))
BEQ skip6
JSR small_copy_mem
skip6
; ==========================================================================;
; Copy N_CDATA into N_IDATA ;
; ==========================================================================;
LDM #LOW(SFB(N_CDATA)),?DP0_L00
LDM #HIGH(SFB(N_CDATA)),?DP0_L00+1
LDM #LOW(SFB(N_IDATA)),?DP1_L00
LDM #HIGH(SFB(N_IDATA)),?DP1_L00+1
LDX #HIGH(SIZEOF(N_CDATA))
BEQ skip7
JSR large_copy_mem
skip7
LDX #LOW(SIZEOF(N_CDATA))
BEQ return
; fall into small_copy_mem to do final copy
; ==========================================================================;
; Copy memory ;
; ==========================================================================;
small_copy_mem
LDY #0
small_loop
LDA (?DP0_L00),Y
STA (?DP1_L00),Y
INY
DEX
BNE small_loop
return RTS
large_copy_mem
LDY #0
large_loop
LDA (?DP0_L00),Y
STA (?DP1_L00),Y
INY
BNE large_loop
INC ?DP0_L00+1 ; update high pointers
INC ?DP1_L00+1
DEX
BNE large_loop ; no, move next block
RTS
; ==========================================================================;
; Function set / ID Code ROM area. ;
; ==========================================================================;
#if QZ == 1
QZMACRO
#endif
#if IDCODE == 1
IDCODEMACRO
#endif
; ==========================================================================;
; Interrupt vectors Table area. ;
; ==========================================================================;
COMMON INTVEC
?CSTARTUP_INTVEC
BLKB 20H
?CSTARTUP_RESETVEC
WORD init_C
ENDMOD init_C
; ==========================================================================;
; Function/module: exit (int code) ;
; ==========================================================================;
MODULE exit
PUBLIC exit
DEFFN exit(0,0,0,0,32770,0,0,0)
PUBLIC ?C_EXIT
RSEG RCODE
?C_EXIT
exit
; ==========================================================================;
; The next line can be replaced by user defined code. ;
; ==========================================================================;
BRA *
ENDMOD
; ==========================================================================;
; Function/module: default __low_level_init ;
; You can replace this routine by linking with your own version. ;
; The default action is to do nothing and return 1. ;
; ==========================================================================;
MODULE lowinit
PUBLIC __low_level_init
DEFFN __low_level_init(0,0,0,0,32768,0,0,0)
RSEG RCODE
__low_level_init
LDA #1
RTS
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -