<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <title>OpenRCE: Blog</title>
        <link>http://www.openrce.org/rss/feeds/blog</link>
        <description>OpenRCE: The Open Reverse Code Engineering Community</description>
                <item>
            <title>Some old code I recently saw again</title>
                            <pubDate>Thu, 02 Feb 2006 20:34:01 -0600</pubDate>
                                        <link>https://www.openrce.org/blog/view/114/Some_old_code_I_recently_saw_again</link>
                                        <author>zen &lt;email-suppressed@example.com&gt;</author>
                                                    <description>Here is some code I wrote tht may be interesting to some of you. I was trying to work out how random-dot stereograms worked and decided to write some code to test some methods.&lt;br /&gt;
&lt;br /&gt;
It's ugly code. ;] But it kinda works, and i think it shows how to do them. Oh yeah....it's all text.&lt;br /&gt;
&lt;br /&gt;
to compile it, save it as stereo.c and then&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
$ cc -o stereo stereo.c -lm&lt;br /&gt;
$ ./stereo &amp;gt; stereo.txt&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
You may have to mess around a little to get the sizes you want.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&lt;br /&gt;
#define HEIGHT 50&lt;br /&gt;
#define WIDTH 55&lt;br /&gt;
&lt;br /&gt;
unsigned char screen[HEIGHT][WIDTH];&lt;br /&gt;
unsigned char map[HEIGHT][WIDTH];&lt;br /&gt;
unsigned char fill[11];&lt;br /&gt;
&lt;br /&gt;
char f[]=&amp;quot;!@#$%^&amp;amp;*()_+1234567890&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mkfill(char *s)&lt;br /&gt;
{&lt;br /&gt;
 int i;&lt;br /&gt;
 for(i=0;i&amp;lt;sizeof(fill);s[i]?i++:i)&lt;br /&gt;
 {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;s[i]=rand()%90 + ' ';&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int fn(int x,int y)&lt;br /&gt;
{&lt;br /&gt;
 double a,b,c;&lt;br /&gt;
 int ret;&lt;br /&gt;
 a=(WIDTH/2)-x;&lt;br /&gt;
 b=(HEIGHT/2)-y;&lt;br /&gt;
 c=(sqrt(a*a/4 + b*b)/4);&lt;br /&gt;
 ret=c&amp;gt;4?0:8-c;&lt;br /&gt;
 if(a&amp;gt;0)ret=-ret;&lt;br /&gt;
 return (sizeof(fill)+ret)%sizeof(fill);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main(int argc,char *argv[])&lt;br /&gt;
{&lt;br /&gt;
 int h,w;&lt;br /&gt;
 srand(time(0)^getpid());&lt;br /&gt;
 for(h=0;h&amp;lt;HEIGHT;h++)&lt;br /&gt;
 {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for(w=0;w&amp;lt;WIDTH;w++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; map[h][w]=fn(w,h);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 if(argc&amp;lt;2)&lt;br /&gt;
 for(h=0;h&amp;lt;HEIGHT;h++)&lt;br /&gt;
 {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;int o;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;mkfill(fill);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for(w=0;w&amp;lt;WIDTH;w++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o = map[h][w];&lt;br /&gt;
&amp;nbsp;&amp;nbsp; screen[h][w]=fill[(o+w)%sizeof(fill)];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&amp;quot;\t&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&amp;quot;%s%s&amp;quot;,fill,fill);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&amp;quot;%s%s&amp;quot;,fill,fill);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for(w=0;w&amp;lt;WIDTH;w++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; printf(&amp;quot;%c&amp;quot;,screen[h][w]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&amp;quot;%s%s&amp;quot;,fill,fill);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&amp;quot;%s%s&amp;quot;,fill,fill);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for(h=0;h&amp;lt;HEIGHT;h++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; printf(&amp;quot;\t&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; for(w=0;w&amp;lt;WIDTH;w++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&amp;quot;%c&amp;quot;,map[h][w]+'0');&lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp; printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Coming soon (maybe)... animated ascii random dot stereograms.&lt;br /&gt;
(not sure yet if the maybe is the 'soon' or the 'coming' part.</description>
                    </item>
                <item>
            <title>I guess I'll put a some code here...</title>
                            <pubDate>Fri, 14 Oct 2005 12:34:03 -0500</pubDate>
                                        <link>https://www.openrce.org/blog/view/58/I_guess_I'll_put_a_some_code_here...</link>
                                        <author>zen &lt;email-suppressed@example.com&gt;</author>
                                                    <description>&lt;b&gt;30 Byte Demo&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Sometime in the last year or so a friend on IRC mentioned he had written something for a sort of contest to write to coolest MS-DOS graphics demo. The catch was you only had 32 bytes. The contest was over by the time I heard about it, and it's been a while since then and I have no idea which site it was now, but here is some code I wrote that, IMNSHO, kicked the butts of all the entries in that contest.&lt;br /&gt;
&lt;br /&gt;
In order to fully appreciate it, make sure you let it color cycle once thry the 256 colors. You'll know when it's getting good. ;]&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
 mov ax,13h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; al =0x13 , ah = 0&lt;br /&gt;
 int 10h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; set video mode 0x13 (320x200x8bit)&lt;br /&gt;
 mov bx,0a000h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; address a000:0000&amp;nbsp;&amp;nbsp;== start of VGA memory&lt;br /&gt;
 mov ds,bx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; so set the data segment to be that&lt;br /&gt;
 xor cx,cx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; give me something to be 0&lt;br /&gt;
top_of_loop:&lt;br /&gt;
 mov al,[si]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; grab one byte from video memory&lt;br /&gt;
 inc ax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; increment the word, not the byte&lt;br /&gt;
 add al,ah&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; and add any overflow to the value (clever part ;])&lt;br /&gt;
 mov [si], al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; store it back in video ram&lt;br /&gt;
 inc si&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; curpixel++&lt;br /&gt;
 cmp si, 0fa00h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; curpixel != 64000 == 320 * 200 ?&lt;br /&gt;
 jnz top_of_loop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; if so, do the next pixel&lt;br /&gt;
 mov si,cx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; otherwise, reset curpixel&lt;br /&gt;
 jmp top_of_loop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; and start from top of screen&lt;br /&gt;
&lt;/code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
I wrote this in a short space of time, and didn't really debug it very well. Now that I look at the commented version I just made of it, I can&lt;br /&gt;
see a few subtle things that could've made it better. &lt;br /&gt;
&lt;br /&gt;
I'll quickly make some changes, and see how it looks.&lt;br /&gt;
&lt;br /&gt;
.... some times passes ;] ...&lt;br /&gt;
&lt;br /&gt;
Ok... Now it is a&lt;br /&gt;
&lt;b&gt;28 Byte Demo&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
 mov ax,13h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; al =0x13 , ah = 0&lt;br /&gt;
 int 10h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; set video mode 0x13 (320x200x8bit)&lt;br /&gt;
 mov bx,0a000h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; address a000:0000&amp;nbsp;&amp;nbsp;== start of VGA memory&lt;br /&gt;
 mov ds,bx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; so set the data segment to be that&lt;br /&gt;
init_loop:&lt;br /&gt;
 xor si,si&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; intialize the screen pointer&lt;br /&gt;
top_of_loop:&lt;br /&gt;
 mov al,[si]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; grab one byte from video memory&lt;br /&gt;
 inc ax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; increment the word, not the byte....&lt;br /&gt;
 add al,ah&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; and add any overflow to the value (clever part ;])&lt;br /&gt;
 mov [si], al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; store it back in video ram&lt;br /&gt;
 inc si&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; curpixel++&lt;br /&gt;
 cmp si, 0fa00h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; curpixel != 64000 == 320 * 200 ?&lt;br /&gt;
 jnz top_of_loop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; if so, do the next pixel&lt;br /&gt;
 jmp init_loop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;; and start from top of screen&lt;br /&gt;
&lt;/code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
All I did was optimize out the the temporary cx variable.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How it works&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
/* &lt;br /&gt;
 * You shouldn't expect this to actually work as C, but&lt;br /&gt;
 * it should give you a rough idea.&lt;br /&gt;
*/&lt;br /&gt;
setGraphicsMode(0x13);&lt;br /&gt;
char *a000=address_at_start_of_16bit_segment(0xa000);&lt;br /&gt;
&lt;br /&gt;
while(1) // nearly forgot the important part&lt;br /&gt;
{&lt;br /&gt;
 for(i=0;i&amp;lt;64000;i++)&lt;br /&gt;
 {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;ax[1]=a000[i];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;ax++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// ax == (ah&amp;lt;&amp;lt;8)|al&amp;nbsp;&amp;nbsp; if al &amp;gt; 0xff, then al = 0, ah++&lt;br /&gt;
&amp;nbsp;&amp;nbsp;al=al+ah; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;a000[i]=al;&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Notice that ah is never being reset... once it starts to increase, it will continue to... lets imagine a simple screen where all the values are up to 0xff&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
| 0|&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;br /&gt;
0xff 0xff 0xff 0xff&amp;nbsp;&amp;nbsp;&amp;lt;- video memory&lt;br /&gt;
SI=0x0000&lt;br /&gt;
mov al,[si] -&amp;gt; AX=0x00FF&amp;nbsp;&amp;nbsp;AH=0x00&amp;nbsp;&amp;nbsp;AL=0xFF&lt;br /&gt;
inc ax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; AX=0x0100&amp;nbsp;&amp;nbsp;AH=0x01 AL=0x00&lt;br /&gt;
add al,ah&amp;nbsp;&amp;nbsp; -&amp;gt; AX=0x0101&lt;br /&gt;
mov [si],al&lt;br /&gt;
inc si&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
so now the state looks like this:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;| 1|&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;br /&gt;
0x01 0xff 0xff 0xff&lt;br /&gt;
SI=0x0001&lt;br /&gt;
mov al,[si] -&amp;gt; AX=0x01FF&amp;nbsp;&amp;nbsp;AH=0x01&amp;nbsp;&amp;nbsp;AL=0xFF&lt;br /&gt;
inc ax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; AX=0x0200&amp;nbsp;&amp;nbsp;AH=0x02 AL=0x00&lt;br /&gt;
add al,ah&amp;nbsp;&amp;nbsp; -&amp;gt; AX=0x0202&lt;br /&gt;
mov [si],al&lt;br /&gt;
inc si&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
and one more time, so you see the pattern...&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;| 2|&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
0x01 0x02 0xff 0xff&lt;br /&gt;
SI=0x0002&lt;br /&gt;
mov al,[si] -&amp;gt; AX=0x00FF&amp;nbsp;&amp;nbsp;AH=0x00&amp;nbsp;&amp;nbsp;AL=0xFF&lt;br /&gt;
inc ax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; AX=0x0300&amp;nbsp;&amp;nbsp;AH=0x03 AL=0x00&lt;br /&gt;
add al,ah&amp;nbsp;&amp;nbsp; -&amp;gt; AX=0x0303&lt;br /&gt;
mov [si],al&lt;br /&gt;
inc si&lt;br /&gt;
&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;| 3|&lt;br /&gt;
0x01 0x02 0x03 0xff&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
The next time around, things get even more complex. Iterative generated chaotic stuff.&lt;br /&gt;
&lt;img src=&quot;http://www.openrce.org/repositories/users/zen/output1.gif&quot; border=0 align=&quot;&quot;&gt;&lt;br /&gt;
This is what makes it interesting. ;]</description>
                    </item>
            </channel>
</rss>
