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