ZZ[ZZ-xxxx-y-nn,...]-xxxx-y-nn-comment 
   ↑(条件分岐時のみ)

xxxx: アドレス
	{	 0000H- 0800H : MainMemory		}
	{	 6000H- FFFFH : ROM(書き込みは危険カもしれないので今のところ不可)	}
	{	10000H-1FFFFH : SRAM			}
	{	20000H-2FFFFH : Mapper拡張メモリ	}

y: データのサイズ(バイト数)

nn: データ

*一部のコードで例外あり。





//*********** 以下コードの説明 ************//


ZZ : コード

(mはファミコン内部のメモリ[メインメモリ, SRAM, マッパー拡張メモリ])

・演算 (xxxx = アドレス)
	00: 書き換え	// m = n
	01: 一度書き換え
	02: 加算		// m = m + n
	03: 減算		// m = m - n
	04: 論理積		// m = m & n
	05: 論理和		// m = m | n
	06: 排他的論理和	// m = m ^ n
	07: 左ビットシフト	// m = m << n
	08: 右ビットシフト	// m = m >> n
	09: 乗算		// m = m * n
	0A: 除算		// m = m / n
	0B: 除算の余り	// m = m % n
	0C: コピー		// m[n] = m[xxxx]
			// xxxx = コピー元のアドレス、 nn = コピー先のアドレス, y = コピーするサイズ


	*使用例:
		00-0100-1-0	// アドレス 0100H に0(1バイト)を書き込む
		0C-0200-2-0400	// アドレス 0200H からアドレス 0400Hに数値をコピー(2バイト)



・条件実行命令 (m = メモリ, n = データ)
	
	10: IF  (m &  n)
	11: IF !(m &  n)
	12: IF  (m == n)
	13: IF  (m != n)
	14: IF  (m <  n)
	15: IF  (m >  n)
	16: IF  (m <= n)
	17: IF  (m >= n)
	18: IF  (1)		// 常に実行(幾つかのコードをまとめる時に使用)
				// [30-0000-1-00,32-0100-1-1] ←のように省略可能


	*条件実行命令について。
		条件に合った時にサブコードが実行されます。
		例:(アドレス 0000Hが0(1byte)の時だけ0100Hに1を書き込む)
			12[00-0100-1-1]-0000-1-00	// IF(m[0x0100] == 0)
			11[00-0100-1-1]-0000-1-FF	// IF(m[0x0100]&0xff == 0)

		サブコードは"[ ]"内に書きます。
		','で区切って複数のコードが使用できます。(一応制限はありません)



・繰り返し
	// エミュレータ側の変数
	TM_AD	: アドレス
	TM_DT	: データ
	TM_SIZE	: データのサイズ
	// -------------------

	20: アドレス、データをセット
	     TM_AD = xxxx , TM_DT = nn, TM_SIZE = y
	     
	21: コードを実行(xxxx = 繰り返し数, nn = 実行コード, y = 未使用)
	     xxxxで指定された回数だけnnで指定されたコードを実行します。
	     アドレスはコード20でセットされたTM_AD, データはTM_DTを使用します。
	     コードを実行するたびにTM_SIZEをTM_AD(アドレス)に加算します。
	     
	22: 転送(xxxx = 転送元アドレス, nn = 繰り返し数, y = 未使用)
	     xxxxで指定されたアドレスからTM_ADで指定されたアドレスに数値をコピーします。
	     コードを実行するたびにTM_SIZEをTM_AD,xxxxに加算します。
	     
	23: 書き換え(xxxx = 繰り返し数, nn = 書き込むデータ, y = 未使用)



		・コード20でアドレス,データをまず指定します。
		
	例:
	  ・[20-0000-1-00,22-0100-1-1]
		// アドレス 0000H-0100Hの範囲を0で埋める
	  ・[20-0000-1-00,21-0100-1-1]
		// アドレス 0000H-0100Hまでを0200H-0300Hにコピー



・一時メモリ


	// エミュレータ側の変数
	  TM[32] : 保存メモリ
	// -------------------
	*メモリと一時メモリ評価
	// xxxx = メモリアドレス, n = 一時メモリのアドレス(最大0x1f)
	30: IF  (m[x] &  TM[n])
	31: IF !(m[x] &  TM[n])
	32: IF  (m[x] == TM[n])
	33: IF  (m[x] != TM[n])
	34: IF  (m[x] <  TM[n])
	35: IF  (m[x] >  TM[n])
	36: IF  (m[x] <= TM[n])
	37: IF  (m[x] >= TM[n])

	38: TM[nn]   = m[xxxx]  // メモリを保存			;xxxx = メモリのアドレス, nn = 保存メモリのアドレス
	39:  m[xxxx]  = TM[nn]  // 一時メモリからメモリに書き込み	;xxxx = メモリのアドレス, nn = 保存メモリのアドレス
	3A: TM[xxxx] = nn       // 一時メモリに数値書き込み		;xxxx = 保存メモリのアドレス, nn = 書き込むデータ
	3B: TM[xxxx] += nn      // 一時メモリに加算		;xxxx = 保存メモリのアドレス, nn = 数値
	3C: TM[xxxx] -= nn      // 一時メモリを減算		;xxxx = 保存メモリのアドレス, nn = 数値

	*一時メモリと数値評価
	// xxxx = 一時メモリのアドレス, n = 数値
	40: IF  (TM[x] &  n)
	41: IF !(TM[x] &  n)
	42: IF  (TM[x] == n)
	43: IF  (TM[x] != n)
	44: IF  (TM[x] <  n)
	45: IF  (TM[x] >  n)
	46: IF  (TM[x] <= n)
	47: IF  (TM[x] >= n)
	
	使用例:(一時メモリを使用して、複数の条件があった場合実行する)
		(これはアドレス0x0000が0x10、0x0100が0x20の数値だった場合0x0200に数値0x30を書き込む)

		3A-0000-4-0		; TM[0]を0で初期化
		12[3B-0-4-1]-0000-1-10	; IF (m[0x0000] == 0x10) TM[0] += 1;
		12[3B-0-4-1]-0100-1-20	; IF (m[0x0100] == 0x20) TM[0] += 1;
		42[00-0200-1-30]-0-4-2	; IF (TM[0] == 2) m[0x0200] = 0x30

	#メモ:
		・コードの順番を入れ替えると正常に動作しません。
		・3A-0000-4-0000 は 3A-0-4-0でも可。



・メモリ同士の比較(条件実行)

	// xxxx = メモリのアドレス, nn = メモリのアドレス(右辺), y = 比較するサイズ

	50: IF  (m[x] &  m[n])
	51: IF !(m[x] &  m[n])
	52: IF  (m[x] == m[n])
	53: IF  (m[x] != m[n])
	54: IF  (m[x] <  m[n])
	55: IF  (m[x] >  m[n])
	56: IF  (m[x] <= m[n])
	57: IF  (m[x] >= m[n])