ファミリーベーシック V2.1A


小容量のメモリ構成ながら意外としっかりした作りになっている。 いろいろ不満はあるものの低価格BASICとしては結構な出来と思われる  
NMI割り込み(V−Sync)  PPUからの割り込み  エントリアドレスは$00ED    ゼロページ内にジャンプするのでBASICで任意に変える事が出来ます   セレクト  $CDA7   BASIC $880F   リセット割り込み  電源を入れたり、リセットボタンが押されるとココに飛びます  エントリアドレスは$C400     IRQ割り込み(未使用)  エントリアドレスは$FFF0  割り込みベクタをみると$FFFEが$FFF0となっています   AFFF0:CLI         DB  $5C,$60,00    この$5Cはどうやら未定義命令で  次の指定したアドレスのメモリを読むだけで  レジスタ、フラグには影響しないようです  他の未定義命令でも同様なものがありますが  $4C(JMP)を実行させない為に  $5Cを使用したと思われます  ただしこのベクタの後はデータなのでハングアップします    <例>この場合は$9000へジャンプする   DB  $5C,$00,$80 ;$5C→$4Cだと$8000へジャンプ   JMP $9000       ;4C 00 90    
ROMの回路図    PRG ROMにはHVC−FB1−2 A、HVC−FB1−2 Bと印字(バージョンで変わります)  CHR ROMにはHVC−FB1−0と印字されています。(CHR ROMはV1.0と同じ)  単3電池を2本使い、RAMの内容をバックアップしています。  ワーキングRAMはS−RAMでスイッチの切り換えでバックアップスイッチ ONでスタンバイモードにします。  スタンバイモードではデータを書き込む事が出来ないのを利用してBASICではRAM領域にデータの書き込みチェック   データの書き込みが出来れば  スイッチ OFF、   データの書き込みが出来なければスイッチ ON  バックアップスイッチの判断をしています。  またS−RAMのアドレスは$6000から配置されていますが、ミラーを利用して  $7000−$77FFとして使用しています。  
ファミリーBASICキーボードの回路図       本体前面にある15ピンからキーボードを接続するためどうしても複雑になります IC4017の RSTはOUT0で、1にすることでIC4017のカウンタをリセット IC4017の/CKEはOUT1で、1から0にすれば IC4017のQ0−9が順番にカウント(選択)されます IC4019に繋がっているキーデータP3 1 〜 P3 8をポート$4017 D4−1で読みます 1度に読み込むデータは4ビットなので2回読むことになります 下位、上位データを読み込む事でIC4017の/CKEが0から1になり 次のキーラインを読む為下位データを選択した時点で/CKEは1から0になり キーラインが新しくカウント(指定)されます   キーボード 出力ポート  4016 d2:OUT2 デバイスの選択          1=キーボード、0=CMT READ  4016 d1:OUT1 データ セレクト&ラインカウンタ 1=上位データ、0=下位データ  4016 d0:OUT0 キーライン(P2)のリセット   1=行う   、0=行わない   入力ポート  4017 d4:キーデータD7(上位の場合)/キーデータD3(下位の場合)  4017 d3:キーデータD6(上位の場合)/キーデータD2(下位の場合)  4017 d2:キーデータD5(上位の場合)/キーデータD1(下位の場合)  4017 d1:キーデータD4(上位の場合)/キーデータD0(下位の場合)    キーボードはロッジクで組まれ、タイミングをソフトで行う必要があります。    1.キーラインのリセット      $4016:$05(OUT2=1、OUT1=0、OUT0=1)、NOP*6     *2.下位データ セレクトのセット      $4016:$04(OUT2=1、OUT1=0、OUT0=0)、ウエイト      3.下位データの読み込み      $4017にあるキーデータ(下位)を読み、ワークにセット(右シフト1回してAND #$0Fにしてセット)      4.上位データ セレクトのセット      $4016:$06(OUT2=1、OUT1=1、OUT0=0)、ウエイト      5.上位データの読み込み      $4017にあるキーデータ(上位)を読み、ワークにセット(左シフト3回してAND #$F0にしてセット)    これを*2の所でループ(計9回繰り返し)して、全てのキースキャンが出来ます。  ROM$AF9B−$AFE3を参照   CMT 出力ポート  4016 d2:OUT2 デバイスの選択          1=キーボード、0=CMT READ  4016 d0:OUT0 CMTライト データ   入力ポート  4016 d1:CMTリード データ    シャープのMZ、X1と同じくPWM方式でソフトでタイミングを行います。  テープフォーマットもかなりMZ、X1に近いです。  BASIC自体はBASICプログラムしかセーブ・ロードしかできません。  バイナリファイルをセーブ・ロードする場合はプログラムを自作する必要があります。     インフォメーションブロック(FCB)     ”0”*20000     テープマーク (”1”*40+”0”*40)     ”1”     インフォーメーション 128バイト     チェックサム 2バイト     ”1”     データブロック     ”0”*20000     テープマーク (”1”*20+”0”*20)     ”1”     データブロック     チェックサム 2バイト     ”1”      1バイトデータの内容       ”1”、d7、d6、d5、d4、d3、d2、d1、d0      インフォメーションブロック       属性        1バイト($02=BASIC、$03=BG−GRAPHIC)       ファイルネーム  16バイト 16文字以内の場合 最後にエンドマーク$00       予備        1バイト $00       長さ        2バイト       ロードアドレス   2バイト       実行アドレス    2バイト       空き      104バイト    (注)チェックサムは単純にデータを足したものではなく、     1バイトデータの各ビットの内容の’1’の数になります。     データが$FFなら+8、$C0なら+2、$00なら+0になります       BG−GRAPHICデータは     BG2の内容をCPU $0700−$07FFHへ転送したデータを4分割でセーブ     BG2へ転送するデータをCPU $0700−$07FFHに4分割でロード、PPUへ転送  
キャラクタ スプライトのキャラクタになります     BGのキャラクタになります これがBASICのアスキーコードの基準となります アスキーコードは$00−$1Fのキャラクタは表示されずコントロールコードとして使用されます ただしPRINT文には反映されません   $00=Null                  $10=^P *SHIFT+F5   $01=^A INSモードのON/OFF      $11=^Q *SHIFT+F6   $02=^B *SHIFT+F1          $12=^R INS   $03=^C BREAK(プログラム停止は出来ない)$13=^S   $04=^D 画面の初期設定            $14=^T   $05=^E カーソル以降1行分の消去       $15=^U   $06=^F *SHIFT+F2          $16=^V カナ モードにする   $07=^G BEEP音を出す           $17=^W 英数字モードにする、*SHIFT+F7   $08=^H DEL                $18=^X *SHIFT+F8   $09=^I                    $19=^Y   $0A=^J ラインフィールド           $1A=^Z カーソル以降画面下の消去   $0B=^K HOME               $1B=ESC   $0C=^L 画面クリア              $1C=カーソル右   $0D=^M RETURN             $1D=カーソル左   $0E=^N *SHIFT+F3          $1E=カーソル上   $0F=^O *SHIFT+F4          $1F=カーソル下      *SHIFT+Fnは英数モードキー入力で使用     BG GRAPHIC SELECT  キャラクタを書きます     カーソルキー       カーソルの移動   [RETURN]      配色番号の変更   [INS]         マーカー左移動   [DEL]         マーカー右移動   [HOME]        グループ +1   [SHIFT]+[HOME] グループ −1   [D]           キャラクタの消去   [ESC]         ファンクションメニュー    グループ表      COPY  キャラクタのコピーを行います     カーソルキー       カーソルの移動   [INS]         キャラクタの取得   [DEL]         キャラクタの複製   [ESC]         ファンクションメニュー   MOVE  キャラクタの移動を行います     カーソルキー       カーソルの移動   [INS]         1回目 キャラクタの取得                2回目 キャラクタの消去   [DEL]         キャラクタの移動   [ESC]         ファンクションメニュー   CLEAR  画面(BG2)の消去を行います     [SPACE]       画面消去の実行   [ESC]         ファンクションメニュー   FILE  CMTのロード・セーブを行います  画面の指示に従いセーブかロードを決め  ファイルネーム(最大16文字)を入力して[RETURN]   CHAR  文字の入力を行います     [ESC]         ファンクションメニュー   ファンクションメニュー   カーソルキー上 カーソル上の移動   カーソルキー下 カーソル下の移動   [SPACE]  メニュー(MODE)の実行  
ABS(数式)  絶対値を求める   ASC(文字列)  文字列の最初の1文字目をキャラクタコードの数値に変換  ヌルストリングの場合0になる   BEEP  音を鳴らす   CALL アドレス アドレス…&H0000〜&HFFFFまたは−32768〜32767  マシン語のサブルーチンの実行   CGEN n n…0〜3  BG、スプライト面にキャラクタの割り当てを行う  ポート$2000 d4−3の設定になります    ・−−−−−−−−−−−−・  |n|BG面|スプライト面|  |−+−−−+−−−−−−|  |0| 1 | A    | A=マリオ等のスプライトキャラクタ  |1| 1 | B    | B=英数字等のBG   キャラクタ  |2| 2 | A    |  |3| 2 | B    | デフォルト、^DはCGEN2の設定  ・−−−−−−−−−−−−・   CGSET m,n m…0〜1 BG面 n…0〜2 スプライト面    BG、スプライト面のパレットグループの指定  *BG GRAPHICで描いた背景をそのままの色にしておく場合は   CGSET1,1にする   CHR$(数式)  数値0〜255または&H0〜&HFFをキャラクタコードして変換する   CLEAR  変数、配列のクリアを実行   CLEAR アドレス  BASICで使用するメモリ上限アドレスの指定   CLS  テキスト画面をクリア   COLOR x,y,n x…カラム 0〜27 y…行   0〜23 n…配色番号 0〜3    テキスト画面のカラー指定   CONT  プログラムの再開   CSRLIN  カーソルY座標の取得   CUT n0[,n1,n2,n3,n4,n5,n6,n7]  n0〜n7…DEF MOVEで定義した番号 0〜7    MOVEで動いたスプライトを停止   DATA 定数[,定数,定数,……]  定数…数値または文字列    READ文で使用するデータの定義   DEF MOVE(n)=SPRITE(a,b,c,d,e,f)  n…キャラクタの動作番号 0〜7  a…キャラクタの種類   0〜15  b…方向  c…速さ   0=256フレーム毎、1(最高速)〜255(最低速)  d…移動量  0=表示しない   、1〜255(移動量)  e…優先順位 0=BG前     、1=BG後  f…配色番号 0〜3(CGSETで指定した番号)     スプライトの動作の定義を行う     キャラクタの動作番号    0…マリオ       6…車      12…レーザー    1…レディ       7…スピナー   13…シェルクーパー    2…ファイターフライ  8…スターキラー 14…サイドステッパー    3…アキレス      9…スターシップ 15…ニットピッカー    4…ペンペン     10…爆発    5…ファイアーボール 11…ニタニタ     方向    812    7■3  ■=スプライト    654  0=停止状態     速さ    c=フレーム毎1/30秒 × 2ドット(斜め移動ではx、yとも2ドット)     移動量    d×2ドットの移動量   DEF SPRITE n,(a,b,c,d,e)=f  n…定義するスプライト番号 0〜7  a…配色番号 0〜3(CGSETで指定した番号)  b…合成型  0=8×8キャラクタ、1=16×16キャラクタ  c…優先順位 0=BG前     、1=BG後  d…X軸反転 0=反転しない   、1=反転する  e…Y軸反転 0=反転しない   、1=反転する  f…b=0 8×8キャラクタの場合    文字列 ”i”    文字式 CHR$(i)    文字変数 1キャラクタ分のデータ      b=1 16×16キャラクタの場合    文字列 ”ijkl”    文字式 CHR$(i)+CHR$(j)+CHR$(k)+CHR$(l)    文字変数 4キャラクタ分のデータ      b=1 16×16キャラクタのfのデータ     ・−−−・     |i|j|     |−+−|     |k|l|     ・−−−・    スプライトの定義を行います  定義可能のスプライト番号は0〜7の8個   DIM 配列名(m1[,m2])[,配列名(n1[,n2])]  配列宣言を行います  配列名は数値変数、文字列変数の両方可   END  プログラムを終了、BASICコマンド待ちへ行きます   ERA n0[,n1,n2,n3,n4,n5,n6,n7]  n0〜n7…DEF MOVEで定義した番号 0〜7    MOVEで動いたスプライトを停止、消去を実行   FOR i=l TO m [STEP s] NEXT  i…ループ変数  l…初期値  m…終了値  s…増分値(負でも可)    FOR〜NEXT間の処理を繰り返します  NEXTの後にループ変数名をつけるとエラーになります   FRE  ユーザメモリの未使用サイズの取得   GOTO 行番号  指定した行番号へジャンプ   GOSUB 行番号  指定して行番号をサブルーチンとして呼び出す   HEX$(n)  n…数式 −32768〜+32767    数式を16進数文字列に変換   IF 式 THEN 行番号または文  倫理式による分岐の実行  条件が成立すれば THEN以降の行番号へジャンプ、または文を実行     成立しなければ次の行番号へ    真=0、偽=0以外   INKEY$  キーボードから一文字入力の実行  実行時キーが押されていれば押されたキーのキャラクタコードが入る        押されていなければヌルストリング0が入る    キャラクタコードは$00−$1Fを除く   INKEY$(0)  キーボードから一文字入力の実行  カーソルブリンクになり、キーが押されるまで待ちます  押されたキーのキャラクタコードが入る    キャラクタコードは$00−$1Fを除く   INPUT 変数[,変数…] INPUT 文字列,変数[,変数…] INPUT 文字列;変数[,変数…]  文字列…メッセージ  変数……キーボードから入力した数値または文字を入れる変数    キーボードから文字入力を行い、数値または文字を変数に代入  INPUT文の文字列の後の;は文字列の後に?が表示されます               ,は文字列の後に何も表示されません  INPUTで指定した変数の数と入力したデータの個数は同じでないといけません  区切りは,になる為文字列で,を入れたい場合”,”とダブルクォーテションを付ける  数値入力で文字を入力した場合、その文字が変数扱いになります(ただし値は0)   KEY n,文字列  n………ファンクションキー番号 1〜8  文字列…定義する文字列15文字以内    ファンクションキーの内容を定義します  コントロールコードやキーボードで入力出来ないキャラクタを定義する場合  はCHR$(n)を使用します   KEYLIST    定義されているファンクショキーの内容を表示します  コントロールコードは()内に表示されます($00−$1Fでは+$40で表示)  リターン(コントロールコード$0D ^M)の場合(M)と表示   LEFT$(文字列,n)  文字列…31文字まで  n………文字列から取り出す長さ    文字列の左端からn文字まで取得  nが文字列より大きい場合は文字列全て  nが0      の場合はヌルストリング   LEN(文字列)    文字列の長さを取得 0〜31  文字列が0の場合はヌルストリング  コントロールコード、スペースも文字列の長さに加わる   LINPUT 文字変数 LINPUT 文字列,文字変数 LINPUT 文字列;文字変数  文字列……メッセージ  文字変数…キーボードから入力した文字を入れる文字変数    キーボードから文字入力を行い、文字を文字変数に代入  LINPUT文の文字列の後の;と,は同じ動作をします  INPUT文と違い”,”とダブルクォーテションを入れる必要はなし  文字列も文字変数の最初に入る為  入力可能な文字は文字列と文字変数を含めて31文字まで   LIST[m][−n] LIST[m][,n]  m…表示する初めの行  n…表示する終りの行    メモリにあるBASICプロラムの表示   LOAD[”ファイル名”]    カセットにあるBASICプロラムのロード  ファイル名は16文字まで  BG画面のロードはBG GRAPHICで行う   LOAD?[”ファイル名”] LOADPRINT[”ファイル名”]    カセットでセーブしたBASICプロラムのベリファイ  ファイル名は16文字まで   LOCATEx,y  x…水平方向 カラム 0〜27  y…垂直方向 行   0〜23    カーソルを指定の位置へ移動  BASICのシステム上、画面全体の移動不可   MID$(文字列,m,n)  文字列…文字列 最大31文字  m………文字列の最初を1として取得開始の文字位置  n………取得する文字の長さ    指定した文字列のmからm+nの文字を取得   MOVEn0[,n1,n2,n3,n4,n5,n6,n7]  n0〜n7…DEF MOVEで定義した番号 0〜7    DEF MOVEで定義された動作の開始   MOVE(n)  n…0〜7 DEF MOVEで定義したキャラクタの動作番号    MOVE命令で動いているキャラクタの動作が完了したか調べる    0=動作完了   −1=動作中   NEW  BASICプログラムの消去   ON 式 GOTO 行番号[,行番号,行番号…]  式の値によって指定された行へジャンプ   ON 式 GOSUB 行番号[,行番号,行番号…]  式の値によって指定された行へサブルーチンジャンプ   ON 式 RETURN 行番号[,行番号,行番号…]  式の値によって指定された行へ復帰   ON 式 RESTORE 行番号[,行番号,行番号…]  式の値によってデータを指定   PALETm n,c1,c2,c3,c4  m……B=BGカラーを選択、S=スプライトカラーを選択  n……配色番号 0〜3  c1…バックドロップの色 ただしn(配色番号)=0で有効  c2…パレット+1のカラーコード  c3…パレット+2のカラーコード  c4…パレット+3のカラーコード    配色番号のカラーの設定   PAUSE[n]  n…0〜32767    BASICプログラムの一時休止  nを省略すると何かキーが押されるまで待つ   PEEK(アドレス)    指定したメモリからデータの取得   PLAY 文字列    文字列を演奏プログラムとして実行  ”チャンネルA:チャンネルB:チャンネルC”の形式になり  各チャンネルに下記のコマンドが使用可  ただしチャンネルCではエンベロープは無効(Yn、M1)  T、Y、M、V、Oコマンドは値の維持可     T…テンポ (速い)1〜8(遅い)   Y…デューティ比      0=12.5%、2=50.0%      1=25.0%、3=75.5%   M…エンベロープ 0=オフ、1=オン   V…音量またはエンベロープの長さ      M0の場合 音量少 0〜15 音量大      M1の場合 短い  0〜15 長い   O…オクターブ (低音)0〜5(高音)   R…休符 後ろに長さを指定     C〜B…音階 後ろに長さを指定    C、#C、D、#D、E、F、#F、G、#G、A、#A、B       0〜9…長さ    0…  32分音符  5…  4分音符    1…  16分音符  6…付点4分音符    2…付点16分音符  7…  2分音符    3…  8分音符  8…付点2分音符    4…付点8分音符  9…   全音符     :…重音 次のチャンネルの演奏データ     *デフォルト O3T4M0V15、音の長さ5   POKE アドレス,データ[,データ,データ…]  データ…0〜255 または &H00〜&HFF    指定したメモリのデータを書き込む   POS(0)    画面のカーソル水平位置(X座標)の取得  ()内の値は何でも構わない   POSITION n,x,y  n…DEF MOVEで定義した動作番号 0〜7  x…水平方向 0〜255(有効範囲 0〜244)  y…垂直方向 0〜255(有効範囲 5〜220  デフォルト値 x=120,y=120    MOVE文でスプライトを動かす為の初期位置の設定   PRINT [定数][;[定数]……]       [変数][,[変数]  ]       [式 ][ [式 ]  ]    画面に計算結果等を画面に出力  続けて出力する場合,か;を使用    ,は表示画面行を8文字で分割した区切りの最初に表示する  前のデータが区切りを超えると次のデータは次の区切りになる   |8文字|8文字|8文字|4文字|…1行    ;はつづけて出力  ただし正の数値表示の場合、最初にスペースが入る    最後の;では次のPRINT文の内容を続けて表示可  ただしカーソルを移動する命令が実行されたら無効    PRINTのみだと1行改行   READ 変数[,変数……]    DATA文にあるデータを変数に代入    変数と代入データ型は同じでないとエラー  読み込むデータが少ないとエラー    RESTORE指定がないと  最初のREADは最初のデータを読み  次のREADは続けて次のデータを読む   REM[コメント] ’[コメント]    BASICプログラム内にコメントを書く(行内範囲まで)  REMと’は別扱いになっており  GOSUB命令の後には’のみ使用可   RESTORE[行番号]    次に読むREAD文のDATAの指定  RESTOREのみの場合、1番最初にあるDATA文を指定   RETURN[行番号]  サブルーチンからの復帰  行番号がある場合、その行に復帰  行番号がない場合、GOSUBされた所に復帰   RIGHT$(文字列,n)  文字列…31文字まで  n………文字列から取り出す長さ    文字列の右端からn文字まで取得  nが文字列より大きい場合は文字列全て  nが0      の場合はヌルストリング   RND(n)  n…数式または整数1〜32767    指定した数式または整数の範囲内の乱数の発生   RUN[行番号]    変数を全てクリア、BASICプログラムの実行    行番号ありの場合、その行から実行  行番号なしの場合、最初の行から実行   SAVE[”ファイル名”]    BASICプロラムをカセットにセーブ  ファイル名は16文字まで(省略可)  BG画面のセーブはBG GRAPHICで行う   SCR$(x,y[,c])  x…水平方向 カラム 0〜27  y…垂直方向 行   0〜23  c…配色番号     0=配色番号を取得しない(省略すると0)             1=配色番号を取得する    BG−GRAPHICで描かれた文字または絵の取得   SGN(n)  n…数式または整数ー32768〜32767    数式また整数の値の符号の取得    1=正    0=0   −1=負   SPRITEn[x,y]  n…スプライト番号 0〜7  x…スプライト水平座標 0〜255(有効範囲 0〜240)  y…スプライト垂直座標 0〜255(有効範囲 5〜220)    DEF SPRITEて定義されているスプライトを指定の位置に表示  座標の位置を省略すると消去    同一座標に複数のスプライトを表示した場合  スプライト番号が小さいものが手前に表示される    スプライトは水平に4つ(8文字分)まで表示可  超えると重なる水平部分は表示されない   SPRITE OFF  全スプライトの表示オフ   SPRITE ON  全スプライトの表示オン   STICK(n)  n…0=Iコントローラ    1=IIコントローラ    コントローラ十字ボタンの入力状態の取得     8  2 1   4  0=何も押されていない    同時入力の場合、対応する数字が加わる   STOP    BASICプログラムの中断  変数はクリアされないのでCONTで次の文の再実行可   STRIG(n)  n…0=Iコントローラ    1=IIコントローラ    コントローラSELECT、TART、B、A字ボタンの入力状態の取得     SELECT=2(Iコントローラのみ)   START =1(Iコントローラのみ)   B     =4   A     =8    同時入力の場合、対応する数字が加わる   STR$(x)  x…数式    数式の値を文字列に変換  正の数の場合は先頭にスペースが入る   SWAPn,m  n…変数1  m…変数2    2つの変数の値を交換  ただし交換する変数の型は同一でないといけない   SYSTEM  GAME BASICモードにする  BASICプログラムは保護される   VAL(文字列)  文字列…数字の文字列 −32768〜32767                &H0〜&HFFFF    文字列は数値に変換  ただし文字列の最初の文字が+−&または数字以外なら0となる  文字列の中に16進数の文字以外があれば、それ以降は無視される   VIEW    BG GRAPHIC画面をバックグランド面(テキスト)へコピー  カーソール位置はホームへ戻る    BG GRAPHIC画面の色をそのまま持ってくる場合  CGSET1,1を使用   XPOS(n)  n…DEF MOVEで定義されたスプライト動作番号 0〜7    DEF MOVEで定義された動作番号の水平位置の取得   YPOS(n)  n…DEF MOVEで定義されたスプライト動作番号 0〜7    DEF MOVEで定義された動作番号の垂直位置の取得  
数の表現範囲  10進 −32768 から 32767  16進 &H0000 から &HFFFF   変数  英字で始まる2文字を識別(255文字まで表記可)   行番号の範囲  0 から 65534 最大255桁   配列の大きさ  2次元配列まで(メモリ範囲内で要素制限無し)   GOSUB〜RETURN ネスト  メモリ範囲内で制限なし   FOR〜NEXT     ネスト  メモリ範囲内で制限なし   演算の優先順位   1. ()で囲まれた式   2. 関数   3. * /   4. MOD   5. + −   6. = <> > < >= <=   7. NOT   8. AND   9. OR  10. XOR   エラーメッセージ  NF=NEXT without FOR      :FORが無いがNEXTがある  SN=Syntax error          :文法間違い  RG=RETURN without GOSUB  :GOSUBが無いがRETURNがある  OD=Out of DATA           :DATAが用意されていない  IL=Illegal functioncall  :ステートメント、関数の呼び出し間違い  OV=Overflow              :演算結果が許容範囲オーバー  OM=Out of memory         :メモリ不足になった  UL=Undefined line Number :指定した行番号が無い  SO=Subscript out of range:配列の添字が規定外  DD=Duplicate Definition  :配列の2重定義  DZ=Division by zero      :0の除算を実行  TM=Type mismatch         :変数の型が合わない  ST=String too long       :文字が31文字超えた  FT=Formula Too complex   :式が複雑すぎる  CC=Can’t countinue       :CONTでプログラムの再開出来ない  MO=Missing operand       :最低限必要なパラメータが無い  TP=Tape read ERROR       :CMTから正しくデータが読めない  
クィックスタート Tキーを押しながら起動(リセット)、 Tキーを離すと直接BASICメニュー画面に飛びます ただしバックアップRAM領域のテストメモリを行うので プログラムメモリの内容は全て$55に書き込まれます プログラムを残しながらクィックスタートを行う場合は BACK UP SWITCHをONにしてメモリを保護してから起動 起動終了後、BACK UP SWITCHをOFFにします  
変数領域 BASICプログラム後に配置され $001D−$001Eの内容から$001F−$0020までが領域となります  実数   $02、変数名2バイト、数値(下位、上位)    文字列   $03、変数名2バイト、長さ(下位、上位)、文字列32バイト(エンドマーク$00含む)    大きさは固定 A$=”0”とA$=”0123”は同じ大きさになります    配列 実数   $82、変数名2バイト、1次(下位、上位)、数値(2バイトごと)...     $82、変数名2バイト、1次(下位、上位)、2次(下位、上位)、数値(2バイトごと)...      1次配列データはa(0)  、a(1)  …の順    2次配列データはa(0,0)、a(1,0)…の順   中間言語  $0B 行番号 次の2バイト(16進数表記      下位、上位の順)  $11 16進数 次の2バイト(&Hまたは&以降の数値 下位、上位の順)  $12 実数  次の2バイト(16進数表記      下位、上位の順)  $22 ”  $2C ,  $2D − (DATA、LIST用)  $27 ’  $28 (  $29 )  $3A :  $3B ;    $80 GOTO    $9146 | $A0 VIEW     $A932  $81 GOSUB   $90C6 | $A1 MOVE     $C0CE  $82 RUN     $857C | $A2 END      $820B  $83 RETURN  $9126 | $A3 PLAY     $9A1D  $84 RESTORE $98E0 | $A4 BEEP     $B30F  $85 THEN    $83A6 | $A5 LOAD     $97FC  $86 LIST    $85AF | $A6 SAVE     $978C  $87 SYSTEM  $80D7 | $A7 POSITION $C0B6  $88 TO      $836D | $A8 KEY      $95AA  $89 STEP    $836D | $A9 COLOR    $BA4E  $8A SPRITE  $A7F3 | $AA DEF      $A887  $8B PRINT   $8740 | $AB CGEN     $A6CA  $8C FOR     $927E | $AC SWAP     $9496  $8D NEXT    $930D | $AD CALL     $918C  $8E PAUSE   $9198 | $AE LOCATE   $91CA  $8F INPUT   $93C2 | $AF PALET    $A6EA  $90 LINPUT  $94F6 | $B0 ERA      $C0ED  $91 DATA    $8343 |   $92 IF      $9204 |   $93 READ    $994D |   $94 DIM     $964E |   $95 REM     $8343 |   $96 STOP    $86DA |   $97 CONT    $8717 |   $98 CLS     $AB75 |   $99 CLEAR   $9226 |   $9A ON      $954D |   $9B OFF     $836D |   $9C CUT     $C0F0 |   $9D NEW     $8382 |   $9E POKE    $91DF |   $9F CGSET   $A746 |     $CA ABS     $A369  $CB ASC     $A40A  $CC STR$    $A485  $CD FRE     $A31A  $CE LEN     $A3FF  $CF PEEK    $A358  $D0 RND     $A39F  $D1 SGN     $A379  $D2 SPC     $836D  $D3 TAB     $836D  $D4 MID$    $A5FB  $D5 STICK   $A6AA  $D6 STRIG   $A6B9  $D7 XPOS    $A346  $D8 YPOS    $A34F  $D9 VAL     $A4BE  $DA POS     $A32E  $DB CSRLIN  $A2F3  $DC CHR$    $A461  $DD HEX$    $A4B5  $DE INKEY$  $A520  $DF RIGHT$  $A5BD  $E0 LEFT$   $A574  $E1 SCR$    $A41D    $EF XOR  $F0 OR  $F1 AND  $F2 NOT  $F3 <>  $F4 >=  $F5 <=  $F6 =  $F7 >  $F8 <  $F9 +  $FA −  $FB MOD  $FC /  $FD *     プログラムの格納 <例>  10 FOR I=0 TO 10  20 PRINT ”TEST ”;   30 NEXT   上記のプログラムだと下記の様に格納されます    703E:11                     ;1行の長さ……イ  703F:0A 00                  ;行番号 10…ロ  7041:8C 20 49 F6 12 00 00 20;プログラム……ハ       88 20 12 0A 00  704E:00                     ;エンドマーク    704F:0E                     ;1行の長さ  7050:14 00                  ;行番号 20  7052:8B 20 22 54 45 53 54 20;プログラム       22 3B  705C:00                     ;エンドマーク    705D:07                     ;1行の長さ  705E:1E 00                  ;行番号 30  7060:8D                     ;プログラム  7061:00                     ;エンドマーク    7062:00 00                  ;最終マーク   イ…このアドレス+1行の長さで次の行番号のアドレスになります   このとき次の行番号のアドレスの内容が$00だとプログラムの格納は終了となります ロ…行番号 16進数で下位、上位の順 10行なので$000Aを$0A、$00とする ハ…プログラム本体中間言語で格納   $8C       :FOR   $20       :’ ’   $49       :I   $F6       :=   $12 00 00 :0 (実数)   $20       :’ ’   $88       :TO   $20       :’ ’   $12 0A 00 :10(実数)10なので16進数で$000A   $00       :エンドマーク 行の終わり     変数の配置 RUNすると変数Iが使用されるのでBASICプログラムの後ろに変数エリアが配置されます   7064:02 49 00 ;変数の型$02、変数名I(アスキーコード)      mm nn    ;変数の数値      
セレクト ワーク $0000:      VSYNC用 文字列ポインタ下位             VSYNCタスク$06用 メッセージ データ             VSYNCタスク用 コマンド比較 アドレス $0001:      VSYNC用 文字列ポインタ上位   $0002:      VSYNC タスク アドレス下位             データ アドレス下位 $0003:      VSYNC タスク アドレス上位             データ アドレス上位             仮想OBJポインタ下位 $0004:      データ レングス0(文字列データの長さ)             仮想OBJポインタ上位   $0005      :データ レングス1(文字列データブロック分) $0006−$0007:VSYNCタスク コマンド ポインタ(下位、上位) $0010      :ポート$2001の内容0 $10 $0011      :ポート$2001の内容 $0012      :ポート$2005の内容(水平) $0013      :ポート$2005の内容(垂直) $0018      :スペシャルキー フラグ $FF=オン、$00=オフ $0020      :ロジックカウンタ $00 (メイン) $0021      :ロジックカウンタ $01 (キーリピート) $0022      :ロジックカウンタ $02 (両端の長方形の色を暗くする) $0023      :ロジックカウンタ $03 $0024      :ロジックカウンタ $04 $0025      :ロジックカウンタ $05 $0026      :ロジックカウンタ $06 $0027      :ロジックカウンタ $07 $0028      :ロジックカウンタ $08 $0029      :ロジックカウンタ $09 (次の1文字を書き始める) $002A      :ロジックカウンタ $0A ($00で次の行のメッセージを書く) $002B      :ロジックカウンタ $0B $002C      :ロジックカウンタ $0C (カラーパネル) $002D      :ロジックカウンタ $0D (アイドリング $00で時間切れ、ウェイトに使用) $002E−$002F:各種ボードのカーソル位置(上位、下位) $0030      :カーソルOBJのX座標 $0031      :カーソルOBJのY座標 $0032      :    カーソル位置のBG PPUアドレス上位 $0033      :DEL カーソル位置のBG PPUアドレス上位 $0034      :    カーソル位置のBG PPUアドレス下位 $0035      :DEL カーソル位置のBG PPUアドレス下位 $0036      :ボード $00=カリキュレータ、$01=メッセージ、$03=セレクト、$04=ミュージック $0037      :キーデータ(ASCII) $0038      :キーデータ(ASCII) $0039      :キーデータ(ASCII) $003B      :VSYNCカウンタ (NMIが掛かる事に+1) $0040      :押されたキー $0042      :メッセージボード 指定している行 $0043      :ボード ネーム インデックス $00=BASIC、$01=カリキュレータ、$02=ミュージック、$03=メッセージ $0046      :BACK UP SWITCHチェック フラグ $00=チェックしない、$AA=チェックする $004C      :INSモードスイッチ $FF=オン、$00=オフ $004F      :BG1またはBG2の上位アドレスの指定 $20=BG1、$24=BG2 $0050      :カナキースイッチ $FF=オン、$00=オフ $0051−$0058:乱数ジェネレート レジスタ $0060      :VSYNCコマンド(第1データ VSYNCタスクnn)              $00     =新しいVSYNCコマンドを実行              $01から$FF=VSYNCタスクのパラメータを読む $0062      :VSYNCコマンド nn $0064      :VSYNCコマンド アドレス $0065      :文字列インデックスカラー              $00=BG  カラー              $01=OBJ カラー $0066      :ファンクションキーフラグ              $FF=オン              $00=オフ $0067      :ファンクションキーデータ              d7−4:押されたFnのn−1の値              d3−0:押されたFnの文字数 $0068      :ファンクションキースイッチ              $FF=オン              $00=オフ $006B      :セレクト  VSYNCコマンド(第2データ) $006D      :キーマトリックス ビットデータ(押されたビット)             ファンクションキー              $F0=F1キー              $F1=F2キー              $F2=F3キー              $F3=F4キー              $F4=F5キー              $F5=F6キー              $F6=F7キー              $F7=F8キー               キーマトリックス              $07=d7が1              $06=d6が1              $05=d5が1              $04=d4が1              $03=d3が1              $02=d2が1              $01=d1が1              $00=d0が1   $006E      :キーマトリックス ラインナンバ 0から8 $006F      :CTRL フラグ $FF=オン、$00=オフ $0070      :SHIFTフラグ $FF=オン、$00=オフ $0071      :GRPH フラグ $FF=オン、$00=オフ $0072      :カナ   フラグ $FF=オン、$00=オフ   $0073      :VSYNCタスク内初期化フラグ $00=初期化しない、$01=初期化する $0077      :入力フラグ           $02=コマンド入力、$FF=名前入力 $0078      :画面のコントロール              NMIで参照され画面のオン・オフの実行               $00    =BG+OBJオン               $01−$FF=BG+OBJオフ $007A      :RAMテストNMIフラグ    $FF=初回NMI、$00=2回目以降のNMI $007B      :RAMテストデータ              $00=RAMテストを実行していない              $03=RAMテスト Ok              $55=テストしたデータ              $AA=テストしたデータ   $0088      :どのボードか訊ねる(VSYNCタスク$06用 [C0]メッセージ )              $0E=カクシュ ボード              $0F=GAME BASIC              $10=カリキュレータ ボード              $11=ミュージック ボード              $12=メッセージ ボード $008A      :メッセージナンバ              VSYNCタスク$08、$0Eでセットされ              NMI割り込みが掛かるとVRAMにデータが書き込まれる               $00=$0301からの文字列               $01=セレクト 画面               $02=カリキュレータ ボード画面               $03=’RAM OK’を表示               $04=メッセージ ボード画面               $05=ボード ライン0、ライン1、カラー               $06=ボード     、ライン1、カラー               $07=ボード     、    、カラー               $08=ボードの外枠               $09=ミュージック ボード画面   $00B4      :コマンド入力用 コマンドと比較して合っている数 $00B5      :コマンド入力用 コマンドと比較して合っている数   $00B7      :メッセージ用 表示する位置インデックス($00B9から$00BAにセット)              $00=$20C6              $01=$20E6              $02=$2106              $03=$2126              $04=$2146              $05=$2166              $06=$2186              $07=$21A6              $08=$2246              $09=$2266              $0A=$2286 $00B9−$00BA:メッセージ用 PPUアドレス上位、下位 $00BB      :コンピュータ パネル用 PPUアドレス 下位             カーソル右端 フラグ $00=右端を超えていない、$01=右端を超えた $00BC      :コンピュータ パネル用 PPUアドレス 上位   $00C3      :VSYNCコマンド(第3データ VSYNCタスク$06用メッセージナンバ) $00C5      :メッセージ データ インデックス $00C6      :メッセージ フラグ $00=表示終了、$01=表示、$FF=表示初期化 $00C8      :入力コマンド ファンクションキー データ インデックス   $00D0      :ウラナイの西暦 千の桁 $00D1      :ウラナイの西暦 百の桁 $00D2      :ウラナイの西暦 十の桁 $00D3      :ウラナイの西暦 一の桁 $00D4      :ウラナイの月  十の桁 $00D6      :ウラナイ    $0D $00D7      :ウラナイの日  十の桁 $00D8      :ウラナイの日  一の桁 $00D8      :ウラナイ    $0D   $00E0      :キー入力モード              $FD=BG GRAPHIC CHAR または BASIC              $5E=BG GRAPHIC SELECT              $3E=BG GRAPHIC ファンクション メニュー              $20=BG GRAPHIC COPY、MOVE              $1F=              $1E=              $03=   $00ED      :NMI(VSYNC)フック $CD7A   $00FC      :セレクト  BGM $00FE      :セレクト  S.E.−A              $01=各種ボード、セレクト に切り替わる音              $02=文字列表示が終了した音              $03=文字列表示が終了した音              $04=カラーパネルからセレクト に切り替わる                  時間切れの音                  各種ボードの改行              $10=セレクト 内でRETURN $00FF      :セレクト  S.E.−B   $0100−$01FF:スタック エリア $0200−$02FF:スプライトDMAエリア   $0300−$03FF:VSYNC用文字列バッファ $0300:      VSYNC用文字列インデックス(最終データの位置) $0301:      VSYNC用文字列             PPUアドレス上位または$00=エンドマーク             PPUアドレス下位             コード d7:INCモード  1=Y方向、0=X方向                 d6:書き込みモード 1=埋める、0=文字列                 d5:長さ D5                 d4:長さ D4                 d3:長さ D3                 d2:長さ D2                 d1:長さ D1                 d0:長さ D0             データ (埋める場合1バイト、文字列の場合長さの分)                   |             以降エンドマークがでるまで繰り返し   $0480−$040F:F1キーの内容 $0490−$049F:F2キーの内容 $04A0−$04AF:F3キーの内容 $04B0−$04BF:F4キーの内容 $04C0−$04CF:F5キーの内容 $04D0−$04DF:F6キーの内容 $04E0−$04EF:F7キーの内容 $04F0−$04FF:F8キーの内容   $0500−$0512:入力した名前 $0550      :コマンドデータ(比較して合っている所まで$0D含む)   $0634:キーマトリックス P2 1        d7:F8キー   1=押されている、0=押されていない        d6:RETURN 1=押されている、0=押されていない        d5:[キー    1=押されている、0=押されていない        d4:]キー    1=押されている、0=押されていない        d3:カナキー   1=押されている、0=押されていない        d2:右SHIFT 1=押されている、0=押されていない        d1:¥キー    1=押されている、0=押されていない        d0:STOPキー 1=押されている、0=押されていない $0635:キーマトリックス P2 2        d7:F7キー   1=押されている、0=押されていない        d6:@キー    1=押されている、0=押されていない        d5:;キー    1=押されている、0=押されていない        d4::キー    1=押されている、0=押されていない        d3:ンキー    1=押されている、0=押されていない        d2:/キー    1=押されている、0=押されていない        d1:=キー    1=押されている、0=押されていない        d0:^キー    1=押されている、0=押されていない $0636:キーマトリックス P2 3        d7:F6キー   1=押されている、0=押されていない        d6:Oキー    1=押されている、0=押されていない        d5:Lキー    1=押されている、0=押されていない        d4:Kキー    1=押されている、0=押されていない        d3:<キー    1=押されている、0=押されていない        d2:>キー    1=押されている、0=押されていない        d1:Pキー    1=押されている、0=押されていない        d0:0キー    1=押されている、0=押されていない $0637:キーマトリックス P2 4        d7:F5キー   1=押されている、0=押されていない        d6:Iキー    1=押されている、0=押されていない        d5:Uキー    1=押されている、0=押されていない        d4:Jキー    1=押されている、0=押されていない        d3:Mキー    1=押されている、0=押されていない        d2:Nキー    1=押されている、0=押されていない        d1:9キー    1=押されている、0=押されていない        d0:8キー    1=押されている、0=押されていない $0638:キーマトリックス P2 5        d7:F4キー   1=押されている、0=押されていない        d6:Yキー    1=押されている、0=押されていない        d5:Gキー    1=押されている、0=押されていない        d4:Hキー    1=押されている、0=押されていない        d3:Bキー    1=押されている、0=押されていない        d2:Vキー    1=押されている、0=押されていない        d1:7キー    1=押されている、0=押されていない        d0:6キー    1=押されている、0=押されていない $0639:キーマトリックス P2 6        d7:F3キー   1=押されている、0=押されていない        d6:Tキー    1=押されている、0=押されていない        d5:Rキー    1=押されている、0=押されていない        d4:Dキー    1=押されている、0=押されていない        d3:Fキー    1=押されている、0=押されていない        d2:Cキー    1=押されている、0=押されていない        d1:5キー    1=押されている、0=押されていない        d0:4キー    1=押されている、0=押されていない $063A:キーマトリックス P2 7        d7:F2キー   1=押されている、0=押されていない        d6:Wキー    1=押されている、0=押されていない        d5:Sキー    1=押されている、0=押されていない        d4:Aキー    1=押されている、0=押されていない        d3:Xキー    1=押されている、0=押されていない        d2:Zキー    1=押されている、0=押されていない        d1:Eキー    1=押されている、0=押されていない        d0:3キー    1=押されている、0=押されていない $063B:キーマトリックス P2 8        d7:F1キー   1=押されている、0=押されていない        d6:ESC    1=押されている、0=押されていない        d5:Qキー    1=押されている、0=押されていない        d4:CTR    1=押されている、0=押されていない        d3:左SHIFT 1=押されている、0=押されていない        d2:GRPH   1=押されている、0=押されていない        d1:1キー    1=押されている、0=押されていない        d0:2キー    1=押されている、0=押されていない $063C:キーマトリックス P2 9        d7:HOME   1=押されている、0=押されていない        d6:カーソル 上 1=押されている、0=押されていない        d5:カーソル 右 1=押されている、0=押されていない        d4:カーソル 左 1=押されている、0=押されていない        d3:カーソル 下 1=押されている、0=押されていない        d2:スペース   1=押されている、0=押されていない        d1:DEL    1=押されている、0=押されていない        d0:INS    1=押されている、0=押されていない   $063D−$064E:キー入力用バッファ   −−−−−−−−−−−−−−−−−−−   BASIC ワーク   $0000      :$59=コールドスタートを実行した、$59以外=電源スタート $0003−$0004:フリーエリア最終領域        下位、上位(初期値$77FF) $0005−$0006:BASICプログラムの先頭アドレス 下位、上位(初期値$703E) $0007−$0008:BASICプログラムの最終アドレス 上位、下位(バックアップ場所 $703C−$703D) $0009−$000A:汎用バッファ ポインタ下位、上位             実行中プログラム行 アドレス下位、上位 $000B−$000C:入力したプログラム行アドレス下位、上位             実行中プログラム行     下位、上位 $000D−$000E:実行中プログラム行の先頭アドレス下位、上位 $000F−$0010:入力したプログラム行 下位、上位   $0011−$0012:実行中プログラム行 ($000B−$000C)退避用 $0013−$0014:実行中プログラム行の先頭アドレス($000D−$000E)退避用   $0015−$0016:汎用バッファ ポインタ退避用($0009−$000A、$0058−$0059)   $0017      :スタック退避用 $0018      :スペシャルキー フラグ $FF=オン、$00=オフ   $0019      :PPUアドレス 上位             コマンドリスト 上位             BEEP、キーリピート用 カウンタ             BG−GRAPHIC ジャンプテーブル下位             CMTデータ ワーク0   $001A      :PPUアドレス 下位             コマンドリスト 下位             BG−GRAPHIC ジャンプテーブル上位             CMTデータ ワーク1   $001B      :VSYNCタスク アドレス下位             CMTライト ビット ディレイ0               ”1”=$6A              ”0”=$34 $001C      :VSYNCタスク アドレス上位             CMTライト ビット ディレイ1              ”1”=$6A              ”0”=$34   $001D−$001E:変数領域 先頭アドレス下位、上位 $001F−$0020:変数領域 最終アドレス下位、上位 $0021      :$80+文字列の長さ             マシン語領域先頭アドレス下位?(未使用) $0022      :マシン語領域先頭アドレス上位?(未使用)   $0024      :ブレークフラグ $FF=オン、$00=オフ $0027      :変数、実数の型 $02=数値変数、$03=文字変数   $0028−$0029:1文字表示ルーチン ジャンプテーブル下位、上位             符号付き被乗数・被除算の下位、上位             演算結果下位、上位   $002A      :符号付き 除算ワーク0 $002B      :符号付き 除算ワーク1   $002C−$002D:ASCIIから変換した数値下位、上位 0から9             符号付き 乗数・除算の下位、上位             符号付き 除算ワーク2             CMT チェックサム比較用 下位、上位             VSYNCタスク PPUアドレス計算 Y   $0030      :BASICプログラム解析ワークインデックス   $0032      :ポート$2000の内容 $0033      :ポート$2001の内容1 $0E $0034      :演算用ワーク0 $0035      :演算用ワーク1 $0036      :演算用ワーク2 $0037      :演算用ワーク3 $0038      :$00 $0039      :$00 $003A      :$00 $003B      :$00 $003D−$0042:16進数表示バッファ(ASCII)   $0044−$0045:入力した行番号 下位、上位 $0046      :16進数表示バッファ($003D−$0042)インデックス $0046      :16進数から10進数変換用ワーク インデックス $0047      :16進数から10進数変換用アスキーコード $30−$39   $0048      :カーソル X座標 $0049      :カーソル Y座標             BG−GRAPHIC メニューカーソル $00−$05(メニューの種類)   $004A−$004B:PPUアドレス 下位、上位 $004C      :INSモードスイッチ $FF=オン、$00=オフ   $004D−$004E:プログラムバッファ ポインタ 下位、上位 ($0300−$03FF)   $004F      :BG1またはBG2の上位アドレスの指定 $20=BG1、$24=BG2 $0050      :カナキースイッチ $FF=オン、$00=オフ $0052−$0053:文字列データ 下位、上位 $0054−$0055:中間言語検索用ポインタ 下位、上位 $0056−$0057:RND用 $0058−$0059:汎用バッファ ポインタ退避用 下位、上位 ($0009−$000A) $005A      :プログラム1行分の長さ $005B−$005C:コマンド検索アドレス 下位、上位 $005D      :MOVEコマンド 第nnパラメータ(01−08) $005E      :キー入力用 $00=通常、$01−$FF=デバグ用? 出力キーデータの$03(^C)を返す $005F      :BG−GRAPHIC CMT PPUアドレス 下位、上位 $0061      :表示するカーソルのキャラクタ(ASCII) $0062      :VRAMバッファ インデックス $0063      :VSYNCタスクnn (nn=$00から$0F $00でタスク実行終了) $0064      :文字列インデックス $0065      :文字列インデックスカラー $00=BG、$01=OBJ $0066      :ファンクションキーフラグ $FF=オン、$00=オフ $0067      :ファンクションキーデータ              d7−4:押されたFn n−1の値              d3−0:押されたFn 文字数 $0068      :ファンクションキースイッチ $FF=オン、$00=オフ $0069      :ポート$2005(垂直)の内容 $006B      :カーソル X座標退避用 $006C      :カーソル Y座標退避用 $006D      :キーマトリックス ビットデータ(押されたビット)             ファンクションキー              $F0=F1キー              $F1=F2キー              $F2=F3キー              $F3=F4キー              $F4=F5キー              $F5=F6キー              $F6=F7キー              $F7=F8キー               キーマトリックス              $07=d7が1              $06=d6が1              $05=d5が1              $04=d4が1              $03=d3が1              $02=d2が1              $01=d1が1              $00=d0が1   $006E      :キーマトリックス ラインナンバ (0から8) $006F      :CTRL フラグ  $FF=オン、$00=オフ $0070      :SHIFTフラグ  $FF=オン、$00=オフ $0071      :GRPH フラグ  $FF=オン、$00=オフ $0072      :カナ   フラグ  $FF=オン、$00=オフ   $0073      :カーソル点滅にあるキャラクタ(ASCIIコード)             文字列 V−SYNCタスク nn $0074      :文字列 V−SYNCタスク用             汎用レジスタ              CGEN用              カラーパレット              VIEW用               汎用カウンタ              カーソル点滅              CMT1バイトリード              KEY LIST 表示インデックス              SPRITE              メニュー   $0075      :キーデータ(ASCIIコード)             文字列 データ リードインデクス             CMT リード ディレイ $0076      :キーバッファ インデックス   $0077      :BASIC キーリピートカウンタ0 $0078      :BASIC キーリピートカウンタ1 $0079      :BASIC キーリピートカウンタ2   $007B      :キーリピートフラグ $FF=オン、$00=オフ   $007C      :BG GRAPHIC              $00=SELECT              $01=COPY              $02=MOVE              $03=CLEAR              $04=FILE              $05=CHAR   $007D      :BG GRAPHIC SELECTキャラクタグループ $00−$0C   $007E      :テキスト スクロールカウンタ スクロールするたびに−1 $007F      :BG GRAPHIC SELECTカーソル $00−$07   $0088      :BG GRAPHIC SELECT MODEnn (nn=$00−$03)   $008A−$008B:変数名2バイト $008C−$008D:使用した変数   アドレス 下位、上位 (タイプ、名前) $008E−$008F:使用した変数の値 アドレス 下位、上位   $0090      :PLAY文 ””の中の長さ            :KEY LIST用 Fnキー $0091−$0092:PLAY文 バッファポインタ下位、上位             CMT テープマークの数 $0091のみ             CMT チェックサム下位、上位   $0098      :中間言語データ検索用(アスキーコード) $0099      :中間言語 $009A−$009B:汎用バッファ ポインタ 上位、下位 保存用 $009D      :ポート$2005(水平)の内容 $009E      :BG2クリアラフグ $81以外=クリア可、$81=クリア不可   $00A9      :アニメキャラクタ インデックス 0から7 $00AB      :MOVEを実行でVSYNCタスクとMOVEの振り分け $FF=MOVE、$00=VSYNCタスク $00AC      :MOVEフラグ $FF=実行、$00=停止 $00AD−$00AE:CMT データ    ポインタ 下位、上位 $00AF      :CMT ファイルネームポインタ 下位 $00B0      :CMT ファイルネームポインタ 上位             INS用 右端を超えたキャラクタ $00B1      :CMTロードフラグ $00=LOAD、$01=LOAD?   $00B9      :PLAY Ch1 T(テンポ 1から8) $00BA      :PLAY Ch2 T(テンポ 1から8) $00BB      :PLAY Ch3 T(テンポ 1から8) $00BC      :PLAY Ch1 V(音量、エンベロープの長さ 0から15) $00BD      :PLAY Ch2 V(音量、エンベロープの長さ 0から15) $00BE      :PLAY Ch3 V(音量、エンベロープの長さ 0から15) $00BF      :PLAY Ch1 O(オクターブ 0から5) $00C0      :PLAY Ch2 O(オクターブ 0から5) $00C1      :PLAY Ch3 O(オクターブ 0から5) $00C3      :PLAY Ch1 音の長さ(0から9) $00C4      :PLAY Ch2 音の長さ(0から9) $00C5      :PLAY Ch3 音の長さ(0から9) $00C6      :PLAY Ch1で音を鳴らす位置(バッファポインタ下位) $00C7      :PLAY Ch2で音を鳴らす位置(バッファポインタ下位) $00C8      :PLAY Ch3で音を鳴らす位置(バッファポインタ下位) $00C9      :APUチャンネル              d7:エラー     1=エラー発生、0=エラー無し              d6:              d5:              d4:              d3:              d2:APU Ch3 1=使用する、0=使用しない              d1:APU Ch2 1=使用する、0=使用しない              d0:APU Ch1 1=使用する、0=使用しない   $00CA      :PLAY文 Ch nの指定 $00=Ch1、$01=Ch2、$02=Ch3   $00CB      :PLAY文 Ch1カウンタ $00CC      :PLAY文 Ch2カウンタ $00CD      :PLAY文 Ch3カウンタ   $00CE      :APUチャンネル ストップ $4015からこの値を引く              d7:              d6:              d5:              d4:              d3:              d2:APU Ch3 1=停止する、0=停止しない              d1:APU Ch2 1=停止する、0=停止しない              d0:APU Ch1 1=停止する、0=停止しない   $00CF      :PLAY文Ch1 M(エンベロープ) M0=$30、M1=$00 $00D0      :PLAY文Ch2 M(エンベロープ) M0=$30、M1=$00 $00D1      :PLAY文Ch3 M(エンベロープ) M0=$30、M1=$00   $00D2      :PLAY文Ch1 Y(デューティ効果1〜3) Y0=$00、Y1=$40、Y2=$80、Y3=$C0 $00D3      :PLAY文Ch2 Y(デューティ効果1〜3) Y0=$00、Y1=$40、Y2=$80、Y3=$C0 $00D4      :PLAY文Ch3 Y(デューティ効果1〜3) Y0=$00、Y1=$40、Y2=$80、Y3=$C0   $00E0      :キー入力モード               $FD=BG GRAPHIC CHAR または BASIC               $5E=BG GRAPHIC SELECT               $3E=BG GRAPHIC ファンクション メニュー               $20=BG GRAPHIC COPY、MOVE               $1F=               $1E=               $03= $00E1      : $00ED      :NMI(VSYNC)フック $880F   $0100−$01FF:スタック エリア $0200−$02FF:スプライトDMAエリア $0300−$03FF:プログラムバッファ(1行分のプログラム中間言語で収納)   $0400−$047F:BASICプログラム解析ワーク $0480−$040F:F1キーの内容 $0490−$049F:F2キーの内容 $04A0−$04AF:F3キーの内容 $04B0−$04BF:F4キーの内容 $04C0−$04CF:F5キーの内容 $04D0−$04DF:F6キーの内容 $04E0−$04EF:F7キーの内容 $04F0−$04FF:F8キーの内容   $0500−$05FF:汎用バッファ (キーデータ、VRAMデータ、CMTデ−タ)  $0500−$057F:CMT FCBバッファ    $0500      :CMT ファイルタイプ $02=BASIC、$03=BG DATA  $0501−$0511:CMT ファイルネーム  $0512ー$0513:CMT 長さ     (下位、上位)  $0514ー$0515:CMT ロードアドレス(下位、上位)  $0516ー$0517:CMT 実行アドレス (下位、上位)*使用しない    $0505      :BG−GRAPHIC X座標  $0506      :BG−GRAPHIC Y座標  $0510−$051F:BG−GRAPHIC グループ CHR表示バッファ  $0520−$0579:BG−GRAPHIC メニューVRAM退避用10桁×8行   $0580−$059F:CMT キー入力したファイルネ−ム(エンドマーク$00)   $0600−$0617:テキストライン フラグ $00=行の先頭、FF=前の行と繋がっている $0618      : $0619      : $0634      :キーマトリクス P2 1              d7:F8キー   1=オン、0=オフ              d6:RETURN 1=オン、0=オフ              d5:[キー    1=オン、0=オフ              d4:]キー    1=オン、0=オフ              d3:カナキー   1=オン、0=オフ              d2:右SHIFT 1=オン、0=オフ              d1:¥キー    1=オン、0=オフ              d0:STOPキー 1=オン、0=オフ $0635      :キーマトリックス P2 2              d7:F7キー   1=オン、0=オフ              d6:@キー    1=オン、0=オフ              d5:;キー    1=オン、0=オフ              d4::キー    1=オン、0=オフ              d3:ンキー    1=オン、0=オフ              d2:/キー    1=オン、0=オフ              d1:=キー    1=オン、0=オフ              d0:^キー    1=オン、0=オフ $0636      :キーマトリックス P2 3              d7:F6キー   1=オン、0=オフ              d6:Oキー    1=オン、0=オフ              d5:Lキー    1=オン、0=オフ              d4:Kキー    1=オン、0=オフ              d3:<キー    1=オン、0=オフ              d2:>キー    1=オン、0=オフ              d1:Pキー    1=オン、0=オフ              d0:0キー    1=オン、0=オフ $0637      :キーマトリックス P2 4              d7:F5キー   1=オン、0=オフ              d6:Iキー    1=オン、0=オフ              d5:Uキー    1=オン、0=オフ              d4:Jキー    1=オン、0=オフ              d3:Mキー    1=オン、0=オフ              d2:Nキー    1=オン、0=オフ              d1:9キー    1=オン、0=オフ              d0:8キー    1=オン、0=オフ $0638      :キーマトリックス P2 5              d7:F4キー   1=オン、0=オフ              d6:Yキー    1=オン、0=オフ              d5:Gキー    1=オン、0=オフ              d4:Hキー    1=オン、0=オフ              d3:Bキー    1=オン、0=オフ              d2:Vキー    1=オン、0=オフ              d1:7キー    1=オン、0=オフ              d0:6キー    1=オン、0=オフ $0639      :キーマトリックス P2 6              d7:F3キー   1=オン、0=オフ              d6:Tキー    1=オン、0=オフ              d5:Rキー    1=オン、0=オフ              d4:Dキー    1=オン、0=オフ              d3:Fキー    1=オン、0=オフ              d2:Cキー    1=オン、0=オフ              d1:5キー    1=オン、0=オフ              d0:4キー    1=オン、0=オフ $063A      :キーマトリックス P2 7              d7:F2キー   1=オン、0=オフ              d6:Wキー    1=オン、0=オフ              d5:Sキー    1=オン、0=オフ              d4:Aキー    1=オン、0=オフ              d3:Xキー    1=オン、0=オフ              d2:Zキー    1=オン、0=オフ              d1:Eキー    1=オン、0=オフ              d0:3キー    1=オン、0=オフ $063B      :キーマトリックス P2 8              d7:F1キー   1=オン、0=オフ              d6:ESC    1=オン、0=オフ              d5:Qキー    1=オン、0=オフ              d4:CTR    1=オン、0=オフ              d3:左SHIFT 1=オン、0=オフ              d2:GRPH   1=オン、0=オフ              d1:1キー    1=オン、0=オフ              d0:2キー    1=オン、0=オフ $063C      :キーマトリックス P2 9              d7:HOME   1=オン、0=オフ              d6:カーソル 上 1=オン、0=オフ              d5:カーソル 右 1=オン、0=オフ              d4:カーソル 左 1=オン、0=オフ              d3:カーソル 下 1=オン、0=オフ              d2:スペース   1=オン、0=オフ              d1:DEL    1=オン、0=オフ              d0:INS    1=オン、0=オフ   $063D      :SPRITE 0のキャラクタ合成型 $00=8×8、$01=16×16 $063E      :SPRITE 1のキャラクタ合成型 $00=8×8、$01=16×16 $063F      :SPRITE 2のキャラクタ合成型 $00=8×8、$01=16×16 $0640      :SPRITE 3のキャラクタ合成型 $00=8×8、$01=16×16 $0641      :SPRITE 4のキャラクタ合成型 $00=8×8、$01=16×16 $0642      :SPRITE 5のキャラクタ合成型 $00=8×8、$01=16×16 $0643      :SPRITE 6のキャラクタ合成型 $00=8×8、$01=16×16 $0644      :SPRITE 7のキャラクタ合成型 $00=8×8、$01=16×16   $0645      :DEF MOVE(0)              d7:8×8 1=通常 、0=Y反転              d6:8×8 1=通常 、0=X反転              d5:優先  1=BG後、0=BG前              d4:1=アニメオン、0=アニメオフ              d3:              d2:              d1:カラーd1              d0:カラーd0 $0646      :DEF MOVE(1)              d7:8×8 1=通常 、0=Y反転              d6:8×8 1=通常 、0=X反転              d5:優先  1=BG後、0=BG前              d4:1=アニメオン、0=アニメオフ              d3:              d2:              d1:カラーd1              d0:カラーd0 $0647      :DEF MOVE(2)              d7:8×8 1=通常 、0=Y反転              d6:8×8 1=通常 、0=X反転              d5:優先  1=BG後、0=BG前              d4:1=アニメオン、0=アニメオフ              d3:              d2:              d1:カラーd1              d0:カラーd0 $0648      :DEF MOVE(3)              d7:8×8 1=通常 、0=Y反転              d6:8×8 1=通常 、0=X反転              d5:優先  1=BG後、0=BG前              d4:1=アニメオン、0=アニメオフ              d3:              d2:              d1:カラーd1              d0:カラーd0 $0649      :DEF MOVE(4)              d7:8×8 1=通常 、0=Y反転              d6:8×8 1=通常 、0=X反転              d5:優先  1=BG後、0=BG前              d4:1=アニメオン、0=アニメオフ              d3:              d2:              d1:カラーd1              d0:カラーd0 $064A      :DEF MOVE(5)              d7:8×8 1=通常 、0=Y反転              d6:8×8 1=通常 、0=X反転              d5:優先  1=BG後、0=BG前              d4:1=アニメオン、0=アニメオフ              d3:              d2:              d1:カラーd1              d0:カラーd0 $064B      :DEF MOVE(6)              d7:8×8 1=通常 、0=Y反転              d6:8×8 1=通常 、0=X反転              d5:優先  1=BG後、0=BG前              d4:1=アニメオン、0=アニメオフ              d3:              d2:              d1:カラーd1              d0:カラーd0 $064C      :DEF MOVE(7)   $0680−$0683:DEF SPRITE 0の文字式(キャラクタ) $0684−$0687:DEF SPRITE 1の文字式(キャラクタ) $0688−$068B:DEF SPRITE 2の文字式(キャラクタ) $068C−$068F:DEF SPRITE 3の文字式(キャラクタ) $0690−$0693:DEF SPRITE 4の文字式(キャラクタ) $0694−$0697:DEF SPRITE 5の文字式(キャラクタ) $0698−$069B:DEF SPRITE 6の文字式(キャラクタ) $069C−$069F:DEF SPRITE 7の文字式(キャラクタ)   $06C0      :DEF MOVE(0) アニメキャラクタの種類 $06C1      :DEF MOVE(0) アニメキャラクタの動作の方向指定 $06C2      :DEF MOVE(0) アニメキャラクタの動かす速さカウンタ $06C3      :DEF MOVE(0) アニメキャラクタの全移動量カウンタ $06C4      :DEF MOVE(0) アニメキャラクタの動かす速さ $06C5      :DEF MOVE(0) アニメキャラクタの全移動量 $06C6      :POSITION 0 X座標 $06C7      :POSITION 0 Y座標   $06C8      :DEF MOVE(1) アニメキャラクタの種類 $06C9      :DEF MOVE(1) アニメキャラクタの動作の方向指定 $06CA      :DEF MOVE(1) アニメキャラクタの動かす速さカウンタ $06CB      :DEF MOVE(1) アニメキャラクタの全移動量カウンタ $06CC      :DEF MOVE(1) アニメキャラクタの動かす速さ $06CD      :DEF MOVE(1) アニメキャラクタの全移動量 $06CE      :POSITION 1 X座標 $06CF      :POSITION 1 Y座標   $06D0      :DEF MOVE(2) アニメキャラクタの種類 $06D1      :DEF MOVE(2) アニメキャラクタの動作の方向指定 $06D2      :DEF MOVE(2) アニメキャラクタの動かす速さカウンタ $06D3      :DEF MOVE(2) アニメキャラクタの全移動量カウンタ $06D4      :DEF MOVE(2) アニメキャラクタの動かす速さ $06D5      :DEF MOVE(2) アニメキャラクタの全移動量 $06D6      :POSITION 2 X座標 $06D7      :POSITION 2 Y座標   $06D8      :DEF MOVE(3) アニメキャラクタの種類 $06D9      :DEF MOVE(3) アニメキャラクタの動作の方向指定 $06DA      :DEF MOVE(3) アニメキャラクタの動かす速さカウンタ $06DB      :DEF MOVE(3) アニメキャラクタの全移動量カウンタ $06DC      :DEF MOVE(3) アニメキャラクタの動かす速さ $06DD      :DEF MOVE(3) アニメキャラクタの全移動量 $06DE      :POSITION 3 X座標 $06DF      :POSITION 3 Y座標   $06E0      :DEF MOVE(4) アニメキャラクタの種類 $06E1      :DEF MOVE(4) アニメキャラクタの動作の方向指定 $06E2      :DEF MOVE(4) アニメキャラクタの動かす速さカウンタ $06E3      :DEF MOVE(4) アニメキャラクタの全移動量カウンタ $06E4      :DEF MOVE(4) アニメキャラクタの動かす速さ $06E5      :DEF MOVE(4) アニメキャラクタの全移動量 $06E6      :POSITION 4 X座標 $06E7      :POSITION 4 Y座標   $06E8      :DEF MOVE(5) アニメキャラクタの種類 $06E9      :DEF MOVE(5) アニメキャラクタの動作の方向指定 $06EA      :DEF MOVE(5) アニメキャラクタの動かす速さカウンタ $06EB      :DEF MOVE(5) アニメキャラクタの全移動量カウンタ $06EC      :DEF MOVE(5) アニメキャラクタの動かす速さ $06ED      :DEF MOVE(5) アニメキャラクタの全移動量 $06EE      :POSITION 5 X座標 $06EF      :POSITION 5 Y座標   $06F0      :DEF MOVE(6) アニメキャラクタの種類 $06F1      :DEF MOVE(6) アニメキャラクタの動作の方向指定 $06F2      :DEF MOVE(6) アニメキャラクタの動かす速さカウンタ $06F3      :DEF MOVE(6) アニメキャラクタの全移動量カウンタ $06F4      :DEF MOVE(6) アニメキャラクタの動かす速さ $06F5      :DEF MOVE(6) アニメキャラクタの全移動量 $06F6      :POSITION 6 X座標 $06F7      :POSITION 6 Y座標   $06F8      :DEF MOVE(7) アニメキャラクタの種類 $06F9      :DEF MOVE(7) アニメキャラクタの動作の方向指定 $06FA      :DEF MOVE(7) アニメキャラクタの動かす速さカウンタ $06FB      :DEF MOVE(7) アニメキャラクタの全移動量カウンタ $06FC      :DEF MOVE(7) アニメキャラクタの動かす速さ $06FD      :DEF MOVE(7) アニメキャラクタの全移動量 $06FE      :POSITION 7 X座標 $06FF      :POSITION 7 Y座標     $0700−$077F:表示バッファ             PLAYバッファ             カラーパレット             BG−GRAPHICファイル バッファ   $0780−$079F:ストリングデータ バッファ     $7000−$7012:セレクト  前々回入力した名前 $7013−$7025:セレクト  前回入力した名前 $7026−$7038:セレクト  入力した名前     $7039      :BACK UP SWITCHテスト用   $703A      :BACK UP SWITCHテスト用              $5A  =データ有り              $5A以外=データ無し(コールドスタート)   $703B      :BACK UP SWITCHテスト用              $33  =データ有り(BASICプログラム)              $33以外=データ無し(コールドスタート) $703C−$703D:プログラムの最終アドレス バックアップ 下位、上位       ROMルーチン $8000:セレクト  BASICメニューへ飛ぶ         セレクトからBASICメニュー($80AD)へ飛びます     $8003:セレクト 、BASIC 一文字入力    出力:A=キーデータ(ASCIIコード)         $AF88へ飛び、キーボードから一文字入力を行います   $8006−$8098:PLAY文 周波数データ テーブル       PLAY文で設定される周波数データになります       周波数データは2バイトで下位、上位の順       C、#C、D、#D、E、F、#F、G、#G、A、#A、Bの順       この24バイトがオクターブ単位でO5からO0の順   $8096−$809F:PLAY文 音長データ テーブル       PLAY文で使用する音長をカウンタの長さに変換するテーブルデータです       0から9の順   $80A0−$80A6:PLAY文 音程インデックス       周波数データ テーブルの音程を指します(#の指定は出来ません)       AからGの順   $80A7−$80AC:PLAY文 オクターブインデックス       周波数データ テーブルのオクターブの先頭を指します       O0からO5の順   $80AD:BASIC BASICメニュー       ここでBASIC、BG GRPAHIC、END(セレクト )と       各場所へと実行されます        1:BASIC      $80F0        2:BG GRAPHIC $80D4        3:END        $C400   $8127:BASIC BASICのコールドスタート    出力:$0000=$59         BG2クリア、$0000=$59にして$81FFに飛びます   $8131:BASIC BASICメニューの表示   $814B:BASIC BG2クリア    入力:$009E         $009E=$81かチェックを行い$81以外ならBG2クリアを行います   $8154:BASIC BASICメニューメッセージの表示    入力:A=メッセージナンバ(0−3)         BASICメニュー内のメッセージを表示します        0=1−−BASIC        1=2−−BG GRAPHIC        2=3−−END        3=1,2,3 KEY IN !!   $819C:BASIC BASICメニューの枠の表示       メニューの枠の表示を行います。   $81D3:BASIC BASICメニューの枠の表示サブ0    入力:A=表示するVRAMアドレス上位       X=表示するVRAMアドレス下位       $00AD=枠の角のASCIIコード($DEまたは$E0)    使用:A、X、Y         枠の上と下のライン表示を行います   $81EA:BASIC BASICメニューの枠の表示サブ1    入力:A=表示するVRAMアドレス上位       X=表示するVRAMアドレス下位       $00AD=枠の角のASCIIコード($DEまたは$E0)    使用:A、X、Y         枠の縦のライン表示を行います       前もってポート$2000のd2=1にする必要があります   $81F1:BASIC VRAMをデータで埋める    入力:A=キャラクタデータ       Y=長さ    使用:A、Y       VRAMをYレジスタ分だけAレジスタの内容を埋めます       前もって埋めるVRAMアドレス、方向を設定しておきます   $81F8:BASIC PPUアドレスの指定    入力:A=PPUアドレスの上位       X=PPUアドレスの下位    使用:A、X       ポート$2006に各データをセットして       PPUアドレスの指定を行います。   $81FF:BASIC BASICコールドスタート   $820B:BASIC BASICのコマンド待ち(END文のエントリ)       プロンプト’OK’または’OK.’、$0A(NL)を出力して       コマンド待ちの状態になります   $8236:BASIC BASICのコマンド待ち       キー入力を行いBREAKならループ、RETURNキーが押されるまで待ち       スペースを読み飛ばして数字ならプログラムインプットモード                  英字ならダイレクトコマンドモード       それぞれの処理を行います   $86B9:BASIC CMT STOPキーのチェック    出力:Zf=1 STOPキー オン          0 STOPキー オフ    使用:A       STOPキーが押されたかチェックします   $87F8:BASIC 文字列表示    入力:$0048=表示するカーソルX座標       $0049=表示するカーソルY座標       $0052=文字列データ アドレス下位       $0053=文字列データ アドレス上位       文字列データ...(エンドマーク$00)    使用:A、X、Y       $0028       $0029       $0032       $0047       $004C       $0062       $0069       $007E         |     $8808:BASIC VSYNCタスクの実行    入力:A=VSYNCタスクnn (nn=$01−$0F)    出力:$0063=$00 VSYNCタスク$00       VSYNCタスクによる    使用:VSYNCタスクによる         VSYNCタスクを実行、終了するまで待ちます   $8B5C:BASIC 符号付き 16ビットの乗算    入力:$0028=符号付き被乗数の下位       $0029=符号付き被乗数の上位       $002C=符号付き 乗数の下位       $002D=符号付き 乗数の上位    出力:$0028=演算結果下位       $0029=演算結果上位       $0034=$FF 演算結果がマイナス             $00 演算結果が プラス    使用:A、X       $0034=演算用ワーク0       $0035=演算用ワーク1       $0036=演算用ワーク2       $0037=演算用ワーク3       $0038=$00       $0039=$00       $003A=$00       $003B=$00         符号付の16ビット × 16ビットを行います   $8BE59:BASIC 16ビットの減算    入力:$0028=被減数の下位       $0029=被減数の上位       $002C=減数の下位       $002D=減数の上位    出力:$0028=演算結果下位       $0029=演算結果上位       Cf=1 演算結果が正          0 演算結果が負      使用:A       16ビットの減算を行います       $0028−$0029をa、$002C−$002Dをbとすると       単純にa=a−bを実行します     $8CA1:汎用バッファ ポインタの16ビットインクリメント    入力:A=バッファデータ    出力:$0009=汎用バッファ ポインタ+1下位       $000A=汎用バッファ ポインタ+1上位       Zf=1 バッファ データ=$00          0 バッファ データ=$01−$FF    使用:A=バッファ データ       $0009=汎用バッファ ポインタ下位       $000A=汎用バッファ ポインタ上位         $0009から$000Aを16ビットとしてインクリメントしてから       AND $FFを行いAレジスタが$00(エンドマーク)か調べます   $8CAD:汎用バッファの16ビットインクリメント、データの取得    出力:$0009=汎用バッファ ポインタ+1下位       $000A=汎用バッファ ポインタ+1上位           A=ポインタ データ    使用:$0009=汎用バッファ ポインタ下位       $000A=汎用バッファ ポインタ上位         $0009から$000Aを16ビットとしてインクリメントしてから       そのポインタの内容をAレジスタに入れます   $8CD4:汎用バッファの先頭から$20を読み飛ばす    出力:A=ASCIIコード       Y=$00       $0009=汎用バッファ ポインタ+nn下位       $000A=汎用バッファ ポインタ+nn上位    使用:$0009=汎用バッファ ポインタ下位       $000A=汎用バッファ ポインタ上位         $0009から$000Aのポインタ内の先頭データから       $20(スペース)を読み飛ばします       ポインタもインクリメントされます   $8CDD:ASCII 数字のチェック    入力:A=ASCIIコード    出力:Cf=1 数字以外          0 数字($30から$39)    使用:A       キー入力等で得たASCIIコード1文字が数字か調べます   $8D09:BASIC バッファ内のASCIIコードから16進数の変換    入力:$0009=汎用バッファ ポインタ下位       $000A=汎用バッファ ポインタ上位    出力:$0009=汎用バッファ ポインタ下位(数字以外のコードがあったアドレス)       $000A=汎用バッファ ポインタ上位(数字以外のコードがあったアドレス)       $0027=使用する変数、実数の型 $02=数値変数       $0028=変換した16進数下位       $0029=変換した16進数上位    使用:A、X、Y       $002C=符号付き 乗数の下位 $0A       $002D=符号付き 乗数の上位 $00         バッファにあるASCIIコードから16進数データに変換します         $0009−$000Aをポインタとして示すバッファから       $0028−$0029を16ビットレジスタR0とすると        1.ASCIIコードとして取得(数字$30−$39以外ならRTS)        2.R0=R0*10        3.アスキーコード$30−$39から$30を引いて数字1桁に変換        4.R0=R0+変換した数字1桁($FFFFオーバーなら?OV ERRORへ)        5.$0009−$000AをINCして1.から繰り返し   $8D3C:BASIC 16進数から10進ASCIIの変換    入力:$0028=16進数下位       $0029=16進数上位    出力:$003D−$0042=16進数から10進数変換したASCIIデータ       $0046=$00    使用:A、X       $002C−$002D=変換する為の減算、加算値       $0046=16進数から10進数変換用ワーク インデックス($003D−$0042)       $0047=16進数から10進数変換用アスキーコード $30−$39         16ビット16進数を10進数ASCIIコードに変換して       $003D−$0042に収納します        $003D=万の値        $003E=千の値        $003F=百の値        $0040=十の値        $0041=一の値        $0042=$00 (エンドマーク)   $98A1:BASIC CMT ファイルネーム バッファのクリア    使用:A、X、Y       $0580−$0590         ファイルネーム$0580−$058Fを$20で埋め       $0590を$00にします   $A1C3:ASCII 英字のチェック    入力:A=ASCIIコード    出力:Cf=1 英字以外          0 英字($41から$5A)    使用:A       キー入力等で得たASCIIコード1文字が英字か調べます     $A6C5:セレクト 、BASIC A=A*16    入力:A=データ    出力:A=入力したデータ*16    使用:A         ASL Aを4回実行します   $AAFE:BASIC VBLANK期間中になるまで待つ    使用:A         ポート$2002のd7=0(描画中)になるまで待ち       その後、d7=1(VBLANK)になるまで待ちます       始めにd7=1になるまで待たないのは       すぐにVBLNKが終わる可能性があるため       d7が0から1に変わった瞬間で       VBLANKの始まりを検知します   $AB09:BASIC カラーパレットの初期化    使用:A       $0052=文字列データ 下位       $0053=文字列データ 上位       $0065:文字列インデックスカラー $00=BGカラー、$01=OBJ カラー       $0700−$077F=VRAMバッファ         VRAMバッファを使用してカラーパレットの初期化を行います   $AB71:BASIC BG2クリア    出力:$0069=$00 ポート$2005(垂直)の内容       $009D=$00 ポート$2005(水平)の内容       $0600−0$0619=すべて$00 テキストライン フラグ    使用:$0032=ポート$2000の内容       $0033=$0E ポート$2001の内容1         $004F=$24にして下の$AB75を実行します   $AB75:BASIC BG1またはBG2クリア    入力:$004F=$20 BG1             $24 BG2    出力:$0069=$00 ポート$2005(垂直)の内容       $009D=$00 ポート$2005(水平)の内容       $0600−0$0619=すべて$00 テキストライン フラグ    使用:$0032=ポート$2000の内容       $0033=$0E ポート$2001の内容1         $004Fで指定した画面の消去、アトリビュート$00で埋め       NMIをオン、カーソルX、Y=0,0       テキストラインフラグを全て$00にします   $ABA6:BASIC カーソル座標からPPUアドレスに変換する    入力:$0048=カーソル X座標       $0049=カーソル Y座標       $004F=BG1またはBG2の上位アドレス $20 BG1                              $24 BG2       $0069=ポート$2005(垂直)の内容    出力:$004A=PPUアドレス下位       $004B=PPUアドレス上位    使用:A、X       $0028=符号付き被乗数の下位、演算結果下位       $0029=符号付き被乗数の上位、演算結果上位       $002C=符号付き 乗数の下位       $002D=符号付き 乗数の上位       $0034=演算用ワーク0       $0035=演算用ワーク1       $0036=演算用ワーク2       $0037=演算用ワーク3       $0038=$00       $0039=$00       $003A=$00       $003B=$00          カーソルX、Y座標の位置をPPUアドレスに変換します   $ABE6:BASIC スクロールセット    入力:$0069=ポート$2005(垂直)の内容       $009D=ポート$2005(水平)の内容         ポート$2005にデータ(スクロール)を行います   $ABF1:BASIC BG+OBJ オフ    使用:A       $AAFE(VBLANK待ち)をコールしてから       直接ポート$2001に$00を書き込みます   $ABFA:BASIC ポート$2001の設定    使用:A       $0033=ポート$2001の内容         $AAFE(VBLANK待ち)をコールしてから       $0033のデータをポート$2001に書き込む   $AC0D:BASIC 1文字表示    入力:A=ASCII       $0048=カーソル X座標       $0049=カーソル Y座標    使用:A、X、Y       $0019=       $0028=コントロールコード ジャンプテーブルアドレス下位             VRAMオフセット下位       $0029=コントロールコード ジャンプテーブルアドレス上位             VRAMオフセット上位       $0032=ポート$2000の内容       $0033=ポート$2001の内容1 $0E       $0034=       $0035=       $0036=       $0037=       $003B=       $004C=INSモードスイッチ $FF=オン、$00=オフ       $0052=文字列データ 下位       $0053=文字列データ 上位       $0062=VRAMバッファ インデックス       $0065:文字列インデックスカラー $00=BGカラー、$01=OBJ カラー       $0069=ポート$2005(垂直)の内容       $006B=       $006C=       $0073=VSYNCタスクnn       $0074=文字列 VSYNCタスク用       $0075=文字列 VSYNCタスク用       $007E=       $0700−$077F=VRAMバッファ         画面に1文字表示する為       VRAMバッファにデータを置き       VSYNCタスク$01によってVRAMに書き込みます       コントロールコードはASCIIコードによって従います   $B263:キーリピートチェック+1文字キー入力    出力:A=キーデータ(ASCIIコード)    使用:A、X、Y       $005E=$00       $0074=カーソル点滅カウンタ 初期値$80で−1されていく       $0077=キーリピートカウンタ0(キーリピートオンの時に$00)       $0078=キーリピートカウンタ1(キーリピートオンの時に$00)       $0079=キーリピートカウンタ2       $007B=キーリピートフラグ $FF=キーリピートオン                       $00=キーリピートオフ         通常のキー入力になります       $005Eに$00(デバグ用?)を出力し       数回キー入力を行い、キーリピートが出来るかチェックします       またカーソルの点滅処理も行いますがキーデータは表示されまん   $B30F:BASIC ^G BEEP    使用:A、X、Y      $0019=$F0 カウンタ(鳴らす時間)        BEEPを実行します      もし違う時間で鳴らしたい場合は      Aレジスタに時間をセットして$B316をコールします。   $B343:BASIC ラインインプット    使用:A、X、Y       $0019=       $0028=コントロールコード ジャンプテーブルアドレス下位             VRAMオフセット下位       $0029=コントロールコード ジャンプテーブルアドレス上位             VRAMオフセット上位       $0032=ポート$2000の内容       $0033=ポート$2001の内容1 $0E       $0034=       $0035=       $0036=       $0037=       $003B=       $004C=INSモードスイッチ $FF=オン、$00=オフ       $005E=$00       $0047=       $0048=カーソル X座標       $0049=カーソル Y座標       $0052=文字列データ 下位       $0053=文字列データ 上位       $0062=VRAMバッファ インデックス       $0063=VSYNCタスク       $0064=文字列インデックス       $0065=文字列インデックスカラー $00=BGカラー、$01=OBJ カラー       $0069=ポート$2005(垂直)の内容       $006B=       $006C=       $0073=VSYNCタスクnn       $0074=文字列 VSYNCタスク用、カーソル点滅カウンタ 初期値$80で−1されていく       $0075=文字列 VSYNCタスク用       $0076=キーバッファ インデックス       $0077=キーリピートカウンタ0(キーリピートオンの時に$00)       $0078=キーリピートカウンタ1(キーリピートオンの時に$00)       $0079=キーリピートカウンタ2       $007B=キーリピートフラグ $FF=キーリピートオン                       $00=キーリピートオフ       $007E=       $009D=ポート$2005(水平)の内容       $00A9=       $0500−$05FF=汎用バッファ(キーバッファ)       $0601−$0617:テキストライン フラグ $00=行の先頭                               $FF=前の行と繋がっている       $0700−$077F=VRAMバッファ        キーリピートチェック+1文字キー入力($B263)、1文字表示($AC0D)をコール        ^C、^Dが押されたら       キーバッファに$03、$00でRTS        リターンキーが押されたら       カーソル位置から打ち込まれたラインを取得       VSYNCタスク$02実行(VRAMからバッファ$500へ転送)       転送した最終データから先頭へ$20(スペース)をスキップして       $21−$FFのアスキーコードがあるところまでを       キーバッファの最終データ、次をエンドマーク$00を書き込みます   $B3B9:BASIC CMT エンドアドレスチェック    入力:$00AD=チェックアドレス下位       $00AE=チェックアドレス上位       $00AF=エンド アドレス下位       $00B0=エンド アドレス上位    出力:Zf=1 エンド アドレスと同じ値          0 エンド アドレスと同じ値では無い         $00ADから$00AEの値が$00AFから$00B0の値と       同じかチェックをします   $B3C4:BASIC CMT スタート、エンドアドレス変換    使用:A    入力:$0512=プログラムの長さ下位       $0513=プログラムの長さ上位       $0514=スタートアドレス下位       $0515=スタートアドレス上位    出力:$00AD=スタートアドレス下位       $00AE=スタートアドレス上位       $00AF=エンド アドレス下位       $00B0=エンド アドレス上位         CMTバッファにあるスタートアドレスと長さを足してエンドアドレスを求め       $00ADから$00B0のワークに書き込みを行います   $B3EB:BASIC NMI セット    入力:$0032=ポート$2000の内容    使用:A         ポート$2000を$0032のデータの書き込みを行います   $B3F1:BASIC NMI オン    使用:A       $0032=ポート$2000の内容         ポート$2000 d7=1にしてNMIオンにします   $B3F9:BASIC NMIセット、CMT データブロック ベリファイ         $B3F1をコール、A=$01にして$B406を実行します   $B401:BASIC NMIセット、CMT データブロック ロード         $B3F1をコール、A=$00にして$B406を実行します   $B406:BASIC CMT データブロック ロード    入力:A=$00 LOAD         $01 LOAD?    出力:A=$00 正常にロード         $02 エラー       Cf=1 STOPまたはエラー発生          0 正常にロード    使用:A、X、Y       $002C=CMT チェックサム比較用下位       $002D=CMT チェックサム比較用下位       $0032=ポート$2000の内容       $0091=CMT チェックサム下位       $0092=CMT チェックサム上位       $00AD=ロードまたはチェックアドレス下位       $00AE=ロードまたはチェックアドレス上位       $00AF=ロードまたはチェック最終アドレス+1下位       $00B0=ロードまたはチェック最終アドレス+1上位       $00B1=ロードタイプ $01=LOAD?                    $00=LOAD         インフォメーションブロックをロードします       $0512から$0515のデータを$00ADから$00B0に書き込み       テープマーク(”1”×20、”0”×20)が見つかるまで読み続け       インフォメーション本体をロード($B458)します          インフォメーションブロック本体         属性        1バイト         ファイルネーム  16バイト         予備        1バイト         長さ        2バイト         ロードアドレス   2バイト         実行アドレス    2バイト         空き      104バイト   $B458:BASIC CMT 本体ロード    出力:A=$00 正常にロード         $02 エラー       Cf=1 STOPまたはエラー発生          0 正常にロード    使用:A、X、Y       $002C=CMT チェックサム比較用下位       $002D=CMT チェックサム比較用下位       $0032=ポート$2000の内容       $0091=CMT チェックサム下位       $0092=CMT チェックサム上位       $00AD=ロードまたはチェックアドレス下位       $00AE=ロードまたはチェックアドレス上位       $00AF=ロードまたはチェック最終アドレス+1下位       $00B0=ロードまたはチェック最終アドレス+1上位       $00B1=ロードタイプ $01=LOAD?                    $00=LOAD         データ本体部分をロードします       したがって前もってテープマークを読み込む必要があります       $00B1のロードタイプを見て       LOAD ならメモリに書き込み、チェックサム増加       LOAD?ならメモリと比較し、チェックサム増加       全てのデータをロードして増加したチェックサムを       $002Cから$002Dに置いて       CMTからのチェックサムデータをロード、比較を行います   $B4A6:BASIC CMTリードデータの検知    出力:Cf=1 STOPキーが押された          0 CMTリードデータの検知    使用:A         STOPキーが押されたかチェックを行い       CMTリードのポート$4016のd1が1になるまで待ち       STOPキーが押されたかチェックを行い       CMTリードのポート$4016のd1が0になるまで待ちます       ビットデータ”1”と”0”の検知ではなく信号の1と0になります   $B4C0:BASIC CMT 1d リード    出力:Cf=1 STOP          0 CMTリード       Zf=1 CMT リードデータ ”1”          0 CMT リードデータ ”0”    使用:A、Y         CMTリードデータの検知を行い(HからL)       ディレイで時間稼ぎを行ってから       CMTリードのポート$4016のd1を読む事によって       リードデータが”0”か”1”の判断を行います       ”0”はパルスが短いのでHからLからディレイ後の信号はHになります       ”1”はパルスが長いのでHからLからディレイ後の信号はLになります   $B50D:BASIC CMT データ ブロックセーブ    入力:$0512=プログラムの長さ 下位       $0513=プログラムの長さ 上位       $0514=スタートアドレス 下位       $0515=スタートアドレス 上位    使用:A、X、Y       $0019=CMTテープマーク用       $0032=ポート$2000の内容       $0091=$14 書き込むテープマーク数20             CMT チェックサム下位       $0092=CMT チェックサム上位       $00AD=スタート アドレス下位       $00AE=スタート アドレス上位       $00AE=エンド  アドレス上位       $00AE=エンド  アドレス上位         ポート$2000に$0032のデータを書き込み       スタート、エンドアドレスのセット($B3C4をコール)       書き込みテープマーク数$14にして       $B51Bのルーチンへ行きます   $B51B:BASIC CMT ブロックセーブ メイン    入力:$0091=書き込むテープマーク数       $00AD=スタート アドレス下位       $00AE=スタート アドレス上位       $00AE=エンド  アドレス上位       $00AE=エンド  アドレス上位    使用:A、X、Y       $0019=CMTテープマーク用       $0032=ポート$2000の内容       $0091=CMT チェックサム下位       $0092=CMT チェックサム上位         CMTにブロックデータをセーブします        ビットデータ”0”×20000        ”1”×テープマーク数        ”0”×テープマーク数        データ全体        チェックサム        ”1”        NMIオン   $B56A:BASIC CMT 1バイト ライト    入力:A=出力データ       $0091=CMT チェックサム下位       $0092=CMT チェックサム上位    出力:$0091=CMT チェックサム下位       $0092=CMT チェックサム上位    使用:A、X       $0019=出力データ         CMTに1バイト出力します       ビットデータ ”1”を出力       出力データは$0019に移され、2倍にしてCf=1になれば       ビットデータ ”1”を出力、チェックサムを+1       Cf=0ならビットデータ ”0”を出力       これを1バイト分繰り返します       ビットデータ ”1”を出力した分だけチェックサムは増加します   $B586:BASIC CMT ビットデータ ”0”を出力    使用:A       $001B=CMTライト ビット ディレイ0 ”0”=$34       $001C=CMTライト ビット ディレイ1 ”0”=$34         これは本体が0と判断するパルスをCMTに出力します   $B590:BASIC CMT ビットデータ ”1”を出力    使用:A       $001B=CMTライト ビット ディレイ0 ”1”=$6A       $001C=CMTライト ビット ディレイ1 ”1”=$6A         これは本体が”1”と判断するパルスをCMTに出力します   $B7C4−$B7F4:BG TOOL用メッセージ $B7F5−$B800:BG TOOL用メッセージ ポインタ   $C529−$C564:セレクト  VSYNCタスク$06用 メッセージ ポインタ下位 $C565−$C5A0:セレクト  VSYNCタスク$06用 メッセージ ポインタ上位       $C5A1:$00 ワタシハ[0D]ファミリーコンピュータ デス[FF]       $C5B5:$01 ドウサヲ カイシ シマス[FF]       $C5C2:$02 ワカリマシタ[FF]       $C5C9:$03 ハイ![FF]       $C5CD:$04 リョウカイ![FF]       $C5D4:$05 サギョウヲ カイシ シマス[FF]       $C5E2:$06 アナタハ ダレデスカ?[0D]ナマエヲ イレテ クダサイ       $C5FC:$07 モウイチド キキマス[FF]       $C607:$08 ”[C2]”ニ[0D] シマスカ?[FF]       $C613:$09 サギョウヲ チュウシ シマス[FF]       $C622:$0A サヨウナラ[FF]       $C629:$0B カセットノ バックアップスイッチヲ[0D]OFFニ シテクダサイ[FF]       $C647:$0C ”[C2]”ヲ[0D] カイシ シマス[FF]       $C655:$0D ”[C2]”ハ [0D] イマ シュウリョウ シマシタ[FF]       $C66A:$0E アア![0D]マエニ オアイシタコトガ アリマス       $C680:$0F コンニチハ[FF]       $C686:$10 ツギハ ナニヲ シマショウ[FF]       $C694:$11 リカイ デキマセン![FF]       $C69F:$12 :ファンファーレ:ヲ ナラシマス[FF]       $C6B0:$13 エート? エート?[FF]       $C6BA:$14 ワタシハ ウラナイガ デキマス[FF]       $C6CA:$15 [C0][0D]サン ウラナイヲ シマスカ?[FF]       $C6DB:$16 ジカンギレ デス[FF]       $C6E4:$17 オモイダシマシタ![FF]       $C6EE:$18 ソレデハ アテマス[FF]       $C6F8:$19 データヲ ノコシタイ トキハ[0D]カセットノ バックアップスイッチヲ[0D]                 ONニ シテクダサイ[FF]       $C724:$1A コノ カセットニハ[0D]”[C2]”ノ データガ[0D]ノコッテ イマス[FF]       $C741:$1B ウラナイヲ ハジメマス[FF]       $C74D:$1C マダ ウマレテ イマセン[FF]       $C75A:$1D スデニ オナクナリニ ナラレテ[0D]イルデショウ![FF]       $C772:$1E カラダノ チョウシガ ヨイノデ[0D]スポーツ シゴト ベンキョウ[0D]                 スベテニ ガンバリガ キキマス[FF]       $C7A1:$1F カラダノ チョウシガ フアンテイデスビョウキニ カカラナイヨウニ[0D]                 キヲ ツケテ クダサイ[FF]       $C7CE:$20 タイリョクガ スコシヨワッテイマスムリヲ シナイヨウニ ココロガケテ[0D]クダサイ[FF]       $C7F7:$21 キブンハ ソウカイ[0D]セッキョクテキニ[0D]ナニゴトモ ススメテクダサイ[FF]       $C819:$22 セイシンテキニ フアンテイデス[0D]イライラ シナイヨウニ キヲツケテ[0D]クダサイ[FF]       $C840:$23 キブンガ サエマセン[0D]タイジン カンケイニ[0D]キヲ ツケテ クダサイ[FF]       $C862:$24 モノゴトヲ カンガエルノニ[0D]テキシテ イマス[0D]ムズカシイ コトモ カイケツ シマス[FF]       $C88C:$25 オオキナ ミスヲ オカシヤスイ[0D]ヒデス[0D]ウッカリ シナイヨウニ キヲ ツケテクダサイ[FF]       $C8B7:$26 アタマノ カイテンガ ニブッテイマスノウリツガ アガリマセンカラ[0D]                 ムリニ アタマヲ ツカワナイ ヨウニ[FF]       $C8EB:$27 ソノヒノ ウラナイハ ツギノ ヨウニナリマシタ[FF]       $C903:$28 ウラナイ オワリ[FF]       $C90C:$29 ナカナカ ヨイ ケッカガ デマシタ[0D]ヨカッタ デスネ![FF]       $C928:$2A アマリ ヨクアリマセンネ[0D]キヲ オトサナイデ クダサイイ![FF]       $C945:$2B ウラナイハ ヤメマショウ[FF]       $C952:$2C ツギノ シツモンニ コタエテクダサイイ[FF]       $C965:$2D ワタシハ ナニヲ シテイル トコロ[0D]デシタカ       $C97B:$2E [FF]       $C97C:$2F アナタハ[0D][C0][0D]サン デスネ[FF]       $C98A:$30 [C0][0D]サン マタ ヨビダシテ クダサイ[FF]       $C99D:$31 セイネンガッピハ[0D][C1]/[FF]       $C9A9:$32 [0D][0D][E5][C0]/[C1] デスネ[FF]       $C9B4:$33 [C0]/[FF]       $C9B7:$34 [E5][C0]/[C1] ハ[FF]       $C9BE:$35 ウマレテ [C0] ニチメニ[0D]ナリマス[FF]       $C9CF:$36 [C0]![FF]       $C9D2:$37 [0D][C0][0D]サン オゲンキデスカ?[FF]       $C9DE:$38 イマ ワタシハ[0D][C0][0D]シジドウリ ドウサヲ[0D]シテイマス[FF]       $CA00:$39 セイネンガッピヲ イレテクダサイ[FF]       $CA11:$3A ウラナッテ ホシイ ヒニチヲ[0D]イレテクダサイ[FF]       $CA28:$3B ウラナイヲ ツヅケマスカ?[FF]   $CA50−$CA53:セレクト  入力コマンド データ ポインタ下位 $CA54−$CA57:セレクト  入力コマンド データ ポインタ上位       $CA58:ハイ 、イイエ、[0D] 、オワリ       $CA5C:[0D] 、[0D] 、[0D] 、[0D]       $CA60:ハイ 、イイエ、[0D] 、[0D]   $CA69−$CA72:セレクト  文字列データ ポインタ下位 $CA73−$CA7C:セレクト  文字列データ ポインタ上位             $00 $0301から 汎用文字列             $01 $D7F4 セレクト 画面             $02 $D9A5 カリキュレータ ボード画面             $03 $CA7D アトリビュート $00*2 RAM OK             $04 $D9FA メッセージ ボード画面             $05 $DA22 ボード ライン0、ライン1、カラー             $06 $DA32 ボード     、ライン0、カラー             $07 $DA42 ボード     、    、カラー             $08 $DA77 ボードの外枠             $09 $DACC ミュージック ボード画面   $CA8B−$CA8C:セレクト  RAMテスト データ $00,$55,$AA   $CA8D−$CAA1:セレクト  コマンド データ ポインタ下位 $CAA2−$CAB6:セレクト  コマンド データ ポインタ上位             $00 $7000から$7012 前々回入力した名前             $01 $7013から$7025 前回 入力した名前             $02 $7026から$7038    入力した名前       $CAB7:$03 オワリ[0D]       $CABB:$04 ハイ[0D]       $CABE:$05 イイエ[0D]       $CAC2:$06 GAME BASIC[0D]       $CACD:$07 カリキュレータ ボード[0D]       $CAD9:$08 ミュージック ボード[0D]       $CAE4:$09 メッセージ ボード[0D]       $CAEE:$0A END[0D]       $CAF2:$0B HELLO[0D]       $CAF8:$0C オハヨウ[0D]       $CAFD:$0D コンニチハ[0D]       $CB03:$0E コンバンハ[0D]       $CB09:$0F [0D](RETURN)       $CB10:$10 [0D](RETURN)       $CB0A:$11 BASIC[0D]       $CB10:$12 CAL.[0D]       $CB15:$13 MUS.[0D]       $CB1A:$14 MES.[0D]   $CB28−$CB57:セレクト  VSYNCタスク コマンド ポインタ下位 $CB58−$CB87:セレクト  VSYNCタスク コマンド ポインタ上位       $CB88:セレクト  コマンド$00       $CB8E:セレクト  コマンド$01       $CB92:セレクト  コマンド$02       $CB98:セレクト  コマンド$0F       $CBA1:セレクト  コマンド$2F       $CBBA:セレクト  コマンド$03       $CBC6:セレクト  コマンド$05       $CBCB:セレクト  コマンド$06、$07       $CBD8:セレクト  コマンド$1B       $CBE4:セレクト  コマンド$1E       $CBE6:セレクト  コマンド$08、$09       $CBEB:セレクト  コマンド$0A       $CC00:セレクト  コマンド$0B       $CC07:セレクト  コマンド$0C       $CC0B:セレクト  コマンド$0D       $CC15:セレクト  コマンド$04       $CC22:セレクト  コマンド$0E       $CC2E:セレクト  コマンド$10       $CC3A:セレクト  コマンド$11、$12       $CC3F:セレクト  コマンド$13、$14       $CC48:セレクト  コマンド$15、$16、$17       $CC4B:セレクト  コマンド$18       $CC92:セレクト  コマンド$19、$1A       $CC9B:セレクト  コマンド$1C       $CC9F:セレクト  コマンド$1D       $CCA7:セレクト  コマンド$1F       $CCAF:セレクト  コマンド$20       $CCB4:セレクト  コマンド$21       $CCB9:セレクト  コマンド$22、$23       $CCBE:セレクト  コマンド$24、$25、$26、$27、$2C       $CCDA:セレクト  コマンド$28       $CCDD:セレクト  コマンド$2B       $CCE6:セレクト  コマンド$2A       $CCEC:セレクト  コマンド$29       $CCFD:セレクト  コマンド$2D、$2E   $CE46:セレクト  RAMテスト    出力:$007B=$03 RAMテスト成功             $55 RAMテスト失敗             $AA RAMテスト失敗       $008A=$03 RAMテスト成功の場合(メッセージナンバ$03 RAM OK)       $7000−$7FFF=テストするデータの値         Tキーを押しながら起動するとこのRAMテストを行いBASICメニューへジャンプします         RAMテストは        $7000−$7FFFを$AAで書き込み、読み込みチェック        $7000−$7FFFを$55で書き込み、読み込みチェック       チェックに失敗すると書き込んだデータを$007Bに出力       チェックに成功すると$007Bに$03を出力と       RAM OKを表示する為のメッセージナンバ$03を出力します       $7000−$7FFFの内容は全て壊れます   $CF48:セレクト  バックアップ・スイッチのテスト    出力:Zf=1 BACKUP SWITCH=ON          0 BACKUP SWITCH=OFF         メモリ$7039に$55と$AAを書き込み、読み込みチェックをする事に       よってBACKUP SWITCHのON/OFFを調べます   $D48F:セレクト  セレクトでファンクションキーのデータを出力    入力:Y=$00=F1キーを選択         $01=F2キーを選択         $02=F3キーを選択         $03=F4キーを選択       $00C8=入力コマンド ファンクションキー データ インデックス         $00=[0D]、[0D]、[0D]、[0D]         $01=ハイ、イイエ、[0D]、[0D]         $02=[0D]、[0D]、[0D]、[0D]         $03=ハイ、イイエ、コンニチハ、オワリ    出力:ファンクションキーのデータの長さ    使用:A、X、Y       $0001=ファンクションキー データ ポインタ下位       $0002=ファンクションキー データ ポインタ上位       $0304以降 VRAMバッファ       $063D以降 キー入力バッファ         VRAMバッファとキー入力バッファにファンクションキーに定義されている       文字を書き込みます     $D7F4:セレクト  文字列データ$01 セレクト 画面データ       $D7F4:カラーパレット       $D817:BG1アトリビュート       $D850:画面   $D9A5:セレクト  文字列データ$02 カリキュレータ ボード画面データ       $D9A5:カラーパレット       $D9B0:画面   $D9FA:セレクト  文字列データ$04 メッセージ ボード画面データ       $D9FA:カラーパレット       $DA0C:画面   $DA22:セレクト  文字列データ$05 ボード画面データ       $DA22:セレクト  ライン0       $DA32:セレクト  ライン1       $DA22:セレクト  カラー             アトリビュート             インクポッド   $DA77:セレクト  文字列データ$08 ボードの外枠画面データ   $DACC:セレクト  文字列データ$09 ミュージック ボード画面データ       $DACC:カラーパレット       $DAD7:画面   $EDE8:セレクト  乱数の発生    使用:$0000=ワーク       $0051=乱数発生用(初期値 $0F)       $0052=乱数用       $0053=乱数用       $0054=乱数用       $0055=乱数用       $0056=乱数用       $0057=乱数用       $0058=乱数用         乱数を発生させます        $0051のd2 XOR $0052のd2で1ならCf=1                              0ならCf=0         Cf −> $0051 −> 0052... −> 0058        とシフトしていきます   $EE09:セレクト  文字列表示先頭(実行アドレスは$EE43) $EE43:セレクト  文字列表示    入力:$0000=文字列ポインタ下位       $0001=文字列ポインタ上位    使用:A、X、Y       $0010=ポート$2001の内容0       $0012=ポート$2005の内容(水平)       $0013=ポート$2005の内容(垂直)         NMIが掛かると$008Aのメッセージナンバのアドレスを       $0000と$0001にセットされ$EE43をコールされます       このルーチンでVRAMにデータを書き込まれ       スクロールをセットされます         文字列のデータフォーマット        PPUアドレス上位または$00=エンドマーク        PPUアドレス下位        コード d7:INCモード  1=Y方向、0=X方向            d6:書き込みモード 1=埋める、0=文字列            d5:長さ d5            d4:長さ d4            d3:長さ d3            d2:長さ d2            d1:長さ d1            d0:長さ d0        データ 埋める場合1バイト、文字列の場合長さの分              |        以降エンドマークがでるまで繰り返し   $EE4C:セレクト  スクロールセット    使用:$0012=ポート$2005の内容(水平)       $0013=ポート$2005の内容(垂直)         スクロールの設定を行います   $EE90−$EE94:右端オーバ  データ $EE9A−$EE9E:1ラインの長さデータ   $ED65:セレクト  VRAMバッファにデータを書き込む    入力:$0000=PPUアドレス上位       $0001=PPUアドレス下位       $0002=データ アドレス下位       $0003=データ アドレス下位    出力:$0300=VRAMバッファの長さ       $0301から$033F:VRAMバッファ    使用:A、X、Y       $0004=列数       $0005=PPUデータの長さ         VRAMバッファにデータを書き込みます       $0300の値をみて書き込むので追加していきます         データは第1バイト  :d7−4=列数、d3−0=データ長さ           第2バイト  :PPUアドレス上位           第3バイト  :PPUアドレス下位           第3バイト以降:データ   $EED3−$EEFA:セレクト  ファンクションキーデータ       $EED3:セレクト 用             $C1=ハイ             $C2=イイエ             $C3=コンニチハ             $C4=オワリ             $C5−$C8 使用しない       $EEDB:カリキュレータ用             $2B=+             $2C=−             $B5=×             $B6=÷             $28=(             $29=)             $2E=.             $3D==       $EEE3:ミュージック用             $A5=ド             $89=レ             $7F=ミ             $B7=ファ             $6E=ソ             $86=ラ             $6B=シ             $C8=エンソウ       $EEEB:???             $02             $06             $0E             $0F             $10             $11             $17             $18       $EEF3:ミュージック用 +SHIFT             $43=C             $44=D             $45=E             $46=F             $47=G             $41=A             $42=B             $24=$  
セレクト VSYNCタスク  $00:$2412 使用禁止 次のVSYNCタスク  $01:$CD93 RTS  $02:$DC77 カリキュレータ ボード  $03:$CD45 使用禁止 $00C6=$FFにしてタスク$06を実行  $04:$CF5B バックアップデータがあるかチェック  $05:$CED5 ウェイト、ランプのフラッシング  $06:$D2A4 文字列表示  $07:$CF78 バッファに$0D(RETURN)があるかチェック  $08:$CEF8 メッセージナンバの設定 (データを$008Aにセット)  $09:$CF06 CLS BG1、タスク$16の実行  $0A:$D515 セレクト 開始  $0B:$DB97 メッセージボード  $0C:$D44A ファンクションキーの定義  $0D:$CF1F キー入力した名前を$0500から$0512に書き込む  $0E:$CEF8 文字列の設定 (データを$008Aにセット)  $0F:$CF18 BG、OBJの表示、タスク$00にする  $10:$D0E8 名前の入力  $11:$D02A 名前のチェック  $12:$D107 JMP コマンド($0087)  $13:$CFC4 コマンドの照合  $14:$CF2D BACK UP SWITCHのチェック  $15:$D06E コマンド入力受付  $16:$CF10 OBJの表示をしない、タスク$00にする  $17:$D0DA ボード ネーム インデックスのリセット  $18:$F634  $19:$FA0D ウラナイ 生年月日を聞く  $1A:$F646 ウラナイ 実行するか聞く  $1B:$F67A ウラナイ ファンファーレ  $1C:$D10F  $1D:$D124  $1E:$F4B1 セレクト のファンクションキー設定、タスク$00にする  $1F:$CEE8  $20:$D10C 次のボードをセットする  $21:$F689 ウラナイ 開始  $22:$F98E  $23:$F9AF ウラナイ  $24:$F9E2  $25:$D139  $26:$E423 ミュージック ボード  $27:$D103 JMP コマンド($0045)  $FF       エンドマーク 第2データのコマンドへジャンプする     オペーレータのプログラム データ(コード)が格納されています  幾つかのコードのかたまりをコマンド$nnとします  1つのコードはVSYNCタスクnn、パラメータ、(パラメータ)の2バイトか3バイトになり  VSYNCタスクnnによって変わります     コマンドテーブル       +0    +1    +2    +3    −−−−−−−−−−−−−−−−−−−−−−−    $CB88、$CB8E、$CB92、$CBBA    $CC15、$CBC6、$CBCB、$CBCB    $CBE6、$CBE6、$CBEB、$CC00    $CC07、$CC0B、$CC22、$CB98    $CC2E、$CC3A、$CC3A、$CC3F    $CC3F、$CC48、$CC48、$CC48    $CC4B、$CC92、$CC92、$CBD8    $CC9B、$CC9F、$CBE4、$CCA7    $CCAF、$CCB4、$CCB9、$CCB9    $CCBE、$CCBE、$CCBE、$CCBE    $CCDA、$CCEC、$CCE6、$CCDD    $CCBE、$CCFD、$CCFD、$CBA1    コマンド$00($CB88)   $09、$00     BG1クリア、OBJオフ   $08、$01     画面作成 $01(セレクト )   $0F、$00     BG、OBJオン    コマンド$01($CB8E)   $1E、$00     セレクト のファンクションキーの設定   $0A、$01     セレクト の開始    コマンド$02($CB92)   $06、$00、$00 ワタシハ ファミリーコンピュタ デス   $06、$00、$01 ドウサヲ カイシ シマス    コマンド$0F($CB98)   $14、$00     BACKUP SWITCHのチェック、OFFなら次のタスクから+7(コマンド$2Fの先頭)   $06、$00、$0B カセットノ バックアップスイッチヲ OFFニシテクダサイ   $05、$06     ウェイト、ランプのフラッシング   $FF、$0F     JMP コマンド$0F    コマンド$2F   $06、$00、$06 アナタハダレデスカ? ナマエヲ イレテクダサイ   $05、$03     ウェイト、ランプのフラッシング   $10、$03     名前入力   $13、$00     入力コマンドのチェック   $0D、$00     名前をメモリにセット   $06、$00、$04 リョウカイ!   $06、$00、$2F アナタハ[C0]サン デスネ   $11、$00     名前のチェック   $06、$00、$0E アア! マエニ オアイシタコトガ アリマス   $06、$00、$0F コンニチハ    コマンド$03   $06、$00、$05 サギョウヲ カイシシマス   $04、$00     バックアップ スイッチのチェック   $06、$00、$1A コノ カセットニハ”[C2]”ノ データガノコッテイマス   $17、$00     ボードネームの初期化   $FF、$06     JMP コマンド$06    コマンド$05   $06、$00、$10 ツギハ ナニヲ シマショウ   $20、$00     次のボードネーム    コマンド$06、$07   $06、$00、$08 ”[C2]”ニ シマスカ?   $05、$03     ウェイト、ランプのフラッシング   $0C、$03     ファンクションキーの定義   $15、$00     コマンド インプット   $0C、$00     ファンクションキーの定義   $12、$00     JMP コマンド($0087)    コマンド$1B   $0C、$00     ファンクションキーの定義   $06、$00、$04 リョウカイ!   $06、$00、$0C [C2]ヲカイシ シマス   $05、$07     ウェイト、ランプのフラッシング   $09、$00     CLS BG1、タスク$16の実行    コマンド$1E   $12、$00     JMP コマンド($0087)    コマンド$08、$09   $0C、$00     ファンクションキーの定義   $06、$00、$08 ”[C2]”ニ シマスカ?       |            BASIC VSYNCタスク BASIC上でNMI(VBLANK)が掛かると OBJのDMA転送等、VYSNCタスクの実行を行います $0063をコマンドとして各実行を行います(実行終了$0063=$00になる) またMOVEコマンドが実行されるとMOVE処理とVSYNCタスクがNMI毎に交互に実行されます    <例 BGのCMTアクセス>         LDA #$0B ;VSYNCタスク$0C BG2を実行         STA $63   LOOP0:LDA $63  ;タスク終了($00)まで待つ         BNE LOOP0          |       CMTアクセスルーチン          |         LDA #$0C ;VSYNCタスク$0B BG1を実行         STA $63   LOOPZ:LDA $63  ;タスク終了($00)まで待つ         BNE LOOPZ         RTS      $00=VSYNCタスク終了または実行をしない      何も実行しません    $01=文字列表示 $88AA   入力:$0048=カーソル X座標      $0049=カーソル Y座標      $0064=文字列インデックス      $0700から文字列データ(エンドマーク$00)   出力:$0062=VRAMバッファ インデックス (終了した場合$00)      $0063=VSYNCタスク        $00 タスク実行終了                            $01 持ち越し      $0064=文字列インデックス       (終了した場合$00)        カーソル指定の文字列を表示します      ただし1回のタスクでカーソルのX座標が13か27まで行くと      タスクは終了して次の割り込みに持ち越しされます      つまり1回のタスクで1ラインの半分(14文字)しか表示されません      座標が右下を超えると画面をスクロールして新しいラインを表示します      スクロールするときに一旦タスクを止めて      ポート$2005に書き込みを行ってから再びタスク$01を指定して      次の割り込みに持ち越しします    $02=VRAMからバッファにコピー $8925   入力:$0049=カーソル Y座標      $0076=バッファ インデックス   出力:$0048=カーソル X座標 $00になる      $0063=VSYNCタスク $00 タスク実行終了      $0064=文字列インデックス$FF      $0500−$051B バッファ      Xレジスタ=$00A9の内容        カーソルX座標=$00、その1ラインをバッファにコピー      そのテキストライン接続フラグ$FFならカーソルY座標を+1                    $00なら何もしない       $0064=$FF      Xレジスタに$00A9の内容をロード      タスク$00にしてスクロールセットを行います    $03=テキストラインのコピー、表示 $8961   入力:$0019=表示アドレス 上位      $001A=表示アドレス 下位      $0048=コピーするカーソル X座標      $0049=コピーするカーソル Y座標      $0076=バッファ インデックス        カーソル位置から1ライン分のVRAMをバッファ$0500−$051Bにコピー      表示アドレスにバッファ$0500−$051Bのデータを表示      タスク$00にしてスクロールセットを行います    $04=テキストライン1行 消去 $8898   入力:$0048=カーソル X座標      $0049=カーソル Y座標        カーソル位置から右端までスペース($20)を埋め      タスク$00にしてスクロールセットを行います    $05=VRAMリード $8870   入力:$0048=カーソル X座標      $0049=カーソル Y座標   出力:A=リードしたVRAMデータ      $0073=リードしたVRAMデータ        カーソル位置のVRAMデータを読み込み$0073にデータを書き込みを行い      タスク$00にしてスクロールセットを行います    $06=BG カラーパレットの設定 $8990   入力:$0700=パレットコード($00から$03)      $0701=配色番号0      $0702=配色番号1      $0703=配色番号2      $0704=配色番号3        BG カラーパレットの1組のデータの書き込みを行い      タスク$00にしてスクロールセットを行います    $07=OBJカラーパレットの設定 $89BE   入力:$0700=パレットコード($00から$03)      $0701=配色番号0      $0702=配色番号1      $0703=配色番号2      $0704=配色番号3        OBJカラーパレットの1組のデータの書き込みを行い      タスク$00にしてスクロールセットを行います    $08=プロンプト表示 $8882   入力:$0048=カーソル X座標      $0049=カーソル Y座標        カーソル位置にあるキャラクタを$0073に保存      $0061のカーソルキャラクタを表示      タスク$00にしてスクロールセットを行います    $09=プロンプト表示で消されたキャラクタ表示 $8890   入力:$0048=カーソル X座標      $0049=カーソル Y座標        カーソル位置に$0073に保存されたキャラクタを表示      タスク$00にしてスクロールセットを行います    $0A=PLAY $9A90   入力:      バッファ内にあるPLAY文データの演奏を行います    $0B=BG−GRAPHIC画面(BG2)の選択 $8862   入力:$0033=ポート$2001の内容1        ポート$2001へ$0033の内容($0E)を書き込みます      主にBGのCMTアクセス後で使用    $0C=テキスト画面(BG1)の選択 $885F        ポート$2001へ$00を書き込みます      主にBGのCMTアクセス前で使用    $0D=スクリーンエディット INS $89CC  $0E=1ラインをバッファにコピーして次のVSYNCにタスク$0Fにする $8A02  $0F=Y座標を+1にして、そこからバッファにある1ラインデータをVRAMに書き込む $8A1A    
Home へ戻る