実装メモ

main CPU の信号を memory map, io map でデコード兼データバスの制御をまとめるモジュールを作成。データバスの制御というのに割り込みのベクタテーブル入力も含まれる。メモ。

  • NMI, INT, HLDRQ, RESET は正論理
  • INTAK は負論理
  • IO/M は 0 が IO, 1 が memory
  • NMI, HLDRQ は使用しない
  • wait は 0:wait, 1:ok
  • キャラクタ ROM を書き込む場所にはメモリマップがあけられない、開けたとしてもセグメントがまどろっこしいので、メモリを使わず IO map にポインタレジスタとデータレジスタを設ける
  • video からの割り込み制御を作る
  • video 系のレジスタを video 回路内部変数としたので取り込む機構を作る
  • 共有RAM系
    • color RAM はとりあえず作った。 r,g,b 別に 3 つ RAM を別けたが、tile/sprite では別けていない
    • dram は共有RAMゲートだけ作成。 DRAM コントローラは今回の CPU 向けにする。
    • wait は 2bit もち、 bit0 が databus[15:0] が有効, bit1 が databus[31:16] が有効。
    • databus は 32bit で read 時は 31:16, 15:0 の順に書き込まれる。
    • RAM アドレス系の select 系は今回は正論理にした。 0:disble, 1:enable
    • rd, wr, bytemask は依然負論理
  • 上位モジュールが inout, 下位モジュールが inout でそのままつなぐと warning が出るのが謎。
  • sound RAM 系
    • main cpu の io map での sound command write で、コマンド8bitを書いて、Z80 に割り込みを送る
    • Z80 の割り込みモードは 0 で, FM 音源からのタイマ割り込みとメインCPUの割り込みがあってデータバスにベクタ番号を入れる。
    • ベクタ番号は要調査
    • NMI は MCU が管理するらしい

勢いでモジュールを作りまくったが一つずつシミュレーションしないとダメですね...