りあく徒の備忘録

誘導抵抗とか保守反動とか

マイクロ・コンピュータの世界

この記事は TCU-CTRL場外乱闘 Advent Calendar 2021 - Adventar 11日目の記事です 。

前回の記事はこちら。

sharin888.hatenablog.com

 

マイコン」と聞いて何を思い浮かべるでしょうか?
PICやAVRといったマイコンチップでしょうか。

f:id:multireact:20211211103229p:plain

PIC16F1827

f:id:multireact:20211211103139p:plain

ATTiny202

それとも、ArduinoやRaspberryPiのようなマイコンボードでしょうか。

f:id:multireact:20211211104036p:plain

びんぼうでいいの


上のような意味でマイコンと言ったとき、それはどちらかといえば「マイクロ・コントローラ」の略称です。サイズ・機能・消費電力などがパソコンに対してマイクロで、機器の制御に向いています。

 

私がこの記事で語るマイコンは「マイクロ・コンピュータ」です。CPUにマイクロプロセッサを使用していて、そうでないコンピュータよりマイクロなコンピュータを指します。

f:id:multireact:20211211104440p:plain

ザイログ Z80 マイクロプロセッサ

今の時代、マイクロでないプロセッサの方がレアです。PICもCore iもマイクロプロセッサですし、富岳のようなスパコンも大量のマイクロプロセッサを(効率よく)纏め上げて出来ています。つまり、だいたいのコンピュータは「マイクロ・コンピュータ」に該当する可能性があります。
ただし、個人が独占的に使用するコンピュータをパソコンとする呼び方がたいへん普及した現代では、(コントローラでなしに)マイコンというともう少し特別な意味合いを帯びてきます。

 

8bitマイクロプロセッサを搭載した、70年代~80年代スタイルのコンピュータです。

マイコンの構成


マイコンの世界に入るためにここでひとつ、最強のマイコンを妄想で作ってみましょう。
欠かせない部品はマイクロプロセッサです。

f:id:multireact:20211211104725p:plain

intel 8080 1974年

f:id:multireact:20211211104908p:plain

マイクロプロセッサの図

実のところ、これだけでほぼコンピュータとしての機能が完成しています。ただ残念ながら人類は長い進化の過程で5Vの信号を読んだり出力したりする機能を退化させてしまったため、LEDとスイッチを付けてみましょう。
今は細かいことを考えないことにしますが、あえて言えば、8bitのプロセッサだから、LEDとスイッチが8つづつあればよいです。

f:id:multireact:20211211110226p:plain

マイクロプロセッサとLEDとスイッチの図


これでもう、スイッチを通して機械語で話しかけてやれば、加算減算排他的論理和などの演算を華麗にこなし、LEDに結果を表示することができます。
…本当です。やってるひとがいます。

6502あそび[1] メモリごっこ | ポン酢の備忘録
これは私ではないですが、リアルタイムでの機械語コミュニケーションは面白いという一言では言い表せないほどの体験でしょうね。
あ、本当にやるときはショートとかに気を付けてくださいね。


しかしまあ、最強のマイコンというにはまだ何か少し足りない気もします。

f:id:multireact:20211211110651p:plain

RAM実装


RAMを付けました。揮発性メモリです。
プロセッサからはデータとは別に、アドレス信号がまろび出ています。これを繋ぐことでメモリはなんと、人間の代わりに機械語命令とデータをプロセッサに渡してくれます。逆に、結果をRAMに格納することもできます。自動で演算するとか最強ですね。


ならもうスイッチは要らないじゃないかと思うかもしれませんが、起動時点ではRAMの中身はめちゃくちゃです。電源を入れてもまだプロセッサには止まってもらっておいて、その間にスイッチでRAMに機械語とデータのリスト…いわゆるプログラムを書き込んでおく必要があります。プロセッサを走らせて演算結果をRAMに格納したら、また止まってもらって、RAMの中身をLEDで除くことができます。

なんて立派なコンピュータ・システムに成長したのでしょう。


ただし、人間はあくまでも貪欲で、まだ満足しません。起動するたびにプログラムを打ち込むのがつらいだの、電源を入れっぱなしにしておくのはSDGs的ではないなどと不満を次々と発明します。

