Yamamoto's Laboratory
 
Lesson
 1.開発環境
 
 

Z80エミュレーター

どんな環境でも,Tiny BASIC を動かすことはできるでしょう.私は,この言語が作られた当時,1970年代のホビーでコンピューターを使っていたユーザーの環境で動かしたいと考えています.当時のコンピューターを作り,当時の人々の考えを理解したいからです.

当時のパソコンの開発環境といえば,CP/M が最も有名です.そこで,Tiny BASIC を CP/M で動かすことを考えます.とはいえ,今更 CP/M の動く PC を用意するわけにもいかないので,エミュレーターを使います.

YAZE-AGをインストール

Linux編

ネットで検索すると,たくさんのCP/Mのエミュレーターが見つかります.ここでは,その中の一つYAZE-AG(Yet Another Z80 Emulator by AG)を使います.他のエミュレーターに比べバージョンが進んでいたからです.とは言っても,2.30.3(2014年10月)ですが.

インストールは,簡単で次のようにします.

  1. YAZE-AGのサイト内にある Down load クリックして,yaze-ag-3.30.3.tar.gzを適当なディレクトリーにダウンロードします.
  2. ダウンロードしたディレクトリーに移り,ファイルを解凍します.
    $ tar  zxvf  yaze-ag-2.30.3.tar.gz
  3. 解凍したディレクトリーに移ります.
    $ cd  yaze-ag-2.30.3
  4. インストール方法は,YAZE-AGのInstall yaze-ag-2.30.3に書かれています.まず,移動したディレクトリーにある「Makefile_linux」を 「Makefile」という名前でコピーします.
    $ cp  Makefile_linux  Makefile
  5. gccのバージョンとCPUにあわせて,MakefileのOPTIMIZEの行を編集します.デフォルトは,「OPTIMIZE = -O3 -march=pentium4」となっています.これをコメントアウト(行頭に # を付ける)し,「OPTIMIZE = -O3 -march=native」を追加します.
  6. ビルドとインストールを行います.makeの時にいろいろ警告 (warning) が出ますが,無視.最後のインストールはrootで行います.
    $ make
    # make install

Windows編

Windowsでもyazeを使うことができます.ただし,cygwin環境で使うことになります.これが面倒ならば,他のエミュレーターを使ってください.cygwinのインストール方法については,ここに記述しています.

cygwinのインストールが完了している場合には,以下にしたがいYAZE-AGをインストールします.

  1. YAZE-AGのサイト内にある Down load クリックします.そして,Standalone Binaries for Windowsをクリックし,動作環境にあったファイルをダウンロードします.私の場合は,yaze-ag-2.30.2-winbinaries-x86_64-AMD-athlon64.exe をダウンロードしました.
  2. ダウンロードした yaze-ag-2.30.2-winbinaries-x86_64-AMD-athlon64.exe をダブルクリックします.すると,ダイアログ「セキュリティの警告」が現れるかもしれませんが,実行ボタンをクリックします(参考図).
  3. つぎに,インストールするドライブ/パスの問い合わせのダイアログが現れます(一部ドイツ語?).デフォルトの「C:\」で良いでしょう.Entpacken ボタンをクリックします(参考図).

YAZE-AGの使い方

起動方法

yaze の CP/M の起動方法を示します.問題なく起動すると,Linux では,「$HOME/cpm」ができあがります.Windows の場合はよく分かりません.

Linux 編

以下のコマンドで,yaze は起動します.

$ yaze

すると,起動メッセージが現れ,CP/M 3.1 が立ち上がります.そして,コマンド入力状態になります.CP/M 2.2 を起動したければ

$ yaze  -l -1 -b  yaze.boot

とします.オプション「-1」はセクターサイズを CP/M 2.2 の標準の 128 [Byte]にします.デフォルトは,CP/M 3.1 の 2048 [Byte]です.オプション「-b yaze.boot」で,ブートファイルを指定します.

Windows 編

デスクトップのアイコン「YAZE-AG-2.30.2」をダブルクリックするか,スタートメニューに追加された「YAZE-AG-2.30.2」をクリックするか,スタートメニュー → YAZW-AG-2.30.2 の「YAZE-AG-2.30.2」をクリックします.

終了方法

システムに戻り,quit コマンドで終了します.

A> sys
$> quit

ドライブ/ディスク

yaze を起動するとディスクの内容が表示されます.私の場合,以下のように表示されました.A – P のディスクの 14 個がつかわれています.CP/M では最大 16 個のドライブが使用できるので,2個は予備になります.

この中で,C ドライブは特別で,YAZE を起動している PC のディレクトリーの一部と一致しています.そのため,PC のシステム (Linux or Windows, 他) とのファイルの受け渡しにつかわれます.Linux の場合は「$HOME/cpm/disksort」,Windowsでは「C:\yaze-ag-2.30.2\disksort」です.これらに,PCのシステムからファイルをコピーすると YAZE の CP/M から見ることができます.

YAZE-AGのドライブ
ドライブ 権限 ディレクトリー 内容
A: r/w BOOT_UTILS CCP.COMを含んだブートディスクとユーティリティ
B: r/w CPM3_SYSdsk CP/M 3.1システムユーティリティ
C: r/o ./disksort/ PCのディレクトリー
D: r/w DISKSORT.dsk DISKSORTプロジェクトの例
E: 未使用
F: r/w ZINC ZINCプロジェクトのシステムユーティリティ
G: r/w TEST-UTILS-1.10 旧バージョン(yaze-1.10)のテストユーティリティ
H: r/w HI-C-Z280-Compiler HI Tech Soft社のCコンパイラーのコピー
I: r/w UNIXLIKE UNIXライクユーティリティ
J: r/w MMU-Utils メモリー管理ユニットのテストファイル
K: r/w Kermit_SZRZ.ydsk カーミットとSZ/RZ(Zモデム)
L: 未使用
M: r/w Turbo-Modula-2 ボーランド社のModula-2コンパイラー
N: r/w testdsk 検索エリア??
O: r/w ZPM3N10 BDOS3からの置き換えのZPM3N10
P: r/w BIOS3 BIOS3のソース

コマンド

ここでは,CP/M のコマンドの使い方を説明します.

ドライブとファイル

CP/M のコマンドを使う前に,ドライブやファイルの指定の方法を理解する必要があります.MS-DOS や Unix を使っている人はすぐに理解できると思います.

ドライブ

ドライブとは,先に示したディスクのことです.A–P まであり,そこにファイルが格納されています.ドライブの指定には,ドライブ名 (A–P) とコロンを使います.例えば, C ドライブは「C:」とします.

作業を行っているドライブをカレントドライブと言います.それは,システムが入力待ちであることを示すプロンプトに表示されます.例えば,「A>」とか「C>」とかのようにです.それを切り替えるためには,ドライブ名とコロン(例 D:)をタイプします.

ファイル

一方,ファイルはドライブ名とファイル名で指定します.例えば,D ドライブにあるファイル HOGE.TXT は「D:HOGE.TXT」とします.カレントドライブにあるファイルのみ,ドライブ名を省略できます.ファイル名には,ワイルドカード「*」と「?」が使えます.前者は任意の文字列,後者は任意の文字を表します.

ビルトインコマンド

メモリーの CCP 領域にあるコマンドをビルトインコマンド (Built-in Command) と言います.YAZE の CP/M には,以下のビルトインコマンドが用意されています.

DIRファイル名の表示 REN名前の変更
TYPEファイルの内容表示 ERAファイルの削除

トランジェントコマンド

フロッピーディスクに実行ファイルとして記録されているコマンドをトランジェントコマンド (Transient Command) と言います.呼び出すたびに,メモリーにロードされ実行されます.YAZE の CP/M には,以下のトランジェントコマンドが用意されています.

STATファイルやシステムの状態表示 PIPファイルのコピー
SUBMITバッチファイルの実行 EDラインエディタの起動

モニター

コマンド/プログラムの追加

追加手順

yaze の CP/M にコマンド/プログラムが不足している場合,インターネットからダウンロードして加えることができます.有名なところでは,The Unofficial CP/M Web siteです.私は,そこの Digital Research Binary Files にある CP/M 2.2 BINARY をつかっています.これは zip ファイルなので,「unzip cpm22-b.zip」で解凍します.

「LOAD」コマンドを例に,このコマンドを YAZE の CP/M システム追加する方法を説明します.このコマンドは,アセンブラが生成したオブジェクトファイルを実行ファイルに変換するもので,アセンブリ言語を使う場合必須のはずですが,なぜか YAZE の CP/M の含まれていません.このコマンドの追加は,Linux では以下のようにします.Windows でも似たようなものです.

  1. unzip cpm22-b.zip」を解凍したディレクトリーに移動します.
  2. 解凍したディレクターにある「LOAD.COM」を $HOME/cpm/disksort にコピーします.
    $ cp  LOAD.COM  $HOME/cpm/disksort
  3. YAZE 起動し,PIP コマンドを使い 「C:LOAD.COM」を「A:LOAD.COM」にコピーします.
    A> PIP  A:LOAD.COM=C:LOAD.COM

以上で,コマンド「LOAD」が使用可能になります.このコマンドの具体的な使い方は,Lesson 2   CP/Mアセンブリ言語で示します.

CP/M 2.2 のために

YAZE-AG の CP/M 2.2 はコマンド「yaze -l -1 -b yaze.boot」で起動します.理由は不明ですが,この CP/M 2.2 では,A ドライブにあるコマンド「PIP」が正常に動作しません.この WEB サイトでは主に CP/M 2.2 環境で Tiny BASIC の開発を進めようとしているので,これは厄介な問題です.PIP コマンドのみ CP/M 3.1 を使うことで,その場しのぎは可能ですが,開発効率は悪くなります.

そこで,CP/M 2.2 で動作する PIP と入れ換えることにします.前節「追加手順」で示した Digital Research Binary Files の CP/M 2.2 BINARY に含まれる PIP.COM は,YAZE-AG の CP/M 2.2 で動作します.CP/M 3.1 を起動し,さきの LOAD.COM を追加した同じで手順で, CP/M 2.2 BINARY に含まれる PIP.COM を A ドライブにコピーします.

その他

メモリーマップ

メモリーマップ

コマンド「yaze -v」(Windowsではyaze_bin -v)でyazeを起動すると,メモリー配置が表示されます.その起動画面から,メモリーマップは右図のようになっていることが分かります.DPTABLEとDIRBUFは起動画面から正確に分からなかったのですが,これに近いものと考えています.この部分をきちんと理解したら,書き直します.

アドレスe400hからConsole-Command Processor(CCP)が配置されます.これは,DIRやERAなどのコンソールコマンドを処理するルーチンで,たったの0800hバイトです.

Basic Disk-Operating System(BDOS)はアドレスのec00hから配置され,サイズは0e00hバイトです.システムコールを処理します(?).

コンソールなどの制御は,Basic Input/Output System(BIOS)が担当します.これはfa00hから配置され,そのサイズはたったの0066hバイトです.

そのほかに,fd90hにはDisk Parameter TABLE(DPTABLE)が保存されます.ff80hには,DIRectory BUFfer(DIRBUF)のための領域があります.これらのサイズは不明です.

トランジェントコマンドのTransient Program Area(TPA)は,e400hよりも上位に配置されます.


ページ作成情報

参考資料

更新履歴

2010年05月 ページの新規作成


no counter