tranZPUterファイリングシステム (TZFS)

概要

TranZputer ファイリングシステム(TZFS)は、Rom Disk ハードウェアアップグレードボードで使用されている Rom ファイリングシステム を移植したものです。同じソフトウェア機能の多くを再利用しているため、同様のサービスを提供しますが、異なるメモリモデルを使用している点が相違点です。その目的は、SD カードに保存されたファイルを操作する手段を提供し、TZFS モニターという拡張コマンドラインインターフェイスを提供することです。コマンドセットには SD ファイルの操作やバックアップ、さらに MZ700/800 コンピューターに見られる多数のコマンドが含まれています。
仮想 I/O プロセッサーを搭載した tranZPUter FusionX の登場により、このソフトウェアは tranZPUter リポジトリから独立したモジュールとして分離されました。TZFS は、新しい tranZPUterFusionX および tranZPUterFusion デバイスを含む、tranZPUter シリーズのすべての機器で動作します。
SD カードと ROM は K64F I/O プロセッサーによって管理されます。共通の共有メモリブロック(640 バイト)を物理 I/O リクエストと組み合わせて使用し、Z80 と K64F の間でコマンドとデータをやり取りするサービスリクエスト API が実装されています。たとえば、Z80 が SD ファイルを読み取ろうとする際は、メモリブロック内にファイルオープンリクエストを作成し、物理 I/O 操作を実行します。K64F は割り込みによってこれを検知し、ファイルを開いて共有メモリ内に 1 セクターずつデータを Z80 に返します。
TZFS は、ホストモニタープログラム(SA-1510、1Z-013A など)の拡張版としてユーザーに提供され、Flash RAM および SD カードデバイスの両方でアプリケーションの保存・取得が可能です。また、SA-5510 などの一部の更新されたアプリケーションは、必要に応じて SD カードへの読み書きが可能になっています。

TZFS モニター

Sharp MZ-700 の電源投入時には、モニターと呼ばれるコマンドラインインターフェイスが表示され、テープのブートストラップや事前にロードされたソフトウェアの手動実行などの基本操作が可能です。TZFS モニターはこの基本モニターの拡張版であり、tranZPUter SW カードをメインボードの Z80 ソケットに挿入した後、モニタープロンプト「*」で以下のコマンドを入力することで TZFS が起動します:

JE800<cr>

コンピューターの起動時に直接 TZFS へ自動起動することも可能です。これを行うには、SD カードのルートディレクトリに以下の名前の空ファイルを作成してください:

'TZFSBOOT.FLG'

K64F プロセッサーの起動時に zOS が起動し、このファイルを検知すると、Sharp MZ-700 上で TZFS が自動起動するための処理が実行されます。

また、SD カードのルートに `AUTOEXEC.BAT` という名前のファイルが存在する場合、TZFS は起動後にそのファイルに記載されたコマンドを 1 行ずつ実行します。これにより、たとえばデフォルトの CPU 周波数の設定や、特定のマシンモードへの自動切り替えなどが可能です。

TZFS が起動すると、通常の 1Z-013A モニターのサインオンバナーが表示され、正常に動作している場合は「+ TZFS」という接尾辞が追加されます。通常の「*」プロンプトが表示され、元の 1Z-013A コマンドに加えて拡張コマンドセットが使用できます。これらの一部は MZ80A / MZ700 / MZ800 シリーズで見られたものであり、その他はカスタムコマンドです。コマンドの全セットを以下の表に示します:

コマンド パラメーター 説明
4 なし 40 文字モードに切り替えます。
8 なし 80 文字モードに切り替えます。
40A なし Sharp MZ-80A の 40 カラム BIOS およびモードに切り替えます。代わりに MZ80A エミュレーションコマンドを使用してください。
80A なし Sharp MZ-80A の 80 カラム BIOS およびモードに切り替えます。代わりに MZ80A エミュレーションコマンドを使用してください。
80B なし Sharp MZ-80B 互換モードに切り替えます。
700 なし Sharp MZ-700 の 40 カラム BIOS およびモードに切り替えます。代わりに MZ700 エミュレーションコマンドを使用してください。
7008 なし Sharp MZ-700 の 80 カラム BIOS およびモードに切り替えます。代わりに MZ700 エミュレーションコマンドを使用してください。
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 マシンは一般的に「クリーンマシン」と呼ばれており、これは永続的なストレージ(ROM)にほとんどまたはまったくソフトウェアが存在せず、すべてテープやフロッピーディスクからロードする必要があることを意味します。
そのため、ストレージにアクセスするすべてのアプリケーションは、TZFS モニターから高速にロードされる点を除き、拡張されたストレージ機能を認識していませんでした。
マシンをより使いやすくするために、一部の主要なアプリケーションが TZFS を使用するよう更新され、また由緒ある Microsoft Basic がこのプラットフォームに移植されました。
CP/M v2.23 についても、TZFS の機能を活用するためのカスタム CBIOS を作成することで対応しました。
このセクションでは、更新されたアプリケーションとアップグレードされた機能の使用方法について説明します。

Sharp BASIC SA-5510

