間がかかりそうなので、とりあえず、ビデオのコピー処理を最適化した。それだけで、サウンドも大体スローダウンする事なく鳴るようになった。自分は互換ファミコンのパッドを流用した、5本のコードで接続する。赤:VCC(本来は5Vだが、3.3Vでも動作する)黄:GND青:P/S(P60に接続)茶:CLK(P61に接続)白:OUT(P62に接続)※良く考えたら、ファミコンパッドで使っているICはCMOSで電流をほとんど消費しないと思うので、配線を簡略化する為、ポートから供給する事にしたので、ピンアサインを変更。赤:VCC(P60に接続)黄:GND(P61に接続)青:P/S(P62に接続)茶:CLK(P65に接続)白:OUT(P73に接続)※このポートは、CN2を使う。揃えたりする予定だが、まだ色々パーツ(ソフト)が揃っていない為、少し時間がかかると思う。現状、どのように動作させるか、簡単に記しておく。・SDカードのインターフェースが必要。(NESファイルを読み込む為)・D/Aコンバーター出力をアンプに繋ぐ必要がある。(音が欲しいなら)※ファミコンはモノラルだが、ステレオ出力にしてある。・ファミコン互換のジョイパッドを接続する必要がある。・「.NES」ファイルを用意する必要がある。(ぐぐって欲しい)現在、どのNESファイルを起動するか、「nesemu.hpp」に直接記述してあるので、それを修正する。電子工作な日々KIT-RX65N、LCDの初期化まで出来た。hiraコメントするずいぶん長い間放置されていたが、最近、ようやくLCDの初期化が出来た。「ストライプ」などと、数秒おきに画面が自動で切り替わるナゾ動作が続く。RX65NのGLCDC関係の部分を読んでも、この「現象」に対するヒントは見つけられなかった。この動作は、GLCDCの何かの機能なのだと思って、それを「OFF」にする方法をひたすら探したが、それらしい記述はどこにも載っていない。※BGENレジスタの設定が抜けていただけだった・・・とりあえず、フレームバッファに適当に書いて、表示してみた。表示するようだが、ガンマ補正がちゃんとしていない為か発色が少し変な感じがする。(これは、これから解析するとして・・)また、LCDは、そこそこコントラストがあるが、視野角が狭いようだ・・もっとダイナミックな表示が欲しくなり、スペースインベーダーのエミュレーターを動かしてみた。(あまりにあっさり動作したので拍子抜けだ・・)このエミュレーターは「side」と言うオープンソースで、8080CPUと、スペースインベーダーのアーケード基板をエミュレーションするもので、メモリーも、内蔵メモリで足りるので動作の確認に便利だと思う。※動作には、スペースインベーダーのROMデータが必要。(invaders.zip)今回は、それを、SDカードに書き込んで、SDカードから読み出している。・inv_roms/※コンパイルは「-O3」で最適化してある。・エミュレーションにかかる処理負荷を計測したら、およそ60%程度を消費しているようだ、8080、2MHz程度でこの負荷は思ったより大きいが、その気になって最適化すれば、20%くらいは下げられる感じはある。現状では、音も無いし、操作も出来ないが、今後、それらを実装したい。苦労したけど、音は鳴るようにした。YouTubeソースコードは、GitHubへコミット済み。-----このボードは5000円くらいで買えて、非常に使い勝手が良い、これから、グラフィックス関係を強化して、色々なガジェットを作ってみたい!追記:・GLCDCのVPOS割り込みを設定して、画面更新の同期を行った。・LCDの表示タイミングを調整して、画面の更新レートを60Hz近くにした。追記:・ファミコンパッド接続で、操作できるようにした。hiraコメントする動作は確実だろうけど、一応、確認だけしてみた。※SDカードを使えるようにする必要がある。KIT-RX65N」では、D/A出力は、それぞれ、JoyStick、SW2に接続されているので、仮に配線して音出しの確認をしてみた。問題なくMP3の再生が出来た。※将来的には、SPI通信とかで16ビットのD/Aをに出力する予定。このボードは「E2-Lite」オンボードなので、プログラムの書き込みは多少大きいサイズでも、短い時間で書けるのが良い。物はPWM出力のRCフィルターが付いているが、まぁ問題無い。多少注意が必要と思う。hiraコメントするWAVファイルの再生は出来た、しかしこれは当たり前すぎて、面白みが無い。自分も確認の意味も含めて、実験してみた。ライブラリを使う(これも先人と同じ)。このライブラリ、かなり低負荷でMP3のデコードが出来るので、色々なプラットホームで使われている。※凄く昔に、i486DX100とかで、MP3をデコードするのがカツカツだったように思う、それから考えると、ワンチップマイコンでデコードできるのはかなり画期的な事だと思う。DMACの制限により、1024ワード以上のバッファを転送するには別の工夫が必要な事から、MP3デコーダーとD/Aのバッファの間にもう一つバッファを設ける事にした。生して、再生が途切れてしまう。MP3デコーダーにMP3ファイルを食わせて、回してみた、約4分くらいのファイルを1/2くらいの時間でデコードした、これなら、十分実用になる。動するので、その変動時間を吸収できる量のバッファが必要と思われる。簡単な実験では4096ワードでオーバーランが微妙に発生する感じなので、倍の8192ワード設けるようにした。※色々な曲を再生して聴いていたら、それでも怪しいファイルがあったので、さらに倍にした。MP3の別の問題として、タグの問題がある。定長)、バージョンの違い、文字コードの種類など、かなり面倒な仕様となっている、オープンソースのタグのパーサーはいくつかあるのだが、組み込みマイコンのような少メモリの設計では無いのが痛い、結局は、「車輪の再発明」となる。タグには感知しないので、もしID3V2タグが先頭にある場合、デコーダーに食わせる前に、タグを見つけ出して、その部分を飛ばす必要がある。利用したが、やはり、組み込みマイコンにポートするには大掛かり過ぎる。※とりあえず、ID3V2を見つけて、スキップするだけの実装を行った。残念と思うのは、RAMの使用量が意外と大きい(現在81Kくらい)ので、RX621、RX62NなどのRAMが少ない(確か64K)マイコンでは使えないと思う。(外部メモリーを実装すれば問題無いだろうか)※プログラムサイズは、280K程度。コンパイル、ライブラリとヘッダーを上げてある。hiraコメントするDMACを使い、D/A出力に気を良くして、WAVファイルの再生も行ってみた。以前にRL78/G13を使い、8ビットPWM変調を使った、WAVファイルの再生を行った事があり、その時のリソースを使ったので、とても簡単だった。RX64MはRL78/G13より桁違いに強力なので、処理負荷的には全く問題無い。各種サンプルレートに対しては、単純にサンプリングレートを変化させて行った。RX64Mにはサンプリングレート変換のハードウェアーがあるのだが、RX65Nには無いので、それも踏まえている。※RTK5_RX65Nでオーディオプレイヤーを作るのが本命。DMACのトリガーとなる、TPUタイマーのクロック(60MHz)では、44.1KHzは割り切れないので正確ではない。(44.118KHz)※48KHzは割り切れるので、正確なタイムベースとなっていると思う。※22.05KHzや38KHzもやはり割り切れないので正確では無い。12ビットのD/Aを使った簡易再生なので、多少の事は妥協する。それでも、聴いた感じは、そんなに悪くは無い。(8ビットのPWMでもかなり良い音がする事に驚く)44.1KHzを48KHzにアップコンバートするのは、簡易的な方法ならそんなに難しく無いので、44.1から48へソフトでアップコンバートするのでも良いかもしれない。ファイルを順番に再生する。※WAV形式では無いファイルは無視する。再生が始まる時、コンソールにヘッダー情報を表示し、時間経過をコンソールに出力する。プレイヤーを制御できる。WAVファイルは、48KHz、44.1KHz、38KHz、22.05KHz、8、16ビット、モノラル、ステレオのPCM形式ファイルに対応する。※8ビットやモノラルはあまり実験していないので不具合があるかもしれない。※GR-KAEDEでも簡単な修正で動かす事ができる、方法を知りたい場合は、コメント欄にどうぞ。動作すると思うが、いくつか問題がある。・SDカードのハードウェアー「DO」端子のプルダウン問題を回避する必要がある。※色々な解決策があると思うが、「main.cpp」に具体的な回避策を載せてあるので参考にして下さい。・D/A出力0がLED4に接続されているので、ジャンパーを飛ばす必要がある。