Tech Racho エンジニアの「?」を「!」に。
  • ライフ

1980年に初めて書いたプログラム(インテル8080機械語)

こんにちは、hachi8833です。

2023年度のアドベントカレンダーを機会に、ITライフ記事にしかなりようのないレトロな考古学ネタを書きました。

初めて書いたプログラムが雑誌に掲載された

今年の9月頃、東京の青梅市にある「夢の図書館」で、マイコン雑誌「RAM」(1981年2月号)に掲載された自分のプログラムに再会しました。自分の手元にはとっくにありません。

参考: 夢の図書館 公式サイト 100 年分の技術雑誌を未来に伝える

自分がこのプログラムを書いたのはその前年の1980年だったはずで、128バイトにも満たないという超ちっぽけなインテル8080機械語(アセンブラ)のプログラムです。

参考: Intel 8080 - Wikipedia

初めて書いたプログラムをいきなり投稿してたのね自分。アセンブラのコメント文が覚えたての英語とカタカナ混じりなのが微笑ましいですね。
恥ずかしいので、あまりしげしげ見ないでくださいね🙏。

このとき同誌編集部からいただいた掲載料が5000円だったのを覚えています。今も大して変わらないことをやっているんだなという気持ちです。

同図書館を運営している吉崎武さんは月刊アスキーの初代編集長です。同氏のご厚意で掲載誌の写真を撮らせていただきました。ありがとうございます。過去記事との久方ぶりの再会に感激したことをお伝えすると「ああ、そういう方がよくお見えになりますよ」とのことでした。

参考: 吉崎武 - Wikipedia

プログラムを書くようになるまで

後はおまけのようなものなので、暇で暇でしょうがないときにでも気が向いたらお読みいただければ結構です。

最初は電気工作

小学校低学年のときにたまたま親が気まぐれで買ってくれた「子供の科学」がきっかけで電気工作とはんだ付けに夢中になったというお決まりのコースでした。なお、子供の科学は現在も発行されていて、YouTubeチャンネルもあります。

参考: 子供の科学 - Wikipedia

当時は東京圏内に住んでいたので、小3〜小4の頃には秋葉原に通ってはラジオやインターフォンなどのキットを買って作るようになりました。作業に夢中になりすぎて、手探りではんだごてを手に取ろうとして逆さに握ってしまい、思いっきりやけどしたのも懐かしい思い出です。

いろいろ作るうちに、回路の部品は安いのに、スイッチとケースで金がかかることを思い知りました。

そういえば、子供の科学の広告ページでアマチュア無線の通信教育を見かけて、やってみたくてたまらなくなり、親に無断で申し込んだこともありました。テキスト一式が届いたものの「まだ早いから」という表向きの理由で泣く泣く返品させられました。返すまでの間、まだわかりもしないのに未練がましくテキストを読んでました。今思っても、小学生が大人の助力なしに電気数学を学ぶのは無理筋でしたね。

きっかけはやはりゲーム

小学4年生のときに親の仕事の都合で地方に転校したのですが、ちょうどその頃から例の「マイコンブーム」というものが巻き起こりました。当時はインベーダーゲームが大ブーム真っ只中です。

家庭用テレビゲームというものも登場し始めていて、そういえば我が家にもエポック社のシステム10というゲーム機がありました(最後は分解して遊びました)。このタイプの家庭用ゲームはアナログ回路で作られていたので、カセットを差し替えて別のゲームを遊べる、という機能はありませんでした。

参考: システム10 (ゲーム機) - Wikipedia

ご注意いただきたいのですが、この頃ファミコンはまだ影も形もありません。当時の任天堂は花札とおもちゃのメーカーでした。

とにかく、当時の自分がマイコンに夢中になったのは、マイコンがあればいろんなテレビゲームを遊べるようになるのではないか、作れるのではないか、というのが大きなモチベになっていたはずです。いつの世もゲームはモチベですね。

立ち読みに明け暮れる

書店の店頭にマイコン雑誌が次々に並ぶようになったので、書店に通い詰めては朝から晩まで立ち読みするようになりました。BASICが急速に流行り始めた頃ですが、LISPもPascalも雑誌で知りました。C言語はまだ当時のマイコン雑誌では見かけなかったと思います。BASICや素のLISPはともかく、PascalやC言語は当時のマイコンのスペックでは到底動きそうにありませんが。

参考: LISP - Wikipedia
参考: Pascal - Wikipedia

