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
kimkim0106
January 28, 2025
Programming
0
70
Perlでゲームボーイアセンブラプログラミング
2025/01/28 レトロゲームから得た学びの発表 #01 にて発表
kimkim0106
January 28, 2025
Tweet
Share
More Decks by kimkim0106
See All by kimkim0106
レトロゲームから学ぶ通信技術の歴史
kimkim0106
0
160
レトロゲームから学ぶ半導体の歴史
kimkim0106
0
31
Other Decks in Programming
See All in Programming
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
140
個人開発で徳島大学生60%以上の心を掴んだアプリ、そして手放した話
akidon0000
2
210
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
300
「社内LT会」を1年続けてみた! / Our Year-Long Journey of Internal Lightning Talks
mackey0225
1
110
AccessorySetupKitで実現するシームレスなペアリング体験 / Seamless pairing with AccessorySetupKit
nekowen
0
190
Breaking Up with Big ViewModels — Without Breaking Your Architecture (droidcon Berlin 2025)
steliosf
PRO
1
200
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
140
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
390
Deep Dive into Kotlin Flow
jmatsu
1
430
Web技術を最大限活用してRAW画像を現像する / Developing RAW Images on the Web
ssssota
2
640
クラシルを支える技術と組織
rakutek
0
160
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osk2025-duckdb
takahashiikki
1
220
Featured
See All Featured
Being A Developer After 40
akosma
90
590k
A Tale of Four Properties
chriscoyier
160
23k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Six Lessons from altMBA
skipperchong
28
4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Side Projects
sachag
455
43k
Writing Fast Ruby
sferik
628
62k
The Language of Interfaces
destraynor
162
25k
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