月間ラム 1980年12月号

キーフレーズ

000 THEN マイコン PRINT プログラム -4 データ -2 NEXT 入力 RAM PRI 表示 LPRINT llll コンピュータ -3 計算 BASIC DATA システム 場合 -1 649 800 FOR INT バイト LOCATE 100 8001 Tel REM 標準価格 処理 32K ROM インターフェイス 500 カード 年末調整 シャープ POKE プログラ 16K セクター ソフト 999 使用 ビット 200 END RETURN ディスプレイ カラー インタフェイス RINT コース 問題 80K 256 NCB 東京 日立 RETLIRN アルゴリズム センター フロッピーディスク INV 必要 ジャンケン プリンタ バターン 数値積分 PEEK NEC 機械語 カセット ELSE 言語 可能 文字 インターフェース E 機能 FORTRAN 標準偏差

目次ページ

先月号にひきつづ、き送る 文索プログラム PC ー 8001 プログラムの設計 生ロ $ 0 7 ・ ・・ B E E P $ 0 9 ・ ・・ L F ( ラインフィード ) $ 0 A $ 0 B ・ ・・カーソルホーム ・・面画クリア $ 0 C ・・ ・・ C R ( キャリッジ・リターン ) $ 0 D ・ ・・カーソルを右へ進める $ 1 C ・・ $ 1 D ・・ $ 1 刊・ 表 1 注意すべきコード 入出力名 メモリ上にデータを置く方法としては , ① D A T A 文にデータを入れる , ②配列を宣言してデータを代入 する , ③ C L E A R 文でユーザーエリアを確保し , P E E K , P O K E 文でデータをアクセスする・・・・・・と いった方法が考えられます。 そこで , 私は①の方法を採用しました。①の方法だ と , データがプログラムの一部になっているため , プ ログラムが壊れない限りデータも壊れません ( 反面 , データをソートしたり , 新しいファイルを作ったりす ることが困難になるという難点はありますが ) 。 データのコート化とデータフォーマ、 マイコン雑誌の文献検索 ( 目録 ) プログラムを組む にあたり , 私は最小限必要と思われる項目を , 次のよ うに選んでみました。 Ⅳじ、 年 , 月 , ページ 記事で用いられている言語 記事で扱われている CPU 名 7 ビットの Yes, N 。式の分類項目 タイトル また , 1 つの記事は , 1 つの D A T A 文で表わすこ とにしました ( 図 1 ) 。つまり , 各項目はコンマで区切 らす , 1 つの記事のデータは 1 つの文字列 ( バイト列 ) から成り , 各項目を何バイト目に置くかを決めてある ため , N-BASIC の LEFT$, MID$, RIGHT$ 等の 文字列取り扱い関数によって , 各項目を自由に取り出 すことができます。 雑誌名 インターフェース I N T E R FA C E トランジスタ技術 T 0 R A G I A S C I I A S C I I R A M R A M I/O ータファン C 0 M P . F A N コンピユ 電子展望 D E N T E N 表 2 雑誌名のコード化 D A T A 文の自動書き込みにスクリー しかし , ン・ 工デイタの機能を利用している関係上 , 一部のコント ロール・コードが使えないということに注意してくだ さい ( 表 1 ) 。 また , キャラクタ「〃」 ( A S C I I コードで $ 22 ) が入ると , R E A D 文で D A T A 文を読む時にエラー となります。したがって , $ 00 ~ $ 1 F と $ 22 をコー ドとして用いないよう注意してください。 次に , 各項目ごとにコード化の仕方を説明していき ます。ます配列の添字として使うコードを 1 次コード , D A T A 文に使うコードを 2 次コードと呼ぶことにし ます。雑誌名の 2 次コード と 1 次コードの間には , 2 次コード = 1 次コード十 30 という関係があります。雑 誌名の入出力名は配列 D M の値になっています。年と 月は 2 つ合わせて 1 バイト I / 0 タイトル ( 任意バイト長 ) ←タイトル中にコンマが入っても 良いように「″」でくくる 分類項目 ( 1 バイト ) 言語 ( 上位 4 ビット ) + C P U 名 ( 下位 4 ビット ) べージ ( 1 バイト ) 年 ( 上位 4 ビット ) + 月 ( 下位 4 ビット ) 雑誌名 ( 1 バイト ) 図 1 データフォーマット 104

