ランタイムライブラリ
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 :
[前] [目次] [次]