hBp://mcpc.arnip.org/	
                                                          #csmeiji	




             How	
  to	
  Implement	
  
      a	
  CPU	
  Emulator	
  in	
  Scheme	
                     Representa9ve	
  of	
  MCPC	
  
                  Kazuhiro	
  Hishinuma	


                          MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
         1	
  
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;	
   Con9nua9on	
  :=	
  
                                       A	
  Func9on-­‐Like	
  Object	
  
	
                                     To	
  Return	
  Value!!!	
  
	
  	
  return	
  (	
  res	
  );	
  
};	
  
                       MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     11	
  
What’s	
  the	
  Difference	
  
 Between	
  Func9on	
  
And	
  Con9nua9on??	

         MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     12	
  
(	
  ◠‿◠	
  )☛In	
  Func9on	


       CALL	

PROGRAM	
                                                        FUNCTION	
            RETURN	


          MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
              13	
  
(	
  ◠‿◠	
  )☛In	
  Con9nua9on	


        CALL	
                                                                  CONTINU-­‐	
  
PROGRAM	
                                                                   ATION	


           MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
                      14	
  
(	
  ◠‿◠	
  )☛	
  
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	

x	
               f	
  (	
  x	
  )	
                                                                y	
         MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     18	
  
f	
  (	
  x	
  )	
  returns	
  (	
  a,	
  b,	
  c	
  )	

x	
                                                                      a	
                        f	
  (	
  x	
  )	
                               b	
                                                                         c	
                  MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     19	
  
ヾ(*>ヮ<)ノ 	
  
A	
  Func9on	
  Returns	
  
 Mul9ple	
  Values!!	
  

        MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     20	
  
Mul9ple	
  Values	
  Func9on	

x	
                                      a	
                                         b	
       f	
  (	
  x	
  )	
                                         c	


                       MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     21	
  
Composing	
  Func9ons	

x	


      f	
  (	
  x	
  )	
                              g	
  (	
  a,	
  b,	
  c	
  )	
                                                                                       d	
                                                                                       e	
                      MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
               22	
  
Composing	
  Func9ons…?	
              3	



fetch	
                               generator	

                                                             2	

      MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
           23	
  
This	
  is	
  a	
  Hardware	
  Diagram!!	
clk_gen	




                              MUX	
            0	
                                                                   dec7seg	
counter	

                                                                   dec7seg	
                             decoder	

            MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
                 24	
  
_人人人人人人人人_

> 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!!	


gr	
                                                                    mem	
                                  run	


fr	
                                                                    fetch	

pc	
                                                                      <machine>	
               MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
                 29	
  
(ฅ`・ω・´)っ=	
  
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	
  ...	
  
                                                                       Tail	
  Call	

                              MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
        33	
  
p	
  (`・ω・´q)	
  
                                       It’s	
  Solved.	


MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     34	
  
The Result	
             of	
  Implement	
  in	
  Scheme	




  MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     35	
  
hBps://gist.github.com/kazh98/5117299 解説:	
  hBp://qiita.com/items/b667dc18e769c4bf857e	
  
hBps://gist.github.com/kazh98/5213280 解説:	
  このスライド	
  




       (	
  ◠‿◠	
  )☛Demonstra9on	


                                MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     36	
  
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	
  
hBp://mcpc.arnip.org/	




              Thanks	
  for	
  
            YOUR	
  listening!	

                          MCPC:	
  a	
  Compe99ve	
  Programming	
  Circle	
     38	
  

How to Implement a CPU Emulator in Scheme