で表わします。年の方は , 上位 4 ビットを使うため前 記の制約があり , $ 3 以上 $ F 以下で表現せねばなり ません。月の方は 1 ~ 12 の値をそのまま用います。そ 2 次コード = ( 年一 74 ) * 16 十月 とします。ただし , 年は西暦の下 2 桁を使ってくださ い。年は , 1977 ~ 1989 年しか表現できませんが , 1989 年まであれば十分でしよう。ページは , 2 次コード = ページ十 $ 22 とします。表現できるべージの最大値は , 222 ですが , これを越える場合は人間の方でうまく調整することに します。言語と C P U の項目も合わせて 1 バイトとし ます。言語と C P U のコード化を表 3 と表 4 に示しま す。 ロ語の 1 次コードを L, C P U の 1 次コードを C とし , 2 次コード = ( L 十 3 ) * 16 十 C とします。入出力名はそれぞれ配列 D L , D H の値に なっています。分類項目には 7 つの項目があり , 記事 がその項目に当てはまれば 2 進数の 1 を入れ , そうで なければ 0 を入れます。 私のプログラムでは , 7 つの項目が 6470 行から 6490 行の D A T A 文に定義してあります。タイトルという 項目はキーポードから入力した文字列そのものを使い , 長さは任意バイトです。 一次コード 入出力名 言語名 無関係 B A S I C P A S C A L G A M E N T B T L/ 1 F 0 R T R A N L I S P 機 械語 未 定義 0 1 ? ~ っ 0 -4 0 っー 8 、 B A S I C P A S C A L G A M E N T B T L/ 1 F 0 R T R A N L I S P A S S E M B L Y 注 1 注 2 そ の他 Others 注 1 . 「 A S C ーいに発表された言語 注 2. アセンプラを用いた場合もここに含む 表 3 言語のコード化 C P U 名 入出力名 無関係 $ 1 注 1 60 09 09 0 000 6502 6502 Z - 80 Z -80 Z ー 80 Z - 80g ます。 こで PC -8001 のファンクション・ キーを活用してみ ます。つまり , 10 行の P 0 K E 文に よってファンクシ ョン・キー 10 の工 リアの後の方に ( $ E B 18 ) キャ 8085 リッジ・リターン 8086 のコードを入れて 80 おくのです。 60 行 L ー 16 A P F L ー 16 A の P O K E 文でポ 未定義 インタを $ E B 18 にセットし , フラ グを 1 にします。 こうして , 70 行で その他 Others E N D となると P 注 1 . 6802 , MB8861 , M B8870 もここに含 C はキー入力モ 表 4 CPU のコード化 ードになりますが , フラグが 1 になっているためファンクション・キーが 1 PRINT CHR$XIZ>:PÜKE &HEEIS'IZ 2 = 1 自 了自 LÜCATE き 1 4 PR 1 NT し旧 I NG " # # # : : PR I NT " ・ゴョ +- ヨし 2 , 了 , 4 き 5 ” 5 LÜCATE , 9 6 目 POKE &HEOCÜ, こ H18 : POKE &HEOCI' &HEB: POKE HE 自 68 , 1 7 目 ENO 参者リスト 2 DA T Å文の自動書き DATA 文の自動書き込みには , PC ー 8001 のスクリ ーン・エデイタの機能とファンクション・キーの性質 を利用しています。 P C ー 8001 をお持ちの方は , 参者 リスト 1 のプログラムを走らせてみてください。そう すると , C R T の左上に Ok 100 data 1 , 2 , 3 , 4 , 5 と表示され , カーソルが 100 の上に来ます。 R E T U R N キーを押した後にリストを出してみると , プログラムに 100 D A T A 1 , 2 , 3 , 4 , 5 が加わっていることがわかります。 参者リスト 2 のプログラムを走らせると , RETURN キーを押さなくても 100 行の D A T A 文が書き込まれ 19 PRINT 〔 : HF, : ま ( 12 ) 2 = 199 39 LOCATE 4 目 PRINT LISING ・・ ### ";X;:PRINT"data 1 , 2 , 3 , 4 , 5 “ 5 LOCATE 目 , 9 7 ENO 8080 参考リスト 1 10 5

