このページの目次

ランタイムライブラリ

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 18977rvtl用フレームバッファ関連コード
rt.bin 5700ランタイムライブラリ-バイナリ
Makefile 397メイクファイル

機能一覧

rvtlcからランタイムライブラリは番号で参照されます。

No アドレス ラベル 機能
00 08048A36Init 初期化の一部
01 080481BCExit 終了
02 080481C3ExitN 終了
03 080481CCOutString 文字列出力
04 080481DBOutPString 文字列出力
05 080481E5OutAsciiZ 文字列出力
06 080481F1StrLen 文字列長取得
07 08048206OutChar 1文字出力
08 08048219OutChar4 4文字出力
09 08048237NewLine 改行出力
10 08048241BackSpace BackSpace出力
11 08048257PrintBinary 2進数出力
12 0804828BPrintOctal 8進数出力
13 080482ABPrintHex2 16進数2桁出力
14 080482AFPrintHex4 16進数4桁出力
15 080482B3PrintHex8 16進数8桁出力
16 080482B5PrintHex 16進数1桁出力
17 080482E0PrintLeftU 10進数出力(無符号左詰)
18 080482E7PrintLeft 10進数出力(左詰)
19 08048319PrintRight0 10進数出力(右詰0埋め)
20 08048321PrintRightU 10進数出力(無符号右詰)
21 0804832FPrintRight 10進数出力(右詰)
22 08048365InChar 1文字入力
23 0804837CInputLine0 1行入力
24 080483C7READ_LINE2 編集機能付1行入力 初期文字列指定
25 080483EFREAD_LINE3 編集機能付1行入力 入力先頭位置保存
26 080483F6READ_LINE 編集機能付1行入力
27 0804890DGET_TERMIOS TERMIOS取得
28 08048927SET_TERMIOS TERMIOS設定
29 08048956RESTORE_TERMIOS TERMIOS復帰
30 0804897DRealKey リアルタイムキー入力
31 080489BBWinSize ウィンドウサイズ取得
32 080489E5fropen ファイルオープン(読込み)
33 080489ECfwopen ファイルオープン(書込み)
34 08048A00fclose ファイルクローズ
35 08048A72sgenrand 乱数シード設定
36 08048AADgenrand 乱数取得
37 08048B7AGetTimed 時刻取得
38 08048B97USleep マイクロ秒スリープ
39 08048BB3ForkExec 子プロセス実行
40 08048D37GetString2 文字列取得
41 08048D56CopyString 文字列コピー
42 08048D8ENumInput 数値インプット
43 08048E25StringInput 文字列入力
44 08048E81GetArg 引数取得
45 08048EA6GetEnv 環境変数取得
46 08048ECCFileWrite ファイル出力
47 08048EF0FileSize ファイルサイズ取得
48 08048F1DFileRead ファイル入力
49 08048F52URL_Decode URLデコード
50 08048FB1DispFile ファイル表示
51 08048FE9FGetArg 文字列を複数のASCIIZ文字列に分解
52 08048FF9fbdev_open フレームバッファオープン
53 08049020fbdev_close フレームバッファ
54 0804902Efb_get_fscreen フレームバッファ情報取得
55 08049048fb_get_screen フレームバッファ情報取得
56 08049062fb_set_screen フレームバッファ設定
57 0804907Cfb_copy_scinfo フレームバッファ
58 08049093fb_map_screen フレームバッファ
59 080490DDfb_unmap_screen フレームバッファ
60 080490F3fb_get_colormap フレームバッファ
61 0804910Dfb_set_colormap フレームバッファ
62 08049125fb_test_colormap フレームバッファ
63 08049152fb_restore_sc フレームバッファ復帰
64 0804916Afb_restore_cmap フレームバッファ
65 080491A2LineDraw フレームバッファ 線描画
66 080492BADot フレームバッファ 点描画
67 08049303PatternTransfer フレームバッファ パターン転送
68 0804932CPatternTransfer2 フレームバッファ サイズ指定パターン転送
69 08049378MPatternTransfer フレームバッファ マスク指定パターン転送
70 080493CDPatternFill フレームバッファ 長方形塗りつぶし
71 080493FAFrameBufferFill フレームバッファ塗りつぶし
72 08049422MemCopy メモリコピー
73 08049440OpenFB フレームバッファオープン
74 08049476Oct2Bin 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 :

[前] [目次] [次]