プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

FOCS for PC-8001: リリースしました

FOCSとは、私が高校時代に作ったTiny FORTRANコンパイラです。以下からダウンロードできます。

GitHub - yasuho68k/focs_pc-8001: FOCS (FOrtran Compiler System) for PC-8001

こんなことを

つぶやいてから、既に3年(!)弱…

少し慣れてきたら、高校時代に作ったFORTRANコンパイラを復活させてみたい。

ついに夢が叶う日が来た! - プログラマyasuhoの隠れ家

「リスト打ち込みするだけに、どんだけかかってんだよ、おまえ」って感じです。いや、実際3年間ずっとやってたわけじゃなくて、キッカケは、こんなblogに出会ったからなのです。

PC-8001開発環境整備/ソフトウェア編 : プログラミング指南 - Code Knowledge

私が説明するまでもない、ハイドライドなどで有名な内藤時浩さんのblogです。PC-8001Z80などの話を読んで懐かしんでいるうちに「ちょっと昔を思い出してみようかな」と思ったのが、FOCS復活のキッカケでございました。

当時作ったコンパイラは、プログラムリストに残されていたので、これをmacで入力し直すことから始めました。

最初は

「当時はハンドアセンブルしてたから、機械語部分の打ち込みでいいかな」なんて気楽に考えていたのですが、進めるうちに、そんなに簡単な話ではないことが発覚。というのも:

プログラムリストに記載されていない部分がある

単純に抜けているわけじゃなくて「こんなのロジック見れば自明でしょ」みたいな感じで書いてない(特に処理関数テーブルアドレスとか)部分があり、ソースコードを解析する必要がある所が多かった。そんな40年以上前のコードなんて覚えてないよ(笑)

明らかに動かない部分がある

どう見ても動かない部分があった。たぶんバグは直したんだろうけど、リストに反映されてないんだな。ちゃんと書いとけよ!>40年前の自分

意味不明なROM内ルーチン

多くのROM内ルーチンを使っているんだけど、何をするのか分からないもの多数。まあ何となくは分かるんだけど。最終的にはPasocomMiniで実際にアドレスに飛ばして確認したりした。

---

とまあこんな感じで、機械語打ち込みは早々にあきらめ、ソースコード入力にスイッチ。アセンブラは内藤さんのblogで紹介されていたAILightさんのGitHub - AILight/AILZ80ASM: Z80アセンブラを選びました。windows前提のツールが多いなか、mac用バイナリも提供されていて、ローカルラベルも使えるなど使い勝手がいいことが選んだ理由です。AILightさん、ありがとうございます :)

順序が逆になりますが

FOCSを再現するにあたり目指したことは当時のプログラムをなるべくそのまま再現するということでした。

なにせ40年以上前のプログラム。書き写していくだけで、ここはこうしたらいいのにとか、まあいろいろ目についてしまうわけです。特にメモリや速度に制限があったわけでもないのに、やたらと技巧的なプログラムの多いこと。たぶん当時はこういうのがカッコイイって思ってたんだろうなあ。SP書き換えしてpopとかしてて、割り込まれたらアウトだな、これ。

正直書き直すことも考えたのですが、いいも悪いも当時のままを再現することに意味があるのではないかと思い、バグ以外はそのまま打ち込んでいます。SP書き換えもそのまま。

一番大変だったのは

デバッグでした。操作自体は難しくないのですが、アセンブルしてできたcmtファイルをmicroSDにコピーしてPasocomMini起動してデバッグして、システムをシャットダウンしてmicroSDカード抜いて、というサイクルは想像以上に面倒で、何度心が折れそうになったことか(笑) というか、Raspberry Pi側のmicroSDスロットが壊れないか心配になりました。

できればエミュレータが使えればよかったのですが、

PasocomMini PC-8001のソフトウェアは、出荷時のRaspberry Pi上でのみ動作するよう設計されています。
搭載されているソフトウェアやROMバイナリ(N-BASIC)等は、PasocomMini PC-8001上でのみ使用が許可されているとご理解下さい。
(吸い出して他のエミュレータ上での使用は不可)

必ずご確認ください │ パソコンミニ公式ウェブサイト

と、しっかり書いてあります。というわけで、時々ヤフオク見たりするのですが、なかなか難しそうですね。

まあ最初はN-BASIC ROMも搭載しない、という話だったかと思うので、最大限努力していただいた結果なのかな、と。せめてPCとRasPiがUSB接続できて、cmtファイルの送受信ができればいいのにな :)

ともあれ

長年の夢であったFORTRANコンパイラが実現できたのは、素直に嬉しかったです。株式会社ハル研究所様をはじめ、PC-8001の有用な情報やツールを提供していただいた方々に、この場を借りてお礼を申し上げたいと思います。

関連記事:

FOCS (前編) - プログラマyasuhoの隠れ家
FOCS (中編) - プログラマyasuhoの隠れ家
FOCS (後編) - プログラマyasuhoの隠れ家