フルネームで入れます。 C P U に関係しない場合 , ま 言語の時と同様に処理 た , その他の CPU の場合は , してください。 次に分類項目を入力します。コンピュータが項目を 1 っすっ表示しますので , 記事の内容が一致していれ ば 1 画とし , そうでなければ 0 あるいは単 に画とします。最後にタイトルを入力します。 S E R C H コマンド このコマンドでは , E N T E R コマンドと同様に 検索すべき記事の条件を各項目ごとに入力します。 サーチ中に P のキーを押すと , キーを押している間 一時停止します。また , S のキーを押すと , サーチを 打ち切ってコマンド待ちになります。 このコマンドではページのチェックをしていないの で , 適当な値をダミーとして入れてください。年 , 月 を指定しない時は , 画のみです。分類項目のチェ ックは , 少々手のこんだことをやっていて , キーボー ドから入力したデータの 2 次コードを Q I とし , D A T A 文からデコードしたそれを R I とすると , Q I = R I ・ Q I ( ・は論理積 ) が成り立った時に一致したとみなしています。 C H A N G E コマンド このコマンドは , データを変更するのに使います。 雑誌名 , 年 , 月 , ページを入力すると , その記事を捜 し出して C R T ディスプレイの上方に表示しますので , E N T E R コマンド時と同様に入力していきます。そ 押されたと解釈し , キャリッジ・リターンを実行して くれます。 以上が D A T A 文の自動書き込みの原理です。この 機能をうまく利用すれば , 自分で自分自身を書き加え て実行するという面白いプログラムができるかもしれ ません。 プログラ乙の説明 このプログラムの中には S E R C H ルーチンと E R A S E ルーチン , C H A N G E ルーチン , 無限ループ があります ( 次頁の文献検索プログラム参照 ) 。これ は , データをすべてチェックした後に , Out of Data というエラーを起こさせ , 9000 行から始まるエラー処 理ルーチンを通ってメインルーチンへ戻るためです。 イニシャライズルーチン中の 7115 行から 7122 行は , プログラムの最後の行の行番号を見つけるプログラム です。行番号の値は $ E 9 F 0 ~ $ E 9 F 1 番地にス トアし , DATA 文の自動書き込みの時に使います。 プロラムし このプログラムには E N T E R, S E R C H , C H A N G E , E R A S E の 4 つのコマンドがありますが , いずれもファンクション・キーに定義してありますの で , ファンクション・キーを押すだけで使えます。 E N T E R コマンド まず雑誌名を入力します。雑誌名は大文字でも小文 字でもかまいません。プロ グラムでは先頭の 2 文字で 罍ヨド , M こ・「は h , P ョ罍 ? 区別しているので , RRAMJ L ョロリ 3 9 罍 ? 誌の場合は , ra 画とし C.F ・リ ? てもかまいません。 次に , 年 , 月 , ページを M ヨ k i ロ 9 ・ : イ H ヨド d ・ E 、 : ドョロヨ i 0 ロÖf H ヨド d ・ コンマで区切って入力しま E : ・ : 3 ハヨ +- i 冂 0 •f ・ : イい す。 次に言語を入力します。 P い ? ドヨⅲ i n L ヨ「リヨを T ヨ pe , 0 i を・ k これも大文字でも小文字で Te rm i 「滝し CRT , P ド i 「ド , もかまいません。言語名は T i い L I SP 先頭の 1 文字だけで区別し ていますが , 言語に関係しな ・ 1 , OFF 冖・目 ? P ド i 「罍ド ON ・ い場合には * としま 9101 目目 9 目 L I SP 5 RAM F: ヨ L I SP す。また , 「その他」の場合は , 目 1 目 19 RAM O T H E R S 画あるい - 罍 t4 0. 4 1 「は罍ドド罍セ罍ド R 3 ⅲ L I SF ・ f 0 ド : ド・ ( ・リド F i i 三 he d. は = とします。 21134 b : ′ +- 三 f ド罍罍 . 次に C P U 名を入力しま す。 C P U 名は , 表 3 の入 文献検索プログラ乙の実行例 出力名で定義してある名を タイトル中に「 L ー S P 」という文字列ガ入っている記事を探してみて , c R T 画面上に表示されたものをプリンタへべージアウトしたもの 106