mz-80K SP-5030(旧バージョン)
仕様 1.形式 中間言語式インタープリタ 2.数値データ 浮動小数点形式、有効数字8桁×10±19乗の実数 実数範囲:0.27105055E−19 〜 0.92233720E+19 16進数:LIMIT、POKE、PEEK、USRで16進数4桁のみ前に$をつける事が可能 3.数値変数 (1)数値変数 変数名は始めの2文字が有効 第1文字は英字のみ、特殊文字、BASICワードの使用不可 (2)1次配列数値変数 配列は最大255まで、DIMで配列定義をする 配列は括弧内に添字を置く 変数名は(1)と同様 <例> DIM A(10) A(0)からA(10)までの配列要素が定義される (3)2次配列数値変数 配列の添字を2つもつ変数、各配列は最大255まで、DIMで配列定義をする 配列は括弧内に添字を置く 変数名は(1)と同様 <例> DIM A(10,10) A(0、0)からA(10、10)まで 11×11=121の配列要素をもつ2次元配列が定義される 4.ストリングデータ 最大255文字 アスキーコード列、終端に00DHがつく 5.ストリング変数 種類:ストリング変数、1次元配列ストリング変数、2次元ストリング変数 形式:数値変と同様の条件の名前に$をつける 6.その他 (1)文番号:1〜65535 (2)CMTのファイルネーム 最大16文字 (3)CURSOR x,yコマンドにおけるxとy x=0〜39、y=0〜24 (4)SET x,yコマンドにおけるxとy x=0〜79、y=0〜49 (5)TI$に代入できるストリング 6桁10進数 最初の2文字は時=00〜23、次の2文字は分=00〜59、次の2文字は秒=00〜59 (6)FOR〜NEXTループのネスティング 最大15まで (7)GOSUBのネスティング 最大15まで (8)DEF FNによる関数定義のネスティング 最大6まで (9)INP、OUT命令による入出力 0〜239(240〜255は周辺用) (10)オートリピート機能:カーソルキー、HOMEキー、スペースキー、DELキーの各キー (11)円周率の値:π=3.1415927 計算の優先順位 1.() 2.↑ べき乗 3.*、/ 4.+、−
もし暴走したら マシン語を実行したとき等で暴走した場合リセットをしてモニタに戻ります モニタから0124DH(または01259H)を実行しますと プログラムをクリアせずにBASICのコマンド待ちになります ただし、BASIC自体が壊れている可能性があります GETの応用 通常の方法 10 GET A$ 20 IF A$=”A” THEN PRINT ”A”; 30 GOTO 10 上記プログラムを実行するとキーを一旦離さないと次のキー入力が受け付けないのがわかります Aキーを押しながらSHIFTキーを連打するとキー入力はA、スペード、A... と変わるのでAの文字がつづけて表示する事は可能 通常ゲームでGET文を使用すると同じ方向を移動するのに 動いたら一旦離してもう一度押すという事になってしまいます 入力モードを変える方法 10 GET A$:POKE$1170,1:GET B$:POKE$1170,0 20 IF A$=”A” THEN PRINT ”A”; 30 GOTO 10 上記のように10行を変更するとAキーが押された分だけAの文字が表示されます 10行はA$=キーデータ、カナ入力モード、B$=ダミーのキー入力(数値入力でも可)、通常入力モード またLEDの点灯はありません ダミーのキー入力を入れるだけではダメで入力モードを切り替えることで可能となります ただし通常入力、カナモードで同じキーデータ(スペース等)では使用できません BASICワークを書き換える方法 10 GET A$:POKE$45A4,0 20 IF A$=”A” THEN PRINT ”A”; 30 GOTO 10 これだとスペース等のキーも使用できます ただしBASICのバージョンによっては動かない可能性があります BASIC自体を書き換える方法 5 POKE$284B,0 10 GET A$:POKE$45A4,0 20 IF A$=”A” THEN PRINT ”A”; 30 GOTO 10 ただしBASICのバージョンによっては動かない可能性があります CHR$ PRINT CHR$(44)は本来”,”カンマが表示されるはずが表示されません PRINT ”,”にならずPRINT ,扱いになります TI$の表示 12時と24時の切換え時に表示がおかしくなります 単純な確認方法として下記のプログラムを実行 10 TI$=”115957” 20 PRINT TI$ 30 GOTO 20 *24時のチェックではTI$=”235957”に変更 12時へ切り替わる場合 115959−>235956−>061214−>061215−>120000 24時へ切り替わる場合 235959−>115956−>181214−>181215−>000000 つまり12時と24時のam/pmの切換え時にTI$の数値がおかしくなるのが確認できます BEEPの代わり BASICにはBEEP命令がありませんがUSR(62)[$003E]が代用できます これは約880Hzの音を一定の間鳴らします 効果音 ゲームでよく使われる手法として FORI=0TO10:POKE$11A2,I:USR($0044):NEXT 等、$0044のMSTAをコールする場合があります $0044は分周比データを8253 カウンタ0に設定して音を鳴らします カウンタ0はLS74で1/2に分周されスピーカへ出力されます 必要な設定は$11A1と$11A2なのですが、$11A2のみの設定の場合 $11A1=分周比データ下位(設定しないので0) $11A2=分周比データ上位(0だと音は出ない) 分周比データ=2000000Hz÷(周波数×2)なので 2000000÷(分周比データ×2)=周波数(近似値) 分周比データ上位nnのみのインクリメントだとI=nn*256 I | クロック 分周比×2 周波数 −−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 0 | サウンド出力停止 1 |2000000÷( 256×2)=3906.25Hz 2 |2000000÷( 512×2)=1953.125Hz 3 |2000000÷( 768×2)=1302.0833...Hz | | 10 |2000000÷(2560×2)= 390.625Hz 上記に近い周波数が出力されます(高い音から低い音が出力) MUSIC RYTHM[002C8H]先頭部分は[BREAK]キーのみのチェックを行っており このルーチンをコールしているMUSIC文も[BREAK]キーだけで止まります 10 MUSIC”CDE”:GOTO10 上記のプログラムは[SHIFT]+[BREAK]キーでも[BREAK]キーでも止まります ただしキーを長押しすること 16進数表記について LIMIT、POKE、PEEK、USR文で16進数表記が可能になりましたが アドレス指定のみで演算を組み込む事はできません <例> POKE$D000,255 <−画面左上にディスプレイコード0FFHが表示される I=0:POKE$D000+I,255 <−SYNTAX ERRORになる V=$D000:POKEV,255 <−代入文自体、16進数を扱えないので SYNTAX ERRORになる マシン語プログラムを少しでも使いやすく SP−5030では2桁の16進数が扱えず4桁の16進数も 限られたコマンド内でしか使用出来ません VAL命令でA=VAL(”$”+A$)のような事が出来きない為 マシン語をREAD、DATAでメモリに書き込む場合、DATA文は10進データにする事になります それではマシン語データが見難いのでプログラムで16進数を扱うようにします 簡易なのでDATA内のデータ長、範囲チェックを行っていません(必ず2バイト、16進数のみ) <例>全画面に人を書くプログラム(VBLANKチェック無し) 10 LIMIT$7FFF:GOSUB30:USR($8000) 20 END 30 FOR AD=32768 TO 32783:READ A$ 40 GOSUB60:POKE AD,A:NEXT AD 50 RETURN 60 REM *** READ DATA *** 70 H$=LEFT$(A$,1):H=ASC(H$) 80 IF H<58 THEN H=H−48:GOTO 100 90 IF H<71 THEN H=H−55 100 L$=RIGHT$(A$,1):L=ASC(L$) 110 IF L<58 THEN L=L−48:GOTO 130 120 IF L<71 THEN L=L−55 130 A=H*16+L 140 RETURN 150 REM *** HEX DATA *** 160 DATA 21,00,D0,11,01,D0,01,E8 170 DATA 03,36,CA,ED,B0,C9,00,00 キークリック キー入力時に音のオン・オフの設定を行います POKE$119D,0 :キークリック オン POKE$119D,1 :キークリック オフ PEEKプロテクト 通常PEEKを使ってもLIMIT(BASICプログラムエリア領域)以前を覗いてみても プロテクトが働き正しい値は返ってきません(32が返る) POKE$2731,0…プロテクト オン POKE$2731,1…プロテクト オフ UNLISTファイル作成 SAVEする前に実行するとSAVE、LISTの実行が出来ないファイルが作成されます POKE$2999,0…UNLIST作成しない POKE$2999,1…UNLIST作成する BASICオートスタートテープ作成 SAVEする前に実行するとオートスタート ファイルが作成されます POKE$299A,0…オートスタート作成しない POKE$299A,1…オートスタート作成する BASICコマンド入力のコントロールキーリピート コマンド入力時にリピートのオン・オフの設定を行います オンになるとキークリック オンの場合、音が少し高くなります またINPUT文ではリピート オフと同じになります POKE$3D25,0…リピート オン POKE$3D25,1…リピート オフ 修正 SP−5030の旧バージョンでは一部演算結果が誤って出力されますので修正が必要になります (旧) (新) 3112:FF −> FE 3196:8F −> 8E 31A0:DF −> DE 3A26:DE −> DF
コマンド LIST [m][−[n]] m:開始行番号(省略すると始めから表示) n:終了行番号(省略すると終わりまで表示) 入力したプログラムを表示します [SHIFT]+[BREAK]キーで中断 RUN [m] m:開始行番号(省略すると始めから実行) プログラムの実行を開始させます [SHIFT]+[BREAK]キーで中断 CONT 中断したプログラムの再開を行う NEW BASICプログラムの消去を行う CLR 変数の初期化 数値をとる変数は全て0、ストリング変数は全て空にします BYE BASICの使用を止め、モニタを実行 LOAD [”ファイル・ネーム”] プログラムをロードします(ファイル・ネームは省略可) SAVE [”ファイル・ネーム”] プログラムをセーブします(ファイル・ネームは省略可) VERIFY [”ファイル・ネーム”] セーブしたプログラムとメモリのプログラムの比較を行う事で 正確にセーブ出来たのかチェックを行います(ファイル・ネームは省略可) ステートメント GOTO m m:ジャンプ先の行番号 指定した行番号へジャンプします GOSUB m m:サブルーチンの先頭行番号 サブルーチンのコールします GOSUB〜RETURNのネスティングは最大15重 RETURN サブルーチンから戻ります ON s GOTO m1[,m2...] s:数式(1≦s) mn:ジャンプ先の行番号 指定された行番号へジャンプします sが指定範囲外なら次の文を実行 ON s GOSUB m1[,m2...] s:数式(1≦s) mn:サブルーチンの先頭行番号 指定されたサブルーチンへコールします sが指定範囲外なら次の次の文を実行 IF r THEN s IF r GOTO m IF r GOSUB m r:条件式 s:文(命令文または行番号) m:行番号 条件式が合えばTHEN(またはGOTO、GOSUB)を実行 合わなければ次の行番号へジャンプ FOR m=n1 TO n2 [STEP n3] m:添字変数名 n1:初期値 n2:終値 n3:増分(省略すると1に指定) FOR文からNEXT文までを条件にしたがって繰り返し実行 NEXT [m1][,m2...] mn:添字変数名 FORループの終わりを示します FOR〜NEXT文を重ねる(入れ子)は15重まで READ d1[,d2...] dn:変数名 DATA文に格納してあるデータを読み、変数に代入します DATA c1[,c2...] cn:数値またはストリング READ文で変数に代入する為のデータを格納します RESTORE READ文で読む最初のDATA命令の最初のデータ指定を行います TEMPO s s:数式(1〜7) MUSIC文で演奏する速さを指定します 1 最も遅い Lento,Adagio 4 中位の速度 Moderato(TEMPO1の4倍の速さ) 7 最も速い Molto Allegro,Presto(TEMPO1の7倍の速さ) 設定していないとTEMPO4の設定になります 本体基板上にある68kΩのボリュームもTEMPOの設定に関係があります MUSIC ストリング 音符の指定 [オクターブ][#(嬰音)][音名][音長] オクターブ(3オクターブまで) アスキーコード0D7H…高音域の指定 指定なし …中音域の指定 アスキーコード0CFH…低音域の指定 オクターブは音名毎に指定する(指定なしがオクターブ2になる為) 嬰音 #…半音の指定 音名 C…ド D…レ E…ミ F…ファ G…ソ A…ラ B…シ R…無音 音長(初期値=5) 0… 32分音符、 32分休付 1… 16分音符、 16分休付 2…付点16分音符、付点16分休付 3… 8分音符、 8分休付 4…付点8分音符、付点8分休付 5… 4分音符、 4分休付 6…付点4分音符、付点4分休付 7… 2分音符、 2分休付 8…付点2分音符、付点2分休付 9… 全音符、 全休付 音長は継続されます MUSIC”C9DE”ならC9D9E9として演奏 またストリング部分は結合する事も可 <例> MUSIC A$,B$,A$ MUSIC A$;B$;A$ MUSIC A$+B$+A$ MUSIC ”CD”+A$+B$ DEF FN d(x)=z d:関数名 x:引数 z:関数の定義式 ユーザによって作成された関数を定義します 関数定義のネスティングは6重まで SET x,y x:グラフィックX座標 0〜79 y:グラフィックY座標 0〜79 擬似グラフィックのドットの描画 VRAMにディスプレイコード0F0H−0FFHを使用して描画するので キャラクタの合成は不可 RESET x,y x:グラフィックX座標 0〜79 y:グラフィックY座標 0〜79 擬似グラフィックのドットの消去 WOPEN [”ファイル・ネーム16文字以内”] CMTにデータを書き込む準備を行います(ファイル・ネームは省略可) データを書き込むにはPRINT/T、クローズするにはCLOSEを使用します <例> 10 WOPEN ”TEST” 20 FOR I=0 TO 9 30 PRINT/T I 40 NEXT I 50 CLOSE ROPEN [”ファイル・ネーム16文字以内”] CMTにデータを読み込む準備を行います(ファイル・ネームは省略可) データを書き込むにはINPUT/T、クローズするにはCLOSEを使用します <例> 10 ROPEN ”TEST” 20 FOR I=0 TO 9 30 INPUT/T A 35 PRINT A 40 NEXT I 50 CLOSE CLOSE WOPENまたはROPENでCMTデータのオープンのクローズを行います WOPEN、ROPENの切換えをする場合は必ずクローズする必要があります INPUT [d$;]d1[,d2...] d$:プロンプト文またはダブルクォーテーションで囲まれたストリング dn:変数名またはストリング変数名 指定した変数へデータをキーボードから入力します INPUT/T d1[,d2...] dn:変数名またはストリング変数名 指定した変数へデータをCMTから入力します GET d d:変数名またはストリング変数名 キーボードから一文字入力を行います 変数名の場合 1〜9キーのみで各数値1〜9 何も押されなければ 0 ストリング変数名の場合 押されたキーのアスキーコード(+SHIFTの場合は+SHIFTのコードになる) 何も押されなければ 0(000H) [DEL]だと 96(060H) [INS]だと 97(061H) [CR] だと 102(066H) PRINT [s1{,または;}s2...] sn:式(省略すると改行) 式で指定された数値やストリングをディスプレイに出力します 式はカンマ”,”かセミコロン”;”で区切ります カンマは式を表示、区切られた後ろにスペースを空けて次の式の表示を行います セミコロンは式を表示、区切られた後ろに続いて次の式の表示を行います 最後の式の区切りのコロンがあると改行は行われません、何もないと改行が行われます PRINT/T PRINT文と同様にCMTに出力 PRINT/P PRINT文と同様にプリンタに出力 SIZE フリーエリアの取得 <例> 10 A=SIZE:PRINT A TI$ タイマの設定または読み出しを行います 時間は24時間制の000000から235959 設定する場合は6文字のストリング TI$=”hhmmss” 読み出す場合はそのまま読みますhhmmssと6文字のストリングで取得されます また12:00:00と24:00:00の切換え時に一定時間だけ数値がおかしくなります PRINT TI$ CURSOR x,y x:カーソルX座標 0〜39 y:カーソルY座標 0〜24 表示位置を決めます TAB(x) x:数式または0〜38 画面左端からx+1文字目にカーソル移動 SPC(x) x:数式または文字数 現在カーソル位置からスペースを指定数だけ表示、カーソル移動 DIM d1(n1[,n2])[,d2(n1[,n2])...] dn:配列名 n1−n2:添字の最大値 配列変数の要素の大きさを指定して配列を宣言、メモリ領域の確保を行います 配列宣言は2次元までです STOP BASICプログラムの中断を行います(CONTで再開可) END BASICプログラムの終了 終了してからCONTを実行すると終了した先の行番号の実行を行います REM コメントを書きます 他機種のBASICと違い:がREM文の終了となり:以降はプログラムとみなされます その為REMでマルチステートメントのプログラムを止めておく事が出来ません <例> 10 REM TEST:MUSIC ”CDEF” RUNすると音が鳴ります INP #p,d p:ポート番号 0〜239(10進数のみ) d:入力する変数 I/Oポートpからデータを読み、変数dに代入します 入力にストリング変数にするとMISSMATCH ERROR、 ポート番号240以降指定するとDATA ERRORとなる OUT #p,d p:ポート番号 0〜239(10進数のみ) d:出力する変数または数値0〜255(10進数のみ) I/Oポートpからデータdを出力します ポート番号240以降指定するとDATA ERRORとなる LIMIT d d:確保する変数またはアドレス(16進数可) BASICプログラムエリアをdのアドレスまでに制限します マシン語領域の確保に使用します LIMIT MAX BASICプログラムエリアをメモリ最大限にします PEEK(a) a:アドレス −32767〜32767(16進数可) 指定したメモリの内容を与えます ただし通常($2731=0)ではマシン語領域以降でしか使用できません 領域より前だと32になります 全領域を除く場合POKE$2731,1を実行 <例> A=PEEK($D000) POKE a,d a:アドレス −32767〜32767(16進数可) d:データ 0〜255(10進数のみ) 指定したメモリにデータを書き込みます USR(a[,d$]) a:アドレス −32767〜32767(16進数可) d$:ストリング変数 指定したアドレスのマシン語を実行 ストリング変数の指定がある場合 指定したストリング変数がある場所のアドレスがDEレジスタに 長さがBCレジスタに入る <例> SP−1002の00015H(MSG)をコールする場合 DEレジスタに文字列のデータアドレスが必要になりますが BASIC上でもUSR命令で使用できます A$=”ABC”:USR($0015,A$) ファンクション LEFT$(s,x) s:ストリング x:ストリングの長さ 0〜ストリングの長さ ストリングの左から任意の長さのストリングを与えます RIGHT$(s,x) s:ストリング式 x:ストリングの長さ 0〜ストリング式の長さ ストリングの右から任意の長さのストリングを与えます MID$(s,x,y) s:ストリング式 x:ストリングの先頭位置 1〜x y:ストリングの長さ ストリングの任意の位置から任意の長さのストリングを与えます LEN(s) s:ストリング ストリングの長さを与えます ASC(s) s:ストリング ストリングの最初の文字のアスキーコードを与えます CHR$(x) x:数式 0〜255 指定したアスキーコードに対応した文字を与えます VAL(s) s:ストリング ストリングの数字を数値に変換します 数字以外の場合0が入る STR$(x) x:数式 数値をストリングに変換する ABS(x) x:数式 絶対値を与えます SGN(x) x:数式 xの値が正なら1、0なら0、負なら−1を与えます INT(x) x:数式 数値を超えない最大の整数値を与えます SIN(x) x:ラジアン 三角関数、正弦(サイン)の値を与えます COS(x) x:ラジアン 三角関数、余弦(コサイン)の値を与えます TAN(x) x:ラジアン 三角関数、正接(タンジェント)の値を与えます ATN(x) x:ラジアン 逆正接の値を求めます 求められる値は−π/2からπ/2の間です SQR(x) x:数値(0以上) 数値の平方根を求めます EXP(x) x:数式 eに対する指数関数の値を与えます LOG(x) x:数式(0以上) eを底とする対数を求めます(自然対数) LN(x) x:数式(0以上) 自然対数の値を与えます RND(x) x:数値 xについて0.00000001〜0.99999999までの擬似乱数を与えます xが正の場合、前回与えた乱数へひきつづく次の乱数を与えます xが0、負の場合、擬似乱数の発生を初期化、最初の擬似乱数を与えます <例>1から6までの乱数発生を表示 PRINT INT(RND(1)*6+1) エラーメッセージ SYNTAX ERROR :プログラムの文法上に誤りがある、指定した飛び先が無い MEMORY ERROR :プログラムとして使えるメモリを超えた DATA ERROR :扱えるデータ範囲を超えた MISMATCH ERROR:数値変数とストリング変数を混合して使用 16FOR ERROR :FOR〜NEXTで16重以上使用 16GOSUB ERROR :GOSUBが16重以上使用 6FN ERROR :関数定義の多重定義が6重以上使用 CONT ERROR :プログラムの中断後プログラム編集を行ってCONTを実行 FILE ERROR :OPENせずにファイルを使用 OVERPLAY ERROR:RAM拡張せずにその領域にロードしようとした(48KRAMシステム以外のmz)
中間言語 |080H REM |0A0H BYE |0C0H LEFT$( |0E0H | |081H DATA |0A1H LIMIT |0C1H RIGHT$( |0E1H | |082H LIST |0A2H CONT |0C2H MID$( |0E2H | |083H RUN |0A3H SET |0C3H LEN( |0E3H | |084H NEW |0A4H RESET |0C4H CHR$( |0E4H | |085H PRINT |0A5H GET |0C5H STR$ |0E5H | |086H LET |0A6H INP# |0C6H ASC( |0E6H | |087H FOR |0A7H OUT# |0C7H VAL( |0E7H | |088H IF |0A8H*(0F2H) |0C8H PEEK( |0E8H | |089H GOTO |0A9H |0C9H TAB( |0E9H | |08AH READ |0AAH |0CAH SPC( |0EAH | |08BH GOSUB |0ABH |0CBH SIZE |0EBH | |08CH RETURN |0ACH |0CCH |0ECH | |08DH NEXT |0ADH THEN |0CDH |0EDH | |08EH STOP |0AEH TO |0CEH |0EEH | |08FH END |0AFH STEP |0CFH ↑ |0EFH | |090H ON |0B0H >< |0D0H RND( |0F0H | |091H LOAD |0B1H <> |0D1H SIN( |0F1H | |092H SAVE |0B2H =< |0D2H COS( |0F2H CURSOR | |093H VERIFY |0B3H <= |0D3H TAN( |0F3H | |094H POKE |0B4H => |0D4H ATN( |0F4H | |095H DIM |0B5H >= |0D5H EXP( |0F5H | |096H DEF FN |0B6H = |0D6H INT( |0F6H | |097H INPUT |0B7H > |0D7H LOG( |0F7H | |098H RESTORE |0B8H < |0D8H LN( |0F8H | |099H CLR |0B9H*AND |0D9H ABS( |0F9H | |09AH MUSIC |0BAH*OR |0DAH SGN( |0FAH | |09BH TEMPO |0BBH*NOT |0DBH SQR( |0FBH | |09CH USR( |0BCH + |0DCH |0FCH | |09DH WOPEN |0BDH − |0DDH |0FDH | |09EH ROPEN |0BEH * |0DEH |0FEH | |09FH CLOSE |0BFH / |0DFH |0FFH | *0A8H(0F2H)はコードは0A8Hとして実行、プログラムは0F2Hとして書き込む AND、OR、NOTはSYNTAX ERROR(未定義命令)となります
0124DH:BASICのコマンド待ち(MUSIC ストップ、プロンプトの表示) 01259H:BASICのコマンド待ち 01355H:ストリング 表示 入力:DE=ストリングデータアドレス(ENDマークは00DH) 使用:AF 01171H〜01172H DSPXY カーソル位置X、Y 01173H〜0118DH MANG 上のライン接続フラグ 01194H DPRNT DEの指すストリングデータを表示します NEWLIN(00009H) MSG (00015H)をコールします 014D4H−01614H:BASIC ワード 0162EH アスキー’ ’スキップ 入力:HL=ストリングデータアドレス 出力:HL=’ ’スキップしたストリングデータアドレス 使用:AF ストリングデータの先頭から’ ’をスキップして ’ ’以外を見つけたらRET 0165AH アスキー数字のチェック 入力:HL=ストリングデータアドレス 出力: A=チェックしたアスキーコード HL=’ ’をスキップしたストリングデータアドレス Zf=1 データ’:’ 0 データ’:’以外 Cf=1 数字 0 数字以外 使用:AF 0162EHをコールしてストリングデータの先頭から’ ’をスキップ データが数字(アスキーコード030H−039H)かチェックを行います 01663H CP HL,DE 入力:HL=データ DE=データ 出力:Zf=1 HL= DE 0 HL<>DE Cf=1 HL< DE 0 HL >DE 使用:AF Aレジスタを使用してHLの値からDEの値を減算します ただしDEとHLの値はそのままになります 01669H HL=HL−DE 入力:HL=データ DE=データ 出力:HL=減算したデータ 使用:AF Aレジスタを使用してHLの値からDEの値を減算しHLへ出力します 016E9H ストリングバッファから10進数アスキーコードから16進数に変換 入力:HL=ストリングバッファ 出力:HL=ストリングバッファ+取り込んだ文字数 DE=変換した数値 使用:AF、DE、HL 最初にアスキーコードのチェックを行い数字(030H−039H)でなければRET 次から’0’から’65535’までの数字があればDEに数値を出力(00000Hから0FFFFH) ’65536’以上だとSYNTAX ERROR出力へ飛びます 016EFH 16進数から10進数(アスキー)の変換 入力:HL=変換する16進数 DE=出力データアドレス 出力: C=005H (5桁分) 使用:AF、BC、DE、HL HLの2バイト16進数を10進数アスキーコードい変換して DEの出力アドレスに出力します この時先頭が0の場合’ ’(020H)に変換します 出力データの最後は00DHを出力します 01737H フリーエリアの計算 出力:HL=フリーエリア 01790H ブロック転送 入力:HL=転送するアドレス DE=転送先アドレス BC=長さ(00000Hだと何もしない) 出力:HL=転送するアドレス(入力値) DE=転送先アドレス(入力値) BC=長さ(入力値) 使用:AF LDIRを使用したブロック転送を行います ただし入力パラメータBC=00000Hだと何もしません 01826H BASICプログラムのクリア 使用:AF、HL、 B、DE 04642H〜04643H ストリング変数ポインタ 04644H〜04645H=変数へ代入する数値のポインタ 出力:02998H=000H LISTの実行可 04632H〜04633H=00000H 04634H〜04635H=04808H BASICプログラム最終アドレス 04646H〜04647H=0466AH DEF FNスタックポインタ 04648H〜04649H=04787H FOR スタックポインタ 0464AH〜0464BH=0466AH GOSUB スタックポインタ 04803H=000H FOR 〜 NEXTによるネスティング数 04804H=000H FOR 〜 NEXTによるネスティング数 04805H=000H GOSUB によるネスティング数 04806H〜04807H=00000H(最終マーク) 各ワークエリアを初期値にしてBASICプログラムのクリアを行います 0186FH 各スタックのクリア 使用:A 、HL 出力:04646H=0466AH DEF FNスタックポインタ 04648H=04787H FOR スタックポインタ 0464AH=0466AH GOSUB スタックポインタ 04803H=000H FOR 〜 NEXTによるネスティング数 04804H=000H FOR 〜 NEXTによるネスティング数 04805H=000H GOSUB によるネスティング数 BASIC内で使用されるスタック等を初期値に戻します 01889H 2バイトデータクリア 使用:A 、HL 入力:HL=クリアするアドレス 出力:HL=クリアするアドレス+2 (HL)=00000H HLで指定したアドレスに000H*2を書き込み、HLに次のアドレスにセットします 01A0EH−01A5F BASICコマンド アドレス 01A66H LISTデバイス フラグ 000H=CRT 001H〜0FFH=PRT 02731H PEEK範囲フラグ 000H=0D000H以降 001H〜0FFH=全ての内容 02998H UNLIST用フラグ 000H =UNLISTの実行不可(通常通り ) 001H〜0FFH=UNLISTの実行可 (SAVE、LIST不可) 02999H UNLIST作成用フラグ 000H =UNLIST 作成しない 001H〜0FFH=UNLIST 作成する 0299AH オートスタート作成用フラグ 000H =作成しない 001H〜0FFH=作成する 03BC3H プリンタ CR出力 使用:AF プリンタに00CH、00AHを出力します 03BCAH プリンタ1バイト出力 出力:A=出力データ 使用:AF プリンタに1バイトデータを出力して000Hを出力します 03C65H:プリンタ タブ 000Hで出力しない 03C66H〜03C8DH:PRINT文表示バッファ 40バイト 03D24H:コマンド入力 1キーデータ (CTRLディスプレイコード) 03D25H:コマンド入力 コントロールキーオートリピート フラグ 001H=オフ 000H=オン 03D26H:BASICコマンド入力 入力:DE=キーバッファアドレス 使用:AF 01171H〜01172H DSPXY カーソル位置 01173H〜0118DH:MANG 上のライン接続フラグ 0118EH FLASH カーソル点滅用退避キャラクタ 0118FH〜01190H FLPST カーソル点滅用のカーソル位置 01191H FLSST 000H=カーソル表示する、001H=カーソル表示しない 01192H FLSDT カーソル用ディスプレイコード 01193H STRGF キー入力時のコントロール d7:インサート数 1=コントロールコード入力、0=通常入力 d6:インサート数 d6 d5:インサート数 d5 d4:インサート数 d4 d3:インサート数 d3 d2:インサート数 d2 d1:インサート数 d1 d0:インサート数 d0 0119DH SERK 000H=クリック音オフ、0FFH=クリック音オン 03D25H コントロールキーのオートリピートフラグ キー入力を行い指定したキーバッファに[CR]またはSHIFT+BREAKされるまで入力されます 03D25H=000H ならGETL(00003H)のルーチン(リピート無し) 001H〜0FFHならBASIC内ルーチンの実行(オートリピート) 03EF1H:MZ−80DU データ送信 03F07H:MZ−80DU データ受信 03F3EH:MZ−80DU コールドスタート 03FB5H:MZ−80DU モニタのコマンド待ち 03F65H:MZ−80DU 1バイトHEXデータ送信 04100H〜043FFH:空き 04400H〜0444FH:汎用バッファ 04455H〜04456H:1ライン入力 プログラム格納アドレス 04457H〜04458H:1ライン入力 プログラム行番号(0だとダイレクトコマンド) 04459H〜044A4H:1ライン入力 プログラム (中間言語) 04561H〜04562H:RAMの最終アドレス+1 04563H〜04564H:スタックポインタ(RAMの最終アドレス+1) 04565H :プログラム中断フラグ 000H=中断していない 001H=ENDまたはSTOP 002H=BREAK+SHIFTキー 04566H〜0456BH:プログラムを中断時(047FDH−04802H)退避エリア 0456CH〜0456DH:変数の内容の長さ(???上位0456DHは無視) 0456EH :ストリングの長さ 0456FH :変数の型 000H=単精度、001H=ストリング 04570H :以前の変数の長さ(変数名は除く) 04571H :指定した変数の型 000H=単精度、001H=ストリング 04572H〜04573H:指定した変数のアドレス 04574H :000H=INPUT文、001H=READ文 04575H〜04576H:次のDATAがあるBASICプログラムPC 04577H :000H=最初からDATAを探す、001H=途中からDATAを探す 04578H〜04579H:次のDATAがあるBASICプログラムPC 0457AH :BSDファイルオープン 000H=オープン可、001H=オープン中 0457BH〜0457CH:BSDエンドポインタ (045AEH−0462DH内を参照) 0457DH :PRINT・INPUT文フラグ 000H=CRT、001H=CMT、080H=PRT 0457EH〜0457FH:LIST スタート行番号 04580H〜04581H:LIST エンド 行番号 0458EH :ロード ファイルネームチェック 000H=チェックしない、001H−0FFH=チェックする 0458FH〜04590H:指定したファイルネームのストリングアドレス 04592H :ロード タイプ 000H=VERIFY、001H=LOAD、002H=ROPEN 045A2H :GET文 押されたデータ(アスキー)またはヌル値 045A3H :00DH 045A4H :GET文 押されたデータ(アスキー) 045AEH〜0462DH:BSDファイル用バッファ 128バイト 0462EH〜0462FH:入力した行番号 退避 04630H〜04631H:指定したストリング変数名 04632H〜04633H:???プログラムクリア(NEW)で00000Hになる 04634H〜04635H:BASICプログラム最終アドレス 04636H〜04637H:2重添字つきストリング変数エリア ポインタ 04638H〜04639H: 添字つきストリング変数エリア ポインタ 0463AH〜0463BH: ストリング変数エリア ポインタ 0463EH〜0463FH: 配列エリア ポインタ 04640H〜04641H: 変数エリア ポインタ 04642H〜04643H: ストリング ポインタ 04644H〜04645H: 変数へ代入する数値 ポインタ 04646H〜04647H:DEF FN スタック ポインタ 04648H〜04649H:FOR 〜 NEXT スタック ポインタ 0464AH〜0464BH:GOSUB スタック ポインタ 0464CH〜04669H:DEF FN スタック領域 0466AH〜04786H:FOR 〜 NEXTスタック領域19バイト1組 15レベル 04787H〜047EFH:GOSUB スタック領域 7バイト1組 15レベル 047F0H〜047FCH:実行中のFOR〜TO〜STEP設定 :ループする変数名 2バイト :STEP値 単精度 5バイト :最終値 単精度 5バイト :???STEP用フラグ 1バイト 047FDH〜047FEH:実行中のBASICプログラムの次の行番号 047FFH〜04800H:実行中のBASICプログラムの 行番号 04801H〜04802H:実行中のBASICプログラムの PC 04803H :DEF FN ネスティング数(最大15レベル) 04804H :FOR 〜 NEXT ネスティング数(最大15レベル) 04805H :GOSUB ネスティング数(最大15レベル) 04806H以降 :BASICプログラム領域 *次の行番号のアドレス(2バイト 00000Hなら最終マーク) 行番号 (2バイト) プログラム 00DH (エンドマーク) 行番号 (2バイト) プログラム 00DH (エンドマーク) | 000000H (2バイト 最終マーク) *SAVE、LOAD、VERIFY時には1行の長さに変換される 浮動小数点形式(単精度実数) d7 仮数 1=正、0=負 d6 指数 1=正、0=負 d5 指数 D5 d4 指数 D4 d3 指数 D3 d2 指数 D2 d1 指数 D1 d0 指数 D0 仮数 第3バイト 仮数 第2バイト 仮数 第1バイト 仮数 第0バイト 1の場合0C1H 000H 000H 000H 080Hになる 仮数、指数ともに正、符号の位置は仮数部の左から1つ目 仮数 10000000 00000000 00000000 00000000 ↑ 0C2H 000H 000H 000H 080だと 仮数、指数ともに正、符号の位置は仮数部の左から2つ目 仮数 10000000 00000000 00000000 00000000 ↑ になる為10B=2になる 仮数は第0バイトのd7が左端、第3バイトのd0が右端 ↑より左は1、2、4…となる ↑より右は0.5、0.25、0.125…となる
mz−80Kのコーナへ Home へ戻る