IO 1980年4月号

キーフレーズ

000 CALL プログラム 500 800 RAM マイコン BASIC 200 ROM MOV 300 JMP システム アドレス レジスタ 入力 PAS データ APPLE -2 -4 ポード THEN 日立 100 INX -1 400 CPU 600 ゲーム LXI -3 OUTPUT 80K 使用 ソフト CPI インターフェイス JNZ REM RET byte サービス 場合 マニュアル コマンド MOS 出力 16K POP NEC UFO PUSH INPUT IOO I/O シャープ 標準価格 表示 END プリンタ ディスプレイ 32K サプルーチン コード メモリ 700 Z80 機能 カセット 250 バイト CRT PET LED 可能 処理 東芝 東京都千代田区外神田 BEGIN プリンター 番地 CAL コンピュータ インターフェース テープ LHLD FOR TRS

目次ページ

写真 1 プログラム例を入力中 ( 5 ) 行の挿入 着目行をセットした状態で , プログラムを入力すると , 中央の空白行に表示されます . 皿を押すと画面の上半分 だけがスクロール・アップして , 再び中央に空白行ができ ます . このようにして着目行の上に何行でも挿入すること ができます . ( 6 ) 行の削除 回と押すと , 着目行が削除され , 画面の下半分 だけがスクロール・アップします . これに伴ないを着目行 は次の行に移ります . なお , 最後の行は削除することはで きません . 無理に削除すると暴走します . 削除したいとき は後にダミー行を付け加えてからしてください . ( 7 ) 着目行の移動 現在セットされている着目行を先へ進めたいときは , 写真 2 $L コマンドでリストをとったところ 国でれ行目に移ります . このときも現在の着目 行を第 0 行と数え , れは 255 以下です . さらに先へ進めたい ときは $ N コマンドを繰り返します . ( 8 ) 通常モードへの復帰 で通常モードに復帰します . 画面はクリアさ れます . プログラムの実行とコマンドの形は同し $R です が , 使用されるモードが異なるので混同することはありま せん . 写真 3 プログラム例①の入力中 , 間違いを発見 / 着目行をセットする ま CL EILI + —l 第 0 三 工ー 工ラー表示には大きく分けてプログラム入力時に出るも のと , 実行時に出るものがあります . ( 1 ) プログラム入力時に出るもの プログラム入力時のエラーに対しては , 工ラーメッセー ジのみ表示します . ェラーの内容とそれに対応するメッセ ージは次の通りです . 定義されていないコマンドを使用した場合 , 定義されて いても使用するモードを間違えた場合は『コマンドメイア ヤマリ』 . キーワードのスペルを間違えた場合 , コメントの終りの を忘れた場合 , W RITE 文で出力する文字列の終りの ' を 忘れた場合は『ニュウリョクアヤマリ』 . この場合はエラ 一行はメモリに登録されませんから , 引続き正しい文を入 れ直せばよいわけです . プログラムが大き過ぎてテキスト ・ノヾッフアカゞし、つは。い になった場合『メモリ・オー′く一フロ ー』 . このメッセーージ が出た場合 , TLS P 内でできることは , $E コマンドでプロ グラムを全部消して , 最初からやり直すことだけです . 『それではあまりた、』というときは , B S モニタに戻って 、細工 " をするしかありません . 8600 と 8601 がテキスト ・エンド十 1 を示すポインタになっていますから , 写真 4 工デイト実行中 第を三 ー = LIIY : 丁。 , 84

