Z80-MBCのファームウェアをなおしてみた

Z80-MBCでI/Oを使えるようにするため、ファームウェアの修正を行うことにした。
ソースを眺めてどう直すべきかは見当はついているが、まずはその前にArduino IDEの準備を行う。

Arduino IDEでATMEGA32Aを扱えるように準備する。
「ファイル」→「環境設定」で、「追加のボードマネージャのURL」に次のURLを指定。
https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json

次に「ツール」→「ボード」→「ボードマネージャ」を選択。
ボードマネージャで「MigtyCore」を選んでインストールする。
ちなみに、下のボードマネージャの画面はインストール済みの場合。

インストールが済むと、ATMEGA32が使えるようになるのでATMEGA32を選択して他のパラメータも設定する。
 

設定が済んだら準備完了。
ファームウエアの修正を行う。
「S221116_R100218_Z80.ino」を読み込んで、修正して別名で保存する。
修正内容はI/Oの読み込みの際にATMEGA32Aのポートを出力に設定してデータを出力するところ。
元のプログラムではI/O処理の後に無条件で出力に設定してデータを出力しているので、これをI/Oアドレスが0x0f以下のときのみ出力するように修正。
切りのいいところで0x10からは自由にI/Oが使えるようにした。
修正前

        DDRA = 0xFF;                               // Configure Z80 data bus D0-D7 (PA0-PA7) as output
        PORTA = ioData;                            // Current output on data bus

修正後

        if (ioAddress <= 0x0f)
        {
          DDRA = 0xFF;                               // Configure Z80 data bus D0-D7 (PA0-PA7) as output
          PORTA = ioData;                            // Current output on data bus
        }

修正が終わったらコンパイルしてATMEGA32Aに書き込みをおこなう。
「スケッチ」→「コンパイルしたバイナリを出力」でコンパイルする。

コンパイルが済んだら2つのHEXファイルが作られるので、とりあえず「with_bootloader」と付いたほうのHEXファイルをライターで書き込む。
念のため新品のATMEGA32Aに新しいファームウェア書き込んで、ダメだったら元のATMEGA32Aに取り換えれば済むようにした。
新品なので、ヒューズの設定を忘れないように。
ネットでいろいろ調べて以下のようにした。
HIGH = 0xD6
LOW = 0xE4
LOCKBIT = 0xCF

ATMEGA32Aに書き込んだ後、早速ボードに取り付けて起動してみる。

変更したファームウェアであることがわかるように、修正の際にバージョン情報のところにFJTとつけてみた。
正しく起動できているようなので、早速82C55ボードをつないでMBASICでプログラムを実行してみる。

正しくI/Oデータの読み取りができるようになった。
スイッチで値を変更したらそれに合わせて表示される値も変更されることを確認。
MCP23017のI/Oも試して正しく動くことを確認して、ほかに影響が出ていないことも確認。

これでI/Oを拡張して遊ぶことも可能になった。
さて、どうやって遊ぼうかな。

カテゴリー: Arduino, Z80-MBC, 電子工作 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください