《伊蘇 III:來自伊蘇的冒險者》(Ys III: Wanderers from Ys)是日本 Falcom 推出的經典動作角色扮演遊戲,以主角亞特魯的冒險故事為核心。這款作品曾推出多種家用電腦與遊戲主機版本,也是《伊蘇》系列發展歷程中具有代表性的作品之一。
本次介紹的是 ToughkidDev 在 GitHub 上公開的 MSX 伊蘇 III 硬碟強化版 專案,隸屬於 MSX 遊戲改作相關的 MsxRemakes 專案庫。從專案名稱來看,這個版本與 MSX 版《伊蘇 III》的硬碟使用或強化功能有關,適合對 MSX 老遊戲、硬碟環境及復古電腦遊戲保存有興趣的玩家研究。
專案原始碼與下載:
https://github.com/ToughkidDev/MsxRemakes/tree/main/YS3HDD-ENHANCED
比較表
| 項目 | 原作 (1989, 磁碟片) | 當前構建版本 (Enhanced Build) |
|---|---|---|
| 媒介 | 5.25″ 磁碟片 5 張,切換區域時需更換磁碟 | 1 個 HDD 鏡像檔,無需換片。同時收錄日/英文版 |
| 音源 | 主機內建 PSG 3 聲道專用 | Makoto(YM2608) / MSX-MUSIC(YM2413) / SCC·SCC-I / PSG 備援方案 — 共 31 首 |
| 音樂·音效 | 共享相同的 PSG 3 聲道 | 偵測到外接 PSG 時,將音樂與音效進行物理分離 |
| 水平捲軸 | 以 8 像素為單位跳躍,操作時為 6.4 Hz (約 51 px/s) | V9958 硬體捲軸,每幀 VBlank 進行 4 像素內插補間 |
| 垂直捲軸 | 以 8 條掃描線為單位 | 利用 R#23 進行微調硬體捲軸 |
| 硬體捲軸暫存器 | R#23·R#25·R#26·R#27 全皆未使用 (恆為 0) | R#19 光柵分割 + 使用 R#23/R#25/R#26/R#27 |
| 單一圖塊相機移動 | — | turbo R:146.12 → 100.21 ms MSX2+:183.86 → 162.48 ms |
| CPU | 標準 Z80 3.58 MHz | Panasonic 高速模式 5.37 MHz / turbo R R800 自動切換 |
| 存檔 | 使用者磁碟 1 張,直接寫入磁區 (Sector) | DOS 檔案格式,5 個插槽共享 + BAK/日誌型自動修復 |
| 語言 | 版本各自獨立 | 啟動時可選擇:1 日本語 / 2 英語 |
| 最低 RAM 需求 | 64 KB | Mapper RAM 256 KB |
1. 媒介與執行方式
- 原作: 包含遊戲片 1 張 + 劇本片 3 張 + 使用者存檔片 1 張。每當跨越遊戲區域時就必須更換磁碟(區域 0→D1,1·2→D2,3·4→D3,5→D4)。
- 當前構建版本: 將所有檔案完全解開,作為 MSX-DOS2 / Nextor 的一般檔案放入單個 HDD 鏡像檔中。本版本並非將磁碟鏡像掛載為虛擬磁碟,而是直接將遊戲的絕對磁區 I/O 進入點與換片函式改寫為檔案讀取。同時將日/英雙語言資料包含在同一個鏡像檔中,並在啟動時供玩家選擇。
2. 音樂
- 原作: 僅使用主機內建的 PSG (AY-3-8910) 3 聲道。
- 當前構建版本: 改編了 Mega Drive (MD) 版《伊蘇 III》中 YM2608 的 31 首原曲,並針對三種音源進行了重新編曲,系統會自動確認硬體配備並選擇最適合的音源。若未偵測到相容音源,則降級使用原始 PSG 播放。為了保留原汁原味,MSX 特有的原創工作人員名單(Staff Roll)等部分曲目仍維持 PSG 版本演奏。
- Makoto (YM2608) — 支援 FM、SSG、節奏、ADPCM-B。
- MSX-MUSIC (YM2413)
- SCC / SCC-I — SCC-I 與普通 SCC 共享音樂資料。
- 降低音樂 IRQ 開銷 — 將原本每幀複製遊戲記憶體的路徑,改為引擎段落(Segment)的臨時映射,使得測試區段的平均 CPU 佔用時間從 R800 約 2.07ms 降至 1.73ms、WX 高速 Z80 約 7.43ms 降至 5.52ms,大幅提升效能。
3. 音效與 PSG 分離技術
- 原作: 由於音樂和音效共享相同的 PSG 3 聲道,當音效響起時,音樂的某些聲部就會被強行中斷。
- 當前構建版本: 系統會自動偵測 MegaFlashROM SCC+ SD / MegaFlashROM SCC+ / SuperSoniqs Darky 等外接硬體。一旦檢出,便會將音樂的 PSG 聲部導向第二組(外接)PSG 卡帶,而將音效留給主機內建的 PSG 處理。偵測優先順序為:Darky → MegaFlashROM → 主機內建 PSG。在沒有音效播放時,最多可同時使用 SCC 5 聲道 + PSG 3 聲道;若音效請求 C 聲道或 B+C 聲道,則會將該聲道及公共噪聲週期讓給音效驅動程式。
4. 畫面與捲軸控制
- 原作: 在 SCREEN 5 (256×192) 模式下,以 (16,16) 為基準,將 224×128 像素的遊玩區域繪製於 VRAM 頁面 1/2 的雙重緩衝區(Double Buffer)中。在長達 1 萬 5 千幀的運作中,完全未使用任何硬體捲軸暫存器(R#23·R#25·R#26·R#27 恆為 0),且 32 個硬體精靈(Sprite)也全數關閉,所有畫面皆由 VDP BitBlt(區塊傳送)進行軟體合成。畫面呈現為「遠景固定 + 近景 1 倍速」的雙平面結構。
- 當前構建版本: 沿用上述底層結構,但在 V9958 (MSX2+ / turbo R) 硬體上,利用 R#19 行中斷將畫面切分為 3 個區段:上方為遊戲頁面 + R#23/R#26/R#27 捲軸偏移量,下方為 UI(狀態欄)頁面 + 偏移量 0,並於 VBlank 期間全數重設。畫面左側 8 像素則透過 R#25 的 MSK 功能加以遮蔽。藉此實現邊框與下方狀態欄固定不動、僅遊玩區域單獨捲軸的效果。
- 水平捲軸: 透過 R#26 (8 像素單位) + R#27 (0–7 像素微調),在每幀 VBlank 進行 4 像素單位的動態補間。將原作「每 9.4 幀跳躍 8 像素」的卡頓感,改善為平滑的 4 像素單位移動。
- 垂直捲軸: 利用 R#23 進行微調移動,並在遊玩區域頁面配置了 8 行的保護帶(Guard Strip)。
- 優化: 對於不需重新合成背景的區域,將其作為 32 列的 VRAM 環形緩衝區(Ring Buffer)循環使用,僅重新繪製有變動的圖塊(Tile)。保持原本的背景視差(遠景固定)。片頭動畫、劇情事件、對話及選單則沿用原始的描繪方式。
- 舊硬體相容: 舊型 MSX2 (V9938) 則維持原始渲染器模式運作。
- 繪圖模式選擇: 在 V9958 機型上選完語言與音源後,可選擇 1 Quality (畫質優先/預設) 或 2 Performance (效能優先)。效能優先模式會固定遠景的相機移動,並重複利用未發生變動的地形與背景合成結果。
5. 運行速度與補正
- 遊戲引擎啟動時,會自動開啟 Panasonic FS-A1WX/WSX/FX 等機型的硬體高速模式 (5.37 MHz),若為 turbo R 則透過 BIOS CHGCPU 切換至 R800 ROM 模式。普通 MSX2 則維持原始速度。
- 急加速現象補正: 為解決在高時脈 CPU 下,當畫面固定時主角移動速度會異常暴增的問題,系統會透過 VBlank 計算各區域捲軸更新時間的「4 次移動平均值」,並在相機停止時讓系統自動等待不足的時間。以村莊固定畫面為基準,主機的更新率從 ST 約 38.5 → 7.9 次/秒、WX 約 15.4 → 6.4 次/秒,使遊戲速度回歸正常。
6. 儲存系統 (Save)
| 項目 | 原作 | 當前構建版本 |
|---|---|---|
| 儲存媒介 | 使用者磁碟(磁碟片),直接寫入磁區 | HDD 內的一般 DOS 檔案 |
| 存檔欄位 | 1 個 | 5 個,日/英文版彼此共享 |
| 容錯機制 | 無防寫死或損壞應對措施 | DAT + BAK + 遊戲進度日誌(Journaling)。寫入中斷時支援備份自動修復 |
| 其他特性 | — | 支援存檔欄位預覽、檔案 100 KiB 預先分配(防系統頻繁建立/刪除碎片化) |
- 實際 DOS 中斷測試驗證: 在故意將插槽 5 的第一個磁區損壞,並於第 13 個 4 KB 區塊執行 close(關閉檔案)時強制結束遊戲。結果顯示,無論在「日文版/ST主機/SCC-I」或「英文版/WX主機/OPLL」環境下,重啟後皆能順利復原 48 位元組的關鍵狀態,成功接續先前的遊戲進度與音樂。
8. 最終執行環境對照表
| 機型 | 渲染器 (Renderer) | CPU 運作時脈 | 支援音源 |
|---|---|---|---|
| MSX2 (V9938) | 原始軟體描繪 | 標準 Z80 (3.58 MHz) | SCC-I · SCC / MSX-MUSIC / Makoto / PSG |
| MSX2+ (V9958) | 硬體捲軸 + Quality/Performance 模式 | Panasonic 高速模式 (5.37 MHz) | 同上 |
| MSX turbo R | 硬體捲軸 + Quality/Performance 模式 | R800 ROM 模式 | 同上 |
- 最低記憶體要求: Mapper RAM 256 KB。










