Lesson
2.コンパイル
|
Lesson 2CP/Mによるコンパイル・アセンブルZ80 エミュレーター YAZE-AGYAZE-AG の CP/M の環境を使ってプログラム開発の練習をします.C言語のサンプルプログラムは「Hello World」,アセンブリ言語は「HELLO WORLD」と鈴木哲哉著「古典電脳物語」の Tiny BASIC です. 目次C言語YAZE-AGには,HI Tech Soft社のCコンパイラーが,Hドライブにあります.これを使うと,C言語のプログラムの実行ファイルをつくることができます.そして,CP/M上で実行できます. ここでは,"Hello world"のプログラムをコンパイル・実行してみましょう.
CP/M 2.2 でアセンブリ言語開発この WEB サイト「ソフトウェア基礎コース」の目的は,アセンブリ言語で Tiny Basic を記述し,それを理解することです.そのため,アセンブリ言語の開発環境は必須です.ここでは,その練習を行います. CP/M はいろいろなバージョンがあります.その中で,CP/M 2.2 が最も普及しました.そのため,本 WEB サイトでのアセンブリ言語の開発は,CP/M で行います.その一方,ここで使う Z80 エミュレーター YAZE-AG のデフォルトは CP/M 3.1 です.ここでは,YAZE-AG の CP/M 2.2 でアセンブリ言語の開発方法を示します. ここでは,Intel 8080 のニーモニックを使うマクロアセンブラー MAC を使った「Hello World」プログラムを作成します.Intel 8080 のニーモニックについては,「MPU基礎システム:Lesson 8. Instruction」,マクロアセンブラー については「CP/M MAC MACRO ASSEMBLER」が参考になります. 準備Lesson 1の「コマンド/プログラムの追加」で示した LOAD.COM と PIP.COM が必要です.これらの A ドライブにコピーするだけで準備は完了です. プログラム開発例先ほどの C 言語に引き続き,アセンブリ言語の HELLO WORLD のプログラムを作成・実行します.作成するプログラムは,リスト 2 の通りです.これを適当なエディターで記述します.改行コードは「CR+LF」とします.その作成したソースプログラムは,CP/M の Cドライブにコピーします(参考).プログラムの内容については,Lesson 3 の「システムコールについて」で説明します. 01 ;--------------------------------------------------- 02 ; "HELLO WORLD" PROGRAM USING BDOS 03 ;--------------------------------------------------- 04 ORG 100H 05 START: 06 MVI C,09H 07 LXI D,TEXT 08 CALL 0005H 09 RET 10 TEXT: DB 0DH,0AH,'HELLO WORLD',0DH,0AH,'$' 11 END ソースプログラム (HELLO.ASM) が準備できたので,それを C ドライブから A ドライブにコピーし,アセンブル・実行ファイル作成,実行を行います.具体的な手順は以下の通りです.
これで,アセンブリ言語の開発環境が整いました.実用的なプログラムの作成方法は,Lesson 3 以降で示します. Zilog Z80 アセンブリー言語開発ここでは,Zilog Z80 のアセンブリー言語でのプログラム開発について,簡単に説明します.最初に,Intel 8080 形式のニーモニックで記述するアセンブラー MAC で Z80 での拡張命令 (8080にない命令) を使う方法です.引き続き,Zilog Z80 形式のニーモニックが使えるアセンブラー Z80ASM と MACRO-80 について説明します. MAC で Z80 拡張命令を使うマクロアセンブラ MAC は Intel 8080 のアセンブラです.Intel 8080 形式のニーモニックで記述し,それを処理すると 8080 のマシン語を生成します.Intel 8085 や Zilog Z80 はバイナリーレベルで8080 と上位互換のため,この MAC が生成するマシン語が動作します. マクロアセンブラ MAC で 8080 には無い Z80 特有の命令(8085の拡張命令)を使う場合には,マクロライブラリー「Z80.LIB」を使います.リスト3はその例で,Z80.LIB を使い,8080には無いインデックスレジスター(IX)を使ったプログラムになっています.無理矢理,インデックスレジスターを使ったので変なプルグラムになっていますが,・・・ 01 ;--------------------------------------------------- 02 ; "HELLO WORLD" PROGRAM USING BDOS 03 ;--------------------------------------------------- 04 ORG 100H 05 MACLIB Z80 06 START: 07 LXIX TEXT ;LD IX,TEXT 08 NEXT: LDX E,00H ;LD E,(IX) 09 MVI C,02H ;LD C,02H 10 CALL 0005H 11 INXIX ;INC IX 12 LDX A,00H ;LD A,(IX) 13 CPI '$' ;CP '$' 14 JNZ NEXT ;JP NZ,NEXT 15 RET 16 TEXT: DB 0DH,0AH,'HELLO WORLD',0DH,0AH,'$' 17 END 05行目でマクロライブラリー「Z80.LIB」を読み込んでいます.これはテキストファイルなので,マクロ命令を見ることができます.私はこのファイルのマシン語(16進数)を見て,Z80 の命令と対応を付けました.結構面倒な作業です.
マクロアセンブラで 8080 に無い命令を使うと分かり難いプログラムになります.以降に示す用に,Zilog Z80 のニーモニックを使うことを推奨します. Zilog ニーモニックを使うマクロアセンブラ MAC は全ての Z80 の命令が使えるものの,ニーモニックが Intel 形式であるため,Zilog のニーモニックに慣れた人には Z80 の開発には少しばかり不便です.そこで,Zilog のニーモニックを使えるアセンブラ「Z80ASM」と「MACRO-80」を紹介します.簡単なプログラム開発には Z80ASM がお勧めです.ソースファイルを分割する場合には MACRO-80 を推奨します. Zilog Z80 のニーモニックは,「8ビット CPU Z80 命令セット」が参考になります. Z80ASMSLR 社の Z80ASM を使うと Zilog 形式のニーモニックで書かれた Z80 のアセンブリー言語の開発が可能です.YAZE-AG の A ドライブの「Z80ASM.DOC」には,このアセンブラの使い方が書かれています. リスト 4 は,リスト 2 と同じ「HELLO WORLD」のプログラムを Zilog のニーモニックで記述した例です.これを Z80ASM を使い,実行ファイルを作成し,実行します. 01 ;--------------------------------------------------- 02 ; "HELLO WORLD" PROGRAM USING BDOS 03 ;--------------------------------------------------- 04 ORG 100H 05 START: 06 LD C,09H 07 LD DE,TEXT 08 CALL 0005H 09 RET 10 TEXT: DB 0DH,0AH,'HELLO WORLD',0DH,0AH,'$' 11 END
ここで示した Z80ASM を使うと,お手軽に Zilog 形式のニーモニックで書かれたアセンブリ言語のソースファイルから実行ファイルを作成することができます.また,Z80ASM.DOC に記載されているスイッチを選択するといろいろなファイルを作ることができます.例えば「H」を選択すると,Intel HEX Format のファイルが作成されます. MACRO-80Microsoft 社の MACRO-80 でも,Zilog 形式のニーモニックを使い Z80 のアセンブリー言語の開発が可能です.YAZE-AG の A ドライブには,MACRO-80 のコンパイラー M80.COM とリンカー L80.COM が含まれています.それらを使い,コンパイル → リンク の手順で実行ファイルを作ることができます. リスト 5 も,リスト 2 と同じ「HELLO WORLD」のプログラムを Zilog のニーモニックで記述した例です.リスト 4 とは,拡張子が異なるだけです.これを MACRO-80 を使い,実行ファイルを作成し,実行します. 01 ;--------------------------------------------------- 02 ; "HELLO WORLD" PROGRAM USING BDOS 03 ;--------------------------------------------------- 04 ASEG 05 ORG 100H 06 START: 07 LD C,09H 08 LD DE,TEXT 09 CALL 0005H 10 RET 11 TEXT: DB 0DH,0AH,'HELLO WORLD',0DH,0AH,'$' 12 END
ここで使った MACRO-80 は強力で,複数のソースファイルからひとつの実行ファイルを作成することができます. Tiny BASIC のアセンブルと実行次に,CP/M 2.2 を使って,Intel 8080 形式のニーモニックで記述されたアセンブリ言語で書かれた Tiny BASIC の実行ファイルを作成し,それを実行します.「CP/M 2.2 でアセンブリ言語開発」で示した CP/ 2.2 の実行環境が整っている必要があります. ソースファイルの準備この WEB サイトでの最終的な目標は「Tiny BASIC を理解する」ことです.ここでは,その理解の前にのアセンブラ言語のソースコードをアセンブルし,実行します.そのソースは,古典電脳物語-80系プログラムの開発の 80 系プログラム開発のページにあります.そこにある「TBCPM.zip」を使います.これは,鈴木哲哉著「古典電脳物語」の Tiny BASIC のソースです.この書籍は,かなりおもしろいのでお勧めです. 実行ファイルの作成鈴木哲哉さんの Tiny BASIC をダウンロードし,実行ファイルを作成します.
以上の処理で,アセンブリ言語で書かれた Tiny BASIC の実行ファイルが出来上がります. プログラムの実行と終了せっかくなので,Tiny BASIC でプログラムを実行しましょう.ここでは,お約束の Hello World のプログラムを実行します.これだと,BASIC のプログラムは 1 行なので,つまらないものになってしまいます.そこで,Hello World を 5 回連続で表示させます. 作成したプログラムはCP/M 2.2 で実行します.CP/M 3.1 では,SYSTEM コマンドがフリーズします.
ページ作成情報参考資料
更新履歴
|