======================================================================== T88TOOL.EXE Ver1.24 Readme.txt ======================================================================== 目次 1.概要 2.Dash-80使用時の注意点(*.iplファイルや*.keyファイルを中心に) 3.MML(MusicMacroLanguage)ファイル関係の説明 ◆◆1.概要  PC-8001エミュレータ用のカセットテープイメージ(T88ファイル、CMTファイル) やメモリイメージ(N80ファイル)などからBASICプログラムとマシン語プログラムを 取り出してオートスタート対応のディスクイメージ(D88ファイル)を作成します。  入力ファイルとして、抽出済みのマシン語とBASICファイルをそのまま指定することも可能です。 ver1.12から入出力対応フォーマットを増やしました。  オートスタート対応のCMT、N80、IMG(プチコンPC8001EMU用)を出力可能です。  (ただし、CMTファイルは「MON+L」だけは入力必要。それ以降の操作が自動です)  また、入力ファイルにもD88、IMGファイルを指定できるようになりました。   ◆処理内容  1.カセットイメージやメモリイメージから、BASICプログラムとマシン語プログラムを抽出します。    (1)拡張子にかかわらず、T88ファイルヘッダが有ればT88ファイル    (2)拡張子が「.ram」「.mem」「.n80」「.img」であればメモリイメージ    (3)拡張子が「.bin」であればマシン語ファイル    (4)拡張子が「.bas」であればBASICファイル(中間言語形式)    (5)拡張子が「.txt」であればBASICファイル(アスキーテキスト:登録時に中間言語に変換されます)    (6)拡張子が「.asm」「.src」「.z80」であればアセンブラソース(登録時にマシン語に変換されます)    (7)拡張子が「.d88」であればディスクイメージファイル    (8)拡張子が「.ipl」であればIPL指定ファイル(詳細は2章の説明を参照)    (9)拡張子が「.key」であれば自動キー入力ファイル(詳細は2章の説明を参照)    (10)拡張子が「.mml」であればMML(MusicMacroLanguage)ファイル(詳細は3章の説明を参照)    (11)それ以外は、CMTファイル    と判断しています。  2.抽出したプログラムを使って、ディスクイメージファイルを作成します。    2つのやり方に対応しています。    (1)抽出したプログラムを、p80make(p88make)を使ってディスクイメージに変換します。    (2)抽出したプログラムを、Dash-80(ALPHA-MINI DOS)のシステムファイルに登録し、       オートスタートを設定します。 ◆前準備  後段の処理(上記の2の処理)は、Dash-80かp80makeが無いとできません。(他力本願モード!)  PC-8801用(-Tオプション)の時には、ALPHA-MINI DOSとp88makeを使います。  それぞれ、ダウンロードして下さい。  ・Dash-80を利用するために    Dash-80_10b1.d88を、t88tool.exeと同じ場所に置いて下さい。      「Retro Computer People(https://retrocomputerpeople.web.fc2.com/hall.html)」さんから入り、      「展示場:レトロプログラムのフロア」→「ツール:Dash-80 Version 1.0b1」      から入手することが可能です。  ・P80MAKEを利用するために    P80MAKE.COMを、t88tool.exeと同じ場所に置いて下さい。      「かじゃぽんのお部屋(http://www5.airnet.ne.jp/kajapon/)」さんから、      「自作ツールのお部屋」→「p80make...98/06/02版」と進んでください。      (PC-8801用のDISK-Imageを作る時は、同じ場所にあるP88MAKE.COMもダウンロードして下さい。)  ・PC-8001mkIISR用のDISK-Imageを作る時は、Dash-80が使えないため、専用のDisk-BASICが必要です。    DISK_mkIISR.d88という名前にして、t88tool.exeと同じ場所に置いて下さい。  ・PC-8801用のDISK-Imageを作る時は、Dash-80が使えないため、ALPHA-MINI DOSが必要です。      「OBS(おにたま放送局)(http://onitama.tv/obsweb/index.html)」さんから入り、      「SPLIT-i/ALPHA-DOS product page」から「ALPHA-MINI DOS 1.2.zip」をダウンロードして下さい。 ◆起動方法  (A) t88tool.exe [オプション] hogehoge.t88 [実行アドレス]  (B) t88tool.exe [オプション] hogehoge.cmt [実行アドレス]  (C) t88tool.exe [オプション] hogehoge.n80 [先頭アドレス 終了アドレス [実行アドレス]]                 n80ファイルのマシン語は先頭&終了アドレス指定が必須です。                 指定しない場合には、マシン語は抽出されません。  (D) t88tool.exe [オプション] hogehoge.bas [BASICファイル名]                 BASICファイル名は頭の6文字です。指定しない場合には"BASIC"となります。  (E) t88tool.exe [オプション] hogehoge.bin 先頭アドレス [実行アドレス]                 マシン語の先頭アドレス指定は必須です  (F) t88tool.exe [オプション] hogehoge.asm [先頭アドレス [実行アドレス]]  (G) t88tool.exe [オプション] hogehoge.d88 [先頭アドレス 終了アドレス [実行アドレス]] -f (出力ファイル名)                 出力ファイルもd88ファイルのため、入力ファイルとは別のファイル名を指定して下さい。  (H) 上記(A)から(G)の組み合わせも可能です。                 例:t88tool.exe hogehoge.bas BASIC hogehoge.bin D000 hogehoge.cmt  ディスクイメージファイル(hogehoge.d88)が生成されます。  Dash-80版とP80MAKE版を同時に作る場合(-dオプション指定時)には、2つのファイルが生成されます。    hogehoge.d88  …Dash-80を使ったディスクイメージ    hogehoge_P.d88 …P80MAKEにより作成したディスクイメージ 現状、下記3パターンにしか対応してません。   1.BASICのみ    →BASICを起動します。   2.BASIC+マシン語 →BASICから起動します。              ただし、実行アドレスが指定されていた場合には、そのアドレスから実行されます。   3.マシン語    →実行アドレスから実行します。              実行アドレスが指定されていない場合には、先頭アドレスから実行されます。              Dash-80の場合、スターター用のBASICプログラムを作成し起動します。  マシン語プログラムがE8CB〜E9FFを使用している場合には、CLEAR 300,(先頭アドレス-1)  を実行してからBASICプログラムを起動するようにしています。  複数のプログラムがある場合には、最初に検出されたBASICプログラムとマシン語プログラムから  起動方法が選択されます。    Dash-80利用時には、下記のファイルを使用することで起動時の動作をカスタマイズできます。   *.iplファイルを引数に追加することで、任意のコマンドをディスクIPL領域に設定できます。   (複数の*.iplファイルを指定した場合、最初のiplファイルのみが有効になります。)   *.keyファイルを引数に追加することで、FunctionKeyを使った自動キー入力ができます。   (マシン語モニタからBASICに戻るには「^B」を指定して下さい。「^G」なども使用可能です)   (IPL部分を変更したい場合には、*.iplファイルを*.keyファイルより前に指定して下さい。    また、IPLの最後に、「load"autokey"」でキー入力データを読み込むようにして下さい。)           例:t88tool.exe hogehoge.ipl hogehoge.key hogehoge.cmt   添付ファイル(sample.ipl、sample.key)を参考にして下さい。   また、文書末の「Dash-80使用時の注意点」もご覧下さい。 ◆オプションについて   (無指定時)Dash-80を使って、d88ファイルを作成します(デフォルトの動作)   -p:P80MAKEを使って、d88ファイルを作成します   -d:Dash-80を使ったファイル(*.d88)、P80MAKEを使ったファイル(*_P.d88)の両方を作成します   -n:d88ファイルではなく、n80ファイルを作成します   -n2:d88ファイルではなく、n80ファイルを作成します(PC-8001mkII用)   -e:d88ファイルではなく、imgファイル(プチコンPC8001EMU用イメージ)を作成します   -M:d88ファイルではなく、cmtファイルを作成します   -o : データの存在しないトラックを書き出しません(サイズが小さくなります。DISK-BASICフォーマットのみ対応)   -W:N80/IMGファイルのRAMイメージ全体をd88ファイルに9つまで登録します。複数のファイル指定時には選択メニューが出ます。(要G-VRAMメモリ、PC-8801のN-BASIC用)   -W0:N80/IMGファイルのRAMイメージ全体をd88ファイルに9つまで登録します。複数のファイル指定時には選択メニューが出ます。(要拡張メモリ、PC8001mkIIのN-BASIC用)   -W8:N80/IMGファイルのRAMイメージ全体をd88ファイルに9つまで登録します。複数のファイル指定時には選択メニューが出ます。(拡張メモリ不要版、PC-8001用)   -W9:N80/IMGファイルのRAMイメージ全体をcmtファイルに9つまで登録します。複数のファイル指定時には選択メニューが出ます。   -S:PC-8001mkIISR用のd88/cmt/n80ファイルを作成します(Disk-BASICが必要です。ファイル名をDISK_mkIISR.d88として下さい)   -T:PC-8801mkIISR用のd88/cmt/n80ファイルを作成します(P88MAKE.COM、または、ALPHA-MINI DOS 1.2.d88が必要です)   -T0:PC-8801用のd88/cmt/n80ファイルを作成します(P88MAKE.COM、または、ALPHA-MINI DOS 1.2.d88が必要です)   -j:ベーシックファイル(*.bas)とマシン語ファイル(*.bin)を出力します   -f (filename[.d88]):出力ファイル名を変更します   -t:一時ファイルを削除せず、そのまま残します   -C (param1) (param2):CLEAR文のパラメータを指定します。(param2 == 0 で、CLEAR文の使用を抑止します)   -x:デバッグモード(処理内容をすべて表示します)   -c:BASICチェック時のエラーを無視して続けます。BASICとマシン語が1つになっている場合などに指定して下さい   -l:BASICの行アドレスを行番号に戻す処理や、CLOAD命令&LOAD命令の削除処理を行いません   -# (番号1)[,(番号2)...] :使用するファイルを番号で指定(複数指定可能)   -# @(番号1[コマンド[起動アドレス]][自動タイプ])[,(番号2)...] :使用するファイル番号とコマンドからキーファイル自動生成   -P:パッチモード(マシン語やBASICを修正します)(例)-P C000=31,FFFF,D000=12,34,AF=0000,PC=C000,SP=FFFF,#1000=REM   -R (org_address) (load_address) [next_address]:マシン語を異なるアドレスにロードします。(元のアドレスに転送する命令が付加されます)   -R0 (org_address) (load_address):マシン語を異なるアドレスにロードします。(元のアドレスに転送する命令を付加しません)   -E (実行アドレス):実行アドレスを直接指定します。0の場合は、データの実行アドレスを取り消します   -s:実行アドレスをstack(E8CB、E8CC)から取得します。(stackを上書きして実行アドレスに飛ばすゲーム用)   -D (アドレス1,アドレス2,...):マシン語ファイルを指定アドレスで分割します(N80,CMTファイルの読み込み時のみ)   -N:ファイル名を短くします(BASIC=B1、B2、B3、…、マシン語=M$1、M$2、M$3、…)   -m (music options):MML制御関係のオプションをまとめて指定して下さい(詳細は3章の説明を参照)   -B (出力filename):バイナリエディトモード。ファイル抽出はせず、入力ファイル全体に対して、-Pオプションで指定されたパッチを当てます。   -Bp (出力filename) : バイナリパックモード。複数のd88ファイルを1つのd88ファイルに結合します。ディスクラベルには元のファイル名を設定します。   -Bu : バイナリアンパックモード。複数のディスクが入っているd88ファイルを分解します。ファイル名には「ディスクラベル」+「.d88」を設定します。   -Bd :バイナリdiffモード。複数のn80ファイルを比較し、値が1つずつ増加or減少しているアドレスを見つけ出します。   -k:起動用BASICではなく、ファンクションキーのしくみを使ってオートスタートします(一部のファンクションキーが壊れます)   以下のオプションはDash-80専用です(P80MAKE使用時などDash-80を使わない時には効果無し)   -a:Dash-80用オートスタート部(IPL)の書き込みを行いません   -i (文字列):Dash-80用IPLに任意の文字列を挿入   -I (文字列):Dash-80用IPLを任意の文字列に置換   -0:Dash-80用IPLにカーソル消去(POKE &HEA59,255:POKE &HEA5F,0)を追加   -7:Dash-80用IPLをカラーモード(CONSOLE 0,25,1,1)に変更   -8:Dash-80用IPLを80x25(WIDTH 80,25)に変更 ◆複数ファイルの扱いについて  ・Dash-80/ALPHA-MINI DOS利用時    すべてのプログラムをディスクに登録します。    この際、ディスク上のファイル名が重複する場合には、連番を追加します。      BASICファイル名:"BASIC"→"BASIC_001"→"BASIC_002"      マシン語ファイル名:"machinobj"→"machin001"→"machin002"    最初に検出されたBASICプログラムとマシン語プログラムだけがロードされます。  ・P80MAKE/P88MAKE利用時    そのまま、P80MAKE.COMの引数に複数のファイルを渡します。    ただし、BASICプログラムが複数ある場合には、処理を中断します。    また、複数のマシン語エリアが重なっている時にも、処理を中断します。    (重なっていない時にはすべてのマシン語が読みこまれた状態で起動すると思います)  ・N80/IMGファイル作成時    複数のBASICプログラムがある場合には、処理を中断します。    また、複数のマシン語エリアが重なっている時にも、処理を中断します。    すべてのマシン語と1つのBASICがメモリ上に配置されます。  ・CMTファイル作成時    すべてのプログラムをテープに登録します(マシン語→BASICの順)。    すべてのマシン語と最初のBASICがロードされます。  なお、テープイメージ読み込み時には、EA68から始まるマシン語(オートスタートのためのFunctionKeyData)  は無視されます(実行アドレスなどの情報だけ使います)。 ◆サンプル  ・テープイメージ(cmt, t88)からd88ファイル作成の例    t88tool.exe cover.cmt    t88tool.exe pcjanB.cmt    t88tool.exe rally-x.t88    t88tool.exe scramble.t88 D55B  ・メモリイメージ(n80)からd88ファイル作成の例    t88tool.exe cover.n80    t88tool.exe pcjanB.n80 DC90 E76F    t88tool.exe rally-x.n80 C500 E7FF    t88tool.exe scramble.n80 C010 E9FF D55B  ・ファイルイメージ(bin, bas)からd88ファイル作成の例    t88tool.exe cover.bas    t88tool.exe -f pcjanB.d88 pcjanB.bas PCJAN pcjanB.bin DC90    t88tool.exe rally-x.bin C500    t88tool.exe scramble.bin C010 D55B  ・組み合わせ指定の例    t88tool.exe cover.bas pcjanB.cmt rally-x.n80 C500 E7FF  ・逆変換の例(d88→n80)    t88tool.exe -n pcgjan.d88  ・プチコンPC8001EMU用イメージの作成の例(d88→img)    t88tool.exe -e pcgjan.d88  ・プチコンPC8001EMU用イメージをn80ファイルに変換する例(img→n80)    t88tool.exe -n pcgjan.img  ・音楽再生ディスクの作成の例(mml→d88)    t88tool.exe music.mml  ・複数のゲームの入っているディスクから個別ゲームの切り出しの例(d88→d88)    t88tool.exe gamepack.d88 -#1,2 -f game1.d88 ◆個別ファイルの出力  個々のBASICファイル、マシン語ファイルを出力可能です。  2つ目以降のファイル名は3桁の連番が付きます。   -jのみの指定の場合は、j80用のファイルを出力します。     使用例:t88tool.exe -j hogehoge.cmt         hogehoge.BAS …BASICファイル (j80用、8021Hからダンプしたもの)         hogehoge.BIN …マシン語ファイル(j80用、アドレスヘッダ付き)     を出力します。   -jと同時に-pを指定の場合は、P80MAKE用のファイルを出力します。     使用例:t88tool.exe -j -p hogehoge.cmt         hogehoge.BAS …BASICファイル (P80MAKE用、8020Hからダンプしたもの)         hogehoge.BIN …マシン語ファイル(P80MAKE用、アドレスヘッダ無し)     を出力します。     ◆処理内容について  デバッグモード(-xオプション)を指定すれば、処理内容を表示しながら実行するので  何をしているかはわかると思います。大したことはしてません。  また、-tオプションを指定すれば、途中の中間ファイルを削除せず残します。    T88$00_J.BAS   …BASICファイル (j80用、8021Hからダンプしたもの)    T88$00_P.BAS   …BASICファイル (P80MAKE用、8020Hからダンプしたもの)    T88$00_J.BIN   …マシン語ファイル(j80用、アドレスヘッダ付き)    T88$00_P.BIN   …マシン語ファイル(P80MAKE用、アドレスヘッダ無し) ◆64bit版のWindowsでの使用について  16bitアプリ(P80MAKE.COM)が動作しないため、  「サポートされていない16ビットアプリケーション」エラーになります。  この場合、t88tool.exeと同じ場所にMS-DOS Player(msdos.exe)を  置いてから実行して下さい。  MS-DOS Playerを通して16bitアプリを実行するため、動作するようになります。  MS-DOS Playerについては、こちらからダウンロードして下さい。  http://homepage3.nifty.com/takeda-toshiya/msdos/  複数のmsdos.exeがありますが、i286_x64版などで問題ないと思います。 ◆相互変換について  ver1.12からd88ファイル以外に、下記のファイル形式への出力に対応しました。     cmt:テープイメージ(MON+L以降は、自動実行します)     n80:http://home1.catvmics.ne.jp/~kanemoto/n80/inside.html     img:プチコンPC8001EMUのステートセーブデータ  また、入力にもd88や上記のファイル形式を指定できるようになったため、各種フォーマットの相互変換が可能になりました。  ただし、自動スタートのためにいろいろ追加していますので、逆変換をしても元には戻りませんのでご注意下さい。(オリジナル保管推奨です)  相互変換時に、CLEAR命令のパラメータや実行開始アドレス情報は自動的に引き継がれます。  それ以外のパラメータは引き継げないので、変換の度に指定して下さい。  各形式で持っている情報は完全ではないので、変換を繰り返すことで情報が欠落します。極力、元のファイルから変換して下さい。  例えば、下記の形式の場合は、マシン語の開始&終了アドレスの情報を持っていないため、再指定が必要です。     P80Makeモードで作成したd88ファイル     n80ファイル     imgファイル  (例)     t88tool.exe -C 300 CFFF game.t88 D100   …クリア文と実行開始アドレスを指定してd88ファイルを作成     t88tool.exe game.d88 -n …クリア文と実行開始アドレスは引き継がれます(d88→n80)     t88tool.exe game.n80 D000 E7FF       …マシン語がある場合には、開始&終了アドレスの指定が必要(n80→d88)  なお、下記の変換については、開始&終了アドレスが指定されていない場合、メモリ丸ごと変換を行います。     d88ファイル(P80Makeモードで作成したマシン語のみのゲーム)→n80ファイル …8000〜E9FFを丸ごと変換します。     d88ファイル(P80Makeモードで作成したマシン語のみのゲーム)→imgファイル …8000〜E9FFを丸ごと変換します。     n80ファイル→imgファイル  …8000〜FF3Cを丸ごと使って変換します。     imgファイル→n80ファイル  …8000〜FFFFのデータと全レジスタを再構成します。(ステートセーブモード)  この変換時に状態復帰のためのプログラムが追加されます。以降は他のフォーマットへの変換に使わないで下さい。 ◆パッチコマンド(-P)について  -Pオプションを使って任意のアドレスのデータを修正できます。     -P (アドレス1)=(データ1),(データ2),...,(アドレス2)=(データ1),(データ2),...  ・基本形     -P C800=CD,A000,9000=00,01,02     →C800番地から16進で、CD、00、A0を書き込む。9000番地から、00、01、01を書き込む。  ・置換機能    ・ニーモニック+「;」を指定した場合には、対応するマシン語コードに置換されます。例:LD A,B;LD (8000),A;RET;    ・@@で囲ったアセンブラファイル(.asm)は、マシン語コードに置換されます。    例:@patch.asm@    ・BASICコマンドを指定した場合には、対応する中間言語コードに置換されます。   例:REM    ・{}で囲ったBASICプログラムの文字列は、中間コードの列に置換されます。     例:{A=10:PRINTA}    ・()で囲った部分は、文字コードの列に置換されます。     例:(ABC)    ・レジスタ名を指定した場合には、IMGファイル中の該当するアドレスに置換されます。    ・「n80SP」は、「FF3E」に置換されます。     (n80ファイル出力時には、初期イメージ作成時[N80_INITIAL]と出力時[N80_OUTPUT]の2回置換されます。     -P 8120=REM,(test),PC=E000      →-P 8120=8F,74,65,73,74,10020=E000 に置換されます。     -P #100={goto300:}      →-P #100=90,0E,2C,01,3A に置換されます。     -P [N80_INITIAL]n80SP=ED00      →-P [N80_INITIAL]FF3E=ED00 に置換されます。(初期イメージのSPを変更して、そこにリターンアドレスなどが積まれます)     ※空白などが入る時には、分割されないように、全体を""で囲って下さい。例)-P "#100={goto 300:}"     ※その他、バッチファイルなどに影響を与えそうな文字がある場合も""で囲って下さい。     ※「"」自体は「\"」で表して下さい。     ・[]でファイル名を指定することで、処理対象を制限することができます。     -P [game1]8100=REM,[Machine]C900=00,00,00  ・アドレスの前に'#'または'L'を付けると、行番号指定(10進数)になり、その行の先頭アドレスに置換されます。(BASICファイルのみ)     -P #1000=REM           …1000行目をREM文に変更  ・行番号指定後の置換文字列の後に「$」を指定すると行末までのスペースに置き換わります。(BASICファイルのみ)     -P #1000={GOTO300}$        …1000行目をGOTO300のみに変更  ・アドレスに続けて/検索データ列/を記述することで、そのデータがあるアドレスを探します。(行番号指定の際は、行内をサーチ)     -P D800/00,00,00/=FF,FF,FF    …D800番地から00が3つ続くアドレスを探し、最初に見つかった場所にFF,FF,FFを書き込む     -P #490/CLOAD/=PRINT       …490行目にある最初のCLOAD命令をPRINT命令に変更する(テープリードで止まらないようにする)                       (通常は自動的にパッチを当てているので指定不要です)  ・+か-をつけた10進数でアドレスをバイト単位で補正できます。     -P #1000/(PLEASE)/+1=(lease)   …1000行目にある"PLEASE"を、"Please"に変更する。  ・repeat命令で繰り返しを指定することが可能です。     -P /33,22/=44repeat3,/AB,CD/=FFrepeat2      →-P /33,22/=44,/33,22/=44,/33,22/=44,/AB,CD/=FF,/AB,CD/=FF に置換されます。 ◆リロ―ケートコマンド(-Rについて)  -Rオプションを使ってロードアドレスを変更できます。     -R (org_address) (load_address) [next_address]  org_addressのプログラムを一時的にload_addressに読み込みます。  読み込み後にorg_addressに転送するためのマシン語がプログラムの後ろに付加されます。  プログラムの先頭には、NOPが12個と転送プログラムへジャンプする命令が付加されます。  next_addressを指定した場合、転送終了後にnext_addressにジャンプします。実際のプログラム起動アドレスなどを指定して下さい。   next_addressの指定がない場合には、転送後、BASICコマンド待ち(3C9F)にジャンプします。   (ただし、PC-8001mkIIかPC-8801モードの場合には、単純にリターン(C9)します。)   next_addressに「RET」を指定した場合には、単純にリターン(C9)します。   next_addressに「BAS」を指定した場合には、BASICコマンド待ち(3C9F)にジャンプします。   next_addressに「RUN」を指定した場合には、BASICをRUNアドレス(3DF4)にジャンプします。   next_addressに「MON」を指定した場合には、モニタコマンド待ち(5C66)にジャンプします。   (ただし、PC-8801モードの場合には、RST 38H(FF)します。)  PC-8801用のN80ファイルを作成する場合には、BASICプログラムを8800番地に読み込んでから0000番地に転送します(-Rオプション不要)。  先頭のNOP部分の改造例(転送前に12バイト以内のマシン語を実行できます)     -P (load_address)=F3,3E,1B,D3,31  PC-8801でカラーグラフィック3面、64KRAMモードに変更してから転送       F3 : DI       3E 1B : LD A,01BH       D3 31 : OUT (031H),A  ロードアドレスを変更しない場合でも、このしくみを使ってモード切替命令など(12バイト以内)を追加して実行することができます。     -R 9000 9000 9300 -R 9000=F3,3E,1F,D3,31 …モード切替をしてから9300番地から実行 ◆自動キー入力ファイルの自動生成について  (-# @)オプションを使って、自動キー入力ファイルを内部的に自動生成できます。  生成するファイル形式(d88、N80、CMT)によって、出力されるキー入力内容も異なります。     -# @[ファイル番号1][リロケート情報][コマンド[起動アドレス]][自動タイプ][,(ファイル番号2)...]       リロケート情報:C(ロードアドレス)[X[ロード後転送アドレス][N(転送後実行アドレス)]]       コマンド:L        CLOAD/LOAD"(ファイル名)"              (BASICの場合)            L        LOAD/BLOAD"(ファイル名)"              (マシン語、d88ファイル生成の場合)            L        monr                    (マシン語、N80/CMTファイル生成の場合)            R        (上記のロード動作+)RUN            P        (上記のロード動作+)POKE 0,0:RUN         (PC-8801で動かない時用)            G[起動アドレス] (上記のロード動作+)def usr=&H(アドレス):a=usr(0) (d88ファイル生成の場合)                     (上記のロード動作+)monrg(アドレス)    (N80/CMTファイル生成の場合)            U[起動アドレス] (上記のロード動作+)def usr=&H(アドレス):a=usr(0) (BASICからのマシン語呼び出しを指定したい時)            M[起動アドレス] (上記のロード動作+)mong(アドレス)      (マシン語モニタからの起動を指定したい時)       自動タイプ:{}でくくった文字列を追加でタイプします。  ・基本形     -# @2L,3L,1R,4,5     →ファイル2、ファイル3とロードした後に、BASICファイル1をロード&実行、ファイル4と5はメディアに保存のみ。     RUN命令の前のロード命令は省略できます。また、コマンドは小文字でもOKなので、通常は↓こんな感じになります。     -# @2,3,1r,4,5  ・コピーモード     -# @     →キーファイルも作らず、元のファイルの順番にコピーだけします。(t88→CMTなどの形式変換用)  ・先頭ファイルのみ実行     -# @0r  または、-# @0g9000     →先頭のファイルのみ自動実行します。2番目以降のファイルは元ファイルの順番でコピーします。(t88→CMTなどの形式変換用)  ・遅延実行パターン     -# @1,2,r     →BASICファイル1を読み込み、ファイル2を読み込んでから、最後に、RUNを実行  ・結合     -# @1r,+2     →1のファイル(BASICまたはマシン語)に、2のファイル(マシン語)を結合します。(1のファイルと同時に読み込まれます)     ※p88make使用時、BASICと0000番地〜7FFF番地のマシン語がオーバーラップしていない場合には結合指定がなくても自動的に1つにまとめられます。  ・自動タイプする任意の文字列を追加することもできます     -# "@{clear ,&H9000},1g9000,2gC000{out &H51,0},3r"     →clear後、ファイル1を9000番地から実行、ファイル2をC000番地から実行、out &H51,0を実行してからファイル3を実行  ・リロケート指定(-Rオプション同等の機能を各ファイルごとに個別に指定できます。詳細は-Rオプションの項を参照)     -# @1cD000,gD500     →ファイル1のアドレスをD000番地に変えて読み込み。(その後、D500番地から実行)     -# @1c9000xnD500,g9000     →ファイル1をアドレス9000番地に読み込んでから元のアドレスに転送。その後、D500番地から実行      ファイル1の終わりに、元のアドレスへの転送命令と、D500番地へのジャンプ命令が付加されます。      ファイル1の先頭には、NOPが12個と転送プログラムへジャンプする命令が付加されます。     -# @1c9000xC000nD500,g9000     →ファイル1をアドレス9000番地に読み込んでからC000に転送。その後、D500番地から実行      ファイル1の終わりに、C000番地への転送命令と、D500番地へのジャンプ命令が付加されます。      ファイル1の先頭には、NOPが12個と転送プログラムへジャンプする命令が付加されます。     -# @1c2000xE880n3000,2c3000xF2B0nE890,g2000     →ファイル1を2000番地、ファイル2を3000番地に読み込んだ後、それぞれE880番地、F2B0番地に転送し、E890番地から実行     ※空白などが入る時には、分割されないように、""でくくって下さい。     ※改行が必要な時には「^M」を使って下さい。「^B」「^G」なども使用可能です。     ※「^」が消えないように、""でくくって下さい。     ※その他、バッチファイルなどに影響を与えそうな文字がある場合は""や''でくくって下さい。     ※「"」自体は「\"」で表して下さい。 ◆チート支援(へたれ改造支援)機能(-B、-Bdオプション)  下記のページでサンプルゲームの改造例を説明していますので、そちらもご覧下さい。     http://bugfire2009.ojaru.jp/patch.html  -Bオプションを使って入力ファイルそのものにパッチをあてることが可能です。  個々のファイル解析は行わず、ファイル形式も変更しないので、標準以外の独自フォーマットでも修正できます。  上書き事故を防ぐために、-Bオプションの後に出力ファイル名の指定が必ず必要です。  (例)     t88tool game.d88 -B game_mod.d88 -P /3E,03,32,ABCD/+1=06   …初期値を3から6に変更     t88tool game.d88 -B game_mod.d88 -P /{MY=MY-1}/={MY=MY-0}   …BASIC自機更新部分を減らなくする 複数の入力ファイルを指定することで、バイナリファイルの結合も可能です。     t88tool basic.cmt machine.cmt -B game.cmt     …basic.cmtとmachine.cmtを結合して、game.cmtを作成  -Bdオプションを使って、自機数や面数など1つずつ増減するメモリアドレスを見つけ出すことが可能です。       t88tool -Bd 自機数1.n80 [自機数2.n80 [自機数3.n80]] [disasm[範囲]] [逆アセンブル開始アドレス-終了アドレス] [d88]  -Bdオプションのもう1つの使い方として、無敵モード改造候補を見つけることができます。  X88000のDebug.log(「実行ログ記録」で作成)を2つ以上指定して下さい。2つ目のファイルだけ通った部分を逆アセンブル表示します。     t88tool -Bd game.n80 通常.log やられた.log [disasm[範囲]] [逆アセンブル開始アドレス-終了アドレス] [d88] [top] [キー=チェックルーチンアドレス]  例えば、自機数のアドレスを見つけるためには、自機数が1つ減るごとにn80ファイルを出力し、それらを指定して下さい。  フラグを見つけたい時には、フラグON状態とフラグOFF状態のn80ファイルを交互に指定して下さい。  ファイルが2つ以上指定されている場合には、差が±1の範囲で変化したアドレスを表示します。  ファイルが3つ以上指定されている場合には、10→15→20など一定の差分で変化するアドレスも表示します。  ファイルが4つ以上指定されている場合には、0→255→0→255など繰り返しパターンのアドレスも表示します。  さらに、見つけ出したメモリにアクセスする典型的なアセンブラ命令パターンが無いかも探して表示します。  メモリアドレスを直接することも可能です(複数指定可能)。  disasmを指定した場合には、アクセスアドレスの周辺を逆アセンブル表示します。(デフォルトは15バイト前から15行分)  メモリ範囲(XXXX-YYYY)を指定した場合には、その範囲を逆アセンブル表示します。  d88キーワードを指定した場合には、d88のバイナリ修正のために、検索パターンを使った置換例を表示します。  kana=(アドレス)を指定した場合には、カナキーチェックルーチンのアセンブラソース(kana.asm)を出力します。(例:kana=C000)  topキーワードを指定した場合には、無敵改造候補に無条件RETも加えます(やられ処理の先頭で強制的にリターンしてみる)。  -Bd オプションを使って解析する度に、自動的にPATファイル(patch.pat)が生成されます。M88改+、pc8801ma改などで使用できます。  (自機数サーチの例)     t88tool -Bz 自機3.n80 自機2.n80 自機1.n80      ↓画面表示          A560 : 02->01->00 : 2->1->0    …A560番地が2、1、0と1つずつ減っていることを発見!      (set) LD A,08; LD (A560),A : 3E,08,32,60,A5 : 870C   …初期設定をしている場所を発見(8機に設定)      ( -1) DEC A; LD (A560),A : 3D,32,60,A5 : 8A3D   …1機減らしている場所を発見      ( +1) INC A; LD (A560),A : 3C,32,60,A5 : 8CC5   …1機増やしている場所を発見      (all) LD (A560),A : 32,60,A5 : 870E 8A3E 8CC6   上記の情報から、下記のような改造が可能です。        初期設定部分(08)を書き換えることで、スタート時の自機数を変更できます(FFでMAX)。       t88tool game.d88 -B game_mod.d88 -P /3E,08,32,60,A5/+1=FF  …d88ファイルの場合は場所をサーチして書き換え       t88tool game.n80 -B game_mod.n80 -P 870D=FF         …n80ファイルの場合はアドレスをそのまま指定可能     自機を減らしているDEC A命令(3D)をNOP命令(00)に書き換えると自機が減らなくなります(無敵モード)。       t88tool game.d88 -B game_mod.d88 -P /3D,32,60,A5/=00    …d88ファイルの場合は場所をサーチして書き換え       t88tool game.n80 -B game_mod.n80 -P 8A3D=00         …n80ファイルの場合はアドレスをそのまま指定可能   Aレジスタではなく、HLレジスタを使っている場合も同様に対応できます。          C7D4 : 03->02->01 : 3->2->1      ( -1) LD HL,C7D4; DEC (HL) : 21,D4,C7,35 : CAD9          …1機減らしている場所を発見      (all) LD HL,C7D4 : 21,D4,C7 : C3EF C456 C75B CAD9  …その他も含めアクセス場所を全部表示     自機を減らしているDEC (HL)命令(35)をNOP命令(00)に書き換えると自機が減らなくなります(無敵モード)。       t88tool game.d88 -B game_mod.d88 -P /21,D4,C7,35/+3=00    …d88ファイルの場合は場所をサーチしてから書き換え       t88tool game.n80 -B game_mod.n80 -P CADC=00         …n80ファイルの場合はアドレス(35のアドレス)をそのまま指定可能   なお、ワークエリアのアドレスがわかっている時には、アドレスを直接指定することも可能です(変動サーチが不要であれば2つ目以降のファイルは省略可能です)。     t88tool -Bz 自機3.n80 自機2.n80 自機1.n80 A500    …A500番地の変動表示と、アクセス命令をサーチ     t88tool -Bz game.n80 A830 B444             …game.n80を使い、A830とB444にアクセスしている命令をサーチ   disasmを指定した場合には、アクセスアドレスの周辺を逆アセンブル表示します。(デフォルトは15バイト前から16行分)     t88tool -Bz game.n80 A830 disasm            …game.n80を使い、A830にアクセスしている命令の前後を逆アセンブル(15バイト前から)     t88tool -Bz game.n80 A830 disasm30           …game.n80を使い、A830にアクセスしている命令の前後を逆アセンブル(30バイト前から)   メモリ範囲を指定した場合には、その範囲を逆アセンブル表示します。     t88tool -Bz game.n80 A800,A8FF             …game.n80を使い、A800からA8FFのエリアを逆アセンブル表示   d88を指定した場合には、d88のバイナリ修正用に、位置を一意に決定できる最小(4以上)のパターンを表示することができます。       t88tool -Bz 自機3.n80 自機2.n80 自機1.n80 d88    …d88のためのパッチオプションを表示   バイナリdiffとは全然関係ないですが、ついでに、BASICプログラムから変数の「+1」「-1」パターンもサーチして表示します。           (BASIC line 180) {MY=MY-1} : 4D,59,F1,4D,59,F4,12 : 05AA      (BASIC line 230) {MY=MY-1} : 4D,59,F1,4D,59,F4,12 : 05CA     「-1」を「-0」に上書きすることで、自機が減らなくなります(プログラムサイズが変わらないようにしないとSyntax Errorになります)。     複数の場所にある場合は、その分だけ繰り返して下さい。       t88tool game.d88 -B game_mod.d88 -P /{MY=MY-1}/={MY=MY-0}repeat2   今の所、探し出す命令は下記のような命令パターンです。(ワークエリアのアドレスがXXXXの時)     LD A,YY LD (XXXX),A 3E YY 32 XX XX …Aレジスタを使ってXXXXにYYをセット     INC A LD (XXXX),A 3C 32 XX XX …Aレジスタの値を1増やしてXXXXに保存     DEC A LD (XXXX),A 3D 32 XX XX …Aレジスタの値を1減らしてXXXXに保存     ADD A,1 LD (XXXX),A C6 01 32 XX XX …Aレジスタの値を1増やしてXXXXに保存     SUB 1 LD (XXXX),A D6 01 32 XX XX …Aレジスタの値を1減らしてXXXXに保存     LD (XXXX),A 32 XX XX …Aレジスタの値をXXXXに保存     LD HL,YYYY LD (XXXX),HL 21 YY YY 22 XX XX …HLレジスタを使ってXXXXにYYYYをセット     INC HL LD (XXXX),HL 23 22 XX XX …HLレジスタの値を1増やしてXXXXに保存     DEC HL LD (XXXX),HL 2B 22 XX XX …HLレジスタの値を1減らしてXXXXに保存     ADD HL,DE LD (XXXX),HL 19 22 XX XX …HLレジスタの値にDEレジスタの値を足してXXXXに保存     ADC HL,DE LD (XXXX),HL ED 5A 22 XX XX …HLレジスタの値にDEレジスタの値を足してXXXXに保存(繰り上げ処理付き)     SBC HL,DE LD (XXXX),HL ED 52 22 XX XX …HLレジスタの値からDEレジスタの値を引いてXXXXに保存(繰り下げ処理付き)     LD HL,XXXX LD (HL),YY 21 XX XX 36 YY …HLレジスタを使ってXXXXにYYをセット     LD HL,XXXX INC (HL) 21 XX XX 34 …HLレジスタを使ってXXXXの値を1増やす     LD HL,XXXX DEC (HL) 21 XX XX 35 …HLレジスタを使ってXXXXの値を1減らす     LD (IX+XX),YY DD 36 XX YY …HLレジスタを使ってXXXXにYYをセット     INC A LD (IX+XX),A 3C DD 77 XX …Aレジスタの値を1増やしてXXXXに保存     DEC A LD (IX+XX),A 3D DD 77 XX …Aレジスタの値を1減らしてXXXXに保存     ADD A,1 LD (IX+XX),A C6 01 DD 77 XX …Aレジスタの値を1増やしてXXXXに保存     SUB 1 LD (IX+XX),A D6 01 DD 77 XX …Aレジスタの値を1減らしてXXXXに保存     LD (IX+XX),A DD 77 XX …Aレジスタの値を1減らしてXXXXに保存     INC (IX+XX) DD 34 XX …IXレジスタを使ってXXXXの値を1増やす     DEC (IX+XX) DD 35 XX …IXレジスタを使ってXXXXの値を1減らす     ※IYも同様です(DD→FD)。  (無敵モード作成の例)  X88000のDebug.log(「実行ログ記録」で作成)を2つ指定した場合(リネームして下さい)には、  1つ目のファイルで通らずに、2つ目のファイルだけ通った部分を逆アセンブル表示します。  1つ目のファイルをやられなかった時のログファイル、2つ目のファイルをやられた瞬間のログファイル、  とすることで、やられた時に初めて通る部分のみを抽出することができます。  無敵モードなどの解析にお役立て下さい。        t88tool -Bz game.n80 Safe.log Crash.log             ↓画面表示            ?(-P B6C1=18) B6C1(90,88) JR NZ,0B6FAH ;B6C1 : 20 37      B6C3(0,1) * LD A,(0B707H) ;B6C3 : 3A 07 B7      B6C6(0,1) * DEC A ;B6C6 : 3D      B6C7(0,1) * LD (0B707H),A ;B6C7 : 32 07 B7    B6C3がやられた時の処理の先頭アドレスで、そこへの分岐命令がB6C1にあります。    パッチコマンド(-P B6C1=18)で、B6C3へ分岐しなくなります(=やられなくなります)。    範囲の当たり判定などの場合、分岐しなくするだけでは動作がおかしくなる場合があります。    その場合には、分岐した後の処理の先頭でリターンするようにすることでうまく行く場合があります(-P B6C3=C9)。    topキーワードを追加するとこのようなものも表示されるようになります。      t88tool -Bz game.n80 Safe.log Crash.log top      ???(-P B6C3=C9) B6C3(0,1) * LD A,(0B707H) ;B6C3 : 3A 07 B7   +記号でログファイルの結合(和集合)、*記号でログファイル共通部の抽出(積集合)、ができます。      t88tool -Bz game.n80 Safe1.log+Safe2.log Crash1.log*Crash2.log        「+」「*」もついていない時には、最後のファイルのみをCrashファイルとして扱い、   それ以外をSafeファイルとして扱います。        t88tool -Bz game.n80 file1.log file2.log file3.log file4.log    = t88tool -Bz game.n80 file1.log+file2.log+file3.log file4.log     逆アセンブル命令(disasm)やアドレス範囲(XXXX-YYYY)と組み合わせることで、さらに多く逆アセンブル表示できます。     t88tool -Bd submarine.n80 Safe.log Crash.log disasm   …Crash.logの新規命令を逆アセンブル表示     t88tool -Bd submarine.n80 Crash.log disasm   …Crash.logの全命令を逆アセンブル表示     t88tool -Bd submarine.n80 Safe.log Crash.log 9000-9100  …9000〜9100番地の逆アセンブル表示を追加   kana=(アセンブラ開始アドレス)を指定すると、カナキー検出ルーチン(kana.asm)を自動生成します。   複数の分岐が検出されている時には、やられ処理の先頭アドレスを1つだけ指定して下さい。        t88tool -Bd submarine.n80 B6C3 kana=A000         ←kana.asmを出力     t88tool submarine.n80 -B kana_muteki.n80 -P B6C3="JP 0A000H;" -P A000=@kana.asm@      上記のような改造をすると、カナキーを教えている間だけ無敵になります(詳細動作は自動生成されたkana.asmをご覧下さい)。   カナキー以外にも、次のキーも使えます:caps, ctrl, shift, graph ◆内蔵簡易アセンブラ仕様  アセンブラソース(*.asm、*.src、*.z80)を指定した場合には、マシン語に変換してから処理を行います。  マクロ機能が無いので、あまり、使えないかも知れませんが、仕様は下記です。    ニモニック:ザイログ形式    疑似命令 :ORG, EQU, =, END, DB, DW, DS, REPT〜ENDM(ネスト可能)    文字定数 :'A' or "A" or 'ABC' or "ABC"    16進定数:0FFFFh形式    ループ変数:'@' →ループカウンタの値になります。(0,1,2,...)    演算子  :(, ), *, /, %, +, -, |, &, ^    ラベル  :行頭から始まるアルファベットと数字と「_」と「@」からなる単語(「@」はループカウンタの文字列になります) ◆変更履歴  ver1.24    ・(MML)(-m q)オプションに対応:同じ音程の音が続く場合に、64分休符を使って音を一度切ります。(例)Q16C4C4→Q16C8...R64C4    ・(MML)(-m Q)オプションに対応:ゲート長を休符を使って実現します。(例)Q8C4D4E4→Q16C8R8D8R8E8R8  ver1.23    ・丸ごと変換オプション(-W8)にバグがあり、ロードできなかったのを修正。  ver1.22    ・丸ごと変換にオプション追加(-W8)。拡張メモリが無くても読み込めるようにしました。(空いてそうな256バイトを探して使います。)    ・丸ごと変換にオプション追加(-W9)。n80ファイルを9つまで、1つのcmtファイルに詰め込みます。順番に読んでいくの実機ではとても遅くなります。    ・バイナリエディトモード(-B)で、cmtファイルの場合には、中に入っているBASICとマシン語に対してパッチを当てるようにしました。  ver1.21    ・BASIC変換機能(中間言語→テキスト)が動かなくなっていたのを修正    ・(MML)N連符に対応。使用例:{!cdefg}!4 → 5連符(4分音符の長さを5等分)    ・(MML)マクロ機能の引数に対応。使用例:$rep{n}=%n%n%n; $rep{c}$rep{d}$rep{e} →cccdddeee    ・(MML)FlMML形式のループに対応(/: 〜 / 〜 :/)    ・(MML)ループ抜け出し後のデータを無視する場合があったのを修正。    ・(MML)N-300とかで暴走していたのを修正。  ver1.20    ・(PCG用3音プレイヤー)BGM再生+効果音発声に対応    ・(PCG用3音プレイヤー)曲番号指定時、10以上の番号がずれているバグ修正    ・(MML)マクロ機能(FlMML形式、引数未対応)追加。使用例:$intro=cdef; $intro2=$intro$intro; t120$intro2    ・(MML)Nコマンドのバグ修正(フラットシャープ付の音が基準になると半音ずれていた)  ver1.19    ・(PCG用3音プレイヤー)外部からの曲再生に対応。1曲再生&BGMM再生(1tick再生)    ・(PCG用3音プレイヤー)mdtファイル(mmlを変換したデータ)に対応。複数曲の場合には、曲選択メニューを表示    ・(PCG用3音プレイヤー)速いテンポ時の誤差が大きかったのを改善    ・(PCG用3音プレイヤー)ゲートデフォルトを75%(Q12)に変更    ・(PCG用3音プレイヤー)プレイヤーの先頭アドレスを変更できるようにした(-Eオプションで指定)    ・(PCG用3音プレイヤー)曲終了時のウエイト削除  ver1.18    ・テキスト→BASIC中間言語変換時に、DATA文が「:」で終了しないバグを修正    ・アセンブラ命令追加(DS命令)    ・アセンブラバグ対応(LD (IX),Aがエラーになる、LD (IY+n),Dがエラーになる、RLC (IX+0)が3バイトになる)    ・PCG用3音プレイヤーを復活  ver1.17    ・PC-8001mkIISRへのBASファイル登録ができなかったのを修正  ver1.16    ・bas2txt, txt2bas変換部分のバグ修正    ・txt2basで「GO TO」「GO SUB」でも変換できるように修正    ・例外で落ちてしまうことがあるバグ修正    ・visual studio警告レベル4に対応  ver1.15    ・オプション(-o、-W、-Bp、-Bu)を追加。  ver1.14    ・オプション(-I)を追加。    ・アセンブラ対応。アセンブラソース(*.asm)を入力するとマシン語に変換します。    ・ファイル全体のバイナリエディト機能対応(-B オプション)。-Pコマンドと組み合わせて使用して下さい。    ・複数ファイルから1つずつ増減しているアドレスを探し出す機能を追加(-Bdオプション)。へたれ改造用です。  ver1.13    ・いろいろな形式のDOSの中身を見れるようにした(d88ファイル入力時)     S-DOSver1.0, S-DOSver1.1, S-DOS80ver2.0, C-DOS88, NS-DOS, CP/Mver2.2, FinalWeapon, ALPHA-DOS など    ・複数枚が結合されたd88ファイル入力に対応    ・パッチコマンドで文字列や一部のBASICコマンドを指定可能に(例:-P 8100=REM,{changed},STOP,8140=LOAD)    ・パッチコマンドで修正対象のファイル名や行番号(+桁位置)を指定可能に(例:-P [game1]#1020=REM,[game2]#1000+5=LOAD)    ・パッチコマンドでデータサーチを可能にした(例:-P 1020/61,62,63/=41,42,43、-P [basic]#1000/{PLEASE}/+1={lease})    ・PC-8001mkIISR用のd88/cmt/n80ファイル作成に対応(Disk-BASICが必要です。ファイル名をDISK_mkIISR.d88として下さい)    ・PC-8801用のd88/cmt/n80ファイル作成に対応(P88MAKE.COM、または、ALPHA-MINI DOS 1.2.d88が必要です)    ・プログラムの異なるアドレスへのロードに対応(-R)(プログラムの後ろに元のアドレスへの転送命令が付加されます)    ・BASICテキストファイルを中間言語に変換するようにした    ・数字で始まるファイル名への対応(LOAD"1:123", LOAD"cas:123")    ・オプション(-N)に対応。ファイル名を短くします(BASIC=B1、B2、B3、…、マシン語=M$1、M$2、M$3、…)    ・keyファイルを内部的に作れるようにした(-# @2,3,1r→2番目と3番目のファイルを読み込んだ後で1番目のファイルをRUN)  ver1.12    ・自動実行プチコンPC8001EMU用イメージ(imgファイル)を出力できるようにした(-e)    ・自動実行メモリイメージ(N80ファイル)を出力できるようにした(-n)    ・自動実行メモリイメージ(PC-8001mkII用N80ファイル)を出力できるようにした(-n2)    ・テープイメージ(cmtファイル)を出力できるようにした(-M)(MON+Lで以降は自動実行します)    ・入力ファイルとして、ディスクイメージ(D88ファイル)に対応    ・入力メモリイメージの拡張子として、「.n80」以外に「.mem」「.ram」「.img」を使えるように変更     (*.img→*.n80の変換の場合には、ステートセーブデータとして扱い、レジスタも含めた状態復帰を行います)    ・使用するファイルの番号指定オプション(-#)に対応。    ・Dash-80ディスクへのファイル登録を自前で行うように変更(2d88.exe、store2d.exeは不要になりました)    ・パッチコマンドに対応(-P オプション) ver1.11    ・内蔵プレイヤーを15音同時発音可能に(ルンルンシンセを使用)    ・MMLコマンド追加(V+、V-、N、N+、N-、S、M、W、P、Y、@V、=、?、調指定:=+-)    ・内蔵プレイヤーの音量のデフォルト値をV15からV11に変更(Addcomサウンドなどと音量を揃えました)    ・内蔵プレイヤーにカラーモード(Addcomサウンドに似た感じの再生画面)を追加(-m C)    ・リピート再生モードを追加(-m R)    ・複数のMMLファイルに対応(合計チャンネル数は100チャンネルまで) ver1.10    ・音楽ファイル(*.mml)の変換に対応(12音プレイヤーをt88tool.exe内に内蔵)    ・オプションを最後に置いた場合、パラメータ不足のエラーが出ない問題を修正 ver1.09    ・msdos.exeを使った場合、スペースを含むBASICプログラム名に対応できないバグを修正    ・オプションを自由な位置に置けるように変更(例:t88tool.exe game.cmt -c)    ・マシン語プログラムがE8CB〜E8CFを使用している場合にも、CLEAR文を実行するように変更    ・オプション(-s、-C)に対応。    ・Dash-80使用時、オプション(-i、-0、-7、-8)でIPL部分を変更できるよう変更    ・Dash-80使用時、IPLの"COLOR 7,0,0:PRINT CHR$(12)"を     "POKE &HF1B1,&H9F:POKE &HF1B2,&H3C:COLOR ,0:PRINT CHR$(12):WIDTH 40,20:CONSOLE 0,25,1,0"に変更    ・Dash-80使用時、マシン語のみの時のローダBASICから、     "COLOR 7,0,0:WIDTH80,25:CONSOLE 0,25,0,1:PRINT CHR$(12)"を削除    ・*.keyファイル使用時にも、IPLで下記処理を実行するように変更     "POKE &HF1B1,&H9F:POKE &HF1B2,&H3C:COLOR ,0:PRINT CHR$(12):WIDTH 40,20:CONSOLE 0,25,1,0"    ・*.ipl&*.keyファイルで複数の改行タイプに対応(0x0d+0x0a、0x0aのみ、0x0dのみ)    ・BASICの行アドレスを行番号に戻す際の、対応識別コードに「0x1E」を追加    ・ファイル名のエラーをアドレスエラーと表示してしまうバグ修正    ・このファイル(readme.txt)に、「◆Dash-80使用時の注意点」を追記 ver1.08    ・*.keyファイル(テキストファイル)で自動キー入力を指定できるようにした     (FunctionKeyを利用したテープ版のオートスタートと同じしくみです) ver1.07    ・BASICの行アドレスを行番号に戻す処理を追加 ver1.06    ・8D21から始まるBASICプログラム(SystemSoft New PC DOS.80)に対応 ver1.05    ・n80ファイル内のBASICの位置をBASICワークエリア(EB54-EB55)から取得するようにした    ・msdos.exeを使った場合、複数BASICに対応できないバグを修正 ver1.04    ・*.iplファイル(テキストファイル)でディスクのIPL領域の内容を指定できるようにした ver1.03    ・64bit-Windowsで16bitアプリ(2d88.exe、store2d.exe, P80MAKE.COM)が     動作しない問題に対応     (msdos.exeがある場合には、msdos.exeを使って実行できるようにした)    ・C021から始まるBASICプログラム(メモリ増設無し時の配置)に対応    ・テープイメージ読み込み時、EA68から始まるマシン語(オートスタートのためのFunctionKeyData)     を無視するようにした。    ・Dash-80ディスク作成時、ロード前に"COLOR 7,0,0:PRINT CHR$(12)"を実行    ・テキストファイル(*.txt)を指定した場合には、     Dash-80ディスクにアスキーテキスト形式で保存するようにしてみた。     (現状、意味無し。Dash-80作者様のアスキーテキスト読み込み対応に期待)    ・開発環境を Microsoft Visual C++ 2005 Express Edition から     Microsoft Visual C++ 2008 Express Edition に変更  ver1.02    ・Dash-80使用時、マシン語のみの時のローダBASICのCOLOR 7,0,0:WIDTH80を、     COLOR 7,0,0:WIDTH80,25:CONSOLE 0,25,0,1:PRINT CHR$(12)に変更  ver1.01    ・テープイメージ(cmt, t88)でもBASICプログラムのリンクチェックを行うようにした。    ・BASICプログラムに付加されている9個の0データを削除するようにした    ・オプションに対応(-c、-a)  ver1.00    ・デフォルト状態ではDash-80のみを使用(-pオプションでP80MAKEを使用)    ・出力ファイル名の指定を可能にした(-fオプションで指定)    ・表示を簡略化した(-xオプションで従来同等の表示になります)    ・中間ファイルを削除するようにした(-tオプションで従来同様残します)    ・オプションに対応(-p、-d、-j、-e、-f、-x、-t)  ver0.81    ・メモリイメージ(N80ファイル)に対応    ・マシン語イメージ(BINファイル)、BASICイメージ(BASファイル)に対応    ・複数の入力ファイルに対応    ・テープイメージ内の複数のBASIC、複数のマシン語に対応    ・実行アドレス指定がある場合には、BASICプログラムがあっても指定アドレスから実行を開始するように変更    ・マシン語の最後の1バイトが0で無い場合にも、処理を継続するようにした    ・Dash-80使用時、マシン語のみの時のローダBASICのWIDTH40を、WIDTH80に変更    ・マシン語がE8D0以降まで使用している場合は、CLEAR 300,(先頭アドレス-1)を指定       (Dash-80はver0.80で対応済、P80MAKEでも指定するようにした)  ver0.80    ・テスト公開(初版) ◆開発環境  Microsoft Visual C++ 2008 Express Edition ◆連絡先  http://www.geocities.jp/bugfire2009/index.html  bugfire2009@yahoo.co.jp  ※使い方がわからない、うまく行かない場合など、お気軽にbugfire2009@yahoo.co.jpまで、ご相談下さい。 ============================================================================================================ ◆◆2.Dash-80使用時の注意点(*.iplファイルや*.keyファイルを中心に) 通常のBASIC+マシン語のゲームであれば、全自動で、d88ファイルに変換できるのですが、 いろんな起動方法があり、すべてに全自動では対応できませんでした。 Dash-80使用時には、オプションやファイルで起動方法を調整できるのでので、以下、簡単に説明します。 ◆基本動作 1.BASICのみの場合  BASICプログラムがディスクに保存され、ディスクのIPL領域に下記命令が設定されます。  (BASICのファイル名が"GAME1"の場合)     [ディスクのIPL領域]     POKE &HF1B1,&H9F:POKE &HF1B2,&H3C:COLOR ,0:PRINT CHR$(12):WIDTH 40,20:CONSOLE 0,20,1,0:RUN"GAME1" 2.マシン語のみの場合  マシン語と一緒に、マシン語起動用のBASICプログラム("AUTO")もディスクに格納され、  ディスクのIPL領域に下記命令が設定されます。     [ディスクのIPL領域]     POKE &HF1B1,&H9F:POKE &HF1B2,&H3C:COLOR ,0:PRINT CHR$(12):WIDTH 40,20:CONSOLE 0,20,1,0:LOAD"1:machinobj":RUN"AUTO"    BASICプログラム"AUTO"の内容は下記の通りです。(マシン語実行アドレスが&H9000の場合)     [AUTO]     10 DEF USR=&H9000:A=USR(0)   3.BASIC+マシン語(BASICからスタート)の場合  BASICプログラムとマシン語がディスクに格納され、  ディスクのIPL領域に下記命令が設定されます。  (BASICのファイル名が"GAME1"の場合)     [ディスクのIPL領域]     POKE &HF1B1,&H9F:POKE &HF1B2,&H3C:COLOR ,0:PRINT CHR$(12):WIDTH 40,20:CONSOLE 0,25,1,0:LOAD"1:machinobj":RUN"GAME1" 上記1〜3の動作が基本動作となります。 ほとんどのゲームはこれで対応できると思います。基本的にツール側で全自動で対応します。  (メモ1)   BASICプログラムの後ろにマシン語繋がっているゲームがあるようです。   そのままだと、BASICのフォーマットチェックエラーになってしまいますので、   -cオプションを付けて、エラーを無視するようにして下さい。     t88tool.exe -c GAME1.cmt ◆IPL部分の調整方法 IPL部分は、IPL操作オプション(-0、-7、-8)で部分的に変更することができます。     t88tool.exe -0 GAME1.cmt  →カーソルを消すために"POKE &HEA59,255:POKE &HEA5F,0"を追加します。     t88tool.exe -7 GAME1.cmt  →カラーモードにします。"CONSOLE 0,25,1,0"→"CONSOLE 0,25,1,1"     t88tool.exe -8 GAME1.cmt  →80桁モードにします。"WIDTH 40,20"→"WIDTH 80,25" また、オプション(-i)を使って、任意の文字列をIPL領域に追加できます。(先頭に挿入されます)     t88tool.exe -i "CLEAR 300,&HA3FF" GAME1.cmt        ↓     [ディスクのIPL領域]     CLEAR 300,&HA3FF:POKE &HF1B1,&H9F:POKE &HF1B2,&H3C:COLOR ,0:PRINT CHR$(12):WIDTH 80,25:CONSOLE 0,25,1,1:LOAD"1:machinobj":RUN"GAME1" オプション(-I)を使えば、IPL領域全体を置き換えることも可能です。     t88tool.exe -I "WIDTH 80,25:CONSOLE 0,25,1,1:LOAD\"machinobj\":RUN\"GAME1\"" GAME1.cmt        ↓     [ディスクのIPL領域]     WIDTH 80,25:CONSOLE 20,2,1,1:LOAD"machinobj":RUN"GAME1"   なお、CLEAR文部分は、CLEAR文制御オプション(-C)で制御できます。     t88tool.exe GAME1.cmt -C 100 ABCD   →CLEAR 100,&HABCDを追加     t88tool.exe GAME1.cmt -C 100 -1    →CLEAR 100,&H(マシン語の先頭アドレス - 1)を追加     t88tool.exe GAME1.cmt -C 0 0     →CLEAR文を使用しない それ以上の変更をする場合には、IPL指定ファイル(*.ipl)を使って直接動作を変更することが可能です。 <>  251文字まで使用できますが、BASICの命令しか使えません。  *.iplファイル中には、改行も使えますが、IPL登録時には、「:」に置換されます。  (メモ2)   Dash-80で立ち上げ直後は、画面全体が、20Hでクリアされているようです。   そのため、マシン語のグラフィックモードのゲームで、画面に、点々が多数表示される場合があります。   それを防ぐために、IPL部分で、ヌルキャラクタに00Hを設定してから画面消去を実行しています。   (「COLOR ,0:PRINT CHR$(12)」の部分)   *.iplファイルを作成する際には、上記に注意して下さい。(もちろん、上記の問題が無ければ、削除可能です)  (メモ3)   Dash-80使用時に、マシン語実行後、BASICに戻る際に暴走してしまうことが多いです。   BASICに戻る際に、「JP 00081H」(STOP+RESETの処理へジャンプ)を使っているとダメなようです。   それを防ぐために、IPL部分で、POKE &HF1B1,&H9F:POKE &HF1B2,&H3Cを実行しています。   (0081HからコールされるHOOKテーブル(F1B0H〜F1B2H)を「JP 03C9FH」に書き換えて直接BASICに戻してしまいます。   Dash-80で起動時には、「JP 0EDCEH」に設定されていますので、アドレス部分のみを書き換えます。)   *.iplファイルを作成する際には、上記に注意して下さい。(上記の問題が無ければ、削除可能です)  (メモ4)   期待通りの動作にならなかった場合(特に画面表示系)には、BASICの命令をいろいろ追加していって下さい。      カーソルを消したい時           LOCATE 0,0,0      カーソルを表示したい時          LOCATE 0,0,1      ファンクションキー表示を消したい時    CONSOLE ,,0      ファンクションキー表示を表示したい時   CONSOLE ,,1      白黒モードにしたい時           CONSOLE ,,,0      カラーモードにしたい時          CONSOLE ,,,1      画面を40文字表示にしたい時       WIDTH 40      画面を80文字表示にしたい時       WIDTH 80      画面を消したい時             PRINT CHR$(12)      少ない文字数で画面を消したい時      ?CHR$(12) ◆自動キー入力機能について 起動後の自動実行には、ファンクションキーを利用した自動実行が利用できます。 自動キー入力指定ファイル(*.key)を追加して下さい。 <<自動キー入力指定ファイル(*.key)>>  キー入力をシミュレートするのでマシン語での操作や「^B」も使えますが、91文字までしか使えません。  IPLの最後には、「LOAD"autokey"」が設定されます。("autokey"=EA68から始まるキーデータ←当時と同じやり方です)  runの直後(EAC0)からファンクションキーの内容が壊れますのでご注意下さい。(*.keyファイルの内容が登録されます)  POKE &HEAC0,0 をすると、[f・5]=runは、使えるようになります。[f・6]以降は、あきらめて下さい。     [ディスクのIPL領域]     POKE &HF1B1,&H9F:POKE &HF1B2,&H3C:COLOR ,0:PRINT CHR$(12):WIDTH 40,20:CONSOLE 0,25,1,0:LOAD"autokey"     [sample01.key]     CLEAR 100,&HA3FF    ←CLEAR文が必要な時には、追加が必要です。     LOAD"machinobj"    ←マシン語のロード     MON     GB400         ←自動キー入力のため、マシン語モニタのコマンドも使えます。  *.keyファイルを使った場合には、IPL領域に自動でCLEAR文は設定されません。  IPL側でCLEAR文を実行したい時には、オプション(-C、または、-i)を使って下さい。       t88tool.exe GAME1.cmt -C 100 A3FF        →CLEAR 100,&HA3FFを追加     t88tool.exe GAME1.cmt -C 100 -1         →CLEAR 100,&H(マシン語の先頭アドレス - 1)を追加     t88tool.exe GAME1.cmt -i "CLEAR 100,&HA3FF"   →CLEAR 100,&HA3FFを追加  *.iplファイルと*.keyを同時に使うことが可能です。この場合、*.iplファイルを先に指定して下さい。  (例)CLEAR文を*.iplファイルに、それ以降の処理を*.keyファイルに分割した例     t88tool.exe GAME1.ipl GAME1.key GAME1.cmt     [GAME1.ipl]     CLEAR 100,&HA3FF     LOAD"autokey"     ←iplの最後で自動キー入力部分のロードが必要です。(ファイル名は「autokey」です)     [GAME1.key]     LOAD"machinobj"     MON     GB400  (メモ5)   マシン語だけの場合、マシン語起動用のBASICプログラム("AUTO")を使って起動しているのですが、   これが原因で動かない場合があります。(特に、8020近辺から始まるマシン語など)   この場合、*.keyファイルを使って、直接、起動してみて下さい。       [sample03.key]     LOAD"machinobj"    ←マシン語のロード     MON     G8060  (メモ6)   *.keyファイルで、画面消去系のコマンドが実行されると、自動キー入力は終了になるようです。       [sample04.key]     PRINT CHR$(12)     RUN          ←なぜか実行されない     下記のように、マルチステートメント化すると、大丈夫なようです。       [sample03.key]     PRINT CHR$(12):RUN  ←これだと、RUNまで実行される  (メモ7)   *.iplファイルも、*.keyファイルもほぼ同等のことができますが、ゲームとの相性もあります。   両方の組み合わせを試行錯誤してみて下さい。   ◆CLEAR文関連  (メモ8)   t88toolでは、マシン語プログラムがE8D0〜E9FFを使用している場合には、IPL部分で、   CLEAR 300,(先頭アドレス-1)を実行してからBASICプログラムを起動するようにしているのですが、   E8D0手前で終わるマシン語でも、CLEAR文が無いと動かないものがあるかも知れません。   この場合は、CLEAR文制御オプション(-C)や*.keyファイルなどを使い、CLEAR文を追加して下さい。   また、CLEAR文のサイズについても、調節してみて下さい。        t88tool.exe GAME1.cmt -C 100 9FFF      ←CLEAR文制御オプション(-C)を使った例     t88tool.exe GAME1.cmt -i "clear100,&H9FFF" ←IPL文字列挿入オプション(-i)を使った例     [sample05.key]     CLEAR 100,&H9FFF              ←*.keyファイルで直接指定した例     LOAD"machinobj"     MON     GA000  (メモ9)   スタックを上書きすることで、実行アドレスに飛ばすタイプの自動実行方法があります。   -sオプションを使うことで、実行アドレスをstack(E8CB、E8CF)から取得できます。   ただし、必ずしも、正しい、実行アドレスとは限りませんので、確認しながら使って下さい。        t88tool.exe -s GAME1.cmt   また、一部のゲームでは、スタックのアドレスが若干ずれていても起動するようになっています。   この場合は、*.keyファイルなどを使って、CLEAR文を使わない状態で、   マシン語プログラムを読み込むだけでも実行できるようになります。     t88tool.exe -C 0 0 GAME1.cmt ←CLEAR文制御オプション(-C)を使った例     [sample06.key]     LOAD"machinobj"        ←*.keyファイルで対応した例(CLEAR文無しでマシン語をロードするだけです)    ※当時のゲームの起動方法については、Enriさんのホームページが詳しいですので、参考にして下さい。      http://www43.tok2.com/home/cmpslv/      から「PC−8001のコーナへ」「SIO :μPD8251Cへ」「CMTのオートスタート」      と進んで下さい。      「マシン語ファイルをロード、終了後に実行」の部分に、スタック起動関係の詳細説明があります。 ◆基本以外の起動方法について 4.BASICプログラムから、次のプログラムを呼び出している場合  テープからのロード命令(CLOAD, MON+L)は、テープ読み込み待ちで止まってしまいますので、  すべて、ディスクからのロード命令に変更する必要があります。  マシン語のロードは、BASICプログラム内から可能です。(LOAD"machinobj"、LOAD"machin001"、…)  BASICのロード後実行は、LOAD命令ではなく、RUN命令を使って下さい。(RUN"次のプログラム")  (メモ10)   BASIC中のCLOAD命令とLOAD命令は、削除するようにしました。(実際には、PRINT命令に置換します)   これを防ぐには、-lオプションを使用して下さい。 5.BASIC+マシン語(マシン語からスタート)の場合  マシン語ファイルに実行アドレスが指定されている場合には、マシン語からスタートになります。  ただし、Dash-80使用時には、BASICプログラムが起動時には読み込まれていないことに注意して下さい。  また、通常、マシン語実行後のキー入力が必要だと思いますので、*.keyファイルを使って作業全体を指定して下さい。  ロードする順番などは、基本的に手入力で行う時と同じ順番で良いと思います。     [sample07.key]     LOAD"machinobj"    ←マシン語プログラムの読み込み     MON     GC100         ←マシン語プログラムの実行(PCGの設定や、BASIC拡張など)     ^B           ←マシン語モニタからBASICに戻る場合     RUN"GAME1"       ←BASICプログラムの実行 6.インタプリタ言語(GAME-PC, BIG-8)の自動実行について  (例1)GAME-PC    GAME-PCなどBASIC以外のソースについては、マシン語として読み込んでみて下さい。      まず、ゲーム開始直前のメモリイメージを書き出して下さい。(j80だと「Utilities」「Save N80 File」)    GAME-PCでは、ソースの最後のアドレスは、「??=&」でわかります。    例えば、3-Dデモプログラムだと、8216になりますので、下記でd88ファイルを作成して下さい。     t88tool.exe GAME1.n80 8020 8216 GAME1.n80 D840 E9FF game-pc.key    前半部分(8020〜8216)がプログラムソース部分、    後半部分(D840〜E9FF)がワークエリアも含めたGAME-PCインタプリタ本体になります。    GAME-PCはE002に飛ばすことでホットスタートができるので、    下記のkeyファイルで、インタプリタでのゲーム実行まで、自動実行できます。     [GAME-PC.key]     CLEAR0,&HD83F     LOAD"machinobj"    ←ソース部分の読み込み     LOAD"machin001"    ←ワークエリアも含めたGAME-PCインタプリタ本体の読み込み     MON     GE002         ←ホットスタート(ソースもワークエリアも画面もクリアされません)     #=1          ←プログラム実行(画面がクリアされないので、この部分まで自動キー入力が続きます)  (例2)BIG-8の例    BIG-8など、BASICエディタをそのまま流用しているものは、通常通り、LOAD命令で読み込んで下さい。    ただし、BIG-8での自動実行では、タイトル表示の画面クリアで自動キー入力が終了してしまいます。    タイトル表示用の文字列の先頭のCHR$(12)をCHR$(13)に書き換えてしまう方法で対応します。    (BIG-8の作者さん、ごめんなさい。)     t88tool.exe GAME1.cmt BIG-8.cmt BIG-8.key     [BIG-8.key]     CLEAR100,&H9FFF    ←オプション(-C 100 9FFF)を使えばこの行は不要     LOAD"GAME1"      ←ソース部分の読み込み(BASIC流用)     LOAD"machinobj"    ←BIG-8インタプリタ本体の読み込み     MON     SE03C     0D           ←CHR$(12):画面消去を、CHR$(13):キャリッジリターンに書き換え     GE000         ←BIG-8の起動     RUN          ←コマンド待ちに戻ってくるので、「RUN」でプログラム実行    (参考)[BIG-8の起動部分]     0E000H LD SP, 0DFF0H        :        :  (この間にコマンドテーブルなどを設定しています)        :     0E033H LD HL, 0E03CH ←表示文字列アドレス     0E036H CALL 052EDH   ←タイトル表示(画面がクリアされるので自動キー入力が終了してしまいます)     0E039H JP 00081H   ←BASICに戻る(なぜか、Dash-80はここで暴走してしまいます。ver1.09で対策済)     0E03CH 0C 42 49 47 2D 38 20 20 56 65 72 …(CHR$(12)+"BIG-8 Ver 1.0…") 7.コンパイル作業の全自動化  *.keyファイルを使うことで、コンパイル作業も含めての作業が、全自動で行える可能性があります。  手入力で行うことを、そのまま、*.keyファイルに記述するのが基本ですが、  うまく行かない時には、ここまでの注意点などを参考に、試行錯誤してみて下さい。    (例1)TL/1の自動コンパイル&実行     t88tool.exe GAME1.cmt TL1.cmt TL1.key     [TL1.key]     LOAD"GAME1"      ←BASICプログラム(ソースコード)の読み込み     LOAD"machinobj"    ←TL/1コンパイラの読み込み     MON     GB800         ←コンパイラの実行(ソースコードのコンパイル)     MON     GC800         ←コンパイル済バイナリの実行  (例2)整数型BASICコンパイラの自動コンパイル&実行(ビリヤードの例)    keyファイルの文字数制限(91文字)を超えてしまうので、クリア文は、    オプション(-C、または、-i)を使って、IPL側で実行して下さい。         t88tool.exe -i "CLEAR300,&HA9FF" BI_BASIC.cmt BI_MON.cmt BasicCompiler.cmt RUNTIME.cmt BI_Compile.key          [BI_Compile.key]     LOAD"BI"        ←BASICプログラム(ソースコード)の読み込み     LOAD"machinobj"    ←マシン語プログラムの読み込み     LOAD"machin001"    ←整数型BASICコンパイラ本体の読み込み     LOAD"machin002"    ←整数型BASICコンパイラランタイムパッケージの読み込み     MON     GAA00         ←整数型BASICコンパイラの実行     &HCA00         ←「OBJECT (>=&HBB86) ?」に対する自動キー入力(例:&HCA00を入力)     MON     GCA00         ←コンパイル済バイナリを実行  (例3)MAIの自動コンパイル&実行    まず、コンパイル開始直前(ソースプログラム、MAI本体を読み込んだ状態)の、    メモリイメージ(n80ファイル)を書き出します。(j80だと「Utilities」「Save N80 File」)    書き出したメモリイメージを元に、下記でd88ファイルを作成して下さい。     t88tool.exe GAME1.n80 8023 8488 GAME1.n80 A400 E9FF mai_Compile.key    MAIは、ホットスタート(A40F)から実行することで、画面がクリアされず、自動キー入力が続きます。     [mai_Compile.key]     CLEAR300,&HA3FF    ←オプション(-C 300 A3FF)を使えばこの行は不要     LOAD"machinobj"    ←ソースプログラムの読み込み     LOAD"machin001"    ←ワークエリアも含めたMAIコンパイラ本体の読み込み     MON     GA40F         ←MAIのホットスタート(ソースもワークエリアも画面もクリアされません)     C           ←コンパイル命令実行     R           ←コンパイル済バイナリを実行  (例4)GAME-PCの自動コンパイル&実行    まず、コンパイル開始直前の、メモリイメージを書き出します。    (ソースプログラム、コンパイル済のGAME-PCコンパイラ、GAME-PC本体を読み込んだ状態)    書き出したメモリイメージを元に、下記でd88ファイルを作成して下さい。     t88tool.exe GAME1.n80 8020 D720 GAME1.n80 D840 E9FF game-pc_Compile.key    コンパイル済GAME-PCコンパイラ(B400〜D720)は、画面消去直後(B444)から実行することで、    画面がクリアされず、自動キー入力が続きます。     [game-pc_Compile.key]     CLEAR0,&HD83F     LOAD"machinobj"    ←ソースプログラムとGAME-PCコンパイラ(B400〜D720)の読み込み     LOAD"machin001"    ←ワークエリアも含めたGAME-PCインタプリタの読み込み     MON     GE002         ←GAME-PCインタプリタのホットスタート(ソースもワークエリアも画面もクリアされません)     >=$B444        ←GAME-PCコンパイラを実行(画面消去直後のアドレスから実行)     =           ←「GAME Program : 」に対する自動キー入力(例:=を入力)     $9000         ←「Start Address : 」に対する自動キー入力(例:$9000を入力)     $8800         ←「Work Area : 」に対する自動キー入力(例:$8800を入力)     >=$9000        ←コンパイル終了後、コンパイル済バイナリを実行  (例5)FORMの自動コンパイル&実行    まず、コンパイル開始直前の、メモリイメージを書き出します。    (ソースプログラム、FORM本体を読み込んだ状態)    書き出したメモリイメージを元に、下記でd88ファイルを作成して下さい。     t88tool.exe GAME1.n80 8100 A010 GAME1.n80 D400 E9FF form_Compile.key -C 0 8100 -P 9F92=21,5D,EA,35,23,34,21,7A,9F,7E,CD,84,08    FORMは、ホットスタート(815D)から実行することで、画面がクリアされず、自動キー入力が続きます。(SPだけはFFFに設定されますが、ソースプログラムも消えません)    D400はテキストの格納アドレスです。ゲームによってはもっと前から切り出して下さい。    9F92からのパッチは、Illegal Function Callが出ないようにする修正です。     [form_Compile.key]     LOAD"machinobj"    ←FORMコンパイラの読み込み     LOAD"machin001"    ←ソースプログラムの読み込み     MON     S95AD         ←COMPIL中のキー入力をできなくしておく     0000000000000000     G850D         ←FORMのホットスタート(ソースも画面もクリアされません)     compil         ←コンパイルコマンド(大文字だとコマンドエラーになります。入力時小文字で表示は大文字になります。)     run          ←RUNコマンド(大文字だとコマンドエラーになります。入力時小文字で表示は大文字になります。) 8.これ以外の起動方法について  ゲームによって、各種読み込み方法、各種起動方法があると思いますが、  起動方法に依らず、下記の方法が可能だと思いますので、試してみて下さい。  エミュレータを使えば、ゲーム開始直前のメモリイメージを取得することが可能です。  BASICプログラムをSTOPするなり、マシン語にブレークポイントを設定するなどをして、  ゲーム開始直前のメモリイメージを書き出して下さい。(j80だと「Utilities」「Save N80 File」)  そのイメージを使って、d88ファイルを作ることで、その状態から処理再開が可能です。    これを応用すると、コンパイルにかかる時間を短縮したり、  オールBASICプログラムのマシン語展開処理を飛ばしたりも可能だと思います。  それぞれ、コンパイル終了後やマシン語展開後のメモリイメージを元にd88ファイルを作ってみて下さい。     t88tool.exe GAME1.n80 D000 DFFF D800    ←マシン語でD800から再開する例 9.Dash-80では無理な場合  (メモ11)   Dash-80では、どうしてもうまくいかない場合でも、p80makeを使うとうまく行く場合があります。   p80makeでのd88ファイル作成も試してみて下さい。   (-pオプションを付けるとp80make.comを使うようになります)     t88tool.exe -p GAME1.cmt 10.上記を読んでも、良くわからない場合  お気軽にbugfire2009@yahoo.co.jpまで、連絡下さい。  ツールの修正、*.keyファイルの提供など、出来る限り対応します。 ============================================================================================================ ◆◆3.MML(MusicMacroLanguage)ファイル関係の説明 入力として、MML(MusicMacroLanguage)を設定できるようになりました。 15音(12音+3音)同時出力可能なプレイヤーを作成しました(t88tool.exeに内蔵)ので、 それと組み合わせて、音楽自動再生可能なd88ファイルを出力します。 15音の割り振りは下記になります。   パート 1〜12 PCS-8007 (ルンルンシンセ)   パート13〜15 ASCIIミュージックアダプター(ASCII 1982/12) なお、15音プレイヤーを使わずに、下記2つのサウンドユニットプレイヤーを使うことも可能です。   ・AddcomPCサウンドユニットエディター     (I/O 1982/06)   ・ASCIIミュージックアダプター再生プログラム (ASCII 1982/12) また、おまけ機能として、上記2つのプレイヤー用のデータファイル(cmtファイル)も作成可能です。 ◆基本動作  1.MMLファイルだけを指定した場合    内蔵の15音プレイヤーとリンクして、起動後自動的に音楽再生できるd88ファイルを作成します。     t88tool.exe sample.mml             →15音プレイヤー(内蔵)を使ったd88ファイルを作成  2.MMLファイルとプレイヤーファイルを指定した場合    起動後自動的に各プレイヤーで音楽再生できるd88ファイルを作成します。     t88tool.exe sample.mml AddcomSoundEditor.cmt  →Addcomサウンドエディタを使ったd88ファイルを作成     t88tool.exe sample.mml AsciiMusicPlayer.cmt   →ASCIIミュージックアダプタ用プレイヤを使ったd88ファイルを作成  3.MMLファイルだけを指定した場合(データ作成オプション付き)    音楽データファイル(cmtファイル)を作成して終了します。     t88tool.exe sample.mml -m A           →Addcomサウンドエディタ用のデータ(0x8000〜)を作成     t88tool.exe sample.mml -m M           →ASCIIミュージックアダプタ用のデータ(0xB400〜)を作成  4.音楽データファイル(cmtファイル)とプレイヤーファイルを指定した場合(音楽自動再生オプション付き)    起動後自動的に音楽再生できるd88ファイルを作成します。     t88tool.exe music.cmt AddcomSoundEditor.cmt -m @  →Addcomサウンドエディタを使ったd88ファイルを作成     t88tool.exe music.cmt AsciiMusicPlayer.cmt -m @  →ASCIIミュージックアダプタ用プレイヤを使ったd88ファイルを作成  ※2〜4は音楽再生に必要な最低限の処理だけをしていますので、音楽再生後、Addcomサウンドエディタでデータの編集などの作業はできません。  mmlファイルは複数指定可能です。合計のトラック数が100を超えるとエラーになります。 ◆エミュレータの設定  j80でPCS-8007 (ルンルンシンセ)を使うためには、「Ex.Bus」「PCS-8007 x2」を選択して下さい。  j80でASCIIミュージックアダプターを使うためには、「Printer」「Music Adapter [ASCII]」を選択して下さい。  j80でAddcomPCサウンドユニットを使うためには、「Ex.Bus」「Addcom Sound Unit」を選択して下さい。  j80.cfgで上記を設定しておくと楽です。 (例) OPTION -bus=14 -prn=1 OPTION -newtype -fddwait -smooth=1 -power // -fdd -full  それぞれの音量は、「Sound」「PCS-8007 x2 #1」、「Sound」「PCS-8007 x2 #1」、  「Sound」「Music Adapter [ASCII]」、「Sound」「Addcom Sound Unit」です。 (お詫び)  Ver1.10で下記の内容がありましたが、Ver1.11からデフォルト音量をAddcomサウンドなどと合わせました。  下記の設定は不要です。お手数ですが、j80.cfgを元に戻して下さい。  [古い情報] こちらも、j80.cfgで、低めに設定しておきましょう。(デフォルトが最大音量なので大きな音が出ます)  [古い情報](例)  [古い情報]BUS:14 1 // #1,#2 // 14 : PCS-8007(ルンルンシンセ) 2枚挿し  [古い情報]PRN:1 1 // #1 // 1 : ミュージックアダプタ [ASCII 82.12]  M88でAddcomPCサウンドユニットを使うやり方についてには、”addcom.88”でググって下さい。 ◆オプション  -mオプションに続けて、音楽関係のオプションをまとめて指定して下さい。  (例)     t88tool.exe test.mml -m t0.8c1,3,5,11,12,13/LupinThe3rd#T120K-12Q1R2     t(scale) テンポを調整します。(例)-m t1.5 →テンポを1.5倍速にします。   R     15音プレイヤーのリピートモードをオンにします(再生を繰り返します)。(例)-m R   C     15音プレイヤーをカラーモードにします(白黒鍵盤ではなく、Addcomサウンドライクな表示になります)。(例)-m C   P     PCG8100を使った3音プレイヤーを使います。(例)-m P $ 音楽データ(.mdt)を使います。mdtファイルが無い時には、コンパイルされた音楽データ(.mdt)を出力して終了します。   c     使用するチャンネルを指定します。(例)-m c1+2,3+4,5,6,7        (パート毎のオクターブ上げ下げも可能です。(例)-m c1dd,1d,1,1u,1uu→5オクターブユニゾンで再生        (15音プレイヤーのPart1〜12のみパート毎のデチューン(上げ下げ)も可能です。(例)-m c1H,1L→デチューン効果で音が広がります。   o     チャンネル結合しても問題ないチャンネルの組み合わせを表示します。(例)-m o   r     チャンネル結合時の休符長しきい値(例)-m r2    →上書き側が2分休符以上の時に、ベース側の音を使用   m     モノフォニックモード。チャンネル結合時、後から開始された音を優先して音を出します。(例)-m m   p     実行時ループ情報を全チャンネルで共有します。(例)-m p (1つのチャンネルだけでループ命令を指定して下さい。)   s     テンポ情報を全チャンネルで共有します。(例)-m s    (特定チャンネルでのみループ命令を使っているデータには非対応です。小節位置がずれてしまうため、うまく行きません。)   v     ボリューム情報を全チャンネルで共有します。フェードアウトなどがまとめて指定できます。(例)-m v    (特定チャンネルでのみループ命令を使っているデータには非対応です。小節位置がずれてしまうため、うまく行きません。)   l     データサイズ削減のため、6個以上連続した音符、休符を実行時ループ命令に置換します。(例)CDEEEEEEEE→CD(8E)   n     15音プレイヤーの音符表示を残します。画面がチカチカしすぎる時などに指定して下さい。(例)-m n   g     全てのチャンネルの長さを合わせます。Rオプションを使わずに、全体をループさせる時などに使います。(例)-m g#(100   q     同じ音程の音が続く場合に、64分休符を使って音を一度切ります。(例)Q16C4C4→Q16C8...R64C4   Q     ゲート長を休符を使って実現します。(例)Q8C4D4E4→Q16C8R8D8R8E8R8   A     Addcomサウンドエディタ用のデータ(cmtファイル)を出力して終了します。d88ファイルは作りません。(例)-m A   M     ASCIIミュージックアダプター用のデータ(cmtファイル)を出力して終了します。d88ファイルは作りません。(例)-m M   @     起動後自動音楽再生するd88ファイルを作成します。(例)-m @        (MMLファイルが指定された場合は自動的にONになりますので、通常は指定不要です。         作成済データと音楽プレイヤーをまとめてd88ファイルを作成する時に使用して下さい。)   /(title) AddcomPCサウンドユニットエディタ用のタイトルを指定します。(例)-m /LupinThe3rd        「/」以降を全てタイトル文字列としますので、オプション文字列の最後(#オプションより前)に指定して下さい。   #(MML)  すべてのチャンネルの先頭に、MMLコマンドを挿入します。(例)-m #T120K-12Q1R2        特定のチャンネルだけに挿入したい場合には、[CH(番号)]で指定して下さい。(例)-m #[CH3]K-12[CH5]K24        「#」以降を全てMML文字列としますので、オプション文字列の一番最後(/オプションより後)に指定して下さい。   a     ASCIIミュージックアダプター用に書かれたMMLを処理します。(例)-m a        BASICのMMLデータ部分(10010行以降の部分)をそのままテキストファイル(*.mml)に保存して下さい。          [honoo.mml]          10010 DATA t25o5r4d8c2.r8d8c8a1r2r4d8c2.d8cdaa#a1r4r2.rrrrr-2g4+dd              :              :          10240 DATA r4a#8-d4+a#8r-d+a#-d+a#4f8gcda#ct30f8gt35cdt40a#cd1 @ ◆MMLファイルの作成について  MMLファイルを一から作るのは大変なので、midiファイルから自動変換して作ることを想定しています。  1.音楽データ(midiデータ)のダウンロード   過去のmidiファイルなどをネット上で探して下さい。   曲名に「midi倉庫」などを追加して、ググって下さい。  2.midiファイルから、mmlファイルへの変換   midi→MML変換は、他力本願モードです。   ALOEさんの3MLE(Mabinogi Music Macro Language Editor)を使います。    まず、変換ツール(3MLE.exe)をダウンロードします。    http://3ml.jp/ から、「download」を開き、3ML Editorをダウンロードして下さい。      3MLE.exe を起動してからは、下記の手順で、midiファイルをmmlファイルに変換して下さい。       「ファイル」「標準MIDIファイルを入力」で、midiファイルを選択     →「標準MIDIファイル インポート設定」の画面で、      右側の「その他設定」の中の休符節約のチェックをはずす     →「OK」     この時点で、MMLをいじったり、テスト再生が可能です。     「ファイル」「名前を付けて保存」で、     →sample.mmlなどの名前を付けて保存  midiファイルが無くても、上記のエディタがあればmmlファイルの作成とMMLコマンドの視聴が可能です。  3MLE.exeは、MMLコマンドを入力してすぐに視聴ができますので、MML言語の勉強に最適です。本当に良くできています。  (和音の変換方法)  上記のやり方だと書くトラックごとに1音だけが抽出されます。和音は再現できないので、個々に対応する必要があります。  3MLE.exeでの変換時に、「1MIDIトラック→複数MMLトラック変換」をチェックすることで和音が再現できます。  ただし、一度に変換できるトラックは1つだけになります。  mmlファイルに書き出す時には、そのトラックだけで1つのmmlファイルになります。  この場合は、すべてのトラックのmmlファイルをt88tool.exeの引数に並べて下さい。    t88tool.exe track1.mml track2.mml track3.mml track4.mml  特に、ピアノ曲のmidiデータは、左手と右手の2トラック構成になっていることが多いので、  そのままだと2音までしか同時に鳴りません。  上記のやり方で左手と右手を別々にファイルに書き出した後に、2つのファイルをt88toolに渡して下さい。      t88tool.exe 左手.mml 右手.mml ◆MMLの仕様について  基本的に、上記のMMLエディタ(3MLエディタ)のmmlファイルを変換できるように対応しています。  (もちろん、mmlファイルはテキストファイルなので、テキストエディタがあれば、自由に作成可能です。)  さらに、ASCIIミュージックアダプター用のMML(BASICのDATA文部分)も読めるように(-m a 指定が必要)、  一部の機能を追加しています。   MMLコマンドに関しては、一部のコマンドを除き、大文字、小文字の違いはありません。   ----------------------------------------------------------------------------------------------------   MMLコマンド 例と簡単な説明   ----------------------------------------------------------------------------------------------------   チャンネル指定     [Channel1]〜[Channel100](最初の2文字以外は小文字固定です)(省略形[CH1]も可能)               (チャンネル未指定時は、チャンネル1として扱われます)   複数チャンネル指定   [Channel1,3-5]→チャンネル1,3,4,5に展開、[Channel0]→データのある全チャンネルに展開   パート指定       [Part1]〜[Part16](省略形[PT1]も可能)各チャンネルのMMLコンパイル後、各パートの先頭に挿入するデータを指定します               (MMLコンパイルには影響無いので、使い道はパート番号での音色指定ぐらいです。例:[PT0]Q14@D21@R7[PT3,4]@D201@V1,5,81@T1)   テンポ指定(T)    T120→テンポ=120(あまり正確ではないので、調整が必要です。)   音符指定(C-B)    C4D8E8G4 (CDEFGABの代わりにドレミファソラシでも可能)   休符指定(R)     R4 →4分休符   音長指定(1,2,4,8,...)C4 →4分音符のド、R8→8分休符、C64→64分音符のド (addcomサウンド使用時は32分音符まで)   付点音符(.)     C4. →付点4分音符のド、R8.→付点8分休符、C8..→複付点8分音符のド(7/8拍=1/2+1/4+1/8)   3連符(3,6,12,...)  C6 →三連4分音符のド、C192→三連128分音符のド(このソフトで最短の長さ)   3連符(!)      C4! →三連4分音符のド、C64!→三連64分音符のド               (3MLエディタでmidiファイルからの変換時には、三連符は使われず他の音符に置換されるようです)   ゲート長割合指定(Q) Q8→音長の50%(=8/16)の区間で音を出す(=default動作)、Q0→最小のゲート長、Q16→タイorスラーと同じ               (addcomサウンドでは丸められます。0-6→4、7-9→8、10-15→12、16→16)               (15音プレイヤでは丸められます。0→0、1-2→2、3-4→4、5-6→6、7-9→8、10-11→10、12-13→12、14-15→14、16→16)   ゲート長減算指定(Q-) Q-8→8分音符分休む(ASCIIミュージックアダプター使用時のみ有効です)   タイ(^、&)      C4^C8→C4.と同じです。C4^8もC4.と同じです。(「^」の代わりに「&」も使用可能です)   スラー(^、&)     C4^D4、C4&D4 →最初のドの音を伸ばします。(ゲート長100%)   基本音長指定(L)   音長省略時の音長を指定。例:L8CDE→C8D8E8と同じ。(デフォルトは、L4です)               組み合わせ例(L4C.=C4.、L4C!=C4!、L4C^=C4^、L4C.^.=C4.^4.、L4C^^=C4^4^、L4C^!=C4^4!)               (L0を指定すると、1つ前の音長を使うモードになります。C8DEF4R=C8D8E8F4R4)   音長ステップ単位(?) 音長をステップ単位で指定(4分音符=48ステップ)、C?48→C4と同じ、C?24→C8と同じ。   シャープ(#、+)    C#、もしくは、C+   フラット(-)     D-   ナチュラル(=)    A=   調指定(:=、:+、:-)  :=→八長調、:+1→ト長調、:+2→ニ長調、:-1→ヘ長調、:-2→変ロ長調。任意の調も指定できます。例::+FGA   オクターブ(O)    O0 〜 O8→オクターブ指定 (デフォルトはO4です)                (各サウンドボードで再生できない場合は、再生範囲内に自動で上げ下げされます)   オクターブup(>)   G8A8B8>C8→ソラシド   (「>3」とすると3オクターブアップします)   オクターブdown(<)  C8