// *encoding Windows-31J ## ============================================================= ## CAS(JOB) ファイル 2015.11.22 ## ※このファイルは、フォーマット説明用のファイルです ## ============================================================= // 【注意】 // ※ 先頭行にこのファイルの 文字セット名(またはコンバータ名) // を記入してください // 指定がない場合は、SJIS として処理します // コメントアウトできませんのでご注意ください // [参考 (Shift-JIS系)] // [文字セット] [コンバータ] // Windows-31J MS932 // Shift_JIS MS932 (J2SE1.2〜1.4.1b以前) // Shift_JIS SJIS (J2SE1.4.1b〜) // // ------------------------------ // 共通 // ------------------------------ // //〜 コメント // ・行の途中からでも使えます // // ##\t〜 CASファイルの説明用コメント // %%\t〜 タイトルの説明用コメント // ・コメント中に「Tab (\t含む)」は使えません // ・行の途中には使えません // // ・パラメータの区切りは \t(Tab) です // ・パスの区切り文字は、実行環境によらず '/' とすると便利です // ・pathは、絶対パス、CASファイルの場所からの相対パスで記述します // filenameは、絶対パス、*SRC,*OUTからの相対パスで記述します // 両者とも を先頭に書くことで、カレントパスを基点に記述できます // ※ Macの方へ: // "" から始まるディレクトリ・ファイル名を使いたい場合は、 // ./〜 としてください // // ------------------------------ // 記述した行以降に適用される (ブロック無視) // ------------------------------ // *SRC path // ・入力ファイルのパス(起点) // ・省略した場合は、CASファイルの場所になります // // *OUT path 【 j80:無視 / pcm8001:無視 / tools80:使用 】 // ・出力ファイルのパス(起点) // ・省略した場合は、CASファイルの場所になります // ・指定したディレクトリが存在しない場合は掘ります // // ------------------------------ // ブロックの区切り // ------------------------------ // *TITLE [タイトル] 【 j80:使用 / pcm8001:使用 / tools80:無視 】 // ・j80,cmt8001 用のブロックの区切り,頭出し位置を示します // ・「タイトル」が省略された場合、コンバータが適当な名前をつけます // ・次の *TITLE までを1群として処理します // ・推奨キーマップ、推奨タッチパネルはクリアされます // ・USARTステータスは下記設定にリセットされます // ボーレート : 無指定(アプリケーション側の設定に従う) // パリティ  : なし // ・*TITLE 宣言前にデータがある場合は新規にタイトルを作って登録します // // *OBJ filename 【 j80:無視 / pcm8001:無視 / tools80:使用 】 // ・tools80 用のブロックの区切りです // ・次の *OBJ までを1ファイルにまとめます // ・filename はパス表記可能ですが、ディレクトリは掘らないので注意 // // ------------------------------ // *TITLE, *OBJ 間に記述する // ------------------------------ // *KEY filename [config] 【 j80:使用 / pcm8001:無視 / tools80:無視 】 // ・そのタイトル推奨のキーマップファイルを指定します // ・タイトル中の最後の指定のみが有効です // ・キーマップは実行環境に依存する設定なので、configで識別可能にしました // configは j80 の cfgファイル で設定します // 例: // *KEY climber.map // No.1 // *KEY climber.Note.map WinNote LinuxNote // No.2 // *KEY climber.Mac.map MacX // No.3 // (無指定) の環境で開いた場合、No.1 が該当し、No.1 が選択されます // "LinuxNote"の環境で開いた場合、No.1,2 が該当し、No.2 が選択されます // "MacX" の環境で開いた場合、No.1,3 が該当し、No.3 が選択されます // "Win32_131"の環境で開いた場合、No.1 が該当し、No.1 が選択されます // // *PNL filename 【 j80:使用 / pcm8001:無視 / tools80:無視 】 // ・そのタイトル推奨の「タッチパネル」のマップファイルを指定します // ・タイトル中の最後の指定のみが有効です // // *USART [baud:-300 -600 -1200 -x2 -x2:600 -x2:1200 -x2:2400] // [char:-5 -6 -7 -8] // [parity:-even -odd] // 【 j80:使用 / pcm8001:使用 / tools80:無視 】 // ・省略した場合 // SPACE=1200Hz / MARK=2400Hz // ボーレート  : 無指定(アプリケーション側の設定に従う) // ※-x2 が指定されている場合はGUI表記の2倍になります // キャラクタ長 : 8bit // パリティ   : なし // ・注意 // ストップビット長  : 1bit 固定 (ギャップと併せ 2bitまで対応可能) // データ間のギャップ : 1bit分 固定 // -x2 : SPACE=2400Hz / MARK=4800Hz // // *INDEX [整数] 【 j80:使用 / pcm8001:使用 / tools80:無視 】 // ・頭出し用「インデックス信号(トラック信号,CUE信号)」を挿入します // BLANK,SPACE で分かれていないブロックに頭出し位置を追加できます // (一部の市販タイトルで ブロック間に MARK しかないものがあります) // ・オプションは整数値を設定できますが現在使っていません // // *BLANK [ 時間(単位:sec,msec,tick)]] // *SPACE [波数(1200で1秒) | 時間(単位:sec,msec,tick)] ※2400波で1秒@-x2 // *MARK [波数(2400で1秒) | 時間(単位:sec,msec,tick)] ※4800波で1秒@-x2 // 【 j80:使用 / pcm8001:使用 / tools80:無視 】 // ・MARK(2400Hz), SPACE(1200Hz), BLANK(無音) を挿入します // ・時間指定の例 (整数+単位) // 1sec : 秒 x 1 // 1000msec : ミリ秒 x1000 // 4800tick : 1/4800秒 x4800 // ・波数を省略した場合は、1秒分挿入します // ・長さ 0 の *BLANK,*SPACE,*MARK は ソースデータとしての意味を持ちませんが // *BLANK,*SPACE は 頭出しに影響を与えます (ほぼ INDEX と同じ) // ※頭出し用途には 意図の明確な *INDEX タグを推奨します // ・Ver.5 から、*MARK,*SPACE の挿入ルールが変わりました // 各コンバータの説明を参照してください // // *IPL IPL文字列 // ・IPL文字列を N-BASICのファンクション型IPL(cmt) に変換します // ・IPL文字列 の特殊文字 // \:エスケープ // 1.文字コード指定 「\x」に続けて文字コード(16進/2桁固定) // 2.上記以外は次の文字を生で使う // ・文字→文字コードの変換は、Javaの char を int にキャストしています // ASCIIコードレベルで同一グリフに対応しているハズ // 半角カナやグラフィック文字は、文字コードで指定してください // ・下記設定の *USART タグが挿入されます // ボーレート : 600 // パリティ  : なし // ※設定は元に戻さないので注意してください // ・前に *SPACE, *MARK が挿入されます // ・後ろに *MARK, *SPACE が挿入されます // ※MEMO // IPL 文字列は、[f・5] 「run」のすぐ後ろに書き込まれます // 放置すると、次回 [f・5] を押した際に問題が生じます // IPL文字列の先頭に「seac0\x0D00」を追加すればこの問題は回避できます // IPL文字列が長い場合は [f・6] 以降の内容が壊れてしまうことがあります // // [*BAS] filename [解析開始位置] [name=xxxxxx] [rem=xxx] [-all] // ・BAS形式またはベタイメージを、BASICフォーマットで cmt に変換します // ・拡張子が bas の場合は、*BAS を省略できます // ・下記設定の *USART タグが挿入されます // ボーレート : 無指定(アプリケーション側の設定に従う) // パリティ  : なし // ※設定は元に戻さないので注意してください // ・前に *SPACE, *MARK が挿入されます // ・ヘッダ-ボディ間に *MARK(0.2sec) が挿入されます // ・後ろに *MARK, *SPACE, *BLANK が挿入されます // ・BASICのリンクポインタを辿り、必要な範囲のみを抽出します // リンクポインタが壊れているファイルは変換できません // ・オプションは以下のとおり // 解析開始位置 // ファイル中の BASIC中間言語イメージ先頭位置 // 省略した場合はファイル先頭から解析・抽出します // 通常は8001側のアドレスで 0x8021(32K), 0xC021(16K) です // BAS形式では先頭位置から格納されてますので指定不要です // name= BASICファイル名 // IPLと同様の「文字コード指定」が可能 // 省略した場合 Bas2Cmtのデフォルト("j80")になります // デコード時に6文字を超える部分を無視します // rem= REM化する行 // ディスク用のロード命令を殺すのが主目的です // 1行まるごと消すので、必ずしも万能ではありません // *IPL などを活用すれば、CLEAR文程度なら外に追い出せます // 複雑な修正が必要な場合は手作業でおこなってください //  手順:cmt化 → 手修正 → csave (→ Cmt2Cmtで結合) // -all BASIC末尾以降も含める // BASIC末尾以降のデータもcmtに含めて出力します // 但し、0x00 が 10byte 以上続いたらそれ以降は含めません // ASCII市販モノなど「特殊なBASICフォーマット」対策です // // [*BIN] filename [start [end]] [address=xxxx] [name=xxxxxx] // ・BIN形式またはベタイメージを、モニタフォーマットで cmt に変換します // address=が指定された場合のみベタイメージとみなします // ・拡張子が bin の場合は、*BIN を省略できます // ・下記設定の *USART タグが挿入されます // ボーレート: 無指定(アプリケーション側の設定に従う) // パリティ : なし // ※設定は元に戻さないので注意してください // ・前に *SPACE, *MARK が挿入されます // ・ベッダがある場合、ヘッダ-ボディ間に *MARK(0.1sec) が挿入されます // ・後ろに *MARK, *SPACE, *BLANK が挿入されます // ・オプションは以下のとおり // 抽出範囲 (start-end) // address= // バイナリデータを格納する先頭アドレス // 指定があった場合はベタイメージとみなします // 無指定の場合はBIN形式ヘッダの情報に従います // BIN形式のイメージを違うアドレスにロードしたい場合は // filename.bin4address=LOADADDRESS // としてください // name= 88モニタのファイル名 // IPLと同様の「文字コード指定」が可能 // デコード時に6文字を超える部分を無視します // 省略した場合 ヘッダブロックを付けません // // [*T88] filename [start [end]] // ・t88ファイルを読み込みます // ・拡張子が t88 の場合は、*T88 を省略できます // ・範囲指定により若干動作が違います // ・start-end ともに指定した場合は、指定範囲を *抽出* します // ・start だけを指定した場合は、start からEOFまでを *T88解析* します // ・start も省略された場合は、ファイル全体を *T88解析* します // ・start,end の表記は、10進,16進(0xまたは#〜),8進(0〜) が使えます // ・j80,tools80 では、データブロックのみ抽出します // ・抽出する場合 // ・*USART は挿入されません // ・*MARK, *SPACE, *BLANK は挿入されません // ・解析する場合 // ・T88のフォーマット解析はおこないますが、内容の解析はおこないません // ・T88ファイル中の記述を反映した *USART タグが挿入されます // ※設定は元に戻さないので注意してください // ・0.01秒未満の *MARK,*SPACE,*BLANK は無視します // // [*N80] filename // ・n80ファイルをマシン語モニタのフォーマットに変換します // ※モニタの L コマンドでは正常にロードできません // ・拡張子が n80 の場合は、*N80 を省略できます // ・データ本体の前に IPLプログラムが追加されます // ・IPLの前に *SPACE, *MARK と *USART -600 が挿入されます // ・IPLとデータ本体の間に *MARK, *SPACE, *MARK が挿入されます // ・最後に *MARK, *SPACE, *BLANK が挿入されます // // [*CMT] filename [start [end]] // ・cmtファイルを読み込みます // ・拡張子がbin,bas,t88,n80以外で、*BIN,*BAS,*T88,*N80が省略された場合も // この処理となるので注意してください // ・j80,pcm8001 と tools80 で若干動作が違います // ・start-end ともに指定した場合は、指定範囲を *抽出* します // ・start だけを指定した場合は、start から EOF まで *抽出* します // ・start も省略された場合は、 // ファイル先頭から *解析* します (j80,pcm8001,tools80:Cas2Cmt) // ファイル全体を *抽出* します (tools80:Job2Cmt) // ・start,end の表記は、10進,16進(0xまたは#〜),8進(0〜) が使えます // ・抽出する場合 // ・*USART は挿入されません // ・*MARK, *SPACE, *BLANK は挿入されません // ・解析する場合 // ・現在解析できるフォーマットは「付録 [1]」を参照してください // ・フォーマットにより決められた *USART タグが挿入されます // 但し、baud=USER(無指定) の場合はアプリケーション側の設定に従います // ※設定は元に戻さないので注意してください // ・特記なき限りブロックの前に *SPACE, *MARK が挿入されます // ・特記なき限りパート間に *MARK が挿入されます // ・特記なき限りブロックの後ろに *MARK, *SPACE, *BLANK が挿入されます // // +----------------------------------------------------------+ // +----------------------------------------------------------+ // // 付録[1]:現在解析できるフォーマット // ---------------------------+------+------+------------------------------- // | USART | // フォーマット +------+------+ 備考 // | baud |parity| // ---------------------------+------+------+------------------------------- // ■ 1パートで1ブロック -> 1ブロック単独で構成 // ---------------------------+------+------+------------------------------- // 02 MONITOR | USER | NONE | // 04 DataFile | USER | NONE | // 05 ASCII:GAME-PC ※ | 600 | NONE | src/obj共通 // 08 BondSoft:0x3A | USER | NONE | // 09 BondSoft:0xAA | USER | NONE | 1200baud固定で良い? // 10 BrainMedia | 600 | NONE | // 11 FujiOnkyo:0x6E | 600 | NONE | // 12 dB-SOFT:FLAPPY88 | 1200 | NONE | データパートのみ // 13 dB-SOFT:KingFLAPPY | 600 | NONE | // 15 Enix:JumpUP | 600 | NONE | // 19 Hudson:NONTAMA/80A | USER | NONE | // 20 Hudson:NONTAMA/80B | USER | NONE | // 21 Hudson:NONTAMA/88A | USER | NONE | // 22 Hudson:NONTAMA/88B | USER | NONE | // 25 SPS:Mei#Loader | 600 | NONE | // 26 SPS:Mei#Main ※ | 600 | NONE | // 27 SystemSoft:LRMAIN | 600 | NONE | MARK(.1)/LRMAIN/M(3.5) // 29 TecnoSoft:0x3F | USER | NONE | // 30 TokaiCreate:JJ | 1200 | NONE | // 31 WestSide:0x3C | 600 | EVEN | // 34 CarryLab:JE6#Loader | USER | NONE | JE6#Dataとの間 MARK のみ // ---------------------------+------+------+------------------------------- // ■ 2パートで1ブロック -> 1ブロック単独で構成 // ---------------------------+------+------+------------------------------- // 01 BASIC | USER | NONE | HEADER/MARK(0.2)/BODY // 03 MON88 | USER | NONE | HEADER/MARK(0.1)/BODY // 06 ASCII:MAI/PROT ※ | 600 | NONE | HEADER/MARK(0.2)/BODY // 07 ASCII:PASCAL-PC | 600 | NONE | HEADER/MARK(.15)/BODY // 16 Enix:PacLand | 600 | NONE | HEADER/MARK(3.6)/BODY // 23 MicroNet:LUM/Ver1 ※ | USER | NONE | HEADER/MARK(1.1)/BODY // 24 MicroNet:LUM/Ver2 ※ | USER | NONE | HEADER/MARK(1.1)/BODY // 28 SystemSoft:LRDATA | 600 | NONE | M(.1)/H/M(.1)/B/M(3.5) // 35 BondSoft:YAMETE!!(SAVE)| 600 | NONE | HEADER/M/BODY#1/BODY#2 // ---------------------------+------+------+------------------------------- // ■ 3パートで1ブロック -> 1ブロック単独で構成 // ---------------------------+------+------+------------------------------- // 14 Dempa:BAIKIN | 600 | NONE | HEAD/M(.26)/BODY/M/FOOT // ---------------------------+------+------+------------------------------- // ■ 1パートで1ブロック -> 2ブロックセットで構成 // ---------------------------+------+------+------------------------------- // 17 Hudson:MOMO#Header ※ | 600 | NONE | // 18 Hudson:MOMO#Body ※ | 600 | NONE | // ---------------------------+------+------+------------------------------- // 32 XTAL:Fantasian#1 ※ | 600 | NONE | // 33 XTAL:Fantasian#2 ※ | 600 | NONE | // ---------------------------+------+------+------------------------------- // ■ 特殊 : 多パート / ボーレート切り替え部分で(変更なしでも)分割 // ---------------------------+------+------+------------------------------- // 37 CarryLab:JE6#Data |備考欄| EVEN | 600 + [USER + 600(1byte)] // ---------------------------+------+------+------------------------------- // ■ 特殊 : 2パート // ---------------------------+------+------+------------------------------- // 38 BondSoft:YAMETE!! | 1200 | 可変 | // ---------------------------+------+------+------------------------------- // ■ 特殊 : 多パート / MARKで分割 // ---------------------------+------+------+------------------------------- // 39 HudsonCOMPAC:FORM/PC | 600 | NONE | // ---------------------------+------+------+------------------------------- // ■ 特殊 : 多パート(実テープは2ブロック) // ---------------------------+------+------+------------------------------- // 40 BrainMedia:FDMAIN (仮)| 可変 | NONE | 2ブロック / 各1パート // ---------------------------+------+------+------------------------------- // 36 BrainMedia:FDSTAGE (仮)| 1200 | NONE | 2ブロック / 多パート // ---------------------------+------+------+------------------------------- // ※GAME-PC と MAI は識別子が同じなので 誤判定の可能性があります // ※Hudson:MOMO は ファイルサイズの情報がヘッダブロックにあるため // ヘッダとボディを別ファイルに分割すると解析できません // ※XTAL:Fantasian は ファイルサイズの情報が#1の前のBASIC // プログラム中にあるため 分割したファイルの解析はできません // ※MicroNet:LUM/Ver1 は ファイルサイズの情報がヘッダパート前のBASIC // プログラム中にあるため 分割したファイルの解析はできません // ※MicroNet:LUM/Ver1,2 のボディは MARK で複数パートに分かれていますが // 分割ロジックが不明なので1パートとしています // 実機ではMARKが無くても読めるようなので使用上の問題はないと思います // ## +----------------------------------------------------------+