OPNをOPNAに換装する話

とても興味深いネタが流れてきた。ネタ元は元ファミコンランド中標津店の中の方で、3年前の札幌のイベントでご一緒させていただいた方である。お久しぶりです!

PC-98×1のFM音源といえば、OPN搭載の26K音源、上位互換OPNA搭載の86音源が有名であるが、この基板で改造すれば26K音源を86音源相当にUpgradeできるらしい。98のソフトにはOPNA対応のものが多いので恩恵はかなりありそう。なにより基板がコンパクトで実装場所の不安が少ないのが良い。問題点は作者の方が書いておられるように元のOPNのIOデコード回路の構成によっては換装できない(または極めて困難な)機種が存在することのようである。また、YMF288は汎用ポートが利用できないが、元々ジョイスティックポートを持たない機種であればデメリットにはならないだろう。

自分もやってみようと手持ちのNOTE ORCHESTRA LITTLE-1を調べてみた。98noteの110pバス対応のFM音源の情報は下記リンクに纏められているが、ほとんどがOPN搭載機のようである。

https://j02.nobody.jp/jto98/n_note_sound/fmu.htm

なお、SNEの音源については下の記事からリンクしているUME-3さんのデータベース(EXCELファイル)が詳しい。

http://ohta.music.coocan.jp/packen/board/sne.htm

件のOPNA化基板で改造できるかどうかはBASICでコマンドを投げれば判別できるとのこと。

IOポートの#188hと#18ChがミラーになっていればOPNA化できるらしい。結果は3,3なのでビンゴ!と思いきや、後に罠が待ち構えているのであった。

ガワを開けてみたところY8950が載るパターンが空いていて、ちょっと笑ってしまった。何故かSNEの音源ボードにはY8950やYM3812(OPL2)が乗っている製品があるが、対応ソフトはほとんど出なかったらしい。98のFM音源界におけるベータマックス的存在だろうか。Y8950が実装されていたら剥がしてMSX-AUDIO製作に使えるのに残念、というか、これだけ隙間があったらYMF288でなくてYM2608が載るのでは?

当方、YM2608はMSX用のカートリッジの製作でノウハウがあり、設計データを流用して基板イメージはサクっと完成。YM2608ならADPCM用のDRAMが搭載できるし、ジョイスティックポートも温存できる。OPAMP電源はジャンパー設定で5V単電源と±12Vに対応。98の5V電源の品質が解らないので、とりあえず単電源で作ってみて、ノイズが多ければDC-DCを積めばいいだろう。

3週間で基板が届いたので実装。ガワ内部にはスピーカーがせり出していて、微妙に高さ制限がある。そこでICソケットに細ピンを直挿しし、この上に基板を載せて高さを抑える手法を採った。実装時に半田がソケットに流入しないようにポリイミドテープで保護している。

OPN用DACのYM3014は引っこ抜いてソケット化、2-6-7pをショートしてメインボード側で不使用となるOPAMPの入力をGNDに接続しておいた。OPNAサウンド出力はR14(L側),R10(R側)を撤去して配線。4MHzのオシレータは邪魔なので撤去。その他干渉する部品は倒したりして適当に処置。

OPNAのアドレスA1については、110pバスのAB021がバッファICを経由してGALの7pに入っているのを確認した。ここがA1取り出しポイントであるが、OPNAの/CSは無加工では駄目で、GALの7pを跳ね上げてGNDに接続する必要があった。

当初の調査で#188hと#18Chの読み取り値が3,3を返したのでミラーイメージと思っていたのだが、実は#18Chはミラーではなくfloatingしている模様。試しに#188h,#18Ah,#18Ch,#18Ehを連続して読むと値は3,0,0,0になり、#18Chの値は直前に読んだ18Ahに引きずられて変化した。このボードでは#18ChはY8950に割り当てられているが、データを返すはずのY8950が実装されていないためそのような挙動を示したものと思われる。

METAL FORCEではSPB(スピークボード)として認識し、ADPCMによる合成音声も発音された。ジョイスティックポートに猫の手リモコンを挿せばワイヤレスサタパでプレイ可能。ただ、内蔵スピーカーの音が劣悪なので、ヘッドフォンか外付けスピーカーは必須だろう。

