⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cstartup.s31

📁 瑞萨R5G0C514使用
💻 S31
📖 第 1 页 / 共 2 页
字号:
; 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 + -