SEGA SC-3000 BASIC LEVEL III V1.1 (注)日本のIIIBを基準にしています。


LEVEL IIIAとLEVEL IIIBの違い 単純にRAM容量の違いでAが16KB+2KB(本体内)、Bが32KBになります Bの場合はB3端子(/DSRAM)をHにして本体内RAMをしよう禁止にして 全てカードリッジ内のRAMを使用します   バージョンの違い 詳しい事は分かっていませんが、 LEVEL IIIはPAL仕様、USA仕様、日本仕様があり、 日本だけV1.0とV1.1がリリースされているみたいです 恐らくV1.0のバグフィックス(VAL、INPUT?)なのですが 少なくとも06800H以降のアドレスがずれている為 ここをアクセスしているソフトは動作しません。(PiOの十円モニタ等)   カートリッジの回路図 中にはROMとD−RAMが搭載されており、D−RAMのリフレッシュ回路が本体内にあります その為にカードリッジはSC−3000/H専用になります(基板171−5067)     割り込み /NMI:キーボードにあるRESETボタンを押すとかかります      BASICの初期化を行い(プログラムは消えません)      またアドレスは固定でユーザーが自由につかえません   /INT:VDPのVBANK毎にかかります。      BASICではTIMEのみに使用      アドレスは固定なのでユーザー定義が出来ません   初期化 電源を入れると本体内のパワーリセット回路でシステムの初期化を行います 1回目の初期化でPPI、メモリチェック(ROM、VRAM、RAM)をして POWERF(097E2H)を01にします このときにRAMは全てクリアされます   RESETボタンはNMIスイッチで押されるとPWERFを見て、 000Hだったら最初と同じ初期化を行い、 000H以外だったらBASICの初期化から行います。   メモリを完全にクリアしたい場合はPOKE&H97E2,0を実行して RESETボタンを押せば(0066Hにジャンプ) 電源を入れ直す事と同じ事が出来ます。     シリアルプリンタ 初期化  1:PC6=0、PC7=1、PC5=0にする(/RESET=0、/FEED=1、DATA=0)  2:ウェイトをかける  3:PC6=1にする(/RESET=1)  4:ウェイトをかける    1バイト出力の内容   ’1’、ウェイト、D0、D1、D2、D3、D4、D5、D6、D7、’0’、ウェイト   *D7−D0の内容は反転して出力する カセットテープ 方式はPC−6001やPC−8801と同じFSKの1200bps(テープフォーマットは違う) ソフトウェアでタイミングを取っています。 ROM BASICではBASICプログラムのみですが DISK BASICではマシン語のセーブ・ロードもサポートしています。  ’1’は2400Hzの2サイクル  ’0’は1200Hzの1サイクルになります。          1バイトデータの内容  スタートビット’0’、d0、d1、d2、d3、d4、d5、d6、d7、ストップビット’1’、ストップビット’1’   テープフォーマット  ヘッダー部分    リーダーフィールド    ビット’1’*3600(450バイト分)    キーコード        1バイト:016H=BASICヘッダー      ファイルネーム16文字 16バイト    プログラムの長さ     2バイト:上位、下位の順    チェックバイト      1バイト:NEG(データ本体の合計 MOD 256)                      キーコードは含まない    空き           2バイト:000H*2      プログラム部分    1秒間無録音    リーダーフィールド    ビット’1’*3600(450バイト分)    キーコード        1バイト:017H=BASICプログラム      プログラムデータ  nnmmバイト:プログラム本体    チェックバイト      1バイト:NEG(データ本体の合計 MOD 256)                      キーコードは含まない    空き           2バイト:000H*2     未使用部分  カセットテープのロード・セーブルーチンの開始に8255のPC3を1にして、  終了時りにPC3=0にしています。  これはMOTORのオン/オフの制御ですが  本体ではPC3はオープンになっており  リモート制御を行なっていないので無意味となります    
プログラミング上での注意点  テキスト画面とグラフィック画面は切り替えて使用します  プログラムの打ち込みはテキスト画面のみ  表示画面はテキスト画面またはグラフィック画面となります  画面の読み書きはSCREEN命令で決まります    画面の左端2文字分は1行の繋がり為使用されます  CURSOR命令では2CHR分空けてX座0〜27(テキストの場合)となります  左端2文字はVPOKEで表示する事が可能になります   <例>画面左上に@を表示する  VPOKE&H3C00,&H41     メモリーマップ CPU  00000H−07FFFH:BASIC ROM  08000H−097FFH:BASIC システム用ワーク  09800H−0FFFFH:フリーエリア(IIIA:09800H−0C7FFH)                      (IIIB:09800H−0FFFFH)   VDP  00000H−017FFH:SCREEN2 パターンジェネレータ  01800H−01FFFH:SCREEN2 スプライトジェネレータテーブルまたはSCREEN1 パターンジェネレータ  02000H−037FFH:SCREEN2 パターンカラーテーブル  03800H−03AFFH:SCREEN2 パターンネームテーブル  03B00H−03B7FH:スプライト アトリビュート テーブル  03B80H−03BFFH:    空 き  03C00H−03FBFH:SCREEN1 テキスト  パターンネーム テーブル  03FC0H−03FFFH:    空 き     アスキーコード     000H   001H CTRL+A NULL   002H CTRL+B   003H CTRL+C BREAK   004H CTRL+D   005H CTRL+E カーソル以降の文字をクリア   006H CTRL+F   007H CTRL+G BELL 音を鳴らす   008H CTRL+H DEL  文字のデリート   009H CTRL+I HT   水平TAB   00AH CTRL+J LF   ラインフィード   00BH CTRL+K HM   ホーム カーソルを左上端に戻す   00CH CTRL+L CLR  画面のクリア   00DH CTRL+M CR   キャリッジリターン   00EH CTRL+N カナ、英数入力の切り替え   00FH CTRL+O テキスト画面、グラフィック画面の切り替え   010H CTRL+P CHSIZE0(グラフィック文字 8×8ドット)   011H CTRL+Q CHSIZE1(グラフィック文字16×8ドット)   012H CTRL+R INS 文字のインサート   013H CTRL+S スモールCAP オフ(大文字入力)   014H CTRL+T スモールCAP オン(小文字入力)   015H CTRL+U ラインをクリアしカーソルをラインの先頭に戻す   016H CTRL+V 英数入力、CHSIZE0、CONSOLE0,24,1,0、SCREEN,1、ホームの実行   017H CTRL+W GRAPH、英数入力の切り替え   018H CTRL+X クリック音のオン、オフの切り替え   019H CTRL+Y   01AH CTRL+Z   01BH   01CH 右カーソル移動   01DH 左カーソル移動   01EH 上カーソル移動   01FH 下カーソル移動  
コマンド LIST [m][−[n]]  m:開始行番号(省略すると始めから表示)  n:終了行番号(省略すると終わりまで表示)    入力したプログラムを表示します  スペースキー で一時停止  BREAKキーで  停止     LLIST [m][−[n]]  m:開始行番号(省略すると始めから印字)  n:終了行番号(省略すると終わりまで印字)    入力したプログラムをシリアルプリンタに印字します     SAVE ”ファイル・ネーム”  プログラムをセーブします(ファイル・ネームは16文字まで)     LOAD [”ファイル・ネーム”]  プログラムをロードします(ファイル・ネームは省略可)     VERIFY [”ファイル・ネーム”]  セーブしたプログラムとメモリのプログラムの比較を行う事で  正確にセーブ出来たのかチェックを行います(ファイル・ネームは省略可)     RUN [m]  m:開始行番号(省略すると始めから実行)    プログラムの実行を開始させます     CONT  STOP文やBREAKキーで中断されたプログラムの実行を再開します     NEW  変数、プロフラムをクリアします     DELETE m[−n]  m:開始行番号  n:終了行番号(省略すると開始行番号だけ削除)    プログラムを部分的に削除します     AUTO [m][,n]  m:開始行番号(省略すると10に指定)  n:増分(省略すると10に指定)    行番号を自動発生します     RENUM [m1][,m2][,m3]  m1:新しい行番号(省略すると10に指定)  m2:現在の行番号(省略するプログラムの始めから行番号を整理)  m3:増分(省略すると10に指定)    プログラムの行番号の整理を行います     ステートメント REM  プログラムに注釈をいれます     STOP  プログラムの実行を停止してコマンド待ちを行います  CONTでプログラムは続行する事が出来ます     END  プログラムの終了を宣言します     [LET] d=s  d:変数名  s:式    変数に値を代入します(LET自体省略可)     PRINT [s1{,または;}s2...]  sn:式(省略すると改行)    式で指定された数値や文字列をディスプレイに表示します  式はカンマ”,”かセミコロン”;”で区切ります  カンマは式を表示、区切られた後ろにスペースを空けて次の式の表示を行います  セミコロンは式を表示、区切られた後ろに続いて次の式の表示を行います  最後の式の区切りのコロンがあると改行は行われません、  何もないと改行が行われます    グラフィックモードでは8×8ドットまたは16×8として  ORで合成されます  文字のサイズ CHSIZE0(8×8ドット)または1は(16×8ドット)は  PRINT CHR$(&H10)またはCHR$(&H11)で指定    PATTERN文で定義されたキャラクタ8×8ドットは  テキストモードでは6ドット(bit7-2)×8ドットが表示されます     LPRINT [s1{,または;}s2...]  sn:式(省略すると改行)    式で指定された数値や文字列をシリアルプリンタに印字します  式はカンマ”,”かセミコロン”;”で区切ります  カンマは式を表示、区切られた後ろにスペースを空けて次の式の印字を行います  セミコロンは式を表示、区切られた後ろに続いて次の式の印字を行います  最後の式の区切りのコロンがあると改行は行われません、何もないと改行が行われます     INPUT [d$;]d1[,d2...]  d$:プロンプト文またはダブルクォーテーションで囲まれた文字列  dn:変数名    指定した変数へデータをキーボードから入力します     READ d1[,d2...]  dn:変数名    DATA文に格納してあるデータを読み、変数に代入します     DATA c1[,c2...]  cn:数値または文字列    READ文で変数に代入する為のデータを格納します     RESTORE [m]  m:行番号(省略するとDATA文の最も小さい行番号を指定)    READ文で読むデータの指定を行います     DIM d1(n1[,n2,n3])[,d2(n1[,n2,n3])...]  dn:配列名(n1−n3:添字の最大値)    配列変数の要素の大きさを指定して配列を宣言、メモリ領域の確保を行います  配列宣言は3次元までです  DIMで配列宣言しない場合は添字の最大値は10に指定されます     ERASE [d1,d2...]  dn:配列名(省略すると全配列を無効)    配列の宣言を無効にします     DEFFN d(x)=z  d:関数名  x:引数  z:関数の定義式    ユーザによって作成された関数を最大8個定義します  9個以上定義しようとすると? Function full errorになります   GOTO m  m:ジャンプ先の行番号    指定した行番号へジャンプします     GOSUB m  m:サブルーチンの先頭行番号    サブルーチンコールします     RETURN  サブルーチンから戻ります     ON s GOTO m1[,m2...]  s :数式(1≦s)  mn:ジャンプ先の行番号    指定されたいずれかの行番号へジャンプします     ON s GOSUB m1[,m2...]  s :数式(1≦s)  mn:サブルーチンの先頭行番号    指定されたいずれかのサブルーチンへコールします     FOR m=n1 TO n2 [STEP n3]  m :添字変数名  n1:初期値  n2:終値  n3:増分(省略すると1に指定)    FOR文からNEXT文までを条件にしたがって繰り返し実行する     NEXT [m1][,m2...]  mn:添字変数名    FORループの終わりを示します  FOR〜NEXT文を重ねる(入れ子)は4重までです     IF r THEN s  r:条件式  s:文(GOTO文の場合はGOTOを省略して行番号のみで可)    条件判断を行い、真ならTHENの後の分を実行する   比較演算子表   ・−−−−−−−−−−−−−−−−−−−−−・   |記 号|      内 容        |   |−−−+−−−−−−−−−−−−−−−−−|   |=  |等しい  (真なら−1、偽なら0)|   |<> |等しくない(真なら−1、偽なら0)|   |>  |大きい  (真なら−1、偽なら0)|   |<  |小さい  (真なら−1、偽なら0)|   |>= |以上   (真なら−1、偽なら0)|   |<= |以下   (真なら−1、偽なら0)|   |NOT|倫理反転             |   |AND|倫理積              |   |OR |倫理和              |   |XOR|排他的倫理和           |   ・−−−−−−−−−−−−−−−−−−−−−・     CONSOLE [v][,l][,c][,s]  v:スクロールの上限 0〜22  l:スクロールの長さ 2〜24  c:クリック音 1=有り、0=無し  s:1=スモールCAPオン、0=スモールCAPオフ    テキスト画面のスクロール範囲、クリック音のオン/オフ、スモールCAPのオン/オフを指定します     CLS  画面をクリアします     SCREEN n[,m]  n:書き込む画面 1=テキスト、2=グラフィック  m:表示する画面 1=テキスト、2=グラフィック    書き込む画面と表示する画面を指定します     COLOR n[,m,(x1,y1)−(x2,y2),b]  n:ビット”1”の色 0〜15  m:ビット”0”の色 0〜15  (x1,y1)−(x2,y2):背景色をセットする範囲  b:バックドロップの色    文字やキャラクタ、バックドロップの色の指定を行います  テキスト画面の場合第2パラメータまでしか指定できません  ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・  |色番号|   色|色番号|   色|色番号|   色|色番号|   色|  |−−−+−−−−+−−−+−−−−+−−−+−−−−+−−−+−−−−|  |  0|  透明|  4| 濃い青|  8|   赤| 12| 濃い緑|  |  1|   黒|  5| 薄い青|  9| 薄い赤| 13|マゼンダ|  |  2|   緑|  6| 濃い赤| 10| 濃い黄| 14|   灰|  |  3| 薄い緑|  7| シアン| 11| 薄い黄| 15|   白|  ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・     PATTERN mn,d1  m:定義 C#=テキストの定義、S#=スプライトの定義  n:文字コード テキストの定義=32〜255、スプライトの定義=0〜255  d:文字列式    キャラクタ定義を行います  定義データに当たる文字列は16進数で、  2バイト*8ラインで16バイトが必要になります  テキスト画面では1キャラクタ6×8ドットなので  定義データのBit1−0は無効になります  グラフィック画面では8×8ドットの表示になります  文字列式はアスキー16進数と*が使用可能です  *は3バイト目以降の奇数バイトにしか置けません  また17バイト目にも*が置ける  途中ラインは無視されます(以降は000Hで定義)  また文字列データは8ライン分必要ありませんが  データが奇数バイトだとステートメントエラーになります  ただし奇数バイトでも末尾が*ならエラーにならない     <例>  PATTERN C#&H20,”AA*TEST DAMONNE*”  PATTERN C#&H20,”AA55AA55AA55AA55*”  PATTERN C#&H20,”AA55”  PATTERN C#&H20,”AA55*”     CURSOR x,y  x:x座標 テキスト 0〜37、グラフィック 0〜255  y:y座標 テキスト 0〜24、グラフィック 0〜192    表示位置を決めます  テキストモードでは左端2文字分はシステム(プログラムラインの有無)で使用しているので  38文字分で左端が少し空きます     POSITION (x,y),a,b  x:中心点のx座標 0〜255  y:中心点のy座標 0〜191  a:xの軸方向 0=右に増加、1=左に増加  b:yの軸方向 0=下に増加、1=上に増加    グラフィックの中心点を指定します     PSET (x,y),c  x:x座標 0〜255  y:y座標 0〜191  c:色 0〜15    グラフィック画面に指定された位置に点を打ちます     PRESET (x,y)  x:x座標 0〜255  y:y座標 0〜191    グラフィック画面に指定された位置の点を消します     LINE [(x1,y1)]−(x2,y2),c,f  x1:始点x座標 0〜255  y1:始点y座標 0〜191  x2:終点x座標 0〜255  y2:終点y座標 0〜191  c :色 0〜15  f :B=箱を描く、BF=箱を描いてその中を塗り潰す    グラフィック画面に2点間の座標を指定して線を引きます  箱を描く場合は対角線を指定して四角形の線を引きます  また最初にx1,y1を指定されていれば  LINE−(x2,y2),cの指定が出来ます     BLINE [(x1,y1)]−(x2,y2),c,f  x1:始点x座標 0〜255  y1:始点y座標 0〜191  x2:終点x座標 0〜255  y2:終点y座標 0〜191  c :色 0〜15(無視されます)  f :B=箱を描く、BF=箱を描いてその中を塗り潰す    グラフィック画面に2点間の座標を指定して線を消します  箱を描く場合は対角線を指定して四角形の線を消します  また最初にx1,y1を指定されていれば  BLINE−(x2,y2)の指定が出来ます     CIRCLE (x,y),r[,c,l,m,n,o]  x:中心となるx座標 0〜255  y:中心となるy座標 0〜191  r:半径  c:色 0〜15  l:扁平率 (省略すると1に指定)  m:開始角度 0〜1  n:終了角度 0〜1  o:B=線を入れる、BF=円内を塗る    グラフィック画面に円を描きます  扁平率は垂直方向の半径/水平方向の半径で求める事が出来  2だと縦長の楕円に1だと円に0.5だと横長の楕円になります  開始角度、終了角度は中心から右が0度0として  左周りに角度が増え360度で1となり1周します  90度(真下)なら360度は1なので  360:90=1:nでn=0.25となります     BCIRCLE (x,y),r[,c,l,m,n,o]  x:中心となるx座標 0〜255  y:中心となるy座標 0〜191  r:半径  c:色 0〜15(無視されます)  l:扁平率 (省略すると1に指定)  m:開始角度 0〜1  n:終了角度 0〜1  o:B=線を入れる、BF=円内を塗る    グラフィック画面の円を消します  扁平率は垂直方向の半径/水平方向の半径で求める事が出来  2だと縦長の楕円に1だと円に0.5だと横長の楕円になります  開始角度、終了角度は中心から右が0度0として  左周りに角度が増え360度で1となり1周します  90度(真下)なら  360度は1なので360:90=1:nでn=0.25となります     PAINT (x,y),c  x:x座標 0〜255  y:y座標 0〜191  c:色 0〜15    グラフィック画面にLINE文やCIRCLE文で区切られた部分を塗ります     SPRITE n,(x,y),p,c  n:スプライトナンバ 0〜31  x:x座標 0〜255  y:y座標 0〜191  p:PATTERN文で定義した文字コード 0〜255  c:カラー 0〜15    スプライトの表示を行います     MAG m  m:0= 8× 8ドット    1=16×16ドット    2= 8× 8ドットの拡大    3=16×16ドットの拡大    スプライトのサイズを指定します     SOUND c,f,v  c:チャンネル 0=音を消す、1〜3=周波数を出すチャンネル、          4=ホワイトノイズを出す、5=周期期ノイズを出す  f:周波数  v:音量    0=音を消す、1=最小の音〜15=最大の音     周波数表   ・−−−−−−−−−−−−−−−−−−−−−−−−−−−・   |音階| f1 | f2 | f3 | f4 | f5 |   |−−+−−−−+−−−−+−−−−+−−−−+−−−−|   |C |    | 131| 262| 523|1047|   |C+|    | 139| 277| 554|1109|   |D |    | 147| 294| 587|1175|   |D+|    | 156| 311| 622|1245|   |E |    | 165| 330| 659|1319|   |F |    | 175| 349| 698|1397|   |F+|    | 185| 370| 740|1480|   |G |    | 196| 392| 784|1568|   |G+|    | 208| 415| 831|1661|   |A | 110| 220| 440| 880|1760|   |A+| 117| 233| 466| 932|    |   |B | 123| 247| 494| 988|    |   ・−−−−−−−−−−−−−−−−−−−−−−−−−−−・    サウンドの出力を行います     BEEP [m]  m:0=BEEP音を止めます    1=ピーと鳴り続けます    2=ピポピポと鳴ります    省略するとピッと鳴る    短い音(ブザー)を鳴らします     HCOPY  スクリーンに表示されている文字や記号がシリアルプリンタに印字されます  ただし印字されるのは英数字、カナ、ASCIIコードの記号のみで  グラフィックの記号は印字されません     CALL a  a:アドレス −32767〜32767    機械語のサブルーチンを呼び出します     POKE a,d  a:アドレス −32767〜32767  d:データ 0〜255    指定したメモリにデータを書き込みます  ただしROM領域00000H−07FFFFHに書き込んでも無視されます     OUT p,d  p:I/Oポートアドレス 0〜255  d:データ 0〜255    指定したI/Oポートにデータを出力します     VPOKE a,d  a:アドレス 0〜16383  d:データ 0〜255    指定したVRAMのアドレスにデータを書き込みます     関数 ABS(x)  x:数式    絶対値を与えます     RND(f)  f: 0=乱数係数が初期化されます     1=続けて乱数が発生されます    −1=乱数係数を入れ替えます    0〜1未満(少数第10位)まで乱数を発生させます     SIN(x)  x:ラジアン    三角関数、正弦(サイン)の値を与えます     COS(x)  x:ラジアン    三角関数、余弦(コサイン)の値を与えます     TAN(x)  x:ラジアン    三角関数、正接(タンジェント)の値を与えます     ASN(x)  x:−1〜1    SINθのθの度数を求めます(逆正弦)     ACS(x)  x:−1〜1    COSθのθの度数を求めます(逆余弦)     ATN(x)  x:ラジアン    逆正接の値を求めます  求められる値は−π/2からπ/2の間です     LOG(x)  x:数式    eを底とする対数を求めます(自然対数)     LGT(x)  x:数式    10を底とする対数を求めます(常用対数)     LTW(x)  x:数式    2を底とする対数を求めます     EXP(x)  x:数式    eに対する指数関数の値を与えます     RAD(x)  x:角度    角度からラジアンに変換します     DEG(x)  x:ラジアン    ラジアンから度に変換します     PI  円周率(3.1415926536)を与えます     SQR(x)  x:数値    数値の平方根を求めます     INT(x)  x:数式    数値を超えない最大の整数値を与えます     SGN(x)  x:数式    xの値が正なら1、0なら0、負なら−1を与えます     ASC(s)  s:文字列    文字列の最初の文字のアスキーコードを与えます     LEN(s)  s:文字列    文字列の長さを与えます     VAL(s)  s:文字列    文字列の数字を数値に変換します     CHR$(x)  x:数式 0〜255    指定したアスキーコードに対応した文字を与えます     HEX$(x)  x:数式 −32767〜32767    10進数を16進数の文字列に変換します     INKEY$    キーが押されていればその文字のアスキーコードを与えます  何も押されてなければヌルストリングが与えられます     LEFT$(s,x)  s:文字列式  x:文字列の長さ 0〜文字列式の長さ    文字列の左から任意の長さの文字列を与えます     RIGHT$(s,x)  s:文字列式  x:文字列の長さ 0〜文字列式の長さ    文字列の右から任意の長さの文字列を与えます     MID$(s,x[,y])  s:文字列式  x:文字列の先頭位置 1〜x  y:文字列の長さ (省略すると全て)    文字列の任意の位置から任意の長さの文字列を与えます     STR$(x)  x:数式    数値を文字列に変換する     TIME$  タイマの設定または読み出しを行います  設定する場合は TIME$=”hh:mm:ss”  読み出す場合は文字列として読みます     PEEK(a)  a:アドレス −32767〜32767    指定したメモリの内容を与えます     INP(p)  p:I/Oポートアドレス 0〜255    指定したI/Oポートの内容を与えます     FRE  使用できるフリーエリアを与えます     SPC(x)  x:数式 テキスト 0〜255、グラフィック 0〜255    PRINT文またはLPRINT文で任意の数がでスペースを与えます     TAB(x)  x:数式 テキスト 0〜37、グラフィック 0〜39    PRINT文またはLPRINT文で  現在のカーソルのある行から任意の位置まで移動します     STICK(f)  f:1=1P用 JOY、2=2P用 JOY    ジョイスティックの方向を示します   0=何も押されていない   1=上   2=右上   3=右   4=右下   5=下   6=左下   7=左   8=左上     STRIG(f)  f:1=1P用 JOY、2=2P用 JOY    ジョイスティックのトリガーボタンの状態を示します   0=何も押されていない   1=トリガー1が押されている   2=トリガー2が押されている   3=トリガー1,2が押されている     VPEEK(a)  a:アドレス 0〜16383    指定したVRAMのアドレスのメモリの内容を与えます     未定義命令 BASICコマンドの中にMOTOR命令があります。 ハードでは実装はされいないので使用しても意味はありませんが ポート(PC3)までは出ているのでリレー回路を追加すれば使用可能になります。 また、SAVE、LOAD、VERIFY命令でもモータの制御は行っています。   MOTOR n  n=0 CMTのモータをOn します  n=1 CMTのモータをOffします  nを省略するとモータの状態を変えます(OnならOff、OffならOnにする)   演算子表  ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・  |記 号|数値式|文字式|     内 容       |優先順位|  |−−−+−−−+−−−+−−−−−−−−−−−−−−−+−−−−|  |^  | ○ | × |べき乗 (0^0は1)    |  1 |  |−−−+−−−+−−−+−−−−−−−−−−−−−−−+−−−−|  |+  | ○ | × |符号+            |  2 |  |−  | ○ | × |符号−            |  2 |  |−−−+−−−+−−−+−−−−−−−−−−−−−−−+−−−−|  |*  | ○ | × |乗算             |  3 |  |/  | ○ | × |除算             |  3 |  |−−−+−−−+−−−+−−−−−−−−−−−−−−−+−−−−|  |MOD| ○ | × |余り             |  4 |  |−−−+−−−+−−−+−−−−−−−−−−−−−−−+−−−−|  |+  | ○ | ○ |加算(文字式の場合は文字の結合|  5 |  |−  | ○ | × |減算             |  5 |  ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・     エラーメッセージ System               :BASICインタプリタの動作エラー N−Formura too Complex:数値式が複雑すぎる S−Formura too Complex:文字列式が複雑すぎる Overflow             :値や演算結果が許容範囲を超えた Division Zero        :除算の分母が0 Function Parameter   :関数のパラメータが異常 String too long      :文字列の長さが254をオーバーした Stack over flow      :括弧の使いすぎ、PAINTする図形が複雑すぎる、                       ユーザ定義関数が自分自身を呼び出している Out of memory        :メモリが足りない(テキスト・変数・配列) Number of Subscripts :添字の個数が異常 Valve of Subscript   :添字の値がおかしい Syntax               :文法上のエラー Command Parameter    :コマンドのパラメータが異常 Line number over     :AUTO又はRENUMにおいてラインナンバが                       65535オーバーする Illegal line number  :ラインナンバがおかしい Line image too long  :ラインが長くなりすぎる(RENUM等) Undefind line number :指定されたライン番号がない(RENUM、GOTO、                       GOSUB、IF〜THEN、RESTORE、RUN) Type missmatch       :代入する側と代入される側のタイプが合わない(数値、文字列) Out of DATA          :READステートメントにより読み込もうとしたが                       DATA文のデータがない REUTRN without GOSUB :GOSUBを行わないでRETURN文が実行された GOSUB nesting        :GOSUBの入れ子が15レベルを超えた NEXT with FOR        :NEXTに対応するFORステートメントが無い FOR nesting          :FOR〜NEXTの入れ子が8レベルを超えた Statement Parameter  :ステートメントのパラメータが異常 Can’t Ccontinue      :CONTによる続行が不可能 For variable name    :FORステートメントのループ変数が数値変数でない                       (文字型または配列) Array name           :DIMステートメントのパラメータが配列でない Redimensioned array  :未定義の配列をERASEしようとした No program           :プログラムがテキスト中に無いのにSAVEしようとした Memory writing       :メモリへの書き込みエラー(LOAD) Device not ready     :プリンタが接続されていない、または故障 Undefined function   :定義されていないユーザ関数を呼び出した Verifying            :テープのプログラムとの比較エラー Illegal direct       :ダイレクトステートメント実行不可 Redo from start      :INPUTステートメント入力データがおかしい                       ・最初から入力なおしを要求 Extra ignored        :INPUTステートメント入力データがおかしい                       ・余分なデータが入力された(余分なデータは無視) Unprintable          :上記以外のエラー     変数・配列  変数名は先頭の1文字目が英字、以降は英字または数字とする  長さは何文字でも良いが先頭2文字で区別する  変数と配列の名前は同じでも良い     数値変数、配列の範囲  ±9.9999999999E−99〜±9.9999999999E+99     文字列変数、配列の範囲  文字列の長さ 0〜254     画面に取り込まれる文字 255文字まで ラインバッファから予約語に落として、 実際のテキストイメージに出来る文字数 255文字 文字列として扱う事の可能な文字数 254文字まで     演算の優先順位等のレベル数  8レベル     文字列演算の為のエリア  255文字分     FOR〜NEXTのネスティングのレベル数  8レベル   GOSUB、RETURNのネスティングのレベル数  15レベル  
中間言語  080H 関数 次の1バイトnnを使用  082H LIST  083H LLIST  084H AUTO  085H DELETE  086H RUN  087H CONT  088H LOAD  089H SAVE  08AH VERIFY  08BH NEW  08CH RENUM    090H REM  091H PRINT または ?  092H LPRINT または L?  093H DATA  094H DEF  095H INPUT  096H READ  097H STOP  098H END  099H LET  09AH DIM  09BH FOR  09CH NEXT  09DH GOTO  09EH GOSUB  09FH GO    0A0H ON  0A1H RETURN  0A2H ERASE  0A3H CURSOR  0A4H IF  0A5H RESTORE  0A6H SCREEN  0A7H COLOR  0A8H LINE  0A9H SOUND  0AAH BEEP  0ABH CONSOLE  0ACH CLS  0ADH OUT  0AEH CALL  0AFH POKE    0B0H PSET  0B1H PRESET  0B2H PAINT  0B3H BLINE  0B4H POSITION  0B5H HCOPY  0B6H SPRITE  0B7H PATTERN  0B8H CIRCLE  0B9H BCIRCLE  0BAH MAG  0BBH VPOKE  0BCH MOTOR    0C0H ^  0C1H *  0C2H /  0C3H MOD  0C4H +  0C5H −  0C6H <> または ><  0C7H >= または =>  0C8H <= または =<  0C9H >  0CAH <  0CBH =  0CCH NOT  0CDH AND  0CEH OR  0CFH XOR    0E0H FN  0E1H TO  0E2H STEP  0E3H THEN  0E4H TAB  0E5H SPC   関数 080H、nn  080H ABS  081H RND  082H SIN  083H COS  084H TAN  085H ASN  086H ACS  087H ATN  088H LOG  089H LGT  08AH LTW  08BH EXP  08CH RAD  08DH DEG  08EH PI  08FH SQR    090H INT  091H SGN  092H ASC  093H LEN  094H VAL  095H PEEK  096H INP  097H FRE  098H VPEEK  099H STICK  09AH STRIG    0A0H CHR$  0A1H HEX$  0A2H INKEY$  0A3H LEFT$  0A4H RIGHT$  0A5H MID$  0A6H STR$  0A7H TIME$   BASICプログラムの構造 10 REM TEST 20 PRINT ”TEST” 30 GOTO 10 とします   08160H−08161HのTXTBGNがBASICプログラムの先頭をあらわすポインタで 09800Hからプログラムが格納されます    9800:06                      − プログラムの長さ06バイト  9001:0A 00                   − 行番号10  9802:00 00  9804:90 20 54 45 53 54       − プログラム REM TEST  908B:0D                      − CRマーク(行の終わり)    980C:08                      − プログラムの長さ08バイト  980D:14 00                   − 行番号20  980F:00 00  9811:91 20 22 54 45 53 54 22 − プログラム PRINT "TEST"  9819:0D                      − CRマーク(行の終わり)    981A:04                      − プログラムの長さ04バイト  981B:1E 00                   − 行番号30  981D:00 00  981F:9D 20 31 30             − プログラム GOTO 10  9823:0D                      − CRマーク(行の終わり)    9824:00                      − エンドマーク  9825:00   テープソフトのプロテクト 海外のテープソフトにはプロテクトが掛かっているものがあります またROMルーチンコールは日本のV1.1と違うため使用できません   1.REM文にマシン語を書き込む   プロテクトではないのですがREM文の後ろにマシン語が書かれています   LISTを取るときにコントロールコードとして動作してしまいますので   UNLISTしている場合がほとんどのようです   BASICの1行の長さには制限があり   マシン語が大きい場合は次の行にまたぐ必要があります     2.UNLIST   構造上、行番号より後ろに小さい行番号があるとその行は表示されません   つまり10行の後ろに1から9行があると表示されません   通常のスクリーンエディタでは行番号より後ろに小さい行番号を置く事ができません   直接行番号のデータをPOKEやプログラムで書き換える事になります     3.BASICプログラム先頭に000Hを挿入   2本以上のファイルで1本目がローダ(通常ファイル)となり   2本目以降にBASICプログラムの先頭が000Hで始まるタイプです     ローダではROMコールにより2本目以降のロードを行います   終了するとロードしたプログラム全体を1つ前にずらします   この先頭が000Hがある為に2本目をLOAD、SAVEすると   No progrfamが出てしまいコピーが出来ないようになっています  
ROMルーチンの使用についての注意 ROM内ではフックの集合体がいくつかあります そこのフックでコールする事によってバージョンの違いに関係なく動作します ただしROM BASICとDISK BASICには互換性は全くありません   00000H リセット[06800H] 00038H /INT[06806H] 00066H /NMI[06803H] 00100H:べき乗(0^0は1になる) 00127H:MOD 0012DH:割り算 00133H:掛け算 0013CH:引き算 00145H:足し算   010C0H−017BFH 020H−0FFHのキャラクタデータ 017C0H−017FAH BASICコマンド データ 017FBH−01948H BASICステ−トメント データ   01A20H[023AEH]HL=HL*DE 入力:HL=被乗数    DE= 乗数 出力:HL= 乗    Cf=1 エラーあり(キャリーオーバ)       0 エラーなし      整数の乗算を行います   01A23H[0237FH]HL=HL/DE 入力:HL=被除数    DE= 除数 出力:HL= 商    DE=余り(整数)    Cf=1 エラーあり(0で割った)       0 エラーなし      整数の除算を行います   01A26H[02325H]16進数データを10進数アスキーコードに変換 入力:HL=16進数データ    DE=アスキーコードを置くアドレス 出力: C=10進数アスキーコードの桁    (DE)=10進数データ(アスキーコード)      最上の桁が0の場合は無視されます    <例>00064H(00100)なら100とする   01A29H[02310H]文字列にある020Hを読み飛ばす 入力:DE=文字列アドレス 出力:DE=020H以外の文字列アドレス     A=020H以外のアスキーコード    Zf=1      DEの文字列アドレスから020H(スペース)があればスキップして    それ以外のアスキーコードの取得を行います   01A2CH[0230FH]次の文字列にある020Hを読み飛ばす 入力:DE=文字列アドレス 出力:DE=020H以外の文字列アドレス     A=020H以外のアスキーコード    Zf=1      DEの文字列アドレスの次から020H(スペース)があればスキップして    それ以外のアスキーコードの取得を行います   01A2FH[02308H]アスキーコードの数字のチェック 入力: A=アスキーコード 出力:Cf=1 数字の範囲外       0 数字の範囲内      アスキーコード030H−039Hかチェックを行います   01A32H[022C4H]文字列にある10進数(アスキーコード)を16進数に変換する 入力:DE=文字列アドレス 出力:HL=16進数データ     B=文字列の桁    Cf=1 エラーあり       0 エラーなし     A=000H エラー 65535以上       001H エラー 数字でない      文字列のスペースをスキップしながらキャラクタデータを取得して    数列なら10進数の文字列として16進数の数値に変換を行います    文字列内にある数字は上位から下位の順番になります   01A35H[022B3H]Aレジスタの範囲のチェック 入力: A=アスキーコード     H=範囲の上限     L=範囲の下限 出力:Cf=1 範囲外       0 範囲内    上限と下限を設けて範囲内かチェックを行います   01A38H[022AAH]アスキーコードの大文字英字のチェック 入力: A=アスキーコード 出力:Cf=1 大文字英字の範囲外       0 大文字英字の範囲内      アスキーコード041H−05AH(大文字英字)かチェックを行います   01A3BH[02270H]変数名の取得 入力:DE=文字列のアドレス 出力:DE=変数より次のアドレス    変数の場合     HL=変数名Hが1文字目、Lが2文字目    文字列変数の場合     HL=変数名Hが1文字目、Lが2文字目+080H    Cf=1 取得不可(変数でない)       0 取得可      文字列のスペースはスキップして変数として記されているかチェックを行います    変数、文字列ならHLに変数名を出力し    次の文字列のスペースをスキップして次のデータを読みますが    データは破棄されるのでアドレスだけ返します   01A3EH[02266H]アスキーコードの小文字英字を大文字に変換する 入力: A=アスキーコード 出力: A=アスキーコード    Cf=1 変換不可       0 変換可      Aレジスタの内容がアスキーコードの小文字英字なら大文字にします    小文字以外ならCf=1にして変換は行いません   01A68H[01CB1H]フリーエリア計算 出力:HL=フリーエリアバイト 使用:08166H−08167H FREBGN フリーエリア先頭アドレス    08168H−08169H:FREEND フリーエリア最終アドレス+1      HL=(FREEND)−(FREBGN)を行いフリーエリア計算を行います   01A80H[01A83H]BASICコマンド解析 入力:DE=文字列のアドレス 出力:Cf=1 エラー発生、A=エラーコード 使用:0816AH        LINEMD ラインモード 000H=プログラム入力、001H=ダイレクトコマンド    0816BH        LINELN ラインレングス−1(入力された文字数)    0816CH−0816DH LINENO ラインナンバ    08170H−0826FH LINEIM ラインイメージ    09800H以降      BASICプログラム領域      入力した文字列をBASICプログラムに変換します   01FD2H 中間言語の変換 入力:DE=バッファアドレス    HL=中間言語データアドレス 出力:DE=バッファアドレス     A=中間言語(変換出来た場合のみ)    Cf=1 中間言語に変換出来た       0 中間言語に変換出来ない      DEのバッファにある文字列が中間言語データアドレスの文字と一致するかチェックを行います    またファンクションの080H、nnはnnの部分だけチェックを行うようにします       一致すればCf=0、DE=チェックした所までのバッファアドレス      中間言語をAレジスタに出力、RET       一致しなければ次の中間言語データのチェックを行い最後まで一致しなければ      Cf=1、DE=バッファアドレスを最初の入力値に戻し、RET      <中間言語データ>     DB ’LIST’ ,082H ;アスキーデータ、中間言語の順     DB ’LLIST’,083H         |     DB 000H         ;エンドマーク     02400H[02B52H]出力デバイス 1バイト出力 入力: A=アスキーコード    082A0H−082A1H PUTADR 出力デバイスベクタ     PRT:07008H         (シリアルプリンタ)     CRT:04A24H         (テキスト)     SC1:04A57Hまたは05099H(スクリーン1)     SC2:054F3H         (スクリーン2)      PUTADR(出力デバイスベクタ)を実行します   02403H[02B3AH]4桁16進数を10進数に変換、出力デバイスに出力 入力:HL=16進数データ(00000H−0FFFFH) 使用:086EAH−086EEH 4桁の16進数(アスキーコード)      HLの16進数データ値を十進数のアスキーコードに変換    086EAH−086EEHに十進数データを置いて    このデータを02400H[02B52H]をコールしてデバイスに出力します   02427H[0295D]中間言語から文字列(アスキーコード)に変換 入力: H=中間言語    DE=文字列アドレス 出力:変換出来た場合     (DE)=文字列      DE=データの最後のアドレス+1       L=データの長さ    変換出来ない場合(中間言語の無いデータを指定)       L=000H      中間言語からアスキーデータ文字に変換します   02448H[02751H]エラー出力 入力: A=エラーコード    086E8H−086E9H=エラーメッセージベクタ 06D5FH      エラーメッセージベクタへジャンプします   029B8H[0339BH]パラメータジャンプ 入力:A=ジャンプする番号    第1バイト=ジャンプするアドレスの下位    第2バイト=ジャンプするアドレスの上位    以降続く(エンドマークは無し) 使用:09347H−09348H テーブルジャンプ HLレジスタ退避用    09349H−0934AH テーブルジャンプ DEレジスタ退避用      Aレジスタのジャンプ番号へ飛びます    ジャンプ番号の範囲はありません      <例>ジャンプ#02へジャンプする場合       LD A,002H       CALL 02B98H       DW Address0 ;ジャンプ#00       DW Address1 ;ジャンプ#01       DW Address2 ;ジャンプ#02       DW Address3 ;ジャンプ#03   02B8FH[033CA]スタックオーバチェック      BASICシステムに必要なスタック量のチェックを行います    オーバすると? Stack overflow error   02BBFH[02C54H]VDPレジスタ設定 入力:C=VDPレジスタ(0−7)    A=VDPに送るデータ      VDPレジスタにデータを送ります   02BC5H[02C44H]VRAMアドレス ライト 入力:HL=VRAMアドレス      VRAMのアドレスを指定、ライトモードにします   02BC8H[02C3DH]VRAM 1バイトライト 入力:A=データ      NOP*4を実行してからVRAMに書き込みを行います   02BCBH[02C32H]VRAMアドレス リード 入力:HL=VRAMアドレス      VRAMのアドレスを指定、リードモードにします   02BCEH[02C2AH]VRAM 1バイトリード 出力:A=データ      NOP*5を実行してからVRAMの読み込みを行います   02BD1H[02BD4H] VRAMとVRAMSVの交換 使用:08B36H−09335H VRAMSV VRAM01800H−01FFFH    09364H−093E3H VRAM転送用バッファ      VRAM 01800H−01FFFHと    CPUメモリ 083B6H−09335Hの内容を交換します   039D0H[03F53H]TXTBCL テキスト バックカラーの設定 入力:A=カラーコード(0−15) 使用:09339H COLORT テキストカラー      COLORT(テキストカラー)の上位4ビットと合成して    VDP R#07にデータを書き込みます   039D3H[03F39H] TXTCCL テキストトカラーの設定 入力:A=カラーコード(0−15) 使用:09339H COLORT テキストカラー    COLORT(テキストカラー)の下位4ビットと合成して    VDP R#07にデータを書き込みます   039D6H[03F28H]GRPCCB グラフィック画面”0”のカラー 入力:A=カラーコード(0−15) 入力:0933AH COLOTG グラフィック スクリーンカラー 出力:0933AH COLOTG グラフィック スクリーンカラー      COLOTGでドット”0”の部分のカラーの設定を行います   039D9H[03F13H]GRPCCL グラフィック画面”1”のカラー 入力:A=カラーコード(0−15) 入力:0933AH COLOTG グラフィック スクリーンカラー 出力:0933AH COLOTG グラフィック スクリーンカラー      COLOTGでドット”1”の部分のカラーの設定を行います   039DFH[03DEEH]画面の初期化 出力:09336H VRAMMD ディスプレイモード       001H    09337H SPRSIZ スプライトサイズ        000H    09338H SPRMAG スプライトの拡大        000H    09339H COLORT テキストカラー         013H    0933AH COLOTG グラフィック スクリーンカラー 01FH    09410H COLORD バックドロップカラー      005H    09411H SCRULM テキストスクリーン上限     000H    09412H SCRLLM テキストスクリーン下限     017H    08B36H−09335H VRAMSV VRAM01800H用      各ワークの設定、VDP設定、キャラクタ設定、グラフイックカラー、CLS    スプライトの消去等を行います      VDP R#00=000H    VDP R#01=0F0H    VDP R#02=00FH パターン名称テーブル             03C00H    VDP R#03=0FFH カラーテーブル・ベース            03FC0H    VDP R#04=003H パターン・ジェネレータ・テーブル       01800H    VDP R#05=076H スプライト属性テーブル・ベース        01800H    VDP R#06=003H スプライト・パターン・ジェネレータ・テーブル 01800H    VDP R#07=013H テキストカラー   039E2H[03D90H]DSPGRP グラフィック画面の表示 SCREEN ,2 使用:08B36H−09335H VRAMSV VRAM01800H−01FFFH    09336H VRAMMD ディスプレイモード 01=テキスト、02=グラフィック    09337H SPRSIZ スプライトサイズ    09338H SPRMAG スプライトの拡大 000H=拡大しない、001H=拡大する    09364H−093E3H VRAM転送用バッファ    09410H COLORD バックドロップカラー      グラフィック画面の表示(SCREEN,2)の実行を行います     039E5H[03D32H]DSPTX SCREEN ,1 テキスト画面の表示 使用:08B36H−09335H VRAMSV VRAM01800H−01FFFH    09336H VRAMMD ディスプレイモード 01=テキスト、02=グラフィック    09337H SPRSIZ スプライトサイズ    09338H SPRMAG スプライトの拡大 000H=拡大しない、001H=拡大する    09339H COLORT テキストカラー    09364H−093E3H VRAM転送用バッファ      テキスト画面の表示(SCREEN,1)の実行を行います     039EEH[03C76H]PLOTPT グラフィク画面でドットの描画 入力: D=Y座標(0−191)     E=X座標(0−255)     A=001H 描画       000H 消去 使用:0933AH COLOTG グラフィック スクリーンカラー      グラフィック画面にドットを描画または消去を行います    またY座標を192以上にするとなにもしません     039F1H[03BDAH]PLOTLN グラフィック画面でラインの描画 入力: D=開始点のY座標(0−191)     E=開始点のX座標(0−255)     H=終了点のY座標(0−191)     L=終了点のX座標(0−255)     A=動作 001H 描画          000H 消去     B=横ドットの接続 000H する               001H しない 使用:0933AH COLOTG グラフィック スクリーンカラー    09448H グラフィックラインの動作 000H=消去、001H=描画    09449H グラフィックラインの接続 000H=する、001H=しない      グラフィック画面にラインを描画または消去を行います    また開始、終了点のY座標を192以上にするとなにもしません   039F4H[03B74H]SCRTXTテキスト画面のスクロール 入力:H=スクロールする上のライン    L=スクロールする下のライン 使用:09420H−09447H テキストスクロール用バッファ      HLで指定した範囲内のテキスト画面のスクロールを行います   039FAH[039F3H]テキスト キャラクタパターンデータをVRAMバッファへ転送 入力:A=アスキーコード 出力:09413H−0941AH VRAMバッファ 使用:08B36H−09335H:VRAMSV VRAM01800H−01FFFH    09336H VRAMMD ディスプレイモード 01=テキスト、02=グラフィック      テキストモードの場合     VRAM01800H−01FFFHのパターンジェネレータから     対応するキャラクタのデータを読み     09413H−0941AHのVRAMバッファに転送します      グラフィックモードの場合     08B36H−09335Hに退避されているパターンジェネレータデータから     対応するキャラクタのデータを読み     09413H−0941AHのVRAMバッファに転送します   039FDH[03AE7H]WVSCAN CMT 波形スキャン 入力:C=PB7を読み込んだカウンタ    D=前のPB7のデータ 080H または 000H 出力:C=PB7を読み込んだカウンタ    D=PB7のデータ 080H または 000H      PB7(CMT LOAD端子)を読み波形が変わるまでCレジスタをカウントします    このCレジスタの値でCMT データビットの’1’か’0’の判断を行います    また03AE5HからコールするとCレジスタを000Hにしてから    このルーチンを実行します   03A00H[03ACBH]LEADSR CMTリーダフィールドリード    CMTからリーダフィールド(ピーっと鳴っている部分)が見つかるまで待ちます    リーダーフィールドは’1’*3600のうち256バイトあればOk.とみなします   03A03H[03AC3H]CDELAY Cレジスタディレイ 入力:C=データ      279.365nsec*Cレジスタのウエイトをかけます   03A06H[03A8EH]BYTERD CMT 1バイトリード 出力:A=リードデータ      CMTから1バイトデータの読み込みを行います    スタートビット’0’があるまで待ち    データBit0から7へ読み込み、Aレジスタに返します   03A09H[03A6AH]ONEOUT CMT 1ビットライト ’1’ 入力:C=ディレイ 029H−02EH      CMTへ1ビット ’1’を書き込みます    ただし書き込みのタイミングはソフトウェアで行う為    コールするアドレス等でディレイ値が変わります   03A0CH[03A79H]ZEROOUT CMT 1ビットライト ’0’ 入力:C=ディレイ 05FH−063H      CMTへ1ビット ’0’を書き込みます    ただし書き込みのタイミングはソフトウェアで行う為    コールするアドレス等でディレイ値が変わります   03A12H[03A15H]BYTEWD CMT1 バイトライト 入力:A=ライト データ    C=052H(ディレイデータ)      CMTへ1バイトデータの書き込みを行います    スタートビット’0’を書き込み    データBit0から7へ書き込みます    パラメータのCレジスタの052Hはスタートビット’0’を書き込む為にあります   03A4DH[03AFH]LEADWR CMT リーダフィールドライト      CMTへリーダフィールド(ピーっと鳴っている部分)を書き込みます    リーダーフィールドは’1’*3600   03AB4H CMT 1ビットリード 出力:Cf=1 リードデータ’1’       0 リードデータ’0’      03AE7H(WVSCAN)をコール    ウェイト    03AE7H(WVSCAN)をコール    2回目のCレジスタのカウンタ値によって    ’1’と’0’の判断を行います   03BCAH HL=03C00H+A*40 入力: A=テキストY座標 出力:HL=VRAMアドレス      テキスト画面のVRAM計算を行います     03FA0H−03FDFH キーマトリクス アスキーデータ 英数 03FE0H−0401FH キーマトリクス アスキーデータ SHIFT 04020H−0405FH キーマトリクス アスキーデータ カナ 04060H−0409FH キーマトリクス アスキーデータ SHIFT+カナ 040A0H−040DFH キーマトリクス アスキーデータ GRAPH 040E0H−0411FH キーマトリクス アスキーデータ SHIFT+GRAPH 04120H−0415FH キーマトリクス アスキーデータ CTRL 04160H−04298H キーマトリクス アスキーデータ FUNC     042C0H[04952H]キーポートを読む 出力:09460H KEYIM0    09461H KEYIM1    09462H KEYIM2    09463H KEYIM3    09464H KEYIM4    09465H KEYIM5    09466H KEYIM6    09467H KEYIM7    09468H KEYIMC      キーポートを全て読み、ワークにマトリックスデータを書き込みます      042C3H[048DDH]BREAKキーチェック 出力:Cf=1 BREAKキーが押された       0 BREAKキーが押さていない 使用:09469H BREAKキーフラグ 000H=オフ、001H=オン      BREAKまたは^Cのチェックを行います   042C6H[0492DH]スペースキーチェック 出力:Cf=1 スペースキーが押された       0 スペースキーが押さていない 使用:0946AH スペースキーフラグ 000H=オフ、001H=オン      スペースキーのチェックを行います   042C9H[048A6H]テキストの1文字のキャラクタ定義 入力:A=アスキーコード    09413H−0941AH VRAMバッファ 使用:08B36H−09335H VRAMSV VRAM01800H−01FFFH    09336H VRAMMD ディスプレイモード 01=テキスト、02=グラフィック      テキストの1文字キャラクタ定義を行います    ディスプレイモードが01の場合、08B36H−09335Hに    それ以外の場合、直接VRAM01800H−01FFFHに    09413H−0941AHにあるVRAMバッファでキャラクタ定義を行います   042CCH[04880H]1キャラクタのスプライト属性の読み込み 入力:A=スプライトNo.nn(000H−01FH) 出力:09413H−09416H VRAMバッファ      1キャラクタのスプライト属性4バイトをVRAMバッファに読み込みます   042CFH[0485AH]1キャラクタのスプライト属性の書き込み 入力:A=スプライトNo.nn(000H−01FH)    09413H−09416H VRAMバッファ      1キャラクタのスプライト属性4バイトをVRAMバッファから書き込み   042D2H[0484BH]SSPRPS 1キャラクタのスプライト ポジションの書き込み 入力:A=スプライトNo.nn(000H−01FH)    D=スプライトY座標(0−191)    E=スプライトX座標(0−255) 使用:09413H−09416H VRAMバッファ      指定したスプライトの属性をVRAMバッファに読み込み    D、EレジスタのX、Y座標をVRAMバッファに書き込み    VRAMバッファからVDPに書き込みを行います   042D5H[0483CH]SSPRNA 1キャラクタのスプライト ネームの書き込み 入力:A=スプライトNo.nn(000H−01FH)    C=キャラクタNo.nn 使用:09413H−09416H VRAMバッファ      指定したスプライトの属性をVRAMバッファに読み込み    CレジスタのキャラクタをVRAMバッファに書き込み    VRAMバッファからVDPに書き込みを行います   042D8H[04822H]SSPRCL 1キャラクタのスプライト カラーの書き込み 入力:A=スプライトNo.nn(000H−01FH)    C=カラーコード(0−15) 使用:09413H−09416H VRAMバッファ      指定したスプライトの属性をVRAMバッファに読み込み    CレジスタのカラーをVRAMバッファに書き込み    VRAMバッファからVDPに書き込みを行います   042DBH[04807H] 1キャラクタのスプライト EC=0の書き込み 入力:A=スプライトNo.nn(000H−01FH)    C=000Hまたは001H 使用:09413H−09416H VRAMバッファ      指定したスプライトの属性をVRAMバッファに読み込み    Cレジスタ1/2 OR カラー(EC=0+カラー)をVRAMバッファに書き込み    VRAMバッファからVDPに書き込みを行います   042DEH[047B0H]キーマトリクス反転データの作成 出力:09473H KEYIR0    09474H KEYIR1    09475H KEYIR2    09476H KEYIR3    09477H KEYIR4    09478H KEYIR5    09479H KEYIR6    0947AH KEYIR7 使用:09460H KEYIM0    09461H KEYIM1    09462H KEYIM2    09463H KEYIM3    09464H KEYIM4    09465H KEYIM5    09466H KEYIM6    09467H KEYIM7    0946BH KEY??0    0946CH KEY??1    0946DH KEY??2    0946EH KEY??3    0946FH KEY??4    09470H KEY??5    09471H KEY??6    09472H KEY??7      KEY??0−KEY??7をデータ反転してKEYIM0−KEYIM7をANDした値を    KEYIR0−KEYIR7にセットします   042E1H[047A8H]スモールCAP オン 出力:09485H SMLCAP スモールCAP 001H=オン      ワーク09485H SMLCAP=001Hにするだけです   042E4H[047A0H]スモールCAP オフ 出力:09485H SMLCAP スモールCAP 000H=オフ      ワーク09485H SMLCAP=000Hにするだけです   042E7H[04798H]英数モードにする 出力:09484H GREENG キー入力のモード      ワーク09484H GREENGを000Hにするだけです   042EAH[04788H]カナモードにする 出力:09484H GREENG キー入力のモード      ワーク09484H GREENGを001Hにするだけです   042EDH[04722H]キーリピートのチェック 出力:09483H オートリピート開始カウンタ 使用:09460H KEYIM0    09461H KEYIM1    09462H KEYIM2    09463H KEYIM3    09464H KEYIM4    09465H KEYIM5    09466H KEYIM6    09467H KEYIM7    09473H KEYIR0    09474H KEYIR1    09475H KEYIR2    09476H KEYIR3    09477H KEYIR4    09478H KEYIR5    09479H KEYIR6    0947AH KEYIR7    0947BH KEYIA0    0947CH KEYIA1    0947DH KEYIA2    0947EH KEYIA3    0947FH KEYIA4    09480H KEYIA5    09481H KEYIA6    09482H KEYIA7    09483H オートリピート開始カウンタ      KEYIM0−KEYIM7を見て何も押されていなければ    09483Hを000H、KEYIA0−KEYIA7を000HにしてRET    次にKEYIR0−KEYIR7を見て何か押されていれば     09483Hを+1     09483Hが001H−00EならKEYIA0−KEYIA7を000HにしてRET     09483Hが00FHになったら0EHにしてKEYIA0−KEYIA7に対応するビットを1にします    押されていなければ     09843Hを001H、KEYIR0−KEYIR7からKEYIA0−KEYIA7にコピーしてRET   042F0H[046FFH]スモールCAPの英字の大文字、小文字の変換 入力:アスキーコード 出力:アスキーコード 使用:09485H SMLCAP スモールCAP 000H=オフ、001H=オン      スモールCAPオフなら変換せずそのままのアスキーコードに出力します    スモールCAPオンなら大文字は小文字、小文字は大文字に変換します   042F3H[046DBH]キーマトリックスからアスキーコードに変換 入力:HL=キーマトリックスアスキーデータ先頭アドレス(09460Hまたは0947BH)    DE=キーマトリックスデータ先頭アドレス 出力:A=アスキーコード      DEのキーマトリックスで押されたキーを    対応するキーマトリックスアスキーデータをAレジスタに返します   042F6H[0462BH]INKEYS キー入力 出力:A=アスキーコード 使用:09460H KEYIM0    09461H KEYIM1    09462H KEYIM2    09463H KEYIM3    09464H KEYIM4    09465H KEYIM5    09466H KEYIM6    09467H KEYIM7    09468H KEYIMC      042C0H[04952H]をコールしてキーポートを読み、特殊キーによって     CTRL  HL=04120H     SHIFT HL=03FE0H     英字    HL=03FA0H    DE=09460H(KEYIM0)にして    042F3H[046DBH]をコールしてキーマトリックスからアスキーコードに変換    アスキーコードは042F0H[046FFH]をコールして    スモールCAPの英字の大文字、小文字の変換行ったものがAレジスタに出力されます         042FCH[045E2H]TIME$ 出力:A=タイム ll時    B=タイム mm分    C=タイム ll時    083A2H=008H STLEN2 キャラクタレングス 使用:0948EH TIMES  タイム nn秒    0948FH TIMEM  タイム mm分    09490H TIMEH  タイム ll時      TIME$を実行すると09341H−09342Hのフックによって    ここにジャンプします   042FFH[045CAH] タイマワーク クリア 出力:0948BH−0948CH TIMEA  タイムアジャスト    0948DH        TIMEI  インターバルタイム(1/60秒)    0948EH TIMES  タイム nn秒    0948FH TIMEM  タイム mm分    09490H TIMEH  タイム ll時      タイマワークを全て000Hにします   04302H[04563H]/INTサブルーチン タイマ 使用:0948BH−0948CH TIMEA  タイムアジャスト    0948DH        TIMEI  インターバルタイム(1/60秒)    0948EH TIMES  タイム nn秒    0948FH TIMEM  タイム mm分    09490H TIMEH  タイム ll時      /INT毎にタイマのカウントを行います   04305H[04543H]カーソルからテキストパターンネームテーブルアドレスの変換 入力:D=カーソルY    E=カーソルX 出力:HL=VRAMアドレス(テキスト)    Cf=1 エラーあり(カーソル範囲外の指定)       0 エラーなし      指定したカーソル位置からVRAMアドレス(03C00H−03FBFH)に変換を行います   04308H[0451EH]テキスト画面スクロール上限の左端クリア 出力:0948AH CURROW カーソルロウ(Y座標)=002H 使用:09411H SCRULM テキストスクリーン上限      テキストスクリーンの上限の左端2キャラクタ020Hで埋めます    左端2キャラクタは連結用データに使用され    スクリーンエディットでは移動出来ないようになっています   0430BH[044EBH]TXTCLR テキスト画面のクリア 出力:0948AH CURROW カーソルロウ(Y座標)=002H 使用:09411H SCRULM テキストスクリーン上限    09412H SCRLLM テキストスクリーン下限      指定したスクロール範囲内をクリアして    04308H[0451EH]をコールします(上限左端をクリア)   0430EH[044CEH]スクロール範囲の設定、クリア 出力:0948AH CURROW カーソルロウ(Y座標)=002H    Cf=1 エラーあり(カーソル範囲外の指定)       0 エラーなし 使用:09411H SCRULM テキストスクリーン上限    09412H SCRLLM テキストスクリーン下限      スクロール範囲を指定して、0430BH[044EBH]をコールします   04311H[044C4H]キーポインタで通常入力にする 出力:09487H−09488H キーポインタ 044CDH      キー入力ルーチンでオート入力を行わないように(通常入力)します    044CDHは000Hなので通常入力   04314H[043ADH]1文字キー入力 出力:A=アスキーコード 使用:09460H KEYIM0    09461H KEYIM1    09462H KEYIM2    09463H KEYIM3    09464H KEYIM4    09465H KEYIM5    09466H KEYIM6    09467H KEYIM7    09468H KEYIMC    0946BH KEY??0    0946CH KEY??1    0946DH KEY??2    0946EH KEY??3    0946FH KEY??4    09470H KEY??5    09471H KEY??6    09472H KEY??7    09473H KEYIR0    09474H KEYIR1    09475H KEYIR2    09476H KEYIR3    09477H KEYIR4    09478H KEYIR5    09479H KEYIR6    0947AH KEYIR7    0947BH KEYIA0    0947CH KEYIA1    0947DH KEYIA2    0947EH KEYIA3    0947FH KEYIA4    09480H KEYIA5    09481H KEYIA6    09482H KEYIA7    09483H オートリピート開始カウンタ    09484H GREENG キー入力のモード    09486H KEYCRC キークリック 000H=オン、001H=オフ    09487H−09488H キーポインタ      キーポインタの内容が000H以外の場合    キーポインタを+1してAレジスタに出力します(オートキー)      キー入力許可用フラグが000Hの場合     042C0H[04952H] キーポートを読み     042DEH[047B0H] キーマトリクス反転データの作成     042EDH[04722H] キーリピートのチェック    FUNC+何かキーが押されたら、そのアスキーデータアドレスをキーポインタ(オートキー)として    最初の文字をAレジスタに出力します      英数、英数+シフト、カナ、カナ+シフト、GRPH、GRPH+シフト、CTRLでは    各モードでアスキーコードの変換、スモールCAP処理、キークリック処理    ^N(カナ、英数の切換え)、^W(GRPH、英数の切換え)処理    を終えたアスキーコードをAレジスタに出力します   04317H[04343H]テキストラインのデータをバッファに転送 入力:DE=バッファアドレス 出力:バッファ=バッファデータ255バイト 使用:09411H SCRULM テキストスクリーン上限    09412H SCRLLM テキストスクリーン下限    0948AH CURROW カーソルロウ (Y座標)      座標から有効テキストラインの範囲を求め    テキストライン先頭から最大255バイト転送(最後は00DH)します   0431AH[04320H]現在Y座標から有効テキストライン先頭Y座標の取得 入力:09411H SCRULM テキストスクリーン上限    0948AH CURROW カーソルロウ (Y座標) 出力:A=現在行から画面左端から上に020HがあるY座標      カーソル位置のライン左端の020Hのチェック    000Hなら上のライン左端に同様に020Hがあるまでチェックを行い    そのY座標をAレジスタに出力します      画面左端は000Hで上のラインと接続している         020Hが上のラインと接続していない(ラインの先頭)   044A4H キークリック音を鳴らす 使用:A   044B1H キークリック音を止める 使用:A   04A18H[056BEH]BEEPOT ビープ音出力 使用:A=出力コード(0−3)      システムで使用する音の出力     0=音を止める     1=音を出す     2=起動音     3=エラー音   04A1BH[056AFH]^I 水平TAB メイン 使用:09489H CURCOL カーソルカラム(X座標)      水平TABを行います    カーソルY座標が20より左にあればY座標=21に設定            21より右にあれば何もしません   04A1EH[05671H]カーソル表示 入力:09489H CURCOL カーソルカラム(X座標)    0948AH CURROW カーソルロウ (Y座標)    09484H GREENG キー入力のモード 出力:09714H カーソルにあるキャラクタ      カーソル位置にあるキャラクタを09714Hに退避させて    各キー入力モードのカーソルキャラクタの表示を行います   04A21H[05671H]カーソル表示で消されたキャラクタの表示 入力:09489H CURCOL カーソルカラム(X座標)    0948AH CURROW カーソルロウ (Y座標)    09714H カーソルにあるキャラクタ      カーソル表示の為、退避されたキャラクタを表示します           04A27H[054D1H]PLOTB8 グラフィック画面で横1ライン描く 入力:D=Y座標(0−191)    E=X座標(0−255)    A=1ラインのパターンデータ 使用:096FEH CHSIZE キャラクタサイズ 000H=8ドット、001=16ドット      Aレジスタの内容の’1’になる部分をグラフィック画面に1ライン描画します   04A2AH[054A8H]グラフィック画面にVRAMバッファの文字を描く 入力:D=Y座標(0−184)    E=キャラクタサイズ 8* 8 X座標(0−248)              16*16 X座標(0−240)    09413H−0941AH VRAMバッファ 使用:096FEH CHSIZE キャラクタサイズ 000H=8ドット、001=16ドット      VRAMバッファのデータをグラフィック画面に描きます    画面に、はみ出るようなハに指定事は出来ません   04A2DH[054A1H]PLOTCH グラフィック画面にキャラクタを描く 入力:D=Y座標(0−184)    E=キャラクタサイズ 8* 8 X座標(0−248)              16*16 X座標(0−240)    A=アスキーコード 使用:08B36H−09335H:VRAMSV VRAM01800H−01FFFH    09336H VRAMMD ディスプレイモード 01=テキスト、02=グラフィック    09413H−0941AH VRAMバッファ    096FEH CHSIZE キャラクタサイズ 000H=8ドット、001=16ドット      039FAH[039F3H]をコール パターンデータをVRAMバッファへ転送    04A2AH[054A8H]をコール VRAMバッファからグラフィック画面に描く   04A30H[0549DH]GRPXSZ グラフィック キャラクタサイズのセット 入力:A=000H 8*8ドット、001H=16*16ドット(2倍) 出力:096FEH CHSIZE キャラクタサイズ 000H=8ドット、001=16ドット      ワークエリア096FEH CHSIZEにデータを書き込むだけです   04A33H[05492H]GRPCRD グラフィック画面のカーソルリード 出力:D=Y座標(0−191)    E=X座標(0−255) 使用:096FFH CRCURX グラフィックカーソルX    09700H CRCURY グラフィックカーソルY      ワークエリアのグラフィックカーソルを読み込むだけです   04A36H[05487H]CRPCWT グラフィック画面のカーソルセット 入力:D=Y座標(0−191)    E=X座標(0−255) 出力:096FFH CRCURX グラフィックカーソルX    09700H CRCURY グラフィックカーソルY      ワークエリアのグラフィックカーソルに書き込むだけです   04A39H[0547EH]グラフィック画面のカーソル X=0、Y=8にセット 出力:096FFH CRCURX グラフィックカーソルX    09700H CRCURY グラフィックカーソルY      ワークエリアのグラフィックカーソルにX=0、Y=8に書き込むだけです     04A3FH[053C9H]GRPBCL グラフィック画面のバックカラーセット 入力: A=カラーコード(0−15)     D=開始点Y座標(0−191)     E=開始点X座標(0−255)     H=終了点Y座標(0−191)     L=終了点X座標(0−255)      グラフィック画面の指定した範囲の’0’の部分のカラー設定を行います   04A42H[0537BH]GRPCLR グラフィック画面のクリア 入力:0933AH COLOTG グラフィック スクリーンカラー 出力:096FFH CRCURX グラフィックカーソルX 00    09700H CRCURY グラフィックカーソルY 08    09702H−09703H 00000H 使用:09413H−09416H VRAMバッファ      スプライトのX、Yを000H、0C0Hにして消去    グラフィック画面を000Hで埋め消去    COLOTGの値でカラー設定    グラフィックカーソルX、Y=0,8    09702Hに00000Hを出力します   04A45H[0536CH]^I 水平TABグラフィック メイン 使用:096FFH CRCURX グラフィックカーソルX      グラフィックカーソルの水平TABを行います    グラフィックカーソルY座標が127より左にあればY座標=128に設定                  128より右にあれば何もしません   04A48H[052AAH]INKEYL ラインキー入力 出力:DE=094A4H KEYBUF キーバッファ    094A4H−095A6H キーバッファ データ(エンドマークは00DH) 使用:09411H SCRULM テキストスクリーン上限    09412H SCRLLM テキストスクリーン下限    09420H−09447H テキストスクロール用バッファ 40バイト    09484H GREENG キー入力のモード    09487H−09488H キーポインタ    09489H CURCOL カーソルカラム(X座標)    0948AH CURROW カーソルロウ (Y座標)    095A4H−095A5H BREAKベクタ 06DC4H    095A6H BREAKフラグ 000H=CR、001H=BREAKベクタを実行    09715H カーソル点滅タイプ 000H=通常、001H=INS    09716H カーソル点滅カウンタ      BREAKチェック、BREAKフラグ000Hの場合CR、001Hの場合BREAKベクタを実行    カーソル点滅カウンタの増加、チェック(INSモードでは速くなる)    1文字キー入力、何も押されていなければBREAKチェックまでループ     ^CならBREAKチェックへいき各BREAK処理へ     ^Rならカーソル点滅タイプを000H、001Hの切換え    特定のコントロールキーのチェック    一文字表示、CRが押されるまでBREAKチェックまでループ    入力したラインをVRAMから094A4H−095A6Hのバッファへ    CR(00DH)まで転送されます   04A4BH[05217H]GRPERS グラフィック画面のブロック消去 入力: D=開始点 Y座標(0−191)     E=開始点 X座標(0−255)     H=終了点 Y座標(0−191)     L=終了点 X座標(0−255) 使用:0933AH COLOTG グラフィック スクリーンカラー      指定した座標で四角のブロックをドット’0’で描画(消去)します   04A4EH[051FDH]GRPDCL グラフィック画面のドロップカラーセット 入力: A=カラーコード(0−15) 出力:09410H COLORD バックドロップカラー 使用:09336H VRAMMD ディスプレイモード 01=テキスト、02=グラフィック      バックドロップのカラーの設定を行います    画面がテキストならワークCOLORDだけの出力    画面がグラフィックならワークCOLORD、VDP R#07の出力になります   0A451H[051C5H]READPT グラフィック画面のポイントリード 入力: D=Y座標(0−191)     E=X座標(0−255) 出力: A=000H ドット消去(’0’)       001H ドット描画(’1’)      指定した座標のグラフィィックのドットの状態を調べます   04A6FH[04E52H] 文字列出力 入力:HL=文字列データアドレス(エンドマーク=000H)      文字列データを02400H[02B52H]出力デバイスをコールして一文字づつ出力します    この時、出力したデータが00DH(CR)なら00AH(LF)を出力します   04A96H[0521FH]GRPBFS グラフィック画面のブロック表示 入力: D=開始点 Y座標(0−191)     E=開始点 X座標(0−255)     H=終了点 Y座標(0−191)     L=終了点 X座標(0−255) 使用:0933AH COLOTG グラフィック スクリーンカラー      指定した座標で四角のブロックをドット’1’で描画します     06809H ROMのチェックサムエラー    ピッ    と短い音を1回鳴らして無限ループで止まります   0680DH RAMテストエラー    ピッピッ  と短い音を2回鳴らして無限ループで止まります   06811H VRAMテストエラー    ピッピッピッと短い音を3回鳴らして無限ループで止まります     06AEFH:BASICコマンド入力待ち(AUTO無し、BREAK無しの設定付き) 06AF8H:BASICコマンド入力待ち 6C71,6C78   07008H シリアルプリンタ SP−400の1バイト出力 入力: A=アスキーコード 出力:09704H 1ラインのプリンタで印字した文字数    000H−01FHはプリンタのコントロールコードとして出力    020H−07FHはそのまま印字(英数ただし07FHは四角の中に×)、印字した文字数+1    07FH−0FFHはスペースとして出力、印字した文字数+1    00DHは00AH(CR)を出力して印字した文字数は0に戻す    09704Hの印字した文字数が38になると00DHは00AH(CR)を出力       プリンタのコントロールコード      008H BS  バックスペース      00AH LF  ラインフィード      00BH LU  ラインアップ      00DH CR  キャリッジリターン      011H DC1 デバイスコントロール1 テキスト  モード      012H DC2 デバイスコントロール2 グラフィックモード      01DH NC  ネクストカラー   07098H シリアルプリンタ SP−400のリセット 出力:09704H=000H 1ラインのプリンタで印字した文字数      PC6=0 /RESET    PC7=1 /FEED    PC5=0 DATA    ウェイト    PC6=1 /RESET    ウェイト    1ラインのプリンタで印字した文字数を0にします       07EA6H MOTOR オン(未使用)    PC3=1にします   07EAFH MOTOR オフ(未使用)    PC3=0にします   07EB8H MOTORの状態を変える(未使用)    PC3の値を反転します   07FFFH チェックサム補正データ    00000H−07FFFHの合計データの最下位1バイトが    000Hになるようにします     08000H−08007H:QRAC  フローテング Acc                +0     Bit4 1=負、0=正                      Bit0 1=右、0=左               +1     指数(10進数)               +2から+7 仮数(10進数)                  111111112の場合                :00 10 11 11 11 11 11 20となる                +0が正の整数、+1が10なので仮数を左から0として数えて10番目が1の桁となる                  3.1415926535の場合                :00 00 31 41 59 26 53 50となる                もし3.14159265358だと最後の桁は四捨五入されます                  0.0000000001の場合                :01 09 10 00 00 00 00 00となる                ただしBASIC上の数値は1E−09となる                0.01は0.01                0.001は1E−03                0.012は.012の表記になる   08008H       :QRST  フローテング ステータス 08009H       :QROVS オーバーフロー 0800AH       :QROEF 001H 0800BH−0800CH:QROEA 06964H Overflow error 0800DH       :QRUEF 000H 0800EH−0800FH:QRUEA 0696EH Unprintable error 08010H       :QRZEF 001H 08011H−08012H:QRZEA 06969H ? Dirision by zero error 08013H       :QRDEF 001H 08014H−08015H:QRDEA 06973H Function parameter error 08016H−      :演算用 08021H−      :演算用   08160H−08161H:TXTBGN BASICプログラムの先頭 08162H−08163H:ARYBGN ストリングの先頭 08164H−08165H:VARBGN 変数の先頭 08166H−08167H:FREBGN フリーエリア先頭アドレス 08168H−08169H:FREEND フリーエリア最終アドレス+1   0816AH       :LINEMD ラインモード 000H=プログラム入力、001H=ダイレクトコマンド 0816BH       :LINELN ラインレングス−1(入力された文字数) 0816CH−0816DH:LINENO ラインナンバ 08170H−0826FH:LINEIM ラインイメージ 中間言語、パラメータASCII(括弧等含む)が入る 082A0H−082A1H:PUTADR 出力デバイスベクタ                      PRT:[07008H]                      CRT:[04A24H]テキスト                      CRT:[04A57H]グラフィック 082A2H       :STLEN1 キャラクタレングス  、CMTファンドフラグ 082A3H−083A1H:STREG1 キャラクタストリングス、CMTファイルネーム 083A2H       :STLEN2 キャラクタレングス 083A3H−084A1H:STREG2 キャラクタストリングス、CMTファイルネーム 084A2H−085A2H:DTLEN2 085A3H−085A4H:ASTPTR Aスタックポインタ 085A5H−086E5H:BSTACK Bスタック 086E6H−086E7H:BSTPTR Bスタックポインタ 85A5H 086E8H−086E9H:       エラーメッセージベクタ[06D5FH] 086EAH−086EEH:       02403H用 4桁16進数を10進数表示用ワーク                      変換したASCIIコードが入る   086EFH−086F0H:       定義する配列のワークアドレス 086F1H−086F2H:       定義するn次配列 (n=0−3) 086F3H−086F4H:       実行中の配列ワークアドレス 086F5H−086F6H: 086F7H−086F8H:   086F9H−086FAH: 086FBH−086FCH:       定義する配列1次 数値 086FDH−086FEH:       定議する配列2次 数値(使用しない場合 0FFFFH) 086FFH−08700H:       定議する配列3次 数値(使用しない場合 0FFFFH) 08701H−08702H:       定義する配列名(下位、上位の順 1文字の場合上位=000H) 08703H−08704H:       定義するn次配列 (n=0−3) 08705H−08706H:       定義する配列1次 数値 08707H−08708H:       定義する配列2次 数値(使用しない場合 0FFFFH) 08709H−0870AH:       定義する配列3次 数値(使用しない場合 0FFFFH)       08730H−08B2FH:STACKB CPUスタック 08B30H       :RNDGEA 乱数用A 08B31H       :RNDGEB 乱数用B 08B32H       :RNDGEC 乱数用C 08B33H       :ROUNDA 08B34H       :ROUNDB 08B35H       :ROUNDC 08B36H−09335H:VRAMSV VRAM01800H−01FFFH 09336H       :VRAMMD ディスプレイモード 01=テキスト、02=グラフィック 09337H       :SPRSIZ スプライトサイズ 000H=8×8  、001H=16×16 09338H       :SPRMAG スプライトの拡大 000H=拡大しない、001H=拡大する 09339H       :COLORT テキストカラー 0933AH       :COLOTG グラフィック スクリーンカラー 0933BH−0933CH:       ベクタ[07154H] 0933DH−0933EH:       ベクタ[06E99H](SCF、RET) 0933FH−09340H:       INKEY$ベクタ[042F6H] 09341H−09342H:       TIME$ベクタ [042FCH] 09343H−09344H:       ベクタ[02BBCH]   09347H−09348H:       テーブルジャンプ HLレジスタ退避用 09349H−0934AH:       テーブルジャンプ DEレジスタ退避用   09354H−09363H:       中間言語からASCII変換用バッファ 09364H−093E3H:       VRAM転送用バッファ   09410H       :COLORD バックドロップカラー 09411H       :SCRULM テキストスクリーン上限 09412H       :SCRLLM テキストスクリーン下限 09413H−0941AH:       PATTERN 転送バッファ   0941BH       :       AUTOフラグ 000H=オフ、001H=オン 0941CH−0941DH:       AUTO第1パラメータ、AUTO命令で表示される行番号 0941EH−0941FH:       AUTO第2パラメータ 09420H−09447H:       テキストスクロール用バッファ 40バイト 09448H       :       グラフィックラインの動作 000H=消去、001H=描画 09449H       :       グラフィックラインの接続 000H=する、001H=しない   09460H       :KEYIM0 No.0 I、K、,、カ ナ、Z、A、Q、1 09461H       :KEYIM1 No.1 O、L、.、SPC、X、S、W、2 09462H       :KEYIM2 No.2 P、;、/、CLR、C、D、E、3 09463H       :KEYIM3 No.3 @、:、ロ、DEL、V、F,R、4 09464H       :KEYIM4 No.4 [、]、↓、 、B、G、T、5 09465H       :KEYIM5 No.5  、CR、←、 、N、H、Y、6 09466H       :KEYIM6 No.6  、↑、→、 、M、J、U、7 09467H       :KEYIM7 PB   8、9、0、−、^、¥、GRP、BREAK 09468H       :KEYIMC CTRL  、 、 、 、SHIFT、CTRL、FUNC、カ ナ 09469H       :BREAKキーフラグ 000H=オフ、001H=オン 0946AH       :スペースキーフラグ  000H=オフ、001H=オン   0946BH       :KEY??0 ROMルーチン047B0Hで使用 マスクデータ 0946CH       :KEY??1 0946DH       :KEY??2 0946EH       :KEY??3 0946FH       :KEY??4 09470H       :KEY??5 09471H       :KEY??6 09472H       :KEY??7   09473H       :KEYIR0 反転データ 09474H       :KEYIR1 09475H       :KEYIR2 09476H       :KEYIR3 09477H       :KEYIR4 09478H       :KEYIR5 09479H       :KEYIR6 0947AH       :KEYIR7   0947BH       :KEYIA0 オートリピート用 0947CH       :KEYIA1 0947DH       :KEYIA2 0947EH       :KEYIA3 0947FH       :KEYIA4 09480H       :KEYIA5 09481H       :KEYIA6 09482H       :KEYIA7   09483H       :       オートリピート開始カウンタ 00EH+1でリピート開始 09484H       :GREENG キー入力のモード                       000H=英数                       001H=カナ                       002H=GRAPH 09485H       :SMLCAP スモールCAP 000H=オフ、001H=オン 09486H       :KEYCRC キークリック  000H=オン、001H=オフ 09487H−09488H:       キーポインタ  000H     =通常入力                              001H−0FFH=オート入力のアスキーコード                      通常は044CDHを指し、000Hなので許可されている   09489H       :CURCOL カーソルカラム(X座標) 0948AH       :CURROW カーソルロウ (Y座標) 0948BH−0948CH:TIMEA  タイムアジャスト 0948DH       :TIMEI  インターバルタイム(1/60秒) 0948EH       :TIMES  TIME$のnn秒 0948FH       :TIMEM  TIME$のmm分 09490H       :TIMEH  TIME$のll時   094A0H−094A1H:PRTADR 出力デバイス PRT ベクタ[07008H] 094A2H−094A3H:CRTADR 出力デバイス CRT ベクタ[04A24H] 094A4H−095A3H:KEYBUF キーバッファ、エラーメッセージ 095A4H−095A5H:       BREAKベクタ[06DC4H] 095A6H       :       BREAKフラグ 000H=CR                               001H=BREAKベクタを実行   095A7H−09617H:CSTACK GOSUB   スタック 09618H−09619H:CSTPTR GOSUB   スタックポインタ 0961AH−096E2H:DSTACK FOR〜NEXTスタック 096E3H−096E4H:DSTPTR FOR〜NEXTスタックポインタ 096E5H−096E6H:       使用中の変数名 096FBH−096FCH:       使用中のNEXTのアドレス   096FEH       :CHSIZE キャラクタサイズ 000H=8ドット、001=16ドット 096FFH       :CRCURX グラフィックカーソルX 09700H       :CRCURY グラフィックカーソルY 09701H       :CRTMOD 書き込むスクリーンモードの内容 000H=テキスト                                      001H=グラフィック 09702H       :       PSET、PRESETのX座標(0−255) 09703H       :       PSET、PRESETのY座標(0−191) 09704H       :       1ラインのプリンタで印字した文字数   09705H−09706H:EXLINE 実行中の行番号、またはエラーが出た行番号 09707H−09708H:EXADDR 実行中の行番後から次の行番号のアドレス 09709H       :       CONTフラグ 000H=実行可、001H=実行不可 0970AH−0970BH:       実行中の行番号アドレス、またはエラーが出た行番号アドレス 0970CH−0970DH:       実行中の行番号、またはエラーが出た行番号 0970EH−0970FH:       停止した行番号アドレス 09710H−09711H:       停止した行番号   09712H       :       SCREEN第2パラメータ 09713H       :CRTMOD スクリーンモードの内容 09714H       :       カーソルにあるキャラクタ 09715H       :       カーソル点滅タイプ 000H=通常、001H=INS 09716H       :       カーソル点滅カウンタ 09717H       :       PRINTモード 000H=PRINT、001H=LPRINT 09718H       :       PAINT用 X座標 09719H       :       PAINT用 X座標 0971AH−0971BH:       PAINT用 0971CH       :       PAINT用 0971DH       :       PAINT用 0971EH       :       PAINT用 0971FH       :       PAINT用   09740H       :       スプライト、カ−ソル用 09741H       :       スプライト、カ−ソル用 09742H       :       スプライト、カ−ソル用 09743H       :       スプライト、カ−ソル用   09744H−09745H:       変数領域スタートアドレス 09746H       :       1度に指定したINPUT数 09747H−09748H:       実行しているINPUTの変数(プログラム内)アドレス+1 09749H−0974AH:       入力したINPUTの数値アドレス(キーバッファの最終アドレス) 0974BH−0974CH:       実行したINPUT文のアドレス 0974DH       :       使用するスプライトNo.nn 0974EH−0974FH:       使用する変数名(第2、第1の順 Bit7=1だと文字列) 09750H       :       使用した配列の種類 000H=変数(配列ではない)                                001H=1次配列                                002H=2次配列                                003H=3次配列 09751H−09752H:       使用した配列 1次の値(下位、上位の順) 09753H−09754H:       使用した配列 2次の値(下位、上位の順) 09755H−09756H:       使用した配列 3次の値(下位、上位の順)   09757H−09758H:       BASICプログラム実行ベクタ 06D3AH   09760H−0976FH:       DEF FN 1 09770H−0977FH:       DEF FN 2 09780H−0978FH:       DEF FN 3 09790H−0979FH:       DEF FN 4 097A0H−097AFH:       DEF FN 5 097B0H−097BFH:       DEF FN 6 097C0H−097CFH:       DEF FN 7 097D0H−097DFH:       DEF FN 8   097E2H       :POWERF パワーオン フラグ 000H=初回起動、001H=2回目以降の起動  
Home へ戻る