;----------------------------------------------------------------------------- 
; startup 
;----------------------------------------------------------------------------- 
.SECTION        .text, TEXT 
_start: 
        ;-------------------------------------------------- 
        ; setting the stack pointer 
        ;-------------------------------------------------- 
        MOVW    SP,#LOWW(__STACK_ADDR_START) 
  
        ;-------------------------------------------------- 
        ; initializing stack area 
        ;-------------------------------------------------- 
        MOVW    AX,#LOWW(__STACK_ADDR_END) 
        CALL    !!_stkinit 
  
        ;-------------------------------------------------- 
        ; hardware initialization 
        ;-------------------------------------------------- 
        CALL    !!_hdwinit 
  
        ;-------------------------------------------------- 
        ; initializing BSS 
        ;-------------------------------------------------- 
        ; clear external variables which doesn't have initial value (near) 
        MOVW    HL,#LOWW(STARTOF(.bss)) 
        MOVW    AX,#LOWW(STARTOF(.bss) + SIZEOF(.bss)) 
        BR      $.L2_BSS 
.L1_BSS: 
        MOV     [HL+0],#0 
        INCW    HL 
.L2_BSS: 
        CMPW    AX,HL 
        BNZ     $.L1_BSS 
  
        ; clear saddr variables which doesn't have initial value 
        MOVW    HL,#LOWW(STARTOF(.sbss)) 
        MOVW    AX,#LOWW(STARTOF(.sbss) + SIZEOF(.sbss)) 
        BR      $.L2_SBSS 
.L1_SBSS: 
        MOV     [HL+0],#0 
        INCW    HL 
.L2_SBSS: 
        CMPW    AX,HL 
        BNZ     $.L1_SBSS 
  
        ;-------------------------------------------------- 
        ; ROM data copy 
        ;-------------------------------------------------- 
        ; copy external variables having initial value (near) 
        MOV     ES,#HIGHW(STARTOF(.data)) 
        MOVW    BC,#LOWW(SIZEOF(.data)) 
        BR      $.L2_DATA 
.L1_DATA: 
        DECW    BC 
        MOV     A,ES:LOWW(STARTOF(.data))[BC] 
        MOV     LOWW(STARTOF(.dataR))[BC],A 
.L2_DATA: 
        CLRW    AX 
        CMPW    AX,BC 
        BNZ     $.L1_DATA 
  
 |