[H8-ML(1398)] セクションを自由に使う
From: "Henry Sugimoto of OB." <ob_henry@xxxxxxxxxxxxxxxx>
Date: 2001年10月11日(木)20時42分08秒
セクション定義、初期値の扱いの例を示します。
日立のコンパイラーマニュアル、リンカーマニュアル、アセンブラーマニュアルで
当該部分を詳細に比較検討しましょう。  先のバグレポートのとうり、マニュアル
に従っていては、フラッシュを扱えません。 アセンブラープログラムで、セグメン
ト定義を全て記述し、それをリンクコマンドで最初に置く必要があるのは他のCPU
X86,6800,ARM,SH,Z80と同じです。

杉本

; defsect.src      H8 assembler source    Y2K0601 OB henry

          .CPU        300HA:24                         ; CPU Mode

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


  .EXPORT __X_ROM
  .EXPORT __F_BGN
  .EXPORT __F_END

  .EXPORT __Y_ROM
  .EXPORT __G_BGN
  .EXPORT __G_END

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

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

  .SECTION X,CODE,ALIGN=2
  .SECTION Y,DATA,ALIGN=2

  .SECTION F,CODE,ALIGN=2
  .SECTION G,DATA,ALIGN=2

  .SECTION C,DATA,ALIGN=2

__X_ROM .DATA.L (STARTOF X)     ; TOP ADDRESS OF X-SECTION

__F_BGN .DATA.L (STARTOF F)     ; TOP ADDRESS OF F-SECTION
__F_END .DATA.L (STARTOF F)+(SIZEOF F)    ; END ADDRESS OF F-SECTION


__Y_ROM .DATA.L (STARTOF Y)     ; TOP ADDRESS OF Y-SECTION

__G_BGN .DATA.L (STARTOF G)     ; TOP ADDRESS OF G-SECTION
__G_END .DATA.L (STARTOF G)+(SIZEOF G)    ; END ADDRESS OF G-SECTION

// boot.c     H8 debbug boot   Y2K1003 ob henry
//       Debbugger - KMC PArtner 2 -10 H8
//       ROM BOOT --- rom.bat ,rom.mak ,rom.sub

#include <machine.h>
#include "3048f.h"
#include "netc.h"

//void initITU0(void) ;    // devider   ---sample
void initITU1(void) ;    // 1ms Timer For TCP/IP Operations.
//void initITU3(void) ;    // blinker-3  --- sample
//void initITU4(void) ;    // blinker-4  --- sample
//void initIO(void) ;     // toggle out 1ms. --- sample

void main(void) ;     // main loop
void ram_c(void) ;     // copy ROM to EX-RAM program on RAM

extern void X();

extern char *_X_ROM;
extern char *_F_BGN;
extern char *_F_END;
extern char *_Y_ROM;
extern char *_G_BGN;
extern char *_G_END;

// - boot.c ------------------------------------------------
#pragma stacksize 0x8000   // 32K bytes of Stack
#pragma entry boot     // stack ER7 is set automatically.
boot()        // Entry Function --- set SP.
{ int a,b,c;
 unsigned int *s,*d,*l;
 char *cps,*cpd,*cpe;

 BSC.ABWCR.BYTE=0xff;   // CS4:16    bus width
         // CS5:16
         // CS6: 8
         // CS7: 8

 BSC.ASTCR.BYTE=0xff;   // CS0: 2 States  CS - wait
         // CS4: 3 States
         // CS5: 3 States
         // CS6: 3 States
         // CS7: 3 States

 BSC.WCER.BYTE=0x00;    // No Wait Conr Ope.

 BSC.BRCR.BYTE=0xfe;    // A21-23    :I/O  don't care
         // BREQ,BACK :I/O
 BSC.CSCR.BYTE=0xff;    // CSS4-7 Enable.

 P1.DDR=0xff;     // P1 A 0-A 7   necessary on mode 6
 P2.DDR=0xff;     // P2 A 8-A15
 P5.DDR=0xff;     // P5 A16-A19
 P8.DDR=0xfe;     // P8
 PA.DDR=0xff;     // PA

 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++;     //
 }        //

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

 cpe=_F_END;
 for(cps=_X_ROM,cpd=_F_BGN ; cpd < cpe ; cps++,cpd++)
 { *cpd=*cps;
 }

 cps=_Y_ROM;
 cpd=_G_BGN;
 cpe=_G_END;
 do
 { *cpd++=*cps++;
 } while(cpd < cpe);


 INTC.IPRA.BYTE=0;    //
 INTC.IPRB.BYTE=0;    //

   initITU1() ;     // Initalize ITU ch1 - System Timer

   set_ccr(0) ;     // Clear interrupt mask

 main();


//       ebug.sub
INPUT defsect
INPUT boot
INPUT scu1
INPUT printf
INPUT kbd
INPUT netc
INPUT 93c46_n
INPUT main
INPUT tcpio
INPUT psr
INPUT mgr
INPUT ram
INPUT at_cont
lib obneth8.lib
OUTPUT V40.abs
ENTRY _boot
DEBUG
ROM (D,R),(X,F),(Y,G)
START P,X,C,Y,D(1000)
START R,B,S(400000)
START  F,G(0FFEF10)

LIB c:\u\h8.30\lib\c38has.lib
;LIB ..\lib\c38has.lib
;LIB lib\c38has.lib
print V40
EXIT

横浜市 緑区 東本郷 6-17-1-602
オンボード  Tel: 045-473-7678
URL:www02.so-net.ne.jp/~ob_henry

スレッド概略
[表示中](起点)


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


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