Rom ファイリングシステムのさらなる開発の過程で、RFS のもとで SD カードと互換性を持たせるために SA-5510 BASIC インタープリター(MZ-80A の標準)を逆アセンブルしました。このインタープリターは Sharp MZ-700/800 と互換性があるため、TZFS に移植することにしました。

インタープリターのバイト位置は重要です。一部のプログラムは既知のアドレスに機能があることを前提としているため、逆アセンブルは正確に行う必要があり、修正・拡張はメインプログラムの外部で行わなければなりませんでした。幸い、インタープリター内に 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> を指定しない場合は元のメインボード周波数に戻ります。
内蔵カセットドライブに LOAD または SAVE するには、以下のコマンドを使用します:
    CDC
    LOAD
または
    CDC
    SAVE "EXAMPLE"

新バージョンの BASIC SA-5510 は「BASIC SA-5510-TZ」という名称です。

注:ランダムファイルの読み書き BASIC 操作については、そのロジックを完全に理解していないため、まだ完全には実装していません。分析できる適切なプログラムが入手でき次第、CMT 仕様に従って動作するよう TZFS を適合させる予定です。


Microsoft BASIC

Sharp マシンにはカセットやフロッピーで使用できる複数バージョンの BASIC がありますが、互換性に限りがあります(例:MZ80A の SA5510 と MZ-700 の S-BASIC は異なります)。各マシンにはディスクドライブ用の SA-6510 や OM-500 などのサードパーティバージョンなど、複数のバリアントがあります。これらの BASIC インタープリターのほとんどは、Sharp MZ80K/A/700 での使用を想定していれば TZFS 上で問題なく動作しますが、CMT(カセット)またはフロッピーストレージに限定されています。

既存の 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 のバージョンを作成し、不足していたテープコマンドを含む利用可能なコマンドを記述・拡張しました。

プロジェクトの発展に伴い、Microsoft BASIC はさまざまな設定をサポートする必要が生じました。RFS 用に 5 つ、TZFS 用に 5 つです。RFS バージョンを除き、TZFS を実行する tranZPUter では以下が利用可能です:
  • 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 カセットイメージコンバーターツール
NASCOM BASIC プログラムはインターネット上でカセットイメージファイルとして見つかることがあります。これらのファイルには、埋め込まれたトークン化 BASIC コードとともにすべてのテープフォーマットデータが含まれています。これらのファイルを使用できるようにするため、テープフォーマットデータを取り除き、BASIC コードを再構築するコンバータープログラムを作成しました。さらに、このバージョンの BASIC は新しいコマンドをサポートするよう拡張されているため、トークン値が変更されており、このプログラムは変換中にトークン値を自動的に更新します。

コンバーターはコマンドラインで動作するように設計されており、その使用方法は以下の通りです:

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

CPM v2.23 は RFS プロジェクトから tranZPUter に移植され、RFS での 48K に対して利用可能な 64K メモリをフルに活用できるよう拡張されました。カスタム BIOS は tranZPUter メモリを使用し、ロジックを別のメモリバンクに再配置することで、貴重な CP/M TPA スペースを節約しています。

以下のファイルが 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

各ステップを手動で実行することもできます:

  1. <tools>/assemble_tzfs.sh を使って TZFS バイナリを作成します。これにより、すべての TZFS バンクを含む <roms>/tzfs.rom が生成されます。
  2. <tools>/assemble_cpm.sh を使って CP/M バイナリを作成します。これにより CP/M MZF ファイルと CBIOS バンクが生成されます。
  3. <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 などが生成されます。
  4. <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 にアップロードしています)。

エラーが発生した場合、スクリプトは適切なエラーメッセージとともに中断します。


設計の詳細

このセクションでは、TZFS がホスト(オリジナルコンピューター)でどのように機能するか、また tranZPUter I/O プロセッサーとのインタラクションを理解するための内部設計情報を提供します。

K64F Z80 ホスト API

API は Z80 の 64K メモリ空間内の共通 RAM ブロックをベースとしており、プロセッサー間の通信がここで行われます。K64F 側では C の構造体として宣言され、Z80 側ではメモリ変数へのアセンブラー参照として宣言されます。
// 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 メモリモード

tranZPUter ハードウェア設計の特徴の一つは、512 マクロセル CPLD 内でメモリマップを自由に作成できることです。Z80 アドレス空間内(または 18 ビット幅までのソフト CPU アドレス空間)で、512K スタティック RAM、64K メインボード RAM、ビデオ RAM、I/O を使用した任意のメモリマップをブール方程式で構築し、メモリモードに割り当てることができます。メモリモードは Z80 ソフトウェアが必要に応じて選択します。この機能は TZFS、CP/M、Sharp MZ-700 および MZ-80B の互換モードを実現するために活用されています。

メモリモードの基本は、デコーダーが 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

このプロジェクトで GPL v3 として表示されているソースおよびバイナリファイルはフリーソフトウェアです。Free Software Foundation が発行する GNU 一般公衆ライセンスのバージョン 3 またはそれ以降のバージョンの条件の下で、再配布および修正することができます。

ソースファイルは有用であることを期待して配布されますが、いかなる保証もありません。商品性や特定目的への適合性の黙示の保証を含みますが、これらに限りません。詳細については GNU 一般公衆ライセンスを参照してください。

このプログラムとともに GNU 一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ を参照してください。