Commodore 64 ハードウェアシミュレーター:チップとピンを壊して結果を確認しよう

2026/10/15 16:18

Commodore 64 ハードウェアシミュレーター:チップとピンを壊して結果を確認しよう

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

本ソフトウェアは、Andre Weissflog のコアモデルを zlib ライセンスの下で構築し、Commodore 64 のマザーボード(ASSY 250407)に対してサイクル正確なピン毎のシミュレーションを提供します。事前に定義された障害パターンに依存するツールとは異なり、明確な回路動作モデルおよびボードのネットリストを使用して、RAM のエイリアシングや電源投入前に特定のピンをリフトする際などに自然に発生するグリッチを導出します。ユーザーはチップをリフトする、ピンをショートさせる、ソケットを取り外す、抵抗器を開くなどしてボードと相互作用し、C64 の動作を安全に学習したり、壊れたハードウェアのトラブルシューティングを行ったりすることができます。パワーモデリングは厳格であり、死んだチップ、浮遊する CMOS 構成要素、および幻のパワー効果を区別します。シミュレーションにはオシロスコープ表示や .prg の読み込みによるデバッグ機能などの機能が含まれていますが、現在のハードウェア上のパフォーマンス制限のためゲームエミュレーターではありません(31–48% の速度でシミュレート)。既知のギャップとしては、SID フィルターやビデオ出力のようなアナログ部品がシミュレーションされていないことなどがあり、将来的なアップデートでは内部チップの障害およびネットブリッジの対応を計画しています。

本文

C64-HW-SIM: コモドール 64 のピン単位ハードウェアシミュレーター

C64-HW-SIM は、コモドール 64(型番:ASSY 250407)のマザーボードを ピン単位でシミュレートするプログラム です。 このツールを使って行うことができる操作には、以下の通りです。

  • チップの脚を持ち上げて浮上状態にする
  • グラウンドまたは +5V にショートさせる
  • ソケットからチップを抜く
  • 抵抗器を開路化する

これらの変更を加えることで、マシーンの挙動を以下のように観察できます。

  • モニターに表示される画像の変化
  • キーボードの動作
  • 基板内を流れる電気信号

シミュレーションの性質

このプログラムは、基板のネットリストやチップの動作特性については完全な知識を持っていますが、「壊れた C64 がどのような見た目になるか」という知識は持ちません。

したがって、故障した部品をシミュレートした結果として生成される画面の「ゴミのような画像」は、誰かが意図的に設定したものではなく、回路自体から計算されて生成されたものです。

挙動の具体例

電源投入前にカラー RAM(17 ピン / A7)の脚を持ち上げて浮上状態にし、マシーンが起動すると:

  • マシンは正常に見えるはずです。
  • CPU は書き込みを行い、VIC が読み取りを行う際にも同じ誤ったアドレスを使用するため、RAM は単にエイリアス化してしまいます。
  • 脚を戻すと、以前書き込まれなかったカラー RAM の半分が ランダムな色として表示されます。
  • 再び脚を持ち上げると、画面はクリアになります。
  • 実際の 2114 チップ も同様の挙動を示します。

ツールの主な用途

このプログラムを用いると、主に以下の二つのことを行うことができます。

  • 学習・理解 コモドール 64 がどのように動作するかを、実機では再現が困難である(あるいは機器の故障を招くリスクがある)ほど詳細に学び、理解できます。

    多くの基板ではチップがハンダ付けされているため、実機での実験には限界があります。

  • 修理支援 故障した C64 を所持していて「どこが壊れているか」という仮説があれば、その仮説をシミュレートし、修理の手掛かりを得ることができます。

    • チップをハンダ剥がす順序を論理的に最適化できます。
    • 可能な限り少数のチップだけを対象とすることで、退屈な作業性と基板損傷リスクを減らせます。

注意点:シミュレーションには限界(異なる故障原因が同じ症状を示す可能性など)が存在します。また、画面上での表示内容だけですべてが決まるわけではありません。

動作速度について

このプログラムは非常に高速なコンピュータでも動作することがあります。 実際の C64 の速度に対する相対速度は以下の通りです:

