データの化け方をよく見ると規則性があることはすぐ判ります。まず4バイトの周期を持つということは32ビット幅のデータバスに配置した4個の8ビット幅SRAMにそれぞれ対応していることになります。
読出し値がおかしいのは1個目と2個目のRAM:D31-D24、D23-D16につながっているRAMと断定できます(Am29kプロセッサは初期状態でビッグエンディアンのため)
そこで入力したキャラクタと読みだされたキャラクタをビット配置で見てみると・・
明らかにD26,D25.D24とD17はビットに「0」を書いても「1」を書いても必ず「1」が読みだされてしまっているということになります。
これはもう、ICのハンダ不良ですね。データバスとICのピンがつながっていないようです。データバスはプルアップはしていませんが高インピーダンス状態のバスを読むと前回書込みで充電されていて不安定に「1」が読めてしまうのかもしれません。顕微鏡でRAMのSOパッケージの当該ピンを見ると確かに足が浮いているようにも見えるので少し追いハンダを流して修復、読出し値は書込み値とちゃんと同じになりました。
次に1バイトづつインクリメントしたデータを書き込んでみます。
012345678901234567890123456789012345678901234567
890123456789・・・・
これを読み出すと
212365674901834527896123456789012345678941238567
290163454789・・・・
なんか微妙に順番が入れ替わってます。これは同じようにRAMのアドレスピンが浮いていてちゃんとアドレスが指定できず重複されて読み出されているのでしょう。どのアドレスピンが歯抜けになっているかはこのデータ列から導くのは至難の業なのでROM-RAMに数珠つなぎになってるアドレスバスを一本一本導通確認しました。
基板のパッドからSOパッケージの足がわずかに浮いている場合、足にテスタ棒を押し当てるとそれでパッドと接触して導通してしまうので要注意です。こんなチェックシートで当たっていくと、これは酷い・・アドレスピン全76か所のうち10か所も非導通(×)です。
バツが付いたところを、これも追いハンダしてすべてOKになりました。
今回、RAMのフットプリントはちょどぴったりのものを選びましたがこれはリフローならいいですが手ハンダだとちょっと厳しいのかもしれません。占有面積の制約もありますがもうすこしフィレットが流せるパッドを選んだ方がいいです。