GitBookメモリ増設メモリ増設40pinシステムバスに拡張メモリを追加します。64kバイトのRAMを増設して、その上に動画データを配置して動画再生するまでを説明しています。関連するファイルはすべてこちらに置いてあります。ハードウェアコネクタ1.27mmピッチカードバス、20ピンずつ裏表で合計40pinのものが適合します。https://www.amazon.co.jp/gp/product/B01E3GL78K/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1http://www.aitendo.com/product/17716なかなか適合するコネクタを探すのが大変でしたが、上記2つは申し分ないです。aitendoに至ってはPC-G850Vの型名を出してますし、変換基板も販売しています。そのうち在庫がなくなるでしょうけど。配置はこちらを参照してください。システムバスの解析・確認はこちらのように行いました。SRAM外付けROM領域は0x8000-0xc000の16kBを4バンクで合計64kBが確保されています。SRAMを選定しました。1Mbit=128KB、55nsecなのでちょっと容量が余りますがまあいいでしょう。基板アドレス線だけでも16本と本数が多く面倒ですので、基板を起こすことにします。コネクタとSRAMだけの基板で、周辺部品はSRAMのパスコンのみです。基板はKiCadで作成しました。バス線をSRAMにつなぐだけですが、テストピンを出したら配線数が増えてえらく大変でした。デバッグ用のテストピンの配置はこんなかんじです。デバッグをしたところ、配線にミスがありました。RAMのE1ピンはLイネーブルですが、E2ピンはHイネーブルでした。E2がGNDにつながっているとチップが有効になりません。E2の接続先をGNDから5Vに変更することで動作確認できました。ソフトウェア(動画準備)メモリを膨大に使うアプリといえばマルチメディアと相場は決まっているわけですが、せっかくなので動画をやってみましょう。液晶が1bit階調なので、1フレームあたり144x48=864ビット消費します。64kBytesあれば、75枚絵が入ります。30fpsだとすれば、2.5秒という計算。32kBytes上限ということで30フレーム分の動画を確認してみると下記のようになります。ちなみに動画をどう作るかもいろいろと模索があって、こちらにメモっておいたので興味のある方はどうぞ。この動画、短いですねー。これが3倍になったところでけっこう厳しい。この長さでは微妙なので、圧縮を考えます。いえ階調がないので、普通のランレングス符号で十分に思えます。ワイヤーフレームであるがゆえに0データが連続しがちで、実際データを眺めたところ0x00のデータの連続が多いことがわかりました。そのため、0x00のみ特殊扱いして、0x00の後に連続する0x00の数を書く、という仕様にしました。続くことがありますが、その際は再度カウントを開始します。..これで倍ぐらいは入るようになりました。圧縮の展開でその時間は食いつぶしました。受信OkをPC側に伝える。0x01をスタートコードとする。UARTで圧縮データを1フレームぶん受信する。0x00が3つ続いたらフレーム終了とする。フレーム情報(保存先のバンク、開始アドレス、サイズ)をヘッダに書いておく。バンクが0xFFなら転送終了とする。フレーム情報をテーブルに記録するフレームデータを外付けRAMに書き込む。いう処理をフレーム分繰り返します。展開したデータを画面に出力をフレーム分繰り返すことになります。UARTの受信はまるひろさんのページなどを参考に実装します。64KBytesをすべて9600bpsで転送すると1分ぐらいかかります。これの高速化はいずれ考えます。増設RAMだけではなく、内蔵RAMも使い切らないともったいないので、バンク0x10と指定されたら内蔵RAMに書くことにしました。メモリマップは下記のようになります。合計約85.5KBytesが画像データに当てられます。ダウンロードしてmain.ihxをビルドして転送します。startと表示されます。この状態で、PC側の送信ソフトウェアtransfer.pyを実行します。nowと表示されます。この状態でポケコンで1キーを押すと、PCからポケコンへのデータ転送が始まります。すべてのフレームの転送が終了するとポケコン側に下記が表示されます。go5キーを押すと動画の再生が始まります。終了後は0を押すと再開、9を押すとプログラムが終了します。