当ブログに掲載した回路やプログラムその他の情報はご自身の判断により利用してください。これにより生じた損害は責任を負いませんので、ご了承ください。 当局のQSLカード発行ポリシーはこちらをご覧ください
My QSL Policy is HERE.

2022年5月7日土曜日

Z80で遊ぶ(3) モニタプログラムを搭載

 シリアル通信ができるようになったブレッドボードマイコンですが、プログラムを走らせようとするとその都度UVEPROMにバイナリを書き込んで、マイコンボードに装着する必要があります。

書き換えの際には、殺菌灯を流用した消去器(といっても殺菌灯を梱包してあった段ポール箱です)で10分紫外線を照射して前の記憶を消去しなくてはならず、プログラムの実験をするにはちょっと手間です。

殺菌灯2,000円弱でした。よく消えます。

そこで、RAMエリアにターミナル操作でデータを書き込んで実行できるモニタプログラムを実装することにしました。シングルボードコンピュータでは定番の装備でしょうね。昔はBASICが走るマイコンでもたいていモニタがついていて、雑誌のダンプリストを打ち込んでゲームを楽しみました。

モニタプログラムは悠悠櫻さんのブログで紹介されていた、Donn Stewartさんのサイト CPUville 掲載の Rom v.8 です。これの移植を試みました。このソースリストには詳細に注釈がついているので、大変参考になります。

移植作業は

(1) アセンブラ固有の疑似命令や表記ルールに基づく箇所の修正をする
(2)入出力に関するルーチンをZ80 SIO用に置き換える(オリジナルはシリアルが8251)

の2点でうまくいきそうです。

(1)に関しては、私が使っているアセンブラはASZ80 Assembler ですので、疑似命令にはピリオドが必要です。したがって org -> .org equ -> .equ db -> .db のように全部直します。

defw は .dw、ちょっと考えたのは文字列を格納するのに使っていた defm で、単純なものは .ascii 、ヌル区切りのものは. ascz で置き換えることでうまくいきました。

文字列のデリミタは ” から ’ に置き換えます。

オリジナルでは二進数は0000b、16進数は00hまたは0x0000のように表記されていますが、これもASZ80に合わせて 0b0000、0h00と書き換えました。

プログラムの先頭に .area CODE (ABS) を追加します。よく理解していないのですがプログラムをどのようにメモリに配置するかを指定しているようです。

プログラムの末尾に .end を追加します。なくてもだいじょうぶですが、ないとアセンブルの時に注意されます。

(2)に関しては、前回試したシリアル通信プログラムをそっくりそのまま、オリジナルのルーチンと取り替えました。

アセンブルエラーが出なくなるまで修正を繰り返し、出来上がったバイナリをROMに焼いてボードにセットして電源をON!


出ました!プロンプト。
helpコマンドを叩くとコマンド一覧がでるはず・・・


oh...
豆腐が売るほど出てきてしまった。
リストファイルを眺めていたら、一か所こんなところが。


ここはオリジナルでは defw 0,0 だったものを私が直したものです。バイナリは 2C ではなくて 00 00 になっていないとダメなはずです。数字の0をデリミタと解釈してコンマ(アスキーコードで2Ch)を格納したようです。

.ascii 0,0 を .db 0,0 に直して再度トライ。


こんどは期待通りに動きました!これで次に進めます。

0 件のコメント:

コメントを投稿