stenzek/duckstation:ソフトウェアエンジニアのためのPS1エミュレータ活用ガイド


stenzek/duckstation:ソフトウェアエンジニアのためのPS1エミュレータ活用ガイド

stenzek/duckstation

2025-08-01

「もしもし、俺だけど…お前の会社で使ってるPS1エミュレータ、stenzek/duckstationの作者から連絡があってさ…」

(カチャ)

はい、冗談はさておき、duckstationはオープンソースで、詐欺の心配は無用です!安心して使ってくださいね。

stenzek/duckstationは、高速かつ正確なPlayStation 1エミュレータです。PCだけでなく、Androidなどのモバイル環境でも動作します。ソフトウェアエンジニアの視点から見ると、以下のような点が非常に魅力的です。

duckstationは、PS1のハードウェアを正確に再現しながらも、最新のCPUを活用して高速に動作します。これは、ゲーム開発者が過去のゲームをデバッグしたり、リマスター版を開発する際のテスト環境として非常に有用です。

OpenGLなどの最新のグラフィックAPIに対応しており、元のPS1よりも高解像度でテクスチャフィルタリングを適用するなど、グラフィックを向上させることができます。これは、単なるエミュレータとしてだけでなく、ゲームのビジュアルを改善するための研究開発にも使えます。

x86-64(PC)、AArch32/AArch64(Android、iOSなど)、RV64(RISC-V)といった複数のアーキテクチャに対応しています。これにより、様々なデバイス上でゲームの動作検証を行うことができます。

古いPS1のゲームを現代の技術で解析したり、バグを修正したりする際に、duckstationは非常に優れたデバッグ環境になります。例えば、メモリビューアやレジスタビューアを使って、ゲームの内部動作を詳細に調べることができます。

duckstationは、グラフィックの向上機能が充実しているため、独自のグラフィックフィルタやシェーダーを開発し、ゲームの見た目を改善する研究にも利用できます。

duckstationのソースコードは公開されています。エミュレータ開発に興味がある方は、このコードを読んで、PS1のアーキテクチャやエミュレータの仕組みを学ぶことができます。

duckstationは、様々なプラットフォームで利用できます。ここでは、基本的な導入方法を解説します。

PC(Windows/macOS/Linux)の場合

GitHubのリリースページから、OSに合ったバイナリをダウンロードします。

BIOSファイル(SCPH1001.binなど)を用意し、設定画面でパスを指定します。BIOSは著作権の関係上、自分で吸い出す必要があります。

ゲームのROMイメージ(*.bin, *.isoなど)を読み込んでプレイできます。

Androidの場合

Google Playストアから公式アプリをインストールします。

BIOSファイルを用意し、アプリ内の設定でパスを指定します。

ゲームのROMイメージを読み込んでプレイできます。

duckstationは、エミュレータ自体に機能が組み込まれているため、直接コードを書く機会は少ないかもしれません。しかし、duckstationの機能を活用するサンプルとして、Pythonを使ってduckstationの起動と設定を自動化するスクリプトを考えてみましょう。

import subprocess
import os

# duckstationの実行ファイルパス
DUCKSTATION_PATH = "C:\\Program Files\\duckstation\\duckstation-qt.exe"

# ゲームのROMイメージパス
GAME_ROM_PATH = "C:\\Users\\user\\Games\\PS1\\MyGame.bin"

# 設定ファイルパス(例)
CONFIG_PATH = "C:\\Users\\user\\AppData\\Roaming\\duckstation\\settings.ini"

def launch_game_with_custom_settings(game_path, settings_path):
    """
    指定したゲームと設定でduckstationを起動する関数
    """
    if not os.path.exists(DUCKSTATION_PATH):
        print("Error: duckstation executable not found.")
        return

    if not os.path.exists(game_path):
        print("Error: Game ROM not found.")
        return

    print(f"Launching duckstation with {game_path}...")

    # コマンドライン引数を使ってduckstationを起動
    # -fullscreen: フルスクリーンで起動
    # -nogui: GUIなしで起動(ゲームを直接起動)
    # -settings: カスタム設定ファイルを指定
    command = [
        DUCKSTATION_PATH,
        "-nogui",
        "-fullscreen",
        f"-settings={settings_path}",
        game_path
    ]

    try:
        subprocess.run(command, check=True)
        print("duckstation finished.")
    except subprocess.CalledProcessError as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    launch_game_with_custom_settings(GAME_ROM_PATH, CONFIG_PATH)

このPythonスクリプトは、特定のゲームを指定した設定ファイルで起動する例です。デバッグやテストのために、様々な設定でゲームを自動で起動したい場合に役立ちます。


stenzek/duckstation




メモリと速度の救世主!「LMCache」で実現するLLMの次世代パフォーマンス

今日はちょっと面白い話をしましょう。皆さんは日頃、LLM (大規模言語モデル) と格闘していることと思います。あの賢い子たち、推論時には大量のメモリを消費しますよね。特に、シーケンス長が長くなると、KVキャッシュがパンパンになって、パフォーマンスが落ちる…なんて経験はありませんか?