小遣いをどのマイコン入門書に使うべきかを立ち読みでさんざん吟味してから、意を決して「マイコン入門講座」という本を買いました(他にもいくつかその手の入門書も買いました)。

マイコン入門講座―ソフトとハードを完全マスターできる 問題形式 (1980年) | 小黒 正樹 |本 | 通販 | Amazon

同書ではNECのTK-80というワンボードマイコンを取り上げていたので、必然的にTK-80と、それに搭載されていたインテル8080系CPUを学ぶ流れになりました。8080は、現在のインテル系CPUの直系の祖先にあたります(ただし自分のTK-80に搭載されていたのはインテル製ではなく、NECの互換CPUだったはずです)。

参考: TK-80 - Wikipedia
参考: Intel 8080 - Wikipedia

当時も「インテル8080系とモトローラ6800系のどっちがいいか」みたいな男子っぽいトピックが雑誌や本で花盛りでしたが、最初に読んだ本の影響もあって、当時の自分は雰囲気で8080系推しでした。

そういえば、当時の某入門書に「モトローラ6800の命令体系はDECのPDP-11を参考にしているので美しく、命令の対称性が高いが、インテル8080は電卓をなりゆきで拡張したので命令体系が汚い」と書かれていたのですが、何しろ小学生でしたので、命令セットの対称性が高いとか低いとかの意味はさすがにわかりませんでした。

参考: MC6800 - Wikipedia

質問できる相手がいない

しかしその当時住んでいた環境では、自分の身の回りには電気工作はもちろん、コンピュータに関係する大人がどこにもいなかったので、誰にも質問も相談もできず、ひたすら雑誌の立ち読みと入門書の読み込みで突破するしかありませんでした。

当時父親が見かねて、職場の技術職の人に引き合わせてくれたこともあったのですが、アナログ回路の専門家だったので自分の求めていた答えは得られませんでした。

パソコンすら学校にない時代につき、学校の先生に聞いてもどうにかなると思えなかったので先生にも質問しなかったのですが、今思えば「どこそこに行って聞くといいかもよ」と教えてもらえたかもしれませんね。

コンピュータのスペック的なトピックは、カタログを覚えるようなものなので自分にとっては問題なかったのですが、当時最大の問題は、肝心の「プログラミングとは何なのか?」「プログラムは具体的にどうやって書くのか?」「書いたプログラムをどうやって動かすのか?」という具体的な部分が、どの本を読んでも皆目わからなかったことです。

当時立ち読みしていた雑誌はいずれも当時創刊間もない「アスキー」や「I/O」「RAM」「マイコン」というありがちなラインナップでしたが、同じく書店に並んでいた「bit」や「インターフェース」といった学術系の雑誌には気が付いてはいたものの、ほとんど手に取らずじまいでした。何しろ小学生なので、コンピュータサイエンスという分野が存在することも、その価値もまるでわかっていなかったのでした。

随分後になって、当時の自分に「図書館で調べる」という発想がまったくなかったことに気づきました。自分にとって本は書店で買うもので、図書館で探すことに思い至らなかったのでした。もったいないことをしたものです。

田舎住まいで、もちろんネットもなければ質問も相談をする大人も身近にいなかったので、仕方なく「マイコン入門講座」のうち、プログラミングに関係しそうな8080機械語(とアセンブラ)の解説部分を何度も繰り返し読んで、3か月ほどずっと考え込んでいました。

そしてある日、本当に突然、プログラムを動かすために何をしたらいいかを理解できました。あのときの、雷にでも打たれたかのような感覚を今でも鮮明に覚えています。

今思えば、自分が買った入門書も含め、たいていの書籍はそういう環境が手元にあって触れることが前提になっていたので、そういう細かな部分までは手取り足取り書かれていなかったのでした。そもそも小学生は想定読者層に入っていなかったでしょうし。

あのとき知りたかったことは、以下の10分足らずの動画に全部あります↓。こうやってカントリー調のBGMまで付いて学べる時代が来るとは思いもよりませんよね普通。

あの当時、近所に工科大学とか高専とかがあって、そのことを知っていれば、確実に四六時中入り浸って教えを請いまくっていたことでしょう。
ずっと後になって「ベイマックス」という映画を映画館で見たときに、そういう環境が身近にあることのありがたさが思い出されました。

マイコンを買うまで

どうやらプログラムというものが書けそうだという見通しが立つと、がぜん本物のコンピュータが欲しくなりました。

当時最も高嶺の花だったのは、今でもおなじみApple Computerが最初に販売した名機Apple IIでした。当時のコンピュータとしては唯一カラーを画面に表示できて、しかも拡張スロットが多数あるのでいくらでも改造しがいがありました。

