
2025/12/24 4:09
**助けて!私のC64が火事になりました** 以下の手順に従ってください。 1. **直ちに電源を切る** - コモドール 64 のコンセントからプラグを抜きます。 2. **可燃物から離す** - 安全で非可燃性の場所へ移動させてください。 3. **損傷箇所を確認する** - 電源装置や内部部品に焼け跡・溶融したプラスチックがないか調べます。 4. **自分で修理しない** - 認定サービスセンターまたは専門技術者へ連絡してください。 5. **事故を報告する** - 必要に応じて、煙や炎があった場合は地元の消防署に知らせます。 安全第一です。プロフェッショナルに任せましょう。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
この記事は、初心者が古いCommodore 64を小さな「暖炉」ディスプレイに改造した過程を記録しており、初心者でも最小限の努力で説得力ある視覚効果を作成できることを示しています。
主な手順は次のとおりです。
- ハードウェアアップグレード – 「kung‑fu cart」とpi1541ディスクドライブを取り付け、PCからC64へプログラム転送を簡素化しました。
- ソフトウェアワークフロー – RetrogameCoders の Web ベース IDE(cc65 + エミュレータ)を使用し、わずか二日で開発を完了させ、複雑なクロスプラットフォームツールチェーンを回避しました。
- グラフィック技術 – デフォルトの 40 × 25 キャラクターモードのみを使用し、各キャラクターの背景色をそのバイトの高ビットで設定できる拡張カラー モードを採用しました。C64Studio でカスタム文字を設計し、ドリッタリングと擬似グレースケールの炎効果を実現しています。
- 段階的コード進化 – 記事はソースファイル(.c)の年代順リストを提供しており、遅い純粋 C 実装から完全に組み立てられ最適化された最終コードへの移行を示しています。
- 今後の計画 – 著者は次回以降のイテレーションでより効率的なアセンブリ生成のために Kick Assembler に切り替える予定です。
この記事は実用的なチュートリアルとしてだけでなく、限定されたスキルを持つ誰もが深い専門知識なしで魅力的なレトロコンピュータビジュアルを作成できることを示す励ましのメッセージでもあります。
本文
クリスマス休暇にいつものようにイタリアへ戻りました。ここでは、プログラミングを学んだ子供時代のC64(カセット版)をご紹介します。近年はレトロ機器のリフレッシュが趣味になっており、親元に帰るたびに少しずつ修理や整理整頓を行っています。このプロジェクトもその一環です。
現在は動作が非常に安定していて、PC(KUNG‑FU カートと Pi1541)からプログラムを転送できるツールなどの機能も追加しています。今年はこのC64で何か実際に出来ることに挑戦しました。結局、C64を居心地の良い暖炉に変えるというアイデアに決めました。驚いたのは、数時間で2日間にわたってプロジェクトが完了した点と、何より楽しかったことです!
古典的なクロスプラットフォームツールチェーンを使うのではなく、ウェブベースのIDE/エミュレータの組み合わせだけでほぼすべてを実現できたのは想像以上でした。
私はC64コーディングの専門家ではありません。6〜7歳の頃に一度プログラミングした経験があり、デモシーンには関心がありますしチップや内部構造についても読んだことがあります。しかし、実際にデモエフェクトを作ったことはありません。つまり、私がこれを成し遂げたのであれば、あなたもできるというメッセージでこの記事を書きました。
クリスマスに必要なのは…6502だけ
C64の概要と、始める前に知っておくべきポイントを簡潔にまとめます。
現代CPUの仕組みや最適化手法を覚えているなら忘れてください。64ビット世代ではRAMがCPUより高速で、ルックアップテーブルが友達です。ループやコード生成は完全展開されますし、キャッシュは存在しません!
有名な6502 CPUは算術レジスタ(アキュムレータ)しか持ちません。さらにメモリ位置をオフセットするための2つのインデックスレジスタ、ステータスレジスタ、プログラムカウンタがあり、算術演算はテストやインクリメント/デクリメント以外には使えません。プログラムカウンタだけが16ビットで、それ以外はすべて8ビットです。
しかしRAMが高速なら多くのレジスタを必要としません。メモリがレジスタファイルになるわけです。ほぼすべての6502命令はアキュムレータとメモリ(またはインストラクション自体に含まれる数値定数)間で動作します。
これをサポートするために、6502は豊富なアドレス指定方式を持っています。ほとんどの命令は絶対アドレス、インデックスレジスタでオフセットしたアドレス、あるいはメモリ位置に格納されたアドレス(間接)からデータを取得できます。また、ゼロページという最初の256バイトの領域があり、ここでは1サイクル短くアクセスできる特別な最適化があります。命令内で1バイトでアドレスをエンコードできるためです。
6502命令セットはとてもシンプルで、15分以内にざっと読むだけで十分です。
計画
C64のカスタムチップ(SID:サウンド、VIC‑II:グラフィックス)を扱うとさらに複雑になります。デモシーンではこれらのチップを正確に操作して奇妙なビジュアルを生成しますが、私にはほとんど知識がありませんでした。そのため、すべてを避ける計画です。VIC‑IIを単純で線形のフレームバッファーを持つグラフィックモードに設定し、他のコンピュータでプログラムするようなコードを書けば、64が火のエフェクトを扱えると考えました。
幸い、そんなモードがあります。デフォルトのキャラクターモードです。画面は40×25文字(合計1,000文字)で、各文字は1バイトです。デフォルトのPETSCII文字セットはデモシーンに最適ではありませんが、カスタムセットを作ることができます。
私のアイデアは、ディザリングパターンを使って各文字を8ビットグレースケール値として表現することです。
- 0 = 完全オフ(背景色)
- 64 = 完全オン(前景色)
- 中間値 = 両者の混合
これで64通りしかありませんが、8ビット空間をフルに活用したいと考えました。明白な方法は色を加えることです。例えば最初の64値は黒(背景)から茶色(前景)、次の64は茶色背景/赤前景、さらに赤/黄、最後に黄/白へと変化させる、といった具合です。
C64Studioで手作業でカスタム文字セットを作成しました。デフォルトキャラクターモードでは文字ごとの前景色しか制御できません(別のメモリ位置で設定)。幸い、拡張カラー モードがあり、文字セットは64に限定されますが、各文字の上位2ビットで背景色を制御し、前景色は従来通り別メモリに保持します。これが正解です。
実装
すべての開発はRetrogameCoders C64 IDEで行いました。このIDEはcc65コンパイラとエミュレータを組み合わせたものです。
C言語でC64コードを書くことは一般的に悪いアイデアですが、cc65は「最高」のコンパイラではありません(古くて生成コードの最適化がほぼ無い)。しかし、Cでテストしつつ徐々にアセンブリへ移行できる点はノーバックにとって重要でした。将来的にはデモコーディング向けに特化したKick Assemblerへの切替を検討しています。
以下は
.cファイルを時系列で並べたものです。RetrogameCoders IDEにコピー&ペーストして動作を確認できます。好きなように改造してください!
- ECM文字セットアイデアの最初のテスト
- 純粋Cで書いた最も遅い火エフェクト
- まだC。 "展開" を始める
- アセンブリへの移行開始
- アセンブリに完全移行、サイドバイサイドのC
- アセンブリのみ、さらにECMテクニック追加
- 「最終」版
どうぞお楽しみください!