f:id:multireact:20211211111027p:plain

UART実装の図

 

機能過多になる恐れを抱きつつ、UARTを繋げました。

f:id:multireact:20211211111146p:plain

8250 UART

 

UARTを知らない人がいるかもしれませんが、風体はプロセッサやメモリと変わりません。接続方法も特に変わらないので、工作はまだ簡単です。


UARTがあると、テレ・タイプライタやターミナルに接続することができます。

f:id:multireact:20211211111708p:plain

テレタイプ

f:id:multireact:20211211111808p:plain

VT-100 ターミナル

f:id:multireact:20211211112419p:plain

ターミナルに繋がった図

 

これらの機器は、キーボードで打った文字をASCIIコードでコンピュータに読み込ませたり、反対にコンピュータからASCIIコードで受け取った文字を印刷あるいは表示することができます。


画面にコンピュータが文字を表示し、ユーザはそれに応じてキーボードで入力する。応じてコンピュータが次の文字を返す。いわゆるCLI環境が出来上がりました。

f:id:multireact:20211211113022p:plain

Star Trek

 

CLIでどんなことがしたいですか?


ワープロ数値計算?ゲーム?


いいですね。キーボードと文字表示があればなんでもできます。
「ゲームなんて、プログラムをスイッチで打ち込むのがあまりに大変じゃないか」と思われるかもしれませんが、すでにUARTを実装したことを思い出してください。「ターミナルから送られてくる情報をひたすらRAMに書き込む」という簡単なプログラムをスイッチで書き込んでやれば、あとは使い慣れたキーボードから好きなだけプログラムを入力できます。

この小さなプログラムをブートローダと言ったりします。


さらに、テレタイプライタやターミナルには、紙テープの読み書き装置がついていることがあります。

f:id:multireact:20211211114254p:plain

パンチャ

 

f:id:multireact:20211211121135p:plain

紙テープ読み書き装置追加の図

 

テープに穴をあけて一度プログラムを書き込んでおけば、これを読み込ませるだけでタイピングの手間まで省いてプログラムをロードできます。


ところで、CLIでできる素敵なアプリケーションの代表としてゲームを挙げましたが、もっと素敵なものがあるかもしれないことに気が付きましたか?

f:id:multireact:20211211122034p:plain

BASIC(MITS Altair 680版)

 

そう、高級言語インタプリタというのはどうでしょうか。機械語から解放されて、英語に近い言葉でプログラムを書いて実行することができます。本を開くなどすれば、機械語よりも多くのソフトウェア資産(特にゲーム!)が無尽蔵に見つかります。これこそがマイコンの華、BASICです。

f:id:multireact:20211211122620p:plain

BASIC環境の図

 

起動してブートローダを打ち込み、BASICインタプリタをテープからロードする。BASICが起動したら、今月の最新刊に載っている面白そうなゲームをそのまま打ち込んでみる。用心のために、ターミナルの表示先をパンチマシンに切り替えて、打ち込んだプログラム・リストをLISTコマンドで出力させ、テープに保存しておき、遊ぶ。

 

 

発想はいいけどゲームバランスがおかしいんじゃないか?

もっといえば、ひとつ機能を追加するだけで劇的に面白くなるぞ。

 

でも今日はもう遅いから電源を切って寝る。あした同じプログラムをテープから読み込んでから、思いついた機能を追加してみよう…。

 

最強のマイコンは、こんなビジョンとともにあなたの脳内に完成しました。

 

あとはもう、蛇足です。なぜか隠し通してしまいましたが、ROMにブートローダを焼いて取り付ければスイッチを全く取っ払ってしまうこともできます。BASICでゲームをするなら、グラフィックもあった方がいいですね。じゃあCRTコントローラを付けましょう。

f:id:multireact:20211211152833p:plain

CRTコントローラとTV画面の図

これでテレビにグラフィックが表示できるようになりました。

f:id:multireact:20211211123955p:plain

スーパーファントム(日立ベーシックマスターレベル3)

 

シューティングゲームが遊べます。
音を出したり、キーボードでなくコントローラを繋いでみたり。パンチカードとほぼ同じ理屈で、カセットテープやフロッピーディスクを副記憶にすることも可能です。

