実行速度が速く、ポータブルであることを目標に書きました。
C++のクラスになっており、複数のZ80CPUを持つマシンを簡単に実装できます。
ビッグエンディアン/リトルエンディアンの両方をサポートしています。

download (version1.10)

version1.10の変更点
64ビット環境のサポート。Xcode6.1.1で動作確認しています。
version1.04の変更点
OUTI/OUTD/OTIR/OTDR命令で、出力前にBレジスタをデクリメントするように修正

使い方
その他のメソッド
未定義命令および未定義のフラグ変化のサポート

このソースはどのような目的に使用してもかまいません。
なお、保証やサポートはありません。

Intel Mac用PC8001エミュレータ

OS X Lion以降、Rosettaが無くなって下のMacintosh用PC8001エミュレータが走らなくなって悲しいので、
上記Z80エミュレータversion1.10を使ってCocoaで作り直しました。
アプリケーションと同じフォルダにpc8001.romファイルを置いて起動します。

cmtファイルを開けます。ただし、編集してもセーブできません。
新規で作成したドキュメントと拡張子が.8001の下記Mac8001と同じ独自フォーマットのとき、cmd+Sでセーブできます。
単にウィンドウを閉じるとダーティでもそのまま閉じてしまいます。

新機能として、キースキャンがないときのCPUクロックを通常時とは別に指定し、加速できるようにしました。
これにより、BASICで書かれた思考ルーチン等の処理時間を短縮できます。
ちなみに、BASICではSTOPキー、ESCキーを常時スキャンしているので、それらを含むポート9を除く、ポート0〜8がしばらく読まれないときに加速します。

Z80エミュレータのクロックカウント機能を使って、BEEP音も実装しました。
BEEP音でメロディーを奏でる場合、DMAのために音が濁っていましたが、これもなんとなく再現しています。
out 81,0で画面を消すと濁らなくなります。

Mac8001は画面描画を全てCPUでやっていましたが、Cocoa8001ではOpenGLを使っており、
CPU使用率はウィンドウ1枚、クロック4MHz設定で7%程度で済みます(MacMini2011/i7)。

Cocoa8001(OS X 10.6以上)

このアプリケーションにより何らかの損害を受けた場合、作者はその責を負いません。

Macintosh用PC8001エミュレータ

上記Z80クラスを使ったサンプルです。
無印PC8001から吸い出したROMイメージをpc8001.romという名前でアプリケーションと同じフォルダに置いて起動します。
ROMイメージを持っていない場合でも、雰囲気だけは楽しめるかも。
いろいろなマシンで試せるように、3種類用意しました。

Mac8001(68k) (version0.22)

Mac8001(PPC) (version0.22)

Mac8001(Carbon) (version0.22)

version0.22の変更点
Z80クラスversion1.03でビルド

j80用のcmtファイルを読めます。cmtファイルをMac8001のアイコンにドロップしてください。
上書きセーブすると、独自フォーマットに置き換えるのでご注意ください。
音に関しては実装していません。
スクリーンショット
ウィンドウを2枚開いて、別々のプログラムを走らせたところ。
Z80エミュレーションがクラスになっているので、複数のCPUのエミュレーションも簡単です。

エミュレーションスピード(version0.22)
下の表は、PC8001実機を4MHzとしたとき、何MHzに相当するかを表しています。
「N-BASIC入力待ち」は60fps出せる状態でも実際には画面の更新がない場合で、ほぼZ80クラスの性能を表します。
「走れ!スカイライン」(スクリーンショットの左上に映っているゲーム)は実際に60fps以上で画面更新をしている場合で、マシンの描画性能も含めた性能です。

機種 OS 種別 画面モード N-BASIC入力待ち 走れ!スカイライン
Quadra800 7.5.3 68k 16色 3.1MHz 2.1MHz
8500/180 8.1 PPC 256色 44MHz 23MHz
G4/400(GBE) 9.2.2 Carbon 256色 130MHz 120MHz




Counter