ハンドアセンブルの弱点として、飛び先指定の大変さを以前に書きました。(2023年6月1日記事参照「ハンドアセンブル」)
そこで、私はプログラム上で計算し易いように工夫をしています。
何をしているかと言うと、自作サンプルを見ていただければ一目瞭然。
1行のDATA文にコードを8バイトしか書かないようにしています。
1行が8バイト、16進数で&H08。
2行で16バイト、16進数で&H10。
要するにアドレスを数える際、2行毎に10、20、30…と数えてく訳です。(上に行く場合はF0、E0、D0…)
最後1行余ったら、8を加えます。
そして、右に1つ移動したら+1、左なら-1すると言うように数えます。
ただ、これでも問題があります。
1つのロジックを1ブロックとしていますが、1ブロックの最後の行、プログラム終了から次のブロックまでの間に「00」が入ります。
これは単純にプログラムを見易くするための工夫です。
しかし、言ってしまえば無駄です。
MSXのように容量が少なく、制約の多い機種ならなおさら。
しかし、これがあるおかげでロジック追加になった際、この空きを利用してジャンプ命令を入れられます。
うーん、でもアセンブラ使えばその辺の事は気にする必要はありません。(そもそもアドレス指定が不要。)
現状、プログラミングする際、ニーモニック(LD A,01、ADD 02等)を思い浮かべてそれをマシン語コード(3E,01、C6,02等)に変換しているので、アセンブラに移行するのはそれほど苦ではありません。
ただ、やはりアセンブラを起動して、マシン語プログラムをロードし、アセンブリしてから、BASICプログラムをロードして実行...までの手順が、手間に感じてしまう。
今なら全部BASICプログラムだけですからね。
うーん、今更やり方変えるのも面倒だしなぁ...。
まぁ、何か支障が出るまではこのままのスタイルでいきます。