2024年11月15日金曜日

必要に迫られて自作したツールソフト(クロスアセンブラ)の紹介(第3回)

 必要に迫られて自作したツールソフトのうちのクロスアセンブラを手直ししました

4月25日のブログ「必要に迫られて自作したアセンブラ等のツールソフトの紹介(第2回)」で紹介しましたソフトのうちのクロスアセンブラのバグを修正しましたので、公開します。

修正したバグはFCB疑似命令のオペランドの解釈部です。ごく普通の書き方をしていればよいのですが、時に、式の解釈を間違えたりする場合があったのです。

例えば、10月10日のブログ「自作の6809SBCにOS-9を移植する試み(その1 SBCの製作)」にも書きましたように、assist09をアセンブルした際に誤変換が発生したのですが、それはFCBのオペランドとして「'A」と「'A'」の両方の書式に対応するように修正したために発生したバグでした。

FCB疑似命令の解釈ルーチンは6809用、6800用、6801用、6303用の全てのクロスアセンブラに共通ですので、この際、まとめて修正することにしました。

この解釈ルーチンは、最初は単純な書式のみに対応したものを作成し、必要に応じて徐々に拡張してきたものでしたが、ちょっと複雑な形のオペランドはどうしても式として解釈する必要があります。現在のものの拡張では括弧を含めた式にも対応させるのは無理と感じましたので、思い切って全面的に書き換えることとしました。

以前、ちょっとした電卓プログラム的なものを作成したことがありましたので、それを手直しして使うことにしました。式中に「$AB」のような16進数や「’C」のような文字コードが入っても大丈夫で、もちろん括弧も使えます。


修正したクロスアセンブラによる結果

6303AsmWin.exeによるアセンブル中の画面を示します。
FCB疑似命令の処理ルーチンは他のアセンブラ全てに共通ですので、全く同じ結果になります。

6303AsmWin.exeでアセンブル


テストデータとして使用したのは下記のようなコードです。

テストデータ



アセンブル結果です。

6303AsmWinによる結果


0014行はFCBのみでオペランドがありませんので当然、エラーが出ています。
その他の行では、「’A’」や「’A」のような書き方が混在していても正しく変換されています。
下から2行目はassist09からの引用ですが、「',」という書き方でも正しく変換されていますので、それを最下行のようにあえて「','」のように書き換える必要がありません。
注意点ですが、FCBのオペランドですので計算結果が$FFを超えた場合の上位桁は無視されます。

ちなみにアークピットさんのX6801では以下のような結果になりました。

X6801による結果


計算結果のオーバーフローに対してはちゃんとwarningが出ています。

書式として「'A'」のように書くことになっていますので、「'A」のような書き方では誤変換してしまうのは当然なのですが、エラーメッセージが出ないので注意が必要です。


今までは6303用や6801用のクロスアセンブラは公開していなかったのですが、先日LILBUGをアセンブルしてみて、それなりに使えることが分かりましたので、公開することにします。修正した4つのクロスアセンブラ(6809AsmWin.exe, 6800AsmWin.exe, 6801AsmWin.exe, 6303AsmWin.exe)をOneDriveに置いておきますので、使用した結果については自己責任ということを承知していただいたうえで、自由にご使用ください。




2024年11月8日金曜日

HD63C03YPを使用したシングルボードマイコンの製作

 HD63C03YPを使用したシングルボードマイコンを製作してみました

今年の2月頃にブログ「居酒屋ガレージ日記」の「行商(ジャンク品頒布)」のコーナーで、64ピンのHD63C03YPを6個もソケット付きで分けていただきました。ありがとうございました。

今までに「電脳伝説」のVintagechipsさんの6303SBCは製作したことがあったのですが、64ピンの6303は40ピンのものと何が違うのだろうという興味もあって、分けていただいたのを契機に製作してみることにしました。

データシートを読んでも、モード切り替えなど理解できていない点があったのですが、ネットの記事を参考にしたりしながらなんとか回路をでっちあげて基板を作成しました。

これが製作したHD63C03YPマイコンです。

HD63C03YPマイコン

その回路図を示します。

HD63C03YP R1.1


この回路図は、現在の基板のミスの修正と多少の変更を加えたものです。
また、4053Bによるポートの切り替え部はモード設定のつもりだったのですが、どうも不要だったようです。ということで、最小でMPU、ROM、RAMと1個のゲートICのみで構成できることになります。
メモリマップは、64KBのうちの下位32KBがRAM、上位32KBがROMで、必要なプログラムはROMに入れて使用するという前提です。(とりあえずは最上位の2KBにモニターを入れます。)

LILBUGをインストール

回路はできても問題はソフトです。まず、モニタープログラムが必要ですが、ハードが正常に動作するかが分からない状態でいきなり自作のモニターを入れるというわけにもいきませんので、とりあえず、回路の動作確認のためにLILBUGを入れてみることにしました。
(いずれは6303SBCに自作のモニターを入れたように、これにも自作のモニターを入れて操作性を統一するつもりです。)

LILBUGの英文マニュアルはネットで得られたのですが、ソースは見つからなかったので6303SBCを製作したときのソースを使わせていただきました。

他の方々はアークピットさんのクロスアセンブラX6801を使うことが多いようですが、私は以前作成してあったWindows上で動作する自作のクロスアセンブラ6303AsmWin.exeを使いました。残念ながらIF文には対応していないので、その部分は決め打ちする形に変更しましたが、他は変更せずにアセンブルしROMの27C256に焼いて装着しました。

最初は回路図のようにクリスタルとして最高速の12MHzを使用していましたが、ボーレートが適切な値にならないので9.8MHzに交換して19200baudでTeraTermと通信しています。
下図はダンプコマンドの実行例ですが、もちろん、書き込みも正常に行えました。


LILBUGが動作

無事にLILBUGが正常に動作したことから、ハードが正常に動作することが確認できましたので、次は6303SBCの時と同様に、自作の6802用モニターを改造してインストールする予定です。

終わりに

現在のところ、40ピンの6303との違いとして分かったことですが、アドレスラインとデータラインが独立していること、動作モードが一つしかないらしいこと、内部RAMはソフトの設定で無効にできるということぐらいです。

また、ちょっとした不具合ですが、パワーオンリセットが効きませんので、電源ON後にリセットボタンを押す必要があります。

以上、HD63C03YPを使用したマイコンを作ってみたという報告でした。

改めて、MPUとソケットを分けていただいた「居酒屋ガレージ日記」さんに感謝いたします。