Apple1 Computerを現代で作ることはできるのか挑戦してみた その1~シフトレジスタ問題~

このサイトでお馴染みのMacintioshシリーズですが、このシリーズはApple社の最初の製品シリーズではないことをご存知の方も多いかと思います。(多いか?)

そんなアップルコンピューターの最初の製品は、Apple1という基板むき出しの製品でした。なんというか、Arduinoの巨大バージョンのよう。またはMZ-80を基盤だけで販売したらこうなるんだろうなあといった感じ。サイズはおそらくこちらのほうが小さいですが。
https://ja.wikipedia.org/wiki/Apple_I
より引用。

そんなApple1ですが、このご時世でも当時製品についていた説明書をダウンロードすることができたりします。そこにはなんと当時の回路図とプログラムの詳細が書かれており、うまくすれば自分で製作することができるようになっています。制作者のウォズニアックもこれをもとに自分で製作することを許可しているという英文もちらほら見かけるので、(復刻版Apple1を作る計画がありその際のインタビューにて書かれている。)ならば自分でこのApple1を作ってみようではないかとなるに至ったのです。

ただ、強引に当時のパーツを集めれば作れるのはほぼ当たり前です。なので今回は一つ縛りをつけようと思います。それは、

「秋葉原で買うことができるパーツで作る」

というものです。これが後々地獄を招きます。Macintoshですでに味わってるのにね。では行ってみましょう!!!!!

■|廃盤パーツのオンパレード!?70年代のコンピュータなので・・・

早速回路図をもとにパーツを買い求めようとしますが、いくら書いてあるとはいえ正直よくわからないものが大半。特にCPUボードとビデオボードが別に記載してあるようですし、文字もつぶれていて正確に読み取れないところもちらほら。
そこで海外で製作された方のサイトを見ると、なんとパーツリストがまとめてありました。これさえあれば無敵!と喜び勇んで秋葉原へ行き、秋月に飛び込むと・・・

ない。

ん?じゃあ千石に行ったらアルカナ?と地下に潜ったところ・・・

ない!

なんか必要なパーツの3/1ぐらいがない!!!!!!!

いやー、まいりました。店員に話すと、もうそういうのは取り扱わなくなったの一点張り。需要のあるものだけ置いているといわれまして。そらそうか、だって70年代の回路で使われていた部品だもの。技術の発展でもはやいらない子になったTTLなんて星の数ほどあるはず。しかし、CPU周りはわりと代替え回路があるといってもビデオ回路周りは超特殊なつくりになっていて正直回路を置き換える=Apple1ではなくなる、といっても過言ではありません。

■時代が生み出した美しくも超めんどくさいビデオ回路


どうしてそうなのかと申し上げますと、下にその部分の回路を拡大した写真を添付させていただきます。

この写真の部分が、モニタに表示するデータを保持しておく回路になっています。ここに普通ならあるはずの部品がありません。それはメモリ。普通、表示内容をキープするために画面に表示する文字の分だけメモリが必要になるのですが当時CPUの次に高価だった部品がメモリ。しかしながら、その部分は2504という部品が占拠しています。

なので設計者のウォズニアックはこのメモリを使わないで表示内容を保持する回路を組みました。それが、「どうせメモリの頭から読み出すのならシフトレジスタに入れておけばよくね」回路でした。(ものすごく誤解を生みそうですがだってそういう回路になってますからねここ!さらに他にも機能が任されていて、正直無茶苦茶だなぁって思いました。必要最低限にすることが美しいらしいので、回路として非常に無駄のないものでしょうが・・・)
文字を一文字記録しておくなら最低1バイトあればいいので、ウォズニアックはシフトレジスタを8つ組み合わせて1バイトとし、このシフトレジスタに画面の文字情報を入れる、というようにしてしまったのです。
さらに、このシフトレジスタ超特殊で長さが1024ビットという代物になっています。ちなみに私が調べたところテキサスインスツルメンツという半導体大手の会社が出しているシフトレジスタで一番長いものでも64ビットが最大。
つまり、超長いシフトレジスタを組み合わせてメモリとし、このシフトレジスタの頭とお尻をつなげることで延々と表示できるようにしてあるため、メモリを順次呼び出して表示する、という方式はこれと全く違う回路になります。多分メモリを検索して表示する方式のほうが回路はめんどくさくなります。が、これは当時こういったICがあったからの話。今これを再現しようとすると、1024/64=16。さらにこれを1バイト分必要なので16×8=128。つまり、同じ回路を再現しようとすると本来8個で済んだICが128個必要になる計算になるのです!!!!!!

いやはや技術の進歩がどれだけすごいのか痛感します。ありえない。今ではメモリひとつとTTLIC10個ぐらいで事足りますからね。読み出すだけだったら。逆に128個並べた回路を拝んでみたいものです。きれいに並べれば壮観ですよきっと。

じゃあ読み出す部分をメモリで置き換えればいいじゃん、となると思います。私もそう思いました。しかし、メモリ書き込み方式ならCPUと直接つなげてアドレス検索で事足りるところをこんなICを使って代用しているのですから、書き込み回路もまた特別なものになっています。

というのは、このような形式で表示内容を記録するといざ次の文字を前の文字の続きに書き込もうとするといつ書き込めばわからない、という問題が発生するのです。
 考えてみてください。ビデオメモリとなるシフトレジスタはCPUの動きと関係なく常に動き続けます。適当に書きこもうものならとんでもないところに書き込んでしまうわけです。
 そこでこの回路にはもう一つシフトレジスタがあります。それは「カーソル」の位置を記録しておくもの。1024ビットのうちのどこかにこのカーソル信号が存在し、その信号がONになった時だけ書き込むようにすればきちんと正しいところに書き込むことができる、というわけです。

というように、書き込み回路・読み込み回路ともにこのシフトレジスタをもとにした回路になっているので、もしこのシフトレジスタそのものを使わない、ということにすれば回路そのものを大幅に作り変える必要が出てくるのです。

そんなしょっぱなから問題だらけのこの企画。果たして無事に成功するのでしょうか・・・?

次回の記事:
ファミコンの完全自作ROM&カセットを作ろう!!その3 ~とりあえず動くromカセットができた~
前回の記事:

[68kMacintoshで]ThinkCでゲームを作りたい その2 Stdioライブラリを使ってみる[プログラミング]

 

コメント

このブログの人気の投稿

ファミコンの完全自作ROM&カセットを作ろう!!その1~立ちはだかるコンパイラの壁~

ファミコンの完全自作ROM&カセット作ろう!〜cc65で起動ROMをつくる〜

74HC595を使ってarduinoの16ビットパラレル出力に挑んでみた