[1chipMSX]
拡張WAVE音源の不都合修正
※情報の正確さは保証できません。
SCMD という 2個の SCC を認識して豪華な演奏を楽しめるミュージックドライバソフトがありますが、
1chipMSX の 拡張WAVE音源(SCC) は、2回目の SCMD 起動時に認識されなくなります。
実機や、BlueMSX では2回目でも認識するので、1chipMSX 搭載 SCC のバグなのだと思います。
解析してみたところ、アドレス信号等のデコード結果により SccSel という信号を決定しており、
SccSel の値によって、内部レジスタや波形メモリへのアクセスを決定しているようです。
この SccSel を決定するセレクタの2つ目の条件に「scc_wave_Rch」というコメントが書かれた
ものがあります。あちこちに散在しているコメントで、「ステレオ版SCC」と思わしきものがいくつか
あるのですが、SccSel のところは、コメントアウトされずに生きてます。
SccSel = "11" になる条件は、
(adr(8) = '1' and SccModeB(4) = '0' and mapsel(0) = '0' and (DecSccA = '1' or DecSccB = '1'))
と書かれていて、SccModeB とは、通常 BFFEh に接続されているモードレジスタの内容をラッチした FF 出力です。
adr はアドレス信号線。mapsel は DIP-SW7 の状態(SCC使用時は 0)。DecSccA は SccModeA にアクセスするタイミング
DecSccB は SccModeB にアクセスするタイミングです。
BFFEh というアドレスが指定されると、adr(8) はアドレス値の bit8 なので 1 になります。
DecSccA は不明ですが、DecSccB は 1 になるので、一度でも BFFEh に bit4 が 0 になる値を指定してしまうと
以降、BFFEh にアクセスするときには SccSel は "11" に設定されてしまいます。
一方で、BFFEh に書き込むには SccSel は "00" になっていなければならないという条件があるため、
BFFEh に値を書き込めなくなることになります。
BFFEh に設定する値によって、それ以降の SCC 制御に制限が掛かってしまうために、SCMD のように SCCを認識しない
などの不都合が出てしまうソフトがあるようです。
■解消方法
そもそも 右チャネルのインスタンスは潰されていて、SccSel = "11" になるケース自体が必要のないものなので、
この部分をコメントアウトすることで、この問題を解消できます。
sound/scc/megaram.vhd を開き、下記の青い3行をコメントアウト(行頭に -- を付ける)してください。
SccSel <= "10" when -- memory access (scc_wave_Lch)
(adr(8) = '0' and SccModeB(4) = '0' and mapsel(0) = '0' and
(DecSccA = '1' or DecSccB = '1')) else
-- "11" when -- memory access (scc_wave_Rch)
-- (adr(8) = '1' and SccModeB(4) = '0' and mapsel(0) = '0' and
-- (DecSccA = '1' or DecSccB = '1')) else
"01" when -- memory access (MEGA-ROM)
※各自の責任の下でご利用ください。
[▲上へ]