高機能アセンブラ AILZ80ASM ですが、このところの進化が止まりません。凄いことになってきているので、最近追加された新機能について解説していきます。

このようにファイルの先頭に #pragma once と記述するだけです。あまりに普通に使えるので、この記事を書こうと思うまで、存在すら忘れていました。基本中の基本、無くても代替え方法はありますが、これを使い始めたら、他のアセンブラがとても煩わしく感じてしまいます。
AILZ80ASMでは、#LIST に続いて #FALSE と指定することで、以降のリスティングファイル出力を抑止することが出来ます。そして、#TRUE にすると、元通り出力が再開します。

Define.inc, Macro.inc, System.inc を #LIST #FALSE 指定しています。結果、リスティングファイルには

どうでしょう、綺麗さっぱり出力が抑制されています。おかげでとてもコードが読みやすくなりました。ちょっとした事ですが、あるとないとで大違いです。
※ 偶数配置は ALIGN 2 と記述します。
敵管理ワークを16バイトで構成して、それを ALIGN 16 で指定しておくことで、ワークの操作を inc l, dec l だけで出来るようにもなります。xxx0 - xxxF のアドレスの範囲であれば、絶対に上位アドレスの変化がないことを利用した高速化です。これも、ALIGN 16 がなければ ORG で代用はできますが、一瞬何をやっているのか分かりにくいですよね。
他にはデータを xx00 番地から配置することで、下位アドレスの補正のための加算を省くことが出来ます。

計算結果に上位アドレスを入れるだけでテーブル参照アドレスが完成します。素晴らしい!
※ なんとカップヌードルにタンパク質が15gも配合!さらに低糖質で食物繊維入りという健康志向のカップヌードル。SAVASのプロテインが20g配合ですから、15gってかなりのものです。美味しくタンパク質取得で言うことなし!

このソースコードは、先日 X(Twitter)で沢山の有識者により最適化されたキー入力ルーチンです。このルーチンはプログラムの中にテーブルが仕込まれているという、かなり特殊な構造をしています。高速化のためテーブル参照も特殊ですので、この該当範囲は 256 境界内に収まっているのが大前提です。そこでこの範囲を CHECK ALIGN 256 ~ ENDC で囲むことにより、もしアセンブルの結果、境界を踏む事があれば

このように E6012 エラーとして出力されるというわけです。時々、256 境界を踏んで動作不良になり、都度、バグ探しをして腰砕けになる時間のムダが、これですっきり解決してなくなります。私にとってはこの恩恵はとても大きく、また他のアセンブラではこんなにスマートにはいかないので気に入っています。

左が従来のラベル定義、右が ENUM に置き換えたコードです。まず、なんといっても見やすさが違います。そして、最大のメリットが、ラベルの並び替えがあっという間に完了することです。アセンブラでは、処理の最適化でワークの使い方を変更することは多々あります。以前の書き方だと、いちいち equ を全て書き換える必要がありましたが、ENUM を使えば、ラベルを並び替えるだけで終わりです。また、equ の置き換えとしても優秀です。下手すると equ を全て駆逐する勢いで便利なのです。
如何でしょうか。このところの AILZ80ASM の進化は凄いです。現時点で少なくとも私はこのアセンブラが歴代ナンバーワンの素晴らしいアセンブラになっています。現状では Z80 だけが対象ですが、作者の Ishino さんによると、構造的には他の CPU にも対応可能だということです。アドレスバスが 16bit より大きくなると難しいかもですが、それ以外の 6502, 6809 から HD64180 ぐらいは対応可能かもですね。HD64180…えっと、Ishino さんに動作確認用の PC を寄贈すると作ってくれたりするかも😁
※ 責任持てませんので迂闊な行動はお控えくださいw
※こちらは塩分控えめバージョン。高血圧など、塩分の摂り過ぎは身体に良くないと言われています。でも、これなら大丈夫(食べ過ぎに注意)。加えて高齢者に多い骨粗鬆症防止にカルシウムとその吸収促進のビタミンD配合です。美味しさは定番の日清カップヌードルですから文句なしです!
- #pragma once 多重読み込み防止

