FAMIRGBその後

FAMIRGBはその後、特に進展がなく放置プレイになっておりました。


ちゃんとした設計書や回路図を残さずに作ってしまったので、仕事やらなんやらが忙しくなってしばらく触っていない期間があったのですが、
回路がどうなっているのかすっかり忘れてしまったのでした。


敗因は、ドキュメントを残さなかったことですね。


敗因として考えられるのはほかにもあり、RAMとROMを除けば汎用ロジックICだけで回路を構成したのですが、
そこにこだわってしまい、失敗した感があります。
変なところにこだわらず、もっと実現しやすい方法で実装していったほうが当然、完成する確立を高められたはずです。


1年ぐらい放置してましたが、、FAMIRGBのことは完全に忘れていたわけではなく、たまに頭によぎることがあり、
もっと違ういいやり方はなかったかなと考えることがありました。
たとえば、一部の処理を1チップマイコンで肩代わりさせるとかは当たり前に出てくる発想だと思います。
パレットRAMへの書き込みデータをCPUバスから拾う回路は、1チップマイコンでやらせると、
汎用ロジックICのカウンタ4個+αが、IC1個で済ますことができるはずです。
でもちょっと微妙。
それだけのことでマイコンを持ち込むのも微妙です。

PIC32MX

1チップマイコンはAVRマイコンがいくつかと、ライタが手持ちにはあるので、使うならそれかなと思っていました。
でも、8ビットコアのAVRマイコンで、それなりに高速なデジタル信号を扱うのはけっこう厳しいんですよね。
ファミコンとはいえ、ドットクロックは5.4MHzぐらいなので、高速アナログ信号といっていい領域です。
8ビットのAVRマイコンの中で高速なものは20MHz動作のものがありますが、それでも5.4MHzの信号を扱うのはなかなか厳しいです。


で、最近知ったのがPIC32MXという1チップマイコンです。
これは32ビットコアのマイコンで、MIPS32アーキテクチャらしいです。
MIPSというと、プレステ1のCPUがMIPSでしたよね。
たしかプレステのCPUは33MHzぐらいのクロックだったはず。
PIC32MXは40MHzでも動きます。なんとプレステ1より高クロック。
そして秋月電子では190円〜320円で売っています。激安です。
しかも趣味の電子工作にもやさしいDIPパッケージです。


PIC32MXのいいところはそこだけじゃないんです。
こいつはDMAコントローラを内蔵しているのが味噌です。
PIC32MXではDMAコントローラのおかげで、1チップマイコン内のメモリの内容を、CPUを経由せずに、IOポートから出力したりすることができます。
逆に、外部よりIOポートに入力された信号を、CPUを経由せずに、1チップマイコンのメモリに書き込むこともできます。


DMAコントローラが無い1チップマイコンで、数MHzの信号を扱おうと思うと、ほとんど全てのCPUパワーを
IOポートの制御に取られてしまいます。
メモリから読み込んだ値をIOポートに出力することを繰り返す事以外は何もできなくなるわけです。


PIC32MXならばDMAのおかげで、たとえばファミコンのCPUバスの内容を読み取りながらも、PIC32MXのCPUは別なことを色々できるわけです。
これはなかなか面白いですね。
NESRGBとは違ったアプローチで、RGB出力の可能性も出てきた気がします。
たとえば、ファミコンのPPUに子亀のようにPIC32MXをかぶせて、PPUの各端子の信号を盗み見て、PIC32MXでPPUの処理をエミュレーションすることも可能でしょう。
NESRGBはPPUを取り外して実装する必要がありましたが、この方式だと上からかぶせるだけでOKになります。かなり簡単になります。
もっと言うと、カセットを指すコネクタに出ている信号だけでも十分そうです。
つまり、ファミコン本体は無改造で、スーパーゲームボーイのような感じで、RGB信号を出すカセットアダプタが実現できるのではないかと妄想
しております。

今後、詳細をつめていこうと思います。

タミフル

すごい!!
もう元気になった!
インフルエンザが2日でなおった。


タミフルを飲んだのは今回がはじめてでした。


インフルエンザでひどいときは1週間ぐらい寝込んだりしたことが過去にあったような…
そういうときは決まってめちゃ怖い夢をみるんです。
まあ後から冷静に考えると、その夢のどこにも怖い要素ないんですが。。。

ラジオ

インフルエンザになってしまい、
ずっと寝てたんですが
すごく暇です。


スマホをいじってると
手が冷たくなってきてキツいです。


防災用に買った
ラジオがあったのを思い出して
聴いていました。


3年前の今日も
こうやってラジオを聴いていました。


ラジオが一番役に立ちました。
ハイテクなものは総じて駄目です。

固定電話とネットは全く繋がりませんでした。
ケータイもはじめは輻輳がひどくて
ごくたまには繋がったんですが、
1日ほど経過したら
基地局のバッテリーが尽きたらしく
圏外になりました。
テレビは電気が来ていないので見れず。


NHK-FM
死んだ人の名前を
延々と読み上げてて
ずっと聞いてると
気が滅入りました。


民法FMは音楽を流してて
聴いたらすごく
安心できたのを思い出しました。

chinkomanko.nesうまく表示されたー!


原因はカセットROMの結線でした。
マッパー0、つまり一番初期のバンク切り替えコントローラーが入っていないタイプのシンプルなカセット基板のマスクROMを、書き換え可能なEPROMに取り替えていたのですが、ここでミスしてました。

