VBlankとVIntの理解不足
誰でも属性が消えない記事になってしまったェ・・・。すまん。
フォロワー以上限定無料
記事を最後まで読む事が出来ます
無料
クリエイター支援サイト Ci-en
フォローするにはユーザー登録が必要です。
OpaiTheSailorMan 2023/09/28 11:51
誰でも属性が消えない記事になってしまったェ・・・。すまん。
記事を最後まで読む事が出来ます
無料
OpaiTheSailorMan 2023/09/27 23:27
記事を最後まで読む事が出来ます
無料
OpaiTheSailorMan 2023/09/27 11:34
なんだかんだやってたら、テストVGMデータまで用意できた。
記事を最後まで読む事が出来ます
無料
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してるとどうなるかを俺は体験していない。
あたりからやらないといけない。・・・俺、まったく音のことわからないんだけど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