FMPでもスピークボードとして認識した。

偉人による古の作品を鑑賞。ステレオでPCMも鳴っていて、改造前とは別世界である。自分は当時リアルタイムでは98のFM音源文化を経験していなかったが、2023年現在でもソフトやデータが配布されているのはありがたい限り。ドライバやプレーヤーはVectorで配布されている。

肝心の音質は思ったより低ノイズで、クリアに聞こえていると思う(個人の感想です)。OPAMPは5V単電源でも良さげなので±12VのDC-DCはオミットした。ちなみに上のつべ動画のサウンドは実機からの生録で、冒頭から終端まで無加工のもの。


余談であるが、SNEのFM音源は妙なステレオ出力仕様になっていて、OPN音源のLchがSSG、RchがFMに割り当てられていたりする。これをヘッドフォンで聴いたりすると、左右の耳に全く違う音が入ってきてマトモに聴いていられない。スイッチでアナログモードに変更することもできるが、せっかくなのでステレオ効果を温存しつつ脳がバグらない程度にLRをMIXする改造をしてみた。

 

ザックリ回路を解析するとこんな具合。LとRが完全にSSGとFMで分離しているが、これをSSG:FM比率をLch2:1、Rch1:2くらいに調整する。

上図の赤丸で囲ったところに1k抵抗、3k抵抗を追加してみた。GrounseedのOPで試聴するとこんな感じになる。

更に余談だが、Grounseedは非常に楽曲に力が入っていると思うが、OPN版はOPNA版と違う曲に差し替えられていたりする。OPNA版は劇中BGMも神がかっているので、できればスピークボード(または86音源+ちびおと)で、良い再生環境で聴いてみてほしい。

なお、このLR-mix改造はOPNA換装後は意味をなさないが、SNEの変態ステレオ仕様で困っている方の参考になれば幸いである。

初代PC-6001で似非P6ROM使用時に画面が乱れる件

家電のケンちゃんからリリースしている「似非P6ROM」ですが、「特攻空母BELUGA」を初代PC-6001で起動するとタイトルCGが激しく乱れるとの報告がありました。

この現象は当方のPC-6601SRでは確認できませんでした。動画を撮影されたセイさんによると、乱れるのはタイトルCGだけで、ゲームは普通にプレイできるとのこと。さらに調査を進めると、初代PC-6001で、似非P6ROMに搭載されている8000h-BFFFhのRAMがVRAM領域として使われる時に発生することが分かりました。

試しに似非P6ROMのRAMチェッカーを初代P6で実行すると正常に読み書きできていました。

つまり、8000h-BFFFhはRAMとしてはアクセスできているのにVRAMとしては正しくアクセスできていないことになります。


原因の究明

似非P6ROMは戦士のカートリッジの互換機として設計していますが、西田さんのオリジナルとは微妙に仕様が異なります。本家ではP6のスロットの/RAS2と/EXCAS、/DRD2がL時にカートリッジの8000h-BFFFhにレイアウトされたSRAMからデータを読み出す仕様になっていますが、似非P6ROMでは更にアドレスが8000-BFFFhであること、つまり「A15=Hi,A14=Lo」を条件にしています。MSXではこの条件を入れておかないと4000h-7FFFhアクセスがあった時(システムROMのREAD時など)に似非P6ROMのRAMがデータを吐き出してしまい、バス競合が発生して動作しなくなるからです。どうしてそうなるかはMSXとP6のスロットの信号の違いを眺めていれば理解できると思います。

本家の戦士のカートリッジでは初代機でもタイトルCGは正常に表示されますから、このあたりに不具合の原因がありそうです。

さて、P6ではCPUが管理する16bit幅のアドレス上のメモリの一部をVRAMとして利用していますが、画面描画時にCPUはBUSREQを受けてバスを開放し、VDGと呼ばれるプロセッサ(M5C6847)がVRAMアドレスを発行してRAMにアクセスします。ところが、VDGがハードウエア的に生成しているアドレスはA0-A12の13bit幅しかありません。残りのA13はページアドレスとしてVDGの外で生成されていますが、A14,A15を生成する仕組みは見つけられませんでした。つまり、VDGによるVRAMアクセス時はA14,A15がHiレベルでもLoレベルでもなく、浮いていると考えられます。

