C0ROM ²½¤Î¼ê½ç
£±¡£C0ROM ²½¤ËɬÍ×¤Ê¥×¥í¥°¥é¥à
£á¡Ë£Ò£Ï£Í²½¥ß¥Ë¡¦¥¹¥¿¡Ý¥È¡¦¥¢¥Ã¥×¡¦¥ë¡¼¥Á¥ó¡ÊC0ROM¡Ë
C0ROM ¤ÎºÇ½é¤Ë location-data¡§
HO: ¡¡HEXÊÑ´¹»þ¡¢C0ROM ÉղóÎǧ¤Ë¤¿¤á¤Îµ¹æ
ROM_addr: 1_TEXT ¤¬Æþ¤ë½é¤á¤Î addr (f000h para)
RAM_addr : _DGROUP ¤¬Æþ¤ë½é¤á¤Î addr(50h para)
ROM_size : 1000h para (64K)
RAM_size : 1000h para (64K)
init_dt_ad: DGROUP¤Î START_addr
¼¡¤Ë¡¢¥¹¥¿¡Ý¥È¡¦¥¢¥Ã¥×¡¦¥ë¡¼¥Á¥ó
DGROUP (_DATA, CONST, BSS) ¤ò RAM_addr °Ê¹ß¤Ë copy ¤¹¤ë¡£
¥³¥Ã¥Ô¥¤¤·¤¿ BSS Îΰè¤Ï zero-clear ¤¹¤ë¡£
SP ¤ò RAM_addr +DGROUP_size +STACK_size ÈÖÃϤˤ¹¤ë¡£
CS:IP ¤«¤é¥×¥í¥°¥é¥à¤ò start¡£
£â¡Ë¥×¥í¥°¥é¥àËÜÂΡ§ ¥»¥°¥á¥ó¥È
CS
DGROUP¡ÊDATA, CONST, BSS¡Ë
¡¡¡¡¡¡¤«¤é¤Ê¤ë¡£
£²¡£C0ROM²½¤Î¼ê½ç
£á¡Ë¥ß¥Ë¡¦¥¹¥¿¡Ý¥È¡¦¥¢¥Ã¥×¡¦¥ë¡¼¥Á¥ó¤¬ÀèÆ¬¤ËÉÕ¤¤¤¿ *.EXE ¤ò¤Ä¤¯¤ë¡£
¡¡ (¥¤)¥ß¥Ë¡¦¥¹¥¿¡Ý¥È¡¦¥¢¥Ã¥×¡¦¥ë¡¼¥Á¥ó¡ÊC0ROM.obj¡Ë¤òºî¤ë¡£
¥¢¥»¥ó¥Ö¥é¤Ç½ñ¤¤¤Æ¤¢¤ë¤«¤é¡¢
masm C0ROM ¡¿Mx ---> C0ROM.obj
¡¡ (¥í)¥×¥í¥°¥é¥àËÜÂΤΠ¥ª¥Ö¥¸¥§¥¯¥È¡¦¥×¥í¥°¥é¥à XX,obj ¤òºî¤ë¡£
¡¡¡¡¡¡(Ž2)¥¢¥»¥ó¥Ö¥é¡¦¥×¥í¥°¥é¥à¡§ £Ã¡Ý¥×¥í¥°¥é¥àŸ³«·Á¼°¤Ç½ñ¤¯¡£
masm XX /Mx ---> XX.obj
¡¡¡¡¡¡ (Ž[)£Ã¥×¥í¥°¥é¥à¡§ Non-Library ¥×¥í¥°¥é¥à·Á¼°¤Ç½ñ¤¯¡£
¡¡ cl/c [Gs] XX ---> XX.obj
¡¡ (¥Ï) ¥¤, ¥í ξ¼Ô¤«¤é¡¢MS-Link ¤òÍѤ¤¤ÆEXE-¥Õ¥¡¥¤¥ë¤òºî¤ë¡£
¡¡link/NOI /NOD C0ROM xx, xx ---> xx.exe¡¡
£â¡Ëexe2hex XX.obj ¤ò¼Â¹Ô¤·¤Æ¡¢XX.hex ¤ò¤Ä¤¯¤ë¡£
¡¡¡¡(¥¤)XX.exe ¤Î header ¤Ë¤Ï¡¢Relocateble ¹àÌܰìÍ÷ (offset, segment)
¤¬¤¢¤ë¡£¤½¤Î Reloc ¹àÌܤËÂбþ¤¹¤ëÌ¿Îá¤Î operand ¤Ç¡¢
¡¡CS ¤ò»Ø¤¹¤â¤Î¤Ï¡¢¡¡¡¡+ROM_addr
¡¡¡¡¡¡ DGROUP ¤ò»Ø¤¹¤â¤Î¤Ï¡¢+RAM_addr -DGROUP
¤È¤¹¤ë¡£
¡¡¡¡(¥í)¥×¥í¥°¥é¥à¤ò¡¢Intel-hex ·Á¼°¥Õ¥¡¥¤¥ë¤ËÊÑ´¹¤¹¤ë¡£
¡¡¡¡(¥Ï)¥×¥í¥°¥é¥à¤ÎºÇ¸å¤Ë¡¢¥Ñ¥ï¡¼¡¦¥ª¥ó¡¦¥¹¥¿¡¼¥ÈÈÖÃÏ(0ffff0)¤Ë¥¸¥ã¥ó¥×
¡¡¡¡ ¡¡Ì¿Îá¡ãjmp ip:cs¡ä¤ò¥í¡¼¥É¤¹¤ë¥Ç¡¼¥¿¤òÉղ乤롣¡Ê¤³¤ÎÌ¿Îá¤Ç¡¢Ì¿Îá
¡¡ ¡¡¡¡¥ª¥Ú¥é¥ó¥É¤Î cs ¤¬¡¢CS-¥ì¥¸¥¹¥¿¤ÎÆâÍÆ¤È¤Ê¤ë¡£¤¹¤Ê¤ï¤Á¡¢¥³¡Ý¥É¡¦
¥»¥°¥á¥ó¥È¤¬·è¤Þ¤ë¡£¤Ä¤¤¤Ç¡¢¥ª¥Õ¥»¥Ã¥È¡¦ÈÖÃÏ ip ¤ËÈô¤Ö¡£¡Ë
£ã¡ËXX.hex ¤ò WU10 ¤ò»È¤Ã¤Æ¡¢ROM ¤Ë¥í¡¼¥É¤¹¤ë¡£
£ä¡ËC-MONOTOR¡Ê¸¡ºº´ï¦¡Ë¤ÈDEBUGGER (ROM¦¡Ë¤Ç¸¡ºº¡£¤³¤Î¤È¤¡¢¤Þ¤º
¥Ñ¥ï¡¼¡¦¥ª¥ó¡¦¥¹¥¿¡¼¥È¤Î JMPÀè¡Ý¡ä¥Ç¥Ã¥Ð¥¬¤Î¥¹¥¿¡¼¥ÈÈÖÃÏ
¥Ç¥Ã¥Ð¥¬¤Î¥æ¡¼¥¶¡¦¥¨¥ê¥¢¤òÀßÄê
¥Ç¥Ã¥Ð¥¬¤Î¥ï¡¼¥¯¡¦¥¨¥ê¥¢¤òÀßÄê
¡¡¡¡¤Ë¤·¤ÆÃÖ¤¯¡£
£å¡Ë´°À®¤·¤¿¤é
¥Ñ¥ï¡¼¡¦¥ª¥ó¡¦¥¹¥¿¡¼¥È¤Î JMP Àè¡Ý¡ä¥æ¡¼¥¶¡¦¥×¥í¥°¥é¥à
¡¦¥¹¥¿¡¼¥ÈÈÖÃϤËÌ᤹¡£
£³¡£ÉÕÏ¿£±
¡¡¥í¥à²½¥×¥í¥°¥é¥àÃæ¡¢¥ß¥Ë¡¦¥¹¥¿¡¼¥È¡¦¥¢¥Ã¥×¡¦¥ë¡¼¥Á¥ó¡§
DGROUP (_DATA, CONST, BSS) ¤ò RAM_addr °Ê¹ß¤Ë COPY ¤¹¤ë¡£
¥³¥Ã¥Ô¥¤¤·¤¿ BSS Îΰè¤Ï zero-clear ¤¹¤ë¡£
Stack Pointer ¤ò RAM_addr +DGROUP_size +STACK_size ÈÖÃϤˤ¹¤ë¡£
¡¡¤ÎÁàºî¤¬¡¢ÉÔɬÍפʤâ¤Î¤¬¤¢¤ë¡£
¡¡¤³¤Î¤È¤¤Ï¡¢
1)¥×¥í¥¯¥é¥à¤ÎÀèÆ¬¤Ë
dw 'HO'
rom_addr dw 0f000h
ram_addr dw 50h
rom_size dw 1000h
ram_size dw 1000h
init_dt_ad: dw DGROUP
dw 0, 0
¤Î¤è¤¦¤Ë EXE2HEX ¤ËɬÍפʥإÀ¡¼¤ò½ñ¤¤¤ÆÃÖ¤¯¡£
2)¼¡¤Ë¡¢
masm /mx
link
exe2hex
¤È¤¹¤ë¤Ð¡¢¥×¥í¥°¥é¥à ROM ¤Ë³äÉÕ¤±¤é¤ì¡¢Æ±»þ¤Ë hex file
¤òºî¤ë»ö¤¬½ÐÍè¤ë¡£
£´¡£ÉÕÏ¿£²
¡¡RAM ¥×¥í¥°¥é¥à¤Ç¤Ï¡¢¥ß¥Ë¡¦¥¹¥¿¡¼¥È¡¦¥¢¥Ã¥×¡¦¥ë¡¼¥Á¥ó¤ÏɬÍפʤ¤¡£
1)¥×¥í¥¯¥é¥à¤ÎÀèÆ¬¤Ë
dw 'HO'
rom_addr dw 50h
ram_addr dw 50h
rom_size dw 1000h
ram_size dw 1000h
init_dt_ad: dw DGROUP
dw 0, 0
¤Î¤è¤¦¤Ë EXE2HEX ¤ËɬÍפʥإÀ¡¼¤ò½ñ¤¤¤ÆÃÖ¤¯¡£
2)¼¡¤Ë¡¢
masm /mx
link
exe2hex
¤È¤¹¤ë¡£¥×¥í¥°¥é¥à RAM ¤Ë³äÉÕ¤±¤é¤ì¡¢Æ±»þ¤Ë hex file
¤òºî¤ë»ö¤¬½ÐÍè¤ë¡£