;* ;* TOPPERS/JSP Kernel ;* Toyohashi Open Platform for Embedded Real-Time Systems/ ;* Just Standard Profile Kernel ;* ;* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory ;* Toyohashi Univ. of Technology, JAPAN ;* Copyright (C) 2001 by OAKS16KIT support ;* Copyright (C) 2003-2004 by Naoki Saito ;* Nagoya Municipal Industrial Research Institute, JAPAN ;* Copyright (C) 2003-2004 by Ryosuke Takeuchi ;* Platform Development Center RICOH COMPANY,LTD. JAPAN ;* ;* 上記著作権者は,Free Software Foundation によって公表されている ;* GNU General Public License の Version 2 に記述されている条件か,以 ;* 下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェア(本ソフトウェ ;* アを改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, ;* 利用と呼ぶ)することを無償で許諾する. ;* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 ;* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー ;* スコード中に含まれていること. ;* (2) 本ソフトウェアを再利用可能なバイナリコード(リロケータブルオブ ;* ジェクトファイルやライブラリなど)の形で利用する場合には,利用 ;* に伴うドキュメント(利用者マニュアルなど)に,上記の著作権表示, ;* この利用条件および下記の無保証規定を掲載すること. ;* (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組 ;* み込んだ形で利用する場合には,次のいずれかの条件を満たすこと. ;* (a) 利用に伴うドキュメント(利用者マニュアルなど)に,上記の著作 ;* 権表示,この利用条件および下記の無保証規定を掲載すること. ;* (b) 利用の形態を,別に定める方法によって,上記著作権者に報告する ;* こと. ;* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 ;* 害からも,上記著作権者を免責すること. ;* ;* 本ソフトウェアは,無保証で提供されているものである.上記著作権者は, ;* 本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ ;* ない.また,本ソフトウェアの利用により直接的または間接的に生じたい ;* かなる損害に関しても,その責任を負わない. ;* ;* @(#) $Id: start.a30,v 1.5 2006/08/03 04:15:57 honda Exp $ PRCR .EQU 000AH ; プロテクトレジスタ PRC0 .BTEQU 0,PRCR ; システムクロックレジスタビット PRC1 .BTEQU 1,PRCR ; プロセッサモードレジスタビット ; PM0 .EQU 0004H ; プロセッサモードレジスタ0 PM1 .EQU 0005H ; プロセッサモードレジスタ1 ; CM0 .EQU 0006H ; クロックモードレジスタ0 CM1 .EQU 0007H ; クロックモードレジスタ1 C_CM0 .EQU 00001000B ; CM0(Xcin-HIGH) C_CM1 .EQU 00100000B ; CM1(Xin-HIGH) .IF M3029 CM2 .EQU 000CH ; クロックモードレジスタ2 C_CM2 .EQU 00000000B ; CM2 .ENDIF ;/* 定数定義(初期化)*/ ; .IF M3029 VECTOR_ADR .EQU 0FA000h ; ベクタアドレス .ELSE VECTOR_ADR .EQU 0FFE00h ; ベクタアドレス .ENDIF .include m16cvec.inc .section bss_NE,DATA,ALIGN .section data_NE,DATA,ALIGN .section data_NEI,ROMDATA,ALIGN .section bss_NO,DATA,ALIGN .section data_NO,DATA,ALIGN .section data_NOI,ROMDATA,ALIGN ; ;************************************************ ;* 初期化ルーチン * ;************************************************ .section program .glb _hardware_start .glb _kernel_start .glb _software_init_hook ; _hardware_start: ldc #RAMEND,ISP ; 割り込みスタックポインタセット ; ----- set Processor mode ----- bset PRC1 ; プロセッサモードレジスタ書き込みイネーブル mov.b #00000000b,PM0 ; シングルチップモード mov.b #00000000b,PM1 ; 非拡張、ノーウェイト bclr PRC1 ; プロセッサモードレジスタ書き込みディゼーブル ; ----- set System clock ----- bset PRC0 ; クロックコントロールレジスタ書き込みイネーブル .IF M3029 mov.b #C_CM2,CM2 ; システムクロックをメインクロックに .ENDIF mov.b #C_CM0,CM0 ; メインクロック発信 mov.b #C_CM1,CM1 ; 分周なし bclr PRC0 ; レジスタ書き込みディゼーブル ; ldc #0000h,FLG ; bank#0,割り込み許可,ISP ldintb #VECTOR_ADR ; ベクタテーブルの設定 ;------ DATA領域の初期化 ------ mov.w #(topof bss_NE),R3 mov.w #(topof data_NE),A1 sub.w A1,R3 jz bss_clear mov.w #(topof data_NEI & 0ffffh),A0 mov.b #(topof data_NEI >> 16),R1H smovf.b ;------ BSS領域の初期化 ------ bss_clear: mov.w #(topof bss_NE),A0 mov.w #0,R0 clear_loop: mov.w R0,[A0] add.w #2,A0 cmp.w #RAMEND,A0 jne clear_loop ;* software_init_hook を呼出し(0 でない場合) ;* ;* ソフトウェア環境(特にライブラリ)に依存して必要な初期化処 ;* 理がある場合は,software_init_hook という関数を用意すれば ;* よい.M16Cの場合、コンパイル時EXTERN_SOFT_HOOKをデファインする mov.w #(_software_init_hook & 0ffffh),A0 mov.w #(_software_init_hook >> 16),A1 lde.w [A1A0],R0 mov.w #((_software_init_hook+2) & 0ffffh),A0 mov.w #((_software_init_hook+2) >> 16),A1 lde.w [A1A0],R1 mov.w R0,A0 mov.w R1,A1 or.w R0,R1 jz kernel_link jsri.a A1A0 ;; ;***** カーネルスタートへ ***** kernel_link: jsr.a _kernel_start ; --> kernel_start() ; .end