コンピュータシミュレーション速度
Apple M3 Max31%
AMD Ryzen AI Max+ PRO 495 (Gorgon Halo)39%
Apple M5 Max48%

これはゲームを楽しむためのエミュレーターではなく、ハードウェア挙動の理解と故障診断のためのツールです。

高速動作時の具体例(画像)

上記の速度では、キャラクター ROM(U5)をソケットから外し、後で元に戻す間にも、マゼス(maze)ゲームが進行しています:

  • CPU、RAM、およびプログラムは正常に機能しており、文字の形だけが欠損しています。
  • 示波器は ROM ソケットのデータ線 D0 に接続されており、VIC が文字の形状を読み込む際、ソケットが空だとバスが浮遊状態(点線のセグメント)になります。
  • C64 の標準速度で表示されています。

謝辞と開発経緯

このプログラムのアイデアは、以下のアンドレ・ウェイスフログ氏(通称:floooh)の作品から得られました:

  • 6502, VIC-II, CIA, SID などのピンをインターフェースとして用いるチップとエミュレーターの使用・観察。
  • そのコードを基にアプローチを発展させ、C64 の他のすべての部品(RAM, ROM, ロジックチップ, PLA など)について ピン単位のモデルを持つことまで論理的な極点へと至らせたもの。

引用元とライセンス

項目由来・参照元ライセンス
チップのコア部分floooh 氏の作品(6502, VIC-II など)zlib
ボードの設計bwack 氏の「C64-250407-Replica-KiCad」CERN OHL
PLA の式則Mark Smith氏と Marko Mäkelä氏が読み出した 82S100 データ-

ビルド方法

make ./c64-hw-sim [program.prg]
  • 対応 OS: macOS, Linux (X11)
  • グラフィックス: OpenGL を使用
  • ライブラリ: グラフィックスは
    sokol
    、インターフェースは
    nuklear
    (両方とも
    third_party/
    フォルダにあります)

使用方法と UI

ウィンドウ内には以下の要素が表示されます:

  • 基板
  • モニター
  • コントロールパネル
  • 示波器

チップは役割に基づいた名前を持つボックスとして表現されています:

  • RAM1 〜 RAM8: 4164 DRAM。それぞれはバイトの各ビットを保持しており、
    RAMn
    はデータビット
    n-1
    を担当します。
  • VRAM: 2114 カラー RAM
  • BASIC, KERNAL, CHAR: ROM
  • PLA: アドレスデコーダ

詳細確認と操作

  • ズームインして参照情報やアドレス範囲を確認できます。
  • ピン(Pin)の状態表示: ロジックプローブのように表示されます。
    • 🔴 赤: 高電位
    • 🔵 青: 低電位
    • 🟡 黄色: パルス状
    • ⚪ 灰色: 浮遊
    • 🟣 マゼンタ: 2 つの出力同士の対戦(コンテンション)時

チップ・部品への操作

  • ピンのクリック: 示波器に表示し、破損させることができます。
    • 浮遊状態
    • グラウンドへのショート
    • +5V へのショート
  • チップをクリック: ソケットから抜けます(持ち上げ)。
  • 抵抗器・フェライトビーズ・水晶振動子をクリック: 開路化します。

コントロールパネルとファイル読み込み

  • 故障の一覧が表示され、各故障に対して修復ボタンが付いています。
  • .prg
    ファイルも読み込むことができます。これらはフリーズカーリッジのようにそのまま DRAM チップに書き込まれるため、故障したボード上でも読み込み動作が可能です。

キーボード操作

キーボードは通常通りに使用できます:

  • ESC: RUN/STOP
  • PgUp: RESTORE
  • TAB: CTRL
  • 左 ALT: C=

コマンドラインオプション

./c64-hw-sim --headless 200 --text --shot out.png --fault U17:removed

これはウィンドウなしで 4 秒(200 フレーム)動作し、モニター画像から読み取ったテキストを出力して画像を保存します。

故障指定の形式

