こんばんは、まだまだ命令コードの解説も足りてないですが、短いコードを書いてみてアセンブルするのは、
どうやるのか?、について書いてみたいと思います。
まずアセンブル以前に、ニーモニックで書かれたソースプログラムを作るのはどうするのか?。
こちらは、エディタ(windows)ならメモ帳でもOKです、勿論他の高機能なものでもOKです。
過去記事でも紹介しましたが、使い慣れたもので良いと思います。
作ったプログラムを、EmyZ-2200などで走らせてみたいなら、アセンブラプログラムはZ80as が良いです。
EmyZ-2200で読み込める形式でファイルを出力してくれますから!。
ただしコマンドプロンプトのDOS画面上での操作(CUI)になりますので、そちら方面の多少の知識は
必要かもしれませんが、それほど難しくはありませんので、Z80as の解説を読めば簡単に試せるでしょう!。
ってことで、アセンブルを試すなら、Z80as をダウンロードして解凍からになります。
解凍できたフォルダには、使い方の html ファイルが有りますので、そちらを読んでください。
これでハンドアセンブルする場合の数分の一の手間で、MZエミュ用のファイルが作れますので、
試してほしいと思います。
ってことです、自分の設計通りにマシン語のプログラムが動いたら、感動しますよ〜!?。
2026年08月22日
2026年08月17日
今更 Z80マシン語 #16
こんばんは、短いアセンブラソースだったけれど、細かく解説したつもりなので、改造したりしてみれば、
このソースでまだ遊べるんじゃないでしょうか?。
記事のどこかで、アセンブラソフトも紹介した気がするので、アセンブルを試したりしてみれば、
まだまだ遊べそうな気がします。
使った命令の種類も少ないし、意味はフンワリ理解できたんじゃないでしょうか?。
横40桁表示のモードにしてみたり、表示する文字列データを変更してみたりして、遊んでみてください。
そうして慣れてきたら、他の命令も習っていけば、簡単なゲームっぽいものも作れるようになるかも知れません?。
飽きてきたら、8086CPUに挑戦してみたり、C言語などの理解にも役立てれると思います。
パソコンの趣味は、体力無くても出来ますので、年令に関係なく続けられますので、なが〜く楽しんでいきましょう。
ってことで今更シリーズ終了します、見に来てくれた方には感謝します、ありがとうございました。
このソースでまだ遊べるんじゃないでしょうか?。
記事のどこかで、アセンブラソフトも紹介した気がするので、アセンブルを試したりしてみれば、
まだまだ遊べそうな気がします。
使った命令の種類も少ないし、意味はフンワリ理解できたんじゃないでしょうか?。
横40桁表示のモードにしてみたり、表示する文字列データを変更してみたりして、遊んでみてください。
そうして慣れてきたら、他の命令も習っていけば、簡単なゲームっぽいものも作れるようになるかも知れません?。
飽きてきたら、8086CPUに挑戦してみたり、C言語などの理解にも役立てれると思います。
パソコンの趣味は、体力無くても出来ますので、年令に関係なく続けられますので、なが〜く楽しんでいきましょう。
ってことで今更シリーズ終了します、見に来てくれた方には感謝します、ありがとうございました。
今更 Z80マシン語 #15
おはようございます、文字列表示のニーモニック解説も15回目、前回でどのようにすれば文字列が
表示できるのかは、ほぼ解ってきたのでは?、と思いますメモリにデータを書き込むってことでした。
https://www.dropbox.com/scl/fi/hl19hm25t9ff5ef9uxiag/.txt?rlkey=bqs731nvhaldba4bmtkgghlqa&st=wsgef7g6&dl=0
↑ ↑ ↑
ソースの表示はこちらです。
24行から34行までの間を、文字列の終了マークである 0Dh が見つかるまでループすることで文字列を
表示していることが解ってもらえましたか?。
データ部分の文字列を表示し終わったので、次行の35行 #END へ分岐します、分岐先は CALL T_OFF
となっています、CALL T_ON でメモリのバンクを切り替えましたので、ここを元に戻して RETURN しよう
ってことです。
プログラムはここで終了ですが、ソースはまだ続いています、先のプログラム部分で CALL していたサブルーチン
とデータ部分です。
ラベル T_ON が39行から46行までと、T_OFF が47行から50行に出てきます。
まずテキスト画面をメモリ上にセッティングする、T_ONから。
https://archive.org/details/personal-computer-mz-2000-basic-monitor-manual-sharp/Personal%20Computer%20mz-2000%20OWNERS%20MANUAL%20SHARP/page/59/mode/2up
↑ ↑ ↑
こちらはMZ-2000/2200のオーナーズマニュアルのページです。
こちらの左上にポートアドレス$E8の内容の解説が有ります、右下の虫眼鏡アイコンを操作して適度に拡大して
眺めてください、ビット7〜5をHにすれば良さそうなのがわかりますね?、ビットは0と1しか表せませんので
この3ビットを1にしてやると座標Xが80桁のモードに切り替えられそうです。
これが39行から46行で行っている、サブルーチンの内容です。
40行で IN A,(0E8H) これは現在の$E8ポートの状態をAレジスタに読み出しています。
IN A,(E8H) でなく IN A,(0E8H) とカッコの中が0E8Hとなっているのは E8H と書くとアセンブラが E8を
ラベルだと思ってしまうからです、よくやりがちなミスなのでしつこいですが、また書きました。
41行 LD (E8_DAT),A こちらのE8_DATはラベルです、今読み出した$E8ポートのデータを保存しています。
42行から44行でビット7〜5をHにしています、 SET命令はAレジスタに対してしか使えない命令だと思います?。
SET*で*のビットを1に出来ます、RESでビットを0に出来るんじゃなかったかな?。
ここではSET命令3回で行っていますが、論理演算でやれば1回の操作でも同じ事ができそうです。
45行で OUT (0E8H),A とやって変更したデータをポート$E8に出力しています、これで文字画面への
バンク切り替えが出来たはずです、46行では処理が終わったので、RETで呼び出した次の行へ戻ります。
48行からは T_OFF 切り替えたメモリをもとに戻す処理です、あらかじめ保存しておいたデータを
$E8ポートに出力することで、テキスト画面をメインメモリに切り替えてもとに戻しています。
52行からは表示する文字列のデータが並べて格納されています、DBはデータが1バイトであることを表す
疑似命令です。
55行 E8_DAT: はラベルで、$E8ポートの元のデータの保存場所として使っています。
以上で全ての行が終了しました、57行の END はアセンブラにここまでと知らせる疑似命令です。
お疲れ様でした、たった55行のニーモニックでしたが、文章で解説すると長い!、というのが感想です。
命令は細かいけれど、割と簡単でしょ?、特にZ80は理解しやすいと思いますので、ある程度つかえると
16ビットCPUの8086などへステップアップする時の知識の積み重ねにはなると思います。
それではまた。
表示できるのかは、ほぼ解ってきたのでは?、と思いますメモリにデータを書き込むってことでした。
https://www.dropbox.com/scl/fi/hl19hm25t9ff5ef9uxiag/.txt?rlkey=bqs731nvhaldba4bmtkgghlqa&st=wsgef7g6&dl=0
↑ ↑ ↑
ソースの表示はこちらです。
24行から34行までの間を、文字列の終了マークである 0Dh が見つかるまでループすることで文字列を
表示していることが解ってもらえましたか?。
データ部分の文字列を表示し終わったので、次行の35行 #END へ分岐します、分岐先は CALL T_OFF
となっています、CALL T_ON でメモリのバンクを切り替えましたので、ここを元に戻して RETURN しよう
ってことです。
プログラムはここで終了ですが、ソースはまだ続いています、先のプログラム部分で CALL していたサブルーチン
とデータ部分です。
ラベル T_ON が39行から46行までと、T_OFF が47行から50行に出てきます。
まずテキスト画面をメモリ上にセッティングする、T_ONから。
https://archive.org/details/personal-computer-mz-2000-basic-monitor-manual-sharp/Personal%20Computer%20mz-2000%20OWNERS%20MANUAL%20SHARP/page/59/mode/2up
↑ ↑ ↑
こちらはMZ-2000/2200のオーナーズマニュアルのページです。
こちらの左上にポートアドレス$E8の内容の解説が有ります、右下の虫眼鏡アイコンを操作して適度に拡大して
眺めてください、ビット7〜5をHにすれば良さそうなのがわかりますね?、ビットは0と1しか表せませんので
この3ビットを1にしてやると座標Xが80桁のモードに切り替えられそうです。
これが39行から46行で行っている、サブルーチンの内容です。
40行で IN A,(0E8H) これは現在の$E8ポートの状態をAレジスタに読み出しています。
IN A,(E8H) でなく IN A,(0E8H) とカッコの中が0E8Hとなっているのは E8H と書くとアセンブラが E8を
ラベルだと思ってしまうからです、よくやりがちなミスなのでしつこいですが、また書きました。
41行 LD (E8_DAT),A こちらのE8_DATはラベルです、今読み出した$E8ポートのデータを保存しています。
42行から44行でビット7〜5をHにしています、 SET命令はAレジスタに対してしか使えない命令だと思います?。
SET*で*のビットを1に出来ます、RESでビットを0に出来るんじゃなかったかな?。
ここではSET命令3回で行っていますが、論理演算でやれば1回の操作でも同じ事ができそうです。
45行で OUT (0E8H),A とやって変更したデータをポート$E8に出力しています、これで文字画面への
バンク切り替えが出来たはずです、46行では処理が終わったので、RETで呼び出した次の行へ戻ります。
48行からは T_OFF 切り替えたメモリをもとに戻す処理です、あらかじめ保存しておいたデータを
$E8ポートに出力することで、テキスト画面をメインメモリに切り替えてもとに戻しています。
52行からは表示する文字列のデータが並べて格納されています、DBはデータが1バイトであることを表す
疑似命令です。
55行 E8_DAT: はラベルで、$E8ポートの元のデータの保存場所として使っています。
以上で全ての行が終了しました、57行の END はアセンブラにここまでと知らせる疑似命令です。
お疲れ様でした、たった55行のニーモニックでしたが、文章で解説すると長い!、というのが感想です。
命令は細かいけれど、割と簡単でしょ?、特にZ80は理解しやすいと思いますので、ある程度つかえると
16ビットCPUの8086などへステップアップする時の知識の積み重ねにはなると思います。
それではまた。

