似非OPMでSFG-05のBIOS ROMが動作しない件

当方からリリースしている似非OPM-ROMですが、FlashROMにSFG-05のBIOS ROMをインストールした際、CALL MUSICでフリーズするという報告がありました。

うっかりしていました。動作テストではSFG-01のBIOS ROMを使っていて、CALL MUSICで不具合が確認できなかったので油断していました。実際にSFG-05のBIOS ROMで確認してみると確かに下画像のような状態でフリーズします。

turboR(Z80モード)では、MSX2と同じ白画面でフリーズしました。本物のSFG-05をスロットアダプタ経由でこれらの機体に挿した場合は問題なくCALL MUSICできました。

ちなみにSFG-05より若いスロットにMSX-MUSICのFMBIOSが存在する場合(松下2+やtR等)はCALL MUSICするとMSX-MUSICの方が有効になってしまうので、SFG-BIOSで動かす場合はCALL MUSICAとか、MUSICの後に適当な文字が必要です。


原因追求

SFG-05のBIOS ROMを逆アセンブルして調べてみたところ、SFG-05のBIOSはZ80の割り込みモード2(IM2)を使っていることが明らかになりました。海外のサイトには以下の情報が出ており、この件については既知だったようです。

http://map.grauw.nl/resources/midi/ym2148.php

本来MSXではIM1しか使われないことになっており、MSXのメインROMもそのような構造になっています。しかし、SFG-05ではCALL MUSICでPage0のシステム領域をゴッソリSFG-05のROMに差し替えて、MSXとは別のシステムで動作しているような状態になっていました。当然MSXのBIOSコールは使えませんが、強引にIM2を使うような手法も採れるというわけです。

Z80のIM2はどのように使われるのか、Z80のデータシートを調べてみました。IM2の状態で割り込みが発生すると、Iレジスタに定義した上位8bitと、割り込みコントローラ(特別に用意されたハードウエアが)が発行する下位8bit(IRQベクタ)が示すテーブルに書かれているアドレスがCALLされるようです。

IRQベクタの下位8bitは、下のチャートが示すように/M1と、/IOREQがLレベルに落ちたタイミングで、割り込みコントローラが出力したデータを取り込むことになっています。

SFG-0xの回路図を見ると/IOREQと/M1がL時に/BUSDIRを立ち下げてコントローラ(YM2148)に入力しています。このタイミングでYM2148がデータバスにIRQベクタの下位8bitを発行していると思われます。

先程のGrauwさんのサイトを参照すると、SFG-0xのIRQベクタを書き込むアドレスはこのように定義されていました。

SFG-0xでは予め3FF3h、3FF4hにIRQベクタ(下位8bit)を書いておくと、割り込みが発生した時にYM2148がこの値をデータバスに出力する仕組みになっていると解釈できます。MIDI割り込みと外部割り込みの2種類がありますが、MIDI割り込みはYM2148自身が発行するものなので、このときは自動的に3FF3hの値を発行して素早く処理に移行しているのでしょう。おそらくMIDI割り込みの精度を高めるためにこのような仕組みにしたものと思われます。

外部割り込みとしてはOPMのタイマー割り込みと、VDPの割り込みがありますが、このときは3FF4hの外部IRQベクタを発行してソフトウエア的に識別しているようです。

似非OPMではMIDI割り込みが発行されることはないので、3FF3hのレジスタは無視して良さそうに見えます。CPLDで再現する場合は新たに3FF4hに8bitのレジスタを設けて、/M1と/IORQがLになったタイミングで/BUSDRをLに落とした上でデータバスに値を出力するように作ればSFG-05のBIOSも動作するかもしれません。


ハードウエア的に検証してみる

CPLDリソースの都合で似非OPMにIRQベクタを発行する機能を付加するのは難しいので、専用の基板を作成して検証してみます。

実験用に適当な試作機の基板から、Z80のアドレスバスとデータバスがすべてCPLDに繋がっているものを選択しました。/M1は適当な未使用ピンに繋げればいいでしょう。CPLDには下記のようなVHDLで書き込みました。

