はポット ( I / 0 ' 78 年 11 月号数値計算入門田参照 ) のゼ ロ判定用の小さな数 E p s ( よくわからなければ , 1 E ー 7 程度にしてください ) を指定して , N に未知数く元の数 ) を入れ , サプルーチン PROD を呼びます . つまり , ファイル A : 連立方程式の係数 ファイル B : 連立方程式の係数 P S : ピポット・ゼロ判定用の数 N : 元の数 or 未知数の個数 です . 出力パラメータ ファイル A : 入力パラメータと同し . 保存される . ファイル B : 入力バラメータと同じ . 保存される . ファイル X : 未知数の解を持つ配列で , レコード 1 にはェ 1 が , レコード 2 にはェ 2 が , というように記憶 されている . E い ) : ファイル X と同し内容を持つ配列 . N S : 工ラーインジケータ NS = 0 のとき , ピポットが 0 となりエラー NS = 1 のとき , 工ラーなし 4 . 計算例 実行例 1 では , 1 ェ十 4 十 7 2 ェ十 5 y 十 8 名 = 1 3 ェ十 6 十 9 すなわち , 1 , 4 , 7 を解いています . これはピポットが 0 になり , 工ラーとな りました . 実行例 2 では 5 ェ十 y 十名 = 1 8 6 2 ェ十 3 十 4 考 = 1 6 1 1 を解いています . 解は , となりますが , 9 桁目はあやしいので , まあまあいい線と いえるでしよう . 実行例 3 では , 2 ェ十 3 = 1 6 つまり , を解いています . 解は , ェ = 1 . 25 となりますが , 末尾まで正確です . 実行例 4 十 2 y 十 名ー 2 加 0 ェー 3 十 名十 2 加 4 y 十 2 ー 2 2 ェー 2 十 3 ~ 十盟 = 1 1 つまり , 2 1 を解いています . 答えは , ですが , W ( ( 4 ) ) の末尾に誤差が入ってきています . ・行列式の値 1 . 目的 行列式の値の求め方には様々ありますが , こでは , 般的な消去法を用いて値を求めてみます ( プログラム 2 ). 2 . 方法 連立方程式の解を求める際 , 行列式の値を用いることが ありますが , 行列式の値のみを求めたいのであれば , アル ゴリズムはより簡単になります . 行列式の値は , 任意の 2 つの行あるいは列を交換しても , 任意の行 ( あるいは列 ) の定数倍を他の行 ( あるいは列 ) に加えても変化しません . また , 三角行列の行列式の値は 対角要素の積で与えられるので , アルゴリズムとしては , ます三角行列を作り , 積を求めていけばよいことになりま す . 3 . 入出力パラメータ 入力パラメータ N : 行列の次数 3 x 3 行列ならば N = 3 A : 行列の要素を持っ配列 行列の要素 aij は , A ( I , J ) に入る . P I : ピポット・インジケータ P I = 0 なら , 各段階のピポットの値をプリン トする . テストランでは , これを 0 にしている . 出力パラメータ DET : 行列式の値 ( デタミナント ) 4 . 計算例 実行例 5 では , 3 x3 の行列 2 , 2 , 1 1 の行列式の値を求めています . 1 回目のピポットは 1 であ り , 2 回目は 0.67 であり , ともに充分大きな値です . ピポ ットの値が 0 に近くなると誤差が増えることは連立方程式 の場合と同様ですから , ピポットの値には注意が必要です . 実行例 6 では 4 , 4 , 0 , 2 4 , 3 , 1 , 2 の行列式の値です . 正しく 16 となっています . 実行例 7 は , 連立方程式でも使った行列について行列式 の値を求めていますが , 行列式の値が 0 でないということ は , 即ち , 連立方程式が解を持っということになります . これも , 正しく 5 という値が求まっています . 実行例 8 では , 同様に連立方程式の係数を使っています が , 有効数字は 8 桁というところです . 0 4 ー一 1 1 1 1 工 ~ 8 6 工 ~ 164
チェッカーの製作 図 4 交換可能なー C ソケット ビスの穴をあける KEL 20 ビンシングルインライン・ソケット ビスでとめる ービンソケットの部分だけ ビスをはずして交換できる 基板 スイッチに取り付けたタマゴラグ 写真 2 なま 変と りお なて くっ もっ の迷、ー一 れな がで ro ス う設 で線 ナ真 、驫震 たで まグ たゴ まタ しと ビン ソケット 使用法 回路図からわかると思いますが , 一応説 明します . ・電源 ( 当然 5 V 士 5 % ) をつなぎ , テ スト S W を 0 F F にする . テストする I C をソケットに差し込み , その I C の Vcc ピンの S W を“ H ”に G N D ピンを "L ”にセットする . I C の出力であるピンの S W を -0 U T / E X T ・ I N ”の位置にする . 0 テスト S W を 0 N にする . これで I C に電源が入る . あとは I C のロジックに従って入力ピ ンの S W を - H 第 - L - にして出力状態 を L E D で調べるわけです . また , カウンタ F/ F などのクロック入 力は S W を“ 0 U T /E X T ・ I N - 側にし て , 手動パルスジェネレータの出力につな ぎます . つまり , 外部またはその I C の出 カピンから信号を入れるときにも , S W を この位置にします . 出力ピンの場合は , L E D で表示されるだけでなく外部 I/O ピン にも信号が出ているわけです . 具体的使用例を写真 3 , 4 に示します . 写真 3 は 7400 のテスト中で , すべての入力 が - L - レベノレ , すべての出力力日”レベノレ になっています . 写真 4 は 7490 ( 10 進力ウ ンタ ) をテスト中 , クロック A 入力 ( 14 ピ ン ) に手動パルス・ジェネレータの出力がつ ないであり , B 入力と Q , A ( 1 , 12 ピン ) とが接続してあります . マイクロ S W を押 すごとに 1 すっカウント・アップしていき ます . 写真 4 は“ 5 ”をカウントした状態で す ( 8 , 12 ピンが H ) . ※注意 . 74122 などのシングルショットで は , C R 入力が開放になっていないため に正しい動作をしないようです , 8 第 写真 4 7490 のテスト 0 8 0
、ロ鬢 を底研第 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
スクリーン・ディスプレイ・サプルーチン スクリーン・ディスプレイ・サプルーチン概略図 フローチャート 3 フローチャート 3- フローチャート 3 フローチャート 2 ー 3 $ E 2 FC フローチャート 3 $ E 3 D 8 $E 3 FF $E 3 D 8 $ E450 $ E426 画面 PEEK カレント・ キャラクタ (C 6 ) →「 Y ( C 4 ) , Y →「 A rA → D 9 rA → (S) 「 A → D 9 「 X → ( 印 rY → ( 3 # 00 → AC (C 6 ) →「 Y (D 9 ) →「 A フローチャート 3 2 十 フローチャート 3 2 - フローチャート 3 2 カレント・キャラクタ $E47A $E 3 B 4 $E 4 F 8 フローチャート 3 ー 2 - ・ 2 フローチャート 3 2 フローチャート 3 3 キャラクタ ・ジェネレータ ・コードから ASCII コード復元 入力済みフラグ・オフ X カーソル $E52F $E38B $E34C シフト・ビットあり $ E 47 A CR $ E 52 F フローチャート 3 2 ー 2 - 2 十 rA : # OD $E39C X カーソル アド′くンス ( C 6 ) + 1 フローチャート 3 ー $ E 33 F QF チェンジ フローチャ ート 3 ー $ E426 X カーソルが有効長に 達していない . $ E 330 ↓全部の内容が 取り出された . 入力済みフラグ・オフ コントロール文字 $ E 450 rA : # 20 $ E 3 F F ↓一般の文字 rY : (A 1) クオート・モード ・フラグ クオート・モード中 $ E352 (CD) → rX rA : # $ E 37 E $ E 31 F rA # 3 F 0 カーソノレ・ダウン rY : X カーソノレ 0 CLC + # 28 rA →「 Y # 00 → A C # 0 D → rA ( 日 0 ) → rX $ E 33 F QF チェンジ rA : # 1 2 R VS キーか ? ・フラグ リ′、一ス 80 : アウトブット ・デパイス $ E 34 E rA → 9 F BEQ rX : # 03 rA: (D5) $ E519 スクローノレ・ コントローノレ $ E 37 E $ E 44 B フローチャート 3 ー 1 CRT 以外の アウトブットのとき こで画面の 行替えを行なう . シフト・ビットなし コントロール文字 カウンタ $ E 352 $ E 3 D 8 CRT OISP カーソルが マージナルを 越えた . $E3 FF HOME キーか ? rA : # 1 3 $ E257 H 0 M E (DC) → rX # 0 D →「 A 0 フローチャート 3 ー 3 $ E 330 rA : # ー 0 $ E450 rA : # 14 $ E426 DEL X カーソルを ー減らす $ E 52 F exit 処理 カレント・ キャラクタ 「 A → D9 (S) → rx (S) → rY ( 09 ) →「 A rY 十 1 rY → C 6 「 Y → C6 カーソル・ライト # 00 → rA rA → DC rA → CD タ ン ウグド カラ一 レ 一ストソ ィリク X $ E 3 B 4 カーソル前段 Sign rY:(D5) $ E 37 E マージナル値を 越え次行に 入った . rA : # DE RTS $ E 51 9 スクロー ) レ・ コントロー ) レ $ E 5 1 9 スクローノレ・ コントロー ) レ X カーソル・ポ インタの次から マージナルまで を 1 パイト左詰 め . (C4),Y → rA rA → (C4),Y rY 十 1 DE は反転コード FF は表示用反転 コード # FF—•rA $ E 3 7 E # 00 →「 Y RTS 重要なのは , を新竄」は 8 D であって 0 D では ないのでまったく [ ま第す 0 」の効果がないということです . しかし , 8 D は E 3 D 8 サプルーチン中では 0 D と見な されるので CRT 上では改行が起こり , 見かけ上 C R が 有効に働いたかのような錯覚を起こします . カナ文字を連 続して入力するときなどは , Shift Lock しているとよ く間違って〔亶亶亟第〒 0 家してしまい , 入れたはすの データが入ってなかったというミスを生しやすいので注意 を要します . [ 京魎」がまともに入ると E 2 CC に来ますが , この ときまだ画面上では C R が起こっていません . こで AC は Not Zero になり , 取り出すべきデータが CRT 上に少 なくとも 1 つはあることを示します . C 4 / C 5 十 Y は , 今 カーソルのある行の木尾を指すことになり , そこから逆に 調べてスペースでない文字を捜してバックし , 有効な文字 rY: ( 05 ) $ E 44 B 「 Y → C 6 X カーソ ) レ # 20 → ( C4 ) , Y 右端をプランクにする . $ E 37 E $ E 37 E 列の長さを A 1 に記憶します . こでいったん X カーソルを zero にクリアし , QUATE モードも無条件にリセットします . さて , 問題のところですが , A 3 の内容すなわち入口時 点での Y カーソル値がマイナスなら , すぐ E 2 FC にいき ます . もし , これがプラスであって現力ーソルと一致して いるなら , 旧 X カーソルを C 6 にリセットします . 有効長 A 1 が旧 X カーソルより大であれば E 2 FC にいきますが , 182
図 2 モニタのワーク・エリアとその内容 ( 抜粋 ) 番地ーパ数ラベル名 内容初期設定値、 ~ 2 RAMEND R A M の最大番地 1 F F F 1 文字入力用 3 AS CIN 7 E F A 4 4 ジャンプ・テープノレ 1 文字出力用 3 ASCOUT 7 E F 7 A 6 ジャンプ・テープル リスト 1 完全フルキーポード化プログラム こ丁盟 群 4 F7Æ 新第篷±F 第観響醂 IF 冪ー RAM 最終番地を引円 F に を F 墜 1 」 # 良 : 驢 ASCIN を JMP CURCHR に ま霞 ASCOUT を JMP CNVCHR に を iF 印第 1 正第 / F 正印 文字モードに初期化 2 堕第 BA C に戻る ] 第 IFF い良藷 [ 日霈 モードの判定 衄 4 正懿譱 文字モードのとき 5 iF 氈王 図形モードのカーソル $ 9D ■ 文字モードのカーソル $ 5F 日 新 ~ ±F 花 F 一文字入力へ 3 ±FBF F 朝鰰 8 A 。 0 白を退避 衄 3 口ま モード切り換え入力か ? モード切り換え入力でないとき 霆 1 止 % 行び モード切り換える ( 文字図形 ) 霆 2 正 スペース ( $ 2 の ] ・正朝 F61FF[.t [ 文字モードか ? 霆 4 止匹 2 高 文字モードのとき 良新 F ま第 $ CO ~ $ DF は $ 20 を加える 睡 7 IF 第 を IFb6 $ ~ $ BF は $ EO を加える 当åF 2 社 [ : $ IF はそのまま 1 ユ F 2 こき $ 40 ~ $ 5E は $ 20 を加える 知 ] 罅 E 当 $ 3F は $ 80 に変更 4 31 第 巧正臼 25 $ 30 は $ ー F に変更 1 3 Lü4 $ 30 ~ $ 3C , $ 3E はそのまま 第罅印礙 お 4 目正圧 2 」 0 ~ $ 20 はそのまま な 1 正 F 当 3 ま第 $ 幻 ~ $ 2F は $ EF を加える となっているのです . 同様に , アルファベットの小文字が 第 2 宿第 9 # 第 すべて関数に対応しています . 関数の省略形というところ 町 F4 9 # でしようが , それはど有効とは思えません . 4 第 F い 7 A 。。 8 を元に戻す この理由は , 関数の中間コードと , キャラクタのコード 5 止 F9 藩 一文字出力へ が一致しているためです ( 図 3 ) . 1 A 。。 B の退避 べーシックマスターを持っている人 , せひこのプログラ ムを使ってみてください . そして意見・感想をお聞かせく $ 00 は文字モード , $ FF は図形モード ださい . ー / 0 プラザ今日はレ 0 パサールにおける TK -80BS の位置づけを昔と今とで比べてみたいと思います . 昔・・・売るく求む , 今・・・売る > > > 求む . そこで , ばくは活字を太くして言いたい / 。日 S 使いこなせんで , 何がいいとや / oPC, MZ がほしくて BS をパサールに出せるか / とにかく , B S には井上氏や玉村氏や , いろいろな人が B S 党の人のために発表してくれたすばらしいソフト 90 があるのです . これらのすはらしいソフトを縦横無尽に使えは・何でもできそうな気がしませんか ? ( グ , グラフ 図 3 関数の省略形 ( ? ) ■ I 、 K E Y S 6 0 S I N n CURSORS C 0 S a 0 L E F T S b p T A N c R I G T HS q A T N d M I D $ E X P S T RS L 0 G e S C H R S f S Q R t P E E K u h T I ME v V A L C U R S 0 R 7 7 w L E N I N T x A S C 6 B k A B S y T A B 6 C S G N z H E X m R N D 8 8 0 っ 4 プロクラムの説明 大ざっぱな説明は以下のとおりです . べーシックマスターのモニタ・ワーク・エリア内に ASCOUT と呼ばれる 1 文字出力用ジャンプ・テープルが あり , 通常は AccA の内容を出力する C H ROUT へのジャ ンプ命令が書き込まれています . これを書き換えて , 別の 番地へジャンプさせ , そこで AccA の値を変換してから CH ROUT にジャンプさせているわけです ( 図 2 ) . 同様に , ASCIN ( 1 文字入力用ジャンプ・テープル ) も書 き換え , カーソルとして出力される AccA の値をモードに よって変えてから , キーポードから 1 文字入力する CH RGET に接続しています . RAM の最大番地が書き込まれている RAMEND は , この プログラムの入ったメモリが BASIC で使われることのない ように書き換えています . あとかき 怪しげなプログラムですが , 一応初期の目標は達成でき こでちょっと気が付いたことを述べておきます . 実際に図形バターンを入力するときには , 図 1 のキー パターン対照表では不便です . そこで , キーポードの配置 を図に表わして , そこに図形パターンを書いておくとわか りやすくなります . 本当はキーに直接書き込むのが一番良 いのですが . ひとつ , 面白いことを発見しました . このプログラムを イ更って , > 1 0 A $ = ・ と入力して LIST すると , > 1 0 L E T A $ = ー N K E Y $
MZ -80 / C PALL に APPEND 機能を 鳥居伸祥 せつかく PA L L でいろいろなユーティリテ ィを作っても , それをテープに入れておき , 必 要なものをロードして使うことができません . そこで , PALL 工デイタにテープからの A >PEND 機能を付けました . ◎使い方 ・ P = n でポインタを最下行 , または , 必要な 部分の最下行に持っていきます . ドを使うか , ラインナンノヾー 0 0 0 1 に何か ダミーを入れてから A コマンドを使ってくだ ・ PALL 本体で 20BA から変更したため , コ マンド・ミスなどをしたときにポインタがト ップに戻ることはありません . ・読み込み工ラーがあっても表示されません . MZ は読み込み工ラーは滅多にないので , そ れはど心配しなくてもいいと思います . 読み 込み終了時には , L コマンドでテキスト最終 行が変わっていることを確かめてください . 工ラーがあったときは , 読み込む前に設定 したポインタの行が表示されます . ・ 1 通りの使い方をしてみて異常はありません でしたので , きっとうまく動くと思います . なお , 1 F 7 0 H ~ 1 F F F H 番地には , 機械語モニタ ( SP ー 2001 ) では入りません . 適当に工夫するか , PALL 本体の後ろ ( 384 8 H ~ ) にくつつけるかしてください . ただし , このときには TE ST の番地を変 更してください . FILE NAME ? ↓ PLAY FOUND x x x FOUND ()X △ LOADING C)XA 0 0 0 1 0 0 0 2 △△ A 0 0 5 0 0 0 5 0 F ー L E NA NI E ? ↓ PLAY L ( ) A D ー N G x x x 0 0 0 1 0 0 4 0 0 0 5 0 0 0 4 0 部分か・ 心要な場合 となって読み込みを終わります . このときポイン タは , 読み込み終了時の最下行に移っていま す . したがって , 続けて A コマンドを入力してや れば , その後にさらに読み込みが行なわれます . ・使用上の注意 ・ A コマンドでは , 一番始め ( つまり , テキス ト・エリア上に何もプログラムが入っていな いとき ) の読み込みはできません . Y コマン プログラム・リスト ゴメン 内い行入力 モニタ内 , FILEN A E をテープか ら読み込む ・ A コマンドを入力します . FILE NAME ? と 聞いてきます . すぐ次に入っているデータを読 み込むときは , FILE NAME の入力なしで直 町を押してく担さい . オペンド ラベル h70 RDAPND LD DE, SAVEMS ー FC6 1 3 : 73 CD 3A 幻 CALL PUTLIN IFC7 72 : 76 CD 2D 21 CALL CRLF ー FC8 23 1 1 E3 24 LD DE, KEYBUF 1 FC9 73 üC CD E6 07 CALL 07E6H 1 FCA 23 :7F CD D8 04 CALL 94D8H IFCB 7E C, ERRORD JR IFCC FE OD A. (DE) LD IFCE 20 FA : 85 FE OD CP 00H ー FDO 23 28 ー C Z, DLOAD ー FD ー 7E 9 05 NEXTHD PUSH 1 FD2 DE FE FF CD 2D 幻 CALL CRLF ー FD4 28 03 モニタ内 *FOUN 1 1 引 01 DE, 田引 H LD 1FD6 , 90 CD FO ー F 0 ーを表示データ CALL PUTNAM ー F07 18 E E POP のある番地 ー FD9 22 4D 幻 LD DE, IOFIH ー FDC ED 53 5F 幻 06 10 LD B, 1 OH IFEO T9 CD 80 田 80H モニタ内 , 文字列 CALL 1 FE ー ED 53 5D 幻 28 07 の比較 JR Z. DLOAD 1FE5 C3 44 20 :9E CD D8 04 CALL 04D8H ー FE8 2A 4D 幻 rA1 38 42 JR C, ERRORD IFEB 36 FF E4 JR NEXTHD IFED C3 44 20 rA5 CD 2D 2 ー DLOAD CALL IFFO CD 3A 幻 CRLF rA8 DA 24 LD DE, LOADMS 1 FF3 日 FI 10 rAB C 0 FO ー F CALL PUTNAM ー FF6 幻加 00 、 HL, (POINTR) rAE 2A 5F 21 LD ー FF9 CD 69 23 CALL NSONLY IFFA 36 OD A, (HL) rB4 7E LNLOOP LD IFFC CD 3A 21 23 INC ー FFF C9 ' 日 6 FE 00 ODH CP 20 側 ープ読み込み 20 FA 題番地を入れる JR NZ, LNLOOP ( い 04H ) , HL ニタ内 , テープ 'BA 22 04 LD 20 日 A FE 41 らデータ読み込 -BD CD F8 04 CALL 04F8H 20BC CA 70 ー F ℃ 0 38 26 C, RDEROR JR 20 日 F DE, (POINTR) ℃ 2 ED 5B 5F 21 LD ニタ SP ー 1002 . のプログラムの中で定義されていない記号番地はすべて , 1 月号のアセンプル . ・リストによります . ただし , 1 卩号のプログラムと 12 月号のプログラムは少し違って ) ため , その記号番地の指す番地は違っています . ラベ ) レー オペラシド ー NC DE (HL), 0 RNUMBR LD INC (HL). D S LOOP INC HL A, (HL) LD CP ODH JR NZ, SLOOP INC HL A. (HL) LD CP FFH JR Z, LNEND INC DE JR RNUMBR (TEXTED). HL LNEND LD (POINTR), DE LD DE ー NC (LINEND), DE COMAND ERRORD JP HL, (TEXTED) RDEROR LD (HL), FFH COMAND PUTNAM CALL PUTLIN DE, IOFIH HL, H HL, DE (HL), ODH LD CALL PUTLIN RET (PALL 本体内 , 変更部分 ) CP NOP TAPE から読み、 んだ FILE NAM の入る先頭書地 41H (ASCII コー 引 H Z, RDAPND 141
朝明叩卩啀 信頼性が高いと言われている T T L ー C ですが , そ れも 1 00 % 完全ではありませんし , ましてやマイコン のように数多く使用するようになるとなおさらです . また , ジャンクの一 C なども良否を調べなければ使え ません . そこで , T T L ー C の動作確認のための " ー C チェ ッカー”なるものを作ってみたので紹介します . 写真 1 ー C チェッカー ル IC のテストに要利な ■大江和久 図 1 全回路図 他の回路 構造 テスト S W 3 位置 S W 電源 + ー C の 構造はいたって簡単で , I C のピンそれ 各ビンへ ぞれに対して - H レベル , または - L ' レベ ルの電圧を加えるか , 外部へのテストピン へ接続するかで , 同時に LED で状態を表 示します . その他 , 手動でバルスを発生さ せるもの , ノヾルスを F / F ( フリップフロッ プ ) でキャッチするものが付属しています . 回路を図 1 に示します . I C はできれば L S タイプの方が良いでしよう . また , L E D のドライ / ヾに C -M 0 S を使うと MOS I C の測定もできると思います . ただし , この場合には静電破壊対策をしておかなけ ればなりません . OUT/EXT•IN 7404 のレ ec へ 7404 など 470Q LED ☆上の回路を組作りそれぞれのビンへ接続 ( 74 が 3 個必要 ). 0 手動パルス・ジェネレータ部 マイクロ S W NC 棗「負パルス出力ビン CO 」 1. 正′くルス出力ビン NO 0 ′く ) レスキャッチャ 一部 7474 など 47 OQ LE 0 LED 正′レス入力ビン 7400 など 470Q 製作 負パルス入力ビン リセット SW 私はユニバーサル基板上にすべて組みま 一回′ヾルスが入ると LED が点灯 した ( 写真 1 , 図 2 ) . 部品はほとんど有り リセット S W で消える 合わせの物ですが , 使用には充分です . 問 題は 3 位置 ( 3 接点 ) のスイッチで , なか す . こちらの方が高くっきますが , 扱いや それから I C ソケットですが , できれば なか入手できないと思います . そこでセン すいでしよう . この場合の回路を図 3 に示 ゼロプレッシャーソケットカ { いいのですが , ターオフのトグル S W を使うことができま します . 何しろ高くっくので ( ここはアマチュア精 神 , なるべく安く / ) , 図 4 のように工夫 図 2 ー C チェッカーの部品配置図 図 3 センターオフ・トグル S w 使用の場合 3 位置 SW 、、 外部 IN/OUT ビン ・外部 IN/OUTE ン ビス , ナット タマゴラグ マイクロ SW テスト sw 0 ′ヾノレス 〇 0 〇〇〇 0 0 出力ビン ー C ソケット ′ ) レス 〇 〇〇 0 0 0 0 〇 0 入力ビン 0 0 ′ヾ′レス L E D つロ LED 電源ピン ー C ソケット OUT/EXT•IN 他の部分は のビン S W へ 基板 2 枚重ね この下に 74 , 抵抗などがある リセット ー 42
図 2 図 1 の AND-OR アレイ部をゲートで表現したもの 図 3 メモリと PLA との相違 メモリ アドレス P5 y=f(x) 既既 結果 入力が決まれば出力は一義的に求まるという点だけ考えれ ば , メモリと P L A は根本的には同じものだと考えることは できる . しかし , P L A の場合 , 状態 xi と結果 y i の数があま りにも多いので , メモリと同じ方式で処理しようとすると不 必要で膨大な記憶容量を必要としてしまう . P L A では Y = F ( x ) の変換部に A N D -0 R ゲートの組み 合わせを用いているため , R 0 M の場合と比べて無駄な部分 が少なくなる . Y=F(x) といった欠点がランダムロジックにはあるので , の欠点を克服するため近年 , メモリのような整然とし た論理回路が考案され始めました . その 1 つがここで 取り上げる P L A という方法なのです . ■ PLA の構造 P L A の基本的な構造は , 図 1 に示すようにプログ ラム可能な A N D アレイと 0 R アレイとから成り立ち ます . この構造は , ダイオードがアレイ状に配置され ているため L S I 化に適しています . まず , このダイオードを設計者が希望する任意の論 理積 ( A N D ) の組み合わせになるように配置します . 次に , 0 R アレイのダイオードを任意に配置すること により , 先の論理積に対する論理和 ( 0 R ) が希望の 機能を満たすようにします . 一般に , すべての組み合わせ論理回路は AND ー OR の積和型で表現できます . すなわち , 論理回路は AN D ー 0 R の P L A で代用できるわけです . A N D , 0 R を 構成するダイオードは , 設計者がその目的とする製品 の仕様に従って自由に“プログラム " することができ ます ( 図 2 は図 1 の AN D-O R アレイ部をわかりやす いようにゲートで表現したものです ). ところで , 図 1 のダイオードの配置を見ると , 何か 前に説明した R 0 M の構造に少し似ているような気が してきませんか . P L A を初めて理解しようとしてい る読者の中には , たとえば P ー R 0 M のアドレスを入力 表 1 PLAvsROM 必要ビット数の比較 ( 出力端子 ; 8 ) R 0 M 入力端子数 32 64 96 128 256 288 320 352 384 416 448 480 512 544 とし , 出力端子からその論理の結果が得られるように プログラムすれば , P L A と同様の機能を持ったデバ イスが作れることに気が付くかもしれません . しかし , P L A と R 0 M との間には若干の相違があ るので , この違いをまず明確にしてみたいと思います . 図 3 を見てください . 入力の状態が決まれば , その 論理出力の結果は一義的にある一定の論理演算によっ て求まってしまうため , プラックポックス的に考えれ ば , R 0 M のアドレス入力とデータ出力とを割り当て て P L A と等価であると見なすことができます . しか し , 入力の状態と出力の端子数が少ない場合は R O M ( 特に P ー ROM ) で充分間に合わすことが可能ですが , 入力の数が大きくなるとアドレス線が増加して R 0 M の記憶容量を大きくしなければなりません . 以上の制限によって , 入力はせいぜい 10 本ぐらいが 限度と思われます . また , 出力端子を増 . 加することも 記憶容量増加になりますから , これもむやみに増やす わけにはいきません . よって , R 0 M を P L A 代わり に使用することは , ある程度までは可能ですが , 論理 の規模が大きくなると R 0 M で代替えするということ は困難になってきて , P L A の独壇場となります . PLA の場合は , 〔入力端子数 x 出力端子数〕の数だ けの A N D アレイと 0 R アレイを用意するだけで済み ますが , ROM の場合は , 〔 2Nx 出力端子数〕の記憶容 量を必要とします . 表 1 は , 出力端子数が 8 の場合 , 入力端子数の増加 につれて必要ピット数 ( すなわちダイオードの数 ) が どの程度増加するかを , P L A と R 0 M について計算 したものです . 図 4 には , これをグラフにプロットし たものを示しています . 図からわかるように , 出力端子数が 8 の場合 , 入力 端子数Ⅳ = 4 までは , R 0 M の方が P L A よりも必要 ピット数が少なくて済みますが , Ⅳ = 4 以上では P L 16 32 64 128 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 P L A ; ( Ⅳ X 2 X 8 ) X 2 R 0 M ; 2Nx 8 ・ P L A の構造
モニタおよびサプルーチン 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 ? れ
図 2 メモリ・マップ 回ロ観明 $ 1 0 0 0 R 0 M 4 K ノくイト 基本エリア RAM20K RAM ( 固定 ) パイト標準 36K 装備 パイト に拡張 したとき 図 4 に拡張インターフェイスの全回路を示します . M z からの各信号は MREQ を除き , すべてバッフアを通してあ ります . MREQ は LS138 の石入力 1 つだけなので直結しま す . また , バッフアの前にはすべてプルアップ抵抗が入りま すが , 抵抗値はその信号線の使用目的やドライプ能力によ り適当に選んであります . M z のポード内バスに直結して いるのであまり低い値は使えません . プロから見れば気休 め程度といわれるかもしれません . VDG ポードも将来作る他のポードも , すべてポード内 でフルデコードするので , 56 ピンの工ッジコネクタには , すべてのアドレス信号を出力します . これは各ポードを他のシステムに流用する場合を考えて のことなので , 今回必すしも必要ではありません . v D G ポードも説明書どおりにジャンパー線を入れないで , 直接 V D G のアドレス・セレクト信号をコントロールすれば , A15 ~ A13 の信号は不要になります . 拡張インターフェイスのアドレス・セレクト信号は L s 138 と LS30 を使って作り , ジャンノヾ一線の入れ方により $ 8000 ~ $ FFFF まで 4K バイトごとに選択できます . この信 号は主にデータ・バスの方向制御に使いますが , MEM ・ R, MEM ・ W 信号もこの信号でゲートされているので , セレク トされていないアドレスでは出力されません . なお , $ D000 ~ $ EFFF ( LS138 の 05 , 06 ) の範囲は M Z 内部で使われているため拡張インターフェイス側でセレ 図 5 レ 0 パスコネクタ 26 ビンフラット・ケープル・コネクタ T 信号は今回使っていません RESET 予定 レ OR 十 5V INT レ OW NC $ 5 0 0 0 $ 6 0 0 0 $ A 0 0 0 $ C 0 0 0 $ D 0 0 0 $ E 0 0 0 $ F 0 0 0 VDG 8K パイト V-RAM 工リア MZ の V-RAM 工リア MZ 内レ 0 工リア 将来拡張インタ ーフェイス で使う予定 コネクタに外部機器が接続された場合 , ポード内バス→コネ クタ間にはノヾッフアが入っていないので , 8255 と 8253 は接 続されたケープルと , 更にその先に接続されている I c を 直接ドライプしなければなりません . これは N ー MOS としては大変な重荷です . したがって , 本機では接続のためのフラット・ケープル は lm 以内 . 使用する信号線はすべて 1 ゲートで受けるこ とにします . 図 2 のメモリ・マップを見てください . M z ではメモリ を 4 K バイト単位で区切り , 最初の 20K バイト $ 0000 ~ $ 4FFF(ROM4K'S イトと RAM16K バイト ) と V-RAM ・内部 I / 0 ェリア $ D000 ~ $ EFFF を基本エリアとして固定し , 残りの $ 5000 ~ $ CFFF をアドレス・セレクタ cs 1 で 4K ヾイトごとに選択するようになっています . この信号は ROM ・ RAM プロックのノヾッフアもコントロ ールするので , CSI に線を渡さない限りそのエリアのデ ータはポード内バスに出力されません . この性質により基 本エリア以外は外部で自由に使うことができます . 本機で は M Z 内で R A M を 36 K バイトまで拡張できるように v D G ェリアを $ A000 ~ $ BFFF に設定しました . I / 0 マップについては , 大きく 2 つに分けました ( 図 3 ). $ 00 ~ $ 7 F は外部 I / 0 ェリアとして , 1 プロック 161 / 0 ポートごとに拡張インターフェイスの外へ引き出し , I / 0 機器のコントロールに使います . 本実験機では , 1 プロッ ク分しか用意してないので他のプロックにはイメージが出 ます . $ 80 ~ $ F F は拡張システムのコントロールポート などに使います . 今回は V D G ポードの F s 信号のチェッ クに使うだけですが , 将来はプリンタなどのポートも この 工リアに入れます . Ao D4 0 0 0 0 0 0 D7 03 01 0 0 0 0 0 0 ケープル側から見て 注 ) ↓ケープルからの入力信号 GND ↑ケープルへの出力信号 INT 信号のみが MZ への入力信号です . 写真 1 筆者のシステム 0 図 3 レ 0 マップ ← 26 ビンフラット・ケープル・コネ クタに接続されるレ 0 1 6 ポート分 のエリア ←ー拡張システムコントロー ) レ ・ポ 1 レ 0 プロック イメージ $ 8 0 $ 8 4 8255 イメージ 92