EEPROM アクセス実装検討中

anago を拡張して read/write で分岐したり、 1bit 単位で取り込む仕組みをつくってとりあえず動くところまで実装した。UI 周りとか他の処理で落ちる部分があるが、ハード制御部分の所はできたという状況。

X24C02 (DBZ2)

先にこっちを分解して調査した。昨日書いた普通の I2C 信号というのはこちらのことで、24C02 で検索してでてきた Atmel の互換品をみながら実装。

Sequencial Read はなんかうまくいかなかったが、DBZ2 のプログラム同様1byteずつだしたらよめたので OK. エミュレータでも同じセーブ内容でゲームが再開できたのでよしとする。

X24C01 (DBZ1)

こっちも信号を見たんだが、 I2C のフォーマットがなんかちがう。X24C01 で検索してデータシートをみたところ、 A2, A1, A0 ピンがない上に、 I2C アドレスを設定しなくてもよい内容だった。これでは SCL, SDA を同じ場所に複数おいたら使えない。バトルラッシュの配線が変な理由がここでわかった。

DBZ1 のプログラムも 1byte ずつ読んでるのだがアドレスが 00, 40, 20, 60, 10, 50 の順に読み込んでいる。アドレスを送るビットの順番が逆転してしまっている。

00:0000_0000 -> 0000_000 = 0
40:0100_0000 -> 0000_001 = 1
20:0010_0000 -> 0000_010 = 2
60:0110_0000 -> 0000_011 = 3
10:0001_0000 -> 0000_100 = 4
50:0101_0000 -> 0000_101 = 5

Sequencial Read でアドレス 00 から 7f まで通常の順番でとってきたデータをエミュレータに渡してもちゃんと動かなかった。おそらくここらへんの解析を間違って実装しているものと思われる。

データを取り出したあとに、実機でゲームを最初からやってセーブ、そのあと Page Write で取り出したデータを書き戻したらちゃんと動いたのでこれは間違いない。

todo

  • データックを確認する (たぶん DBZ2 とまるまる同じのはず)
  • anago が落ちないようにする
  • GUI も確認する