www.pudn.com > usbhost_source.rar > CRT0.S
; ; H8/300H スタートアップルーチン (ROM化対応) ; .h8300h ;--------------------------------------------------- ; スタートアップルーチン ;-------------------------------------------------- .section .text .global _start _start: mov.l #_stack, sp ; スタックポインタ初期化 mov.b #0xff:8, r0l ; ABWCR 8ビットバス mov.b r0l, @0xffffec mov.b #0xFf:8, r0l mov.b r0l, @0xffffed ; ASTCR WAIT3w mov.b #0xf3:8, r0l mov.b r0l, @0xffffee ; WCR mov.b #0xff:8, r0l mov.b r0l, @0xffffef ; WCER mov.b #0x3f:8, r0l mov.b r0l, @0xffff5f ; CSCR CS4,5有効 mov.b #0xff:8, r0l ; P1全ビット出力 mov.b r0l, @0xffffc0 mov.b #0xff:8, r0l ; P2全ビット出力 mov.b r0l, @0xffffc1 mov.b #0x00:8, r0l mov.b r0l, @0xffffca mov.b r0l, @0xffffcb mov.b #0xff:8, r0l ; P5全ビット出力 mov.b r0l, @0xffffc8 mov.b #0xf8:8, r0l ; P6 2-0入力 mov.b r0l, @0xffffc9 mov.b #0x00:8, r0l mov.b r0l, @0xffffcf ; P8初期値 mov.b #0x1f:8, r0l mov.b r0l, @0xffffcd ; P8出力 mov.b #0x00:8, r0l mov.b r0l, @0xffffd3 ; PA初期値 mov.b #0xf9:8, r0l mov.b r0l, @0xffffd1 ; PA出力 ;; 初期化データ領域(DATAセクション)初期化 init_data: mov.l #__idata_end, er0 sub.l #__idata_start, er0 beq init_bss mov.l #__idata_start, er1 mov.l #__data_start, er2 init_data1: mov.b @er1+, r3l mov.b r3l, @er2 inc.l #1, er2 dec.l #1, er0 bne init_data1 ;; 非初期化データ領域(BSS)クリア init_bss: xor.b r2l, r2l mov.l #_end, er0 sub.l #_bss_start, er0 beq call_main mov.l #_bss_start, er1 init_bss1: mov.b r2l, @er1 inc.l #1, er1 dec.l #1, er0 bne init_bss1 ;; 初期化,メイン call_main: ldc.b #0x0, ccr ; 割り込み許可 jsr @_main ldc.b #0x80, ccr ; 割り込み禁止 _endless: ; メインを抜けたとき用 jmp @_endless _wait10us: ; ; 10μsのディレイ(ソフトディレイ) ; 割り込みは入るので注意 ; 25MHz...250T ; void wait10us( void ) ; .global _wait10us _wait10us: ; 10 push.l er0 ; 10 push.l er1 ; 10 push.l er2 ; 10 ; mov.l #0:32, er1 ; 6 mov.w #1:16, e0 ; 4 mov.w #4:16, r0 ; 4 wait10us_l: divxs.w e2, er1 ; 24 sub.w #1:16, r0 ; 4 bne wait10us_l ; 4 ; 32 * 4 = 128 ; divxs.w e2, er1 ; 24 nop ; 2 nop ; 2 pop er2 ; 10 pop er1 ; 10 pop er0 ; 10 rts ; 10 ; ; 100μsのディレイ(ソフトディレイ) ; 割り込みは入るので注意 ; 25MHz...2500T ; void wait100us( void ) ; .global _wait100us _wait100us: ; 10 push.l er0 ; 10 push.l er1 ; 10 push.l er2 ; 10 ; mov.l #0:32, er1 ; 6 mov.w #1:16, e0 ; 4 mov.w #75:16, r0 ; 4 wait100us_l: divxs.w e2, er1 ; 24 sub.w #1:16, r0 ; 4 bne wait100us_l ; 4 ; 32 * 75 = 1792 ; nop ; 2 nop ; 2 nop ; 2 pop er2 ; 10 pop er1 ; 10 pop er0 ; 10 rts ; 10 .section .stack _stack: .end