[H8-ML(5283)] Re: [H8-ML(5281)] Re:はじめまして:関数
From: "Henry of OB." <ob_henry@xxxxxxxxxxxxxxxx>
Date: 2005年01月05日(水)20時55分02秒
ROM化のお手本が有ればなんて事
ないのですが、全く初めてのトライと
なると大変ですね。  HEW環境も
HEW無しで、メイクファイルを自分で
構築出来ればブラックボックス無しで
使えますが、HEWの説明だと決して
解り易くはないし、HEWの仕様が、
バージョンアップでがらりと変化して
過去の資産を失いもしました。
基礎をしっかり理解したいとの考えは
正しいと思います。

もしかROMデバッガーを導入可能な
らKMCのパートナーを薦めます。
モニターやJTAGデバッガーだと
H8,SH2、3ではSCU1がダイナミ
ックなデバッグに使えなくなり、まどろ
っこしい事になり、マクロな開発マイン
ドをスポイルする危険が増します。

基本は、自前でアセンブラー、コンパ
イラー、リンカーを制御してプログラム
を構築する技を学ぶ事だと思います。

リセット&割り込みベクター部分、ブー
ト部分、メイン部分の3種類のルーチン
を構想できて、それぞれのロケイトすべ
きセクションが意識できれば組めます。

オイラは日立C、GCCで H8、SH2〜
3を組んでいますが、リンカースクリプト
などかなり書式が異なり(KMCのEXE
GCCとも違う)まごつきますから、務め
てお手本の入手をはかりましょう。

ルネサスH8C V4 版で、一寸お見せしますと

;--------------------------------------------------
; defsect.src      H8S assembler source  041130 OB henry

  .SECTION P,CODE,ALIGN=2
  .SECTION D,DATA,ALIGN=2
  .SECTION R,DATA,ALIGN=2
  .SECTION B,DATA,ALIGN=2
  .SECTION C,DATA,ALIGN=2
;  .SECTION BX,DATA,ALIGN=2

__D_ROM .DATA.L (STARTOF D)       ; TOP ADDRESS OF D-SECTION
__R_BGN .DATA.L (STARTOF R)       ; TOP ADDRESS OF R-SECTION
__R_END .DATA.L (STARTOF R)+(SIZEOF R)    ; END ADDRESS OF R-SECTION
__B_BGN .DATA.L (STARTOF B)       ; TOP ADDRESS OF B-SECTION
__B_END .DATA.L (STARTOF B)+(SIZEOF B)    ; END ADDRESS OF B-SECTION

;---------------------------------------------------------------------------
;

  .EXPORT __D_ROM
  .EXPORT __R_BGN
  .EXPORT __R_END
  .EXPORT __B_BGN
  .EXPORT __B_END

;----------------------------
;  symbol import
;----------------------------
 .import _boot,_imia1
 .import _scu1_re,_scu1_ri,_scu1_ti,_scu1_te
 .import _netc_int

;----------------------------
;  vector define  2004/12/02 OB Henry.
;----------------------------
 .section vect,data,locate=0

; Vector Symbol Factor  Number

 .data.l reset  ;Rese   0  Reset
 .data.l _dumm  ;-     1
 .data.l _dumm  ;-    2
 .data.l _dumm  ;-    3
 .data.l _dumm  ;-    4
 .data.l _dumm  ;-    5
 .data.l _dumm  ;-    6
 .data.l _dumm  ;NMI   7  Non-Maskable Interrupt request
 .data.l _dumm  ;-    8
 .data.l _dumm  ;-    9
 .data.l _dumm  ;   10
 .data.l _dumm  ;-   11
 .data.l _dumm  ;-   12
 .data.l _dumm  ;-   13
 .data.l _dumm  ;-   14
 .data.l _dumm  ;-   15
 .data.l _dumm  ;IRQ0  16

    途中省略
;----------------------------
; jamp to main program
;----------------------------
 .section P,code

_dumm: nop
 rte
 nop


reset:
 mov.l #h'FFBFF0,sp

 mov.b #h'08,r1l ; CLK OUT,SET STC1,0 make PLL NEW
 mov.b  r1l,@h'ff3b ; SCKCR
 mov.b #h'02,r1l ; SYS CLK=CLK
 mov.b  r1l,@h'ff45 ; PLLCR

 mov.b #h'E1,r1l ; /CS4,/CS3,/CS2,/CS1:16,/CS0:8
 mov.b  r1l,@h'fec0 ; ABWCR

 mov.b #h'FF,r1l ;
 mov.b  r1l,@h'fe29 ; PADDR
 mov.b #h'FF,r1l ;
 mov.b  r1l,@h'fe2a ; PBDDR
 mov.b #h'FF,r1l ;
 mov.b  r1l,@h'fe2b ; PCDDR
 mov.b #h'0d,r1l ; ?cs3,/Cs2,-,/CS0
 mov.b  r1l,@h'fe2f ; PGDDR
 mov.b #h'09,r1l ;
 mov.b  r1l,@h'ff74 ; PHDDR

 jmp @_boot

  .END

// BOOT.C ------------------------------------------------------
//#include "netc.h"
//#include "unix_t.h"
//#include "kbd.h"

void initTPU1(void) ;    // 1ms Timer For TCP/IP Operations.
void main(void) ;     // main loop

