//	*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からの相対パスで記述します
//	  両者とも <AppPath>を先頭に書くことで、カレントパスを基点に記述できます
//	  ※ Macの方へ：
//	    "<AppPath>" から始まるディレクトリ・ファイル名を使いたい場合は、
//	    ./<AppPath>〜 としてください
//
//	------------------------------
//	記述した行以降に適用される (ブロック無視)
//	------------------------------
//	*SRC   path
//	    ・入力ファイルのパス(起点)
//	    ・省略した場合は、CASファイルの場所になります
//
//	*OUT   path                 【 j80：無視 / pcm8001：無視 / tools80：使用 】
//      ・出力ファイルのパス(起点)
//	    ・省略した場合は、CASファイルの場所になります
//	    ・指定したディレクトリが存在しない場合は掘ります
//
//	------------------------------
//	ブロックの区切り
//	------------------------------
//	*TITLE  [タイトル]          【 j80：使用 / pcm8001：使用 / tools80：無視 】
//	    ・j80,cmt8001 用のブロックの区切り,頭出し位置を示します
//	    ・「タイトル」が省略された場合、コンバータが適当な名前をつけます
//	    ・次の *TITLE までを１群として処理します
//	    ・推奨キーマップ、推奨タッチパネルはクリアされます
//	    ・USARTステータスは下記設定にリセットされます
//	        ボーレート ： 無指定(アプリケーション側の設定に従う)
//	        パリティ　 ： なし
//	    ・*TITLE 宣言前にデータがある場合は新規にタイトルを作って登録します
//
//	*OBJ   filename             【 j80：無視 / pcm8001：無視 / tools80：使用 】
//	    ・tools80 用のブロックの区切りです
//	    ・次の *OBJ までを１ファイルにまとめます
//	    ・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表記の２倍になります
//	        キャラクタ長 ： 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
//	    ・波数を省略した場合は、１秒分挿入します
//	    ・長さ 0 の *BLANK,*SPACE,*MARK は ソースデータとしての意味を持ちませんが
//	      *BLANK,*SPACE は 頭出しに影響を与えます (ほぼ INDEX と同じ)
//	      ※頭出し用途には 意図の明確な *INDEX タグを推奨します
//	    ・Ver.5 から、*MARK,*SPACE の挿入ルールが変わりました
//	      各コンバータの説明を参照してください
//
//	*IPL   IPL文字列
//	    ・IPL文字列を N-BASICのファンクション型IPL(cmt) に変換します
//	    ・IPL文字列 の特殊文字
//	      \：エスケープ
//	         1.文字コード指定       「\x」に続けて文字コード(16進/２桁固定)
//	         2.上記以外は次の文字を生で使う
//	    ・文字→文字コードの変換は、Javaの char を int にキャストしています
//	        ASCIIコードレベルで同一グリフに対応しているハズ
//	        半角カナやグラフィック文字は、文字コードで指定してください
//	    ・下記設定の *USART タグが挿入されます
//	        ボーレート : 600
//	        パリティ　 : なし
//	        ※設定は元に戻さないので注意してください
//	    ・前に *SPACE, *MARK が挿入されます
//	    ・後ろに *MARK, *SPACE が挿入されます
//	    ※MEMO
//	      IPL 文字列は、[f・5] 「run<cr>」のすぐ後ろに書き込まれます
//	      放置すると、次回 [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化する行
//	            ディスク用のロード命令を殺すのが主目的です
//	            １行まるごと消すので、必ずしも万能ではありません
//	            *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.bin<tab>4<tab>address=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|                               
//	---------------------------+------+------+-------------------------------
//	 ■ １パートで１ブロック -> １ブロック単独で構成
//	---------------------------+------+------+-------------------------------
//	 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 のみ      
//	---------------------------+------+------+-------------------------------
//	 ■ ２パートで１ブロック -> １ブロック単独で構成
//	---------------------------+------+------+-------------------------------
//	 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        
//	---------------------------+------+------+-------------------------------
//	 ■ ３パートで１ブロック -> １ブロック単独で構成
//	---------------------------+------+------+-------------------------------
//	 14 Dempa:BAIKIN           |  600 | NONE | HEAD/M(.26)/BODY/M/FOOT       
//	---------------------------+------+------+-------------------------------
//	 ■ １パートで１ブロック -> ２ブロックセットで構成
//	---------------------------+------+------+-------------------------------
//	 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)]     
//	---------------------------+------+------+-------------------------------
//	 ■ 特殊 : ２パート
//	---------------------------+------+------+-------------------------------
//	 38 BondSoft:YAMETE!!      | 1200 | 可変 |                               
//	---------------------------+------+------+-------------------------------
//	 ■ 特殊 : 多パート / MARKで分割
//	---------------------------+------+------+-------------------------------
//	 39 HudsonCOMPAC:FORM/PC   |  600 | NONE | 
//	---------------------------+------+------+-------------------------------
//	 ■ 特殊 : 多パート(実テープは２ブロック)
//	---------------------------+------+------+-------------------------------
//	 40 BrainMedia:FDMAIN  (仮)| 可変 | NONE | ２ブロック / 各１パート
//	---------------------------+------+------+-------------------------------
//	 36 BrainMedia:FDSTAGE (仮)| 1200 | NONE | ２ブロック / 多パート
//	---------------------------+------+------+-------------------------------
//	※GAME-PC と MAI は識別子が同じなので 誤判定の可能性があります
//	※Hudson:MOMO は ファイルサイズの情報がヘッダブロックにあるため
//	  ヘッダとボディを別ファイルに分割すると解析できません
//	※XTAL:Fantasian は ファイルサイズの情報が#1の前のBASIC
//	  プログラム中にあるため 分割したファイルの解析はできません
//	※MicroNet:LUM/Ver1 は ファイルサイズの情報がヘッダパート前のBASIC
//	  プログラム中にあるため 分割したファイルの解析はできません
//	※MicroNet:LUM/Ver1,2 のボディは MARK で複数パートに分かれていますが
//	  分割ロジックが不明なので１パートとしています
//	  実機ではMARKが無くても読めるようなので使用上の問題はないと思います
//
##	+----------------------------------------------------------+
