セクション定義、初期値の扱いの例を示します。
日立のコンパイラーマニュアル、リンカーマニュアル、アセンブラーマニュアルで
当該部分を詳細に比較検討しましょう。 先のバグレポートのとうり、マニュアル
に従っていては、フラッシュを扱えません。 アセンブラープログラムで、セグメン
ト定義を全て記述し、それをリンクコマンドで最初に置く必要があるのは他の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