問題はこの基板にも似非OPMと同じ/SLTSLを与える必要があることですが、核スロのCPLDを書き換えて外部スロットをどちらも#X-0になるようにして実験しました。

その結果、似非OPMでもSFG-05のCALL MUSICが立ち上がりました。ただし、このソフトは外付けのミュージックキーボードを必要とするらしく、似非OPMで起動しても特に使い道はなさそうです。MusicCompoer2も起動はするようでした。しかし、MIDI割り込みについては未処理なので何らかの不具合は出るかもしれません。


似非OPMでの根本的な対処は不可能と結論

ということで、フリーズの原因はIM2の使用と断定しました。似非OPMでIM2に対応させるには、MegaROM対応を諦めてCPLDのピンアサインを変更して基板を作り直すレベルの話になりますが、コストやCPLDリソースを考慮すると、ちょっと現実的ではありません。

似非OPMはネットで出回っている楽曲データを生のFM音源で再生したり、OPM音源付きのMegaROMソフトを作れるというコンセプトで設計したものです。SFG-0xの互換性については、MIDIやミュージックキーボードの接続機能を排除していることから分かるように割り切っています。YAMAHAの作曲ソフト群についてはオマケで動けば…くらいに思っていました。

とはいえ、似非OPMは取説でSFG-0xとの互換性を謳っていましたので、優良誤認を誘っていると指摘されたら反論はできません。YAMAHAのソフトで使うことを目的に購入された方には、ご期待に添えずに申し訳ございません。本件を理由に返品をご希望される方がおられましたら応じますので、所有されている似非OPMにご自身のネットネームが書かれている紙片を重ねて写真を撮り、この記事のコメント欄にネットネームとメルアドを記入した上で画像ファイルを添付してください。折り返しメールで返送・返金についてご案内します。記入されたメルアドは管理者のみに通知され、外部には公開されません。勝手ながら期限は5月末日までと設定させていただきます。


似非OPMの活用事例

GrauwさんのVGMPlayやいとけんさんのMAmi-VSIFドライバ等、一般ユーザーが作成しているフリーソフトは、SFG-0xのROMの0080hに存在する識別文字列を読んでいるだけなので、SFG-05のBIOSをインストールした状態でも特に問題なくお使いいただけます。

TINY野郎さんがyoutubeで公開されているゲームミュージックデモは動画の概要欄のリンクからダウンロードできます。

https://www.youtube.com/@tiny_yarou/videos

例えばこういうのです。

海外でMSXゲームのOPMパッチが公開されているものがあり、これらで似非OPMを発音させることもできます。

https://github.com/ToughkidDev/mglOcm/tree/master/ArcadeEnhanced

ただし、これらの中にはOPMを3FF0-3FF1hではなくミラーアドレスの7FF0-7FF1hでアクセスしているものがあります。その場合は似非OPMの基板を取り出してJP1にハンダを盛ってショートしてください。JP1ショートで似非ROMは16kバンクモードになり、OPMは3FF0-3FF1hでも7FF0-7FF1hでもアクセスできるようになります。16kバンクモードではFlashROMの書き込みが正常にできませんので、書き込み時はJP1のハンダを除去して8kバンクに戻してください。


似非OPMの4MHzモードについて

GrauwさんのVGMPlayはOPMを3.58MHzで鳴らすことを前提に周波数を変換しています。変換されるのは常にPSG側であり、FM側は変換されません。例えば原曲が4MHzの曲を3.58MHzのOPMで再生した場合、OPMは周波数変換されず低いキーで再生され、PSGはそれに合わせて低いキーに変換されます。原曲が3.58MHzの場合はどちらも変換されずに原曲通りに鳴ります。

似非OPMには4MHz切り替えスイッチがありますが、VGMPlayではこれを識別できませんし、周波数指定するオプションも存在しません。よって4MHzモードで原曲4MHzの曲を再生すると、OPMは正しいキーで発音される一方で、MSX本体が出力するPSG音声が低いキーに変換されて不協が生じます。

この問題を回避するには、VGMplayにパッチを当ててOPM 4MHz用の実行ファイルを作る必要があります。具体的には下記のように書き換えてください。

