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
Perlでゲームボーイアセンブラプログラミング
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kimkim0106
January 28, 2025
Programming
110
0
Share
Perlでゲームボーイアセンブラプログラミング
2025/01/28 レトロゲームから得た学びの発表 #01 にて発表
kimkim0106
January 28, 2025
More Decks by kimkim0106
See All by kimkim0106
奥深いゲームボーイ周辺機器の世界
kimkim0106
1
61
なぜ令和の今ゲームボーイを触るのか
kimkim0106
0
270
ゲームボーイでいろいろ「つながった」
kimkim0106
0
100
ゲームボーイでLT
kimkim0106
0
220
レトロゲームから学ぶ通信技術の歴史
kimkim0106
0
280
レトロゲームから学ぶ半導体の歴史
kimkim0106
0
60
ゲームボーイに画像表示させよう!
kimkim0106
0
18
ゲームボーイのアーキテクチャ
kimkim0106
0
13
ゲームボーイアプリ開発の始め方
kimkim0106
0
15
Other Decks in Programming
See All in Programming
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
160
AIエージェントで業務改善してみた
taku271
0
490
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
340
KagglerがMixSeekを触ってみた
morim
0
370
PHPで TLSのプロトコルを実装してみる
higaki_program
0
740
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.3k
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
160
PDI: Como Alavancar Sua Carreira e Seu Negócio
marcelgsantos
0
110
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
130
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
410
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
270
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
3
730
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
So, you think you're a good person
axbom
PRO
2
2k
We Are The Robots
honzajavorek
0
210
Faster Mobile Websites
deanohume
310
31k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.4k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
100
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Context Engineering - Making Every Token Count
addyosmani
9
800
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.4k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
170
Transcript
Perlで ゲームボーイアセンブラ プログラミング kimkim0106 2025/01/28 レトロゲームから得た学びの発表 #01
自己紹介 kimkim0106 株式会社モバイルファクトリー マネージャー エンジニアとしてはサーバーとかインフラがメイン ゲームボーイカラーが好きです Website : kimkim0106.net X
: @kimkim0106_3218 VRChat : kimkim0106 GitHub : kaoru-k 2
ゲームボーイとは? 知ってる人〜?? 3
ゲームボーイとは? • 任天堂の携帯型ゲーム機 • 1989年 発売 ◦ モノクロ4階調液晶 • 1998年
カラー発売 ◦ 32000色カラー液晶 ◦ 性能もアップ 4
以前こういう本を見かけた 「シェルスクリプトでゲームボーイプログラミング」 echo とかをつかってアセンブラを実装 5
Perlでやりたい Perlで食っている身としては、Perlでやってみたい… と、metacpanを見ていたら、なんとZ80アセンブラを発見! 6 https://x.com/kimkim0106_3218/status/1856000687651606837
CPU::Z80::Assembler Perl製のZ80アセンブラ • Z80アセンブリの文字列・リストを渡すとバイナリを出力 • 外部プログラムは呼び出していない ◦ RGBDS とか GBDK
は不使用 • XS(Cバインディング)すら使わず、Perlのみで実装 ◦ パーサーもPerl ◦ ハッシュでアセンブリ↔機械語を変換 https://metacpan.org/pod/CPU::Z80::Assembler 7
検証環境 • OS: Arch Linux • Perl: 5.40.1 ◦ CPU::Z80::Assembler
2.25 ◦ IO::File (標準モジュール) 8
画像表示プログラムを作る ちょうどアセンブリで画像表示プログラムを書いていた こいつをこれでコンパイルしたいが… 9
ゲームボーイのCPUとZ80の違い 共通点が多いが、追加・削除された命令がある とくに16bit操作の命令に差分が多い アセンブラに手を加えるのは大変そう… 10 opcode は FA Z80だとジャンプ命令
GBのCPUとZ80の違い Pan Docs が詳しい 8080、Z80との違いについて書かれている Opcodeの対照表もある 11 https://gbdev.io/pandocs/CPU_Comparison_with_Z80.html
ならば書き換えればいいだけ Z80の命令表とにらめっこしながら、共通で使えるものを探す 命令数は増えてしまうが、こんな感じで書き換えができた Z80のアセンブラでゲームボーイ用バイナリを作れた! 12 ld a, [$FF44] ld hl,
$FF44 ld a, (hl)
バイナリを書き出す バイナリをロムデータとして書き出す 13
動いた!!! 14
もうちょいPerlを使いたい 未実装だが、このあたりをやりたい • ヘッダのチェックサムの計算 ◦ エミュレータだとチェックサムがおかしくても動く ◦ 実機だと検証失敗した場合、実行されない • 画像データの変換
◦ いまは別ツールで作成 ◦ ビットマップデータがあれば作れる 15
まとめ Perlがあればゲームボーイプログラミングができる! • Perlだけでアセンブリからゲームボーイのバイナリが作れる • Z80用のアセンブラでゲームボーイのバイナリが作れる ◦ 共通の命令を使う必要があるが、アセンブラは無改造 • 応用は難しいが、ちょっとしたものを作るのには使える?
◦ 例えば、サーバに画像をアップロードして、ゲームボーイで画像表示 させるプログラムを生成するとか 16
おわり ご清聴ありがとうございました 17 https://x.com/kimkim0106_3218/status/1866108982211092704