tranZPUterファイリングシステム (TZFS)
概要
TZFS モニター
JE800<cr>
コンピューターの起動時に直接 TZFS へ自動起動することも可能です。これを行うには、SD カードのルートディレクトリに以下の名前の空ファイルを作成してください:
'TZFSBOOT.FLG'
また、SD カードのルートに `AUTOEXEC.BAT` という名前のファイルが存在する場合、TZFS は起動後にそのファイルに記載されたコマンドを 1 行ずつ実行します。これにより、たとえばデフォルトの CPU 周波数の設定や、特定のマシンモードへの自動切り替えなどが可能です。
TZFS が起動すると、通常の 1Z-013A モニターのサインオンバナーが表示され、正常に動作している場合は「+ TZFS」という接尾辞が追加されます。通常の「*」プロンプトが表示され、元の 1Z-013A コマンドに加えて拡張コマンドセットが使用できます。これらの一部は MZ80A / MZ700 / MZ800 シリーズで見られたものであり、その他はカスタムコマンドです。コマンドの全セットを以下の表に示します:
| コマンド | パラメーター | 説明 |
|---|---|---|
| 4 | なし | 40 文字モードに切り替えます。 |
| 8 | なし | 80 文字モードに切り替えます。 |
| ASM | <addr> | 指定されたメモリアドレスに Z80 ニーモニックをアセンブルします。 |
| B | なし | キー入力時のビープ音を有効 / 無効にします。 |
| BASIC | なし | SD カード上の最初の BASIC インタープリターを検索し、ロードして実行します。 |
| CD | [<directory>] | 指定した SD カードディレクトリ <directory> に切り替えます。ディレクトリを指定しない場合は、デフォルトの \MZF にリセットします。ディレクトリを変更すると、I/O プロセッサーがディレクトリの内容をキャッシュするため、DIR コマンドの出力に数秒かかる場合があります。 |
| CP | <start addr>,<end addr>,<destination addr> | 開始アドレスから終了アドレスまでのメモリの内容を、宛先アドレスから始まるメモリにコピーします。 |
| CPM | なし | SD カード上の CP/M 2.23 を検索し、ロードして実行します。 |
| D | <address>[<address2>] | <address> から <address2>(または 20 行分)のメモリを 16 進数および ASCII でダンプします。画面が一杯になると、キーが押されるまで出力が一時停止します。 アドレスなしで続けて「D」を入力すると、最後に表示されたアドレスから続きを表示します。 ページング中に認識されるキー: 「D」- 次ページ、「U」- 前ページ、「X」- 終了、その他のキー - 次の画面を表示。 |
| DASM | <start address>,<end address> | 開始アドレスから終了アドレスまでを Z80 ニーモニックに逆アセンブルします。 |
| DIR | <wild card> | SD カードに保存されているファイルの一覧を表示します。各ファイルタイトルの前には、ファイルを識別するための 16 進数が付きます。 ワイルドカードパターンを指定して結果をフィルタリングできます(例:「*BASIC*」と指定すると名前に BASIC を含むすべてのファイルが表示されます)。 出力形式は HH<区切り文字>ファイル名で、<区切り文字> はファイルの種類を示します: 「.」= マシンコード、「-」= BASIC MZ80K/C/A、「<-」= BASIC MZ-700/800、「+」= その他。 |
| EC | <name> または <file number> |
SD カードからファイルを削除します。SD カードを <name> または <file number> で検索し、見つかった場合は削除します。 |
| EX | なし | TZFS を終了してマシンを元の状態に戻します。I/O プロセッサーが無効になります。 |
| F | [<drive number>] | 指定したフロッピーディスクからブートします。ディスク番号を指定しない場合は、入力を促すプロンプトが表示されます。 |
| FILL | <start addr>,<end addr>,<value> | 開始アドレスから終了アドレスまでのメモリを指定した値で初期化します。 |
| FREQ | <frequency in KHz> | CPU の周波数を指定した値に変更します。0 を指定するとデフォルトに戻ります。どの周波数でも設定可能ですが、上限は CPU によります。搭載されている 20MHz Z80 CPU では最大 24MHz が確認されています。 |
| H | なし | 全コマンドのヘルプ画面を表示します。 |
| J | <address> | <address> の場所でジャンプ(実行を開始)します。 |
| L | LT | [,<hardware mode>] | テープからファイルをメモリにロードして実行します。 <hardware mode> はコマンドに使用するマシンのカセットシステムを指定します(例:MZ-80B は 1800 ボードのデータレートを使用し、このマシンを選択すると MZ-80B/MZ-2000 カセットを読み取ります)。 ハードウェアオプションフラグ: K - MZ-80K、C - MZ-80C、1 = MZ-1200、A - MZ-80A、 7 - MZ-700、8 - MZ-800、B - MZ-80B、2 - MZ-2000 |
| LTNX | [,<hardware mode>] | テープからファイルをメモリにロードしますが、実行はしません。 <hardware mode> は LT の説明を参照してください。 |
| LC | <name> または <file number>[,<target model>] |
SD カードからファイルをメモリにロードします。SD カードを <name> または <file number> で検索し、見つかった場合はロードして実行します。 オプション引数 <target model> を使用すると、ロードされたソフトウェアを実行するターゲットを設定できます。このフラグは MZ-800 のようなマシン(デフォルトは MZ-800 として実行するが、このフラグで MZ-700 互換モードを強制できる)を対象としています。また、元のマシンメモリにソフトウェアをロードして実行する場合にも使用されます。現在のフラグ: 8 - MZ-800 ホストで MZ-800 モードを強制。 7 - MZ-800 ホストで MZ-700 モードを強制。 O - ホストメモリにロードしてオリジナルとして実行。 |
| LCNX | <name> または <file number>[,<target model>] |
SD カードからファイルをメモリにロードしますが、実行はしません。 <target model> は LC の説明を参照してください。 |
| M | <address> | <address> から始まるメモリの内容を編集・変更します。 |
| MZ | [<machine>] | Sharp MZ シリーズのハードウェアエミュレーターを起動します。デフォルトは MZ-80A モードです。ホスト MZ-700 を別の MZ シリーズマシンをエミュレートするよう再設定します。 OSD メニューは SHIFT+BLANK を押すと呼び出され、同じキーを再度押すと閉じます。スタンドアロンコマンドとして名前を入力することでマシンを直接選択することもできます(下記の MZ80K ~ MZ2500 を参照)。 |
| MZ80K | なし | Sharp MZ-80K ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ80C | なし | Sharp MZ-80C ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ1200 | なし | Sharp MZ-1200 ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ80A | なし | Sharp MZ-80A ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ700 | なし | Sharp MZ-700 ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ1500 | なし | Sharp MZ-1500 ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ800 | なし | Sharp MZ-800 ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ80B | なし | Sharp MZ-80B ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ2000 | なし | Sharp MZ-2000 ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ2200 | なし | Sharp MZ-2200 ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| MZ2500 | なし | Sharp MZ-2500 ハードウェアエミュレーションモードに切り替えます。(tranZPUter SW のみ) |
| P | なし | 接続されたプリンターのテストを実行します。 |
| R | なし | メインメモリのメモリテストを実行します。 |
| RIO | <addr> | I/O アドレス(8 または 16 ビット)を読み取り、読み取った値を表示します。 |
| S | <start addr> <end addr> <exec addr>[,<hardware mode>] | メモリのブロックをテープに保存します。ファイル名の入力を促されます。 例:S120020001203 - 0x1200 から 0x2000 まで保存し、実行アドレスを 0x1203 に設定します。 <hardware mode> は LT の説明を参照してください。 |
| SC | <start addr> <end addr> <exec addr>[,<hardware mode>] | メモリのブロックを MZF ファイルとして SD カードに保存します。ファイル名の入力を促され、SD カード上でそのファイル名でファイルが作成されます。 <hardware mode> は LT の説明を参照してください。 |
| SD2T | <name> または <file number>[,<hardware mode>] |
SD カードからテープにファイルをコピーします。SD カードを <name> または <file number> で検索し、見つかった場合は CMT のテープにコピーします。 <hardware mode> は LT の説明を参照してください。 |
| ST | <start addr> <end addr> <exec addr>[,<hardware mode>] | メモリのブロックを MZF ファイルとしてテープに保存します。ファイル名の入力を促され、そのファイル名でテープに保存されます。 <hardware mode> は LT の説明を参照してください。 |
| T | なし | 8253 タイマーをテストします。 |
| TC | [-]<delay compensation value> | 伸びたテープやドライブベルトが摩耗したマシン向けに、テープ遅延補正値を設定します。この補正値はテープ遅延パラメーターに加算または減算され、範囲は +/-0~127 です。 |
| T2SD[B] | [,<hardware mode>] | テープから SD カードにファイルをコピーします。プログラムをテープからロードし、SD カードの空き領域に書き込みます。コマンドの末尾に B を付けるとバッチモードで動作し、1 本以上のカセット上のすべてのプログラムを変換するループに入ります。BREAK キーが押されるかエラーが発生した場合のみ停止します。 <hardware mode> は LT の説明を参照してください。 |
| T80 | なし | ソフトウェア T80 CPU に切り替え、ハードウェア Z80 を無効にします。 |
| V | なし | テープに書き込んだばかりのファイルを、メモリに保存されている元のデータと照合して検証します。 |
| VBORDER | <colour> | VGA ボーダーカラーを設定します。 0 = 黒 1 = 緑 2 = 青 3 = シアン 4 = 赤 5 = 黄 6 = マゼンタ 7 = 白。 |
| VMODE | <video mode> | 拡張 FPGA ビデオモジュールを使用してビデオモードを選択します。FPGA は選択したマシンのビデオハードウェアをエミュレートするよう再設定されます。 0 = MZ-80K 1 = MZ-80C 2 = MZ-1200 3 = MZ-80A 4 = MZ-700 5 = MZ-800 6 = MZ-80B 7 = MZ-2000 OFF = 元のビデオハードウェアに戻す。 |
| VGA | <vga mode> | VGA 互換の出力モードを選択します。 0 = オリジナルの Sharp モード 1 = 640x480 @ 60Hz 2 = 800x600 @ 60Hz。 |
| WIO | <addr>,<value> | 8/16 ビット I/O アドレスに 8 ビット値を書き込みます。 |
| Z80 | なし | tranZPUter ボードに搭載されたオリジナルのハードウェア Z80 プロセッサーに切り替えます。 |
| ZPU | なし | FPGA 内の ZPU EVOlution プロセッサーに切り替え、zOS オペレーティングシステムでブートします。 |
80 カラムモードでは、ディレクトリ一覧コマンドの出力が 4 カラムで表示されます。
テープコマンド
TZFS コマンドを通じて、Sharp MZ シリーズのすべてのテープフォーマットの読み書きが可能になりました。これは、MZ-80B のような他の MZ マシンをお持ちの場合に非常に便利な機能です。MZ-80B ではカセットが豊富に入手できない場合でも、バイナリ MZF イメージとしてソフトウェアプログラムが入手可能です。
テープのロード
MZ-700 のメモリにテープをロードするには、L、LT または LTNX コマンドを使用できます。L と LT は同一であり、LTNX はプログラムをロードしますが実行はせず、完了時にロード情報、サイズ、実行アドレスを報告します。
ソーステープのマシンを指定するには、コマンドの後に <hardware mode> オプションを使用します(省略した場合のデフォルトは MZ-700 です)。
例:MZ-80B 標準の 1800 ボーシステムを使用してテープをロードするには、以下のコマンドを入力します:
L,B
テープへの保存
MZ-700 のメモリから MZ-700 CMT ユニットにテープを保存するには、S または同一の ST コマンドを使用できます。連続したコマンドとして、開始アドレス(MZ-700 メモリ内のプログラムの場所)、終了アドレス(プログラムの最終アドレス)、実行アドレスを指定します。現在、属性は指定できず、デフォルトは OBJCD(実行可能)になります。 コマンドを実行するとファイル名の入力を促され、MZF ヘッダーが作成されてプログラムがテープに保存されます。
対象テープのマシンを指定するには、コマンドの後に <hardware mode> オプションを使用します(省略した場合のデフォルトは MZ-700 です)。
例:開始アドレス $1200、終了アドレス $3035、実行アドレス $1200 のプログラムを MZ-80B 用のテープとして保存するには、以下のコマンドを入力します:
ST120030351200,B
SD ファイルをテープにコピー
SD カードに保存されている MZF ファイルをテープにコピーするには、SD2T コマンドを使用します。通常は CD および DIR コマンドで必要なファイルを特定し、その一意の番号をコマンドの引数として指定します。
対象テープのマシンを指定するには、コマンドの後に <hardware mode> オプションを使用します(省略した場合のデフォルトは MZ-700 です)。
例:BASIC MZ-1Z001 を MZ-2000 マシン用のテープにコピーする場合で、ファイルの SD カード ID が「0C」の場合は、カセットドライブにテープをセットし、以下のコマンドを入力します:
SD2T0C,2
テープを SD ファイルにコピー
テープのプログラムを SD カードにコピーするには、T2SD コマンドを使用します。通常は CD コマンドでイメージを保存するディレクトリに切り替え(ディレクトリあたり最大 255 ファイル)、このコマンドを実行します。コマンドはテープを検索し、最初に見つかったプログラムをロードして、テープイメージのファイル名を使用して SD カードに保存します。
対象テープのマシンを指定するには、コマンドの後に <hardware mode> オプションを使用します(省略した場合のデフォルトは MZ-700 です)。
例:MZ-800 ベースのプログラムを SD カードに保存する場合は、テープをドライブにセットし、以下のコマンドを入力します:
T2SD,8
完了するとファイルの詳細と SD カード ID が報告されます。
テープ全体を SD に一括コピー
複数のファイルが保存されたテープや複数のテープを SD に保存する必要がある場合は、T2SDB コマンドを使用します。このコマンドは上記の T2SD コマンドと同一ですが、テープからの読み取りと SD への保存をループで繰り返す点が異なります。BREAK キーを押すといつでもコマンドを終了できます。
対象テープのマシンを指定するには、コマンドの後に <hardware mode> オプションを使用します(省略した場合のデフォルトは MZ-700 です)。
例:MZ-800 テープ全体を SD カードに保存する場合は、テープをドライブにセットし、以下のコマンドを入力します:
T2SDB,8
各ファイルが読み取られて保存されるたびに、開始アドレス、サイズ、実行アドレス、および保存されたファイル名が出力されます。
アップグレードされたアプリケーション
Sharp BASIC SA-5510
インタープリターのバイト位置は重要です。一部のプログラムは既知のアドレスに機能があることを前提としているため、逆アセンブルは正確に行う必要があり、修正・拡張はメインプログラムの外部で行わなければなりませんでした。幸い、インタープリター内に TZFS では不要な自己複製ブロックがあり、このエリアを追加機能のために使用しました。
RFS ではドライブ指定を LOAD/SAVE コマンドに埋め込むことができましたが、TZFS はより強力であるため、SD カードのディレクトリやワイルドカードを指定するための別コマンドが必要でした。また TZFS には CPU クロックなどの便利な機能があるため、さらなるコマンドの追加も必要でした。
以下の表にコマンドの拡張一覧と簡単な説明を示します。
| コマンド | パラメーター | 説明 |
|---|---|---|
| LOAD | ”[<filename>]” | 現在の SD カードディレクトリまたは CMT(カセット)でプログラム “<filename>” を検索します。<filename> を指定しない場合は次の連続ファイルをロードします。 ファイル名の代わりに TZFS インデックス指定子を使用することもできます(例:LOAD “1E” は SD カードの 16 進数 1E の位置に保存されたプログラムをロードします)。 |
| SAVE | ”[<filename>]” | メモリ内のプログラムを “<filename>” という名前で現在の SD カードディレクトリまたは CMT(カセット)に保存します。 <filename> を指定しない場合は、0 から始まる連続番号を使用した「DEFAULT<number>」という名前で保存されます。 |
| DIR | ”[<wildcard>]” | TZFS 形式で現在の SD カードディレクトリの一覧を表示します。指定した <wildcard> フィルターが適用されます(例:DIR M* は M で始まるすべてのプログラムを一覧表示します)。 |
| CD | [<path>] | アクティブな SD ディレクトリを <path> に変更します。<path> を指定しない場合はルートディレクトリに変更します。path = C(例:CDC)の場合は CMT(カセット)に切り替わり、その他の引数は SD カードに切り替えます。 |
| FREQ | [<freq>] | CPU を指定した周波数 <freq> に変更します。<freq> は KHz で指定します(例:10000 = 10MHz)。<freq> を指定しない場合は元のメインボード周波数に戻ります。 |
CDC
LOAD
または
CDC
SAVE "EXAMPLE"
新バージョンの BASIC SA-5510 は「BASIC SA-5510-TZ」という名称です。
注:ランダムファイルの読み書き BASIC 操作については、そのロジックを完全に理解していないため、まだ完全には実装していません。分析できる適切なプログラムが入手でき次第、CMT 仕様に従って動作するよう TZFS を適合させる予定です。
Microsoft BASIC
既存の BASIC インタープリターの欠点の一つは、TZFS 拡張機能で更新するためのソースコードの入手可能性です。バイナリを逆アセンブルするか直接編集しない限り、TZFS コマンドの追加は不可能です。RFS の開発中にもこの問題に直面し、より複雑な tranZPUter ハードウェアのデバッグを支援するために BASIC が必要となった際、ソースコードが自由に入手できる Microsoft Basic のバージョン、すなわち NASCOM v4.7b バージョンを使用することにしました。 この BASIC バージョンはレトロの世界でかなりの人気を誇っており、それゆえ豊富な既存 BASIC プログラムが揃っています。また、追加コマンドで拡張するのも比較的容易です。
インターネット上には NASCOM 4.7b ソースコードが 2 バージョン存在します。オリジナルバージョンと、Grant Searle が彼の multicomp プロジェクト のために LOAD/SAVE/SCREEN などのハードウェア依存コマンドを削除してバイナリ/16 進数変数を追加したバージョンです。私はこの両バージョンをもとに第 3 のバージョンを作成し、不足していたテープコマンドを含む利用可能なコマンドを記述・拡張しました。
- MS-BASIC(MZ-80A) - カセットからブート可能なオリジナルの 48K ハードウェア。
- MS-BASIC(MZ-700) - カセットからブート可能なオリジナルの 64K ハードウェア。
- MS-BASIC(MZ-1500) - MZ-1500 ハードウェアバリアント。
- MS-BASIC(TZFS40) - ビデオアップグレードハードウェアなしの TZFS アップグレード。
- MS-BASIC(TZFS80) - 80 カラム表示を提供するビデオモジュール FPGA アップグレードを搭載した TZFS アップグレード。
これらはすべて TZFS ドライブ上に存在し、ハードウェアと用途に応じて使用してください。標準コマンドと関数については、オリジナルの NASCOM Basic Manual を参照してください。以下の表は、MZ-80A / RFS ハードウェアにより適合させるために追加した拡張機能を示しています。
| コマンド | パラメーター | 説明 |
|---|---|---|
| CLOAD | ”<filename>” | SD カードからカセットイメージ(例:トークン化された BASIC プログラム)をロードします。 |
| CSAVE | ”<filename>” | 現在の BASIC プログラムをトークン化されたカセットイメージ形式で SD カードに保存します。 |
| LOAD | ”<filename>” | SD カードから標準 ASCII テキスト形式の BASIC プログラムをロードします。 |
| SAVE | ”<filename>” | 現在の BASIC プログラムを ASCII テキスト形式で SD カードに保存します。 |
| DIR | <wildcard> | 指定したワイルドカードを使用して現在のディレクトリの一覧を表示します。 |
| CD | <FAT32 PATH> | 作業ディレクトリを指定したパスに変更します。以降のすべてのコマンドはこのディレクトリを使用します。起動時、CLOAD/CSAVE は 0:\CAS を、LOAD/SAVE は 0:\BAS をデフォルトとしますが、このコマンドでそれらを指定したディレクトリに統一します。デフォルトに戻すにはパスなしで CD を入力します。 |
| FREQ | <frequency in KHz> | CPU を指定した KHz 周波数に設定します。0 を指定するとデフォルトのメインボード周波数に切り替わります。テスト済みの範囲は 100KHz ~ 24MHz で、使用している Z80 によります。Z80 が対応していればオーバークロックも可能です。 |
| ANSITERM | 0 = オフ、1 = オン | 内蔵の ANSI ターミナルプロセッサーを無効または有効(デフォルト)にします。このプロセッサーは ANSI エスケープシーケンスを認識して画面操作に変換します。これにより、特殊な画面コマンドに依存しないポータブルな BASIC プログラムが使用できます。参考:Star Trek V2 BASIC プログラムは ANSI エスケープシーケンスを使用しています。 |
NASCOM カセットイメージコンバーターツール
コンバーターはコマンドラインで動作するように設計されており、その使用方法は以下の通りです:
NASCONV v1.0
必須:
-i | --image <file> 変換するイメージファイル。
-o | --output <file> 変換後のデータの出力先ファイル。
オプション:
-l | --loadaddr <addr> MZ80A BASIC の開始アドレス。NASCOM アドレスは正しい MZ80A アドレスを設定するために使用されます。
-n | --nasaddr <addr> 元の NASCOM BASIC の開始アドレス。
-h | --help このヘルプテキスト。
-v | --verbose より多くのメッセージを出力します。
使用例:
nasconv --image 3dnc.cas --output 3dnc.bas --nasaddr 0x10fa --loadaddr 0x4341 ファイル 3dnc.cas を NASCOM カセット形式から変換します。
ソフトウェア
TZFS
RFS ではソフトウェアを多数の ROM ページに分割して必要に応じてページングによりアクセスする必要がありましたが、TZFS でも同様ですが、ページが大きいためページ数が少なくて済みます。
以下のファイルが TranZputer ファイリングシステムを構成しています:
| モジュール | ターゲット位置 | サイズ | バンク | 説明 |
|---|---|---|---|---|
| tzfs.asm | 0xE800:0xFFFF | 6K | 0 | 主要な TranZputer ファイリングシステムおよび MZ700/MZ800 モニターツール。 |
| tzfs_bank2.asm | 0xF000:0xFFFF | 4K | 1 | メッセージ出力ルーチン、静的メッセージ、ASCII 変換、ヘルプ画面。 |
| tzfs_bank3.asm | 0xF000:0xFFFF | 4K | 2 | 新コマンド:I/O 読み取り、I/O 書き込み、テープ遅延補正、ZPU/T80 CPU 選択、ハードウェアエミュレーションモード切り替えなど。 |
| tzfs_bank4.asm | 0x1200:0xCFFF, 0xF000:0xFFFF | 52K | 3 | アセンブラー/逆アセンブラー。 |
| monitor_SA1510.asm | 0x00000:0x01000 | 4K | 0 | 40 文字表示用のオリジナル SA1510 モニター。tranZPUter メモリの 64K バンク 0 にロードされます。 |
| monitor_80c_SA1510.asm | 0x00000:0x01000 | 4K | 0 | 80 文字表示用にパッチされたオリジナル SA1510 モニター。要求に応じて tranZPUter メモリの 64K バンク 0 にロードされます。 |
| monitor_1Z-013A.asm | 0x00000:0x01000 | 4K | 0 | MZ-80A キーボードおよびアトリビュート RAM カラーを使用するようにパッチされた、Sharp MZ-700 用のオリジナル 1Z-013A モニター。 |
| monitor_80c_1Z-013A.asm | 0x00000:0x01000 | 4K | 0 | MZ-80A キーボード、アトリビュート RAM カラー、80 カラムモードを使用するようにパッチされた、Sharp MZ-700 用のオリジナル 1Z-013A モニター。 |
| MZ80B_IPL.asm | 0x00000:0x01000 | 4K | 0 | MZ-80B プログラムをブートストラップするための、オリジナル Sharp MZ-80B IPL ファームウェア。 |
さらに、TZFS ソフトウェアのビルドを支援するいくつかのシェルスクリプトがあります:
| スクリプト | 説明 |
|---|---|
| assemble_tzfs.sh | TranZputer ファイリングシステムのバイナリイメージをビルドするための bash スクリプト。 |
| assemble_roms.sh | TZFS で必要な SA-1510 モニター ROM などの標準 MZ80A ROM をすべてビルドするための bash スクリプト。 |
| flashmmcfg | tranZPUter SW FlashRAM デコーダーのデコードマップファイルを生成するためのバイナリプログラム。 |
| glass-0.5.1.jar | Glass リリース 0.5 のバグ修正版。0.5 は 0xFFFF への書き込みを拒否して 1 バイトが欠けていたため、そのバグを修正したものです。 |
CP/M
以下のファイルが CBIOS および CP/M オペレーティングシステムを構成しています:
| モジュール | ターゲット位置 | サイズ | バンク | 説明 |
|---|---|---|---|---|
| cbios.asm | 0xF000:0xFFFF | 4K | 0 | CPM CBIOS スタブ、割り込みサービスルーチン(RTC、キーボードなど)、CP/M ディスク記述テーブル、バッファーなど。 |
| cbiosII.asm | 0x0000:0xCFFF | 48K | 1 | CPM CBIOS、I/O プロセッサーサービス API、SD カードコントローラー機能、フロッピーディスクコントローラー機能、画面および ANSI ターミナル機能、ユーティリティ、オーディオ機能。 |
| 0xE800:0xEFFF | 2K | 1 | CBIOSII の追加スペース(現在未使用)。 | |
| cpm22.asm | 0xDA00:0xEFFF | 5K | 0 | CCP(コンソールコマンドプロセッサー)と BDOS(基本ディスクオペレーティングシステム)で構成される CP/M オペレーティングシステム。これらのコンポーネントは CP/M サービスを必要としないアプリケーションによって上書きされる場合があり、アプリケーション終了時に再ロードされます。 |
| cpm22-bios.asm | 0 | カスタム BIOS は自己完結型であり、このスタブにはコードが含まれなくなりました。 |
さらに、CP/M ソフトウェアのビルドを支援するいくつかのシェルスクリプトがあります:
| スクリプト | 説明 |
|---|---|
| assemble_cpm.sh | TZFS 経由でロードするための MZF 形式アプリケーションとして CPM バイナリをビルドするシェルスクリプト。 |
| make_cpmdisks.sh | FAT32 フォーマットの SD カードで使用するためのバイナリファイルとして CP/M ディスクセットをビルドするための bash スクリプト。フロッピーディスクエミュレーターや物理メディアへのコピーのための CPC 拡張ディスクフォーマットも作成されます。 |
| glass-0.5.1.jar | Glass リリース 0.5 のバグ修正版。0.5 は 0xFFFF への書き込みを拒否して 1 バイトが欠けていたため、そのバグを修正したものです。 |
詳細については CP/M セクションを参照してください。
ソフトウェアビルド
tranZPUter シリーズが機能するためには、いくつかのソフトウェアコンポーネントが必要です:
- zOS 組み込み - K64F I/O プロセッサー上で動作する統合オペレーティングシステム
- zOS ユーザー - Sharp MZ-700 のメインホストプロセッサーとして動作する ZPU Evo 用のオペレーティングシステム
- TZFS - Sharp MZ-700 上で動作する Z80 ベースのオペレーティングシステムまたはファイリングシステム
- CP/M - マイクロコンピューター向けの本格的なオペレーティングシステム。Sharp MZ-700 に移植し、豊富なアプリケーション群から恩恵を受けています。
TZFS は tranZPUter ソリューションの不可欠なコンポーネントであり、ソフトウェアのビルドにはターゲットホストによって異なる手順が必要です。それらは以下のセクションで説明します。
tranZPUterFusionX の登場により I/O プロセッサーインフラストラクチャーが提供されるため、このターゲットには TZFS と CP/M のみが必要です。
パス
tranZPUter リポジトリ
もともと TZFS は tranZPUter プロジェクトリポジトリの一部でした。Fusion プロジェクトの登場により、独立した Gitea ホストプロジェクトモジュールとして分離することが必要になり、現在は tranZPUter リポジトリの <software> ディレクトリ配下のサブモジュールとして存在しています。
| 略称 | パス | 説明 |
|---|---|---|
| <cpu> | [<ABS PATH>]/tranZPUter/cpu | ZPU VHDL 定義ファイル。 |
| <build> | [<ABS PATH>]/tranZPUter/build | ZPU ベースの tranZPUter ボードの開発およびテスト用ビルドファイル。 |
| <devices> | [<ABS PATH>]/tranZPUter/devices | ZPU 開発または tranZPUter 開発で使用されるハードウェアデバイスの RTL 定義。 |
| <docs> | [<ABS PATH>]/tranZPUter/docs | プロジェクトに関連するドキュメント。 |
| <pcb> | [<ABS PATH>]/tranZPUter/pcb | ガーバーファイル。各 tranZPUter バージョン(SW、SW-700、tranZPUter)がそれぞれのサブディレクトリに格納されています。 |
| <schematics> | [<ABS PATH>]/tranZPUter/schematics | コンポーネントライブラリ定義を含む Kicad 回路図および PCB 設計ファイル。 |
| <software> | [<ABS PATH>]/tranZPUter/software | プロジェクトで使用されるソフトウェアのルートディレクトリ。 |
TZFS リポジトリ
| 略称 | パス | 説明 |
|---|---|---|
| <config> | [<ABS PATH>]/TZFS/config | ツールの設定ファイル。現在は CP/M イメージ生成のためのディスク定義記述ファイルが含まれています。 |
| <tools> | [<ABS PATH>]/TZFS/tools | ターゲットファイルのコンパイルと作成を支援するツール。 |
| <srctools> | [<ABS PATH>]/TZFS/src/tools | tranZPUter v1 Flash RAM メモリマップデコーダーファイル作成ツールおよび NASCOM Basic コンバーターツール。 |
| <dis> | [<ABS PATH>]/TZFS/dis | アプリケーションおよびファームウェアの逆アセンブル設定。アップグレード前にアプリケーションを逆アセンブルするために使用します。 |
| <cpm> | [<ABS PATH>]/TZFS/CPM | オリジナルの CPM ソフトウェア。アプリケーション別にグループ化され、生成されたフロッピーディスクおよび SD カードイメージが含まれます。 |
| <mzf> | [<ABS PATH>]/TZFS/MZF | 生成された SD カードイメージに追加されるオリジナルの Sharp MZF 形式アプリケーション。 |
| <bas> | [<ABS PATH>]/TZFS/BAS | 読み取り可能なテキスト形式に変換された NASCOM Basic プログラムのコレクション。生成された SD カードイメージに追加されます。 |
| <cas> | [<ABS PATH>]/TZFS/CAS | NASCOM テープイメージから変換された NASCOM Basic トークン化テーププログラムのコレクション。生成された SD カードイメージに追加されます。 |
| <cas> | [<ABS PATH>]/TZFS/NASCAS | 変換されていないオリジナルの NASCOM カセットイメージのコレクション。変換には nasconv ツールを使用してください。 |
| <dsk> | [<ABS PATH>]/TZFS/DSK | オリジナルのフロッピーディスクイメージ。 |
| <roms> | [<ABS PATH>]/TZFS/roms | Z80 ソースのアセンブルによって作成された ROM ファイル。 |
| <hdr> | [<ABS PATH>]/TZFS/hdr | テープイメージヘッダー。MZF ファイルなどのテープアプリケーションのビルドに使用します。 |
| <asm> | [<ABS PATH>]/TZFS/asm | TZFS、CP/M、および各種オリジナルモニター ROM 用の Z80 アセンブラーファイル。 |
ツール
すべての開発は Linux(特に Debian/Ubuntu)上で行われています。CP/M Tools の GUI バージョンには Windows を使用していますが、Windows 上での TZFS のビルドには時間をかけていません。いずれ必要なすべてのツールがインストールされた Docker イメージを作成する予定ですが、それまでの間、Z80 コードや C プログラムをアセンブルし、CP/M ソフトウェアおよび CP/M ディスクイメージを扱うには、以下のツールを入手してインストールする必要があります。
注:K64F 用の ARM 互換ツールチェーンは、現在リポジトリのビルドツリー内に保存されています。
| ZPU GCC ToolChain | ZPU 開発用の GCC ツールチェーン。/opt などの共通エリアにインストールしてください。 |
| Arduino | Arduino 開発環境。広範な Arduino ライブラリから K64F バージョンの zOS に機能を追加しない限り、実際には必要ありません。参考用途に限られます。 |
| Teensyduino | Arduino レベルで Teensy3.5 ボードを扱うための Teensy3 Arduino 拡張機能。実際には必要なく、参考用途に限られます。 |
| Z80 Glass Assembler | アセンブリファイルをマシンコードに変換するための Z80 アセンブラー。0.5 リリースでは 0xFFFF の場所にバイトを作成できないバグがあったため修正し、この修正版をリポジトリの <tools> ディレクトリに保存しています。 |
| samdisk | マルチ OS 対応のコマンドラインベースの低レベルディスク操作ツール。 |
| cpmtools | マルチ OS 対応のコマンドライン CP/M ディスク操作ツール。 |
| CPMToolsGUI | Windows ベースの GUI CP/M ディスク操作ツール。 |
| z88dk | Z80 CPU 向けの優れた C 開発キット。 |
| sdcc | もう一つの優れた Small Device C コンパイラー。Z80 がターゲットの一つです。z88dk は このツールの(Z80 向けに)拡張されたバージョンをパッケージ内に提供しています。 |
TZFS のビルド
ソフトウェアと最終ロードイメージのビルドは、リポジトリ をクローンして提供されているビルドスクリプトを実行することで行えます。
トップレベルの build.sh スクリプトがビルドシーケンス全体を自動化します:
cd <software>
<a name="standard-build-assembles-tzfs-cpm-roms-and-cpm-disk-images" id="standard-build-assembles-tzfs-cpm-roms-and-cpm-disk-images"></a>
# 標準ビルド(TZFS、CP/M、ROM および CP/M ディスクイメージをアセンブル)
./build.sh
<a name="full-build-including-mzf-file-processing-only-needed-when-mzf-source-files-change" id="full-build-including-mzf-file-processing-only-needed-when-mzf-source-files-change"></a>
# MZF ファイル処理を含むフルビルド(MZF ソースファイルが変更された場合のみ必要)
./build.sh -m
各ステップを手動で実行することもできます:
- <tools>/assemble_tzfs.sh を使って TZFS バイナリを作成します。これにより、すべての TZFS バンクを含む <roms>/tzfs.rom が生成されます。
- <tools>/assemble_cpm.sh を使って CP/M バイナリを作成します。これにより CP/M MZF ファイルと CBIOS バンクが生成されます。
- <tools>/assemble_roms.sh を使ってモニターおよびホスト ROM を作成します。これにより <roms>/monitor_SA1510.rom、<roms>/monitor_80c_SA1510.rom、<roms>/monitor_1Z-013A.rom、<roms>/monitor_80c_1Z-013A.rom などが生成されます。
- <tools>/make_cpmdisks.sh を使って CP/M ディスクイメージをビルドします。
ビルド後、<tools>/copytosd.sh を使って出力を SD カードにコピーします:
<a name="copy-files-to-a-mounted-sd-card-for-an-mz-700-target-host" id="copy-files-to-a-mounted-sd-card-for-an-mz-700-target-host"></a>
# MZ-700 ターゲットホスト向けに SD カードにファイルをコピー
tools/copytosd.sh -D/path/to/TZFS -M/media/user/K64F -tMZ-700
<a name="other-supported-target-hosts-mz-80k-mz-80a-mz-800-mz-1500-mz-2000" id="other-supported-target-hosts-mz-80k-mz-80a-mz-800-mz-1500-mz-2000"></a>
# その他のサポート対象ターゲットホスト: MZ-80K, MZ-80A, MZ-800, MZ-1500, MZ-2000
完全な標準ビルドおよび SD カードセットアップの手順については以下を参照してください。
CP/M のビルド
CP/M のビルドについては、追加情報として CP/M ビルドセクションを参照してください。
tranZPUter 向けの CP/M バージョンは、特別な SD カードの準備やコンパクトな ROM イメージを必要としないため、ビルドが若干シンプルです。
CP/M システムは 4 つのパーツでビルドされます:
1. CCP、BDOS および CBIOS スタブを含む cpm22.bin。
2. バンク化された CBIOS。メインソースは 0xF000:FFFF の 4K ページにあり、
別の 64K RAM ブロックに最大 48K の大容量ページがあります。
3. 1 + 2 + MZF ヘッダーを結合した MZF 形式ファイル(TZFS でロード可能)。
4. K64F の SD カード上に 16MB FAT32 ファイルとして保存される CPM ディスクドライブの作成。
上記のすべては 2 つの bash スクリプト、’assemble_cpm.sh’ と ‘make_cpmdisks.sh’ にエンコードされており、以下のように実行できます:
cd <software>
tools/assemble_cpm.sh
tools/make_cpmdisks.sh
CP/M ディスクイメージは生のイメージは <cpm>/1M44/RAW に、CPC Extended 形式のディスクイメージは <cpm>/1M44/DSK に格納されています。これらのイメージは <cpm> ディレクトリの各サブディレクトリから構築され、CPM* で始まる各ディレクトリが 1 枚の 1.44MB ドライブイメージにパッケージされます。なお、各ディレクトリはサポートされている他のすべてのディスクのイメージ(対応するディレクトリ内、例:<cpm>/SDC16M の 16MB SD カードドライブイメージ)にもパッケージされます。
SD カード上にファイルとして存在する CP/M ディスクは <CPM>/SDC16M/RAW に格納されており、CPMDSK<number>.RAW という形式の名前です。<number> は 00、01 … n で、CP/M 下でアタッチされるディスクドライブに対応します(例:標準ブートでは 00 = ドライブ A、01 = ドライブ B。フロッピーディスクコントローラーが優先する場合は 00 = ドライブ C、01 = ドライブ D)。 CP/M の通常の実行では最大 6 枚のディスクがアタッチされます(アタッチは動的ですが、利用可能なメモリに制限されます)。
標準的なビルド手順
ソフトウェアのビルド、SD カードの作成、インストールのクイックスタートを以下にまとめます。
<a name="prerequisites-clone-the-tzfs-repository-and-ensure-the-following-tools-are-on-your-path" id="prerequisites-clone-the-tzfs-repository-and-ensure-the-following-tools-are-on-your-path"></a>
# 前提条件: TZFS リポジトリをクローンし、以下のツールが PATH に含まれていることを確認してください:
<a name="java-for-the-glass-z80-assembler" id="java-for-the-glass-z80-assembler"></a>
# - Java(GLASS Z80 アセンブラー用)
<a name="samdisk-for-cpm-disk-image-creation" id="samdisk-for-cpm-disk-image-creation"></a>
# - samdisk(CP/M ディスクイメージ作成用)
<a name="cpmtools-is-compiled-automatically-from-the-bundled-source-on-first-build" id="cpmtools-is-compiled-automatically-from-the-bundled-source-on-first-build"></a>
# cpmtools は初回ビルド時にバンドルされたソースから自動的にコンパイルされます。
<a name="clone-the-tzfs-repository" id="clone-the-tzfs-repository"></a>
# TZFS リポジトリのクローン
git clone --recurse-submodules https://git.eaw.app/eaw/TZFS.git
cd TZFS
<a name="build-everything-tzfs-rom-cpm-host-monitor-roms-and-cpm-disk-images" id="build-everything-tzfs-rom-cpm-host-monitor-roms-and-cpm-disk-images"></a>
# すべてをビルド: TZFS ROM、CP/M、ホストモニター ROM、CP/M ディスクイメージ
./build.sh
<a name="if-the-mzf-source-files-have-changed-run-the-full-build-which-also-processes-mzf-files" id="if-the-mzf-source-files-have-changed-run-the-full-build-which-also-processes-mzf-files"></a>
# MZF ソースファイルが変更された場合は、MZF ファイルも処理するフルビルドを実行:
<a name="buildsh-m" id="buildsh-m"></a>
# ./build.sh -m
<a name="mount-your-sd-card-fat32-formatted-identify-the-mount-point-eg-mediauserk64f" id="mount-your-sd-card-fat32-formatted-identify-the-mount-point-eg-mediauserk64f"></a>
# SD カード(FAT32 フォーマット済み)をマウントします。マウントポイントを確認し(例: /media/user/K64F)、
<a name="then-use-copytosdsh-to-copy-all-built-files-to-the-sd-card-specifying-your-target-host" id="then-use-copytosdsh-to-copy-all-built-files-to-the-sd-card-specifying-your-target-host"></a>
# copytosd.sh を使ってビルドされたすべてのファイルをターゲットホストを指定して SD カードにコピーします:
tools/copytosd.sh -D$(pwd) -M/media/user/K64F -tMZ-700
<a name="supported-target-hosts-mz-80k-mz-80a-mz-700-mz-800-mz-1500-mz-2000" id="supported-target-hosts-mz-80k-mz-80a-mz-700-mz-800-mz-1500-mz-2000"></a>
# サポート対象ターゲットホスト: MZ-80K, MZ-80A, MZ-700, MZ-800, MZ-1500, MZ-2000
<a name="the-script-creates-and-populates-the-following-directories-on-the-sd-card" id="the-script-creates-and-populates-the-following-directories-on-the-sd-card"></a>
# スクリプトは SD カード上に以下のディレクトリを作成・展開します:
<a name="tzfs-tzfs-rom-and-all-host-monitorbios-roms-and-keymap-roms" id="tzfs-tzfs-rom-and-all-host-monitorbios-roms-and-keymap-roms"></a>
# TZFS/ - TZFS ROM およびすべてのホストモニター/BIOS ROM とキーマップ ROM
<a name="mzf-sharp-mzf-format-application-files-organised-by-machine" id="mzf-sharp-mzf-format-application-files-organised-by-machine"></a>
# MZF/ - Sharp MZF 形式アプリケーションファイル(マシン別に整理)
<a name="cpm-cpm-disk-images-and-cpm22bin" id="cpm-cpm-disk-images-and-cpm22bin"></a>
# CPM/ - CP/M ディスクイメージと cpm22.bin
<a name="msbas-microsoft-basic-programs-ascii-text-format" id="msbas-microsoft-basic-programs-ascii-text-format"></a>
# MSBAS/ - Microsoft BASIC プログラム(ASCII テキスト形式)
<a name="mscas-microsoft-basic-programs-tokenised-cassette-format" id="mscas-microsoft-basic-programs-tokenised-cassette-format"></a>
# MSCAS/ - Microsoft BASIC プログラム(トークン化カセット形式)
<a name="basic-additional-basic-programs" id="basic-additional-basic-programs"></a>
# BASIC/ - 追加の BASIC プログラム
<a name="dsk-floppy-disk-images-organised-by-machine" id="dsk-floppy-disk-images-organised-by-machine"></a>
# DSK/ - フロッピーディスクイメージ(マシン別に整理)
<a name="if-you-want-tzfs-to-autostart-on-power-on-create-an-empty-flag-file" id="if-you-want-tzfs-to-autostart-on-power-on-create-an-empty-flag-file"></a>
# 電源投入時に TZFS を自動起動したい場合は、空のフラグファイルを作成します:
touch /media/user/K64F/TZFSBOOT.FLG
<a name="if-you-want-tzfs-to-run-commands-on-each-boot-create-an-autoexecbat-file" id="if-you-want-tzfs-to-run-commands-on-each-boot-create-an-autoexecbat-file"></a>
# 各起動時に TZFS でコマンドを実行したい場合は、AUTOEXEC.BAT ファイルを作成します:
echo "FREQ 20000" > /media/user/K64F/AUTOEXEC.BAT
<a name="eject-the-sd-card-and-insert-it-into-the-sd-card-reader-on-the-tranzputer-board" id="eject-the-sd-card-and-insert-it-into-the-sd-card-reader-on-the-tranzputer-board"></a>
# SD カードを取り出して tranZPUter ボードの SD カードリーダーに挿入します。
<a name="remove-the-z80-from-the-sharp-mz-machine-and-install-the-tranzputer-board-into-the-z80-socket" id="remove-the-z80-from-the-sharp-mz-machine-and-install-the-tranzputer-board-into-the-z80-socket"></a>
# Sharp MZ マシンから Z80 を取り外し、Z80 ソケットに tranZPUter ボードを取り付けます。
<a name="power-on-if-the-autostart-flag-has-been-created-you-should-see-the-familiar-monitor" id="power-on-if-the-autostart-flag-has-been-created-you-should-see-the-familiar-monitor"></a>
# 電源を投入します。自動起動フラグを作成した場合、+TZFS が付加されたおなじみのモニター
<a name="signon-message-followed-by-tzfs-if-the-autostart-flag-has-not-been-created-enter-the" id="signon-message-followed-by-tzfs-if-the-autostart-flag-has-not-been-created-enter-the"></a>
# サインオンメッセージが表示されます。自動起動フラグを作成していない場合は、
<a name="command-je800-at-the-monitor-prompt-to-initialise-tzfs" id="command-je800-at-the-monitor-prompt-to-initialise-tzfs"></a>
# モニタープロンプトで JE800 コマンドを入力して TZFS を初期化します。
SD カードのビルドと準備を補助するため、<zSoft>/buildall という簡易スクリプトを使用しています。このスクリプトは使用可能ですが、ROOT_DIR を変更し、RSYNC を無効にする必要があります(私はリモートコンピューターで zOS をコンパイルして K64F にアップロードしています)。
エラーが発生した場合、スクリプトは適切なエラーメッセージとともに中断します。
設計の詳細
K64F Z80 ホスト API
// CPU间通信メモリのコマンドサービス処理と結果を格納する構造体。
// 通常、z80 はメモリ空間の構造体にコマンドを配置して I/O リクエストをアサートし、
// K64F はリクエストを検出して z80 メモリ空間から構造体の下位部分を読み取り、
// コマンドを判断して残りの部分を読み取るか書き込みます。この構造体は
// z80 と K64F の両方のドメインに存在し、必要に応じてデータが同期されます。
//
typedef struct __attribute__((__packed__)) {
uint8_t cmd; // コマンドリクエスト。
uint8_t result; // 結果コード。0xFE - Z80 が設定、コマンド利用可能、0xFE - K64F が設定、コマンド確認・処理中。0x00-0xF0 = コマンド完了および処理結果。
union {
uint8_t dirSector; // 仮想ディレクトリセクター番号。
uint8_t fileSector; // オープン中のファイル内のセクター。
uint8_t vDriveNo; // 仮想または物理 SD カードドライブ番号。
};
union {
struct {
uint16_t trackNo; // トラックとセクターを持つ仮想ドライブのトラック番号。
uint16_t sectorNo; // トラックとセクターを持つ仮想ドライブのセクター番号。注:LBA アクセスの場合は 32 ビットで fileNo/fileType を上書きします(生の SD アクセス中は使用されません)。
};
uint32_t sectorLBA; // LBA アクセスの場合、32 ビットで生の SD アクセス中に使用されます。
struct {
uint8_t memTarget; // 操作対象メモリ、0 = tranZPUter、1 = メインボード。
uint8_t spare1; // 未使用変数。
uint16_t spare2; // 未使用変数。
};
};
uint8_t fileNo; // 最後のディレクトリリスト内のファイル番号(オープン/更新用)。
uint8_t fileType; // 処理するファイルの種類。
union {
uint16_t loadAddr; // 動的ロードが必要な ROM/ファイルイメージのロードアドレス。
uint16_t saveAddr; // 動的保存が必要な ROM/ファイルイメージの保存アドレス。
uint16_t cpuFreq; // CPU 周波数(KHz)- 代替 CPU クロック周波数の設定に使用。
};
union {
uint16_t loadSize; // ロードする ROM/ファイルのサイズ。
uint16_t saveSize; // 保存する ROM/ファイルのサイズ。
};
uint8_t directory[TZSVC_DIRNAME_SIZE]; // ファイルを検索するディレクトリ。指定がない場合は MZF がデフォルト。
uint8_t filename[TZSVC_FILENAME_SIZE]; // オープンまたは作成するファイル。
uint8_t wildcard[TZSVC_WILDCARD_SIZE]; // ディレクトリ検索に適用する基本ワイルドカードパターンマッチフィルター。
uint8_t sector[TZSVC_SECTOR_SIZE]; // ディスク読み書き用のセクターバッファー。
} t_svcControl;
通信はすべて Z80 が開始します。サービスが必要な場合、Z80 は svcControl.cmd フィールドにコマンドを書き込み、svcControl.result フィールドを REQUEST に設定します。次に Z80 は出力ポート(設定可能ですが通常は 0x68)に書き込み、これにより K64F に割り込みが送られます。K64F はコマンドを読み取り、svcControl.result を PROCESSING に設定します。Z80 はこのハンドシェイクを待ち、タイムアウト期間後に受信できない場合はコマンドを再送します。次に Z80 は有効な結果を待ち、合理的な時間内に結果が得られない場合はシーケンスを再試行し、複数回の試行後にエラーで諦めます。
K64F がコマンドを処理し(例:ディレクトリ読み取り)、必要なデータを構造体に格納すると、svcControl.result に有効な結果(成功、失敗またはエラーコード)を設定してトランザクションを完了します。
API コマンドリスト
| コマンド | Cmd# | 説明 |
|---|---|---|
| TZSVC_CMD_READDIR | 0x01 | ディレクトリを開き、最初のエントリーブロックを返します。 |
| TZSVC_CMD_NEXTDIR | 0x02 | 開いているディレクトリの次のブロックを返します。 |
| TZSVC_CMD_READFILE | 0x03 | ファイルを開き、最初のブロックを返します。 |
| TZSVC_CMD_NEXTREADFILE | 0x04 | 開いているファイルの次のブロックを返します。 |
| TZSVC_CMD_WRITEFILE | 0x05 | ファイルを作成し、最初のブロックを保存します。 |
| TZSVC_CMD_NEXTWRITEFILE | 0x06 | 開いているファイルに次のブロックを書き込みます。 |
| TZSVC_CMD_CLOSE | 0x07 | 開いているファイルまたはディレクトリを閉じます。 |
| TZSVC_CMD_LOADFILE | 0x08 | tranZPUter メモリに直接ファイルをロードします。 |
| TZSVC_CMD_SAVEFILE | 0x09 | tranZPUter メモリから直接ファイルを保存します。 |
| TZSVC_CMD_ERASEFILE | 0x0a | SD カード上のファイルを消去します。 |
| TZSVC_CMD_CHANGEDIR | 0x0b | SD カード上のアクティブディレクトリを変更します。 |
| TZSVC_CMD_LOAD40ABIOS | 0x20 | SA1510 BIOS の 40 列バージョンのロードをリクエストし、Sharp MZ-80A に合わせて周波数を変更します。 |
| TZSVC_CMD_LOAD80ABIOS | 0x21 | SA1510 BIOS の 80 列バージョンのロードをリクエストし、Sharp MZ-80A に合わせて周波数を変更します。 |
| TZSVC_CMD_LOAD700BIOS40 | 0x22 | 1Z-013A MZ-700 BIOS の 40 列バージョンのロードをリクエストし、Sharp MZ-700 に合わせて周波数を変更してメモリページコマンドを実行します。 |
| TZSVC_CMD_LOAD700BIOS80 | 0x23 | 1Z-013A MZ-700 BIOS の 80 列バージョンのロードをリクエストし、Sharp MZ-700 に合わせて周波数を変更してメモリページコマンドを実行します。 |
| TZSVC_CMD_LOAD80BIPL | 0x24 | MZ-80B IPL のロードをリクエストし、周波数を切り替えて Sharp MZ-80B 互換モードを有効にします。 |
| TZSVC_CMD_LOAD800BIOS | 0x25 | MZ800 9Z-504M BIOS のロードをリクエストするサービスコマンド。 |
| TZSVC_CMD_LOAD2000IPL | 0x26 | MZ-2000 IPL のロードをリクエストするサービスコマンド。 |
| TZSVC_CMD_LOADTZFS | 0x2F | TZFS のロードをリクエストするサービスコマンド。通常モニター BIOS を持たないマシン(MZ-80B/MZ-2000 など)が手動で TZFS をリクエストする際に使用します。 |
| TZSVC_CMD_LOADBDOS | 0x30 | CP/M BDOS+CCP を再ロードします。 |
| TZSVC_CMD_ADDSDDRIVE | 0x31 | CP/M ディスクをドライブ番号にアタッチします。 |
| TZSVC_CMD_READSDDRIVE | 0x32 | アタッチされた SD ファイルを CP/M ディスクドライブとして読み取ります。 |
| TZSVC_CMD_WRITESDDRIVE | 0x33 | アタッチされた SD ファイルである CP/M ディスクドライブに書き込みます。 |
| TZSVC_CMD_CPU_BASEFREQ | 0x40 | tranZPUter が Z80 にメインボードの周波数を使用するよう設定します。 |
| TZSVC_CMD_CPU_ALTFREQ | 0x41 | Z80 を K64F 生成クロック(代替周波数)に切り替えます。 |
| TZSVC_CMD_CPU_CHGFREQ | 0x42 | K64F が生成する Z80 の周波数を svcControl.cpuFreq で指定したヘルツ値に変更します。Z80 はこの周波数に最も近いタイマー分解能でクロックされます。 |
| TZSVC_CMD_CPU_SETZ80 | 0x50 | 外部の Z80 ハード CPU に切り替えます。 |
| TZSVC_CMD_CPU_SETT80 | 0x51 | 内部の T80 ソフト CPU に切り替えます。 |
| TZSVC_CMD_CPU_SETZPUEVO | 0x52 | 内部の ZPU Evolution CPU に切り替えます。 |
| TZSVC_CMD_EMU_SETMZ80K | 0x53 | 内部 Sharp MZ シリーズエミュレーションの MZ80K に切り替えるサービスコマンド。 |
| TZSVC_CMD_EMU_SETMZ80C | 0x54 | 同上(MZ80C)。 |
| TZSVC_CMD_EMU_SETMZ1200 | 0x55 | 同上(MZ1200)。 |
| TZSVC_CMD_EMU_SETMZ80A | 0x56 | 同上(MZ80A)。 |
| TZSVC_CMD_EMU_SETMZ700 | 0x57 | 同上(MZ700)。 |
| TZSVC_CMD_EMU_SETMZ800 | 0x58 | 同上(MZ800)。 |
| TZSVC_CMD_EMU_SETMZ80B | 0x59 | 同上(MZ80B)。 |
| TZSVC_CMD_EMU_SETMZ2000 | 0x5A | 同上(MZ2000)。 |
| TZSVC_CMD_SD_DISKINIT | 0x60 | 基盤となる SD カードを初期化して生のアクセスを提供します。 |
| TZSVC_CMD_SD_READSECTOR | 0x61 | 基盤となる SD カードへの生の読み取りアクセスを提供します。 |
| TZSVC_CMD_SD_WRITESECTOR | 0x62 | 基盤となる SD カードへの生の書き込みアクセスを提供します。 |
| TZSVC_CMD_EXIT | 0x7F | TZFS を終了し、マシンを元のモードで再起動します。 |
API 結果リスト
| コマンド | Result# | 説明 |
|---|---|---|
| TZSVC_STATUS_OK | 0x00 | K64F の処理が正常に完了しました。 |
| TZSVC_STATUS_FILE_ERROR | 0x01 | ファイルまたはディレクトリのエラーです。 |
| TZSVC_STATUS_BAD_CMD | 0x02 | 不正なサービスコマンドがリクエストされました。 |
| TZSVC_STATUS_BAD_REQ | 0x03 | 不正なリクエストが行われました。サービスステータスリクエストフラグが設定されていません。 |
| TZSVC_STATUS_REQUEST | 0xFE | Z80 がリクエストを送信しました。 |
| TZSVC_STATUS_PROCESSING | 0xFF | K64F がコマンドを処理中です。 |
Z80 メモリモード
メモリモードの基本は、デコーダーが Flash RAM ベースだった tranZPUter SW プロジェクトのバージョン 1 に由来します。MZ-700、CP/M など当時想定されたすべてのメモリモデルが考案されました。これらのモードはビデオモジュールなどの新機能に対応するため、後の設計で CPLD 内で拡張され、今後もさらに拡張される予定です。
定義済みのモードを以下の表に示します。将来の拡張のためにいくつかのスロットが利用可能です。
| モード | ターゲット | 範囲 | ブロック | 機能 | DRAM リフレッシュ | 説明 |
|---|---|---|---|---|---|---|
| 0 | オリジナル | 0000:0FFF | メイン | MROM | あり | デフォルト。通常のホスト(例:Sharp MZ80A/MZ-700)動作モード。すべてのメモリと I/O(tranZPUter 制御の I/O ブロックを除く)はメインボード上にあります。 |
| 1000:CFFF | メイン | D-RAM | ||||
| D000:D7FF | メイン | VRAM | ||||
| D800:DFFF | メイン | ARAM | ||||
| E000:E7FF | メイン | MM I/O | ||||
| E800:EFFF | メイン | ユーザー ROM | ||||
| F000:FFFF | メイン | FDC ROM | ||||
| 1 | オリジナル+ UROM | 0000:0FFF | メイン | MROM | あり | 0 と同様ですが、ユーザー ROM が tranZPUter RAM にマップされ、ロード可能な BIOS イメージに使用されます。 |
| 1000:CFFF | メイン | D-RAM | ||||
| D000:D7FF | メイン | VRAM | ||||
| D800:DFFF | メイン | ARAM | ||||
| E000:E7FF | メイン | MM I/O | ||||
| E800:EFFF | RAM 0 | ユーザー ROM | ||||
| F000:FFFF | メイン | FDC ROM | ||||
| 2 | TZFS | 0000:0FFF | RAM 0 | MROM | なし | TZFS または tranZPUter RAM を使用する他のソフトウェアのブートモード。ユーザー ROM はモニターに ROM として表示されるため、通常の起動手順の一部として 0xE800 のエントリーポイントが呼び出されます。0xE800 に保存されたソフトウェアはメインボードを切り離して必要に応じて tranZPUter RAM で動作できます。F3FE と F7FE に 2 バイト幅のフロッピーディスクコントローラー用の小さな穴が存在し、これらの位置はメインボード上にある必要があります。フロッピーディスクコントローラーはデータの読み書きにこれらを使用します(Z80 は FDC をポーリングするほど高速ではないため)。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | メイン | VRAM | ||||
| D800:DFFF | メイン | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | ユーザー ROM | ||||
| F000:FFFF | RAM 0 | FDC ROM | ||||
| 3 | TZFS | 0000:0FFF | RAM 0 | MROM | なし | TZFS のページモード。F000:FFFF 以外のすべての RAM が tranZPUter ブロック 0 にあり、F000:FFFF はブロック 1 にあります(TZFS の page bank2)。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | RAM 0 | VRAM | ||||
| D800:DFFF | RAM 0 | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | ユーザー ROM | ||||
| F000:FFFF | RAM 1 | FDC ROM | ||||
| 4 | TZFS | 0000:0FFF | RAM 0 | MROM | なし | モード 3 と同様ですが F000:FFFF がブロック 2 にあります(TZFS の page bank3)。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | RAM 0 | VRAM | ||||
| D800:DFFF | RAM 0 | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | ユーザー ROM | ||||
| F000:FFFF | RAM 2 | FDC ROM | ||||
| 5 | TZFS | 0000:0FFF | RAM 0 | MROM | なし | モード 3 と同様ですが F000:FFFF がブロック 3 にあります(TZFS の page bank4)。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | RAM 0 | VRAM | ||||
| D800:DFFF | RAM 0 | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | ユーザー ROM | ||||
| F000:FFFF | RAM 3 | FDC ROM | ||||
| 6 | CP/M | 0000:FFFF | RAM 4 | メイン RAM | なし | CP/M。すべてのメモリが tranZPUter ボード上にあります。F3C0:F3FF と F7C0:F7FF(フロッピーディスクページングベクター)はメインボード上に存在する特別なケースです。 |
| 7 | CP/M | 0000:0100 | RAM 4 | CP/M ベクター | なし | CP/M メイン CBIOS 領域。CBIOS に 48K + 2K が利用可能で、メインボードハードウェアへの直接アクセスも可能。F000:FFFF はバンク 4 に残り、このメモリモードとモード 6 の間のゲートウェイとして使用されます。 |
| 0100:CFFF | RAM 5 | メイン RAM | ||||
| D000:D7FF | メイン | VRAM | ||||
| D800:DFFF | メイン | ARAM | ||||
| E000:E7FF | メイン | MM I/O | ||||
| E800:EFFF | RAM 5 | ユーザー ROM | ||||
| F000:FFFF | RAM 4 | FDC ROM | ||||
| 8 | オリジナル+ Emu | 0000:0FFF | メイン | MROM | あり | オリジナルモードですが、メイン RAM が tranZPUter バンク 0 にあります。このモードは MZ-700 プログラムなど、起動時にバンク切り替えを行い、ロードされたプログラムが tranZPUter RAM バンク内のメインメモリにあることを期待するプログラムをブートストラップするために使用されます。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | メイン | VRAM | ||||
| D800:DFFF | メイン | ARAM | ||||
| E000:E7FF | メイン | MM I/O | ||||
| E800:EFFF | メイン | ユーザー ROM | ||||
| F000:FFFF | メイン | FDC ROM | ||||
| 10 | MZ-700 | 0000:0FFF | RAM 6 | メイン RAM | なし | MZ-700 モード(OUT $E0)- モニター RAM をメイン RAM に置き換えます。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | メイン | VRAM | ||||
| D800:DFFF | メイン | ARAM | ||||
| E000:E7FF | メイン | MM I/O | ||||
| E800:EFFF | メイン | ユーザー ROM | ||||
| F000:FFFF | メイン | FDC ROM | ||||
| 11 | MZ-700 | 0000:0FFF | RAM 0 | MROM | なし | MZ-700 モード(OUT $E0 + $E1)- I/O およびビデオブロックをメイン RAM に置き換えます。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | RAM 6 | VRAM | ||||
| D800:DFFF | RAM 6 | ARAM | ||||
| E000:E7FF | RAM 6 | MM I/O | ||||
| E800:EFFF | RAM 6 | ユーザー ROM | ||||
| F000:FFFF | RAM 6 | FDC ROM | ||||
| 12 | MZ-700 | 0000:0FFF | RAM 6 | メイン RAM | なし | MZ-700 モード(OUT $E1 + $E2)- モニター RAM を RAM に置き換え、I/O およびビデオブロックをメイン RAM に置き換えます。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:D7FF | RAM 6 | VRAM | ||||
| D800:DFFF | RAM 6 | ARAM | ||||
| E000:E7FF | RAM 6 | MM I/O | ||||
| E800:EFFF | RAM 6 | ユーザー ROM | ||||
| F000:FFFF | RAM 6 | FDC ROM | ||||
| 13 | MZ-700 | 0000:0FFF | RAM 0 | MROM | なし | MZ-700 モード(OUT $E5)- 上位メモリをロックアウトし、モニター ROM をページイン。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:FFFF | n/a | 未定義 | ||||
| 14 | MZ-700 | 0000:0FFF | RAM 6 | メイン RAM | なし | MZ-700 モード(OUT $E6)- モニター RAM を RAM に置き換え、上位メモリをロックアウト。 |
| 1000:CFFF | RAM 0 | メイン RAM | ||||
| D000:FFFF | n/a | 未定義 | ||||
| 15 | MZ-800/MZ-700 | 以下の表を参照。メモリモードは MZ-800 に準じます。 | ||||
| 16 | MZ2000 | 0000:7FFF | RAM 0 | IPL ROM | なし | MZ2000 ハードウェアモード。MZ2000 実行時構成レジスターに従って設定されます。 |
| 8000:FFFF | RAM 6 | 下位 32K RAM | IPL モード中、下位 32K RAM が上位 32K アドレスにマップされます。 | |||
| 0000:FFFF | RAM 6 | メイン RAM | RUN モード中、フル 64K RAM が Z80 アドレス空間にマップされます。 | |||
| D000:DFFF | メイン | VRAM | PIO ポート A ビット 7 がセット、ビット 6 がクリアの場合、ビデオ RAM が Z80 アドレス空間にマップされます。 | |||
| C000:FFFF | メイン | GRAM | PIO ポート A ビット 7 がセット、ビット 6 がセットの場合、グラフィックス RAM が Z80 アドレス空間にマップされます。 | |||
| 21 | K64F アクセス | 000000:FFFFFF | n/a | FPGA リソース | なし | フル 24 ビット Z80 アドレスを通じて FPGA メモリにアクセスします。通常は K64F から使用します。 |
| 22 | FPGA アクセス | 0000:FFFF | n/a | ホストリソース | あり | ホストメインボードの 64K アドレス空間のみへのアクセス。 |
| 23 | K64F アクセス | 000000:FFFFFF | RAM | メイン RAM | なし | K64F がフル 512K RAM をアドレス指定して tranZPUter ボード上のすべてのメモリと I/O にアクセスします。 |
| 24 | K64F アクセス | 0000:FFFF | RAM 0 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 0 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
| 25 | K64F アクセス | 0000:FFFF | RAM 1 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 1 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
| 26 | K64F アクセス | 0000:FFFF | RAM 2 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 2 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
| 27 | K64F アクセス | 0000:FFFF | RAM 3 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 3 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
| 28 | K64F アクセス | 0000:FFFF | RAM 4 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 4 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
| 29 | K64F アクセス | 0000:FFFF | RAM 5 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 5 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
| 30 | K64F アクセス | 0000:FFFF | RAM 6 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 6 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
| 31 | K64F アクセス | 0000:FFFF | RAM 7 | メイン RAM | あり/なし | すべてのメモリと I/O が tranZPUter ボード上にあります。64K ブロック 7 を選択。このモード使用時、tranZPUter ライブラリがメインボード DRAM をリフレッシュします。 |
MROM = モニター ROM、オリジナルのブートファームウェア(例:SA-1510)
D-RAM = メインボード上のダイナミック RAM
VRAM = メインボード上のビデオ RAM
ARAM = メインボード上のカラーアトリビュート RAM
MM I/O = メインボード上のメモリマップド I/O コントローラー
RAM 0 .. 7 = 512K スタティック RAM チップ内の 64K RAM ブロック番号
メイン = ホストコンピューターのメインボード(例:Sharp MZ-80A メインボード)
MZ700/MZ800 メモリモード
| MZ-700 | MZ-800 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| レジスター | 0000:0FFF | 1000:1FFF | 1000:CFFF | C000:CFFF | D000:FFFF | 0000:7FFF | 1000:1FFF | 2000:7FFF | 8000:BFFF | C000:CFFF | C000:DFFF | E000:FFFF |
| OUT 0xE0 | DRAM | DRAM | ||||||||||
| OUT 0xE1 | DRAM | DRAM | ||||||||||
| OUT 0xE2 | MONITOR | MONITOR | ||||||||||
| OUT 0xE3 | メモリマップド I/O | 上位モニター ROM | ||||||||||
| OUT 0xE4 | MONITOR | DRAM | メモリマップド I/O | MONITOR | CGROM | DRAM | VRAM | DRAM | 上位モニター ROM | |||
| OUT 0xE5 | 禁止 | 禁止 | ||||||||||
| OUT 0xE6 | <復帰> | <復帰> | ||||||||||
| IN 0xE0 | CGROM* | VRAM* | CGROM | VRAM | ||||||||
| IN 0xE1 | DRAM | DRAM | <復帰> | DRAM |
<復帰> = 対応するコマンドが実行される前の状態に戻ります。
* = MZ-800 ホストのみ。
Z80 CPU 周波数切り替えポート
| ポート | 方向 | 機能 |
|---|---|---|
| 0x62 | W | Z80 CPU の周波数を第 2 クロックソース(K64F または外部発振器が生成する周波数)に切り替えます。 |
| 0x64 | W | Z80 CPU の周波数をデフォルトのホストソースに切り替えます。RESET 時のデフォルトです。 |
| 0x66 | R | ビット [0] - クロック選択。0 = ホストクロック、1 = 第 2 クロックソース(K64F または外部発振器)。 |
クレジット
第三者の設計をベースにしたり使用したりした場合は、元の作者の著作権表示を含めています。私の知る限り、すべてのサードパーティソフトウェアはオープンソースで自由に使用可能です。ライセンス制限のあるコンポーネントが見つかった場合は、このリポジトリから削除し、適切なリンク/設定を提供します。
ライセンス
このデザイン(ハードウェアおよびソフトウェア)は GNU パブリックライセンス v3 の下でライセンスされています。
GNU パブリックライセンス v3
ソースファイルは有用であることを期待して配布されますが、いかなる保証もありません。商品性や特定目的への適合性の黙示の保証を含みますが、これらに限りません。詳細については GNU 一般公衆ライセンスを参照してください。
このプログラムとともに GNU 一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ を参照してください。