OSC東京2018秋で日本NetBSDユーザーグループさまの枠をお借りして発表したやつです。
ニンテンドウ64MurachueOSC 2018 fall
View Slide
だれ?• Murachue (むらちゅえ)• @murachue• github.com/murachue• もうすぐ むしょく• てんしょく かつどう ちゅう
まずはお詫びから
昨日はJNUGさまブースをLinuxで上書きしてすみませんでしたhttps://twitter.com/Yukky37x/status/1056080136666148865ディスプレイ貸していただいてありがとうございます…!!
が
このLTJNUGさま枠なんだよなぁ…
あらかじめお詫び申し上げますTux, © Larry Ewing and The GIMP話しません→ ←話しますNetBSD®
というわけで• オチがほぼバレてるので、さっくり説明すると• Linuxをニンテンドウ64に移植しました• っていう話こういうこと→Tux, © Larry Ewing and The GIMP
ニンテンドウ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 ではない
なんで64?https://www.linux-mips.org/wiki/Nintendo_64
なんで64?vaporware: 影も形もないソフト《理念だけで実現されていない製品》(研究社 英和コンピューター用語辞典)
LinuxをN64に対応させるVR4300RCPRDRAMCartVideo I/FAudio I/FController I/FCart I/F I2CSDUSBROM(RAM)RTCetc…
LinuxをN64に対応させるVR4300RCPRDRAMCartVideo I/FAudio I/FController I/FCart I/F I2CSDUSBROM(RAM)RTCetc…FrameBufferALSAevdevI2c host DS1337 (ママMIPS3(ママsdmmc hosttty (serial-ish)blockdevmfd
できた~Tux, © Larry Ewing and The GIMP
userlandもつくりましょーBuildroot Busybox Linux(改)Tux, © Larry Ewing and The GIMPISO9660 image + α
なんで9660!?• N64のROMイメージは先頭4KiB(-64bytes)の変更がむずかしい• パーティションテーブルが置けない、普通のfilesystemも無理• ISO9660なら先頭16KiB空いてるじゃん!• 簡易ブートローダも詰め込めて安心ヘッダ領域 (64by)N64ブートコードLinux簡易ローダーISO9660の中身4KiB16KiBN64エントリポイント
入力どうしようか• USBでtty生やしてるけど、単体で動いたほうがやっぱり面白いよね• 入力デバイス……コントローラあるじゃん!
自作joy2key的なやつ• 3Dスティック→8方向• B, A, C下 → 3 * 8 → 24• アルファベット=26通り• 大文字も入れたい• ついでに記号もほしい• R, Zトリガを修飾とする• →2^2 * 3 * 8 = 96通り!!
こんな感じでabcdefghijklmnopqrstuvwxyz-.(sp)/^H,B A C下 R+BYZ><|^MR+Z+BABCDEFGHZ+B…
たとえば• 右下+A → l (エル)• 右+C下 → s• 左+R+Z+B → ^M• ⇒ ls コマンドが実行できる!!!• 2日ほどで慣れます(typoしないとは言っていない)ijklmnopqrstuvwxA C下YZ><|^MR+Z+B
そんなん覚えられん!• そんなあなたに8bit直接入力モード!• (msb) Z R C右 C上 C下 C左 A B (lsb)• を同時押ししながらSTART• たとえば B+A+START -> 3 = ^C• SIGINTを投げられる!!• たぶん人間には早すぎるRZ
DEMO
現況と将来• 最近ALSAドライバができてaplayやmpg123が動いて楽しい• ogg123は重すぎてブツブツ、tremor(整数vorbisデコーダ)使ったらギリギリCPU足りない• あとでGitHubに公開したい (履歴…)• Linux 4.4.1はちょい古いので4.18とか動かしたい• たまにSEGV/ILL/BUSするのが謎だけど、なんとかしたい
あとNetBSD®移植しような!