す . 中間言語といっても , 大げさなものでなく , キーワー ドを 1 バイトのコードに変換にするだけです . キーワード とそれに対応するコードを表 2 に示します . 値を C M コマンドで , 適当な行の木尾の次のアドレスに書 換えれは , そこから前のプログラムは救うことができます . なお , TLSP を再スタートさせるときはスタック・ポイン タが 8000 になっているので , 別の所に移してからにしてく ださい , 行の未尾を捜すには , 後で説明するプログラムの 内部表現を参考にしてください . ( 2 ) プログラム実行時に出るもの 原則としてエラー行と , その行が何行目であるか ( 最初 の行を第 0 行として ) を示す数字と , メッセージを表示し ます . したがってプログラムの修正をするには , 表示され な数字で着目行をセットすればよいわけです . 工ラーの内容とそれに対応するメッセージは次の通りです . 演算がオー / ヾーフローした場合「エンザンエラー』 . 宣言していない変数名 , 手続き名を使用した場合 , 配列 変数 , ABS, RND の引数の値が不適当であった場合「パラ メータアヤマリ その他の文法違反『ステートメントアヤマリ』 行の終りにエラーがあった場合 , 次の行がエラー行とし て表示されることがあります . 表示された行を検討しても 工ラーがないときは , 前の行を調べてください . 実行時に 工ラー表示が出たときは , 工デイタの通常モードの入力待 ちとなります . ( 3 ) 工ラー表示の例外 変数を規定以上 ( 単純変数は 32 使えます ) 宣言した場合 , 「ヘンスウォー′く ー』のメッセージのみ表示します . READ 文で数値を入力するとき , 1 字目が数字でないと きは『ニュウリョクアヤマリ』のメッセージを表示して再 入力待ちとなります . 2 字目以後に数字以外のものがあっ たときは , そこから前の部分だけを数値と解釈します . 入力した数値が許容範囲以上のときは , その数値をもう 一度表示し , 「エンサンエラー』を表示し , 工デイタの入力 待ちとなります . この時示す行数は無意味なので無視して この場合はエラー表示が出るまで少し時間がか かります . 写真 5 READ と打ったつもりが・・・ ! ? 工ラーメッセージの表示例 表 2 中間言語対照表 キーワード 1- ? 4 3 4 -0 一 CD 「ー 8 9 W 0 一 1 っ 4 3 ABS BEGIN CALL DO ELSE EN D IF PROC READ REPEAT RN D THEN UNTIL VAR WHILE WRITELN WRITE 字下げの空白はメモリ節約のため , 1 バイトの 2 進数に 変換します . その他の記号はすべてそのままです . 行の末 尾には 0 D を付け加えます . 13 マス字下けをすると , 2 進数に変換したとき , 末尾の改 行コードと同じ 0 D になってしまうため , プログラムが正 しく動きません . これが 13 マス字下げをしてはいけない理 由です . 図 1 に変換の一例を示します . リストを表示する ときは , もちろん逆変換をするわけです . 図 1 内部表現への変換例 字下げ ロロロ回回国国回ロ囚ロ国回一回 0 第 F 凵丁 E う t-FFtEF.: L は・旧 T' F:EAÜ : = 三を・」 0 : ら十 1 - ・ドロ凵 F. : 製凵「、・ IE : EF ゞ 1 レ 0 い口 3 引 3 ロ 3 0 レ 0 い引 0 D 0 3 ー 1 ( 2 ) インタープリタの動き PASCAL 系の言語では , メイン・プログラムはどんな に大きくても , BEGIN で始まり , EN D で終るたったーっ の文なのです . したがって , これを実行する方のプログラ ムも , 文を処理する STATEMENT というサプルーチンを 1 回コールするだけです . たった 1 回のコールでどうやって複雑なプログラムを処理 するのでしよう . それは構文図の「文』のところを見ると わかると思います . STATEMENT というサプルーチンはちょうどこれと同し構 造になっていて , 内部は各文を処理するルーチンに分れて います . 文の中には , その構成要素としてさらに文を持っ ているものがあります . こういう文を処理するときは STA TEMENT の中で , 再び自分自身をコールするのです ( 再帰 ( 1 ) プログラムの内部表現 的呼び出し ) . このプログラムは , いわゆる中間言語方式をとっていま 構成要素の文は単一文であるとは限りません . 複合文で TK-80BS 用 Tiny PASCAL CTLSPJ のカセット・サービスを実施中です . ご希望の ・カセッ・サービス 方は \ 4.500 を現金書留に同封のうえ , 工学社「 T 係』までお申し込みください . 85

