Mandelbrot Sans Arithmetic
The following C program plots the Mandelbrot Set.
#include <stdint.h>
#include <stdio.h>
#define i uint16_t
#define repeat(X) X X X X X X X X X X X X X X X X
#define NEG(X) add(~(X),1)
#define ABS(X) (X)>>15?NEG(X):(X)
#define FMUL(X,Y) (mul((X),(Y))>>6) // Fixed point multiply
// Sign-preserving multiplication
#define SMUL(X,Y) (X^Y)>>15?NEG(FMUL(ABS(X),ABS(Y))):FMUL(ABS(X),ABS(Y))
#define SUB(X,Y) ~add(~(X),(Y))
// expand mask from LSB
i mask(i n) {return n|=n<<1,n|=n<<2,n|=n<<4,n|n<<8;}
// Ripple carry adder
i add(i a,i b) {
i t;
repeat(t = a; a ^= b; (b = (t & b) << 1););
return a;
}
// Bit shift multiplication
i mul(i a, i b) {
i t,n; t=n=0;
repeat(t=add(t,(a<<n)&mask((b>>n)&1));n=add(n, 1);)
return t;
}
int main() {
i zr,zi,n,zrs,zis,tmp;
for (i y=NEG(64);y!=64;y=add(y, 2),putchar('\n')) {
for (i x=NEG(128);x!=64;x=add(x,1)) {
zr=zi=n=zrs=zis=0;
while (n!=64&add(zis,zrs)<4<<6) {
tmp=add(SUB(zrs=FMUL(zr,zr),zis=FMUL(zi,zi)),x);
zi=add(SMUL(zi,mul(zr,2)),y);
zr=tmp;n=add(n, 1);
}
putchar(add(n, 62));
}
}
}
Without (directly) using any arithmetic operations1, the above code plots the Mandelbrot Set to the terminal.
Notice that there’s no addition +
, multiplication *
, subtraction -
, or division /
in the code.
Additionally, the code is notably lacking floating point numbers as it uses only unsigned integers.
Primitive integer addition and multiplication are implemented with bitwise operations. Signed two’s compliment operations are implemented with macros on top of addition and multiplication. Fixed point is used to get fractional precision. The overlying Mandelbrot equation ( ) is still present, and there’s nothing funny going on there.
This implementation is an exercise in the seldom-taught topic of bit math. It’s not particularly impressive, an Intel 8080 implementation would likely look similar, but the prevalence of floating-point makes any kind of fixed-point math look exotic. The only clever part of the program I’d say is in the shading code:
putchar(n + 62)
The variable n
counts the number of iterations of the equation that have been applied—with a maximum of 64
.
This n
value has 62
added to it before being printed as an ASCII character.
Thus, the printed characters are of the range 62..=126
.
This creates the palette of following characters.
?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCDDDDDDDDEEFFGIJLOHHHMIKJ~EEDCCCCCCCCCCCECCBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDDDEEEFFGGHHKPNLRLLHFFFEEDDCCCCCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCEDDDDDDDDEFFFFGGHIJKNOKIHGFFFEEDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCDEDCCCCCCCCCCCCCCCCCCDDDDDDDDDEEFFGGHHIKORT~NMNIGGIFFEEDDDDDDCCCCCCCCCCCCDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@AAAAAAAAAAABBBBBBBBBBCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCDDICCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEFGHOLJJJMb~~~~XMLIHHHNFEEDDDDDDDDCCCCCCCCCCDDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBCCDCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGRUQQXUS~~~~~~~~RYLLOMIGFEDDDDDDDDDECCCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAAAABBBBBBBBCEDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCDDDDDDEFEEEEEFFFGHIKN~~~~~~~~~~~~~~SWL~HFFEEDDDDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAABBBBBBBCCCDIEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDEEEEEEEEEFFFGGHINO~~~~~~~~~~~~~~TLKHGGFFGEEEDDDDDDDDDDDCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAA
@@@@@@@@@@AAAAAAABBBBBBCCDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDEEEEEEEEEEFFFFFGGGIJRR~~~~~~~~~~~~~~~b~IHGGFFFEEEEEEEDDDDDDDDCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA
@@@@@@@@@AAAAAABBBBBCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDEEFFFFGGFFFFFFFFGGIHIIJLM~~~~~~~~~~~~~~~MKIIHGGGGFFEEEEEEEEEEEEEDDDCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAA
@@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDEIJWHHHJbLIHGGGGHIJ~JIJKKLMP{~~~~~~~~~~~~OLKKJIIHHNMHGFFFFFFFFFFGIHFEDDCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAA
@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCDEDDDDDDDDDEEEFGHJZbZ\NLLLIIIIc~r\PO\~Xtgc~~~~~~~~~e_[TuW~~S}SLMT]SJHGGGGFGGGGINJGEEDDCCCCBBBBBBBBBBBBBBBBBCAAAAAAAAAAAA
@@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDEEEDDDDDDDDDEEEEFFHJQ]_[~\RV~XLKKO\~~[~~~~~~~~~~~~~~~~~~~~~~~~~~mU~~~~NIHIITWQKIIKNLIGKEDDCCCCBBBBBBBBBBBBBBBBBCCAAAAAAAAAA
@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGGHIKVn~~~~~kWTl~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WdLL~Z`~dQVQmSLHFEDDDCCCCBBBBBBBBBBBBBBBBDDCAAAAAAAAA
@@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDDEEDDDDDDDDDDDDDEFEEEEEFFFGGHLY_~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~QS~~~~~~~~LT`FEDDDDCCCCBBBBBBBBBBBBBBBBJCCAAAAAAAA
@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDFEEEEEEFFHGHHIJKM~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ONHFEEDDDDCCCCCBBBBBBBBBBBBBBBB~CBAAAAAAA
@@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEFGGH~KKLKNQWZ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~iVHGFEEEDDDFCCCCBBBBBBBBBBBBBBBBBCCBAAAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCDDDDDEDDDDDDDDDDDDDDDDDDEEEEEEEEFFFFGIQ~~T~VOV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PNJIIGFFEEFDDDCCCCCBBBBBBBBBBBBBBBBBCCBAAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDENGFFEEEEEEEEEEEEEEEEEEEEEEEEFGFFFFGGGHMYU~~~c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~XQYHGGGFFEDDDCCCCCCBBBBBBBBBBBBBBBBBCBAAAAA
@@@AABBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDDDEEEGHLMGGFFFGFFFFFFFIGFFFFFFFFFFFFFHGGGHIKMNQ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~TNJIHHIOFEDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAAA
@@@ABBBBBBBBBBBBBBBBBDDCCCCCCCCCCCCDEDDDDEEEEGI~~GGGHFFFFFGGGK\JIGGGFFFFFFFGGGGHHKYSR~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~S|P~KPLIFDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@AABBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDEEEFIHN~JIIHIKIHHHIKQ~OOIIIJIHGGGGGHHHIJNSb~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[oNGEDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@ABBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGGJJ~NW\XUN~IJKLQQ~~SLLXaKIHHHHHIIIL~T~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^TSKHGFEEDDCCCCCCCBBBBBBBBBBBBBBBBBBBBAA
@@BBBBBBBDCCCCCCCCCCCCCCCCCCDDDEDDDDDDDDEEFFFGGHIJKQZe~`QP~Pim~~~~~QS~~LRKJIJKJKMes~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~SJHGFFEFDDCCCCCCCBBBBBBBBBBBBBBBBBBBBBA
@@BBBBBCCCCCECCCCCCCCCCCCCDDEDDDDDDDDDDEEFFFFGHHH~K~~~~~~[_~~~~~~~~~~~~~dLKJKKKLP~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RSKJNFEDDDCCCCCCCGBBBBBBBBBBBBBBBBBBBBA
@ABBBCCCCDGCCCCCCCCCCCCCCDDDDDDDDDDDDEEFFFFFGHIJJKLQV~~~~~~~~~~~~~~~~~~~~~~TONMPY~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\NGEEDDDCCCCCCCCBBBBBBBBBBBBBBBBBBBBA
@BBBCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDEEFGGGGGHHIXLL~Y~~~~~~~~~~~~~~~~~~~~~~~~~SUVV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJHGFEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@BBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEFISHIIHHHIJKMW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJFEEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@BCCCCCCCCCCCCCCCCCDDDEEEEEEEEEEFFFGGKOJJLLUKMMRf~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~eKIGEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBDCBB
@CCCCCCCCCCCCCCCCDEEEEEEEEEEEFFFFFGHHIJ]V~R~~~~V~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zGFEEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBCBBB
@CDDDDDDDEEEEFGGFFFFFEEEEFFFFFFFFKIIJMO~S~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~NHGFFEEEDDDDDCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@DDDDEEEEEFFFFILQIHGGGHJTHGGHHHHJaOOR~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MJHGFFFEEEDDDDGCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ZPLJIHGFFGEEFDDDDECCCCCCCCDBBBBBBBBBBBBBBBDCDBB
@DDDDEEEEEFFFFILQIHGGGHJTHGGHHHHJaOOR~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MJHGFFFEEEDDDDGCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@CDDDDDDDEEEEFGGFFFFFEEEEFFFFFFFFKIIJMO~S~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~NHGFFEEEDDDDDCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@CCCCCCCCCCCCCCCCDEEEEEEEEEEEFFFFFGHHIJ]V~R~~~~V~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zGFEEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBCBBB
@BCCCCCCCCCCCCCCCCCDDDEEEEEEEEEEFFFGGKOJJLLUKMMRf~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~eKIGEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBDCBB
@BBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEFISHIIHHHIJKMW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJFEEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@BBBCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDEEFGGGGGHHIXLL~Y~~~~~~~~~~~~~~~~~~~~~~~~~SUVV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJHGFEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@ABBBCCCCDGCCCCCCCCCCCCCCDDDDDDDDDDDDEEFFFFFGHIJJKLQV~~~~~~~~~~~~~~~~~~~~~~TONMPY~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\NGEEDDDCCCCCCCCBBBBBBBBBBBBBBBBBBBBA
@@BBBBBCCCCCECCCCCCCCCCCCCDDEDDDDDDDDDDEEFFFFGHHH~K~~~~~~[_~~~~~~~~~~~~~dLKJKKKLP~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RSKJNFEDDDCCCCCCCGBBBBBBBBBBBBBBBBBBBBA
@@BBBBBBBDCCCCCCCCCCCCCCCCCCDDDEDDDDDDDDEEFFFGGHIJKQZe~`QP~Pim~~~~~QS~~LRKJIJKJKMes~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~SJHGFFEFDDCCCCCCCBBBBBBBBBBBBBBBBBBBBBA
@@ABBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGGJJ~NW\XUN~IJKLQQ~~SLLXaKIHHHHHIIIL~T~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^TSKHGFEEDDCCCCCCCBBBBBBBBBBBBBBBBBBBBAA
@@AABBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDEEEFIHN~JIIHIKIHHHIKQ~OOIIIJIHGGGGGHHHIJNSb~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[oNGEDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@@ABBBBBBBBBBBBBBBBBDDCCCCCCCCCCCCDEDDDDEEEEGI~~GGGHFFFFFGGGK\JIGGGFFFFFFFGGGGHHKYSR~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~S|P~KPLIFDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@@AABBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDDDEEEGHLMGGFFFGFFFFFFFIGFFFFFFFFFFFFFHGGGHIKMNQ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~TNJIHHIOFEDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDENGFFEEEEEEEEEEEEEEEEEEEEEEEEFGFFFFGGGHMYU~~~c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~XQYHGGGFFEDDDCCCCCCBBBBBBBBBBBBBBBBBCBAAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCDDDDDEDDDDDDDDDDDDDDDDDDEEEEEEEEFFFFGIQ~~T~VOV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PNJIIGFFEEFDDDCCCCCBBBBBBBBBBBBBBBBBCCBAAAAA
@@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEFGGH~KKLKNQWZ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~iVHGFEEEDDDFCCCCBBBBBBBBBBBBBBBBBCCBAAAAAA
@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDFEEEEEEFFHGHHIJKM~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ONHFEEDDDDCCCCCBBBBBBBBBBBBBBBB~CBAAAAAAA
@@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDDEEDDDDDDDDDDDDDEFEEEEEFFFGGHLY_~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~QS~~~~~~~~LT`FEDDDDCCCCBBBBBBBBBBBBBBBBJCCAAAAAAAA
@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGGHIKVn~~~~~kWTl~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WdLL~Z`~dQVQmSLHFEDDDCCCCBBBBBBBBBBBBBBBBDDCAAAAAAAAA
@@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDEEEDDDDDDDDDEEEEFFHJQ]_[~\RV~XLKKO\~~[~~~~~~~~~~~~~~~~~~~~~~~~~~mU~~~~NIHIITWQKIIKNLIGKEDDCCCCBBBBBBBBBBBBBBBBBCCAAAAAAAAAA
@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCDEDDDDDDDDDEEEFGHJZbZ\NLLLIIIIc~r\PO\~Xtgc~~~~~~~~~e_[TuW~~S}SLMT]SJHGGGGFGGGGINJGEEDDCCCCBBBBBBBBBBBBBBBBBCAAAAAAAAAAAA
@@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDEIJWHHHJbLIHGGGGHIJ~JIJKKLMP{~~~~~~~~~~~~OLKKJIIHHNMHGFFFFFFFFFFGIHFEDDCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAA
@@@@@@@@@AAAAAABBBBBCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDEEFFFFGGFFFFFFFFGGIHIIJLM~~~~~~~~~~~~~~~MKIIHGGGGFFEEEEEEEEEEEEEDDDCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAA
@@@@@@@@@@AAAAAAABBBBBBCCDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDEEEEEEEEEEFFFFFGGGIJRR~~~~~~~~~~~~~~~b~IHGGFFFEEEEEEEDDDDDDDDCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAABBBBBBBCCCDIEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDEEEEEEEEEFFFGGHINO~~~~~~~~~~~~~~TLKHGGFFGEEEDDDDDDDDDDDCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAAAABBBBBBBBCEDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCDDDDDDEFEEEEEFFFGHIKN~~~~~~~~~~~~~~SWL~HFFEEDDDDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBCCDCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGRUQQXUS~~~~~~~~RYLLOMIGFEDDDDDDDDDECCCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@AAAAAAAAAAABBBBBBBBBBCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCDDICCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEFGHOLJJJMb~~~~XMLIHHHNFEEDDDDDDDDCCCCCCCCCCDDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCDEDCCCCCCCCCCCCCCCCCCDDDDDDDDDEEFFGGHHIKORT~NMNIGGIFFEEDDDDDDCCCCCCCCCCCCDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCEDDDDDDDDEFFFFGGHIJKNOKIHGFFFEEDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDDDEEEFFGGHHKPNLRLLHFFFEEDDCCCCCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
If your browser/operating system supports subpixel text rendering, you might also see some color in the grayscale image above. Cool stuff.
-
I suppose the less than (
<
) computation does internally subtract the operands in theCMP
instruction, but that’s splitting hares. ↩︎