2024-02-11 12:41 — asano
カテゴリー:
一応今回をもってSC61860 & SC62015のシリーズは最後となります。
前回予告したようにテストデータ作成についてです。
ASにはtestsディレクトリ以下にソース(*.asm)と期待値(*.ori)を配置しておいてmake test
を実行すると自動テストを行なう機能があります。特にSC62015のようなアドレッシングモードの複雑なものでは新たなモード追加の際に以前のものを壊すリスクがそれなりにあるので、追加のたびに全モードをテストできることは重要です。
で、このテスト用データの作成なのですが......
網羅性の高いテストソースの作成はそれだけで大きなテーマではありますが今回はそこには触れません。
もう一方の期待値のファイルはソースをハンドアセンブルするだけなのですが、(バイナリファイルなこともあり)意外に面倒なものです。
当初はソースを開発中のASでアセンブルし、リスティングを資料と比較してOKならその時の出力を利用する、という方法を取っていました。この方法は人間の特性的に見落としリスクが高くあまり好ましい方法ではありませんが、一度OKだったものを壊していないかという点では意味があります。IM6100対応の時のように大幅な書き換えをした際には安心感があります。
RX対応した時は少し方法を変えました。ソースに1行追加したら対応するコードをバイナリエディタで追加してmake test
するというものです。
これでテストファーストが実現しましたが、バイナリを直接編集しなくてはならず手間がかかります。
そして今回、SC61860対応からは以下のような方法を試してみました。
まずt_61860.in
として次のようなファイルを作ります。
CPU SC61860
ORG $0000
ADB
# 14
ADCM
# C4
これをAWKで書いたスクリプトに通し、「#」の行を抜いたソースと、「#」の行に書かれた16進値をバイナリに変換した期待値ファイルを生成します。
JR
命令などの相対アドレスが楽になりそうですが、スクリプトが面倒になるんで今回はパスしました。
これで久々にASをいじった話は終わりです。次回は最近出てきたICの予定です。
コメント
AWK
30年以上前のMS-DOSで書いたスクリプトでもそのまま動く安心感。shやPerlでもかなわない。
Re: AWK
DOSの頃はJGAWKとかお世話になりました。
30年間あまり発展していないという面もあるかも。shはさまざまなコマンドを呼び出す前提だからUNIX系以外の環境だと使いづらいですね。cygwinとかMinGWくらい周辺のコマンドが揃っていないと。
コメントを追加