際際滷

際際滷Share a Scribd company logo
0からコンピュ`タを恬ってみた
2018/10/13
@ゆるゆるIT茶feat.Reedex Vol.4
2
徭失B初
?モフ竪
?NTTテクノクロス芙のエンジニア
?深え嶄なので措い氏芙をご贋岑の圭は
頁掲ぜひB初してください
?Bj枠
Twitter https://twitter.com/okn_yu
GitHub https://github.com/okn-yu/Nand2Tetris
3
k燕坪否┰饂悗兜LTです
?坪否B初からのi?
NANDという徨殆徨から
スタ`トし、尖ゲ`ト、
紗麻匂、CPUをO。オペ
レ`ティングシステム、コ
ンパイラ、バ`チャルマシ
ンなどをg廾しコンピュ`
タを頼撹させて恷瘁にその
貧でアプリケ`ション(テ
トリスなど)を嘛させる。
4
NANDゲ`トのB初
?NANDゲ`トとはANDゲ`トとNOTをMみ栽わせたもの
?ANDゲ`トへの秘薦の倦協NOTを竃薦
?A NAND B = NOT ( A AND B )
喘ロジックICの74LS00
5
NANDゲ`トの頼畠來
?NANDゲ`トのみでANDゲ`ト/ORゲ`ト/NOTゲ`トを
燕F辛嬬
?販吭の尖指揃はNANDゲ`トのみで燕F辛嬬
箭NOTゲ`トの栽
NOT A = NOT ( A AND A ) ´
A NAND B = NOT ( A AND B ) ´
戡擇茲
NOT A = A NAND A
6
云念磯の撹
1嫗坤岌`ル尖
2嫗坤岌`ル麻g
3嫗鷺會指揃
4嫗C亠Z
5嫗坤灰鵐團紿`タア`キテクチャ
NANDゲ`トを喘いて児云尖ゲ`ト?マルチプレクサ?
デマルチプレクサのg廾
NANDゲ`トを喘いて磯紗麻匂?畠紗麻匂?ALUのg廾
DFFを喘いて殆徨┘譽献好?メモリ?プログラムカウンタ
のg廾
HACKC亠Zの
CPUおよびコンピュ`タ指揃畠悶のg廾
?念磯はハ`ドウェアをg廾
?HDL┘路`ドウェア峰冱Zで指揃を峰し、喘の
シュミレ`タで嘛_Jを佩う
7
HACKマシン
?5嫗にて恬撹するHackマシンのスペックは參和の宥り
?シュミレ`タU喇でキ`ボ`ドスクリ`ンもサポ`ト
マシン HACK ゲ`ムボ`イ
CPUのビット方 16bit 8bit
CPUのレジスタL 16bit x 3 8bit x 8
16bit x 2
CPUの凋綜方 37 
メモリ ROM 32KB
RAM 32KB
RAM 8KB
VRAM 8KB
スクリ`ン スクリ`ン
512 x 256 ピクセル
スクリ`ン
256 x 256
8
シュミレ`タのg佩イメ`ジ
9
云瘁磯の撹
6嫗坤▲札鵐屮
7?8嫗∀襯泪轡
9嫗左濕邦変壞Z
10嫗?11嫗坤灰鵐僖ぅ
?瘁磯はJack冱Z┷叟JavaをHACKマシン貧で咾すため
のg佩h廠┷叟JDKを恬撹
?聞喘するプログラミング冱Zは販吭
?Pythonでg廾して畠2000佩殻業
12嫗OS gHにはOSというよりは詰邦淵薀ぅ屮薀
JDKのライブラリに犁
蛍としてはスタックマシン
叟Jack冱ZのB初
猟盾裂?コ`ド伏撹まで
Hackアセンブリ冱ZをHackC亠ZにQ
10
∀襯泪轡鵑慮田
?システム∀襯泪轡鵤╂ AWS
システム畠悶OSを
?プロセス∀襯泪轡鵤╂JDK
蒙協のアプリケ`ション?プログラムを
?書指はg廾するのはJack喘のプロセス∀襯泪轡
仝スタックマシン々仝レジスタマシン々の2N
冱Z VM兆 ア`キテクチャ
Java JVM スタックマシン
Java DalvikAndroid レジスタマシン
Ruby YARVRuby1.9參週 スタックマシン
Ruby myruby レジスタマシン
Lua lua レジスタマシン
Python CPython スタックマシン
旗燕議なプロセス∀襯泪轡
11
∀襯泪轡鵑g廾
?∀襯泪轡鵑蓮菰倡g冱Zのg佩h廠のエミュレ`タ々
?嶄g冱Zの畠凋綜はスタック荷恬でgF
?∀襯泪轡鵑琳なg廾坪否
戞菰倡g冱Zのg佩h廠のデ`タ夛々を壅F
據菰倡g冱Zのスタック凋綜をアセンブリ冱ZにQするQ匂々
∀襯泪轡鵑離譽献好 HACKマシンでのg廾 旋喘隈
SP RAM[0] スタックポインタ
LCL RAM[1] localセグメントのベ`スアドレス
ARG RAM[2] argumentセグメントのベ`スアドレス
THIS RAM[3] thisセグメントのベ`スアドレス
THAT RAM[4] thatセグメントのベ`スアドレス
∀襯泪轡鵑離禰`タ夛のHACKマシン貧での壅F箭
12
Jackアプリケ`ションのg佩
Hack CPU
─ X86犁隠
Hackアセンブリ冱Z
─X86アセンブリ
嶄g冱Z
(★バイトコ`ド)
Jack ピンポンゲ`ム
─Java アプリケ`ション犁隠
6嫗坤▲札鵐屮
10?11嫗坤灰鵐僖ぅ蕋─Javaコンパイラ犁隠
7?8嫗∀襯泪轡鵤─JVM犁隠
9嫗左濕邦変壞Z
12嫗OS┘薀ぅ屮薀蝪
?Jack冱Zでかれたピンポンゲ`ムを念磯のHDLでg廾した
CPU貧で嘛させるのが朕
ライブラリの恷m晒
業栽いによりアプリ
のg佩堀業がなる
13
云をiんで誼られた岑
?CPU / コンパイラ / VMがブラックボックスでなくなった。
?コンパイラの欒屬舛わかったのでデバックが壼くなった
┐も。
?仝縮親の坪否を頼畠に尖盾しないと恬れない々は`り。
恬りながら駅勣に鬉犬峠命をiみ卦すほうが附につく。

More Related Content

0からコンピュ`タを恬ってみた