rvtlcã«ã¤ã„ã¦
rvtlc 㯠Tiny BASIC系㮠rvtl ã®ã‚³ãƒ³ãƒ‘イラã§ã™ã€‚rvtlc ã¯ã€rvtl㧠書ã‹ã‚ŒãŸrvtlc自身ã®ã‚½ãƒ¼ã‚¹(rvtlc.vtl)をコンパイルã§ãã¾ã™ã€‚
rvtlc ã¯rvtlã®ã‚½ãƒ¼ã‚¹ã‚’コンパイルã—ã¦ç›´æŽ¥ Linux ã®å®Ÿè¡Œãƒ•ァイルを 出力ã—ã¾ã™ã€‚ã—ãŸãŒã£ã¦ãƒªãƒ³ã‚«(ld)もアセンブラもä¸è¦ã§ã™ã€‚ 出力ã•れãŸå®Ÿè¡Œãƒ•ァイル ã¯ãã®ãƒ•ァイルå˜ç‹¬ã§å‹•作ã—ã€libcç‰ã® 共有ライブラリã¯ä¸è¦ã§ã™ã€‚rvtlc自身もå˜ç‹¬ã§å‹•作ã—ã¾ã™ã€‚ インタープリタ(rvtl)ã§å®Ÿè¡Œã™ã‚‹ã‚ˆã‚Šã€20-100å€é«˜é€ŸåŒ–ã•れã¾ã™ã€‚
rvtlc 㯠i386(x86)専用ã§ã™ã€‚PowerPCã‚„ARMãŒå‹•作ã™ã‚‹ Linux 用㮠rvtlã§ã¯å‹•作(クãƒã‚¹ã‚³ãƒ³ãƒ‘イル)ã—ã¾ã›ã‚“。
ダウンãƒãƒ¼ãƒ‰
rvtlc-1.02.tar.gz (84KB 2010/03/03)
ファイル
README.TXT | ã“ã®ãƒ•ァイル |
rvtlc | コンパイル済ã¿ã‚³ãƒ³ãƒ‘イラ(実行ファイル) |
rvtlc.vtl | コンパイラã®ã‚½ãƒ¼ã‚¹ |
rt.bin | rvtlc.vtl用ランタイムライブラリ |
runq.vtl | コンパイル用ツール |
Makefile | rvtlc 自身ã®ã‚³ãƒ³ãƒ‘イル用 |
copying | GNU General Pulic Licence |
gpl.text | GPLã®æ—¥æœ¬èªžè¨³ |
rtl_source | ランタイムライブラリã®ã‚½ãƒ¼ã‚¹ |
å‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ã‚‰ã®å¤‰æ›´
å‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³(2006/05/16版)ã‹ã‚‰ã®å¤‰æ›´ç‚¹ã§ã™ã€‚
- linux-2.6 ã® Address Space Layout Rondomization ã«å¯¾å¿œ
- ランタイムライブラリをrvtlcã«çµ„ã¿è¾¼ã¿
- å¼ã®è©•価(16進数)ã§ç™ºç”Ÿã™ã‚‹å¤‰æ•°ã‚¹ã‚¿ãƒƒã‚¯ã®ä¸ä¸€è‡´ã‚’ä¿®æ£
- % ã‚’å‚ç…§ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã¨ãªã‚‹ãƒã‚°ã‚’ä¿®æ£
- ランタイムライブラリã®åˆæœŸåŒ–時ã®ä¸å…·åˆã‚’ä¿®æ£
コンパイラã®ä½¿ç”¨æ–¹æ³•
例ãˆã° mycode.vtl ã¨ã„ã†rvtlã®ã‚½ãƒ¼ã‚¹ãƒ—ãƒã‚°ãƒ©ãƒ をコンパイルã™ã‚‹ ã«ã¯ ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å®Ÿè¡Œã—ã¾ã™ã€‚
jun@ubuntu910:~/rvtlc-1.02$ ./rvtlc mycode.vtl
rvtlc ã®ã¿ã‚’パスã®é€šã£ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªï¼ˆä¾‹ãˆã° /usr/local/bin)㫠コピーã™ã‚Œã°ã€ã©ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‹ã‚‰ã§ã‚‚「rvtlc ソースファイルã€ã¨ 入力ã™ã‚‹ã ã‘ã§ rvtl ã®ã‚½ãƒ¼ã‚¹ã‚’コンパイルã—ã¦å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä½œæˆ ã§ãã¾ã™ã€‚
jun@ubuntu910:~/rvtlc-1.02$ sudo make install
を実行ã™ã‚‹ã¨ã€/usr/local/bin ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚
ã¾ãŸã¯ã€rvtl-3.04 ãŒä½¿ç”¨ã§ãる環境ã§ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚³ãƒ³ãƒ‘イラ㮠ソースを使ã£ã¦ã‚‚コンパイルã§ãã¾ã™ã€‚rvtlc.vtl を使ã†å ´åˆã¯ rvtlc.vtlã¨ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ライブラリã§ã‚ã‚‹ rt.bin ã¯åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã« ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚rvtlc を使ã†å ´åˆã¯ rvtlcã®å†…部ã«rt.bin ㌠組ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ãŸã‚ã€rvtlcå˜ç‹¬ã§ä½¿ç”¨ã§ãã¾ã™ã€‚
jun@ubuntu910:~/rvtlc-1.02$ rvtl rvtlc.vtl - mycode.vtl
カレントディレクトリ㫠mycode.elf ã¨ã„ã†ãƒ•ァイルãŒã§ãã¾ã™ã€‚ ã“れã¯å®Ÿè¡Œå¯èƒ½ãªãƒ•ァイルã«ãªã£ã¦ã„ã¦ã€./mycode.elf ã¨ã—㦠実行ã§ãã¾ã™ã€‚
mycode.vtl を次ã®å†…容ã®ãƒ•ァイルã¨ã—ã¾ã™ã€‚
100 "My first program." / 110 #=-1
mycode.vtl をコンパイルã—ã¾ã™ã€‚
jun@ubuntu910:~$ rvtlc mycode.vtl rvtlc : rvtl compiler v.1.02 2010/03/03 (C) Jun Mizutani read 2 lines Get library 5288bytes from compiler. file : mycode.elf 5630 bytes header size 128 library size 5288 code size 104 code starts from 0x080494A8 code ends at 0x0804950F Source Lines 2 Source Labels 0 File Name mycode.elf File Size 5630 heap size free : 697260 / 1048576 bytes To check code, run : objdump -d --start-address=0x080494A8 mycode.elf time:0.000353sec
5630ãƒã‚¤ãƒˆã®å®Ÿè¡Œãƒ•ァイル㌠3.5msec ã§ä½œæˆã§ãã¾ã—ãŸã€‚ 最近㮠PC ã§ã¯1ç§’é–“ã«3万行程度ã®é€Ÿåº¦ã§ã‚³ãƒ³ãƒ‘イルå¯èƒ½ã§ã™ã€‚
ã“ã® mycode.elf 実行ã—ã¦ç¢ºèªã—ã¾ã™ã€‚
jm:~/rvtlc$ ./mycode.elf My first program.
ã“ã® mycode.elf 㯠Linux ãŒå‹•作ã™ã‚‹ç’°å¢ƒãªã‚‰ã°ã©ã®PCã§ã‚‚実行ã§ãã¾ã™ã€‚ objdump -d --start-address=0x080494A4 mycode.elf を実行ã™ã‚‹ã¨ã‚³ãƒ³ãƒ‘イル ã•れãŸãƒ•ァイルを逆アセンブルã§ãã¾ã™ã€‚
コンパイラã®ã‚³ãƒ³ãƒ‘イル方法
rvtlc ã¯Linuxã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã®ç¨®é¡žã«ã‹ã‹ã‚らãšå‹•作ã—ã¾ã™ãŒã€ rvtlc ã‚’æ”¹é€ ã™ã‚‹ãªã©ã€rvtlc自身をコンパイルã™ã‚‹ã«ã¯ rvtl ã®ã‚¤ãƒ³ã‚¿ãƒ¼ プリタã§ã‚ã‚‹ rvtl-3.04 以é™ã‚’インストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
cd rvtlc-1.02 make
ã€å®Ÿè¡Œä¾‹ã€‘
jun@ubuntu910:~/rvtlc-1.02$ make rvtl rvtlc.vtl runq.vtl - rvtlc.vtl rvtlc : rvtl compiler v.1.02 2010/03/03 (C) Jun Mizutani read 2241 lines Get library 5764 bytes from 'rt.bin'. file : rvtlc.elf 47306 bytes Change Permission header size 128 library size 5288 code size 41780 code starts from 0x080494A8 code ends at 0x080537DB Source Lines 2241 Source Labels 164 File Name rvtlc.elf File Size 47306 heap size free : 610180 / 961496 bytes To check code, run : objdump -d --start-address=0x080494A8 rvtlc.elf time:1.226030sec mv rvtlc.elf rvtlc
コンパイルã—ã¦ã§ããŸã‚³ãƒ³ãƒ‘イラ㧠rvtlc.vtl を実際ã«ã‚³ãƒ³ãƒ‘イルã—ã¦ã¿ã¾ã™ã€‚
jun@ubuntu910:~/rvtlc-1.02$ ./rvtlc rvtlc.vtl rvtlc : rvtl compiler v.1.02 2010/03/03 (C) Jun Mizutani read 2241 lines Get library 5288bytes from compiler. file : rvtlc.elf 47306 bytes header size 128 library size 5288 code size 41780 code starts from 0x080494A8 code ends at 0x080537DB Source Lines 2241 Source Labels 164 File Name rvtlc.elf File Size 47306 heap size free : 697260 / 1048576 bytes To check code, run : objdump -d --start-address=0x080494A8 rvtlc.elf time:0.068122sec
自分自身をコンパイルã§ãã‚‹ã“ã¨ã‚’確èªã§ãã¾ã™ã€‚コンパイル速度も20å€ è¿‘ã高速ã«ãªã‚‹ã®ãŒç¢ºèªã§ãã¾ã™ã€‚
rvtlc-1.02ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ç§»å‹•ã—ã€make ã§rvtlc.vtl ã¯ã‚³ãƒ³ãƒ‘イル ã•れã€rvtlc.elf ã¨ã„ã†å®Ÿè¡Œãƒ•ァイルãŒå‡ºæ¥ä¸ŠãŒã‚Šã¾ã™ã€‚rvtlc 㯠ã“ã†ã—ã¦ä½œæˆã—㟠rvtlc.elf をリãƒãƒ¼ãƒ ã—ãŸã‚‚ã®ã§ã™ã€‚
ランタイムライブラリã®ä½œæˆæ–¹æ³•
ランタイムライブラリã®ã‚¢ã‚»ãƒ³ãƒ–ルã«ã¯ rvtl-3.04 㨠nasm ㌠インストールã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
cd rvtlc-1.02/rtl_source make
を実行ã™ã‚‹ã¨ã€rt.bin ãŒã§ãã¾ã™ã€‚make install ã™ã‚‹ã¨ rt.bin 㯠rvtlc-1.02直下ã«ã‚³ãƒ”ーã•れã¾ã™ã€‚
rvtlcã®å‡ºåŠ›ELFãƒã‚¤ãƒŠãƒªã®ãƒ¡ãƒ¢ãƒªãƒžãƒƒãƒ—
: : +---------------------------------------+ 0x08048000 .text | ELF Headeré ˜åŸŸ | +---------------------------------------+ 0x08048080 | ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ–ãƒ©ãƒªé ˜åŸŸ | +---------------------------------------+ | ã‚³ãƒ¼ãƒ‰é ˜åŸŸ 最大350KB | | | +---------------------------------------+ : : +=======================================+ 0x080A0000 .bss | ランタイムライブラリ作æ¥é ˜åŸŸ 16KB | +---------------------------------------+ 0x080A4000 | å¤‰æ•°é ˜åŸŸ 128ワード 1KB | +---------------------------------------+ | 変数スタック 1024ワード 4KB | +---------------------------------------+ : : +---------------------------------------+ & | ãƒ’ãƒ¼ãƒ—é ˜åŸŸ 256KB å®Ÿè¡Œæ™‚ã«æ‹¡å¼µå¯èƒ½ | : : | | +---------------------------------------+ * : : | ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸ | +---------------------------------------+
rvtlcã®æ–‡æ³•ã¨rvtl-3.04ã¨ã®é•ã„
rvtl-3.04 ã¨åŒã˜ã§ã™ã€‚rvtlã®ã‚³ãƒžãƒ³ãƒ‰ã®ã†ã¡ã‚¤ãƒ³ã‚¿ãƒ—リタ専用ã®ã‚³ãƒžãƒ³ãƒ‰(編集コマンドç‰)ã¨çµ„ã¿è¾¼ã¿ã‚³ãƒžãƒ³ãƒ‰ã®ã†ã¡ã‚·ã‚§ãƒ«ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã‚‚ã® |cd,|ls,|md,|mv,|rd,|cw,|rm,|mo,|um,|sy,|cr,|ex,|pv,|so,|sf ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。
|ca, |cm, |zz ã¨ãƒ•レームãƒãƒƒãƒ•ァ関連コマンドã¯ä½¿ç”¨ã§ãã¾ã™ã€‚
foræ–‡ã®çµ‚了æ¡ä»¶ã¨åˆ¶å¾¡å¤‰æ•°ã®å€¤ã¯çµ‚了時ã«ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚増分ãŒ1より大ãã„å ´åˆã«ã¯æ³¨æ„ã—ã¦ãã ã•ã„。
文法ã®è©³ç´°ã¯ https://www.mztn.org/rvtl/rvtl.htmlã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„。
ライセンス
ã“ã®ã‚½ãƒ•トã¯ãƒ•リーソフトウェアã§ã™. GNU General Pulic Licenceã«ã—ãŸãŒã£ã¦è‡ªç”±ã«ä½¿ç”¨ï¼Œé…布,改変ã—ã¦é ‚ã„ã¦ã‹ã¾ã„ã¾ã›ã‚“。GNU General Pulic Licence ã®è©³ç´°ã¯COPYINGã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„.GNU General Pulic Licence ã®æ—¥æœ¬èªžè¨³ã¯ gpl.text ã§ã™.著作権ã¯ç§(æ°´è°· ç´”, mizutani.jun@nifty.ne.jp)ãŒä¿æœ‰ã—ã¦ã„ã¾ã™ã€‚本ソフトウェアã«ã‚ˆã£ã¦ç”Ÿã˜ãŸæå®³ã«ã¤ã„ã¦è‘—作者ã¯è²¬ä»»ã‚’è² ã„ã¾ã›ã‚“。ã¾ãŸã€è‘—作者ã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã®ç¾©å‹™ã‚’è² ã„ã¾ã›ã‚“。