投稿日: Mar 26, 2017 12:0:14 PM
一番大きいバグは、machine.cppのバグで、I/Oアドレスが正しく解釈されていなかったというもの。
テスト面倒だから放置してたらこれだよ!
あとはDCXと何かにバグがあったのも修正。
インデックス値の指定が違うとかbreakが抜けてるとかそういうやつですね。いやはや。
バグに気づいたのは内蔵EEPROMの操作をI/Oに追加してテストしようとしたら動かない。
どうにも動かなくてなんだこれって食いついていてようやく気づいたってところで、やってよかった。
内蔵EEPROMの内容をシリアルで0x3ff~0x000まで表示するバイナリ。
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f 00000000 21 ff 03 7c d3 30 7d d3 31 db 33 d3 0f 3e 20 d3 00000010 0c af 2b b4 b5 c2 03 00 76
さすがになれてきたというか、今回はアセンブラ側には何も問題がないって解っていたので集中してデバッグできましたが、しかし手強かった。
具体的には outとかinでI/Oのアドレスを指定する、その8bitの上位下位4bitに分けて上位でグループわけ、下位で機能という感じにしているのですけど、上位4bitを取得するために address >> 8 とかやってたんですね。
とうぜん正しいのは address >> 4 です。
気づくまでにかなりかかりました。バグなんてこんなもんなんですよね。やーつかれた。