サプルーチン - みる会図書館


検索対象: IO 1980年3月号
29件見つかりました。

1. IO 1980年3月号

PASCAL ” ーー BASIC 新ゃ こらみ - ー 高木 コンピュータ・ラブ 語学にコンプレックスを持っていてもい なくても , 英語を , 同じような構造を持っ ているフランス語やスペイン語などに翻訳 する方が , まったく構造の違う日本語に翻 訳する方よりもはるかにやさしいことは良 くおわかりのことと思います . 英語を日本 語に訳してみても , かなりの先生の手にか かったはすなのに , 英文を読んでいるよう な感じのすることが多いのは日本語の宿命 なのかも知れません . ロ プ 一し 6 ロ自 ャー 日日 角 8 ら - り 01 し日日 1 角自 ロ自 : ロ」ロ : 自自 : り当・ 4 よ 2 3 4 「 : り 7 9 サプルーチン プログラムの能力を 無視した翻訳では ーーーメイン・プログラム サプルーチンの呼び出し 同しように , BASIC プログラムを同類 の BASIC や構造の近い FORTRAN に書 き替えるのは比較的やさしいし ,PASCAL と ALGOL とでも構造が良く似ていて書き 替えるのはやさしいでしよう . しかし , B ASIC と PASCAL とでは , 日本語と英語との 関係みたいに翻訳はやさしくありません . PASCAL プログラムは , PASCAL 本 来の発想法で書くことが最も大切とわかっ ていても , BA S IC 的発想法で凝り固って いる頭は急には軟くなりません . また , 自 分の周囲には当然 BASIC で書かれたプロ グラムが多いとなると , どうしても BASI C → PASCAL という手続きが必要になる し , 資金的な問題から ( 決して能力的間題 からではないと信しつつ・・・ ) PASCAL 言 語システムを利用できないと PASCAL → B ASIC の手続きが強要されてしまいます . 能力を無視した翻訳では , BASIC 風の PASCAL プログラムや PASCAL の味が 抜けない BA SIC プログラムが , どしどし 出現することでしよう . 悪い味付けでも , イヤな風味でも , ともかく走ることを優先 してやればよいのがプログラミングだと自 分を慰めつつ , 最初は , ただひたすら恥も 外聞も気にせす , 不格好でも翻訳調でも何 でも , なりふりかまわす虫なしのプログラ ムを目標にしましよう . きっとだんだんス マートになっていくはずです . PASCAL プログラ乙( I ) 1 PROGRAM ALGEBRA; VAR A*B'C'D: R CEOURE C S,T: INTEGER;VAR V,ld: INTEGER); 日 E ら IN 3 + T 3 最外側の プロック 手続きの プロック ENO; 2 BE 日 IN WRITE()A = ');READ(A); WRITE<'B = ');READ<B>3 亡自 L <A, tdRITELN; WRITELN<A,$ + ',B, b.lP.ITELN(A9' ldR I TELN 手続きの 呼び出し END. BAS ℃サプルーチン PASCAL 手続き BASIC のサプルーチンは , サプルーチ ンを呼んだステートメントの次に戻る以外 には何の芸も持たない原始的なものですが , これを PASCAL の手続きに書き写すには , 144

2. IO 1980年3月号

リロケ→プル サプル - チン MZ - 80K ・風来星人 0 昨年末 , M Z ー 80 K の端末としてドット・プリンタ M z ー 80 表 1 MZ - 80P3 の機能 P 3 を手に入れました . このプリンタは英数字やカタカナ KYTP(•の 能 はもちろんのこと , ASCII コードに定義されているグラフ 相当キー ィック・キャラクタも印字でき , 簡単な絵を書くこともで 電源の入ったときの用紙位置へフィード ページ送り きます . 行間圧縮 グラフィックなどの表示用 , 行間の空白をなくす さらに , 表 1 に挙げたような機能もあり , 非常に使いや 倍文字印字 キャラクタを倍の幅にして表示い行 40 字 ) すくなっています . BASIC では凵 ST/P あるいは PRINT/ 上記 2 つの働きをクリアする クリア ( K Y T P からリターン ) P コマンドで文字や文字列そしてプログラムを打ち出させ 注 KYTP : キーポードからの Type 0 ut ルーチン ることができます . 一方 , BASIC SP ー 5020 では先ほど述 べた表 1 の機能がカーソル・コントロール・キーでできる 図 1 セミ・リロケータブル・プリンタ・サプルーチンの構成 ようですが , 筆者の持っている SP ー 5010 ではできません . BASI C モードあるいは機械語モードでこのプリンタを使 CALL X X 30 ってみて , いくつか常駐してほしいサプルーチン・モード が出てきました . それらをすべて 1 つのプロックにまとめ , CALL かっ , セミ・リロケータブルにしたのがこの報告です . M Z ー 80 K を利用している方でこれからドット・プリンタを購 入予定の方ぜひ利用してください . CALL X X BO ↑ キーポー YTYPE コーノレ リターン コーノレ / 、ツフア・アウト 1 文字・プリント・アウト 全画面転送 画面グラフィック 逆アセンプラ用転送 CALL 文字転送 リ -- ン 0 プロクラムの読明 0 プログラムはリスト 1 にあるように約 256 バイト使って います . 各サプルーチンが独立に使えるようメモリ上に JP XXD8 うはく配置しました . 用意したサプルーチンの構成を図 1 にまとめました . 各プロックは単体としてそれぞれ利用で ただのプロック転送ならは・マシン・ランゲージの X コマン きます . すべて C A L L 形式で受け付けるので , 機械語か こでは使えません . ドで良いのですが , らは C A L L x >< x x , BASIC からは U S R ( x x x x ) というのは , プリンタ・サプルーチンでは CALL 命令を で利用できます . 使っており ( 他の JUMP 命令はすべて相対 JUMP を使ってい リスト 1 は 2000 H 番地から始まっていますが , BA SI C の る ) , この命令だけは絶対アドレッシングなので , このオペ 場合 RAM の後の方がいいだろうし , 機械語の場合は既存 ランドを変更してやる必要があるのです . のプログラムとの関係上 , ある程度リロケータブルな方が このセミ・リロケータでは C A L L の機械語 C D の 2 つ 便利だと思います . そのため , このプログラムはプロック 後の内容を調べて必要あれば変史するようにしています . ごと任意の x x 00 日番地以降にセミ・リロケートできるように しました . 下位アドレスに関しては固定し , 上位アドレス このサプルーチン・プロックが 2000H ~ 20F9H にあり , だけリロケートできるので , “セミ”と名付けました . それを 5 FOOH— 5 F F9 H にリロケートしたい場合 , ます , 20 リスト 1 に従って各ルーチンの説明 , 使用法 , および使 DAH 番地に 5FH を 20DDH 番地に 20H を入れます . そして , 用例を紹介します . G20 D8 ( GOTO $ 20D8 ) します . リロケートし終わると 12 60 番地 ( システム・モニタ ) に戻ります . これで 5 F00 H— ・セミ・リロケータ : RELC 5 F F9 H のサプルーチンがすぐに使えます . 順不同になりますが , 一番大事なので , ますセミ・リロ このようにして得られた 5 F00 H— 5 F F9 H を別の さらに ケータから述べます . リスト 1 の 20D8 H から 20F9 H にリロ 場所に移すこともできます . すなわち今 ( x x 0 の日 ~ ( x x ケートしています . このルーチンはこのサプルーチン・プロ F9 ) H に存在するとして , ックを使用したい部分にプロック転送するためのものです . x xDA H にリロケート先の上位アドレス にやにゃんとまだやっとらん・・・ 1 月 3 日のこと , わたくしめはお年玉 2 万 1 千円を持ち , 心はすませアキバ レ 0 プラサ に行た . す , すると・・・や , やっとらん . まだしまっとる . Bit-INN も COSMOS も GAIN さんもマイコンセプン もックモさんもしまっとる . どこんちも 4 日からやるだと一 . ちくしよー , 電車賃 1 , 360 円返せー ( MZ の篠木幸一郎 ) JP に 60 リロケータ 使用法 65 ドットラリンタ

3. IO 1980年3月号

、ロ鬢 を底研第 4 」 System を取っていて , フローは難解を極めています . 応書いたものの , 理解に苦しむところがたくさん残ってお り , E 465 ~ E 479 にはどう調べてもどこからもつながって いないコーディングがあるなど , 消し忘れなのかノヾグなの か , それとも私の調査不完かと迷っています . E 0 から F 8 には前々回書いたように , CRT 上 25 行の 左端のアドレスの High Value 80 , 81 , 82 , 83 があり , この マイナス・サインが落ちたものが継続行を表わしています . またこれら各行の左端のアドレスの Low value は . E748 ~ E 760 にあります . カーソル X は C 6 で , 値は 00 ~ 27 または 00 ~ 4 F の間で 変化し , カーソル Y は D8 で , 値は 00 ~ 18 の間で変化する ことを原則とします . また , キーインされたイメージは ASCII コードで返されますが , このとき SHIFT はマイナス・サ イン ( P 7 ) になっています . しかし , CRT に表示するためには , SHIFT のマークは P6 の ON で示され , P7 の ON は反転文字を表わします . フローチャート上ではすべて 16 進表記を採用しています . また , 一部コーディングが長い割りにやっている内容の簡 単なところは , ーーでくくって説明だけで済ましているこ とがあります . INPUT の処理は CAC 1 から始まります ( フローチャー ト 1 ). INPUT# も Physical Unit の処理をしたあと CAD 2 に来ます . こでもっとも重要なサプルーチンは CAFA ( フローチ ャート 1 ー 2 ) で , が入力されるまで CRT から文字を取 り込み , 020016 以降の ,lnput Buffer に入れ , によっ てストップ・マーク 00 を最後に書いて CAFA を離れます . CAFA の中の主役は lnput A Character Routine の F 1 E 1 で , INPUT のトラブルはこの中にあります ( フローチ ャート 2 ) . F 1 E 1 では , キーポードカ SINPUT に指定されていると き , 入口時点での X と Y のカーソル値を A 4 / A 3 に記憶し ます . AC が 0 であれは取り出すべきデータがないことを 示し , E 29 D からキーイン待ちループに入ります . キーインは割り込みによって処理され , キーインの行列 / ヾッフアは 026F ~ 0278 の 10 ノヾイト分あるので , かなりの時 間この入力ルーチンが呼はれなくとも打ちだめができます . しかし , バッファ容量を越えて 11 文字目を入れようとする と , 今までの 10 字も含めてキャンセルされてしまいます . 入力があって QUE ポインタが 1 以上になると AA の内 容を調べ , もしこれが 01 であるとちょうどプリンカーが反 朝 . ーⅣ P リアの問題 INPUT によるデータのキーインを使用していて , 時々異 常な結果を生むことを経験しました . INPUT は正常な場合 , comment ? ■ カーソル点滅 と表示されて , キーインした文字が次々と入っていきます . キーインできる長さは , CRT 上次行の末尾までであり , ( コメントの文字数十 2 ) が限度です . そして , 79 ー ーで , 今キーインした情報が指定した変数に取り 込まれます . ところが , CRT の最下段で INPUT を行なってキーイ ンが 2 行に及び自動的にスクロールが起こった場合 , 変数 に取り込まれる情報は , comment ? が含まれてしまうの です . また上記 INPUT の応答として , CRT 上にすでに 表示されている文字列を , あるいはその一部を修正して利 用するために , カーソルを上下方向に移動させてから , 亟 : 反させたときにもまったく同じ現象が現われます . これらの現象は , 比較的長い文字列をキーインして , そ の第 1 文字をコマンド・キーとして用いるような場合ーーー この方法はテキスト・エデイタとか , データ・べースのエディ タに常用されています - ーーチェック機能を組み込んでおか ないと , 入れたはずのデータがまったく無視されていたり , 悪くすると全ファイルをキャンセルしてしまったり , 大変 困る結果を引き起こす恐れがあります ( 8 K PET の場合 はどうなのかはわかりません ). この原因を調べたところ , ・ INPUT ルーチンに問題の箇所 が発見されました . INPUT および関係サプルーチンのフロチャートを参照 してください . ただし , このフローチャートは今回の分析 に関係の深い部分に止め , しかも追跡しやすいように並べ 換えてあるためアドレス順にはなっていません . また , サ プルーチンに付けた名前や機能などは , 私の勝手な分類に よる便宜的なものであることをお断わりしておきます . I/O ' 79 年 8 月号で SHINJI TANAQUAX さんカゞ , APPLE で PET と同しスクリーン・エデイタカ { 作りたいので , PET のその分のフローチャートが知りたいと書いておら れましたが , はたしてお役に立つでしようか ? PET は極めて怪物生の強い ( ? ) 対象で , 徹底して Bufferring 180

4. IO 1980年3月号

モニタおよびサプルーチン PC- 8001 のモニタ内のサプルーチンは次のようになって います . 内 0 F 7 5 H キー入力サプルーチン 出力サプルーチン 0 2 5 7 H 5 C 2 C H モニタ・スタート・アドレス ( 5 C 2 C H および 5 C 3 C H を , コ 5 C 3 C H 5 C 6 6 H ールした場合には , コントロール B で N- BA SIC に戻れないので注意 ) S コマンド 5 C 9 9 H 5 D 1 6 H D コマンド 5 D 6 8 H G コマンド W コマンド 5 D 7 4 H L コマンドおよび L I コマンド 5 D A E H 5 D E 6 H T M コマンド 5 C 5 E H 0 D H, 0 A H, 3 F H を出力 , モニ タへ H E X チェック・サプルーチン 5 E 3 9 H キー入力 , 出力サプルーチン ( 英小文 5 F A D H 字は英大文字に変える , 0 3 H でモニ タへ ) キー入力サプルーチン ( 英小文字は 5 F B 9 H 英大文字に変える . 0 3 H でモニタへ 出力しない ) アドレス PC ー 8001 次のように変 また , ポート 30H に出力するものにより , わります . 面 0 4 0 4 0 8 0 8 0 0 E H ON OFF 0 6 H 0 F H ON 0 7 H OFF E A 66 H にも , データを入れてください . ・キーの内容の入っているアドレス E A 7 C H E A 8 B H K E Y 1 E A 8 C H E A 9 B H K E Y 2 K E Y 3 E A 9 C H E A A B H K E Y 4 E A A C H E A B B H K E Y 5 E A B C H E A C B H K E Y 6 E A C C H E A D B H K E Y 7 E A D C H E A E B H K E Y 8 E A F B H E A E C H E B 0 B H K E Y 9 E A F C H E B 0 C H E B 1 B H K E Y 10 E F 3 6 H E F 3 B H セープ , ロードときのネ ームの入るアドレス . 現在ロード中のテープの E F 3 C H E F 4 1 H ネームが入るアドレス . プログラムを作ったときのプレーク・ルーチン PC ー 8001 の ~ キーが押されていたら , キャリーをセ ットするものです . A , ( 9 ) ポート D B 0 9 E E 7 F X 0 R 7 F H N Z C 0 R E T S C F R E T C 9 ・スタック 0 0 H 以外で現在のカーソルのある位置より E A 5 7 H 1 つ下の行をクリアする . 0 0 H ノーマル , 0 0 H 以外でターミナル・ E A 5 8 H モードの使用可 . 0 1 H を入れてでクリアできる . ヌルキャラクタ・コード普通 00H E A 5 A H E A 5 B H アンダーライン , リバース他用 , 普通 00 H 白黒モードのときアトリピュート・エリアに 普通 50 H , これを 00 H にして画面をクリアす E A 5 C H るとキーファンクションのリバースがなくる . スクロール幅 00 H で 1 行 , 01 H で 2 行 . E A 5 D H スクロール位置 01 H でトップ . E A 5 E H カーソル ON OFF 用 00H 以外表示 . E A 5 F H E A 6 0 H キーファンクション表示 ON OFF 用 . 00 H 以 外表示 . E A 6 1 H グラフィック S W ON OFF 用 . E A 6 2 H 画面上下の幅 20 行で 14H , 25 行で 19H . カーソルの現在の縦の行 . E A 6 3 H カーソルの現在の横の行 . E A 6 4 H 画面横幅のソフト切り替え用 . 80 文字で 50 H , E A 6 5 H 72 文字で 48H , 40 文字で 28H , 36 文字で 24H が入っています . ードの方は , ポート 30 H に出力して , C R T C をセットする . E A 6 6 H ポート 30 H セット用 . 行 40 のとき 06 H が入っ ている . ポート 30H リレーの ON OFF に使用 . 画面 ( C R T C ) 40 , 80 の切り替えに使用している . キャリーセット プログラム実行中の一例 ・・・ - チ ( ー 2 ・イト ) ンア 30 ー N ? ト・レス・ ? ・ END フト・レス第 ? 薈薈 アリンタ - YES ? れ SERCH ー ? 第 - ? ト・レスと・・ YES ? れ ? れ ? ス・ - ド - タ YES ? れ

5. IO 1980年3月号

今月の宿題 れでは , ニモニックに直しましよう . ます始 めはキーの言売み込み . これは CALL KEYIN でしたね . 次は右側の 4 ピットにあったデー タを左側の 4 ビットに移す仕事です . 前にはこれは 1 0 H 倍するのと同じだから , ということで ADD A を 4 回使いましたね . 今度は RLC を使ってみましよう・ 次は DATA 十 1 番地へ入れること . その次の DATA へ入れるのと合わせてやりましようね . もちろん STA を 2 回使ってもいいですよ . 表示とキーの読み取りは , またモニタのサプルーチンを使います . DATA 十 1 番地の下位 4 ピットへ入れるのに , 上位 4 ピットは変えてはいけません . 前にはこういうとき ADD 命令を使いましたが , 今度は ORA 命令を使いま しよう . その後の CALL と RET は説明はいりません ね . K E Y ー N C A L L ↓ ↓ K E Y I 、 C A L L ↓ R L C R L C R L C R L C 十 ↓ ↓ R G D S P C A L L ↓ M 0 V Ⅱ , A MV I D A T A S 日も D ↓ R G D S P C A L L R E T み込みのサプルーチンが終わったところで , 次の計算のサプルーチンへ進む前に 10 進加算 ーのプログラムの の話をしておきましよう・ ように入出力が 10 進数のときには , 計算を 10 進数です るか , 2 進で計算して入出力のときに変換するか , ど ちらがいいのか迷いますが , 加減算だけのときには 10 進数で計算する方が無難なことが多いようです . 10 進数の加算は , 普通どおり ADD 命令を使った後 で DAA 命令を実行すればできます . 16 ピット以上の 加算でも , 16 進数の計算と同しに ADD 命令 , ADC 命令を使った後で DAA を 1 回すっ実行すればできま す . なぜこれでいいのかは他の本にまかせるとして , こではこの結論だけ覚えていただきましよう・ 4 4 0 0 0 4 ACI DAA 来月説明するのはェ = 、「・ 先月の宿題の答 を計算するサプルーチン . このサプルーチンに入って 6900 はつイソ 80 望 0 蓐淑りインね くるのは , ( イ ) キーから入れるスの値 , ( ロ ) メモリに入っ 650 つ ? う - ん 0-3 物、しら ているスの値のどちらでしよう . もう 1 つ , 出ていく りワ工ス : X : い ) のは , (' ェの値の表示 , ( 判メモリに入れるェの値のど 四物五 出 : い ) - ロアラ ちらでしよう . プログラム全体でなくてこのサプルー 仕高サポ 5 の チンの分ですよ . またやさしすぎたかしら . を / この教室への注文 , 感想 , 悪口など 解答のほかに うーん。鬆みさんてごいみ。物め z こゝ思っん 何でも書いてね . き弓。今まの本 ~ は正い、 1 い 3 こと は ) でもの 6 、 , たんけと、 . は一全 解答の : 〒 151 東京都渋谷区代々木 1 ー 37 ー 1 - でね . まき乃ンに百、 ) イう . ぜんらくピル 5 F 工学社内 送り先 加第とンフトおけき X 第のしちゃをんて礒 「舞子のプログラム教室』係 おつられも周いっき 3 せん・ほ . 締切 : 3 月 25 日 3 由んたはえらい・ 賞品 : 図書券 ( 3 名 ) 発表 : I/0 5 月号 ( 奈良県仲川勝彦 ) ( 春日部市小助ゼンダマン図 ) 1 月号当選者発表・京都市斉藤哲・朝霞市小高光雄・東京都斎藤太一 〔ありがとう . そういってくれると舞子うれしいわ . ほんとに , コンピ、一タをまったく知らない人が読んで のわかる参考書て少ないのよね . その代わり , この教室では最低限のことしか教えてあげられないから , わか 郵便箱 るようになったら 1 冊は他の参考書も読んでみてね . 舞子〕 8bit の CPU をソフトで 16bit 動作 CPU にしよう / どうでしようか . だめでし プログラム・リクエスト ( 愛県・杉山直樹 ) ようなあ・・・・・・わははは , さようなら . 〔インタープリタ形式で作れば作れないことはないけれど , スピードは遅くなるし , 余分なメモリはいるし , い 179 いことは一つもないわよ . それに , 初心者講座でできるような内容でもないわね . 舞子〕

6. IO 1980年3月号

凵参考書を読んでもプログラムが書けるようにならなか。た人のための一 舞子のプログラム教室実習編 2 平方根を求めるヂ 《今日のマシン = TK - 80 》 阿蘇坊舞子 0 PART 2 月は , 全体のフローチャートを書いて , その 部分のプログラムが CALL 文 3 っと 3 MP 文 でできることまて第見明しましたね . 今月はその CALL で呼ばれるサプルーチンから始めます . まず第 1 は , A の値を読み込むサプルーチンです . サプルーチンでも , 考え方の順序は前と同しです . 始 めは『①目的は ? 』でしたね . 読み込みのためのサプ ルーチンですから , 目的は「キーで押された A の値を 読み込み , 他のルーチンに渡す』ということになりま す . 2 番目と 3 番目は先月の宿題にした『②入ってくる もの』と「③出ていくもの』ですね . ほとんどのみな さんが正解してくださったとおり , 入ってくるものは 「キーで押される A の値』ですし , 出ていくものは「他 のルーチンに渡す A の値』ですね . 目的は ? キーで押された A の値を読み込み , 他のルーチンに渡す . 方法は ? キーを読む DA 〒 A + 1 番地に入れる 表示する 出ていくのは ? A の値 DATA ヨ番地 入ってくるのは ? キーて人れる 入口 キーを 1 桁読み込む . 左 4 ビットに移す . DATA 十 1 番地に入れる . DATA 番地をクリアする . 表示する . キーを 1 桁読み込む . DATA 十 1 番地の下 4 ビットに入れる 表示する . 出口 てたた一を一は番 イれつ ノ・カ 1 ? 一・ 見めす , 一 一入 1 し決押はキのる十か . キにを とで書 るのがう 少月 . 示だ . 他れ < たね . 地数 すたム . 思 う先す表たうて入しすね番の ラ も , 押の よれにまです 1 桁 たでグさ、 をは回こはし入地てい地で十 2 しんロだご の方 2 . でまに番ねて番単 きをもては もるをねこえリの兼える簡け て室でつ一 くく一たこ考モどと覚出もだねっ教んはダ にてでるた てキし , とメ , 示 て「ででがだのが表地目「んせしさ書もン 出入数とすのかすら番つい込らま ド子考らイ 入舞参か ( 整こでもこまかの 4 とみ走り のうのういのどりんこと読をや屋幸こ もよ桁いため , なせ . 目法でンに し るし 2 とみたはにまうつ方ンチ前 でし くまり . ・のるのとりよ 3 ④チ一は の難盟ま てきおる・もすもこあしら『一ルの っ常当か つおとす・くくく すはまかはルプる 思非本わ 示・いすい渡約い右でプサめとてがく なつい 表・てやてに制使のれサのと だあさ に・出し出ンにを示その示ま び見押チ別地表ン表に と書せし と りろお もろ 語いがの ンがため シとした マこまの いり人 てしかた こわっ でやかか んやとな 読 . んら をうなな 宀至よ・もに 教し令う ので命よ こうのる A ど他け の粨 子便 舞郵 178

7. IO 1980年3月号

あたっては , 無視されるということです . ただし , これを省 略することはできません / ′また , だけではエラーになります . S は実行開始番地を示します . この命令によって停止した場合 , 再スタートさせると , S の番地 , すなわちここでは 32 番地から再実行することにな ります . さらに この命令は 1 語の記憶場所を取るので注 意してください . 最後の , END あることに注意してください . これを 16 進数で表わすと , X " 20 " になります . さらに この START 命令は記憶場所 を取りません . ですから , 実際は次の命令が 32 番地になり ます . それでは , いよいよ憧れの LAI 命令に入っていきましょ というのは , 汎用レジスタ 0 番の内容を 0 にすることです . オペランド欄の最初の数値が指定する汎用レジスタの番号 ( 0 ~ 3 ) を示し , 後の数値が入れられる値を示します . これは , Move lmmediate という命令に似ています . この ことから , 次の , L 角 1 は , 汎用ジタ①番の内容は@になります . 次 0 行は どうでしよう . LAI 2 , 256 これは , 今までの説明でいくと「汎用レジスタ 2 番の内 容を 256 にする』となりますが , そうではありません . 〃 仕様書に , 「下位 8 ビットの数値だけ入って , 上位 8 ビッ トはすべて 0 になる』とあるでしよう . クもっとわかりや すく説明すると , 256 よりも大きな数値の場合は , 25 6 で 割った余りの値が指定した汎用レジスタに入ることになり ます . このことを法 ( モード ) といいます . 256 十 256 = 1 ・・ つまり , 汎用レジスタ 2 番に ( ⑨が入ることになります . 決して 256 が入るのではありませんから注意してください〃 同様に , 次の は , 今説明したことから , 500 は 256 よりも大きいので , 500 + 256 = 1 ・・ となり , 汎用レジスタ 3 番の内容 ( 244 になります . 次の WRITE 命令は , 第 1 回で述べたように , 指定され た汎用レジスタの内容を 10 進数か 16 進数でプリント出力す る命令です . ただし , この WRIT 命令は , CAP-X には ないので , 試験のときは書かないでください . もっとも入 出力に関する問題は出題されていませんが・・・ これは , 計算機 (COMP-X) を停止させる命令です . 仕様書より 2 進 16 進 モ 読み方 ~ 機 ック 表示表示 表示 0000 H J Halt S C に実行アドレスを 入れて停止する . その JUmP 後 , スタートボタンを 押すと S C の示すアド レスから再び命令の実 行が開始される . この 命令の G R フィールド は無視される . 表中の「 G R フィールドが無視される』とあるのは , 指 定する汎用レジスタは , 0 ~ 3 まで何であっても , 実行に 仕様書より END n プログラムの最後には , これを書かなければならない . n は 10 進数か , またはラベル名であって , プログラムの実行 開始アドレスを指定する . n は省略可能 . はプログラムの最後に必ず書かなければなりません . CAP-X のソース・プログラムは , START から EN D までが 1 つの単位 ( モジュール ) になります . 後で説明し ますが , サプルーチンの場合も同様です . EN D 命令のオペランド欄にある S は , プログラムの実 行開始アドレスを指定するもので , 仕様書では省略可能と なっています . これは , サプルーチンとリンクする場合 , サプルーチンで省略するのが普通だからです . メイン・プログラムのときは必ず書いてください . そう でなければ , プログラムをどこから実行させるのかオペレ ーション・システム (OS) がわからなくなります . 本当のオ ペレータ ( 人間 ) が実行開始アドレスを , コンソールのデ ータ・スイッチにセットしなければならず , その間 , コン ピュータは数秒停止してしまいます . 詳しくは次の機会に 説明します . なお , この END 命令は , START 命令と同様に記憶場 所をとらないので注意してください . 次に とあるのは , 「今入力された , CAP—X のソース・プログ ラムを翻訳完了しました . そしてそのソース・プログラムは , 16 進数で X 28 " 番地まで使っています』という意味です . その後の 4 行の数値は , WRITE 命令によって , 汎用レ ジスタ 0 ~ 3 番までの値をそれぞれ 10 進数で出力させた結 果です . 今までの説明をもう一度読み直して , 正しいこと を調べてください . このように , 実際に CAP-X を実行させることができる と , 無味乾燥な仕様書もなんとか読めそうになってくるで 32 K パイトコア・メモリポード 1 、 25 ロ き , 5 ロロ 4 ASSEMBLE END 0 ロ 29 Hj 0 202

8. IO 1980年3月号

プログラミング・テクニック ①プログラム・カウンタのイニシャライズ . 子を , リスト 1 を参照しながら追ってみることにします . てください . リセットがかけられたときの APPLE Ⅱの様 いる . つまりリファレンス・マニュアルのことです ) を見 何はともあれシステム・モニタのリスト ( 赤い本に載って するためには , 若干 , 機械語がわからないと困るのですが , さて , 本題のオート・スタート機構ですが , これを理解 P C H $ F F F C には $ 5 9 , $ F F F D には $ F F が入って PPLE5EED 図 2 ・モード P R 0 G R A M M E R T A P E ・ リスト 1 自 2 [ 噂 4 こ E. 7 [ 虜 F6 15 創 : I/O デバイスとして , キーポード , スクリーンをセッ 表示画面 ( 原案 ) ロインバ T A N A Q IJ ース A S S 0 C 図プリンク・モード S H ー N A 図 A T E S A N D D E M 0 F 0 R A P 7 P L E 上 [ 0 3 A リ T 0 C 0 P Y R - S T A R T ー N G S H ー N O G H T 9 0 T Ä N A Q IJ A X 区 A P P L E S E E D S いますから , スクリ $ F F 5 9 に飛ぶことを意味します . $ F F 5 9 $ F F 5 C 目亡目 7 ー C ヨー 創 : 新 F ー 創 : 1 ー 創 : は 5 創 : : 1 一 匸 : 2E ー 5 5 FØ 4 匸 : ・ヨ É. E:O 目 J S R ・モードをセットします . O S R J S R J S R C L D トし , デシマル・フラグをクリアします . J S R L D A S T A S R S E T N 0 R M G E T L N Z P R 0 M P T B E L L S E T K B D S E V ー D ー N ー T LO ト : LC.'A E:EQ ST 自 LOA ミ T 自 LCtA E:NE い E 匸 : 日 E ! 〕 R ト : : 日 R に P..TS .JMP 町 , IF ・ LOX E:NE $ F F 5 F $ F F 6 2 $ F F 6 5 $ F F 6 D $ F F 6 B $ F F 6 9 $ F F 6 6 ベルを鳴らして , プロンプトとして 幸創 : : 2 匸 : 輩 , ヨ 聿自 E. 創コ F 聿 7 を指定し , ま〔 : 目 3 ま創 : : 15 こ 1 日 行 を入力するサプルーチンに飛びます . 次に , そのサプルーチンを追ってみると , $ F D 6 7 G E T L N Z ,.J S R C R 0 T またサプルーチンですネ . レ 0 プラサわしゃーすつごく感心した奴がおる . リコンノヾッケージにキリで穴をあけたんじゃー , わしなんてあきらめたのに ( 中 3 ) 勉強でいそがしいからな ? じゃーバイバイ 78 飛びます . うう / やつば 3 年にもなると , (NO—) わしゃーあのいつか IC キーホルダーのことを一年に話したら , 何とシ

9. IO 1980年3月号

PASCAL プログラ乙 ( Ⅱ ) 変数の受け渡し ( 引数 ) に注意しなければ なりません . 簡単なプログラムで , A と B の 2 数の和と差をプリントする例について 調べてみましよう . 1 . BASIC BASIC プログラム ( I ) では , メイン・プ ログラムの変数 A , B , C , D は , サプル ーチン中でも同じ変数名の A , B , C , D です . 同じですからわかりやすいのですが 本当は具合の悪いことが多いのです . でき 合いのサプルーチンや , 他の人に作っても らったサプルーチンでは , 変数名に気を付 けないと使えないことになります . 2 . PASCAL PASCAL の入れ子構造では , 名前の有 効範囲はその名前から上にたどって最初に 現われた宣言 , または定義のあるプロック 内ということですから , PASCAL プログ ラム ( I ) では , 変数 A , B , C , D は 1 のプロック内車 変数 S , T , V , W は 2 のプロック内 が有効範囲となります . * : A, B , C , D は 2 のプロックで宣言 , または定義されてないので , 2 のプロック も有効範囲に入ります . 面倒だからというわけで , PASCAL プ ログラム ( (I) のように書いてもいいのです が , 使い方に気を付けてください . このプログラムは , BASIC プログラム と完全に対応していますからわかりやすい し , こんな簡単なプログラムならこれでも い RI 、 TE ( ' 8 = CALC; いいでしよう . しかし , 手続きをいろいろ ldRITELN; なプログラム中で使うような場合には , 仮 bJRITELN<A,' + ' , 8 , 引数を付けて作っておくのが本来の姿でし WRITELN(A"C WRI TELN 3 . 取り混ぜて実行させたら BASIC プログラム (I) でも ,PASCAL プリントします . 名前の有効範囲を日頃か な虫を見つけるのは極めて困難な場合が多 プログラムい ) , ( Ⅱ ) でも , プログラムを ら注意する習慣をつけておきましよう . いので気をつけましよう . チョロイ書き替 走らせると当然同じ結果になります . こんなやさしい計算ですから , おかしい えだなと侮ると , たくさん落とし穴が待っ と気がっくのですが , 検算が大変なプログ ています . 角 = 12 45 ラムでは , このような文法的でない論理的 8 = 1 1111 12345 + 11111 = 2345 ら 12345 ー 1 1 1 1 1 1234 ところが , PASCAL プログラム ( Ⅱ ) で うつかりして手続きの中で変数宣言をして しまうと , とんでもないことになります . たとえば , PASCAL プログラム 0 Ⅱ ) で は , プロック 2 の中の A, B, C, D は , 外 側のプロック 1 の A, B, C, D とは何の関 係もありません . したがって , プリントさ れる C , D は , 手続きでの計算とは関係な くデタラメな数になります . 自 = 12345 日 = 1 1 111 28265 12345 + 1 1 1 1 1 194EE ・ 1 1 1 1 1 12345 見かけはまったく同じですから , 誤魔化 されやすいのですが , 計算しているのでは ないので , A と B の数値に関係ない結果を F ・ ROGRAM ALGEBRA; 'iJAR 自 , C. 0 、 : INTEGER; IJR C BEGIN 2 外側の プロック 手続きの プロック A + 8 C ENO BE ら I N 一ヒ ←ヒロ一一ヒ W W W 手統きの 呼び出し END PASCAL プログラ乙 ( Ⅲ ) PROGRAM ALGEBRA; INTEGER; リ R 自 , 日 , C , 0 : LIR リ自自 , BEG I N うつかりした 変数宣言部 , O: INTEGER; A + B ENO; BEGIN ldRITE<'A = ');READ<A); ' RE 角 O ( 8 PASCAL 手続き BAS ℃サプルーチン としなくてもよく , 標準の入出力ファ イルを省略できます . 2 ) 乱数発生が便利になっていて ( ? ) , 次のような手順になります . a) USES APPLESTUFF; を最初に書く . b) 毎回違った乱数系列を作るには , RANDOMIZE; を使う . c) RANDOM で 0 ~ 32767 の整数の乱 数が発生します . ですから , A か ら B の間の乱数を発生させるには , 整関数 RANDOM を使って , いろいろな種類のソートのプログラムが あるそうですが , 手続きの例題が目的で , ソートが目的ではないので , ュックリズム のソート・プログラムを作ってみました . 乱数を発生させて , それをコード番号順 に入れてから昇順にプリントするプログラ ムです . 1 . P A S CA L この PASCAL プログラム ( Ⅳ ) は , APP LE UCSD PASCAL を使って作ってい ますから , 標準 PASCAL にないものがい くつかあります . PROGRAM SLOWSORT (INPUT, OUTPUT) ・ 145

10. IO 1980年3月号

マイコン大学 マイコン大学模擬試験 毎月マイコンのソフトウェアのテストをしていますので 読者の皆様の真剣かっ気楽な解答を求めます . 〔出題範囲〕 ◎初級マシン語部門 ( 8080 / 6800 / 6502 ) ◎初級 BASIC 部門 〔レポート提出要領〕 ◎ 2 月 15 日消印有効 ( ハガキに解答と応募回数を記すこと ) 難しいお名前にはフリガナをつけてください . マイコン大学模試 ( 解答例 ) ①ーイ , ②ーロ , ③ーハ・ 応募回数は , 各部門別でお願いします . 〇合格発表 4 月 25 日 ( I / 0 5 月号 ) なお , 合格者のうち 5 名様に図書券をさしあげます . ◎送り先 9151 東京都渋谷区代々木 1-37-1 ぜんらくピル 5 F 工学社内マイコン大学模試係 各部門別で連続 6 回正解者のうち , 各部門 1 名の方に高 級電卓をさしあげます . ・マイコン大学事務局■ 1 月号の解答と解説および当選者発表〃 第 6 回のマイコン大学模擬試験は , 難問だったので正解率 58 % に下がってしまいました . でも , 応募者のうち , 過半数の人が初 級レベルを卒業してくれたことは , マイコン大学出題者チームと しては大変うれしいことです . 問題は , 19 バイトで平方根を計算する夢みたいなサプルーチン です . まず問題のアルゴリズムを教えましよう . 等式 , が成立しますから , Ⅳの平方根は , Ⅳから 1 , ・・と引いていき , 幻 + 1 を引いたと き負になったらⅣの平方根は ~ です . これは , 式よりも図での説明の方がわかりやすいでし よう . したがって , ①は負になります . Ⅳから引く数は , D E レジスタ・ペアにあ ります . 16 ピットの減算命令はないので , ー 1 , ー 3 , ・・・と変化させ , D A D 命令で各回の減算を実行しています . また , カウンタを一 1 , D E レジスタ・ペアを 1 に初期化するのはループの最初で , D E ペアは 2 減少 , カウンタは 1 増加させられるためです . 平方根を求める問題です 3 10 ビット数の平方根 を 8 ピットで求めます . 入力デー歹を , ー V A L にセ ッ下し“サプルチン S 0 飛 T を呼ぶとを結果第 R 0 0 T に求まります . 8080 の命令を使らて完成さをて k ださい」 アドレス マシン第 ラベル オペランド ニモニック 月 2 0 0 第 心第 4 しこ製 0 R G 2 A ー 3 な 2 8 2 0 0 入力データを H しにセッ上 S 0 R T し H し 0 V A し一 O.FFH 3 2 0 3 カウンタを一一にセット 3 E F F M V ー 平方階差を一にセット 2 0 8 0 0 P 0 C X 0 平方階差を 2 減少する の 0 C X 8 2 0 9 1 日 0 3 C う カウンタを一増加する 8 2 OA 、を N R 8 2 0 8 平方階差 ( 負数 ) を加える 0 A 0 結梁がでないときループ 0 A 0 8 9 2 8 2 0 C 0 C L 0 0 P 3 2 1 5 な 2 総果 ( カウンタ ) をス十ア 8 2 0 F R 0 0 T 題 2 1 2 ℃ 0 R E リタン 2 V Ä 入力データ 0 S 8 2 ー 5 R 0 0 T 0 S 出力データ E N 0 0 は 0 0 K)A ÄM を、正 ( ト ) 0 0 0 ー チ負 ( リ ) 0 園 0 ÄSTA 謝日 マシン語初級問題 ( 68 編 ) 次のプロ・グラムは , AccA にセットされている 1 桁の 16 進数を ASCII$—ドに変換するサプルチンです .. 6800 の命令を使って完成させてぐださい . アドレス マシン語。 ニモニックオペランド コメント ラベル プログラムの先頭番地 ① 0 R G を指定する . # $ 90 Acc Äに $ 90 を加える . D A A 10 進補正を行な , # $ 40 A DC A AccA に $ 40 を加える . 】 0 進補正を行なう、 90 HXAC ② 0200 8 B 0202 .19 3 0203 40 0205 19 02 39 ・〔 2 回目〕 RTS 五 N D ( イ ) = ( ロア A 0 C A コ。イ、 ) 200 8 日 ( ホリターン い ( ペ第 A D 0 A 第てト ) 89 ( リ ( ヌ ) 。 200 D A A ア土ンプルを終了する . ( チストップ ・を誤った人も約 2 割ありました . 80 系では , 16 ピットは , ア ドレス , データいずれの場合も , 下位・上位の順に並びます . 今回で 8080 は最終でしたから , 今までの主要な不正解を挙げて おきます皆さんは虫を入れないための注意点として参考にしてく 1 ) 16 ピットの数のとき , 下位・上位の順に並ぶ . 2 ) 条件判定の誤り . 3 ) 16 進数と 10 進数の書き方の違い . 4 ) E N D などのアセンプラ御制命令の誤解 . 5 ) 5 問出題しているのに , 4 つしか答を書かない . 。・ I / 0 、ユ月号、、。マイコン大学模擬試験解答 ①石 - ②へ 3 イ 0 チ①ニ ・マイコン大学 1 月号当選者 東京都斎藤太一 愛知県鈴木和行 札幌市橋本康訓 京都府藤原隆雄 長野県西沢英世 ( 敬称略 ) ■連続 6 回正解電卓当選者 鳥取県貴志治夫 ( 敬称略 ) 厳正な抽選の結果 , 以上の方々に図書券および電卓をお送りい ・マイコン大学事務局■ たします . 物・応 名 5 。・、わ イ -- タな 0 ) 0 屮 ) なト、 - ~ を ( 9 / 2 ヨ ) 、 = はをう市マー亂らム ( を , 2 いト ( い - 解ま 54 をンフ 4 ・ ) に生謝 0 ・カト ~ 物ゑし . は - ′。イや - のま -4 を第皀 あをはさ ( 京都市斉藤哲 ) 6 団目 1 ロ 裕子 ) ( 吹田市東野 195