CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

モニタ移植

1文字入出力ができればモニタの搭載は簡単です。しかも以前TLCS-90のモニタを作ってますからそのソースをそっくり持ってくることができます。

ターゲットCPUとインクルードファイルの指定を修正。1文字入出力ルーチンをさしかえ、ROM配置に合わせエントリーポイントを00000HからF80000Hに変更してアセンブルしました。

 

すんなり通るかと思いきやまた山のようにエラーが出てしまいました。ただこれはZ80→TLCS-90への移植でやったように1行1行エラーを潰していけばいいはずです

> error: undefined operand size
     EX    AF,AF'

  これはZ80ではアキュームレータAとフラグレジスタFはレジスタペアで扱えましたがTLCS-900ではAレジスタのパートナーはWレジスタになってしまいました。なので EX A,A';EX F,F'; とバラせば同じ動きになります

 

> error: unknown instruction
    EXX
  TLCS-900では裏レジスタが拡張されて4バンク構成になりました。単純に裏と表を ひっくり返すだけのEXX命令は無くなったようです

    SLAA   /   SRLA

  レジスタのシフトはシフト数も指定できるようになりました。それぞれ    SLA 1,A/SRL 1,Aと書き直せます

・・という具合に単純にニーモニックを差し替えていけばいけると思っていたのですが本質的にまずいところが見つかりました

 

> error: addressing mode not allowed here
     LD    A,(HL)   /   LD    (HL),A

  (HL),(BC),(DE)というようなレジスタペアによるレジスタ間接アドレッシングができなくなりました。アドレス空間は24ビットあるので当然16ビットでは足らない訳でそれぞれ(XHL),(XBC),(XDE)というように32ビットレジスタで指定してやればいいのですが代入しているところも直さなければならず、当りが大きそうです。たとえばアドレステーブルのデータ埋めこみもワード幅のDW疑似命令だとエラーが出ています

 

> error: range overflow
     DW    PRINT