Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
I wanted a computer, but all I got was a transistor
Denis Defreyne
September 08, 2015
Programming
2
160
I wanted a computer, but all I got was a transistor
Denis Defreyne
September 08, 2015
Tweet
Share
More Decks by Denis Defreyne
See All by Denis Defreyne
The importance of naming
ddfreyne
0
17
An introduction to fibers
ddfreyne
0
52
Code as data (RubyConfBY 2019 edition)
ddfreyne
0
55
Code as data
ddfreyne
0
100
How to memoize
ddfreyne
0
100
Clean & fast code with enumerators
ddfreyne
0
59
Fibers
ddfreyne
0
200
Let’s create a programming language! [SoundCloud HQ edition]
ddfreyne
0
130
Let’s create a programming language! [RUG::B edition]
ddfreyne
1
140
Other Decks in Programming
See All in Programming
A technique to implement DSL in Ruby
okuramasafumi
0
830
LegalForceの契約データを脅かすリスクの排除と 開発速度の向上をどうやって両立したか
aibou
0
660
Cloud-Conference-Day-Spring Cloud + Spring Webflux: como desenvolver seu primeiro microsserviço reativo em Java?
kamilahsantos
1
170
Unity Localization で多言語対応実装しよう / xrdnk-yokohamaunity-lt10-20220513
xrdnk
0
190
あなたの会社の古いシステム、なんとかしませんか?~システム刷新から考えるDX化への道筋とバリエーション~/webinar20220420-systems
grapecity_dev
0
130
モデリングの費用対効果
masuda220
PRO
4
990
mrubyを1300円のボードで動かそう
yuuu
0
190
roadmap to rust 2024
matsu7874
1
910
httputil.ReverseProxy でもリトライがしたい
toga4
1
140
CLI構築のススメ
nyankotaro
1
260
スモールチームがAmazon Cognitoでコスパよく作るサービス間連携認証
tacke_jp
2
940
SPA/MPA 議論の俯瞰と 現代における設計のポイント - #tfcon 2022 フロントエンド設計
ahomu
3
1.9k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
29
4.3k
How to train your dragon (web standard)
notwaldorf
57
3.8k
Web Components: a chance to create the future
zenorocha
303
40k
Design by the Numbers
sachag
271
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
GraphQLとの向き合い方2022年版
quramy
16
8.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
4
450
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
Bash Introduction
62gerente
596
210k
Raft: Consensus for Rubyists
vanstee
126
5.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
19
1.4k
Transcript
I wanted a computer, but all I got was a
transistor. Denis Defreyne 1
2 I will explain how to build a computer from
scratch. I cannot do this without taking some shortcuts. I will tell lies. CAUTION
3
In the beginning, the transistor was created. 4
5 GATE SOURCE DRAIN
6 GATE SOURCE DRAIN
7 GATE SOURCE DRAIN
8
9
10
11
12 AND
13
14
15
16
OR 17
Now we have gates, and we can forget about transistors.
18
19 OR AND XOR NAND NOT …
A B Sum 0 0 0 0 1 1 1
0 1 1 1 0 20
A B Carry 0 0 0 1 A B Sum
Carry 0 0 0 0 1 1 1 0 1 1 1 0 21 AND XOR
22 AND A B CARRY XOR SUM
ADD CARRY SUM A B 23
24 ADD CARRY SUM A B CARRY
25 ADD SUM 0 A 0 B 0
26 ADD SUM 0 A 0 B 0 ADD SUM
1 A 1 B 1
27 ADD SUM 0 A 0 B 0 ADD SUM
1 A 1 B 1 ADD SUM 0 A 0 B 0 ADD SUM 1 A 1 B 1 ADD A 2 B 2 SUM 2
28 ADD A B SUM
ADD 00010001 00000101 00010110 29
ADD 17 5 22 30
31 ADD R A B MUL R A B DIV
R A B MOD R A B
A B ADD MUL DIV MOD R R R R
32
A B ADD MUL DIV MOD MUX S R 33
34 MUX
35 0 MUX
36 1 MUX
37 2 MUX
38 3 MUX
39 A B ADD MUL DIV MOD MUX S R
40 ALU R A B S
A B S Result 15 7 0 (+) 22 15
7 1 (*) 105 15 7 2 (/) 2 15 7 3 (%) 1 41
Now we have an arithmetic logic unit. 42
43 OR NOT OR NOT Q S R
OR NOT OR NOT Q S R 44
OR NOT OR NOT Q S R 45
OR NOT OR NOT Q S R 46
OR NOT OR NOT Q S R 47
OR NOT OR NOT Q S R 48
49 SR-LATCH S R Q set reset
D-LATCH D E Q 50 data enable write
51 D-LATCH D 0 Q 0 D-LATCH D 1 Q
1 D-LATCH D 2 Q 2 D-LATCH D 3 Q 3 D-LATCH D 4 Q 4 D-LATCH D 5 Q 5 D-LATCH D 6 Q 6 D-LATCH D 7 Q 7 E
52 REGISTER (8 BIT) D E Q
Now we have registers. 53
Q: What distinguishes a computer from a simple calculator? 54
A: You can program a computer, but not a calculator.
55
56 OPCODE VALUE 1 VALUE 2 2 7 15
57 OPCODE VALUE 1 VALUE 2 ALU R
OPCODE VALUE 1 VALUE 2 ALU REGISTER (8 BIT) 1
58
OPCODE VALUE 1 VALUE 2 ALU REGISTER FILE OUTPUT REG
1 59
OPCODE INPUT REG 1 INPUT REG 2 REGISTER FILE OUTPUT
REG ALU 0 0 1 60
61 OPCODE INPUT REG 1 INPUT REG 2 OUTPUT REG
62 INSTRUCTION REGISTER OPCODE INPUT REG 1 INPUT REG 2
OUTPUT REG
63 MEMORY INSTRUCTION REGISTER OPCODE INPUT REG 1 INPUT REG
2 OUTPUT REG
MEMORY INSTRUCTION REGISTER OPCODE INPUT REG 1 INPUT REG 2
OUTPUT REG 0 64
65 INSTRUCTION POINTER REGISTER MEMORY INSTRUCTION REGISTER OPCODE INPUT REG
1 INPUT REG 2 OUTPUT REG
66 INSTRUCTION POINTER REGISTER MEMORY INSTRUCTION REGISTER ADD 4 OPCODE
INPUT REG 1 INPUT REG 2 OUTPUT REG
Now we have the hardware for a programmable computer, and
we can forget the hardware. 67
68 0 3 0 2 Add register 0 and register
2, and store result in register 3: OPCODE INPUT REG 1 OUTPUT REG INPUT REG 2
69 “add r3 r0 r2” Add register 0 and register
2, and store result in register 3:
70 “add r3 r0 r2” 0 3 0 2 assembly
language machine code assembler
16 0 0 12 127 56 16 1 0 3
224 211 18 1 0 0 0 0 7 32 15 2 1 19 1 0 1 15 0 2 6 12 14 0 255 0 71
li r0, 819000 li r1, 254163 cmpi r1, 0 jeq
@end mov r2, r1 mod r1, r0, r1 mov r0, r2 jmp @start prn r0 halt 72
73 cmp mod add sub mul div xor or and
shl shr not ARITHMETIC
74 j je jne jg jge jl jle cmp mod
add sub mul div xor or and shl shr not lw lh lb sw sh sb STACK FUNC SPECIAL call ret push pop prn halt BRANCHING ARITHMETIC mov li MEMORY REG
DEMO 75
github.com/ddfreyne/rcpu 76
77
78 slack @denis / mail denis@soundcloud.com Denis Defreyne Ask me
about Belgian beer.