f:id:multireact:20211211124234p:plain

カセットテープ

f:id:multireact:20211211124843p:plain

フロッピーディスク

歴史的なマシン


ここまでは妄想でした。実際に存在したマイコンを見てみましょう。

Altair 8800 [MITS社 1974年]

f:id:multireact:20211211125051p:plain

Altair 8800

アルテアと読むことが多いですが、アルタイルと読む場合もあります。
この、電源とスイッチとLEDの付いたデカい箱のキットの使い方はというと、先ほどの妄想をほぼそのままなぞることになります。
つまり、キットを買ってきて組み上げただけの最小構成では、マイクロプロセッサ(Intelの8080)を止めてスイッチを操作し、256B(バイト。1Byteは8bitなので、256*8=2064bit。)のRAMにプログラムを打ち込んでから走らせ、適宜LEDで状態を監視します。

f:id:multireact:20211211131252p:plain

Altairの中身

 

特筆すべきは、その貧弱な最小構成に対して強力な拡張性を秘めていたことです。マイクロプロセッサのピン数よりめっぽう多い100本のピンを持つ拡張スロットが大量に用意されていて、追加のメモリボードやUARTボード、プリンタやフロッピーディスク
へのインタフェースボードを差し込んで機能を拡張していくことができました。本体を作ったMITS社だけでなく、他の会社も拡張ボード市場に参入し始め、後にIEEE696として標準化までされる100ピンのバスはたいそう賑わったそうです。

f:id:multireact:20211211131529p:plain