■OPM(YM2151) 4MHz化 : VGMPlay msx (ver1.3)
68EAh [99 9E 36] → [00 09 3D]
6928h [99 9E 36] → [00 09 3D]

これで本体PSGと調和するはずです。ちなみに似非OPMではSFG-0xとは異なり、音声信号をMSX本体のスロットに出力しません。PSGとミキシングする場合は、MSX本体の音声出力を似非OPMの入力端子に接続してください。ミキシングバランスは似非OPM背面のVRで調整できます。

以上の件は調和しないという報告がありましたので一旦保留にします。

SG-Mk3 OPLL増設基板 Rev.1b/1c 改修のご案内

ご注意:2023年1月末日をもって改修受け付けは終了していますが、記録として以下の記事を残しています。


2021年9月にリリースしたSG Mk3 FM音源増設キットに若干の不具合があることが判明しました。対象は基板に「Rev.1b」とプリントのあるものです。2022年8月リリースのRev.1c以降ではこの問題は解消されています。

2022.9.16追記)新たにRev.1cにも不具合が判明しましたので、改修対象にいたします。

改修対象のRev.1b 基板

不具合の内容は下記の通りです。

  1. 3倍速クロックアップ動作時にFM音源が異常な発音をすることがある(Rev.1b)
  2. FMサウンドにノイズが混入することがある(Rev.1b)
  3. 一部のソフトでFM音源とDCSG音源が正しく切り替わらない(Rev.1b/1c)

お買い上げ頂いた方にはお詫び申し上げます。


原因と対策

不具合1については3倍速(10.74MHz)動作中のFM音源アクセス時にCPLDで生成していたCPU Waitが不適切であったことが原因でした。通常クロック(3.58MHz)動作中は問題ありません。

解決策はCPLDファームウエアのUpdateです。本記事内で改修版のファームウエア(JEDファイル)を公開しますので、XilinxのCPLD(XC9536XL-VQ44)の書き換え環境をお持ちの方はご自分で書き換えて頂いても結構です。

不具合2については、採用したOPAMP(U7:LM358)の特性によるもので、FM音源の発音時にチリチリとしたノイズが混入することがあります。解決策はOPAMPの交換で、LM358をNJM4580CGに張り替えることでノイズが解消します。

不具合3については、#F2hレジスタの実装の問題でした。過去のSMS実機の解析により、#F2hレジスタのbit1がDCSGのMute制御レジスタだと思っていたのですが、実際にはbit0もDCSGのMute制御に関わっていることが判明しました。改修にはCPLD書き換えが必要です。(2022.9.16追記)

NJM4580CGは2022年8月現在秋月電子さんで5個120円で販売されています。腕に自信のある方はご自分で交換して頂いても結構です。LM358を取り外す際は、パターン損傷を避けるため、半田をタップリ盛って半田ゴテ2刀流で作業されることをオススメします。

CPLD書き換え環境をお持ちでない方や、OPAMPの張替えに自信のない方を対象に、当方で郵送による改修を行います。ご希望される方は下記要領に従ってお申し込みください。


対象製品

2021年9月に家電のKENちゃんで頒布したSG Mk3FM音源増設キット「SG Mk3 FM SOUND BOARD Rev.1b」とプリントのある基板。

2022年8月に家電のKENちゃんで頒布したRev.1cとプリントのある基板も改修対象です。(2022.9.16追記)

改修内容

  • CPLDファームウエアのUpdate(Rev.1b/1c)
  • U7のOPAMP「LM358」を「NJM4580CG」に交換(Rev.1b)

受付期間

2023年1月末日までとさせていただきます。お早めのお申し込みをお願いします。(改修対象拡大に伴い期間延長しました)

改修受付窓口

このblog記事のコメント欄が受付窓口となります。コメント欄が見当たらない時にはこの記事のタイトル「SG-Mk3 OPLL増設基板 Rev.1b/1c 改修のご案内」まで戻り、タイトルをクリックしてください。

コメント投稿時のお名前はネットネームで結構です。