参考資料:(M5C6847のアドレスバスはDA0からDA12までしかない)

https://en.wikipedia.org/wiki/Motorola_6847

これはP6のスロットに出ている外部DRAM用の信号が、8000h-BFFFhのアドレスデコードを含んでいることを示唆しています。それを裏付けるように、純正のROMRAMカートリッジはスロットのA14,A15には何も繋がっていませんでした。

実際にVDGがVRAMアクセスする時、浮いているA15:A14は論理的には00,01,10,11のいずれかの状態になりますが、似非P6ROMでは「10」の時のみアクセス可能、つまり確率1/4でアクセスに成功することになります。これでノイズの中に部分的にタイトルCGが表示される現象が説明できます。


対策

似非P6ROMのCPLDを改修し、本家戦士のカートリッジ同様に外部DRAM信号を利用したSRAMアクセス時のA14,A15を無視すればVRAMアクセス時の問題は回避できると考えられます。しかしそれをやると似非P6ROMがMSXで動作しなくなってしまいます。

そもそも初代P6がVRAMアクセス時にA14,A15をフローティングにしているのがイレギュラーなので、本体改造してCPUバス開放時の信号をA15=Hi,A14=Loにしてしまえば問題は解決します。例えば以下のような回路になりますが、P6mkII以降はこのような仕組みがカスタムICに入っていると思われます。

しかし、あくまでもVRAMアクセス時にA14,A15が浮いているのは初代P6本体の「仕様」です。よって似非P6ROMの改修で対処するのが正道でしょう。

このように2本の抵抗を使ってA15をプルアップ、A14をプルダウンすると、CPUバス開放時にA15=Hi,A14=Loとなり、似非P6ROMのRAMをVRAMとして正常にアクセスできるようになると思われます。実際にセイさんに検証していただきました。

改修により正しくタイトルCGが表示されるようになりました。このままMSXやPC-6601に挿しても問題なく動作するそうです。デメリットとして、A14、A15の状態遷移がわずかに遅延しますが、通常は問題にならないでしょう。あと、P6のバスバッファ付きの拡張スロットを使うと、末端のカートリッジのプルアップ、プルダウンが無効化されるため画面の乱れが再発します。


結論

今回の不具合は初代PC-6001限定で発動するもので、原因は初代P6の画面描画時にアドレスバスA14,A15が浮いているという「仕様」でした。

初代P6以外で運用する場合は不具合は発生しませんし改修も不要です。画面が乱れる状態で使用を続けていても故障の原因にはなりません。改修する場合も似非P6ROM基板への抵抗2本の取り付けといった比較的簡単な作業で完了します。よって今回の件は「仕様」とさせていただき、当方による改修サービスは行いません。恐れ入りますが、本機をPC-6001初代機でご使用になる方には、抵抗2本の増設による改修を推奨いたします。


補足

後から知ったのですが、P6で様々な検証記事を書かれているMORIYAさんが過去に類似の問題を報告されていました。

http://p6ers.net/mm/pc-6001/dev/flashromcard/32k.html

おそらくこのケースでもROMカートリッジのA14をプルダウン、A15をプルアップすれば問題は解決するだろうと思います。

似非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で書き込みました。

----------------------------------------------------------------
--  Title     : IM2test.vhd
--  Function  : EseOPM IM2 device for SFG-05 compatibility
--  Date      : 15th,Mar,2023
--  Revision  : 0.1
--  Author    : Niga.
----------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

-- update history
--  15th,Mar,2023 by Niga. first release

entity IM2test is
  port(
    pSltRst_n   : in std_logic;                        -- /RESET
    pSltClk     : in std_logic;                        -- CPU clock
    pSltSltSl_n : in std_logic;                        -- /SLTSL
    pSltWr_n    : in std_logic;                        -- /WR
    pSltRd_n    : in std_logic;                        -- /RD
    pSltIorq    : in std_logic;                        -- /IORQ
    pSltAdr     : in std_logic_vector(15 downto 0);    -- Adr A0-A15
    pSltDat     : inout std_logic_vector(7 downto 0);  -- D0-D7
    pSltBusdir  : out std_logic;                       -- /BUSDIR
    pSltM1      : in std_logic                         -- Z80 /M1

 );