クロメムコ Dazzler(TVビデオカード

 

ボードだけでなく、バスの規格が同じでボードを流用できる互換機も現れました。

f:id:multireact:20211211131653p:plain

IMSAI 8080 (IMSアソシエイツ社 1975年)

 

コンピュータの互換機市場が発達するというとIBM PC/ATが思い浮かびますが、IBMと同じく、MITS社もこのことを意図していたわけではなく、厳しい競争に曝されて脱落することになります。
ソフトウェアでは、BASICが供給されました。このアルタイルBASICは、マイクロソフトの製品第一号として有名です。

Apple][ [Apple社 1977年]

f:id:multireact:20211211132029p:plain

Apple ][

 

アップルツーのツーはローマ数字の2、Ⅱですが、本体の印字が四角い括弧を逆に並べた][のようにみえるのでそう表記することがあります。


1977年は、コモドールPET2001、タンディラジオシャックTRS-80、Apple][の三機が発売され、初期のマイコン御三家と呼ばれます。

 

f:id:multireact:20211211133828p:plain

PET 2001(コモドール社 1977年)

f:id:multireact:20211211135639p:plain

TRS-80 Model 1(タンディ社 1977年)

 

外観から共通して言えるのは、キーボード入力・ビデオ出力が標準で可能になっていることです。TRS-80の画面は別売りの外付けですがセット販売が基本だったようです。

御三家からはもうマイコンではなくパソコンだとみる向きもあります。

f:id:multireact:20211211135930p:plain

Apple][の中身

 

入出力の備わった外観だけでなく、回路やプログラムも個人用コンピュータとして使いやすいように非常によく作られてはいますが、中身をよく見ればアルタイルと何から何まで別物というわけではありません。

f:id:multireact:20211211140028p:plain

MOS 6502

 

マイクロプロセッサにはモステクノロジー社の6502が採用されており、後述しますが私がApple][に注目している(推しと言ってもいい)理由はこれにあります。

f:id:multireact:20211211142146p:plain

ArticFox

 

色数の少ない高解像度モードでは、280*192ドットのグラフィックが表示できて、3D表現のあるゲームも動きます。

f:id:multireact:20211211143248p:plain

VisiCalc

f:id:multireact:20211211144223p:plain

10K BASIC

 

ソフトウェアでは、表計算ソフトのVisiCalcが事務用途で使えるということでキラーソフトになったようです。また、整数を扱える6KB版のBASICをスティーブ・ウォズニアックが作って標準装備していますが、そもそもハードウェアの設計もほぼすべて彼によるものです。

 

ちなみに、Apple][プラスに搭載された、浮動小数点計算のできる10KB版のBASICはマイクロソフトが供給しました。

f:id:multireact:20211211144517p:plain

アセンブラ表示

 

個人的には、標準で逆アセンブラが搭載されていることが衝撃的で、一番の魅力だとも思っています。今のAppleでは考えられないことです。


なんて、ごめんなさい。そもそもApple][以外のApple製品を全然知らないので現在がどうなのか何もわかりません。

 

さらなるマイコンワールドへ:書籍編


ひいひい、疲れました。
頑張って分かったように蘊蓄を述べてみましたが、上は全部これから紹介する本の受け売りです。いちいち「本にこう書かれてました」なんて付言していたらテンポが悪くなりますからね。私はレトロPCの類を一切持っていませんし触ったこともありません。


ひい、楽し…いや疲れました。


現代の本


過去のマシンを振り返る内容で比較的最近に書かれた本は、導入には最適です。もし興味を持ってマイコンについてさらに知りたいと思った方がいれば、これらの本から読み漁ることを強くお勧めします。


古典電脳物語

www.rutles.net

鈴木哲也という人の書いた古のマイコンについての本は全て、あるマイクロプロセッサを取り上げて、それにまつわる歴史をかなり深ーく掘り下げてから、そのマイクロプロセッサを実際に入手してマイコンを作る過程を紹介してくれます。
歴史背景もハードもソフトもわかる、そういう本です。


他の本よりは古くに出版されたこの本は、内容が盛りだくさんです。8085とZ80マイコンを組んでいますが、後の本では省略されているような周辺回路の一般的な知識ノウハウも詳しく書かれていて、さらにはスタイリッシュなケースに収める工作までしています。2006年の本なので普通に書店で買うことはできないかもしれませんが、図書館にはあるかもしれません。始めの一冊におすすめします。


モトローラ6800伝説

www.rutles.net

鈴木氏が書いた、その名の通り6800についての本です。2017年と最近の本で、鈴木氏はシングルボードコンピュータ(SBC)というスタイルを固めています。6800につきものなMIKBUGというモニタプログラムや、VTL-02というBASICを圧縮したようなコンパクト(768バイト!)なインタプリタの存在はこの本で知りました。


ザイログZ80伝説

www.rutles.net同じく、今度は国産のマイコン/パソコンには採用例の多いZ80についての本です。それぞれ特定のプロセッサに着目しているとはいえマイクロプロセッサについて語れる歴史が三冊分もあるのかというと、たしかに記述が被ってはいるのですが、情報の更新があるらしく飽きるようなことはありません。


8080についての本もあるようですがまだ読んでいません。

6502とAppleⅡシステムROMの秘密

www.rutles.net鈴木氏の本ではありませんが、同じ出版社の本なので装丁の雰囲気などは似ています。6502とAppleⅡをひたすら詳しく語る本で制作記事はありませんが、これを読めば6502とAppleⅡの魅力に目覚めることは間違いなしです。6502のプログラムを書く時のハンドブックとしても大変優れていて、データシートよりもこっちをめくっていますが、ひとつだけ。

CMP命令の説明がたぶん間違ってるので気を付けてください。

 

当時の本

f:id:multireact:20211211145353p:plain

70年代80年代の、8bitマイクロプロセッサが登場して現役だったころの解説書も読んでみると面白いです。当時の意欲ある学生向けに書かれており、内容の充実度と平易さが共存しています。

日本語で書かれている資料だと当然、日本でよく使われたインテルザイログのプロセッサを題材にしていることが多いですが、つい先日、6502について詳しく書かれた本を発見いたしました。

f:id:multireact:20211211145512p:plain

f:id:multireact:20211211145613p:plain

6502チップの開発元が開発した簡素な6502マイコンボードKIM-1について、回路図付きで詳しく説明しています。6502や、ましてKIM-1についてこんなに詳しく書ける日本人は多分いなかったのでこんな本もないと思っていましたが、海外で出版されたものの邦訳があるとは盲点でした。

さてこれらの本を今現在手に入れることは非常に困難ですが、多少の歴史がある工業系の大学の図書館であれば山のように眠っている場合があるようです。というか、そういうところでなければもうマニアの家とか国会図書館にしかないような気もします。

インターネット編

なによりもまずは本をすすめますが、インターネットもまた情報の宝庫であることは間違いありません。前述の鈴木氏のようなホビイスト、マニアが書いているブログなどのWebサイトがいくつもあります。一種のコミュニティーにもなっているようです。

電脳伝説 | 1970年代のCPUを語る

まごころせいじつ堂

TTLでCPUを作る組立てキット・トランジスタでCPUを作る組立てキット・TK−80互換マイコン組立キット・Z80マイコンボード・BASIC制御マイコンボード

FrontPage - neko Java Home Page

KUNINET BLOG

また、Youtubeには実機が稼働している様子や分解・修理する過程などの貴重な動画が沢山上がっています。

www.youtube.com

www.youtube.com

www.youtube.comエミュレータで遊ぶのも面白いです。ほかにも沢山あるでしょうが、Apple][のものを紹介します。

www.scullinsteel.com

f:id:multireact:20211211150745p:plain

Karateka

 

ブラウザ上で動くエミュレータです。ブラウザ上ではありますが動作速度は遅くなるどころか、制限を掛けないと実機よりずっと速く動いてしまいます。
マイクロプロセッサのエミュレータもあります。

www.visual6502.orgこの6502エミュレータは極めつけのもので、リバースエンジニアリングによってトランジスタレベルで動作がエミュレートされ、各状態で内部のどの信号線がオンになっているかを見ながらプログラムを実行できます。狂気です。

自作編


古い既製品を手に入れることは難しくても、パーツをかき集めて自分で組み立てれば実際にマイコンを使うことができます。むしろ、マイコンの世界のメイン・コンテンツでしょう。

f:id:multireact:20211211151115p:plain

SBC6800

 

前述の鈴木氏の本で組み立てられたマイコンは、回路図やガーバーデータ、ソフトウェアが公開されています。それをそのまま深圳の工場に発注したり頑張ってユニバーサル基板に配線してもいいですし、基板だけの販売もいくつかの電子部品ショップで行われているのでそれを利用するのも手です。他にも、インターネットを探せばオープンハードウェアとして公開されているマイコンボードはいくらでもあります。


ところで、マイコンを作るとなったら、どのマイクロプロセッサを選ぶかが一番重要な悩みどころになるかもしれません。これはもちろん好みの問題ですが、敢えて6502をおすすめしておきます。


6502

Apple][やファミコン等、十分な実績やソフトウェア資産がある
・シンプルなアーキテクチャで、プログラミングしやすい
狂信者愛好家が多く、コミュニティがしっかりしている
・静的設計のCMOS版がある
・手に入りやすい
これらの理由から6502がおすすめです。一番重要なのは手に入りやすいというところかもしれません。オリジナルの権利を引き継いでいるウェスタンデザインセンター(WDC)という会社が、6502を売り続けるマンとして頑張っているらしく、秋月電子で750円で買えます。


コミュニティーやソフトウェア資産があることも重要です。とりあえず6502.orgを訪れてみてください。6502に関するハード・ソフトの情報やアイデアがひしめいています。

ところで、今手に入る6502はWDCが開発したCMOS版で、オリジナルより高速で低消費電力、いくつかのバグが解消して命令も追加され、そして静的な設計になっています。

f:id:multireact:20211211151603p:plain

W65C02(CMOS版6502)

 

静的というのはクロックがじっと動かないでいてもデータが失われないということで、これによってボタンでシステムクロックを入力してステップずつ動作を確認するという究極の完全理解メソッドが簡単に実現できます。

www.youtube.comBenEaterという人が、Youtubeでこの方法を使って6502の動作を解説しつつ、液晶画面にHello,Worldを表示するところまでを実践する動画を公開しており、これを一通りなぞってから独自の拡張をするのがゼロからのスタートではもっとも良いやり方かもしれません。


6502あそび[2] Ben式の拡張とFxT-65 | ポン酢の備忘録
そういうやりかたで6502マシンを開発している日本人を一人だけ見つけました。参考になるかもしれません。

最後に


妄想と受け売りと押し付けの長い文章にお付き合いいただき本当にありがとうございました。ぜひあなたなりのマイコンの楽しみ方を見つけてください。