データボックスコンパイラは、 コンパイラと同様に開発用のマシン(OS)で動作するものです。 B-right/V 上では使用できません。
databox [-b][-n] [-l] [-s] 入力ファイル名 [出力ファイル名]
*.lst
)
(入力ファイル名).lst
<データタイプ指定> <データ番号指定> <データ指定> <データ番号指定> <データ指定> : : 上記の繰り返し
-n
オプション指定の場合は<データ指定>のみとなります。
'--' 以降の文字は行末までコメントとみなして読み飛ばします。
空白、制御文字(改行、タブ含む)、','、 ';'、'('、')'、'{'、'}'
はすべて空白と見なされます。
行の区切りはコメントの終了以外の特別の意味は持ちません。
% の後にデータタイプを式(後述)で指定します。
その後に属性を指定します。
-n オプション指定の場合はデータタイプ指定があってはいけません。
例: % 1 0
# の後に、データ番号、ユーザー情報を式(後述)で指定します。 -n オプション指定の場合はデータ番号指定はあってはいけません。
例: # 1 0 0
# 指定の直後から、次の % または # までデータとみなします。
データ項目としては、文字列と式があります。
" で囲まれた EUC 漢字文字列で、TRON コードに変換されます。
最後の " の直後に数字が続く場合は、その数字は文字数を示し、 文字数に満たない場合は 0 がパッドされます。
\n, \f, \t, \r, \b | 制御コード(上位バイトは 0) |
\(8 進数 3 桁まで) | 任意のコード |
\x(16 進数 4 桁まで) | 任意のコード |
半角文字(英数字)の場合は、上位バイトに 0 がパッドされ、 WARNING がでます。
例: "漢字文字列\0" "図形"16 -- "図形"の後に 14 個の 0 が入る
' で囲まれた ASCII 文字列。EUC 漢字文字列は そのままとなり、エンディアンの変換は行われません。 奇数文字数の場合は、最後にバイト 0 がパッドされます。
最後の ' の直後に数字が続く場合は、その数字は文字数 / 2 を示し 文字数に満たない場合は 0 がパッドされます。
\n, \f, \t, \r, \b | 制御コード |
\(8 進数 3 桁まで) | 任意のコード |
\x(16 進数 4 桁まで) | 任意のコード |
例: 'ASCII' -- 最後にバイト 0 がパッドされます。 'TEXT'16 -- 'TEXT'の後に 28 個のバイト 0 が入ります
例: `□□□□□□■■□□□□□□□□` -- 0x03 0x00
$CBMP(compac planes pixbits rowbyte rect data) で CBMP 形式の
データを生成します。
data は ■□ の並びで指定する。■は黒に、□は白に変換されます。
planes == 1
, pixbits == 0x808
,
comapc == 0
以外のデータは処理できません。
データ要素、または任意個のデータ要素をオペレータで連結したものです。
オペレータは、'+' '-' '*' '/' で、左から順番に演算されます。 式中に空白等の区切り文字があってはいけません。
式のデータ長は、BYTE(8bit)、WORD(16bit)、LONG(32bit)のいずれかで、 式の結果は式中のデータ要素で最も長いデータ長になります。
例: 0x100H+0x10Y -- 0x110 (WORD) 128/2L -- 64 (LONG)
<数値> | BYTE/WORD/LONG (BASE に従う) |
<数値>Y | BYTE( 8ビット) |
<数値>H | WORD(16ビット) |
<数値>L | LONG(32ビット) |
数値は、以下の表現が可能です。
<10 進数字列> | 10 進数 |
0x<16 進数字列> | 16 進数 |
0<8 進数字列> | 8 進数 |
<シンボル> | シンボル値(BYTE/WORD/LONG) BYTE/WORD/LONG はシンボルの定義値による |
<シンボル>:Y | シンボル値(BYTE) |
<シンボル>:H | シンボル値(WORD) |
<シンボル>:L | シンボル値(LONG) |
( <シンボル>:W | シンボル値(WORD) ) |
英字('_'を含む)で始まる最大 16 文字までの英数字のシンボルです。 最大 1000 個です。
シンボルにはグローバルシンボルと、ローカルシンボルがあります。
シンボルの値の再設定は可能であるが、WARNING がでます。
..<シンボル> とした場合は、WARNING はでません。
例: .Global = 0x1111L % 1 0 # 1 0 0 Global -- 0x1111 0x0000 Global:W-1 -- 0x1110 .offset: offset -- 0x0006 #2 0 0 offset:L -- 0x0004 0x0000 .offset:
シンボルの値の前方参照は可能ですが、シンボルがまだ未定義の場合、 データ長は BASE の設定にしたがった長さと見なすため、 シンボルの値のデータ長が異なるときには、 明示的に表記する必要があります。
例: A undef .A: .undef = 10L
この場合、A の値は不正になるので、以下のように記述する必要があります。
A: undef:L -- または undef+0L など .A: .undef = 10L
例: .BASE = 16 0ffff 0aaaa 5555 -- 16 進数(WORD) .BASE = 0 5555 -- 10 進数(WORD) .BASE = 16L 0ffff 0aaaa 5555 -- 16 進数(LONG) .BASE = 0L 5555 -- 10 進数(LONG)
例: OFFSET+2 -- "文字"へのオフセット(WORD) "文字" OFFSET+4L -- "文字"へのオフセット(LONG) "文字"
例: [00]はパディング .ALIGN = 1 0000 01 .p01: 1Y 0001 01 .p02: 1Y .ALIGN = 2 0002 01 [00] .p03: 1Y 0004 01 [00 00 00] .p04: 1Y .ALIGN = 4 0008 01 .p05: 1Y .ALIGN = 1 0009 01 .p06: 1Y
PTR_DATA | 1 |
PICT_DATA | 2 |
PAT_DATA | 3 |
BMAP_DATA | 4 |
FIG_DATA | 5 |
TEXT_DATA | 6 |
PARTS_DATA | 7 |
MENU_DATA | 8 |
GMENU_DATA | 9 |
PANEL_DATA | 10 |
USER_DATA | 64 |
先頭にインデックス部の内が、16 進数で出力されます。
データ部は、ソース行の直後に対応するデータが 16 進数で出力されます。
データ部のアドレスは、データ部の先頭を 0 としたアドレスで、
インデックス部はふくまれません。