Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

第23回 自作OSもくもく会オンライン
https://osdev-jp.connpass.com/event/200085/

の発表資料です。

  • Be the first to comment

  • Be the first to like this

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

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

    Be the first to comment

第23回 自作OSもくもく会オンライン https://osdev-jp.connpass.com/event/200085/ の発表資料です。

Views

Total views

312

On Slideshare

0

From embeds

0

Number of embeds

11

Actions

Downloads

0

Shares

0

Comments

0

Likes

0

×