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) ROMの内容はSK−BASICと同じになるようです 割り込み /NMI:キーボードにあるRESETボタンを押すとかかります BASICの初期化を行い(プログラムは消えません) またアドレスは固定でユーザーが自由につかえません /INT:VDPのVBANK毎にかかります。 BASICではTIMEのみに使用 アドレスは固定なのでユーザーが変更使用は出来ません 初期化 電源を入れると本体内のパワーリセット回路で00000Hから実行 システムの初期化を行います 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: 空 き *01800H〜01FFFHはテキスト/グラフィック画面が切り替わると データが入れ替わります(^O等) アスキーコード 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×16ドット) 012H CTRL+R INS 文字のインサート 013H CTRL+S スモールCAP オフ(大文字入力) 014H CTRL+T スモールCAP オン(小文字入力) 015H CTRL+U ラインをクリアしカーソルをラインの先頭に戻す 016H CTRL+V 英数入力、CHAIZE0、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個以上定義しようとすると? Finction 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,d 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ライン分必要ありませんが データが奇数バイトだとステートメントエラーになります ただし奇数バイトでも末尾が*ならエラーにならない 定義したデータはVRAM01800H〜01FFFHにアクセスされます この領域はテキスト/グラフィック(スプライト)のパターン定義共用で ワークエリア08B36H〜09335Hとメモリスワップを行います <例> 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〜07FFFHに書き込んでも無視されます 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する図形が複雑すぎる、 ユーザ定義関数が自分自身を呼び出している Our of memory :メモリが足りない(テキスト・変数・配列) Number of Subscripts :添字の個数が異常 Value 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文のデータがない RETURN without GOSUB :GOSUBを行わないでRETURN文が実行された GOSUB nesting :GOSUBの入れ子が15レベルを超えた NEXT with for :NEXTに対応するFORステートメントが無い FOR nesting :FOR〜NEXTの入れ子が8レベルを超えた Statement Parameter :ステートメントのパラメータが異常 Can't Continue :CONTによる続行が不可能 For variable name :FORステートメントのループ変数が数値変数でない (文字型または配列) Array name :DIMステートメントのパラメータが配列でない Redimensioned array :未定義の配列をERASEしようとした No program :プログラムがテキスト中に無いのにSAVEしようとした Memory writing :メモリへの書き込みエラー(LOAD) Device not ready :プリンタが接続されていない、または故障 Undefined function :定義されていないユーザ関数を呼び出した Verifing :テープのプログラムとの比較エラー Illegal direct :ダイレクトステートメント実行不可 Redo from start :INPUTステートメント入力データがおかしい ・最初から入力なおしを要求 Extra ignord :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バイト 9801:0A 00 − 行番号10 9803:00 00 9805:90 20 54 45 53 54 − プログラム REM TEST 980B: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本目を BASICコマンドで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 へ戻る