電卓(electronic desktop calculator)とは正式には電子卓上計算機の略であったが, 現在は電卓という言葉が定着しているので,以下こう呼ぼう。 電卓は蓄積プログラム方式ではないが, ほとんどパソコンと同じような機能を持っているので, 勉強のために,具体的構成を述べよう。 なお,ここでは,教育的効果を考慮し, コンピュータとの連続性を意識した電卓を示しているが, 本当の電卓は,ここで述べるものよりずっと簡素化されている。 しかし,動作としての本質はあまり変わらない。
電卓の入出力と言えば,十数個のキーからなるキーボードと, 10桁程度の数字を表示するディスプレーだけである。 キーボードは全体として一つの周辺装置を構成するが, ここでは説明の都合上, 周辺装置のアドレス一つ一つにキーが結び付けられているものとしよう。 これらキーボードに割り付けるアドレスは,数字キーに対しては0x0000から0x0009, 演算キーについては余裕をもって0x000Aから0x001Fとしておこう。
例えば,キーボードの数字キー「7」が押されているかどうかを知るには, CPUより0x0007番地のアドレスを指定しReq(Request)信号を与える。 キーボードが押されていれば,データバスに0x0007を載せてEnable信号を返す。 押されていない場合には0xFFFFを返すものとする。
キーボタンについては次のような扱いをする。
ボタンを押した場合,押す時間によらず,
同じ結果が得られるように配慮する必要がある。
また,ボタンのような機械的接点には,
いったん接触した後,
振動のために何回か離れたりついたりするチャタリング(chattering)という現象が発生する。
この影響を除去する必要もある。
このため,ボタンの後に図 10.3のような回路を用意し,
いったん接触した後には,
が配線に充電され,
その後,抵抗により徐々に電位が下がるようにする。
この結果,接点が開になっても,この電位がおよそ
を切るまでは,
は1のままであり,閉になっていると理解される。
この回路に接続されているシークエンス回路は, 図 10.4に示すような状態遷移図を持ち, 次のように動作する。
まず,内部状態は基本的には0で待機している。
が来ても
の場合には,
0xFFFFとして
で返事をする。
で
が来ると,
キー番号として
により返事を返す。
この後すぐに
が来ても重複返事を返さないよう,
内部状態を1にして
が再び0に戻るまで,待機する。
が再び0に戻れば,内部状態0の待機状態に復帰する。
出力側の数字ディスプレーはもっと単純である。 まず,ディスプレーは出力用周辺装置として1アドレスが与えられているものとする。 数字1文字を表示するには7エレメントぐらいが必要であるので, 10個の数字としても全部で70個ぐらいである。 さらに,小数点やエラー表示などを入れても7bitのデータ幅の情報で, エレメントの指定は十分可能である。 また,指定されたエレメントを明るくするか暗くするかの指定に1bitを割り当て, 計8bitのデータをCPUから送り, その下位7bitをデコードして必要なエレメントに必要な情報を送ればよい。
残るはCPUであるが,蓄積プログラム方式ではないので, 図 10.2に示したものでよい。 ただし,レジスタはXとYとZの三つとする。 また,演算は逆ポーランド算法と呼ばれる順で行う。 これは,置数,置数,演算のようにキーを押す。 例えば12+31は,1,2,ENTER,3,1,+と押す。
CPU内のシークエンス回路の概要は次のようである。
ただし,数値入力の初期状態であるかを示す
なる内部変数を用意し,スタート時に
とする。