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