[Code-Crunchers] Hardware emulation in "The Daily WTF"

Imri Goldberg lorgandon at gmail.com
Mon Jun 18 01:45:56 CDT 2007


Heya
Seems that "The Daily WTF" had a competition to write the worse 
calculator ever.
Well, you can view the results of the competition yourself - but this is 
one of the more interesting 'highlights'...

The actual submission I'm talking about is this one: 
http://omg.worsethanfailure.com/Entries/ViewEntry.aspx?id=100328

The guy implemented a CPU in ascii art!!
Here is an excerpt from his code:

 
const char cpu[HEIGHT][WIDTH] = {       
/*Result        TC C       Acc         Operand  IP         S   InsnA    
InsnB */
"                ! !       !!!!!!!!             !!!!!!!!   !   !!!!!!!! 
!!!!!!!!       ",
"                | |       ||||||||             ||||||||   
 >---++++++++-++++++++----`  ",
"                | |       ||||||||             ||||||||   |   |||||||| 
|||||||>-xa-<  ",
"                | |       ||||||||             
|||||||>---+---++++++++-++++++++-^x-+-!",
"                | |       ||||||||             ||||||||   |   |||||||| 
||||||>+-x-a<  ",
"                | |       ||||||||             
||||||>+---+---++++++++-++++++++-^-x+-!",
"                | |       ||||||||             ||||||||   |   |||||||| 
|||||>++-xa-<  ",
"                | |       ||||||||             
|||||>++---+---++++++++-++++++++-^x-+-!",
"                | |       ||||||||             ||||||||   |   |||||||| 
||||>+++-x-a<  ",
"                | |       ||||||||             
||||>+++---+---++++++++-++++++++-^-x+-!",
"                | |       ||||||||             ||||||||   |   |||||||| 
|||>++++-xa-<  ",
"                | |       ||||||||             
|||>++++---+---++++++++-++++++++-^x-+-!",
"                | |       ||||||||             ||||||||   |   |||||||| 
||>+++++-x-a<  ",
"                | |       ||||||||             
||>+++++---+---++++++++-++++++++-^-x+-!",
"                | |       ||||||||             ||||||||   |   |||||||| 
|>++++++-xa-<  ",
"                | |       ||||||||             
|>++++++---+---++++++++-++++++++-^x-+-!",
"                | |       ||||||||             ||||||||   |   |||||||| 
 >+++++++-x-a/  ",
"                | |       ||||||||             
 >+++++++---+---++++++++-++++++++-^-x--!",
"                | |       ||||||||             |||||||| /-<   |||||||| 
||||||||       ",
"                | |       ||||||||/------------++++++++-a 
 >n--++++++++o++++++++----`  ",
"                | |       |||||||||            |||||||| 
`-+---++++++<>/|||||||`-vx-+-!",
"                | |       
|||||||>+-xv---------++++++++---+---++++++++-+++++++--xa-<  ",
"                | |       ||||||||>-ax-------` ||||||||   |   |||||||| 
||||||`+-v-x+-!",
"                | |       
||||||>++x-v-------+-++++++++---+---++++++++-++++++---x-a<  ",
"                | |       ||||||||>a-x------`| ||||||||   |   |||||||| 
|||||`++-vx-+-!",
"                | |       
|||||>+++-xv------++-++++++++---+---++++++++-+++++----xa-<  ",
"                | |       ||||||||>-ax-----`|| ||||||||   |   |||||||| 
||||`+++-v-x+-!",
"                | |       
||||>++++x-v-----+++-++++++++---+---++++++++-++++-----x-a<  ",
"                | |       ||||||||>a-x----`||| ||||||||   |   |||||||| 
|||`++++-vx-+-!",
"                | |       
|||>+++++-xv----++++-++++++++---+---++++++++-+++------xa-<  ",
"                | |       ||||||||>-ax---`|||| ||||||||   |   |||||||| 
||`+++++-v-x+-!",
"                | |       
||>++++++x-v---+++++-++++++++---+---++++++++-++-------x-a<  ",
"                | |       ||||||||>a-x--`||||| ||||||||   |   |||||||| 
|`++++++-vx-+-!",
"                | |       
|>+++++++-xv--++++++-++++++++---+---++++++++-+--------xa-<  ",
"                | |       ||||||||>-ax-`|||||| ||||||||   |   |||||||| 
`+++++++-v-x+-!",
"            /---+-<       
 >++++++++x-v-+++++++-++++++++---+---++++++++----------x-a/  ",
"            |   | |       ||||||||`a-x`||||||| ||||||||   |   
|||>++++------`         ",
"            |   | 
 >-------++++++++----++++++++-++++++++---+---++++++++-v--vx+--------`",
"            o-n-+-+----v--++++++++----++++++++-++++++++---+---++<||||| 
|  xa<        |",
"            |   | |  /-+--++++++++----++++++++-++++++++---+---+++<|||| 
|  | |        |",
"           /<   | | /</<  ||||||||    
|||||||>-++++++++---+---++++++++-+-v+x+-------`|",
"         /-+x/v-+-+-x+a+--+++++++<    |||||||| ||||||||   |   |||||||| 
| ||||       ||",
"         | a^+x | |  | |  ||||||||    |||||||| ||||||||   |   |||||||| 
| x+a<       ||",
"         | `oa^-+-+--+-+--++++++++----+++++++< ||||||||   |   |||||||| 
| || |       ||",
"         | /<   | | /</<  ||||||||    
||||||>+-++++++++---+---++++++++-+-+*x+------`||",
"        /+-+x/v-+-+-x+a+--++++++<|    |||||||| ||||||||   |   |||||||| 
| ||||      |||",
"        || a^+x | |  | |  ||||||||    |||||||| ||||||||   |   |||||||| 
| |xa<      |||",
"        || `oa^-+-+--+-+--++++++++----++++++<| ||||||||   |   |||||||| 
| || |      |||",
"        || /<   | | /</<  ||||||||    
|||||>++-++++++++---+---++++++++-+-*+x+-----`|||",
"       /++-+x/v-+-+-x+a+--+++++<||    |||||||| ||||||||   |   |||||||| 
| ||||     ||||",
"       ||| a^+x | |  | |  ||||||||    |||||||| ||||||||   |   |||||||| 
| x+a<     ||||",
"       ||| `oa^-+-+--+-+--++++++++----+++++<|| ||||||||   |   |||||||| 
| || |     ||||",
"       ||| /<   | | /</<  ||||||||    
||||>+++-++++++++---+---++++++++-+-+*x+----`||||",
"      /+++-+x/v-+-+-x+a+--++++<|||    |||||||| ||||||||   |   |||||||| 
| ||||    |||||",
"      |||| a^+x | |  | |  ||||||||    |||||||| ||||||||   |   |||||||| 
| |xa<    |||||",
"      |||| `oa^-+-+--+-+--++++++++----++++<||| ||||||||   |   |||||||| 
| || |    |||||",
"      |||| /<   | | /</<  ||||||||    
|||>++++-++++++++---+---++++++++-+-*+x+---`|||||",
"     /++++-+x/v-+-+-x+a+--+++<||||    |||||||| ||||||||   |   |||||||| 
| ||||   ||||||",
"     ||||| a^+x | |  | |  ||||||||    |||||||| ||||||||   |   |||||||| 
| x+a<   ||||||",
"     ||||| `oa^-+-+--+-+--++++++++----+++<|||| ||||||||   |   |||||||| 
| || |   ||||||",
"     ||||| /<   | | /</<  ||||||||    
||>+++++-++++++++---+---++++++++-+-+*x+--`||||||",
"    /+++++-+x/v-+-+-x+a+--++<|||||    |||||||| ||||||||   |   |||||||| 
| ||||  |||||||",
"    |||||| a^+x | |  | |  ||||||||    |||||||| ||||||||   |   |||||||| 
| |xa<  |||||||",
"    |||||| `oa^-+-+--+-+--++++++++----++<||||| ||||||||   |   |||||||| 
| || |  |||||||",
"    |||||| /<   | | /</<  ||||||||    
|>++++++-++++++++---+---++++++++-+-*+x+-`|||||||",
"   /++++++-+x/v-+-+-x+a+--+<||||||    |||||||| ||||||||   |   |||||||| 
| |||| ||||||||",
"   ||||||| a^+x | |  | |  ||||||||    |||||||| ||||||||   |   |||||||| 
`-x+a/ ||||||||",
"   ||||||| `oa^-+-+--+-+--++++++++----+<|||||| ||||||||   |   
||||||||    |  /////////",
"   ||||||| /<   | | /</<  ||||||||    
 >+++++++-++++++++---+---++++++++----/ ///////// ",
"  /+++++++-+x/v-+-+-x+a+--<|||||||    |||||||| ||||||||   |   
||||||||     /////////  ",
"  |||||||| a^+x | |  | |  ||||||||    |||||||| ||||||||   |   
||||||||    /////////   ",
"  |||||||| `oa^-+-+--+-+--++++++++----<||||||| ||||||||   |   
||||||||    ||||||||    ",
" /++++++++--/ 
/-+-+--+-+--++++++++----++++++++-++++++++---+---+<||||||    ||||||||    ",
" 
||||||||`-vx-+-+-+--+-+--++++++++----++++++++-++++++++---+---++++++++----+++++++/    
",
" ||||||||/-xa-< | |  | |  ||||||||    
|||||||>-++++++++---+---++++++++----+++++++`    ",
" 
|||||||`+-v-x+-+-+--+-+--++++++++----++++++++-++++++++---+---++++++++----++++++/|    
",
" |||||||/+-x-a< | |  | |  ||||||||    
||||||>+-++++++++---+---++++++++----++++++`|    ",
" 
||||||`++-vx-+-+-+--+-+--++++++++----++++++++-++++++++---+---++++++++----+++++/||    
",
" ||||||/++-xa-< | |  | |  ||||||||    
|||||>++-++++++++---+---++++++++----+++++`||    ",
" 
|||||`+++-v-x+-+-+--+-+--++++++++----++++++++-++++++++---+---++++++++----++++/|||    
",
" |||||/+++-x-a< | |  | |  ||||||||    
||||>+++-++++++++---+---++++++++----++++`|||    ",
" 
||||`++++-vx-+-+-+--+-+--++++++++----++++++++-++++++++---+---++++++++----+++/||||    
",
" ||||/++++-xa-< | |  | |  ||||||||    
|||>++++-++++++++---+---++++++++----+++`||||    ",
" 
|||`+++++-v-x+-+-+--+-+--++++++++----++++++++-++++++++---+---++++++++----++/|||||    
",
" |||/+++++-x-a< | |  | |  ||||||||    
||>+++++-++++++++---+---++++++++----++`|||||    ",
" 
||`++++++-vx-+-+-+--+-+--++++++++----++++++++-++++++++---+---++++++++----+/||||||    
",
" ||/++++++-xa-< | |/-/ |  ||||||||    
|>++++++-++++++++---+---++++++++----+`||||||    ",
" 
|`+++++++-v-x+-+-++---+--++++++++----++++++++-++++++++---+---++++++++----/|||||||    
",
" |/+++++++-x-a< | ||/--/  ||||||||    
 >+++++++-++++++++---+---++++++++----`|||||||    ",
"!+++++++++----+-+-+++-----++++++++----++++++++-++++++++--a+---+++++<||    
||||||||    ",
" `++++++++--` | | |||/----++++++++----++++++++-++++++++-a*<   
||||||||    ||||||||    ",
"!-+++++++^--+-+-+-++++-xv-+++++++/    |||||||| |||||||| 
`++---++++<|||    ||||||||    ",
"  |||||||   | | | |||>-ax-+++++++`    |||||||| 
|||||||>--++-v-++++++++-n-`||||||||    ",
"!-++++++^---+-+-+-++++x-v-++++++/|    |||||||| `+++++++` || | 
|||||||`vx-++++++++<    ",
"  ||||||    | | | |||>a-x-++++++`|    |||||||| /+++++++x`|| | 
|||||||/xa-<||||||||    ",
"!-+++++^----+-+-+-++++-xv-+++++/||    |||||||| |`++++++va|| | 
||||||`+v-x+++++++<|    ",
"  |||||     | | | |||>-ax-+++++`||    |||||||| |/++++++x<|| | 
||||||/+x-a<||||||||    ",
"!-++++^-----+-+-+-++++x-v-++++/|||    |||||||| ||`+++++va|| | 
|||||`++vx-++++++<||    ",
"  ||||      | | | |||>a-x-++++`|||    |||||||| ||/+++++x<|| | 
|||||/++xa-<||||||||    ",
"!-+++^------+-+-+-++++-xv-+++/||||   ///////// |||`++++va|| | 
||||`+++v-x+++++<|||    ",
"  |||       | | | |||>-ax-+++`||||  /////////  |||/++++x<|| | 
||||/+++x-a<||||||||    ",
"!-++^-------+-+-+-++++x-v-++/||||| /////////   ||||`+++va|| 
|/<||`++++vx-++++<||||    ",
"  ||        | | | |||>a-x-++`||||| ||||||||    ||||/+++x<|| 
|||||/++++xa-<||||||||    ",
"!-+^--------+-+-+-++++-xv-+/|||||| ||||||||    |||||`++va|| 
||||`+++++v-x+++<|||||    ",
"  |         | | | |||>-ax-+`|||||| ||||||||    |||||/++x<|| 
||||/+++++x-a<||||||||    ",
"!-^---------+-+-+-++++x-v-/||||||| ||||||||    
||||||`+va|>`|||`++++++vx-++<||||||    ",
"        /---+-+-+-+<|`a-x-`||||||| ||||||||    
||||||/+x<|n||||/++++++xa-<||||||||    ",
"    /---+---+-/ | |||     |||||||| ||||||||    
|||||||`va|||||`+++++++v-x+<|||||||    ",
"    | /-+xv-+---+-+++-----++++++++-<|||||||    
|||||||/x^+/|||/+++++++x-a/||||||||    ",
"    | | 
`ax-+---+-+++-----++++++++-+++++++</---++++++++--+-a+/||||||||   
/////////    ",
"    | `-x-v-//--+-+++-----++++++++-+++++++++---++++++++--/  | ||||||||  
/////////     ",
"    >---a-x-v+xv^-+++-`   |||||||| |||||||`+-xv+++++++/     | |||||||| 
/////////      ",
"    |       |>ax` ||| | /-++++++++-+++++++-a-ax+++++++`   /-/ |||||||| 
||||||||       ",
"    |       |a--+-++/ | n |||||||| ||||||`-+x-v++++++/|   |   |||||||| 
||||||||       ",
"    |       `+xv+-^+--+`| |||||||| ||||||  >a-x++++++`|   |   |||||||| 
||||||||       ",
"    |        `ax+-`|  ||| |||||||| |||||`--+-xv+++++/||   |   |||||||| 
||||||||       ",
"    |           | ||  x<| |||||||| |||||   >-ax+++++`||   |   |||||||| 
||||||||       ",
"    `-----------+-++--ax| |||||||| ||||`---+x-v++++/|||   |   |||||||| 
||||||||       ",
"                | |`---x/ |||||||| ||||    >a-x++++`|||   |   |||||||| 
||||||||       ",
"                | |       |||||||| |||`----+-xv+++/||||   |   |||||||| 
||||||||       ",
"                | |       |||||||| |||     >-ax+++`||||   |   |||||||| 
||||||||       ",
"                | |       |||||||| ||`-----+x-v++/|||||   |   |||||||| 
||||||||       ",
"                | |       |||||||| ||      >a-x++`|||||   |   |||||||| 
||||||||       ",
"                | |       |||||||| |`------+-xv+/||||||   |   |||||||| 
||||||||       ",
"                | |       |||||||| |       >-ax+`||||||   |   |||||||| 
||||||||       ",
"                | |       |||||||| `-------+x-v/|||||||   |   |||||||| 
||||||||       ",
"                | |       ||||||||         >a-x`|||||||   |   |||||||| 
||||||||       ",
"                ! !       !!!!!!!!             !!!!!!!!   !   !!!!!!!! 
!!!!!!!!       ",
};
 
const unsigned char addprog[] = {
    0x19, 0x84, // mov a,84
    0x25, 0x80, // add 80
    0x19, 0x85, // mov a,85
    0x25, 0x81, // add 81
    0x19, 0x86, // mov a,86
    0x25, 0x82, // add 82
    0x19, 0x87, // mov a,87
    0x25, 0x83, // add 83
    0x15, 0xFF, // mov FF (halt)
};
 
const unsigned char subprog[] = {
    0x70, 0x01, // shr #01 (set carry)
    0x19, 0x84, // mov a,84
    0x35, 0x80, // sub 80
    0x19, 0x85, // mov a,85
    0x35, 0x81, // sub 81
    0x19, 0x86, // mov a,86
    0x35, 0x82, // sub 82
    0x19, 0x87, // mov a,87
    0x35, 0x83, // sub 83
    0x15, 0xFF, // mov FF (halt)
};


-- 
-------------------------
Imri Goldberg
www.imri.co.il
www.algorithm.co.il/blogs
-------------------------
Insert Signature Here
-------------------------


More information about the Code-Crunchers mailing list