秋葉原が遠くなってしまったので、この頃は市内にあったアマチュア無線機器を扱っている店に通い詰めていました。店頭には、Apple IIをはじめとするコンピュータも並び始めていて、自分も本音では、BASICが最初から使えて、当時唯一テレビに接続できてカラー表示(たった8色ですが)もでき、拡張スロットもたくさんあるApple IIが欲しくてたまりませんでした。

参考: Apple II - Wikipedia

しかし1ドル360円の時代はさすがに終わっていたものの、1ドル240円台の円安時代だったので、当時の記憶では、「Apple II本体」「外付けフロッピーディスク2台」「専用ドットインパクトプリンタ」を揃えると軽く80万を超えてしまい、とても親に買ってくれとは言い出せませんでした。

ずっと前の職場で知り合った同年代の米国人プログラマー兼CTOは、小学校のときにあっさりApple IIを買ってもらい、高校生のときには親の職場である銀行でシステムづくりのバイトをしていたという話を聞いて、米国との格差と為替の差を痛感しました。

ちょうどこの頃、当時自分が愛読していた「電卓で遊ぶ本」の著者である岸田孝一氏が「マイコンゲーム21」という、TK-80の8桁LEDだけで遊べるゲームとそのソースコード(機械語)を掲載した本を出していました。自分にとって絶妙のタイミングでした。

参考: 電卓で遊ぶ本 (1977年) |本 | 通販 | Amazon
参考: マイコンゲーム21 : マイコン・キットと遊ぶ本 (産報出版): 1978|書誌詳細|国立国会図書館サーチ
参考: 岸田孝一 - Wikipedia

岸田孝一氏は日本で草創期のプログラマーのひとりでパズル作者かつ詩人でもあり、今思えば、自分が最初に知ったハッカーっぽい人でした。

早速同書を買っては読み返しているうちに、テレビ表示とカラー表示はしばらく諦めてもいいから、せめて8桁LEDでプログラムを書いて動かしてみたいという気持ちが日に日につのってきました。

いよいよマイコンを買う

そしてたしか中学生になった頃、親を拝み倒してNEC TK-80を買ってもらいました。
当時は東芝や日立などもこぞって完成品のワンボードマイコンを出していたのですが、自分ははんだ付けがしたくてたまらなかったのと、他社よりも少し安かったこともあって、組み立てキットになっているTK-80一択でした。

しかし喜び勇んでTK-80を組み立てたものの、電源(5V、12V、-5V)を投入してもピクリとも反応せず...やっちまったか?😅

何しろ田舎住まいの素人中学生なので、ハンダゴテの先を精密機器用のアタッチメントに取り替えるのがせいいっぱい。小遣いは本や雑誌に注ぎ込んでいたので、オシロスコープどころかテスターも持っていないという有様。

とうとう購入した無線屋さんに泣きついて調べてもらうと「ICが1個逆にささってましたね」という出オチでした🫠。

プログラムを書いてみた

修理してもらってやっと動くようになったTK-80で、まずは「マイコンゲーム21」に掲載されているゲームを入力しては動かして遊び、そのうちに要領が少しずつ見えてきたので、自分でもゲームっぽいものを作り始めました。

このとき、どんなふうに8080機械語でプログラムを書いたのか、あまり思い出せません。フローチャートは書いたのか、8080アセンブラをノートに書いてからハンドアセンブルして機械語にしたのか、それともいきなり機械語をノートに書いたのか。

ともあれ数か月もすると、どうやらそれっぽいものが動くようにはなりました。8080機械語でメモリが128バイトという環境につき、今思えばオブジェクト指向もGOTOレスも構造化プログラミングもあったもんじゃない、めちゃくちゃな作りでした。内容からして、そもそも果たしてゲームと呼べる代物だったのかというレベルです。

久しぶりにインテル8080のインストラクションセットを見返してみると、こんなに小規模だったのかという気持ちになります。この表はグループ化と色分けがしてあるので見やすいですね。自分のときは縦に味気なく並べられていたように思います。

参考: Intel 8080 OPCODES

ところで、当時の8080にはI/O専用命令というものがわざわざ別に用意されていました。今ならメモリマップドI/Oにするのが普通なんでしょうけど。

なお、少し前にはZ80が華々しく登場していて(驚いたことに今も使われているそうなのですが)、8080よりレジスタ数が倍になって命令も強力になったのを見てZ80がうらやましくなり、Z80の命令セットをノートに書き写して気持ちを慰めたりしていました。どうかしていましたね自分。

