# b2c2 BASIC言語風の独自のプログラミング言語(?)のソースコードファイルからCASL2のソースコードファイルを生成する - CASL2/COMET2は「試験で使用する情報技術に関する用語・プログラム言語など」ver2.3の情報を元にしている - 1度に変換できるのは1ファイルのみ。複数のソースファイルがあるときはそれぞれ個別に変換する必要がある - BASICソースコードファイルは1ファイルにつき1つのプログラム(サブルーチン)を 記述する - BASICソースコードファイルはUTF-8(BOMなし)で文字エンコードされている必要がある - 出力されるCASL2ソースコードはUTF-8(BOMなし)で文字エンコードされる - 文字数の埋め込みがある場合はUnicodeスカラ値の個数を文字数として扱う - 拡張子`.cas`はCASL2ソースコードとして扱う。それ以外の拡張子はBASICソースコードとして扱う ``` USAGE: b2c2 -src [OPTIONS] OPTIONS: -dst 生成されるファイルの出力先ディレクトリを指定する -remove-nop 生成されるCASL2ソースコードからNOP行を除去しNOPにつけられたラベルを整理する -remove-unreferenced-label 生成されるCASL2ソースコードから未使用ラベルを除去する -remove-comment 生成されるCASL2ソースコードからコメント行を除去する -try-make-snippets 生成されるCASL2ソースコードの重複コードをサブルーチン化することで行数を減らすことを試みる -split-subroutines 生成されるCASL2プログラムで使用される組み込みサブルーチンを分離し外部プログラムとして出力する -program-name 生成されるCASL2プログラムの名前を指定する -statistics 生成されるCASL2ソースコードの統計情報ぽいものを出力する -run 生成されるCASL2プログラムに対してテスト実行もする TARGETにはCASL2/BASIC/NONSTEPのいずれかを指定する CASL2 .. CASL2のコード単位でステップ実行する BASIC .. BASICのコード単位でステップ実行する (生成されるCASL2プログラムにステップ実行用のコードが挿入されます) NONSTEP .. プログラムの実行だけをします (ステップ数の制限がありません、無限ループのバグがある場合は止まりません) ``` ------------------------------------------------------------------------------- ## テスト実行(デバッグモード) コマンドライン引数で`-run `を追加することでデバッグモードとして起動する ``には`CASL2`,`BASIC`,`NONSTEP`のいずれかを指定する `BASIC`を指定した場合、BASICソースファイルに対する`-remove-nop`と`-remove-comment`は変換の都合上のため十分な除去を行わない(ステップ実行のための目印のコードが挿入されるために起きる) `NONSTEP`を指定した場合は生成されるCASL2ソースコードのファイル保存は行われない `NONSTEP`を指定した場合は関連するプログラムの自動解決がまず試みられる(CASL2ソースコードが優先的に選択される) `-remove-nop`,`-remove-unreferenced-label`,`-remove-comment`,`-try-make-snippets`,`-split-subroutines`の5つのコマンドライン引数はデバッグモードで読み込まれる全てのBASICソースファイルに適用される ### 共通仕様 - 基本的には「試験で使用する情報技術に関する用語・プログラム言語など」ver2.3の仕様を考慮 - メモリサイズは65536語(1語=16ビット) - OSの実装はなくメモリ上に相当する領域もない - プログラムは番地#0100から配置される - SPは番地#FFFFから始まる - スタック領域のサイズは8192語 - 番地#FFFFから8192語の範囲の外にSPがある場合はスタックオーバーフローとして実行停止 - SVC命令は実行後に全てのGRとFRの値が不定 - RPUSH,RPOP,IN,OUTはマクロ命令として展開されてメモリに配置される - IN命令は`SVC 1`とGR0~GR7の退避復帰命令で構成される - OUT命令は`SVC 2`とGR0~GR7の退避復帰命令で構成される - PRが番地#FFFE以降を指して実行しようとするとエラーとして実行停止 - シフト演算で17以上のシフトをした場合は値は0になる - 文字定数の全角文字は対応する半角文字があれば半角に変換して処理される - 文字定数の全角文字で対応する半角文字が無い場合はUnicodeスカラ値の下位8ビットが配置される - チルダはオーバーラインの文字に変換される - かな文字はJIS X 0201の半角カナのコードの値としてメモリに配置される - OUT命令においてJIS X 0201の半角カナのコードはUnicodeの半角カナの文字として出力される - OUT命令において図形文字でも半角スペースでもない文字はUnicodeの\\uFFFDの文字が出力される - BASICステップ用の命令は2語で構成され、1語目は#E000、2語目はBASICコードの対応ID ### CASL2デバッグ #### デバッガコマンド一覧 ``` add-dc