CASL II 実行トレース
命令を実行するたびに、ソース行・レジスタ・フラグ・メモリーアクセスを表に記録するVS Code拡張の初期版です。
設計は 仕様書 を参照してください。
起動
VSIXからインストール
VS Codeの拡張機能ビューの「…」から「VSIXからのインストール…」を選び、casl2-trace-0.1.10.vsixを指定します。
インストール後に.casファイルを開き、「CASL II: 実行結果を表で表示」を実行してください。
識別子はao81.casl2-traceです。0.1.9以前(識別子assembly-local.casl2-trace)を入れている場合は、別の拡張機能として扱われるため、先に古い方をアンインストールしてください。
開発用の起動
- VS Codeでこの
extension フォルダーを開く。
- F5で「CASL II 拡張の開発」を開始する。
- 新しく開いた拡張開発ホストで
sum.cas または overflow.cas を開く。
- エディター右上の実行ボタン、またはコマンドパレットの「CASL II: 実行結果を表で表示」を実行する。
デスクトップの開発用起動にはビルドは不要です。Web版とVSIXの作成には pnpm install --frozen-lockfile を実行してください。起動設定はextensionフォルダーを開くことを前提にしています。
未保存の編集内容も実行対象です。入力はローカルで処理し、外部サイトに送信しません。
表の読み方
- 1行が1命令の実行。ループでは同じソース行が繰り返し現れます。
- PRは実行した命令のアドレス、その他の状態は実行後の値です。
- 二重下線が更新、点線が参照。両方なら更新表示になります。ツールチップでも確認できます。
- メモリー欄には読出し、または書込み前→後を表示します。
- 値は符号付き10進数で表示し、16進数/2進数に切り替えられます。アドレスは16進数のままです。
- 横スクロールで全列を確認できます。結果は実行時点の記録です。
対応範囲
単一のSTART~END、ラベル(英大文字で始まる英大文字・数字8文字以内)、整数DC、DS、数値リテラル。
LAD、LD、ST、ADDA、ADDL、SUBA、SUBL、AND、OR、XOR、CPA、CPL、JMI、JNZ、JZE、JUMP、JPL、JOV、NOP、最上位RET。
命令・ラベル・レジスタ名は大文字で入力してください。
現時点ではOUT、文字列DC、シフト、CALL、スタック命令、IN以外のマクロ、SVC、複数プログラム、ステップ操作、ブレークポイントは未対応です。
対応外の命令は行エラーにします。全CASL II仕様への適合を保証する完成版ではありません。
汎用レジスタ・FR・メモリーは0初期化、SPは0000、ロード先頭は1000です(この環境独自の初期化規約)。
自己書換え命令は検出して停止します。最大2,000命令で停止し、上限到達と正常終了を区別します。
開発・検証
Node.jsで node --test test/*.test.js を実行します。
node scripts/preview.js で実際のtrace-variables.casの実行結果を使った preview.html を生成できます。
プレビューはVS Codeと同じ描画処理を使いますが、拡張ホストの動作確認の代わりにはなりません。
src/core.js: アセンブル、命令実行、履歴データ
src/render.js: Webview用の表の描画
src/extension.js: VS Codeコマンドと診断
test/: 算術、フラグ、分岐、エラー、描画の検証
初期版は追加依存なしのJavaScriptで構成しています。機能拡充時にTypeScriptへ移行可能です。
VSIXの再作成にはNode.jsとpnpmを用意し、pnpm install --frozen-lockfile、pnpm run packageを実行します。
@vscode/vsceはパッケージ作成専用の開発依存で、拡張の動作時には不要です。
改行はCRLFで統一します。
0.1.1の表示変更
- 画面上部の説明を省き、結果表を広く表示。
- 実行中に参照・更新されなかったGR列は非表示。
- DC/DSのデータラベルを変数表に表示(アドレス・語数・初期値・終了時の値)。
- 変数表と9語以上の配列は折り畳み可能。SPの初期値は0000。
列揃え(0.1.2)
.casファイルで Shift+Alt+F(ドキュメントのフォーマット)、または右クリック/コマンドパレットの「CASL II: 列を揃える」を実行します。
ラベル・命令・オペランド・行末コメントを空白で整列します。標準の開始位置は1・9・17・41列目で、長い項目に合わせて後続の列を広げます。
文字列内の空白・引用符・セミコロン、コメント、空行は保持します。解釈できない行は変更しません。改行はCRLFです。
保存時にも整形したい場合は、VS CodeのCASL II用設定でフォーマッターにao81.casl2-traceを選び、Format On Saveを有効にしてください。
IN(0.1.3)
IN BUF,LENに到達すると入力欄が開きます。Enterで確定、空欄のEnterは0文字、Escは実行中止です。入力欄の停止アイコンでEOFを渡すと、LENにFFFF(-1)を格納します。
BUFに256語、LENに1語の重複しない領域を確保してください。例はexamples/input.casです。
半角英数字・記号・半角カナを入力できます。1文字を1語の下位8ビットに格納し、256文字以降は無視します。入力されなかった領域は保持します。数字も文字として入り、自動で数値には変換しません。
GRとSPは保持し、FRはこの環境の規約として0にします(CASL IIの仕様ではIN後のFRは不定)。
履歴はINマクロ全体で1行です。この初期版では専用SVCサービス(FFF0)とアセンブル時の入力先情報で処理するため、機械語単体の外部処理系への移植は対象外です。一般のSVC命令は未対応です。
負数(0.1.4)
LAD GR1,-3でGR1に-3、LAD GR1,-1,GR1でGR1を1減らせます。
DC -3、LD GR1,=-3も使用できます。既定の10進数表示では-3、16進数に切り替えるとFFFDです。
負のアドレス定数はこの環境の拡張として16ビットの2の補数に変換します。範囲は-32768~65535、指標修飾後のアドレスは下位16ビットを使います。
LD GR1,-3はFFFD番地のメモリーを読みます。値-3を読み込む場合はLD GR1,=-3です。
INに入力した-3は2文字の文字列として格納します。数値への変換処理はプログラム側で行います。
例: examples/negative.cas。
変数の追跡(0.1.8)
命令の右にA・B・TOTALなど複数変数を並べ、実行後の値を表示します。書込みがあるセルだけ「前 → 後」を強調し、保持された値は控えめに表示します。同値を書いた場合も書込みとして示します。
- 初回は先頭8変数を自動表示(配列は要素0)。「変数・配列を追加」で最大12列まで追加できます。
- 列名の×で外します。同じ配列の複数要素も同時に追跡できます。
- 「変数を更新した命令」で書込み行だけを表示。「次の更新」「前の更新」で表示中の変数が更新される行に移動します。
- 行を選ぶと下部に、その時点の表示変数の値をまとめて表示します。矢印ボタンや履歴内の上下キーで前後に移動できます。
- 下部の「配列・変数の詳細」で変数を選び、要素をクリックすると列に追加できます。32語ずつのページ表示です。
- GRは初期表示。PR・FR・SP・メモリーはチェックで表示できます。使われなかったGRは表示しません。
- 横スクロール時もステップ番号と命令は固定します。
- 「更新」で再実行しても、表示変数・数値形式・絞り込み・列の表示設定は保持します。履歴選択は初期状態に戻し、削除・縮小された変数の無効な列は除きます。
履歴の閲覧はプログラムを再実行しません。サンプルexamples/trace-variables.casで、Aの3→2→1→0とTOTALの0→3→5→6を比較できます。
結果画面から更新(0.1.7)
結果画面上部の「更新」で、元の.casファイルの最新内容を再実行します。未保存の編集も対象です。別のエディターを開いていても元のファイルを使い、同じ結果画面を置き換えます。履歴の選択は初期状態に戻ります。INには再度入力します。更新に失敗した場合は前回結果を保持し、その旨とエラーを表示します。実行中の重複実行は抑止します。HTMLプレビューでは更新ボタンは無効です。
publisher変更(0.1.10)
Marketplaceへ公開するため、publisherをassembly-localからao81に変更しました。拡張機能の識別子はao81.casl2-traceになります。
動作は0.1.9と同じです。フォーマッター設定などで旧識別子を指定している場合は、新しい識別子に設定し直してください。
Web対応(0.1.9)
デスクトップ用の main とWeb用の browser を同じVSIXに収録します。
Web版は外部サーバーでCASL IIを実行せず、ブラウザ内で実行・入力・整形・履歴表示を処理します。
pnpm run build:web: Web用コードを dist/web/extension.js にバンドル。
pnpm test: Webバンドルを作成し、既存テストとNode.js APIを利用できない環境を模したWeb実行テストを実行。
pnpm run package: デスクトップ/Web共通のVSIXを作成(Webビルドを自動実行)。
vscode.devでの開発用導入は、公式のWeb拡張手順に従い、ビルド済みextensionフォルダーをHTTPS・CORS対応サーバーで配信して、コマンドパレットの Developer: Install Extension From Location... にURLを指定します。
https://code.visualstudio.com/api/extension-guides/web-extensions#test-your-web-extension-in-vscodedev
Marketplaceには未公開です。GitHub ReleaseへのVSIX追加だけでMarketplace検索に表示されるわけではありません。
mainにこのバージョンをプッシュすると、GitHub Actionsがテストとパッケージ作成後、v<package.jsonのversion> Releaseを作成し、VSIXを添付します。同じバージョンのReleaseが既にある場合は何もしません。リリース作成者はGitHub Actionsです。
vscode.devでの導入制限(2026-10-09確認)
実際のvscode.devで「Developer: Install Extension From Location...」を試したところ、
GitHub RawのURLからの導入に失敗しました。コンソールにはmanifest取得のFailed to fetchが記録され、
ページのContent-Security-Policyのconnect-srcにはraw.githubusercontent.comとcdn.jsdelivr.netが含まれていませんでした。
配信元のHTTP 200とCORS許可だけでは導入できません。
以前ここで案内していたjsDelivr/GitHub RawのURLは、通常のvscode.dev向けの導入手順として使用しないでください。
同じ画面のコマンドパレットではVSIXのインストールコマンドも見つかりませんでした。
Web用バンドルは作成済みですが、通常のvscode.devへの導入・実行成功は未確認です。
通常配布にはVisual Studio MarketplaceへのWeb拡張公開が必要です(現在未公開)。
拡張のpublisherはao81です(0.1.10でassembly-localから変更)。Marketplaceのpublisher IDとpackage.jsonのpublisherが一致していないとアップロードできません。
公式のlocalhostからの開発用導入は別途ローカルHTTPSサーバーが必要であり、ブラウザだけで完結する手順ではありません。
ビルド済みファイルは残してあります。Web版更新時には pnpm run build:web を実行し、
git add -f dist/web/extension.js で生成物もコミットしてください。