0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10年前に作ったZ80変換を、いまさらながら蘇らせる

0
Last updated at Posted at 2026-08-12

10年も前に作ったZ80変換を、いまさらながら蘇らせています。

当時のきっかけ

当時のきっかけは、自宅にあるZ80マシンでした。

黄ばんだ本体の漂白にも失敗してしまい、

フロッピーディスクはライトするとアロケーションエラーだらけ。

そろそろ、このマシンもいつかは処分することになるのかな。

そんなことを考えながら、

「せっかくなら、もう一度マシン語で動かしてみたい」

と思ったのが始まりでした。

できれば、マシン語でシンプルなゲームも作ってみたい。

そこで、Z80用の簡単な変換ツールを作り始めました。


当時の自分には、VBAもよく分からなかった

当時のスキルでいえば、Excelでチャートを描くのが精いっぱいでした。

慎重に作業をすれば、マクロの記録でもなんとかなる。

そんな感じです(笑)。

ところが、やりたいことがだんだんマクロの記録では収まらなくなってきた。

結局、

ここは無理だ。VBAに移ろう。

となりました。

VBAが海のものとも山のものとも分からない状態で作った結果、

1モジュールに全部押し込み、Privateだらけの約6000行。

今見るとなかなかのものです(笑)。


そして、ここで挫折した

作りたかったのは、ExcelのワークシートにZ80のコードを書いて、それを変換するツールでした。

例えば、

label   EQU   16

DB      label , label / 2

のようなコードを書く。

ラベルは自由に使いたい。

16進数はMicrosoft風の &H 表記にしたい。

コメントも自由に書きたい。

色も自由に使いたい。

そんな仕様でした。

ところが、DBの処理あたりで問題が発生しました。

例えば上のコードなら、

label       → 16
label / 2   → 8

なので、最終的には1バイトずつ、

10 08

のようになってほしい。

ところが当時は、

108

となってしまいました。

一見すると、

「8の前に0を付ければいいじゃないか」

と思うのですが、実際にはその前段階に問題がありました。

label が、

  • 文字列なのか
  • ラベルなのか
  • ラベルを含んだ計算式なのか

その判定が甘かった。

そのため、値として正しく処理されないまま、後段へ流れてしまっていました。

そして、ここで挫折しました。


10年後、もう一度開いてみる

今回、再びこのコードを触ることになった理由は、少し違います。

今となっては、Z80マシンをもう一度使わなければならない理由は、ほとんどありません。

それでも、

やり残したことを一つ回収しておきたい。

これが大きな理由の一つです。

そして、当時このツールを作っていた古いWindows PCも、いつかはどうにかしないといけない。

……まあ、こちらはまだ処分するつもりはあまりありません(笑)。

そんなことを考えながら、10年前のコードをもう一度開きました。


10年前に分からなかったことが、今なら少し見える

昔のコードを読み返してみると、

「ああ、ここで詰まっていたのか」

という場所が少しずつ見えてきました。

当時は一つの大きな処理に見えていたものが、

今なら、

「まず種類を判定する」

「その後で値に変換する」

「最後に1バイトとして整形する」

と分けて考えられる。

そして、あの 108 の問題も、

単純な「0の付加処理」だけではなく、

その前段にあるデータの種類判定が重要だったことが分かりました。

ちなみに、あのとき必要だった「0を付加する処理」は、

今でもどこかに眠っているはずです(笑)。

10年前の自分が書いたコードの中に。


ここで培ったものが、現在のValidateにつながった

このZ80変換を作る過程で、

カンマ区切りのデータを分解する。

一つ一つの項目が何なのかを判定する。

正しい値なのかを確認する。

ラベルなのか、文字列なのか、数値なのか、式なのかを判断する。

そんな処理を作る必要がありました。

当時は、ただZ80のコードを変換するために作っていた処理です。

でも、後になってみると、

これはZ80だけの話ではありませんでした。

カンマ区切りのデータを扱うなら、Validateが必要になる。

入力されたものをそのまま信じるのではなく、

「これは何なのか」

「この値で大丈夫なのか」

を確認する。

このとき培った考え方が、現在作っているValidateルーチンにつながっています。


そして、その先へ

さらに、そのValidateやデータ判定の考え方は、

その先にあるスクリプトエンジンにもつながっていきました。

10年前は、

Z80のコードを変換したい。

ただそれだけでした。

そのために作った小さな処理が、

10年後には別のツールの中で使われている。

当時は、そんなことになるとは思っていませんでした。


ExcelでZ80を書く

今回、もう一度動かしてみようとしているものは、

ExcelのワークシートにZ80のコードを書き、

Excel VBAでそれを解析して、

Z80のマシン語へ変換するというものです。

ラベルは自由。

16進数はMicrosoft風の &H。

コメントも自由。

色も自由。

できるだけ、自分が昔使いたかった形にしています。

10年前には、DB処理のところで止まってしまいました。

今度は、そこを越えてみる。

そして、できることなら最後にもう一度、

Z80のマシン語で小さなゲームを動かしてみたい。

それが今のところの目標です。


10年前の自分が残したもの

10年前の自分は、Z80変換を完成させることができませんでした。

でも、そのとき作った処理は消えていませんでした。

カンマ区切りを扱う考え方。

データの種類を判定する考え方。

Validateする考え方。

それらは形を変えて、

現在のツールへ、

そしてスクリプトエンジンへつながっていました。

昔のコードを蘇らせるというのは、

コードだけを蘇らせることではないのかもしれません。

10年前に途中で置いてきたものを、少しずつ回収している。

今回は、そんな開発になっています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?