end IM2test;

architecture rtl of IM2test is
    signal IRQAd_ext  : std_logic_vector(7 downto 0);     -- Ext. IRQ address
    signal Busdir     : std_logic;

begin
  ----------------------------------------------------------------
  -- BUSDIR output
  ----------------------------------------------------------------
   Busdir <= '0' when pSltM1 = '0' and pSltIorq = '0' else
             '1';

   pSltBusdir <= Busdir;

  ----------------------------------------------------------------
  -- 3FF4h IRQ vector Reset & Write 
  ----------------------------------------------------------------
  process(pSltRst_n, pSltClk)
  begin
      -- Reset
   if (pSltRst_n = '0') then
      IRQAd_ext  <= X"00";

      elsif (pSltClk' event and pSltClk = '0') then
        if pSltAdr(13 downto 0)= "11111111110100" and pSltSltsl_n = '0' and pSltWr_n = '0' then
            IRQAd_ext  <= pSltDat(7 downto 0);			 
        end if;
      end if;
  end process;

  ----------------------------------------------------------------
  -- IRQ vector output
  ----------------------------------------------------------------
   pSltDat <= IRQAd_ext when Busdir = '0' else
              (others => 'Z');

end rtl;

問題はこの基板にも似非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しました)

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

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

似非P6ROM製品版

前スレはコチラ。

http://niga2.sytes.net/wordpress/?p=690

1年間塩漬けになっていた似非P6ROMプロジェクトは2021年11月から本腰を入れて開発再開。OPN2の音質は、高音質化改造されたメガドライブ実機と比較して劣らないレベルを目指し、最終的にOPN2のアナログ電源は+12Vからレギュレータで+5Vを生成して分離、OPAMPはアナログ+5Vの単電源とすることで比較的良好な結果が得られた。+12V電源を要するため、断腸の思い(嘘)でCASIOのMSXは対象外へ。

当初は裸基板でリリースするつもりであったが、試作機を剥き身のまま雑に扱っているうちにFlashROMが壊れる事例が発生したため、ケースは必要と判断。P6系の同人ハードで有名なBAKUTENDOさんの作品に倣って、リップルレーザーさんにアクリルパネル製造を依頼してみた。

前面パネルはクリアブルーを選択。製品名やロゴはテプラの裏貼りとした。コストはかかってしまったが、製品として恥ずかしくない仕上りになった。

PC-6601SRのスロットに挿した状態。程よい出っ張り具合。

もちろんT.Matsushima氏による「特攻空母BELUGA」も遊べる。ソフトウエアはFlashROMのバンク0にプリインストールされている。Mr.PCのファミべーキーボードアダプタや、赤外線ワイヤレスな猫の手リモコンシリーズは家電のケンちゃんで不定期で頒布中(売り切れ御免)。

MSXでは8kバンクで1MbitまでのMegaROMゲームを起動できる。コナミバンクやSCC付きのゲームも動作するが、SCC音は鳴らない。

スロットに挿入する際は逆差し防止機構がないので要注意。上面や背面スロットでは間違わないと思うが、セパレートキーボード機の前面スロットではラベル面が下を向く機種がある


音声ケーブルの接続

似非P6ROMには音声入力端子があり、MSX/P6本体からの出力音声とOPN2サウンドをミキシングすることができる。

ミキシング入力はステレオで、入力レベルはRV1/RV2で調整できる。接続には下のようなケーブルを用意する。

これは秋月電子の3.5mmステレオミニプラグオーディオケーブル(90cm)[DCB-AKI09]を切断してRCAプラグをつけた自作品。LRの芯線はまとめてRCAのセンターピンにハンダ付けした。なお、100均のケーブルは芯線にハンダ付けが困難なリッツ線が使われていることがあるのでオススメしない。

この組み合わせでも接続可能。共立エレショップで取り扱いあり。

出力端子からはラインレベルで信号が出るので、適当なアンプやアクティブスピーカーに接続すればOK。

