¤ò¥¢¥»¥ó¥Ö¥ë¡¦¥ê¥ó¥¯¤·MOT·Á¼°¤Þ¤Ç¤â¤Ã¤Æ¤¤¤¤Þ¤¹¡£$(CCOPT)¤ÏÄ̾ï»È¤Ã¤Æ¤¤¤ë¤â¤Î¤ò
¤½¤Î¤Þ¤Þ»ØÄꤷ¤Æ¤¯¤À¤µ¤¤(¸Æ¤Ó½Ð¤·Â¦¤È°ìÃפ·¤Ê¤¤¤È¤Þ¤º¤¤¥ª¥×¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤¹)¡£
gcc¤Ç¼«Á°¤Ç½ñ¤¤¤¿myfunc.o¤òROM²½¤·¤¿¤¤¾ì¹ç¤Ï¤³¤³¤ÇÄɲ乤ë¤È¤è¤¤¤Ç¤·¤ç¤¦¡£
Makefile
¤Î°ìÉô¤ò¼¨¤·¤Þ¤¹¡£
superROM.mot: superROM.exe
h8300-hms-objcopy -O srec superROM.exe superROM.mot
superROM.exe: superROM.o $(LDS2)
h8300-hms-gcc $(CCOPT) -nostartfiles -T $(LDS2) superROM.o -o superROM.exe
h8300-hms-objdump -t superROM.exe > objectdump.txt
superROM.o: superROM.s
h8300-hms-gcc $(CCOPT) -c superROM.s
¥ê¥ó¥«¥¹¥¯¥ê¥×¥È(¾åµ¤ÎÎã¤Ç¤Ï$(LDS2)¥Þ¥¯¥í)¤Ï¤³¤ó¤Ê´¶¤¸¤Ç¤¹¡£( ENTRY("_main")¤Ï¤Ï¤º¤·¤Þ¤·¤¿)
OUTPUT_FORMAT("coff-h8300")
OUTPUT_ARCH(h8300h)
MEMORY {
rom(rx) : o = 0x20000, l = 0x20000
ram(rwx) : o = 0xffdf10, l = 0x02000
}
SECTIONS {
.text : { } > rom
.data : { } > rom
.rodata : { } > rom
.bss : { } > ram
}
¼ÂºÝ¤Î³äÉÕ¤ÎÍͻҤòɬ¤ºobjdump¤Ç³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£¼ÂºÝ¤Ë¤Ïobjdump¤Î·ë²Ì¤ò¸«¤Ê¤¬¤é
¢¬¤Î¥ê¥ó¥«¥¹¥¯¥ê¥×¥È¤ò¤¤¤¸¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£½ãÀµ¥â¥Ë¥¿
¤Î³äÉÕ¤òÊѹ¹¤·¤Æ¥ê¥Ó¥ë¥É¤·¤¿Êý¤¬¥¹¥à¡¼¥º¤Ë¼ý¤Þ¤ë¾ì¹ç¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£
(¥¦¥Á¤Ç¤âºÇ¿·ÈǤϤÁ¤ç¤Ã¤ÈÊѤ¨¤Æ¤¤¤Þ¤¹¡Ä¥¹¥¿¥Ã¥¯¤ò¤Á¤ç¤Ã¤È¼ã¤¤Â¦¤Ë¤º¤é¤·¡¢¤½¤Î¸å¤í¤Ë
gcc¥é¥¤¥Ö¥é¥êÍѥ¥¯¤ò»ý¤Ã¤Æ¤¤Þ¤·¤¿)
bash>h8300-hms-objdump -h superROM.exe
superROM.exe: file format coff-h8300
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000c70a 00020000 00020000 000000f8 2**1
CONTENTS, ALLOC, LOAD, CODE
1 .data 000006ca 0002c70a 0002c70a 0000c802 2**1
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000000e 00ffdf10 00ffdf10 00000000 2**1
ALLOC
3 .vectors 00000000 0002e06e 0002e06e 00000000 2**1
ALLOC, LOAD, READONLY
4 .rodata 0000129a 0002cdd4 0002cdd4 0000cecc 2**1
CONTENTS, ALLOC, LOAD, CODE

