	.text

	.extern		_main
#	.extern		_CPU_IRQInterrupt
	.extern		_CMT0_Interrupt
	.extern		_sp_base
	.extern		_sbss
	.extern		_ebss

	/* パワーオンリセットベクタ */
	.org	0x000
_reset_vector:
	.long	_startup
	.long	_sp_base
	/* マニュアルリセットベクタ */
	.long	_startup
	.long	_sp_base

	/* SPI-FlashBoot用配置アドレス格納(システム予約領域) */
	.org	0x020
	.long	_reset_vector


	/* 外部割り込みベクタ */
	.org	0x100
	/* IRQ0 */
	.long	_IRQx_exception
	/* IRQ1 */
	.long	_IRQx_exception
	/* IRQ2 */
	.long	_IRQx_exception
	/* IRQ3 */
	.long	_IRQx_exception
	/* ↑割り込み要因ごとにベクタが分かれているが、同じエントリにジャンプさせている */

	# コンペアマッチタイマ0割り込み
	.org	0x2BC
	.long	_CMT0_exception


	/* スタートアップ処理 */
	.org	0x500
_startup:
	mov.l	_reset_vector_adr, r0
	ldc	r0, vbr		/* ユーザVBR設定 */
	mov.l	_sp_base_addr, r15	/* ユーザースタック設定 */
	#↑SPI-FlashBootではVBRもSPもセットされてジャンプしてくるが、念のため再設定

	/* Initialize .bss section を追加 10/06/02 KOU */
	MOV.L	bss_start_adr, R1
	MOV.L	bss_end_adr, R2
	MOV	#0, R0
clr_bss:
	CMP/EQ	R2, R1
	BT	clr_bss_end
	MOV.L	R0, @R1+
	BRA	clr_bss
	NOP
clr_bss_end:

	mov.l	_start_addr, r0
	jmp	@r0	/* main()関数にジャンプ */
	nop

	.align	0x4
_reset_vector_adr:
	.long	_reset_vector
_sp_base_addr:
	.long	_sp_base
_start_addr:
	.long	_main

/* Initialize .bss section 用に追加 10/06/02 KOU */
bss_start_adr:
	.long	_sbss
bss_end_adr:
	.long	_ebss

	/* 外部割り込み処理 */
_IRQx_exception:
	#PC,SR以外のレジスタをスタックに退避する(SH-2Aはバンクレジスタ構成だが)
	sts.l	macl,@-r15
	sts.l	mach,@-r15
	stc.l	vbr,@-r15
	stc.l	gbr,@-r15
	sts.l	pr,@-r15
	mov.l	r14,@-r15
	mov.l	r13,@-r15
	mov.l	r12,@-r15
	mov.l	r11,@-r15
	mov.l	r10,@-r15
	mov.l	r9,@-r15
	mov.l	r8,@-r15
	mov.l	r7,@-r15
	mov.l	r6,@-r15
	mov.l	r5,@-r15
	mov.l	r4,@-r15
	mov.l	r3,@-r15
	mov.l	r2,@-r15
	mov.l	r1,@-r15
	mov.l	r0,@-r15

	mov.l	_CPU_IRQInterrupt_addr, r1
	jsr	@r1
	nop

	#PC,SR以外のレジスタをスタックから復帰する
	mov.l	@r15+,r0
	mov.l	@r15+,r1
	mov.l	@r15+,r2
	mov.l	@r15+,r3
	mov.l	@r15+,r4
	mov.l	@r15+,r5
	mov.l	@r15+,r6
	mov.l	@r15+,r7
	mov.l	@r15+,r8
	mov.l	@r15+,r9
	mov.l	@r15+,r10
	mov.l	@r15+,r11
	mov.l	@r15+,r12
	mov.l	@r15+,r13
	mov.l	@r15+,r14
	lds.l	@r15+,pr
	ldc.l	@r15+,gbr
	ldc.l	@r15+,vbr
	lds.l	@r15+,mach
	lds.l	@r15+,macl
	# 例外からリターン
	RTE
	nop

_CMT0_exception:
	#PC,SR以外のレジスタをスタックに退避する(SH-2Aはバンクレジスタ構成だが)
	sts.l	macl,@-r15
	sts.l	mach,@-r15
	stc.l	vbr,@-r15
	stc.l	gbr,@-r15
	sts.l	pr,@-r15
	mov.l	r14,@-r15
	mov.l	r13,@-r15
	mov.l	r12,@-r15
	mov.l	r11,@-r15
	mov.l	r10,@-r15
	mov.l	r9,@-r15
	mov.l	r8,@-r15
	mov.l	r7,@-r15
	mov.l	r6,@-r15
	mov.l	r5,@-r15
	mov.l	r4,@-r15
	mov.l	r3,@-r15
	mov.l	r2,@-r15
	mov.l	r1,@-r15
	mov.l	r0,@-r15

	mov.l	_CPU_CMT0Interrupt_addr, r1
	jsr	@r1
	nop

	#PC,SR以外のレジスタをスタックから復帰する
	mov.l	@r15+,r0
	mov.l	@r15+,r1
	mov.l	@r15+,r2
	mov.l	@r15+,r3
	mov.l	@r15+,r4
	mov.l	@r15+,r5
	mov.l	@r15+,r6
	mov.l	@r15+,r7
	mov.l	@r15+,r8
	mov.l	@r15+,r9
	mov.l	@r15+,r10
	mov.l	@r15+,r11
	mov.l	@r15+,r12
	mov.l	@r15+,r13
	mov.l	@r15+,r14
	lds.l	@r15+,pr
	ldc.l	@r15+,gbr
	ldc.l	@r15+,vbr
	lds.l	@r15+,mach
	lds.l	@r15+,macl
	# 例外からリターン
	RTE
	nop


	.align 0x4
_CPU_IRQInterrupt_addr:
	.long	_CPU_IRQInterrupt

#	タッチパネル用CMT0割り込みに変更 KOU
_CPU_CMT0Interrupt_addr:
	.long	_CMT0_Interrupt
