サウンドを再生させたい
サウンドを自由に鳴らしたいな♪ はい、SND_startPlay_XGM()♪
その前に俺は戦わなければいけない奴がいる。これまで手を抜いていたDMA処理である。
VDP_loadTileData()、VDP_loadTileSet()、DMA_transfer()、PAL_setPalette()、VDP_updateSprites()等だ。
こいつらをDMAでタイミング・転送容量を気にせず呼び出しているために、Z80はかなり停止しているはずなのだ。
解決案としては、1フレームの転送容量を守りVBlank以外はDMAしない状況を作り出す。効率的に行うにはDMA_QUEUEを使ってフレーム内のCPU処理とDMAを分けるのがいいのかもしれない。
とはいえ、がっつりDMAしてるとどうなるかを俺は体験していない。
- ccccでいいから一定間隔でFM音源をループで鳴らす
- vgmデータを作る必要がある(MML→VGMあたり?)
- 長時間DMAするコードを追加(一定間隔が延びるのか確認する)
あたりからやらないといけない。・・・俺、まったく音のことわからないんだけどw
というメモだった。
SGDK/inc/vdp_tile.hから抜粋
>> ~190 bytes per scanline in hardware (during blanking)
SegaGenesisSoftwareManualから要約
>> NTSC VERTICAL RETRACE = 38 RASTER
SGDK/inc/dma.hのDMA_setMaxTransferSize()から抜粋
>> VBlank period allows to transfer up to 7.2 KB on NTSC system and 15 KB on PAL system.
俺の適当計算
>> 38 RASTER * 190B/line = 7220B