OPM(YM2151) レジスタ書き込みウェイト

主にX68000の事例をまとめました。
3
EXCEED. @TransAmGTA92

X680x0 の OPL へのアクセスって、黄金書式があって、こう書くと、どのような環境でも、今の所失敗に遭遇したことがない。 tst.b $e9a001 1: tst.b $e90003 bmi 1b move.b ??,$e90001 tst.b $e9a001 1: tst.b $e90003 bmi 1b move.b ??,$e90003

2021-03-25 01:45:25

 
 

本編

ネコルソン @neconeco64

FM音源という奴はですね・・・・割り込みが上がってきてもそのままFM音源レジスタにアクセスすると、FM音源側の動作が遅くて死ぬんですよ・・・・ [Twn/API1.1]

2013-04-08 19:50:25
ネコルソン @neconeco64

こういうコードが必要 tst.b $e9a001 ; 時間つぶし move.b d0,$e90001 ; FM音源レジスタ tst.b $e9a001 ; 時間つぶし move.b d1,$e90003 ; FM音源データレジスタアクセス [Twn/API1.1]

2013-04-08 19:54:48
ネコルソン @neconeco64

tst.b $e9a001 はI/Oポートにダミーでアクセスしてるんだけどあれを抜くとクロックアップ環境でFM音源レジスタ書き込みが死んでしまう、という懐かしいお話 [Twn/API1.1]

2013-04-08 20:00:27

EXCEED. @TransAmGTA92

そういえば、X680x0版「上海・万里の長城」だけど、記憶では X68030で動かすと稀に音が若干変になることがあって、逆アセンブルソースを見てみたら、OPM のウェイトを取るのに非常に苦労したと思われる形跡があったっけなぁ・・・

2014-10-22 03:09:35
しーもす/VTuber始めました(変⚙️c-mos℠) @CMOStone

@TransAmGTA92 030やヘタするとXVI以降では、Busyウェイトは当然として、レジスタ番号を書き込んだあとにデータを書き込むのに、少し時間が必要なんですよね。10MHz機でmovep命令でレジスタを叩けないのも、このせいっぽいです。

2014-11-05 21:10:45

あるきち𝕏 @ 3/23 レゲット Lv.2 @arx_uho

XVIで沙羅曼蛇。 全く処理落ちせず、アケ版より快適ですが、OPMの音が狂っておかしくなります。 ADPCMは正常。 ちなみに、030だと全く問題ないです。 たしかOPMへのウェイトをハードでサポートしたとか。 pic.twitter.com/P2Ea9p1NG0

2014-11-24 17:24:30
拡大
しーもす/VTuber始めました(変⚙️c-mos℠) @CMOStone

@mucom88 @arx_uho Busyチェックやってるソフトでも、 lea.l $e90001,a0 move.b ♯d0,(a0) move.b ♯d1,2(a0) みたいなかなり速い書き込み方をしてると、16MHz以上では失敗してましたね。movepは10MHzでも×。

2014-11-24 17:40:55
しーもす/VTuber始めました(変⚙️c-mos℠) @CMOStone

@mucom88 @arx_uho 先生!こうです! lea.l ♯$e90001,a0 move.b d0,(a0) move.b d1,2(a0)

2014-11-24 17:46:40
あくぞう @akuzo2p

@arx_uho 030ってI/O全体的にウェイト入ってるよね?

2014-11-24 17:45:05
しーもす/VTuber始めました(変⚙️c-mos℠) @CMOStone

@akuzo2k @arx_uho 入ってますね。OPM以外のところではきちんと同期取れてます。

2014-11-24 17:53:17

GIMONS @kugimoto0715

OPMのステータスレジスタのBusyはデータ書き込み後はアサートされますがレジスタ番号を設定するだけならアサートされない。だからといってレジスタ番号設定の直後にデータ値を設定すると失敗するみたい。レジスタ番号設定でも一瞬だけBusy状態があるんだろうな。どれくらいの時間何だろう?

2015-03-04 10:16:49
うさ@DIVE ON BEEPで販売中! @e_usapon

@kugimoto0715 10MHzの時はnopを2・3個入れれば大丈夫だったと思う

2015-03-04 10:28:56
k @pd780c

@kugimoto0715 あれ、30だとレジスタ書込み後も一瞬だけBUSYの検出できませんでしたっけ?昔の事だからかなり記憶が曖昧だけど…10MHz機だと連続書込みでもあまり問題は出ないんですけどねー。OPMは不明だけどOPNとかは12~17の音源クロック時間が必要なようです。

2015-03-04 11:09:16
GIMONS @kugimoto0715

@pd780c 個体差があるかもしれませんね。僕のX68030 35MHzでは取れないんですよね。

2015-03-04 11:26:51
k @pd780c

@kugimoto0715 あぁ、クロックアップ機だとOPM I/OのウエイトがおかしくなるのでBUSYが立つ前に次のCPU命令に行っちゃうかも・・・YM2151は250nsの間隔で動作してますからねぇ・・・

2015-03-04 11:31:48
GIMONS @kugimoto0715

だいぶおかしな情報だったのでごめんちゃい。 X68030の35MHzで計測していくとレジスタポートに書き込み後のBUSY状態は約850nsでした。まぁ色々揺れがあるのでOPMは3クロックくらいで750nsですかね。

2015-03-15 15:34:18

EXCEED. @TransAmGTA92

ちなみに、X68030 ではFM音源レジスタへアクセスすると、ウェイトがかかるようになっているけど、CPUキャッシュの影響でそれがうまく働かないことがあるので、やっぱりその辺りのパッチは必要。

2015-12-22 19:16:21
あくぞう @akuzo2p

@TransAmGTA92 むかーし、XVIとかクロックアップ機でもOPMきちんと動くようにウェイト入れる回路とかありませんでしたっけ?

2015-12-22 19:18:07
1 ・・ 5 次へ