参考: Z80 - Wikipedia
参考: Z80 / R800 instruction set

8080だとレジスタ間のMOV命令(実際は移動ではなくコピーなのですが)とイミディエイトのMVI命令が別のインストラクション名だったりしましたが、Z80ではすべてLD(load)で表すようになっていたのを覚えています。Z80のインストラクション名には最初違和感を覚えたものの、8080よりもずっとシンメトリックで、今思えばちょっとだけRISCっぽい考え方でしたね。

最近になってTailwind CSSを知ったとき、ユーティリティクラスの命名がとてもシンメトリックになっているのに気づいて、RISC CPUのインストラクションセットを連想してしまいました。

参考: Installation - Tailwind CSS

雑誌からオファー

前述の「RAM」誌に「TK-80で動くプログラムをやっと作りました」というハガキを出して、読者欄に掲載されました。これだけなら当時の普通の中学生です。

それからしばらくして忘れた頃に、同誌編集部から「ではそのプログラムをうちで掲載しませんか?」というオファーの封筒が届きました。封筒にはマス目の小さな緑色の罫線の原稿用紙も同封されていました。

たぶん小躍りしたと思います、当時の自分。

原稿の方は特に悩むこともなく、すぐさま書き上げました。

ところで今になって掲載誌を見直してみると、当時も今も自分の文体が大して変わっていないことを実感しました。当時から完成されていたというべきか成長がないと言うべきか。

ソースコードをどうするか問題

しかしソースコードをどういう形式で掲載してもらうかで考え込みました。何しろ自分の書いたアセンブラと機械語が並んだソースコードらしきものは、ノートに手書きしたものしかありません。

当時から自分の字が汚いことには自覚があったので、めいいっぱい頑張って手書きで清書したところで、印刷屋さんが活字や写植を間違えやしないかと妙なことを心配する始末。

なお、TK-80にはデータを保存するしくみが一切なく、電源を切ればプログラムは消えてしまいます。当時の雑誌には、カセットテープにデータを保存する回路を自作する方法がよく掲載されていたのですが、自分も頑張って部品を集めて作ってみたものの、ついにカセットインターフェースはTK-80で動かずじまいでした 🫠。

ありがたいことに、当時秋葉原などにあったNECのアンテナショップ「BIT INN」が、ちょうど自分が住んでいた地方にも開店したばかりだったので、こちらにも通い詰めていました。

参考: NEC、ラジ館BIT-INN LOUNGEを閉鎖、BIT-INN Aiへ統合

土日ともなると朝から晩まで入り浸り、暗くなって家に帰るとき、信号の明かりがひどく滲んでいて、おかしいなと思っているうちに、一気に近眼になっていることが判明し、以来メガネなしでは生きていけない身体となりました。

そして、BIT INNの店員さんに原稿を書くことになった話とソースコードをどうしたらいいかを相談すると、「じゃ、店頭にあるこのPC-8001で8080アセンブラを動かせるようにしてあげるから、そこに入力してドットプリンタから出力するといいよ」とありがたいオファーをいただきました。中学生の小僧によくしてくださって感激の至りです。今でも感謝しています。

なお、NECのPC-8001(PC-8801ではありませんのでご注意)は当時発売されたばかりの、いわゆるPC-8000シリーズの最初の機種でした。今思えば、自分がファンクションキーというものを最初に見たのがこの機種でした。ついでにフロッピーディスクが実際にデータを読み書きするところを初めて見たのもこのときで、自作のカセットインターフェイスすら動かなかった自分は、思わず「ずるい!」とつぶやいてしまいました。

PC-8000シリーズ - Wikipedia

店頭のPC-8001に手書きのアセンブラをえっちらおっちら入力しながら、「アセンブラの最初にあるORGって機械語に対応していないんですけど、どういう意味ですか?」「EQUってイコールのことですか?」などと店員さんに質問しまくっていました。お世話おかけしました 🙏。


そういうわけで、冒頭2枚目の写真で赤枠で囲ったソースコードは、そのPC-8001とドットプリンタで出力したものがめでたく写真製版されたものです。

振り返ってみると、今なら数日もあれば学べるようなことを数年がかりですったもんだしてましたね。自分は元々理解が遅いので、今の時代に育っても学ぶのに時間かかるかもしれませんが。

以上、昔むかしのお話でした。どっとはらい。

関連記事

PC98をLANに接続してみた



CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。