上画像のようにMSXでVGM再生する場合は、プレーヤーのVGMPlay 1.3ににパッチを施し、Makoto(OPNA)の偽装工作を要する(後述)。MSX本体や周辺機器の状態によっては似非P6ROMでVGM再生出来ないので注意。具体的には、多くのSONY機(HB-F1XD/mk2/XDJ/XVなど)や拡張スロットなどで、スロットのデータバスとCPU間にバスバッファが存在する環境ではNG。MSXのスロットでは、IOデバイスのデータ読み取りの際に/BUSDIR信号でバスバッファに入出力方向の明示をすることになっているが、P6では/BUSDIRのピンに/ExCAS信号が割当たっており、戦士のカートリッジの拡張RAM制御に必要である。このため、似非P6ROMでは/BUSDIR出力をオミットした。これはMSX/P6両対応を実現するための「仕様」ということでご理解いただきたい。なお、松下A1シリーズの基本スロットにはバスバッファが存在しないため、この問題は発生しない(拡張スロットを使うとNG)。MSX用のOPN系音源は、いずれきちんと対応したカートリッジをリリースするつもりなので、主にMSXでVGM再生したいユーザーはそれまで待って頂いたほうが良いと思う。


VGMPlay 1.3パッチ情報

VGMPlay for MSXは下記サイトで配布されていて、ソースコードも閲覧できる。

http://www.grauw.nl/projects/vgmplay-msx/

2022年現在のVGMPlay 1.3はOPN2実音源には対応していないが、Makoto(OPNA)には対応している。OPN2のFM音源部はOPNAと互換性があり、似非P6ROMのOPN2のIOアドレスはMakotoと同じ#14-17hに割り当ててある。よって、Makoto(OPNA)に偽装することでOPN2の発音が可能である。

具体的にはVGMPLayのMakoto検出プログラムを書き換え、OPNAが存在するものと認識させればよい。ソースコードを読むと、OPNAの存在はステータスレジスタやADPCMレジスタを読み書きして確認しているようだ。以下にMakoto検出部分を抜粋。なお、Makoto_STATUS1はIOアドレス#16hを指す。

Makoto_Detect: PROC
	in a,(Makoto_STATUS1)
	and 00111111B  ; ignore BUSY, D6 (N/C)
	ret nz
	ld de,10000000B << 8 | Makoto_ADPCM_CONTROL
	call WriteADPCMRegister
	in a,(Makoto_STATUS1)
	and 00111111B  ; ignore BUSY, D6 (N/C)
	push af
	ld de,00000000B << 8 | Makoto_ADPCM_CONTROL
	call WriteADPCMRegister
	pop af
	xor 00100000B
	ret nz
	scf
	ret

VGMPlay 1.3では、冒頭の IN A,(16h)が59F3hからの2バイト「DB 16」に該当する。ここをSCF ,RETにすればMakotoが存在することになるので「37 C9」に書き換える。これでOPN系のVGMデータが強制的にIOアドレス#14h-17hに流し込めるようになる。

OPN2クロックを変更する場合

似非P6ROMのOPN2クロックはMakotoに合わせて8MHzを選択している。VGMPlay 1.3ではMakotoのクロックが6C79hと6D8Chと725Chからの3バイトに「00 12 7A」と書かれており、10進数に直すと7A1200h=8000000となる。

似非P6ROMではオシレータを追加して8MHz以外のクロックをOPN2に供給することが可能。音源のクロックをメガドラ実機と同じ7.6704MHzにする場合はX1にオシレータ(EPSON SG-8002DC +5Vを推奨)を実装し、左のジャンパーピンを下側ショートにすればよい。VGMPlayの周波数設定は、7670400=750A80hになるので、「00 12 7A」 をサーチして「80 0A 75」と書き換えることになる。ここを直しておかないとPSGとミキシングした際に不協が生じる。

作者のGrawさんがOPN2に対応してくれるまでは、VGMPlayのバージョンが上がっても上記データのサーチ&書き換えで追従できるだろう。


似非P6ROMでVGM再生

実際にどのような音が出るのか、メガドライブのThunder ForceIVのVGMデータを使ってサンプリングしてみた。

MSX本体は初代FS-A1改。電源はiPadの純正ACアダプタでUSB化、内部の±12V電源はDC-DCモジュールで生成している。メガドライブのDCSG音はPSGで代理発音されるので、MSX本体の音声出力からケーブルで似非P6ROMのミキシング入力に接続し、音声出力をPCのUSBオーディオ(UA-30)を経由して録音した。

