Z80 リファレンス、in f,(c) の説明を少し改良。「オペレーション」の図がちょっと誤解を招きそうだったので。
これ、in (c) の方が実態として良い表記のように思えるなぁ。
サウンドボードII の ADPCM RAM とフラグ周りを調査した。
結果、MOTOS の時に使った高速アクセスの手法が x1 モードの時には使えないことが分かった。
従来通り BRDY を見ながらコントロールするほかない。
BRDY は立ったフラグをリセットしないといけないので 1byte 読むたびに余計な I/O アクセスが増えて大変よろしくない。
実のところ x8 モードでも 8MHz-H の場合は ini で読み出しをすると連続では失敗してしまうので nop を入れる必要があった。
しかし x1 でそれ以上のウェイトが必要になるようでは積極的に x1 を採用する意義は無いように思う。
さらに深掘りして x1 モードで BRDY フラグが立つまでの時間を計測してみたところ…
書き込みんだ後 8MHz(S) で 133clk ほど(130 では NG)かかった。
読み込んだ後は 106clk ほど(101 では NG)だった。
これは無理だわ…。
SB2 の RAM からの読み込みと PCM(DA) 出力は両立できることも分かった。
「RAM アクセスモード」や「DA モード」的なものは存在しないので読みながら PCM ストリーム垂れ流しが出来る。
EOS フラグは「ストップアドレス+1 到達時」と「プリスケールで設定したサンプリング周期の経過時」どちらも同時に機能する。
ストップアドレス+1 到達での EOS フラグは ADPCM だけでなく単なるメモリ読み出しの場合でも機能する。
EOS フラグの計時はレジスタ $01 の SAMPLE ビット on でスタートする。
ポート $10 へのフラグリセットの書き込みは EOS タイマーのリセットを意味しない。単にステータスフラグが下りるのみ。
レジスタ $29 で各種割込み(例えば EOS 割込み)を禁止してもステータスフラグとしての EOS フラグは立つ。
PC88 の市販ソフトでは全くと言っていいほど使われていない PCM 機能なので、エミュレータでの実装事例も乏しいのだけれど資料として残しておきたい。
たぶん PC98 の 86PCM + ちびおと周りでほぼ解明はされていることだろうから二番煎じっぽいが。
どうでもいいが、PCM のテストに動的に波形を生成する処理を書いてロード時間短縮を図っていたのだけれど、
それよりも既存の人の声でテストする方が圧倒的にパフォーマンスが良かった。
エントロピーは偉大なのであった。
実機テストでかなり時間がかかった。合間合間にやってた RPG が一本終わるほど。
OKI M6258 から YM2608 の ADPCM へ変換する処理も Z80 で書いてあるのでこれも資料に追加しておきたい。
なにやら MSX 方面でも使うらしいが(MSX AUDIO ?)まあこんなところまで見る人は居ないであろう。
ras68k-ext は PCM が相変わらず鳴らない。PC88 の 8MHz でも鳴らないので終戦ムード。
ras68k-ext 更新。ちょっと時間が無いので試せないが、同期コマンドを試していないのでテストしたい。望みをつなぐ。
SDI 更新。p8suite 用に 0x600 バイト余裕を貰ったので今後のことを考える。
大事なものを入れていた USB メモリが死んでショック。
X68000Z はまぁ値段なりのものが出来れば良いのではないですか。識者の尻馬に乗るだけのガヤは気にしなくてよいとおもう。
ジョイスティックポートから SD カードにアクセスするアダプタに興味。
やはり仮想 FDD またはメガ ROM が無いと P6 活動は厳しい。
ラズパイで 80S31 エミュレーションというのもあるようだ。ディスク入れ替えやブートは出来るのかな。
えすびさんの所より、60SR でも画面切らないとフルスピード出ないの…。もうこれ外付けビデオカードの流れだな…。
積みゲー消化中。