ランタイムライブラリ
rvtlcでコンパイルされた実行ファイルは次のランタイムライブラリ(約5KB)をスタティックリンクします。
ランタイムライブラリのソース
ファイル名 | サイズ | 説明 |
---|---|---|
runtime.asm | 37908 | ランタイムライブラリ-ソース |
stdio.inc | 12431 | 数値、文字、文字列表示 |
vtllib2.inc | 41920 | 行編集 |
signal.inc | 2285 | シグナル関連宣言 |
mman.inc | 2044 | メモリマップ関連宣言 |
syscall.inc | 9383 | システムコール番号 |
fb.inc | 13629 | フレームバッファ用宣言 |
fblib.inc | 14223 | フレームバッファ用ライブラリ |
vtlfb2.inc | 18977 | rvtl用フレームバッファ関連コード |
rt.bin | 5700 | ランタイムライブラリ-バイナリ |
Makefile | 397 | メイクファイル |
機能一覧
rvtlcからランタイムライブラリは番号で参照されます。
No | アドレス | ラベル | 機能 |
---|---|---|---|
00 | 08048A36 | Init | 初期化の一部 |
01 | 080481BC | Exit | 終了 |
02 | 080481C3 | ExitN | 終了 |
03 | 080481CC | OutString | 文字列出力 |
04 | 080481DB | OutPString | 文字列出力 |
05 | 080481E5 | OutAsciiZ | 文字列出力 |
06 | 080481F1 | StrLen | 文字列長取得 |
07 | 08048206 | OutChar | 1文字出力 |
08 | 08048219 | OutChar4 | 4文字出力 |
09 | 08048237 | NewLine | 改行出力 |
10 | 08048241 | BackSpace | BackSpace出力 |
11 | 08048257 | PrintBinary | 2進数出力 |
12 | 0804828B | PrintOctal | 8進数出力 |
13 | 080482AB | PrintHex2 | 16進数2桁出力 |
14 | 080482AF | PrintHex4 | 16進数4桁出力 |
15 | 080482B3 | PrintHex8 | 16進数8桁出力 |
16 | 080482B5 | PrintHex | 16進数1桁出力 |
17 | 080482E0 | PrintLeftU | 10進数出力(無符号左詰) |
18 | 080482E7 | PrintLeft | 10進数出力(左詰) |
19 | 08048319 | PrintRight0 | 10進数出力(右詰0埋め) |
20 | 08048321 | PrintRightU | 10進数出力(無符号右詰) |
21 | 0804832F | PrintRight | 10進数出力(右詰) |
22 | 08048365 | InChar | 1文字入力 |
23 | 0804837C | InputLine0 | 1行入力 |
24 | 080483C7 | READ_LINE2 | 編集機能付1行入力 初期文字列指定 |
25 | 080483EF | READ_LINE3 | 編集機能付1行入力 入力先頭位置保存 |
26 | 080483F6 | READ_LINE | 編集機能付1行入力 |
27 | 0804890D | GET_TERMIOS | TERMIOS取得 |
28 | 08048927 | SET_TERMIOS | TERMIOS設定 |
29 | 08048956 | RESTORE_TERMIOS | TERMIOS復帰 |
30 | 0804897D | RealKey | リアルタイムキー入力 |
31 | 080489BB | WinSize | ウィンドウサイズ取得 |
32 | 080489E5 | fropen | ファイルオープン(読込み) |
33 | 080489EC | fwopen | ファイルオープン(書込み) |
34 | 08048A00 | fclose | ファイルクローズ |
35 | 08048A72 | sgenrand | 乱数シード設定 |
36 | 08048AAD | genrand | 乱数取得 |
37 | 08048B7A | GetTimed | 時刻取得 |
38 | 08048B97 | USleep | マイクロ秒スリープ |
39 | 08048BB3 | ForkExec | 子プロセス実行 |
40 | 08048D37 | GetString2 | 文字列取得 |
41 | 08048D56 | CopyString | 文字列コピー |
42 | 08048D8E | NumInput | 数値インプット |
43 | 08048E25 | StringInput | 文字列入力 |
44 | 08048E81 | GetArg | 引数取得 |
45 | 08048EA6 | GetEnv | 環境変数取得 |
46 | 08048ECC | FileWrite | ファイル出力 |
47 | 08048EF0 | FileSize | ファイルサイズ取得 |
48 | 08048F1D | FileRead | ファイル入力 |
49 | 08048F52 | URL_Decode | URLデコード |
50 | 08048FB1 | DispFile | ファイル表示 |
51 | 08048FE9 | FGetArg | 文字列を複数のASCIIZ文字列に分解 |
52 | 08048FF9 | fbdev_open | フレームバッファオープン |
53 | 08049020 | fbdev_close | フレームバッファ |
54 | 0804902E | fb_get_fscreen | フレームバッファ情報取得 |
55 | 08049048 | fb_get_screen | フレームバッファ情報取得 |
56 | 08049062 | fb_set_screen | フレームバッファ設定 |
57 | 0804907C | fb_copy_scinfo | フレームバッファ |
58 | 08049093 | fb_map_screen | フレームバッファ |
59 | 080490DD | fb_unmap_screen | フレームバッファ |
60 | 080490F3 | fb_get_colormap | フレームバッファ |
61 | 0804910D | fb_set_colormap | フレームバッファ |
62 | 08049125 | fb_test_colormap | フレームバッファ |
63 | 08049152 | fb_restore_sc | フレームバッファ復帰 |
64 | 0804916A | fb_restore_cmap | フレームバッファ |
65 | 080491A2 | LineDraw | フレームバッファ 線描画 |
66 | 080492BA | Dot | フレームバッファ 点描画 |
67 | 08049303 | PatternTransfer | フレームバッファ パターン転送 |
68 | 0804932C | PatternTransfer2 | フレームバッファ サイズ指定パターン転送 |
69 | 08049378 | MPatternTransfer | フレームバッファ マスク指定パターン転送 |
70 | 080493CD | PatternFill | フレームバッファ 長方形塗りつぶし |
71 | 080493FA | FrameBufferFill | フレームバッファ塗りつぶし |
72 | 08049422 | MemCopy | メモリコピー |
73 | 08049440 | OpenFB | フレームバッファオープン |
74 | 08049476 | Oct2Bin | 8進数文字列を数値に変換 |
ランタイムライブラリの構造
ランタイムライブラリは先頭にrvtlcの初期化コードへのジャンプ命令を持ち、その後にランタイムライブラリのサイズ(4バイトを単位とする)、各ライブラリルーチンのアドレスリスト、ライブラリのコード本体で構成されています。
ランタイムライブラリが使用するデータ領域は固定アドレス (0x080A000以降) に .bss セクションを配置しています。そのため、ランタイムライブラリのバイナリを 作成する場合には次のようにリンクしています。
ld -Tbss 0x080A0000 runtime.o -o rt.bin
runtime.asm の先頭部分を示します。ライブラリのコード本体は rvtlc のパッケージに含まれるランタイムライブラリのソースを参照してください。
align 4 _start: jmp main align 4 dd (main - $$ + 0x80)/4 ; main offset(word) dd Init dd Exit dd ExitN dd OutString dd OutPString dd OutAsciiZ dd StrLen dd OutChar dd OutChar4 dd NewLine dd BackSpace dd PrintBinary dd PrintOctal dd PrintHex2 dd PrintHex4 dd PrintHex8 dd PrintHex dd PrintLeftU dd PrintLeft dd PrintRight0 dd PrintRightU dd PrintRight dd InChar dd InputLine0 dd READ_LINE2 dd READ_LINE3 dd READ_LINE dd GET_TERMIOS dd SET_TERMIOS dd RESTORE_TERMIOS dd RealKey dd WinSize dd fropen dd fwopen dd fclose dd sgenrand dd genrand dd GetTime dd USleep dd ForkExec dd GetString2 dd CopyString dd NumInput dd StringInput dd GetArg dd GetEnv dd FileWrite dd FileSize dd FileRead dd URL_Decode dd DispFile dd FGetArg %ifdef FRAME_BUFFER dd fbdev_open dd fbdev_close dd fb_get_fscreen dd fb_get_screen dd fb_set_screen dd fb_copy_scinfo dd fb_map_screen dd fb_unmap_screen dd fb_get_colormap dd fb_set_colormap dd fb_test_colormap dd fb_restore_sc dd fb_restore_cmap dd LineDraw dd Dot dd PatternTransfer dd PatternTransfer2 dd MPatternTransfer dd PatternFill dd FrameBufferFill dd MemCopy dd OpenFB %endif dd Oct2Bin dd 0x90909090
ランタイムライブラリ呼び出し
ランタイムライブラリへのCALL命令を生成します。ランタイムライブラリ番号は対応するアドレスに変換されます。
13050 :---------------------------------------------------------- 13060 : call library 13070 : stack top:lib# 13080 : ex. +=12 !=^CallLib (PrintOctal) 13090 : 00 Init 25 READ_LINE3 50 DispFile 13100 : 01 Exit 26 READ_LINE 51 FGetArg 13110 : 02 ExitN 27 GET_TERMIOS 52 fbdev_open 13120 : 03 OutString 28 SET_TERMIOS 53 fbdev_close 13130 : 04 OutPString 29 RESTORE_TERMIOS 54 fb_get_fscreen 13140 : 05 OutAsciiZ 30 RealKey 55 fb_get_screen 13150 : 06 StrLen 31 WinSize 56 fb_set_screen 13160 : 07 OutChar 32 fropen 57 fb_copy_scinfo 13170 : 08 OutChar4 33 fwopen 58 fb_map_screen 13180 : 09 NewLine 34 fclose 59 fb_unmap_screen 13190 : 10 BackSpace 35 sgenrand 60 fb_get_colormap 13200 : 11 PrintBinary 36 genrand 61 fb_set_colormap 13210 : 12 PrintOctal 37 GetTimed 62 fb_test_colormap 13220 : 13 PrintHex2 38 USleep 63 fb_restore_sc 13230 : 14 PrintHex4 39 ForkExec 64 fb_restore_cmap 13240 : 15 PrintHex8 40 GetString2 65 LineDraw 13250 : 16 PrintHex 41 CopyString 66 Dot 13260 : 17 PrintLeftU 42 NumInput 67 PatternTransfer 13270 : 18 PrintLeft 43 StringInput 68 PatternTransfer2 13280 : 19 PrintRight0 44 GetArg 69 MPatternTransfer 13290 : 20 PrintRightU 45 GetEnv 70 PatternFill 13300 : 21 PrintRight 46 FileWrite 71 FrameBufferFill 13310 : 22 InChar 47 FileSize 72 MemCopy 13320 : 23 InputLine0 48 FileRead 73 OpenFB 13330 : 24 READ_LINE2 49 URL_Decode 74 Oct2Bin 13340 :---------------------------------------------------------- 13350 ^CallLib 13360 w=; 13370 ;=D>3 / "CALL <" ?=w ">" / 13380 +=$E8 !=^PutObj1 : call 13390 +=Obj[w+J] 13400 !=^PutAddr 13410 ] 13420 :
ランタイムライブラリ読込み
ランタイムライブラリ(rt.bin)はコンパイラの起動時にメモリ(配列Fの領域)に読み込まれます。その後、必要な部分をObj配列にコピーします。
12000 :------------------------------------------------- 12010 : ライブラリロード 12020 : F : ライブラリ先頭 12030 : G : ライブラリサイズ 12040 :------------------------------------------------- 12050 ^LibRead 12060 +bz 12070 b=z z=z+256 12080 {=F 12090 b*="rt.bin" 12100 )*=b : read library 12110 G=} 12120 -zb 12130 ] 12140 :
[前] [目次] [次]