uPD70616 あせんぶら

  • Macro Assembler AS の Pascal like な BEGIN, END のマクロを削除
  • Pascal like であろう辺なコーディングスタイルを uncrustify で整形
  • コンパイルが通るまでソースを修正

ここまできてソースを読む準備が始められる。

  • 知っている CPU のコード生成をみながら、処理の流れをつかむ
  • 知っている CPU のコード生成をみながら、uPD70616 のデータシートに合わせて実装
  • なぜかソースファイルが開かないのでデバッガで追う
  • assert とかかかりまくるのでデバッガで追う
  • コード生成が出来てるようなので、MAME で確認
  • できたー!

というわけで画像までの命令とアドレッシングモードは実装が出来た。 AS さんのほうはグローバル変数使いまくりだし、データシートのアドレッシングモードの bitfield が間違ってる。
データシートの間違いはぱっと見で重複しているのもあったが、indirect register の一覧と詳細で間違っていて mame の CPU ソースをみて実装するってどういうこと。

構文解析は C で文字列操作をする必要があって実装がかったるい。2重 indirect とか 2重 diplacement とかは実装も面倒そうだし、自分が使わないからいいや。R29, R30, R31 は AP, FP, SP と呼ばれるみたいなんでやっといたほうがよいだろうか。

すみ: Rn [Rn] [Rn+] [-Rn] #imm #qimm addr
まだ: [addr] disp[Rn] disp[PC] disp[Rn](Rx) disp[PC](Rx)
面倒: [disp[Rn] ] [disp[Rn](Rx)] disp1[disp2[Rn ] ] と @ がつくやつ

構文解析が片付けば、データシート一覧をみながら淡々と実装するんだが、いろいろ間違ってそうな気がする。