OpaiTheSailorMan 2023/09/27 07:35

サウンドを再生させたい

サウンドを自由に鳴らしたいな♪ はい、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

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索