tranZPUter SW-700
序文
v1.3 ハードウェアの Git ブランチ v2.2-tranZPUter-SW-HW_700_v1.3 における初期リリースは Sharp MZ-700 ホストを対象としており、機能と性能の面でマシンを大幅にアップグレードし、信頼性が高く十分に成熟したものとなっています。
最近、tranZPUter SW-700 プロジェクトを Sharp MZ-2000 に移植し、MZ-2000 互換のビデオモードを提供するだけでなく、Sharp MZ シリーズ FPGA エミュレーション の組み込みも含めて VHDL を大幅にアップグレードしました。この変更は大規模なものであり、CPLD と VHDL ロジックの基本的な構造変更、ビデオ信号ドーターボードアダプター(試作品を以下に掲載)、および MZ-2000 グラフィックスロジックをサポートするためのビデオコントローラーの更新が必要でした。
tranZPUter SW-700 上で動作する MZ-2000 グラフィックスコントローラーの、オリジナルの MZ-1R01 グラフィックスボードに対する利点は、内部モニターが緑のレベルでカラーを表示できるようになり、グラフィックスとゲームが内部・外部モニターの両方で完全に使用可能になったことです。
概要
このアップグレードは、CP/M v2.2 の 64K バージョン(および移植が完了次第、最大 512K の CP/M v3)を可能にする追加 RAM を提供し、Sharp MZ-700 マザーボードペリフェラルにアクセスする際にオリジナルの速度を維持しながらプロセッサの速度を向上させることで、Z80 ハードウェアの機能を拡張します。
この設計は現在成熟して安定していますが、ソフト CPU やビデオハードウェアの強化など、機能を向上させるための開発は継続しています。
tranZPUter SW-700
tranZPUter SW-700 は tranZPUter / tranZPUter SW の設計を引き継ぎ、ホストビデオをアップグレードするためのビデオモジュール機能を追加しています。また、基盤となる Z80 ハードウェアをアップグレードして高いパフォーマンスと増大したメモリを実現します。tranZPUter SW-700 は FPGA 上の VHDL ベースの ZPU Evo ではなく、要件へのソフトウェア的なアプローチであるため、ZPU Evo の代わりに Freescale K64F ARM Cortex-M4 を組み込んでいます。このプロジェクトは、MZ-700 向けのソフトウェアを表す SW-700 というサフィックスを追加して設計を区別しています。
tranZPUter SW-700 の設計は Z80 ハードウェアをアップグレードし、Sharp MZ-700 マザーボードから切り離した状態で、Z84C0020 20MHz CPU をオーバークロックすることで 24MHz にて信頼性が検証・確認されたより高いクロックレートでプロセッサを動作させることができます。CP/M や DBase II のようなデータベースなどのプログラムに、CPU の高性能化は恩恵をもたらします。
異なる CPU を提供するには、たとえば PiCoPro で使用されているような既存の ARM ベースのソフトウェア CPU エミュレーションを利用してこの設計のインターフェースを介して MZ-700 バスの CPU シグナルを使用するように適応させるか、FPGA にインスタンス化されたハードウェアベースの「ソフト」プロセッサを使用するかを選択できます。プログラムメモリは MZ-700 マザーボードの 64K、tranZPUter の 512K、高速 K64F の 256K メモリ、FPGA BRAM、またはそれらの組み合わせのいずれかになります。キャッシュ目的を除いて、ソフト/「ソフト」CPU を使用する際に MZ-700 のメモリを使用する必要は実際にはありません。ローカルの K64F/FPGA RAM を持つソフト/「ソフト」CPU を使用する利点は、パフォーマンスが向上し、代替ソフトウェアにアクセスできることです。
ギャラリーには現在の設計の写真があり、ファイルは Gitea にアップロードされており、比較的安定しています。WIP ファイルは常に変動しているためアップロードされません。
ハードウェア
バスマスタリングは、Z80 バスの制御を取得し、メインメモリと SD カード間でデータを転送したり、I/O プロセッサとメニュー表示のためのビデオディスプレイバッファ間でデータを転送するために使用されます。また、ソフトプロセッサがハード Z80 を完全にアイドル状態にして、メインコンピューターの CPU として機能する場合にも使用されます。つまり、ソフト CPU エミュレーターを使用することで、ローカルメモリでアプリケーションを処理し、必要に応じてホストマシンの I/O とビデオバッファ(オリジナルビデオで実行している場合、拡張ビデオはフルスピードで動作します)へのアクセスを遅らせることで、まったく異なるコンピューティング体験を提供します。6809 または 68000 ベースの Sharp MZ-700 を想像してみてください!
この設計はオリジナルの Z80 をドーターカードに引き上げ、必要に応じて制御できるよう複数のシグナルを再ルーティングすることを中心としています。また、マザーボードからビデオ出力を取得し、CPLD を介して FPGA ベースのビデオモジュールに内部ルーティングし、新しいコネクタを介してモジュレーターに再ルーティングする前に、オリジナルまたは拡張ビデオを選択できます。
設計バージョン v1.0 と v1.1 は内部設計であり、リポジトリには表示されません。v1.2 は MZ-700 で組み立てられテストされた最初の設計です。この設計はソフトウェアと FPGA の開発を進め、安定性と信頼性を検証するために使用されました。v1.3 は現在のメインストリーム設計であり、より強力な FPGA、Cyclone IV 75K(またはビルド時に選択可能な Cyclone IV 115K)をベースとしており、より高解像度のグラフィックスと、Z80 クローンの T80 や ZPU Evolution などの代替「ソフト」ハードウェアベースのプロセッサを使用する機能が可能となっています。
v1.2 と v1.3 は、ロジックとソフトウェアに根本的な違いがありますが、git でそれぞれのブランチを維持しています。どちらも実証済みの設計であり、v1.2 の方が製造コストが安くなっています。
v1.2 回路図
バージョン 1.2 は tranZPUter SW-700 設計の最初の公式リリースです。Sharp MZ-80A tranZPUter SW v2.2 と Video Module v2.0 をベースに、Sharp MZ-700 プラットフォームに最適化されています。
v1.2 Z80 アップグレード回路図

上記の回路図は、ボードを MZ-700 に設置できるように設計されており、CPLD は電源投入時に追加機能が有効にならず、マシンがオリジナルの状態になるように設定されます。Z80 が CPLD の I/O レジスタに書き込むことで、必要に応じて機能を有効にすることができます。これにより、ソフトウェアとの最大互換性を維持するためにマシンをオリジナルに保つという要件を満たします。
v1.2 K64 I/O プロセッサー

組み込みデバッグ、開発・学習ツール、SD カード、ソフトプロセッサ、オフロードされたコプロセッササービスなどの拡張機能を提供するために、Freescale K64F ARM Cortex-M4 CPU が設計に追加されています。このプロセッサは CPLD/Z80 との必要なハードウェア接続をすべて備えており、tranZPUter SW-700 ボードや MZ-700 マザーボードのあらゆる側面を読み取ったり制御したりする機能を持っています。デフォルト条件では、K64F は Z80 と連携して TZFS 拡張モニターをロードし、SD ドライブを提供し、MZ-80A などの代替 MZ シリーズエミュレーションの提供を支援します。
K64F は組み込み OS として zOS を使用しているため、MZ-700 に USB 接続して、CPU 周波数の変更、メモリの編集/ダンプ、レジスタの変更などを行う組み込みセッションとユーザーがやり取りできます。この機能は、コンピューターの仕組みを学ぶためや Z80/ARM コードのデバッグに最適です。
オプション機能として、USB ケーブルを介して K64F ファームウェアを更新できる PJRC ブートストラップ MCU のインストールと使用があります。この MCU がない場合、JTAG インターフェースと Freescale FRDM-K64F 開発ボードで提供されるような互換性のある Open SDA インターフェースを使用して K64F ファームウェアを更新する必要があります。このオプションデバイスを使用するために、5 つのはんだジャンパーセットがあります。JP1-5 のパッド 1-2 を接続すると PJRC MCU のプログラミングと使用が可能になり、JP1-4 のパッド 2-3、JP5 のピン 1-2 を接続すると SWD プロトコルを使用した JTAG インターフェースによるプログラミングが可能になります。
K64F への電力供給には別の 3.3V レギュレーターが使用されています。CPLD/FPGA の要件と組み合わせてより大きな LDO を使用するのではなく、K64F に電力を供給するために別の LDO を意図的に使用することが選択されました。
注:SD カードから zOS コンソールを介して K64F に新しいファームウェアをフラッシュする zOS アプリケーションが開発中であり、PJRC または JTAG ツールを使用する必要がなくなります。このツールは zOS v1.2 で利用可能になる予定です。
v1.2 JTAG プログラミングと発振器

この設計では CPLD と FPGA の両方が使用されており、どちらも JTAG インターフェースを介したプログラミングが必要です。Altera のベストプラクティスに従い、JTAG インターフェースは最も高い電圧のデバイス(CPLD)に最初に配線され、より低い電圧の FPGA にデイジーチェーン接続されます。推奨プルアップ/ダウン抵抗は Altera の仕様に従っています。
FPGA は内部ロジックマトリックスを設定するためのビットストリームを必要とし、これにより望ましいハードウェア機能が提供されます。これは JTAG インターフェースを介してリアルタイムで行うことができますが、電源投入時の問題は解決されません。これが Cyclone III FPGA ブートストラップピンに接続された 16Mbit EPCS16 の理由です。EPCS16 は、JTAG プログラミングを EPCS16 プログラミングに変換する Altera 提供の IP(知的財産)を使用して Cyclone III を介してプログラムされます。プログラムされると、電源投入時または CONFIG スイッチを押すと、EPCS16 の内容が FPGA に読み込まれ、ロジックマトリックスが設定されます。
FPGA には 4 つのオンボード PLL デバイスがあるため、メインクリスタルは Cyclone III FPGA に供給され、これが内部の同期シグナルとビデオモードクロックすべてのタイムベースとして機能します。Z80 が使用する周波数、つまりマザーボード周波数 SYSCLK と K64 が生成する代替周波数 CTLCLK も同期を可能にするために Cyclone III に供給されます。
v1.2 電源

より高度なテクノロジーを使用するには、オリジナルの 5V 標準とは異なる電圧が必要です。CPLD は動作に 3.3V が必要であり、FPGA は内部動作に 1.2V、アナログおよび PLL デバイスに 2.5V、選択可能な I/O 電圧(この設計では CPLD とのインターフェースのため 3.3V)が必要です。
これらの電圧を生成するために、各レール 1A と指定された 3 つの LDO デバイスが使用されています。Altera ツールを使用することで、CPLD/FPGA の最大電力要件はこれらの LDO デバイスとオリジナルの Sharp MZ-700 PSU で満たされます。
さらに、CPLD/FPGA デバイスを使用するには大きなデカップリングが必要であり、Altera は必要な数と値を計算するための動的スプレッドシートを提供しています。これが上記の回路図に反映されています。
v1.2 ビデオインターフェース

この設計での拡張ビデオの提供方法は、Video Module v2.0 で使用された方法とは異なります。マザーボードのほとんどの IC がはんだ付けされており、内部の拡張スペースも大きな問題であるため、既存の IC をマザーボードから持ち上げることができませんでした。代替方法が検討された末、FPGA からの拡張ビデオを提供するだけでなく、オリジナルビデオもそのまま残し、必要に応じてソフトウェアで切り替えることができるメカニズムに決定しました。
このメカニズムを使用することで、ビデオシグナルはマザーボードのモジュレーターコネクタから引き上げられ、CPLD(CPLD は 5V 耐性)を介して FPGA にルーティングされ、FPGA はオリジナルビデオを出力に切り替えるか、独自のビデオを生成します。CPLD は、拡張 FPGA ビデオが使用されている際にオリジナルのビデオハードウェアへのシグナルがバストライステートメカニズムを介してブロックされるよう、マザーボードの有効化を管理します。
Video Module v2.0 では、オリジナルの MZ-700 ハードウェアよりも大きな色深度を与えるために、カラーごとに 4 ビット(3:0)が出力され、ビデオ RAM の属性ビットから直接駆動されるか、カラーパレットルックアップテーブルを介して駆動されます。この設計ではオリジナルのモジュレーターとの互換性を維持する必要があるため、カラーごとに 5 番目のビットが追加されており、デジタル RGB モニターおよびモジュレーター内のコンポジット/TV 用回路が、アナログ RGB の要件の 0〜0.75Vp-p とは異なり、論理 1 に対して 2V より大きい電圧で駆動されます。デジタル RGB モニターを駆動する場合またはコンポジット/TV 出力を駆動する場合、5 番目のビットは他のすべてのビットと共にアクティブになり、デジタル 1 の場合に 2.0V 以上を保証します。アナログ RGB モニターを駆動する場合、5 番目のビットをアクティブにすると入力が過飽和になるため、このビットをアクティブにすることができませんが、ビットが hi-Z または 0 レベルに設定されている場合は、5 番目のビットをさらに 16 セットのカラーシェードを作成するために使用できます(例:R[3:0] + 0、G[3:0] + 0、B[3:0] + 0 または R[3:0] + hi-Z、G[3:0] + hi-Z、B[3:0] + hi-Z)。5 番目のビットが 0 に設定されている場合、10R 抵抗が回路内に見えると、他の 4 ビットの電流シンクとして機能し、モニターが見る電圧を下げます。これにより、カラーごとに 32 の固有の電圧レベルが提供されます。5 番目のビットが hi-Z(高インピーダンス)に設定されている場合、ビット 3:0 からの電圧出力に無視できる変化があります。
v1.2 PCB
MZ-700 内に収まる PCB の要件は、マザーボードコンポーネント、ケースの障害物、発熱などに影響しない設置可能な場所という観点から正確である必要がありました。また、ボードは Z80 ソケットに収まりながら、同時にモジュレーターコネクタに接続する必要があり、両方がボードを電気的に接続し機械的に安定させるアンカーポイントを提供します。
この設計では 3 つの高密度 TQFP パッケージを使用しており、ルーティングなどの複雑さが増しています。0.5mm ピッチで広い面積にわたって出力されるランドのためのスペースと、電力配分およびデカップリングのためのスペースが必要です。ボードは製造コストを最良にするために意図的に 2 層に保たれており、通常は 10 枚のボードにステンシルを含めて US$60 であり、多層にするとコストが 2 倍以上になり、サイズ削減もわずかです。
以下のボードは Sharp MZ-700 用に完全に組み立てられテストされた PCB であり、物理的なマシンに設置された様子を示す画像も含まれています。




v1.3 回路図
バージョン 1.3 は v1.2 の動作設計を引き継ぎ、FPGA をより高度なコンポーネントである Cyclone IV EP4CE75(75K ロジックエレメントデバイス、340KB を超えるブロック RAM)に変更しています。ビルド時オプションで Cyclone IV EP4CE115(115K ロジックエレメントデバイス、480K を超えるブロック RAM)を使用することができます。これらのデバイスにより、より高度なグラフィックス、より高い解像度、より多くの同時使用カラーが可能になります。また、「ソフト」HDL ベースの CPU の作成も可能にし、完全に FPGA ベースになる(つまり Z80 なし、ただし FPGA でソフト CPU としてインスタンス化された Z80 のみを含む Z80 エクステンダーソケット)オリジナルの ZPU ベースの tranZPUter の次のイテレーションへのステッピングストーンとなります。
v1.3 Z80 アップグレード回路図

v1.3 K64 I/O プロセッサー

K64F の回路図は、相互接続の再作業(有用な機能を果たさなくなったものの削除と、メモリおよび FPGA リソースの完全な 24 ビット直接アドレッシングを可能にするための追加)を除いて v1.2 と同じです。
v1.3 JTAG プログラミングと発振器

バージョン 1.3 では FPGA が変更され、その結果クロックが異なるクロック入力に割り当てられます。さらに、デバイスが大きくなったため、EPCS64 という 64mbit シリアルフラッシュ RAM の形式でより大きなブートデバイスが必要になります。v1.2 でコンフィグスイッチが冗長であることが判明したため、v1.3 から削除されました。JTAG または PJRC MCU を介したプログラミングは自動的に FPGA コンフィグモードを起動します。
v1.3 電源

より大きな FPGA デバイスを使用すると、デカップリングの需要が増大します。Altera の PDN ツールにより、34 個以上のデカップリングコンデンサーが必要と判断されました。これは PCB の配置とルーティングに興味深い課題をもたらしました!
v1.3 ビデオインターフェース

ビデオインターフェースは v1.2 と同じです。
v1.3 PCB
バージョン 1.3 PCB は v1.2 の改版であり、144 ピン TQFP を 484 ピン BGA に置き換えています。両者はサイズが同一ですが、一部の部品配置とルーティングが異なります。PCB は 2 層設計のままですが、BGA の組み込みによりより小さなビア/ランドのジオメトリとマスクまたは充填されたビアが採用されています。これにより、v1.2 設計と比べて PCB 製造コストが数倍に増加します。PCB にはルーティングエラーがあり、製造コストを考慮して改修が必要となり、BGA パッドの再ルーティングと穴あけという複雑な作業が必要でした。しかしこの作業は忘れられないものになりました。「二度計って一度切る」という古い格言が思い浮かびますが、私は二度計ったにもかかわらず最終確認を怠り、特にエラーが発生したと思われるコンピュータクラッシュの後において確認不足でした。これは私のミスです!


