田舎おやじの言動log

田舎で暮らすおっさんの言動を適当にロギング。

M5StackでMSX ROMリーダー

仕事の試作でM5Stack Core2を利用する案件があって半月ほど熱心に触っていたのだが、最近ようやくLCD、UART、I2C、SDが一通り動かせるようになってきたので、ついでとばかりに趣味の方でROMリーダーを作ってみた。

GPIOが足らないのはMCP23017x2個で無理矢理解決。シフトレジスタx2でアドレス出力を賄えば1個で済むが、配線と通信回数はさほど変わらないのでひとまずそのままに。当初は裸のW27C512などをブレッドボードに直差しとか横着したが、どうも反応が無く動いていない感じだったので、問題切り分けでMSXのROMをM.A.D製スロット基板に挿して検証した。

ROMから読み出す方はプログラム上大きな問題が無いところまでこぎ着けた。写真左に転がっている裸ROMはMSX王家の谷だが、読み込んでSDに保存したROMファイルがopenMSXで遊べること、複数回の読込でファイル一致することを確認。しかしながら電源をM5の5V単体、かつブレッドボードで無理矢理ジャンパした大量のパラレル信号線はトラブルの巣窟で、これが大きな理由となってここまで1週間近くかかってしまった。そしてとりあえず他の問題も列挙しておく。

  • 明らかに読めないROMがある。CS1,2,12信号あたりの接続ミスなのか、端子の汚れのせいなのか、電力不足なのか。激ペナは先頭256バイトはほぼ成功するものの、後半につれてビットが欠けたり化けるアドレスが大量に現れる。写真の熱闘甲子園はROMヘッダー先頭ABすらあやふやで時折化ける。MEGA ROM SST Ver.は全アドレス00hで反応無し。というか今のところ全バイト完全に読み出せるのは王家の谷しかない。専用リーダーかよ。
  • I2C通信が時折詰まる。詰まる直接の原因は上記と同じなのかもしれないし、ブレッドボードのせいかもしれない。ともかくM5のarduino libはWire関数で碌なエラーが取得できずリセット関数も無い。一度動かなくなるとM5側をリセットするしか無くなる。
  • SST039SF040のID読込モードが働かない。どうも5555h~の特殊コマンドを受け付けていない。というか無反応で生きてるのかすら判らない。MEGA ROMキット内の新品なのでいきなりの不良では無いはずだが…。

やはり横着はするもんじゃない。コード修正より配線をいじくり倒して悩む時間の方が圧倒的に多かった。ブレッドボードの接触不良で失敗するケースは明らかにあるが、他はM5から賄っている5V電源の出力不足なのかも。なんとなく大丈夫と思い込んでいたのだが、よくよく考えれば大昔の電力食いICを24本+3本のパラレル信号で高速制御するのは無茶っぽい。まずはユニバーサル基板へのICソケット配線と、ACアダプターからの5V供給か。

あとはROMリードにこだわりすぎないよう程々に。最終目標はZ80ボードのROM焼きだし。W27C512後半32kBにシリアルBASICが書ければ十分なのだ。

追記
外部からの5V供給で熱闘甲子園は読めた。激ペナはCE信号をCS1→RDとすることでデータは読めているが、こちらのアドレス指定が適当なのか先頭からのデータではなさそう。カートリッジだとCS1,CS2,CS12,SLTSL,RDとCE,OEの接続が殻割しないとよくわかんないな。何らかの手段はあるはずだが…。
とりあえずここで一旦本来の目的のROM焼きに移ろう。配線はどうしようかな…。