REF:内容
または
REF.PIN:内容
の形式で記述します。

  • U17:removed
    (チップ除去)
  • U21.14:gnd
    (ピン接地ショート)
  • U12.14:vcc
    (ピン電源ショート)
  • U9.2:open
    (ピン開路)
  • R51:open
    (抵抗器開路)
  • RP4:short
    (プルアップ抵抗器ショート)

その他のオプション

  • 動作中の故障・修復:

    --at 150:U6.17:open --at 300:repair
    

    C64 が動作中に部品を破損させ、後に修復します。

  • コンフリクト(対戦)ネットの報告:

    --nets
    オプションを使用すると、出力が対戦したネット(配線)を報告します。

  • 起動後のテキスト入力:

    C64HW_TYPE=PRINT "1+1\n"
    

    起動後に指定したテキストを入力します。

  • メモリマッピングの整合性チェック:

    C64HW_CHECK=1
    

    すべての KERNAL 読み込みと VIC のフェッチを理想的なメモリマップに対してチェックします。

  • 動作録画(グラフィカルモード):

    --record 900:DIR --frames 90
    

    900 フレーム目以降から、4 エミュレートフレームごとの 90 回分ウィンドウを保存します。

tests/faults.sh
は 31 の一般的な故障パターンを実行し、シミュレータ実行前に期待される症状が記述されています。

動作原理

ネットリストの解析

tools/kicad2c.py
は bwack 氏の KiCad 版 250407 レプリカを C テーブルに変換します:

  • 216 の部品
  • 各部品のパッド
  • 249 のネット(配線群)

ピン駆動モデル

各ピンは以下のように動作します:

  1. 強く駆動する
  2. 弱く駆動する(プルアップなど)
  3. 供給電圧からのショート
  4. 全く駆動しない

最も強力な駆動が優先されます。等しい強度の 2 つの出力が対戦している場合は「コンテンション」となり、低電位側が勝ちます。

浮遊モデル

誰も駆動していないネットは、充電を保持したままドリフトします:

  • TTL インプットの負荷: マイクロ秒単位で約 1.4V 程度まで上昇します。
  • MOS インプットのみ接続: 数十分の秒間で 0V 側へ向かって移動します。

MOS インプットは、その電圧と雑音を加えたものを自身のしきい値と比較するため、浮遊中のラインは誤作動しやすいのです。

電源故障の影響

チップの種類によります:

  • VCC がなし: チップは「死亡状態」
  • GND がなし: 出力が高電位に浮遊します
  • CMOS チップ: 保護ダイオードを介して供給される「幽霊電源」によって動作を維持できます。

ノイズと再現性

雑音の種子は設定されており、実行結果を正確に再現することが可能です。

部品レベルモデル (
src/parts.c
)

以下のような部品のピンレベルモデルを構築しています:

  • グルーロジック
  • ROM
  • DRAM(/RAS と /CAS で行と列をラッチ)
  • カラー RAM
  • PLA(実数のロジック式則を含む)

コアエミュレーション (
src/board.c
)

6510、VIC-II、CIA、SID は floooh 氏のチップから取得したサイクル単位精度のコアを使用しています。 各コアはソケット上にあり、それ自身のピンしか見えない環境で動作します。半分サイクルごとに 3 つのステップに分けて実行されます:

  1. 行アドレス指定
  2. /RAS の下りエッジ
  3. /CAS の下りエッジ

全ボードは各ステップ後に安定します(詳細は

PLAN.md
参照)。

限界点と今後の予定

現状の制限

このシミュレーションは非常に低速であり、上記のコンピュータの上でも 実時間の 3 分の 1 から半分程度しかありません。 これは、各チップのすべてのピンをシミュレートしているためです。

  • 浮遊モデルと電源モデルは正しい形状を持っていますが、その数値(しきい値、ドリフト時間、クロストーク)は 推測によるものです(
    src/sim.c
    内の定数として定義)。
  • シミュレートされていないアナログ部品:
    • ビデオ出力
    • SID フィルター
    • 電源供給回路
    • ドットクロック PLL

今後の計画

以下については実装尚未了ですが、今後計画されています:

  • チップ内部の故障(不良な DRAM セルや動作が緩慢な部分など)
  • 2 つのネット間のブリッジ故障

同じ日のほかのニュース

一覧に戻る →

