SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
ゲームボーイ向けOSの作り方
大神 祐真
(@yohgami)
2020-12-30
自己紹介
大神祐真
@yohgami
[仕事]
グループウェア
メーカーの
インフラエンジニア
[趣味]
自作OS
レトロPC/ゲーム
自作アーケード基板
今日のお話
せっかくの機会なので、
●
「ゲームボーイ」というハードを
少し知っていただく
●
このハードでOSを作るに当たり何をしたのか
を少し知っていただく
今日のお話
1. ゲームボーイとは
  → ゲームボーイというハードを
   まず簡単に紹介
2. 自作OS「AMADO」の機能と実装
  → 見えている機能と
   それに対する実装を紹介
3. 入出力の制約への対処
  → ゲームボーイ(古いゲームハード)
   特有の制約への対処を紹介
今日のお話
1. ゲームボーイとは
2. 自作OS「AMADO」の機能と実装
3. 入出力の制約への対処
「ゲームボーイ」とは
1989年に任天堂が発売した
携帯型ゲーム機
スペック
●
CPU :
シャープ製LR35902(8bit)
(Z80カスタムCPU)
●
RAM :8KB
●
VRAM:8KB
●
解像度:
160 x 144 dot
ゲームボーイの
本体とカートリッジの主な構成
ゲームボーイ本体
CPU LCDC
VRAMRAM
OAM,
I/Oレジスタ,
HRAM 等
カートリッジ
ROM RAM
バックアップ
電池
※ AMADOのカートリッジは
  不揮発性メモリ搭載で
  電池無し
