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
2019 spring WIP
Search
sksat
July 29, 2019
Programming
1
100
2019 spring WIP
sksat
July 29, 2019
Tweet
Share
More Decks by sksat
See All by sksat
AE Rust 勉強会: github-webhook-rs
sksat
0
170
万国のサーバ管理者よ, 自動化せよ!
sksat
1
6.1k
teleka.suを支える技術
sksat
1
13k
ふつうのLinuxプログラミング-プロセスとハードウェア
sksat
25
7.2k
小型ハイブリッド用フライトシミュレータの開発
sksat
0
900
大学生でもできる!ハイブリッドロケット入門
sksat
0
1.2k
CORE 電装講習第1回
sksat
2
670
CombNaf3.pdf
sksat
0
240
Other Decks in Programming
See All in Programming
Advanced App Shrinking Techniques
cbeyls
2
150
スクラムマスターって孤独じゃないですか?
yoshitaroyoyo
1
140
MIERUNE BBQにおけるユーザー中心設計()
mierune
PRO
1
110
【Go言語】golangci-lintの使い方
tomo1227
0
270
CSC307 Lecture 12
javiergs
PRO
0
220
Harnessing Large Language Models for Training-free Video Anomaly Detection
tereka114
1
1.3k
みんなのオブザーバビリティプラットフォームを作ってるんだがパフォーマンスがやばい #mackerelio #srenext
ne_sachirou
0
370
CSC307 Lecture 06
javiergs
PRO
0
360
How to use Macrobenchmark
veronikapj
0
160
ピグパーティにおけるMongoDB CommunityバージョンからAtlasへの移行事例
10969hotaka
0
130
GraphQL はいいぞ! ~Laravel で学ぶ GraphQL 入門~
azuki
1
160
【Go言語】ジェネリクス
tomo1227
0
170
Featured
See All Featured
How GitHub (no longer) Works
holman
305
140k
StorybookのUI Testing Handbookを読んだ
zakiyama
15
4.9k
Done Done
chrislema
179
15k
The Illustrated Children's Guide to Kubernetes
chrisshort
39
47k
Learning to Love Humans: Emotional Interface Design
aarron
269
39k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
Building Your Own Lightsaber
phodgson
101
5.9k
Automating Front-end Workflow
addyosmani
1362
200k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
35
6.3k
Adopting Sorbet at Scale
ufuk
71
8.8k
Producing Creativity
orderedlist
PRO
340
39k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
16
1.6k
Transcript
Emscriptenを用いたx86エミュレータの ブラウザへの移植 Arch B1 sksat
背景 ・過去にx86エミュレータを作っていた ・WebAssemblyがアツい 2
WebAssemblyとは 3 ・ブラウザ上で走るアセンブリ風(?)言語 ・JavaScriptを置換するわけではない ・大してWebでもAssemblyでもない ・ブラウザ上で高速に計算できる ・LLVM 8.0で正式サポート(2019/03/20)
自作エミュレータ ・高2の時に作ったもの ・https://github.com/sk2sat/emu で公開 ・ターゲットはx86 ・コンピュータの動作原理を知りたい ・はりぼてOS(教育用の小さなOS)が動く ・マルチプラットフォームで動く → ブラウザでも動いたら楽しい!
←今回のモチベーション 4
先行事例 ・JSLinux ・v86 5
Emscriptenとは 6 ・asm.js, WebAssemblyへのコンパイラツールチェーン ・C/C++をブラウザ向けにコンパイルできる(!?)
Emscriptenとは(2) 7
とりあえずやってみる make CC=emcc CXX=emcc ・これだけではうまくいかない ・なぜ?→ファイル読み込みと画面描画ができない 8
エミュレータの構造 9 CPU G U I V G A G
L F W memory glDrawPixels fetch, read set palette read VRAM O S s t d li b flo pp y B I O S write int 0x13 read disk load “haribote.img” fread
ブラウザ上では... 10 CPU G U I V G A G
L F W memory glDrawPixels fetch, read set palette read VRAM O S s t d li b flo pp y B I O S write int 0x13 read disk load “haribote.img” fread
今回やろうとしたこと 11 CPU G U I V G A G
L F W memory glDrawPixels fetch, read set palette read VRAM O S s t d li b flo pp y B I O S write int 0x13 read disk load “haribote.img” fread
進捗どうですか? できませんでした... 12
進捗 13 CPU G U I V G A G
L F W memory glDrawPixels fetch, read set palette read VRAM O S s t d li b flo pp y B I O S write int 0x13 read disk load “haribote.img” fread できた なんもわからん
なぜできなかったのか? ・WebAssemblyでのpthreadがまだproposalだった 14 ・glDrawPixels()が使えなかった glDrawPixels()はOpenGL ES 2.0で削除 WebGLはOpenGL ES 2.0相当
やったこと ・threadが無いなら定期的に描画してしまえばいいじゃない →main()が終了するまでDOMへの操作が反映されない emscripten_sleep()を入れるとそこで更新してくれるらしい →コンパイラが落ちる 15
やったこと(2) ・glDrawPixels()が使えないなら... 元々RGBを1つの関数で表示したかったがためにOpenGLを使っていた シェーダなんもわからん そもそもemscripten_sleep()が使えないから実行中の描画ができない 16
やったこと(3) ・実行中の描画はあきらめた とりあえず終了時の画面が描画できればいい ・RGBを描画する関数が無いならcanvasに直描きすればいいじゃない 17
デモ 18 https://sk2sat.github.io/emu/demo/emu.html
今後 ・新規にx86エミュレータを作りたい https://github.com/sk2sat/eucerca ・キーボード/マウスのエミュレーション ・メモリ保護機能 ・FPGAで自作CPU 19
エミュレータの構造 20 CPU G U I V G A G
L F W memory glDrawPixels fetch, read set palette read VRAM O S s t d l i b f l op p y B I O S write int 0x13 read disk load “haribote.img” fread