¤è¤¦¤Ï¤¢¤¿¤é¤Ê¤±¤ì¤Ð¤É¤³¤Ç¤âOK¤È¤¤¤¦¤³¤È¤Ç¤¹¤Í¡£(¢¨¸åÃí¡§.data¥»¥¯¥·¥ç¥ó¤ÎÏÃ)
¤¢¤È¤ÏÊ̸ĤËÍѰդ·¤¿½ãÀµ¥â¥Ë¥¿(monitor.MOT)¤È¤Þ¤È¤á¤ÆROM¤Ë¾Æ¤±¤ÐOK¤Ç¤¹¡£
£²ËܤÎMOT¤¬¾Æ¤¤Ë¤¯¤¤¾ì¹ç¤Ï
ÊÌ¥Ú¡¼¥¸¤Îawk¥¹¥¯¥ê¥×¥È¤Ç£±ËܤˤޤȤá¤ì¤Ð´Êñ¤Ç¤¹¡£
¸Æ¤Ó½Ð¤·Â¦¡Ä¾åµMakefile¤Ç¤¢¤ì¤Ðobjectdump.txt¤¬¤Ç¤¤Æ¤Þ¤¹¤«¤é¡¢¤½¤ÎÃæ¤«¤é
[1791](sec 1)(fl 0x00)(ty 24)(scl 2) (nx 1) 0x0002046a _sprintf
¤È¤Ê¤Ã¤Æ¤¤¤ë¹Ô¤òõ¤·¤Þ¤¹¡£0x0002046a¤«¤é¤Ë¾Æ¤«¤ì¤Æ¤¤¤ë¤Î¤¬¤ï¤«¤ê¤Þ¤¹¤Î¤Ç¡¢
#define sprintf ((int (*)(char *,const char *,...))0x02046a)
¤È¥Þ¥¯¥íÄêµÁ¤¹¤ì¤ÐÄ̾ï¤Îsprintf()´Ø¿ô¤ÈƱÍͤ˸Ƥ٤ޤ¹¡£¤â¤Á¤í¤ó¤³¤Î¾ì¹çstdio.h¤Ï
¼è¤ê¹þ¤Þ¤Ê¤¤¤«¡¢#undef¤·¤Æ¤«¤éºÆÄêµÁ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤Þ¤¿¡¢¤³¤Î¥¢¥É¥ì¥¹¼è¤ê½Ð¤·¤ò¼«Æ°Åª¤Ë¹Ô¤¦¤³¤È¤â¡Ä¤Ç¤¤ë¤Ç¤·¤ç¤¦¡£¥È¥éµ»ÈǤÎÊý¤ò
»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£¢Í¸å½Ò¡£¡ÖROMÆâ¥¢¥É¥ì¥¹¤Î¼«Æ°¼è¤ê½Ð¤·±¾¡¹¡×
Ãí°Õ¡ª¡Ä¼êÈ´¤¤·¤Æ.data¥»¥¯¥·¥ç¥ó¤ò¤½¤Î¤Þ¤ÞROM¤Ë¾Æ¤¤¤Æ¤¤¤Þ¤¹¡£
int n=0x1234;¤Ç³ÎÊݤ·¤¿ÊÑ¿ô¤Ïn=0x2345;¤È¤·¤Æ¤â0x1234¤Î¤Þ¤ÞÊѲ½¤·¤Þ¤»¤ó¡£ÅöÁ³Æ°¤«¤Ê¤¤´Ø¿ô
¤¬¤Ç¤Æ¤¯¤ë¤Ï¤º¤Ç¤¹¡£ÀÅŪÊÑ¿ô¤¬¥¤¥ó¥Á¥¤Ê¤ï¤±¤Ç¤¹¤«¤é¡¢Ìܰ¤Ȥ·¤Æ¤Ï¡Ö¸Æ¤Ö¤¿¤Ó¤Ë°ã¤¦·ë²Ì¤¬Ê֤äÆ
Íè¤ë´Ø¿ô¡×¤¬´í¤Ê¤¤
¤È¸À¤¨¤Þ¤¹¡£¸½¼Ârand()¤¬Ëè²óƱ¤¸Ìá¤êÃͤòÊÖ¤¹¤Î¤ò³Îǧ¤·¤Æ¤¤¤Þ¤¹¤·¡¢
¾¤Ë¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£¥È¥éµ»C¤Îrand()¤Ç¤Ï¡¢ÀÅŪÊÑ¿ôseed¤òbss¤Ë
¼è¤ê¡¢srand()¤ÇÀßÄꤷ¤Ê¤¤¸Â¤êÉÔÄê¡¢¤È¤Ê¤Ã¤Æ¤¤¤ë¤È»×¤ï¤ì¤Þ¤¹
[ÄɲÃ.03/OCT/29]¤¤¤ä¤Êͽ´¶¤Ï¤·¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡ÄË¿mon4.c
¤ÇÍøÍѤ·¤Æ¤¤¤ëstrtok()¤¬.data¥»¥¯¥·¥ç¥ó¤òRAM¤È»×¤Ã¤Æ¤¤¤ë¤è¤¦¤Ç¡¢¤³¤Î
¥¤¥ó¥Á¥ROM²½¤Ç¤Ïư¤¤Þ¤»¤ó¡£
mon4.cÍѤˤϥ¦¥ë¥È¥é¥µ¥Ö¥»¥Ã¥ÈÈÇStrtoK()¤òÍѰդ·¤Þ¤·¤¿¡£
¤Û¤È¤ó¤ÉºÆ¼ýÏ¿¤Ë¤Ê¤ê¤Þ¤¹¤¬
gccźÉÕFILE·Ï´Ø¿ô¡Ä¤Ï¤Þ¤Ã¤¿¤¯¤ï¤«¤Ã¤Æ¤¤¤Þ¤»¤ó¡£»î¤·¤Ëfputs()¤ò
´Þ¤à´Ø¿ô¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¡¢¥È¥éµ»ÈÇ(
¤³¤Á¤é¤Ç¤´¤Ë¤ç¤´¤Ë¤ç
¤ä¤Ã¤Æ¤Þ¤¹)¤Ç¤Ï¡Öwrite()¤È¤Ê¤ó¤È¤«¤¬¤ß¤Ä¤«¤é¤Ê¤¤¡×¢ª¡Öwrite()¤ò
ɬÍפʤÀ¤±½ñ¤¤¤Æ¥ê¥ó¥¯¤¹¤ì¤Ð¤¤¤¤¤Î¤«¡×¤È¸«Åö¤Ä¤¤¤¿¤Î¤Ç¤¹¤¬¡¢
gcc¤Ç¤Ï¤¹¤Ã¤¤ê¥³¥ó¥Ñ¥¤¥ë¤Ç¤¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Æ°¤¯¤Ï¤º¤â¤Ê¤¯¡¢
¤Á¤È¼¡¤Î¼ê¤¬»×¤¤É⤫¤Ó¤Þ¤»¤ó¡£
¤º¤Ã¤ÈVer2.95.3[ÄɲÃ.03/NOV/06]¡Ä¤ÎÏäǤ¹¤¬¡¢
¾¤ÎCPUÍÑgccVer3.2.2¤Ç»î¤·¤¿¤È¤³¤í¡¢
.import¤Ç¤Ï´Ø¿ô¤½¤Î¤â¤Î¤ò¤Ò¤Ã¤Ñ¤Ã¤Æ¤¯¤ì¤º¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£¤Þ¤¿.global¤Ç¤Ï
ÆâÉô»²¾È¤Î²ò·è¤¬ÉÔ½½Ê¬¤Ê¤Þ¤Þa.out¢ÍS¥ì¥³¡¼¥É²½¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£
.long¤È¤·¤Æ¥Ý¥¤¥ó¥¿¥Æ¡¼¥Ö¥ë¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òºî¤Ã¤Æ¤¦¤Þ¤¯¤¤¤Ã¤Æ¤¤¤ë
¤è¤¦¤Ç¤¹¡£H8/300HÍÑVer3.2.2¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¤Î¤Ç¤Ê¤ó¤È¤â¸À¤¨¤Þ¤»¤ó¤¬¡£
ROMÆâ¥¢¥É¥ì¥¹¤Î¼«Æ°¼è¤ê½Ð¤·awk¥¹¥¯¥ê¥×¥È[ÄɲÃ.03/OCT/20]¡Ä
¤ò¤³¤³¤ËÃÖ¤¤Þ¤·¤¿¡£
ÊÌ¥Ú¡¼¥¸¤Îmon4.c¤Ë¤è¤ë
¥·¥ó¥Ü¥ê¥Ã¥¯¥Ç¥Ð¥Ã¥°ÍÑ¥·¥ó¥Ü¥ë¾ðÊó¤âÈ´¤±¤Þ¤¹¡£
¤è¤í¤·¤±¤ì¤Ð¤É¤¦¤¾¡£
bash>h8300-hms-objdump -t superROM.exe | gawk -f symPickG.awk > spROMsym.s
bash>h8300-hms-gcc $(CCOPT) -c spROMsym.s
bash>h8300-hms-ar r /usr/local/h8300-hms/lib/h8300h/libspROMsym.a spROMsym.o
- RAM¦¥×¥í¥°¥é¥à¤ËspROMsym.o¤ò¥ê¥ó¥¯¤¹¤ì¤ÐÆÃ¤Ë°Õ¼±¤¹¤ë¤³¤È¤Ê¤¯ROMÆâ¤Î´Ø¿ô¤ò
¸Æ¤Ù¤Þ¤¹¡£¤³¤Î¾ì¹ç¡¢¸Æ¤Ó½Ð¤·Â¦¤Ë¤Ïɸ½à¤Î¥×¥í¥È¥¿¥¤¥×Àë¸À¤òinclude¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤Þ¤¿£³¹ÔÌܤκî¶È¤ò¤·¤Æ¤ª¤±¤Ð¡¢RAM¦¥×¥í¥°¥é¥à¤Î¥ê¥ó¥¯»þ¤Ë-lspROMsym
¤ò»ØÄꤹ¤ë¤³¤È¤Ç¤â¼Â¸½²Äǽ¤Ç¤¹¡£(int¤¬32¥Ó¥Ã¥È¤À¤È°ã¤¦¥Ç¥£¥ì¥¯¥È¥ê¤«¤â)
sprintf()¤¬¾Æ¤±¤¿¤È¤³¤í¤Ç[ÄɲÃ.03/OCT/20]¡Ä
printf()¤Ë¶á¤¤zprintf()¤Ç¤¹¡£
- ÆâÉôŪ¤Ë¤´¤Ë¤ç¤´¤Ë¤ç¤·¤Æsprintf()¤ò¸Æ¤Ó½Ð¤·¡¢¤µ¤é¤Ë°ì¹Ô½ÐÎϥ롼¥Á¥ó
¤ò¸Æ¤ó¤À¸å¤â¤É¤ê¤Þ¤¹¡£
- sprintf()¤ËÅϤ¹char zprintfBuf[]¤Î¥µ¥¤¥º¤ä³ÎÊݤλÅÊý¤Ê¤É
¤ÏŬµ¹Ä´À°¤·¤Æ¤¯¤À¤µ¤¤¡£(¤ä¤±¤Ë.bss¤ò¹¤¯¼è¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¡Ä
¤è¤¯¤ï¤«¤Ã¤Æ¤Þ¤»¤ó^^;)
- printf()¤âsprintf()¤âint·¿¤Ç¤¹¤¬¡¢zprintf()¤Ïsprintf()¤ËÅϤ·¤¿¥Ð¥Ã¥Õ¥¡¤Ø¤Î¥Ý¥¤¥ó¥¿
¤òÊÖ¤·¤Æ¤¤¤Þ¤¹¡£Ìá¤êÃͤòÍøÍѤ·¤Ê¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢¥Þ¥¯¥í¤Çzprintf¢ÍprintfÃÖ´¹
¤·¤Æ¤â¤¤¤¤¤Ç¤·¤ç¤¦¡£
- °ì¹Ô½ÐÎϥ롼¥Á¥ó¤È¤·¤Æ¡¢¥¦¥Á¤Ç¤ÏROM¤Ë_OUT_STRING()
(¤ÎÏäϤ³¤Á¤é)
¤¬¤¢¤Ã¤¿¤Î¤Ç¤½¤Î¤Þ¤ÞήÍѤ·¤Þ¤·¤¿¡£ÆÈ¼«¤Îputs(char *)¸ß´¹¤ò¸Æ¤ó¤Ç¤¤¤¿¤À¤¤¤Æ¤â
¤â¤Á¤í¤óOK¤Ç¤¹¡£
-
zprintf()(¤Ä¤Þ¤ê_OUT_STRING())¤Ï¤½¤Î¤Þ¤ÞSCI1¤ØÁ÷¤ê½Ð¤·¤Þ¤¹(hterm.exeÁê¼ê¤Ê¤é²þ¹Ô¤Ï"\r\n")¤¬¡¢
"\n"¤òÆâÉôŪ¤Ë"\r\n"¤ËÊÑ´¹¤·¤ÆÁ÷½Ð¤¹¤ëzzprintf()¤òÄɲä·¤Þ¤·¤¿¡£
[ÄɲÃ.03/OCT/29]
- ¸Æ¤Ó½Ð¤·Â¦¤Ç¤Ï¥×¥í¥È¥¿¥¤¥×Àë¸À¤ò¤ªËº¤ì¤Ê¤¯