[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