Lesson
1.開発環境
|
Lesson 1開発環境の準備Z80 エミュレーター YAZETiny BASICを学習するための開発環境を準備します. 目次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月)ですが. インストールは,簡単で次のようにします.
Windows編Windowsでもyazeを使うことができます.ただし,cygwin環境で使うことになります.これが面倒ならば,他のエミュレーターを使ってください.cygwinのインストール方法については,ここに記述しています. cygwinのインストールが完了している場合には,以下にしたがいYAZE-AGをインストールします.
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 |
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 から見ることができます.
ドライブ | 権限 | ディレクトリー | 内容 |
---|---|---|---|
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 でも似たようなものです.
$ cp LOAD.COM $HOME/cpm/disksort
A> PIP A:LOAD.COM=C:LOAD.COM
以上で,コマンド「LOAD」が使用可能になります.このコマンドの具体的な使い方は,Lesson 2 CP/M の アセンブリ言語で示します.
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月 | ページの新規作成 |