背景色が変なのはFAMIRGBが原因だと思われます。
オレンジ色とかの四角形が表示されているのは、これはスプライトでしょうか?


マッパー0では、プログラムROMが32キロバイト、キャラクタROMが8キロバイトまで乗せることができます。
なので、32キロバイトと8キロバイトのEPROMに乗せかえるなら、基本的には単純にICを差し替えるだけでOKで配線をかえる必要はないのですが、ちょうどぴったり容量のEPROMが手元に無かったため、大きい容量のものを使おうとしたんです。
まあ、正確には、8キロバイトのEPROMである27C64は持ってたんですが、どうも8キロバイト以下のEPROMにはプログラム電圧が21V必要なものがあったりして、それだと私の持ってる秋月ライタだと書きこみができませんでした。

そんなわけで、8キロバイトで十分なキャラクタROMに32キロバイトのEPROMを使ったんですが、EPROMの余ったアドレスピン2本はGNDに落として、EPROMの*CSはカードリッジコネクタのPA13へ、EPROMの*OEはカードリッジコネクタの*RDに繋ぐのが正しいようでした。

そして、chinkomanko.nesなどを公開していたnetuagala氏のサイトがwebarchiveからサルベージされたので、リンクをはっておきます。

http://web.archive.org/web/20030922233321/http://fuguri23.hp.infoseek.co.jp/FamAsm/

chinkomanko.nesをファミコン実機で動かしてみる

前回、FAMIRGBボードの基板上に、デバッグ用LEDをつけました。
これは、PPUアドレスレジスタ($2006)の指しているアドレスの値を表示するためのLEDです。
簡単なテスト用プログラムを走らせて、PPUアドレスレジスタへ書き込んだ通りの値がLEDに表示されるかを検証したいと思います。


そこで何か、内容を理解しやすいシンプルなサンプルプログラムはないかと探しました。
見つけたのが、netuagala氏謹製のchinkomanko.nesがちょうどよかったので、EPROMに焼いてみました。


ファミコン実機+FAMIRGBでVGA出力したときの映像ですが、すごく乱れてます。
これはすんなり動くかと思ったんですが、
マッパー0のカセット基板の配線をEPROM用に配線を変えたりしているので、そこを間違えたのでしょうか。
それともFAMIRGBがいけてないのでしょうか。
信じられるものが無くて困りました。



エミュレータ上の表示イメージですが、
本当はこうなるはずだったんですが。

地道に回路でばぐ

FAMIRGBはもうちょっとで完成するはずなのですが、あとちょっとがあとちょっとではおわらないんですね。よくあることです。

回路のデバッグではまってます。
カラーパレットの色が正しくない原因がわかりません。
ここは地道に主要な信号線にLEDをつけて光らせてみようかと思います。

何年か前に色がキレイだったからという理由で買ってから死蔵されていた
ピンクとか紫とか白色のチップLEDが役に立つ時がついにきました!
カラフルなLEDをたくさんつけとけば、FAMIRGBとして完成しなくても
なんかのイルミネーションとして使えるのでおっけーです。


というわけで実装しました。

白色LEDはめちゃ明るくて眩しいです。
電流制限抵抗を1kオームにしたんですがそれでも明るいですね。
こういうインジケータ用途では昔の半透明プラスチックパッケージのLEDのほうが見やすいですね。

FAMIRGBの映像が乱れる原因

ファミコンのPPUからデジタル映像信号を無理矢理吐き出させて、それを元にアナログRGB信号を出力可能にするという夢のボードである「NESRGB」ですが 、私はそれをCPLDとかを使わずに74シリーズの標準ロジックICだけで作り上げようという、無謀な誰得チャレンジを最近やっとります。

まあ、前のブログエントリでカラーの映像がモニターに出せたところまでは報告いたしましたが、実はぜんぜんイケてないところがありまして、写真ではまともっぽく写ってますが、コントローラーのボタンを押すとコンボイの謎のオープニングのように画面全体が激しくフラッシュするのです。
テスト用にはハイドライドスペシャルを使っていたのですが、このゲームって勇者が攻撃してても画面上ほとんど変化ないじゃないですか。でも私のボードを通した映像ではAボタンを押すたびにコンボイの謎フラッシュですからね。攻撃してることが激しく分かりやすくて最高です。私の目への攻撃性もかなりありますが。


そんなわけで、映像がおかしくなる原因を考えてたんですが、なかなかわからなかったんです。
ボタンを押すとおかしくなるのだから、PAD I/Oへのアクセスでも私が追加した回路が勘違いして、それをパレットRAMへ書き込んじゃっているのじゃないかと考えたんです。
PAD I/OのアドレスはPPU I/Oのアドレスの次なので、アドレスデコーダがしくじっているなら、有り得なくないかなと推理しました。
でも、アドレスデコーダ部はべつにおかしくなさそうです。


そこで悩むこと3日ぐらいして、設計書眺めていたら、キャラクタRAMへの書き込みとかアトリビュートRAMへの書きこみでも、それをパレットRAMに書き込んでしまう回路になっていたことに気がつきました。

なるほど、Aボタンを押すと画面上のどっかのキャラクタが書き換えられるから、それがパレットに書き込まれてしまい、激しくフラッシュしてたんですね。


今日は、山形の某所でシステムテストをやってて、激しく暇だったんでそんなことをボンヤリ考えてました。