NandemoSCC_300.zip 2023/3/5 update!
ダウンロードしたアーカイブの中の forMSXフォルダ内にある SCCBOOT.ROM のみで動作します。なるべく若いスロットにセットして SHIFTキーを押しながら 本体を起動してください。
Mega Flash ROM SCC+SD に焼く場合は以下のように /K5オプションをつけることで SCC搭載ROMとして機能します。また、/Uオプションでスロットの内部拡張をOFFにしてください。
OPFXSD SCCBOOT.ROM /K5 /U
エミュレーターで動作させる場合は、ROMタイプを KonamiSCC にしてスロット1にセットしてください。
forMSXフォルダ内にある NANDEMOSCC.dsk がディスクイメージになります。
(手動でディスクを作成する場合は SCC.COM と SCCBOOT.ROM の2つのファイルを MSX-DOSが入っているディスクにコピーしてください)
ドライブAにディスクを入れてMSX-DOSを起動した後、DOSコマンドラインで
SCC
と入力すると起動します。
また、指定したROMイメージファイル(32KB以内)をディスクからロードして(RAM上に配置した状態で)ツールを起動するには、コマンドに続けてROMイメージファイル名を書いてください。
例えば、SAMPLE.ROM というROMイメージファイルを実行する場合は以下のようになります。
SCC SAMPLE.ROM
もっとも優先順位の低いスロットにSCC搭載のゲームカートリッジをセットしておけば問題なく使用できます(例:SLOT1-0にNandemoSCC、SLOT1-1に起動したいゲーム、SLOT2にSCC搭載カートリッジ)。
NandemoSCCを起動させた後、本体の電源を入れた状態で「SCCが搭載されたゲームカートリッジ」をスロットにセットし、[ESC]を押すと認識します。
ただし、このような「後差し」は失敗すると本体にダメージを与える可能性があるようなので、くれぐれも自己責任で行ってください。
※DISK版のゲームについてはこの方法で遊ぶことはできません(SCC搭載のゲームカートリッジが先に起動してしまうため)。
※turboR専用機能については【tR】、RAMが16KBでも使用可能な機能については【16K】と記述してあります。
SCC chA~chC … SCCの各チャンネルの波形を選択します。
PSG … SCCを鳴らす際、PSGも同時に鳴らすかどうかの設定です。
※後述のBIOS設定が「COPY FROM PSG」になっている場合、この設定は強制的に ENABLE になります。
MSX-MUSIC … FM音源を使用するかどうかの設定です。
※「アレスタ」などをFM音源内蔵機種で実行する場合、内蔵FM音源を無効化することでBGMがPSGで演奏されるため、SCC出力が可能になります。
※FM音源が3つ以上接続されている場合の動作は保証されません。
※DISKブートの場合はFM音源を無効化できません。
BIOS … BIOSをどのようにカスタマイズするかの設定です。
SUBROM CALL … MSX2以降の機種では、偽装BIOSとSUB-ROMが同じ基本スロットにあるとスロット切り替えができずに暴走してしまうのですが、それを回避するためのオプションです。
BOOT … ブート時の設定です。
ROM SLOT … BOOT設定が「ROM」の場合に起動するスロットを指定します。設定する数字については以下を参照してください。
CPU … CPUの設定です。SCCとは関係ありませんが、おまけで付けました。
PRG ADDR … SCC演奏ルーチンを配置するアドレスを指定します。
SCC SLOT … SCCが搭載されたカートリッジが入っているROMのスロットを指定します(起動時に自動的に検索されます)。
利用頻度が高い設定をプリセットとして準備しておきました。[1]~[6]までのキーを押すと、それぞれの設定に切り替わります。
※turboRのDRAMモードは完全にBIOSを乗っ取ることができるためかなり強いです。turboRをお持ちの方はぜひDRAMモード(4~6)を使用してください。
NandemoSCCは、本体RAMのPAGE0(0000H-3FFFH)を書き換えてBIOSを偽装しますが、
MSX2でSUB-ROMコールが発生するとPAGE0がSUB-ROMに切り替わり、その後、偽装BIOSに戻ってこられなくなる場合があります(v3.00で改善してみましたが…)。
「本体RAMよりも大きな容量の拡張RAMカートリッジ」をどこかのスロットに差しておくと、本体RAMではなく外部RAMがメインRAMとして使用されるため、
SUB-ROMとのスロット競合が起こらなくなり、起動するタイトルが増えるかもしれません。
バージョン2.5で追加されたBIOS設定の「COPY FROM PSG (HOOK)」ですが、この設定にすると、すべての処理がPAGE3(C000H-FFFFH)で行われるため、SUB-ROMの影響を受けません。
MSX2用のROMで、プリセットの[2][3]でうまく動作しない場合は、ぜひ[7]も試してみてください。
MSX1用のタイトルは、MSX1の本体でプレイしたほうが(SUB-ROMが存在しないので)動作する確率は上がります。
コナミのサウンドチップ「SCC」は、MSXユーザーだった人なら皆さんご存知だと思います。
グラディウス2で初めてSCCサウンドを聴いたときは、本当に感動しました。
最近になり、ネットでSCCの仕様というものを調べてみたところ、
「PSGのサウンドレジスタに渡すデータと、SCCのレジスタに渡すデータは、かなり近い」
ということを知りました。
そこで、以前作った MSX2版MAPPY を SCC音源対応に改造してみたのですが、本当に簡単に、SCCの音を鳴らすことができました。
その後も、いくつかの市販ゲームのSCC改造を行ったりして、一人で ニヤニヤ していたのですが、あることに気がつきました。
ほとんどのタイトルは、同じBIOSルーチンを使ってPSGにアクセスしている のです。
直接ポートを叩いたりしている(と思われる)ものはほんのわずかで、それ以外は全て "CALL 0093H" を使っていました。
ということは、これを自動的に検索・置換するようなツールを作れば、片っ端からSCC化できるのではないか?と。
そうすれば、みんなで ニヤニヤ できるのではないか?と。
以前、SG-1000のソフトをMSXで動かすための SG2MSX というツールを作ったのですが、その時に使った方法を応用して、チャレンジしてみることにしました。
まずは何でもよいので、MSXの市販ゲームをSCC対応してみることにしました。
BIOSを使用してPSGレジスタにデータを送る場合、WRTPSG(0093H)というBIOSルーチンを使います。
PSGレジスタ番号をAreg、出力データをEregに入れてこのアドレスをコールすれば、PSGにデータを出力してくれる、というものです。
そこで、 0093Hをコールしている箇所 を、全て 自前のSCC制御ルーチンをコールする ように書き換えてみました。
ちなみに、「自前のSCC制御ルーチン」といっても本当に簡単なもので、PSG3チャンネル分の「トーンデータ」と「ボリュームデータ」を、該当するSCCのレジスタに出力するだけのプログラムです。
SCCとPSGはこの部分のデータには互換性があるので、アプリケーションから渡ってきたデータを何も考えずにSCCに出力すれば、とりあえず音は鳴るのです。
また、メモリに常駐させる都合上プログラムサイズは限界まで小さくしたかったので、ノイズ制御やハードウェアエンベロープのような「SCCにない機能」はあっさりと諦めました。
プログラムの流れは以下のようになります。
2.については、MAPPYのときに作ったものをそのまま流用しました。SCCの仕様については、ひろゆきさんのページを大いに参考にさせていただきました。ありがとうございました。
3.については、コナミ作品のようにRAM8KBで動くソフトであれば C000H-DFFFHは空いているので、デフォルトではSCC演奏ルーチンはD000Hに置くようにしました(変更可)。
4.については、最大で2ページ分、4000H-BFFFHまでの32KBしか使えないので、32KBを超えたり、バンク切り替えを行っているROMには非対応です。
5.については、CALL命令とJP命令、その他ZフラグやCフラグを見てのブランチ命令などを探して、置換するようにしました。
これを自動的に行う簡単なツールを作り、手持ちのROMをコンバートしてみた結果…
かなりのタイトルがSCCで鳴りました!
色々条件はありますが、ナムコット系や初期のコナミのタイトルなどは結構動作するので、これでも十分楽しめました(^_^)
ここまでは比較的あっさりとSCC対応ができたこともあって、ちょっとだけ欲が出てきました。
「グラディウスをSCCで鳴らしたい!」
SCCが初めて搭載されたのは「グラディウス2」だったと思いますが、元祖「グラディウス」もSCCで鳴らしてみたいと。
コナミゲームコレクションのSCC対応版グラディウスはありますが、それはそれとして(^_^;)
グラディウスは、1メガROM(128KB)のカートリッジなので、前の例のようにRAM上にロードして書き換える、というようなことができません。
また、仮にRAMにデータを置くことができたとしても、メガROMのバンク切り替えの処理などをソフトウェアで対応することは難しいです。
つまり、「ソフト側を書き換えずに、なんとかSCCへデータを出力したい」ということになります。
ソフト側が修正不可なら、BIOSを修正してしまえば良いではありませんか。
実は、以前、MSX2のドラスピを作ったときに、0038Hの割り込みフックをどうしても書き換えたくて、
「プログラム起動直後にBIOSを裏RAMに全コピーし、必要な部分を書き換えて、その裏RAMをMAIN-ROMのように偽装する」
という禁断の技(?)を使いました。
そのときの方法を利用して、PSG制御のBIOS(0093H)からの処理を書き換えて、SCC演奏ルーチンに飛ぶようにしてしまおうというわけです。
ゲーム側のプログラムは一切改造しなくても良いですし、そもそも、オリジナルのROMを差した状態で動かすので、1メガROMでも100メガROMでも関係ありません。
ただ、MAIN-ROMの偽装というのはかなり大きな変更なので、「まともに動いたらラッキー」くらいの気持ちでやってみました。
流れとしてはこんな感じになります。
すると…グラディウスのサウンドがSCCで鳴りました!
MSX2用のタイトルは、メガROMとなっているものがほとんどなので、そもそもRAM上で動かすことができないのですが、何よりも厳しいのは、
64KBのRAMを使うことが前提となっている ということです。
アプリケーション側が64KBのRAMすべてを使う可能性が高いため、改造BIOSを裏RAMに置いておくようなことができないのです(ディスク版のタイトルも同様です)。
メガROMなのでRAM上で動作させることもできずBIOSを書き換えることもできないのでは、さすがにSCC対応は難しいのですが、あえて方法を挙げるとすれば
プログラム自体を書き換えたROMを作る ということです。
実機でやろうと思うとハードルは高いのですが、blueMSXなどのエミュレーターであれば、比較的簡単に遊ぶことができます。
後ほど、自動的にSCC用改造をするツール「SCCCONV」を載せておきますが、すべてが自動的にうまくいくわけでもないので、あくまでも参考程度だと思ってください。
また、ディスクイメージの改造についてですが、SCCCONV一発でというわけにはなかなかいきませんが、その気になればこんなこともできます。
SCC制御部分もディスクの空き領域に組み込むことで、スタンドアローンで起動するようにしてみました。
twitterでこのツールを発表したところ、とある方が、こんなツイートをしておりました。
「turboRのDRAMモードでは…(以下略)」
turboRについてはほとんど知らなかった私は、謎の単語「DRAMモード」について色々調べてみました。
それは turboRのみ使用することができる「BIOSをRAMにコピーして、あたかもそれがROMのように振る舞うモード」のことでした。
本来は、BIOSをROMよりも高速なRAMに置くことで、turboRをさらに高速動作させるために用意されたモードなのですが、「RAMにコピーしたBIOSをこっそり書き換えることも可能」とのこと。
こんな魅力的なモードがあったとは。
turboRは手にいれただけで満足してしまって、全然知りませんでした。不覚でした。
というわけで、早速やってみました。
これは…これはヤバイです!どんなタイトルも動きまくりです!
まず、改造BIOSはturboRのマッパーRAMの後半を使うため、MSX2+以前のアプリケーションが使うオモテの64KBはまったくのフリーです。
また、改造BIOSは完全にROMのふりをして動作するため、アプリケーションからは改造されたことすらわかりません。
MSX2用タイトルでも、メガROMでも、もっというとディスク版タイトルでも、BIOSを使ってサウンド制御をしていれば何でもSCC化できるのです。
真の「なんでもSCC」が完成したのです!(実際はそんなことはないのですが、それは次の章で)
turboR、今ならオクでそれなりに見かけます。専用ソフトは少ないですが、ぜひ一台お手元に。
前章で「MSXturboRは無敵」などと言ったものの、結局、PSG制御用BIOSを乗っ取っているだけなので、BIOSを使わずにサウンドを制御しているタイトルはSCC化することができません。
I/Oポートに直接アクセスしているような、「けっきょく南極大冒険」はダメです。「スーパーレイドック」も「ハイドライド3」もダメです。
「無敵」といいながら、実際は敵だらけなのです。
もちろん、プログラム自体を改造すれば鳴らすことはできますが、ディスク版ならすぐに試せても、改造したROM版のタイトルを実機で動かすとなるとハードルは一気に上がります。
一番最初の出発点が「みんなで ニヤニヤしたい」ということですし、できるだけ簡単に、誰でもできる方法でSCCを鳴らしたい。
プログラムを改造せずに、なんとかならないものか。
ということで、若干強引ではありますが、「割り込みを使ってPSGのレジスタを監視し、データをSCCへコピーするルーチン」を作成し、それを割り込みで呼ぶようにしてみました。
すると…「けっきょく南極大冒険」がSCCで鳴りました!
VBLANKのたびに無駄な処理が走ることになるので、若干重くなっているとは思うのですが、SCC自体はしっかりと鳴ってくれました。遅延もほとんど気になりません。
方針が決まったので、あとはツール側の対応です。BIOS書き換えを使って0038Hの割り込みフックを書き換えてから、ROMを起動するようにしました。
今までは対応できなかったタイトルを試してみたところ
ついに…「ハイドライド3(MSX2)」がSCCで鳴りました!
ハイドライド3は感動です。turboRのDRAMモード専用ですが、turboRとSCCカートリッジとハイドライド3をお持ちの方はぜひお試しください。
※ページ0をRAMとして使い、自前で0038Hを書き換えているものについては、残念ながら鳴らないです。(ディスク版は多いかも…)
以上の方法を使って、片っ端からSCCで鳴らしてみました。
ノリで初めたSCC対応ですが、色々と欲が出てきて、だんだん大げさなことになってしまいました。
結局、PSGの3チャンネルと全く同じデータを SCCの3チャンネルに出しているだけなので、SCC専用に作られたサウンドと比べたら当然クオリティー的には遠く及びませんが、古いタイトルがSCCで鳴ったりするのはちょっと感動しました。
特にナムコット系は相性が良いですね(^_^)
皆さんも、お手持ちの古いタイトルを、SCCで鳴らしてみてはいかがでしょうか。
「片っ端から再生した動画」では、波形はすべてノコギリ波を使っていますが( @1, @1, @1 )、チャンネルごとにきちんと変えて鳴らすと、もっと良くなります。
ドラクエなんかは、かなりファミコンっぽくなったりして、面白かったです。
ちなみに、SCCBOOT.ROM の最後の320バイトは波形データで、MUSICAでエディットできるものと同じフォーマットです。
32バイトずつ、@0~@9まで並んでいるので、ここを書き換えればオリジナルの波形で鳴らすこともできます。
あと、Mega Flash ROM SCC+ は、持ってると色々遊べるので、とても楽しいですよ!
ディスク版(MSX-DOS版)
動作環境
基本的な動作環境
理想的な動作環境
SCCカートリッジの代用について
ROM版のNandemoSCCを使用する場合
DISK版のNandemoSCCを使用する場合
フロントエンドツールについて
基本的な使い方
各パラメーターの説明
PRESET SETTING
クイックスタートガイド
MSXturboRで実行する
MSX1/2/2+で実行する
通常ROM
メガROM(MSX1用)
MSX1で実行する場合
MSX2で実行する場合
メガROM(MSX2用)
MSX2/2+での動作確率を上げる方法
拡張RAMカートリッジを使用する
BIOS設定の「COPY FROM PSG(HOOK)」を使用する
MSX1を使用する
接続例
組み合わせごとの例
1)[MSX2+までの実機]+[FDD]+[SCCカートリッジ]+[ROMイメージファイル(32KBROM)] の場合
2)[MSX2+までの実機]+[FDD]+[SCCカートリッジ]+[市販ゲームROMカートリッジ(32KBROM)] の場合
3)[MSX2+までの実機]+[Mega Flash ROM SCC+SD(MFRSCC)]+[市販ゲームROMカートリッジ(メガROM)] の場合
4)[MSX2+までの実機]+[FDD]+[SCCカートリッジ]+[市販ゲーム(ディスク)] の場合【おすすめ】
5)[MSX2+までの実機]+[FDD]+[SCCカートリッジ]+[メガROM] の場合【おすすめ】
6)[MSXturboR実機]+[FDD]+[SCCカートリッジ]+[市販ゲーム(メガROMまたはディスク)] の場合
7)[MSXturboR実機]+[Mega Flash ROM SCC(MFRSCC)]+[市販ゲーム(ROMカートリッジまたはディスク)] の場合【最強】
7)blueMSXの場合
開発後記
開発のきっかけ
何でもよいからSCCで鳴らしたい
グラディウスをSCCで鳴らしたい
MSX2用タイトルもSCCで鳴らしたい
MSXturboRは無敵
BIOSを使わないタイトルもSCCで鳴らしたい
動画
最後に