SBC8080でGAME80がようやく動作しました
4月20日のブログでGAME80が動作しませんと書きましたが、ようやく動作しました。
INCH, OUTCH, ROLCATルーチンを色々と書き直してみたり、入力したバイナリリストを何回も見直してみたりしましたが、結果は変わりません。
ついにはSBC8080付属のモニタの逆アセンブル機能を用いて、リストをプリントアウトして読もうとしてみたりしましたが、やっぱり原因はわかりません。
ただ、TeraTermの改行の送信コードをCRからLFに変えると、改行が多くなりすぎるものの一応動作することを見つけていたので、プログラム内での改行コードの扱いに関係しているという見当をつけてリストを眺めていました。
そんな時に、元記事中の変更する可能性のあるデータ(表1)の中に、CRコードが0Ahであると書かれているのに気づきました。(もっとちゃんと読んでおくべきでした...)
ということで、アドレス8C77hの値を0Ahから0Dhに変更することで無事に動作しました。
起動手順 |
メモリダンププログラムを入力してみました |
その実行画面 |
追加変更した箇所
INCHルーチンはモニタの割り込みを使用した入力ルーチンを利用したので、ROLCATルーチンは不要となりました。
以下に変更・追加箇所を記しておきます。
************************************************
変更箇所
(1)8C77 0D
(2)8C96 CD 7C 00 CALL 007C
(3)8C99 C3 9F 8C JMP OUTCH
(4)8C9C C9 00 00 RET NOP NOP
(5)8797 CD 96 8C
87A2 CD 96 8C
追加箇所
OUTCH 8C9F F5 PUSH PSW
A0 DB 01 IN 01H
A2 E6 01 ANI 01H
A4 CA A0 8C JZ 8CB9
A7 F1 POP PSW
A8 D3 00 OUT 00H
AA C9 RET
************************************************
動作したという報告だけでは、ああそうですかという話でしかないので、まだ変更すべき点がありますが(配置アドレスの変更、プログラムの格納アドレスの変更、第1・第2スタックの変更などSBC8080に合わせる改造が必要)、とりあえず現行のもののバイナリリスト
[4月30日訂正]逆アセンブルしたリストまで公開するのはまずかったと思いますので、バイナリリストのみの公開に変更しました。
次は、MicroPascal80かな。