投稿日: Mar 13, 2017 3:50:20 PM
とりあえず作ってみなきゃわからん。ってことで。
正直なところ、Z80でアセンブラ使えてきたかなーくらいの時期にはもう80286とか(要するにx86アーキテクチャ)へ移り変わっていて、がっつりZ80で組んだことって一度もなかったりして、それ故の知識不足ってものを痛感しているトコです。
フラグをしっかり処理しないとまともに動いてくれないってことになるので神経を使います。
どういうときにどんな変化するのかがしっかり書いてる書籍、昔ならいっぱいあったんですが。
…と思いつつ探していたらすばらしードキュメントを発見しました。
8080命令説明書。PDFです。
どこのサイトかと思ったら中日電工さんでした。なるほど。さすが、すばらしい。
ありがたく参照させてもらいつつADDを作ってみます。
こんな感じになりました。
レジスタをいちいち*(cpu::resisiter+index)とかで参照するの面倒なのでr_なんちゃらってマクロにしました。
フラグもビットの位置をマクロにして、それでもこう、ゴチャッとしますね。
ファンクションを定義してもいいんですけど、C++だから、こうプロトタイプ宣言とかが面倒なのでマクロでいっかーってなっちゃいますね。でも多分マクロのほうが速いんだぜ。しらないけど。なんとなくそんな気がする。
こう、フラグの動作に自信がなかったのでAltair8800シミュレータのi8080コードを覗いてみたらなんかアレだったので自信出てきました(ぉ) 何となく動いてる風味なので先に進むことにしましょう。
とりあえずこれで8命令実装完了、演算ブロックの1/8が実装出来たことになります。
なかなかいいんじゃないでしょうか。
#おっと、しまった最後の r_a = buf は r_a = buf & 0xffにしておかないと。なおしとこ。
#おっと(2) パリティビットの算出方法が違う! 1が立ってるビットの数が偶数なら1だ!(ちがう!偶数なら0だ?)(あれ?)(やばいこれ面倒くさい) ※偶数で1です。