Thunder force IVの3番、4番、7番、11番、33番目の曲を各30秒収録した。fade out処理以外は無加工で、曲間の無音部にノイズが目立つが、ノイズ成分のほとんどは本体PSGサウンドに由来する。

OPN2単体の音質確認のために同じ曲を本体PSGミキシングなしで収録してみた。ホワイトノイズは聞こえるが、本体のデジタル信号由来のノイズはほぼ聞こえないレベルだろう。

そもそも、OPN2はホワイトノイズが多い石のようで、静かな曲を再生すると背後に雨が降っているようなノイズが混入する。特にThunder force IVの7番の中間部で顕著。こちらもPSGミキシングなしで収録。

この傾向は高音質化メガドライブ実機でも同様のようなので、YM2612実音源の特性なのだろう。


制限事項

似非P6ROMは、P6とMSX両対応とするために敢えていくつかの設計上のお約束を無視しており、そのため以下の制限が発生する。

  1. MSXで似非ROM機能とMSX-MUSIC(OPLL)の同時使用は不可
  2. MSXのVGMPlayでOPN2発音ができない環境が存在
  3. OPN2の割り込み機能は使用不可
  4. スロットに+12Vが供給されていない機種ではOPN2発音不可

1.についてはOPLLのIOアドレス(#7C-7Dh)と戦士のカートリッジのバンクレジスタ(#70-7Fh)が重複することが原因。MSXでの使用時も#70h-7Fhのバンクレジスタは有効で、ここに値を書いてしまうとアドレス空間4000-5FFFhのバンクが切り替わってしまう。OPLLアクセスで#7C-7Dhに書き込んだときも同様に切り替わるので似非P6ROMのFashROMにOPLLを使うソフトをインストールして運用することはできない。なお、これらのIOレジスタは書き込み専用なのでバス競合は発生しない。MIDI-SAURUSなど同じ理由で同時使用できないデバイスが存在するので、IOマップで確認を。

2.は既に解説しているが、スロットのデータバスとCPU間にバスバッファが存在する環境ではVGMPlayでの似非P6ROMのOPN2の発音ができない。具体的には多くのSONY製のMSXや外付けの拡張スロットが該当する。P6とMSXでスロット10pの役割が異なることが原因。FS-A1シリーズの基本スロットであれば問題なく発音できる。

3.はP6とMSXでスロット8pの役割が異なることが原因。MSXではCPUの/INTが繋がっているが、P6では/NMIが繋がっている。MSXでは音源の/IRQを/INTに接続すれば問題ないが、P6ではNMIが発行されてしまってNG。そのため、音源の割り込み機能はオミットした。P6ではスロットに/INTが存在しないので音源の割り込み機能の実装自体が不可能。

4.は、アナログ電源の生成に+12Vを使用していることが原因。OPN2はDAC内蔵音源であるため電源ノイズがモロに音声信号に現れる。MSXのVcc電源はデジタルノイズで酷く汚染されているため、音源のデジタル・アナログ電源の分離は絶対に必要。Vccに含まれるノイズはフィルター回路では十分な除去ができなかったため、比較的クリーンな+12Vを利用することにした。CASIO機(PV-7やMX-10等)ではスロットに±12Vが出ていないので似非P6ROMの音源は使えない。

バス競合のような致命的なエラーは回避できるように設計したつもりであるが、後から別の問題が出てくる可能性はあるかも…。


似非P6ROMのリリース計画

前スレに書いたように、OPN2音源の入手性には問題があるが、初回リリースのみ発音確認したリファービッシュ品を実装して頒布することにした。IC表面が削られてリマークされているので、見た目が怪しい点はご了解いただきたい。

 

音源部組み立てキット版

以後は音源部をキット化した半完成品を頒布する予定であるが、YM2612は各自調達が必要。音源ガチャでドロップした石を死蔵している方には最適かも? こちらも需要はあまり多くないと思うので少数で終息する予定。

似非P6ROMはどちらかというとP6寄りの設計で、MSXでの使用時に何かと制限があるため、主にP6での使用を想定しているユーザーにお求め頂ければ幸いである。