ある場合はさらに再帰的呼び出しをするわけです . このよ うにして , 何重にも何重にも多重の再帰的呼び出しをして 文を処理していくのです . どんなに多重の再帰的呼び出し をしても , 一番外側のレベルで見る限り , サプルーチンの コールは 1 回です . プログラムの実行をネスティグ・レベルからながめると , 開始時はレベルの深さはゼロで , 実行が進むにつれだんだ ん深くなっていき , 多少上下しながらだんだん浅くなり , ゼロに戻ったところで終るという具合です . このようなプ ログラムの動きは , 四角とヒシ形の通常のフローチャート では表わすことができません . Tiny Basis か、 PASCAL で , ″ P 信 n カゞ自分自身で書かれ ているのはこのような理由によるものと思われます . プログラム例国の実行例 ( 星がスクロールする ) 写真 6 十学・を十市十十を 十学十」第煢・・を幸」第を第「 9258 からの 5 ノヾイトの NOP は , コマンド増設用のものです . メモリに余裕のある方はコマンドを一つ追加することがで きます . 用途はハ ドコピー メモリの残りバイト数表示 , 特定のキーワードで始まる行に着目行をセットする , など いろいろ考えられます . 配列変数のエリアを移転するには , 99 B 7 と 99 B 8 に入 っている配列開始アドレスと , 99AC と 99AD に入っている 添字の上限十 1 を変更してください . 添字の上限は , 使用 できるバイト数の半分 - 1 です . オプジェクトをテープに 保存するのは , モニタの ST コマンドを利用してください . 始めは 8600 から , 終りは 8600 と 8601 に入っているアドレス の一つ手前までです . オプジェクトをテープからロードし たときは , TLSP をスタートさせる前にスタック・ポイン タを移動しておくことをお忘れなく . 私自身 , まだこの TL S P の使い方を研究していないので , 例として適当なプログラムをお見せできません . ごく簡単 なものを 3 つほどあげておきます . 書式 ( 特にセミコロン の使い方 ) の参考程度にはなるでしよう . [ 工ーとに ] は説 明するまでもないでしよう ( もしわからなかったら , RUN させればわかります ). [ 3 」は 0 ~ 999 の範囲の乱数を 10 個 作り , 大きさの順に並べるプログラムです . 乱数の初期化 はエデイタ中で行ないますから , RUN させるたびに異なる ヾターンの乱数が得られます . 写真 7 プログラムを実行させて , ステートメントアヤマリが 発生したところ 図 2 メモリ・マップ 8 0 0 0 配列変数工リア モニタ・ワークエリア スタック 8 3 C 0 8 6 0 0 テキスト・パッファ 9 2 0 0 TLSP 工デイタ 9 5 7 3 TLSP インタープリタ 9 B F 7 9 C 8 0 9 C A 0 9 D 0 0 9 D A 2 空き システム変数工リア 変数表 手続き表 ソフトウェア・スタック 9 F F F メモリ・マップは本文中で直接説明しているところはありませ んが , 配列変数工リアとして 8000 番台を使用していることを説明 してありませんから移転する場合などを考えると必要になると思 います . 0 / 0 プラサ 中年がマイコンに狂うてなんであかんねんのおっさんより寒さ , きびしき中にも春のいぶきが感しられる今日この頃です . 私 , さかきは・らい くえのポインが大好きなおっさんもついに 33 才・の高令を数えることと相成リました . っきましてはこの記念すべき年に ( なんのこっちゃ ) 少々 文旬がいいとうなって登場させてもらうことにしました . 最近のマイコン・ホビースト ( 私も含めてかも ? ) はどうなっているんでしようか ? 次の例をみてあなたの感想をレ 0 プラザへどうか投稿してください . 私が古い人間かどうか判断する材科にしたいと思います . 1) I / 0 バサールに てソフト交換を希甲しましたところ多くの方からお手紙を頂き、一人一人にソフトをお送リしました . BUT / おり返し送って項けたのはな , 86