電卓を作ってみる(前編)
先日、電卓用IC MC74007を入手したので早速電卓を作ってみました。
作ったといっても基本データシートの回路そのままです。
ボタンは全部で30付けられるのですが、製作が面倒なのと機能のわからないものがあるのでとりあえず23だけ付けています。マトリクスの線はコネクタに引き出してあるので後日機能を見てみるつもりです。
配列は次のようにしました。
個人的に製作してきたものの紹介です。
電子的なものがほとんどですが、そうでないものも出来るだけ出していきたいと思っています。
回路図、ソースコードなどは出来ればすべて載せたいのですが、以下の理由で難しいものが多いです。
残っていないのではなく、そもそも書かないことが多かったためです。
もちろん仕事ならば書きますが。
特に古いものでは雑誌など掲載のものをベースにしているものがあり、オリジナルと分離できないものは公開できません。
5インチや8インチのフロッピーだったり、PC-9801フォーマットだったりして読むのが難しいものがあります。
先日、電卓用IC MC74007を入手したので早速電卓を作ってみました。
作ったといっても基本データシートの回路そのままです。
ボタンは全部で30付けられるのですが、製作が面倒なのと機能のわからないものがあるのでとりあえず23だけ付けています。マトリクスの線はコネクタに引き出してあるので後日機能を見てみるつもりです。
配列は次のようにしました。
探し物をしていてこんなものも発見してしまいました。
かなり古いものです。
2つの7セグメントLEDは東芝のTLR312、以前は入手しやすい定番のデバイスでした。
下にはデコーダがあります。右側のソケットは抜かれていますが、左に挿さっているのはFairchildのF9368です。これはZ80ボード 1号機(の形見)でも取り上げました。1号機ではデータバスの表示用に2つ使用していましたが、それがこのボードに流れてきていたのかもしれません。
隣には日立のHD14040BPがいます。12ステージのリプルカウンタ、これは74HC4040として74HCシリーズにも取り込まれています。
ちょっと間があいてしまいました。
前回CRCエラーが出ているとはいえ一応セクタが読めるようになりました。データ転送のオーバランも発生していません。
FDCの回路を作るのは今回が初めてですが、8ビット時代に製作記事はよく読んでいました。そこではデータ転送が間に合うかどうかが大きな課題として扱われることが多く、ソフトウェアでステータスを見ながらでは取りこぼすということでいろいろな工夫がありました。
それで当初は心配していたのですが、さすがに当時とはCPUの速度が一桁以上上がっているので余裕がありますね。
前回手動でコマンド発行するところまで書きました。
このままでは面倒ですし、何よりデータ転送を伴うコマンドが使えません。
メモリ上にコマンドとパラメータ列を書いておいて自動で送信、リザルトステータスの受信までを行えるようにします。
当初はステータスレジスタを参照しながら送信・受信を自動切換えさせようとしたのですが、なぜか不安定だったのでパラメータやリザルトのバイト数を指定するように変更しています。
これでFDCとのやりとりはできるようになったので、実際にディスクを読んでみることにします。
これがREAD DATAを試してみたところです。
50ピンのコネクタに刺さっていたジャンパーピンはREADYをGNDに落とすためのもの、34ピンコネクタに接続していないからです。いずれDSKCHGと切り替えられるようにしたいですね。
裏側、FDDコネクタのところ以外はほとんど一対一の接続なので配線作業は楽でした。
ATmega1284Pのポート割り当ては以下のようになっています。
MC68kボード復活作戦(番外編)などで取り上げた大昔の環境は以前イメージ化してあったものですが、フロッピーディスクのままでイメージ化していないものがまだまだ存在します。読めなくなる前に(既に手遅れかもしれませんが)イメージ化しておきたいものです。
以前はまだPCに5.25インチのドライブが接続してあったのでそれを利用したのですが、今やろうとするといろいろ面倒なことになりそうです。
ということでこんなボードを作ってみました。
PCとはシリアル(USB変換ケーブル)で接続します。
Mass Storage Classを使うべきではという意見もあるかもしれませんが、次のような理由でこの形式を選択しました。
前回ACIAを交換してみたところまで書きました。
レベルコンバータのMAX232も手持ちのSP3232と換えてみましたが、やはり駄目でした。チャージポンプのキャパシタが悪いのかもしれませんが、この基板はあまり弄りたくないので迷うところです。
いろいろ試しているうちにレベルコンバータのICを抜いているとTxDataに信号が出ていることに気づきました。リセット直後に130回ほど変化しています。
これはオープニングメッセージかもしれません。
同じころソースコードから通信条件が 7ビット・偶数パリティ・ストップビット2 であることもわかりました。今ならこんな設定にはしませんが、元になったモニタの設定をそのまま流用したようです。
ROMが用意できたのでいよいよハードウェアを動かしていきます。
まず電源とシリアルの線が失われてしまっているので何とかしなくてはいけません。このボードは思い出も多いのであまり弄くりたくないのと、本数も少ないので基板から直接リード線で引き出してACアダプタ用のDCジャックとD-Sub 9ピンのコネクタをつけました。MAX232付近に必要な信号がそろっているのでそこから引き出します。
電源の極性を十分確認してから電源を投入してみます。
HD468A50Pの送受信クロックは153.6kHzだったのでボーレートは9600bpsと思われます。ターミナルも準備してリセットを何度か押してみますが何も出てきません。