設計詳細
K64F Z80 ホスト API
// Structure to contain inter CPU communications memory for command service processing and results.
// Typically the z80 places a command into the structure in its memory space and asserts an I/O request,
// the K64F detects the request and reads the lower portion of the struct from z80 memory space,
// determines the command and then either reads the remainder or writes to the remainder. This struct
// exists in both the z80 and K64F domains and data is sync'd between them as needed.
//
typedef struct __attribute__((__packed__)) {
uint8_t cmd; // Command request.
uint8_t result; // Result code. 0xFE - set by Z80, command available, 0xFE - set by K64F, command ack and processing. 0x00-0xF0 = cmd complete and result of processing.
union {
uint8_t dirSector; // Virtual directory sector number.
uint8_t fileSector; // Sector within open file to read/write.
uint8_t vDriveNo; // Virtual or physical SD card drive number.
};
union {
struct {
uint16_t trackNo; // For virtual drives with track and sector this is the track number
uint16_t sectorNo; // For virtual drives with track and sector this is the sector number. NB For LBA access, this is 32bit and overwrites fileNo/fileType which arent used during raw SD access.
};
uint32_t sectorLBA; // For LBA access, this is 32bit and used during raw SD access.
struct {
uint8_t memTarget; // Target memory for operation, 0 = tranZPUter, 1 = mainboard.
uint8_t spare1; // Unused variable.
uint16_t spare2; // Unused variable.
};
};
uint8_t fileNo; // File number of a file within the last directory listing to open/update.
uint8_t fileType; // Type of file being processed.
union {
uint16_t loadAddr; // Load address for ROM/File images which need to be dynamic.
uint16_t saveAddr; // Save address for ROM/File images which need to be dynamic.
uint16_t cpuFreq; // CPU Frequency in KHz - used for setting of the alternate CPU clock frequency.
};
union {
uint16_t loadSize; // Size for ROM/File to be loaded.
uint16_t saveSize; // Size for ROM/File to be saved.
};
uint8_t directory[TZSVC_DIRNAME_SIZE]; // Directory in which to look for a file. If no directory is given default to MZF.
uint8_t filename[TZSVC_FILENAME_SIZE]; // File to open or create.
uint8_t wildcard[TZSVC_WILDCARD_SIZE]; // A basic wildcard pattern match filter to be applied to a directory search.
uint8_t sector[TZSVC_SECTOR_SIZE]; // Sector buffer generally for disk read/write.
} 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 | CPM の BDOS+CCP を再ロードします。 |
| TZSVC_CMD_ADDSDDRIVE | 0x31 | CPM ディスクをドライブ番号にアタッチします。 |
| TZSVC_CMD_READSDDRIVE | 0x32 | アタッチされた SD ファイルを CPM ディスクドライブとして読み取ります。 |
| TZSVC_CMD_WRITESDDRIVE | 0x33 | アタッチされた SD ファイルである CPM ディスクドライブに書き込みます。 |
| 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 がコマンドを処理中です。 |
K64F GPIO 構成
SD カードアクセス、代替 BIOS のロード、または可変代替 CPU クロックなどの高度なサービスが必要な場合は、それらを提供するために K64F が必要です。Z80 は K64F をハードウェア拡張として認識し、I/O リクエストを行って機能を得ます。
例えば Z80 が BIOS のロードを要求した場合、I/O out リクエストを生成して K64F に割り込みを送信します。K64F は Z80 をトライステートバスマスタードモードに置き、SD カードから BIOS を読み取って Z80 ラインを操作し、Z80 RAM に BIOS データを書き込みます。
この機能を提供するために、K64F は Z80 のすべてのシグナルを読み書きできる必要があります。K64F の利点の一つは、5V 耐性のデジタル I/O ポートが豊富にあることであり、そのため 5V Z80 システムの接続と操作は比較的簡単です。
Z80 シグナルの K64F GPIO ポート/ピンへのピン割り当ては、K64F が GPIO ピンを内部レジスタに線形に割り当てていないため、やや断続的になっています。つまり GPIO ピンは 5 つの 32 ビットレジスタに分散されています。この非線形な割り当ては、リアルタイムでの 16 ビットアドレスや 8 ビットデータ値の組み立てとデコードにオーバーヘッドを加えます。
初期の tranZPUter SW 設計では、Z80 ピンの GPIO ポート/ピンへの割り当てが割り込みサービスルーチンでいくつかの問題を引き起こしていましたが、これらはほとんどのタイムクリティカルなロジックを含む CPLD の追加によって解決されました。
以下の表は Z80 シグナルとそれに関連する K64F ピンを示すために作成されています。シグナルは 5 つの 32 ビット内部 K64F レジスタに分散されています。
K64F ポートとビット割り当て
| BIT / PORT | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | Z80_NMI | Z80_INT | CTL_HALT | CTL_RFSH | CTL_M1 | SYSCLK | ||||||||||||||||||||||||||
| B | Z80_D7 | Z80_D6 | Z80_D5 | Z80_D4 | Z80_D3 | Z80_D2 | Z80_D1 | Z80_D0 | CTL_CLKSLCT | Z80_WAIT | Z80_MEM4 | Z80_MEM3 | Z80_MEM2 | Z80_MEM1 | Z80_MEM0 | |||||||||||||||||
| C | Z80_A16 | Z80_A17 | Z80_A18 | Z80_A15 | Z80_A14 | Z80_A13 | Z80_A12 | Z80_A11 | Z80_A10 | Z80_A9 | Z80_A8 | Z80_A7 | Z80_A6 | Z80_A5 | Z80_A4 | Z80_A3 | Z80_A2 | Z80_A1 | Z80_A0 | |||||||||||||
| D | Z80_RD | CTL_BUSACK | Z80_WR | Z80_RESET | Z80_IORQ | Z80_MREQ | CTL_CLK | CTL_BUSRQ | ||||||||||||||||||||||||
| E | Z80_BUSACK | SVCREQ |
GPIO ビットと Z80 アドレスラインのマッピング
| ADDR 18 | ADDR 17 | ADDR 16 | ADDR 15 | ADDR 14 | ADDR 13 | ADDR 12 | ADDR 11 | ADDR 10 | ADDR 9 | ADDR 8 | ADDR 7 | ADDR 6 | ADDR 5 | ADDR 4 | ADDR 3 | ADDR 2 | ADDR 1 | ADDR 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PORT C:16 | PORT C:17 | PORT C:18 | PORT C:15 | PORT C:14 | PORT C:13 | PORT C:12 | PORT C:11 | PORT C:10 | PORT C:9 | PORT C:8 | PORT C:7 | PORT C:6 | PORT C:5 | PORT C:4 | PORT C:3 | PORT C:2 | PORT C:1 | PORT C:0 |
GPIO ビットと Z80 データラインのマッピング
| DATA 7 | DATA 6 | DATA 5 | DATA 4 | DATA 3 | DATA 2 | DATA 1 | DATA 0 |
|---|---|---|---|---|---|---|---|
| PORT B:23 | PORT B:22 | PORT B:21 | PORT B:20 | PORT B:19 | PORT B:18 | PORT B:17 | PORT B:16 |
Z80 メモリモード
メモリモードのベースは tranZPUter SW プロジェクトのバージョン 1 から来ており、当時はデコーダーがフラッシュ RAM に基づいていました。当時必要とされていたすべてのメモリモデル(MZ-700、CP/M など)が考案されました。これらのモードはその後の設計で CPLD 内に強化され、ビデオモジュールなどの新機能に対応し、今後もさらに強化されることでしょう。
定義済みのモードは以下の表に示されており、将来の拡張のためにいくつかの空きスロットが残されています。
| モード | ターゲット | 範囲 | ブロック | 機能 | DRAM リフレッシュ | 説明 |
|---|---|---|---|---|---|---|
| 0 | オリジナル | 0000:0FFF | Main | MROM | Yes | デフォルト、通常のホスト(例:Sharp MZ80A/MZ-700)動作モード。すべてのメモリと IO(tranZPUter 制御 I/O ブロックを除く)はマザーボード上にあります。 |
| 1000:CFFF | Main | D-RAM | ||||
| D000:D7FF | Main | VRAM | ||||
| D800:DFFF | Main | ARAM | ||||
| E000:E7FF | Main | MM I/O | ||||
| E800:EFFF | Main | User ROM | ||||
| F000:FFFF | Main | FDC ROM | ||||
| 1 | Orig+ UROM | 0000:0FFF | Main | MROM | Yes | モード 0 と同じですが、User ROM は tranZPUter RAM にマップされ、ロード可能な BIOS イメージに使用されます。 |
| 1000:CFFF | Main | D-RAM | ||||
| D000:D7FF | Main | VRAM | ||||
| D800:DFFF | Main | ARAM | ||||
| E000:E7FF | Main | MM I/O | ||||
| E800:EFFF | RAM 0 | User ROM | ||||
| F000:FFFF | Main | FDC ROM | ||||
| 2 | TZFS | 0000:0FFF | RAM 0 | MROM | No | TZFS または tranZPUter RAM の使用を必要とする他のソフトウェアのブートモード。User ROM はモニターには ROM として表示されるため、通常の起動手順の一部として 0xE800 のエントリポイントを呼び出します。0xE800 に格納されたソフトウェアは必要に応じてマザーボードを切り離して tranZPUter RAM で実行できます。F3FE と F7FE に小さな 2 バイト幅の穴がフロッピーディスクコントローラー用に存在し、これらの場所はマザーボード上に必要です。フロッピーディスクコントローラーはデータ読み書きの一部としてこれらを使用します(Z80 が FDC をポーリングするには速度が不十分なため)。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | Main | VRAM | ||||
| D800:DFFF | Main | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | User ROM | ||||
| F000:FFFF | RAM 0 | FDC ROM | ||||
| 3 | TZFS | 0000:0FFF | RAM 0 | MROM | No | TZFS のページモード。F000:FFFF がブロック 1 にある以外はすべての RAM が tranZPUter ブロック 0 にあります。これは TZFS のページバンク 2 です。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | RAM 0 | VRAM | ||||
| D800:DFFF | RAM 0 | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | User ROM | ||||
| F000:FFFF | RAM 1 | FDC ROM | ||||
| 4 | TZFS | 0000:0FFF | RAM 0 | MROM | No | モード 3 と同様ですが F000:FFFF はブロック 2 にあります。これは TZFS のページバンク 3 です。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | RAM 0 | VRAM | ||||
| D800:DFFF | RAM 0 | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | User ROM | ||||
| F000:FFFF | RAM 2 | FDC ROM | ||||
| 5 | TZFS | 0000:0FFF | RAM 0 | MROM | No | モード 3 と同様ですが F000:FFFF はブロック 3 にあります。これは TZFS のページバンク 4 です。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | RAM 0 | VRAM | ||||
| D800:DFFF | RAM 0 | ARAM | ||||
| E000:E7FF | RAM 0 | MM I/O | ||||
| E800:EFFF | RAM 0 | User ROM | ||||
| F000:FFFF | RAM 3 | FDC ROM | ||||
| 6 | CP/M | 0000:FFFF | RAM 4 | Main RAM | No | CP/M、すべてのメモリは tranZPUter ボード上にあります。F3C0:F3FF & F7C0:F7FF(フロッピーディスクページングベクター)の特別なケースはマザーボード上にあります。 |
| 7 | CP/M | 0000:0100 | RAM 4 | CP/M Vectors | No | CP/M メイン CBIOS エリア、CBIOS と直接マザーボードハードウェアアクセスに 48K + 2K 使用可能。F000:FFFF はバンク 4 に残り、このメモリモードとモード 6 間のゲートウェイとして使用されます。 |
| 0100:CFFF | RAM 5 | Main RAM | ||||
| D000:D7FF | Main | VRAM | ||||
| D800:DFFF | Main | ARAM | ||||
| E000:E7FF | Main | MM I/O | ||||
| E800:EFFF | RAM 5 | User ROM | ||||
| F000:FFFF | RAM 4 | FDC ROM | ||||
| 8 | Orig+ Emu | 0000:0FFF | Main | MROM | Yes | オリジナルモードですが、メイン RAM は tranZPUter バンク 0 にあります。このモードは起動時にバンク切り替えを行い、tranZPUter RAM バンク内のメインメモリにロードされたプログラムを期待する MZ-700 プログラムなどのプログラムをブートストラップするために使用されます。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | Main | VRAM | ||||
| D800:DFFF | Main | ARAM | ||||
| E000:E7FF | Main | MM I/O | ||||
| E800:EFFF | Main | User ROM | ||||
| F000:FFFF | Main | FDC ROM | ||||
| 10 | MZ-700 | 0000:0FFF | RAM 6 | Main RAM | No | MZ-700 モード(OUT $E0)- モニター RAM がメイン RAM に置き換えられます。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | Main | VRAM | ||||
| D800:DFFF | Main | ARAM | ||||
| E000:E7FF | Main | MM I/O | ||||
| E800:EFFF | Main | User ROM | ||||
| F000:FFFF | Main | FDC ROM | ||||
| 11 | MZ-700 | 0000:0FFF | RAM 0 | MROM | No | MZ-700 モード(OUT $E0 + $E1)- I/O とビデオブロックがメイン RAM に置き換えられます。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | RAM 6 | VRAM | ||||
| D800:DFFF | RAM 6 | ARAM | ||||
| E000:E7FF | RAM 6 | MM I/O | ||||
| E800:EFFF | RAM 6 | User ROM | ||||
| F000:FFFF | RAM 6 | FDC ROM | ||||
| 12 | MZ-700 | 0000:0FFF | RAM 6 | Main RAM | No | MZ-700 モード(OUT $E1 + $E2)- モニター RAM が RAM に置き換えられ、I/O とビデオブロックがメイン RAM に置き換えられます。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:D7FF | RAM 6 | VRAM | ||||
| D800:DFFF | RAM 6 | ARAM | ||||
| E000:E7FF | RAM 6 | MM I/O | ||||
| E800:EFFF | RAM 6 | User ROM | ||||
| F000:FFFF | RAM 6 | FDC ROM | ||||
| 13 | MZ-700 | 0000:0FFF | RAM 0 | MROM | No | MZ-700 モード(OUT $E5)- 上位メモリがロックアウトされ、モニター ROM がページインされます。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:FFFF | n/a | Undefined | ||||
| 14 | MZ-700 | 0000:0FFF | RAM 6 | Main RAM | No | MZ-700 モード(OUT $E6)- モニター RAM が RAM に置き換えられ、上位メモリがロックアウトされます。 |
| 1000:CFFF | RAM 0 | Main RAM | ||||
| D000:FFFF | n/a | Undefined | ||||
| 15 | MZ-800/MZ-700 | 以下の表を参照してください。メモリモードは MZ-800 に従います。 | ||||
| 16 | MZ2000 | 0000:7FFF | RAM 0 | IPL ROM | No | MZ2000 ハードウェアモード、MZ2000 ランタイム設定レジスタに従って設定されます。 |
| 8000:FFFF | RAM 6 | Lower 32K RAM | IPL モード中、下位 32K RAM が上位 32K アドレスにマップされます。 | |||
| 0000:FFFF | RAM 6 | Main RAM | RUN モード中、完全な 64K RAM が Z80 アドレス空間にマップされます。 | |||
| D000:DFFF | Main | VRAM | PIO ポート A ビット 7 がセット、ビット 6 がクリアの場合、ビデオ RAM が Z80 アドレス空間にマップされます。 | |||
| C000:FFFF | Main | GRAM | PIO ポート A ビット 7 がセット、ビット 6 がセットの場合、グラフィックス RAM が Z80 アドレス空間にマップされます。 | |||
| 21 | K64F アクセス | 000000:FFFFFF | n/a | FPGA Resources | No | 完全な 24 ビット Z80 アドレスを通過させて FPGA メモリにアクセスします。通常は K64F から使用されます。 |
| 22 | FPGA アクセス | 0000:FFFF | n/a | Host Resources | Yes | ホストマザーボード 64K アドレス空間のみへのアクセスです。 |
| 23 | K64F アクセス | 000000:FFFFFF | RAM | Main RAM | No | K64F が完全な 512K RAM をアドレスして tranZPUter ボード上のすべてのメモリと IO にアクセスします。 |
| 24 | K64F アクセス | 0000:FFFF | RAM 0 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 0 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
| 25 | K64F アクセス | 0000:FFFF | RAM 1 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 1 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
| 26 | K64F アクセス | 0000:FFFF | RAM 2 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 2 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
| 27 | K64F アクセス | 0000:FFFF | RAM 3 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 3 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
| 28 | K64F アクセス | 0000:FFFF | RAM 4 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 4 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
| 29 | K64F アクセス | 0000:FFFF | RAM 5 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 5 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
| 30 | K64F アクセス | 0000:FFFF | RAM 6 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 6 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
| 31 | K64F アクセス | 0000:FFFF | RAM 7 | Main RAM | Yes/No | すべてのメモリと IO は tranZPUter ボード上にあります。64K ブロック 7 が選択されています。このモードを使用する際、マザーボード DRAM は tranZPUter ライブラリによってリフレッシュされます。 |
MROM = モニター ROM、オリジナルのブートファームウェア(例:SA-1510)
D-RAM = マザーボード上のダイナミック RAM。
VRAM = マザーボード上のビデオ RAM。
ARAM = マザーボード上のカラー属性 RAM。
MM I/O = マザーボード上のメモリマップド I/O コントローラー。
RAM 0 .. 7 = 512K スタティック RAM チップ内の 64K RAM ブロック番号。
Main = ホストコンピューターのマザーボード(例: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 | Memory Mapped I/O | Upper MONITOR ROM | ||||||||||
| OUT 0xE4 | MONITOR | DRAM | Memory Mapped I/O | MONITOR | CGROM | DRAM | VRAM | DRAM | Upper MONITOR ROM | |||
| OUT 0xE5 | Inhibit | Inhibit | ||||||||||
| OUT 0xE6 | <return> | <return> | ||||||||||
| IN 0xE0 | CGROM* | VRAM* | CGROM | VRAM | ||||||||
| IN 0xE1 | DRAM | DRAM | <return> | DRAM |
<return> = 補完コマンドが呼び出される前の状態に戻ります。
* = MZ-800 ホストのみ。
Z80 CPU 周波数切り替え
周波数切り替えの主な問題は、基盤となるホストの周波数を変更できないことです。ホストは一般にクロックを生成しており、その回路はクロック許容範囲内で動作するように設計されています。tranZPUter SW-700 は以下に説明するようにこの制限を克服しています。
切り替え可能な Z80 CPU 周波数の要件を満たすために、ホスト周波数を 1 つの入力として受け取り、K64F からの矩形波ジェネレーターを 2 番目の入力として受け取る正エッジトリガーの周波数切り替えが実装されています。切り替えメカニズムはバス制御ロジックに関連付けられているため、ホストへのアクセスはすべて CPU の周波数がホスト周波数に変更され、継続的な信頼性の高い動作を保証します。起動条件では、マシンのオリジナル仕様を満たすために Z80 は常にホストクロックでクロックされます。
K64F が存在する場合、K64F はそのオンボードタイマーを使用してプログラム可能な矩形波出力を生成する機能を持つため、2 番目の周波数を選択できます。K64F はこの 2 番目のクロックソースの周波数を設定し、Z80 は I/O OUT コマンドを介してそれを選択できます。これにより、Z80 上で実行しているソフトウェアは自身の周波数を変更できます(ただし固定された値のみ)。K64F ホスト API への拡張により、Z80 は K64F に Z80 CPU 周波数を任意の可能な値に設定するよう要求できます。これは TZFS や CP/M でユーザーが独自の周波数を選択できるようにするために有用です。
CMOS Z84C0020 20MHz CPU での現在のテストでは以下の観察結果があります:
- tranZPUter はすべての機能において 1Hz から 24MHz の範囲で信頼性があります。
- マザーボードへのアクセス時、周波数は 3.54MHz(システムクロック)まで遅くなり、マザーボードアクセスが完了した後に高い周波数に戻ります。
トレーニングやデバッグ目的で CPU を遅くすることも可能ですが、ホスト回路へのアクセスは常にホストクロック周波数で実行されます。
Z80 上で実行されているアプリケーションの場合、以下の表は周波数を切り替えるために読み書きする必要がある I/O ポートを示しています。
Z80 CPU 周波数切り替えポート
| ポート | 方向 | 機能 |
|---|---|---|
| 0x62 | W | Z80 CPU 周波数を 2 番目のソース(K64F または外部発振器で生成される周波数)に切り替えます。 |
| 0x64 | W | Z80 CPU 周波数をデフォルトのホストソースに切り替えます。これは RESET 時のデフォルトです。 |
| 0x66 | R | ビット [0] - 選択されたクロック、0 = ホストクロック、1 = 2 番目のクロックソース(K64F または外部発振器)。 |
システム設定
CPLD は内部設定レジスタを保持しており、基盤となるホストとの動作方法を変更できます。以下の表はポートと各ビットの機能を示しています。
システム設定レジスタ(0x6E - 10 進数 110)
| ビット | 方向 | 説明 |
|---|---|---|
| 2:0 | R/W | ハードウェアモデルの互換性を設定します。これにより CPLD が設定されたモデルと互換性を持つようにホストハードウェアをリマップします。 000 = MZ-80K 001 = MZ-80C 010 = MZ-1200 011 = MZ-80A 100 = MZ-700 101 = MZ-800 110 = MZ-80B 111 = MZ-2000 |
| 3 | R/W | マザーボードビデオの状態を設定します。0 = 有効、1 = 無効。マザーボードビデオが有効な場合、FPGA 拡張ビデオは無効になります。 |
| 4 | R/W | FPGA ビデオフレームレンダリング中に使用されるビデオウェイトステートジェネレーターを設定します。0 = ウェイトステート無効、1 = 有効。 |
| 6:5 | R/O | マザーボード/CPU クロック。 00 = Sharp MZ80A 2MHz システムクロック。 01 = Sharp MZ80B/2000 4MHz システムクロック。 10 = Sharp MZ700 3.54MHz システムクロック。 11 = 予約、デフォルトは 2MHz システムクロック。 |
| 7 | R/W | リセット時に設定を保持(=1)またはリセット時にデフォルトに設定(=0)します。 |
注:実装された互換モードは以下の段落に記載されており、他のモードはまだ実装されていません。未実装のモードを選択するとマッピングなしになり、基本の MZ-700 ハードウェアに戻ります。
CPLD は実行中のマシンの機能を示す読み取り専用の情報レジスタも保持しています。
システム情報レジスタ(0x6F - 10 進数 111)
| ビット | 方向 | 説明 |
|---|---|---|
| 2:0 | R | tranZPUter が設置された基盤となるホストモデル(物理的なコンピューターハードウェア)。 000 = MZ-80K 001 = MZ-80C 010 = MZ-1200 011 = MZ-80A 100 = MZ-700 101 = MZ-800 110 = MZ-80B 111 = MZ-2000 |
| 3 | R | FPGA ビデオモジュールが設置されているか、0 = 設置なし、1 = 設置あり。 |
| 7:5 | R | CPLD のバージョン番号。新しいバージョンの CPLD VHDL が異なる機能を提供する場合に Z80 コードで使用されます。 |
CPLD は基盤となるホストの細かい制御を支援するための基本的なコマンド機能を含んでいます。コマンドは CPLD コマンドレジスタへの書き込みによって開始されます。
システムコマンドレジスタ(0x6B - 10 進数 107)
| ビット | 方向 | 説明 |
|---|---|---|
| 7:0 | W | CPLD にコマンドを発行します。 01 - 基盤となるホストをリセットします。 02 - 基盤となるホストの BUSREQ をアクティブにして CPU を保留します。 03 - アクティブな BUSREQ 保留を解放します。 |
ソフトプロセッサ
FPGA や ASIC の世界では「ソフト」という言葉が文脈から外れて使用されることがよくあります。「ソフト」プロセッサはソフトウェアエミュレーションではなく、HDL で記述されてFPGA にインスタンス化したり ASIC にマスクしたりできる物理的なハードウェアデバイスです。「ソフト」は FPGA に関連するものであり、FPGA(フィールドプログラマブルゲートアレイ)は電子コンポーネントの集まりと相互接続層であり、この相互接続層は RAM のようなもので「1」によって 2 つのコンポーネントがリンクされます。JTAG プログラミングツールまたは FPGA のサポートするプロトコル(シリアルフラッシュ設定デバイスなど)を介して相互接続ビットマップをロードします。デバイスがインスタンス化され相互接続がロードされると、他のハードウェアと同様に動作するため、FPGA 上の「ソフト」プロセッサは実行中は他の「ハード」プロセッサと同じです。
最初に、FPGA に「ソフト」CPU が存在しながら基盤となる Sharp MZ-700 ハードウェアを制御するためのフレームワークを開発するために、T80 プロセッサを組み込むことを選択しました。これは由緒ある Zilog Z80 の再設計であり、文書化および未文書化の命令をすべて実装し、外部使用のための正しいハードウェアシグナルを提示して、ほぼサイクル精度を実現します。この設計は CPLD が双方向ゲートウェイになる必要があったため変更が必要であり、T80 プロセッサと FPGA 内のサポートロジックのインスタンス化も必要でした。最終結果は、Sharp MZ-700 上の FPGA で実行するプロセッサであり、tranZPUter カード上で実行する「ハード」Z80 と同一でした。
フレームワーク設計を支援することを除いて、「ソフト」T80 は研究やプログラムの速度向上のためにアーキテクチャ/命令を変更できること、およびオプションで T80 の拡張「高速」モードを選択できること以外、「ハード」Z80 に対して優位性はありません。実際の Fmax は FPGA/CPLD のスイッチングおよび伝播遅延のために「ハード」Z80 よりも遅く、「ハード」Z80 は 24MHz で実行できますが T80 は 18MHz が上限です。注:RAM が FPGA にインスタンス化されて T80 が tranZPUter カード上のハード 512K スタティック RAM ではなく FPGA BRAM から実行した場合、Sharp MZ シリーズエミュレーターのように最大 120MHz を達成できますが、これはメモリモデルが異なるため制御ソフトウェア(TZFS と 1Z-013A モニター)の再作業が必要になります。
Z80 のテーマを続けて、AZ80 と NextZ80 が評価と比較のためにビルド時の選択肢として追加されました(T80 の代わりに)。AZ80 にはいくつかの軽微な I/O タイミングの問題があり、奇妙なキーボード読み取りが発生することがありますが、テストしたすべての MZ-700 ソフトウェアで完璧に動作します。NextZ80 は Z80 命令互換プロセッサであり、すべての正しいシグナルを提示したり Z80 タイミングサイクルに従ったりしないため、正しく動作させるにはさらに作業が必要です。
2 番目に追加されたプロセッサは ZPU Evolution です。これは Øyvind Harboe(Zylin AS)によって組み込みシステムで監視モードで実行するための最小ロジックサイズ CPU として最初に書かれた 32 ビットスタックベースプロセッサです。設計にはいくつかの拡張(ZPU Flex と ZPUINO が注目されます)がありましたが、どちらも Sharp MZ シリーズエミュレーターへの組み込みに求めるものを提供しなかったため、速度と拡張性を向上させるために再設計して ZPU Evolution を作成しました。
ZPU Evolution は組み込まれることを意図していたため、zOS はこの機能を念頭に置いて書かれました。デバイス内でタスクを実行してその機能を強化し、シリアル接続を介したインタラクティブセッションを提供するための OS です。シリアル接続に接続されたコンソールを使用すると、アプリケーションを実行したり、ハードウェアを制御したり、メモリやプロセスフローを検査/更新したりできる MS-DOS のような環境が提供されます。これは FPGA 内で実行するソフト ZPU Evolution を操作するための理想的なツールであり、Sharp MZ シリーズエミュレーターなどのエンドアプリケーション内で実行していました。tranZPUter SW プロジェクトが誕生したとき、zOS は K64F に移植され、tranZPUter SW と Sharp MZ ホスト内で接続できるようになったことで設計とデバッグに大いに役立ちました。
ZPU Evo を tranZPUter SW-700 の「ソフト」プロセッサとして追加するには zOS の進化が必要でした。シリアル接続がなくなり、キーボードやスクリーンなどを直接制御する必要が生じました。これにより SharpMZ モジュールが追加され、zOS に Sharp MZ-700 のキーボードとスクリーンを駆動するための基本的なハードウェア抽象化レイヤーが提供され、ANSI ターミナルエミュレーターを含む基本的なユーザー I/O 機能が提供されました。ZPU が Sharp MZ-700 モニターから選択されると、zOS が起動してインタラクティブな MS-DOS のような環境が提示されます。tbasic、mbasic、kilo(VT100 ベースのスクリーンエディター)などの基本的なアプリケーションがあり、これらはすべて zOS の apps セクションにあります。想像できるように zOS 上で実行できるソフトウェアはあまり多くありませんが、多くのオープンソースプロジェクトを移植できます。制限要因は GNU C/C++ 99 標準コンパイラまたはスレッド制御や仮想メモリなどの欠けている機能です。
現在、FPGA にはこのプロセッサとそのサポート回路を実装するためのリソースがあるため、NIOSII プロセッサを MMU と共にインスタンス化することを検討しています。最終結果は Sharp MZ-700 上で実行する Linux となり、はるかに有用なプラットフォームになるでしょう。このページが更新されるまでこれは進行中の作業と考えてください。
CPU 設定レジスタ
CPU 設定レジスタ(0x6C - 10 進数 108)
| ビット | 方向 | 説明 |
|---|---|---|
| 5:0 | R/W | このレジスタは FPGA にソフト/ハード CPU を有効にするよう設定し、CPLD は物理ハードウェア側ではなく FPGA 側での CPU 操作を可能にするよう再設定されます。 同時に選択できるプロセッサは 1 つだけで、プロセッサごとに 1 ビット。複数ビット選択は無効となりハードプロセッサが選択されます。 000000 = ハード CPU 000001 = T80 CPU 000010 = ZPU Evolution 000100 = NIOS11 001000 = 将来の CPU 4 010000 = 将来の CPU 5 100000 = 将来の CPU 6 |
| 6 | R/W | クロック有効。ソフト CPU クロックを有効(1)または無効にします。 |
| 7 | R/W | CPU リセット。アクティブ(’1’)に設定されると、リセットパルスが生成されてビット状態が 0 に戻ります。 |
FPGA はソフトプロセッサの機能を示す読み取り専用の情報レジスタを保持しています。
CPU 情報レジスタ(0x6D - 10 進数 109)
| ビット | 方向 | 説明 |
|---|---|---|
| 5:0 | R | ビットマスク、1 はプロセッサが利用可能であることを示します。 000000 = ハード CPU のみ 000001 = T80 CPU 000010 = ZPU Evolution 000100 = NIOSII 001000 = 将来の CPU 4 010000 = 将来の CPU 5 100000 = 将来の CPU 6 |
| 7:6 | R | ソフト CPU 機能、01 = ソフト CPU 対応、他のすべての値はソフト CPU 機能が利用不可であることを示します。 |
ZPU メモリマップ
ZPU には設定可能な線形アドレス空間があり、通常 18〜32 ビット幅です。ソフトプロセッサとして使用する場合は 24 ビットに設定されます。
| アドレス範囲 | サブ範囲 | 説明 |
|---|---|---|
| 000000:020000 | 000000:013FFF | zOS カーネル。 |
| 014000:01BFFF | ヒープ。 | |
| 01C000:01FD7F | スタック。 | |
| 01FD80:01FFFF | I/O プロセッササービス制御レコード。ZPU と K64F 間のプロセッサ間通信に使用され、ZPU が SD カードの読み取りなどのサービスコールを行えるようにします。 | |
| 100000:180000 | tranZPUter ボード上の 512Kbyte 8 ビット幅スタティック RAM。アプリケーションは 0x100000 から始まるこの RAM エリアにロードされて実行されます。 | |
| D00000:EFFFFF | Z80 バスステートマシン。アクセスされたアドレスに応じてトランザクションのタイプが決まります。32 ビット読み取り CPU でのバイトレベルアクセスを提供するために、ワードアライメントされたバイトごとのアドレスバンクがワードアライメントされた 32 ビット値の読み取りアドレスに加えて割り当てられています。 | |
| D00000:D7FFFF | tranZPUter ボード上の 512K スタティック RAM。すべての読み取りは 32 ビット、すべての書き込みはワード境界で 8、16、または 32 ビット幅。 | |
| D80000:DBFFFF | ホストマザーボード上の 64K アドレス空間(RAM/ROM/メモリマップド I/O)に 1 バイトずつアクセス。物理アドレスはバイトごとにワードアライメントされているため、ZPU アドレス空間の 4 バイト = Z80 アドレス空間の 1 バイト(例:0x00780 ZPU = 0x0078 Z80)。 | |
| DC0000:DFFFFF | ホストマザーボードまたは基盤となる CPLD/FPGA 上の 64K I/O 空間。64K アドレス空間は Z80 がアキュムレーターを 15:8 に設定してポートを 7:0 に設定することで 64K をアドレスできる機能に対応しています。ZPU は直接アドレスを介してこの機能をミミックし、それを必要とするハードウェアに対応します(例:0x10 をアキュムレーターに持つ 0x3F への書き込みは 0xF103f というアドレスを生成します)。すべての読み取りは 8 ビット、書き込みはワード境界で 8、16、または 32 ビット幅。物理アドレスはバイトごとにワードアライメント(例:0x00780 ZPU = 0x0078 Z80)。 | |
| E00000:E0FFFF | ホストマザーボード上の 64K アドレス空間(RAM/ROM/メモリマップド I/O)に 4 バイトずつアクセス。32 ビット読み取りは 4 バイトを連続して返し、読み取りの開始は 32 ビットワード境界上に必要。 | |
| E80000:EFFFFF | 512K ビデオアドレス空間 - ビデオプロセッサメモリが ZPU メモリアドレス空間に直接マップされています。詳細はビデオコントローラーダイレクトアクセスモードを参照してください。 | |
| E80000:E8FFFF | 64K ビデオ/属性 RAM | |
| E90000:E9FFFF | 64K キャラクタージェネレーター ROM/PCG RAM。 | |
| EA0000:EBFFFF | 128K 赤フレームバッファーアドレス空間。 | |
| EC0000:EDFFFF | 128K 青フレームバッファーアドレス空間。 | |
| EE0000:EFFFFF | 128K 緑フレームバッファーアドレス空間。 | |
| F00000:FFFFFF | F00800:F008FF | 割り込みコントローラー。割り込みコントローラーデバイス間のスペーシング = 0x10。 |
| F00800:F00803 | ステータスレジスタ。 | |
| F00804:F00807 | コントロールレジスタ。 | |
| F00900:F009FF | SD カードコントローラー。 | |
| F00900:F00903 | アドレスレジスタ。 | |
| F00904:F00907 | データレジスタ。 | |
| F0090c:F0090f | ステータスレジスタ。 | |
| F00C00:F00CFF | タイマー。タイマーデバイス間のスペーシング = 0x40。 | |
| F00C00:F00C3F | タイマー 0。 | |
| F00C00:F00C03 | TIMER_MICROSEC_DOWN - プログラム可能なマイクロ秒ダウンカウンター。 | |
| F00C04:F00C07 | TIMER_MILLISEC_DOWN - プログラム可能なミリ秒ダウンカウンター。 | |
| F00C08:F00C0B | TIMER_MILLISEC_UP - プログラム可能なミリ秒アップカウンター。 | |
| F00C0C:F00C0F | TIMER_SECONDS_DOWN - プログラム可能な秒ダウンカウンター。 | |
| F00C1C:F00C1F | RTC_MILLISECONDS_EPOCH - エポックからのリアルタイムミリ秒。 | |
| F00C20:F00C23 | RTC_MICROSECONDS - 現在の秒内のリアルタイムマイクロ秒カウント。 | |
| F00C24:F00C27 | RTC_MILLISECONDS - 現在の秒内のリアルタイムミリ秒カウント。 | |
| F00C28:F00C2B | RTC_SECOND - リアルタイム秒カウント。 | |
| F00C2C:F00C2F | RTC_MINUTE - リアルタイム分カウント。 | |
| F00C30:F00C33 | RTC_HOUR - リアルタイム時間カウント。 | |
| F00C34:F00C37 | RTC_DAY - リアルタイム月内日カウント。 | |
| F00C38:F00C3B | RTC_MONTH - リアルタイム年内月カウント。 | |
| F00C3C:F00C3F | RTC_YEAR - リアルタイム現在年カウント。 | |
| F00C40:F00C7F | タイマー 1 以降、ハードウェアビルド依存。 | |
| F00C40:F00C43 | 有効レジスタ。 | |
| F00C44:F00C47 | インデックスレジスタ。 | |
| F00C48:F00C4b | カウンターレジスタ。 | |
| F00F00:F00FFF | System on Chip 設定。 | |
| F00F00:F00F03 | SOCCFG_ZPU_ID - インスタンス化された ZPU の ID | |
| F00F04:F00F07 | SOCCFG_SYSFREQ - システムクロック周波数(MHz x 10、例:100MHz = 1000) | |
| F00F08:F00F0B | SOCCFG_MEMFREQ - Sysbus SDRAM クロック周波数(MHz x 10、例:100MHz = 1000) | |
| F00F0C:F00F0F | SOCCFG_WBMEMFREQ - Wishbone SDRAM クロック周波数(MHz x 10、例:100MHz = 1000) | |
| F00F00:F00F03 | SOCCFG_DEVIMPL - SOC に実装されたデバイスのビットマップ。 | |
| F00F04:F00F07 | SOCCFG_BRAMADDR - ブロック RAM のアドレス。 | |
| F00F08:F00F0B | SOCCFG_BRAMSIZE - ブロック RAM のサイズ。 | |
| F00F0C:F00F0F | SOCCFG_RAMADDR - RAM のアドレス(追加の BRAM、DRAM など)。 | |
| F00F00:F00F03 | SOCCFG_RAMSIZE - RAM のサイズ。 | |
| F00F04:F00F07 | SOCCFG_BRAMINSNADDR - 専用命令ブロック RAM のアドレス。 | |
| F00F08:F00F0B | SOCCFG_BRAMINSNSIZE - 専用命令ブロック RAM のサイズ。 | |
| F00F0C:F00F0F | SOCCFG_SDRAMADDR - SDRAM のアドレス。 | |
| F00F00:F00F03 | SOCCFG_SDRAMSIZE - SDRAM のサイズ。 | |
| F00F04:F00F07 | SOCCFG_WBSDRAMADDR - Wishbone SDRAM のアドレス。 | |
| F00F08:F00F0B | SOCCFG_WBSDRAMSIZE - Wishbone SDRAM のサイズ。 | |
| F00F0C:F00F0F | SOCCFG_CPURSTADDR - リセット後に CPU が実行するアドレス。 | |
| F00F00:F00F03 | SOCCFG_CPUMEMSTART - CPU の BIOS/マイクロコードを含むメモリの開始アドレス。 | |
| F00F04:F00F07 | SOCCFG_STACKSTART - スタック使用のためのメモリの開始アドレス。 |
ビデオモジュール
FPGA を使用することで、tranZPUter SW-700 は Sharp MZ シリーズのほぼすべての機種(MZ-80K、MZ-80C、MZ-1200、MZ-80A、MZ-700、MZ-80B(グラフィックス含む))のビデオ機能を提供できます。近い将来、MZ-800 および MZ-2000 機のビデオ機能も追加される予定です。特定機種のビデオ機能を使用するには、後述するモードをモードレジスタに書き込んで機種モデルに応じた必要なビデオ機能を選択し、選択した機種のビデオへの通常のアクセス方法(例:MZ-80A では 0xD000–0xD7FF)を使用します。これには反転やハードウェアスクロール機能などの機能も含まれます。
オリジナルの Sharp MZ シリーズの機能に加え、640x200/320x200 の 8 色グラフィックスフレームバッファが追加されています。このフレームバッファは、640x200 の解像度で色ごとに 3×16K RAM ブロックで構成されており、出力表示バッファとビット単位で一致しています。表示が 40×25 文字で動作している場合の解像度は 320x200 で、80×25 の場合は 640x200 となります。
640x200 モード(Cyclone III のみの制限)を除くすべてのモードでは、ディスプレイはダブルバッファリングされており、画像はスクリーン表示のレンダリングに使用されるバッファとは別のバッファに組み立てられます。640x200 モードでは Cyclone III FPGA のメモリ不足によりダブルバッファリングが行われないため、必要に応じてスクリーンのちらつき/テアリングを防止するためのオプションのウェイトステートジェネレーターを有効にすることができます。ビデオロジック設計が引用された Sharp MZ シリーズエミュレーター同様、Cyclone IV は十分な RAM を持ちダブルバッファリングが可能です。
グラフィックスフレームバッファ用 RAM は、プログラマブルレジスタにより 1 バンクずつ(赤、緑、青バンク)メイン CPU アドレス範囲 C000H–FFFFH に切り替えることができます。これにより CPU が直接アドレス指定できるピクセルの読み書きが可能になります。各ピクセルは 1 バイト単位でバイト内は右から左、行は左から右、上から下の順に格納されます。たとえば、赤バンクが CPU アドレス空間にマップされている場合、C000H のバイトは 320/640(X)のピクセル 7~0、200(Y)のピクセル 0 の赤ピクセルを表します。したがって 01H を C000H に書き込むとピクセル 7(X)、行 0(Y)がオンになり、80H を C000H に書き込むとピクセル 0(X)、行 0(Y)がオンになります。これは緑および青バンクが CPU アドレス空間にマップされている場合も同様です。
表示速度を向上させるため、(Sharp MZ-2500 で利用可能なものと同様の)カラーライトレジスタがあり、グラフィックス RAM への書き込みで 3 つのバンクを同時に更新することができ、即時カラー書き込みが可能です。
プログラマブルレジスタ
ビデオ機能を利用するために、すべての機能にアクセスできるレジスタセットが設計されています。
機能は以下のようにグループ化されています:
- 制御 - ビデオ機能モードの設定、列幅の設定、カラー/モノクロ機能の設定。
- グラフィックス - グラフィックス機能の設定。
- GPU - ビデオ処理を高速化するため内蔵グラフィックスプロセッサにタスクをオフロード。
- パレット - 表示パレットの設定と構成。
レジスタは上位 I/O 領域の 0xD0〜0xFD にあり、標準の Z80 I/O コマンド IN/OUT でアクセスします。特に明記されていない限り、すべてのレジスタは読み書き可能で、読み出すと現在格納されている値が返されます。
制御レジスタ(0xA8 - 10進数 168)
これはビデオモードレジスタです。ビデオモジュールが動作するハードウェアモデルのほか、出力表示の列幅とカラー機能を指定します。
| ビット | 方向 | 説明 |
|---|---|---|
| 2:0 | R/W | ビデオモジュールのハードウェアモデルを設定。 000 = MZ-80K 001 = MZ-80C 010 = MZ-1200 011 = MZ-80A 100 = MZ-700 101 = MZ-800 110 = MZ-80B 111 = MZ-2000 |
| 3 | R/W | ビデオ出力の列幅を設定。0 = 40 列、1 = 80 列 |
| 4 | R/W | ビデオ出力のカラー機能を設定。0 = モノクロ、1 = カラー。 |
| 5 | R/W | プログラマブルキャラクタジェネレーター RAM を有効化。0 = 無効、1 = 有効。 |
| 7:6 | R/W | VGA モードを設定。 00 = オリジナル MZ ビデオフォーマット、水平 15.62KHz × 垂直 60Hz。 01 = VGA 640x480 @ 60Hz 10 = VGA 1024x768 @ 60Hz 11 = VGA 800x600 @ 60Hz。 |
グラフィックスモードレジスタ(0xA9 - 10進数 169)
これはグラフィックスモード制御レジスタです。出力するビデオの内容、合成方法、読み書き可能なグラフィックス RAM バンクを指定します。
| ビット | 方向 | 説明 |
|---|---|---|
| 1:0 | R/W | 読み出しモード(00=赤バンク、01=緑バンク、10=青バンク、11=未使用)。CPU アドレス空間で有効時に読み出すバンクを選択。 |
| 3:2 | R/W | 書き込みモード(00=赤バンク、01=緑バンク、10=青バンク、11=間接)。CPU アドレス空間で有効時に書き込むバンクを選択。 |
| 4 | R/W | VRAM 出力。0=有効、1=無効。キャラクター RAM を表示に出力。 |
| 5 | R/W | GRAM 出力。0=有効、1=無効。グラフィックス RAM を表示に出力。 |
| 7:6 | R/W | ブレンド演算子(00=OR、01=AND、10=NAND、11=XOR)。キャラクター表示とグラフィックス表示を合成する演算子。 |
カラーライターレジスタ(0xAA - 10進数 170 ~ 0xAC - 10進数 172)
間接モード(制御レジスタのビット 3/2 が 11 に設定)では、CPU アドレス空間 C000H–FFFFH にマップされているグラフィックス RAM への書き込みにより、バイトが赤カラーライターレジスタでマスクされ赤バンクに書き込まれます。緑と青についても同様の処理が行われます。これにより 3 つのバンクにわたって色を高速に設定できます。
例:赤フィルター = 0x80、緑フィルター = 0x40、青フィルター = 0x20 の場合、アドレス C000H への間接書き込みにより、ピクセル 0,0 が赤、1,0 が緑、2,0 が青に設定されます。
| ビット | 方向 | ピクセル | I/O アドレス | 色 | 説明 |
|---|---|---|---|---|---|
| 0 | R/W | 7 | 0xAAH | 赤 | 間接書き込み時に赤に設定。 |
| 1 | R/W | 6 | 0xAAH | 赤 | |
| 2 | R/W | 5 | 0xAAH | 赤 | |
| 3 | R/W | 4 | 0xAAH | 赤 | |
| 4 | R/W | 3 | 0xAAH | 赤 | |
| 5 | R/W | 2 | 0xAAH | 赤 | |
| 6 | R/W | 1 | 0xAAH | 赤 | |
| 7 | R/W | 0 | 0xAAH | 赤 | 間接書き込み時に赤に設定。 |
| 0 | R/W | 7 | 0xABH | 緑 | 間接書き込み時に緑に設定。 |
| 1 | R/W | 6 | 0xABH | 緑 | |
| 2 | R/W | 5 | 0xABH | 緑 | |
| 3 | R/W | 4 | 0xABH | 緑 | |
| 4 | R/W | 3 | 0xABH | 緑 | |
| 5 | R/W | 2 | 0xABH | 緑 | |
| 6 | R/W | 1 | 0xABH | 緑 | |
| 7 | R/W | 0 | 0xABH | 緑 | 間接書き込み時に緑に設定。 |
| 0 | R/W | 7 | 0xACH | 青 | 間接書き込み時に青に設定。 |
| 1 | R/W | 6 | 0xACH | 青 | |
| 2 | R/W | 5 | 0xACH | 青 | |
| 3 | R/W | 4 | 0xACH | 青 | |
| 4 | R/W | 3 | 0xACH | 青 | |
| 5 | R/W | 2 | 0xACH | 青 | |
| 6 | R/W | 1 | 0xACH | 青 | |
| 7 | R/W | 0 | 0xACH | 青 | 間接書き込み時に青に設定。 |
メモリページレジスタ(0xAD - 10進数 173)
このレジスタは、ビデオメモリを Z80 アドレス空間に有効化する役割を担います。グラフィックスモードレジスタで選択した 3 色のうち 1 つの 16KB GRAM を Z80 アドレス C000:FFFF に、または CGROM を Z80 アドレス空間 D000:DFFF に有効化することができます。このレジスタは他のすべてのメモリページ設定を上書きします。
| ビット | 方向 | 説明 |
|---|---|---|
| 0 | R/W | 16KB グラフィックス RAM バンクを C000–FFFF に切り替え。バンク(または色)はグラフィックスモードレジスタで選択。 0 = オフ、通常の Z80 メモリ操作。 1 = 16KB GRAM 有効。 このレジスタの設定は MZ-700/MZ-80B 固有のすべてのメモリページ設定を上書きします。 |
| 7 | R/W | CGROM を D000:DFFF でアップロード用に切り替え。0 = 通常メモリ操作、1 = CGROM ページイン。 |
ビデオモジュールステータスレジスタ(0xAD - 10進数 173)
このレジスタはビデオモジュールのステータスを報告します。ビット 7 と 0 はメモリページレジスタ設定の報告用に予約されています。
| ビット | 方向 | 説明 |
|---|---|---|
| 5 | R | フレームバッファ水平ブランキング。1 = 水平ブランキング有効、0 = 水平ブランキングなし。 |
| 6 | R | フレームバッファ垂直ブランキング。1 = 垂直ブランキング有効、0 = 垂直ブランキングなし。 |
GPU パラメーターレジスタ(0xB2 - 10進数 178)
このレジスタからの読み出しではビット 7:0 がポップされ、レジスタが右に 8 ビットシフトされます。
GPU コマンドレジスタ(0xB3 - 10進数 179)
| コマンド | パラメーター | 説明 |
|---|---|---|
| 0x00 | なし | 操作なし。これは GPU がビジーでないときのアイドル状態コマンドで、発行しても何も行いません。 |
| 0x01 | なし | VRAM 画面クリア。ビデオおよびアトリビュート RAM 全体をスペース文字(つまり空白)で、青背景に白文字としてクリアします。 |
| 0x02 | [15:8] - キャラクター [7:0] - アトリビュートバイト |
文字とアトリビュートで VRAM 画面クリア。ビデオおよびアトリビュート RAM 全体をパラメーターリストで指定された値にクリアします。 |
| 0x03 | [47:40] - 開始 X [39:32] - 開始 Y [31:24] - 終了 X [23:16] - 終了 Y [15:8] - 表示文字 [7:0] - アトリビュートバイト。 |
ビデオおよびアトリビュート RAM の一部を指定された文字とアトリビュート値にクリアします。開始 X/Y から終了 X/Y までの領域が対象です。 |
| 0x81 | なし | 16KB フレームバッファ(赤/緑/青)全体をクリアします。 |
| 0x82 | [87:72] - 開始 X [71:56] - 開始 Y [55:40] - 終了 X [39:24] - 終了 Y [23:16] - 赤フィルター [15:8] - 緑フィルター [7:0] - 青フィルター R/G/B フィルターは 8 ピクセル幅、ビット 7 が左端のピクセル。 |
指定されたパラメーターに従って 16KB フレームバッファ(赤/緑/青)の一部をクリアします。クリア領域は開始 X/Y から終了 X/Y まで、フィルターは値に応じてこの領域のピクセルを設定します。1 = 対応するピクセルを設定、0 = 対応するピクセルをクリア。 |
| 0xFF | なし | GPU をリセット。実行中の操作をキャンセルしてすぐにアイドル状態に戻ります。 |
GPU ステータスレジスタ(0xB3 - 10進数 179)
このレジスタは現在の GPU ステータスを返し、新しいコマンドを要求する前にポーリングする必要があります。
| ビット | 方向 | 機能 | 説明 |
|---|---|---|---|
| 0 | R | BUSY | GPU のビジー状態を示すフラグ。1 = ビジー、0 = アイドル。ビジー時は GPU がアイドル状態に戻るまで新たなコマンドは処理されません(ただし RESET コマンドは即座に実行されます)。 |
VGA ボーダー領域およびアトリビュートレジスタ(0xBE - 10進数 190)
VGA モードでは、グラフィックス RAM/VRAM の拡大が通常は空白のままにされる表示領域全体を完全には埋めません。このレジスタを使用することで、必要に応じて異なる色を適用できるようアトリビュートを設定できます。
| ビット | 方向 | 説明 |
|---|---|---|
| 2:0 | R/W | ボーダー色を設定。 2: = 赤 1: = 緑 0: = 青 |
| 6 | R/W | OSD メニューオーバーレイを有効化 1: = 有効 0: = 無効 |
| 7 | R/W | 未使用スクリーン領域の OSD ステータス表示エリアを有効化。 1: = 有効 0: = 無効 |
VGA モードレジスタ(0xBF - 10進数 191)
VGA モードレジスタ。外部ディスプレイの出力解像度と周波数を設定します。
| ビット | 方向 | 説明 |
|---|---|---|
| 3:0 | R/W | VGA 出力モードを設定。 0: = オリジナル Sharp 60Hz モード 1: = ヨーロッパ Sharp 50Hz モード 2: = 640x480 @ 60Hz 3: = 800x600 @ 60Hz。 |
パレット選択レジスタ(0xB0 - 10進数 176)
256 個のパレットがあり、0 はシステムカラーのデフォルト、1〜255 は FPGA HDL コンパイル時に固定されたパレットです。パレットは後述のパレット設定レジスタを通じて再プログラムできます。
tranZPUter SW-700 では、ビット 4 はビット 3:0 の色に対するサブカラーのシェードを選択します。ハードウェアはオリジナルモードではビット 4 を使ってデジタル出力を駆動し、FPGA モードでは 1 に設定するとサブカラーのセットを選択し、0 にすると標準 RGB 3:0 カラーを選択するよう設定できます。
パレット設定オフポインターレジスタ(0xA3 - 10進数 163)
このレジスタは、ピクセル(R/G/B)がオフ状態の場合に設定するパレット番号を設定します。つまり、ピクセルがオフのときに出力される色です。このレジスタへの書き込みは、実際のパレット色レジスタへの書き込みの前に行います。
パレット設定オンポインターレジスタ(0xA4 - 10進数 164)
このレジスタは、ピクセル(R/G/B)がオン状態の場合に設定するパレット番号を設定します。つまり、ピクセルがオンのときに出力される色です。このレジスタへの書き込みは、実際のパレット色レジスタへの書き込みの前に行います。
パレット赤値設定レジスタ(0xA5 - 10進数 165)
このレジスタは、オフ/オンポインターレジスタで選択したパレットで使用する 5 ビットの赤値を設定します。
パレット緑値設定レジスタ(0xA6 - 10進数 166)
このレジスタは、オフ/オンポインターレジスタで選択したパレットで使用する 5 ビットの緑値を設定します。
パレット青値設定レジスタ(0xA7 - 10進数 167)
このレジスタは、オフ/オンポインターレジスタで選択したパレットで使用する 5 ビットの青値を設定します。
ビデオモードパラメーター設定レジスタ(0xA0 - 10進数 160)
以下の表は現在のビデオモードとパラメーター番号の概要です。アクティブモードは制御レジスタで設定され、パラメーターはビデオモードパラメーターレジスタを通じて更新できます。
フロントポーチは XXX_SYNC_START パラメーターに含まれます。バックポーチは XXX_LINE_END に含まれます。つまり、XXX_LINE_END - XXX_SYNC_END = バックポーチとなります。
| パラメーター番号 | 0 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| モード | 説明 | H_DSP_START | H_DSP_END | H_DSP_WND_START | H_DSP_WND_END | H_MNU_START | H_MNU_END | H_HDR_START | H_HDR_END | H_FTR_START | H_FTR_END | V_DSP_START | V_DSP_END | V_DSP_WND_START | V_DSP_WND_END | V_MNU_START | V_MNU_END | V_HDR_START | V_HDR_END | V_FTR_START | V_FTR_END | H_LINE_END | V_LINE_END | MAX_COLUMNS | H_SYNC_START | H_SYNC_END | V_SYNC_START | V_SYNC_END | H_POLARITY | V_POLARITY | H_PX | V_PX |
| 0 | MZ80K/C/1200/A 機はモノクロ 60Hz 表示、スキャン 512×260、表示可能領域 320x200。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 36 | 164 | 0 | 0 | 0 | 0 | 511 | 259 | 40 | 320 + 43 | 320 + 43 + 45 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
| 1 | MZ80K/C/1200/A 機の適応モノクロ 60Hz 表示、スキャン 1024×260、表示可能領域 640x200。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1023 | 259 | 80 | 640 + 106 | 640 + 106 + 90 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
| 2 | MZ80K/C/1200/A 機の MZ700 スタイルカラー 60Hz 表示、スキャン 512×260、表示可能領域 320x200。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 567 | 259 | 40 | 320 + 80 | 320 + 80 + 40 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
| 3 | MZ80K/C/1200/A 機の MZ700 スタイルカラー 60Hz 表示、スキャン 1024×260、表示可能領域 640x200。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1135 | 259 | 80 | 640 + 160 | 640 + 160 + 80 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
| 4 | モード 0 を 640x480 @ 60Hz タイミングにアップスケール(40 文字モードモノクロ)。 | 0 | 640 | 0 | 640 | 64 | 576 | 0 | 640 | 0 | 640 | 0 | 480 | 48 | 448 | 111 | 367 | 0 | 39 | 440 | 479 | 799 | 524 | 40 | 640 + 16 | 640 + 16 + 96 | 480 + 8 | 480 + 8 + 2 | 0 | 0 | 1 | 1 |
| 5 | モード 1 を 640x480 @ 60Hz タイミングにアップスケール(80 文字モードモノクロ)。 | 0 | 640 | 0 | 640 | 64 | 576 | 0 | 640 | 0 | 640 | 0 | 480 | 48 | 448 | 111 | 367 | 0 | 39 | 440 | 479 | 799 | 524 | 80 | 640 + 16 | 640 + 16 + 96 | 480 + 8 | 480 + 8 + 2 | 0 | 0 | 0 | 1 |
| 6 | モード 2 を 640x480 @ 60Hz タイミングにアップスケール(40 文字モードカラー)。 | 0 | 640 | 0 | 640 | 64 | 576 | 0 | 640 | 0 | 640 | 0 | 480 | 48 | 448 | 111 | 367 | 0 | 39 | 440 | 479 | 799 | 524 | 40 | 640 + 16 | 640 + 16 + 96 | 480 + 11 | 480 + 11 + 2 | 0 | 0 | 1 | 1 |
| 7 | モード 3 を 640x480 @ 60Hz タイミングにアップスケール(80 文字モードカラー)。 | 0 | 640 | 0 | 640 | 64 | 576 | 0 | 640 | 0 | 640 | 0 | 480 | 48 | 448 | 111 | 367 | 0 | 39 | 440 | 479 | 799 | 524 | 80 | 640 + 16 | 640 + 16 + 96 | 480 + 8 | 480 + 8 + 2 | 0 | 0 | 0 | 1 |
| 8 | モード 0 を 800x600 @ 60Hz タイミングにアップスケール(40 文字モードモノクロ)。 | 0 | 800 | 80 | 720 | 64 | 576 | 0 | 0 | 0 | 0 | 0 | 600 | 0 | 600 | 111 | 367 | 0 | 0 | 0 | 0 | 1055 | 627 | 40 | 800 + 40 | 800 + 40 + 128 | 600 + 1 | 600 + 1 + 4 | 1 | 1 | 1 | 2 |
| 9 | モード 1 を 800x600 @ 60Hz タイミングにアップスケール(80 文字モードモノクロ)。 | 0 | 800 | 80 | 720 | 64 | 576 | 0 | 0 | 0 | 0 | 0 | 600 | 0 | 600 | 111 | 367 | 0 | 0 | 0 | 0 | 1055 | 627 | 80 | 800 + 40 | 800 + 40 + 128 | 600 + 1 | 600 + 1 + 4 | 1 | 1 | 0 | 2 |
| 10 | モード 2 を 800x600 @ 60Hz タイミングにアップスケール(40 文字モードカラー)。 | 0 | 800 | 80 | 720 | 64 | 576 | 0 | 0 | 0 | 0 | 0 | 600 | 0 | 600 | 111 | 367 | 0 | 0 | 0 | 0 | 1055 | 627 | 40 | 800 + 40 | 800 + 40 + 128 | 600 + 1 | 600 + 1 + 4 | 1 | 1 | 1 | 2 |
| 11 | モード 3 を 800x600 @ 60Hz タイミングにアップスケール(80 文字モードカラー)。 | 0 | 800 | 80 | 720 | 64 | 576 | 0 | 0 | 0 | 0 | 0 | 600 | 0 | 600 | 111 | 367 | 0 | 0 | 0 | 0 | 1055 | 627 | 80 | 800 + 40 | 800 + 40 + 128 | 600 + 1 | 600 + 1 + 4 | 1 | 1 | 0 | 2 |
| 12 | MZ80K/C/1200/A 機はモノクロ 60Hz 表示、スキャン 512×260、表示可能領域 320x200。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 36 | 164 | 0 | 0 | 0 | 0 | 511 | 259 | 40 | 320 + 43 | 320 + 43 + 45 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
| 13 | MZ80K/C/1200/A 機の適応モノクロ 60Hz 表示、スキャン 1024×260、表示可能領域 640x200。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1023 | 259 | 80 | 640 + 106 | 640 + 106 + 90 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
| 14 | MZ80K/C/1200/A 機の MZ700 スタイルカラー 50Hz 表示、スキャン 568×312、表示可能領域 320x200。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 567 | 311 | 40 | 320 + 80 | 320 + 80 + 40 | 200 + 50 | 200 + 50 + 3 | 0 | 0 | 0 | 0 |
| 15 | MZ80K/C/1200/A 機の MZ700 スタイルカラー 50Hz 表示、スキャン 1136×312、表示可能領域 640x200。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1135 | 311 | 80 | 640 + 160 | 640 + 160 + 80 | 200 + 50 | 200 + 50 + 3 | 0 | 0 | 0 | 0 |
| 16 | MZ-2000 内部モニター 40 列モード。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 511 | 259 | 40 | 320 + 43 | 320 + 43 + 45 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
| 17 | MZ-2000 内部モニター 80 列モード。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1023 | 259 | 80 | 640 + 106 | 640 + 106 + 90 | 200 + 19 | 200 + 19 + 4 | 0 | 0 | 0 | 0 |
H_DSP_START = 水平表示領域の開始。つまり、指定モードの物理的な表示領域。
H_DSP_END = 水平表示領域の終了。
H_DSP_WND_START = 水平表示ウィンドウの開始。つまり、データが出力される実際の表示領域。
H_DSP_WND_END = 水平表示ウィンドウの終了。
H_MNU_START = 水平表示メニューオーバーレイ領域の開始。
H_MNU_END = 水平表示メニューオーバーレイ領域の終了。
H_HDR_START = ステータス情報に使用される未使用表示領域上部の水平表示開始。
H_HDR_END = ステータス情報に使用される未使用表示領域上部の水平表示終了。
H_FTR_START = ステータス情報に使用される未使用表示領域下部の水平表示開始。
H_FTR_END = ステータス情報に使用される未使用表示領域下部の水平表示終了。
V_DSP_START = 垂直表示領域の開始。
V_DSP_END = 垂直表示領域の終了。
V_DSP_WND_START = 垂直表示領域ウィンドウの開始。
V_DSP_WND_END = 垂直表示領域ウィンドウの終了。
V_MNU_START = 垂直表示メニューオーバーレイ領域の開始。
V_MNU_END = 垂直表示メニューオーバーレイ領域の終了。
V_HDR_START = ステータス情報に使用される未使用表示領域上部の垂直表示開始。
V_HDR_END = ステータス情報に使用される未使用表示領域上部の垂直表示終了。
V_FTR_START = ステータス情報に使用される未使用表示領域下部の垂直表示開始。
V_FTR_END = ステータス情報に使用される未使用表示領域下部の垂直表示終了。
H_LINE_END = 水平ライン終了、つまり最後の水平ピクセル。
V_LINE_END = 垂直ライン終了、最後の垂直ピクセル。
MAX_COLUMNS = 最大キャラクター表示列数。
H_SYNC_START = 水平同期開始。
H_SYNC_END = 水平同期終了。
V_SYNC_START = 垂直同期開始。
V_SYNC_END = 垂直同期終了。
H_POLARITY = 水平同期極性、0 = 負、1 = 正。
V_POLARITY = 垂直同期極性、0 = 負、1 = 正。
H_PX = 水平ピクセル倍増、つまり 1x、2x、4x など。
V_PX = 垂直ピクセル倍増、つまり 1x、2x、4x など。
ビデオモード下位パラメーターバイト設定レジスタ(0xA1 - 10進数 161)
このレジスタは、ビデオモードパラメーターレジスタで選択したパラメーターの下位バイトを書き込むために使用します。たとえば、パラメーター 0 が設定されている場合、このレジスタへの書き込みにより H_DSP_START パラメーターの下位バイトが更新されます。
ビデオモード上位パラメーターバイト設定レジスタ(0xA2 - 10進数 162)
このレジスタは、ビデオモードパラメーターレジスタで選択したパラメーターの上位バイトを書き込むために使用します。たとえば、パラメーター 0 が設定されている場合、このレジスタへの書き込みにより H_DSP_START パラメーターの上位バイトが更新されます。
ダイレクトアクセスモード
ビデオコントローラーは、CPLD メモリマネージャーを経由しない 24 ビットアドレスを使用したダイレクトアクセスモードを備えています。このモードは K64F I/O プロセッサーまたは FPGA 上にインスタンス化されたソフトプロセッサーで使用できます。以下の表で Y はアドレスオフセットを指し、ZPU 構成では 0xE00000 となります。
| アドレス範囲 | A23 - A16 | A15 - A8 | A7 - A0 | MZ アドレス | 説明 |
|---|---|---|---|---|---|
| Y+0x000000 | 00000000 | 通常の Sharp MZ の動作 | |||
| Y+0x200000 | 00100000 | メモリおよび I/O ポートをダイレクトアドレス指定可能なメモリ位置にマップ。 | |||
| I/O レジスタは I/O アドレスをミラーリングする下位 256 バイトにマップされる。 | |||||
| Y+0x2000A0 | 00000000 | 10100000 | 0xA0 | 更新するパラメーター番号を設定。 | |
| 00000000 | 10100001 | 0xA1 | 選択したパラメーターの下位バイトを更新。 | ||
| 00000000 | 10100010 | 0xA2 | 選択したパラメーターの上位バイトを更新。 | ||
| 00000000 | 10100011 | 0xA3 | 調整するパレットスロットのオフ位置を設定。 | ||
| 00000000 | 10100100 | 0xA4 | 調整するパレットスロットのオン位置を設定。 | ||
| 00000000 | 10100101 | 0xA5 | PALETTE_PARAM_SEL アドレスに従って赤パレット値を設定。 | ||
| 00000000 | 10100110 | 0xA6 | PALETTE_PARAM_SEL アドレスに従って緑パレット値を設定。 | ||
| Y+0x2000A7 | 00000000 | 10100111 | 0xA7 | PALETTE_PARAM_SEL アドレスに従って青パレット値を設定。 | |
| Y+0x2000B0 | 00000000 | 10110000 | 0xB0 | パレットを設定。 | |
| Y+0x2000B1 | 00000000 | 10110001 | 0xB1 | VGA ボーダー色を設定。 | |
| 00000000 | 10110010 | 0xB2 | パラメーターを設定。 | ||
| 00000000 | 10110011 | 0xB3 | グラフィックスプロセッサユニットコマンドを設定。 | ||
| 00000000 | 10111000 | 0xB8 | ビデオモードを設定。 | ||
| 00000000 | 10111001 | 0xB9 | グラフィックスモードを設定。 | ||
| 00000000 | 10111010 | 0xBA | 赤ビットマスクを設定 | ||
| 00000000 | 10111011 | 0xBB | 緑ビットマスクを設定 | ||
| 00000000 | 10111100 | 0xBC | 青ビットマスクを設定 | ||
| Y+0x2000BD | 00000000 | 10111101 | 0xBD | ブロック C000:FFFF のビデオメモリページを設定 | |
| Y+0x2000E0 | 00000000 | 11100000 | 0xE0 | MZ80B PPI | |
| 00000000 | 11100100 | 0xE4 | MZ80B PIT | ||
| Y+0x2000E8 | 00000000 | 11101000 | 0xE8 | MZ80B PIO | |
| 00000000 | 11110000 | 0xF0 | |||
| 00000000 | 11110001 | 0xF1 | |||
| 00000000 | 11110010 | 0xF2 | |||
| Y+0x2000F3 | 00000000 | 11110011 | 0xF3 | ||
| 00000000 | 11110100 | 0xF4 | MZ80B のビデオ入出力モードまたは MZ2000 カラー CRT 背景色選択を設定。 | ||
| 00000000 | 11110101 | 0xF5 | MZ2000 優先度。ビット 3 = 0 でキャラクターが前景に、= 1 でグラフィックスが前景に。2:0 = 色 | ||
| 00000000 | 11110110 | 0xF6 | MZ2000 ビット 4 CRT へのグラフィックス表示(H)、2:0 色 VRAM のカラー CRT / CRT への有効化(有効時)。 | ||
| 00000000 | 11110111 | 0xF7 | メモリマップ有効時の VRAM バンク選択。0 = なし、1 = 青、2 = 赤、3 = 緑 | ||
| メモリレジスタはベース機と同様に E000 領域にマップされる。 | |||||
| Y+0x20E010 | 11100000 | 00010010 | キャラクタージェネレーター RAM のプログラム。E010 - 書き込みサイクル(読み出しサイクル = メモリスワップリセット)。 | ||
| 11100000 | 00010100 | 通常表示選択。 | |||
| 11100000 | 00010101 | 反転表示選択。 | |||
| 11100010 | 00000000 | スクロール表示レジスタ。E200 - E2FF | |||
| Y+0x20E2FF | 11111111 | ||||
| Y+0x210000 | 00100001 | ビデオ/アトリビュート RAM。64K ウィンドウ。 | |||
| Y+0x21D000 | 11010000 | 00000000 | ビデオ RAM | ||
| Y+0x21D7FF | 11010111 | 11111111 | |||
| Y+0x21D800 | 11011000 | 00000000 | アトリビュート RAM | ||
| Y+0x21DFFF | 11011111 | 11111111 | |||
| Y+0x220000 | 00100010 | キャラクタージェネレーター RAM | |||
| Y+0x220000 | 00000000 | 00000000 | CGROM | ||
| Y+0x220FFF | 00001111 | 11111111 | |||
| Y+0x221000 | 00010000 | 00000000 | CGRAM | ||
| Y+0x221FFF | 00011111 | 11111111 | |||
| Y+0x240000 | 00100100 | 赤フレームバッファ。 | |||
| 00000000 | 00000000 | 赤ピクセルアドレス指定フレームバッファ。下位 8K に MZ-80B GRAM I メモリも含む | |||
| Y+0x243FFF | 00111111 | 11111111 | |||
| Y+0x250000 | 00100101 | 青フレームバッファ。 | |||
| 00000000 | 00000000 | 青ピクセルアドレス指定フレームバッファ。下位 8K に MZ-80B GRAM II メモリも含む | |||
| Y+0x253FFF | 00111111 | 11111111 | |||
| Y+0x260000 | 00100110 | 緑フレームバッファ。 | |||
| 00000000 | 00000000 | 緑ピクセルアドレス指定フレームバッファ。 | |||
| Y+0x263FFF | 00111111 | 11111111 | |||
| Y+0x270000 | 00010111 | 青メニュー/ステータスフレームバッファ。 | |||
| Y+0x271FFF | 00011111 | 11111111 | |||
| Y+0x280000 | 00011000 | 赤メニュー/ステータスフレームバッファ。 | |||
| Y+0x281FFF | 00011111 | 11111111 | |||
| Y+0x290000 | 00011001 | 緑メニュー/ステータスフレームバッファ。 | |||
| Y+0x291FFF | 00011111 | 11111111 | |||
| Y+0x2A0000 | 00011010 | 赤/緑/青メニュー/ステータスフレームバッファ(書き込み専用)。 | |||
| Y+0x291FFF | 00011111 | 11111111 |
互換性モード
互換性モードは CPLD では提供されなくなり、Sharp MZ シリーズ FPGA エミュレーションロジックを通じて提供されるようになりました。これは、FPGA が組み込み I/O プロセッサーと組み合わせた FPGA と物理ホストハードウェアの組み合わせを使用して、エミュレーション制御用のユーザーインターフェースメニューシステムを提供することで、完全な Sharp MZ シリーズエミュレーションを実現するためのすべてのロジックを含んでいる場所です。
詳細については Sharp MZ シリーズ FPGA エミュレーションの個別セクションを参照してください。
ハードウェア記述言語
ビットマップを作成する方法はさまざまありますが、一般的にはソフトウェアソースコードに似たハードウェア記述言語が使用されます。私は大学で学んだ ADA に基づく VHDL を使用することを選択しました。Verilog や System Verilog も使用したことがあり、これらの言語も優れていると感じており、実際に Sharp MZ シリーズ FPGA エミュレーションで使用していますが、このプロジェクトでは VHDL が HDL の選択です。
CPLD と FPGA はどちらも Sharp MZ シリーズ FPGA エミュレーション HDL(Intel/Altera Cyclone V を使用)の容易な再利用に基づいて選択されたため、同メーカーの製品を使い続けることが合理的でした。CPLD は 512 マクロセルの MAX 7000A デバイスで、より新しいデバイスには見られない 5V 耐性能力があり、Sharp MZ-700 信号を読み取るための追加の電圧変換回路が不要なことから選ばれました。FPGA は価格/パッケージ/機能の要件に基づいて選択され、デバイスが(当初は)BGA でないこと、少なくとも 64K の内部ブロック RAM を必要とする既存の Sharp MZ シリーズ FPGA エミュレーションビデオロジック HDL を組み込めることが条件でした。tranZPUter SW-700 の v1.2 では Cyclone III EP3C25 デバイスを採用しましたが、Sharp MZ シリーズ FPGA エミュレーション HDL を使用するにはメモリが十分でないものの、いくらかの修正後は完全に許容可能です。改良された v1.3 ボードでは大幅に多くのリソースを持つ Cyclone IV EP4CE75 が選ばれました。
複合論理デバイス - MAX 7000A
CPLD は、オリジナルの tranZPUter SW にある個別ロジックとフラッシュ RAM デコーダーに置き換わるものです。Sharp MZ-700 からの Z80 信号と tranZPUter Z80 アップグレードロジックに直接インターフェースします。その目的は以下を提供することです。
- Z80 メモリマップデコーディング
- Z80 バス制御
- FPGA 内部のプロセッサーが基盤となるホストハードウェアを制御できる双方向バス制御。
- ウェイトステート生成
- ハードウェアリマッピング
- 電圧変換
CPLD 構成を形成するソースファイルは以下の通りです:
| モジュール | 説明 |
|---|---|
| <host>/tranZPUterSW700_TopLevel.vhd | トップレベル設計ファイル。回路のルートスキーマティックに相当します。CPLD に入力されるメインコンポーネント信号とその使用方法をレイアウトします。 |
| <host>/tranZPUterSW700_pkg.vhd | 関数、定数宣言、パラメーターを含み、コンパイルされたすべての VHDL ファイル/モジュールで使用されます。 |
| <host>/tranZPUterSW700.vhd | メイン設計ファイル。ターゲット回路内の CPLD 内でゲートとワイヤーの相互接続を形成するためのすべてのロジックを含みます。 |
| <host>/build/tranZPUterSW700.qpf | Quartus Prime がプロジェクトとそのすべてのファイルを宣言するために使用するプロジェクトファイル。 |
| <host>/build/tranZPUterSW700.qsf | 定義および割り当てファイル。コンパイル、フィッティング、使用するピンとその名前・パラメーターなどすべてのパラメーターを設定します。このファイルは Quartus Prime によって作成されますが、Quartus Prime GUI を使うよりも手作業で変更する方が早い場合もあります。 |
| <host>/build/tranZPUterSW700_constraints.sdc | Time Quest タイミング解析ツールが作成・使用するタイミング制約ファイル。コンパイラとフィッターが CPLD 内のコンポーネント配置を決定する際にも使用されます。 |
<host> = MZ700 - Sharp MZ-700 ホスト上で動作する tranZPUter SW-700 用 HDL。
= MZ2000 - Sharp MZ-2000 ホスト上で動作する tranZPUter SW-700 用 HDL。
CPLD ビットストリームのビルド
Quartus Prime を Windows/Linux ワークステーションにインストールするか、以下に説明する Docker イメージを作成することができます。さまざまな Linux ディストリビューションへの複数回のインストール経験から、Docker の使用がこの複雑なパッケージを使用する最も簡単な方法です。
コンパイル:
1. Quartus Prime v13.0.1 を起動します(ローカルインストールまたは Docker イメージ)。
2. 'File->Open Project' に移動し、リポジトリのクローンが保存されているディレクトリを検索して、<Clone Path>/tranZPUter/CPLD/build/tranZPUterSW700.qpf のファイルを選択します。これにより CPLD tranZPUter SW-700 プロジェクトが開きます。
3. 'Processing->Start' コンパイルを選択します - 警告メッセージは無視して構いません。
4. 完了すると、<Clone Path>/tranZPUter/CPLD/build/output_files ディレクトリに tranZPUterSW700.sof という名前のビットストリームが作成されます。
プログラミング:
1. CPLD にビットストリームをアップロードするには、tranZPUter SW-700 ボードの 10 ピン JTAG IDC コネクターに USB ポートで接続した Altera USB Blaster が必要です。
2. Quartus Prime で 'Tools->Programmer' に移動すると、新しいプログラマーウィンドウが起動します。
3. プログラマーウィンドウで 'Hardware Setup' をクリックして USB アダプターを選択し、'Close' をクリックします。
4. 'Auto Detect' をクリックすると、EPM7512AET144、EP3C25E144、EPCS16 の 3 つのデバイスが見つかるはずです。
5. EPM7512AET144 デバイスを右クリックし、Add File を選択して <Clone Path>/tranZPUter/CPLD/build/output_files/tranZPUterSW700.sof にある sof ファイルを選択し、Open をクリックします。
6. EPM7512AET144 に対して 'Program/Configure' と 'Verify' のチェックボックスを選択します。
7. 'Start' をクリックすると、CPLD にコンパイル済みビットストリームがプログラムされます。
フィールドプログラマブルゲートアレイ
tranZPUter SW-700 設計の第 2 リリースであるバージョン 1.3 は、75K/115K ロジックエレメントの Cyclone IV デバイスを使用しており、バージョン 1.2 のビデオ機能だけでなく、現在は T80(Z80 互換)および ZPU EVO(lution) のソフトプロセッサーも提供します。これは、Sharp MZ シリーズマシンの内部に設置し、そのマシンに異なる CPU と異なるオペレーティングシステムを提供するボードを作成するという当初の設計目標を達成するものです。T80 の提供はパフォーマンス向上や研究/実験のための独自命令の作成/変更以外の多くの利点は提供しませんが、ZPU EVO は Sharp MZ ハードウェアフレームワーク内で動作する全く新しい 32 ビットアーキテクチャを提供します。
ソフト ZPU プロセッサーを使用して、zOS オペレーティングシステムは MZ-700 コンソール上のホストオペレーティングシステムとして機能し、ARM Cortex-M4 K64F I/O プロセッサーの組み込みオペレーティングシステムとしても機能します。
FPGA バージョン 1.2 - Cyclone III
tranZPUter SW-700 ハードウェアのバージョン 1.2 の Cyclone III FPGA は、Sharp MZ-700 向けに強化されたビデオ機能を提供します。Sharp MZ エミュレーターをベースとして、Sharp MZ ビデオハードウェア機能のほぼすべてとカラーピクセルマップグラフィックスを提供できます。また、GPU(グラフィックスプロセッシングユニット)の初期的な基盤も提供します。FPGA が提供する機能:
- Sharp MZ 機のビデオ機能:MZ-80K、MZ-80C、MZ-1200、MZ-80A、MZ-700、MZ-80B(GRAM I/II 含む)。
- カラーピクセルグラフィックスモード、8 色 640x200 および 320x200。
- 複数のビデオ出力モード:オリジナル、VGA 640x480@60Hz、VGA 800x600@60Hz、VGA 1024x768@60Hz。
| モジュール | 説明 |
|---|---|
| VideoController700_Toplevel.vhd | トップレベル設計ファイル。回路のルートスキーマティックに相当します。FPGA に入力されるメインコンポーネント信号とその使用方法をレイアウトします。 |
| VideoController700_pkg.vhd | 関数、定数宣言、パラメーターを含み、コンパイルされたすべての VHDL ファイル/モジュールで使用されます。 |
| VideoController700.vhd | メイン設計ファイル。FPGA 内のターゲット回路でゲートとワイヤーの相互接続を形成するためのすべてのロジックを含みます。 |
| build/VideoController700.qpf | Quartus Prime がプロジェクトとそのすべてのファイルを宣言するために使用するプロジェクトファイル。 |
| build/VideoController700.qsf | 定義および割り当てファイル。コンパイル、フィッティング、使用するピンとその名前・パラメーターなどすべてのパラメーターを設定します。このファイルは Quartus Prime によって作成されますが、Quartus Prime GUI を使うよりも手作業で変更する方が早い場合もあります。 |
| build/VideoController700_constraints.sdc | Time Quest タイミング解析ツールが作成・使用するタイミング制約ファイル。コンパイラとフィッターが FPGA 内のコンポーネント配置を決定する際にも使用されます。 |
| build/SFL.vhd | シリアルフラッシュローダーの宣言。シリアルフラッシュローダーは、専用シリアルブートピンを介して接続されたシリアルフラッシュデバイスをプログラムするために使用される Altera Megacore IP コンポーネントです。シリアルフラッシュデバイスは電源サイクル時に FPGA ビットストリームをロードするために使用されます。 |
| build/SFL_inst.vhd | FPGA 経由で EPCS16 デバイスをプログラムするために使用されるシリアルフラッシュローダー IP のインスタンス化宣言。 |
| build/SFL.qip | シリアルフラッシュローダーの IP 宣言。Altera Megacore ライブラリパッケージです。 |
| build/Video_Clock.vhd | さまざまなビデオベースクロックを作成する FPGA オンボード PLL 宣言。Altera Megacore IP コンポーネントです。 |
| build/Video_Clock_inst.vhd | PLL IP のインスタンス化宣言。 |
| build/Video_Clock.qip | PLL 要件の IP 宣言。 |
| build/Video_Clock_II.vhd | さまざまなビデオベースクロックを作成する 2 番目の FPGA オンボード PLL 宣言。Altera Megacore IP コンポーネントです。ビデオベース周波数には 1 つの PLL では対応できない複数のクロックが必要なため、2 番目の PLL を使用します。 |
| build/Video_Clock_II_inst.vhd | 2 番目の PLL IP のインスタンス化宣言。 |
| build/Video_Clock_II.qip | 2 番目の PLL 要件の IP 宣言。 |
FPGA v1.2 ビットストリームのビルド
Quartus Prime を Windows/Linux ワークステーションにインストールするか、以下に説明する Docker イメージを作成することができます。さまざまな Linux ディストリビューションへの複数回のインストール経験から、Docker の使用がこの複雑なパッケージを使用する最も簡単な方法です。
コンパイル:
1. Quartus Prime v13.1 を起動します(ローカルインストールまたは Docker イメージ)。
2. 'File->Open Project' に移動し、リポジトリのクローンが保存されているディレクトリを検索して、<Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/VideoController700.qpf のファイルを選択します。これにより FPGA tranZPUter SW-700 プロジェクトが開きます。
3. 'Processing->Start Compilation' を選択します - 警告メッセージは無視して構いません。
4. 完了すると、<Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/output_files ディレクトリに VideoController700.sof という名前のビットストリームが作成されます。
FPGA のプログラミング:
1. FPGA にビットストリームをアップロードするには、tranZPUter SW-700 ボードの 10 ピン JTAG IDC コネクターに USB ポートで接続した Altera USB Blaster が必要です。
2. Quartus Prime で 'Tools->Programmer' に移動すると、新しいプログラマーウィンドウが起動します。
3. プログラマーウィンドウで 'Hardware Setup' をクリックして USB アダプターを選択し、'Close' をクリックします。
4. 'Auto Detect' をクリックすると、EPM7512AET144、EP3C25E144、EPCS16 の 3 つのデバイスが見つかるはずです。
5. EP3C25E144 デバイスを右クリックし、'Edit->Add File' を選択して <Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/output_files/VideoController700.sof にある sof ファイルを選択し、Open をクリックします。
6. EP3C25E144 に対して 'Program/Configure' のチェックボックスを選択します。
7. 'Start' をクリックすると、FPGA にコンパイル済みビットストリームがプログラムされます。
8. FPGA のプログラミングは永続的ではなく、電源を切るとビットマップが失われます。プログラミングを永続的にするには、以下の手順に従って EPCS16 をプログラムしてください。
EPCS16 のプログラミング:
1. EPCS16(FPGA が電源投入時に読み出す不揮発性シリアルフラッシュ RAM)にビットストリームをアップロードするには、tranZPUter SW-700 ボードの 10 ピン JTAG IDC コネクターに USB ポートで接続した Altera USB Blaster が必要です。
2. Quartus Prime で 'File->Convert Programming Files' に移動すると、新しい 'Convert Programming File' ウィンドウが起動します。
3. Convert Programming File ウィンドウで:
3a. 'Programming File Type' をクリックし、JTAG Indirect Configuration File を選択します。
3b. 'Configuration Device' をクリックし、EPCS16 を選択します。
3c. 'File Name' をクリックし、<Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/output_files/VideoController700.sof を選択します。
3d. 'Flash Loader' をクリックし、'Add Device' ボタンをクリックします。Cyclone III -> EP3C25 を選択し、OK をクリックします。
3e. 'SOF Data' をクリックし、'Add File' ボタンをクリックします。出力ファイル <Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/output_files/VideoController700.jic を選択し、OK をクリックします。
3f. 'Generate' ボタンをクリックすると、出力 JIC ファイルが <Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/output_files/VideoController700.jic として作成されます。
3g. 'Close' をクリックして Convert Programming File ウィンドウを閉じます。
4. Quartus Prime で 'Tools->Programmer' に移動すると、新しいプログラマーウィンドウが起動します。
5. プログラマーウィンドウで 'Hardware Setup' をクリックして USB アダプターを選択し、'Close' をクリックします。
6. 'Auto Detect' をクリックすると、EPM7512AET144、EP3C25E144、EPCS16 の 3 つのデバイスが見つかるはずです。
7. EP3C25E144 デバイスを右クリックし、'Edit->Add File' を選択して <Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/output_files/VideoController700.sof にある sof ファイルを選択し、Open をクリックします。
8. EPCS16 デバイスを右クリックし、'Edit->Add File' を選択して <Clone Path>/tranZPUter/FPGA/SW700/v1.2/build/output_files/VideoController700.jic にある jic ファイルを選択し、Open をクリックします。
9. EP3C25E144 に対して 'Program/Configure' のチェックボックスを選択します。
10. EPCS16 に対して 'Program/Configure' と 'Verify' のチェックボックスを選択します。
11. 'Start' をクリックすると、FPGA と EPCS16 不揮発性フラッシュ RAM にコンパイル済みビットストリームがプログラムされます。
12. FPGA のプログラミングは永続的になり、電源サイクルをまたいで保持されます。
FPGA バージョン 1.3 - Cyclone IV
tranZPUter SW-700 ハードウェアのバージョン 1.3 の Cyclone IV FPGA は、Sharp MZ-700 向けの v1.2 ボードの強化されたビデオ機能だけでなく、ZPU EVO(lution) などのソフト CPU セットも提供します。この FPGA が提供する機能:
- Sharp MZ 機のビデオ機能:MZ-80K、MZ-80C、MZ-1200、MZ-80A、MZ-700、MZ-800、MZ-80B(GRAM I/II 含む)、MZ-2000(GRAM I/II/III 含む)。
- カラーピクセルグラフィックスモード、8 色 640x400、640x200 および 320x200。
- 複数のビデオ出力モード:オリジナル 50Hz、オリジナル 60Hz、VGA 640x480@60Hz、VGA 800x600@60Hz。
- T80 ソフト CPU(VHDL で記述された Z80 互換プロセッサー)。
- ZPU EVO(lution) ソフト CPU(zOS オペレーティングシステムを実行する 32 ビットスタックベースプロセッサー)。
- MZ-80K から MZ-2200 までのすべての Sharp MZ 機のハードウェアエミュレーションを提供する Sharp MZ シリーズ FPGA エミュレーション。
| モジュール | 説明 |
|---|---|
| coreMZ.vhd | 標準 Sharp MZ コアロジックのトップレベル設計ファイル。回路のルートスキーマティックに相当します。FPGA に入力されるメインコンポーネント信号とその使用方法をレイアウトします。 |
| coreMZ_pkg.vhd | 関数、定数宣言、パラメーターを含み、コンパイルされたすべての VHDL ファイル/モジュールで使用されます。 |
| coreMZ_constraints.sdc | Time Quest タイミング解析ツールが作成・使用するタイミング制約ファイル。コンパイラとフィッターが FPGA 内のコンポーネント配置を決定する際にも使用されます。 |
| coreMZ.qip | 標準 Sharp MZ コアロジック(ビデオコントローラーとインターフェース)を記述する Quartus IP ファイル。 |
| coreMZ_emuMZ_constraints.sdc | Time Quest タイミング解析ツールが作成・使用するタイミング制約ファイル。コンパイラとフィッターが FPGA 内のコンポーネント配置を決定する際にも使用されます。 |
| coreMZ_emuMZ.qip | Sharp MZ シリーズ FPGA エミュレーションロジックとインターフェースを含む Sharp MZ コアを記述する Quartus IP ファイル。 |
| coreMZ_emuMZ.vhd | Sharp MZ コアロジックと Sharp MZ シリーズ FPGA エミュレーションロジックのトップレベル設計ファイル。回路のルートスキーマティックに相当します。FPGA に入力されるメインコンポーネント信号とその使用方法をレイアウトします。 |
| coreMZ_SoftCPU_constraints.sdc | Time Quest タイミング解析ツールが作成・使用するタイミング制約ファイル。コンパイラとフィッターが FPGA 内のコンポーネント配置を決定する際にも使用されます。 |
| coreMZ_SoftCPU.qip | ホスト上でプライマリプロセッサーとして動作する ZPU Evo/T80 プロセッサーを含む Sharp MZ コアロジックを記述する Quartus IP ファイル。 |
| coreMZ_SoftCPU.vhd | Sharp MZ コアと ZPU Evo/T80 プロセッサーロジックのトップレベル設計ファイル。回路のルートスキーマティックに相当します。FPGA に入力されるメインコンポーネント信号とその使用方法をレイアウトします。 |
| ビデオコントローラーモジュール。 | |
| VideoController/VideoController.vhd | ビデオコントローラー設計ファイル。Sharp MZ 互換ビデオコントローラーをインスタンス化するためのすべてのロジックを含みます。 |
| VideoController/VideoController_pkg.vhd | ビデオコントローラーパッケージ設定ファイル。関数、定数宣言、パラメーターを含み、コンパイルされたすべての VHDL ファイル/モジュールで使用されます。 |
| VideoController/VideoController_constraints.sdc | ビデオコントローラー用タイミング制約ファイル。 |
| soft68K | Motorola M68000 ソフトプロセッサー用のプレースホルダーディレクトリ。 |
| T80/AZ80/NextZ80 モジュール。 | |
| softT80.qip | ソフト T80 プロセッサーコンポーネントを記述する Quartus IP ファイル。 |
| softT80/softT80.vhd | T80 ソフト CPU 設計ファイル。T80 をこの設計にバインドするための宣言とグルーロジックを含みます。 |
| softT80/softT80_pkg.vhd | T80 パッケージ設定ファイル。関数、定数宣言、パラメーターを含み、コンパイルされたすべての VHDL ファイル/モジュールで使用されます。 |
| softT80/softT80_constraints.sdc | タイミング制約ファイル。 |
| softT80/T80/T80a.vhd | Z80 と同じ信号を持つ標準 Z80 プロセッサーを記述する T80 設計ファイル。 |
| softT80/T80/T80.vhd | Z80 プロセッサーを記述する T80 設計ファイル。 |
| softT80/T80/T80_Pack.vhd | |
| softT80/T80/T80_MCode.vhd | |
| softT80/T80/T80_ALU.vhd | |
| softT80/T80/T80_Reg.vhd | |
| softT80/T80/T80_RegX.vhd | |
| softT80/AZ80/* | Z80 プロセッサーを記述する AZ80 設計ファイル。 |
| softT80/NextZ80/* | Z80 プロセッサーを記述する NextZ80 設計ファイル。 |
| ZPU Evolution モジュール。 | |
| softZPU.qip | ソフト ZPU Evolution プロセッサーコンポーネントを記述する Quartus IP ファイル。 |
| softZPU/softZPU.vhd | ZPU ソフト CPU 設計ファイル。ZPU Evolution プロセッサーをこの設計にバインドするための宣言とグルーロジックを含みます。 |
| softZPU/softZPU_pkg.vhd | ZPU パッケージ設定ファイル。関数、定数宣言、パラメーターを含み、コンパイルされたすべての VHDL ファイル/モジュールで使用されます。 |
| softZPU/softZPU_constraints.sdc | タイミング制約ファイル。 |
| softZPU/ZPU/zpu_core_evo.vhd | ZPU Evolution 設計ファイル。ZPU Evolution プロセッサーを記述します。 |
| softZPU/ZPU/zpu_core_evo_L2.vhd | ZPU Evolution レベル 2 キャッシュ設計ファイル。レベル 2 キャッシュメカニズムを記述します。 |
| softZPU/ZPU/zpu_uard_debug.vhd | ZPU Evolution デバッグハードウェア。この設計では使用されませんが、通常は接続されたシリアルポートにリアルタイムのデバッグ情報を送信します。 |
| softZPU/ZPU/zpu_pkg.vhd | ZPU Evolution プロセッサーのセットアップ用の関数、定数宣言、パラメーターを含むファイル。 |
| オンボード EPCS64 フラッシュ ROM のプログラミング用 Quartus シリアルフラッシュロジックモジュール。 | |
| SFL/SFL_IV.vhd | シリアルフラッシュローダーの宣言。シリアルフラッシュローダーは、専用シリアルブートピンを介して接続されたシリアルフラッシュデバイスをプログラムするために使用される Altera Megacore IP コンポーネントです。シリアルフラッシュデバイスは電源サイクル時に FPGA ビットストリームをロードするために使用されます。 |
| SFL/SFL_IV_inst.vhd | FPGA 経由で EPCS64 デバイスをプログラムするために使用されるシリアルフラッシュローダー IP のインスタンス化宣言。 |
| SFL/SFL_IV.qip | シリアルフラッシュローダーの IP 宣言。Altera Megacore ライブラリパッケージです。 |
| フェーズロックドループモジュール。 | |
| PLL/Video_Clock.vhd | さまざまなビデオベースクロックを作成する FPGA オンボード PLL 宣言。Altera Megacore IP コンポーネントです。 |
| PLL/Video_Clock_inst.vhd | PLL IP のインスタンス化宣言。 |
| PLL/Video_Clock.qip | PLL 要件の IP 宣言。 |
| PLL/Video_Clock_II.vhd | さまざまなビデオベースクロックを作成する 2 番目の FPGA オンボード PLL 宣言。Altera Megacore IP コンポーネントです。ビデオベース周波数には 1 つの PLL では対応できない複数のクロックが必要なため、追加の PLL を使用します。 |
| PLL/Video_Clock_II_inst.vhd | 2 番目の PLL IP のインスタンス化宣言。 |
| PLL/Video_Clock_II.qip | 2 番目の PLL 要件の IP 宣言。 |
| PLL/Video_Clock_III.vhd | さまざまなビデオベースクロックを作成する 3 番目の FPGA オンボード PLL 宣言。Altera Megacore IP コンポーネントです。ビデオベース周波数には 1 つの PLL では対応できない複数のクロックが必要なため、追加の PLL を使用します。 |
| PLL/Video_Clock_III_inst.vhd | 3 番目の PLL IP のインスタンス化宣言。 |
| PLL/Video_Clock_III.qip | 3 番目の PLL 要件の IP 宣言。 |
| PLL/Video_Clock_IV.vhd | ソフト CPU ベースクロックを作成する 4 番目の FPGA オンボード PLL 宣言。Altera Megacore IP コンポーネントです。ビデオベース周波数には 1 つの PLL では対応できない複数のクロックが必要なため、追加の PLL を使用します。 |
| PLL/Video_Clock_IV_inst.vhd | 4 番目の PLL IP のインスタンス化宣言。 |
| PLL/Video_Clock_IV.qip | 4 番目の PLL 要件の IP 宣言。 |
| build/coreMZ.qpf | Quartus Prime がプロジェクトとそのすべてのファイルを宣言するために使用するプロジェクトファイル。 |
| build/coreMZ.qsf | 定義および割り当てファイル。コンパイル、フィッティング、使用するピンとその名前・パラメーターなどすべてのパラメーターを設定します。このファイルは Quartus Prime によって作成されますが、Quartus Prime GUI を使うよりも手作業で変更する方が早い場合もあります。 |
| devices/sysbus/BRAM/TZSW_SinglePortBootBRAM.vhd | ZPU プロセッサー用の 32 ビット幅 RAM 定義。 |
| Sharp MZ シリーズ FPGA エミュレーションモジュール | |
| emuMZ/emuMZ_pkg.vhd | 関数、定数宣言、パラメーターを含み、コンパイルされたすべての VHDL ファイル/モジュールで使用されます。 |
| emuMZ/emuMZ.vhd | エミュレーションのコアロジック。 |
| emuMZ/emuMZ.qip | エミュレーション機能に必要なモジュールを記述する Quartus IP ファイル。 |
| emuMZ/arbiter.vhd | ホストバスへのアクセスのための単純な調停サービス用 VHDL。 |
| emuMZ/clkgen.vhd | 分周を使用したプログラマブルクロック生成モジュール用 VHDL。 |
| emuMZ/cmt_hw.vhd | 実際の CMT ドライブをエミュレーションとエミュレートされた CMT ドライブの間でインターフェースする VHDL。 |
| emuMZ/cmt.vhd | Sharp PWM テープインターフェースを完全にエミュレートする VHDL。 |
| emuMZ/i8254/i8254_counter.vhd | i8254 タイマーモジュール用 VHDL。 |
| emuMZ/i8254/i8254.vhd | i8254 プログラマブルインターバルタイマー IC を記述する VHDL。 |
| emuMZ/i8255/i8255.vhd | i8255 プログラマブルペリフェラルインターフェース IC を記述する VHDL。 |
| emuMZ/iointr.vhd | エミュレーションサポート回路が I/O プロセッサー上で割り込みを生成できるようにするための単純な割り込みサービス用 VHDL。 |
| emuMZ/keymatrix_mz700.vhd | MZ-700 ハードウェアスキャン結果を有効なエミュレーションが期待するスキャン値に変換する VHDL キーボードモジュール。 |
| emuMZ/keymatrix_mz2000.vhd | MZ-2000 ハードウェアスキャン結果を有効なエミュレーションが期待するスキャン値に変換する VHDL キーボードモジュール。 |
| emuMZ/keymatrix_ps2.vhd | PS2 キーコードを Sharp スキャンマトリックスキー接続に変換する VHDL キーボードモジュール。 |
| emuMZ/mctrl.vhd | 同期リセット管理とともにエミュレーションのプログラマブル制御用 VHDL。 |
| emuMZ/mz80b.vhd | MZ-80B ビジネスコンピューターシリーズロジック用 VHDL。 |
| emuMZ/mz80c.vhd | MZ-80A パーソナルコンピューターシリーズロジック用 VHDL。 |
| emuMZ/z8420/Interrupt.vhd | Z80 PIO デイジーチェーン割り込みロジック用 VHDL |
| emuMZ/z8420/z8420.vhd | Z80 PIO IC 用 VHDL。 |
FPGA v1.3 ビットストリームのビルド
Quartus Prime を Windows/Linux ワークステーションにインストールするか、以下に説明する Docker イメージを作成することができます。さまざまな Linux ディストリビューションへの複数回のインストール経験から、Docker の使用がこの複雑なパッケージを使用する最も簡単な方法です。
コンパイル:
1. Quartus Prime v17.1 を起動します(ローカルインストールまたは Docker イメージ)。
2. 'File->Open Project' に移動し、リポジトリのクローンが保存されているディレクトリを検索して、<Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/coreMZ.qpf のファイルを選択します。これにより FPGA tranZPUter SW-700 プロジェクトが開きます。
3. 'Processing->Start Compilation' を選択します - 警告メッセージは無視して構いません。
4. 完了すると、<Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/output_files ディレクトリに VideoController700.sof という名前のビットストリームが作成されます。
FPGA のプログラミング:
1. FPGA にビットストリームをアップロードするには、tranZPUter SW-700 ボードの 10 ピン JTAG IDC コネクターに USB ポートで接続した Altera USB Blaster が必要です。
2. Quartus Prime で 'Tools->Programmer' に移動すると、新しいプログラマーウィンドウが起動します。
3. プログラマーウィンドウで 'Hardware Setup' をクリックして USB アダプターを選択し、'Close' をクリックします。
4. 'Auto Detect' をクリックすると、EPM7512AET144、EP4CE75F23、EPCS64 の 3 つのデバイスが見つかるはずです。
5. EP3C25E144 デバイスを右クリックし、'Edit->Add File' を選択して <Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/output_files/coreMZ.sof にある sof ファイルを選択し、Open をクリックします。
6. EP4CE75F23 に対して 'Program/Configure' のチェックボックスを選択します。
7. 'Start' をクリックすると、FPGA にコンパイル済みビットストリームがプログラムされます。
8. FPGA のプログラミングは永続的ではなく、電源を切るとビットマップが失われます。プログラミングを永続的にするには、以下の手順に従って EPCS54 をプログラムしてください。
EPCS16 のプログラミング:
1. EPCS16(FPGA が電源投入時に読み出す不揮発性シリアルフラッシュ RAM)にビットストリームをアップロードするには、tranZPUter SW-700 ボードの 10 ピン JTAG IDC コネクターに USB ポートで接続した Altera USB Blaster が必要です。
2. Quartus Prime で 'File->Convert Programming Files' に移動すると、新しい 'Convert Programming File' ウィンドウが起動します。
3. Convert Programming File ウィンドウで:
3a. 'Programming File Type' をクリックし、JTAG Indirect Configuration File を選択します。
3b. 'Configuration Device' をクリックし、EPCS64 を選択します。
3c. 'File Name' をクリックし、<Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/output_files/coreMZ.sof を選択します。
3d. 'Flash Loader' をクリックし、'Add Device' ボタンをクリックします。Cyclone IV -> EP4CE75 を選択し、OK をクリックします。
3e. 'SOF Data' をクリックし、'Add File' ボタンをクリックします。出力ファイル <Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/output_files/coreMZ.jic を選択し、OK をクリックします。
3f. 'Generate' ボタンをクリックすると、出力 JIC ファイルが <Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/output_files/coreMZ.jic として作成されます。
3g. 'Close' をクリックして Convert Programming File ウィンドウを閉じます。
4. Quartus Prime で 'Tools->Programmer' に移動すると、新しいプログラマーウィンドウが起動します。
5. プログラマーウィンドウで 'Hardware Setup' をクリックして USB アダプターを選択し、'Close' をクリックします。
6. 'Auto Detect' をクリックすると、EPM7512AET144、EP4CE75F23、EPCS64 の 3 つのデバイスが見つかるはずです。
7. EP3C25E144 デバイスを右クリックし、'Edit->Add File' を選択して <Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/output_files/coreMZ.sof にある sof ファイルを選択し、Open をクリックします。
8. EPCS16 デバイスを右クリックし、'Edit->Add File' を選択して <Clone Path>/tranZPUter/FPGA/SW700/v1.3/build/output_files/coreMZ.jic にある jic ファイルを選択し、Open をクリックします。
9. EP4CE75F23 に対して 'Program/Configure' のチェックボックスを選択します。
10. EPCS64 に対して 'Program/Configure' と 'Verify' のチェックボックスを選択します。
11. 'Start' をクリックすると、FPGA と EPCS64 不揮発性フラッシュ RAM にコンパイル済みビットストリームがプログラムされます。
12. FPGA のプログラミングは永続的になり、電源サイクルをまたいで保持されます。
Docker 上の Quartus Prime
-
リポジトリをクローン:
cd ~ git clone https://git.eaw.app/eaw/zpu.git cd zpu/docker/QuartusPrime
現在の設定では Quartus Prime の Lite バージョンをビルドします。Standard バージョンをインストールする場合は、Docker イメージをビルドする前に:編集: zpu/docker/QuartusPrime/Dockerfile.13.0.1 コメント解除: '#ARG QUARTUS=QuartusSetup-13.0.1.232.run' コメントアウト: 'ARG QUARTUS=QuartusSetupWeb-13.0.1.232.run'ライセンスファイルがある場合:
コピー: <your license file> を zpu/docker/QuartusPrime/files/license.dat へ 編集: zpu/docker/QuartusPrime/run.sh 変更: MAC_ADDR="02:50:dd:72:03:01" をライセンスファイルの MAC アドレスに変更。Docker イメージをビルド:
docker build -f Dockerfile.13.0.1 -t quartus-ii-13.0.1 --build-arg user_uid=`id -u` --build-arg user_gid=`id -g` --build-arg user_name=`whoami` .
Quartus Prime 13.1 または 17.1.1 の場合は 13.0.1 を必要なバージョンに置き換えてください。Quartus Prime 13.0.1 は古い MAX CPLD デバイスをサポートします。Quartus Prime 13.1 は古い Cyclone III デバイスをサポートし、17.1.1 は Cyclone IV デバイスをサポートします。 -
X DISPLAY 変数を X サーバーを指すように設定:
export DISPLAY=<x server ip or hostname>:<screen number or :<screen number>> # 例: export DISPLAY=192.168.1.1:0X サーバーマシン上で以下のコマンドを実行:
xhost + # またはプライベートでないネットワークでセキュリティを維持するには xhost <ip of docker host> -
Quartus からアクセス可能なプロジェクトディレクトリを設定。
編集: zpu/docker/QuartusPrime/run.sh 変更: PROJECT_DIR_HOST=<Quartus Prime からアクセスしたいホスト上の場所> 変更: PROJECT_DIR_IMAGE=<上記ホストディレクトリがマップされる Quartus Prime 実行コンテナ内の場所> # 例: PROJECT_DIR_HOST=/srv/quartus PROJECT_DIR_IMAGE=/srv/quartus -
提供された bash スクリプト ‘run_quartus.sh’ を使用してイメージを実行します。このスクリプトは
./run_quartus.sh
これにより Quartus Prime と対話型 bash シェルが起動します。
初回起動時は現在ライセンスファイルの確認を求めます。'Run the Quartus Prime software' をクリックし、OK をクリックしてください。
ホストデバイスは実行中の Docker コンテナにマップされているため、USB Blaster を接続するとプログラマーツール内で認識されます。インストールの一部として、USB-Blaster と USB-Blaster II の udev ルール、および CYC1000 開発ボード用の Arrow USB-Blaster ドライバーもインストールします。 -
Quartus Prime を停止するには:
# メインの Quartus Prime GUI ウィンドウで File->Exit から終了するか # または docker stop quartus
ソフトウェア
バージョン v1.3 以降では ZPU がホストプロセッサーとして組み込まれ、それに応じて zOS が更新されました。必要なハードウェアドライバー機能を含む 'SharpMZ' モジュールが追加されています。ビルド時のフラグがビルドスクリプトをガイドし、ホストプロセッサー用途に特化した zOS バージョンを作成します。
zOS
オペレーティングシステムの詳細については zOS のセクションを参照してください。標準機能とツールに加えて、以下のアプリケーションが追加されています:
| コマンド | 説明 |
|---|---|
| tzload | tranZPUter メモリへのファイルのアップロードとダウンロード、ビデオフレームの取得、新しいフレームの設定。 |
| tzdump | tranZPUter メモリの内容を画面にダンプ表示 |
TZDUMP v1.1
コマンド:-
-h | --help このヘルプテキスト。
-a | --start 開始アドレス。
オプション:-
-e | --end 終了アドレス(--size の代替として使用可能)。
-s | --size ダンプするメモリブロックのサイズ(--end の代替として使用可能)。
-f | --fpga 操作は FPGA メモリに対して行われます。このフラグなしのデフォルトは tranZPUter メモリを対象とします。
-m | --mainboard 操作は MZ80A マザーボード上で行われます。このフラグなしのデフォルトは tranZPUter メモリを対象とします。
-v | --verbose 詳細なメッセージを出力します。
使用例:
tzdump -a 0x000000 -s 0x200 # 0x000000 から 0x000200 まで tranZPUter メモリをダンプ。
| tzclear | tranZPUter メモリのクリア。 |
TZCLEAR v1.1
コマンド:-
-h | --help このヘルプテキスト。
-a | --start 開始アドレス。
オプション:-
-e | --end 終了アドレス(--size の代替として使用可能)。
-s | --size クリアするメモリブロックのサイズ(--end の代替として使用可能)。
-b | --byte クリアした各メモリ位置に書き込むバイト値。デフォルトは 0x00。
-f | --fpga 操作は FPGA メモリに対して行われます。このフラグなしのデフォルトは tranZPUter メモリを対象とします。
-m | --mainboard 操作は MZ80A マザーボード上で行われます。このフラグなしのデフォルトは tranZPUter メモリを対象とします。
-v | --verbose 詳細なメッセージを出力します。
使用例:
tzclear -a 0x000000 -s 0x200 -b 0xAA # tranZPUter メモリの 0x000000 から 0x000200 までを値 0xAA でクリア。
| tzclk | 代替 Z80 CPU クロック周波数の設定。 |
TZCLK v1.0
コマンド:-
-h | --help このヘルプテキスト。
-f | --freq 希望する CPU クロック周波数。
オプション:-
-e | --enable セカンダリ CPU クロックを有効化。
-d | --disable セカンダリ CPU クロックを無効化。
-v | --verbose 詳細なメッセージを出力します。
使用例:
tzclk --freq 4000000 --enable # セカンダリ CPU クロック周波数を 4MHz に設定し、tranZPUter ボード上での使用を有効化。
| tzreset | tranZPUter のリセット。 |
TZRESET v1.0
コマンド:-
-h | --help このヘルプテキスト。
-r | --reset ハードウェアリセットを実行。
-l | --load デフォルト ROM を再ロード。
-m | --memorymode <val> メモリモードの設定。
オプション:-
-v | --verbose 詳細なメッセージを出力します。
使用例:
tzreset -r # Z80 および関連する tranZPUter ロジックをリセット。
| tzio | Z80 I/O ポート読み書きツール。 |
TZIO v1.1
コマンド:-
-h | --help このヘルプテキスト。
-o | --out <port> I/O アドレスへ出力。
-i | --in <port> I/O アドレスから入力。
オプション:-
-b | --byte --out コマンドで I/O ポートに送るバイト値。デフォルトは 0x00。
-m | --mainboard 操作は MZ80A マザーボード上で行われます。このフラグなしのデフォルトは tranZPUter I/O ドメインを対象とします。
-v | --verbose 詳細なメッセージを出力します。
使用例:
tzio --out 0xf8 --byte 0x10 # アドレス 0xf8 で FPGA ビデオモードを設定。
| tzflupd | K64F FlashRAM 更新ツール。実行中の zOS/ZPUTA カーネルを新しいバージョンに更新します。 |
TZFLUPD v1.1
コマンド:-
-h | --help このヘルプテキスト。
-f | --file K64F にアップロードしてフラッシュするバイナリファイル。
オプション:-
-v | --verbose 詳細なメッセージを出力します。
使用例:
tzflupd -f zOS_22012021_001.bin --verbose # zOS_22012021_001.bin ファイルを K64F フラッシュメモリにアップロードして書き込み。
| tzmtest | TranZPUter メモリテストプログラム。K64F が複数の方式でループし、tranZPUter スタティック RAM と FPGA BRAM をテストします。 |
TZMTEST v1.0
コマンド:-
-h | --help このヘルプテキスト。
-a | --start 開始アドレス。
オプション:-
-e | --end 終了アドレス(--size の代替として使用可能)。
-s | --size テストするメモリブロックのサイズ(--end の代替として使用可能)。
-f | --fpga 操作は FPGA メモリに対して行われます。このフラグなしのデフォルトは tranZPUter メモリを対象とします。
-i | --iter テストの繰り返し回数、デフォルト = 1。
-t | --test ビット値でテストを指定。ビット 0 = R/W インクリメント昇順テスト、1 = R/W インクリメントウォーキングテスト、2 = W 昇順後 R、
ビット 3 = W ウォーキング後 R、ビット 4 = エコーおよびスティックビットテスト。
-v | --verbose 詳細なメッセージを出力します。
使用例:
tzmtest -a 0x000000 -s 0x20000 # 0x000000 から 0x020000 まで 128K の tranZPUter メモリをテスト。
*T*ran*Z*puter *F*iling *S*ystem
TranZputer ファイリングシステム(TZFS)は、MZ-80A Rom Disk アップグレードボードで使用される Rom Filing System を移植したものです。多くの同一ソフトウェア機能を再利用しているため同等のサービスを提供しますが、異なるメモリモデルを使用している点が違いです。その目的は、SD カードに保存されたファイルを操作するための方法と、拡張コマンドラインインターフェース(TZFS モニター)を提供することです。コマンドセットには SD ファイルの操作・バックアップのほか、MZ700/800 コンピューターに見られる多数のコマンドが含まれています。
RFS ではソフトウェアを多くの ROM ページに分割してページングでアクセスする必要がありましたが、TZFS も同様です。ただしページサイズが大きいため、必要なページ数は少なくなっています。TranZputer ファイリングシステムを構成する Z80 ソフトウェアは、リポジトリの <software> ディレクトリ内にあります。
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 | 未使用。 |
| tzfs_bank4.asm | 0xF000:0xFFFF | 4K | 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 | Sharp MZ-700 用オリジナル 1Z-013A モニター。MZ-80A キーボードおよびアトリビュート RAM カラーを使用するようにパッチ済み。 |
| monitor_80c_1Z-013A.asm | 0x00000:0x01000 | 4K | 0 | Sharp MZ-700 用オリジナル 1Z-013A モニター。MZ-80A キーボード、アトリビュート RAM カラー、80 カラムモードを使用するようにパッチ済み。 |
| 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 オペレーティングシステム。これらはサービスを必要としないアプリケーションによって上書きされる場合があり、アプリケーション終了時に再ロードされます。 |
| cpm22-bios.asm | 0 | カスタム BIOS は自己完結型であり、このスタブにはコードが含まれなくなりました。 |
CP/M ソフトウェアのビルドを補助するシェルスクリプトも含まれています:
| スクリプト | 説明 |
|---|---|
| assemble_cpm.sh | TZFS 経由でロードする MZF フォーマットアプリケーションとして CPM バイナリをビルドするシェルスクリプト。 |
| make_cpmdisks.sh | FAT32 フォーマットの SD カードで使用するバイナリファイルとして CPM ディスクセットをビルドする bash スクリプト。フロッピーディスクエミュレーターまたは物理メディアへのコピー用に CPC 拡張ディスクフォーマットも作成されます。 |
| glass-0.5.1.jar | Glass リリース 0.5 のバグ修正版。0.5 は 0xFFFF に 1 バイト書き込めなかったため修正済み。 |
詳細は CP/M セクションを参照してください。
TZFS モニター
JE800<cr>
コンピューターを直接 TZFS で自動起動させることも可能です。そのためには SD カードのルートディレクトリに以下の名前の空ファイルを作成してください:
'TZFSBOOT.FLG'
TZFS が起動すると、通常の 1Z-013A モニターサインオンバナーが表示され、正常に動作していれば「+ TZFS」というサフィックスが追加されます。通常の「*」プロンプトが表示され、オリジナルの 1Z-013A コマンドに加え、MZ80A/MZ700/MZ800 シリーズに見られるものやカスタムコマンドを含む拡張コマンドセットを使用できます。コマンドの全一覧を以下の表に示します:
| コマンド | パラメーター | 説明 |
|---|---|---|
| 4 | なし | 40 文字モードへ切り替え。 |
| 8 | なし | 80 文字モードへ切り替え。 |
| 40A | なし | Sharp MZ-80A 40 カラム BIOS およびモードへ切り替え。 |
| 80A | なし | Sharp MZ-80A 80 カラム BIOS およびモードへ切り替え。 |
| 700 | なし | Sharp MZ-700 40 カラム BIOS およびモードへ切り替え。 |
| 7008 | なし | Sharp MZ-700 80 カラム BIOS およびモードへ切り替え。 |
| B | なし | キー入力ビープ音の有効/無効切り替え。 |
| BASIC | なし | SD カード上の最初の BASIC インタープリターを検索し、ロードして実行。 |
| C | [<8 ビット値>] | 0x1200 から RAM の先頭まで 0x00 または指定値でメモリを初期化。 |
| CD | [<ディレクトリ>] | 指定した SD カードディレクトリ <directory> へ移動。ディレクトリ未指定の場合はデフォルトの \MZF にリセット。ディレクトリ変更後、DIR コマンドは I/O プロセッサーがディレクトリ内容をキャッシュするため数秒かかる場合があります。 |
| CPM | なし | SD カード上の CP/M 2.23 を検索し、ロードして実行。 |
| D | <アドレス>[<アドレス2>] | <アドレス> から <アドレス2>(または 20 行分)まで 16 進数と ASCII でメモリダンプ。画面が一杯になるとキー入力待ちで一時停止。 アドレスなしで連続して「D」コマンドを実行すると、前回表示した続きから表示。 ページング中に認識されるキー: 「D」 - 次ページ、「U」 - 前ページ、「X」 - 終了、その他のキーでデータを 1 画面表示。 |
| DIR | <ワイルドカード> | SD カードに保存されたファイルの一覧表示。各ファイルタイトルの前に識別用の 16 進数が付きます。 ワイルドカードパターンを指定して結果を絞り込めます(例:「*BASIC*」で BASIC を含む全ファイルを一覧表示)。 出力形式は HH<区切り文字>ファイル名。<区切り文字> はファイルの種別を示します: 「.」= マシン語、「-」= BASIC MZ80K/C/A、「<-」= BASIC MZ-700/800、「+」= その他。 |
| EC | <名前> または <ファイル番号> |
SD カードからファイルを消去。<名前> または <ファイル番号> に一致するファイルを SD カード上で検索し、見つかれば消去。 |
| EX | なし | TZFS を終了してマシンを元の状態に戻し、I/O プロセッサーを無効化。 |
| F | [<ドライブ番号>] | 指定したフロッピーディスクからブート。ディスク番号が指定されない場合は入力を促します。 |
| FREQ | <周波数(KHz)> | CPU 周波数を指定値に変更。0 でデフォルト周波数に戻す。あらゆる周波数が可能で、CPU が制限要因となります。搭載の 20MHz Z80 CPU では最大 24MHz が検証済み。 |
| H | なし | これらのコマンドのヘルプ画面を表示。 |
| J | <アドレス> | <アドレス> の位置にジャンプ(実行開始)。 |
| L | LT | [,<ハードウェアモード>] | テープからファイルをメモリにロードして実行。 <ハードウェアモード> はコマンドで使用するマシンのカセットシステムを指定します。例: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 | [,<ハードウェアモード>] | テープからファイルをメモリにロード、実行しない。 <ハードウェアモード> は LT と同様。 |
| LC | <名前> または <ファイル番号>[,<ターゲットモデル>] |
SD カードからファイルをメモリにロード。<名前> または <ファイル番号> に一致するファイルを SD カード上で検索し、見つかればロードして実行。 オプション引数 <ターゲットモデル> により、ロードしたソフトウェアを実行すべきターゲットを設定できます。この引数は、デフォルトで MZ-800 として実行するが MZ-700 互換モードを強制したい MZ-800 のようなマシン向けです。ホストマシンのオリジナルメモリにソフトウェアをロードして実行するためにも使用されます。現在のフラグ: 8 - MZ-800 ホストで MZ-800 モードを強制。 7 - MZ-800 ホストで MZ-700 モードを強制。 O - ホストメモリにロードしてオリジナルとして実行。 |
| LCNX | <名前> または <ファイル番号>[,<ターゲットモデル>] |
SD カードからファイルをメモリにロード。<名前> または <ファイル番号> に一致するファイルを SD カード上で検索し、見つかればロードするが実行しない。 <ターゲットモデル> は LC と同様。 |
| M | <アドレス> | <アドレス> から始まるメモリ位置を編集・変更。 |
| MZ | [<マシン>] | Sharp MZ シリーズハードウェアエミュレーターを起動。ホストの MZ-700 を他の MZ シリーズマシン(例:MZ-80B)をエミュレートするよう再設定します。 <マシン> はオプションパラメーターで、初期起動マシンを指定します。このオプションなしの初期マシンは MZ-80K で、OSD メニューで変更できます。OSD メニューは SHIFT+BLANK を押すと起動し、同じキーを押すと閉じます。 マシン選択: MZ80K、MZ80C、MZ1200、MZ80A、MZ700、MZ800、MZ80B、MZ2000。 |
| P | なし | 接続されたプリンターのテスト実行。 |
| R | なし | メインメモリのメモリテスト実行。 |
| S | <開始アドレス> <終了アドレス> <実行アドレス>[,<ハードウェアモード>] | メモリのブロックをテープに保存。ファイル名の入力を促されます。 例:S120020001203 - 0x1200 から 0x2000 まで保存し、実行アドレスを 0x1203 に設定。 <ハードウェアモード> は LT と同様。 |
| SC | <開始アドレス> <終了アドレス> <実行アドレス>[,<ハードウェアモード>] | メモリのブロックを MZF ファイルとして SD カードに保存。SD カード上で作成するファイル名の入力を促されます。 <ハードウェアモード> は LT と同様。 |
| SD2T | <名前> または <ファイル番号>[,<ハードウェアモード>] |
SD カードからテープへファイルをコピー。<名前> または <ファイル番号> に一致するファイルを SD カード上で検索し、見つかれば CMT のテープにコピー。 <ハードウェアモード> は LT と同様。 |
| T | なし | 8253 タイマーのテスト。 |
| T2SD[B] | [,<ハードウェアモード>] | テープから SD カードへファイルをコピー。テープからプログラムをロードし、SD カードの空き位置に書き込みます。コマンド末尾に B を追加するとバッチモードが有効になり、1 本以上のカセットのすべてのプログラムを変換するループに入ります。BREAK キーを押すかエラーが発生すると停止。 <ハードウェアモード> は LT と同様。 |
| T80 | なし | ソフト T80 CPU に切り替え、ハード Z80 を無効化。 |
| V | なし | テープに書き込んだばかりのファイルをメモリ内のオリジナルデータと照合 |
| VBORDER | <カラー> | VGA ボーダーカラーを設定。 0 = 黒 1 = 緑 2 = 青 3 = シアン 4 = 赤 5 = 黄 6 = マゼンタ 7 = 白。 |
| VMODE | <ビデオモード> | 拡張 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 モード> | VGA 互換出力モードを選択。 0 = オリジナル Sharp モード 1 = 640x480 @ 60Hz 2 = 800x600 @ 60Hz。 |
| 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 はプログラムをロードしますが実行せず、完了時にロード情報、サイズ、実行アドレスを報告します。
ソーステープのマシンを指定するには、コマンドの後に <ハードウェアモード> オプションを使用します(デフォルト、未指定の場合は MZ-700)。
例:MZ-80B 標準 1800 ボードシステムを使用してテープをロードする場合は次のコマンドを発行します:
L,B
テープへの保存
MZ-700 メモリから MZ-700 CMT ユニットにテープを保存するには、S または同一の ST コマンドを使用できます。連続したコマンドとして、開始アドレス(MZ-700 メモリ内のプログラムの位置)、終了アドレス(プログラムの最後のアドレス)、実行アドレスを指定します。現在、属性の指定はできず、デフォルトで OBJCD(実行可能)となります。 コマンドを発行するとファイル名の入力が促され、MZF ヘッダーが作成されてプログラムがテープに保存されます。
ターゲットテープのマシンを指定するには、コマンドの後に <ハードウェアモード> オプションを使用します(デフォルト、未指定の場合は MZ-700)。
例:$1200 から $3035 まで、実行アドレス $1200 のプログラムを MZ-80B 用のテープとして保存する場合は次のコマンドを発行します:
ST120030351200,B
SD ファイルのテープへのコピー
SD カードに保存された MZF ファイルをテープにコピーするには SD2T コマンドを使用します。通常は CD コマンドと DIR コマンドで必要なファイルを探し、そのユニーク番号をコマンドの引数として指定します。
ターゲットテープのマシンを指定するには、コマンドの後に <ハードウェアモード> オプションを使用します(デフォルト、未指定の場合は MZ-700)。
例:SD カード ID「0C」のファイル BASIC MZ-1Z001 を MZ-2000 マシン用にテープにコピーする場合は、テープをカセットドライブに入れて次のコマンドを発行します:
SD2T0C,2
テープの SD ファイルへのコピー
テープのプログラムを SD カードにコピーするには T2SD コマンドを使用します。通常は CD コマンドでイメージを保存するディレクトリに移動し(ディレクトリごとのファイル上限 255)、このコマンドを実行します。コマンドはテープを検索し、最初に見つかったプログラムをロードして、テープイメージのファイル名で SD カードに保存します。
ターゲットテープのマシンを指定するには、コマンドの後に <ハードウェアモード> オプションを使用します(デフォルト、未指定の場合は MZ-700)。
例:MZ-800 ベースのプログラムを SD カードに保存する場合は、テープをドライブに入れて次のコマンドを発行します:
T2SD,8
完了するとファイルの詳細と SD カード ID が報告されます。
テープ全体の SD への一括コピー
複数ファイルが保存されたテープや複数のテープがあり、すべてを SD に保存したい場合は T2SDB コマンドを使用します。このコマンドは上記の T2SD と同一ですが、テープからの読み取りと SD への保存をループします。BREAK キーを押すといつでもコマンドを終了できます。
ターゲットテープのマシンを指定するには、コマンドの後に <ハードウェアモード> オプションを使用します(デフォルト、未指定の場合は MZ-700)。
例:MZ-800 テープ全体を SD カードに保存する場合は、テープをドライブに入れて次のコマンドを発行します:
T2SDB,8
各ファイルが読み取られて保存されるたびに、開始アドレス、サイズ、実行アドレス、保存されたファイル名が出力されます。
Sharp BASIC SA-5510
インタープリターのバイト位置は重要です。一部のプログラムは既知のアドレスにある関数を期待して記述されているため、逆アセンブルは正確である必要があり、変更や拡張はメインプログラムの外で行う必要があります。幸い、TZFS には必要のない自己複製ブロックがインタープリター内にあり、この領域を追加機能のために使用しました。
RFS ではドライブ指定を LOAD/SAVE コマンドに埋め込むことができましたが、TZFS はより強力でそのために SD カードのディレクトリやワイルドカードを指定する個別のコマンドが必要でした。さらに TZFS には CPU クロックなどのいくつかの便利な機能があり、さらなるコマンドの追加が必要でした。
以下の表にコマンド拡張と簡単な説明を示します。
| コマンド | パラメーター | 説明 |
|---|---|---|
| LOAD | ”[<ファイル名>]” | 現在の SD カードディレクトリまたは CMT(カセット)で「<ファイル名>」のプログラムを検索。<ファイル名> が指定されない場合、次の連続ファイルをロード。 ファイル名の代わりに TZFS インデックス指定子も使用可能。例:LOAD “1E” は SD カードの HEX 1E の位置に保存されたプログラムをロードします。 |
| SAVE | ”[<ファイル名>]” | メモリ内のプログラムを「<ファイル名>」という名前で現在の SD カードディレクトリまたは CMT(カセット)に保存。 <ファイル名> が指定されない場合は「DEFAULT<番号>」という名前で保存。<番号> は 0 から始まる連番。 |
| DIR | ”[<ワイルドカード>]” | TZFS フォーマットで現在の SD カードディレクトリを一覧表示。指定した <ワイルドカード> フィルターを適用。例:DIR M* で M から始まるすべてのプログラムを一覧表示。 |
| CD | [<パス>] | アクティブな SD ディレクトリを <パス> に変更。<パス> 未指定の場合はルートディレクトリに変更。パスが C の場合(例:CDC)は CMT(カセット)に切り替え。その他の引数は SD カードに切り替え。 |
| FREQ | [<周波数>] | CPU を指定した <周波数> に変更。<周波数> は KHz で指定。例:10000 = 10MHz。<周波数> 未指定の場合はオリジナルのマザーボード周波数に戻す。 |
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 つのバージョンで入手可能です。オリジナルと、LOAD/SAVE/SCREEN などのハードウェア依存コマンドを削除しバイナリ/16 進数変数を追加するように調整された Grant Searle による multicomp プロジェクト向けバージョンです。私はその両方を参照して第三のバージョンを作成し、不足していたテープコマンドを含む利用可能なコマンドを記述・拡張しました。
- MS-BASIC(MZ-80A) - オリジナルの 48K ハードウェア。カセットから起動可能。
- MS-BASIC(MZ-700) - オリジナルの 64K ハードウェア。カセットから起動可能。
- MS-BASIC(TZFS40) - ビデオアップグレードハードウェアなしの TZFS アップグレード版。
- MS-BASIC(TZFS80) - 80 カラム表示対応のビデオモジュール FPGA アップグレードを搭載した TZFS アップグレード版。
それぞれが TZFS ドライブに表示されるので、ハードウェアと用途に合わせて使用してください。標準コマンドと関数については、オリジナルの NASCOM Basic Manual を参照してください。以下の表は MZ-80A Rom Disk ハードウェアに合わせて追加した拡張機能の概要です。
| コマンド | パラメーター | 説明 |
|---|---|---|
| CLOAD | ”<ファイル名>” | SD カードからカセットイメージ(トークン化された BASIC プログラム)をロード。 |
| CSAVE | ”<ファイル名>” | 現在の BASIC プログラムをトークン化されたカセットイメージ形式で SD カードに保存。 |
| LOAD | ”<ファイル名>” | 標準 ASCII テキスト BASIC プログラムを SD カードからロード。 |
| SAVE | ”<ファイル名>” | 現在の BASIC プログラムを ASCII テキスト形式で SD カードに保存。 |
| DIR | <ワイルドカード> | 指定したワイルドカードを使用して現在のディレクトリを一覧表示。 |
| CD | <FAT32 パス> | 作業ディレクトリを指定したパスに変更。以降のすべてのコマンドはこのディレクトリを使用します。起動時、CLOAD/CSAVE のデフォルトは 0:\CAS、LOAD/SAVE のデフォルトは 0:\BAS ですが、このコマンドで両方が指定ディレクトリを使用するよう統一されます。デフォルトに戻すにはパスなしで CD と入力。 |
| FREQ | <周波数(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 カセット形式から変換。
tranZPUter SW-700 ソフトウェアのビルド
tranZPUter SW-700 ボードの動作には複数のソフトウェアコンポーネントが必要です:
- zOS 組み込み版 - K64F I/O プロセッサー上で動作する内蔵オペレーティングシステム
- zOS ユーザー版 - Sharp MZ-700 のメインホストプロセッサーとして動作する ZPU Evo 用オペレーティングシステム
- TZFS - Sharp MZ-700 上で動作する Z80 ベースのオペレーティングシステム/ファイリングシステム
- CP/M - Sharp MZ-700 に移植したマイクロコンピューター用の本格的なオペレーティングシステム。膨大なアプリケーションが存在します。
ソフトウェアのビルドにはそれぞれ異なる手順が必要で、以下のセクションで説明します。
パス
読みやすくするため、以下の省略名はこの章内の対応するパスを指します。主要な tranZPUter リポジトリと、オペレーティングシステム用の zSoft の 2 つのリポジトリを使用します。
zSoft リポジトリ(zOS)
| 省略名 | パス | 説明 |
|---|---|---|
| [<絶対パス>] | このリポジトリをシステム上に展開したパス。 | |
| <zsoft> | [<絶対パス>]/zsoft/ | zSoft ソフトウェアのルートディレクトリ。 |
| <z-apps> | [<絶対パス>]/zsoft/apps | アプリケーションディレクトリ。すべての zOS/ZPUTA アプリケーションとそのメイクファイルがここにあります。 |
| <z-build> | [<絶対パス>]/zsoft/build | コンパイル済みソフトウェアの出力先ディレクトリ。例:<z-build>/SD には SD カードに書き込むすべてのファイルが含まれます。 |
| <z-common> | [<絶対パス>]/zsoft/common | ライブラリとしてアセンブルされない共通の C/C++ メソッド。 |
| <z-libraries> | [<絶対パス>]/zsoft/libraries | C/C++ ライブラリ。通常は C/C++ インストールの一部ですが、組み込み作業、特に ZPU では個別に作成が必要です。 |
| <z-teensy3> | [<絶対パス>]/zsoft/teensy3 | K64F ベースの Teensy 3.5 ソフトウェア。一部は zOS の K64F バージョンで使用されます。豊富なライブラリを持ち、K64F プログラムに容易に追加できます。 |
| <z-include> | [<絶対パス>]/zsoft/include | 共通インクルードヘッダーファイル。 |
| <z-startup> | [<絶対パス>]/zsoft/startup | 組み込みプロセッサーの起動ファイル(主にアセンブラー)。テンプレートとマクロを使用して正しいターゲットのメモリモデル起動コードを作成します。 |
| <z-iocp> | [<絶対パス>]/zsoft/iocp | IO 制御プログラム。ZPU 上でアプリケーションをブートストラップするための初期ブートローダー。 |
| <z-zOS> | [<絶対パス>]/zsoft/zOS | zOS のソースコード。異なるターゲット CPU 向けにパラメーター化されています。 |
| <z-zputa> | [<絶対パス>]/zsoft/zputa | ZPUTA のソースコード。異なるターゲット CPU 向けにパラメーター化されています。 |
| <z-rtl> | [<絶対パス>]/zsoft/rtl | レジスタ転送レベルファイル。ZPU ターゲットプロジェクトのビルド時に必要な、生成されたメモリ定義および初期化ファイル。 |
| <z-docs> | [<絶対パス>]/zsoft/docs | ソフトウェアの関連ドキュメント。 |
| <z-tools> | [<絶対パス>]/zsoft/tools | コンパイルとターゲットファイル作成を補助するツール。 |
tranZPUter リポジトリ
| 省略名 | パス | 説明 |
|---|---|---|
| <cpu> | [<絶対パス>]/tranZPUter/cpu | ZPU VHDL 定義ファイル。 |
| <build> | [<絶対パス>]/tranZPUter/build | ZPU ベースの tranZPUter ボードの開発およびテスト用ビルドファイル。 |
| <devices> | [<絶対パス>]/tranZPUter/devices | ZPU 開発または tranZPUter 開発で使用するハードウェアデバイスの RTL 定義。 |
| <docs> | [<絶対パス>]/tranZPUter/docs | プロジェクトの関連ドキュメント。 |
| <pcb> | [<絶対パス>]/tranZPUter/pcb | Gerber ファイル。各 tranZPUter バージョン(SW、SW-700、tranZPUter)が独自のサブディレクトリ内にあります。 |
| <schematics> | [<絶対パス>]/tranZPUter/schematics | Kicad の回路図および PCB 設計ファイル(コンポーネントライブラリ定義を含む)。 |
| <software> | [<絶対パス>]/tranZPUter/software | プロジェクトで使用するソフトウェアのルートディレクトリ。 |
| <tools> | [<絶対パス>]/tranZPUter/software/tools | コンパイルとターゲットファイル作成を補助するツール。 |
| <asm> | [<絶対パス>]/tranZPUter/software/asm | TZFS、CP/M、各種オリジナルモニター ROM の Z80 アセンブラーファイル。 |
| <roms> | [<絶対パス>]/tranZPUter/software/roms | Z80 ソースをアセンブルして作成した ROM ファイル。 |
| <srctools> | [<絶対パス>]/tranZPUter/software/src/tools | tranZPUter v1 Flash RAM メモリマップデコーダーファイル作成ツールおよび NASCOM Basic コンバーターツール。 |
| <cpm> | [<絶対パス>]/tranZPUter/software/CPM | オリジナルの CPM ソフトウェア。アプリケーションごとにグループ化され、生成されたフロッピーディスクおよび SD カードイメージを含みます。 |
| <mzf> | [<絶対パス>]/tranZPUter/software/MZF | 生成された SD カードイメージに追加されるオリジナルの Sharp MZF フォーマットアプリケーション。 |
| <bas> | [<絶対パス>]/tranZPUter/software/BAS | 読み取り可能なテキスト形式に変換された NASCOM Basic プログラムのコレクション。生成された SD カードイメージに追加されます。 |
| <cas> | [<絶対パス>]/tranZPUter/software/CAS | NASCOM テープイメージから変換されたトークン化された NASCOM Basic テーププログラムのコレクション。生成された SD カードイメージに追加されます。 |
| <cas> | [<絶対パス>]/tranZPUter/software/NASCAS | 未変換のオリジナル NASCOM カセットイメージのコレクション。変換には nasconv ツールを使用してください。 |
| <config> | [<絶対パス>]/tranZPUter/software/config | ツールの設定ファイル。現在は CP/M イメージ生成用のディスク定義記述ファイル。 |
ツール
すべての開発は 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 の豊富なライブラリから zOS の K64F バージョンに機能を追加する場合を除き、実際には不要で参照用です。 |
| 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 | もう一つの優れた小型デバイス C コンパイラー。Z80 もターゲットの一つです。z88dk はこのツールの拡張(Z80 向け)バージョンをパッケージ内に提供しています。 |
zOS(組み込み版)のビルド
K64F I/O プロセッサー内の組み込み OS として zOS をビルドするには、zOS ビルドセクションを参照してください。
典型的なビルドコマンドは以下のとおりです:
build.sh -C K64F -O zos -N 0x10000 -d -T
これは 64K のプライマリヒープ(-N 0x10000)を持ち、tranZPUter 拡張(-T)を追加した K64F プロセッサー向け zOS イメージをビルドします。
出力ファイルは <z-zOS>/main.hex となり、tranZPUter ボードの K64F CPU にアップロードできます。
zOS(ユーザー版)のビルド
Sharp MZ-700 のメインプロセッサーとして動作する ZPU Evo 上で動作するユーザー OS として zOS をビルドするには、zOS に関する情報は zOS ビルドセクションを、ビルドの詳細は以下を参照してください。
ハードウェア上、ZPU Evo には FPGA 内に 128K の高速 32 ビット RAM と tranZPUter ボード上に 512K の 8 ビット RAM が割り当てられています。典型的なビルドコマンドは以下のとおりです:
build.sh -C EVO -O zos -o 0 -M 0x1FD80 -B 0x0000 -S 0x3D80 -N 0x4000 -A 0x100000 -a 0x80000 -n 0x0000 -s 0x0000 -d -Z
これは 16K のプライマリヒープ(-N 0x4000)、15K のスタック(-S 0x3D80)を持ち、SharpMZ ハードウェアドライバー拡張(-Z)を追加した ZPU プロセッサー向け zOS イメージをビルドします。注意点として、RAM の上限 -M 0x1FD80 は重要で、0x1FD80:0x1FFFF のスペースは ZPU と K64F I/O プロセッサー間のプロセッサー間通信ブロックとして使用されます。
出力ファイルは <z-zOS>/main.bin となり、SD カードの /ZOS/ZOS.rom としてコピーします。
TZFS のビルド
リポジトリをクローンし、提供されているシェルスクリプトとバイナリを実行することでソフトウェアと最終ロードイメージをビルドできます。
TZFS は以下の手順でビルドします:
- <tools>/assemble_tzfs.sh を使用して TZFS バイナリを作成。これにより、メインコードとバンクコードをすべて含む ROM イメージ <roms>/tzfs.rom が生成されます。
- <tools>/assemble_roms.sh を使用してオリジナルの MZ80A/MZ-700 モニター ROM を作成。これにより <roms>/monitor_SA1510.rom、<roms>/monitor_80c_SA1510.rom、<roms>/monitor_1Z-013A.rom および <roms>/monitor_80c_1Z-013A.rom が生成されます。
- 必要な Sharp MZF ファイルを MZF ディレクトリへコピーおよび/または削除。
- ファイルを SD カードにコピー。
典型的なビルドステージについてはこちらを参照してください。
CP/M のビルド
CP/M のビルドについては追加情報が CP/M ビルドセクションにあります。
tranZPUter 向けの CP/M バージョンは、特別な SD カードのセットアップやコンパクトな ROM イメージの作成が不要なため、ビルドはやや簡単です。
CP/M システムは 4 つのパートでビルドされます:
1. CCP、BDOS、CBIOS スタブを含む cpm22.bin。
2. 0xF000:FFFF に位置する 4K ページを主なソースとし、
別の 64K RAM ブロックに置かれた最大 48K のページからなるバンク化された CBIOS。
3. 1 + 2 + MZF ヘッダーを TZFS がロードできる MZF フォーマットファイルとして結合。
4. K64F SD カード上に 16MB FAT32 ファイルとして保存された CPM ディスクドライブの作成。
上記のすべては「assemble_cpm.sh」と「make_cpmdisks.sh」の 2 つの bash スクリプトにエンコードされており、以下のように実行できます:
cd <software>
tools/assemble_cpm.sh
tools/make_cpmdisks.sh
CPM ディスクイメージは、生のイメージは <cpm>/1M44/RAW に、CPC 拡張フォーマットのディスクイメージは <cpm>/1M44/DSK にあります。これらのイメージは <cpm> 内の各ディレクトリから構築されており、CPM* で始まる各ディレクトリが 1 つの 1.44MB ドライブイメージにパッケージされます。なお、各ディレクトリは対応するディレクトリ内の他のすべてのサポートされているディスクイメージにもパッケージされます(例:16MB SD カードドライブイメージ用の <cpm>/SDC16M)。
SD カード上のファイルとして存在する CPM ディスクは <CPM>/SDC16M/RAW に保存され、CPMDSK<番号>.RAW の形式を持ちます(<番号> は 00、01 … n で、CP/M 配下で接続されるディスクドライブに対応)。標準ブートでは 00 = ドライブ A、01 = ドライブ B 等。フロッピーディスクコントローラーが優先される場合は 00 = ドライブ C、01 = ドライブ D。通常の CP/M 実行時には最大 6 ドライブが接続されます(接続は動的だが利用可能なメモリに制限されます)。
典型的なビルド手順
ソフトウェアのビルド、SD カードの作成、インストールの手順を簡潔にまとめます。
<a name="obtain-an-sd-card-and-partition-into-2-dos-fat32-formatted-partitions-mount-them-as-and-the-partition-size-should-be-at-least-512mb-each" id="obtain-an-sd-card-and-partition-into-2-dos-fat32-formatted-partitions-mount-them-as-and-the-partition-size-should-be-at-least-512mb-each"></a>
# SD カードを入手し、2 つの DOS FAT32 フォーマットパーティションに分割して <SD CARD P1> と <SD CARD P2> としてマウント。パーティションサイズはそれぞれ最低 512MB 必要。
<a name="the-first-partition-will-host-the-software-to-run-on-the-k64f-io-processor-and-all-the-sharp-mz-software-to-be-accessed-by-the-sharp-mz-700" id="the-first-partition-will-host-the-software-to-run-on-the-k64f-io-processor-and-all-the-sharp-mz-software-to-be-accessed-by-the-sharp-mz-700"></a>
# 最初のパーティションは K64F I/O プロセッサーで動作するソフトウェアと Sharp MZ-700 がアクセスするすべての Sharp MZ ソフトウェアをホストします。
<a name="the-second-partition-will-host-the-software-to-run-on-the-zpu-evo-processor-when-it-acts-as-the-main-sharp-mz-700-processor" id="the-second-partition-will-host-the-software-to-run-on-the-zpu-evo-processor-when-it-acts-as-the-main-sharp-mz-700-processor"></a>
# 2 番目のパーティションは ZPU Evo プロセッサーが Sharp MZ-700 のメインプロセッサーとして動作する際のソフトウェアをホストします。
<a name="build-zos-embedded" id="build-zos-embedded"></a>
# zOS(組み込み版)のビルド
cd <zsoft>
./build.sh -C K64F -O zos -N 0x10000 -d -T
<a name="flash-mainhex-into-the-k64f-processor-via-usb-or-opensda" id="flash-mainhex-into-the-k64f-processor-via-usb-or-opensda"></a>
# USB または OpenSDA 経由で <z-zOS>/main.hex を K64F プロセッサーにフラッシュ。
cp -r build/SD/* <SD CARD P1>/
<a name="build-zos-user" id="build-zos-user"></a>
# zOS(ユーザー版)のビルド
./build.sh -C EVO -O zos -o 0 -M 0x1FD80 -B 0x0000 -S 0x3D80 -N 0x4000 -A 0x100000 -a 0x80000 -n 0x0000 -s 0x0000 -d -Z
cp -r build/SD/* <SD CARD P2>/
<a name="ensure-that-the-zpu-zos-kernel-is-copied-to-the-k64f-partition-as-it-will-be-used-for-loading-into-the-zpu-evo-on-reset" id="ensure-that-the-zpu-zos-kernel-is-copied-to-the-k64f-partition-as-it-will-be-used-for-loading-into-the-zpu-evo-on-reset"></a>
# ZPU zOS カーネルを K64F パーティションにコピー(リセット時に ZPU Evo へのロードに使用)。
cp -rbuild/SD/ZOS/* <SD CARD P1>/ZOS/
<a name="build-tzfs" id="build-tzfs"></a>
# TZFS のビルド
cd <software>
tools/assemble_tzfs.sh
<a name="build-the-required-host-sharp-roms" id="build-the-required-host-sharp-roms"></a>
# 必要なホスト(Sharp)ROM のビルド。
tools/assemble_roms.sh
<a name="build-cpm" id="build-cpm"></a>
# CP/M のビルド
tools/assemble_cpm.sh
<a name="build-the-cpm-disks" id="build-the-cpm-disks"></a>
# CPM ディスクのビルド
tools/make_cpmdisks.sh
<a name="create-the-target-directories-on-the-sd-card-1st-partition-and-copy-all-the-necessary-applications-and-roms" id="create-the-target-directories-on-the-sd-card-1st-partition-and-copy-all-the-necessary-applications-and-roms"></a>
# SD カード第 1 パーティションにターゲットディレクトリを作成し、必要なアプリケーションと ROM をすべてコピー。
mkdir -p <SD CARD P1>/TZFS/
mkdir -p <SD CARD P1>/MZF/
mkdir -p <SD CARD P1>/CPM/
mkdir -p <SD CARD P1>/BAS
mkdir -p <SD CARD P1>/CAS
cp <software>/roms/tzfs.rom <SD CARD P1>/TZFS/
cp <software>/roms/monitor_SA1510.rom <SD CARD P1>/TZFS/SA1510.rom
cp <software>/roms/monitor_80c_SA1510.rom <SD CARD P1>/TZFS/SA1510-8.rom
cp <software>/roms/monitor_1Z-013A.rom <SD CARD P1>/TZFS/1Z-013A.rom
cp <software>/roms/monitor_80c_1Z-013A.rom <SD CARD P1>/TZFS/1Z-013A-8.rom
cp <software>/roms/monitor_1Z-013A-KM.rom <SD CARD P1>/TZFS/1Z-013A-KM.rom
cp <software>/roms/monitor_80c_1Z-013A-KM.rom <SD CARD P1>/TZFS/1Z-013A-KM-8.rom
cp <software>/roms/MZ80B_IPL.rom <SD CARD P1>/TZFS/MZ80B_IPL.rom
cp <software>/MZF/CPM223.MZF <SD CARD P1>/MZF/
cp <software>/roms/cpm22.bin <SD CARD P1>/CPM/
cp <software>/CPM/SDC16M/RAW/* <SD CARD P1>/CPM/
cp <software>/MZF/* <SD CARD P1>/MZF/
cp <software>/BAS/* <SD CARD P1>/BAS/
cp <software>/CAS/* <SD CARD P1>/CAS/
<a name="if-you-want-tzfs-to-autostart-create-an-empty-flag-file-as-follows" id="if-you-want-tzfs-to-autostart-create-an-empty-flag-file-as-follows"></a>
# TZFS を自動起動したい場合は以下のように空のフラグファイルを作成。
> <SD CARD P1>/TZFSBOOT.FLG
<a name="if-you-want-to-run-tzfs-commands-on-each-boot-create-an-autoexecbat-file-and-place-required-commands-into-the-file" id="if-you-want-to-run-tzfs-commands-on-each-boot-create-an-autoexecbat-file-and-place-required-commands-into-the-file"></a>
# 起動時に TZFS コマンドを実行したい場合は autoexec.bat ファイルを作成して必要なコマンドを記述。
> <SD CARD P1>/AUTOEXEC.BAT
<a name="eject-the-card-and-insert-it-into-the-sd-card-reader-on-the-tranzputer-board" id="eject-the-card-and-insert-it-into-the-sd-card-reader-on-the-tranzputer-board"></a>
# カードを取り出して 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 を取り外し、tranZPUter ボードを Z80 ソケットに取り付け。
<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>
# 電源を入れる。自動起動フラグが作成されていれば、おなじみのモニター
<a name="signon-message-followed-by-tzfs-if-the-autostart-flag-hasnt-been-created-enter-the-command" id="signon-message-followed-by-tzfs-if-the-autostart-flag-hasnt-been-created-enter-the-command"></a>
# サインオンメッセージに続いて +TZFS が表示されます。自動起動フラグがない場合は、
<a name="je800-into-the-monitor-to-initialise-tzfs" id="je800-into-the-monitor-to-initialise-tzfs"></a>
# モニターに JE800 コマンドを入力して TZFS を初期化してください。
ソフトウェアのビルドと SD カードの準備を支援するために、<zSoft>/buildall というスクリプトを使用しています。これを使用するには ROOT_DIR を変更し、RSYNC を無効にする必要があります(リモートコンピューターでコンパイルして K64F にアップロードするため)。
エラーが発生した場合、スクリプトは適切なエラーメッセージとともに中断します。
K64F MPU のフラッシュ
オリジナルの tranZPUter SW は PJRC の優れた Teensy 開発ボードを使用していましたが、後の tranZPUter SW リリースでは Freescale K64FX512 プロセッサーの 100 ピン TQFP バージョンに置き換えられました。
Teensy Tool を使用したプログラミングに必要なすべてのファイルと実行ファイルは、zSoft リポジトリの <z-tools> ディレクトリにあります。
1. USB ケーブルで tranZPUter SW-700 ボードを PC に接続。
2. Teensy プログラミングアプリケーションを起動:
<z-soft>/teensy
3. Teensy アプリケーションで「ファイル」→「HEX ファイルを開く」を選択し、<z-zOS> または \z<zputa> ディレクトリ(アップロードする OS に応じて)に移動して「main.hex」ファイルを選択。
4. tranZPUter SW-700 ボードの「K64F PROG」ボタンを押す。
5. Teensy アプリケーションで「操作」→「プログラム」を選択 — これでオンボード Flash RAM がプログラムされます。
6. 仮想シリアルデバイスに設定されたターミナルエミュレーターが開いていることを確認(不明な場合は Linux で「dmesg」コマンドを実行して最新の USB 接続とその名前を確認)。通常デバイスは /dev/ttyACM0。ボーレートやビット/パリティを設定する必要はありません(これは仮想シリアルポートで USB 速度で動作します)。
7. Teensy アプリケーションで「操作」→「再起動」を選択 — K64F が再起動し、zOS または ZPUTA が起動します。
8. ターミナルエミュレーター経由で OS を操作。
U6 が搭載されている場合の Teensy プログラミングツールの詳細については、Teensy の基本的な使い方ガイドを参照してください。
部品表(BOM)
tranZPUter SW-700 v1.3 ボードの製造コストを以下の表に示します。はんだペーストやフラックスなどの消耗品は含まれていません。表の全詳細を確認するには右にスクロールしてください。
ソース: tranZPUter-SW-700_v1_3.sch
コンポーネント数: 145
| 部品番号 | 数量 | 単価 | 10個価格 | 100個価格 | 5個合計価格 | 10個価格 | 値 | コンポーネント名 | フットプリント | 説明 | ベンダー |
|---|---|---|---|---|---|---|---|---|---|---|---|
| C1, C2, C3, C4, C5, C6, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28, C29, C30, C31, C32, C33, C34, C35, C36, C37, C38, C39, C40, C41, C42, C43, C44, C45, C46, C47, C48, C49, C50, C51, C52, C53, C54, C55, C56, C57, C58, C59 | (省略:各部品番号については原文の BOM テーブルを参照) | — | — | — | — | — | 100nF | C_Small | Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder | コンデンサー | — |
| C7, | 1 | 0.094 | 0.016 | 0.094 | 0.016 | 10uF | C_Small | Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder | コンデンサー(小型シンボル) | https://www.mouser.co.uk/ProductDetail/581-0805B106K160CT | |
| C60, C61, C62, C63, | 4 | 0.108 | 0.108 | 0.432 | 0.432 | 10uF | C_Small | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | コンデンサー(小型シンボル) | https://uk.rs-online.com/web/p/mlccs-multilayer-ceramic-capacitors/1845759 | |
| C64, C65, | 2 | 0.132 | 0.054 | 0.264 | 0.108 | 100nF | C_Small | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | コンデンサー(小型シンボル) | https://www.mouser.co.uk/ProductDetail/963-EMK316B7104KL-T | |
| C66, C67, | 2 | 0.462 | 0.462 | 0.924 | 0.924 | 100uF | CP_Small | Capacitor_SMD:CP_Elec_8x10.5 | 電解コンデンサー(小型シンボル) | https://uk.rs-online.com/web/p/aluminium-capacitors/7088028 | |
| C68, C69, | 2 | 0.12 | 0.12 | 0.24 | 0.24 | 22pF | C_Small | Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder | コンデンサー(小型シンボル) | https://www.mouser.co.uk/ProductDetail/581-0805CG220J500NT | |
| C70, C71, C72, C73, | 4 | 0.042 | 0.01 | 0.168 | 0.04 | 15pF | C_Small | Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder | コンデンサー(小型シンボル) | https://www.mouser.co.uk/ProductDetail/581-0805CG150J500T | |
| D1, D2, D3, D4, | 4 | 0.224 | 0.224 | 0.896 | 0.896 | LED | LED_Small | LED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 発光ダイオード(小型シンボル) | https://www.ebay.co.uk/itm/362279820217 | |
| D5, D6, | 2 | 0.076 | 0.076 | 0.152 | 0.152 | D_Schottky | D_Small | Diode_SMD:D_SOD-323_HandSoldering | ショットキーダイオード | https://uk.rs-online.com/web/p/schottky-diodes-rectifiers/8229886/ | |
| D7, D8, | 2 | 0.11 | 0.11 | 0.22 | 0.22 | 3.3V | D_Zener_Small | Diode_SMD:D_SOD-323_HandSoldering | ツェナーダイオード | https://uk.rs-online.com/web/p/zener-diodes/7390028/ | |
| FB1, FB2, FB3, | 3 | 0.058 | 0.02 | 0.174 | 0.06 | Ferrite_Bead_Small | Ferrite_Bead_Small | Inductor_SMD:L_0805_2012Metric_Pad1.15x1.40mm_HandSolder | フェライトビード(小型シンボル) | https://www.mouser.co.uk/ProductDetail/875-MI0805K601R-10 | |
| J1, | 1 | 2.05 | 2.05 | 2.05 | 2.05 | Conn_02x20_Odd_Even | Conn_02x20_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_Vertical | コネクター、2x20 列 | https://uk.rs-online.com/web/p/pcb-headers/2518434/ | |
| J2, | 1 | 0.896 | 0.896 | 0.896 | 0.896 | Conn_01x06 | Conn_01x06 | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | コネクター、1x06 列 | https://uk.rs-online.com/web/p/pcb-headers/2518339 | |
| J3, | 1 | 0.896 | 0.896 | 0.896 | 0.896 | Conn_01x06 | Conn_01x06 | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | コネクター、1x06 列 | https://uk.rs-online.com/web/p/pcb-headers/2518339 | |
| J4, J5, | 2 | 2.6 | 2.6 | 5.2 | 5.2 | Micro_SD_Card_Det | Micro_SD_Card_Det | MZ80FPGA:Micro_SD_MO-500-0008-R | micro SD カード検出付き | https://www.ebay.co.uk/itm/401453219266?hash=item5d792e59a2:g:IrYAAOSwNFpa6Izw | |
| J6, | 1 | 1.3 | 1.3 | 1.3 | 1.3 | USB_B_Micro | USB_B_Micro | Connector_USB:USB_Micro-B_Amphenol_10118194_Horizontal | USB Micro-B コネクター、水平実装 | https://uk.rs-online.com/web/p/usb-connectors/1355757 | |
| J7, | 1 | 0.896 | 0.896 | 0.896 | 0.896 | Conn_01x04 | Conn_01x04 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | コネクター、1x04 列 | https://uk.rs-online.com/web/p/pcb-headers/2518338 | |
| JP1, JP2, JP3, JP4, JP5, | 5 | 0.152 | 0.152 | 0.76 | 0.76 | SolderJumper_3_Bridged12 | SolderJumper_3_Bridged12 | Jumper:SolderJumper-3_P1.3mm_Bridged12_Pad1.0x1.5mm | ハンダジャンパー | — | |
| L1, | 1 | 0.254 | 0.254 | 0.254 | 0.254 | 2.2uH | L_Small | Inductor_SMD:L_0805_2012Metric_Pad1.15x1.40mm_HandSolder | インダクター(小型シンボル) | https://www.mouser.co.uk/ProductDetail/652-SDL0805T-2R2M1R8 | |
| R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, | 21 | 0.077 | 0.015 | 1.617 | 0.315 | 10K | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/603-RC0805JR-0710KL | |
| R24, R25, R26, R29, R30, R31, | 6 | 0.077 | 0.007 | 0.462 | 0.042 | 1K | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/603-RC0805JR-071KL | |
| R33, R28, R23, | 3 | 0.122 | 0.028 | 0.366 | 0.084 | 4K4 | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/603-AC0805FR-074K42L | |
| R35, R34, R36, | 3 | 0.077 | 0.013 | 0.231 | 0.039 | 120R | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/652-CR0805FX-1200ELF | |
| R37, | 1 | 0.084 | 0.02 | 0.084 | 0.02 | 3K9 | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/603-RC0805JR-103K9L | |
| R38, R32, R27, R22, | 4 | 0.077 | 0.007 | 0.308 | 0.028 | 2K2 | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/652-CR0805JW-222ELF | |
| R43, R44, | 2 | 0.077 | 0.03 | 0.154 | 0.06 | 68R | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/71-CRCW080568R0JNEA | |
| R46, | 1 | 0.077 | 0.048 | 0.077 | 0.048 | 25R | R_Small | Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder | 抵抗器(小型シンボル) | https://www.mouser.co.uk/ProductDetail/Vishay-Dale/CRCW080525R5FKEA?qs=sGAEpiMZZMukHu%252BjC5l7YbcFGEobT%252Bl8hOgQhIcVvUs%3D | |
| SW1, | 1 | 0.083 | 0.083 | 0.083 | 0.083 | K64 PROG | SW_Push | Button_Switch_SMD:SW_SPST_B3S-1000 | プッシュボタンスイッチ、汎用、2ピン | https://uk.rs-online.com/web/p/tactile-switches/1769532/ | |
| U1, | 1 | 5.54 | 4.51 | 5.54 | 4.51 | CY62148ELL-45ZSXI | CY62148ELL-45ZSXI | Package_SO:TSOP-II-32_21.0x10.2mm_P1.27mm | 512K x 8 低消費電力 CMOS RAM、TSOPII | https://uk.rs-online.com/web/p/sram/1242940/ | |
| U2, | 1 | 2.078 | 2.078 | 2.078 | 2.078 | Z80CPU | Z80CPU | Package_DIP:DIP-40_W15.24mm_Socket | 8ビット汎用マイクロプロセッサー、DIP-40 | https://www.ebay.co.uk/itm/321810149944 | |
| U3, | 1 | 1.504 | 1.504 | 1.504 | 1.504 | EXTENDER | Z80CPU_EXTENDER2 | MZ80FPGA:DIP-40_W15.24mm_Extender_NoCourtyard | 8ビット汎用マイクロプロセッサー、DIP-40 | https://uk.rs-online.com/web/p/pcb-headers/6742309/ | |
| U4, | 1 | 7.02 | 7.02 | 7.02 | 7.02 | EPM7512AEQFP144 | EPM7512AEQFP144-7 | Package_QFP:TQFP-144_20x20mm_P0.5mm | Altera MAX7000S CPLD、160MC | https://www.ebay.co.uk/itm/123874645591 | |
| U5, | 1 | 38.14 | 38.14 | 38.14 | 38.14 | EP4CE75F484I7 | EP4CE75F484I7-2 | Package_BGA:BGA-484_23.0x23.0mm_Layout22x22_P1.0mm | — | https://www.ebay.co.uk/itm/372308134931 | |
| U6, | 1 | — | — | 0 | 0 | MKL02Z32VFG4 | MKL02Z32VFG4 | Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm | — | — | |
| U7, | 1 | 1.533333 | 1.533333 | 1.533333 | 1.533333 | EPCS64 | EPCS64 | Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm | — | https://www.ebay.co.uk/itm/123874645591 | |
| U8, | 1 | 12.084 | 10.092 | 12.084 | 10.092 | K64FX512 | K64FX512-100 | Package_QFP:LQFP-100_14x14mm_P0.5mm | — | https://uk.farnell.com/nxp/mk64fx512vll12/mpu-arm-cortex-m4-120mhz-lqfp/dp/2776003 | |
| U9, U11, | 2 | 0.234 | 0.234 | 0.468 | 0.468 | AMS1117-3.3 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | 1A 低ドロップアウトレギュレーター、正極、3.3V 固定出力、SOT-223 | https://www.ebay.co.uk/itm/264452555404 | |
| U10, | 1 | 0.234 | 0.234 | 0.234 | 0.234 | AMS1117-2.5 | AMS1117-2.5 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | 1A 低ドロップアウトレギュレーター、正極、2.5V 固定出力、SOT-223 | https://www.ebay.co.uk/itm/264452555404 | |
| U12, | 1 | 0.234 | 0.234 | 0.234 | 0.234 | AMS1117-1.2 | AMS1117 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | 1A 低ドロップアウトレギュレーター、正極、可変出力、SOT-223 | https://www.ebay.co.uk/itm/264452555404 | |
| X1, | 1 | 1.398 | 1.398 | 1.398 | 1.398 | 50MHz | ASE-xxxMHz | Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm | 3.3V CMOS SMD 水晶クロックオシレーター、Abracon | https://uk.rs-online.com/web/p/mems-oscillators/1712828/ | |
| Y1, | 1 | 0.526 | 0.526 | 0.526 | 0.526 | 32.768KHz | Crystal_Small | Crystal:Crystal_SMD_2012-2Pin_2.0x1.2mm_HandSoldering | 2ピン水晶(小型シンボル) | https://uk.rs-online.com/web/p/crystal-units/1753472/ | |
| Y2, | 1 | 0.442 | 0.418 | 0.442 | 0.418 | 16MHz | Crystal_Small | Crystal:Crystal_SMD_Abracon_ABM8G-4Pin_3.2x2.5mm | 2ピン水晶(小型シンボル) | https://www.mouser.co.uk/ProductDetail/815-ABM3-16-B2-T | |
| アルミヒートシンク | 2 | 1.79 | 1.79 | 3.58 | 3.58 | — | — | 19x19x3mm | — | https://www.ebay.co.uk/itm/254174392651 | |
| PCB - PCBWay | 1 | 21.351 | 21.351 | 21.351 | 21.351 | — | — | — | — | — | |
| — | — | — | — | — | — | — | — | — | — | — | — |
| 小計 | — | — | — | — | 127.96 | 121.48 | — | — | — | — | — |
| 送料 | — | — | — | — | 5 | 5 | — | — | — | — | — |
| 消費税 20% | — | — | — | — | 25.59201 | 24.29601 | — | — | — | — | — |
| 合計(GBP) | — | — | — | — | 158.552 | 150.776 | — | — | — | — | — |
クレジット
ライセンス
GNU パブリックライセンス v3
ソースファイルは有用であることを期待して配布されていますが、いかなる保証もありません。商品性や特定目的への適合性の黙示的な保証も含みません。詳細は GNU 一般公衆利用許諾書を参照してください。
このプログラムとともに GNU 一般公衆利用許諾書のコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ を参照してください。