2026/10/17 17:21

DeepSeek-v4.1-Flash-1017

## Japanese Translation: DeepSeek-V4.1-Flash-1017 は、DeepSeek-V4.1-Flash のパフォーマンス向上型の後継モデルであり、推論、コーディング、エージェントタスクおよび画像ベンチマークにおいて顕著な性能向上を実現すると同時に、実行時間と出力長を削減しています。ベンチマーク結果によると、同モデルはオリジナルの V4.1-Flash を大幅に凌駕しており、HLE で 42.6(対 36.8)、Terminal-Bench 4.0 で 42.3(対 31.2)、DeepSWE v1.1 で 77.0(対 74.2)、Apex Bench v1.1 で 72.1(対 64.6)のスコアを記録しています。業界トップクラスの GPT-5.6 Sol や Opus 5 より劣るものの、前世代モデルに対しては確かな位置づけを確立しています。同モデルは、2026 年に発表された高度な KV キャッシュ圧縮技術による効率化を目的として設計されており、MIT ライセンスの下で公開されています。本番環境での統合においては、Rust ベースの `deepseek-recipe` ツールキット(Python バインディング付き)を利用することをお勧めします。この toolkit は、ツール呼び出しや画像生成といった複雑なタスクを処理する際に外部チャットテンプレートを使用する必要がありません。最適なパフォーマンスを発揮するためには、1M トークンの大きなコンテキストウィンドウ、少なくとも 256K トークンの最大出力容量、および サンプリングパラメータとして temperature=1.0 および top_p=1.0 を設定する必要があります。

2026/10/18 0:55

ペレ - テーマ化可能な SVG としてマーメイド図

## 日本語訳: # ルール - 元の意味を正確に保持する(追加も省略もない)。 - ドキュメントの構造(見出し、箇条書きなど)を維持する。 - 技術用語を正確に扱う(API、LLM、zero-trust は自然な日本語の対訳がある場合を除きそのまま残す)。 - トーンと確信度を保つ。 - まとめ、説明、改変を行わず、翻訳のみを行う。 # 出力形式 ## 日本語訳: (ここに日本語訳を書く) ## 訳すべきテキスト: (必要であれば;なければ元の文章を繰り返す): 正確性や明瞭さのためには改善は不要だが、 desired な場合は名前の由来に簡潔に触れることで若干の文脈を追加できる。

2026/10/17 22:55

ドルーリートウイングルームで鶏肉を透明化させる方法

## Japanese Translation: 本テキストの主目的は、Ou ららによる 2024 年に *Science* に発表された画期的な研究の再現を試行するongoing effort(継続的な取り組み)を報告することである。該研究では、食紅タールアズリン(C.I. 19140, λmax = 425 nm)を用いて鶏肉などの生物組織を透過させ、低コストで蛍光イメージングを可能にした。オリジナル研究では、機械式シェーカを用いて約 40 °C の加温下で高濃度のタールアズリン(~0.62 M)に試料を処理することで、光吸収を増加させることなく組織の屈折率(~1.45)に一致させ、完全な透明化を実現した。 再現試行において、著者は APC Pure より入手したタールアズリン(色素含有量 >80%、分子量 534.4 g/mol)を使用し、3 つの濃度(0%〔対照〕、~10%〔~0.19 M〕、~30%〔~0.56 M〕)をテストした。最高濃度(~0.56 M)では望ましくない結晶化が生じ、中間濃度(~0.19 M)ではガムベアに似た半透明でゼリー状の質感を示し、一部透過性を得た。追加試験として、室温で 12 時間浸漬して透明性とサルモネラリスクを評価したが、結果は僅かであった。提案された機構では、赤色光域近傍での光吸収を増加させることなく、水の屈折率をタンパク質および脂質の屈折率に近づけることによるものである。 現時点において再現試行は低コスト法または室温法を用いて成功していないが、著者は直ちにオリジナルのプロトコル(高濃度かつ加温条件)を試みる予定である。成功すれば、この技術により独立した研究室でも高価な機器なしで生体組織のイメージングが可能となり、不透明な生物試料中の内部構造観察という長年の課題に対処できることになる。