ゲームボーイのメモリマップ
カートリッジ
ROM
(バンク0)
カートリッジ
ROM
(バンク1
以降)
本体
VRAM
カートリッジ
RAM
(バンクN)
本体RAM
OAM,
I/Oレジスタ,
HRAM 等
0x0000
0x4000
(16KB)
(16KB)
0x8000
(8KB)
0xA000
(8KB)
0xC000
(8KB)
0xE000
(8KB)
ゲームボーイのメモリマップ
カートリッジ
ROM
(バンク0)
カートリッジ
ROM
(バンク1
以降)
本体
VRAM
カートリッジ
RAM
(バンクN)
本体RAM
OAM,
I/Oレジスタ,
HRAM 等
0x0000
0x4000
(16KB)
(16KB)
0x8000
(8KB)
0xA000
(8KB)
0xC000
(8KB)
0xE000
(8KB)
0x0100 〜 0x014F
(80バイト)
カートリッジヘッダ
実行開始アドレス等
を書いておく
ゲームボーイのメモリマップ
カートリッジ
ROM
(バンク0)
カートリッジ
ROM
(バンク1
以降)
本体
VRAM
カートリッジ
RAM
(バンクN)
本体RAM
OAM,
I/Oレジスタ,
HRAM 等
0x0000
0x4000
(16KB)
(16KB)
0x8000
(8KB)
0xA000
(8KB)
0xC000
(8KB)
0xE000
(8KB)
0x2000
MBC
(ROM用)
0x4000
MBC
(主にRAM用)
ゲームボーイのメモリマップ
カートリッジ
ROM
(バンク1
以降)
カートリッジ
RAM
(バンクN)
0x4000
(16KB)
0xA000
(8KB)
バンク0〜N
(各8KB)
バンク1〜N
(各16KB)
ROMの
バンク
選択
RAMの
バンク
選択
今日のお話
1. ゲームボーイとは
2. 自作OS「AMADO」の機能と実装
3. 入出力の制約への対処
現状のAMADOが
OSとして持っている機能
●
ファイルシステム
●
外部プログラム実行
●
API
●
アプリ開発
現状のAMADOが
OSとして持っている機能
●
ファイルシステム
●
外部プログラム実行
●
API
●
アプリ開発
AMADOのメモリマップ
カーネル
ファイル
システム
1
(RO)
本体
VRAM
ファイル
システム2
(RW)
OAM,
I/Oレジスタ,
HRAM 等
0x0000
0x4000
(16KB)
(16KB)
0x8000
(8KB)
0xA000
(8KB)
0xC000
(8KB)
0xE000
(8KB)
カーネル変数
プログラム
実行領域
ファイルシステムの
バイナリフォーマット
例) 2つのファイルが存在する場合
2
ファイルシステム先頭
からのオフセット
FF FF
予約ファイル数
0x0000
0x0003 ファイル名① txt
ファイル
タイプ
11 00
ファイル①への
オフセット
0x000A ファイル名② img 80 00
0x0011
0x0080
ファイル
サイズ
ファイル①データ  …
ファイル
サイズ
ファイル②データ  …
・・・
現状のAMADOが
OSとして持っている機能
●
ファイルシステム
●
外部プログラム実行
●
API
●
アプリ開発
実行ファイルをクリックすると、
カーネル
ファイル
システム
1
(RO)
本体
VRAM
ファイル
システム2
(RW)
OAM,
I/Oレジスタ,
HRAM 等
0x0000
0x4000
(16KB)
(16KB)
0x8000
(8KB)
0xA000
(8KB)
0xC000
0xE000
(8KB)
カーネル変数
プログラム
実行領域
0xD000
例えば、
読み取り専用ファイルシステムの実行ファイルをクリックした場合
exe
1) 実行ファイルを
本体RAMのプログラム実行領域へ
ロード
実行ファイルをクリックすると、
カーネル
ファイル
システム
1
(RO)
本体
VRAM
ファイル
システム2
(RW)
OAM,
I/Oレジスタ,
HRAM 等
0x0000
0x4000
(16KB)
(16KB)
0x8000
(8KB)
0xA000
(8KB)
0xC000
0xE000
(8KB)
カーネル変数
プログラム
実行領域
0xD000
例えば、
読み取り専用ファイルシステムの実行ファイルをクリックした場合
exe
2) call 0xD000
exe
現状のAMADOが
OSとして持っている機能
●
ファイルシステム
●
外部プログラム実行
●
API
●
アプリ開発
アプリが使える変数/関数
詳しくは、
同人誌『ゲームボーイOS「AMADO」で8ビットマシン語入門』参照
アプリが使える関数/変数
現状のAMADOが
OSとして持っている機能
●
ファイルシステム
●
外部プログラム実行
●
API
●
アプリ開発
バイナリエディタで
マシン語プログラミング
詳しくは
こちらの同人誌で
解説しています!
技術書典10で頒布中!
(“ゲームボーイ”で検索すると
出てきます)
今日のお話
1. ゲームボーイとは
2. 自作OS「AMADO」の機能と実装
3. 入出力の制約への対処
入出力について
現状、使用している入出力
入力:ボタン
出力:画面
入出力について
現状、使用している入出力
入力:ボタン
出力:画面
I/O:JOYPレジスタ
アドレス 0xFF00 のレジスタ(1バイト)
同人誌『シェルスクリプトでゲームボーイプログラミング入門』参照
入力に関して
GBならではの対応が必要なのは、
キーボードが無い状況で、文字入力をどうするか?
←→:カーソル移動
↑↓:値変更
としました
入出力について
現状、使用している入出力
入力:ボタン
出力:画面
LCDCについて
LCDCの動作
︙︙ ︙︙LCDCが
VRAMアクセス中
CPUがVRAMアクセス可
(Hブランク)
Vブランク
144144回回(*1)(*1)
LCDCがVRAMへアクセスしている間、
CPUはVRAMの読み書き不可
※ Vブランクから
次のVブランクまでの
1周期は16.6ms
AMADOの周期動作
Vブランクに入ったら
発生する割り込み
実行ファイル実行中なら
このタイミングで
call 0xD000
される
VRAM書込キュー
アドレス
デー
タ
アドレス
デー
タ
アドレス
デー
タ
アドレス
デー
タ
VRAMへの書き込みを
遅延実行するための
キューを用意した
ただ、LCDCのアクセス中は
CPUからは読み出しも不可なので
VRAMの読み出しも要検討
(現状はVブランク期間で
ほとんど終わるため問題にならない)
まとめ
以上で説明した点が、
ゲームボーイで自作OSするなら気をつける部分
それ以外、特別異質なハードというわけでもなく
むしろ小さくシンプルな分かりやすいハードです
興味があれば、自作OSのターゲットにしてみても
良いんじゃないかと思います
宣伝
自作OS「AMADO」を、
12/30〜の「エアコミケ2」の
新刊として頒布/公開中です!
(もし興味があれば)
詳細は作者ウェブサイト↓へ
http://yuma.ohgami.jp/
ご清聴ありがとうございました!
今日のお話
1. 自作OS「AMADO」の機能と実装
  → ここで話す「OS」がどの程度のもの
   なのかのベースラインを合わせる
  → AMADOがOSとして持っている機能と
   それがどのように実装されているのかを
   簡単に紹介
2. そんなOSをゲームボーイというハード上
で表現するにはどんなことをしなければなら
ないのか
  → ゲームボーイというハードの制約につい
て
LCDCについて
LCDCの動作
…
★
★ x 144

Mais conteúdo relacionado

Mais procurados

MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
LINE Corporation
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 

Mais procurados (20)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 

Semelhante a ゲームボーイ向けOSの作り方

'Position Paper on 2012 Constitutional Review
'Position Paper on 2012 Constitutional Review'Position Paper on 2012 Constitutional Review
'Position Paper on 2012 Constitutional Review
Commons Professional
 
Hr 016 物理系進路圖1
Hr 016 物理系進路圖1Hr 016 物理系進路圖1
Hr 016 物理系進路圖1
handbook
 
Livre dri
Livre driLivre dri
Livre dri
Jamaity
 

Semelhante a ゲームボーイ向けOSの作り方 (20)

تدريب القيادة والريادة
تدريب القيادة والريادةتدريب القيادة والريادة
تدريب القيادة والريادة
 
'Position Paper on 2012 Constitutional Review
'Position Paper on 2012 Constitutional Review'Position Paper on 2012 Constitutional Review
'Position Paper on 2012 Constitutional Review
 
