Click here to load reader
Upload
kazuhiro-hishinuma
View
804
Download
5
Tags:
Embed Size (px)
DESCRIPTION
Cf. http://mcpc.arnip.org/wiki/csmeiji/log/20130322
Citation preview
How to Implement a CPU Emulator in Scheme
Representa9ve of MCPC
Kazuhiro Hishinuma
MCPC: a Compe99ve Programming Circle 1
hBp://mcpc.arnip.org/ #csmeiji
The Trigger to Implement a CPU Emulator
MCPC: a Compe99ve Programming Circle 2
MCPC: a Compe99ve Programming Circle 3
MCPC: a Compe99ve Programming Circle 4
MCPC: a Compe99ve Programming Circle 5
MCPC: a Compe99ve Programming Circle 6
( ◠‿◠ )☛ Make It Yourself
MCPC: a Compe99ve Programming Circle 7
▂▅▇█▓▒░('ω')░▒▓█▇▅▂ ▂▅▇█▓▒░('ω')░▒▓█▇▅▂ ▂▅▇█▓▒░('ω')░▒▓█▇▅▂
MCPC: a Compe99ve Programming Circle 8
The Reason to Implement in Scheme
MCPC: a Compe99ve Programming Circle 9
In Scheme, You can …
Get Current Con9nua9on And
Return Mul9ple Values
MCPC: a Compe99ve Programming Circle 10
Con9nua9on...?
/* Pseudo-‐Code */ func9on f ( x ) { res = x + 1; return ( res ); };
MCPC: a Compe99ve Programming Circle 11
Con9nua9on := A Func9on-‐Like Object To Return Value!!!
What’s the Difference Between Func9on And Con9nua9on??
MCPC: a Compe99ve Programming Circle 12
( ◠‿◠ )☛In Func9on
MCPC: a Compe99ve Programming Circle 13
PROGRAM FUNCTION
CALL
RETURN
( ◠‿◠ )☛In Con9nua9on
MCPC: a Compe99ve Programming Circle 14
PROGRAM CONTINU-‐ ATION
CALL
( ◠‿◠ )☛ A Con9nua9on is Like A Func9on, But It Won’t Return.
MCPC: a Compe99ve Programming Circle 15
o。(˘⊖˘ ) A Con9nua9on is Like A Func9on…?
MCPC: a Compe99ve Programming Circle 16
┗(☋` )┓三 return ( a, b, c );
MCPC: a Compe99ve Programming Circle 17
f ( x ) returns y
MCPC: a Compe99ve Programming Circle 18
f ( x )
x
y
f ( x ) returns ( a, b, c )
MCPC: a Compe99ve Programming Circle 19
f ( x )
x a
b
c
ヾ(*>ヮ<)ノ” A Func9on Returns Mul9ple Values!!
MCPC: a Compe99ve Programming Circle 20
Mul9ple Values Func9on
MCPC: a Compe99ve Programming Circle 21
f ( x )
x a
b
c
Composing Func9ons
MCPC: a Compe99ve Programming Circle 22
f ( x ) g ( a, b, c )
x
d
e
Composing Func9ons…?
MCPC: a Compe99ve Programming Circle 23
fetch generator
3
2
This is a Hardware Diagram!!
MCPC: a Compe99ve Programming Circle 24
clk_gen
counter
MUX 0
decoder
dec7seg
dec7seg
_人人人人人人人人_> Scheme is a HDL!! <‾^Y^Y^Y^Y^Y^Y^Y^Y^‾
MCPC: a Compe99ve Programming Circle 25
The Way to Implement a CPU Emulator
MCPC: a Compe99ve Programming Circle 26
( ◠‿◠ )☛Read it!
MCPC: a Compe99ve Programming Circle 27
( ◠‿◠ )☛980 yen (tax in)
MCPC: a Compe99ve Programming Circle 28
日経吔听吟叽叿叹
咇咅咅咎年咅咇月号
( ◠‿◠ )☛Implement It!!
MCPC: a Compe99ve Programming Circle 29
<machine>
gr mem
pc
fr fetch
run
(ฅ`・ω・´)っ= There is One Problem.
MCPC: a Compe99ve Programming Circle 30
State Transi9on on Hardware is …
DESTRUCTIVE!!
MCPC: a Compe99ve Programming Circle 31
Destruc9ve State Transi9on
/* Pseudo-‐Code, Given s: Current State */ S1: /* Procedure of State S1 */
s = /* S1-‐>S2 */( s ); goto S2;
S2: /* Procedure of State S2 */
/* … */
MCPC: a Compe99ve Programming Circle 32
Pure State Transi9on
/* Pseudo-‐Code, Given s: Current State */ func9on S1 ( s ) { /* Procedure of State S1 */ return S2 ( /* S1-‐>S2 */( s ) ); } func9on S2 ( s ) { /* Procedure of State S2 ...
MCPC: a Compe99ve Programming Circle 33
Tail Call
p (`・ω・´q) It’s Solved.
MCPC: a Compe99ve Programming Circle 34
The Result of Implement in Scheme
MCPC: a Compe99ve Programming Circle 35
( ◠‿◠ )☛Demonstra9on
MCPC: a Compe99ve Programming Circle 36
hBps://gist.github.com/kazh98/5117299 解説: hBp://qiita.com/items/b667dc18e769c4bf857e hBps://gist.github.com/kazh98/5213280 解説: このスライド
Conclusion
• Scheme is a Hardware Descrip9on Language. • State Transi9on can be Expressed as Tail Call. • To Implement CPU Emulator is interes9ng.
Let us Be a Schemer!!
MCPC: a Compe99ve Programming Circle 37
Thanks for YOUR listening!
MCPC: a Compe99ve Programming Circle 38
hBp://mcpc.arnip.org/