MSX2版ファイナルファンタジー改造ネタ

f:id:uniskie:20210908000541j:plain



tumblrに置いてた記事の転載になります。)

MSX2版FF1のディスクを書き換えて「Bボタン+SELECT」を押したときの動作を変更するプログラムのご紹介です。

1はオリジナル(マップ表示)
2はオープニングデモ
3はエンディングデモ

になります。

オープニングとエンディングを見るのが大変なので、それらを簡単に鑑賞できるようになっています。

(やってることはプログラムと、ディスクイメージの該当セクタを見てもらえば分かるかな)

雑誌の投稿プログラムかひとことコラム投稿を元にしたと記憶してますが、雑誌が見つからないので引用元不明です。

★ エンディング後はBGMテストがあり、これ目当てに使用しています。

★ BGMテスト:
エンディングで”The End”が表示されたらCAPSLOCKだったかCTRLで音が止まり、BGMテストに入りますので、カーソルの↑↓で曲選択します。

MSX版のファイナルファンタジーFM音源版もPSG音源版もニコニコで投稿してる人がいたのでこのプログラムの需要は無い気もしますけども、自分でOPとEDを気軽に見たい人向けに。


★★★★★★★★★
★ 【注意事項】 ★
★★★★★★★★★

このプログラムでは書き込み前チェックをしていないので、書き換えは自己責任で。
自己複製の範囲でコピーしたディスクに使用することをお勧めします。
起動してから書き換えたディスクに差し替えればOKだったはず。
最近は何故かプレミアがついているし。

★ プログラムリスト

10 SCREEN 0: WIDTH 40: COLOR 15,0,0: COLOR =(15,0,0,0)
20 LOCATE 5,0: PRINT "- FINAL FANTASY I -"
30 LOCATE 0,2: PRINT "BボタンSELECT  カクチョウ/シュウフク PROGRAM"
40 LOCATE 4,5: PRINT "1:DISK シュウフク"
50 LOCATE 4,7: PRINT "2:change to OPENNING DEMO"
60 LOCATE 4,9: PRINT "3:change to ENDING DEMO"
70 PLAY "T255V15L8O3AGFGFEDECEG4"
80 FOR I=0 TO 7: COLOR =(15,I,I,I): FOR J=0 TO 100: NEXT J,I
90 FOR I=-1 TO 0: I=PLAY (0): NEXT 
100 POKE &HF351,0: POKE &HF352,&H00C0: GOSUB 500
110 LOCATE 4,11: PRINT "INPUT NUMBER=";
120 A$=INPUT $(1)
130 IF A$="3" THEN BEEP : GOTO  120
200 I$=DSKI$(1,10): POKE &HC0AC,&H0004: POKE &HC0AE,&H0005: DSKO$ 1,10
210 I$=DSKI$(1,292): POKE &HC001,&H0006: POKE &HC002,&H0080: DSKO$ 1,292
220 IF A$="1" THEN 999
300 I$=DSKI$(1,10): POKE &HC0AC,&H0024: POKE &HC0AE,&H0029: DSKO$ 1,10
310 IF A$="3" THEN I$=DSKI$(1,292): POKE &HC001,&H00E6: POKE &HC002,&H0081: DSKO$ 1,292
320 GOTO  999
500 I$=DSKI$(1,10): A$="OPENEND .COM"
510 FOR I=0 TO 11: IF PEEK (&HC0B0+I)=ASC (MID$(A$,I+1,1)) THEN NEXT : LOCATE 4,20: PRINT SPC(32): RETURN 
520 BEEP : LOCATE 4,20: PRINT "SET FF I GAME DISK": A$=INPUT $(1): GOTO  500
999 LOCATE 4,20: PRINT "COMPLETE": A$=INPUT $(1): LOCATE 4,20: PRINT SPC(32): GOTO  110

 



1ChipMSX PLD v3.8.0 リリース!

 

1ChipMSX PLD v3.8 がリリースされました!


kdlさんが1ChipMSX(略してOCM)を超便利にする改良版ファームウェア(PLDファイル)を配布されています。
過去の修正や機能追加を意欲的に取り込み、既知の問題がほぼ全部取れたバージョンであるv3.8がリリースされました。

なんということでしょう…
あの、高価な置物でしかなかったワンチップMSXが、
改良版PLDを書き込むことで、
お値段以上の動きをするようになりました!!

ワンチップMSXの一つの完成形となります。





ダウンロードはこちら→ Kdl Index!  https://gnogni.altervista.org/



導入方法は1ChipMSX上でPLDLOAD.COMを使って書き換えるのが一番楽です。
(書き換えに失敗して起動しなくなった場合は、Terasic Blaster USBという物を用意してPCとつないで書き換えします)

■ 主な特徴