#pragma stacksize 0xfffe   // SET SP STACK + stacksize(32KB)
//#pragma stacksize 0x4000   // SET SP STACK + stacksize(16KB)
#pragma entry boot     // stack ER7 is set automatically.
boot()        // Entry Function --- set SP.
{ int a,b,c;
 unsigned int *s,*d,*l;

 SCKCR.BYTE=0x08;  // No CLK OUT,SET STC1,0 make PLL NEW
       // SYS CLK=CLK
 PLLCR.BYTE=0x02;  // CLK X4

// SYSCR.BIT.EXPE=1;
// SYSCR.BIT.RAME=1;

 BSC.ABWCR.BYTE=0x01; // CS4:16    bus width
       // CS3:16
       // CS2:16
       // CS1:16
       // CS0:16

 BSC.ASTCR.BYTE=0x1d; // CS4: 3 States  CS - wait
       // CS3: 3 States
       // CS2: 3 States
       // CS1: 2 States
       // CS0: 3 States

 BSC.WCR.BIT.W7=0x0;  // No Wait
 BSC.WCR.BIT.W6=0x0;  //
 BSC.WCR.BIT.W5=0x0;  //
 BSC.WCR.BIT.W4=0x3;  // Wait 1
 BSC.WCR.BIT.W3=0x1;  //
 BSC.WCR.BIT.W2=0x1;  //
 BSC.WCR.BIT.W1=0x0;  //
 BSC.WCR.BIT.W0=0x1;  //

 BSC.RDNCR.BYTE=0x10; // CS4 RD Hold 1/2 Clk.
 BSC.CSACR.WORD=0x00; // No Th,Tt Cycles.
// BSC.BROMCR.BYTE=0x00; // No BUrst Rom.
 BSC.BCR.BIT.WAITE=1; // Enable WAIT.
// BSC.DMACR.WORD=0c0000;
// BSC.DRACCR.WORD=0c0000;
// BSC.REFCR.WORD=0c0000;
// BSC.RTCNT.WORD=0c0000;
// BSC.RTCOR.WORD=0c0000;

 BSC.PFCR0.BYTE=0x1F; // /CS0,/CS1,/CS2,/CS3,/CS4
 BSC.PFCR1.BYTE=0x1F; // -,-,-A20,A19,A18,A17,A16
 BSC.PFCR2.BYTE=0x0C; // /AS,/LWR,P35

 P1.DDR=0xff;   // P1 FPGA
 P2.DDR=0xff;   // P2 PO
 P3.DDR=0x33;   // P3 IIC,IIC,RxD1,RxD0,TxD1,TxD0
 P5.DDR=0x01;   // P5 -,-,RxD2,TxD2

// MSTCRH.BIT.PSTOP=1;  // STOP Clock OUT

 P6.DDR=0x15;   // P65i,P64o,P63i,P62o,P61i,P60o
 P8.DDR=0x02;   // P8 P85i,P84i,RxD3,/IRQ2,TxD3,P80i
// P9.DDR=0x00;   // P9 P97-P90
 PA.DDR=0x1F;   // PA /IRQ7,/IRQ6,/IPQ5,A20-A16
 PB.DDR=0xFF;   // PB A15-A8
 PC.DDR=0xff;   // PC A7-A0
// PD.DDR=0xFF;   // PD D15-D8
// PE.DDR=0xFF;   // PE D7-D0
 PF.DDR=0xF8;   // PF CLKOUT,/AS,/RD,/HWR,/LWR,-,-,/WAIT
 PG.DDR=0x0F;   // PG PG6i,PG5i,PG4i/CS3,/CS2,/CS1,/CS0
 PH.DDR=0x01;   // PH PH3i,PH2i,PH1i,/CS4


 // --------------------------------------------------------------------
 P2.DR.BYTE=0xfe;

 d=__sectop("R");    // R - Data Section on RAM
 s=__sectop("D");    // D - Data Section on ROM
 l=__secend("D");    //
 while(s < l)     // Copy DATA into Sram Area
 { *d++=*s++;     //
 }

 P2.DR.BYTE=0xfd;
 d=__sectop("B");    // B- BSS Section
 l=__secend("B");    //
 while(d < l)     // Clesr BSS DATA as 0x00
 { *d++=0;      //
 }        //

 P2.DR.BYTE=0xfB;

// INTC.INTCR.BYTE=0;    // 0;Mode-0,2:Mode-2

 set_imask_ccr(0) ;    // Clear interrupt mask
 P2.DR.BYTE=0xF7;
 initTPU1() ;     // Initalize ITU ch1 - Blink
 P2.DR.BYTE=0xef;
 main( );
以下略

; ROM.SUB------------------------------------------
INPUT defsect
INPUT boot
INPUT scu1
INPUT printf
INPUT kbd
INPUT netc
INPUT 93c46_n
INPUT main
INPUT tcpio
LIB OBNETH8s.LIB
LIB h8s.lib
OUTPUT 2XXXUR
FORM=S
;ENTRY _boot
ROM =D=R
START= P,C,D/1000
START= R,B/400000
START=   S/418000
SHOW=symbol

LIST 2XXXUR
EXIT




  オンボード 杉本 秀夫

スレッド概略
[5281(R)](起点)
 └[表示中]
   └[5285(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]