このようにファイルの先頭に #pragma once と記述するだけです。あまりに普通に使えるので、この記事を書こうと思うまで、存在すら忘れていました。基本中の基本、無くても代替え方法はありますが、これを使い始めたら、他のアセンブラがとても煩わしく感じてしまいます。
- #LIST リスティングファイル出力指定
AILZ80ASMでは、#LIST に続いて #FALSE と指定することで、以降のリスティングファイル出力を抑止することが出来ます。そして、#TRUE にすると、元通り出力が再開します。

Define.inc, Macro.inc, System.inc を #LIST #FALSE 指定しています。結果、リスティングファイルには

どうでしょう、綺麗さっぱり出力が抑制されています。おかげでとてもコードが読みやすくなりました。ちょっとした事ですが、あるとないとで大違いです。
- ALIGN 境界指定
※ 偶数配置は ALIGN 2 と記述します。
敵管理ワークを16バイトで構成して、それを ALIGN 16 で指定しておくことで、ワークの操作を inc l, dec l だけで出来るようにもなります。xxx0 - xxxF のアドレスの範囲であれば、絶対に上位アドレスの変化がないことを利用した高速化です。これも、ALIGN 16 がなければ ORG で代用はできますが、一瞬何をやっているのか分かりにくいですよね。
他にはデータを xx00 番地から配置することで、下位アドレスの補正のための加算を省くことが出来ます。

計算結果に上位アドレスを入れるだけでテーブル参照アドレスが完成します。素晴らしい!
※ なんとカップヌードルにタンパク質が15gも配合!さらに低糖質で食物繊維入りという健康志向のカップヌードル。SAVASのプロテインが20g配合ですから、15gってかなりのものです。美味しくタンパク質取得で言うことなし!
- CHECK ALIGN 256 境界跨ぎの監視

このソースコードは、先日 X(Twitter)で沢山の有識者により最適化されたキー入力ルーチンです。このルーチンはプログラムの中にテーブルが仕込まれているという、かなり特殊な構造をしています。高速化のためテーブル参照も特殊ですので、この該当範囲は 256 境界内に収まっているのが大前提です。そこでこの範囲を CHECK ALIGN 256 ~ ENDC で囲むことにより、もしアセンブルの結果、境界を踏む事があれば

このように E6012 エラーとして出力されるというわけです。時々、256 境界を踏んで動作不良になり、都度、バグ探しをして腰砕けになる時間のムダが、これですっきり解決してなくなります。私にとってはこの恩恵はとても大きく、また他のアセンブラではこんなにスマートにはいかないので気に入っています。
- ENUM 列挙体(ラベル連続定義)

左が従来のラベル定義、右が ENUM に置き換えたコードです。まず、なんといっても見やすさが違います。そして、最大のメリットが、ラベルの並び替えがあっという間に完了することです。アセンブラでは、処理の最適化でワークの使い方を変更することは多々あります。以前の書き方だと、いちいち equ を全て書き換える必要がありましたが、ENUM を使えば、ラベルを並び替えるだけで終わりです。また、equ の置き換えとしても優秀です。下手すると equ を全て駆逐する勢いで便利なのです。
如何でしょうか。このところの AILZ80ASM の進化は凄いです。現時点で少なくとも私はこのアセンブラが歴代ナンバーワンの素晴らしいアセンブラになっています。現状では Z80 だけが対象ですが、作者の Ishino さんによると、構造的には他の CPU にも対応可能だということです。アドレスバスが 16bit より大きくなると難しいかもですが、それ以外の 6502, 6809 から HD64180 ぐらいは対応可能かもですね。HD64180…えっと、Ishino さんに動作確認用の PC を寄贈すると作ってくれたりするかも😁
※ 責任持てませんので迂闊な行動はお控えくださいw
※こちらは塩分控えめバージョン。高血圧など、塩分の摂り過ぎは身体に良くないと言われています。でも、これなら大丈夫(食べ過ぎに注意)。加えて高齢者に多い骨粗鬆症防止にカルシウムとその吸収促進のビタミンD配合です。美味しさは定番の日清カップヌードルですから文句なしです!
コメント