PC88iOS は、iOS デバイス上で動作する PC-88 エミュレータです。このプロジェクトは、PC-88 の機能を iOS 環境で再現することを目的としています。
- Xcode 15.0+
- iOS 18.2+
- Swift 5.9+
- App: アプリケーションのエントリーポイントと設定
- Assets.xcassets: 画像やアイコンなどのアセット
- Common: 共通ユーティリティやヘルパー
- Core: エミュレータのコア機能
- CPU: CPU エミュレーション
- Disk: ディスク関連処理(ALPHA-MINI-DOS など)
- Memory: メモリ管理
- Screen: 画面表示関連
- Sound: 音声関連
- UI: ユーザーインターフェース関連のコード
- Resources: リソースファイル
- Tests: テストファイル
このプロジェクトでは、コード品質とスタイルの一貫性を確保するために SwiftLint を使用しています。
brew install swiftlint
.swiftlint.yml
ファイルがプロジェクトのルートディレクトリに配置されています。この設定ファイルには、プロジェクト固有のコーディング規約が定義されています。
主な設定内容:
- 行の長さ: 120文字(警告)、150文字(エラー)
- 関数の長さ: 60行(警告)、100行(エラー)
- 型の長さ: 300行(警告)、500行(エラー)
- ファイルの長さ: 500行(警告)、1000行(エラー)
- カスタムルール: 直接の
print()
の使用を避けるなど
SwiftLint はビルド時に自動的に実行されます。コーディング規約に違反するコードがあれば、Xcode の警告やエラーとして表示されます。
cd /path/to/PC88iOS
swiftlint
このプロジェクトでは、ALPHA-MINI-DOS の読み込みと実行をサポートしています。
- AlphaMiniDosLoader: ALPHA-MINI-DOS を専用に読み込むためのクラス
- ディスクイメージから直接 IPL と OS を抽出する機能
- メモリへのロードと実行開始アドレスの設定
- 主要な定数:
- IPL ロード先アドレス: 0x8000
- OS ロード先アドレス: 0x0100
- OS 実行開始アドレス: 0x0100
D88 フォーマットは以下の構造を持っています:
-
ヘッダ部(0x2b0バイト):
- 0x00-0x10: ディスク名(ASCII + '\0')
- 0x11-0x19: リザーブ(0x00)
- 0x1a: ライトプロテクト(0x00=なし、0x10=あり)
- 0x1b: ディスクタイプ(0x00=2D、0x10=2DD、0x20=2HD)
- 0x1c-0x1f: ディスクサイズ(リトルエンディアン)
- 0x20-0x2af: トラックオフセットテーブル(164トラック分、各4バイト、リトルエンディアン)
-
セクタ部:
- 0x00: ID C(シリンダ番号)
- 0x01: ID H(ヘッド番号)
- 0x02: ID R(レコード番号/セクタ番号)
- 0x03: ID N(セクタサイズコード)
- 0x04-0x05: トラック内のセクタ数(リトルエンディアン)
- 0x06: 記録密度(0x00=倍密度、0x40=単密度)
- 0x07: DELETED MARK(0x00=ノーマル、0x10=DELETED)
- 0x08: ステータス(0x00=正常、0x10=正常(DELETED)、0xa0=ID CRCエラー、0xb0=データCRCエラー、0xe0=アドレスマークなし、0xf0=データマークなし)
- 0x09-0x0d: リザーブ
- 0x0e-0x0f: セクタデータサイズ(リトルエンディアン)
- 0x10-: セクタデータ
このプロジェクトは MIT ライセンスの下で公開されています。詳細については LICENSE ファイルを参照してください。