ملحق ستارت - العدد رقم 29
ملحق ستارت - العدد رقم 29ملحق ستارت - العدد رقم 29
ملحق ستارت - العدد رقم 29
 
21. listeriosis
21. listeriosis21. listeriosis
21. listeriosis
 
Hr 016 物理系進路圖1
Hr 016 物理系進路圖1Hr 016 物理系進路圖1
Hr 016 物理系進路圖1
 
Livre dri
Livre driLivre dri
Livre dri
 
データモデリング入門2021
データモデリング入門2021データモデリング入門2021
データモデリング入門2021
 
Phx19
Phx19Phx19
Phx19
 
Minits november
Minits  november Minits  november
Minits november
 
9. botulism
9. botulism9. botulism
9. botulism
 
Minits taaluk vikasanasamithi
Minits taaluk vikasanasamithiMinits taaluk vikasanasamithi
Minits taaluk vikasanasamithi
 
Meenachil vivarangal- Office-Minutes Zero Land less project.
Meenachil vivarangal- Office-Minutes Zero Land less project.Meenachil vivarangal- Office-Minutes Zero Land less project.
Meenachil vivarangal- Office-Minutes Zero Land less project.
 
Tvs aug minits
Tvs aug minitsTvs aug minits
Tvs aug minits
 
ente meenachil -Meenachi taluk Office-Taluk vikasana samaithi minutes
ente meenachil -Meenachi taluk Office-Taluk vikasana samaithi minutesente meenachil -Meenachi taluk Office-Taluk vikasana samaithi minutes
ente meenachil -Meenachi taluk Office-Taluk vikasana samaithi minutes
 
ملحق ستارت - العدد رقم 35
ملحق ستارت - العدد رقم 35ملحق ستارت - العدد رقم 35
ملحق ستارت - العدد رقم 35
 
Minits (november)
Minits (november)Minits (november)
Minits (november)
 
虛擬股票選擇權辦法說明
虛擬股票選擇權辦法說明虛擬股票選擇權辦法說明
虛擬股票選擇權辦法說明
 
ملحق ستارت - العدد رقم 53
ملحق ستارت - العدد رقم 53ملحق ستارت - العدد رقم 53
ملحق ستارت - العدد رقم 53
 
20. hemorrhagic septicemia
20. hemorrhagic septicemia20. hemorrhagic septicemia
20. hemorrhagic septicemia
 
القيادة والريادة
القيادة والريادة القيادة والريادة
القيادة والريادة
 

Mais de Yuma Ohgami

Mais de Yuma Ohgami (20)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Daisy OSでデイジーワールド!
Daisy OSでデイジーワールド!Daisy OSでデイジーワールド!
Daisy OSでデイジーワールド!
 
バイナリ生物学でデイジーワールド
バイナリ生物学でデイジーワールドバイナリ生物学でデイジーワールド
バイナリ生物学でデイジーワールド
 
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
 
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
 
60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介
 
来週の展示内容紹介
来週の展示内容紹介来週の展示内容紹介
来週の展示内容紹介
 
DaisyOS(仮)のご紹介
DaisyOS(仮)のご紹介DaisyOS(仮)のご紹介
DaisyOS(仮)のご紹介
 
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
 
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
 
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
 
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
 
バイナリ生成環境『daisy-tools』のご紹介
バイナリ生成環境『daisy-tools』のご紹介バイナリ生成環境『daisy-tools』のご紹介
バイナリ生成環境『daisy-tools』のご紹介
 
セガサターンで動く自作シンセサイザーの紹介
セガサターンで動く自作シンセサイザーの紹介セガサターンで動く自作シンセサイザーの紹介
セガサターンで動く自作シンセサイザーの紹介
 
セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介
 
ハードの作りで振り返るセガサターン
ハードの作りで振り返るセガサターンハードの作りで振り返るセガサターン
ハードの作りで振り返るセガサターン
 
エミュレータのコードを読んでわかるセガサターン
エミュレータのコードを読んでわかるセガサターンエミュレータのコードを読んでわかるセガサターン
エミュレータのコードを読んでわかるセガサターン
 
エミュレータのコードを読んでわかる「セガサターン」
エミュレータのコードを読んでわかる「セガサターン」エミュレータのコードを読んでわかる「セガサターン」
エミュレータのコードを読んでわかる「セガサターン」
 
シェルスクリプトでセガサターンマシン語ベアメタルプログラミング
シェルスクリプトでセガサターンマシン語ベアメタルプログラミングシェルスクリプトでセガサターンマシン語ベアメタルプログラミング
シェルスクリプトでセガサターンマシン語ベアメタルプログラミング
 
メガドラ実機で自作のROMファイルを動かしてみた話
メガドラ実機で自作のROMファイルを動かしてみた話メガドラ実機で自作のROMファイルを動かしてみた話
メガドラ実機で自作のROMファイルを動かしてみた話
 

ゲームボーイ向けOSの作り方