必ずメールアドレス欄にご連絡可能なメルアドを記載してください。メルアドは非公開です。コメントは管理人による承認後に公開されます。投稿後にコメントが表示されなくても再投稿せずに数日お待ち下さい。

対象製品を所有されていることを確認させていただくため、ネットネームが書かれたもの(紙切れで結構です)と対象製品が一緒に写っている画像ファイルを添付してください。フォーマットはJPG,PNG,GIFでファイルサイズは32MB以内です。

以上で受付は終了です。1週間以内に当方より対象製品の送付先をメールでご連絡いたします。メールが届かない場合は、メール受信ソフトにより迷惑メールに分類されていることがありますのでご確認願います


送付の方法

返送先を記載した宛名ラベルを作成してください。郵便番号、住所とお名前を記載した4cm x 7cm程度の白い紙きれで結構です。また、宛名ラベルの裏には申込み時に使われたメルアドを記載してください。メルアドにより申し込み者と現物の紐付けをしますので忘れずに記載してください。

宛名ラベルは製品の返送時に封筒に糊付けしてお返しします。返送先が分からないと製品をお返しできませんの忘れずに添付してください。

対象基板の背面に実装されている連結ピンは非常にデリケートです。取り外しの際はピンが曲がらないように、少しずつ慎重にソケットから引き抜いてください。連結ピンは適当なIC保護用のスポンジや発泡スチロールの切れ端等に挿し込み、輸送時にピンが曲がらないように保護してください。梱包の不備に由来する折損があった場合、当方は修復いたしません。対象基板のICソケットに実装されたCPUは取り外してください。CPUは添付不要です。対象基板は適当なクッション材で包み、宛名ラベルと一緒に封筒に入れ、任意の手段で発送してください。参考までに厚さ3cm以下、重量100g以下の定形外郵便の送料は140円です。恐れ入りますが往路の送料はご負担願います。

送料は実際にかかった送料に関わらず、返送時に140円分の切手でお返しします。(2022.9.16変更)

参考:手紙の基本料金(郵便局)

https://www.post.japanpost.jp/send/fee/kokunai/one_two.html

参考:サイズ・重さの対応について(郵便局)

https://www.post.japanpost.jp/service/standard/one_size.html

改修にかかる材料費や手数料は不要です。改修後の製品の返送料は当方で負担します。

製品改修に要する時間

ポスト投函後2週間以内に改修品がお手元に届くように努力しますが、郵便事情や個人的事情によって遅れることもあります。返送は普通郵便で行います。2週間以上経過しても到着しない場合は当blogのコメントかメールでお問い合わせください。

個人情報の取り扱い

お預かりした宛名ラベルに記載された個人情報は当方では複写・記録いたしません。そのまま製品の返送時に郵便物に貼付して返却します。

メルアドは当方サーバーに一時保管されますが、受付期間終了後にblogのコメントと共に消去します。


Xilinx CPLD書き換え環境をお持ちの方へ

下記JEDファイルをCPLDに書き込むことによって改修することもできます。自己責任において行ってください。当方ではCPLD書き換え方法に関するサポートはいたしません。未経験の方は郵送での改修をお申し込みください。

http://niga2.sytes.net/sp/mk3opll_kai_CPLD.zip

http://niga2.sytes.net/sp/mk3opll_kai2_CPLD.zip (2022.9.16 Updateしました)

数量把握のため、書き換えに成功された方はこの記事のコメント欄にご報告いただければ幸いです。

お手数をおかけしますが、以上よろしくお願いいたします。

漢字FlashROM 初期ロット改修について

ご注意:2021年末をもって改修受け付けは終了していますが、記録として以下の記事を残しています。


当方より2021年10月にリリースいたしましたMSX用「漢字FlashROM」に不具合が発覚しました。

第一報(2021.9.30)

その後の調査で、故障の原因となり得るバス競合は発生しないと判明しましたが、動作不良を生じる可能性はありますので対象製品を回収し、CPLDを対策済のファームウエアに書き換えて返送します。詳しい原因や対策については下記文書をお読みください。ご不便をおかけして申し訳有りません。

調査報告書(2021.10.26)


対象製品

