Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スーパーファミコンROM作り方/how-to-make-snes-rom
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kent-hamaguchi
January 18, 2019
Programming
4.3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
スーパーファミコンROM作り方/how-to-make-snes-rom
CPU 65816向けのプログラムを作成し、CPUに互換性のあるスーパーファミコンで動作させ、結果としてスーパーファミコンのゲームを作るためのツールや、方法をまとめたものになります。
kent-hamaguchi
January 18, 2019
More Decks by kent-hamaguchi
See All by kent-hamaguchi
メディアドゥ Go Conference 2021 スポンサーセッション/gocon-2021-mediado
kenthamaguchi
1
12k
メディアドゥ Amazon Personalize in AWS メディアセミナー Q1/mediado-amazon-personalize-aws-media
kenthamaguchi
0
1.6k
MediaDo DynamoDB活用事例/mediado-dynamodb-usecase
kenthamaguchi
0
1.4k
MediaDo.go #2 Clean Architectureとの付き合い方/mediado-go-2-clean-architecture
kenthamaguchi
2
2k
Infra Study Meetup #5 メディアドゥスポンサーセッション/infra-study-meetup-5-mediado
kenthamaguchi
0
930
JAWS DAYS 2020 メディアドゥスポンサーセッション/jaws-days-2020-mediado
kenthamaguchi
1
2.1k
OOC 2020 メディアドゥ スポンサーセッション/ooc_2020_mediado
kenthamaguchi
0
690
MediaDo.go #1 レガシーに立ち向かう / mediado-go-1-vs-legacy
kenthamaguchi
0
1.4k
MediaDo.go #1 GopherCon 2019 参加レポート / mediado-go-1-gophercon-2019
kenthamaguchi
1
1.4k
Other Decks in Programming
See All in Programming
5分で問診!Composer セキュリティ健康診断
codmoninc
0
930
その節約、円になってますか?
isamumumu
1
720
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.6k
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
550
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
「人を評価する AI」の設計と実装
ryoyanara
0
180
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
AIが無かった頃の素敵な出会いの話
codmoninc
1
400
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
300
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
740
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
Become a Pro
speakerdeck
PRO
31
6.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
500
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
New Earth Scene 8
popppiees
3
2.5k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
260
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
30 Presentation Tips
portentint
PRO
1
360
Chasing Engaging Ingredients in Design
codingconduct
0
260
Transcript
スーパーファミコン ROM作り方
はじめに 本資料の内容としてはCPU 65816に向けたプログラムを作成・コンパイルし, 結 果としてCPU互換があるスーパーファミコンで動作させるというものです. スーパーファミコンという商標や, それに関する販売等に関して, 直接言及・関与 するものではありません.
65816とは • アメリカ・ウェスタンデザインセンターの16 bit CPU • 主な採用ハード ◦ エイコーン ◦
Apple IIGS ◦ スーパーファミコン(RICOH 5A22というカスタム版CPU) • 前身である6502と完全な互換性がある ◦ 6502はファミリーコンピュータで採用されている Wikipediaより引用: https://ja.wikipedia.org/wiki/65816_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
スーパーファミコンとは 用途 発売 メーカー 略称 略称(海外) :家庭用ゲーム機 :1990/11/21 :任天堂 :スーファミ
SFC(Super Famicom(Family Computer)) :SNES(Super Nintendo Entertainment System) photo by @kentfordev
アーキテクチャ CPU RICOH製 16bit 65816カスタム 1.79~3.58MHz RAM RAM:128KB VRAM:64KB サウンドRAM:64KB
サウンド プロセッサ SCEI製 8bit SPC700 2.05MHz
アーキテクチャ CPU リコー製 16bit 65816カスタム 1.79~3.58MHz RAM WRAM:128KB VRAM:64KB サウンドRAM:64KB
Sound Processor SCEI製 8bit SPC700 2.05MHz
アーキテクチャ DMA RAM/VRAM 65816
DMAとは • Direct Memory Access, の頭文字をとって DMA • コンピュータ全体の用語 •
デバイスやメモリへ, バスで直接データ送信するようなもののことを指す • CPU(アキュームレータ等)を介すよりも動作が高速 • 結果として, 短い時間内にメモリに変更をかけたい場合等に使用する
コンパイラ アセンブラ CC65 アセンブラ WLA-DX C言語 WDC C言語 tcc-816
コンパイラ アセンブラ CC65 アセンブラ WLA-DX C言語 WDC C言語 tcc-816
tcc-816 • Tiny C Compiler • オープンソース • tcc-816向けの, スーパーファミコン用ライブラリも有志が作ってる
• よって, サッサと書きたいなら便利 ただ実際は, C言語からアセンブリにリンク張ることになるので, 実際の動きを コードから確認しようとするとアセンブリ読む.
開発手順 1. スーパーファミコン用ヘッダファイルの設定 a. ROMサイズの定義 b. メモリを8 bitで扱うか, 16 bitで扱うか
c. CPU動作クロック数 2. メイン関数作る, その他アセットを用意 3. コンパイル処理, リンカファイル作成, によりROM化 ざっくり上記で, ヘッダファイルが作れればあとはコード書くだけ. しかし画像と か音声を配置するとなると, もうちょっといろいろある.
ヘッダファイル
C言語プログラム 構造体
C言語プログラム 関数
C言語プログラム 処理構文
C言語プログラム 処理構文
ゲームとして仕上げる • 画像の表示が必要 ◦ 画像ファイルの配置(結構めんどい) ◦ VRAMへの適切なデータ配置, スプライトと背景 • 音声の再生が必要
◦ そもそも音楽の場合, 音源と打ち込みの作成が必要 ◦ 画像と同じくファイル配置(結構めんどい) ◦ 音声プロセッサへの命令出し • 水平・垂直同期を意識したパフォーマンス調整が必要 • コントローラ入力の取得と入力判定 • ROMの書き込み可能領域にセーブデータを書き込む・読み込む
ゲームとして仕上げる 数々の課題を乗り越えてなんとかゲームを作ってみた
ゲームとして仕上げる • タイトル画面 → ゲーム画面へ遷移 • [ - ] が自機
• x がターゲット, ランダムな場所に一定時間ごとへ出現 • 自機を十字キーで移動させてターゲットに当てる • 当てた数がスコア • ターゲットを逃すとライフが減る • ライフが0になった時点でゲーム終了, スコア確定 • ターゲットを取るとSEが鳴る
実機デモ SUPER UFO 8 (合法です)
辛いところ • パフォーマンス維持がきつい ◦ ifが1個増えただけでも感覚的にわかるレスポンスの悪化 ◦ DMAを活用しないと速度が出ない • とにかく特殊仕様 ◦
どのメモリアドレスがどの機能かとか • 画像・音声などの配置は容量との戦い
ベストプラクティス • 色々考慮するとアセンブリ書くのが一番いい ◦ ハードの動き想像しながら, コンパイルされた結果を考えつつ書いてたらそう思った • 第3者の有志で作ったライブラリは使いにくかった ◦ 失礼だけど
◦ 作り込もうとするとライブラリの機能が大きく不足している ◦ Windows向けしかツールが揃ってない
アセンブリの例
外部の動き • 任天堂からミニスーパーファミコン発売された • Nintendo Switchにはスーパーファミコンゲームのアーカイブも来そう • デジゲー博で有志による新作発表も(タコとネコのゲーム) スーファミの時代が来た
THE END
THE END ※Google Slidesの図形で書かれており, 実際とは色・縮尺が異なります