〇 メガSDをデフォルトで論理1ドライブに設定(※1
MSX2+相当+一部ターボR互換機能
〇 互換性向上
DIPスイッチの割り当ての大幅変更(メガSDがDIP5→DIP8に変更など)
〇 リセットボタン長押しでハードリセットになります
〇 RAMは2MBか4MBを選択可能
〇 VDPのタイミングバグ修正
〇 音質改善
〇 ボリュームフィルタ修正
〇 内蔵DOS2(MEGA SDHCカーネル)のFIELD命令バグ修正
DIPスイッチの他に各種ショートカットキーでも実行時に各種機能を切り替え可能
例)
・【F12】CPU速度切り替え(4KHz/6KHz/8KHz)
・【SHIFT+F12】スロット1動作変更(※2
・【SHIFT+Scroll Lock】スロット2動作変更(※3
・【Page Up/Page Down】:マスター音量
・【F9/SHIFT+F9】:PSG音量
・【F10/SHIFT+F10】:SCC音量
・【F11/SHIFT+F11】:OPLL音量
・【Scroll Lock】:カセットインターフェース有効
・【Pause】:何も機能しない模様→OPLL有効/無効(※ポーズ機能)
〇 ROMイメージを取り込んで、実行できるツール類が揃っている(※4

※1
メガSDはCTRLキー押しながら立ち上げても仮想論理2ドライブをOFFにできず、
フリーエリアが足りなくなって実行できないソフトが多いため、
初期設定で論理1ドライブに変更されました。

・ESET.COMでメガSD(MEGA SCSI)の設定変更が可能です。
(※ただし設定はバックアップされないので電源投入毎にリセットされます。リセット時は引継ぎされます。)

・論理ドライブ数を2に変更する手順
 ESET.COMを起動したらE→C→N→2→S→Y→ESC→Q の順でキーを押し、
 コマンドプロンプトに戻ったらリセットします。

・似非シリーズサポートサイト に各種ツールがあります。
http://www.big.or.jp/~saibara/msx/ese/index-j.html

・ESET.COMへのダイレクトリンク
MEGA-SCSI セットアップツール version 0.04 (eset004.lzh)

(※またメガSD有効時はEP.COMでディスクイメージを読み込んでFDDエミュレーション動作ができます。)

※2
スロット1動作タイプ:
① 端子有効&内蔵無効
② 端子無効&内蔵ESEメガSCC(1MB)
SHIFT+F12を押すと切り替わる。
LEDの右から5番目が変化する。

※3
スロット2動作タイプ:
① 端子有効&内蔵無効
② 端子無効&内蔵ESEメガRAM(アスキー8K 1MB)
③ 端子無効&ESEメガSCC(2MB)
④ 端子無効&ESEメガRAM(アスキー16K 2MB)
SHIFT+SCROLL LOCKを押すと順に切り替わる。
LEDの右から3番目と4番目が変化する。

※4
OCM-PLD Packのmsxtoolsに入っているmegalunchは、
ROMイメージに合わせて自動でスロットの動作を各種ESEメガに切り替えて実行してくれます。(OCMv3はI/Oポートからも機能切り替えができる)


■その他注意点:音声主力端子


赤い右音声端子には、カセット端子に刺した外部音源カートリッジからの音声が出力されません。
(内蔵ESEメガSCCや内蔵OPLLを使う場合は問題ありません)

外部音源カートリッジを使いたい場合は、
白い左音声端子から分岐してステレオ入力につなぐ必要があります。

例えば
SCC音源内蔵のゲーム(グラディウス2、スペースマンボウ、F1スピリット等)をカセット端子に刺して遊ぶ場合、右音声端子からはPSGの音しか聞こえないので注意が必要です。


■ AUTOEXEC.BATの中身


OCM-EXTRA PackやOCM-SDBIOS Pack で作られるAUTOEXEC.BATですが、
・自分の場合、NextorではなくMSXDOS2なんでALIASはコメントアウト

・外付けFDDをつなぐと起動ドライブが変わるので、path指定は起動ドライブをコマンド引数指定
としています。

こんなかんじ。
SET EXPERT=ON
PATH %1\ %1\UTILS
SET SHELL=%1\COMMAND2.COM
REM ALIAS .BAS = "BASIC "
REM ALIAS .ASC = "BASIC "
VER

■ カセットを後挿ししたい場合


従来の実機であればポーズボタンを押して後挿ししていましたが、
OCM v3.x.xではポーズ機能がありません。
(もし自分が見つけてないだけであるとしてもPAUSEキーではポーズできません)
その代わり、スロット端子の機能切り替えショートカットキーが使えます。

元々、ポーズした状態でも通電していて、後挿した瞬間に暴走することがあったので、
スロット端子そのものを動的に無効/有効切り替えできるOCM v3のほうが安全確実です。

〇 スロット1

SHIFT+F12を一回押すとスロット1の端子が無効になります。
この状態であれば通電しませんので、カセットの抜き挿しをしても安全です。

もう一度押すとスロット1の端子が有効になります。
(右から5番目のLEDが消灯時:スロット1:端子有効、内蔵ESE無効)
(右から5番目のLEDが点灯時:スロット1:端子無効、内蔵ESEメガSCC 1MB有効)

〇 スロット2

SHIFT+ScrollLockを一回押すとスロット2の端子が無効になります。
この状態であれば通電しませんので、カセットの抜き挿しをしても安全です。

もう3回押すとスロット2の端子が有効になります。
(右から3番目と4番目のLEDが消灯時:スロット2:端子有効、内蔵ESE無効)
(右から3番目のLEDが点灯時:スロット2:端子無効、内蔵ESEメガRAM アスキー8K 1MB有効)
(右から4番目のLEDが点灯時:スロット2:端子無効、内蔵ESEメガSCC 2MB有効)
(右から3番目と4番目のLEDが点灯時:スロット2:端子無効、内蔵ESEメガRAM アスキー16K 2MB有効)

〇その他

あらかじめカセットを挿した状態で起動しても、MSXロゴ表示中に素早くSHIFT+F12やSHIFT+SCROLL LOCKを押せば、スロット端子を無効にできます。

・※
この際、キーは素早く離します。ロゴが消えるまでSHIFTを押しているとディスクが無効になるので注意が必要です。

・リセットボタンをおした時はスロットの設定がDIP-SWで指定した初期設定に戻るので、その際にもロゴ表示中のショートカットキーによるスロット設定変更を使います。
(長押しリセットや電源を切らない限り、似非メガRAMのデータ自体は保存されています。)


コナミの新10倍カートリッジ:ディスクセーブロード機能によるSDカード破壊

修正(2020/05/03)


結論:
1ChipMSXで、新10倍カートリッジのディスク機能を使う場合、
FDD+SofaROMか、
Nextor+SofaROMになります。


実カートリッジだと難しいため、SofaROMを使用してROMイメージから起動します。

◆ SofaROM向け新10倍カートリッジROMファイルの準備 ◆

新10倍カートリッジを取り込んだロムファイルをSROM.GM2とリネームして、SROM.EXEと同じディレクトリ階層に置くと、/G2オプションを指定した時に新10倍+ゲームが起動できるようになります。

◆ 実FDドライブを使用するケース ◆(一番安全)

スロット1外付けFDDを装着

SofaROM/G2オプションを付けてゲームROMファイルを起動する
(→ スロット2の内蔵ESEメガSCCで、新10倍とゲームの両方が動作する)

例) SROM /G2 ROMS\PARODIUS.ROM

SROMがスロット2だけで新10倍とゲームを動作させてくれるので、
空いてるスロット1でFDDインターフェースが動作させられます。

本来、新10倍+ゲーム+FDDインターフェースで3スロット必要だった事が、SofaROMを利用すると2スロットで実現できるのがポイント

◆ Nextorを使用するケース ◆(まだ実験中)

① kdlさんのSD-BIOS作成ツールでNextorの入ったSD-BIOSを作成 (Kdl Index!  https://gnogni.altervista.org/ → 作り方は後述)

SofaROM/G2オプションを付けてゲームROMファイルを起動する

※ 重要)起動したらSDカードを抜き差ししない事。一度抜くと認識しなくなります。
(実FDDの場合は抜き差しOKです)

Nextorの場合、実カートリッジを刺してリセット起動するとディスクドライブとして認識されないのですが、SofaROMからゲームを実行すればディスクドライブとして認識されます。
(NEXTORのセットアップはROMカートリッジのブートの後なのかな?)

◆ SD-BIOS作成手順

分かる人はSD-BIOSの作成だけを行って手動でSDカードへコピーしてください。

20200116 OCM-SDBIOS Pack v2.9 by KdL\make\make-sdb.cmd を起動するとOCM-BIOS.DATを直接作成できます。
後は手動でSDカードへコピーするだけ。

よく分からない人は、make-sdb.cmd ではなく、new-sdcard.cmd を起動してください。
質問に答えていくことで、「BIOSファイル作成」~「SDフォーマット」~「SDカードへBIOS+OS+UTILSをコピー」までやってくれます。

※ ただし、SDフォーマットを伴うので取り扱いに注意してください。
※ 右クリックから「管理者として実行」をしないとダメかも

(自分でSD-BIOSだけ入れ替える場合、元からあるSD-BIOSを削除してからコピーするか、SDカードをフォーマットした直後の一番最初にコピーすると良いです)

(1ChipMSXは電源投入時に、SDカードの一番最初のファイルをSD-BIOSとして読み込む)

make-sdb.cmd 起動時の画面。

new-sdcard.cmdを起動した場合でもOCM-BIOS.DATがまだ作成されていなければこの画面になります。

(ちなみに、make-sdb.cmd を実行した場合、ファイル名を自分で指定できます。
複数用意しておきたい場合は名前を指定すると良いかもしれません。)

MEGASDHCNextorか聞いてくるところではNextorを選んでください。↓

◆ 以前の間違い↓

コナミの新10倍カートリッジはDOSを使わずにディスクファイル管理領域を自前で直接アクセスしているため、SDカードを壊します。(データの配置が違う)

なので、EP.COMの/Bオプションを使ってディスクイメージファイルをFDDエミュレーションモードでマウントして実行するか、外部FDDを使う必要があります。

EP.COMでディスクイメージのFDDエミュレーションを使う場合は、前述した後挿しテクニックを使うと安全です。

ただ、FDDエミュレーションを使っても、
・画面イメージの読み書きは安定しないことがある
・状態セーブロードもたまに安定しないことがある
SDカードを途中で抜くと入れなおしてもだいたいディスクアクセス時にフリーズする
EP.COMでマウントする時に/Bオプションを忘れるとフリーズすることが多い
やっぱりそれでもおかしくなる。
など、原因は不明ですが、安定とは言い難い部分はありますね。
SDカード壊されるよりはましかな。

■ 間違いの解説 ■

デフォルトのMegaSDHC-DOS2 BIOSの場合、EPコマンドFDDエミュレーションをしても、(ディスクイメージの)ディスクが破壊されるようです。SDそのままならもちろんSDカードのデータが壊れます。

何度か読み書き、もしくは読み込み動作を繰り返すだけでも、ディスクが破壊される事を確認しました。ブートセクタやFAT領域にまで、ファイル一覧情報が書き込まれ、めちゃくちゃになります。
どうやら、MegaSDHCのドライバ部分と新10倍の相性が悪いという事のようです。もしかするとMSXDOS2のBIOSを経由してる時の処理が原因かもしれません。

ちなみに、Nextorの場合、実カートリッジで起動するとドライブとして認識されません。リセットや電源オンから新10倍カートリッジがディスクドライブ初期化を呼び出す段階では、Nextorはディスクドライブとしてセットアップされないみたいですね。(EMUFILEというFDDエミュレーション機能でもリセットがかかるのでやっぱりディスクドライブとして認識されません。)

■ その他:別基板で動かす1ChipMSX

改変版1ChipMSXは
kdlさんのD4公式(当時20,790円)/ZemmixNeo/SM-X用の他に、
caroさんのDE1版や、(税込み28,519円)
uniabisさんのDE0-CV+DEOCM版(税抜き22,500円+税込み8,658円)
などもあります。

DE1やDE0-CV+DEOCMについては、
公式版基板ではロジック数が足りなくて無理だったターボR相当の実装が検討されています。
HRA!さんもこつこつと最近アップデートにチャレンジ中なので静かに応援したい所。
 
基板販売サイト→
DE1 https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=6DUL-SKKW
こちらについては所有していないので、実際の動作がどんな感じなのかは不明です。

これらの作業は、
One chip MSX improvement project(1CHIPMSX改良プロジェクト)フォーラム
https://msx.org/forum/msx-talk/revival/one-chip-msx-improvement-project
にて、ずっと続けられていますので、興味がある方はご覧ください。
Chromeのページ翻訳機能を使えば割と普通に読めるかと思います。

■ ロゴ書き換え


HRA!さんがかっこいいロゴを作ってくれました!




kdlさんのサイトにあるSDBIOS PACKでもロゴの書き換えは出来ますが、
SDカードからのBIOSブートは起動が遅いので、PLDを書き換えたい。
という事で実験してみました。

ただし、PLD書き換えは失敗するとTerasic Blaster USBが必要になるので危険が伴います。

v3.8の場合、
OCM-BIOS.DATの0x37990~0x37FFFを取り出し、
1バイト毎にビットの上下を反転させた値を
PLDファイルの0x5B990~0x5BFFFへ上書きすることでロゴデータの入れ替えが可能でした。

実験成果として、v3.8 MSX2+ロゴ版PLDを
HRA!さんの1chipMSX改ロゴに書き換えるパッチをwdiffで作ってみました。
OCM-SDBIOS Pack v2.9のk34ockai.yen(これがOCM-BIOS.DAT)からロゴデータを取り出しました。

https://app.box.com/s/do6y1jhxbv6ke6wvnsrlv6jspsirdl0a
起動しなくなるリスクを踏まえたうえで自己責任でご利用ください。


関連記事:

新10倍セーブロードをSDカードで! 

uniskie.hatenablog.com


1ChipMSXをMSX1として(疑似)動作させてみよう!

uniskie.hatenablog.com

MSX2版 雀ボーグすずめ (ポニーテールソフト) イメージ化と改造

MSX2版 雀ボーグすずめを再入手したので、1ChipMSXやBlueMSXでプレイしてみました。
その際の注意点と、対戦改造パッチをメモしておきます。

ゲーム紹介や攻略については
http://www.8-bits.info/gamelist/PC88/info/info_00HbqmQGnJiZ7pfE.php
や、
http://www013.upp.so-net.ne.jp/ymurakami/guide/ponytail.htm#SUZUME
消えてたのでwebarchive→

https://web.archive.org/web/20210126134302/http://www013.upp.so-net.ne.jp/ymurakami/guide/ponytail.htm


を参考にしてください。

■はじめに

・1ドライブでCTRLを押しながら起動する必要がある
FDD書き込み禁止だとフリーズする
・プロテクトは特にかかっていない

ディスクイメージ化すれば仮想FDやBlueMSXでプレイできました。
1ChipMSXについている、FDSAVEでイメージ化が可能です。

手元のはディスク2の最終セクタが読み出すたびに違う値になりますが
これは経年劣化かな?(データ的には空の領域なので問題はありませんでした)




















原画についてはポッキー麻雀側のぴろしきさんについては書いてますが、
すずめパートの原画家さんの名前は公表されてない気配?

■ トレーナーの使い方(チートの作り方)


いかさま麻雀に対する攻略は、
プログラムの改造だと決めているおじさんなので、
早速チートを作ってみようと思います。
(麻雀しらないし)

BlueMSXにはデバッガとトレーナーがついています。
ツールメニューから起動できます。

■ トレーナー起動画面



■ 自分の点数でSeachしたアドレスを、実際に加算しているコードをディスアセンブラで探す。





■ 相手の点数でSeachしたアドレスを、実際に加算しているコードをディスアセンブラで探す。


結果的に調べた結果。

--work
#9323,2byte : 自分の点数
#9325,2byte : 相手の点数
#9327,1byte : 勝敗(1=自分/2=相手)
#9581,1byte : 自分の勝ち数 1:なし、2~3:勝ち数1~3
#9582,1byte : 相手の勝ち数 1:なし、2~3:勝ち数1~3

となりました。

■トレーナーで試す。
トレーナーは指定アドレスに常に値を書き込む機能です。
アドレス0x9327 : 勝敗に1=自分を書き込んでみると、
相手がアガったときに自分が勝ったことになりました。
とりあえず、ここが勝敗決定結果で間違いないようです。

ただし、
常にそのアドレスが、同じ用途とは限りません。
じっさい、これは対戦画面でのみ有効で、
イベントやマップでは別の用途に使われいているため、
対戦画面以外でチートを有効にすると結構バグります。

そこで、
アドレス0x9327に2(=相手)を書き込んでいるコードを書き換えます。
その場合、メモリ上を書き換えただけでは、プログラムのロードで元に戻りますので、
ディスクイメージ側を書き換える必要があります。

とりあえず、メモリ上での該当プログラムコードを探します。

BlueMSXには逆アセンブラ+ファイル出力がありますので、それで書き出します。




■0x9327(勝敗結果)をみて、自分か敵の点数を加算している箇所


■0x9327に2(=相手)をセットしている箇所


ファイルイメージをバイナリ検索するために、ニーモニックの隣にオペコード値をメモしてあります。

ld a,#02を ld a,#01にすれば、敵が上がった時も自分が勝ったことになります。

#D192,1:2→1 ...常に勝ち(実行時)
で、実際にメモリ上で書き換えてこの改造であっていることを確認しました。


■ ディスクパッチ

(quickbeeというバイナリエディタ向けのパッチファイル)
(アドレス、元の値、書き換え後の値)

*== TARGET_FILE ================
FILENAME JAMBOG-1.DSK
* FileSize: 737280 bytes
* LastMod.: 2019/12/10 10:34:09
*===============================
0001EF43: 02 01
00020D92: 02 01
00025D92: 02 01



実際に書き換えたディスクイメージで起動してみると、常に自分が勝ったことになってしました。

この改造をしても
チョンボした場合(アガれないのにSHIFT+F5てツモするなど)では
自分が負けるので、ちゃんとすずめを脱がすこともできます。

点数の関係で途中の脱ぎシーンをすっとばして勝つことがありますが、
エンディング後のギャラリーですべてのCGが見られますので、
気にせず進めてください。

点数を固定すれば、必ず1枚ずつ脱ぐようにできるとは思いますが、
めんどくさいので各自でやってみてください。

【MSXPLAY】でブラウザからMSX音源をお手軽に鳴らそう!

MSXPLAY登場

https://msxplay.com
こちらのMSXPLAYのページ。
MGSDRVのMMLブラウザ上で速攻コンパイル再生できるようになりました。




MGSデータやBGMMuSICAデータにも対応していますが、
やはり目玉はMGSDRVのMMLをそのまま編集再生できちゃう事ではないでしょうか。

モダンな環境でMMLを編集 (コピペアンドゥリドウ置換なんでもござれ)
その場で試聴確認 (待ち時間ゼロ)
その場でMMLを共有 (BETA機能らしい)

ここは天国ですかね

MuSICAはバグがある為、まともに鳴らしたいならMGSDRVをお勧めします。
色々工夫したけど実機ではMuSICAのバグはどうにもならないことが分かったので。
編集しながら即試聴確認できるというのがMuSICAの利点でしたが、
この環境があれば、無理してMuSICAを使う必要はありません。


 

サンプル「FF5メインテーマ」

https://msxplay.com?open=54434470093859fb052fe0adcb288b4a7a69a354
こちらをクリックして、Compileと書いてあるボタンをクリックしてもらえれば
MMLをそのまま鳴らして聞くことができます。

Chrome推奨とのこと

↓現在編集中のデータgithubで偶に更新されます

f.msxplay.com



サンプル「FF3ボス」

https://msxplay.com?open=a8f51c6e0a94484afc3d11d9c71b1339314c60ca
こちらもクリックして、Compileと書いてあるボタンをクリックしてもらえれば
MMLをそのまま鳴らして聞くことができます。

↓現在編集中のデータgithubで偶に更新されます

f.msxplay.com



リズム音源でのV+?/V-?による相対音量変更ですが、
vsやvmなどの楽器別音量指定があるとおかしくなるようです。
当たり前といえば当たり前ですね。
vsやvmに対して+-で相対指定すると大丈夫です。



MMLのhelpも右下から開けますので、色々弄ってみてください。
また、
MML編集ページにあるSampleボタンで各種MMLサンプルが弄れます。
先達の素敵な人たちが作成した、非常に参考になるMMLが揃っています。
是非参考にしてMMLライフを満喫してみてください。

※ArabiyaanはSCCで発音中の波形切り替えによる音色変化などを行っていて面白いですし、どのサンプルも興味深い音が鳴りますので、是非試聴してみてください。



MMLをここにも貼っておきます。

#opll_mode 1
 #tempo 139
 #title {
  "SQUARESOFT   FINAL FANTASY V   - MAIN THEME -"
  }


;* PSG Drum Voice ---------------------
@e00 = {3,3,F*2n4.En5.Dn6.Cn7.Cn8.Bn9.An10.9n11.9n12.8n13.0=12}
@e06 = {3,3,DC0=60}
@e07 = {3,3,C6=7.0=16}
@e08 = {3,1,FE0=70}
;* PSG Voice --------------------------
@e01 = {1,0,F8=6.0=30.8.0=15.4.0=5}
;* FM envelope --------------------------
@e10 = {,,FFE}
@e11 = {,,FED}
@e12 = {,,FE:5[D:4.E:4]}

1239ABCDEF r4
;* Merody -----------------------------
9A h40,4,0,2 o5 so
9 v14
A v12 r8. @\40

9A @8@e10 l8
9A r2.rq4c16e16 g1& g2.rq4f16g16> q8c1
9A @6@e10 (< l4
9A [0
9A [g2<b4>c4 d2.a4 g1 d+2d+4f4 |g2>c2< a2.f4 g2>d2< a1] g2a+2 a2.f4 g1& g2.r
9A [>d2<g2 >f2d+d cd<a2& a1 |>cd<a2^ 4ga>c <a+g2.^ 4gaa+] >c2<f2 >gfd+f d1& d2.r
9A d2.c <a+2g2 f+>dc2^ 2<a+f+ a+1& a+1 r1 r1

;* Harp. (PSG) ------------------------
12 @1 h20,4,0,2
1 v9
2 v7 r8. @\18

12 q3k4 l32 [o3 eg>c8. eg>c8. g>ce8.^4 |r1]
12 q8k5 l24 o3 ceg>ceg< g>ceg>ce< )ceg>ceg< g>ceg>ce(
12 l16 [0
12 [r1]16
12 o3[ [d+ga+>d+ga+>d+g a+gd+<a+gd+<a+g] [fa>cfa>cfa> c<afc<afc<a]
12     [cfa>cfa>cf afc<afc<af] |[dga+>dga+>dg a+gd<a+gd<a+g] ]
12     [dgb>dgb>dg bgd<bgd<bg]
12 [r1]8

;* Strings ---------------------------
BCD @0@e12 so q3 v13 o5 l8 h38,3,0,3
B [eeffeedd]4
C [gggggggg]4
D ([cccccccc]4
BCD [0 l8 q3
B [eeffeedd f+f+ggf+f+ee [d+d+ffd+d+dd] |[d+d+ffd+d+dd]4]
C [gggggggg aaaaaaaa]6
D [cccccccc dddddddd cccccccc cccccccc |<[[a+]8 >[c]8]<]
BCD )
B l16q5 c<e-g>c e-<g>ce- gce-g >c<e-g>c <d<fa>d f<a>df adfa >d<fa>d q8c1 c-1<
C l16q5 g<b->e-g b-e-gb- >e-<gb->e- g<b->e-g <acfa >c<fa>c f<a>cf acfa q8g1& g1<
D q7<l4d+dc<a+agf>c<g1& g1> l8
BCD l4 q8
B [d+1& d+d+fg f1& ffga |f1 f2f2 g1 f1] f2a2 >c1< b1& b1
C [g1& ggaa+ >c1& c1 |c1 f2c2 d2g2& g1<] c2f2 f2a2 g1& g1<
D [g1& g2gg a1& aaa+>c d1 c1 <|a+1& a+1] g1& g1
B ( c1& c1 a+>cc2& c2<a+2 (f1& f1& f1& f1
C a+2.>c d1 d+ff+2& f+2d+2 d1 c1 c+1 c1<
D g1& g>dc<a+ a+1& a+1 a+1 g+1 a+1 g+1>

;* Base -------------------------------
E @13@e11 v14 so o3 h36,4,0,2
E r1 r1 r1 r1
E [0
E q5l8 [ccr2>c<g ccr2. ccr2>c<g ccr2. |[d+d+r2>d+<a+ ffr2.]]
E q7>d+4d4c4<a+4a4g4f4>c4< [q5ggq7rd]4 q6
E [d+d+r2>d+<a+ d+d+r2. d+d+r2>fc< d+d+r2. ddr2>d<a ddr2. ggr2>gd< ggr4ffr4]
E [q5ccq6r>c<] q5ccrq6grcrg [q5ccrq6>c<] q5ccrq6f+rcrc
E q5a+a+rq6fq5a+a+r4 q5g+g+rq6fq5g+g+r4 q5[f+c+]4 ffr4ffr4

;* Drums ------------------------------
*00 = { y23,175 }
*02 = { y23,198 }
*03 = { bh8bh16h16 }
*04 = { msh16vm12m16vm10hm16vm8mh16vm14 }
*05 = { msh16vm12m16vm10bhm16vm8mh16vm14 }
*06 = { bh8bh16h16y23,198h8y23,175h16h16 }
*07 = { bh8bh16h16y23,198h8y23,175bh16h16 }

F vb15 vm14 vs12 vh9 vc12
F y22,243y38,3 *0y39,2 y24,134y40,2
F [h4]16
F bhc8bc8h4h4h4
F [0
F [bh8b8h4h4h4]11 [bh8*2h8*0]8 [bh8*2bh8*0|bh8*2bh8*0]r4 bh8bh16h16*2h8*0bh16h16 bh8msh16h16*2msh8*0msh16msh16
F [ [4 *6*4*2h8*0bh16h16 |*6*4*2h8*0h16h16]
F *3*2h8*0h16h16*5*2h8*0bh16h16 ]
F [*7*5*2h8*0h16h16 *7*5*2h8*0bh16h16 ]
F [*7*5*2h8*0h16h16 *7*5*2|h8*0h16h16 ]msc16vm12m16*0vm10hm16vm8mh16vm14
F bh8b8h4h4h4

;* psg drum
*08 = { o8@6 }
*09 = { o8@7 }
*10 = { o8@8 }
*01 = { o2@0 }

3 l16 v10 \-8
3 *9 [a4]16
3 )*10g+8g+4.(*9a4a4
3 [0
3 *9 [[a4]4]11 [*9a8*8a+8]14 *9a8*1g8g8gg
3 [*9a8aa*8a+8*9a16a16*1g8*9aa|*8a+8*9aa]24 )*10a+4(
3 *9[a4]4


1239ABCDEF ]



#opll_mode 1
#tempo 164
#title {
  "FINAL FANTASY III - BOSS BATTLE BGM 1 - v2"
}

@v15 = {;TL,FB
         0, 4,
     ;AR,DR,SL,RR,KL,MT,AM,VB,EG,KR,DT
      15, 1, 5, 1, 0, 1, 0, 0, 1, 0, 0,
      15, 6, 1, 0, 0, 8, 1, 0, 1, 0, 0}
@e00 = {3,2,D9=4.0=10}
@e01 = {3,2,E9=13.0=30}
@e02 = {3,3,F*2n4.En5.Dn6.Cn7.Cn8.Bn9.Bn10.An11.An12.9n13.0=20}

@e09 = {1,,Fd}
@e10 = {1,,Fedc:20[CCDEED]}
@e12 = {1,,F6=6.c0=40}
@e13 = {1,,DEFEDC:10[CBACBA]}

;* Brass ------------------------------
9BD so @6@e10
1 v8 h10,5,0,1 k5 
9 v14
B v12 r8. @\12
D v13
19BD [0 l8
1 o6
9BD o6
D \1
1  @10
9B @6@e10
19BD [rq7e-q4e(c<ag+a>c q7eq4gf+d)fq7e4q4cq7]
19BD [rq7g+q4a(fdc+df q7aq4>c<bgb-)q7a4q4fq7]
9B @0
19BD l4 ec<af (ec<af (ec<af l12eg+b>eg+b>)eg+b>eg+b
1  @12
9B @5@e9(
D <\0
19BD l8 <fg+fg+>c<brg+ fg+>c<bg+b>d+d
19BD <a>c<a>cee-rc <a>cgf+
1  @10
9B @6@e10)
19B )
D (
19BD )df>c<b
19BD [
19BD < a2..a16b16 a2g2
19BD a2g2& g1
19BD |
19BD f2..f16g16 f2d2
19BD e1 g+1>
19BD ]
19BD a2..a16b16 a2g2
19BD a1 g+1
19B (
D )
19BD ]

;* Strings ----------------------------
AC @0 so h30,4,0,2
2 v7 @13 h30,4,0,2 k5 
A v11
C v9 r8 @\6
2AC [0 l8 Q6
AC o6 @0
2 o5 
2AC [eccccccc cdd+e)fg+4a(]
2AC [afffffff fgg+a)a+>c+4d<(]
AC @15
2AC l4 aged <aged <aged <l12a>eg+a>eg+a>eg+a>eg+<
AC @0@15
2AC l8 <c1& c1
2AC e1& e2)ab>c<b>)
AC @0
2AC [
2AC [l8 c<a24b24>c24d<a>c<a>d<a>]
2AC [<bg24a24b-24bgagbg>]
2AC |
2AC [<af24g24g+24bfafbf>]
2AC <ge24f24f+24aegeae g+e24f24g24g+eaebe>
2AC ]
2AC <adfdadfd> c<dgd>c<dgd
2AC >d<eae>d<eae >d<bg+fl16ef+g+ab>cdel8
2AC (( ]

;* Bass -------------------------------
E @13@e9 q6 v14 so 
E [0 o2 l8 
E [4 [a]8] 
E >[4 [d]8]< 
E a2.>e4 a2.r4 <aarraarr b4>e4g+4b4 
E ([ rrffrrfr] 
E >rrccrrcr rrcc)c<bge 
E )[ 
E [ ffccffcc] 
E [ eee-eeee-e] 
E | 
E [ ddc+dddc+d] 
E cccccccc eeef+f+f+g+g+ 
E ] 
E <b-b->ff<b-b->df e-e-gae-e-ga 
E [ee<bb>ee<bb>] 
E (] 

;* Drums ------------------------------
*03 = { bh8bh:h:bms8bh:bh }
*04 = { y23,156y24,160 }
*05 = { y23,176y24,180 }
*06 = { y23,136y24,140 }
*07 = { y23,116y24,120 }

F y22,212y38,3
F y39,3 
F y40,2 
F *4 
F vb15 vm14 vs12 vh9 vc11 
F l16 

F [0 
F bhc4[3 bh4] [3 [4 bh4]] 
F [4 [4 bh4]] 
F [3 bhc4.bh8bh4ms4] [*3] 
;F v-1;bug?
F vb-1 vm-1 vs-1 vh-1 vc-1
F [3 r4ms8ms4.ms4] 
;F v+1;bug?
F vb+1 vm+1 vs+1 vh+1 vc+1
F r4ms4*5ms:ms:*6cms8*4ms:ms:*7cms8*4 
F [31 *3] 
F bms:ms:ms:ms:*6bms:ms:ms:ms:*4 
F ] 

;* psg drum ---------------------------
*00 = { o8@0 }
*01 = { o8@1 }
*02 = { o2@2 }}

3 v11 k3 \-9 
3 [0 l8 
3 *1g+4[3 *0gr] [3 [4 *0gr]] 
3 [4 [4 *0gr]] 
3 [3 *1g+4.*0ggr*2d4] l16[*0g8gg*2d8*0gg] 
3 ([3 *2r4d8d4.d4] ))r4d4ddc8c+c+<b8( 
3 [31 *0g8gg*2d8*0gg] 
3 *2ddddcccc 
3 ] 



 

Windows版ソーサリアン(オリジナル&フォーエバー)メモ

Windwos版のソーサリアンを前に買ってあったのですが、
ちょっとだけやりたくなってきたので、少し調べたことをメモ。



DMMで買ったのでインターネット電池認証が面倒を起こします。
DLSiteで買う方がいいです。
どちらもセールで500円~800円になる時があります。

基本シナリオ+追加シナリオ5本で、グラフィックや操作が遊びやすくなり、
曲は元のFM音源+SSG音源のものを使用。
なかなか良さそうです。

ただ、昔のドット絵よりもキャラが可愛くないのは気になるところ。
リバイバルザナドゥよりはマシなので、我慢できる範囲かな。

ドラクエもFFもハード性能が上がるにしたがって
(時代的に妙なデフォルメが流行った時期が重なったことの方が大きそうだけど)
あまり可愛くなくなっていったので仕方ないですね。

ソーサリアンコンプリートの88版をやるのもいいんですが。
(初回盤だから?)メガドラ版以外にはクイックセーブついてないんですよね。
それならWindows版でも良いのでは?という。

あと、コンプリートの方はセーブデータ使いまわせるのかな?
使いまわせないなら、あっちでやらなくてもいかな。
遊びやすそうな方で遊びたい。

■窓化

Windows10でも動作するのですが、強制的にフルスクリーンになってしまいます。
そこでDxWnd2というツールを使います。
https://sourceforge.net/projects/dxwnd/

自分はDMM版なのでインターネット電池が悪さをしてて、
起動時のEXEを指定しても窓化されません。

ゲーム本体は起動後に一時的に生成され、ゲームが終ると消えるファイルです
そこで、起動(Launch)にSORO_WIN.EXEを指定し、
監視対象(Path)にはのmain.binという普段は存在しないゲーム本体ファイルを指定します。
(DLsite版ならPathにSORO_WIN.EXEを指定するだけでOK)



メインメニューでマウスカーソルを素早く動かすと残像が残ってしまいますが、
ゲーム中やカーソルや十字キーで操作してる時には困りませんので、
特に対処法とかは調べてません。

■不老不死

情報元:SORSERIAN BBS
http://tk-nz.game.coocan.jp/sorcerian/SorBBS_Log/SorBBS_1107.html
Windows版はスキル獲得のために世代交代が必要なので、
出来ればスキルを獲得してから不老不死になった方が良さそう?

不老不死に関しては
↓こちらに載せてあります。
http://tk-nz.game.coocan.jp/sorcerian/Pc88_98/town/esther.html

復活の確率が非常に低いのでセーブ&根気が必要になりますね。


> それから、その方法はWindows版でも有効なのでしょうか?

Windows版(forever・Original)でも有効です。
ただし、「Original」の場合「スキル」を獲得する為に
老死で全種族に世代交代する事をお勧めします。

「スキル」は種族によって獲得できるものが2つと固定されていて、
Adolt及びOldになったときの最初のレベルアップで獲得します。
世代交代時に他の種族に変えることで、8つ全部のスキルを有する
キャラを生み出す事が出来ます。

不老不死になると世代交代が出来ずに、スキルを全て獲得する事が
不可能になる為あらかじめスキルを獲得してから、不老不死キャラを
作成するとスーパーキャラが出来上がるというわけです。

面倒ですけどね…(^^;

不老不死の方法自体は、従来と同じようです。
情報元:ソーサリアン情報室
http://tk-nz.game.coocan.jp/sorcerian/Pc88_98/town/esther.html

【不老不死キャラの作成方法】

不老不死のキャラは歳を取らなくなり、老衰で死亡することが無くなります。

1. キャラクターの年齢をOLDにする。(各種族の年齢はCharactorMakingを参照)
2. シナリオへ冒険に出てキャラクターを死亡させる。
3. 時間を進めて「死後20〜29年」の状態にする。
4. エスターの所でキャラを復活させる。(復活の確率は10%なのでセーブが必須)
5. 復活に成功すると寿命が250歳になる。
6. 以上の事を再び繰り返せば不老不死になる。
7. OLDのままだと時間が経過した時にパラメーターが降下してしまうので、通常はREJUVENATEの魔法で若返らせる。(この時種族に応じて能力値が下がる)

REJEVENATEは同サイトの魔法一覧を見ると作成手順も書いてるので安心ですね。

■フォーエバーシナリオの遊び方

Windows版の独自シナリオは5本あり、
オリジナル版同様の基本シナリオ15本をクリアすると遊べるらしい。

基本シナリオは一部の謎や配置が換わっているらしい。

いまんとこ、このぐらいかな?




Twitch(メイン)+ニコニコ(サブ)での配信設定(追記あり)

簡単に現在の配信設定のメモです。
録画(サブ)でのニコニコ配信ですが、Twtichをサブにした時よりマシ(切断されない)とはいえ、画面が乱れるのは回避できない様です。
CPUエンコード(NVENCがついてない物)にすると発生しないので謎ですね。



配信設定
メインをツイッチにするので、ツイッチに配信する設定をします。
(詳細は検索で)


出力「配信」:
ツイッチへの配信設定
CBRにしてある程度ビットレートを抑えます。
CBRにしてもビットレートは画面の状況や画質の設定によって上下するので
最大でもTwitchの制限である6Mbpsを超えないように気を付けます。


出力「録画」:
録画を実行することでニコニコに配信するための設定
「URLに出力」で
URLには、ニコニコ配信画面の
「URL」と「ストリームキー」を/(スラッシュ)でつないで入力します。

ビットレートはあまり高くすると画面が崩れやすくなります。
GPU処理や通信が間に合わず、結果データ送信が遅れて画面が乱れる模様)




詳細設定:
Twitch配信中に安定しない場合は「新しいネットワークコードを有効にする」をONに

Windows10 NETDUETTOのライン入力ドライバが動かない場合

OBS Studioでニコニコ生放送をするときマイクの音声にエフェクトをかける方法 https://todkm.com/tag/vb-cable-audio-device

ループバックデバイスとは:

PCから出力先として選んで音声を流すと、
録音デバイスとして他のソフトから音を拾える仮想デバイスである。



PixivSketchなど録音デバイスしか扱えない環境で、PCで再生した音楽を放送するのに必要だったりまします。

自分の環境ではNETDUETTOのドライバが不安定で、
かつ、16bit 44kHzしか扱えないので、
安定とされているVB-CABLE Virtual Audio Device.
vb-audio.com/Cable/index.htmを使うことにしました。

とても安定しているので今後はこちらを使おうかと思います。




VB-CABLE Virtual Audio Device.インストールメモ

※ インストールの際は、管理者として実行でインストールします。

再生デバイスに「CABLE Input(VB-Audio Virtual Cable)」
録音デバイスに「MIDIVB-Audio Virtual Cable)」
が追加されます。

(うちの環境だと再起動するたびにその日によってラインだったりCable Inputだったりばらつきますが、同じもののようです。単にうちのPCがバグってるっぽい)

再生デバイスの「MIDIVB-Audio Virtual Cable)」は
CABLE Input(VB-Audio Virtual Cable)への出力をループバックします。

なので、音楽ファイルの再生先を「Cable Input(VB-Audio Virtual Cable)」にして再生すると、録音デバイスMIDIVB-Audio Virtual Cable)」から拾えるようになります。




【MSX】【MuSICA】【OPLL】【SCC】ハイハット音量バグ/SCC音色切り替えバグ


MuSICAにはハイハットの音量指定が正常に反映されないバグがあると思います。
(2ループ目からは正常になったりならなかったり)

BlueMSXでは回避方法があるのですが、実機だと回避方法が分かりません。
ワンチップMSXで鳴らしてみましたがダメでした。

生のワンチップMSXではなくMSX2+相当のため、MSXMUSIC回路の再現部に原因があるのかもしれませんが、以前実機で打ち込んでいた時もこの現象に悩まされたような記憶があります。

・ワンチップMSX固有であるかどうか
・実機で回避可能であるかどうか

が知りたい所ですが、どなたかご存じですかね?


他にもSCCの音色切り替えがワンチップMSXだと上手くいきません。
自分が打ち込んだRELICS SCCバージョンの2ループ目からおかしくなります。
これまた実機でもあったような気がします。
一応サウンドカートリッジ以外で鳴るようにチャンネル4と5は同じ音色のはずなのですが…。
謎。

【MSX】【MuSICA】【OPLL/MML】疑問

(´∀`(⊃*⊂)<森へお帰り
(猿ヶ森砂丘での挨拶)

嘘です。

最近ちまちまとMuSICAのデータを修正しています。

出来あがったデータをいちいち動画にしてるときりがないので、
mp3にしてサウンドクラウドで公開しています。
https://soundcloud.com/0dqjladk5kcq/sets/my-msx-sounds
(よろしければ聞いてみてください。)

その中で気になったMuSICAの仕様回りを少し


■オクターブ違いデータ

MuSICAは
MSD(テキストファイル)で

チャンネル=ブロック名/回数,....
ブロック名=MML


MMLは ド~シ(C~B)+音調
(例:ドを4分音符分ならすなら、C4)
という形で記述する。

これをBGMデータ(演奏用のバイナリデータ)に変換する場合は
ノート番号(オクターブ1のド~オクターブ8のBまでを連番で示したもの)に展開する。

このため、同じブロック名を流用していても
オクターブが違うとバイナリデータでは別ブロック扱いになる?(データ量が増える?)

FM1=F1,A1
FM2=F2,A1
(中略)

F1=o4
F2=o4
A1=ABCDEFG

とした場合と

FM1=F1,A1
FM2=F2,A1
(中略)

F1=o4
F2=o5
A1=ABCDEFG

とした場合で、データサイズが違う?
(後者のデータが多くなる?)


■ 発音長ずれ

MuSICAでは、発音長をフレーム数で記述するようで、
フレーム数に展開する際には、1フレーム未満の端数を分散します。

例えば64分音符が1.5フレームだった場合、
MML:C64C64 → データ:Cを1フレーム、Cを2フレーム
のように展開するようです。

この発音長の端数処理もブロックデータ単位なので、

FM1=A1/128
FM2=B1
(中略)
A1=F64
B1=C1 C1


とした場合、音がずれるけど

FM1=A1
FM2=B1
(中略)
A1=F64F64F64F64(中略)F64F64F64F64
B1=C1 C1

と、手書きでF64を128個並べた場合は、発音タイミングはずれない。


短いですが、メモ的な感じで。

 

【MSX】FinalFantasyII電源投入時のアレっぽいやつ

FinalFantasyII電源投入時のアレっぽいやつ



MSX NASIC用のプログラムリストになります。
MSXターボRモード用です。
Z80モードでも動きますが遅すぎますね。

BlueMSXであれば、ツール→マシン構成編集→その他→Z80周波数を21.477MHzにして実行すればそれなりの速度で動きます。

1/60秒タイマーで同期をとるようにしてるのでマシンが速すぎて困ることはないと思います。


1 COLOR 15,4,0
10 KEYOFF:CLEAR 255:DEFINTA-Z:Z$=CHR$(254):ZA=8*254:T=1:WT=60*4:WI=0:WS=WI
20 AD=&H800':SCREEN0:WIDTH40
30 AD=&H1000':SCREEN0:WIDTH80
40 AD=&H0:SCREEN1:WIDTH32
50 READA$:IF A$="" THEN 70
60 A=ASC(A$):READA$:FOR I=0TO7:VPOKE AD+(A+C)*8+I,VAL("&h"+MID$(A$,I*2+1,2)):NEXT:GOTO50
70 RESTORE3000:ON INTERVAL=T GOSUB300:INTERVAL ON
80 FORI=0TO7:VPOKE ZA+I,0:NEXT:ZI=8
90 READ Y:IF Y<0 THEN 900
100 READ A$:X=(32-LEN(A$))/2:Y=Y*2-1:Z=X:L=LEN(A$):LOCATE0,Y:PRINT SPACE$(X);
110 FOR I=1 TO L:C$=MID$(A$,I,1):C=ASC(C$):CA=C*8
120 LOCATE X,Y:PRINT STRING$(32-X,Z$);
130 ZI=0:FORJ=0TO7:ZS=ZI:FORK=0TO6:VPOKE ZA+7-K,VPEEK(ZA+6-K)*-(K>0):NEXT:VPOKE ZA,VPEEK(CA+7-J):FORWJ=0TO1:WJ=-(ZS<ZI):NEXT:NEXT
140 LOCATE X,Y:PRINTC$;:X=X+1:NEXT:CA=32*8
150 ZI=0:FORJ=0TO7:ZS=ZI:FORK=0TO6:VPOKE ZA+7-K,VPEEK(ZA+6-K):NEXT:VPOKE ZA,VPEEK(CA+7-J):FORWJ=0TO1:WJ=-(ZS<ZI):NEXT:NEXT
160 LOCATE X,Y:PRINT SPACE$(32-X);
170 GOTO 90
300 ZI=ZI-(ZI<&H7FFF):RETURN
900 ZI=0:FORW=0TO1:W=-(ZI>WT):NEXT
910 FOR I=0TO6:COLOR VAL(MID$("1511101407050401",I*2+1,2))
920 ZI=0:FORW=0TO1:W=-(ZI>2):NEXT
930 NEXT:CLS:COLOR 15
940 ZI=0:FORW=0TO1:W=-(ZI>60):NEXT
950 READ A$:IF A$<>"END" THEN 90
960 GOTO70
999 END
1000 DATA"A","0E1A1A323E62F200","B","7C32323C32327C00"
1010 DATA"C","3C62606062623C00","D","7C32323232327C00"
1020 DATA"E","7F31343C34317F00","F","7F31343C34307800"
1030 DATA"G","3C62606F62623C00","H","F762627E6262F700"
1040 DATA"I","3C18181818183C00","J","1E0C0C0C4C4C3800"
1050 DATA"K","F3666C786C66F300","L","7830303031317F00"
1060 DATA"M","E3766A626262F700","N","E7727A6E6662F200"
1070 DATA"O","3C62626262623C00","P","7E31313E30307800"
1080 DATA"Q","3E61616165663B00","R","FC62627C6462F700"
1090 DATA"S","3E61603E03433E00","T","7F5D1C1C1C1C3E00"
1100 DATA"U","F762626262623C00","V","F3613232361C1C00"
1110 DATA"W","DB4949495D772200","X","F76234182C46EF00"
1120 DATA"Y","F762341818183C00","Z","7F43161C34617F00"
1130 DATA":","1818000018180000",".","0000001818180000"
1140 DATA"(","0102040404020100","c","0018242024180000"
1150 DATA")","8040202020408000","1","0C04040404040E00"
1160 DATA"9","3C42423E02423C00","8","3C42423C42423C00"
1170 DATA"[","0F0C080808080C0F","]","7818080808081878"
1171 DATA"/","0102040810204080"
1174 DATA"0","3E63636363633E00","1","1838181818183C00"
1175 DATA"2","3E63630618307F00","3","3E63630E63633E00"
1176 DATA"4","0E1E3626667F0600","5","7F607E0303633E00"
1177 DATA"6","3E63607E63633E00","7","7F6363060C181800"
1178 DATA"8","3E63633E63633E00","9","3E63633F03633E00"
1207 DATA"-","0000003E00000000","~","0000333300000000"
1208 DATA"!","0808080808080008","?","1C22220408080008"
1234 DATA"「","1E10101010100000","」","0008080808087800"
2998 '
2999 DATA ""
3000 DATA 1," "
3010 DATA 2,"FINAL FANTASY II"
3020 DATA 3," "
3030 DATA 4," "
3040 DATA 5," "
3050 DATA 6," "
3060 DATA 7,"(c)1988 SQUARE"
3070 DATA 8," "
3080 DATA 9,"PROGRAMED BY NASIR"
3090 DATA 10,"CHARACTER BY YOSHITAKA AMANO"
3100 DATA 11,"SCENARIO BY KENJI TERADA"
3999 DATA -1,""
4000 DATA -1,"END"

(使い方)
最後にEOF(コントロールコード27:16進数で1A)を入力して保存すれば、MSXBASICでプログラムとして読み込めます。

【MSX】【MuSICA】【OPLL/MML】メロディモード(9音和音モード)でリズム音源を鳴らす

(´∀`(⊃*⊂)< 鮭ハラスのあぶり焼き!
北方民族の挨拶

嘘です。適当な事を言いました。ごめんなさい。

今回はMSXDTMをする人向けの情報になります。
ちょっとだけマニアック。


■強制リズムモードとは


強制リズムモードとは、
OPLLチップだけをリズムモードに切り替えて、
メロディ用MMLでリズム音源を鳴らしてしまう手法です。

BASICだとハイハット/タムだけ鳴らす事が出来なさそうなので、MuSICAなどの音源ドライバをお勧めします。(BASICだとYコマンドの音量指定が無効化される)

■メロディモードとリズムモード

OPLLにはメロディモード(9音)とリズムモード(6音+リズム5音)があります。
リズム音色はリズムモードでのみ鳴らせます。

メロディモード/リズムモードは、
・BASICの場合はCALL MUSICの第一引数が0か1かどうか
・MuSICAの場合はFMR=の後にMMLブロックを書くかどうか
で決まります。

※ OPLLレジスタ側では、
レジスタ14のビット5番(10進数の32)がONならリズムモードです。

MML/ドライバ(CPU)側ではメロディモードのまま、
OPLLだけを強制的にリズムモードに切り替えるのが、
強制リズムモードです。

命名は適当)

概要としては、
メロディモードで(OPLLレジスタに直接書き込む)Yコマンドを使って
OPLL側だけをリズムモードに切り替えます。
この状態になるとメロディ用MMLでドラムが鳴らせるようになります。

利点

・シンセドラムのような音程制御が容易になる
・リズムモードでは指定ができないSコマンドが使える余韻が伸びる
・リズムモードでは指定ができないQコマンドが使える

メロディ用のMMLが使えるので、
例えばQ1S1C16などとして
バスドラムを鳴らすと余韻が伸びてよく響くバスドラムになります。
(T150以下ならQ1、T151以上ならQ2)

欠点

・わかりにくい、癖がある
・初回発音で問題がある
タムタムハイハットの音量指定が面倒(この2つはメロディモードでの音色指定が音量指定代わりになる)
BASICでは「スネア/ハイハット」や「シンバル/タム」のそれぞれの組み合わせのうち片方だけを完全無音にするのが難しい。無理かも。(MuSICAはできる)


欠点はあるものの、強制メロディモードでしか出せない(出しづらい)音がある為、
強制メロディモードには魅力があります。

(高性能なサウンドドライバならリズムモードでも同様の事は出来るかもしれません。むしろできて。)

■まずはMuSICAのサンプルをご覧ください


FM1 =
FM2 =
FM3 =
FM4 =
FM5 =
FM6 =
FMR =
FM7 =t,fm7,a0,a1,a1,r2,a0,a1,a2,a0,
FM8 =t,fm8,b0,b1,r2,r2,r2,b2,r2,r2,
FM9 =t,fm9,c0,c1,r2,c1,c0,c1,r2,r2,
PSG1=
PSG2=
PSG3=
SCC1=
SCC2=
SCC3=
SCC4=
SCC5=

t=y14,32 ;-- rhythm:ON
t255 r64 ;-- need to initialize bug
t150 m1 l8

; * OPLL inst register's value: ( reg value=@* )
; 0=@user / 1=@2 / 2=@10 / 3=@0 / 4=@3 / 5=@4 / 6=@5 / 7=@6
; 8=@9 / 9=@48 / 10=@24 / 11=@14 / 12=@16 / 13=@23 / 14=@33 / 15=@12

; * OPLL volume register's value: 15=min / 0=max
; * MML volume register's value: 0=min / 15=max
; * PSG volume register's value: 0=min / 15=max

fm7=v15@12 y54,240 q1s1 ;y54,@*16+v : v=bass
fm8=v13@12 y55,242 q1s1 ;y55,@*16+v : v=snare : @=hihut
fm9=v0@64 y56,15 q8s1 ;y56,@*16+v : v=cinbal : @=tom

r2=r2

;-- ch.7: bass drum
a0=;o3>ec<gc
o3>(e64<<p24)e16..p>>(c64<<p24)c16..p>><p(g64<p12)g16..p>(c64<p12)c16..p>
a2=o3l64>(edc<bagf)e>(c<bagfed)c><(gfedc<ba)g>(c<bagfed)c>l8
a1=o3>(e64<<p24)e32.p>>(e64<<p24)e32.p>>(c64<<p24)c16..p>><p(g64<p12)g16..p>(c64<p12)c16..p>
a2=o2>(e64<<p24)e16..p>>(c64<<p24)c16..p>><p(g64<p12)g16..p>(c64<p12)c16..p>

;-- ch.8: snare / hi-hut
b2=;o3y55,15b16b16y55,242co8y55,15co3y55,242<c>
o4y55,15(b64p24<<)b32.p>>(b64p24<<)b32.p>>y55,15(c64<<p24)c16..p>>o3y55,242(g64<p24)g16..p>y55,242(c64<p24)c16..p>
b0=o3>(e64<<p24)e16..p>>(c64<<p24)c16..p>><p(g64<p12)g16..p>(c64<p12)c16..p>
b1=o2>(e64<<p24)e16..p>>(c64<<p24)c16..p>><p(g64<p12)g16..p>(c64<p12)c16..p>

;-- ch.9: cinbal / tom-tom
c0=;o1>ec<gc
o1>(e64<p24)e16..p>(c64<p12)c16..p(g64p6)c16..p(c64p6)c-16..p>
c1=o1>(e64<p24)e32.p>(e64<p24)e32.p>(c64<p12)c16..p(g64p6)c16..p(c64p6)c-16..p>
c2=o3y56,240(c64<<p24)c16..p> y56,15 rrr

■解説

MML側はメロディモードのままですが、
”y14,32”のところでOPLL側だけをリズムモードに切り替えます。

t=y14,32 ;-- OPLL側をリズムモードにする
t255 r64 ;-- y14,32の直後に発音すると音がおかしくなるので休符を入れる
t150 m1 l8

YコマンドはOPLLレジスタに直接値を書き込むコマンドです。
OPLLレジスタのビット5を1にするとリズムモードになります。
(ビット5は10進数でいうと2の5乗=32です)

■ OPLLアプリケーションマニュアルより レジスタ1416進数で$0Eの説明抜粋

3-1-5 $0E RHYTHM
リズムのモード選択と各リズム楽器のON/OFFをコントロールします。
D7 D6 D5 D4 D3 D2 D1 D0
- - RHYTHM BD SD TOM TOP-CY HH


リズムモードの正式な利用方法はメロディモードと異なります。

・チャンネル7~9の音程レジスタをノートオンで固定
・OPLLレジスタ14のビット0~4で各リズム音の発音をON/OFF制御
・OPLLレジスタ14のビット5は1で固定


強制リズムモードではMML/ドライバ(CPU)側はメロディモードなので、

レジスタ14のビット0~4は0OFFで固定
・チャンネル7~9の音程レジスタのノートオン/オフを制御


という操作になります。

つまり、メロディモードのままOPLLチップ側だけを強制リズムモードにした場合、
本来の仕様とは違う操作で音が鳴ることになります。

そのため強制リズムモードでは、初回発音時には変な音が出てしまいます。

これは仕様外の動作をさせている以上、仕方のない事なので、
最初に休符強制ノートオフや音量0での発声を挟むことで異音を抑制します。
(例:”y14,32”のあとの”t255 r64”など)

■強制リズムモードでの音量制御


OPLL側がリズムモードになっている場合、
ハイハットタムタムはメロディモード時の音色指定部分が音量指定になります。

強制リズム音モードの場合の音量指定はそれぞれ

■チャンネル7
Vコマンド=バスドラムの音量
OPLLレジスタ54:下位4ビット=バスドラムの音量

■チャンネル8
Vコマンド=スネアドラムの音量
@コマンド=ハイハットの音量
OPLLレジスタ55:下位4ビット=スネアドラムの音量
OPLLレジスタ55:上位4ビット=ハイハットの音量

■チャンネル9
Vコマンド=シンバルの音量
@コマンド=タムタムの音量
OPLLレジスタ56:下位4ビット=シンバルの音量
OPLLレジスタ56:上位4ビット=タムタムの音量

となります。

ちなみにBASICではなかなか面倒な問題があります。

BASICでの強制リズムモード:音量制御の問題
・Vコマンドで無音にできない(結構聞こえる)
・YコマンドでVコマンドの代用が出来ない(Vコマンドの値が常に書きこまれる)
・ただし@コマンドで音量指定するハイハットタムタムはYコマンドが使える

・スネアを鳴らさずにハイハットだけ鳴らすことができない
・シンバルを鳴らさずにタムタムだけ鳴らすことができない

ハイハットを鳴らさずにスネアだけ鳴らすことは出来る
タムタムを鳴らさずにシンバルだけ鳴らすことは出来る
という感じで癖が強い

MuSICAでは上記の制限(問題)はありません。
少なくともBASICよりはマシかと思います。

■@コマンドでの音量指定について

@コマンドが音量制御になるハイハットタムタムですが、
OPLLレジスタ直接書き込み時と同様で、
MMLのVコマンドとは逆に0が最大、15が最小となります。
さらに、
MML@コマンドの値OPLLレジスタに書き込まれる値一致しません。
変換が必要になります。

■ OPLLレジスタの値MMLの@の値 対応表

OPLLレジスタの値:MMLの@の値
0:@n ユーザー定義音色 → 音量最大
1:@2 バイオリン
2:@10 ギター
3:@0 ピアノ
4:@3 フルート
5:@4 クラリネット
6:@5 オーボエ
7:@6 トランペット
8:@9 オルガン
9:@48 ホルン
10:@24 シンセ
11:@16 ハープシコード
12:@16 ビブラフォン
13:@23 シンセベース
14:@33 ウッドベース
15:@12 エレキギター → 音量最小


@コマンドの場合、
@12のエレキギターがV0相当、
@2でV14相当、
@ユーザー定義音色でV15相当です。

ただ、ユーザー定義音色を指定すると他のチャンネルのユーザー定義音色に影響が出るので、演奏にユーザー定義音色を使いたいならお勧めできません。

■ Yコマンドでのリズム音量制御

他に、Yコマンドで音量制御する方法もあります。

Yコマンドの場合、OPLLレジスタへの直接書き込みなので、
MMLのVコマンドとは逆に0が最大、15が最小となります。

注意点として、
Yコマンドで音量を操作した後で、
Vコマンドと@コマンドのどちらかを使うと、Vコマンドと@コマンドの両方の値がレジスタに書き込まれます。(Yコマンドの指定をまるごと上書きします)

ですので、
Yコマンドで音量制御する場合はずっとYコマンドでのみ音量制御をする必要があります。

ハイハットタムタムを音量最大で鳴らしたい場合は
@コマンドではユーザー定義音色を指定しないといけないので
代用としてYコマンドを使う感じでしょうか。

また、先に書きましたが、
BASICではYコマンドでの音量制御は無効のようです。
Vコマンドを使わなくても常に上書きしてる気配。
残念です。

Yコマンドでの音量指定例:

レジスタ54:バスドラム音量
y54,**

**は、バスドラム音量0~15

例) y54,0 → バスドラムV15相当 → v15相当

レジスタ55:スネアドラムハイハット音量
y55,**

**は、(スネアドラム音量0~15)+(ハイハット0~15×16)

例)y55,240 → スネアV15、ハイハットV0相当 → V15@12相当

レジスタ56:シンバルタムタム音量
y56,**

**は、(シンバル音量0~15)+(タムタム音量0~15×16)

例)y56,15 → シンバルV0、タムタムV15相当 → V0@64相当

※(ここでの音量は0で最大、15で最小・無音)です


こんな感じで非常に癖が強いですが、サンプルを聴いて魅力を感じた方はお試しください。

大体の利用目的は、
バスドラムの伸びを良くしたり、シンセドラムっぽい音を出すためなので、
他の方法で実現できるのであればそちらの方が良いかもしれません。

参考資料


■OPLLアプリケーションマニュアルより音量/音色レジスタの説明抜粋

3-1-8 $30$38 INSTRUMENT/VOLUME

音色(ROM15音色、オリジナル音色)、音量を決めるデータを設定します。
D7 D6 D5 D4 D3 D2 D1 D0
INST VOL

D7-D4 (INST)
この4ビットで以下の音色が決定されます。
INST 音色 INST 音色
0 オリジナル音色 8 オルガン
1 バイオリン 9 ホルン
2 ギター A シンセ
3 ピアノ B ハープシコード
4 フルート C ビブラフォン
5 クラリネット D シンセベース
6 オーボエ E ウッドベース
7 トランペット F エレキギター

D3-D0 (VOL)
各音色の音量を決めます。最小分解能は3dBで、最大45dBまで音量を絞り込めます。
D3 D2 D1 D0
-24dB -12dB -6dB -3dB

リズムモード(Addr=$0E、D5=「1」)時は、$36~$38は次のように各リズムのボリュームを設定できます。
  D7 D6 D5 D4 D3 D2 D1 D0
$36 - BD
$37 HH SD
$38 TOM CY

YM2413アプリケーションマニュアル
http://d4.princess.ne.jp/msx/datas/OPLL/YM2413AP.html
※ ある程度直してあるようですが、一部間違いがあるので注意






MSXマガジン標準サウンドドライバ『MuSICA』のご紹介

2020/05/12 「音色エディタの「ディストーション」がキャリア/モジュレーター逆になっている」を追加

2022/09/20  「MuSICAの仕様書」「MuSICAのライセンスについて」を追加


 


(´∀`(⊃*⊂)<ぶり大根!
九州民族の挨拶

嘘です。適当な事を言いました。ごめんなさい。

今回はMSXDTMをする人向けの情報になります。
MuSICAの良さと問題と対処法について
他で書いて無さそうな事をまとめてみようと思いました。

メジャーなようでマイナーなMuSICA先生。


音源作成ツール&ドライバー MuSICA

ラムラーナでもサウンドモードアプリとして登場するMuSICAのご紹介です。



MuSICAはMSX用の音源ドライバMML音色データ統合環境です。
PSG、FM音源(OPLL)に加えSCCも使えるのが当時は衝撃でした。

初出は1990年10月号のMSXマガジンで、同月に合わせてTAKERU発売されたMSXディスク通信創刊号に収録されています。

 

公式にはスナッチャー付属のSCCサウンドカートリッジにのみ対応とのことでしたが、
SCC搭載ゲームならなんでも使える方法がありました。(後でご紹介)



再生しながらMMLや音色を編集し、F5キーでワンタッチ再生もできる。

自作サンプル:

 

MSX BASICのPLAY文がほんの少し便利になってSCCに対応した物」ではありますが、
エディタで編集しながらリアルタイムで演奏できるのが特徴です。
そのあたりもMSX BASICのPLAY文の拡張に近い感覚ですね。

・SCC対応要SCCサウンドカートリッジ
・最低限必要十分な機能
・統合環境でMMLも音色も編集しながら再生できる
・BASICからBGMとして再生することもできる

夢が広がりまくりますね。手軽な割に機能が十分というのが素晴らしい。
早速色んなデータを打ち込みまくったものでした。

ただし、最終バージョン1.02でも割とバグってるので途中で投げ出した人も多そうです。
一部致命的なバグもあります。現象や対処法などは後述します。

 


ちなみに、他の音楽ドライバは、MuSICAよりもMML機能が優れていても、
”テキスト編集・保存→コンパイル→演奏”という形でした。
つまり何度もディスクアクセスを挟みます。

現在編集中のMMLをワンボタンで演奏したり、
演奏しながら音色データを弄ったりなどは出来ませんでした。

MGSDRVが過去にはBASIC環境に対応していましたが、機能拡張に伴いDOSプロンプトからの実行になりました。

※ 追記

現在、MGSDRVには「MSXPLAY」というWebブラウザでデータのMML編集~再生~データ出力までできる環境があります。とても便利です。

msxplay.com

 


入手方法

  1. 1990年10月発売のMSXディスク通信創刊号 (ver.1.0)
  2. RPGコンストラクションツール Dante2 (ver.1.02)
  3.  MSXマガジン永久保存版 (ver.1.02)

初出はMSXマガジン標準ミュージックドライバーとして『MSXディスク通信創刊号'90年10月号』に収録されたものになります。

MSXマガジン'90年10月号にはMuSICA特集記事が組まれ、コナミMSXサウンドチームによるSCCの解説なども掲載されていました。

『Dante』の続編である『Dante2』にはMuSICA ver1.02が収録されており、MuSICAで作成した自作BGMを使用することが出来ました。
ただしDante2内で再生するときはSCCは鳴りません。

Dante2の「OPTION」から
「MuSICAシステムディスクのさくせい」で
MuSICA 1.02のシステムディスクが作成できます。

MSXマガジン永久保存版1はMuSICA特集ページがあり、9音リズムモードなども紹介されています。SCC開発インタビューも載っています。

 

MSXディスク通信創刊号』には、サンプル曲としてRPGツクールの元となった『RPGコンストラクションツール Dante』のBGMデータ3曲と『吉田コンチェルン』のBGMアレンジデータ3曲が収録されていました。

 

※ 小ネタ『Dante』サンプルゲーム『BADOMA 血塗られた伝説』のタイトル画面にある遺跡は、ラムラーナの『割門』の元ネタだと思われます。 プレイ動画→ sm28508852

ラムラーナで見た。


個人的にDante1の曲がシブかっこよくて好きです。

 


SCCカートリッジの利用について

豆知識:MuSICAでSCC搭載ゲームカートリッジを無理やり使用する。

MuSICAはSCCサウンドカートリッジがないとSCCを認識しませんが、
SCC搭載のゲームを無理やり慣らす方法もありました。
F-1スピリット、グラディウスパロディウス、激突ペナントレース、エルギーザの封印など
SCCを搭載したゲームカートリッジを後刺しBASICが起動した状態でカートリッジを差し込みして、SCCカートリッジのスロット番号を直接指定します。

念のためMuSICA 1.02推奨です。

改造版"MUSICA.BAS"

10 SCREEN0,,1:WIDTH40:COLOR15,0,0:CLEAR500,&HA500
20 PRINT"SCC DIRECT MODE(1-2=SCC SLOT / 0=NO)?";
30 A$=INPUT$(1):IFA$<"/"ANDA$>"2"THEN30
40 PRINTA$:S=VAL(A$)
50 DEFUSR=&H156:A=USR(0):SCREEN7:SETPAGE,1:BLOAD"MUSICED.BIN",S
60 A=&HC800:FORI=0TO&H45:READA$:POKEA+I,VAL("&H"+A$):NEXT
70 IFS=1ORS=2THENPOKE&HC841,S ELSE FORI=0TO10:POKE&HC830+I,0:NEXT
80 DEFUSR=&HC800:I=USR(0)
90 ' Machine Language
100 DATA 31,00,C8,21,00,40,3A,42,F3,CD,24,00,21,00,00,11
110 DATA 00,40,01,00,2A,CD,59,00,21,00,2a,11,00,90,01,B8
120 DATA 10,CD,59,00,21,b8,3a,11,00,CE,01,00,10,CD,59,00
130 DATA 11,ef,cf,01,06,00,21,40,c8,ed,b0,C3,00,40,00,00
140 DATA 3e,sl,32,34,ce,00

 

※注意点:後刺しは電源を付けた状態で無理やり差し込むので、暴走や本体へのダメージの危険があります。

ポーズを掛けた状態だと暴走しにくいのですが、それでも危険です。

カートリッジの基盤を弄って差し込み終わるまで認識しないスイッチをつけたりする人もいたと思います。

 


MuSICAのバグ一覧

自分が困ったバグのリスト

【重要メモリ破壊】長時間作業していると内部テキストデータが部分的にメモリ破壊されることがある。

条件:何周もループ再生していると発生しやすい。詳細な条件は不明。
回避方法も不明。時間よりもループ回数の影響の方が大きい印象。

※ 他の方は経験がないそうです。自分のMUSICED.BINはワークエリアと思われる00Hで埋まった部分を削り、バイナリサイズを縮め改造した独自ローダーで実行しているため、それが原因の可能性もあります。(0初期化を期待しているワークがあって、0初期してなくて問題がでるとか?)

現象:
画面上の見た目ではわからないが内部で保持しているMMLテキストデータ領域が一部おかしくなっている。
この状態でF5で再生するとエラーが起きてわかることもある。分からないこともある
この状態でセーブするとデータが壊れる。
MMLデータ、VOICEデータで発生。

回避方法:
熱中して長時間作業していると発生しやすいのでこまめなバックアップをする。

MMLデータが壊れた時は異常なアスキーコードを飛ばしながら読み込んでテキストデータとして異常がないようにしてから消えた部分を手作業で修復します。

ちなみにMSDファイルはテキスト形式ですが最後にコントロールコードの27(EOF)が必要です。

ESC→A→Cで一度コピーした内容はCTRL+Pでファイル間を越えてペーストできるので、バックアップがあるのなら、そこからコピーペーストすると楽かもしれません。


■【制限音色設定】PSG音色のエンベロープ値に奇数を指定するとおかしい。

条件:仕様。

現象:
アタック・ディケイ・サスティン・リリースに奇数を指定すると音量が滑らかに変化しない。
偶数に比べて2倍ぐらい長い。
変化間隔が2フレーム置きになっている

回避方法:
奇数を使わない。
音量をゆっくり変化させたい場合は意図的に使用するのもアリ。


■【音量無視リズム初期化】冒頭で指定したハイハットの音量設定が無視される。

条件:必ず。

現象:
MML冒頭のハイハットの音量指定が無視される。初回の休符か発音の前に指定したハイハットの音量が無視される。Vコマンド、VHコマンド、Yコマンドともに。

回避方法:
何らかの発声か休符を一度実行した後にハイハットの音量を指定すると正常になります。

全てのチャンネルの冒頭にt225r64などを入れてからボリューム指定などをする。のが簡単かもしれません。
気になる人は気になるけど1/60秒の休符なのでループ時にすこしごまかせる

 


強制リズムモード固有の問題(MuSICA以外でも有り)


■【異音発生強制リズムモード】強制リズムモードの初回発音で異音が発生する


条件:
仕様。強制リズムモード使用時に発生。
OPLL仕様外の使い方なのでBASICでもなんでも発生。

現象:
メロディモード9音和音モードで強制リズムモードを使用してリズム音源を鳴らす場合に、全てのリズム音は最初の発音時に音色がおかしくなります。

回避方法:これも冒頭に休符を挟むことで回避できますので、”y14,32 t255r64 …以下本来のMML”とすることで回避可能です。

※Y12,32OPLLレジスタ14に32を書き込むコマンド→OPLLをリズムモードに変更する。これを利用して、MML上メロディモードでOPLLリズム音を発声させる。通称強制リズムモード

ただし、ハイハットに関してはこれでもダメで最初の発声時に必ず音がおかしくなります。

強制リズムモードでのハイハットについては、

・諦める
・使わない
・最初の発音時に音量0で鳴らすMML冒頭はFM8以外が"y14,32t255r32"、FM8が"t225r64v0@12r64"もしくは"t225r64y55,255c64"など

でしょうか。

 


音色エディタのバグ

■音色エディタの「ディストーション」がキャリア/モジュレーター逆になっている

勤労4号 ver2.50(MuSICA互換ドライバー)の説明より
http://sakuramail.net/fswold/music.html

KINROU4.TXT (24行目)

------------
☆重要事項!
------------

 誰にも言われなかったので、今まで気付かなかったのですが、MuSICA
純正エディターで設定したFM音源音色のディストーションは、キャリアーに
設定されたものはモジュレイターに、モジュレイターに設定されたものはキャ
リアーに設定されるというバグがあります。
 BTO・MuSICA研究所の対処としましては、キャリアーに設定された
ディストーションはちゃんとキャリアーに、モジュレイターに設定されたもの
モジュレイターに設定することにいたしました。
 そこの点が純正品とは異なりますので、ご了承ください。

 


その他の仕様やバグと対応方法

■廣江さんのMuSICA講座
http://www002.upp.so-net.ne.jp/ahiroe/msx/mlecture.html

横80文字モードちなみにESC→DELでも行けます
ファイル間のカットペースト
PSGドラムのノイズ切り替え
テンポずれ対策
MSDファイルの注意点と修復方法
などなど


MuSICAは良いものではあるのですが、
不思議現象のせいでおすすめしかねるのがネックですね。



手軽に音を鳴らすのには良い環境だと思いますので、
手に入るようでしたらお試しください。

良い代替品があるのであれば移行したい所ですが、今の所、エディタの使い勝手を含めた代替品は見つけられていません。

 

候補としてはMGSDRVのブラウザ実行環境「MSXPLAY」
https://msxplay.com/
もあります。
こちらは音色などもMMLで設定しますので視覚的には難しいところもありますが、ブラウザ上で素早く編集、再生、出力が出来るのでお勧めかもしれません。
ゲーム用途ではなく、データの試作や音楽再生専用であれば非常に強力です。

 

MSXにこだわらず、MMLで遊びたいだけであれば
MUCOM88 Windows( https://onitama.tv/mucom88/ )
などがエディット環境もそろっていて超強力かと思います。

 


MuSICAドライバーのライセンスについて

MSXマガジン1990年10月号の時点では、
なお、MuSICA本体、またはそれを使ったソフトウェアをMSXマガジン以外の雑誌に投稿したり、販売することは禁止されているので、注意してください。
と書かれています。

MSXマガジン永久保存版の時点では、

自作ゲームに組み込める音楽を作成することも可能だ!
とあります。

 

ライセンスに関係ありそうな部分に関してはそれ以外の記述が無いので、

  1. データの利用:
    作成したデータ自体の禁止事項はなく、MSXマガジン永久保存版の時点では許可ととれる記述。
  2. ドライバの利用:
    無償の個人利用であれば禁止が明言されていないが怪しい。
    →互換ドライバ(勤労4号・5号、DMシステム2)を利用するのが安全。

となるかと思います。

 

参考:現行ツクールシリーズの再配布ライセンス

現在のツクールシリーズはツクールのユーザー登録をしたユーザーはツクールで作成した再配布バイナリを配布可能。

(※ツクール素材やサンプルについては配布禁止のものもある)

tkool.jp

残念ながらツクールWebではMuSICAも、吉田工務店も、Danteも、Dante2も、ダンジョン万次郎も、すご八も、ぞわぞわーるども、アドベンチャーツクールも、吉田建設も吉田コンツェルンも、対応していない様子です。

他には、98用のツクール系でもライセンスの不透明感はMSXマガジン製のコンストラクションツールシリーズと似たような状況ですね。

いまいち、利用可能範囲がハッキリしません。
この辺もMuSICAが流行しなかった理由でしょうね~……

 


互換ドライバー

というわけで、演奏は勤労5号かDMシステム2推奨です。
作成はMuSICAか勤労4号で。

もしROMの自作ゲームに組み込むのであれば、現状だと自分で互換ドライバーを作成するしかないかもしれません。

どなたかROMで利用可能な条件や方法をご存じでしょうか?

www.gigamix.jp

sakuramail.net

 


データ仕様書

ドライバ呼び出し等の情報はMSXマガジン1990年10月号やMSXマガジン永久保存版の誌面に掲載されているのですが、データの仕様書はMSXディスク通信創刊号のディスクにのみ収録されているようです。

ただ、これが独自コードの専用テキストデータで、一般的なテキストビューアでは表示できないため、MSX上の重い漢字表示で、かつ、1行ずつスペースを何度も押さなくてはいけません。(キーリピートに非対応なので押しっぱなしは不可)

苦行すぎますね。

むかし、テキストに書き起こしたものが見つかったので、別記事で紹介しておきます。
互換ドライバやデータコンバータを作りたい場合に参考になるかもしれません。

 

uniskie.hatenablog.com

La-Mulana2 十字キー/決定キー/キャンセルキーの設定方法

こんにちはミエムキーナ・小杉こと(´∀`(⊃*⊂)おじさんです。

NIGORO公式サイトのお知らせ見てたら、La-Mulana2のバージョン1.4以降はシステムコンフィグが追加されていることに気付きました。

システムコンフィグでは移動キー(十字キー)、キャンセル/決定キーの変更ができるようになっていました。
これらはOPTIONからだと設定できず、初めて起動した時点では十字キーが無効な状態になっています。


タイトル画面の右下に「SYSTEM CONFIG」が追加されているのがお判りいただけるでしょうか…?



SYSTEM CONFIGを開くとこんな感じ。



上下左右に十字キーを割り当て、ついでに決定/キャンセルを日本仕様に変更。
「決定して終了」を選んで戻ります。


設定が反映されていない?

実は、一回タイトルに戻った時点では設定が反映されません。
(バグか?Unityの仕様か?)
その場合、
もうもう一度「SYSTEM CONFIG」を開いてやると設定が反映されます。

流れとしては
SYSTEM CONFG→設定変更→ 決定して終了→タイトル→SYSTEM CONFIG→キャンセルしてタイトルに戻る
で、設定が反映されるようです。
(ゲームの再起動でもOKだとは思いますが)

※ 移動に十字キーを設定した場合、十字キーも左スティックも使えるようです。

これをすれば、Steamのコントローラー設定から十字キー(POV)の機能を左スティックにしなくてもOKですね。決定ボタンも×ではなく〇にできますし。

というかOPTIONに追加して欲しかったな。

La-Mulana1も〇ボタンで決定に変更してました。



それでま皆さま快適なラムラーナ2生活を!



60fpsのPCゲーム(EGGやMSXPLAYer)を30fpsにブレンド合成しよう!

バイスキャプチャならDE-INTERLACE(インターレース解除)のBLENDで、点滅を綺麗に半透明状に変換して表示できるのですが、Windowsで実行するゲームはその方法が使えません。

その場合は、OBSの「Source Mirror」ソースを追加して、フィルタ「色補正」と「レンダリング遅延」を使用することで代用できそうです。

まずゲームの「ウィンドウキャプチャ」ソースを追加済みの状態から。

今回は「BlueMSX」が対象となるウィンドウキャプチャソースとなります。

BlueMSXではPastel2というMSXFANに投稿された映像鑑賞ソフトを実行しています。
MSX2には60fpsで2枚のVRAMを交互に切り替えながら表示する機能があります。

これには疑似半透明のような効果があるため、
PASTEL2はそれを利用して不思議な波模様を表示するプログラムになります。

60fpsの画像をblendで30fpsに落とし込むことで30fps配信でもちゃんと表示されるか検証しながら方法を模索してみました。

(1)ソースの「追加」→「Source Mirror」



(今回は既に「Source Mirrior」は追加済みで「フレーム補完 BlueMSX」という名前にしてあります。)

「Source Mirror」の「Source」にはゲームのウィドウキャプチャソースを指定します。
(今回は「BlueMSX」という名前のウィンドウキャプチャです。)

※「Source Mirror」側に指定した「ウィンドウキャプチャ」を同じ大きさと位置に配置します。「変換」→「変換のコピー」/「変換の貼り付け」を使って元のソースからコピペすると楽です。

※「ソース」リストでの配置ですが、「Source Mirror」はソースに指定する「ウィンドウキャプチャ」ソースより上に配置します。(ウィンドウキャプチャの上にSourceMirrorを半透明合成する為です)(今回の例の「ソース」リストを見てもらうと、「フレーム補完 BlueMSX」は「BlueMSX」の上にあるのがわかると思います。)

(2)「Source Mirror」の「フィルタ」に「色調補正」と「レンダリング遅延」を追加

フィルタに「追加」→「色補正」
不透明度を50%に設定

フィルタに「追加」→「レンダリング遅延」
遅延時間に36ミリ秒を指定

元々ウィンドウキャプチャ自体が60分の1秒(16.6666ミリ秒)以上遅れているらしく、
そこからさらに60分の1秒遅らせる為には33ミリ秒以上の遅延を指定しないと、うまくずれてくれない様です。

今回は配信で確認しながら1ミリ秒ずつ増やしていき、36ミリ秒ぐらいから期待したBLEND効果が出ました。

使用前

使用後



無事、PCのモニタ表示に近い映像がブラウザ側で表示されました。

ただ、キャプチャデバイスと違って、ウィンドウキャプチャの場合は、
微妙に取り込みタイミングがずれたりすることがあるようです。
処理落ちの影響を受けやすくなっていますね。

 

とりあえずこれでそれなりに60fps点滅のあるゲームも表示できるようになるかと思います。

 

(3)うまくいかない場合

OBS側の画面取り込み頻度が映像設定のfpsに影響されるケースではうまくいかないので、映像出力を60fpsに設定する必要が出るかもしれません。

ニコニコの場合60fps送信は可能ですがサーバ側で30fpsに強制的に減らされます。

また他の配信サイトでもサーバ側で30fpsに変更される場合があります。

ですので、60fps設定+今回の処理を加えて配信というのが安定かもしれません。

絶対60fpsで視聴可能なら今回のような処理は不要なのですが。

 

 

ラムラーナ×マルワタロウ(各マップの光十字を太郎に置き換え)






ラムラーナのグラフィックテーマにMARUWA TAROUを追加します。

■ lamulana-maruwa-mod.zipの中身


https://app.box.com/s/556xmpsvzkey67f734lxmd43azqxyq0y
に置いてあります。

製品データを弄ったので製品データを一部含みます。
微妙なラインなので2次配布などはされない様にお願いします。
まるわたろうファンにそういう人はいないとは思いますが。

■ インストール方法

lamulana-maruwa-mod.zipを解凍してできた「01」フォルダを
フォルダごとラムラーナがインストールしてあるフォルダの
La-Mulana\data\graphics
に入れます。

他にmodを入れていなければ、このmodのインストール後は
La-Mulana\data\graphicsの中身は
00フォルダと01フォルダになると思います。


■ ゲーム中での使用方法

タイトル画面のOPTIONか、
ゲーム中のConfig画面で、
「画面設定」で決定→「セット」で決定→「Original」になっていたら右を押して「MARUWA TAROU」を選んで決定
しばらく読み込んだ後操作できるようになるのであとはキャンセルボタン連打で戻ってください。



「OPTION」を選択して決定ボタン


「画面設定」を選択して決定ボタン


「セット」を選択肢して決定ボタン


方向キーの右を押して


「Maruwa Tarou」に切り替わったら決定ボタン


読み込みが終ったらあとはキャンセルボタンで戻る


更にキャンセルボタンで戻る


あとはゲームを始めると光十字がまるわたろうにかわっています。


■おまけ
SCC音源風BGM差し替え
La-Mulana retro music plugin
https://app.box.com/s/2l5mbliev3luzzpgo25yum0d4eppi5yp

解凍して01フォルダをまるごと
La-Mulana\data\musicの中に入れます。

あとはOPTION/CONFIGの音源設定でセット「Retro」が増えていると思います。
音源セット「Retro」に切り替えるとオリジナル版のSCC音源風のBGMが鳴ります。

※ 効果音/ジングル周りはこのファイルではSCC風に差し替えできません。Soundフォルダの中は固定のようなので、変更する場合はそちらを直接ファイル差し替えすることになります。