2021年9月25日~9月30日に家電のKENちゃんさんの委託販売にて頒布した漢字FlashROM基板と、ケース入り漢字FlashROM。

2021年10月以後の頒布品は改修済み製品になりますので対象になりません。


受付期間

2021年12月末日までとさせていただきます。お早めのお申し込みをお願いします。


改修受付窓口

このblog記事のコメント欄が受付窓口となります。コメント欄が見当たらない時にはこの記事のタイトル「漢字FlashROM初期ロット改修について」まで戻り、タイトルをクリックしてください。

お名前はネットネームで結構です。

必ずメールアドレス欄にご連絡可能なメルアドを記載してください。メルアドは非公開です。コメントは管理人による承認後に公開されます。投稿後にコメントが表示されなくても再投稿せずに数日お待ち下さい。

対象製品を所有されていることを確認させていただくため、ネットネームが書かれたもの(紙切れで結構です)と対象製品とご愛用のMSXの一部が一緒に写っている画像ファイルを添付してください。フォーマットはJPG,PNG,GIFでファイルサイズは32MB以内です。

添付画像例

以上で受付は終了です。1週間以内に当方より対象製品の送付先をメールでご連絡いたします。メールが届かない場合は、メール受信ソフトにより迷惑メールに分類されていることがありますのでご確認願います。


送付の方法

返送先を記載した宛名ラベルを作成してください。郵便番号、住所とお名前を記載した4cm x 7cm程度の白い紙きれで結構です。また、宛名ラベルの裏には申込み時に使われたメルアドを記載してください。メルアドにより申し込み者と現物の紐付けをしますので忘れずに記載してください。

宛名ラベルは製品の返送時に封筒に糊付けしてお返しします。返送先が分からないと製品をお返しできませんの忘れずに添付してください。

ケース付き漢字FlashROM、または本体内蔵のためにICソケットや連結ピンを実装されている場合は、重さが100gを超えないように、厚さが3cmを超えないように適当なクッション材で保護して宛名ラベルと一緒に封筒に入れ、日本郵政の定形外郵便で発送してください。送料は140円かかります。

基板単体の場合は重さが50gを超えないように、厚さが1cmを超えないように宛名ラベルと一緒に封筒に入れ、日本郵政の定形郵便で発送してください。送料は94円かかります。

参考:手紙の基本料金(郵便局)

https://www.post.japanpost.jp/send/fee/kokunai/one_two.html

参考:サイズ・重さの対応について(郵便局)

https://www.post.japanpost.jp/service/standard/one_size.html

いずれも送料は返送時に切手でお返しします。上記以外の手段で送付されても構いませんが、実際にかかった送料に関わらず、お返しするのは上記料金の切手で替えさせていただきます。


製品改修に要する時間

ポスト投函後2週間以内に改修品がお手元に届くように努力しますが、郵便事情によって遅れることもあります。返送は普通郵便で行います。2週間以上経過しても到着しない場合は当blogのコメントかメールでお問い合わせください。


ソフトウエアのUpdate

改修済みの漢字FlashROMに対するFlashROM書き換えソフトはKFLASH.COM ver.0.06 以降が必要になりますので、下記から最新版をダウンロードしてください。

http://niga2.sytes.net/sp

旧バージョンの公開は停止します。初期ロット製品を改修せずに書き換える場合はKFLASH.COM ver.0.06に「/I」オプションを付けて実行してください。


個人情報の取り扱い

お預かりした宛名ラベルに記載された個人情報は当方では複写・記録いたしません。そのまま製品の返送時に郵便物に貼付して返却します。

メルアドは当方サーバーに一時保管されますが、受付期間終了後にblogのコメントと共に消去します。


Xilinx CPLD書き換え環境をお持ちの方へ

下記JEDファイルをCPLDに書き込むことによって改修することもできます。自己責任において行ってください。当方ではCPLD書き換え方法に関するサポートはいたしません。未経験の方は郵送での改修をお申し込みください。

http://niga2.sytes.net/sp/kflash_jed.zip

数量把握のため、書き換えに成功された方はこの記事のコメント欄にご報告いただければ幸いです。

お手数をおかけしますが、以上よろしくお願いいたします。