Slide 1

Slide 1 text

ニンテンドウ64 Murachue OSC 2018 fall

Slide 2

Slide 2 text

だれ? • Murachue (むらちゅえ) • @murachue • github.com/murachue • もうすぐ むしょく • てんしょく かつどう ちゅう

Slide 3

Slide 3 text

まずはお詫びから

Slide 4

Slide 4 text

昨日はJNUGさまブースを Linuxで上書きしてすみませんでした https://twitter.com/ Yukky37x/status/ 1056080136666148865 ディスプレイ貸して いただいて ありがとうございます…!!

Slide 5

Slide 5 text

Slide 6

Slide 6 text

このLT JNUGさま枠 なんだよなぁ…

Slide 7

Slide 7 text

あらかじめお詫び申し上げます Tux, © Larry Ewing and The GIMP 話しません→ ←話します NetBSD®

Slide 8

Slide 8 text

というわけで • オチがほぼバレてるので、さっくり説明すると • Linuxをニンテンドウ64に移植しました • っていう話 こういうこと→ Tux, © Larry Ewing and The GIMP

Slide 9

Slide 9 text

ニンテンドウ64 • 1996/6/23発売 • CPU: MIPS VR4300 (93.75MHz, 64bit) • GPU: RCP (62.5MHz, 64bit) – 最大解像度 640x480x16 • Memory: 4MiB (CPU観点) – 拡張パックで+4MiB (CPU観点) • Audio: ~48KHz? 2ch 16bit PCM – ADPCMではない! (ウィキペは嘘) • ROM: 最大508MiBくらい – 常識的に64MiBほど • ニンテンドー64 ではない

Slide 10

Slide 10 text

なんで64? https://www.linux-mips.org/wiki/Nintendo_64

Slide 11

Slide 11 text

なんで64? vaporware: 影も形もないソフト《理念だけで実現されていない製品》 (研究社 英和コンピューター用語辞典)

Slide 12

Slide 12 text

LinuxをN64に対応させる VR4300 RCP RDRAM Cart Video I/F Audio I/F Controller I/F Cart I/F I2C SD USB ROM(RAM) RTC etc…

Slide 13

Slide 13 text

LinuxをN64に対応させる VR4300 RCP RDRAM Cart Video I/F Audio I/F Controller I/F Cart I/F I2C SD USB ROM(RAM) RTC etc… FrameBuffer ALSA evdev I2c host DS1337 (ママ MIPS3(ママ sdmmc host tty (serial-ish) blockdev mfd

Slide 14

Slide 14 text

できた~ Tux, © Larry Ewing and The GIMP

Slide 15

Slide 15 text

userlandもつくりましょー Buildroot Busybox Linux(改) Tux, © Larry Ewing and The GIMP ISO9660 image + α

Slide 16

Slide 16 text

なんで9660!? • N64のROMイメージは 先頭4KiB(-64bytes)の 変更がむずかしい • パーティションテーブル が置けない、普通の filesystemも無理 • ISO9660なら先頭16KiB 空いてるじゃん! • 簡易ブートローダも詰 め込めて安心 ヘッダ領域 (64by) N64ブートコード Linux簡易ローダー ISO9660の中身 4KiB 16KiB N64エントリポイント

Slide 17

Slide 17 text

入力どうしようか • USBでtty生やしてるけど、単体で動いたほう がやっぱり面白いよね • 入力デバイス……コントローラあるじゃん!

Slide 18

Slide 18 text

自作joy2key的なやつ • 3Dスティック→8方向 • B, A, C下 → 3 * 8 → 24 • アルファベット=26通り • 大文字も入れたい • ついでに記号もほしい • R, Zトリガを修飾とする • →2^2 * 3 * 8 = 96通り!!

Slide 19

Slide 19 text

こんな感じで a b c d e f g h i j k l m n o p q r s t u v w x y z - . (sp) / ^H , B A C下 R+B Y Z > < | ^M R+Z+B A B C D E F G H Z+B …

Slide 20

Slide 20 text

たとえば • 右下+A → l (エル) • 右+C下 → s • 左+R+Z+B → ^M • ⇒ ls コマンドが実行できる!!! • 2日ほどで慣れます (typoしないとは言っていない) i j k l m n o p q r s t u v w x A C下 Y Z > < | ^M R+Z+B

Slide 21

Slide 21 text

そんなん覚えられん! • そんなあなたに8bit直接入力モード! • (msb) Z R C右 C上 C下 C左 A B (lsb) • を同時押ししながらSTART • たとえば B+A+START -> 3 = ^C • SIGINTを投げられる!! • たぶん人間には早すぎる R Z

Slide 22

Slide 22 text

DEMO

Slide 23

Slide 23 text

現況と将来 • 最近ALSAドライバができてaplayやmpg123が 動いて楽しい • ogg123は重すぎてブツブツ、tremor(整数 vorbisデコーダ)使ったらギリギリCPU足りない • あとでGitHubに公開したい (履歴…) • Linux 4.4.1はちょい古いので4.18とか動かし たい • たまにSEGV/ILL/BUSするのが謎だけど、 なんとかしたい

Slide 24

Slide 24 text

あとNetBSD®移植しような!