From 253263983e62b0eec29d248a956acf4552dfa102 Mon Sep 17 00:00:00 2001
From: Jesper Gravgaard <jg@ramboll.com>
Date: Wed, 25 Mar 2020 17:51:45 +0100
Subject: [PATCH] Added 2x2 font compression example. Improved chargen example.

---
 .../mos6502-common/vwum1=vwum1_bor_vbuaa.asm  |    2 +
 .../dk/camelot64/kickc/test/TestPrograms.java |   35 +-
 src/test/kc/complex/elefont/elefont.kc        |   85 -
 .../kc/examples/chargen/chargen-analysis.kc   |    3 +-
 src/test/kc/examples/font-2x2/font-2x2.kc     |  127 +
 src/test/kc/problem-const-addition.kc         |   17 +
 .../ref/examples/chargen/chargen-analysis.asm |   80 +-
 .../ref/examples/chargen/chargen-analysis.cfg |  127 +-
 .../ref/examples/chargen/chargen-analysis.log | 1952 +++----
 .../ref/examples/chargen/chargen-analysis.sym |   75 +-
 src/test/ref/examples/font-2x2/font-2x2.asm   |  480 ++
 src/test/ref/examples/font-2x2/font-2x2.cfg   |  239 +
 src/test/ref/examples/font-2x2/font-2x2.log   | 5094 +++++++++++++++++
 src/test/ref/examples/font-2x2/font-2x2.sym   |  225 +
 14 files changed, 7036 insertions(+), 1505 deletions(-)
 create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum1_bor_vbuaa.asm
 delete mode 100644 src/test/kc/complex/elefont/elefont.kc
 create mode 100644 src/test/kc/examples/font-2x2/font-2x2.kc
 create mode 100644 src/test/kc/problem-const-addition.kc
 create mode 100644 src/test/ref/examples/font-2x2/font-2x2.asm
 create mode 100644 src/test/ref/examples/font-2x2/font-2x2.cfg
 create mode 100644 src/test/ref/examples/font-2x2/font-2x2.log
 create mode 100644 src/test/ref/examples/font-2x2/font-2x2.sym

diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_bor_vbuaa.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_bor_vbuaa.asm
new file mode 100644
index 000000000..75427e7a0
--- /dev/null
+++ b/src/main/fragment/mos6502-common/vwum1=vwum1_bor_vbuaa.asm
@@ -0,0 +1,2 @@
+ora {m1}
+sta {m1}
\ No newline at end of file
diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
index ea53c5ad5..7f0d61373 100644
--- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
+++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
@@ -722,6 +722,11 @@ public class TestPrograms {
       compileAndCompare("problem-negative-word-const");
    }
 
+   //@Test
+   //public void testProblemConstAddition() throws IOException, URISyntaxException {
+   //   compileAndCompare("problem-const-addition", log());
+   //}
+
    @Test
    public void testInnerIncrementProblem() throws IOException, URISyntaxException {
       compileAndCompare("inner-increment-problem");
@@ -968,16 +973,23 @@ public class TestPrograms {
       compileAndCompare("unused-irq");
    }
 
-   /**
+
+/*
     * TODO: Fix error with number resolving
-    *
-    * @Test public void testNumberTernaryFail2() throws IOException, URISyntaxException {
-    * compileAndCompare("number-ternary-fail-2");
-    * }
-    * @Test public void testNumberTernaryFail() throws IOException, URISyntaxException {
-    * compileAndCompare("number-ternary-fail");
-    * }
-    */
+
+     @Test public void testNumberTernaryFail2() throws IOException, URISyntaxException {
+     compileAndCompare("number-ternary-fail-2");
+     }
+     @Test public void testNumberTernaryFail() throws IOException, URISyntaxException {
+     compileAndCompare("number-ternary-fail");
+     }
+
+   @Test public void testNumberTernaryFail3() throws IOException, URISyntaxException {
+      compileAndCompare("number-ternary-fail-3");
+   }
+
+ */
+
 
    @Test
    public void testTextbox() throws IOException, URISyntaxException {
@@ -2016,6 +2028,11 @@ public class TestPrograms {
       compileAndCompare("examples/fire/fire");
    }
 
+   @Test
+   public void testFont2x2() throws IOException, URISyntaxException {
+      compileAndCompare("examples/font-2x2/font-2x2");
+   }
+
    @Test
    public void testCTypes() throws IOException, URISyntaxException {
       compileAndCompare("c-types");
diff --git a/src/test/kc/complex/elefont/elefont.kc b/src/test/kc/complex/elefont/elefont.kc
deleted file mode 100644
index c2db75afc..000000000
--- a/src/test/kc/complex/elefont/elefont.kc
+++ /dev/null
@@ -1,85 +0,0 @@
-// Snabel Elefont Compression testing
-
-import "c64"
-import "string"
-
-const byte* SCREEN = 0x0400;
-const byte* ELEFONT = 0x2000;
-const byte* ELEFONT2 = 0x2800;
-byte[0x100] align(0x100) ELEFONT2_MAP;
-
-kickasm(pc ELEFONT, resource "elefont.bin" ) {{
-    .var fontFile = LoadBinary("elefont.bin")
-    .fill fontFile.getSize(), fontFile.get(i)
-}}
-
-void main() {
-    // Compress the font finding identical characters
-    char size = font_compress(ELEFONT, ELEFONT2, ELEFONT2_MAP);
-    // Show compressed font
-    *D018 = toD018(SCREEN, ELEFONT2);
-    // Clear the screen
-    memset(SCREEN, ELEFONT2_MAP[' '], 0x0400);
-    // Show the font
-    char* cursor = SCREEN;
-    char c = 0;
-    for(char y:0..7) {
-        for(char x:0..7) {
-            out(c++, x, y, ELEFONT2_MAP);
-        }
-    }
-}
-
-// Show a 2x2 char on the screen at 2x2-position (x, y) using a font compress mapping
-void out(char c, char x, char y, char* font_mapping) {
-    char* ptr = SCREEN + (unsigned int)y*80 + x*2;
-    ptr[0] = font_mapping[c];
-    ptr[1] = font_mapping[c+0x40];
-    ptr[40] = font_mapping[c+0x80];
-    ptr[41] = font_mapping[c+0xc0];
-}
-
-// Compress a font finding identical characters
-// The compressed font is put into font_compressed and the compress_mapping is updated
-// so that compress_mapping[c] points to the char in font_compressed that is identical to char c in font_original
-// Returns the size of the compressed font (in chars)
-char font_compress(char* font_original, char* font_compressed, char* compress_mapping) {
-    char font_size = 0;
-    char* next_original = font_original;
-    char* next_compressed = font_compressed;
-    for(char i: 0..0xff) {
-        // Look for the char in font_compressed
-        char found = font_find(next_original, font_compressed, font_size);
-        if(found==0xff) {
-            // Glyph not found - create it
-            for(char l:0..7)
-                next_compressed[l] = next_original[l];
-            next_compressed += 8;
-            found = font_size;
-            font_size++;
-        }
-        compress_mapping[i] = found;
-        next_original += 8;
-    }
-    return font_size;
-}
-
-// Look for a glyph within a font
-// Only looks at the first font_size glyphs
-// Returns the index of the glyph within the font. Returns 0xff if the glyph is not found.
-char font_find(char* glyph, char* font, char font_size) {
-    for(char i=0;i<font_size;i++) {
-        char found = 1;
-        for(char l:0..7) {
-            if(glyph[l]!=font[l]) {
-                found = 0;
-                break;
-            }
-        }
-        if(found)
-            return i;
-        font += 8;
-    }
-    // Not found
-    return 0xff;
-}
diff --git a/src/test/kc/examples/chargen/chargen-analysis.kc b/src/test/kc/examples/chargen/chargen-analysis.kc
index f615cc54e..2e89cbdd3 100644
--- a/src/test/kc/examples/chargen/chargen-analysis.kc
+++ b/src/test/kc/examples/chargen/chargen-analysis.kc
@@ -1,6 +1,5 @@
 // Allows analysis of the CHARGEN ROM font
 import "c64.kc"
-import "multiply.kc"
 import "keyboard.kc"
 
 byte* SCREEN = $400;
@@ -74,7 +73,7 @@ void plot_chargen(byte pos, byte ch, byte shift) {
         chargen = chargen + $0800;
     }
     *PROCPORT = $32;
-    byte* sc = SCREEN+40+1+mul8u(pos, 10);
+    byte* sc = SCREEN + 41 + pos*10;
     for(byte y:0..7) {
       byte bits = chargen[y];
       for(byte x:0..7) {
diff --git a/src/test/kc/examples/font-2x2/font-2x2.kc b/src/test/kc/examples/font-2x2/font-2x2.kc
new file mode 100644
index 000000000..7ce304cee
--- /dev/null
+++ b/src/test/kc/examples/font-2x2/font-2x2.kc
@@ -0,0 +1,127 @@
+// Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars
+
+import "c64"
+import "string"
+
+const byte* SCREEN = 0x0400;
+const byte* FONT_ORIGINAL = 0x2000;
+const byte* FONT_COMPRESSED = 0x2800;
+byte[0x100] align(0x100) FONT_COMPRESSED_MAP;
+
+void main() {
+    // Create 2x2 font from CHARGEN
+    asm { sei }
+    *PROCPORT = PROCPORT_RAM_CHARROM;
+    font_2x2(CHARGEN, FONT_ORIGINAL);
+    *PROCPORT = PROCPORT_BASIC_KERNEL_IO;
+    asm { cli }
+    // Compress the font finding identical characters
+    char size = font_compress(FONT_ORIGINAL, FONT_COMPRESSED, FONT_COMPRESSED_MAP);
+    // Show compressed font
+    *D018 = toD018(SCREEN, FONT_COMPRESSED);
+    // Clear the screen
+    memset(SCREEN, FONT_COMPRESSED_MAP[' '], 0x0400);
+    // Show the font
+    char* cursor = SCREEN;
+    char c = 0;
+    for(char y:0..7) {
+        for(char x:0..7) {
+            show(c++, x, y, FONT_COMPRESSED_MAP);
+        }
+    }
+    while(true)
+        (*(SCREEN+999))++;
+}
+
+// Show a 2x2 char on the screen at 2x2-position (x, y) using a font compress mapping
+void show(char c, char x, char y, char* font_mapping) {
+    char* ptr = SCREEN + (unsigned int)y*80 + x*2;
+    ptr[0] = font_mapping[c];
+    ptr[1] = font_mapping[c+0x40];
+    ptr[40] = font_mapping[c+0x80];
+    ptr[41] = font_mapping[c+0xc0];
+}
+
+// Create a 2x2-font by doubling all pixels of the 64 first chars
+void font_2x2(char* font_original, char* font_2x2) {
+    char* next_original = font_original;
+    char* next_2x2 = font_2x2;
+    for(char c: 0..0x3f) {
+        char* next_2x2_left = next_2x2;
+        char* next_2x2_right = next_2x2 + 0x40*8;
+        char l2 = 0;
+        for(char l: 0..7) {
+            char glyph_bits = next_original[l];
+            unsigned int glyph_bits_2x2 = 0;
+            for(char b: 0..7) {
+                // Find the bit
+                char glyph_bit = (glyph_bits&0x80)?1uc:0uc;
+                // Roll the bit into the current char twice
+                glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit;
+                glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit;
+                // Move to next bit
+                glyph_bits <<= 1;
+            }
+            // Put the generated 2x2-line into the 2x2-font twice
+            next_2x2_left[l2] = >glyph_bits_2x2;
+            next_2x2_left[l2+1] = >glyph_bits_2x2;
+            next_2x2_right[l2] = <glyph_bits_2x2;
+            next_2x2_right[l2+1] = <glyph_bits_2x2;
+            l2 += 2;
+            if(l2==8) {
+                // Move to bottom chars
+                next_2x2_left = next_2x2 + 0x80*8;
+                next_2x2_right = next_2x2 + 0xc0*8;
+                l2 = 0;
+            }
+        }
+        next_2x2 += 8;
+        next_original += 8;
+    }
+}
+
+
+// Compress a font finding identical characters
+// The compressed font is put into font_compressed and the compress_mapping is updated
+// so that compress_mapping[c] points to the char in font_compressed that is identical to char c in font_original
+// Returns the size of the compressed font (in chars)
+char font_compress(char* font_original, char* font_compressed, char* compress_mapping) {
+    char font_size = 0;
+    char* next_original = font_original;
+    char* next_compressed = font_compressed;
+    for(char i: 0..0xff) {
+        // Look for the char in font_compressed
+        char found = font_find(next_original, font_compressed, font_size);
+        if(found==0xff) {
+            // Glyph not found - create it
+            for(char l:0..7)
+                next_compressed[l] = next_original[l];
+            next_compressed += 8;
+            found = font_size;
+            font_size++;
+        }
+        compress_mapping[i] = found;
+        next_original += 8;
+    }
+    return font_size;
+}
+
+// Look for a glyph within a font
+// Only looks at the first font_size glyphs
+// Returns the index of the glyph within the font. Returns 0xff if the glyph is not found.
+char font_find(char* glyph, char* font, char font_size) {
+    for(char i=0;i<font_size;i++) {
+        char found = 1;
+        for(char l:0..7) {
+            if(glyph[l]!=font[l]) {
+                found = 0;
+                break;
+            }
+        }
+        if(found)
+            return i;
+        font += 8;
+    }
+    // Not found
+    return 0xff;
+}
diff --git a/src/test/kc/problem-const-addition.kc b/src/test/kc/problem-const-addition.kc
new file mode 100644
index 000000000..519e88231
--- /dev/null
+++ b/src/test/kc/problem-const-addition.kc
@@ -0,0 +1,17 @@
+// Illustrates problem with constant addition not handling mixed types properly
+
+char* SCREEN = $400;
+char* CHARGEN = 0xd000;
+char* PROCPORT = 0x01;
+
+void main() {
+    for(char pos: 0..3)
+        plot_chargen(pos);
+}
+
+// Render 8x8 char (ch) as pixels on char canvas #pos
+void plot_chargen(byte pos) {
+    byte* sc = SCREEN + pos*10 + 41;
+      for(byte x:0..7)
+        *sc++ = '*';
+}
diff --git a/src/test/ref/examples/chargen/chargen-analysis.asm b/src/test/ref/examples/chargen/chargen-analysis.asm
index a25f6f09e..4c9cf689b 100644
--- a/src/test/ref/examples/chargen/chargen-analysis.asm
+++ b/src/test/ref/examples/chargen/chargen-analysis.asm
@@ -262,11 +262,10 @@ main: {
 // Render 8x8 char (ch) as pixels on char canvas #pos
 // plot_chargen(byte register(Y) pos, byte register(A) ch, byte register(X) shift)
 plot_chargen: {
-    .label __0 = $c
-    .label __1 = $c
-    .label __7 = $e
-    .label chargen = $c
-    .label sc = $e
+    .label __0 = $a
+    .label __1 = $a
+    .label chargen = $a
+    .label sc = $c
     .label bits = 9
     .label y = 8
     // asm
@@ -305,18 +304,20 @@ plot_chargen: {
     // *PROCPORT = $32
     lda #$32
     sta PROCPORT
-    // mul8u(pos, 10)
+    // pos*10
     tya
-    tax
-    jsr mul8u
-    // mul8u(pos, 10)
-    // sc = SCREEN+40+1+mul8u(pos, 10)
+    asl
+    asl
+    sty.z $ff
     clc
-    lda.z sc
-    adc #<SCREEN+$28+1
+    adc.z $ff
+    asl
+    // sc = SCREEN + 41 + pos*10
+    clc
+    adc #<SCREEN+$29
     sta.z sc
-    lda.z sc+1
-    adc #>SCREEN+$28+1
+    lda #>SCREEN+$29
+    adc #0
     sta.z sc+1
     lda #0
     sta.z y
@@ -373,51 +374,6 @@ plot_chargen: {
     // }
     rts
 }
-// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
-// mul8u(byte register(X) a)
-mul8u: {
-    .const b = $a
-    .label mb = $a
-    .label res = $e
-    .label return = $e
-    lda #<b
-    sta.z mb
-    lda #>b
-    sta.z mb+1
-    lda #<0
-    sta.z res
-    sta.z res+1
-  __b1:
-    // while(a!=0)
-    cpx #0
-    bne __b2
-    // }
-    rts
-  __b2:
-    // a&1
-    txa
-    and #1
-    // if( (a&1) != 0)
-    cmp #0
-    beq __b3
-    // res = res + mb
-    lda.z res
-    clc
-    adc.z mb
-    sta.z res
-    lda.z res+1
-    adc.z mb+1
-    sta.z res+1
-  __b3:
-    // a = a>>1
-    txa
-    lsr
-    tax
-    // mb = mb<<1
-    asl.z mb
-    rol.z mb+1
-    jmp __b1
-}
 // Determines whether a specific key is currently pressed by accessing the matrix directly
 // The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7)
 // All keys exist as as KEY_XXX constants.
@@ -469,10 +425,10 @@ keyboard_get_keycode: {
     rts
 }
 // Print a string at a specific screen position
-// print_str_at(byte* zp($c) str, byte* zp($e) at)
+// print_str_at(byte* zp($a) str, byte* zp($c) at)
 print_str_at: {
-    .label at = $e
-    .label str = $c
+    .label at = $c
+    .label str = $a
   __b1:
     // while(*str)
     ldy #0
diff --git a/src/test/ref/examples/chargen/chargen-analysis.cfg b/src/test/ref/examples/chargen/chargen-analysis.cfg
index 67f144007..1627a10d8 100644
--- a/src/test/ref/examples/chargen/chargen-analysis.cfg
+++ b/src/test/ref/examples/chargen/chargen-analysis.cfg
@@ -156,127 +156,98 @@ plot_chargen::@2: scope:[plot_chargen]  from plot_chargen
   [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800
   to:plot_chargen::@1
 plot_chargen::@1: scope:[plot_chargen]  from plot_chargen plot_chargen::@2
-  [78] (byte*) plot_chargen::chargen#5 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@2/(byte*) plot_chargen::chargen#1 )
+  [78] (byte*) plot_chargen::chargen#4 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@2/(byte*) plot_chargen::chargen#1 )
   [79] *((const byte*) PROCPORT) ← (byte) $32
-  [80] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2
-  [81] call mul8u 
-  [82] (word) mul8u::return#2 ← (word) mul8u::res#2
-  to:plot_chargen::@9
-plot_chargen::@9: scope:[plot_chargen]  from plot_chargen::@1
-  [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2
-  [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $28+(byte) 1 + (word~) plot_chargen::$7
+  [80] (byte~) plot_chargen::$16 ← (byte) plot_chargen::pos#2 << (byte) 2
+  [81] (byte~) plot_chargen::$17 ← (byte~) plot_chargen::$16 + (byte) plot_chargen::pos#2
+  [82] (byte~) plot_chargen::$6 ← (byte~) plot_chargen::$17 << (byte) 1
+  [83] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $29 + (byte~) plot_chargen::$6
   to:plot_chargen::@3
-plot_chargen::@3: scope:[plot_chargen]  from plot_chargen::@7 plot_chargen::@9
-  [85] (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@7/(byte*) plot_chargen::sc#2 plot_chargen::@9/(byte*) plot_chargen::sc#0 )
-  [85] (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte) 0 )
-  [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2)
+plot_chargen::@3: scope:[plot_chargen]  from plot_chargen::@1 plot_chargen::@7
+  [84] (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@1/(byte*) plot_chargen::sc#0 plot_chargen::@7/(byte*) plot_chargen::sc#2 )
+  [84] (byte) plot_chargen::y#2 ← phi( plot_chargen::@1/(byte) 0 plot_chargen::@7/(byte) plot_chargen::y#1 )
+  [85] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#4 + (byte) plot_chargen::y#2)
   to:plot_chargen::@4
 plot_chargen::@4: scope:[plot_chargen]  from plot_chargen::@3 plot_chargen::@5
-  [87] (byte) plot_chargen::x#2 ← phi( plot_chargen::@3/(byte) 0 plot_chargen::@5/(byte) plot_chargen::x#1 )
-  [87] (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#7 plot_chargen::@5/(byte*) plot_chargen::sc#1 )
-  [87] (byte) plot_chargen::bits#2 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#0 plot_chargen::@5/(byte) plot_chargen::bits#1 )
-  [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte) $80
-  [89] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5
+  [86] (byte) plot_chargen::x#2 ← phi( plot_chargen::@3/(byte) 0 plot_chargen::@5/(byte) plot_chargen::x#1 )
+  [86] (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#7 plot_chargen::@5/(byte*) plot_chargen::sc#1 )
+  [86] (byte) plot_chargen::bits#2 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#0 plot_chargen::@5/(byte) plot_chargen::bits#1 )
+  [87] (byte~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (byte) $80
+  [88] if((byte~) plot_chargen::$9==(byte) 0) goto plot_chargen::@5
   to:plot_chargen::@6
 plot_chargen::@6: scope:[plot_chargen]  from plot_chargen::@4
-  [90] phi()
+  [89] phi()
   to:plot_chargen::@5
 plot_chargen::@5: scope:[plot_chargen]  from plot_chargen::@4 plot_chargen::@6
-  [91] (byte) plot_chargen::c#2 ← phi( plot_chargen::@4/(byte) '.' plot_chargen::@6/(byte) '*' )
-  [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2
-  [93] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3
-  [94] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1
-  [95] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2
-  [96] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4
+  [90] (byte) plot_chargen::c#2 ← phi( plot_chargen::@4/(byte) '.' plot_chargen::@6/(byte) '*' )
+  [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2
+  [92] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3
+  [93] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1
+  [94] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2
+  [95] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4
   to:plot_chargen::@7
 plot_chargen::@7: scope:[plot_chargen]  from plot_chargen::@5
-  [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20
-  [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2
-  [99] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3
+  [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20
+  [97] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2
+  [98] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3
   to:plot_chargen::@8
 plot_chargen::@8: scope:[plot_chargen]  from plot_chargen::@7
-  [100] *((const byte*) PROCPORT) ← (byte) $37
+  [99] *((const byte*) PROCPORT) ← (byte) $37
   asm { cli  }
   to:plot_chargen::@return
 plot_chargen::@return: scope:[plot_chargen]  from plot_chargen::@8
-  [102] return 
+  [101] return 
   to:@return
 
-(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
-mul8u: scope:[mul8u]  from plot_chargen::@1
-  [103] phi()
-  to:mul8u::@1
-mul8u::@1: scope:[mul8u]  from mul8u mul8u::@3
-  [104] (word) mul8u::mb#2 ← phi( mul8u/(word)(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 )
-  [104] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 )
-  [104] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 )
-  [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2
-  to:mul8u::@return
-mul8u::@return: scope:[mul8u]  from mul8u::@1
-  [106] return 
-  to:@return
-mul8u::@2: scope:[mul8u]  from mul8u::@1
-  [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1
-  [108] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
-  to:mul8u::@4
-mul8u::@4: scope:[mul8u]  from mul8u::@2
-  [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
-  to:mul8u::@3
-mul8u::@3: scope:[mul8u]  from mul8u::@2 mul8u::@4
-  [110] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
-  [111] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1
-  [112] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
-  to:mul8u::@1
-
 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
 keyboard_key_pressed: scope:[keyboard_key_pressed]  from main::@15 main::@5 main::@6 main::@7 main::@8 main::@9
-  [113] (byte) keyboard_key_pressed::key#6 ← phi( main::@6/(const byte) KEY_F3 main::@7/(const byte) KEY_F5 main::@8/(const byte) KEY_F7 main::@9/(const byte) KEY_LSHIFT main::@15/(byte) keyboard_key_pressed::key#5 main::@5/(const byte) KEY_F1 )
-  [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7
-  [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3
-  [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0
-  [117] call keyboard_matrix_read 
-  [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
+  [102] (byte) keyboard_key_pressed::key#6 ← phi( main::@6/(const byte) KEY_F3 main::@7/(const byte) KEY_F5 main::@8/(const byte) KEY_F7 main::@9/(const byte) KEY_LSHIFT main::@15/(byte) keyboard_key_pressed::key#5 main::@5/(const byte) KEY_F1 )
+  [103] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7
+  [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3
+  [105] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0
+  [106] call keyboard_matrix_read 
+  [107] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
   to:keyboard_key_pressed::@1
 keyboard_key_pressed::@1: scope:[keyboard_key_pressed]  from keyboard_key_pressed
-  [119] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
-  [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0)
+  [108] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
+  [109] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0)
   to:keyboard_key_pressed::@return
 keyboard_key_pressed::@return: scope:[keyboard_key_pressed]  from keyboard_key_pressed::@1
-  [121] return 
+  [110] return 
   to:@return
 
 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
 keyboard_matrix_read: scope:[keyboard_matrix_read]  from keyboard_key_pressed
-  [122] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0)
-  [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B)
+  [111] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0)
+  [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B)
   to:keyboard_matrix_read::@return
 keyboard_matrix_read::@return: scope:[keyboard_matrix_read]  from keyboard_matrix_read
-  [124] return 
+  [113] return 
   to:@return
 
 (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch)
 keyboard_get_keycode: scope:[keyboard_get_keycode]  from main::@12
-  [125] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0)
+  [114] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0)
   to:keyboard_get_keycode::@return
 keyboard_get_keycode::@return: scope:[keyboard_get_keycode]  from keyboard_get_keycode
-  [126] return 
+  [115] return 
   to:@return
 
 (void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at)
 print_str_at: scope:[print_str_at]  from main::@17 main::@18 main::@19 main::@3
-  [127] (byte*) print_str_at::at#7 ← phi( main::@17/(const byte*) SCREEN+(byte) 1+(byte) $a main::@3/(const byte*) SCREEN+(byte) 1 main::@18/(const byte*) SCREEN+(byte) 1+(byte) $14 main::@19/(const byte*) SCREEN+(byte) 1+(byte) $1e )
-  [127] (byte*) print_str_at::str#7 ← phi( main::@17/(const byte*) main::str1 main::@3/(const byte*) main::str main::@18/(const byte*) main::str2 main::@19/(const byte*) main::str3 )
+  [116] (byte*) print_str_at::at#7 ← phi( main::@17/(const byte*) SCREEN+(byte) 1+(byte) $a main::@3/(const byte*) SCREEN+(byte) 1 main::@18/(const byte*) SCREEN+(byte) 1+(byte) $14 main::@19/(const byte*) SCREEN+(byte) 1+(byte) $1e )
+  [116] (byte*) print_str_at::str#7 ← phi( main::@17/(const byte*) main::str1 main::@3/(const byte*) main::str main::@18/(const byte*) main::str2 main::@19/(const byte*) main::str3 )
   to:print_str_at::@1
 print_str_at::@1: scope:[print_str_at]  from print_str_at print_str_at::@2
-  [128] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
-  [128] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
-  [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
+  [117] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
+  [117] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
+  [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
   to:print_str_at::@return
 print_str_at::@return: scope:[print_str_at]  from print_str_at::@1
-  [130] return 
+  [119] return 
   to:@return
 print_str_at::@2: scope:[print_str_at]  from print_str_at::@1
-  [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5)
-  [132] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5
-  [133] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5
+  [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5)
+  [121] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5
+  [122] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5
   to:print_str_at::@1
diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log
index 7417f09ca..3434b9261 100644
--- a/src/test/ref/examples/chargen/chargen-analysis.log
+++ b/src/test/ref/examples/chargen/chargen-analysis.log
@@ -5,89 +5,31 @@ Culled Empty Block (label) @1
 Culled Empty Block (label) @2
 Culled Empty Block (label) @3
 Culled Empty Block (label) @4
-Culled Empty Block (label) mul8u::@5
-Culled Empty Block (label) mul8u::@6
-Culled Empty Block (label) mul8u::@8
-Culled Empty Block (label) mul8u::@9
 Culled Empty Block (label) @5
+Culled Empty Block (label) keyboard_matrix_read::@1
 Culled Empty Block (label) @6
+Culled Empty Block (label) keyboard_key_pressed::@1
 Culled Empty Block (label) @7
+Culled Empty Block (label) keyboard_get_keycode::@1
 Culled Empty Block (label) @8
 Culled Empty Block (label) @9
 Culled Empty Block (label) @10
-Culled Empty Block (label) keyboard_matrix_read::@1
 Culled Empty Block (label) @11
-Culled Empty Block (label) keyboard_key_pressed::@1
-Culled Empty Block (label) @12
-Culled Empty Block (label) keyboard_get_keycode::@1
-Culled Empty Block (label) @13
-Culled Empty Block (label) @14
-Culled Empty Block (label) @15
-Culled Empty Block (label) @16
 Culled Empty Block (label) main::@4
 Culled Empty Block (label) main::@5
 Culled Empty Block (label) main::@6
 Culled Empty Block (label) main::@28
 Culled Empty Block (label) main::@22
-Culled Empty Block (label) @17
+Culled Empty Block (label) @12
 Culled Empty Block (label) print_str_at::@4
 Culled Empty Block (label) print_str_at::@3
 Culled Empty Block (label) print_str_at::@5
 Culled Empty Block (label) print_str_at::@6
-Culled Empty Block (label) @18
+Culled Empty Block (label) @13
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
-  to:@19
-
-(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
-mul8u: scope:[mul8u]  from plot_chargen::@1
-  (byte) mul8u::a#5 ← phi( plot_chargen::@1/(byte) mul8u::a#1 )
-  (byte) mul8u::b#1 ← phi( plot_chargen::@1/(byte) mul8u::b#0 )
-  (word) mul8u::res#0 ← (word) 0
-  (word) mul8u::mb#0 ← (word)(byte) mul8u::b#1
-  to:mul8u::@1
-mul8u::@1: scope:[mul8u]  from mul8u mul8u::@4
-  (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
-  (word) mul8u::res#4 ← phi( mul8u/(word) mul8u::res#0 mul8u::@4/(word) mul8u::res#6 )
-  (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#5 mul8u::@4/(byte) mul8u::a#0 )
-  (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0
-  if((bool~) mul8u::$0) goto mul8u::@2
-  to:mul8u::@3
-mul8u::@2: scope:[mul8u]  from mul8u::@1
-  (word) mul8u::res#5 ← phi( mul8u::@1/(word) mul8u::res#4 )
-  (word) mul8u::mb#4 ← phi( mul8u::@1/(word) mul8u::mb#5 )
-  (byte) mul8u::a#3 ← phi( mul8u::@1/(byte) mul8u::a#2 )
-  (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1
-  (bool~) mul8u::$2 ← (number~) mul8u::$1 != (number) 0
-  (bool~) mul8u::$3 ← ! (bool~) mul8u::$2
-  if((bool~) mul8u::$3) goto mul8u::@4
-  to:mul8u::@7
-mul8u::@3: scope:[mul8u]  from mul8u::@1
-  (word) mul8u::res#2 ← phi( mul8u::@1/(word) mul8u::res#4 )
-  (word) mul8u::return#0 ← (word) mul8u::res#2
-  to:mul8u::@return
-mul8u::@4: scope:[mul8u]  from mul8u::@2 mul8u::@7
-  (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#5 mul8u::@7/(word) mul8u::res#1 )
-  (word) mul8u::mb#2 ← phi( mul8u::@2/(word) mul8u::mb#4 mul8u::@7/(word) mul8u::mb#3 )
-  (byte) mul8u::a#4 ← phi( mul8u::@2/(byte) mul8u::a#3 mul8u::@7/(byte) mul8u::a#6 )
-  (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1
-  (byte) mul8u::a#0 ← (byte~) mul8u::$5
-  (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1
-  (word) mul8u::mb#1 ← (word~) mul8u::$6
-  to:mul8u::@1
-mul8u::@7: scope:[mul8u]  from mul8u::@2
-  (byte) mul8u::a#6 ← phi( mul8u::@2/(byte) mul8u::a#3 )
-  (word) mul8u::mb#3 ← phi( mul8u::@2/(word) mul8u::mb#4 )
-  (word) mul8u::res#3 ← phi( mul8u::@2/(word) mul8u::res#5 )
-  (word~) mul8u::$4 ← (word) mul8u::res#3 + (word) mul8u::mb#3
-  (word) mul8u::res#1 ← (word~) mul8u::$4
-  to:mul8u::@4
-mul8u::@return: scope:[mul8u]  from mul8u::@3
-  (word) mul8u::return#3 ← phi( mul8u::@3/(word) mul8u::return#0 )
-  (word) mul8u::return#1 ← (word) mul8u::return#3
-  return 
-  to:@return
+  to:@14
 
 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
 keyboard_matrix_read: scope:[keyboard_matrix_read]  from keyboard_key_pressed
@@ -139,7 +81,7 @@ keyboard_get_keycode::@return: scope:[keyboard_get_keycode]  from keyboard_get_k
   to:@return
 
 (void()) main()
-main: scope:[main]  from @19
+main: scope:[main]  from @14
   (byte*) main::sc#0 ← (const byte*) SCREEN
   to:main::@1
 main::@1: scope:[main]  from main main::@2
@@ -408,51 +350,42 @@ plot_chargen: scope:[plot_chargen]  from main::@20 main::@7
   if((bool~) plot_chargen::$4) goto plot_chargen::@1
   to:plot_chargen::@2
 plot_chargen::@1: scope:[plot_chargen]  from plot_chargen plot_chargen::@2
-  (byte*) plot_chargen::chargen#6 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@2/(byte*) plot_chargen::chargen#1 )
+  (byte*) plot_chargen::chargen#4 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@2/(byte*) plot_chargen::chargen#1 )
   (byte) plot_chargen::pos#2 ← phi( plot_chargen/(byte) plot_chargen::pos#3 plot_chargen::@2/(byte) plot_chargen::pos#4 )
   *((const byte*) PROCPORT) ← (number) $32
-  (byte*~) plot_chargen::$5 ← (const byte*) SCREEN + (number) $28
-  (byte*~) plot_chargen::$6 ← (byte*~) plot_chargen::$5 + (number) 1
-  (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2
-  (byte) mul8u::b#0 ← (number) $a
-  call mul8u 
-  (word) mul8u::return#2 ← (word) mul8u::return#1
-  to:plot_chargen::@9
-plot_chargen::@9: scope:[plot_chargen]  from plot_chargen::@1
-  (byte*) plot_chargen::chargen#5 ← phi( plot_chargen::@1/(byte*) plot_chargen::chargen#6 )
-  (word) mul8u::return#4 ← phi( plot_chargen::@1/(word) mul8u::return#2 )
-  (word~) plot_chargen::$7 ← (word) mul8u::return#4
-  (byte*~) plot_chargen::$8 ← (byte*~) plot_chargen::$6 + (word~) plot_chargen::$7
-  (byte*) plot_chargen::sc#0 ← (byte*~) plot_chargen::$8
+  (byte*~) plot_chargen::$5 ← (const byte*) SCREEN + (number) $29
+  (number~) plot_chargen::$6 ← (byte) plot_chargen::pos#2 * (number) $a
+  (byte*~) plot_chargen::$7 ← (byte*~) plot_chargen::$5 + (number~) plot_chargen::$6
+  (byte*) plot_chargen::sc#0 ← (byte*~) plot_chargen::$7
   (byte) plot_chargen::y#0 ← (byte) 0
   to:plot_chargen::@3
 plot_chargen::@2: scope:[plot_chargen]  from plot_chargen
   (byte) plot_chargen::pos#4 ← phi( plot_chargen/(byte) plot_chargen::pos#3 )
   (byte*) plot_chargen::chargen#2 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 )
-  (byte*~) plot_chargen::$9 ← (byte*) plot_chargen::chargen#2 + (number) $800
-  (byte*) plot_chargen::chargen#1 ← (byte*~) plot_chargen::$9
+  (byte*~) plot_chargen::$8 ← (byte*) plot_chargen::chargen#2 + (number) $800
+  (byte*) plot_chargen::chargen#1 ← (byte*~) plot_chargen::$8
   to:plot_chargen::@1
-plot_chargen::@3: scope:[plot_chargen]  from plot_chargen::@7 plot_chargen::@9
-  (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@7/(byte*) plot_chargen::sc#2 plot_chargen::@9/(byte*) plot_chargen::sc#0 )
-  (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte) plot_chargen::y#0 )
-  (byte*) plot_chargen::chargen#3 ← phi( plot_chargen::@7/(byte*) plot_chargen::chargen#4 plot_chargen::@9/(byte*) plot_chargen::chargen#5 )
+plot_chargen::@3: scope:[plot_chargen]  from plot_chargen::@1 plot_chargen::@7
+  (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@1/(byte*) plot_chargen::sc#0 plot_chargen::@7/(byte*) plot_chargen::sc#2 )
+  (byte) plot_chargen::y#2 ← phi( plot_chargen::@1/(byte) plot_chargen::y#0 plot_chargen::@7/(byte) plot_chargen::y#1 )
+  (byte*) plot_chargen::chargen#3 ← phi( plot_chargen::@1/(byte*) plot_chargen::chargen#4 plot_chargen::@7/(byte*) plot_chargen::chargen#5 )
   (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#3 + (byte) plot_chargen::y#2)
   (byte) plot_chargen::x#0 ← (byte) 0
   to:plot_chargen::@4
 plot_chargen::@4: scope:[plot_chargen]  from plot_chargen::@3 plot_chargen::@5
-  (byte*) plot_chargen::chargen#8 ← phi( plot_chargen::@3/(byte*) plot_chargen::chargen#3 plot_chargen::@5/(byte*) plot_chargen::chargen#7 )
+  (byte*) plot_chargen::chargen#7 ← phi( plot_chargen::@3/(byte*) plot_chargen::chargen#3 plot_chargen::@5/(byte*) plot_chargen::chargen#6 )
   (byte) plot_chargen::y#5 ← phi( plot_chargen::@3/(byte) plot_chargen::y#2 plot_chargen::@5/(byte) plot_chargen::y#4 )
   (byte) plot_chargen::x#3 ← phi( plot_chargen::@3/(byte) plot_chargen::x#0 plot_chargen::@5/(byte) plot_chargen::x#1 )
   (byte*) plot_chargen::sc#5 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#7 plot_chargen::@5/(byte*) plot_chargen::sc#1 )
   (byte) plot_chargen::bits#2 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#0 plot_chargen::@5/(byte) plot_chargen::bits#1 )
   (byte) plot_chargen::c#0 ← (byte) '.'
-  (number~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (number) $80
-  (bool~) plot_chargen::$11 ← (number~) plot_chargen::$10 != (number) 0
-  (bool~) plot_chargen::$12 ← ! (bool~) plot_chargen::$11
-  if((bool~) plot_chargen::$12) goto plot_chargen::@5
+  (number~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (number) $80
+  (bool~) plot_chargen::$10 ← (number~) plot_chargen::$9 != (number) 0
+  (bool~) plot_chargen::$11 ← ! (bool~) plot_chargen::$10
+  if((bool~) plot_chargen::$11) goto plot_chargen::@5
   to:plot_chargen::@6
 plot_chargen::@5: scope:[plot_chargen]  from plot_chargen::@4 plot_chargen::@6
-  (byte*) plot_chargen::chargen#7 ← phi( plot_chargen::@4/(byte*) plot_chargen::chargen#8 plot_chargen::@6/(byte*) plot_chargen::chargen#9 )
+  (byte*) plot_chargen::chargen#6 ← phi( plot_chargen::@4/(byte*) plot_chargen::chargen#7 plot_chargen::@6/(byte*) plot_chargen::chargen#8 )
   (byte) plot_chargen::y#4 ← phi( plot_chargen::@4/(byte) plot_chargen::y#5 plot_chargen::@6/(byte) plot_chargen::y#6 )
   (byte) plot_chargen::x#2 ← phi( plot_chargen::@4/(byte) plot_chargen::x#3 plot_chargen::@6/(byte) plot_chargen::x#4 )
   (byte) plot_chargen::bits#3 ← phi( plot_chargen::@4/(byte) plot_chargen::bits#2 plot_chargen::@6/(byte) plot_chargen::bits#4 )
@@ -460,14 +393,14 @@ plot_chargen::@5: scope:[plot_chargen]  from plot_chargen::@4 plot_chargen::@6
   (byte) plot_chargen::c#2 ← phi( plot_chargen::@4/(byte) plot_chargen::c#0 plot_chargen::@6/(byte) plot_chargen::c#1 )
   *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2
   (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3
-  (number~) plot_chargen::$13 ← (byte) plot_chargen::bits#3 * (number) 2
-  (byte) plot_chargen::bits#1 ← (number~) plot_chargen::$13
+  (number~) plot_chargen::$12 ← (byte) plot_chargen::bits#3 * (number) 2
+  (byte) plot_chargen::bits#1 ← (number~) plot_chargen::$12
   (byte) plot_chargen::x#1 ← (byte) plot_chargen::x#2 + rangenext(0,7)
-  (bool~) plot_chargen::$14 ← (byte) plot_chargen::x#1 != rangelast(0,7)
-  if((bool~) plot_chargen::$14) goto plot_chargen::@4
+  (bool~) plot_chargen::$13 ← (byte) plot_chargen::x#1 != rangelast(0,7)
+  if((bool~) plot_chargen::$13) goto plot_chargen::@4
   to:plot_chargen::@7
 plot_chargen::@6: scope:[plot_chargen]  from plot_chargen::@4
-  (byte*) plot_chargen::chargen#9 ← phi( plot_chargen::@4/(byte*) plot_chargen::chargen#8 )
+  (byte*) plot_chargen::chargen#8 ← phi( plot_chargen::@4/(byte*) plot_chargen::chargen#7 )
   (byte) plot_chargen::y#6 ← phi( plot_chargen::@4/(byte) plot_chargen::y#5 )
   (byte) plot_chargen::x#4 ← phi( plot_chargen::@4/(byte) plot_chargen::x#3 )
   (byte) plot_chargen::bits#4 ← phi( plot_chargen::@4/(byte) plot_chargen::bits#2 )
@@ -475,14 +408,14 @@ plot_chargen::@6: scope:[plot_chargen]  from plot_chargen::@4
   (byte) plot_chargen::c#1 ← (byte) '*'
   to:plot_chargen::@5
 plot_chargen::@7: scope:[plot_chargen]  from plot_chargen::@5
-  (byte*) plot_chargen::chargen#4 ← phi( plot_chargen::@5/(byte*) plot_chargen::chargen#7 )
+  (byte*) plot_chargen::chargen#5 ← phi( plot_chargen::@5/(byte*) plot_chargen::chargen#6 )
   (byte) plot_chargen::y#3 ← phi( plot_chargen::@5/(byte) plot_chargen::y#4 )
   (byte*) plot_chargen::sc#4 ← phi( plot_chargen::@5/(byte*) plot_chargen::sc#1 )
-  (byte*~) plot_chargen::$15 ← (byte*) plot_chargen::sc#4 + (number) $20
-  (byte*) plot_chargen::sc#2 ← (byte*~) plot_chargen::$15
+  (byte*~) plot_chargen::$14 ← (byte*) plot_chargen::sc#4 + (number) $20
+  (byte*) plot_chargen::sc#2 ← (byte*~) plot_chargen::$14
   (byte) plot_chargen::y#1 ← (byte) plot_chargen::y#3 + rangenext(0,7)
-  (bool~) plot_chargen::$16 ← (byte) plot_chargen::y#1 != rangelast(0,7)
-  if((bool~) plot_chargen::$16) goto plot_chargen::@3
+  (bool~) plot_chargen::$15 ← (byte) plot_chargen::y#1 != rangelast(0,7)
+  if((bool~) plot_chargen::$15) goto plot_chargen::@3
   to:plot_chargen::@8
 plot_chargen::@8: scope:[plot_chargen]  from plot_chargen::@7
   *((const byte*) PROCPORT) ← (number) $37
@@ -491,16 +424,16 @@ plot_chargen::@8: scope:[plot_chargen]  from plot_chargen::@7
 plot_chargen::@return: scope:[plot_chargen]  from plot_chargen::@8
   return 
   to:@return
-@19: scope:[]  from @begin
+@14: scope:[]  from @begin
   call main 
-  to:@20
-@20: scope:[]  from @19
+  to:@15
+@15: scope:[]  from @14
   to:@end
-@end: scope:[]  from @20
+@end: scope:[]  from @15
 
 SYMBOL TABLE SSA
-(label) @19
-(label) @20
+(label) @14
+(label) @15
 (label) @begin
 (label) @end
 (const byte*) CHARGEN = (byte*)(number) $d000
@@ -770,70 +703,23 @@ SYMBOL TABLE SSA
 (const byte*) main::str1[(byte) 3]  = (byte*) "f3"
 (const byte*) main::str2[(byte) 3]  = (byte*) "f5"
 (const byte*) main::str3[(byte) 3]  = (byte*) "f7"
-(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
-(bool~) mul8u::$0
-(number~) mul8u::$1
-(bool~) mul8u::$2
-(bool~) mul8u::$3
-(word~) mul8u::$4
-(byte~) mul8u::$5
-(word~) mul8u::$6
-(label) mul8u::@1
-(label) mul8u::@2
-(label) mul8u::@3
-(label) mul8u::@4
-(label) mul8u::@7
-(label) mul8u::@return
-(byte) mul8u::a
-(byte) mul8u::a#0
-(byte) mul8u::a#1
-(byte) mul8u::a#2
-(byte) mul8u::a#3
-(byte) mul8u::a#4
-(byte) mul8u::a#5
-(byte) mul8u::a#6
-(byte) mul8u::b
-(byte) mul8u::b#0
-(byte) mul8u::b#1
-(word) mul8u::mb
-(word) mul8u::mb#0
-(word) mul8u::mb#1
-(word) mul8u::mb#2
-(word) mul8u::mb#3
-(word) mul8u::mb#4
-(word) mul8u::mb#5
-(word) mul8u::res
-(word) mul8u::res#0
-(word) mul8u::res#1
-(word) mul8u::res#2
-(word) mul8u::res#3
-(word) mul8u::res#4
-(word) mul8u::res#5
-(word) mul8u::res#6
-(word) mul8u::return
-(word) mul8u::return#0
-(word) mul8u::return#1
-(word) mul8u::return#2
-(word) mul8u::return#3
-(word) mul8u::return#4
 (void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift)
 (word~) plot_chargen::$0
 (number~) plot_chargen::$1
-(number~) plot_chargen::$10
+(bool~) plot_chargen::$10
 (bool~) plot_chargen::$11
-(bool~) plot_chargen::$12
-(number~) plot_chargen::$13
-(bool~) plot_chargen::$14
-(byte*~) plot_chargen::$15
-(bool~) plot_chargen::$16
+(number~) plot_chargen::$12
+(bool~) plot_chargen::$13
+(byte*~) plot_chargen::$14
+(bool~) plot_chargen::$15
 (byte*~) plot_chargen::$2
 (bool~) plot_chargen::$3
 (bool~) plot_chargen::$4
 (byte*~) plot_chargen::$5
-(byte*~) plot_chargen::$6
-(word~) plot_chargen::$7
+(number~) plot_chargen::$6
+(byte*~) plot_chargen::$7
 (byte*~) plot_chargen::$8
-(byte*~) plot_chargen::$9
+(number~) plot_chargen::$9
 (label) plot_chargen::@1
 (label) plot_chargen::@2
 (label) plot_chargen::@3
@@ -842,7 +728,6 @@ SYMBOL TABLE SSA
 (label) plot_chargen::@6
 (label) plot_chargen::@7
 (label) plot_chargen::@8
-(label) plot_chargen::@9
 (label) plot_chargen::@return
 (byte) plot_chargen::bits
 (byte) plot_chargen::bits#0
@@ -868,7 +753,6 @@ SYMBOL TABLE SSA
 (byte*) plot_chargen::chargen#6
 (byte*) plot_chargen::chargen#7
 (byte*) plot_chargen::chargen#8
-(byte*) plot_chargen::chargen#9
 (byte) plot_chargen::pos
 (byte) plot_chargen::pos#0
 (byte) plot_chargen::pos#1
@@ -926,12 +810,6 @@ SYMBOL TABLE SSA
 (byte*) print_str_at::str#6
 (byte*) print_str_at::str#7
 
-Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0
-Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1
-Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (unumber)(number) 1
-Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0
-Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1
-Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1
 Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#6 & (number) 7
 Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#6 & (unumber)(number) 7
 Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#6 >> (number) 3
@@ -963,16 +841,16 @@ Adding number conversion cast (unumber) 8 in (number~) plot_chargen::$1 ← (wor
 Adding number conversion cast (unumber) plot_chargen::$1 in (number~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (unumber)(number) 8
 Adding number conversion cast (unumber) 0 in (bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (number) 0
 Adding number conversion cast (unumber) $32 in *((const byte*) PROCPORT) ← (number) $32
-Adding number conversion cast (unumber) $28 in (byte*~) plot_chargen::$5 ← (const byte*) SCREEN + (number) $28
-Adding number conversion cast (unumber) 1 in (byte*~) plot_chargen::$6 ← (byte*~) plot_chargen::$5 + (number) 1
-Adding number conversion cast (unumber) $a in (byte) mul8u::b#0 ← (number) $a
-Adding number conversion cast (unumber) $800 in (byte*~) plot_chargen::$9 ← (byte*) plot_chargen::chargen#2 + (number) $800
-Adding number conversion cast (unumber) $80 in (number~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (number) $80
-Adding number conversion cast (unumber) plot_chargen::$10 in (number~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (unumber)(number) $80
-Adding number conversion cast (unumber) 0 in (bool~) plot_chargen::$11 ← (unumber~) plot_chargen::$10 != (number) 0
-Adding number conversion cast (unumber) 2 in (number~) plot_chargen::$13 ← (byte) plot_chargen::bits#3 * (number) 2
-Adding number conversion cast (unumber) plot_chargen::$13 in (number~) plot_chargen::$13 ← (byte) plot_chargen::bits#3 * (unumber)(number) 2
-Adding number conversion cast (unumber) $20 in (byte*~) plot_chargen::$15 ← (byte*) plot_chargen::sc#4 + (number) $20
+Adding number conversion cast (unumber) $29 in (byte*~) plot_chargen::$5 ← (const byte*) SCREEN + (number) $29
+Adding number conversion cast (unumber) $a in (number~) plot_chargen::$6 ← (byte) plot_chargen::pos#2 * (number) $a
+Adding number conversion cast (unumber) plot_chargen::$6 in (number~) plot_chargen::$6 ← (byte) plot_chargen::pos#2 * (unumber)(number) $a
+Adding number conversion cast (unumber) $800 in (byte*~) plot_chargen::$8 ← (byte*) plot_chargen::chargen#2 + (number) $800
+Adding number conversion cast (unumber) $80 in (number~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (number) $80
+Adding number conversion cast (unumber) plot_chargen::$9 in (number~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (unumber)(number) $80
+Adding number conversion cast (unumber) 0 in (bool~) plot_chargen::$10 ← (unumber~) plot_chargen::$9 != (number) 0
+Adding number conversion cast (unumber) 2 in (number~) plot_chargen::$12 ← (byte) plot_chargen::bits#3 * (number) 2
+Adding number conversion cast (unumber) plot_chargen::$12 in (number~) plot_chargen::$12 ← (byte) plot_chargen::bits#3 * (unumber)(number) 2
+Adding number conversion cast (unumber) $20 in (byte*~) plot_chargen::$14 ← (byte*) plot_chargen::sc#4 + (number) $20
 Adding number conversion cast (unumber) $37 in *((const byte*) PROCPORT) ← (number) $37
 Successful SSA optimization PassNAddNumberTypeConversions
 Inlining cast (byte) plot_chargen::ch#0 ← (unumber)(number) $20
@@ -985,7 +863,6 @@ Inlining cast (byte) main::shift#1 ← (unumber)(number) 1
 Inlining cast (byte) main::shift#2 ← (unumber)(number) 0
 Inlining cast (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2
 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $32
-Inlining cast (byte) mul8u::b#0 ← (unumber)(number) $a
 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $37
 Successful SSA optimization Pass2InlineCast
 Simplifying constant pointer cast (byte*) 1
@@ -993,11 +870,6 @@ Simplifying constant pointer cast (byte*) 53248
 Simplifying constant pointer cast (byte*) 56320
 Simplifying constant pointer cast (byte*) 56321
 Simplifying constant pointer cast (byte*) 1024
-Simplifying constant integer cast 0
-Simplifying constant integer cast 1
-Simplifying constant integer cast 0
-Simplifying constant integer cast 1
-Simplifying constant integer cast 1
 Simplifying constant integer cast 7
 Simplifying constant integer cast 3
 Simplifying constant integer cast $3e8
@@ -1027,8 +899,7 @@ Simplifying constant integer cast 0
 Simplifying constant integer cast 8
 Simplifying constant integer cast 0
 Simplifying constant integer cast $32
-Simplifying constant integer cast $28
-Simplifying constant integer cast 1
+Simplifying constant integer cast $29
 Simplifying constant integer cast $a
 Simplifying constant integer cast $800
 Simplifying constant integer cast $80
@@ -1037,11 +908,6 @@ Simplifying constant integer cast 2
 Simplifying constant integer cast $20
 Simplifying constant integer cast $37
 Successful SSA optimization PassNCastSimplification
-Finalized unsigned number type (byte) 0
-Finalized unsigned number type (byte) 1
-Finalized unsigned number type (byte) 0
-Finalized unsigned number type (byte) 1
-Finalized unsigned number type (byte) 1
 Finalized unsigned number type (byte) 7
 Finalized unsigned number type (byte) 3
 Finalized unsigned number type (word) $3e8
@@ -1071,8 +937,7 @@ Finalized unsigned number type (byte) 0
 Finalized unsigned number type (byte) 8
 Finalized unsigned number type (byte) 0
 Finalized unsigned number type (byte) $32
-Finalized unsigned number type (byte) $28
-Finalized unsigned number type (byte) 1
+Finalized unsigned number type (byte) $29
 Finalized unsigned number type (byte) $a
 Finalized unsigned number type (word) $800
 Finalized unsigned number type (byte) $80
@@ -1081,27 +946,20 @@ Finalized unsigned number type (byte) 2
 Finalized unsigned number type (byte) $20
 Finalized unsigned number type (byte) $37
 Successful SSA optimization PassNFinalizeNumberTypeConversions
-Inferred type updated to byte in (unumber~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
 Inferred type updated to byte in (unumber~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7
 Inferred type updated to word in (unumber~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (byte) 8
-Inferred type updated to byte in (unumber~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte) $80
-Inferred type updated to byte in (unumber~) plot_chargen::$13 ← (byte) plot_chargen::bits#3 * (byte) 2
-Inversing boolean not [9] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [8] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0
-Inversing boolean not [98] (bool~) main::$17 ← (byte~) main::$15 == (byte) 0 from [97] (bool~) main::$16 ← (byte~) main::$15 != (byte) 0
-Inversing boolean not [107] (bool~) main::$20 ← (byte~) main::$18 == (byte) 0 from [106] (bool~) main::$19 ← (byte~) main::$18 != (byte) 0
-Inversing boolean not [117] (bool~) main::$23 ← (byte~) main::$21 == (byte) 0 from [116] (bool~) main::$22 ← (byte~) main::$21 != (byte) 0
-Inversing boolean not [127] (bool~) main::$26 ← (byte~) main::$24 == (byte) 0 from [126] (bool~) main::$25 ← (byte~) main::$24 != (byte) 0
-Inversing boolean not [154] (bool~) main::$31 ← (byte) main::key#0 == (byte) $3f from [153] (bool~) main::$30 ← (byte) main::key#0 != (byte) $3f
-Inversing boolean not [158] (bool~) main::$34 ← (byte) main::pressed#2 == (byte) 0 from [157] (bool~) main::$33 ← (byte) main::pressed#2 != (byte) 0
-Inversing boolean not [196] (bool~) plot_chargen::$4 ← (byte) plot_chargen::shift#2 == (byte) 0 from [195] (bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (byte) 0
-Inversing boolean not [221] (bool~) plot_chargen::$12 ← (byte~) plot_chargen::$10 == (byte) 0 from [220] (bool~) plot_chargen::$11 ← (byte~) plot_chargen::$10 != (byte) 0
+Inferred type updated to byte in (unumber~) plot_chargen::$6 ← (byte) plot_chargen::pos#2 * (byte) $a
+Inferred type updated to byte in (unumber~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (byte) $80
+Inferred type updated to byte in (unumber~) plot_chargen::$12 ← (byte) plot_chargen::bits#3 * (byte) 2
+Inversing boolean not [74] (bool~) main::$17 ← (byte~) main::$15 == (byte) 0 from [73] (bool~) main::$16 ← (byte~) main::$15 != (byte) 0
+Inversing boolean not [83] (bool~) main::$20 ← (byte~) main::$18 == (byte) 0 from [82] (bool~) main::$19 ← (byte~) main::$18 != (byte) 0
+Inversing boolean not [93] (bool~) main::$23 ← (byte~) main::$21 == (byte) 0 from [92] (bool~) main::$22 ← (byte~) main::$21 != (byte) 0
+Inversing boolean not [103] (bool~) main::$26 ← (byte~) main::$24 == (byte) 0 from [102] (bool~) main::$25 ← (byte~) main::$24 != (byte) 0
+Inversing boolean not [130] (bool~) main::$31 ← (byte) main::key#0 == (byte) $3f from [129] (bool~) main::$30 ← (byte) main::key#0 != (byte) $3f
+Inversing boolean not [134] (bool~) main::$34 ← (byte) main::pressed#2 == (byte) 0 from [133] (bool~) main::$33 ← (byte) main::pressed#2 != (byte) 0
+Inversing boolean not [172] (bool~) plot_chargen::$4 ← (byte) plot_chargen::shift#2 == (byte) 0 from [171] (bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (byte) 0
+Inversing boolean not [191] (bool~) plot_chargen::$11 ← (byte~) plot_chargen::$9 == (byte) 0 from [190] (bool~) plot_chargen::$10 ← (byte~) plot_chargen::$9 != (byte) 0
 Successful SSA optimization Pass2UnaryNotSimplification
-Alias mul8u::a#2 = mul8u::a#3 mul8u::a#6 
-Alias mul8u::mb#3 = mul8u::mb#4 mul8u::mb#5 
-Alias mul8u::res#2 = mul8u::res#5 mul8u::res#4 mul8u::return#0 mul8u::res#3 mul8u::return#3 mul8u::return#1 
-Alias mul8u::a#0 = mul8u::$5 
-Alias mul8u::mb#1 = mul8u::$6 
-Alias mul8u::res#1 = mul8u::$4 
 Alias keyboard_matrix_read::return#0 = keyboard_matrix_read::row_pressed_bits#0 keyboard_matrix_read::$0 keyboard_matrix_read::return#3 keyboard_matrix_read::return#1 
 Alias keyboard_key_pressed::colidx#0 = keyboard_key_pressed::$0 keyboard_key_pressed::colidx#1 
 Alias keyboard_key_pressed::rowidx#0 = keyboard_key_pressed::$1 
@@ -1139,24 +997,20 @@ Alias main::cur_pos#12 = main::cur_pos#26
 Alias print_str_at::str#5 = print_str_at::str#6 
 Alias print_str_at::at#5 = print_str_at::at#6 
 Alias plot_chargen::chargen#0 = plot_chargen::$2 plot_chargen::chargen#2 
-Alias mul8u::return#2 = mul8u::return#4 
-Alias plot_chargen::chargen#5 = plot_chargen::chargen#6 
-Alias plot_chargen::sc#0 = plot_chargen::$8 
+Alias plot_chargen::sc#0 = plot_chargen::$7 
 Alias plot_chargen::pos#3 = plot_chargen::pos#4 
-Alias plot_chargen::chargen#1 = plot_chargen::$9 
-Alias plot_chargen::bits#1 = plot_chargen::$13 
+Alias plot_chargen::chargen#1 = plot_chargen::$8 
+Alias plot_chargen::bits#1 = plot_chargen::$12 
 Alias plot_chargen::sc#5 = plot_chargen::sc#6 
 Alias plot_chargen::bits#2 = plot_chargen::bits#4 
 Alias plot_chargen::x#3 = plot_chargen::x#4 
 Alias plot_chargen::y#5 = plot_chargen::y#6 
-Alias plot_chargen::chargen#8 = plot_chargen::chargen#9 
+Alias plot_chargen::chargen#7 = plot_chargen::chargen#8 
 Alias plot_chargen::sc#1 = plot_chargen::sc#4 
 Alias plot_chargen::y#3 = plot_chargen::y#4 
-Alias plot_chargen::chargen#4 = plot_chargen::chargen#7 
-Alias plot_chargen::sc#2 = plot_chargen::$15 
+Alias plot_chargen::chargen#5 = plot_chargen::chargen#6 
+Alias plot_chargen::sc#2 = plot_chargen::$14 
 Successful SSA optimization Pass2AliasElimination
-Alias mul8u::a#2 = mul8u::a#4 
-Alias mul8u::mb#2 = mul8u::mb#3 
 Alias main::cur_pos#11 = main::cur_pos#13 
 Alias main::ch#2 = main::ch#4 main::ch#3 
 Alias main::cur_pos#10 = main::cur_pos#15 main::cur_pos#12 
@@ -1166,45 +1020,40 @@ Alias plot_chargen::sc#3 = plot_chargen::sc#5
 Alias plot_chargen::bits#2 = plot_chargen::bits#3 
 Alias plot_chargen::x#2 = plot_chargen::x#3 
 Alias plot_chargen::y#3 = plot_chargen::y#5 
-Alias plot_chargen::chargen#4 = plot_chargen::chargen#8 
+Alias plot_chargen::chargen#5 = plot_chargen::chargen#7 
 Successful SSA optimization Pass2AliasElimination
-Identical Phi Values (byte) mul8u::b#1 (byte) mul8u::b#0
-Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1
 Identical Phi Values (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0
 Identical Phi Values (byte) keyboard_get_keycode::ch#1 (byte) keyboard_get_keycode::ch#0
 Identical Phi Values (byte) main::cur_pos#10 (byte) main::cur_pos#11
 Identical Phi Values (byte) main::shift#10 (byte) main::shift#9
 Identical Phi Values (byte) plot_chargen::y#3 (byte) plot_chargen::y#2
-Identical Phi Values (byte*) plot_chargen::chargen#4 (byte*) plot_chargen::chargen#3
+Identical Phi Values (byte*) plot_chargen::chargen#5 (byte*) plot_chargen::chargen#3
 Successful SSA optimization Pass2IdenticalPhiElimination
-Identical Phi Values (byte*) plot_chargen::chargen#3 (byte*) plot_chargen::chargen#5
+Identical Phi Values (byte*) plot_chargen::chargen#3 (byte*) plot_chargen::chargen#4
 Successful SSA optimization Pass2IdenticalPhiElimination
-Simple Condition (bool~) mul8u::$0 [5] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2
-Simple Condition (bool~) mul8u::$3 [8] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@4
-Simple Condition (bool~) main::$12 [34] if((byte*) main::sc#2<(byte*~) main::$11) goto main::@2
-Simple Condition (bool~) main::$14 [60] if((byte) main::i#1!=rangelast(0,3)) goto main::@7
-Simple Condition (bool~) main::$17 [69] if((byte~) main::$15==(byte) 0) goto main::@10
-Simple Condition (bool~) main::$20 [76] if((byte~) main::$18==(byte) 0) goto main::@11
-Simple Condition (bool~) main::$23 [84] if((byte~) main::$21==(byte) 0) goto main::@12
-Simple Condition (bool~) main::$26 [92] if((byte~) main::$24==(byte) 0) goto main::@13
-Simple Condition (bool~) main::$28 [100] if((byte~) main::$27!=(byte) 0) goto main::@14
-Simple Condition (bool~) main::$31 [113] if((byte) main::key#0==(byte) $3f) goto main::@17
-Simple Condition (bool~) main::$34 [116] if((byte) main::pressed#2==(byte) 0) goto main::@18
-Simple Condition (bool~) main::$36 [123] if((byte) main::ch#1!=rangelast(0,$3f)) goto main::@16
-Simple Condition (bool~) print_str_at::$0 [133] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
-Simple Condition (bool~) plot_chargen::$4 [144] if((byte) plot_chargen::shift#2==(byte) 0) goto plot_chargen::@1
-Simple Condition (bool~) plot_chargen::$12 [164] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5
-Simple Condition (bool~) plot_chargen::$14 [171] if((byte) plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4
-Simple Condition (bool~) plot_chargen::$16 [176] if((byte) plot_chargen::y#1!=rangelast(0,7)) goto plot_chargen::@3
+Simple Condition (bool~) main::$12 [20] if((byte*) main::sc#2<(byte*~) main::$11) goto main::@2
+Simple Condition (bool~) main::$14 [46] if((byte) main::i#1!=rangelast(0,3)) goto main::@7
+Simple Condition (bool~) main::$17 [55] if((byte~) main::$15==(byte) 0) goto main::@10
+Simple Condition (bool~) main::$20 [62] if((byte~) main::$18==(byte) 0) goto main::@11
+Simple Condition (bool~) main::$23 [70] if((byte~) main::$21==(byte) 0) goto main::@12
+Simple Condition (bool~) main::$26 [78] if((byte~) main::$24==(byte) 0) goto main::@13
+Simple Condition (bool~) main::$28 [86] if((byte~) main::$27!=(byte) 0) goto main::@14
+Simple Condition (bool~) main::$31 [99] if((byte) main::key#0==(byte) $3f) goto main::@17
+Simple Condition (bool~) main::$34 [102] if((byte) main::pressed#2==(byte) 0) goto main::@18
+Simple Condition (bool~) main::$36 [109] if((byte) main::ch#1!=rangelast(0,$3f)) goto main::@16
+Simple Condition (bool~) print_str_at::$0 [119] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
+Simple Condition (bool~) plot_chargen::$4 [130] if((byte) plot_chargen::shift#2==(byte) 0) goto plot_chargen::@1
+Simple Condition (bool~) plot_chargen::$11 [145] if((byte~) plot_chargen::$9==(byte) 0) goto plot_chargen::@5
+Simple Condition (bool~) plot_chargen::$13 [152] if((byte) plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4
+Simple Condition (bool~) plot_chargen::$15 [157] if((byte) plot_chargen::y#1!=rangelast(0,7)) goto plot_chargen::@3
 Successful SSA optimization Pass2ConditionalJumpSimplification
-Constant right-side identified [32] (byte*~) main::$11 ← (const byte*) SCREEN + (word) $3e8
-Constant right-side identified [37] (byte*) print_str_at::at#0 ← (const byte*) SCREEN + (byte) 1
-Constant right-side identified [40] (byte*~) main::$2 ← (const byte*) SCREEN + (byte) 1
-Constant right-side identified [44] (byte*~) main::$5 ← (const byte*) SCREEN + (byte) 1
-Constant right-side identified [48] (byte*~) main::$8 ← (const byte*) SCREEN + (byte) 1
-Constant right-side identified [147] (byte*~) plot_chargen::$5 ← (const byte*) SCREEN + (byte) $28
+Constant right-side identified [18] (byte*~) main::$11 ← (const byte*) SCREEN + (word) $3e8
+Constant right-side identified [23] (byte*) print_str_at::at#0 ← (const byte*) SCREEN + (byte) 1
+Constant right-side identified [26] (byte*~) main::$2 ← (const byte*) SCREEN + (byte) 1
+Constant right-side identified [30] (byte*~) main::$5 ← (const byte*) SCREEN + (byte) 1
+Constant right-side identified [34] (byte*~) main::$8 ← (const byte*) SCREEN + (byte) 1
+Constant right-side identified [133] (byte*~) plot_chargen::$5 ← (const byte*) SCREEN + (byte) $29
 Successful SSA optimization Pass2ConstantRValueConsolidation
-Constant (const word) mul8u::res#0 = 0
 Constant (const byte*) main::sc#0 = SCREEN
 Constant (const byte*) main::$11 = SCREEN+$3e8
 Constant (const byte*) print_str_at::at#0 = SCREEN+1
@@ -1233,25 +1082,22 @@ Constant (const byte) main::shift#1 = 1
 Constant (const byte) main::shift#2 = 0
 Constant (const byte) main::ch#0 = 0
 Constant (const byte) main::pressed#0 = 0
-Constant (const byte*) plot_chargen::$5 = SCREEN+$28
-Constant (const byte) mul8u::b#0 = $a
+Constant (const byte*) plot_chargen::$5 = SCREEN+$29
 Constant (const byte) plot_chargen::y#0 = 0
 Constant (const byte) plot_chargen::x#0 = 0
 Constant (const byte) plot_chargen::c#0 = '.'
 Constant (const byte) plot_chargen::c#1 = '*'
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const word) mul8u::mb#0 = (word)mul8u::b#0
-Successful SSA optimization Pass2ConstantIdentification
-if() condition always true - replacing block destination [128] if(true) goto main::@9
+if() condition always true - replacing block destination [114] if(true) goto main::@9
 Successful SSA optimization Pass2ConstantIfs
-Resolved ranged next value [58] main::i#1 ← ++ main::i#2 to ++
-Resolved ranged comparison value [60] if(main::i#1!=rangelast(0,3)) goto main::@7 to (number) 4
-Resolved ranged next value [121] main::ch#1 ← ++ main::ch#2 to ++
-Resolved ranged comparison value [123] if(main::ch#1!=rangelast(0,$3f)) goto main::@16 to (number) $40
-Resolved ranged next value [169] plot_chargen::x#1 ← ++ plot_chargen::x#2 to ++
-Resolved ranged comparison value [171] if(plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4 to (number) 8
-Resolved ranged next value [174] plot_chargen::y#1 ← ++ plot_chargen::y#2 to ++
-Resolved ranged comparison value [176] if(plot_chargen::y#1!=rangelast(0,7)) goto plot_chargen::@3 to (number) 8
+Resolved ranged next value [44] main::i#1 ← ++ main::i#2 to ++
+Resolved ranged comparison value [46] if(main::i#1!=rangelast(0,3)) goto main::@7 to (number) 4
+Resolved ranged next value [107] main::ch#1 ← ++ main::ch#2 to ++
+Resolved ranged comparison value [109] if(main::ch#1!=rangelast(0,$3f)) goto main::@16 to (number) $40
+Resolved ranged next value [150] plot_chargen::x#1 ← ++ plot_chargen::x#2 to ++
+Resolved ranged comparison value [152] if(plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4 to (number) 8
+Resolved ranged next value [155] plot_chargen::y#1 ← ++ plot_chargen::y#2 to ++
+Resolved ranged comparison value [157] if(plot_chargen::y#1!=rangelast(0,7)) goto plot_chargen::@3 to (number) 8
 Eliminating unused constant (const byte) main::shift#0
 Successful SSA optimization PassNEliminateUnusedVars
 Removing unused block main::@return
@@ -1271,21 +1117,18 @@ Finalized unsigned number type (byte) $40
 Finalized unsigned number type (byte) 8
 Finalized unsigned number type (byte) 8
 Successful SSA optimization PassNFinalizeNumberTypeConversions
-Constant right-side identified [28] (byte*) print_str_at::at#1 ← (const byte*) main::$2 + (byte) $a
-Constant right-side identified [30] (byte*) print_str_at::at#2 ← (const byte*) main::$5 + (byte) $14
-Constant right-side identified [32] (byte*) print_str_at::at#3 ← (const byte*) main::$8 + (byte) $1e
-Constant right-side identified [98] (byte*~) plot_chargen::$6 ← (const byte*) plot_chargen::$5 + (byte) 1
+Constant right-side identified [19] (byte*) print_str_at::at#1 ← (const byte*) main::$2 + (byte) $a
+Constant right-side identified [21] (byte*) print_str_at::at#2 ← (const byte*) main::$5 + (byte) $14
+Constant right-side identified [23] (byte*) print_str_at::at#3 ← (const byte*) main::$8 + (byte) $1e
 Successful SSA optimization Pass2ConstantRValueConsolidation
 Constant (const byte*) print_str_at::at#1 = main::$2+$a
 Constant (const byte*) print_str_at::at#2 = main::$5+$14
 Constant (const byte*) print_str_at::at#3 = main::$8+$1e
-Constant (const byte*) plot_chargen::$6 = plot_chargen::$5+1
 Successful SSA optimization Pass2ConstantIdentification
-Rewriting multiplication to use shift [90] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (byte) 8
-Rewriting multiplication to use shift [109] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 * (byte) 2
+Rewriting multiplication to use shift [81] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (byte) 8
+Rewriting multiplication to use shift and addition[86] (byte~) plot_chargen::$6 ← (byte) plot_chargen::pos#2 * (byte) $a
+Rewriting multiplication to use shift [97] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 * (byte) 2
 Successful SSA optimization Pass2MultiplyToShiftRewriting
-Inlining constant with var siblings (const word) mul8u::res#0
-Inlining constant with var siblings (const word) mul8u::mb#0
 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0
 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#1
 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#2
@@ -1330,20 +1173,17 @@ Constant inlined print_str_at::str#0 = (const byte*) main::str
 Constant inlined main::$11 = (const byte*) SCREEN+(word) $3e8
 Constant inlined main::shift#2 = (byte) 0
 Constant inlined main::i#0 = (byte) 0
-Constant inlined plot_chargen::$6 = (const byte*) SCREEN+(byte) $28+(byte) 1
-Constant inlined plot_chargen::$5 = (const byte*) SCREEN+(byte) $28
+Constant inlined plot_chargen::$5 = (const byte*) SCREEN+(byte) $29
 Constant inlined plot_chargen::shift#0 = (byte) 0
 Constant inlined main::ch#0 = (byte) 0
 Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_F1
 Constant inlined plot_chargen::ch#0 = (byte) $20
 Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_F3
 Constant inlined keyboard_key_pressed::key#4 = (const byte) KEY_LSHIFT
-Constant inlined mul8u::mb#0 = (word)(const byte) mul8u::b#0
 Constant inlined keyboard_key_pressed::key#2 = (const byte) KEY_F5
 Constant inlined keyboard_key_pressed::key#3 = (const byte) KEY_F7
 Constant inlined main::sc#0 = (const byte*) SCREEN
 Constant inlined main::cur_pos#3 = (byte) 2
-Constant inlined mul8u::res#0 = (word) 0
 Constant inlined main::cur_pos#4 = (byte) 3
 Constant inlined main::cur_pos#1 = (byte) 0
 Constant inlined main::$2 = (const byte*) SCREEN+(byte) 1
@@ -1355,19 +1195,20 @@ Constant inlined main::$8 = (const byte*) SCREEN+(byte) 1
 Constant inlined main::pressed#0 = (byte) 0
 Constant inlined plot_chargen::x#0 = (byte) 0
 Successful SSA optimization Pass2ConstantInlining
-Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4)
+Alias plot_chargen::$6 = plot_chargen::$18 
+Successful SSA optimization Pass2AliasElimination
 Added new block during phi lifting main::@42(between main::@33 and main::@7)
 Added new block during phi lifting main::@43(between main::@34 and main::@10)
 Added new block during phi lifting main::@44(between main::@35 and main::@11)
 Added new block during phi lifting main::@45(between main::@36 and main::@12)
 Added new block during phi lifting main::@46(between main::@37 and main::@13)
 Added new block during phi lifting main::@47(between main::@18 and main::@16)
-Added new block during phi lifting plot_chargen::@10(between plot_chargen and plot_chargen::@1)
-Added new block during phi lifting plot_chargen::@11(between plot_chargen::@7 and plot_chargen::@3)
-Added new block during phi lifting plot_chargen::@12(between plot_chargen::@5 and plot_chargen::@4)
+Added new block during phi lifting plot_chargen::@9(between plot_chargen and plot_chargen::@1)
+Added new block during phi lifting plot_chargen::@10(between plot_chargen::@7 and plot_chargen::@3)
+Added new block during phi lifting plot_chargen::@11(between plot_chargen::@5 and plot_chargen::@4)
 Adding NOP phi() at start of @begin
-Adding NOP phi() at start of @19
-Adding NOP phi() at start of @20
+Adding NOP phi() at start of @14
+Adding NOP phi() at start of @15
 Adding NOP phi() at start of @end
 Adding NOP phi() at start of main
 Adding NOP phi() at start of main::@3
@@ -1384,14 +1225,12 @@ Adding NOP phi() at start of main::@27
 Adding NOP phi() at start of main::@41
 Adding NOP phi() at start of main::@14
 Adding NOP phi() at start of plot_chargen::@6
-Adding NOP phi() at start of mul8u::@3
 CALL GRAPH
 Calls in [] to main:2 
 Calls in [main] to print_str_at:9 print_str_at:11 print_str_at:13 print_str_at:15 plot_chargen:20 keyboard_key_pressed:25 keyboard_key_pressed:31 keyboard_key_pressed:37 keyboard_key_pressed:43 keyboard_key_pressed:49 keyboard_get_keycode:57 keyboard_key_pressed:63 plot_chargen:75 
-Calls in [plot_chargen] to mul8u:101 
-Calls in [keyboard_key_pressed] to keyboard_matrix_read:152 
+Calls in [keyboard_key_pressed] to keyboard_matrix_read:135 
 
-Created 29 initial phi equivalence classes
+Created 25 initial phi equivalence classes
 Coalesced [19] plot_chargen::pos#6 ← plot_chargen::pos#0
 Coalesced [62] keyboard_key_pressed::key#7 ← keyboard_key_pressed::key#5
 Coalesced [66] main::pressed#4 ← main::pressed#1
@@ -1406,28 +1245,22 @@ Coalesced [84] main::cur_pos#29 ← main::cur_pos#22
 Coalesced (already) [85] main::cur_pos#28 ← main::cur_pos#24
 Coalesced [86] main::i#4 ← main::i#1
 Coalesced [89] main::sc#4 ← main::sc#1
-Coalesced [97] plot_chargen::chargen#11 ← plot_chargen::chargen#1
-Coalesced [105] plot_chargen::sc#9 ← plot_chargen::sc#0
-Coalesced [108] plot_chargen::bits#5 ← plot_chargen::bits#0
-Coalesced [109] plot_chargen::sc#10 ← plot_chargen::sc#7
-Coalesced [126] plot_chargen::y#7 ← plot_chargen::y#1
-Coalesced [127] plot_chargen::sc#8 ← plot_chargen::sc#2
-Coalesced [128] plot_chargen::bits#6 ← plot_chargen::bits#1
-Coalesced [129] plot_chargen::sc#11 ← plot_chargen::sc#1
-Coalesced [130] plot_chargen::x#5 ← plot_chargen::x#1
-Coalesced [131] plot_chargen::chargen#10 ← plot_chargen::chargen#0
-Coalesced [132] mul8u::a#7 ← mul8u::a#1
-Coalesced [140] mul8u::res#9 ← mul8u::res#1
-Coalesced [144] mul8u::a#8 ← mul8u::a#0
-Coalesced [145] mul8u::res#7 ← mul8u::res#6
-Coalesced [146] mul8u::mb#6 ← mul8u::mb#1
-Coalesced (already) [147] mul8u::res#8 ← mul8u::res#2
-Coalesced [163] print_str_at::str#8 ← print_str_at::str#7
-Coalesced [164] print_str_at::at#8 ← print_str_at::at#7
-Coalesced [171] print_str_at::str#9 ← print_str_at::str#4
-Coalesced [172] print_str_at::at#9 ← print_str_at::at#4
-Coalesced down to 21 phi equivalence classes
-Culled Empty Block (label) @20
+Coalesced [97] plot_chargen::chargen#10 ← plot_chargen::chargen#1
+Coalesced [104] plot_chargen::sc#8 ← plot_chargen::sc#0
+Coalesced [107] plot_chargen::bits#5 ← plot_chargen::bits#0
+Coalesced [108] plot_chargen::sc#10 ← plot_chargen::sc#7
+Coalesced [125] plot_chargen::y#7 ← plot_chargen::y#1
+Coalesced [126] plot_chargen::sc#9 ← plot_chargen::sc#2
+Coalesced [127] plot_chargen::bits#6 ← plot_chargen::bits#1
+Coalesced [128] plot_chargen::sc#11 ← plot_chargen::sc#1
+Coalesced [129] plot_chargen::x#5 ← plot_chargen::x#1
+Coalesced [130] plot_chargen::chargen#9 ← plot_chargen::chargen#0
+Coalesced [146] print_str_at::str#8 ← print_str_at::str#7
+Coalesced [147] print_str_at::at#8 ← print_str_at::at#7
+Coalesced [154] print_str_at::str#9 ← print_str_at::str#4
+Coalesced [155] print_str_at::at#9 ← print_str_at::at#4
+Coalesced down to 18 phi equivalence classes
+Culled Empty Block (label) @15
 Culled Empty Block (label) main::@32
 Culled Empty Block (label) main::@8
 Culled Empty Block (label) main::@23
@@ -1439,14 +1272,10 @@ Culled Empty Block (label) main::@41
 Culled Empty Block (label) main::@21
 Culled Empty Block (label) main::@47
 Culled Empty Block (label) main::@42
-Culled Empty Block (label) plot_chargen::@11
-Culled Empty Block (label) plot_chargen::@12
 Culled Empty Block (label) plot_chargen::@10
-Culled Empty Block (label) mul8u::@3
-Culled Empty Block (label) mul8u::@10
-Renumbering block @19 to @1
-Renumbering block mul8u::@4 to mul8u::@3
-Renumbering block mul8u::@7 to mul8u::@4
+Culled Empty Block (label) plot_chargen::@11
+Culled Empty Block (label) plot_chargen::@9
+Renumbering block @14 to @1
 Renumbering block keyboard_key_pressed::@2 to keyboard_key_pressed::@1
 Renumbering block main::@7 to main::@4
 Renumbering block main::@9 to main::@5
@@ -1490,7 +1319,6 @@ Adding NOP phi() at start of main::@30
 Adding NOP phi() at start of main::@31
 Adding NOP phi() at start of main::@10
 Adding NOP phi() at start of plot_chargen::@6
-Adding NOP phi() at start of mul8u
 
 FINAL CONTROL FLOW GRAPH
 @begin: scope:[]  from
@@ -1651,129 +1479,100 @@ plot_chargen::@2: scope:[plot_chargen]  from plot_chargen
   [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800
   to:plot_chargen::@1
 plot_chargen::@1: scope:[plot_chargen]  from plot_chargen plot_chargen::@2
-  [78] (byte*) plot_chargen::chargen#5 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@2/(byte*) plot_chargen::chargen#1 )
+  [78] (byte*) plot_chargen::chargen#4 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@2/(byte*) plot_chargen::chargen#1 )
   [79] *((const byte*) PROCPORT) ← (byte) $32
-  [80] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2
-  [81] call mul8u 
-  [82] (word) mul8u::return#2 ← (word) mul8u::res#2
-  to:plot_chargen::@9
-plot_chargen::@9: scope:[plot_chargen]  from plot_chargen::@1
-  [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2
-  [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $28+(byte) 1 + (word~) plot_chargen::$7
+  [80] (byte~) plot_chargen::$16 ← (byte) plot_chargen::pos#2 << (byte) 2
+  [81] (byte~) plot_chargen::$17 ← (byte~) plot_chargen::$16 + (byte) plot_chargen::pos#2
+  [82] (byte~) plot_chargen::$6 ← (byte~) plot_chargen::$17 << (byte) 1
+  [83] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $29 + (byte~) plot_chargen::$6
   to:plot_chargen::@3
-plot_chargen::@3: scope:[plot_chargen]  from plot_chargen::@7 plot_chargen::@9
-  [85] (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@7/(byte*) plot_chargen::sc#2 plot_chargen::@9/(byte*) plot_chargen::sc#0 )
-  [85] (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte) 0 )
-  [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2)
+plot_chargen::@3: scope:[plot_chargen]  from plot_chargen::@1 plot_chargen::@7
+  [84] (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@1/(byte*) plot_chargen::sc#0 plot_chargen::@7/(byte*) plot_chargen::sc#2 )
+  [84] (byte) plot_chargen::y#2 ← phi( plot_chargen::@1/(byte) 0 plot_chargen::@7/(byte) plot_chargen::y#1 )
+  [85] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#4 + (byte) plot_chargen::y#2)
   to:plot_chargen::@4
 plot_chargen::@4: scope:[plot_chargen]  from plot_chargen::@3 plot_chargen::@5
-  [87] (byte) plot_chargen::x#2 ← phi( plot_chargen::@3/(byte) 0 plot_chargen::@5/(byte) plot_chargen::x#1 )
-  [87] (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#7 plot_chargen::@5/(byte*) plot_chargen::sc#1 )
-  [87] (byte) plot_chargen::bits#2 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#0 plot_chargen::@5/(byte) plot_chargen::bits#1 )
-  [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte) $80
-  [89] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5
+  [86] (byte) plot_chargen::x#2 ← phi( plot_chargen::@3/(byte) 0 plot_chargen::@5/(byte) plot_chargen::x#1 )
+  [86] (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#7 plot_chargen::@5/(byte*) plot_chargen::sc#1 )
+  [86] (byte) plot_chargen::bits#2 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#0 plot_chargen::@5/(byte) plot_chargen::bits#1 )
+  [87] (byte~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (byte) $80
+  [88] if((byte~) plot_chargen::$9==(byte) 0) goto plot_chargen::@5
   to:plot_chargen::@6
 plot_chargen::@6: scope:[plot_chargen]  from plot_chargen::@4
-  [90] phi()
+  [89] phi()
   to:plot_chargen::@5
 plot_chargen::@5: scope:[plot_chargen]  from plot_chargen::@4 plot_chargen::@6
-  [91] (byte) plot_chargen::c#2 ← phi( plot_chargen::@4/(byte) '.' plot_chargen::@6/(byte) '*' )
-  [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2
-  [93] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3
-  [94] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1
-  [95] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2
-  [96] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4
+  [90] (byte) plot_chargen::c#2 ← phi( plot_chargen::@4/(byte) '.' plot_chargen::@6/(byte) '*' )
+  [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2
+  [92] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3
+  [93] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1
+  [94] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2
+  [95] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4
   to:plot_chargen::@7
 plot_chargen::@7: scope:[plot_chargen]  from plot_chargen::@5
-  [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20
-  [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2
-  [99] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3
+  [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20
+  [97] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2
+  [98] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3
   to:plot_chargen::@8
 plot_chargen::@8: scope:[plot_chargen]  from plot_chargen::@7
-  [100] *((const byte*) PROCPORT) ← (byte) $37
+  [99] *((const byte*) PROCPORT) ← (byte) $37
   asm { cli  }
   to:plot_chargen::@return
 plot_chargen::@return: scope:[plot_chargen]  from plot_chargen::@8
-  [102] return 
+  [101] return 
   to:@return
 
-(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
-mul8u: scope:[mul8u]  from plot_chargen::@1
-  [103] phi()
-  to:mul8u::@1
-mul8u::@1: scope:[mul8u]  from mul8u mul8u::@3
-  [104] (word) mul8u::mb#2 ← phi( mul8u/(word)(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 )
-  [104] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 )
-  [104] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 )
-  [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2
-  to:mul8u::@return
-mul8u::@return: scope:[mul8u]  from mul8u::@1
-  [106] return 
-  to:@return
-mul8u::@2: scope:[mul8u]  from mul8u::@1
-  [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1
-  [108] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
-  to:mul8u::@4
-mul8u::@4: scope:[mul8u]  from mul8u::@2
-  [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
-  to:mul8u::@3
-mul8u::@3: scope:[mul8u]  from mul8u::@2 mul8u::@4
-  [110] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
-  [111] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1
-  [112] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
-  to:mul8u::@1
-
 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
 keyboard_key_pressed: scope:[keyboard_key_pressed]  from main::@15 main::@5 main::@6 main::@7 main::@8 main::@9
-  [113] (byte) keyboard_key_pressed::key#6 ← phi( main::@6/(const byte) KEY_F3 main::@7/(const byte) KEY_F5 main::@8/(const byte) KEY_F7 main::@9/(const byte) KEY_LSHIFT main::@15/(byte) keyboard_key_pressed::key#5 main::@5/(const byte) KEY_F1 )
-  [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7
-  [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3
-  [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0
-  [117] call keyboard_matrix_read 
-  [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
+  [102] (byte) keyboard_key_pressed::key#6 ← phi( main::@6/(const byte) KEY_F3 main::@7/(const byte) KEY_F5 main::@8/(const byte) KEY_F7 main::@9/(const byte) KEY_LSHIFT main::@15/(byte) keyboard_key_pressed::key#5 main::@5/(const byte) KEY_F1 )
+  [103] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7
+  [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3
+  [105] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0
+  [106] call keyboard_matrix_read 
+  [107] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
   to:keyboard_key_pressed::@1
 keyboard_key_pressed::@1: scope:[keyboard_key_pressed]  from keyboard_key_pressed
-  [119] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
-  [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0)
+  [108] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
+  [109] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0)
   to:keyboard_key_pressed::@return
 keyboard_key_pressed::@return: scope:[keyboard_key_pressed]  from keyboard_key_pressed::@1
-  [121] return 
+  [110] return 
   to:@return
 
 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
 keyboard_matrix_read: scope:[keyboard_matrix_read]  from keyboard_key_pressed
-  [122] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0)
-  [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B)
+  [111] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0)
+  [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B)
   to:keyboard_matrix_read::@return
 keyboard_matrix_read::@return: scope:[keyboard_matrix_read]  from keyboard_matrix_read
-  [124] return 
+  [113] return 
   to:@return
 
 (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch)
 keyboard_get_keycode: scope:[keyboard_get_keycode]  from main::@12
-  [125] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0)
+  [114] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0)
   to:keyboard_get_keycode::@return
 keyboard_get_keycode::@return: scope:[keyboard_get_keycode]  from keyboard_get_keycode
-  [126] return 
+  [115] return 
   to:@return
 
 (void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at)
 print_str_at: scope:[print_str_at]  from main::@17 main::@18 main::@19 main::@3
-  [127] (byte*) print_str_at::at#7 ← phi( main::@17/(const byte*) SCREEN+(byte) 1+(byte) $a main::@3/(const byte*) SCREEN+(byte) 1 main::@18/(const byte*) SCREEN+(byte) 1+(byte) $14 main::@19/(const byte*) SCREEN+(byte) 1+(byte) $1e )
-  [127] (byte*) print_str_at::str#7 ← phi( main::@17/(const byte*) main::str1 main::@3/(const byte*) main::str main::@18/(const byte*) main::str2 main::@19/(const byte*) main::str3 )
+  [116] (byte*) print_str_at::at#7 ← phi( main::@17/(const byte*) SCREEN+(byte) 1+(byte) $a main::@3/(const byte*) SCREEN+(byte) 1 main::@18/(const byte*) SCREEN+(byte) 1+(byte) $14 main::@19/(const byte*) SCREEN+(byte) 1+(byte) $1e )
+  [116] (byte*) print_str_at::str#7 ← phi( main::@17/(const byte*) main::str1 main::@3/(const byte*) main::str main::@18/(const byte*) main::str2 main::@19/(const byte*) main::str3 )
   to:print_str_at::@1
 print_str_at::@1: scope:[print_str_at]  from print_str_at print_str_at::@2
-  [128] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
-  [128] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
-  [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
+  [117] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
+  [117] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
+  [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2
   to:print_str_at::@return
 print_str_at::@return: scope:[print_str_at]  from print_str_at::@1
-  [130] return 
+  [119] return 
   to:@return
 print_str_at::@2: scope:[print_str_at]  from print_str_at::@1
-  [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5)
-  [132] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5
-  [133] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5
+  [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5)
+  [121] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5
+  [122] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5
   to:print_str_at::@1
 
 
@@ -1836,27 +1635,13 @@ VARIABLE REGISTER WEIGHTS
 (byte*) main::sc#2 134.66666666666666
 (byte) main::shift
 (byte) main::shift#9 52.68421052631579
-(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
-(byte~) mul8u::$1 2.00000002E8
-(byte) mul8u::a
-(byte) mul8u::a#0 1.00000001E8
-(byte) mul8u::a#1 55001.0
-(byte) mul8u::a#2 6.668333416666667E7
-(byte) mul8u::b
-(word) mul8u::mb
-(word) mul8u::mb#1 2.00000002E8
-(word) mul8u::mb#2 4.285714328571428E7
-(word) mul8u::res
-(word) mul8u::res#1 2.00000002E8
-(word) mul8u::res#2 5.0001667333333336E7
-(word) mul8u::res#6 1.00000001E8
-(word) mul8u::return
-(word) mul8u::return#2 20002.0
 (void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift)
 (word~) plot_chargen::$0 20002.0
 (word~) plot_chargen::$1 20002.0
-(byte~) plot_chargen::$10 2.00000002E8
-(word~) plot_chargen::$7 20002.0
+(byte~) plot_chargen::$16 20002.0
+(byte~) plot_chargen::$17 20002.0
+(byte~) plot_chargen::$6 20002.0
+(byte~) plot_chargen::$9 2.00000002E8
 (byte) plot_chargen::bits
 (byte) plot_chargen::bits#0 2.0000002E7
 (byte) plot_chargen::bits#1 6.6666667333333336E7
@@ -1869,11 +1654,11 @@ VARIABLE REGISTER WEIGHTS
 (byte*) plot_chargen::chargen
 (byte*) plot_chargen::chargen#0 15001.5
 (byte*) plot_chargen::chargen#1 20002.0
-(byte*) plot_chargen::chargen#5 455454.6818181818
+(byte*) plot_chargen::chargen#4 477143.0
 (byte) plot_chargen::pos
 (byte) plot_chargen::pos#0 202.0
 (byte) plot_chargen::pos#1 667.3333333333334
-(byte) plot_chargen::pos#2 1233.6666666666665
+(byte) plot_chargen::pos#2 2110.4
 (byte*) plot_chargen::sc
 (byte*) plot_chargen::sc#0 20002.0
 (byte*) plot_chargen::sc#1 5.250000075E7
@@ -1909,15 +1694,12 @@ Initial phi equivalence classes
 [ plot_chargen::ch#2 plot_chargen::ch#1 ]
 [ plot_chargen::shift#2 plot_chargen::shift#1 ]
 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ]
-[ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ]
+[ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ]
 [ plot_chargen::y#2 plot_chargen::y#1 ]
 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
-[ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ]
+[ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ]
 [ plot_chargen::x#2 plot_chargen::x#1 ]
 [ plot_chargen::c#2 ]
-[ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
-[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
-[ mul8u::mb#2 mul8u::mb#1 ]
 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ]
 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ]
 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ]
@@ -1937,10 +1719,10 @@ Added variable main::key#0 to live range equivalence class [ main::key#0 ]
 Added variable keyboard_key_pressed::return#14 to live range equivalence class [ keyboard_key_pressed::return#14 ]
 Added variable plot_chargen::$0 to live range equivalence class [ plot_chargen::$0 ]
 Added variable plot_chargen::$1 to live range equivalence class [ plot_chargen::$1 ]
-Added variable mul8u::return#2 to live range equivalence class [ mul8u::return#2 ]
-Added variable plot_chargen::$7 to live range equivalence class [ plot_chargen::$7 ]
-Added variable plot_chargen::$10 to live range equivalence class [ plot_chargen::$10 ]
-Added variable mul8u::$1 to live range equivalence class [ mul8u::$1 ]
+Added variable plot_chargen::$16 to live range equivalence class [ plot_chargen::$16 ]
+Added variable plot_chargen::$17 to live range equivalence class [ plot_chargen::$17 ]
+Added variable plot_chargen::$6 to live range equivalence class [ plot_chargen::$6 ]
+Added variable plot_chargen::$9 to live range equivalence class [ plot_chargen::$9 ]
 Added variable keyboard_key_pressed::colidx#0 to live range equivalence class [ keyboard_key_pressed::colidx#0 ]
 Added variable keyboard_key_pressed::rowidx#0 to live range equivalence class [ keyboard_key_pressed::rowidx#0 ]
 Added variable keyboard_matrix_read::rowid#0 to live range equivalence class [ keyboard_matrix_read::rowid#0 ]
@@ -1959,15 +1741,12 @@ Complete equivalence classes
 [ plot_chargen::ch#2 plot_chargen::ch#1 ]
 [ plot_chargen::shift#2 plot_chargen::shift#1 ]
 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ]
-[ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ]
+[ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ]
 [ plot_chargen::y#2 plot_chargen::y#1 ]
 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
-[ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ]
+[ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ]
 [ plot_chargen::x#2 plot_chargen::x#1 ]
 [ plot_chargen::c#2 ]
-[ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
-[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
-[ mul8u::mb#2 mul8u::mb#1 ]
 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ]
 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ]
 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ]
@@ -1987,10 +1766,10 @@ Complete equivalence classes
 [ keyboard_key_pressed::return#14 ]
 [ plot_chargen::$0 ]
 [ plot_chargen::$1 ]
-[ mul8u::return#2 ]
-[ plot_chargen::$7 ]
-[ plot_chargen::$10 ]
-[ mul8u::$1 ]
+[ plot_chargen::$16 ]
+[ plot_chargen::$17 ]
+[ plot_chargen::$6 ]
+[ plot_chargen::$9 ]
 [ keyboard_key_pressed::colidx#0 ]
 [ keyboard_key_pressed::rowidx#0 ]
 [ keyboard_matrix_read::rowid#0 ]
@@ -2008,46 +1787,43 @@ Allocated zp[1]:8 [ main::pressed#2 main::pressed#1 ]
 Allocated zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ]
 Allocated zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ]
 Allocated zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ]
-Allocated zp[2]:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ]
+Allocated zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ]
 Allocated zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
 Allocated zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
-Allocated zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ]
+Allocated zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ]
 Allocated zp[1]:18 [ plot_chargen::x#2 plot_chargen::x#1 ]
 Allocated zp[1]:19 [ plot_chargen::c#2 ]
-Allocated zp[1]:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
-Allocated zp[2]:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
-Allocated zp[2]:23 [ mul8u::mb#2 mul8u::mb#1 ]
-Allocated zp[1]:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ]
-Allocated zp[2]:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ]
-Allocated zp[2]:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ]
-Allocated zp[1]:30 [ keyboard_key_pressed::return#2 ]
-Allocated zp[1]:31 [ main::$15 ]
-Allocated zp[1]:32 [ keyboard_key_pressed::return#10 ]
-Allocated zp[1]:33 [ main::$18 ]
-Allocated zp[1]:34 [ keyboard_key_pressed::return#11 ]
-Allocated zp[1]:35 [ main::$21 ]
-Allocated zp[1]:36 [ keyboard_key_pressed::return#12 ]
-Allocated zp[1]:37 [ main::$24 ]
-Allocated zp[1]:38 [ keyboard_key_pressed::return#13 ]
-Allocated zp[1]:39 [ main::$27 ]
-Allocated zp[1]:40 [ keyboard_get_keycode::ch#0 ]
-Allocated zp[1]:41 [ keyboard_get_keycode::return#2 ]
-Allocated zp[1]:42 [ main::key#0 ]
-Allocated zp[1]:43 [ keyboard_key_pressed::return#14 ]
-Allocated zp[2]:44 [ plot_chargen::$0 ]
-Allocated zp[2]:46 [ plot_chargen::$1 ]
-Allocated zp[2]:48 [ mul8u::return#2 ]
-Allocated zp[2]:50 [ plot_chargen::$7 ]
-Allocated zp[1]:52 [ plot_chargen::$10 ]
-Allocated zp[1]:53 [ mul8u::$1 ]
-Allocated zp[1]:54 [ keyboard_key_pressed::colidx#0 ]
-Allocated zp[1]:55 [ keyboard_key_pressed::rowidx#0 ]
-Allocated zp[1]:56 [ keyboard_matrix_read::rowid#0 ]
-Allocated zp[1]:57 [ keyboard_matrix_read::return#2 ]
-Allocated zp[1]:58 [ keyboard_key_pressed::$2 ]
-Allocated zp[1]:59 [ keyboard_key_pressed::return#0 ]
-Allocated zp[1]:60 [ keyboard_matrix_read::return#0 ]
-Allocated zp[1]:61 [ keyboard_get_keycode::return#0 ]
+Allocated zp[1]:20 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ]
+Allocated zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ]
+Allocated zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ]
+Allocated zp[1]:25 [ keyboard_key_pressed::return#2 ]
+Allocated zp[1]:26 [ main::$15 ]
+Allocated zp[1]:27 [ keyboard_key_pressed::return#10 ]
+Allocated zp[1]:28 [ main::$18 ]
+Allocated zp[1]:29 [ keyboard_key_pressed::return#11 ]
+Allocated zp[1]:30 [ main::$21 ]
+Allocated zp[1]:31 [ keyboard_key_pressed::return#12 ]
+Allocated zp[1]:32 [ main::$24 ]
+Allocated zp[1]:33 [ keyboard_key_pressed::return#13 ]
+Allocated zp[1]:34 [ main::$27 ]
+Allocated zp[1]:35 [ keyboard_get_keycode::ch#0 ]
+Allocated zp[1]:36 [ keyboard_get_keycode::return#2 ]
+Allocated zp[1]:37 [ main::key#0 ]
+Allocated zp[1]:38 [ keyboard_key_pressed::return#14 ]
+Allocated zp[2]:39 [ plot_chargen::$0 ]
+Allocated zp[2]:41 [ plot_chargen::$1 ]
+Allocated zp[1]:43 [ plot_chargen::$16 ]
+Allocated zp[1]:44 [ plot_chargen::$17 ]
+Allocated zp[1]:45 [ plot_chargen::$6 ]
+Allocated zp[1]:46 [ plot_chargen::$9 ]
+Allocated zp[1]:47 [ keyboard_key_pressed::colidx#0 ]
+Allocated zp[1]:48 [ keyboard_key_pressed::rowidx#0 ]
+Allocated zp[1]:49 [ keyboard_matrix_read::rowid#0 ]
+Allocated zp[1]:50 [ keyboard_matrix_read::return#2 ]
+Allocated zp[1]:51 [ keyboard_key_pressed::$2 ]
+Allocated zp[1]:52 [ keyboard_key_pressed::return#0 ]
+Allocated zp[1]:53 [ keyboard_matrix_read::return#0 ]
+Allocated zp[1]:54 [ keyboard_get_keycode::return#0 ]
 
 INITIAL ASM
 Target platform is c64basic / MOS6502X
@@ -2140,14 +1916,14 @@ __bend_from___b1:
 __bend:
   // main
 main: {
-    .label __15 = $1f
-    .label __18 = $21
-    .label __21 = $23
-    .label __24 = $25
-    .label __27 = $27
+    .label __15 = $1a
+    .label __18 = $1c
+    .label __21 = $1e
+    .label __24 = $20
+    .label __27 = $22
     .label sc = 2
     .label i = 4
-    .label key = $2a
+    .label key = $25
     .label pressed = 8
     .label ch = 7
     // Which char canvas to use
@@ -2181,14 +1957,14 @@ main: {
   __b3:
     // [8] call print_str_at 
   // Plot 4 initial analysis chars
-    // [127] phi from main::@3 to print_str_at [phi:main::@3->print_str_at]
+    // [116] phi from main::@3 to print_str_at [phi:main::@3->print_str_at]
   print_str_at_from___b3:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1
     sta.z print_str_at.at
     lda #>SCREEN+1
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str [phi:main::@3->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str [phi:main::@3->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str
     sta.z print_str_at.str
     lda #>str
@@ -2200,14 +1976,14 @@ main: {
     // main::@17
   __b17:
     // [10] call print_str_at 
-    // [127] phi from main::@17 to print_str_at [phi:main::@17->print_str_at]
+    // [116] phi from main::@17 to print_str_at [phi:main::@17->print_str_at]
   print_str_at_from___b17:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$a
     sta.z print_str_at.at
     lda #>SCREEN+1+$a
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str1 [phi:main::@17->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str1 [phi:main::@17->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str1
     sta.z print_str_at.str
     lda #>str1
@@ -2219,14 +1995,14 @@ main: {
     // main::@18
   __b18:
     // [12] call print_str_at 
-    // [127] phi from main::@18 to print_str_at [phi:main::@18->print_str_at]
+    // [116] phi from main::@18 to print_str_at [phi:main::@18->print_str_at]
   print_str_at_from___b18:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$14
     sta.z print_str_at.at
     lda #>SCREEN+1+$14
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str2 [phi:main::@18->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str2 [phi:main::@18->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str2
     sta.z print_str_at.str
     lda #>str2
@@ -2238,14 +2014,14 @@ main: {
     // main::@19
   __b19:
     // [14] call print_str_at 
-    // [127] phi from main::@19 to print_str_at [phi:main::@19->print_str_at]
+    // [116] phi from main::@19 to print_str_at [phi:main::@19->print_str_at]
   print_str_at_from___b19:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$1e
     sta.z print_str_at.at
     lda #>SCREEN+1+$1e
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str3 [phi:main::@19->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str3 [phi:main::@19->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str3
     sta.z print_str_at.str
     lda #>str3
@@ -2295,9 +2071,9 @@ main: {
     // main::@5
   __b5:
     // [21] call keyboard_key_pressed 
-    // [113] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed]
+    // [102] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed]
   keyboard_key_pressed_from___b5:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1 [phi:main::@5->keyboard_key_pressed#0] -- vbuz1=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1 [phi:main::@5->keyboard_key_pressed#0] -- vbuz1=vbuc1 
     lda #KEY_F1
     sta.z keyboard_key_pressed.key
     jsr keyboard_key_pressed
@@ -2332,9 +2108,9 @@ main: {
     // main::@6
   __b6:
     // [27] call keyboard_key_pressed 
-    // [113] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed]
+    // [102] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed]
   keyboard_key_pressed_from___b6:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3 [phi:main::@6->keyboard_key_pressed#0] -- vbuz1=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3 [phi:main::@6->keyboard_key_pressed#0] -- vbuz1=vbuc1 
     lda #KEY_F3
     sta.z keyboard_key_pressed.key
     jsr keyboard_key_pressed
@@ -2369,9 +2145,9 @@ main: {
     // main::@7
   __b7:
     // [33] call keyboard_key_pressed 
-    // [113] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
+    // [102] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
   keyboard_key_pressed_from___b7:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5 [phi:main::@7->keyboard_key_pressed#0] -- vbuz1=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5 [phi:main::@7->keyboard_key_pressed#0] -- vbuz1=vbuc1 
     lda #KEY_F5
     sta.z keyboard_key_pressed.key
     jsr keyboard_key_pressed
@@ -2406,9 +2182,9 @@ main: {
     // main::@8
   __b8:
     // [39] call keyboard_key_pressed 
-    // [113] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
+    // [102] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
   keyboard_key_pressed_from___b8:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7 [phi:main::@8->keyboard_key_pressed#0] -- vbuz1=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7 [phi:main::@8->keyboard_key_pressed#0] -- vbuz1=vbuc1 
     lda #KEY_F7
     sta.z keyboard_key_pressed.key
     jsr keyboard_key_pressed
@@ -2443,9 +2219,9 @@ main: {
     // main::@9
   __b9:
     // [45] call keyboard_key_pressed 
-    // [113] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed]
+    // [102] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed]
   keyboard_key_pressed_from___b9:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT [phi:main::@9->keyboard_key_pressed#0] -- vbuz1=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT [phi:main::@9->keyboard_key_pressed#0] -- vbuz1=vbuc1 
     lda #KEY_LSHIFT
     sta.z keyboard_key_pressed.key
     jsr keyboard_key_pressed
@@ -2519,9 +2295,9 @@ main: {
     lda.z key
     sta.z keyboard_key_pressed.key
     // [58] call keyboard_key_pressed 
-    // [113] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed]
+    // [102] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed]
   keyboard_key_pressed_from___b15:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy 
     jsr keyboard_key_pressed
     // [59] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 
     lda.z keyboard_key_pressed.return
@@ -2608,10 +2384,10 @@ main: {
 // Render 8x8 char (ch) as pixels on char canvas #pos
 // plot_chargen(byte zp($b) pos, byte zp(9) ch, byte zp($a) shift)
 plot_chargen: {
-    .label __0 = $2c
-    .label __1 = $2e
-    .label __7 = $32
-    .label __10 = $34
+    .label __0 = $27
+    .label __1 = $29
+    .label __6 = $2d
+    .label __9 = $2e
     .label pos = $b
     .label ch = 9
     .label shift = $a
@@ -2621,6 +2397,8 @@ plot_chargen: {
     .label x = $12
     .label y = $e
     .label c = $13
+    .label __16 = $2b
+    .label __17 = $2c
     // asm { sei  }
     sei
     // [73] (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 -- vwuz1=_word_vbuz2 
@@ -2665,123 +2443,117 @@ plot_chargen: {
     // [78] phi from plot_chargen plot_chargen::@2 to plot_chargen::@1 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1]
   __b1_from_plot_chargen:
   __b1_from___b2:
-    // [78] phi (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1#0] -- register_copy 
+    // [78] phi (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1#0] -- register_copy 
     jmp __b1
     // plot_chargen::@1
   __b1:
     // [79] *((const byte*) PROCPORT) ← (byte) $32 -- _deref_pbuc1=vbuc2 
     lda #$32
     sta PROCPORT
-    // [80] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 -- vbuz1=vbuz2 
+    // [80] (byte~) plot_chargen::$16 ← (byte) plot_chargen::pos#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 
     lda.z pos
-    sta.z mul8u.a
-    // [81] call mul8u 
-    // [103] phi from plot_chargen::@1 to mul8u [phi:plot_chargen::@1->mul8u]
-  mul8u_from___b1:
-    jsr mul8u
-    // [82] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 
-    lda.z mul8u.res
-    sta.z mul8u.return
-    lda.z mul8u.res+1
-    sta.z mul8u.return+1
-    jmp __b9
-    // plot_chargen::@9
-  __b9:
-    // [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2 -- vwuz1=vwuz2 
-    lda.z mul8u.return
-    sta.z __7
-    lda.z mul8u.return+1
-    sta.z __7+1
-    // [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 -- pbuz1=pbuc1_plus_vwuz2 
-    lda.z __7
+    asl
+    asl
+    sta.z __16
+    // [81] (byte~) plot_chargen::$17 ← (byte~) plot_chargen::$16 + (byte) plot_chargen::pos#2 -- vbuz1=vbuz2_plus_vbuz3 
+    lda.z __16
     clc
-    adc #<SCREEN+$28+1
+    adc.z pos
+    sta.z __17
+    // [82] (byte~) plot_chargen::$6 ← (byte~) plot_chargen::$17 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    lda.z __17
+    asl
+    sta.z __6
+    // [83] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $29 + (byte~) plot_chargen::$6 -- pbuz1=pbuc1_plus_vbuz2 
+    lda.z __6
+    clc
+    adc #<SCREEN+$29
     sta.z sc
-    lda.z __7+1
-    adc #>SCREEN+$28+1
+    lda #>SCREEN+$29
+    adc #0
     sta.z sc+1
-    // [85] phi from plot_chargen::@9 to plot_chargen::@3 [phi:plot_chargen::@9->plot_chargen::@3]
-  __b3_from___b9:
-    // [85] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@9->plot_chargen::@3#0] -- register_copy 
-    // [85] phi (byte) plot_chargen::y#2 = (byte) 0 [phi:plot_chargen::@9->plot_chargen::@3#1] -- vbuz1=vbuc1 
+    // [84] phi from plot_chargen::@1 to plot_chargen::@3 [phi:plot_chargen::@1->plot_chargen::@3]
+  __b3_from___b1:
+    // [84] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@1->plot_chargen::@3#0] -- register_copy 
+    // [84] phi (byte) plot_chargen::y#2 = (byte) 0 [phi:plot_chargen::@1->plot_chargen::@3#1] -- vbuz1=vbuc1 
     lda #0
     sta.z y
     jmp __b3
-    // [85] phi from plot_chargen::@7 to plot_chargen::@3 [phi:plot_chargen::@7->plot_chargen::@3]
+    // [84] phi from plot_chargen::@7 to plot_chargen::@3 [phi:plot_chargen::@7->plot_chargen::@3]
   __b3_from___b7:
-    // [85] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@3#0] -- register_copy 
-    // [85] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@3#1] -- register_copy 
+    // [84] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@3#0] -- register_copy 
+    // [84] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@3#1] -- register_copy 
     jmp __b3
     // plot_chargen::@3
   __b3:
-    // [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 
+    // [85] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#4 + (byte) plot_chargen::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 
     ldy.z y
     lda (chargen),y
     sta.z bits
-    // [87] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4]
+    // [86] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4]
   __b4_from___b3:
-    // [87] phi (byte) plot_chargen::x#2 = (byte) 0 [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuz1=vbuc1 
+    // [86] phi (byte) plot_chargen::x#2 = (byte) 0 [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuz1=vbuc1 
     lda #0
     sta.z x
-    // [87] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@3->plot_chargen::@4#1] -- register_copy 
-    // [87] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@3->plot_chargen::@4#2] -- register_copy 
+    // [86] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@3->plot_chargen::@4#1] -- register_copy 
+    // [86] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@3->plot_chargen::@4#2] -- register_copy 
     jmp __b4
-    // [87] phi from plot_chargen::@5 to plot_chargen::@4 [phi:plot_chargen::@5->plot_chargen::@4]
+    // [86] phi from plot_chargen::@5 to plot_chargen::@4 [phi:plot_chargen::@5->plot_chargen::@4]
   __b4_from___b5:
-    // [87] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@5->plot_chargen::@4#0] -- register_copy 
-    // [87] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@5->plot_chargen::@4#1] -- register_copy 
-    // [87] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@5->plot_chargen::@4#2] -- register_copy 
+    // [86] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@5->plot_chargen::@4#0] -- register_copy 
+    // [86] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@5->plot_chargen::@4#1] -- register_copy 
+    // [86] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@5->plot_chargen::@4#2] -- register_copy 
     jmp __b4
     // plot_chargen::@4
   __b4:
-    // [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 
+    // [87] (byte~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 
     lda #$80
     and.z bits
-    sta.z __10
-    // [89] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5 -- vbuz1_eq_0_then_la1 
-    lda.z __10
+    sta.z __9
+    // [88] if((byte~) plot_chargen::$9==(byte) 0) goto plot_chargen::@5 -- vbuz1_eq_0_then_la1 
+    lda.z __9
     cmp #0
     beq __b5_from___b4
-    // [90] phi from plot_chargen::@4 to plot_chargen::@6 [phi:plot_chargen::@4->plot_chargen::@6]
+    // [89] phi from plot_chargen::@4 to plot_chargen::@6 [phi:plot_chargen::@4->plot_chargen::@6]
   __b6_from___b4:
     jmp __b6
     // plot_chargen::@6
   __b6:
-    // [91] phi from plot_chargen::@6 to plot_chargen::@5 [phi:plot_chargen::@6->plot_chargen::@5]
+    // [90] phi from plot_chargen::@6 to plot_chargen::@5 [phi:plot_chargen::@6->plot_chargen::@5]
   __b5_from___b6:
-    // [91] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@5#0] -- vbuz1=vbuc1 
+    // [90] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@5#0] -- vbuz1=vbuc1 
     lda #'*'
     sta.z c
     jmp __b5
-    // [91] phi from plot_chargen::@4 to plot_chargen::@5 [phi:plot_chargen::@4->plot_chargen::@5]
+    // [90] phi from plot_chargen::@4 to plot_chargen::@5 [phi:plot_chargen::@4->plot_chargen::@5]
   __b5_from___b4:
-    // [91] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@4->plot_chargen::@5#0] -- vbuz1=vbuc1 
+    // [90] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@4->plot_chargen::@5#0] -- vbuz1=vbuc1 
     lda #'.'
     sta.z c
     jmp __b5
     // plot_chargen::@5
   __b5:
-    // [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 -- _deref_pbuz1=vbuz2 
+    // [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 -- _deref_pbuz1=vbuz2 
     lda.z c
     ldy #0
     sta (sc),y
-    // [93] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 -- pbuz1=_inc_pbuz1 
+    // [92] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 -- pbuz1=_inc_pbuz1 
     inc.z sc
     bne !+
     inc.z sc+1
   !:
-    // [94] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
+    // [93] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
     asl.z bits
-    // [95] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 -- vbuz1=_inc_vbuz1 
+    // [94] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 -- vbuz1=_inc_vbuz1 
     inc.z x
-    // [96] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4 -- vbuz1_neq_vbuc1_then_la1 
+    // [95] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4 -- vbuz1_neq_vbuc1_then_la1 
     lda #8
     cmp.z x
     bne __b4_from___b5
     jmp __b7
     // plot_chargen::@7
   __b7:
-    // [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1 
+    // [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$20
     clc
     adc.z sc
@@ -2789,16 +2561,16 @@ plot_chargen: {
     bcc !+
     inc.z sc+1
   !:
-    // [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1 
+    // [97] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1 
     inc.z y
-    // [99] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3 -- vbuz1_neq_vbuc1_then_la1 
+    // [98] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3 -- vbuz1_neq_vbuc1_then_la1 
     lda #8
     cmp.z y
     bne __b3_from___b7
     jmp __b8
     // plot_chargen::@8
   __b8:
-    // [100] *((const byte*) PROCPORT) ← (byte) $37 -- _deref_pbuc1=vbuc2 
+    // [99] *((const byte*) PROCPORT) ← (byte) $37 -- _deref_pbuc1=vbuc2 
     lda #$37
     sta PROCPORT
     // asm { cli  }
@@ -2806,127 +2578,52 @@ plot_chargen: {
     jmp __breturn
     // plot_chargen::@return
   __breturn:
-    // [102] return 
+    // [101] return 
     rts
-}
-  // mul8u
-// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
-// mul8u(byte zp($14) a)
-mul8u: {
-    .const b = $a
-    .label __1 = $35
-    .label a = $14
-    .label mb = $17
-    .label res = $15
-    .label return = $30
-    // [104] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
-  __b1_from_mul8u:
-    // [104] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 
-    lda #<b
-    sta.z mb
-    lda #>b
-    sta.z mb+1
-    // [104] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 
-    lda #<0
-    sta.z res
-    lda #>0
-    sta.z res+1
-    // [104] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy 
-    jmp __b1
-    // mul8u::@1
-  __b1:
-    // [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1 
-    lda.z a
-    cmp #0
-    bne __b2
-    jmp __breturn
-    // mul8u::@return
-  __breturn:
-    // [106] return 
-    rts
-    // mul8u::@2
-  __b2:
-    // [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 
-    lda #1
-    and.z a
-    sta.z __1
-    // [108] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1 
-    lda.z __1
-    cmp #0
-    beq __b3_from___b2
-    jmp __b4
-    // mul8u::@4
-  __b4:
-    // [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 
-    lda.z res
-    clc
-    adc.z mb
-    sta.z res
-    lda.z res+1
-    adc.z mb+1
-    sta.z res+1
-    // [110] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
-  __b3_from___b2:
-  __b3_from___b4:
-    // [110] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy 
-    jmp __b3
-    // mul8u::@3
-  __b3:
-    // [111] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1 -- vbuz1=vbuz1_ror_1 
-    lsr.z a
-    // [112] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 
-    asl.z mb
-    rol.z mb+1
-    // [104] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
-  __b1_from___b3:
-    // [104] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy 
-    // [104] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy 
-    // [104] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy 
-    jmp __b1
 }
   // keyboard_key_pressed
 // Determines whether a specific key is currently pressed by accessing the matrix directly
 // The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7)
 // All keys exist as as KEY_XXX constants.
 // Returns zero if the key is not pressed and a non-zero value if the key is currently pressed
-// keyboard_key_pressed(byte zp($19) key)
+// keyboard_key_pressed(byte zp($14) key)
 keyboard_key_pressed: {
-    .label __2 = $3a
-    .label colidx = $36
-    .label rowidx = $37
-    .label return = $3b
-    .label return_1 = $1e
-    .label key = $19
-    .label return_2 = $20
-    .label return_3 = $22
-    .label return_4 = $24
-    .label return_5 = $26
-    .label return_6 = $2b
-    // [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 
+    .label __2 = $33
+    .label colidx = $2f
+    .label rowidx = $30
+    .label return = $34
+    .label return_1 = $19
+    .label key = $14
+    .label return_2 = $1b
+    .label return_3 = $1d
+    .label return_4 = $1f
+    .label return_5 = $21
+    .label return_6 = $26
+    // [103] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 
     lda #7
     and.z key
     sta.z colidx
-    // [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 -- vbuz1=vbuz2_ror_3 
+    // [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 -- vbuz1=vbuz2_ror_3 
     lda.z key
     lsr
     lsr
     lsr
     sta.z rowidx
-    // [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0 -- vbuz1=vbuz2 
+    // [105] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0 -- vbuz1=vbuz2 
     lda.z rowidx
     sta.z keyboard_matrix_read.rowid
-    // [117] call keyboard_matrix_read 
+    // [106] call keyboard_matrix_read 
     jsr keyboard_matrix_read
-    // [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 
+    // [107] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 
     lda.z keyboard_matrix_read.return
     sta.z keyboard_matrix_read.return_1
     jmp __b1
     // keyboard_key_pressed::@1
   __b1:
-    // [119] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 
+    // [108] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 
     lda.z keyboard_matrix_read.return_1
     sta.z __2
-    // [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 
+    // [109] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 
     lda.z __2
     ldy.z colidx
     and keyboard_matrix_col_bitmask,y
@@ -2934,7 +2631,7 @@ keyboard_key_pressed: {
     jmp __breturn
     // keyboard_key_pressed::@return
   __breturn:
-    // [121] return 
+    // [110] return 
     rts
 }
   // keyboard_matrix_read
@@ -2943,23 +2640,23 @@ keyboard_key_pressed: {
 // Returns the keys pressed on the row as bits according to the C64 key matrix.
 // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write
 // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
-// keyboard_matrix_read(byte zp($38) rowid)
+// keyboard_matrix_read(byte zp($31) rowid)
 keyboard_matrix_read: {
-    .label return = $3c
-    .label rowid = $38
-    .label return_1 = $39
-    // [122] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 
+    .label return = $35
+    .label rowid = $31
+    .label return_1 = $32
+    // [111] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 
     ldy.z rowid
     lda keyboard_matrix_row_bitmask,y
     sta CIA1_PORT_A
-    // [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 
+    // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 
     lda CIA1_PORT_B
     eor #$ff
     sta.z return
     jmp __breturn
     // keyboard_matrix_read::@return
   __breturn:
-    // [124] return 
+    // [113] return 
     rts
 }
   // keyboard_get_keycode
@@ -2967,36 +2664,36 @@ keyboard_matrix_read: {
 // ch is the character to get the key code for ($00-$3f)
 // Returns the key code corresponding to the passed character. Only characters with a non-shifted key are handled.
 // If there is no non-shifted key representing the char $3f is returned (representing RUN/STOP) .
-// keyboard_get_keycode(byte zp($28) ch)
+// keyboard_get_keycode(byte zp($23) ch)
 keyboard_get_keycode: {
-    .label return = $3d
-    .label ch = $28
-    .label return_1 = $29
-    // [125] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0) -- vbuz1=pbuc1_derefidx_vbuz2 
+    .label return = $36
+    .label ch = $23
+    .label return_1 = $24
+    // [114] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0) -- vbuz1=pbuc1_derefidx_vbuz2 
     ldy.z ch
     lda keyboard_char_keycodes,y
     sta.z return
     jmp __breturn
     // keyboard_get_keycode::@return
   __breturn:
-    // [126] return 
+    // [115] return 
     rts
 }
   // print_str_at
 // Print a string at a specific screen position
-// print_str_at(byte* zp($1a) str, byte* zp($1c) at)
+// print_str_at(byte* zp($15) str, byte* zp($17) at)
 print_str_at: {
-    .label at = $1c
-    .label str = $1a
-    // [128] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1]
+    .label at = $17
+    .label str = $15
+    // [117] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1]
   __b1_from_print_str_at:
   __b1_from___b2:
-    // [128] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy 
-    // [128] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy 
+    // [117] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy 
+    // [117] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy 
     jmp __b1
     // print_str_at::@1
   __b1:
-    // [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 
+    // [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 
     ldy #0
     lda (str),y
     cmp #0
@@ -3004,21 +2701,21 @@ print_str_at: {
     jmp __breturn
     // print_str_at::@return
   __breturn:
-    // [130] return 
+    // [119] return 
     rts
     // print_str_at::@2
   __b2:
-    // [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) -- _deref_pbuz1=_deref_pbuz2 
+    // [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) -- _deref_pbuz1=_deref_pbuz2 
     ldy #0
     lda (str),y
     ldy #0
     sta (at),y
-    // [132] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 -- pbuz1=_inc_pbuz1 
+    // [121] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 -- pbuz1=_inc_pbuz1 
     inc.z at
     bne !+
     inc.z at+1
   !:
-    // [133] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 -- pbuz1=_inc_pbuz1 
+    // [122] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 -- pbuz1=_inc_pbuz1 
     inc.z str
     bne !+
     inc.z str+1
@@ -3047,13 +2744,14 @@ Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::c
 Statement [74] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
 Statement [75] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
 Statement [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [79] *((const byte*) PROCPORT) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  ) always clobbers reg byte a 
-Statement [82] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  ) always clobbers reg byte a 
-Statement [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$7 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$7 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::$7 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [79] *((const byte*) PROCPORT) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#4 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#4 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#4 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [80] (byte~) plot_chargen::$16 ← (byte) plot_chargen::pos#2 << (byte) 2 [ plot_chargen::pos#2 plot_chargen::chargen#4 plot_chargen::$16 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#4 plot_chargen::$16 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#4 plot_chargen::$16 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [81] (byte~) plot_chargen::$17 ← (byte~) plot_chargen::$16 + (byte) plot_chargen::pos#2 [ plot_chargen::chargen#4 plot_chargen::$17 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::$17 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::$17 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [82] (byte~) plot_chargen::$6 ← (byte~) plot_chargen::$17 << (byte) 1 [ plot_chargen::chargen#4 plot_chargen::$6 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::$6 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::$6 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [83] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $29 + (byte~) plot_chargen::$6 [ plot_chargen::chargen#4 plot_chargen::sc#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::sc#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::sc#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [85] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#4 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
-Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte y 
+Statement [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte y 
 Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::i#2 main::i#1 ]
 Removing always clobbered register reg byte y as potential for zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
 Removing always clobbered register reg byte y as potential for zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
@@ -3061,37 +2759,34 @@ Removing always clobbered register reg byte y as potential for zp[1]:18 [ plot_c
 Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ]
 Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::shift#9 ]
 Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::ch#2 main::ch#1 ]
-Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [100] *((const byte*) PROCPORT) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:17::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  main:2::plot_chargen:66::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp[1]:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
-Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp[1]:54 [ keyboard_key_pressed::colidx#0 ]
-Statement [122] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
-Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
-Statement [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
-Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
+Statement [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [99] *((const byte*) PROCPORT) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:47 [ keyboard_key_pressed::colidx#0 ]
+Statement [111] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
+Statement [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
+Statement [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
+Statement [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
 Statement [6] if((byte*) main::sc#2<(const byte*) SCREEN+(word) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] { }  ) always clobbers reg byte a 
 Statement [69] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] { }  ) always clobbers reg byte a reg byte y 
 Statement [73] (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
 Statement [74] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
 Statement [75] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
 Statement [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [79] *((const byte*) PROCPORT) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  ) always clobbers reg byte a 
-Statement [82] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  ) always clobbers reg byte a 
-Statement [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$7 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$7 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::$7 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a reg byte y 
-Statement [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte y 
-Statement [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [100] *((const byte*) PROCPORT) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
-Statement [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:17::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  main:2::plot_chargen:66::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  ) always clobbers reg byte a 
-Statement [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:17::mul8u:81 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  main:2::plot_chargen:66::mul8u:81 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 mul8u::a#1 } { mul8u::return#2 = mul8u::res#2 } }  ) always clobbers reg byte a 
-Statement [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
-Statement [122] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
-Statement [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:117 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:117 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
-Statement [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
-Statement [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
+Statement [79] *((const byte*) PROCPORT) ← (byte) $32 [ plot_chargen::pos#2 plot_chargen::chargen#4 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#4 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#4 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [80] (byte~) plot_chargen::$16 ← (byte) plot_chargen::pos#2 << (byte) 2 [ plot_chargen::pos#2 plot_chargen::chargen#4 plot_chargen::$16 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#4 plot_chargen::$16 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#4 plot_chargen::$16 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [81] (byte~) plot_chargen::$17 ← (byte~) plot_chargen::$16 + (byte) plot_chargen::pos#2 [ plot_chargen::chargen#4 plot_chargen::$17 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::$17 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::$17 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [82] (byte~) plot_chargen::$6 ← (byte~) plot_chargen::$17 << (byte) 1 [ plot_chargen::chargen#4 plot_chargen::$6 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::$6 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::$6 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [83] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $29 + (byte~) plot_chargen::$6 [ plot_chargen::chargen#4 plot_chargen::sc#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::sc#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::sc#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [85] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#4 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a reg byte y 
+Statement [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte y 
+Statement [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [99] *((const byte*) PROCPORT) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } }  main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } }  ) always clobbers reg byte a 
+Statement [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
+Statement [111] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
+Statement [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } }  ) always clobbers reg byte a 
+Statement [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
+Statement [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { }  main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { }  ) always clobbers reg byte a reg byte y 
 Potential registers zp[2]:2 [ main::sc#2 main::sc#1 ] : zp[2]:2 , 
 Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , 
 Potential registers zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] : zp[1]:5 , reg byte x , 
@@ -3101,124 +2796,121 @@ Potential registers zp[1]:8 [ main::pressed#2 main::pressed#1 ] : zp[1]:8 , reg
 Potential registers zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , 
 Potential registers zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] : zp[1]:10 , reg byte x , reg byte y , 
 Potential registers zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] : zp[1]:11 , reg byte x , reg byte y , 
-Potential registers zp[2]:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] : zp[2]:12 , 
+Potential registers zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ] : zp[2]:12 , 
 Potential registers zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] : zp[1]:14 , reg byte x , 
 Potential registers zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] : zp[1]:15 , reg byte a , reg byte x , 
-Potential registers zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] : zp[2]:16 , 
+Potential registers zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ] : zp[2]:16 , 
 Potential registers zp[1]:18 [ plot_chargen::x#2 plot_chargen::x#1 ] : zp[1]:18 , reg byte a , reg byte x , 
 Potential registers zp[1]:19 [ plot_chargen::c#2 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp[1]:20 , reg byte x , reg byte y , 
-Potential registers zp[2]:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:21 , 
-Potential registers zp[2]:23 [ mul8u::mb#2 mul8u::mb#1 ] : zp[2]:23 , 
-Potential registers zp[1]:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[2]:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] : zp[2]:26 , 
-Potential registers zp[2]:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] : zp[2]:28 , 
-Potential registers zp[1]:30 [ keyboard_key_pressed::return#2 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:31 [ main::$15 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:32 [ keyboard_key_pressed::return#10 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:33 [ main::$18 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:34 [ keyboard_key_pressed::return#11 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:35 [ main::$21 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:36 [ keyboard_key_pressed::return#12 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:37 [ main::$24 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:38 [ keyboard_key_pressed::return#13 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:39 [ main::$27 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:40 [ keyboard_get_keycode::ch#0 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:41 [ keyboard_get_keycode::return#2 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:42 [ main::key#0 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:43 [ keyboard_key_pressed::return#14 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[2]:44 [ plot_chargen::$0 ] : zp[2]:44 , 
-Potential registers zp[2]:46 [ plot_chargen::$1 ] : zp[2]:46 , 
-Potential registers zp[2]:48 [ mul8u::return#2 ] : zp[2]:48 , 
-Potential registers zp[2]:50 [ plot_chargen::$7 ] : zp[2]:50 , 
-Potential registers zp[1]:52 [ plot_chargen::$10 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:53 [ mul8u::$1 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:54 [ keyboard_key_pressed::colidx#0 ] : zp[1]:54 , reg byte x , reg byte y , 
-Potential registers zp[1]:55 [ keyboard_key_pressed::rowidx#0 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:56 [ keyboard_matrix_read::rowid#0 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:57 [ keyboard_matrix_read::return#2 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:58 [ keyboard_key_pressed::$2 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:59 [ keyboard_key_pressed::return#0 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:60 [ keyboard_matrix_read::return#0 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp[1]:61 [ keyboard_get_keycode::return#0 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:20 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] : zp[2]:21 , 
+Potential registers zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] : zp[2]:23 , 
+Potential registers zp[1]:25 [ keyboard_key_pressed::return#2 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:26 [ main::$15 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:27 [ keyboard_key_pressed::return#10 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:28 [ main::$18 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:29 [ keyboard_key_pressed::return#11 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:30 [ main::$21 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:31 [ keyboard_key_pressed::return#12 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:32 [ main::$24 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:33 [ keyboard_key_pressed::return#13 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:34 [ main::$27 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:35 [ keyboard_get_keycode::ch#0 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:36 [ keyboard_get_keycode::return#2 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:37 [ main::key#0 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:38 [ keyboard_key_pressed::return#14 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[2]:39 [ plot_chargen::$0 ] : zp[2]:39 , 
+Potential registers zp[2]:41 [ plot_chargen::$1 ] : zp[2]:41 , 
+Potential registers zp[1]:43 [ plot_chargen::$16 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:44 [ plot_chargen::$17 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:45 [ plot_chargen::$6 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:46 [ plot_chargen::$9 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:47 [ keyboard_key_pressed::colidx#0 ] : zp[1]:47 , reg byte x , reg byte y , 
+Potential registers zp[1]:48 [ keyboard_key_pressed::rowidx#0 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:49 [ keyboard_matrix_read::rowid#0 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:50 [ keyboard_matrix_read::return#2 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:51 [ keyboard_key_pressed::$2 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:52 [ keyboard_key_pressed::return#0 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:53 [ keyboard_matrix_read::return#0 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:54 [ keyboard_get_keycode::return#0 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , 
 
 REGISTER UPLIFT SCOPES
-Uplift Scope [mul8u] 350,001,670.33: zp[2]:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 242,857,145.29: zp[2]:23 [ mul8u::mb#2 mul8u::mb#1 ] 200,000,002: zp[1]:53 [ mul8u::$1 ] 166,738,336.17: zp[1]:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 20,002: zp[2]:48 [ mul8u::return#2 ] 
-Uplift Scope [plot_chargen] 200,000,002: zp[1]:52 [ plot_chargen::$10 ] 175,000,001.75: zp[1]:18 [ plot_chargen::x#2 plot_chargen::x#1 ] 130,952,384.19: zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] 120,858,338.92: zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] 100,000,001: zp[1]:19 [ plot_chargen::c#2 ] 17,307,694.04: zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] 490,458.18: zp[2]:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] 20,002: zp[2]:44 [ plot_chargen::$0 ] 20,002: zp[2]:46 [ plot_chargen::$1 ] 20,002: zp[2]:50 [ plot_chargen::$7 ] 4,202.4: zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] 2,103: zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] 1,501.5: zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] 
-Uplift Scope [keyboard_matrix_read] 110,002: zp[1]:56 [ keyboard_matrix_read::rowid#0 ] 36,667.33: zp[1]:60 [ keyboard_matrix_read::return#0 ] 20,002: zp[1]:57 [ keyboard_matrix_read::return#2 ] 
-Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:55 [ keyboard_key_pressed::rowidx#0 ] 20,002: zp[1]:58 [ keyboard_key_pressed::$2 ] 12,503.5: zp[1]:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] 3,333.67: zp[1]:54 [ keyboard_key_pressed::colidx#0 ] 2,002: zp[1]:43 [ keyboard_key_pressed::return#14 ] 1,438.38: zp[1]:59 [ keyboard_key_pressed::return#0 ] 202: zp[1]:30 [ keyboard_key_pressed::return#2 ] 202: zp[1]:32 [ keyboard_key_pressed::return#10 ] 202: zp[1]:34 [ keyboard_key_pressed::return#11 ] 202: zp[1]:36 [ keyboard_key_pressed::return#12 ] 202: zp[1]:38 [ keyboard_key_pressed::return#13 ] 
-Uplift Scope [keyboard_get_keycode] 11,002: zp[1]:40 [ keyboard_get_keycode::ch#0 ] 3,667.33: zp[1]:61 [ keyboard_get_keycode::return#0 ] 2,002: zp[1]:41 [ keyboard_get_keycode::return#2 ] 
-Uplift Scope [main] 4,004: zp[1]:8 [ main::pressed#2 main::pressed#1 ] 1,751.75: zp[1]:7 [ main::ch#2 main::ch#1 ] 1,501.5: zp[1]:42 [ main::key#0 ] 368.79: zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 336.67: zp[2]:2 [ main::sc#2 main::sc#1 ] 252.5: zp[1]:4 [ main::i#2 main::i#1 ] 202: zp[1]:31 [ main::$15 ] 202: zp[1]:33 [ main::$18 ] 202: zp[1]:35 [ main::$21 ] 202: zp[1]:37 [ main::$24 ] 202: zp[1]:39 [ main::$27 ] 52.68: zp[1]:6 [ main::shift#9 ] 
-Uplift Scope [print_str_at] 3,129.25: zp[2]:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] 2,136.67: zp[2]:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] 
+Uplift Scope [plot_chargen] 200,000,002: zp[1]:46 [ plot_chargen::$9 ] 175,000,001.75: zp[1]:18 [ plot_chargen::x#2 plot_chargen::x#1 ] 130,952,384.19: zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] 120,858,338.92: zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ] 100,000,001: zp[1]:19 [ plot_chargen::c#2 ] 17,307,694.04: zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] 512,146.5: zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ] 20,002: zp[2]:39 [ plot_chargen::$0 ] 20,002: zp[2]:41 [ plot_chargen::$1 ] 20,002: zp[1]:43 [ plot_chargen::$16 ] 20,002: zp[1]:44 [ plot_chargen::$17 ] 20,002: zp[1]:45 [ plot_chargen::$6 ] 4,202.4: zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] 2,979.73: zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] 1,501.5: zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] 
+Uplift Scope [keyboard_matrix_read] 110,002: zp[1]:49 [ keyboard_matrix_read::rowid#0 ] 36,667.33: zp[1]:53 [ keyboard_matrix_read::return#0 ] 20,002: zp[1]:50 [ keyboard_matrix_read::return#2 ] 
+Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:48 [ keyboard_key_pressed::rowidx#0 ] 20,002: zp[1]:51 [ keyboard_key_pressed::$2 ] 12,503.5: zp[1]:20 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] 3,333.67: zp[1]:47 [ keyboard_key_pressed::colidx#0 ] 2,002: zp[1]:38 [ keyboard_key_pressed::return#14 ] 1,438.38: zp[1]:52 [ keyboard_key_pressed::return#0 ] 202: zp[1]:25 [ keyboard_key_pressed::return#2 ] 202: zp[1]:27 [ keyboard_key_pressed::return#10 ] 202: zp[1]:29 [ keyboard_key_pressed::return#11 ] 202: zp[1]:31 [ keyboard_key_pressed::return#12 ] 202: zp[1]:33 [ keyboard_key_pressed::return#13 ] 
+Uplift Scope [keyboard_get_keycode] 11,002: zp[1]:35 [ keyboard_get_keycode::ch#0 ] 3,667.33: zp[1]:54 [ keyboard_get_keycode::return#0 ] 2,002: zp[1]:36 [ keyboard_get_keycode::return#2 ] 
+Uplift Scope [main] 4,004: zp[1]:8 [ main::pressed#2 main::pressed#1 ] 1,751.75: zp[1]:7 [ main::ch#2 main::ch#1 ] 1,501.5: zp[1]:37 [ main::key#0 ] 368.79: zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 336.67: zp[2]:2 [ main::sc#2 main::sc#1 ] 252.5: zp[1]:4 [ main::i#2 main::i#1 ] 202: zp[1]:26 [ main::$15 ] 202: zp[1]:28 [ main::$18 ] 202: zp[1]:30 [ main::$21 ] 202: zp[1]:32 [ main::$24 ] 202: zp[1]:34 [ main::$27 ] 52.68: zp[1]:6 [ main::shift#9 ] 
+Uplift Scope [print_str_at] 3,129.25: zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] 2,136.67: zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] 
 Uplift Scope [] 
 
-Uplifting [mul8u] best 1050626 combination zp[2]:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:23 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:48 [ mul8u::return#2 ] 
-Uplifting [plot_chargen] best 810626 combination reg byte a [ plot_chargen::$10 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] zp[2]:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp[2]:44 [ plot_chargen::$0 ] zp[2]:46 [ plot_chargen::$1 ] zp[2]:50 [ plot_chargen::$7 ] zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] 
-Limited combination testing to 100 combinations of 10368 possible.
-Uplifting [keyboard_matrix_read] best 810608 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] 
-Uplifting [keyboard_key_pressed] best 810279 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] reg byte a [ keyboard_key_pressed::$2 ] reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] zp[1]:54 [ keyboard_key_pressed::colidx#0 ] zp[1]:43 [ keyboard_key_pressed::return#14 ] zp[1]:59 [ keyboard_key_pressed::return#0 ] zp[1]:30 [ keyboard_key_pressed::return#2 ] zp[1]:32 [ keyboard_key_pressed::return#10 ] zp[1]:34 [ keyboard_key_pressed::return#11 ] zp[1]:36 [ keyboard_key_pressed::return#12 ] zp[1]:38 [ keyboard_key_pressed::return#13 ] 
+Uplifting [plot_chargen] best 726612 combination reg byte a [ plot_chargen::$9 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp[2]:39 [ plot_chargen::$0 ] zp[2]:41 [ plot_chargen::$1 ] zp[1]:43 [ plot_chargen::$16 ] zp[1]:44 [ plot_chargen::$17 ] zp[1]:45 [ plot_chargen::$6 ] zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] 
+Limited combination testing to 100 combinations of 663552 possible.
+Uplifting [keyboard_matrix_read] best 726594 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] 
+Uplifting [keyboard_key_pressed] best 726265 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] reg byte a [ keyboard_key_pressed::$2 ] reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] zp[1]:47 [ keyboard_key_pressed::colidx#0 ] zp[1]:38 [ keyboard_key_pressed::return#14 ] zp[1]:52 [ keyboard_key_pressed::return#0 ] zp[1]:25 [ keyboard_key_pressed::return#2 ] zp[1]:27 [ keyboard_key_pressed::return#10 ] zp[1]:29 [ keyboard_key_pressed::return#11 ] zp[1]:31 [ keyboard_key_pressed::return#12 ] zp[1]:33 [ keyboard_key_pressed::return#13 ] 
 Limited combination testing to 100 combinations of 3145728 possible.
-Uplifting [keyboard_get_keycode] best 809073 combination reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] reg byte a [ keyboard_get_keycode::return#2 ] 
-Uplifting [main] best 807473 combination reg byte a [ main::pressed#2 main::pressed#1 ] zp[1]:7 [ main::ch#2 main::ch#1 ] reg byte a [ main::key#0 ] zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] zp[2]:2 [ main::sc#2 main::sc#1 ] zp[1]:4 [ main::i#2 main::i#1 ] zp[1]:31 [ main::$15 ] zp[1]:33 [ main::$18 ] zp[1]:35 [ main::$21 ] zp[1]:37 [ main::$24 ] zp[1]:39 [ main::$27 ] zp[1]:6 [ main::shift#9 ] 
+Uplifting [keyboard_get_keycode] best 725059 combination reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] reg byte a [ keyboard_get_keycode::return#2 ] 
+Uplifting [main] best 723459 combination reg byte a [ main::pressed#2 main::pressed#1 ] zp[1]:7 [ main::ch#2 main::ch#1 ] reg byte a [ main::key#0 ] zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] zp[2]:2 [ main::sc#2 main::sc#1 ] zp[1]:4 [ main::i#2 main::i#1 ] zp[1]:26 [ main::$15 ] zp[1]:28 [ main::$18 ] zp[1]:30 [ main::$21 ] zp[1]:32 [ main::$24 ] zp[1]:34 [ main::$27 ] zp[1]:6 [ main::shift#9 ] 
 Limited combination testing to 100 combinations of 262144 possible.
-Uplifting [print_str_at] best 807473 combination zp[2]:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp[2]:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] 
-Uplifting [] best 807473 combination 
+Uplifting [print_str_at] best 723459 combination zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] 
+Uplifting [] best 723459 combination 
 Attempting to uplift remaining variables inzp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
-Uplifting [plot_chargen] best 807473 combination zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] 
+Uplifting [plot_chargen] best 723459 combination zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] 
 Attempting to uplift remaining variables inzp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ]
-Uplifting [plot_chargen] best 807473 combination zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] 
+Uplifting [plot_chargen] best 723459 combination zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] 
+Attempting to uplift remaining variables inzp[1]:43 [ plot_chargen::$16 ]
+Uplifting [plot_chargen] best 723453 combination reg byte a [ plot_chargen::$16 ] 
+Attempting to uplift remaining variables inzp[1]:44 [ plot_chargen::$17 ]
+Uplifting [plot_chargen] best 723447 combination reg byte a [ plot_chargen::$17 ] 
+Attempting to uplift remaining variables inzp[1]:45 [ plot_chargen::$6 ]
+Uplifting [plot_chargen] best 723441 combination reg byte a [ plot_chargen::$6 ] 
 Attempting to uplift remaining variables inzp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ]
-Uplifting [plot_chargen] best 807167 combination reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ] 
-Attempting to uplift remaining variables inzp[1]:54 [ keyboard_key_pressed::colidx#0 ]
-Uplifting [keyboard_key_pressed] best 807165 combination reg byte y [ keyboard_key_pressed::colidx#0 ] 
+Uplifting [plot_chargen] best 723135 combination reg byte x [ plot_chargen::shift#2 plot_chargen::shift#1 ] 
+Attempting to uplift remaining variables inzp[1]:47 [ keyboard_key_pressed::colidx#0 ]
+Uplifting [keyboard_key_pressed] best 723133 combination reg byte y [ keyboard_key_pressed::colidx#0 ] 
 Attempting to uplift remaining variables inzp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ]
-Uplifting [plot_chargen] best 806836 combination reg byte y [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] 
-Attempting to uplift remaining variables inzp[1]:43 [ keyboard_key_pressed::return#14 ]
-Uplifting [keyboard_key_pressed] best 806236 combination reg byte a [ keyboard_key_pressed::return#14 ] 
+Uplifting [plot_chargen] best 722805 combination reg byte y [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] 
+Attempting to uplift remaining variables inzp[1]:38 [ keyboard_key_pressed::return#14 ]
+Uplifting [keyboard_key_pressed] best 722205 combination reg byte a [ keyboard_key_pressed::return#14 ] 
 Attempting to uplift remaining variables inzp[1]:7 [ main::ch#2 main::ch#1 ]
-Uplifting [main] best 806236 combination zp[1]:7 [ main::ch#2 main::ch#1 ] 
+Uplifting [main] best 722205 combination zp[1]:7 [ main::ch#2 main::ch#1 ] 
 Attempting to uplift remaining variables inzp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ]
-Uplifting [plot_chargen] best 805930 combination reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] 
-Attempting to uplift remaining variables inzp[1]:59 [ keyboard_key_pressed::return#0 ]
-Uplifting [keyboard_key_pressed] best 805477 combination reg byte a [ keyboard_key_pressed::return#0 ] 
+Uplifting [plot_chargen] best 721899 combination reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] 
+Attempting to uplift remaining variables inzp[1]:52 [ keyboard_key_pressed::return#0 ]
+Uplifting [keyboard_key_pressed] best 721446 combination reg byte a [ keyboard_key_pressed::return#0 ] 
 Attempting to uplift remaining variables inzp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ]
-Uplifting [main] best 805477 combination zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 
+Uplifting [main] best 721446 combination zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 
 Attempting to uplift remaining variables inzp[1]:4 [ main::i#2 main::i#1 ]
-Uplifting [main] best 805477 combination zp[1]:4 [ main::i#2 main::i#1 ] 
-Attempting to uplift remaining variables inzp[1]:30 [ keyboard_key_pressed::return#2 ]
-Uplifting [keyboard_key_pressed] best 805417 combination reg byte a [ keyboard_key_pressed::return#2 ] 
-Attempting to uplift remaining variables inzp[1]:31 [ main::$15 ]
-Uplifting [main] best 805357 combination reg byte a [ main::$15 ] 
-Attempting to uplift remaining variables inzp[1]:32 [ keyboard_key_pressed::return#10 ]
-Uplifting [keyboard_key_pressed] best 805297 combination reg byte a [ keyboard_key_pressed::return#10 ] 
-Attempting to uplift remaining variables inzp[1]:33 [ main::$18 ]
-Uplifting [main] best 805237 combination reg byte a [ main::$18 ] 
-Attempting to uplift remaining variables inzp[1]:34 [ keyboard_key_pressed::return#11 ]
-Uplifting [keyboard_key_pressed] best 805177 combination reg byte a [ keyboard_key_pressed::return#11 ] 
-Attempting to uplift remaining variables inzp[1]:35 [ main::$21 ]
-Uplifting [main] best 805117 combination reg byte a [ main::$21 ] 
-Attempting to uplift remaining variables inzp[1]:36 [ keyboard_key_pressed::return#12 ]
-Uplifting [keyboard_key_pressed] best 805057 combination reg byte a [ keyboard_key_pressed::return#12 ] 
-Attempting to uplift remaining variables inzp[1]:37 [ main::$24 ]
-Uplifting [main] best 804997 combination reg byte a [ main::$24 ] 
-Attempting to uplift remaining variables inzp[1]:38 [ keyboard_key_pressed::return#13 ]
-Uplifting [keyboard_key_pressed] best 804937 combination reg byte a [ keyboard_key_pressed::return#13 ] 
-Attempting to uplift remaining variables inzp[1]:39 [ main::$27 ]
-Uplifting [main] best 804877 combination reg byte a [ main::$27 ] 
+Uplifting [main] best 721446 combination zp[1]:4 [ main::i#2 main::i#1 ] 
+Attempting to uplift remaining variables inzp[1]:25 [ keyboard_key_pressed::return#2 ]
+Uplifting [keyboard_key_pressed] best 721386 combination reg byte a [ keyboard_key_pressed::return#2 ] 
+Attempting to uplift remaining variables inzp[1]:26 [ main::$15 ]
+Uplifting [main] best 721326 combination reg byte a [ main::$15 ] 
+Attempting to uplift remaining variables inzp[1]:27 [ keyboard_key_pressed::return#10 ]
+Uplifting [keyboard_key_pressed] best 721266 combination reg byte a [ keyboard_key_pressed::return#10 ] 
+Attempting to uplift remaining variables inzp[1]:28 [ main::$18 ]
+Uplifting [main] best 721206 combination reg byte a [ main::$18 ] 
+Attempting to uplift remaining variables inzp[1]:29 [ keyboard_key_pressed::return#11 ]
+Uplifting [keyboard_key_pressed] best 721146 combination reg byte a [ keyboard_key_pressed::return#11 ] 
+Attempting to uplift remaining variables inzp[1]:30 [ main::$21 ]
+Uplifting [main] best 721086 combination reg byte a [ main::$21 ] 
+Attempting to uplift remaining variables inzp[1]:31 [ keyboard_key_pressed::return#12 ]
+Uplifting [keyboard_key_pressed] best 721026 combination reg byte a [ keyboard_key_pressed::return#12 ] 
+Attempting to uplift remaining variables inzp[1]:32 [ main::$24 ]
+Uplifting [main] best 720966 combination reg byte a [ main::$24 ] 
+Attempting to uplift remaining variables inzp[1]:33 [ keyboard_key_pressed::return#13 ]
+Uplifting [keyboard_key_pressed] best 720906 combination reg byte a [ keyboard_key_pressed::return#13 ] 
+Attempting to uplift remaining variables inzp[1]:34 [ main::$27 ]
+Uplifting [main] best 720846 combination reg byte a [ main::$27 ] 
 Attempting to uplift remaining variables inzp[1]:6 [ main::shift#9 ]
-Uplifting [main] best 804877 combination zp[1]:6 [ main::shift#9 ] 
-Coalescing zero page register [ zp[2]:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] ] with [ zp[2]:46 [ plot_chargen::$1 ] ] - score: 1
-Coalescing zero page register [ zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] ] with [ zp[2]:50 [ plot_chargen::$7 ] ] - score: 1
-Coalescing zero page register [ zp[2]:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:48 [ mul8u::return#2 ] ] - score: 1
-Coalescing zero page register [ zp[2]:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 ] ] with [ zp[2]:44 [ plot_chargen::$0 ] ] - score: 1
-Coalescing zero page register [ zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 ] ] with [ zp[2]:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] - score: 1
-Coalescing zero page register [ zp[2]:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] ] with [ zp[2]:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ] ]
-Coalescing zero page register [ zp[2]:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] ] with [ zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ]
+Uplifting [main] best 720846 combination zp[1]:6 [ main::shift#9 ] 
+Coalescing zero page register [ zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ] ] with [ zp[2]:41 [ plot_chargen::$1 ] ] - score: 1
+Coalescing zero page register [ zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 ] ] with [ zp[2]:39 [ plot_chargen::$0 ] ] - score: 1
+Coalescing zero page register [ zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] ] with [ zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ] ]
+Coalescing zero page register [ zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] ] with [ zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ] ]
 Allocated (was zp[1]:14) zp[1]:8 [ plot_chargen::y#2 plot_chargen::y#1 ]
 Allocated (was zp[1]:15) zp[1]:9 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
-Allocated (was zp[2]:23) zp[2]:10 [ mul8u::mb#2 mul8u::mb#1 ]
-Allocated (was zp[2]:26) zp[2]:12 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ]
-Allocated (was zp[2]:28) zp[2]:14 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ]
+Allocated (was zp[2]:21) zp[2]:10 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ]
+Allocated (was zp[2]:23) zp[2]:12 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ]
 
 ASSEMBLER BEFORE OPTIMIZATION
   // File Comments
@@ -3344,14 +3036,14 @@ main: {
   __b3:
     // [8] call print_str_at 
   // Plot 4 initial analysis chars
-    // [127] phi from main::@3 to print_str_at [phi:main::@3->print_str_at]
+    // [116] phi from main::@3 to print_str_at [phi:main::@3->print_str_at]
   print_str_at_from___b3:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1
     sta.z print_str_at.at
     lda #>SCREEN+1
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str [phi:main::@3->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str [phi:main::@3->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str
     sta.z print_str_at.str
     lda #>str
@@ -3363,14 +3055,14 @@ main: {
     // main::@17
   __b17:
     // [10] call print_str_at 
-    // [127] phi from main::@17 to print_str_at [phi:main::@17->print_str_at]
+    // [116] phi from main::@17 to print_str_at [phi:main::@17->print_str_at]
   print_str_at_from___b17:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$a
     sta.z print_str_at.at
     lda #>SCREEN+1+$a
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str1 [phi:main::@17->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str1 [phi:main::@17->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str1
     sta.z print_str_at.str
     lda #>str1
@@ -3382,14 +3074,14 @@ main: {
     // main::@18
   __b18:
     // [12] call print_str_at 
-    // [127] phi from main::@18 to print_str_at [phi:main::@18->print_str_at]
+    // [116] phi from main::@18 to print_str_at [phi:main::@18->print_str_at]
   print_str_at_from___b18:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$14
     sta.z print_str_at.at
     lda #>SCREEN+1+$14
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str2 [phi:main::@18->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str2 [phi:main::@18->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str2
     sta.z print_str_at.str
     lda #>str2
@@ -3401,14 +3093,14 @@ main: {
     // main::@19
   __b19:
     // [14] call print_str_at 
-    // [127] phi from main::@19 to print_str_at [phi:main::@19->print_str_at]
+    // [116] phi from main::@19 to print_str_at [phi:main::@19->print_str_at]
   print_str_at_from___b19:
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$1e
     sta.z print_str_at.at
     lda #>SCREEN+1+$1e
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str3 [phi:main::@19->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str3 [phi:main::@19->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str3
     sta.z print_str_at.str
     lda #>str3
@@ -3455,9 +3147,9 @@ main: {
     // main::@5
   __b5:
     // [21] call keyboard_key_pressed 
-    // [113] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed]
+    // [102] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed]
   keyboard_key_pressed_from___b5:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F1
     jsr keyboard_key_pressed
     // [22] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0
@@ -3486,9 +3178,9 @@ main: {
     // main::@6
   __b6:
     // [27] call keyboard_key_pressed 
-    // [113] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed]
+    // [102] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed]
   keyboard_key_pressed_from___b6:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F3
     jsr keyboard_key_pressed
     // [28] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0
@@ -3517,9 +3209,9 @@ main: {
     // main::@7
   __b7:
     // [33] call keyboard_key_pressed 
-    // [113] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
+    // [102] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
   keyboard_key_pressed_from___b7:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F5
     jsr keyboard_key_pressed
     // [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0
@@ -3548,9 +3240,9 @@ main: {
     // main::@8
   __b8:
     // [39] call keyboard_key_pressed 
-    // [113] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
+    // [102] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
   keyboard_key_pressed_from___b8:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7 [phi:main::@8->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7 [phi:main::@8->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F7
     jsr keyboard_key_pressed
     // [40] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0
@@ -3579,9 +3271,9 @@ main: {
     // main::@9
   __b9:
     // [45] call keyboard_key_pressed 
-    // [113] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed]
+    // [102] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed]
   keyboard_key_pressed_from___b9:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT [phi:main::@9->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT [phi:main::@9->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_LSHIFT
     jsr keyboard_key_pressed
     // [46] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0
@@ -3642,9 +3334,9 @@ main: {
     // [57] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuxx=vbuaa 
     tax
     // [58] call keyboard_key_pressed 
-    // [113] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed]
+    // [102] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed]
   keyboard_key_pressed_from___b15:
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy 
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy 
     jsr keyboard_key_pressed
     // [59] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0
     jmp __b27
@@ -3722,11 +3414,10 @@ main: {
 // Render 8x8 char (ch) as pixels on char canvas #pos
 // plot_chargen(byte register(Y) pos, byte register(A) ch, byte register(X) shift)
 plot_chargen: {
-    .label __0 = $c
-    .label __1 = $c
-    .label __7 = $e
-    .label chargen = $c
-    .label sc = $e
+    .label __0 = $a
+    .label __1 = $a
+    .label chargen = $a
+    .label sc = $c
     .label bits = 9
     .label y = 8
     // asm { sei  }
@@ -3767,108 +3458,105 @@ plot_chargen: {
     // [78] phi from plot_chargen plot_chargen::@2 to plot_chargen::@1 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1]
   __b1_from_plot_chargen:
   __b1_from___b2:
-    // [78] phi (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1#0] -- register_copy 
+    // [78] phi (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1#0] -- register_copy 
     jmp __b1
     // plot_chargen::@1
   __b1:
     // [79] *((const byte*) PROCPORT) ← (byte) $32 -- _deref_pbuc1=vbuc2 
     lda #$32
     sta PROCPORT
-    // [80] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 -- vbuxx=vbuyy 
+    // [80] (byte~) plot_chargen::$16 ← (byte) plot_chargen::pos#2 << (byte) 2 -- vbuaa=vbuyy_rol_2 
     tya
-    tax
-    // [81] call mul8u 
-    // [103] phi from plot_chargen::@1 to mul8u [phi:plot_chargen::@1->mul8u]
-  mul8u_from___b1:
-    jsr mul8u
-    // [82] (word) mul8u::return#2 ← (word) mul8u::res#2
-    jmp __b9
-    // plot_chargen::@9
-  __b9:
-    // [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2
-    // [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 -- pbuz1=pbuc1_plus_vwuz1 
+    asl
+    asl
+    // [81] (byte~) plot_chargen::$17 ← (byte~) plot_chargen::$16 + (byte) plot_chargen::pos#2 -- vbuaa=vbuaa_plus_vbuyy 
+    sty.z $ff
     clc
-    lda.z sc
-    adc #<SCREEN+$28+1
+    adc.z $ff
+    // [82] (byte~) plot_chargen::$6 ← (byte~) plot_chargen::$17 << (byte) 1 -- vbuaa=vbuaa_rol_1 
+    asl
+    // [83] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $29 + (byte~) plot_chargen::$6 -- pbuz1=pbuc1_plus_vbuaa 
+    clc
+    adc #<SCREEN+$29
     sta.z sc
-    lda.z sc+1
-    adc #>SCREEN+$28+1
+    lda #>SCREEN+$29
+    adc #0
     sta.z sc+1
-    // [85] phi from plot_chargen::@9 to plot_chargen::@3 [phi:plot_chargen::@9->plot_chargen::@3]
-  __b3_from___b9:
-    // [85] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@9->plot_chargen::@3#0] -- register_copy 
-    // [85] phi (byte) plot_chargen::y#2 = (byte) 0 [phi:plot_chargen::@9->plot_chargen::@3#1] -- vbuz1=vbuc1 
+    // [84] phi from plot_chargen::@1 to plot_chargen::@3 [phi:plot_chargen::@1->plot_chargen::@3]
+  __b3_from___b1:
+    // [84] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@1->plot_chargen::@3#0] -- register_copy 
+    // [84] phi (byte) plot_chargen::y#2 = (byte) 0 [phi:plot_chargen::@1->plot_chargen::@3#1] -- vbuz1=vbuc1 
     lda #0
     sta.z y
     jmp __b3
-    // [85] phi from plot_chargen::@7 to plot_chargen::@3 [phi:plot_chargen::@7->plot_chargen::@3]
+    // [84] phi from plot_chargen::@7 to plot_chargen::@3 [phi:plot_chargen::@7->plot_chargen::@3]
   __b3_from___b7:
-    // [85] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@3#0] -- register_copy 
-    // [85] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@3#1] -- register_copy 
+    // [84] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@3#0] -- register_copy 
+    // [84] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@3#1] -- register_copy 
     jmp __b3
     // plot_chargen::@3
   __b3:
-    // [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 
+    // [85] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#4 + (byte) plot_chargen::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 
     ldy.z y
     lda (chargen),y
     sta.z bits
-    // [87] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4]
+    // [86] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4]
   __b4_from___b3:
-    // [87] phi (byte) plot_chargen::x#2 = (byte) 0 [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuxx=vbuc1 
+    // [86] phi (byte) plot_chargen::x#2 = (byte) 0 [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuxx=vbuc1 
     ldx #0
-    // [87] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@3->plot_chargen::@4#1] -- register_copy 
-    // [87] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@3->plot_chargen::@4#2] -- register_copy 
+    // [86] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@3->plot_chargen::@4#1] -- register_copy 
+    // [86] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@3->plot_chargen::@4#2] -- register_copy 
     jmp __b4
-    // [87] phi from plot_chargen::@5 to plot_chargen::@4 [phi:plot_chargen::@5->plot_chargen::@4]
+    // [86] phi from plot_chargen::@5 to plot_chargen::@4 [phi:plot_chargen::@5->plot_chargen::@4]
   __b4_from___b5:
-    // [87] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@5->plot_chargen::@4#0] -- register_copy 
-    // [87] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@5->plot_chargen::@4#1] -- register_copy 
-    // [87] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@5->plot_chargen::@4#2] -- register_copy 
+    // [86] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@5->plot_chargen::@4#0] -- register_copy 
+    // [86] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@5->plot_chargen::@4#1] -- register_copy 
+    // [86] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@5->plot_chargen::@4#2] -- register_copy 
     jmp __b4
     // plot_chargen::@4
   __b4:
-    // [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 
+    // [87] (byte~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 
     lda #$80
     and.z bits
-    // [89] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5 -- vbuaa_eq_0_then_la1 
+    // [88] if((byte~) plot_chargen::$9==(byte) 0) goto plot_chargen::@5 -- vbuaa_eq_0_then_la1 
     cmp #0
     beq __b5_from___b4
-    // [90] phi from plot_chargen::@4 to plot_chargen::@6 [phi:plot_chargen::@4->plot_chargen::@6]
+    // [89] phi from plot_chargen::@4 to plot_chargen::@6 [phi:plot_chargen::@4->plot_chargen::@6]
   __b6_from___b4:
     jmp __b6
     // plot_chargen::@6
   __b6:
-    // [91] phi from plot_chargen::@6 to plot_chargen::@5 [phi:plot_chargen::@6->plot_chargen::@5]
+    // [90] phi from plot_chargen::@6 to plot_chargen::@5 [phi:plot_chargen::@6->plot_chargen::@5]
   __b5_from___b6:
-    // [91] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@5#0] -- vbuaa=vbuc1 
+    // [90] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@5#0] -- vbuaa=vbuc1 
     lda #'*'
     jmp __b5
-    // [91] phi from plot_chargen::@4 to plot_chargen::@5 [phi:plot_chargen::@4->plot_chargen::@5]
+    // [90] phi from plot_chargen::@4 to plot_chargen::@5 [phi:plot_chargen::@4->plot_chargen::@5]
   __b5_from___b4:
-    // [91] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@4->plot_chargen::@5#0] -- vbuaa=vbuc1 
+    // [90] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@4->plot_chargen::@5#0] -- vbuaa=vbuc1 
     lda #'.'
     jmp __b5
     // plot_chargen::@5
   __b5:
-    // [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 -- _deref_pbuz1=vbuaa 
+    // [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 -- _deref_pbuz1=vbuaa 
     ldy #0
     sta (sc),y
-    // [93] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 -- pbuz1=_inc_pbuz1 
+    // [92] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 -- pbuz1=_inc_pbuz1 
     inc.z sc
     bne !+
     inc.z sc+1
   !:
-    // [94] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
+    // [93] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
     asl.z bits
-    // [95] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 -- vbuxx=_inc_vbuxx 
+    // [94] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [96] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4 -- vbuxx_neq_vbuc1_then_la1 
+    // [95] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4 -- vbuxx_neq_vbuc1_then_la1 
     cpx #8
     bne __b4_from___b5
     jmp __b7
     // plot_chargen::@7
   __b7:
-    // [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1 
+    // [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$20
     clc
     adc.z sc
@@ -3876,16 +3564,16 @@ plot_chargen: {
     bcc !+
     inc.z sc+1
   !:
-    // [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1 
+    // [97] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1 
     inc.z y
-    // [99] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3 -- vbuz1_neq_vbuc1_then_la1 
+    // [98] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3 -- vbuz1_neq_vbuc1_then_la1 
     lda #8
     cmp.z y
     bne __b3_from___b7
     jmp __b8
     // plot_chargen::@8
   __b8:
-    // [100] *((const byte*) PROCPORT) ← (byte) $37 -- _deref_pbuc1=vbuc2 
+    // [99] *((const byte*) PROCPORT) ← (byte) $37 -- _deref_pbuc1=vbuc2 
     lda #$37
     sta PROCPORT
     // asm { cli  }
@@ -3893,80 +3581,8 @@ plot_chargen: {
     jmp __breturn
     // plot_chargen::@return
   __breturn:
-    // [102] return 
+    // [101] return 
     rts
-}
-  // mul8u
-// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
-// mul8u(byte register(X) a)
-mul8u: {
-    .const b = $a
-    .label mb = $a
-    .label res = $e
-    .label return = $e
-    // [104] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
-  __b1_from_mul8u:
-    // [104] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 
-    lda #<b
-    sta.z mb
-    lda #>b
-    sta.z mb+1
-    // [104] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 
-    lda #<0
-    sta.z res
-    lda #>0
-    sta.z res+1
-    // [104] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy 
-    jmp __b1
-    // mul8u::@1
-  __b1:
-    // [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 
-    cpx #0
-    bne __b2
-    jmp __breturn
-    // mul8u::@return
-  __breturn:
-    // [106] return 
-    rts
-    // mul8u::@2
-  __b2:
-    // [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 
-    txa
-    and #1
-    // [108] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 
-    cmp #0
-    beq __b3_from___b2
-    jmp __b4
-    // mul8u::@4
-  __b4:
-    // [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 
-    lda.z res
-    clc
-    adc.z mb
-    sta.z res
-    lda.z res+1
-    adc.z mb+1
-    sta.z res+1
-    // [110] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
-  __b3_from___b2:
-  __b3_from___b4:
-    // [110] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy 
-    jmp __b3
-    // mul8u::@3
-  __b3:
-    // [111] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
-    txa
-    lsr
-    tax
-    // [112] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 
-    asl.z mb
-    rol.z mb+1
-    // [104] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
-  __b1_from___b3:
-    // [104] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy 
-    // [104] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy 
-    // [104] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy 
-    jmp __b1
 }
   // keyboard_key_pressed
 // Determines whether a specific key is currently pressed by accessing the matrix directly
@@ -3975,30 +3591,30 @@ mul8u: {
 // Returns zero if the key is not pressed and a non-zero value if the key is currently pressed
 // keyboard_key_pressed(byte register(X) key)
 keyboard_key_pressed: {
-    // [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7 -- vbuyy=vbuxx_band_vbuc1 
+    // [103] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7 -- vbuyy=vbuxx_band_vbuc1 
     txa
     and #7
     tay
-    // [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 -- vbuaa=vbuxx_ror_3 
+    // [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 -- vbuaa=vbuxx_ror_3 
     txa
     lsr
     lsr
     lsr
-    // [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa 
+    // [105] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa 
     tax
-    // [117] call keyboard_matrix_read 
+    // [106] call keyboard_matrix_read 
     jsr keyboard_matrix_read
-    // [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
+    // [107] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
     jmp __b1
     // keyboard_key_pressed::@1
   __b1:
-    // [119] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
-    // [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy 
+    // [108] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
+    // [109] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy 
     and keyboard_matrix_col_bitmask,y
     jmp __breturn
     // keyboard_key_pressed::@return
   __breturn:
-    // [121] return 
+    // [110] return 
     rts
 }
   // keyboard_matrix_read
@@ -4009,16 +3625,16 @@ keyboard_key_pressed: {
 // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
 // keyboard_matrix_read(byte register(X) rowid)
 keyboard_matrix_read: {
-    // [122] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx 
+    // [111] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx 
     lda keyboard_matrix_row_bitmask,x
     sta CIA1_PORT_A
-    // [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 
+    // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 
     lda CIA1_PORT_B
     eor #$ff
     jmp __breturn
     // keyboard_matrix_read::@return
   __breturn:
-    // [124] return 
+    // [113] return 
     rts
 }
   // keyboard_get_keycode
@@ -4028,29 +3644,29 @@ keyboard_matrix_read: {
 // If there is no non-shifted key representing the char $3f is returned (representing RUN/STOP) .
 // keyboard_get_keycode(byte register(X) ch)
 keyboard_get_keycode: {
-    // [125] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0) -- vbuaa=pbuc1_derefidx_vbuxx 
+    // [114] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0) -- vbuaa=pbuc1_derefidx_vbuxx 
     lda keyboard_char_keycodes,x
     jmp __breturn
     // keyboard_get_keycode::@return
   __breturn:
-    // [126] return 
+    // [115] return 
     rts
 }
   // print_str_at
 // Print a string at a specific screen position
-// print_str_at(byte* zp($c) str, byte* zp($e) at)
+// print_str_at(byte* zp($a) str, byte* zp($c) at)
 print_str_at: {
-    .label at = $e
-    .label str = $c
-    // [128] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1]
+    .label at = $c
+    .label str = $a
+    // [117] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1]
   __b1_from_print_str_at:
   __b1_from___b2:
-    // [128] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy 
-    // [128] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy 
+    // [117] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy 
+    // [117] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy 
     jmp __b1
     // print_str_at::@1
   __b1:
-    // [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 
+    // [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 
     ldy #0
     lda (str),y
     cmp #0
@@ -4058,21 +3674,21 @@ print_str_at: {
     jmp __breturn
     // print_str_at::@return
   __breturn:
-    // [130] return 
+    // [119] return 
     rts
     // print_str_at::@2
   __b2:
-    // [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) -- _deref_pbuz1=_deref_pbuz2 
+    // [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) -- _deref_pbuz1=_deref_pbuz2 
     ldy #0
     lda (str),y
     ldy #0
     sta (at),y
-    // [132] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 -- pbuz1=_inc_pbuz1 
+    // [121] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 -- pbuz1=_inc_pbuz1 
     inc.z at
     bne !+
     inc.z at+1
   !:
-    // [133] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 -- pbuz1=_inc_pbuz1 
+    // [122] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 -- pbuz1=_inc_pbuz1 
     inc.z str
     bne !+
     inc.z str+1
@@ -4123,7 +3739,6 @@ Removing instruction jmp __b16
 Removing instruction jmp __b14
 Removing instruction jmp __b2
 Removing instruction jmp __b1
-Removing instruction jmp __b9
 Removing instruction jmp __b3
 Removing instruction jmp __b4
 Removing instruction jmp __b6
@@ -4133,16 +3748,11 @@ Removing instruction jmp __b8
 Removing instruction jmp __breturn
 Removing instruction jmp __b1
 Removing instruction jmp __breturn
-Removing instruction jmp __b4
-Removing instruction jmp __b3
-Removing instruction jmp __b1
-Removing instruction jmp __breturn
 Removing instruction jmp __breturn
 Removing instruction jmp __breturn
 Removing instruction jmp __b1
 Removing instruction jmp __breturn
 Succesful ASM optimization Pass5NextJumpElimination
-Removing instruction lda #>0
 Removing instruction ldy #0
 Succesful ASM optimization Pass5UnnecesaryLoadElimination
 Replacing label __b4_from___b20 with __b4
@@ -4155,7 +3765,6 @@ Replacing label __b12_from___b14 with __b12
 Replacing label __b1_from_plot_chargen with __b1
 Replacing label __b4_from___b5 with __b4
 Replacing label __b3_from___b7 with __b3
-Replacing label __b3_from___b2 with __b3
 Replacing label __b1_from___b2 with __b1
 Removing instruction __b1_from___bbegin:
 Removing instruction __b1:
@@ -4197,8 +3806,6 @@ Removing instruction __b3_from___b7:
 Removing instruction __b4_from___b5:
 Removing instruction __b6_from___b4:
 Removing instruction __b5_from___b6:
-Removing instruction __b3_from___b2:
-Removing instruction __b3_from___b4:
 Removing instruction __b1_from_print_str_at:
 Removing instruction __b1_from___b2:
 Succesful ASM optimization Pass5RedundantLabelElimination
@@ -4232,18 +3839,12 @@ Removing instruction plot_chargen_from___b16:
 Removing instruction __b5_from___b14:
 Removing instruction __b1_from___b2:
 Removing instruction __b2:
-Removing instruction mul8u_from___b1:
-Removing instruction __b9:
-Removing instruction __b3_from___b9:
+Removing instruction __b3_from___b1:
 Removing instruction __b4_from___b3:
 Removing instruction __b6:
 Removing instruction __b7:
 Removing instruction __b8:
 Removing instruction __breturn:
-Removing instruction __b1_from_mul8u:
-Removing instruction __breturn:
-Removing instruction __b4:
-Removing instruction __b1_from___b3:
 Removing instruction __b1:
 Removing instruction __breturn:
 Removing instruction __breturn:
@@ -4434,33 +4035,13 @@ FINAL SYMBOL TABLE
 (const byte*) main::str1[(byte) 3]  = (byte*) "f3"
 (const byte*) main::str2[(byte) 3]  = (byte*) "f5"
 (const byte*) main::str3[(byte) 3]  = (byte*) "f7"
-(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
-(byte~) mul8u::$1 reg byte a 2.00000002E8
-(label) mul8u::@1
-(label) mul8u::@2
-(label) mul8u::@3
-(label) mul8u::@4
-(label) mul8u::@return
-(byte) mul8u::a
-(byte) mul8u::a#0 reg byte x 1.00000001E8
-(byte) mul8u::a#1 reg byte x 55001.0
-(byte) mul8u::a#2 reg byte x 6.668333416666667E7
-(byte) mul8u::b
-(const byte) mul8u::b#0 b = (byte) $a
-(word) mul8u::mb
-(word) mul8u::mb#1 mb zp[2]:10 2.00000002E8
-(word) mul8u::mb#2 mb zp[2]:10 4.285714328571428E7
-(word) mul8u::res
-(word) mul8u::res#1 res zp[2]:14 2.00000002E8
-(word) mul8u::res#2 res zp[2]:14 5.0001667333333336E7
-(word) mul8u::res#6 res zp[2]:14 1.00000001E8
-(word) mul8u::return
-(word) mul8u::return#2 return zp[2]:14 20002.0
 (void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift)
-(word~) plot_chargen::$0 zp[2]:12 20002.0
-(word~) plot_chargen::$1 zp[2]:12 20002.0
-(byte~) plot_chargen::$10 reg byte a 2.00000002E8
-(word~) plot_chargen::$7 zp[2]:14 20002.0
+(word~) plot_chargen::$0 zp[2]:10 20002.0
+(word~) plot_chargen::$1 zp[2]:10 20002.0
+(byte~) plot_chargen::$16 reg byte a 20002.0
+(byte~) plot_chargen::$17 reg byte a 20002.0
+(byte~) plot_chargen::$6 reg byte a 20002.0
+(byte~) plot_chargen::$9 reg byte a 2.00000002E8
 (label) plot_chargen::@1
 (label) plot_chargen::@2
 (label) plot_chargen::@3
@@ -4469,7 +4050,6 @@ FINAL SYMBOL TABLE
 (label) plot_chargen::@6
 (label) plot_chargen::@7
 (label) plot_chargen::@8
-(label) plot_chargen::@9
 (label) plot_chargen::@return
 (byte) plot_chargen::bits
 (byte) plot_chargen::bits#0 bits zp[1]:9 2.0000002E7
@@ -4481,19 +4061,19 @@ FINAL SYMBOL TABLE
 (byte) plot_chargen::ch#1 reg byte a 1001.0
 (byte) plot_chargen::ch#2 reg byte a 500.5
 (byte*) plot_chargen::chargen
-(byte*) plot_chargen::chargen#0 chargen zp[2]:12 15001.5
-(byte*) plot_chargen::chargen#1 chargen zp[2]:12 20002.0
-(byte*) plot_chargen::chargen#5 chargen zp[2]:12 455454.6818181818
+(byte*) plot_chargen::chargen#0 chargen zp[2]:10 15001.5
+(byte*) plot_chargen::chargen#1 chargen zp[2]:10 20002.0
+(byte*) plot_chargen::chargen#4 chargen zp[2]:10 477143.0
 (byte) plot_chargen::pos
 (byte) plot_chargen::pos#0 reg byte y 202.0
 (byte) plot_chargen::pos#1 reg byte y 667.3333333333334
-(byte) plot_chargen::pos#2 reg byte y 1233.6666666666665
+(byte) plot_chargen::pos#2 reg byte y 2110.4
 (byte*) plot_chargen::sc
-(byte*) plot_chargen::sc#0 sc zp[2]:14 20002.0
-(byte*) plot_chargen::sc#1 sc zp[2]:14 5.250000075E7
-(byte*) plot_chargen::sc#2 sc zp[2]:14 6666667.333333333
-(byte*) plot_chargen::sc#3 sc zp[2]:14 5.1666667333333336E7
-(byte*) plot_chargen::sc#7 sc zp[2]:14 1.00050015E7
+(byte*) plot_chargen::sc#0 sc zp[2]:12 20002.0
+(byte*) plot_chargen::sc#1 sc zp[2]:12 5.250000075E7
+(byte*) plot_chargen::sc#2 sc zp[2]:12 6666667.333333333
+(byte*) plot_chargen::sc#3 sc zp[2]:12 5.1666667333333336E7
+(byte*) plot_chargen::sc#7 sc zp[2]:12 1.00050015E7
 (byte) plot_chargen::shift
 (byte) plot_chargen::shift#1 reg byte x 2002.0
 (byte) plot_chargen::shift#2 reg byte x 2200.4
@@ -4508,13 +4088,13 @@ FINAL SYMBOL TABLE
 (label) print_str_at::@2
 (label) print_str_at::@return
 (byte*) print_str_at::at
-(byte*) print_str_at::at#4 at zp[2]:14 1001.0
-(byte*) print_str_at::at#5 at zp[2]:14 1034.6666666666667
-(byte*) print_str_at::at#7 at zp[2]:14 101.0
+(byte*) print_str_at::at#4 at zp[2]:12 1001.0
+(byte*) print_str_at::at#5 at zp[2]:12 1034.6666666666667
+(byte*) print_str_at::at#7 at zp[2]:12 101.0
 (byte*) print_str_at::str
-(byte*) print_str_at::str#4 str zp[2]:12 2002.0
-(byte*) print_str_at::str#5 str zp[2]:12 1026.25
-(byte*) print_str_at::str#7 str zp[2]:12 101.0
+(byte*) print_str_at::str#4 str zp[2]:10 2002.0
+(byte*) print_str_at::str#5 str zp[2]:10 1026.25
+(byte*) print_str_at::str#7 str zp[2]:10 101.0
 
 zp[2]:2 [ main::sc#2 main::sc#1 ]
 zp[1]:4 [ main::i#2 main::i#1 ]
@@ -4529,11 +4109,9 @@ zp[1]:8 [ plot_chargen::y#2 plot_chargen::y#1 ]
 zp[1]:9 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
 reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ]
 reg byte a [ plot_chargen::c#2 ]
-reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
-zp[2]:10 [ mul8u::mb#2 mul8u::mb#1 ]
 reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ]
-zp[2]:12 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ]
-zp[2]:14 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ]
+zp[2]:10 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ]
+zp[2]:12 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ]
 reg byte a [ keyboard_key_pressed::return#2 ]
 reg byte a [ main::$15 ]
 reg byte a [ keyboard_key_pressed::return#10 ]
@@ -4548,8 +4126,10 @@ reg byte x [ keyboard_get_keycode::ch#0 ]
 reg byte a [ keyboard_get_keycode::return#2 ]
 reg byte a [ main::key#0 ]
 reg byte a [ keyboard_key_pressed::return#14 ]
-reg byte a [ plot_chargen::$10 ]
-reg byte a [ mul8u::$1 ]
+reg byte a [ plot_chargen::$16 ]
+reg byte a [ plot_chargen::$17 ]
+reg byte a [ plot_chargen::$6 ]
+reg byte a [ plot_chargen::$9 ]
 reg byte y [ keyboard_key_pressed::colidx#0 ]
 reg byte a [ keyboard_key_pressed::rowidx#0 ]
 reg byte x [ keyboard_matrix_read::rowid#0 ]
@@ -4561,7 +4141,7 @@ reg byte a [ keyboard_get_keycode::return#0 ]
 
 
 FINAL ASSEMBLER
-Score: 628983
+Score: 558979
 
   // File Comments
 // Allows analysis of the CHARGEN ROM font
@@ -4678,13 +4258,13 @@ main: {
     // print_str_at("f1", SCREEN+1)
     // [8] call print_str_at 
   // Plot 4 initial analysis chars
-    // [127] phi from main::@3 to print_str_at [phi:main::@3->print_str_at]
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi from main::@3 to print_str_at [phi:main::@3->print_str_at]
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1 [phi:main::@3->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1
     sta.z print_str_at.at
     lda #>SCREEN+1
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str [phi:main::@3->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str [phi:main::@3->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str
     sta.z print_str_at.str
     lda #>str
@@ -4694,13 +4274,13 @@ main: {
     // main::@17
     // print_str_at("f3", SCREEN+1+10)
     // [10] call print_str_at 
-    // [127] phi from main::@17 to print_str_at [phi:main::@17->print_str_at]
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi from main::@17 to print_str_at [phi:main::@17->print_str_at]
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $a [phi:main::@17->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$a
     sta.z print_str_at.at
     lda #>SCREEN+1+$a
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str1 [phi:main::@17->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str1 [phi:main::@17->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str1
     sta.z print_str_at.str
     lda #>str1
@@ -4710,13 +4290,13 @@ main: {
     // main::@18
     // print_str_at("f5", SCREEN+1+20)
     // [12] call print_str_at 
-    // [127] phi from main::@18 to print_str_at [phi:main::@18->print_str_at]
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi from main::@18 to print_str_at [phi:main::@18->print_str_at]
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $14 [phi:main::@18->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$14
     sta.z print_str_at.at
     lda #>SCREEN+1+$14
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str2 [phi:main::@18->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str2 [phi:main::@18->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str2
     sta.z print_str_at.str
     lda #>str2
@@ -4726,13 +4306,13 @@ main: {
     // main::@19
     // print_str_at("f7", SCREEN+1+30)
     // [14] call print_str_at 
-    // [127] phi from main::@19 to print_str_at [phi:main::@19->print_str_at]
-    // [127] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 
+    // [116] phi from main::@19 to print_str_at [phi:main::@19->print_str_at]
+    // [116] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN+(byte) 1+(byte) $1e [phi:main::@19->print_str_at#0] -- pbuz1=pbuc1 
     lda #<SCREEN+1+$1e
     sta.z print_str_at.at
     lda #>SCREEN+1+$1e
     sta.z print_str_at.at+1
-    // [127] phi (byte*) print_str_at::str#7 = (const byte*) main::str3 [phi:main::@19->print_str_at#1] -- pbuz1=pbuc1 
+    // [116] phi (byte*) print_str_at::str#7 = (const byte*) main::str3 [phi:main::@19->print_str_at#1] -- pbuz1=pbuc1 
     lda #<str3
     sta.z print_str_at.str
     lda #>str3
@@ -4773,8 +4353,8 @@ main: {
   __b5:
     // keyboard_key_pressed(KEY_F1)
     // [21] call keyboard_key_pressed 
-    // [113] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed]
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed]
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F1
     jsr keyboard_key_pressed
     // keyboard_key_pressed(KEY_F1)
@@ -4797,8 +4377,8 @@ main: {
   __b6:
     // keyboard_key_pressed(KEY_F3)
     // [27] call keyboard_key_pressed 
-    // [113] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed]
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed]
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F3
     jsr keyboard_key_pressed
     // keyboard_key_pressed(KEY_F3)
@@ -4821,8 +4401,8 @@ main: {
   __b7:
     // keyboard_key_pressed(KEY_F5)
     // [33] call keyboard_key_pressed 
-    // [113] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F5
     jsr keyboard_key_pressed
     // keyboard_key_pressed(KEY_F5)
@@ -4845,8 +4425,8 @@ main: {
   __b8:
     // keyboard_key_pressed(KEY_F7)
     // [39] call keyboard_key_pressed 
-    // [113] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7 [phi:main::@8->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7 [phi:main::@8->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_F7
     jsr keyboard_key_pressed
     // keyboard_key_pressed(KEY_F7)
@@ -4869,8 +4449,8 @@ main: {
   __b9:
     // keyboard_key_pressed(KEY_LSHIFT)
     // [45] call keyboard_key_pressed 
-    // [113] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed]
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT [phi:main::@9->keyboard_key_pressed#0] -- vbuxx=vbuc1 
+    // [102] phi from main::@9 to keyboard_key_pressed [phi:main::@9->keyboard_key_pressed]
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT [phi:main::@9->keyboard_key_pressed#0] -- vbuxx=vbuc1 
     ldx #KEY_LSHIFT
     jsr keyboard_key_pressed
     // keyboard_key_pressed(KEY_LSHIFT)
@@ -4922,8 +4502,8 @@ main: {
     // [57] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 -- vbuxx=vbuaa 
     tax
     // [58] call keyboard_key_pressed 
-    // [113] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed]
-    // [113] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy 
+    // [102] phi from main::@15 to keyboard_key_pressed [phi:main::@15->keyboard_key_pressed]
+    // [102] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@15->keyboard_key_pressed#0] -- register_copy 
     jsr keyboard_key_pressed
     // keyboard_key_pressed(key)
     // [59] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0
@@ -4998,11 +4578,10 @@ main: {
 // Render 8x8 char (ch) as pixels on char canvas #pos
 // plot_chargen(byte register(Y) pos, byte register(A) ch, byte register(X) shift)
 plot_chargen: {
-    .label __0 = $c
-    .label __1 = $c
-    .label __7 = $e
-    .label chargen = $c
-    .label sc = $e
+    .label __0 = $a
+    .label __1 = $a
+    .label chargen = $a
+    .label sc = $c
     .label bits = 9
     .label y = 8
     // asm
@@ -5045,101 +4624,100 @@ plot_chargen: {
     adc #>$800
     sta.z chargen+1
     // [78] phi from plot_chargen plot_chargen::@2 to plot_chargen::@1 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1]
-    // [78] phi (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1#0] -- register_copy 
+    // [78] phi (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@2->plot_chargen::@1#0] -- register_copy 
     // plot_chargen::@1
   __b1:
     // *PROCPORT = $32
     // [79] *((const byte*) PROCPORT) ← (byte) $32 -- _deref_pbuc1=vbuc2 
     lda #$32
     sta PROCPORT
-    // mul8u(pos, 10)
-    // [80] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 -- vbuxx=vbuyy 
+    // pos*10
+    // [80] (byte~) plot_chargen::$16 ← (byte) plot_chargen::pos#2 << (byte) 2 -- vbuaa=vbuyy_rol_2 
     tya
-    tax
-    // [81] call mul8u 
-    // [103] phi from plot_chargen::@1 to mul8u [phi:plot_chargen::@1->mul8u]
-    jsr mul8u
-    // mul8u(pos, 10)
-    // [82] (word) mul8u::return#2 ← (word) mul8u::res#2
-    // plot_chargen::@9
-    // [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2
-    // sc = SCREEN+40+1+mul8u(pos, 10)
-    // [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $28+(byte) 1 + (word~) plot_chargen::$7 -- pbuz1=pbuc1_plus_vwuz1 
+    asl
+    asl
+    // [81] (byte~) plot_chargen::$17 ← (byte~) plot_chargen::$16 + (byte) plot_chargen::pos#2 -- vbuaa=vbuaa_plus_vbuyy 
+    sty.z $ff
     clc
-    lda.z sc
-    adc #<SCREEN+$28+1
+    adc.z $ff
+    // [82] (byte~) plot_chargen::$6 ← (byte~) plot_chargen::$17 << (byte) 1 -- vbuaa=vbuaa_rol_1 
+    asl
+    // sc = SCREEN + 41 + pos*10
+    // [83] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN+(byte) $29 + (byte~) plot_chargen::$6 -- pbuz1=pbuc1_plus_vbuaa 
+    clc
+    adc #<SCREEN+$29
     sta.z sc
-    lda.z sc+1
-    adc #>SCREEN+$28+1
+    lda #>SCREEN+$29
+    adc #0
     sta.z sc+1
-    // [85] phi from plot_chargen::@9 to plot_chargen::@3 [phi:plot_chargen::@9->plot_chargen::@3]
-    // [85] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@9->plot_chargen::@3#0] -- register_copy 
-    // [85] phi (byte) plot_chargen::y#2 = (byte) 0 [phi:plot_chargen::@9->plot_chargen::@3#1] -- vbuz1=vbuc1 
+    // [84] phi from plot_chargen::@1 to plot_chargen::@3 [phi:plot_chargen::@1->plot_chargen::@3]
+    // [84] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@1->plot_chargen::@3#0] -- register_copy 
+    // [84] phi (byte) plot_chargen::y#2 = (byte) 0 [phi:plot_chargen::@1->plot_chargen::@3#1] -- vbuz1=vbuc1 
     lda #0
     sta.z y
-    // [85] phi from plot_chargen::@7 to plot_chargen::@3 [phi:plot_chargen::@7->plot_chargen::@3]
-    // [85] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@3#0] -- register_copy 
-    // [85] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@3#1] -- register_copy 
+    // [84] phi from plot_chargen::@7 to plot_chargen::@3 [phi:plot_chargen::@7->plot_chargen::@3]
+    // [84] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@3#0] -- register_copy 
+    // [84] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@3#1] -- register_copy 
     // plot_chargen::@3
   __b3:
     // bits = chargen[y]
-    // [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 
+    // [85] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#4 + (byte) plot_chargen::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 
     ldy.z y
     lda (chargen),y
     sta.z bits
-    // [87] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4]
-    // [87] phi (byte) plot_chargen::x#2 = (byte) 0 [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuxx=vbuc1 
+    // [86] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4]
+    // [86] phi (byte) plot_chargen::x#2 = (byte) 0 [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuxx=vbuc1 
     ldx #0
-    // [87] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@3->plot_chargen::@4#1] -- register_copy 
-    // [87] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@3->plot_chargen::@4#2] -- register_copy 
-    // [87] phi from plot_chargen::@5 to plot_chargen::@4 [phi:plot_chargen::@5->plot_chargen::@4]
-    // [87] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@5->plot_chargen::@4#0] -- register_copy 
-    // [87] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@5->plot_chargen::@4#1] -- register_copy 
-    // [87] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@5->plot_chargen::@4#2] -- register_copy 
+    // [86] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@3->plot_chargen::@4#1] -- register_copy 
+    // [86] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@3->plot_chargen::@4#2] -- register_copy 
+    // [86] phi from plot_chargen::@5 to plot_chargen::@4 [phi:plot_chargen::@5->plot_chargen::@4]
+    // [86] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@5->plot_chargen::@4#0] -- register_copy 
+    // [86] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@5->plot_chargen::@4#1] -- register_copy 
+    // [86] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@5->plot_chargen::@4#2] -- register_copy 
     // plot_chargen::@4
   __b4:
     // bits & $80
-    // [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 
+    // [87] (byte~) plot_chargen::$9 ← (byte) plot_chargen::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 
     lda #$80
     and.z bits
     // if((bits & $80) != 0)
-    // [89] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5 -- vbuaa_eq_0_then_la1 
+    // [88] if((byte~) plot_chargen::$9==(byte) 0) goto plot_chargen::@5 -- vbuaa_eq_0_then_la1 
     cmp #0
     beq b1
-    // [90] phi from plot_chargen::@4 to plot_chargen::@6 [phi:plot_chargen::@4->plot_chargen::@6]
+    // [89] phi from plot_chargen::@4 to plot_chargen::@6 [phi:plot_chargen::@4->plot_chargen::@6]
     // plot_chargen::@6
-    // [91] phi from plot_chargen::@6 to plot_chargen::@5 [phi:plot_chargen::@6->plot_chargen::@5]
-    // [91] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@5#0] -- vbuaa=vbuc1 
+    // [90] phi from plot_chargen::@6 to plot_chargen::@5 [phi:plot_chargen::@6->plot_chargen::@5]
+    // [90] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@5#0] -- vbuaa=vbuc1 
     lda #'*'
     jmp __b5
-    // [91] phi from plot_chargen::@4 to plot_chargen::@5 [phi:plot_chargen::@4->plot_chargen::@5]
+    // [90] phi from plot_chargen::@4 to plot_chargen::@5 [phi:plot_chargen::@4->plot_chargen::@5]
   b1:
-    // [91] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@4->plot_chargen::@5#0] -- vbuaa=vbuc1 
+    // [90] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@4->plot_chargen::@5#0] -- vbuaa=vbuc1 
     lda #'.'
     // plot_chargen::@5
   __b5:
     // *sc = c
-    // [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 -- _deref_pbuz1=vbuaa 
+    // [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 -- _deref_pbuz1=vbuaa 
     ldy #0
     sta (sc),y
     // sc++;
-    // [93] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 -- pbuz1=_inc_pbuz1 
+    // [92] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 -- pbuz1=_inc_pbuz1 
     inc.z sc
     bne !+
     inc.z sc+1
   !:
     // bits = bits*2
-    // [94] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
+    // [93] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
     asl.z bits
     // for(byte x:0..7)
-    // [95] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 -- vbuxx=_inc_vbuxx 
+    // [94] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [96] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4 -- vbuxx_neq_vbuc1_then_la1 
+    // [95] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4 -- vbuxx_neq_vbuc1_then_la1 
     cpx #8
     bne __b4
     // plot_chargen::@7
     // sc = sc+32
-    // [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1 
+    // [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$20
     clc
     adc.z sc
@@ -5148,15 +4726,15 @@ plot_chargen: {
     inc.z sc+1
   !:
     // for(byte y:0..7)
-    // [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1 
+    // [97] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 -- vbuz1=_inc_vbuz1 
     inc.z y
-    // [99] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3 -- vbuz1_neq_vbuc1_then_la1 
+    // [98] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3 -- vbuz1_neq_vbuc1_then_la1 
     lda #8
     cmp.z y
     bne __b3
     // plot_chargen::@8
     // *PROCPORT = $37
-    // [100] *((const byte*) PROCPORT) ← (byte) $37 -- _deref_pbuc1=vbuc2 
+    // [99] *((const byte*) PROCPORT) ← (byte) $37 -- _deref_pbuc1=vbuc2 
     lda #$37
     sta PROCPORT
     // asm
@@ -5164,76 +4742,8 @@ plot_chargen: {
     cli
     // plot_chargen::@return
     // }
-    // [102] return 
+    // [101] return 
     rts
-}
-  // mul8u
-// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
-// mul8u(byte register(X) a)
-mul8u: {
-    .const b = $a
-    .label mb = $a
-    .label res = $e
-    .label return = $e
-    // [104] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
-    // [104] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 
-    lda #<b
-    sta.z mb
-    lda #>b
-    sta.z mb+1
-    // [104] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 
-    lda #<0
-    sta.z res
-    sta.z res+1
-    // [104] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy 
-    // mul8u::@1
-  __b1:
-    // while(a!=0)
-    // [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 
-    cpx #0
-    bne __b2
-    // mul8u::@return
-    // }
-    // [106] return 
-    rts
-    // mul8u::@2
-  __b2:
-    // a&1
-    // [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 
-    txa
-    and #1
-    // if( (a&1) != 0)
-    // [108] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 
-    cmp #0
-    beq __b3
-    // mul8u::@4
-    // res = res + mb
-    // [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 
-    lda.z res
-    clc
-    adc.z mb
-    sta.z res
-    lda.z res+1
-    adc.z mb+1
-    sta.z res+1
-    // [110] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
-    // [110] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy 
-    // mul8u::@3
-  __b3:
-    // a = a>>1
-    // [111] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
-    txa
-    lsr
-    tax
-    // mb = mb<<1
-    // [112] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 
-    asl.z mb
-    rol.z mb+1
-    // [104] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
-    // [104] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy 
-    // [104] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy 
-    // [104] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy 
-    jmp __b1
 }
   // keyboard_key_pressed
 // Determines whether a specific key is currently pressed by accessing the matrix directly
@@ -5243,30 +4753,30 @@ mul8u: {
 // keyboard_key_pressed(byte register(X) key)
 keyboard_key_pressed: {
     // colidx = key&7
-    // [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7 -- vbuyy=vbuxx_band_vbuc1 
+    // [103] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7 -- vbuyy=vbuxx_band_vbuc1 
     txa
     and #7
     tay
     // rowidx = key>>3
-    // [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 -- vbuaa=vbuxx_ror_3 
+    // [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 -- vbuaa=vbuxx_ror_3 
     txa
     lsr
     lsr
     lsr
     // keyboard_matrix_read(rowidx)
-    // [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa 
+    // [105] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa 
     tax
-    // [117] call keyboard_matrix_read 
+    // [106] call keyboard_matrix_read 
     jsr keyboard_matrix_read
-    // [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
+    // [107] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
     // keyboard_key_pressed::@1
-    // [119] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
+    // [108] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
     // keyboard_matrix_read(rowidx) & keyboard_matrix_col_bitmask[colidx]
-    // [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy 
+    // [109] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy 
     and keyboard_matrix_col_bitmask,y
     // keyboard_key_pressed::@return
     // }
-    // [121] return 
+    // [110] return 
     rts
 }
   // keyboard_matrix_read
@@ -5278,16 +4788,16 @@ keyboard_key_pressed: {
 // keyboard_matrix_read(byte register(X) rowid)
 keyboard_matrix_read: {
     // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid]
-    // [122] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx 
+    // [111] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx 
     lda keyboard_matrix_row_bitmask,x
     sta CIA1_PORT_A
     // ~*CIA1_PORT_B
-    // [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 
+    // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 
     lda CIA1_PORT_B
     eor #$ff
     // keyboard_matrix_read::@return
     // }
-    // [124] return 
+    // [113] return 
     rts
 }
   // keyboard_get_keycode
@@ -5298,48 +4808,48 @@ keyboard_matrix_read: {
 // keyboard_get_keycode(byte register(X) ch)
 keyboard_get_keycode: {
     // return keyboard_char_keycodes[ch];
-    // [125] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0) -- vbuaa=pbuc1_derefidx_vbuxx 
+    // [114] (byte) keyboard_get_keycode::return#0 ← *((const byte*) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch#0) -- vbuaa=pbuc1_derefidx_vbuxx 
     lda keyboard_char_keycodes,x
     // keyboard_get_keycode::@return
     // }
-    // [126] return 
+    // [115] return 
     rts
 }
   // print_str_at
 // Print a string at a specific screen position
-// print_str_at(byte* zp($c) str, byte* zp($e) at)
+// print_str_at(byte* zp($a) str, byte* zp($c) at)
 print_str_at: {
-    .label at = $e
-    .label str = $c
-    // [128] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1]
-    // [128] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy 
-    // [128] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy 
+    .label at = $c
+    .label str = $a
+    // [117] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1]
+    // [117] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy 
+    // [117] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy 
     // print_str_at::@1
   __b1:
     // while(*str)
-    // [129] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 
+    // [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 -- vbuc1_neq__deref_pbuz1_then_la1 
     ldy #0
     lda (str),y
     cmp #0
     bne __b2
     // print_str_at::@return
     // }
-    // [130] return 
+    // [119] return 
     rts
     // print_str_at::@2
   __b2:
     // *(at++) = *(str++)
-    // [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) -- _deref_pbuz1=_deref_pbuz2 
+    // [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) -- _deref_pbuz1=_deref_pbuz2 
     ldy #0
     lda (str),y
     sta (at),y
     // *(at++) = *(str++);
-    // [132] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 -- pbuz1=_inc_pbuz1 
+    // [121] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 -- pbuz1=_inc_pbuz1 
     inc.z at
     bne !+
     inc.z at+1
   !:
-    // [133] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 -- pbuz1=_inc_pbuz1 
+    // [122] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 -- pbuz1=_inc_pbuz1 
     inc.z str
     bne !+
     inc.z str+1
diff --git a/src/test/ref/examples/chargen/chargen-analysis.sym b/src/test/ref/examples/chargen/chargen-analysis.sym
index 5bc63a9dd..4efd6071f 100644
--- a/src/test/ref/examples/chargen/chargen-analysis.sym
+++ b/src/test/ref/examples/chargen/chargen-analysis.sym
@@ -161,33 +161,13 @@
 (const byte*) main::str1[(byte) 3]  = (byte*) "f3"
 (const byte*) main::str2[(byte) 3]  = (byte*) "f5"
 (const byte*) main::str3[(byte) 3]  = (byte*) "f7"
-(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
-(byte~) mul8u::$1 reg byte a 2.00000002E8
-(label) mul8u::@1
-(label) mul8u::@2
-(label) mul8u::@3
-(label) mul8u::@4
-(label) mul8u::@return
-(byte) mul8u::a
-(byte) mul8u::a#0 reg byte x 1.00000001E8
-(byte) mul8u::a#1 reg byte x 55001.0
-(byte) mul8u::a#2 reg byte x 6.668333416666667E7
-(byte) mul8u::b
-(const byte) mul8u::b#0 b = (byte) $a
-(word) mul8u::mb
-(word) mul8u::mb#1 mb zp[2]:10 2.00000002E8
-(word) mul8u::mb#2 mb zp[2]:10 4.285714328571428E7
-(word) mul8u::res
-(word) mul8u::res#1 res zp[2]:14 2.00000002E8
-(word) mul8u::res#2 res zp[2]:14 5.0001667333333336E7
-(word) mul8u::res#6 res zp[2]:14 1.00000001E8
-(word) mul8u::return
-(word) mul8u::return#2 return zp[2]:14 20002.0
 (void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift)
-(word~) plot_chargen::$0 zp[2]:12 20002.0
-(word~) plot_chargen::$1 zp[2]:12 20002.0
-(byte~) plot_chargen::$10 reg byte a 2.00000002E8
-(word~) plot_chargen::$7 zp[2]:14 20002.0
+(word~) plot_chargen::$0 zp[2]:10 20002.0
+(word~) plot_chargen::$1 zp[2]:10 20002.0
+(byte~) plot_chargen::$16 reg byte a 20002.0
+(byte~) plot_chargen::$17 reg byte a 20002.0
+(byte~) plot_chargen::$6 reg byte a 20002.0
+(byte~) plot_chargen::$9 reg byte a 2.00000002E8
 (label) plot_chargen::@1
 (label) plot_chargen::@2
 (label) plot_chargen::@3
@@ -196,7 +176,6 @@
 (label) plot_chargen::@6
 (label) plot_chargen::@7
 (label) plot_chargen::@8
-(label) plot_chargen::@9
 (label) plot_chargen::@return
 (byte) plot_chargen::bits
 (byte) plot_chargen::bits#0 bits zp[1]:9 2.0000002E7
@@ -208,19 +187,19 @@
 (byte) plot_chargen::ch#1 reg byte a 1001.0
 (byte) plot_chargen::ch#2 reg byte a 500.5
 (byte*) plot_chargen::chargen
-(byte*) plot_chargen::chargen#0 chargen zp[2]:12 15001.5
-(byte*) plot_chargen::chargen#1 chargen zp[2]:12 20002.0
-(byte*) plot_chargen::chargen#5 chargen zp[2]:12 455454.6818181818
+(byte*) plot_chargen::chargen#0 chargen zp[2]:10 15001.5
+(byte*) plot_chargen::chargen#1 chargen zp[2]:10 20002.0
+(byte*) plot_chargen::chargen#4 chargen zp[2]:10 477143.0
 (byte) plot_chargen::pos
 (byte) plot_chargen::pos#0 reg byte y 202.0
 (byte) plot_chargen::pos#1 reg byte y 667.3333333333334
-(byte) plot_chargen::pos#2 reg byte y 1233.6666666666665
+(byte) plot_chargen::pos#2 reg byte y 2110.4
 (byte*) plot_chargen::sc
-(byte*) plot_chargen::sc#0 sc zp[2]:14 20002.0
-(byte*) plot_chargen::sc#1 sc zp[2]:14 5.250000075E7
-(byte*) plot_chargen::sc#2 sc zp[2]:14 6666667.333333333
-(byte*) plot_chargen::sc#3 sc zp[2]:14 5.1666667333333336E7
-(byte*) plot_chargen::sc#7 sc zp[2]:14 1.00050015E7
+(byte*) plot_chargen::sc#0 sc zp[2]:12 20002.0
+(byte*) plot_chargen::sc#1 sc zp[2]:12 5.250000075E7
+(byte*) plot_chargen::sc#2 sc zp[2]:12 6666667.333333333
+(byte*) plot_chargen::sc#3 sc zp[2]:12 5.1666667333333336E7
+(byte*) plot_chargen::sc#7 sc zp[2]:12 1.00050015E7
 (byte) plot_chargen::shift
 (byte) plot_chargen::shift#1 reg byte x 2002.0
 (byte) plot_chargen::shift#2 reg byte x 2200.4
@@ -235,13 +214,13 @@
 (label) print_str_at::@2
 (label) print_str_at::@return
 (byte*) print_str_at::at
-(byte*) print_str_at::at#4 at zp[2]:14 1001.0
-(byte*) print_str_at::at#5 at zp[2]:14 1034.6666666666667
-(byte*) print_str_at::at#7 at zp[2]:14 101.0
+(byte*) print_str_at::at#4 at zp[2]:12 1001.0
+(byte*) print_str_at::at#5 at zp[2]:12 1034.6666666666667
+(byte*) print_str_at::at#7 at zp[2]:12 101.0
 (byte*) print_str_at::str
-(byte*) print_str_at::str#4 str zp[2]:12 2002.0
-(byte*) print_str_at::str#5 str zp[2]:12 1026.25
-(byte*) print_str_at::str#7 str zp[2]:12 101.0
+(byte*) print_str_at::str#4 str zp[2]:10 2002.0
+(byte*) print_str_at::str#5 str zp[2]:10 1026.25
+(byte*) print_str_at::str#7 str zp[2]:10 101.0
 
 zp[2]:2 [ main::sc#2 main::sc#1 ]
 zp[1]:4 [ main::i#2 main::i#1 ]
@@ -256,11 +235,9 @@ zp[1]:8 [ plot_chargen::y#2 plot_chargen::y#1 ]
 zp[1]:9 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ]
 reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ]
 reg byte a [ plot_chargen::c#2 ]
-reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
-zp[2]:10 [ mul8u::mb#2 mul8u::mb#1 ]
 reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ]
-zp[2]:12 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ]
-zp[2]:14 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$7 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ]
+zp[2]:10 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ]
+zp[2]:12 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ]
 reg byte a [ keyboard_key_pressed::return#2 ]
 reg byte a [ main::$15 ]
 reg byte a [ keyboard_key_pressed::return#10 ]
@@ -275,8 +252,10 @@ reg byte x [ keyboard_get_keycode::ch#0 ]
 reg byte a [ keyboard_get_keycode::return#2 ]
 reg byte a [ main::key#0 ]
 reg byte a [ keyboard_key_pressed::return#14 ]
-reg byte a [ plot_chargen::$10 ]
-reg byte a [ mul8u::$1 ]
+reg byte a [ plot_chargen::$16 ]
+reg byte a [ plot_chargen::$17 ]
+reg byte a [ plot_chargen::$6 ]
+reg byte a [ plot_chargen::$9 ]
 reg byte y [ keyboard_key_pressed::colidx#0 ]
 reg byte a [ keyboard_key_pressed::rowidx#0 ]
 reg byte x [ keyboard_matrix_read::rowid#0 ]
diff --git a/src/test/ref/examples/font-2x2/font-2x2.asm b/src/test/ref/examples/font-2x2/font-2x2.asm
new file mode 100644
index 000000000..6c76a8d84
--- /dev/null
+++ b/src/test/ref/examples/font-2x2/font-2x2.asm
@@ -0,0 +1,480 @@
+// Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+  // Processor Port Register controlling RAM/ROM configuration and the datasette
+  .label PROCPORT = 1
+  // RAM in $A000, $E000 CHAR ROM in $D000
+  .const PROCPORT_RAM_CHARROM = 1
+  // BASIC in $A000, I/O in $D000, KERNEL in $E000
+  .const PROCPORT_BASIC_KERNEL_IO = 7
+  // The address of the CHARGEN character set
+  .label CHARGEN = $d000
+  .label D018 = $d018
+  .label SCREEN = $400
+  .label FONT_ORIGINAL = $2000
+  .label FONT_COMPRESSED = $2800
+main: {
+    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>FONT_COMPRESSED)/4&$f
+    .label c = 3
+    .label x = 4
+    .label y = 2
+    // asm
+    // Create 2x2 font from CHARGEN
+    sei
+    // *PROCPORT = PROCPORT_RAM_CHARROM
+    lda #PROCPORT_RAM_CHARROM
+    sta PROCPORT
+    // font_2x2(CHARGEN, FONT_ORIGINAL)
+    jsr font_2x2
+    // *PROCPORT = PROCPORT_BASIC_KERNEL_IO
+    lda #PROCPORT_BASIC_KERNEL_IO
+    sta PROCPORT
+    // asm
+    cli
+    // font_compress(FONT_ORIGINAL, FONT_COMPRESSED, FONT_COMPRESSED_MAP)
+    jsr font_compress
+    // *D018 = toD018(SCREEN, FONT_COMPRESSED)
+    // Show compressed font
+    lda #toD0181_return
+    sta D018
+    // memset(SCREEN, FONT_COMPRESSED_MAP[' '], 0x0400)
+    ldx FONT_COMPRESSED_MAP+' '
+  // Clear the screen
+    jsr memset
+    lda #0
+    sta.z y
+    sta.z c
+  __b1:
+    lda #0
+    sta.z x
+  __b2:
+    // show(c++, x, y, FONT_COMPRESSED_MAP)
+    ldx.z x
+    lda.z y
+    jsr show
+    // show(c++, x, y, FONT_COMPRESSED_MAP);
+    inc.z c
+    // for(char x:0..7)
+    inc.z x
+    lda #8
+    cmp.z x
+    bne __b2
+    // for(char y:0..7)
+    inc.z y
+    cmp.z y
+    bne __b1
+  __b4:
+    // (*(SCREEN+999))++;
+    inc SCREEN+$3e7
+    jmp __b4
+}
+// Show a 2x2 char on the screen at 2x2-position (x, y) using a font compress mapping
+// show(byte zp(3) c, byte register(X) x, byte register(A) y)
+show: {
+    .label __0 = $f
+    .label __1 = $f
+    .label __2 = $f
+    .label c = 3
+    .label ptr = $f
+    .label __8 = $11
+    .label __9 = $f
+    // (unsigned int)y
+    sta.z __0
+    lda #0
+    sta.z __0+1
+    // (unsigned int)y*80
+    lda.z __0
+    asl
+    sta.z __8
+    lda.z __0+1
+    rol
+    sta.z __8+1
+    asl.z __8
+    rol.z __8+1
+    lda.z __9
+    clc
+    adc.z __8
+    sta.z __9
+    lda.z __9+1
+    adc.z __8+1
+    sta.z __9+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    // SCREEN + (unsigned int)y*80
+    clc
+    lda.z __2
+    adc #<SCREEN
+    sta.z __2
+    lda.z __2+1
+    adc #>SCREEN
+    sta.z __2+1
+    // x*2
+    txa
+    asl
+    // ptr = SCREEN + (unsigned int)y*80 + x*2
+    clc
+    adc.z ptr
+    sta.z ptr
+    bcc !+
+    inc.z ptr+1
+  !:
+    // ptr[0] = font_mapping[c]
+    ldy.z c
+    lda FONT_COMPRESSED_MAP,y
+    ldy #0
+    sta (ptr),y
+    // c+0x40
+    ldx.z c
+    // ptr[1] = font_mapping[c+0x40]
+    lda FONT_COMPRESSED_MAP+$40,x
+    ldy #1
+    sta (ptr),y
+    // c+0x80
+    txa
+    // ptr[40] = font_mapping[c+0x80]
+    tay
+    lda FONT_COMPRESSED_MAP+$80,y
+    ldy #$28
+    sta (ptr),y
+    // c+0xc0
+    txa
+    // ptr[41] = font_mapping[c+0xc0]
+    tay
+    lda FONT_COMPRESSED_MAP+$c0,y
+    ldy #$29
+    sta (ptr),y
+    // }
+    rts
+}
+// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
+// memset(byte register(X) c)
+memset: {
+    .label str = SCREEN
+    .const num = $400
+    .label end = str+num
+    .label dst = $d
+    lda #<str
+    sta.z dst
+    lda #>str
+    sta.z dst+1
+  __b1:
+    // for(char* dst = str; dst!=end; dst++)
+    lda.z dst+1
+    cmp #>end
+    bne __b2
+    lda.z dst
+    cmp #<end
+    bne __b2
+    // }
+    rts
+  __b2:
+    // *dst = c
+    txa
+    ldy #0
+    sta (dst),y
+    // for(char* dst = str; dst!=end; dst++)
+    inc.z dst
+    bne !+
+    inc.z dst+1
+  !:
+    jmp __b1
+}
+// Compress a font finding identical characters
+// The compressed font is put into font_compressed and the compress_mapping is updated
+// so that compress_mapping[c] points to the char in font_compressed that is identical to char c in font_original
+// Returns the size of the compressed font (in chars)
+font_compress: {
+    .label next_original = $d
+    .label i = $a
+    .label next_compressed = 5
+    .label font_size = 9
+    lda #<FONT_COMPRESSED
+    sta.z next_compressed
+    lda #>FONT_COMPRESSED
+    sta.z next_compressed+1
+    lda #0
+    sta.z i
+    sta.z font_size
+    lda #<FONT_ORIGINAL
+    sta.z next_original
+    lda #>FONT_ORIGINAL
+    sta.z next_original+1
+  __b1:
+    // font_find(next_original, font_compressed, font_size)
+    jsr font_find
+    // font_find(next_original, font_compressed, font_size)
+    txa
+    // found = font_find(next_original, font_compressed, font_size)
+    // if(found==0xff)
+    cmp #$ff
+    bne __b7
+    ldy #0
+  // Glyph not found - create it
+  __b3:
+    // next_compressed[l] = next_original[l]
+    lda (next_original),y
+    sta (next_compressed),y
+    // for(char l:0..7)
+    iny
+    cpy #8
+    bne __b3
+    // next_compressed += 8
+    lda #8
+    clc
+    adc.z next_compressed
+    sta.z next_compressed
+    bcc !+
+    inc.z next_compressed+1
+  !:
+    // font_size++;
+    ldx.z font_size
+    inx
+    lda.z font_size
+  __b2:
+    // compress_mapping[i] = found
+    ldy.z i
+    sta FONT_COMPRESSED_MAP,y
+    // next_original += 8
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // for(char i: 0..0xff)
+    inc.z i
+    lda.z i
+    cmp #0
+    bne __b6
+    // }
+    rts
+  __b6:
+    stx.z font_size
+    jmp __b1
+  __b7:
+    ldx.z font_size
+    jmp __b2
+}
+// Look for a glyph within a font
+// Only looks at the first font_size glyphs
+// Returns the index of the glyph within the font. Returns 0xff if the glyph is not found.
+// font_find(byte* zp($d) glyph, byte* zp(7) font, byte zp(9) font_size)
+font_find: {
+    .label glyph = $d
+    .label font_size = 9
+    .label font = 7
+    lda #<FONT_COMPRESSED
+    sta.z font
+    lda #>FONT_COMPRESSED
+    sta.z font+1
+    ldx #0
+  __b1:
+    // for(char i=0;i<font_size;i++)
+    cpx.z font_size
+    bcc b1
+    ldx #$ff
+    // }
+    rts
+  b1:
+    ldy #0
+  __b2:
+    // if(glyph[l]!=font[l])
+    lda (glyph),y
+    cmp (font),y
+    beq __b3
+    lda #0
+    jmp __b4
+  __b3:
+    // for(char l:0..7)
+    iny
+    cpy #8
+    bne __b2
+    lda #1
+  __b4:
+    // if(found)
+    cmp #0
+    beq __b5
+    rts
+  __b5:
+    // font += 8
+    lda #8
+    clc
+    adc.z font
+    sta.z font
+    bcc !+
+    inc.z font+1
+  !:
+    // for(char i=0;i<font_size;i++)
+    inx
+    jmp __b1
+}
+// Create a 2x2-font by doubling all pixels of the 64 first chars
+font_2x2: {
+    .label __5 = $d
+    .label __7 = $d
+    .label next_2x2_left = 5
+    .label next_2x2_right = $11
+    .label glyph_bits = $c
+    .label glyph_bits_2x2 = $d
+    .label l2 = $b
+    .label l = $a
+    .label next_2x2_left_1 = $f
+    .label next_2x2 = 5
+    .label next_original = 7
+    .label c = 9
+    lda #0
+    sta.z c
+    lda #<CHARGEN
+    sta.z next_original
+    lda #>CHARGEN
+    sta.z next_original+1
+    lda #<FONT_ORIGINAL
+    sta.z next_2x2_left
+    lda #>FONT_ORIGINAL
+    sta.z next_2x2_left+1
+  __b1:
+    // next_2x2_right = next_2x2 + 0x40*8
+    lda.z next_2x2_left
+    clc
+    adc #<$40*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$40*8
+    sta.z next_2x2_right+1
+    lda.z next_2x2_left
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    sta.z next_2x2_left_1+1
+    lda #0
+    sta.z l2
+    sta.z l
+  __b2:
+    // glyph_bits = next_original[l]
+    ldy.z l
+    lda (next_original),y
+    sta.z glyph_bits
+    ldy #0
+    tya
+    sta.z glyph_bits_2x2
+    sta.z glyph_bits_2x2+1
+  __b3:
+    // glyph_bits&0x80
+    lda #$80
+    and.z glyph_bits
+    // (glyph_bits&0x80)?1uc:0uc
+    cmp #0
+    bne __b4
+    ldx #0
+    jmp __b5
+  __b4:
+    // (glyph_bits&0x80)?1uc:0uc
+    ldx #1
+  __b5:
+    // glyph_bits_2x2<<1
+    asl.z __5
+    rol.z __5+1
+    // glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit
+    txa
+    ora.z glyph_bits_2x2
+    sta.z glyph_bits_2x2
+    // glyph_bits_2x2<<1
+    asl.z __7
+    rol.z __7+1
+    // glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit
+    txa
+    ora.z glyph_bits_2x2
+    sta.z glyph_bits_2x2
+    // glyph_bits <<= 1
+    // Move to next bit
+    asl.z glyph_bits
+    // for(char b: 0..7)
+    iny
+    cpy #8
+    bne __b3
+    // >glyph_bits_2x2
+    lda.z glyph_bits_2x2+1
+    // next_2x2_left[l2] = >glyph_bits_2x2
+    // Put the generated 2x2-line into the 2x2-font twice
+    ldy.z l2
+    sta (next_2x2_left_1),y
+    // l2+1
+    iny
+    // next_2x2_left[l2+1] = >glyph_bits_2x2
+    sta (next_2x2_left_1),y
+    // <glyph_bits_2x2
+    lda.z glyph_bits_2x2
+    // next_2x2_right[l2] = <glyph_bits_2x2
+    ldy.z l2
+    sta (next_2x2_right),y
+    // l2+1
+    iny
+    // next_2x2_right[l2+1] = <glyph_bits_2x2
+    sta (next_2x2_right),y
+    // l2 += 2
+    lda.z l2
+    clc
+    adc #2
+    sta.z l2
+    // if(l2==8)
+    lda #8
+    cmp.z l2
+    bne __b8
+    // next_2x2_left = next_2x2 + 0x80*8
+    lda.z next_2x2_left
+    clc
+    adc #<$80*8
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    adc #>$80*8
+    sta.z next_2x2_left_1+1
+    // next_2x2_right = next_2x2 + 0xc0*8
+    lda.z next_2x2_left
+    clc
+    adc #<$c0*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$c0*8
+    sta.z next_2x2_right+1
+    lda #0
+    sta.z l2
+  __b8:
+    // for(char l: 0..7)
+    inc.z l
+    lda #8
+    cmp.z l
+    bne __b2
+    // next_2x2 += 8
+    clc
+    adc.z next_2x2
+    sta.z next_2x2
+    bcc !+
+    inc.z next_2x2+1
+  !:
+    // next_original += 8
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // for(char c: 0..0x3f)
+    inc.z c
+    lda #$40
+    cmp.z c
+    beq !__b1+
+    jmp __b1
+  !__b1:
+    // }
+    rts
+}
+  .align $100
+  FONT_COMPRESSED_MAP: .fill $100, 0
diff --git a/src/test/ref/examples/font-2x2/font-2x2.cfg b/src/test/ref/examples/font-2x2/font-2x2.cfg
new file mode 100644
index 000000000..daf86250d
--- /dev/null
+++ b/src/test/ref/examples/font-2x2/font-2x2.cfg
@@ -0,0 +1,239 @@
+@begin: scope:[]  from
+  [0] phi()
+  to:@1
+@1: scope:[]  from @begin
+  [1] phi()
+  [2] call main 
+  to:@end
+@end: scope:[]  from @1
+  [3] phi()
+
+(void()) main()
+main: scope:[main]  from @1
+  asm { sei  }
+  [5] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM
+  [6] call font_2x2 
+  to:main::@6
+main::@6: scope:[main]  from main
+  [7] *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO
+  asm { cli  }
+  [9] call font_compress 
+  to:main::toD0181
+main::toD0181: scope:[main]  from main::@6
+  [10] phi()
+  to:main::@5
+main::@5: scope:[main]  from main::toD0181
+  [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0
+  [12] (byte) memset::c#0 ← *((const byte*) FONT_COMPRESSED_MAP+(byte) ' ')
+  [13] call memset 
+  to:main::@1
+main::@1: scope:[main]  from main::@3 main::@5
+  [14] (byte) main::y#4 ← phi( main::@5/(byte) 0 main::@3/(byte) main::y#1 )
+  [14] (byte) main::c#4 ← phi( main::@5/(byte) 0 main::@3/(byte) main::c#1 )
+  to:main::@2
+main::@2: scope:[main]  from main::@1 main::@7
+  [15] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@7/(byte) main::x#1 )
+  [15] (byte) main::c#2 ← phi( main::@1/(byte) main::c#4 main::@7/(byte) main::c#1 )
+  [16] (byte) show::c#0 ← (byte) main::c#2
+  [17] (byte) show::x#0 ← (byte) main::x#2
+  [18] (byte) show::y#0 ← (byte) main::y#4
+  [19] call show 
+  to:main::@7
+main::@7: scope:[main]  from main::@2
+  [20] (byte) main::c#1 ← ++ (byte) main::c#2
+  [21] (byte) main::x#1 ← ++ (byte) main::x#2
+  [22] if((byte) main::x#1!=(byte) 8) goto main::@2
+  to:main::@3
+main::@3: scope:[main]  from main::@7
+  [23] (byte) main::y#1 ← ++ (byte) main::y#4
+  [24] if((byte) main::y#1!=(byte) 8) goto main::@1
+  to:main::@4
+main::@4: scope:[main]  from main::@3 main::@4
+  [25] *((const byte*) SCREEN+(word) $3e7) ← ++ *((const byte*) SCREEN+(word) $3e7)
+  to:main::@4
+
+(void()) show((byte) show::c , (byte) show::x , (byte) show::y , (byte*) show::font_mapping)
+show: scope:[show]  from main::@2
+  [26] (word~) show::$0 ← (word)(byte) show::y#0
+  [27] (word~) show::$8 ← (word~) show::$0 << (byte) 2
+  [28] (word~) show::$9 ← (word~) show::$8 + (word~) show::$0
+  [29] (word~) show::$1 ← (word~) show::$9 << (byte) 4
+  [30] (byte*~) show::$2 ← (const byte*) SCREEN + (word~) show::$1
+  [31] (byte~) show::$3 ← (byte) show::x#0 << (byte) 1
+  [32] (byte*) show::ptr#0 ← (byte*~) show::$2 + (byte~) show::$3
+  [33] *((byte*) show::ptr#0) ← *((const byte*) FONT_COMPRESSED_MAP + (byte) show::c#0)
+  [34] (byte~) show::$5 ← (byte) show::c#0
+  [35] *((byte*) show::ptr#0 + (byte) 1) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $40 + (byte~) show::$5)
+  [36] (byte~) show::$6 ← (byte) show::c#0
+  [37] *((byte*) show::ptr#0 + (byte) $28) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $80 + (byte~) show::$6)
+  [38] (byte~) show::$7 ← (byte) show::c#0
+  [39] *((byte*) show::ptr#0 + (byte) $29) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $c0 + (byte~) show::$7)
+  to:show::@return
+show::@return: scope:[show]  from show
+  [40] return 
+  to:@return
+
+(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
+memset: scope:[memset]  from main::@5
+  [41] phi()
+  to:memset::@1
+memset::@1: scope:[memset]  from memset memset::@2
+  [42] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 )
+  [43] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2
+  to:memset::@return
+memset::@return: scope:[memset]  from memset::@1
+  [44] return 
+  to:@return
+memset::@2: scope:[memset]  from memset::@1
+  [45] *((byte*) memset::dst#2) ← (byte) memset::c#0
+  [46] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
+  to:memset::@1
+
+(byte()) font_compress((byte*) font_compress::font_original , (byte*) font_compress::font_compressed , (byte*) font_compress::compress_mapping)
+font_compress: scope:[font_compress]  from main::@6
+  [47] phi()
+  to:font_compress::@1
+font_compress::@1: scope:[font_compress]  from font_compress font_compress::@6
+  [48] (byte*) font_compress::next_compressed#4 ← phi( font_compress/(const byte*) FONT_COMPRESSED font_compress::@6/(byte*) font_compress::next_compressed#7 )
+  [48] (byte) font_compress::i#4 ← phi( font_compress/(byte) 0 font_compress::@6/(byte) font_compress::i#1 )
+  [48] (byte) font_compress::font_size#2 ← phi( font_compress/(byte) 0 font_compress::@6/(byte) font_compress::font_size#9 )
+  [48] (byte*) font_compress::next_original#2 ← phi( font_compress/(const byte*) FONT_ORIGINAL font_compress::@6/(byte*) font_compress::next_original#1 )
+  [49] (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2
+  [50] (byte) font_find::font_size#0 ← (byte) font_compress::font_size#2
+  [51] call font_find 
+  [52] (byte) font_find::return#0 ← (byte) font_find::return#3
+  to:font_compress::@5
+font_compress::@5: scope:[font_compress]  from font_compress::@1
+  [53] (byte) font_compress::found#0 ← (byte) font_find::return#0
+  [54] if((byte) font_compress::found#0!=(byte) $ff) goto font_compress::@7
+  to:font_compress::@3
+font_compress::@3: scope:[font_compress]  from font_compress::@3 font_compress::@5
+  [55] (byte) font_compress::l#2 ← phi( font_compress::@3/(byte) font_compress::l#1 font_compress::@5/(byte) 0 )
+  [56] *((byte*) font_compress::next_compressed#4 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#2 + (byte) font_compress::l#2)
+  [57] (byte) font_compress::l#1 ← ++ (byte) font_compress::l#2
+  [58] if((byte) font_compress::l#1!=(byte) 8) goto font_compress::@3
+  to:font_compress::@4
+font_compress::@4: scope:[font_compress]  from font_compress::@3
+  [59] (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#4 + (byte) 8
+  [60] (byte) font_compress::font_size#1 ← ++ (byte) font_compress::font_size#2
+  [61] (byte) font_compress::found#3 ← (byte) font_compress::font_size#2
+  to:font_compress::@2
+font_compress::@2: scope:[font_compress]  from font_compress::@4 font_compress::@7
+  [62] (byte*) font_compress::next_compressed#7 ← phi( font_compress::@4/(byte*) font_compress::next_compressed#1 font_compress::@7/(byte*) font_compress::next_compressed#4 )
+  [62] (byte) font_compress::return#1 ← phi( font_compress::@4/(byte) font_compress::font_size#1 font_compress::@7/(byte) font_compress::return#5 )
+  [62] (byte) font_compress::found#2 ← phi( font_compress::@4/(byte) font_compress::found#3 font_compress::@7/(byte) font_compress::found#0 )
+  [63] *((const byte*) FONT_COMPRESSED_MAP + (byte) font_compress::i#4) ← (byte) font_compress::found#2
+  [64] (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#2 + (byte) 8
+  [65] (byte) font_compress::i#1 ← ++ (byte) font_compress::i#4
+  [66] if((byte) font_compress::i#1!=(byte) 0) goto font_compress::@6
+  to:font_compress::@return
+font_compress::@return: scope:[font_compress]  from font_compress::@2
+  [67] return 
+  to:@return
+font_compress::@6: scope:[font_compress]  from font_compress::@2
+  [68] (byte) font_compress::font_size#9 ← (byte) font_compress::return#1
+  to:font_compress::@1
+font_compress::@7: scope:[font_compress]  from font_compress::@5
+  [69] (byte) font_compress::return#5 ← (byte) font_compress::font_size#2
+  to:font_compress::@2
+
+(byte()) font_find((byte*) font_find::glyph , (byte*) font_find::font , (byte) font_find::font_size)
+font_find: scope:[font_find]  from font_compress::@1
+  [70] phi()
+  to:font_find::@1
+font_find::@1: scope:[font_find]  from font_find font_find::@5
+  [71] (byte*) font_find::font#4 ← phi( font_find/(const byte*) FONT_COMPRESSED font_find::@5/(byte*) font_find::font#1 )
+  [71] (byte) font_find::i#2 ← phi( font_find/(byte) 0 font_find::@5/(byte) font_find::i#1 )
+  [72] if((byte) font_find::i#2<(byte) font_find::font_size#0) goto font_find::@2
+  to:font_find::@return
+font_find::@return: scope:[font_find]  from font_find::@1 font_find::@4
+  [73] (byte) font_find::return#3 ← phi( font_find::@4/(byte) font_find::i#2 font_find::@1/(byte) $ff )
+  [74] return 
+  to:@return
+font_find::@2: scope:[font_find]  from font_find::@1 font_find::@3
+  [75] (byte) font_find::l#2 ← phi( font_find::@1/(byte) 0 font_find::@3/(byte) font_find::l#1 )
+  [76] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@3
+  to:font_find::@4
+font_find::@3: scope:[font_find]  from font_find::@2
+  [77] (byte) font_find::l#1 ← ++ (byte) font_find::l#2
+  [78] if((byte) font_find::l#1!=(byte) 8) goto font_find::@2
+  to:font_find::@4
+font_find::@4: scope:[font_find]  from font_find::@2 font_find::@3
+  [79] (byte) font_find::found#2 ← phi( font_find::@3/(byte) 1 font_find::@2/(byte) 0 )
+  [80] if((byte) 0==(byte) font_find::found#2) goto font_find::@5
+  to:font_find::@return
+font_find::@5: scope:[font_find]  from font_find::@4
+  [81] (byte*) font_find::font#1 ← (byte*) font_find::font#4 + (byte) 8
+  [82] (byte) font_find::i#1 ← ++ (byte) font_find::i#2
+  to:font_find::@1
+
+(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
+font_2x2: scope:[font_2x2]  from main
+  [83] phi()
+  to:font_2x2::@1
+font_2x2::@1: scope:[font_2x2]  from font_2x2 font_2x2::@9
+  [84] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 )
+  [84] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 )
+  [84] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const byte*) FONT_ORIGINAL font_2x2::@9/(byte*) font_2x2::next_2x2#1 )
+  [85] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8
+  [86] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0
+  to:font_2x2::@2
+font_2x2::@2: scope:[font_2x2]  from font_2x2::@1 font_2x2::@8
+  [87] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 )
+  [87] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 )
+  [87] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 )
+  [87] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 )
+  [88] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2)
+  to:font_2x2::@3
+font_2x2::@3: scope:[font_2x2]  from font_2x2::@2 font_2x2::@5
+  [89] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 )
+  [89] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 )
+  [89] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 )
+  [90] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80
+  [91] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4
+  to:font_2x2::@5
+font_2x2::@4: scope:[font_2x2]  from font_2x2::@3
+  [92] phi()
+  to:font_2x2::@5
+font_2x2::@5: scope:[font_2x2]  from font_2x2::@3 font_2x2::@4
+  [93] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 )
+  [94] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1
+  [95] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0
+  [96] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1
+  [97] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0
+  [98] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1
+  [99] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2
+  [100] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3
+  to:font_2x2::@6
+font_2x2::@6: scope:[font_2x2]  from font_2x2::@5
+  [101] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2
+  [102] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12
+  [103] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1
+  [104] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12
+  [105] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2
+  [106] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15
+  [107] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1
+  [108] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15
+  [109] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2
+  [110] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8
+  to:font_2x2::@7
+font_2x2::@7: scope:[font_2x2]  from font_2x2::@6
+  [111] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8
+  [112] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8
+  to:font_2x2::@8
+font_2x2::@8: scope:[font_2x2]  from font_2x2::@6 font_2x2::@7
+  [113] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 )
+  [113] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 )
+  [113] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 )
+  [114] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2
+  [115] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2
+  to:font_2x2::@9
+font_2x2::@9: scope:[font_2x2]  from font_2x2::@8
+  [116] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8
+  [117] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8
+  [118] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11
+  [119] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1
+  to:font_2x2::@return
+font_2x2::@return: scope:[font_2x2]  from font_2x2::@9
+  [120] return 
+  to:@return
diff --git a/src/test/ref/examples/font-2x2/font-2x2.log b/src/test/ref/examples/font-2x2/font-2x2.log
new file mode 100644
index 000000000..8b6c4957c
--- /dev/null
+++ b/src/test/ref/examples/font-2x2/font-2x2.log
@@ -0,0 +1,5094 @@
+Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
+Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
+Warning! Adding boolean cast to non-boolean condition (number~) font_2x2::$1
+Warning! Adding boolean cast to non-boolean sub-expression (byte) font_find::found
+Identified constant variable (byte*) main::cursor
+Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
+Inlined call (byte~) main::$2 ← call toD018 (const byte*) SCREEN (const byte*) FONT_COMPRESSED 
+Culled Empty Block (label) @1
+Culled Empty Block (label) @2
+Culled Empty Block (label) @3
+Culled Empty Block (label) @4
+Culled Empty Block (label) @5
+Culled Empty Block (label) @6
+Culled Empty Block (label) memset::@7
+Culled Empty Block (label) memset::@6
+Culled Empty Block (label) memset::@8
+Culled Empty Block (label) memset::@9
+Culled Empty Block (label) memset::@3
+Culled Empty Block (label) @7
+Culled Empty Block (label) @8
+Culled Empty Block (label) @9
+Culled Empty Block (label) main::toD0181_@1
+Culled Empty Block (label) main::@4
+Culled Empty Block (label) main::@8
+Culled Empty Block (label) main::@7
+Culled Empty Block (label) main::@9
+Culled Empty Block (label) main::@10
+Culled Empty Block (label) @10
+Culled Empty Block (label) @11
+Culled Empty Block (label) font_2x2::@7
+Culled Empty Block (label) font_2x2::@8
+Culled Empty Block (label) font_2x2::@13
+Culled Empty Block (label) @12
+Culled Empty Block (label) font_compress::@7
+Culled Empty Block (label) @13
+Culled Empty Block (label) font_find::@13
+Culled Empty Block (label) font_find::@14
+Culled Empty Block (label) font_find::@8
+Culled Empty Block (label) font_find::@9
+Culled Empty Block (label) font_find::@11
+Culled Empty Block (label) font_find::@15
+Culled Empty Block (label) font_find::@16
+
+CONTROL FLOW GRAPH SSA
+@begin: scope:[]  from
+  to:@14
+
+(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
+memset: scope:[memset]  from main::@11
+  (byte) memset::c#4 ← phi( main::@11/(byte) memset::c#0 )
+  (void*) memset::str#3 ← phi( main::@11/(void*) memset::str#0 )
+  (word) memset::num#1 ← phi( main::@11/(word) memset::num#0 )
+  (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
+  (bool~) memset::$1 ← ! (bool~) memset::$0
+  if((bool~) memset::$1) goto memset::@1
+  to:memset::@2
+memset::@1: scope:[memset]  from memset memset::@4
+  (void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@4/(void*) memset::str#4 )
+  (void*) memset::return#0 ← (void*) memset::str#1
+  to:memset::@return
+memset::@2: scope:[memset]  from memset
+  (byte) memset::c#3 ← phi( memset/(byte) memset::c#4 )
+  (word) memset::num#2 ← phi( memset/(word) memset::num#1 )
+  (void*) memset::str#2 ← phi( memset/(void*) memset::str#3 )
+  (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#2
+  (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#2
+  (byte*) memset::end#0 ← (byte*~) memset::$3
+  (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2
+  to:memset::@4
+memset::@4: scope:[memset]  from memset::@2 memset::@5
+  (byte) memset::c#2 ← phi( memset::@2/(byte) memset::c#3 memset::@5/(byte) memset::c#1 )
+  (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@5/(void*) memset::str#5 )
+  (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 )
+  (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 )
+  (bool~) memset::$4 ← (byte*) memset::dst#2 != (byte*) memset::end#1
+  if((bool~) memset::$4) goto memset::@5
+  to:memset::@1
+memset::@5: scope:[memset]  from memset::@4
+  (void*) memset::str#5 ← phi( memset::@4/(void*) memset::str#4 )
+  (byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 )
+  (byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 )
+  (byte) memset::c#1 ← phi( memset::@4/(byte) memset::c#2 )
+  *((byte*) memset::dst#3) ← (byte) memset::c#1
+  (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
+  to:memset::@4
+memset::@return: scope:[memset]  from memset::@1
+  (void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 )
+  (void*) memset::return#1 ← (void*) memset::return#3
+  return 
+  to:@return
+
+(void()) main()
+main: scope:[main]  from @14
+  asm { sei  }
+  *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM
+  (byte*) font_2x2::font_original#0 ← (const byte*) CHARGEN
+  (byte*) font_2x2::font_2x2#0 ← (const byte*) FONT_ORIGINAL
+  call font_2x2 
+  to:main::@12
+main::@12: scope:[main]  from main
+  *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO
+  asm { cli  }
+  (byte*) font_compress::font_original#0 ← (const byte*) FONT_ORIGINAL
+  (byte*) font_compress::font_compressed#0 ← (const byte*) FONT_COMPRESSED
+  (byte*) font_compress::compress_mapping#0 ← (const byte*) FONT_COMPRESSED_MAP
+  call font_compress 
+  (byte) font_compress::return#0 ← (byte) font_compress::return#2
+  to:main::@13
+main::@13: scope:[main]  from main::@12
+  (byte*) main::toD0181_screen#0 ← (const byte*) SCREEN
+  (byte*) main::toD0181_gfx#0 ← (const byte*) FONT_COMPRESSED
+  to:main::toD0181
+main::toD0181: scope:[main]  from main::@13
+  (byte*) main::toD0181_gfx#1 ← phi( main::@13/(byte*) main::toD0181_gfx#0 )
+  (byte*) main::toD0181_screen#1 ← phi( main::@13/(byte*) main::toD0181_screen#0 )
+  (word~) main::toD0181_$0 ← ((word)) (byte*) main::toD0181_screen#1
+  (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
+  (number~) main::toD0181_$2 ← (number~) main::toD0181_$1 * (number) 4
+  (number~) main::toD0181_$3 ← > (number~) main::toD0181_$2
+  (word~) main::toD0181_$4 ← ((word)) (byte*) main::toD0181_gfx#1
+  (byte~) main::toD0181_$5 ← > (word~) main::toD0181_$4
+  (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
+  (number~) main::toD0181_$7 ← (number~) main::toD0181_$6 & (number) $f
+  (number~) main::toD0181_$8 ← (number~) main::toD0181_$3 | (number~) main::toD0181_$7
+  (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8
+  to:main::toD0181_@return
+main::toD0181_@return: scope:[main]  from main::toD0181
+  (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 )
+  (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2
+  to:main::@11
+main::@11: scope:[main]  from main::toD0181_@return
+  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
+  (byte~) main::$2 ← (byte) main::toD0181_return#3
+  *((const byte*) D018) ← (byte~) main::$2
+  (void*) memset::str#0 ← (void*)(const byte*) SCREEN
+  (byte) memset::c#0 ← *((const byte*) FONT_COMPRESSED_MAP + (byte) ' ')
+  (word) memset::num#0 ← (number) $400
+  call memset 
+  (void*) memset::return#2 ← (void*) memset::return#1
+  to:main::@14
+main::@14: scope:[main]  from main::@11
+  (byte) main::c#0 ← (byte) 0
+  (byte) main::y#0 ← (byte) 0
+  to:main::@1
+main::@1: scope:[main]  from main::@14 main::@3
+  (byte) main::y#4 ← phi( main::@14/(byte) main::y#0 main::@3/(byte) main::y#1 )
+  (byte) main::c#4 ← phi( main::@14/(byte) main::c#0 main::@3/(byte) main::c#5 )
+  (byte) main::x#0 ← (byte) 0
+  to:main::@2
+main::@2: scope:[main]  from main::@1 main::@15
+  (byte) main::y#2 ← phi( main::@1/(byte) main::y#4 main::@15/(byte) main::y#5 )
+  (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@15/(byte) main::x#1 )
+  (byte) main::c#2 ← phi( main::@1/(byte) main::c#4 main::@15/(byte) main::c#1 )
+  (byte) show::c#0 ← (byte) main::c#2
+  (byte) show::x#0 ← (byte) main::x#2
+  (byte) show::y#0 ← (byte) main::y#2
+  (byte*) show::font_mapping#0 ← (const byte*) FONT_COMPRESSED_MAP
+  call show 
+  to:main::@15
+main::@15: scope:[main]  from main::@2
+  (byte) main::y#5 ← phi( main::@2/(byte) main::y#2 )
+  (byte) main::x#3 ← phi( main::@2/(byte) main::x#2 )
+  (byte) main::c#3 ← phi( main::@2/(byte) main::c#2 )
+  (byte) main::c#1 ← ++ (byte) main::c#3
+  (byte) main::x#1 ← (byte) main::x#3 + rangenext(0,7)
+  (bool~) main::$5 ← (byte) main::x#1 != rangelast(0,7)
+  if((bool~) main::$5) goto main::@2
+  to:main::@3
+main::@3: scope:[main]  from main::@15
+  (byte) main::c#5 ← phi( main::@15/(byte) main::c#1 )
+  (byte) main::y#3 ← phi( main::@15/(byte) main::y#5 )
+  (byte) main::y#1 ← (byte) main::y#3 + rangenext(0,7)
+  (bool~) main::$6 ← (byte) main::y#1 != rangelast(0,7)
+  if((bool~) main::$6) goto main::@1
+  to:main::@5
+main::@5: scope:[main]  from main::@3 main::@6
+  if(true) goto main::@6
+  to:main::@return
+main::@6: scope:[main]  from main::@5
+  *((const byte*) SCREEN+(number) $3e7) ← ++ *((const byte*) SCREEN+(number) $3e7)
+  to:main::@5
+main::@return: scope:[main]  from main::@5
+  return 
+  to:@return
+
+(void()) show((byte) show::c , (byte) show::x , (byte) show::y , (byte*) show::font_mapping)
+show: scope:[show]  from main::@2
+  (byte) show::c#1 ← phi( main::@2/(byte) show::c#0 )
+  (byte*) show::font_mapping#1 ← phi( main::@2/(byte*) show::font_mapping#0 )
+  (byte) show::x#1 ← phi( main::@2/(byte) show::x#0 )
+  (byte) show::y#1 ← phi( main::@2/(byte) show::y#0 )
+  (word~) show::$0 ← ((word)) (byte) show::y#1
+  (number~) show::$1 ← (word~) show::$0 * (number) $50
+  (byte*~) show::$2 ← (const byte*) SCREEN + (number~) show::$1
+  (number~) show::$3 ← (byte) show::x#1 * (number) 2
+  (byte*~) show::$4 ← (byte*~) show::$2 + (number~) show::$3
+  (byte*) show::ptr#0 ← (byte*~) show::$4
+  *((byte*) show::ptr#0 + (number) 0) ← *((byte*) show::font_mapping#1 + (byte) show::c#1)
+  (number~) show::$5 ← (byte) show::c#1 + (number) $40
+  *((byte*) show::ptr#0 + (number) 1) ← *((byte*) show::font_mapping#1 + (number~) show::$5)
+  (number~) show::$6 ← (byte) show::c#1 + (number) $80
+  *((byte*) show::ptr#0 + (number) $28) ← *((byte*) show::font_mapping#1 + (number~) show::$6)
+  (number~) show::$7 ← (byte) show::c#1 + (number) $c0
+  *((byte*) show::ptr#0 + (number) $29) ← *((byte*) show::font_mapping#1 + (number~) show::$7)
+  to:show::@return
+show::@return: scope:[show]  from show
+  return 
+  to:@return
+
+(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
+font_2x2: scope:[font_2x2]  from main
+  (byte*) font_2x2::font_2x2#1 ← phi( main/(byte*) font_2x2::font_2x2#0 )
+  (byte*) font_2x2::font_original#1 ← phi( main/(byte*) font_2x2::font_original#0 )
+  (byte*) font_2x2::next_original#0 ← (byte*) font_2x2::font_original#1
+  (byte*) font_2x2::next_2x2#0 ← (byte*) font_2x2::font_2x2#1
+  (byte) font_2x2::c#0 ← (byte) 0
+  to:font_2x2::@1
+font_2x2::@1: scope:[font_2x2]  from font_2x2 font_2x2::@12
+  (byte) font_2x2::c#11 ← phi( font_2x2/(byte) font_2x2::c#0 font_2x2::@12/(byte) font_2x2::c#1 )
+  (byte*) font_2x2::next_original#4 ← phi( font_2x2/(byte*) font_2x2::next_original#0 font_2x2::@12/(byte*) font_2x2::next_original#1 )
+  (byte*) font_2x2::next_2x2#2 ← phi( font_2x2/(byte*) font_2x2::next_2x2#0 font_2x2::@12/(byte*) font_2x2::next_2x2#1 )
+  (byte*) font_2x2::next_2x2_left#0 ← (byte*) font_2x2::next_2x2#2
+  (byte*~) font_2x2::$0 ← (byte*) font_2x2::next_2x2#2 + (number) $40*(number) 8
+  (byte*) font_2x2::next_2x2_right#0 ← (byte*~) font_2x2::$0
+  (byte) font_2x2::l2#0 ← (byte) 0
+  (byte) font_2x2::l#0 ← (byte) 0
+  to:font_2x2::@2
+font_2x2::@2: scope:[font_2x2]  from font_2x2::@1 font_2x2::@11
+  (byte) font_2x2::c#10 ← phi( font_2x2::@1/(byte) font_2x2::c#11 font_2x2::@11/(byte) font_2x2::c#3 )
+  (byte*) font_2x2::next_2x2#11 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2#2 font_2x2::@11/(byte*) font_2x2::next_2x2#6 )
+  (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@11/(byte*) font_2x2::next_2x2_right#8 )
+  (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) font_2x2::l2#0 font_2x2::@11/(byte) font_2x2::l2#9 )
+  (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#0 font_2x2::@11/(byte*) font_2x2::next_2x2_left#8 )
+  (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) font_2x2::l#0 font_2x2::@11/(byte) font_2x2::l#1 )
+  (byte*) font_2x2::next_original#2 ← phi( font_2x2::@1/(byte*) font_2x2::next_original#4 font_2x2::@11/(byte*) font_2x2::next_original#5 )
+  (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#2 + (byte) font_2x2::l#2)
+  (word) font_2x2::glyph_bits_2x2#0 ← (word) 0
+  (byte) font_2x2::b#0 ← (byte) 0
+  to:font_2x2::@3
+font_2x2::@3: scope:[font_2x2]  from font_2x2::@2 font_2x2::@6
+  (byte) font_2x2::c#9 ← phi( font_2x2::@2/(byte) font_2x2::c#10 font_2x2::@6/(byte) font_2x2::c#6 )
+  (byte*) font_2x2::next_original#11 ← phi( font_2x2::@2/(byte*) font_2x2::next_original#2 font_2x2::@6/(byte*) font_2x2::next_original#8 )
+  (byte*) font_2x2::next_2x2#10 ← phi( font_2x2::@2/(byte*) font_2x2::next_2x2#11 font_2x2::@6/(byte*) font_2x2::next_2x2#7 )
+  (byte) font_2x2::l#9 ← phi( font_2x2::@2/(byte) font_2x2::l#2 font_2x2::@6/(byte) font_2x2::l#6 )
+  (byte*) font_2x2::next_2x2_right#6 ← phi( font_2x2::@2/(byte*) font_2x2::next_2x2_right#7 font_2x2::@6/(byte*) font_2x2::next_2x2_right#3 )
+  (byte) font_2x2::l2#7 ← phi( font_2x2::@2/(byte) font_2x2::l2#8 font_2x2::@6/(byte) font_2x2::l2#4 )
+  (byte*) font_2x2::next_2x2_left#6 ← phi( font_2x2::@2/(byte*) font_2x2::next_2x2_left#7 font_2x2::@6/(byte*) font_2x2::next_2x2_left#3 )
+  (byte) font_2x2::b#5 ← phi( font_2x2::@2/(byte) font_2x2::b#0 font_2x2::@6/(byte) font_2x2::b#1 )
+  (word) font_2x2::glyph_bits_2x2#7 ← phi( font_2x2::@2/(word) font_2x2::glyph_bits_2x2#0 font_2x2::@6/(word) font_2x2::glyph_bits_2x2#2 )
+  (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@6/(byte) font_2x2::glyph_bits#1 )
+  (number~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (number) $80
+  (bool~) font_2x2::$22 ← (number) 0 != (number~) font_2x2::$1
+  if((bool~) font_2x2::$22) goto font_2x2::@4
+  to:font_2x2::@5
+font_2x2::@4: scope:[font_2x2]  from font_2x2::@3
+  (byte) font_2x2::c#7 ← phi( font_2x2::@3/(byte) font_2x2::c#9 )
+  (byte*) font_2x2::next_original#9 ← phi( font_2x2::@3/(byte*) font_2x2::next_original#11 )
+  (byte*) font_2x2::next_2x2#8 ← phi( font_2x2::@3/(byte*) font_2x2::next_2x2#10 )
+  (byte) font_2x2::l#7 ← phi( font_2x2::@3/(byte) font_2x2::l#9 )
+  (byte*) font_2x2::next_2x2_right#4 ← phi( font_2x2::@3/(byte*) font_2x2::next_2x2_right#6 )
+  (byte) font_2x2::l2#5 ← phi( font_2x2::@3/(byte) font_2x2::l2#7 )
+  (byte*) font_2x2::next_2x2_left#4 ← phi( font_2x2::@3/(byte*) font_2x2::next_2x2_left#6 )
+  (byte) font_2x2::b#3 ← phi( font_2x2::@3/(byte) font_2x2::b#5 )
+  (byte) font_2x2::glyph_bits#4 ← phi( font_2x2::@3/(byte) font_2x2::glyph_bits#2 )
+  (word) font_2x2::glyph_bits_2x2#5 ← phi( font_2x2::@3/(word) font_2x2::glyph_bits_2x2#7 )
+  (byte~) font_2x2::$3 ← (byte) 1
+  to:font_2x2::@6
+font_2x2::@5: scope:[font_2x2]  from font_2x2::@3
+  (byte) font_2x2::c#8 ← phi( font_2x2::@3/(byte) font_2x2::c#9 )
+  (byte*) font_2x2::next_original#10 ← phi( font_2x2::@3/(byte*) font_2x2::next_original#11 )
+  (byte*) font_2x2::next_2x2#9 ← phi( font_2x2::@3/(byte*) font_2x2::next_2x2#10 )
+  (byte) font_2x2::l#8 ← phi( font_2x2::@3/(byte) font_2x2::l#9 )
+  (byte*) font_2x2::next_2x2_right#5 ← phi( font_2x2::@3/(byte*) font_2x2::next_2x2_right#6 )
+  (byte) font_2x2::l2#6 ← phi( font_2x2::@3/(byte) font_2x2::l2#7 )
+  (byte*) font_2x2::next_2x2_left#5 ← phi( font_2x2::@3/(byte*) font_2x2::next_2x2_left#6 )
+  (byte) font_2x2::b#4 ← phi( font_2x2::@3/(byte) font_2x2::b#5 )
+  (byte) font_2x2::glyph_bits#5 ← phi( font_2x2::@3/(byte) font_2x2::glyph_bits#2 )
+  (word) font_2x2::glyph_bits_2x2#6 ← phi( font_2x2::@3/(word) font_2x2::glyph_bits_2x2#7 )
+  (byte~) font_2x2::$2 ← (byte) 0
+  to:font_2x2::@6
+font_2x2::@6: scope:[font_2x2]  from font_2x2::@4 font_2x2::@5
+  (byte) font_2x2::c#6 ← phi( font_2x2::@4/(byte) font_2x2::c#7 font_2x2::@5/(byte) font_2x2::c#8 )
+  (byte*) font_2x2::next_original#8 ← phi( font_2x2::@4/(byte*) font_2x2::next_original#9 font_2x2::@5/(byte*) font_2x2::next_original#10 )
+  (byte*) font_2x2::next_2x2#7 ← phi( font_2x2::@4/(byte*) font_2x2::next_2x2#8 font_2x2::@5/(byte*) font_2x2::next_2x2#9 )
+  (byte) font_2x2::l#6 ← phi( font_2x2::@4/(byte) font_2x2::l#7 font_2x2::@5/(byte) font_2x2::l#8 )
+  (byte*) font_2x2::next_2x2_right#3 ← phi( font_2x2::@4/(byte*) font_2x2::next_2x2_right#4 font_2x2::@5/(byte*) font_2x2::next_2x2_right#5 )
+  (byte) font_2x2::l2#4 ← phi( font_2x2::@4/(byte) font_2x2::l2#5 font_2x2::@5/(byte) font_2x2::l2#6 )
+  (byte*) font_2x2::next_2x2_left#3 ← phi( font_2x2::@4/(byte*) font_2x2::next_2x2_left#4 font_2x2::@5/(byte*) font_2x2::next_2x2_left#5 )
+  (byte) font_2x2::b#2 ← phi( font_2x2::@4/(byte) font_2x2::b#3 font_2x2::@5/(byte) font_2x2::b#4 )
+  (byte) font_2x2::glyph_bits#3 ← phi( font_2x2::@4/(byte) font_2x2::glyph_bits#4 font_2x2::@5/(byte) font_2x2::glyph_bits#5 )
+  (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@4/(word) font_2x2::glyph_bits_2x2#5 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#6 )
+  (byte~) font_2x2::$4 ← phi( font_2x2::@4/(byte~) font_2x2::$3 font_2x2::@5/(byte~) font_2x2::$2 )
+  (byte) font_2x2::glyph_bit#0 ← (byte~) font_2x2::$4
+  (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (number) 1
+  (word~) font_2x2::$6 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0
+  (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$6
+  (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (number) 1
+  (word~) font_2x2::$8 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0
+  (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$8
+  (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#3 << (number) 1
+  (byte) font_2x2::b#1 ← (byte) font_2x2::b#2 + rangenext(0,7)
+  (bool~) font_2x2::$9 ← (byte) font_2x2::b#1 != rangelast(0,7)
+  if((bool~) font_2x2::$9) goto font_2x2::@3
+  to:font_2x2::@9
+font_2x2::@9: scope:[font_2x2]  from font_2x2::@6
+  (byte) font_2x2::c#5 ← phi( font_2x2::@6/(byte) font_2x2::c#6 )
+  (byte*) font_2x2::next_original#7 ← phi( font_2x2::@6/(byte*) font_2x2::next_original#8 )
+  (byte*) font_2x2::next_2x2#5 ← phi( font_2x2::@6/(byte*) font_2x2::next_2x2#7 )
+  (byte) font_2x2::l#5 ← phi( font_2x2::@6/(byte) font_2x2::l#6 )
+  (byte*) font_2x2::next_2x2_right#2 ← phi( font_2x2::@6/(byte*) font_2x2::next_2x2_right#3 )
+  (byte) font_2x2::l2#3 ← phi( font_2x2::@6/(byte) font_2x2::l2#4 )
+  (byte*) font_2x2::next_2x2_left#2 ← phi( font_2x2::@6/(byte*) font_2x2::next_2x2_left#3 )
+  (word) font_2x2::glyph_bits_2x2#4 ← phi( font_2x2::@6/(word) font_2x2::glyph_bits_2x2#2 )
+  (byte~) font_2x2::$10 ← > (word) font_2x2::glyph_bits_2x2#4
+  *((byte*) font_2x2::next_2x2_left#2 + (byte) font_2x2::l2#3) ← (byte~) font_2x2::$10
+  (number~) font_2x2::$11 ← (byte) font_2x2::l2#3 + (number) 1
+  (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#4
+  *((byte*) font_2x2::next_2x2_left#2 + (number~) font_2x2::$11) ← (byte~) font_2x2::$12
+  (byte~) font_2x2::$13 ← < (word) font_2x2::glyph_bits_2x2#4
+  *((byte*) font_2x2::next_2x2_right#2 + (byte) font_2x2::l2#3) ← (byte~) font_2x2::$13
+  (number~) font_2x2::$14 ← (byte) font_2x2::l2#3 + (number) 1
+  (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#4
+  *((byte*) font_2x2::next_2x2_right#2 + (number~) font_2x2::$14) ← (byte~) font_2x2::$15
+  (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#3 + (number) 2
+  (bool~) font_2x2::$16 ← (byte) font_2x2::l2#1 == (number) 8
+  (bool~) font_2x2::$17 ← ! (bool~) font_2x2::$16
+  if((bool~) font_2x2::$17) goto font_2x2::@11
+  to:font_2x2::@10
+font_2x2::@11: scope:[font_2x2]  from font_2x2::@10 font_2x2::@9
+  (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@10/(byte*) font_2x2::next_2x2_right#1 font_2x2::@9/(byte*) font_2x2::next_2x2_right#2 )
+  (byte) font_2x2::l2#9 ← phi( font_2x2::@10/(byte) font_2x2::l2#2 font_2x2::@9/(byte) font_2x2::l2#1 )
+  (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@10/(byte*) font_2x2::next_2x2_left#1 font_2x2::@9/(byte*) font_2x2::next_2x2_left#2 )
+  (byte) font_2x2::c#3 ← phi( font_2x2::@10/(byte) font_2x2::c#4 font_2x2::@9/(byte) font_2x2::c#5 )
+  (byte*) font_2x2::next_2x2#6 ← phi( font_2x2::@10/(byte*) font_2x2::next_2x2#3 font_2x2::@9/(byte*) font_2x2::next_2x2#5 )
+  (byte*) font_2x2::next_original#5 ← phi( font_2x2::@10/(byte*) font_2x2::next_original#6 font_2x2::@9/(byte*) font_2x2::next_original#7 )
+  (byte) font_2x2::l#3 ← phi( font_2x2::@10/(byte) font_2x2::l#4 font_2x2::@9/(byte) font_2x2::l#5 )
+  (byte) font_2x2::l#1 ← (byte) font_2x2::l#3 + rangenext(0,7)
+  (bool~) font_2x2::$20 ← (byte) font_2x2::l#1 != rangelast(0,7)
+  if((bool~) font_2x2::$20) goto font_2x2::@2
+  to:font_2x2::@12
+font_2x2::@10: scope:[font_2x2]  from font_2x2::@9
+  (byte) font_2x2::c#4 ← phi( font_2x2::@9/(byte) font_2x2::c#5 )
+  (byte*) font_2x2::next_original#6 ← phi( font_2x2::@9/(byte*) font_2x2::next_original#7 )
+  (byte) font_2x2::l#4 ← phi( font_2x2::@9/(byte) font_2x2::l#5 )
+  (byte*) font_2x2::next_2x2#3 ← phi( font_2x2::@9/(byte*) font_2x2::next_2x2#5 )
+  (byte*~) font_2x2::$18 ← (byte*) font_2x2::next_2x2#3 + (number) $80*(number) 8
+  (byte*) font_2x2::next_2x2_left#1 ← (byte*~) font_2x2::$18
+  (byte*~) font_2x2::$19 ← (byte*) font_2x2::next_2x2#3 + (number) $c0*(number) 8
+  (byte*) font_2x2::next_2x2_right#1 ← (byte*~) font_2x2::$19
+  (byte) font_2x2::l2#2 ← (number) 0
+  to:font_2x2::@11
+font_2x2::@12: scope:[font_2x2]  from font_2x2::@11
+  (byte) font_2x2::c#2 ← phi( font_2x2::@11/(byte) font_2x2::c#3 )
+  (byte*) font_2x2::next_original#3 ← phi( font_2x2::@11/(byte*) font_2x2::next_original#5 )
+  (byte*) font_2x2::next_2x2#4 ← phi( font_2x2::@11/(byte*) font_2x2::next_2x2#6 )
+  (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2#4 + (number) 8
+  (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#3 + (number) 8
+  (byte) font_2x2::c#1 ← (byte) font_2x2::c#2 + rangenext(0,$3f)
+  (bool~) font_2x2::$21 ← (byte) font_2x2::c#1 != rangelast(0,$3f)
+  if((bool~) font_2x2::$21) goto font_2x2::@1
+  to:font_2x2::@return
+font_2x2::@return: scope:[font_2x2]  from font_2x2::@12
+  return 
+  to:@return
+
+(byte()) font_compress((byte*) font_compress::font_original , (byte*) font_compress::font_compressed , (byte*) font_compress::compress_mapping)
+font_compress: scope:[font_compress]  from main::@12
+  (byte*) font_compress::compress_mapping#6 ← phi( main::@12/(byte*) font_compress::compress_mapping#0 )
+  (byte*) font_compress::font_compressed#1 ← phi( main::@12/(byte*) font_compress::font_compressed#0 )
+  (byte*) font_compress::font_original#1 ← phi( main::@12/(byte*) font_compress::font_original#0 )
+  (byte) font_compress::font_size#0 ← (byte) 0
+  (byte*) font_compress::next_original#0 ← (byte*) font_compress::font_original#1
+  (byte*) font_compress::next_compressed#0 ← (byte*) font_compress::font_compressed#1
+  (byte) font_compress::i#0 ← (byte) 0
+  to:font_compress::@1
+font_compress::@1: scope:[font_compress]  from font_compress font_compress::@2
+  (byte*) font_compress::next_compressed#6 ← phi( font_compress/(byte*) font_compress::next_compressed#0 font_compress::@2/(byte*) font_compress::next_compressed#7 )
+  (byte) font_compress::i#5 ← phi( font_compress/(byte) font_compress::i#0 font_compress::@2/(byte) font_compress::i#1 )
+  (byte*) font_compress::compress_mapping#4 ← phi( font_compress/(byte*) font_compress::compress_mapping#6 font_compress::@2/(byte*) font_compress::compress_mapping#1 )
+  (byte) font_compress::font_size#2 ← phi( font_compress/(byte) font_compress::font_size#0 font_compress::@2/(byte) font_compress::font_size#5 )
+  (byte*) font_compress::font_compressed#2 ← phi( font_compress/(byte*) font_compress::font_compressed#1 font_compress::@2/(byte*) font_compress::font_compressed#3 )
+  (byte*) font_compress::next_original#2 ← phi( font_compress/(byte*) font_compress::next_original#0 font_compress::@2/(byte*) font_compress::next_original#1 )
+  (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2
+  (byte*) font_find::font#0 ← (byte*) font_compress::font_compressed#2
+  (byte) font_find::font_size#0 ← (byte) font_compress::font_size#2
+  call font_find 
+  (byte) font_find::return#0 ← (byte) font_find::return#3
+  to:font_compress::@8
+font_compress::@8: scope:[font_compress]  from font_compress::@1
+  (byte*) font_compress::next_compressed#5 ← phi( font_compress::@1/(byte*) font_compress::next_compressed#6 )
+  (byte) font_compress::font_size#7 ← phi( font_compress::@1/(byte) font_compress::font_size#2 )
+  (byte*) font_compress::font_compressed#5 ← phi( font_compress::@1/(byte*) font_compress::font_compressed#2 )
+  (byte*) font_compress::next_original#6 ← phi( font_compress::@1/(byte*) font_compress::next_original#2 )
+  (byte) font_compress::i#4 ← phi( font_compress::@1/(byte) font_compress::i#5 )
+  (byte*) font_compress::compress_mapping#3 ← phi( font_compress::@1/(byte*) font_compress::compress_mapping#4 )
+  (byte) font_find::return#4 ← phi( font_compress::@1/(byte) font_find::return#0 )
+  (byte~) font_compress::$0 ← (byte) font_find::return#4
+  (byte) font_compress::found#0 ← (byte~) font_compress::$0
+  (bool~) font_compress::$1 ← (byte) font_compress::found#0 == (number) $ff
+  (bool~) font_compress::$2 ← ! (bool~) font_compress::$1
+  if((bool~) font_compress::$2) goto font_compress::@2
+  to:font_compress::@5
+font_compress::@2: scope:[font_compress]  from font_compress::@4 font_compress::@8
+  (byte*) font_compress::next_compressed#7 ← phi( font_compress::@4/(byte*) font_compress::next_compressed#1 font_compress::@8/(byte*) font_compress::next_compressed#5 )
+  (byte) font_compress::font_size#5 ← phi( font_compress::@4/(byte) font_compress::font_size#1 font_compress::@8/(byte) font_compress::font_size#7 )
+  (byte*) font_compress::font_compressed#3 ← phi( font_compress::@4/(byte*) font_compress::font_compressed#4 font_compress::@8/(byte*) font_compress::font_compressed#5 )
+  (byte*) font_compress::next_original#3 ← phi( font_compress::@4/(byte*) font_compress::next_original#5 font_compress::@8/(byte*) font_compress::next_original#6 )
+  (byte) font_compress::i#2 ← phi( font_compress::@4/(byte) font_compress::i#3 font_compress::@8/(byte) font_compress::i#4 )
+  (byte*) font_compress::compress_mapping#1 ← phi( font_compress::@4/(byte*) font_compress::compress_mapping#2 font_compress::@8/(byte*) font_compress::compress_mapping#3 )
+  (byte) font_compress::found#2 ← phi( font_compress::@4/(byte) font_compress::found#1 font_compress::@8/(byte) font_compress::found#0 )
+  *((byte*) font_compress::compress_mapping#1 + (byte) font_compress::i#2) ← (byte) font_compress::found#2
+  (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#3 + (number) 8
+  (byte) font_compress::i#1 ← (byte) font_compress::i#2 + rangenext(0,$ff)
+  (bool~) font_compress::$4 ← (byte) font_compress::i#1 != rangelast(0,$ff)
+  if((bool~) font_compress::$4) goto font_compress::@1
+  to:font_compress::@6
+font_compress::@5: scope:[font_compress]  from font_compress::@8
+  (byte*) font_compress::font_compressed#7 ← phi( font_compress::@8/(byte*) font_compress::font_compressed#5 )
+  (byte) font_compress::i#7 ← phi( font_compress::@8/(byte) font_compress::i#4 )
+  (byte*) font_compress::compress_mapping#7 ← phi( font_compress::@8/(byte*) font_compress::compress_mapping#3 )
+  (byte) font_compress::font_size#8 ← phi( font_compress::@8/(byte) font_compress::font_size#7 )
+  (byte*) font_compress::next_compressed#4 ← phi( font_compress::@8/(byte*) font_compress::next_compressed#5 )
+  (byte*) font_compress::next_original#7 ← phi( font_compress::@8/(byte*) font_compress::next_original#6 )
+  (byte) font_compress::l#0 ← (byte) 0
+  to:font_compress::@3
+font_compress::@3: scope:[font_compress]  from font_compress::@3 font_compress::@5
+  (byte*) font_compress::font_compressed#6 ← phi( font_compress::@3/(byte*) font_compress::font_compressed#6 font_compress::@5/(byte*) font_compress::font_compressed#7 )
+  (byte) font_compress::i#6 ← phi( font_compress::@3/(byte) font_compress::i#6 font_compress::@5/(byte) font_compress::i#7 )
+  (byte*) font_compress::compress_mapping#5 ← phi( font_compress::@3/(byte*) font_compress::compress_mapping#5 font_compress::@5/(byte*) font_compress::compress_mapping#7 )
+  (byte) font_compress::font_size#6 ← phi( font_compress::@3/(byte) font_compress::font_size#6 font_compress::@5/(byte) font_compress::font_size#8 )
+  (byte*) font_compress::next_compressed#2 ← phi( font_compress::@3/(byte*) font_compress::next_compressed#2 font_compress::@5/(byte*) font_compress::next_compressed#4 )
+  (byte) font_compress::l#2 ← phi( font_compress::@3/(byte) font_compress::l#1 font_compress::@5/(byte) font_compress::l#0 )
+  (byte*) font_compress::next_original#4 ← phi( font_compress::@3/(byte*) font_compress::next_original#4 font_compress::@5/(byte*) font_compress::next_original#7 )
+  *((byte*) font_compress::next_compressed#2 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#4 + (byte) font_compress::l#2)
+  (byte) font_compress::l#1 ← (byte) font_compress::l#2 + rangenext(0,7)
+  (bool~) font_compress::$3 ← (byte) font_compress::l#1 != rangelast(0,7)
+  if((bool~) font_compress::$3) goto font_compress::@3
+  to:font_compress::@4
+font_compress::@4: scope:[font_compress]  from font_compress::@3
+  (byte*) font_compress::font_compressed#4 ← phi( font_compress::@3/(byte*) font_compress::font_compressed#6 )
+  (byte*) font_compress::next_original#5 ← phi( font_compress::@3/(byte*) font_compress::next_original#4 )
+  (byte) font_compress::i#3 ← phi( font_compress::@3/(byte) font_compress::i#6 )
+  (byte*) font_compress::compress_mapping#2 ← phi( font_compress::@3/(byte*) font_compress::compress_mapping#5 )
+  (byte) font_compress::font_size#3 ← phi( font_compress::@3/(byte) font_compress::font_size#6 )
+  (byte*) font_compress::next_compressed#3 ← phi( font_compress::@3/(byte*) font_compress::next_compressed#2 )
+  (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#3 + (number) 8
+  (byte) font_compress::found#1 ← (byte) font_compress::font_size#3
+  (byte) font_compress::font_size#1 ← ++ (byte) font_compress::font_size#3
+  to:font_compress::@2
+font_compress::@6: scope:[font_compress]  from font_compress::@2
+  (byte) font_compress::font_size#4 ← phi( font_compress::@2/(byte) font_compress::font_size#5 )
+  (byte) font_compress::return#1 ← (byte) font_compress::font_size#4
+  to:font_compress::@return
+font_compress::@return: scope:[font_compress]  from font_compress::@6
+  (byte) font_compress::return#3 ← phi( font_compress::@6/(byte) font_compress::return#1 )
+  (byte) font_compress::return#2 ← (byte) font_compress::return#3
+  return 
+  to:@return
+
+(byte()) font_find((byte*) font_find::glyph , (byte*) font_find::font , (byte) font_find::font_size)
+font_find: scope:[font_find]  from font_compress::@1
+  (byte*) font_find::font#9 ← phi( font_compress::@1/(byte*) font_find::font#0 )
+  (byte*) font_find::glyph#5 ← phi( font_compress::@1/(byte*) font_find::glyph#0 )
+  (byte) font_find::font_size#2 ← phi( font_compress::@1/(byte) font_find::font_size#0 )
+  (byte) font_find::i#0 ← (byte) 0
+  to:font_find::@1
+font_find::@1: scope:[font_find]  from font_find font_find::@12
+  (byte*) font_find::font#7 ← phi( font_find/(byte*) font_find::font#9 font_find::@12/(byte*) font_find::font#1 )
+  (byte*) font_find::glyph#4 ← phi( font_find/(byte*) font_find::glyph#5 font_find::@12/(byte*) font_find::glyph#6 )
+  (byte) font_find::font_size#1 ← phi( font_find/(byte) font_find::font_size#2 font_find::@12/(byte) font_find::font_size#3 )
+  (byte) font_find::i#2 ← phi( font_find/(byte) font_find::i#0 font_find::@12/(byte) font_find::i#1 )
+  (bool~) font_find::$0 ← (byte) font_find::i#2 < (byte) font_find::font_size#1
+  if((bool~) font_find::$0) goto font_find::@2
+  to:font_find::@3
+font_find::@2: scope:[font_find]  from font_find::@1
+  (byte) font_find::font_size#8 ← phi( font_find::@1/(byte) font_find::font_size#1 )
+  (byte) font_find::i#9 ← phi( font_find::@1/(byte) font_find::i#2 )
+  (byte*) font_find::font#4 ← phi( font_find::@1/(byte*) font_find::font#7 )
+  (byte*) font_find::glyph#2 ← phi( font_find::@1/(byte*) font_find::glyph#4 )
+  (byte) font_find::found#0 ← (byte) 1
+  (byte) font_find::l#0 ← (byte) 0
+  to:font_find::@4
+font_find::@3: scope:[font_find]  from font_find::@1
+  (byte) font_find::return#1 ← (number) $ff
+  to:font_find::@return
+font_find::@4: scope:[font_find]  from font_find::@2 font_find::@5
+  (byte) font_find::font_size#7 ← phi( font_find::@2/(byte) font_find::font_size#8 font_find::@5/(byte) font_find::font_size#5 )
+  (byte) font_find::i#8 ← phi( font_find::@2/(byte) font_find::i#9 font_find::@5/(byte) font_find::i#6 )
+  (byte) font_find::found#4 ← phi( font_find::@2/(byte) font_find::found#0 font_find::@5/(byte) font_find::found#3 )
+  (byte*) font_find::font#2 ← phi( font_find::@2/(byte*) font_find::font#4 font_find::@5/(byte*) font_find::font#5 )
+  (byte) font_find::l#2 ← phi( font_find::@2/(byte) font_find::l#0 font_find::@5/(byte) font_find::l#1 )
+  (byte*) font_find::glyph#1 ← phi( font_find::@2/(byte*) font_find::glyph#2 font_find::@5/(byte*) font_find::glyph#3 )
+  (bool~) font_find::$1 ← *((byte*) font_find::glyph#1 + (byte) font_find::l#2) != *((byte*) font_find::font#2 + (byte) font_find::l#2)
+  (bool~) font_find::$2 ← ! (bool~) font_find::$1
+  if((bool~) font_find::$2) goto font_find::@5
+  to:font_find::@7
+font_find::@5: scope:[font_find]  from font_find::@4
+  (byte) font_find::font_size#5 ← phi( font_find::@4/(byte) font_find::font_size#7 )
+  (byte) font_find::i#6 ← phi( font_find::@4/(byte) font_find::i#8 )
+  (byte) font_find::found#3 ← phi( font_find::@4/(byte) font_find::found#4 )
+  (byte*) font_find::font#5 ← phi( font_find::@4/(byte*) font_find::font#2 )
+  (byte*) font_find::glyph#3 ← phi( font_find::@4/(byte*) font_find::glyph#1 )
+  (byte) font_find::l#3 ← phi( font_find::@4/(byte) font_find::l#2 )
+  (byte) font_find::l#1 ← (byte) font_find::l#3 + rangenext(0,7)
+  (bool~) font_find::$3 ← (byte) font_find::l#1 != rangelast(0,7)
+  if((bool~) font_find::$3) goto font_find::@4
+  to:font_find::@6
+font_find::@7: scope:[font_find]  from font_find::@4
+  (byte*) font_find::glyph#8 ← phi( font_find::@4/(byte*) font_find::glyph#1 )
+  (byte) font_find::font_size#6 ← phi( font_find::@4/(byte) font_find::font_size#7 )
+  (byte) font_find::i#7 ← phi( font_find::@4/(byte) font_find::i#8 )
+  (byte*) font_find::font#8 ← phi( font_find::@4/(byte*) font_find::font#2 )
+  (byte) font_find::found#1 ← (number) 0
+  to:font_find::@6
+font_find::@6: scope:[font_find]  from font_find::@5 font_find::@7
+  (byte*) font_find::glyph#7 ← phi( font_find::@5/(byte*) font_find::glyph#3 font_find::@7/(byte*) font_find::glyph#8 )
+  (byte) font_find::font_size#4 ← phi( font_find::@5/(byte) font_find::font_size#5 font_find::@7/(byte) font_find::font_size#6 )
+  (byte) font_find::i#5 ← phi( font_find::@5/(byte) font_find::i#6 font_find::@7/(byte) font_find::i#7 )
+  (byte*) font_find::font#6 ← phi( font_find::@5/(byte*) font_find::font#5 font_find::@7/(byte*) font_find::font#8 )
+  (byte) font_find::found#2 ← phi( font_find::@5/(byte) font_find::found#3 font_find::@7/(byte) font_find::found#1 )
+  (bool~) font_find::$5 ← (number) 0 != (byte) font_find::found#2
+  (bool~) font_find::$4 ← ! (bool~) font_find::$5
+  if((bool~) font_find::$4) goto font_find::@12
+  to:font_find::@10
+font_find::@12: scope:[font_find]  from font_find::@6
+  (byte*) font_find::glyph#6 ← phi( font_find::@6/(byte*) font_find::glyph#7 )
+  (byte) font_find::font_size#3 ← phi( font_find::@6/(byte) font_find::font_size#4 )
+  (byte) font_find::i#3 ← phi( font_find::@6/(byte) font_find::i#5 )
+  (byte*) font_find::font#3 ← phi( font_find::@6/(byte*) font_find::font#6 )
+  (byte*) font_find::font#1 ← (byte*) font_find::font#3 + (number) 8
+  (byte) font_find::i#1 ← ++ (byte) font_find::i#3
+  to:font_find::@1
+font_find::@10: scope:[font_find]  from font_find::@6
+  (byte) font_find::i#4 ← phi( font_find::@6/(byte) font_find::i#5 )
+  (byte) font_find::return#2 ← (byte) font_find::i#4
+  to:font_find::@return
+font_find::@return: scope:[font_find]  from font_find::@10 font_find::@3
+  (byte) font_find::return#5 ← phi( font_find::@10/(byte) font_find::return#2 font_find::@3/(byte) font_find::return#1 )
+  (byte) font_find::return#3 ← (byte) font_find::return#5
+  return 
+  to:@return
+@14: scope:[]  from @begin
+  call main 
+  to:@15
+@15: scope:[]  from @14
+  to:@end
+@end: scope:[]  from @15
+
+SYMBOL TABLE SSA
+(label) @14
+(label) @15
+(label) @begin
+(label) @end
+(const byte*) CHARGEN = (byte*)(number) $d000
+(const byte*) D018 = (byte*)(number) $d018
+(const byte*) FONT_COMPRESSED = (byte*)(number) $2800
+(const byte*) FONT_COMPRESSED_MAP[(number) $100]  = { fill( $100, 0) }
+(const byte*) FONT_ORIGINAL = (byte*)(number) $2000
+(const byte*) PROCPORT = (byte*)(number) 1
+(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7
+(const byte) PROCPORT_RAM_CHARROM = (byte) 1
+(const byte*) SCREEN = (byte*)(number) $400
+(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
+(byte*~) font_2x2::$0
+(number~) font_2x2::$1
+(byte~) font_2x2::$10
+(number~) font_2x2::$11
+(byte~) font_2x2::$12
+(byte~) font_2x2::$13
+(number~) font_2x2::$14
+(byte~) font_2x2::$15
+(bool~) font_2x2::$16
+(bool~) font_2x2::$17
+(byte*~) font_2x2::$18
+(byte*~) font_2x2::$19
+(byte~) font_2x2::$2
+(bool~) font_2x2::$20
+(bool~) font_2x2::$21
+(bool~) font_2x2::$22
+(byte~) font_2x2::$3
+(byte~) font_2x2::$4
+(word~) font_2x2::$5
+(word~) font_2x2::$6
+(word~) font_2x2::$7
+(word~) font_2x2::$8
+(bool~) font_2x2::$9
+(label) font_2x2::@1
+(label) font_2x2::@10
+(label) font_2x2::@11
+(label) font_2x2::@12
+(label) font_2x2::@2
+(label) font_2x2::@3
+(label) font_2x2::@4
+(label) font_2x2::@5
+(label) font_2x2::@6
+(label) font_2x2::@9
+(label) font_2x2::@return
+(byte) font_2x2::b
+(byte) font_2x2::b#0
+(byte) font_2x2::b#1
+(byte) font_2x2::b#2
+(byte) font_2x2::b#3
+(byte) font_2x2::b#4
+(byte) font_2x2::b#5
+(byte) font_2x2::c
+(byte) font_2x2::c#0
+(byte) font_2x2::c#1
+(byte) font_2x2::c#10
+(byte) font_2x2::c#11
+(byte) font_2x2::c#2
+(byte) font_2x2::c#3
+(byte) font_2x2::c#4
+(byte) font_2x2::c#5
+(byte) font_2x2::c#6
+(byte) font_2x2::c#7
+(byte) font_2x2::c#8
+(byte) font_2x2::c#9
+(byte*) font_2x2::font_2x2
+(byte*) font_2x2::font_2x2#0
+(byte*) font_2x2::font_2x2#1
+(byte*) font_2x2::font_original
+(byte*) font_2x2::font_original#0
+(byte*) font_2x2::font_original#1
+(byte) font_2x2::glyph_bit
+(byte) font_2x2::glyph_bit#0
+(byte) font_2x2::glyph_bits
+(byte) font_2x2::glyph_bits#0
+(byte) font_2x2::glyph_bits#1
+(byte) font_2x2::glyph_bits#2
+(byte) font_2x2::glyph_bits#3
+(byte) font_2x2::glyph_bits#4
+(byte) font_2x2::glyph_bits#5
+(word) font_2x2::glyph_bits_2x2
+(word) font_2x2::glyph_bits_2x2#0
+(word) font_2x2::glyph_bits_2x2#1
+(word) font_2x2::glyph_bits_2x2#2
+(word) font_2x2::glyph_bits_2x2#3
+(word) font_2x2::glyph_bits_2x2#4
+(word) font_2x2::glyph_bits_2x2#5
+(word) font_2x2::glyph_bits_2x2#6
+(word) font_2x2::glyph_bits_2x2#7
+(byte) font_2x2::l
+(byte) font_2x2::l#0
+(byte) font_2x2::l#1
+(byte) font_2x2::l#2
+(byte) font_2x2::l#3
+(byte) font_2x2::l#4
+(byte) font_2x2::l#5
+(byte) font_2x2::l#6
+(byte) font_2x2::l#7
+(byte) font_2x2::l#8
+(byte) font_2x2::l#9
+(byte) font_2x2::l2
+(byte) font_2x2::l2#0
+(byte) font_2x2::l2#1
+(byte) font_2x2::l2#2
+(byte) font_2x2::l2#3
+(byte) font_2x2::l2#4
+(byte) font_2x2::l2#5
+(byte) font_2x2::l2#6
+(byte) font_2x2::l2#7
+(byte) font_2x2::l2#8
+(byte) font_2x2::l2#9
+(byte*) font_2x2::next_2x2
+(byte*) font_2x2::next_2x2#0
+(byte*) font_2x2::next_2x2#1
+(byte*) font_2x2::next_2x2#10
+(byte*) font_2x2::next_2x2#11
+(byte*) font_2x2::next_2x2#2
+(byte*) font_2x2::next_2x2#3
+(byte*) font_2x2::next_2x2#4
+(byte*) font_2x2::next_2x2#5
+(byte*) font_2x2::next_2x2#6
+(byte*) font_2x2::next_2x2#7
+(byte*) font_2x2::next_2x2#8
+(byte*) font_2x2::next_2x2#9
+(byte*) font_2x2::next_2x2_left
+(byte*) font_2x2::next_2x2_left#0
+(byte*) font_2x2::next_2x2_left#1
+(byte*) font_2x2::next_2x2_left#2
+(byte*) font_2x2::next_2x2_left#3
+(byte*) font_2x2::next_2x2_left#4
+(byte*) font_2x2::next_2x2_left#5
+(byte*) font_2x2::next_2x2_left#6
+(byte*) font_2x2::next_2x2_left#7
+(byte*) font_2x2::next_2x2_left#8
+(byte*) font_2x2::next_2x2_right
+(byte*) font_2x2::next_2x2_right#0
+(byte*) font_2x2::next_2x2_right#1
+(byte*) font_2x2::next_2x2_right#2
+(byte*) font_2x2::next_2x2_right#3
+(byte*) font_2x2::next_2x2_right#4
+(byte*) font_2x2::next_2x2_right#5
+(byte*) font_2x2::next_2x2_right#6
+(byte*) font_2x2::next_2x2_right#7
+(byte*) font_2x2::next_2x2_right#8
+(byte*) font_2x2::next_original
+(byte*) font_2x2::next_original#0
+(byte*) font_2x2::next_original#1
+(byte*) font_2x2::next_original#10
+(byte*) font_2x2::next_original#11
+(byte*) font_2x2::next_original#2
+(byte*) font_2x2::next_original#3
+(byte*) font_2x2::next_original#4
+(byte*) font_2x2::next_original#5
+(byte*) font_2x2::next_original#6
+(byte*) font_2x2::next_original#7
+(byte*) font_2x2::next_original#8
+(byte*) font_2x2::next_original#9
+(byte()) font_compress((byte*) font_compress::font_original , (byte*) font_compress::font_compressed , (byte*) font_compress::compress_mapping)
+(byte~) font_compress::$0
+(bool~) font_compress::$1
+(bool~) font_compress::$2
+(bool~) font_compress::$3
+(bool~) font_compress::$4
+(label) font_compress::@1
+(label) font_compress::@2
+(label) font_compress::@3
+(label) font_compress::@4
+(label) font_compress::@5
+(label) font_compress::@6
+(label) font_compress::@8
+(label) font_compress::@return
+(byte*) font_compress::compress_mapping
+(byte*) font_compress::compress_mapping#0
+(byte*) font_compress::compress_mapping#1
+(byte*) font_compress::compress_mapping#2
+(byte*) font_compress::compress_mapping#3
+(byte*) font_compress::compress_mapping#4
+(byte*) font_compress::compress_mapping#5
+(byte*) font_compress::compress_mapping#6
+(byte*) font_compress::compress_mapping#7
+(byte*) font_compress::font_compressed
+(byte*) font_compress::font_compressed#0
+(byte*) font_compress::font_compressed#1
+(byte*) font_compress::font_compressed#2
+(byte*) font_compress::font_compressed#3
+(byte*) font_compress::font_compressed#4
+(byte*) font_compress::font_compressed#5
+(byte*) font_compress::font_compressed#6
+(byte*) font_compress::font_compressed#7
+(byte*) font_compress::font_original
+(byte*) font_compress::font_original#0
+(byte*) font_compress::font_original#1
+(byte) font_compress::font_size
+(byte) font_compress::font_size#0
+(byte) font_compress::font_size#1
+(byte) font_compress::font_size#2
+(byte) font_compress::font_size#3
+(byte) font_compress::font_size#4
+(byte) font_compress::font_size#5
+(byte) font_compress::font_size#6
+(byte) font_compress::font_size#7
+(byte) font_compress::font_size#8
+(byte) font_compress::found
+(byte) font_compress::found#0
+(byte) font_compress::found#1
+(byte) font_compress::found#2
+(byte) font_compress::i
+(byte) font_compress::i#0
+(byte) font_compress::i#1
+(byte) font_compress::i#2
+(byte) font_compress::i#3
+(byte) font_compress::i#4
+(byte) font_compress::i#5
+(byte) font_compress::i#6
+(byte) font_compress::i#7
+(byte) font_compress::l
+(byte) font_compress::l#0
+(byte) font_compress::l#1
+(byte) font_compress::l#2
+(byte*) font_compress::next_compressed
+(byte*) font_compress::next_compressed#0
+(byte*) font_compress::next_compressed#1
+(byte*) font_compress::next_compressed#2
+(byte*) font_compress::next_compressed#3
+(byte*) font_compress::next_compressed#4
+(byte*) font_compress::next_compressed#5
+(byte*) font_compress::next_compressed#6
+(byte*) font_compress::next_compressed#7
+(byte*) font_compress::next_original
+(byte*) font_compress::next_original#0
+(byte*) font_compress::next_original#1
+(byte*) font_compress::next_original#2
+(byte*) font_compress::next_original#3
+(byte*) font_compress::next_original#4
+(byte*) font_compress::next_original#5
+(byte*) font_compress::next_original#6
+(byte*) font_compress::next_original#7
+(byte) font_compress::return
+(byte) font_compress::return#0
+(byte) font_compress::return#1
+(byte) font_compress::return#2
+(byte) font_compress::return#3
+(byte()) font_find((byte*) font_find::glyph , (byte*) font_find::font , (byte) font_find::font_size)
+(bool~) font_find::$0
+(bool~) font_find::$1
+(bool~) font_find::$2
+(bool~) font_find::$3
+(bool~) font_find::$4
+(bool~) font_find::$5
+(label) font_find::@1
+(label) font_find::@10
+(label) font_find::@12
+(label) font_find::@2
+(label) font_find::@3
+(label) font_find::@4
+(label) font_find::@5
+(label) font_find::@6
+(label) font_find::@7
+(label) font_find::@return
+(byte*) font_find::font
+(byte*) font_find::font#0
+(byte*) font_find::font#1
+(byte*) font_find::font#2
+(byte*) font_find::font#3
+(byte*) font_find::font#4
+(byte*) font_find::font#5
+(byte*) font_find::font#6
+(byte*) font_find::font#7
+(byte*) font_find::font#8
+(byte*) font_find::font#9
+(byte) font_find::font_size
+(byte) font_find::font_size#0
+(byte) font_find::font_size#1
+(byte) font_find::font_size#2
+(byte) font_find::font_size#3
+(byte) font_find::font_size#4
+(byte) font_find::font_size#5
+(byte) font_find::font_size#6
+(byte) font_find::font_size#7
+(byte) font_find::font_size#8
+(byte) font_find::found
+(byte) font_find::found#0
+(byte) font_find::found#1
+(byte) font_find::found#2
+(byte) font_find::found#3
+(byte) font_find::found#4
+(byte*) font_find::glyph
+(byte*) font_find::glyph#0
+(byte*) font_find::glyph#1
+(byte*) font_find::glyph#2
+(byte*) font_find::glyph#3
+(byte*) font_find::glyph#4
+(byte*) font_find::glyph#5
+(byte*) font_find::glyph#6
+(byte*) font_find::glyph#7
+(byte*) font_find::glyph#8
+(byte) font_find::i
+(byte) font_find::i#0
+(byte) font_find::i#1
+(byte) font_find::i#2
+(byte) font_find::i#3
+(byte) font_find::i#4
+(byte) font_find::i#5
+(byte) font_find::i#6
+(byte) font_find::i#7
+(byte) font_find::i#8
+(byte) font_find::i#9
+(byte) font_find::l
+(byte) font_find::l#0
+(byte) font_find::l#1
+(byte) font_find::l#2
+(byte) font_find::l#3
+(byte) font_find::return
+(byte) font_find::return#0
+(byte) font_find::return#1
+(byte) font_find::return#2
+(byte) font_find::return#3
+(byte) font_find::return#4
+(byte) font_find::return#5
+(void()) main()
+(byte~) main::$2
+(bool~) main::$5
+(bool~) main::$6
+(label) main::@1
+(label) main::@11
+(label) main::@12
+(label) main::@13
+(label) main::@14
+(label) main::@15
+(label) main::@2
+(label) main::@3
+(label) main::@5
+(label) main::@6
+(label) main::@return
+(byte) main::c
+(byte) main::c#0
+(byte) main::c#1
+(byte) main::c#2
+(byte) main::c#3
+(byte) main::c#4
+(byte) main::c#5
+(label) main::toD0181
+(word~) main::toD0181_$0
+(number~) main::toD0181_$1
+(number~) main::toD0181_$2
+(number~) main::toD0181_$3
+(word~) main::toD0181_$4
+(byte~) main::toD0181_$5
+(number~) main::toD0181_$6
+(number~) main::toD0181_$7
+(number~) main::toD0181_$8
+(label) main::toD0181_@return
+(byte*) main::toD0181_gfx
+(byte*) main::toD0181_gfx#0
+(byte*) main::toD0181_gfx#1
+(byte) main::toD0181_return
+(byte) main::toD0181_return#0
+(byte) main::toD0181_return#1
+(byte) main::toD0181_return#2
+(byte) main::toD0181_return#3
+(byte*) main::toD0181_screen
+(byte*) main::toD0181_screen#0
+(byte*) main::toD0181_screen#1
+(byte) main::x
+(byte) main::x#0
+(byte) main::x#1
+(byte) main::x#2
+(byte) main::x#3
+(byte) main::y
+(byte) main::y#0
+(byte) main::y#1
+(byte) main::y#2
+(byte) main::y#3
+(byte) main::y#4
+(byte) main::y#5
+(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
+(bool~) memset::$0
+(bool~) memset::$1
+(byte*~) memset::$2
+(byte*~) memset::$3
+(bool~) memset::$4
+(label) memset::@1
+(label) memset::@2
+(label) memset::@4
+(label) memset::@5
+(label) memset::@return
+(byte) memset::c
+(byte) memset::c#0
+(byte) memset::c#1
+(byte) memset::c#2
+(byte) memset::c#3
+(byte) memset::c#4
+(byte*) memset::dst
+(byte*) memset::dst#0
+(byte*) memset::dst#1
+(byte*) memset::dst#2
+(byte*) memset::dst#3
+(byte*) memset::end
+(byte*) memset::end#0
+(byte*) memset::end#1
+(byte*) memset::end#2
+(word) memset::num
+(word) memset::num#0
+(word) memset::num#1
+(word) memset::num#2
+(void*) memset::return
+(void*) memset::return#0
+(void*) memset::return#1
+(void*) memset::return#2
+(void*) memset::return#3
+(void*) memset::str
+(void*) memset::str#0
+(void*) memset::str#1
+(void*) memset::str#2
+(void*) memset::str#3
+(void*) memset::str#4
+(void*) memset::str#5
+(void()) show((byte) show::c , (byte) show::x , (byte) show::y , (byte*) show::font_mapping)
+(word~) show::$0
+(number~) show::$1
+(byte*~) show::$2
+(number~) show::$3
+(byte*~) show::$4
+(number~) show::$5
+(number~) show::$6
+(number~) show::$7
+(label) show::@return
+(byte) show::c
+(byte) show::c#0
+(byte) show::c#1
+(byte*) show::font_mapping
+(byte*) show::font_mapping#0
+(byte*) show::font_mapping#1
+(byte*) show::ptr
+(byte*) show::ptr#0
+(byte) show::x
+(byte) show::x#0
+(byte) show::x#1
+(byte) show::y
+(byte) show::y#0
+(byte) show::y#1
+
+Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
+Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
+Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (unumber)(number) $3fff
+Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (number) 4
+Adding number conversion cast (unumber) main::toD0181_$2 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (unumber)(number) 4
+Adding number conversion cast (unumber) main::toD0181_$3 in (number~) main::toD0181_$3 ← > (unumber~) main::toD0181_$2
+Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
+Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (unumber)(number) 4
+Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f
+Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f
+Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7
+Adding number conversion cast (unumber) $400 in (word) memset::num#0 ← (number) $400
+Adding number conversion cast (unumber) $3e7 in *((const byte*) SCREEN+(number) $3e7) ← ++ *((const byte*) SCREEN+(number) $3e7)
+Adding number conversion cast (unumber) $50 in (number~) show::$1 ← (word~) show::$0 * (number) $50
+Adding number conversion cast (unumber) show::$1 in (number~) show::$1 ← (word~) show::$0 * (unumber)(number) $50
+Adding number conversion cast (unumber) 2 in (number~) show::$3 ← (byte) show::x#1 * (number) 2
+Adding number conversion cast (unumber) show::$3 in (number~) show::$3 ← (byte) show::x#1 * (unumber)(number) 2
+Adding number conversion cast (unumber) 0 in *((byte*) show::ptr#0 + (number) 0) ← *((byte*) show::font_mapping#1 + (byte) show::c#1)
+Adding number conversion cast (unumber) $40 in (number~) show::$5 ← (byte) show::c#1 + (number) $40
+Adding number conversion cast (unumber) show::$5 in (number~) show::$5 ← (byte) show::c#1 + (unumber)(number) $40
+Adding number conversion cast (unumber) 1 in *((byte*) show::ptr#0 + (number) 1) ← *((byte*) show::font_mapping#1 + (unumber~) show::$5)
+Adding number conversion cast (unumber) $80 in (number~) show::$6 ← (byte) show::c#1 + (number) $80
+Adding number conversion cast (unumber) show::$6 in (number~) show::$6 ← (byte) show::c#1 + (unumber)(number) $80
+Adding number conversion cast (unumber) $28 in *((byte*) show::ptr#0 + (number) $28) ← *((byte*) show::font_mapping#1 + (unumber~) show::$6)
+Adding number conversion cast (unumber) $c0 in (number~) show::$7 ← (byte) show::c#1 + (number) $c0
+Adding number conversion cast (unumber) show::$7 in (number~) show::$7 ← (byte) show::c#1 + (unumber)(number) $c0
+Adding number conversion cast (unumber) $29 in *((byte*) show::ptr#0 + (number) $29) ← *((byte*) show::font_mapping#1 + (unumber~) show::$7)
+Adding number conversion cast (unumber) $40*8 in (byte*~) font_2x2::$0 ← (byte*) font_2x2::next_2x2#2 + (number) $40*(number) 8
+Adding number conversion cast (unumber) $80 in (number~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (number) $80
+Adding number conversion cast (unumber) font_2x2::$1 in (number~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (unumber)(number) $80
+Adding number conversion cast (unumber) 0 in (bool~) font_2x2::$22 ← (number) 0 != (unumber~) font_2x2::$1
+Adding number conversion cast (unumber) 1 in (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (number) 1
+Adding number conversion cast (unumber) 1 in (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (number) 1
+Adding number conversion cast (unumber) 1 in (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#3 << (number) 1
+Adding number conversion cast (unumber) 1 in (number~) font_2x2::$11 ← (byte) font_2x2::l2#3 + (number) 1
+Adding number conversion cast (unumber) font_2x2::$11 in (number~) font_2x2::$11 ← (byte) font_2x2::l2#3 + (unumber)(number) 1
+Adding number conversion cast (unumber) 1 in (number~) font_2x2::$14 ← (byte) font_2x2::l2#3 + (number) 1
+Adding number conversion cast (unumber) font_2x2::$14 in (number~) font_2x2::$14 ← (byte) font_2x2::l2#3 + (unumber)(number) 1
+Adding number conversion cast (unumber) 2 in (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#3 + (number) 2
+Adding number conversion cast (unumber) 8 in (bool~) font_2x2::$16 ← (byte) font_2x2::l2#1 == (number) 8
+Adding number conversion cast (unumber) $80*8 in (byte*~) font_2x2::$18 ← (byte*) font_2x2::next_2x2#3 + (number) $80*(number) 8
+Adding number conversion cast (unumber) $c0*8 in (byte*~) font_2x2::$19 ← (byte*) font_2x2::next_2x2#3 + (number) $c0*(number) 8
+Adding number conversion cast (unumber) 0 in (byte) font_2x2::l2#2 ← (number) 0
+Adding number conversion cast (unumber) 8 in (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2#4 + (number) 8
+Adding number conversion cast (unumber) 8 in (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#3 + (number) 8
+Adding number conversion cast (unumber) $ff in (bool~) font_compress::$1 ← (byte) font_compress::found#0 == (number) $ff
+Adding number conversion cast (unumber) 8 in (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#3 + (number) 8
+Adding number conversion cast (unumber) 8 in (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#3 + (number) 8
+Adding number conversion cast (unumber) $ff in (byte) font_find::return#1 ← (number) $ff
+Adding number conversion cast (unumber) 0 in (byte) font_find::found#1 ← (number) 0
+Adding number conversion cast (unumber) 0 in (bool~) font_find::$5 ← (number) 0 != (byte) font_find::found#2
+Adding number conversion cast (unumber) 8 in (byte*) font_find::font#1 ← (byte*) font_find::font#3 + (number) 8
+Successful SSA optimization PassNAddNumberTypeConversions
+Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2
+Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2
+Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1
+Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1
+Inlining cast (word) memset::num#0 ← (unumber)(number) $400
+Inlining cast (word~) show::$0 ← (word)(byte) show::y#1
+Inlining cast (byte) font_2x2::l2#2 ← (unumber)(number) 0
+Inlining cast (byte) font_find::return#1 ← (unumber)(number) $ff
+Inlining cast (byte) font_find::found#1 ← (unumber)(number) 0
+Successful SSA optimization Pass2InlineCast
+Simplifying constant pointer cast (byte*) 1
+Simplifying constant pointer cast (byte*) 53248
+Simplifying constant pointer cast (byte*) 53272
+Simplifying constant pointer cast (byte*) 1024
+Simplifying constant pointer cast (byte*) 8192
+Simplifying constant pointer cast (byte*) 10240
+Simplifying constant integer cast 0
+Simplifying constant integer cast $3fff
+Simplifying constant integer cast 4
+Simplifying constant integer cast 4
+Simplifying constant integer cast $f
+Simplifying constant integer cast $400
+Simplifying constant integer cast $3e7
+Simplifying constant integer cast $50
+Simplifying constant integer cast 2
+Simplifying constant integer cast 0
+Simplifying constant integer cast $40
+Simplifying constant integer cast 1
+Simplifying constant integer cast $80
+Simplifying constant integer cast $28
+Simplifying constant integer cast $c0
+Simplifying constant integer cast $29
+Simplifying constant integer cast $80
+Simplifying constant integer cast 0
+Simplifying constant integer cast 1
+Simplifying constant integer cast 1
+Simplifying constant integer cast 1
+Simplifying constant integer cast 1
+Simplifying constant integer cast 1
+Simplifying constant integer cast 2
+Simplifying constant integer cast 8
+Simplifying constant integer cast 0
+Simplifying constant integer cast 8
+Simplifying constant integer cast 8
+Simplifying constant integer cast $ff
+Simplifying constant integer cast 8
+Simplifying constant integer cast 8
+Simplifying constant integer cast $ff
+Simplifying constant integer cast 0
+Simplifying constant integer cast 0
+Simplifying constant integer cast 8
+Successful SSA optimization PassNCastSimplification
+Finalized unsigned number type (byte) 0
+Finalized unsigned number type (word) $3fff
+Finalized unsigned number type (byte) 4
+Finalized unsigned number type (byte) 4
+Finalized unsigned number type (byte) $f
+Finalized unsigned number type (word) $400
+Finalized unsigned number type (word) $3e7
+Finalized unsigned number type (byte) $50
+Finalized unsigned number type (byte) 2
+Finalized unsigned number type (byte) 0
+Finalized unsigned number type (byte) $40
+Finalized unsigned number type (byte) 1
+Finalized unsigned number type (byte) $80
+Finalized unsigned number type (byte) $28
+Finalized unsigned number type (byte) $c0
+Finalized unsigned number type (byte) $29
+Finalized unsigned number type (byte) $80
+Finalized unsigned number type (byte) 0
+Finalized unsigned number type (byte) 1
+Finalized unsigned number type (byte) 1
+Finalized unsigned number type (byte) 1
+Finalized unsigned number type (byte) 1
+Finalized unsigned number type (byte) 1
+Finalized unsigned number type (byte) 2
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) 0
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) $ff
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) $ff
+Finalized unsigned number type (byte) 0
+Finalized unsigned number type (byte) 0
+Finalized unsigned number type (byte) 8
+Successful SSA optimization PassNFinalizeNumberTypeConversions
+Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (word) $3fff
+Inferred type updated to word in (unumber~) main::toD0181_$2 ← (word~) main::toD0181_$1 * (byte) 4
+Inferred type updated to byte in (unumber~) main::toD0181_$3 ← > (word~) main::toD0181_$2
+Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (byte) 4
+Inferred type updated to byte in (unumber~) main::toD0181_$7 ← (byte~) main::toD0181_$6 & (byte) $f
+Inferred type updated to byte in (unumber~) main::toD0181_$8 ← (byte~) main::toD0181_$3 | (byte~) main::toD0181_$7
+Inferred type updated to word in (unumber~) show::$1 ← (word~) show::$0 * (byte) $50
+Inferred type updated to byte in (unumber~) show::$3 ← (byte) show::x#1 * (byte) 2
+Inferred type updated to byte in (unumber~) show::$5 ← (byte) show::c#1 + (byte) $40
+Inferred type updated to byte in (unumber~) show::$6 ← (byte) show::c#1 + (byte) $80
+Inferred type updated to byte in (unumber~) show::$7 ← (byte) show::c#1 + (byte) $c0
+Inferred type updated to byte in (unumber~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80
+Inferred type updated to byte in (unumber~) font_2x2::$11 ← (byte) font_2x2::l2#3 + (byte) 1
+Inferred type updated to byte in (unumber~) font_2x2::$14 ← (byte) font_2x2::l2#3 + (byte) 1
+Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0
+Inversing boolean not [139] (bool~) font_2x2::$17 ← (byte) font_2x2::l2#1 != (byte) 8 from [138] (bool~) font_2x2::$16 ← (byte) font_2x2::l2#1 == (byte) 8
+Inversing boolean not [173] (bool~) font_compress::$2 ← (byte) font_compress::found#0 != (byte) $ff from [172] (bool~) font_compress::$1 ← (byte) font_compress::found#0 == (byte) $ff
+Inversing boolean not [208] (bool~) font_find::$2 ← *((byte*) font_find::glyph#1 + (byte) font_find::l#2) == *((byte*) font_find::font#2 + (byte) font_find::l#2) from [207] (bool~) font_find::$1 ← *((byte*) font_find::glyph#1 + (byte) font_find::l#2) != *((byte*) font_find::font#2 + (byte) font_find::l#2)
+Inversing boolean not [218] (bool~) font_find::$4 ← (byte) 0 == (byte) font_find::found#2 from [217] (bool~) font_find::$5 ← (byte) 0 != (byte) font_find::found#2
+Successful SSA optimization Pass2UnaryNotSimplification
+Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1 
+Alias memset::str#2 = memset::str#3 
+Alias memset::num#1 = memset::num#2 
+Alias memset::c#3 = memset::c#4 
+Alias memset::end#0 = memset::$3 
+Alias memset::c#1 = memset::c#2 
+Alias memset::dst#2 = memset::dst#3 
+Alias memset::end#1 = memset::end#2 
+Alias memset::str#4 = memset::str#5 
+Alias main::toD0181_screen#0 = main::toD0181_screen#1 
+Alias main::toD0181_gfx#0 = main::toD0181_gfx#1 
+Alias main::toD0181_return#0 = main::toD0181_$8 main::toD0181_return#2 main::toD0181_return#1 main::toD0181_return#3 main::$2 
+Alias main::c#2 = main::c#3 
+Alias main::x#2 = main::x#3 
+Alias main::y#2 = main::y#5 main::y#3 
+Alias main::c#1 = main::c#5 
+Alias show::ptr#0 = show::$4 
+Alias font_2x2::next_original#0 = font_2x2::font_original#1 
+Alias font_2x2::next_2x2#0 = font_2x2::font_2x2#1 
+Alias font_2x2::next_2x2_left#0 = font_2x2::next_2x2#2 
+Alias font_2x2::next_2x2_right#0 = font_2x2::$0 
+Alias font_2x2::glyph_bits_2x2#5 = font_2x2::glyph_bits_2x2#7 font_2x2::glyph_bits_2x2#6 
+Alias font_2x2::glyph_bits#2 = font_2x2::glyph_bits#4 font_2x2::glyph_bits#5 
+Alias font_2x2::b#3 = font_2x2::b#5 font_2x2::b#4 
+Alias font_2x2::next_2x2_left#4 = font_2x2::next_2x2_left#6 font_2x2::next_2x2_left#5 
+Alias font_2x2::l2#5 = font_2x2::l2#7 font_2x2::l2#6 
+Alias font_2x2::next_2x2_right#4 = font_2x2::next_2x2_right#6 font_2x2::next_2x2_right#5 
+Alias font_2x2::l#7 = font_2x2::l#9 font_2x2::l#8 
+Alias font_2x2::next_2x2#10 = font_2x2::next_2x2#8 font_2x2::next_2x2#9 
+Alias font_2x2::next_original#10 = font_2x2::next_original#9 font_2x2::next_original#11 
+Alias font_2x2::c#7 = font_2x2::c#9 font_2x2::c#8 
+Alias font_2x2::glyph_bit#0 = font_2x2::$4 
+Alias font_2x2::glyph_bits_2x2#1 = font_2x2::$6 
+Alias font_2x2::glyph_bits_2x2#2 = font_2x2::$8 font_2x2::glyph_bits_2x2#4 
+Alias font_2x2::next_2x2_left#2 = font_2x2::next_2x2_left#3 
+Alias font_2x2::l2#3 = font_2x2::l2#4 
+Alias font_2x2::next_2x2_right#2 = font_2x2::next_2x2_right#3 
+Alias font_2x2::l#4 = font_2x2::l#5 font_2x2::l#6 
+Alias font_2x2::next_2x2#3 = font_2x2::next_2x2#5 font_2x2::next_2x2#7 
+Alias font_2x2::next_original#6 = font_2x2::next_original#7 font_2x2::next_original#8 
+Alias font_2x2::c#4 = font_2x2::c#5 font_2x2::c#6 
+Alias font_2x2::next_2x2_left#1 = font_2x2::$18 
+Alias font_2x2::next_2x2_right#1 = font_2x2::$19 
+Alias font_2x2::next_2x2#4 = font_2x2::next_2x2#6 
+Alias font_2x2::next_original#3 = font_2x2::next_original#5 
+Alias font_2x2::c#2 = font_2x2::c#3 
+Alias font_compress::next_original#0 = font_compress::font_original#1 
+Alias font_compress::next_compressed#0 = font_compress::font_compressed#1 
+Alias font_find::return#0 = font_find::return#4 
+Alias font_compress::compress_mapping#3 = font_compress::compress_mapping#4 font_compress::compress_mapping#7 
+Alias font_compress::i#4 = font_compress::i#5 font_compress::i#7 
+Alias font_compress::next_original#2 = font_compress::next_original#6 font_compress::next_original#7 
+Alias font_compress::font_compressed#2 = font_compress::font_compressed#5 font_compress::font_compressed#7 
+Alias font_compress::font_size#2 = font_compress::font_size#7 font_compress::font_size#8 
+Alias font_compress::next_compressed#4 = font_compress::next_compressed#5 font_compress::next_compressed#6 
+Alias font_compress::found#0 = font_compress::$0 
+Alias font_compress::next_compressed#2 = font_compress::next_compressed#3 
+Alias font_compress::font_size#3 = font_compress::font_size#6 font_compress::found#1 
+Alias font_compress::compress_mapping#2 = font_compress::compress_mapping#5 
+Alias font_compress::i#3 = font_compress::i#6 
+Alias font_compress::next_original#4 = font_compress::next_original#5 
+Alias font_compress::font_compressed#4 = font_compress::font_compressed#6 
+Alias font_compress::return#1 = font_compress::font_size#4 font_compress::font_size#5 font_compress::return#3 font_compress::return#2 
+Alias font_find::glyph#2 = font_find::glyph#4 
+Alias font_find::font#4 = font_find::font#7 
+Alias font_find::i#2 = font_find::i#9 
+Alias font_find::font_size#1 = font_find::font_size#8 
+Alias font_find::l#2 = font_find::l#3 
+Alias font_find::glyph#1 = font_find::glyph#3 font_find::glyph#8 
+Alias font_find::font#2 = font_find::font#5 font_find::font#8 
+Alias font_find::found#3 = font_find::found#4 
+Alias font_find::i#6 = font_find::i#8 font_find::i#7 
+Alias font_find::font_size#5 = font_find::font_size#7 font_find::font_size#6 
+Alias font_find::font#3 = font_find::font#6 
+Alias font_find::i#3 = font_find::i#5 font_find::i#4 font_find::return#2 
+Alias font_find::font_size#3 = font_find::font_size#4 
+Alias font_find::glyph#6 = font_find::glyph#7 
+Alias font_find::return#3 = font_find::return#5 
+Successful SSA optimization Pass2AliasElimination
+Alias font_2x2::glyph_bits_2x2#3 = font_2x2::glyph_bits_2x2#5 
+Alias font_2x2::glyph_bits#2 = font_2x2::glyph_bits#3 
+Alias font_2x2::b#2 = font_2x2::b#3 
+Alias font_2x2::next_2x2_left#2 = font_2x2::next_2x2_left#4 
+Alias font_2x2::l2#3 = font_2x2::l2#5 
+Alias font_2x2::next_2x2_right#2 = font_2x2::next_2x2_right#4 
+Alias font_2x2::l#3 = font_2x2::l#4 font_2x2::l#7 
+Alias font_2x2::next_2x2#10 = font_2x2::next_2x2#3 font_2x2::next_2x2#4 
+Alias font_2x2::next_original#10 = font_2x2::next_original#6 font_2x2::next_original#3 
+Alias font_2x2::c#2 = font_2x2::c#4 font_2x2::c#7 
+Alias font_find::font#2 = font_find::font#3 
+Alias font_find::i#3 = font_find::i#6 
+Alias font_find::font_size#3 = font_find::font_size#5 
+Alias font_find::glyph#1 = font_find::glyph#6 
+Successful SSA optimization Pass2AliasElimination
+Identical Phi Values (word) memset::num#1 (word) memset::num#0
+Identical Phi Values (void*) memset::str#2 (void*) memset::str#0
+Identical Phi Values (byte) memset::c#3 (byte) memset::c#0
+Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0
+Identical Phi Values (void*) memset::str#4 (void*) memset::str#2
+Identical Phi Values (byte) memset::c#1 (byte) memset::c#3
+Identical Phi Values (byte) main::y#2 (byte) main::y#4
+Identical Phi Values (byte) show::y#1 (byte) show::y#0
+Identical Phi Values (byte) show::x#1 (byte) show::x#0
+Identical Phi Values (byte*) show::font_mapping#1 (byte*) show::font_mapping#0
+Identical Phi Values (byte) show::c#1 (byte) show::c#0
+Identical Phi Values (byte*) font_2x2::next_original#0 (byte*) font_2x2::font_original#0
+Identical Phi Values (byte*) font_2x2::next_2x2#0 (byte*) font_2x2::font_2x2#0
+Identical Phi Values (byte*) font_2x2::next_2x2_left#2 (byte*) font_2x2::next_2x2_left#7
+Identical Phi Values (byte) font_2x2::l2#3 (byte) font_2x2::l2#8
+Identical Phi Values (byte*) font_2x2::next_2x2_right#2 (byte*) font_2x2::next_2x2_right#7
+Identical Phi Values (byte) font_2x2::l#3 (byte) font_2x2::l#2
+Identical Phi Values (byte*) font_2x2::next_2x2#10 (byte*) font_2x2::next_2x2#11
+Identical Phi Values (byte*) font_2x2::next_original#10 (byte*) font_2x2::next_original#2
+Identical Phi Values (byte) font_2x2::c#2 (byte) font_2x2::c#10
+Identical Phi Values (byte*) font_compress::next_original#0 (byte*) font_compress::font_original#0
+Identical Phi Values (byte*) font_compress::next_compressed#0 (byte*) font_compress::font_compressed#0
+Identical Phi Values (byte*) font_compress::compress_mapping#6 (byte*) font_compress::compress_mapping#0
+Identical Phi Values (byte*) font_compress::next_original#4 (byte*) font_compress::next_original#2
+Identical Phi Values (byte*) font_compress::next_compressed#2 (byte*) font_compress::next_compressed#4
+Identical Phi Values (byte) font_compress::font_size#3 (byte) font_compress::font_size#2
+Identical Phi Values (byte*) font_compress::compress_mapping#2 (byte*) font_compress::compress_mapping#3
+Identical Phi Values (byte) font_compress::i#3 (byte) font_compress::i#4
+Identical Phi Values (byte*) font_compress::font_compressed#4 (byte*) font_compress::font_compressed#2
+Identical Phi Values (byte) font_find::font_size#2 (byte) font_find::font_size#0
+Identical Phi Values (byte*) font_find::glyph#5 (byte*) font_find::glyph#0
+Identical Phi Values (byte*) font_find::font#9 (byte*) font_find::font#0
+Identical Phi Values (byte*) font_find::glyph#1 (byte*) font_find::glyph#2
+Identical Phi Values (byte*) font_find::font#2 (byte*) font_find::font#4
+Identical Phi Values (byte) font_find::found#3 (byte) font_find::found#0
+Identical Phi Values (byte) font_find::i#3 (byte) font_find::i#2
+Identical Phi Values (byte) font_find::font_size#3 (byte) font_find::font_size#1
+Successful SSA optimization Pass2IdenticalPhiElimination
+Identical Phi Values (void*) memset::return#0 (void*) memset::str#0
+Identical Phi Values (byte*) font_2x2::next_original#2 (byte*) font_2x2::next_original#4
+Identical Phi Values (byte*) font_2x2::next_2x2#11 (byte*) font_2x2::next_2x2_left#0
+Identical Phi Values (byte) font_2x2::c#10 (byte) font_2x2::c#11
+Identical Phi Values (byte*) font_compress::compress_mapping#1 (byte*) font_compress::compress_mapping#3
+Identical Phi Values (byte) font_compress::i#2 (byte) font_compress::i#4
+Identical Phi Values (byte*) font_compress::next_original#3 (byte*) font_compress::next_original#2
+Identical Phi Values (byte*) font_compress::font_compressed#3 (byte*) font_compress::font_compressed#2
+Identical Phi Values (byte) font_find::font_size#1 (byte) font_find::font_size#0
+Identical Phi Values (byte*) font_find::glyph#2 (byte*) font_find::glyph#0
+Successful SSA optimization Pass2IdenticalPhiElimination
+Identical Phi Values (byte*) font_compress::font_compressed#2 (byte*) font_compress::font_compressed#0
+Identical Phi Values (byte*) font_compress::compress_mapping#3 (byte*) font_compress::compress_mapping#0
+Successful SSA optimization Pass2IdenticalPhiElimination
+Identified duplicate assignment right side [130] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2
+Identified duplicate assignment right side [135] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2
+Successful SSA optimization Pass2DuplicateRValueIdentification
+Simple Condition (bool~) memset::$1 [2] if((word) memset::num#0<=(byte) 0) goto memset::@1
+Simple Condition (bool~) memset::$4 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
+Simple Condition (bool~) main::$5 [55] if((byte) main::x#1!=rangelast(0,7)) goto main::@2
+Simple Condition (bool~) main::$6 [58] if((byte) main::y#1!=rangelast(0,7)) goto main::@1
+Simple Condition (bool~) font_2x2::$22 [89] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4
+Simple Condition (bool~) font_2x2::$9 [100] if((byte) font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3
+Simple Condition (bool~) font_2x2::$17 [113] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@11
+Simple Condition (bool~) font_2x2::$20 [117] if((byte) font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2
+Simple Condition (bool~) font_2x2::$21 [125] if((byte) font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1
+Simple Condition (bool~) font_compress::$2 [138] if((byte) font_compress::found#0!=(byte) $ff) goto font_compress::@2
+Simple Condition (bool~) font_compress::$4 [144] if((byte) font_compress::i#1!=rangelast(0,$ff)) goto font_compress::@1
+Simple Condition (bool~) font_compress::$3 [150] if((byte) font_compress::l#1!=rangelast(0,7)) goto font_compress::@3
+Simple Condition (bool~) font_find::$0 [158] if((byte) font_find::i#2<(byte) font_find::font_size#0) goto font_find::@2
+Simple Condition (bool~) font_find::$2 [164] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@5
+Simple Condition (bool~) font_find::$3 [167] if((byte) font_find::l#1!=rangelast(0,7)) goto font_find::@4
+Simple Condition (bool~) font_find::$4 [171] if((byte) 0==(byte) font_find::found#2) goto font_find::@12
+Successful SSA optimization Pass2ConditionalJumpSimplification
+Constant (const byte*) font_2x2::font_original#0 = CHARGEN
+Constant (const byte*) font_2x2::font_2x2#0 = FONT_ORIGINAL
+Constant (const byte*) font_compress::font_original#0 = FONT_ORIGINAL
+Constant (const byte*) font_compress::font_compressed#0 = FONT_COMPRESSED
+Constant (const byte*) font_compress::compress_mapping#0 = FONT_COMPRESSED_MAP
+Constant (const byte*) main::toD0181_screen#0 = SCREEN
+Constant (const byte*) main::toD0181_gfx#0 = FONT_COMPRESSED
+Constant (const void*) memset::str#0 = (void*)SCREEN
+Constant (const word) memset::num#0 = $400
+Constant (const byte) main::c#0 = 0
+Constant (const byte) main::y#0 = 0
+Constant (const byte) main::x#0 = 0
+Constant (const byte*) show::font_mapping#0 = FONT_COMPRESSED_MAP
+Constant (const byte) font_2x2::c#0 = 0
+Constant (const byte) font_2x2::l2#0 = 0
+Constant (const byte) font_2x2::l#0 = 0
+Constant (const word) font_2x2::glyph_bits_2x2#0 = 0
+Constant (const byte) font_2x2::b#0 = 0
+Constant (const byte) font_2x2::$3 = 1
+Constant (const byte) font_2x2::$2 = 0
+Constant (const byte) font_2x2::l2#2 = 0
+Constant (const byte) font_compress::font_size#0 = 0
+Constant (const byte) font_compress::i#0 = 0
+Constant (const byte) font_compress::l#0 = 0
+Constant (const byte) font_find::i#0 = 0
+Constant (const byte) font_find::found#0 = 1
+Constant (const byte) font_find::l#0 = 0
+Constant (const byte) font_find::return#1 = $ff
+Constant (const byte) font_find::found#1 = 0
+Successful SSA optimization Pass2ConstantIdentification
+Constant (const byte*) memset::$2 = (byte*)memset::str#0
+Constant (const byte*) memset::dst#0 = (byte*)memset::str#0
+Constant (const word) main::toD0181_$0 = (word)main::toD0181_screen#0
+Constant (const word) main::toD0181_$4 = (word)main::toD0181_gfx#0
+Constant (const void*) memset::return#2 = memset::str#0
+Constant (const byte*) font_find::font#0 = font_compress::font_compressed#0
+Successful SSA optimization Pass2ConstantIdentification
+if() condition always false - eliminating [2] if((const word) memset::num#0<=(byte) 0) goto memset::@1
+if() condition always true - replacing block destination [59] if(true) goto main::@6
+Successful SSA optimization Pass2ConstantIfs
+Resolved ranged next value [53] main::x#1 ← ++ main::x#2 to ++
+Resolved ranged comparison value [55] if(main::x#1!=rangelast(0,7)) goto main::@2 to (number) 8
+Resolved ranged next value [56] main::y#1 ← ++ main::y#4 to ++
+Resolved ranged comparison value [58] if(main::y#1!=rangelast(0,7)) goto main::@1 to (number) 8
+Resolved ranged next value [98] font_2x2::b#1 ← ++ font_2x2::b#2 to ++
+Resolved ranged comparison value [100] if(font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 to (number) 8
+Resolved ranged next value [115] font_2x2::l#1 ← ++ font_2x2::l#2 to ++
+Resolved ranged comparison value [117] if(font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 to (number) 8
+Resolved ranged next value [123] font_2x2::c#1 ← ++ font_2x2::c#11 to ++
+Resolved ranged comparison value [125] if(font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 to (number) $40
+Resolved ranged next value [142] font_compress::i#1 ← ++ font_compress::i#4 to ++
+Resolved ranged comparison value [144] if(font_compress::i#1!=rangelast(0,$ff)) goto font_compress::@1 to (number) 0
+Resolved ranged next value [148] font_compress::l#1 ← ++ font_compress::l#2 to ++
+Resolved ranged comparison value [150] if(font_compress::l#1!=rangelast(0,7)) goto font_compress::@3 to (number) 8
+Resolved ranged next value [165] font_find::l#1 ← ++ font_find::l#2 to ++
+Resolved ranged comparison value [167] if(font_find::l#1!=rangelast(0,7)) goto font_find::@4 to (number) 8
+Simplifying expression containing zero show::ptr#0 in [68] *((byte*) show::ptr#0 + (byte) 0) ← *((const byte*) show::font_mapping#0 + (byte) show::c#0)
+Successful SSA optimization PassNSimplifyExpressionWithZero
+Eliminating unused variable (byte) font_compress::return#0 and assignment [12] (byte) font_compress::return#0 ← (byte) font_compress::return#1
+Eliminating unused constant (const void*) memset::return#2
+Successful SSA optimization PassNEliminateUnusedVars
+Removing unused block main::@return
+Successful SSA optimization Pass2EliminateUnusedBlocks
+Adding number conversion cast (unumber) 8 in if((byte) main::x#1!=(number) 8) goto main::@2
+Adding number conversion cast (unumber) 8 in if((byte) main::y#1!=(number) 8) goto main::@1
+Adding number conversion cast (unumber) 8 in if((byte) font_2x2::b#1!=(number) 8) goto font_2x2::@3
+Adding number conversion cast (unumber) 8 in if((byte) font_2x2::l#1!=(number) 8) goto font_2x2::@2
+Adding number conversion cast (unumber) $40 in if((byte) font_2x2::c#1!=(number) $40) goto font_2x2::@1
+Adding number conversion cast (unumber) 0 in if((byte) font_compress::i#1!=(number) 0) goto font_compress::@1
+Adding number conversion cast (unumber) 8 in if((byte) font_compress::l#1!=(number) 8) goto font_compress::@3
+Adding number conversion cast (unumber) 8 in if((byte) font_find::l#1!=(number) 8) goto font_find::@4
+Successful SSA optimization PassNAddNumberTypeConversions
+Simplifying constant integer cast 8
+Simplifying constant integer cast 8
+Simplifying constant integer cast 8
+Simplifying constant integer cast 8
+Simplifying constant integer cast $40
+Simplifying constant integer cast 0
+Simplifying constant integer cast 8
+Simplifying constant integer cast 8
+Successful SSA optimization PassNCastSimplification
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) $40
+Finalized unsigned number type (byte) 0
+Finalized unsigned number type (byte) 8
+Finalized unsigned number type (byte) 8
+Successful SSA optimization PassNFinalizeNumberTypeConversions
+Alias font_2x2::$12 = font_2x2::$10 
+Alias font_2x2::$15 = font_2x2::$13 
+Successful SSA optimization Pass2AliasElimination
+Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0
+Constant right-side identified [12] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff
+Constant right-side identified [15] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4
+Successful SSA optimization Pass2ConstantRValueConsolidation
+Constant (const byte*) memset::end#0 = memset::$2+memset::num#0
+Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff
+Constant (const byte) main::toD0181_$5 = >main::toD0181_$4
+Successful SSA optimization Pass2ConstantIdentification
+Constant right-side identified [11] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4
+Constant right-side identified [13] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4
+Successful SSA optimization Pass2ConstantRValueConsolidation
+Constant (const word) main::toD0181_$2 = main::toD0181_$1*4
+Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4
+Successful SSA optimization Pass2ConstantIdentification
+Constant right-side identified [11] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2
+Constant right-side identified [12] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f
+Successful SSA optimization Pass2ConstantRValueConsolidation
+Constant (const byte) main::toD0181_$3 = >main::toD0181_$2
+Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f
+Successful SSA optimization Pass2ConstantIdentification
+Constant right-side identified [11] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7
+Successful SSA optimization Pass2ConstantRValueConsolidation
+Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7
+Successful SSA optimization Pass2ConstantIdentification
+Rewriting multiplication to use shift and addition[27] (word~) show::$1 ← (word~) show::$0 * (byte) $50
+Rewriting multiplication to use shift [29] (byte~) show::$3 ← (byte) show::x#0 * (byte) 2
+Successful SSA optimization Pass2MultiplyToShiftRewriting
+Inlining constant with var siblings (const byte*) memset::dst#0
+Inlining constant with var siblings (const byte) main::c#0
+Inlining constant with var siblings (const byte) main::y#0
+Inlining constant with var siblings (const byte) main::x#0
+Inlining constant with var siblings (const byte) font_2x2::c#0
+Inlining constant with var siblings (const byte) font_2x2::l2#0
+Inlining constant with var siblings (const byte) font_2x2::l#0
+Inlining constant with var siblings (const word) font_2x2::glyph_bits_2x2#0
+Inlining constant with var siblings (const byte) font_2x2::b#0
+Inlining constant with var siblings (const byte) font_2x2::l2#2
+Inlining constant with var siblings (const byte) font_compress::font_size#0
+Inlining constant with var siblings (const byte) font_compress::i#0
+Inlining constant with var siblings (const byte) font_compress::l#0
+Inlining constant with var siblings (const byte) font_find::i#0
+Inlining constant with var siblings (const byte) font_find::found#0
+Inlining constant with var siblings (const byte) font_find::l#0
+Inlining constant with var siblings (const byte) font_find::return#1
+Inlining constant with var siblings (const byte) font_find::found#1
+Inlining constant with var siblings (const byte*) font_find::font#0
+Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN
+Constant inlined main::toD0181_gfx#0 = (const byte*) FONT_COMPRESSED
+Constant inlined font_find::return#1 = (byte) $ff
+Constant inlined font_compress::compress_mapping#0 = (const byte*) FONT_COMPRESSED_MAP
+Constant inlined font_2x2::glyph_bits_2x2#0 = (word) 0
+Constant inlined font_2x2::l2#0 = (byte) 0
+Constant inlined font_2x2::font_2x2#0 = (const byte*) FONT_ORIGINAL
+Constant inlined memset::$2 = (byte*)(const void*) memset::str#0
+Constant inlined main::c#0 = (byte) 0
+Constant inlined font_2x2::l2#2 = (byte) 0
+Constant inlined font_compress::font_compressed#0 = (const byte*) FONT_COMPRESSED
+Constant inlined show::font_mapping#0 = (const byte*) FONT_COMPRESSED_MAP
+Constant inlined font_find::font#0 = (const byte*) FONT_COMPRESSED
+Constant inlined font_2x2::$2 = (byte) 0
+Constant inlined font_2x2::$3 = (byte) 1
+Constant inlined font_2x2::b#0 = (byte) 0
+Constant inlined font_find::found#0 = (byte) 1
+Constant inlined main::toD0181_$7 = >(word)(const byte*) FONT_COMPRESSED/(byte) 4&(byte) $f
+Constant inlined font_find::found#1 = (byte) 0
+Constant inlined font_2x2::c#0 = (byte) 0
+Constant inlined main::toD0181_$2 = (word)(const byte*) SCREEN&(word) $3fff*(byte) 4
+Constant inlined main::toD0181_$1 = (word)(const byte*) SCREEN&(word) $3fff
+Constant inlined font_find::i#0 = (byte) 0
+Constant inlined main::toD0181_$0 = (word)(const byte*) SCREEN
+Constant inlined main::x#0 = (byte) 0
+Constant inlined font_compress::font_size#0 = (byte) 0
+Constant inlined main::y#0 = (byte) 0
+Constant inlined main::toD0181_$6 = >(word)(const byte*) FONT_COMPRESSED/(byte) 4
+Constant inlined main::toD0181_$5 = >(word)(const byte*) FONT_COMPRESSED
+Constant inlined font_compress::i#0 = (byte) 0
+Constant inlined main::toD0181_$4 = (word)(const byte*) FONT_COMPRESSED
+Constant inlined font_compress::l#0 = (byte) 0
+Constant inlined main::toD0181_$3 = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4
+Constant inlined font_2x2::l#0 = (byte) 0
+Constant inlined font_find::l#0 = (byte) 0
+Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0
+Constant inlined font_compress::font_original#0 = (const byte*) FONT_ORIGINAL
+Constant inlined font_2x2::font_original#0 = (const byte*) CHARGEN
+Successful SSA optimization Pass2ConstantInlining
+Consolidated array index constant in *(FONT_COMPRESSED_MAP+' ')
+Consolidated array index constant in assignment *(FONT_COMPRESSED_MAP+$40 + show::$5)
+Consolidated array index constant in assignment *(FONT_COMPRESSED_MAP+$80 + show::$6)
+Consolidated array index constant in assignment *(FONT_COMPRESSED_MAP+$c0 + show::$7)
+Successful SSA optimization Pass2ConstantAdditionElimination
+Alias show::$1 = show::$10 
+Successful SSA optimization Pass2AliasElimination
+Added new block during phi lifting main::@16(between main::@3 and main::@1)
+Added new block during phi lifting main::@17(between main::@15 and main::@2)
+Added new block during phi lifting font_2x2::@14(between font_2x2::@12 and font_2x2::@1)
+Added new block during phi lifting font_2x2::@15(between font_2x2::@11 and font_2x2::@2)
+Added new block during phi lifting font_2x2::@16(between font_2x2::@6 and font_2x2::@3)
+Added new block during phi lifting font_2x2::@17(between font_2x2::@9 and font_2x2::@11)
+Added new block during phi lifting font_compress::@9(between font_compress::@2 and font_compress::@1)
+Added new block during phi lifting font_compress::@10(between font_compress::@8 and font_compress::@2)
+Added new block during phi lifting font_compress::@11(between font_compress::@3 and font_compress::@3)
+Added new block during phi lifting font_find::@17(between font_find::@5 and font_find::@4)
+Adding NOP phi() at start of @begin
+Adding NOP phi() at start of @14
+Adding NOP phi() at start of @15
+Adding NOP phi() at start of @end
+Adding NOP phi() at start of main::@13
+Adding NOP phi() at start of main::toD0181
+Adding NOP phi() at start of main::toD0181_@return
+Adding NOP phi() at start of main::@14
+Adding NOP phi() at start of main::@5
+Adding NOP phi() at start of memset
+Adding NOP phi() at start of memset::@2
+Adding NOP phi() at start of memset::@1
+Adding NOP phi() at start of font_compress
+Adding NOP phi() at start of font_compress::@5
+Adding NOP phi() at start of font_compress::@6
+Adding NOP phi() at start of font_find
+Adding NOP phi() at start of font_find::@3
+Adding NOP phi() at start of font_find::@2
+Adding NOP phi() at start of font_find::@7
+Adding NOP phi() at start of font_2x2
+Adding NOP phi() at start of font_2x2::@5
+Adding NOP phi() at start of font_2x2::@4
+CALL GRAPH
+Calls in [] to main:2 
+Calls in [main] to font_2x2:7 font_compress:10 memset:16 show:24 
+Calls in [font_compress] to font_find:64 
+
+Created 32 initial phi equivalence classes
+Coalesced [19] main::c#7 ← main::c#4
+Coalesced [32] main::c#6 ← main::c#1
+Coalesced [33] main::y#6 ← main::y#1
+Coalesced (already) [34] main::c#8 ← main::c#1
+Coalesced [35] main::x#4 ← main::x#1
+Coalesced [59] memset::dst#4 ← memset::dst#1
+Not coalescing [75] font_compress::found#3 ← font_compress::font_size#2
+Coalesced [76] font_compress::return#4 ← font_compress::font_size#1
+Coalesced [77] font_compress::next_compressed#9 ← font_compress::next_compressed#1
+Coalesced [85] font_compress::next_original#8 ← font_compress::next_original#1
+Not coalescing [86] font_compress::font_size#9 ← font_compress::return#1
+Coalesced [87] font_compress::i#8 ← font_compress::i#1
+Coalesced [88] font_compress::next_compressed#8 ← font_compress::next_compressed#7
+Coalesced [89] font_compress::l#3 ← font_compress::l#1
+Coalesced [90] font_compress::found#4 ← font_compress::found#0
+Not coalescing [91] font_compress::return#5 ← font_compress::font_size#2
+Coalesced (already) [92] font_compress::next_compressed#10 ← font_compress::next_compressed#4
+Coalesced [105] font_find::return#6 ← font_find::i#2
+Coalesced [108] font_find::i#10 ← font_find::i#1
+Coalesced [109] font_find::font#10 ← font_find::font#1
+Coalesced [112] font_find::l#4 ← font_find::l#1
+Not coalescing [116] font_2x2::next_2x2_left#10 ← font_2x2::next_2x2_left#0
+Coalesced [117] font_2x2::next_2x2_right#9 ← font_2x2::next_2x2_right#0
+Coalesced [120] font_2x2::glyph_bits#6 ← font_2x2::glyph_bits#0
+Coalesced [145] font_2x2::next_2x2_left#12 ← font_2x2::next_2x2_left#1
+Coalesced [146] font_2x2::next_2x2_right#11 ← font_2x2::next_2x2_right#1
+Coalesced [155] font_2x2::next_2x2_left#9 ← font_2x2::next_2x2#1
+Coalesced [156] font_2x2::next_original#12 ← font_2x2::next_original#1
+Coalesced [157] font_2x2::c#12 ← font_2x2::c#1
+Coalesced [158] font_2x2::l#10 ← font_2x2::l#1
+Coalesced [159] font_2x2::next_2x2_left#11 ← font_2x2::next_2x2_left#8
+Coalesced [160] font_2x2::l2#10 ← font_2x2::l2#9
+Coalesced [161] font_2x2::next_2x2_right#10 ← font_2x2::next_2x2_right#8
+Coalesced (already) [162] font_2x2::next_2x2_left#13 ← font_2x2::next_2x2_left#7
+Coalesced [163] font_2x2::l2#11 ← font_2x2::l2#1
+Coalesced (already) [164] font_2x2::next_2x2_right#12 ← font_2x2::next_2x2_right#7
+Coalesced [165] font_2x2::glyph_bits#7 ← font_2x2::glyph_bits#1
+Coalesced [166] font_2x2::glyph_bits_2x2#8 ← font_2x2::glyph_bits_2x2#2
+Coalesced [167] font_2x2::b#6 ← font_2x2::b#1
+Coalesced down to 26 phi equivalence classes
+Culled Empty Block (label) @15
+Culled Empty Block (label) main::@13
+Culled Empty Block (label) main::toD0181_@return
+Culled Empty Block (label) main::@14
+Culled Empty Block (label) main::@5
+Culled Empty Block (label) main::@16
+Culled Empty Block (label) main::@17
+Culled Empty Block (label) memset::@2
+Culled Empty Block (label) memset::@1
+Culled Empty Block (label) font_compress::@5
+Culled Empty Block (label) font_compress::@6
+Culled Empty Block (label) font_compress::@11
+Culled Empty Block (label) font_find::@3
+Culled Empty Block (label) font_find::@2
+Culled Empty Block (label) font_find::@7
+Culled Empty Block (label) font_find::@10
+Culled Empty Block (label) font_find::@17
+Culled Empty Block (label) font_2x2::@5
+Culled Empty Block (label) font_2x2::@14
+Culled Empty Block (label) font_2x2::@15
+Culled Empty Block (label) font_2x2::@17
+Culled Empty Block (label) font_2x2::@16
+Renumbering block @14 to @1
+Renumbering block memset::@4 to memset::@1
+Renumbering block memset::@5 to memset::@2
+Renumbering block main::@6 to main::@4
+Renumbering block main::@11 to main::@5
+Renumbering block main::@12 to main::@6
+Renumbering block main::@15 to main::@7
+Renumbering block font_2x2::@6 to font_2x2::@5
+Renumbering block font_2x2::@9 to font_2x2::@6
+Renumbering block font_2x2::@10 to font_2x2::@7
+Renumbering block font_2x2::@11 to font_2x2::@8
+Renumbering block font_2x2::@12 to font_2x2::@9
+Renumbering block font_compress::@8 to font_compress::@5
+Renumbering block font_compress::@9 to font_compress::@6
+Renumbering block font_compress::@10 to font_compress::@7
+Renumbering block font_find::@4 to font_find::@2
+Renumbering block font_find::@5 to font_find::@3
+Renumbering block font_find::@6 to font_find::@4
+Renumbering block font_find::@12 to font_find::@5
+Adding NOP phi() at start of @begin
+Adding NOP phi() at start of @1
+Adding NOP phi() at start of @end
+Adding NOP phi() at start of main::toD0181
+Adding NOP phi() at start of memset
+Adding NOP phi() at start of font_compress
+Adding NOP phi() at start of font_find
+Adding NOP phi() at start of font_2x2
+Adding NOP phi() at start of font_2x2::@4
+
+FINAL CONTROL FLOW GRAPH
+@begin: scope:[]  from
+  [0] phi()
+  to:@1
+@1: scope:[]  from @begin
+  [1] phi()
+  [2] call main 
+  to:@end
+@end: scope:[]  from @1
+  [3] phi()
+
+(void()) main()
+main: scope:[main]  from @1
+  asm { sei  }
+  [5] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM
+  [6] call font_2x2 
+  to:main::@6
+main::@6: scope:[main]  from main
+  [7] *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO
+  asm { cli  }
+  [9] call font_compress 
+  to:main::toD0181
+main::toD0181: scope:[main]  from main::@6
+  [10] phi()
+  to:main::@5
+main::@5: scope:[main]  from main::toD0181
+  [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0
+  [12] (byte) memset::c#0 ← *((const byte*) FONT_COMPRESSED_MAP+(byte) ' ')
+  [13] call memset 
+  to:main::@1
+main::@1: scope:[main]  from main::@3 main::@5
+  [14] (byte) main::y#4 ← phi( main::@5/(byte) 0 main::@3/(byte) main::y#1 )
+  [14] (byte) main::c#4 ← phi( main::@5/(byte) 0 main::@3/(byte) main::c#1 )
+  to:main::@2
+main::@2: scope:[main]  from main::@1 main::@7
+  [15] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@7/(byte) main::x#1 )
+  [15] (byte) main::c#2 ← phi( main::@1/(byte) main::c#4 main::@7/(byte) main::c#1 )
+  [16] (byte) show::c#0 ← (byte) main::c#2
+  [17] (byte) show::x#0 ← (byte) main::x#2
+  [18] (byte) show::y#0 ← (byte) main::y#4
+  [19] call show 
+  to:main::@7
+main::@7: scope:[main]  from main::@2
+  [20] (byte) main::c#1 ← ++ (byte) main::c#2
+  [21] (byte) main::x#1 ← ++ (byte) main::x#2
+  [22] if((byte) main::x#1!=(byte) 8) goto main::@2
+  to:main::@3
+main::@3: scope:[main]  from main::@7
+  [23] (byte) main::y#1 ← ++ (byte) main::y#4
+  [24] if((byte) main::y#1!=(byte) 8) goto main::@1
+  to:main::@4
+main::@4: scope:[main]  from main::@3 main::@4
+  [25] *((const byte*) SCREEN+(word) $3e7) ← ++ *((const byte*) SCREEN+(word) $3e7)
+  to:main::@4
+
+(void()) show((byte) show::c , (byte) show::x , (byte) show::y , (byte*) show::font_mapping)
+show: scope:[show]  from main::@2
+  [26] (word~) show::$0 ← (word)(byte) show::y#0
+  [27] (word~) show::$8 ← (word~) show::$0 << (byte) 2
+  [28] (word~) show::$9 ← (word~) show::$8 + (word~) show::$0
+  [29] (word~) show::$1 ← (word~) show::$9 << (byte) 4
+  [30] (byte*~) show::$2 ← (const byte*) SCREEN + (word~) show::$1
+  [31] (byte~) show::$3 ← (byte) show::x#0 << (byte) 1
+  [32] (byte*) show::ptr#0 ← (byte*~) show::$2 + (byte~) show::$3
+  [33] *((byte*) show::ptr#0) ← *((const byte*) FONT_COMPRESSED_MAP + (byte) show::c#0)
+  [34] (byte~) show::$5 ← (byte) show::c#0
+  [35] *((byte*) show::ptr#0 + (byte) 1) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $40 + (byte~) show::$5)
+  [36] (byte~) show::$6 ← (byte) show::c#0
+  [37] *((byte*) show::ptr#0 + (byte) $28) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $80 + (byte~) show::$6)
+  [38] (byte~) show::$7 ← (byte) show::c#0
+  [39] *((byte*) show::ptr#0 + (byte) $29) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $c0 + (byte~) show::$7)
+  to:show::@return
+show::@return: scope:[show]  from show
+  [40] return 
+  to:@return
+
+(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
+memset: scope:[memset]  from main::@5
+  [41] phi()
+  to:memset::@1
+memset::@1: scope:[memset]  from memset memset::@2
+  [42] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 )
+  [43] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2
+  to:memset::@return
+memset::@return: scope:[memset]  from memset::@1
+  [44] return 
+  to:@return
+memset::@2: scope:[memset]  from memset::@1
+  [45] *((byte*) memset::dst#2) ← (byte) memset::c#0
+  [46] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
+  to:memset::@1
+
+(byte()) font_compress((byte*) font_compress::font_original , (byte*) font_compress::font_compressed , (byte*) font_compress::compress_mapping)
+font_compress: scope:[font_compress]  from main::@6
+  [47] phi()
+  to:font_compress::@1
+font_compress::@1: scope:[font_compress]  from font_compress font_compress::@6
+  [48] (byte*) font_compress::next_compressed#4 ← phi( font_compress/(const byte*) FONT_COMPRESSED font_compress::@6/(byte*) font_compress::next_compressed#7 )
+  [48] (byte) font_compress::i#4 ← phi( font_compress/(byte) 0 font_compress::@6/(byte) font_compress::i#1 )
+  [48] (byte) font_compress::font_size#2 ← phi( font_compress/(byte) 0 font_compress::@6/(byte) font_compress::font_size#9 )
+  [48] (byte*) font_compress::next_original#2 ← phi( font_compress/(const byte*) FONT_ORIGINAL font_compress::@6/(byte*) font_compress::next_original#1 )
+  [49] (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2
+  [50] (byte) font_find::font_size#0 ← (byte) font_compress::font_size#2
+  [51] call font_find 
+  [52] (byte) font_find::return#0 ← (byte) font_find::return#3
+  to:font_compress::@5
+font_compress::@5: scope:[font_compress]  from font_compress::@1
+  [53] (byte) font_compress::found#0 ← (byte) font_find::return#0
+  [54] if((byte) font_compress::found#0!=(byte) $ff) goto font_compress::@7
+  to:font_compress::@3
+font_compress::@3: scope:[font_compress]  from font_compress::@3 font_compress::@5
+  [55] (byte) font_compress::l#2 ← phi( font_compress::@3/(byte) font_compress::l#1 font_compress::@5/(byte) 0 )
+  [56] *((byte*) font_compress::next_compressed#4 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#2 + (byte) font_compress::l#2)
+  [57] (byte) font_compress::l#1 ← ++ (byte) font_compress::l#2
+  [58] if((byte) font_compress::l#1!=(byte) 8) goto font_compress::@3
+  to:font_compress::@4
+font_compress::@4: scope:[font_compress]  from font_compress::@3
+  [59] (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#4 + (byte) 8
+  [60] (byte) font_compress::font_size#1 ← ++ (byte) font_compress::font_size#2
+  [61] (byte) font_compress::found#3 ← (byte) font_compress::font_size#2
+  to:font_compress::@2
+font_compress::@2: scope:[font_compress]  from font_compress::@4 font_compress::@7
+  [62] (byte*) font_compress::next_compressed#7 ← phi( font_compress::@4/(byte*) font_compress::next_compressed#1 font_compress::@7/(byte*) font_compress::next_compressed#4 )
+  [62] (byte) font_compress::return#1 ← phi( font_compress::@4/(byte) font_compress::font_size#1 font_compress::@7/(byte) font_compress::return#5 )
+  [62] (byte) font_compress::found#2 ← phi( font_compress::@4/(byte) font_compress::found#3 font_compress::@7/(byte) font_compress::found#0 )
+  [63] *((const byte*) FONT_COMPRESSED_MAP + (byte) font_compress::i#4) ← (byte) font_compress::found#2
+  [64] (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#2 + (byte) 8
+  [65] (byte) font_compress::i#1 ← ++ (byte) font_compress::i#4
+  [66] if((byte) font_compress::i#1!=(byte) 0) goto font_compress::@6
+  to:font_compress::@return
+font_compress::@return: scope:[font_compress]  from font_compress::@2
+  [67] return 
+  to:@return
+font_compress::@6: scope:[font_compress]  from font_compress::@2
+  [68] (byte) font_compress::font_size#9 ← (byte) font_compress::return#1
+  to:font_compress::@1
+font_compress::@7: scope:[font_compress]  from font_compress::@5
+  [69] (byte) font_compress::return#5 ← (byte) font_compress::font_size#2
+  to:font_compress::@2
+
+(byte()) font_find((byte*) font_find::glyph , (byte*) font_find::font , (byte) font_find::font_size)
+font_find: scope:[font_find]  from font_compress::@1
+  [70] phi()
+  to:font_find::@1
+font_find::@1: scope:[font_find]  from font_find font_find::@5
+  [71] (byte*) font_find::font#4 ← phi( font_find/(const byte*) FONT_COMPRESSED font_find::@5/(byte*) font_find::font#1 )
+  [71] (byte) font_find::i#2 ← phi( font_find/(byte) 0 font_find::@5/(byte) font_find::i#1 )
+  [72] if((byte) font_find::i#2<(byte) font_find::font_size#0) goto font_find::@2
+  to:font_find::@return
+font_find::@return: scope:[font_find]  from font_find::@1 font_find::@4
+  [73] (byte) font_find::return#3 ← phi( font_find::@4/(byte) font_find::i#2 font_find::@1/(byte) $ff )
+  [74] return 
+  to:@return
+font_find::@2: scope:[font_find]  from font_find::@1 font_find::@3
+  [75] (byte) font_find::l#2 ← phi( font_find::@1/(byte) 0 font_find::@3/(byte) font_find::l#1 )
+  [76] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@3
+  to:font_find::@4
+font_find::@3: scope:[font_find]  from font_find::@2
+  [77] (byte) font_find::l#1 ← ++ (byte) font_find::l#2
+  [78] if((byte) font_find::l#1!=(byte) 8) goto font_find::@2
+  to:font_find::@4
+font_find::@4: scope:[font_find]  from font_find::@2 font_find::@3
+  [79] (byte) font_find::found#2 ← phi( font_find::@3/(byte) 1 font_find::@2/(byte) 0 )
+  [80] if((byte) 0==(byte) font_find::found#2) goto font_find::@5
+  to:font_find::@return
+font_find::@5: scope:[font_find]  from font_find::@4
+  [81] (byte*) font_find::font#1 ← (byte*) font_find::font#4 + (byte) 8
+  [82] (byte) font_find::i#1 ← ++ (byte) font_find::i#2
+  to:font_find::@1
+
+(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
+font_2x2: scope:[font_2x2]  from main
+  [83] phi()
+  to:font_2x2::@1
+font_2x2::@1: scope:[font_2x2]  from font_2x2 font_2x2::@9
+  [84] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 )
+  [84] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 )
+  [84] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const byte*) FONT_ORIGINAL font_2x2::@9/(byte*) font_2x2::next_2x2#1 )
+  [85] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8
+  [86] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0
+  to:font_2x2::@2
+font_2x2::@2: scope:[font_2x2]  from font_2x2::@1 font_2x2::@8
+  [87] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 )
+  [87] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 )
+  [87] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 )
+  [87] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 )
+  [88] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2)
+  to:font_2x2::@3
+font_2x2::@3: scope:[font_2x2]  from font_2x2::@2 font_2x2::@5
+  [89] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 )
+  [89] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 )
+  [89] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 )
+  [90] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80
+  [91] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4
+  to:font_2x2::@5
+font_2x2::@4: scope:[font_2x2]  from font_2x2::@3
+  [92] phi()
+  to:font_2x2::@5
+font_2x2::@5: scope:[font_2x2]  from font_2x2::@3 font_2x2::@4
+  [93] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 )
+  [94] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1
+  [95] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0
+  [96] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1
+  [97] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0
+  [98] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1
+  [99] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2
+  [100] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3
+  to:font_2x2::@6
+font_2x2::@6: scope:[font_2x2]  from font_2x2::@5
+  [101] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2
+  [102] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12
+  [103] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1
+  [104] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12
+  [105] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2
+  [106] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15
+  [107] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1
+  [108] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15
+  [109] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2
+  [110] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8
+  to:font_2x2::@7
+font_2x2::@7: scope:[font_2x2]  from font_2x2::@6
+  [111] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8
+  [112] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8
+  to:font_2x2::@8
+font_2x2::@8: scope:[font_2x2]  from font_2x2::@6 font_2x2::@7
+  [113] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 )
+  [113] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 )
+  [113] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 )
+  [114] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2
+  [115] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2
+  to:font_2x2::@9
+font_2x2::@9: scope:[font_2x2]  from font_2x2::@8
+  [116] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8
+  [117] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8
+  [118] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11
+  [119] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1
+  to:font_2x2::@return
+font_2x2::@return: scope:[font_2x2]  from font_2x2::@9
+  [120] return 
+  to:@return
+
+
+VARIABLE REGISTER WEIGHTS
+(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
+(byte~) font_2x2::$1 200002.0
+(byte~) font_2x2::$11 20002.0
+(byte~) font_2x2::$12 10001.0
+(byte~) font_2x2::$14 20002.0
+(byte~) font_2x2::$15 10001.0
+(word~) font_2x2::$5 200002.0
+(word~) font_2x2::$7 200002.0
+(byte) font_2x2::b
+(byte) font_2x2::b#1 150001.5
+(byte) font_2x2::b#2 20000.2
+(byte) font_2x2::c
+(byte) font_2x2::c#1 1501.5
+(byte) font_2x2::c#11 58.88235294117647
+(byte*) font_2x2::font_2x2
+(byte*) font_2x2::font_original
+(byte) font_2x2::glyph_bit
+(byte) font_2x2::glyph_bit#0 50000.5
+(byte) font_2x2::glyph_bits
+(byte) font_2x2::glyph_bits#0 20002.0
+(byte) font_2x2::glyph_bits#1 66667.33333333333
+(byte) font_2x2::glyph_bits#2 34444.88888888889
+(word) font_2x2::glyph_bits_2x2
+(word) font_2x2::glyph_bits_2x2#1 200002.0
+(word) font_2x2::glyph_bits_2x2#2 27500.5
+(word) font_2x2::glyph_bits_2x2#3 40000.4
+(byte) font_2x2::l
+(byte) font_2x2::l#1 15001.5
+(byte) font_2x2::l#2 1111.2222222222222
+(byte) font_2x2::l2
+(byte) font_2x2::l2#1 15001.5
+(byte) font_2x2::l2#8 2727.5454545454545
+(byte) font_2x2::l2#9 6667.333333333333
+(byte*) font_2x2::next_2x2
+(byte*) font_2x2::next_2x2#1 500.5
+(byte*) font_2x2::next_2x2_left
+(byte*) font_2x2::next_2x2_left#0 750.1875
+(byte*) font_2x2::next_2x2_left#1 10001.0
+(byte*) font_2x2::next_2x2_left#10 2002.0
+(byte*) font_2x2::next_2x2_left#7 1708.5416666666665
+(byte*) font_2x2::next_2x2_left#8 10001.0
+(byte*) font_2x2::next_2x2_right
+(byte*) font_2x2::next_2x2_right#0 1001.0
+(byte*) font_2x2::next_2x2_right#1 20002.0
+(byte*) font_2x2::next_2x2_right#7 1708.5416666666665
+(byte*) font_2x2::next_2x2_right#8 10001.0
+(byte*) font_2x2::next_original
+(byte*) font_2x2::next_original#1 667.3333333333334
+(byte*) font_2x2::next_original#4 363.7272727272727
+(byte()) font_compress((byte*) font_compress::font_original , (byte*) font_compress::font_compressed , (byte*) font_compress::compress_mapping)
+(byte*) font_compress::compress_mapping
+(byte*) font_compress::font_compressed
+(byte*) font_compress::font_original
+(byte) font_compress::font_size
+(byte) font_compress::font_size#1 1001.0
+(byte) font_compress::font_size#2 385.0
+(byte) font_compress::font_size#9 2002.0
+(byte) font_compress::found
+(byte) font_compress::found#0 1001.0
+(byte) font_compress::found#2 3003.0
+(byte) font_compress::found#3 2002.0
+(byte) font_compress::i
+(byte) font_compress::i#1 1001.0
+(byte) font_compress::i#4 166.83333333333334
+(byte) font_compress::l
+(byte) font_compress::l#1 15001.5
+(byte) font_compress::l#2 20002.0
+(byte*) font_compress::next_compressed
+(byte*) font_compress::next_compressed#1 667.3333333333334
+(byte*) font_compress::next_compressed#4 1083.6666666666665
+(byte*) font_compress::next_compressed#7 500.5
+(byte*) font_compress::next_original
+(byte*) font_compress::next_original#1 500.5
+(byte*) font_compress::next_original#2 764.9411764705882
+(byte) font_compress::return
+(byte) font_compress::return#1 600.5999999999999
+(byte) font_compress::return#5 2002.0
+(byte()) font_find((byte*) font_find::glyph , (byte*) font_find::font , (byte) font_find::font_size)
+(byte*) font_find::font
+(byte*) font_find::font#1 1000001.0
+(byte*) font_find::font#4 1500000.375
+(byte) font_find::font_size
+(byte) font_find::font_size#0 83416.83333333334
+(byte) font_find::found
+(byte) font_find::found#2 1000001.0
+(byte*) font_find::glyph
+(byte*) font_find::glyph#0 769307.8461538461
+(byte) font_find::i
+(byte) font_find::i#1 2000002.0
+(byte) font_find::i#2 444444.8888888889
+(byte) font_find::l
+(byte) font_find::l#1 1.50000015E7
+(byte) font_find::l#2 2.0000002E7
+(byte) font_find::return
+(byte) font_find::return#0 2002.0
+(byte) font_find::return#3 333667.3333333334
+(void()) main()
+(byte) main::c
+(byte) main::c#1 420.59999999999997
+(byte) main::c#2 620.8
+(byte) main::c#4 202.0
+(byte*) main::toD0181_gfx
+(byte) main::toD0181_return
+(byte*) main::toD0181_screen
+(byte) main::x
+(byte) main::x#1 1501.5
+(byte) main::x#2 500.5
+(byte) main::y
+(byte) main::y#1 151.5
+(byte) main::y#4 133.66666666666669
+(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
+(byte) memset::c
+(byte) memset::c#0 168.66666666666669
+(byte*) memset::dst
+(byte*) memset::dst#1 2002.0
+(byte*) memset::dst#2 1334.6666666666667
+(byte*) memset::end
+(word) memset::num
+(void*) memset::return
+(void*) memset::str
+(void()) show((byte) show::c , (byte) show::x , (byte) show::y , (byte*) show::font_mapping)
+(word~) show::$0 15001.5
+(word~) show::$1 20002.0
+(byte*~) show::$2 10001.0
+(byte~) show::$3 20002.0
+(byte~) show::$5 20002.0
+(byte~) show::$6 20002.0
+(byte~) show::$7 20002.0
+(word~) show::$8 20002.0
+(word~) show::$9 20002.0
+(byte) show::c
+(byte) show::c#0 2733.666666666667
+(byte*) show::font_mapping
+(byte*) show::ptr
+(byte*) show::ptr#0 7143.571428571429
+(byte) show::x
+(byte) show::x#0 1571.7142857142858
+(byte) show::y
+(byte) show::y#0 1001.0
+
+Initial phi equivalence classes
+[ main::y#4 main::y#1 ]
+[ main::c#2 main::c#4 main::c#1 ]
+[ main::x#2 main::x#1 ]
+[ memset::dst#2 memset::dst#1 ]
+[ font_compress::next_original#2 font_compress::next_original#1 ]
+[ font_compress::font_size#2 font_compress::font_size#9 ]
+[ font_compress::i#4 font_compress::i#1 ]
+[ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ]
+[ font_compress::l#2 font_compress::l#1 ]
+[ font_compress::found#2 font_compress::found#3 font_compress::found#0 ]
+[ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ]
+[ font_find::font#4 font_find::font#1 ]
+[ font_find::return#3 font_find::i#2 font_find::i#1 ]
+[ font_find::l#2 font_find::l#1 ]
+[ font_find::found#2 ]
+[ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
+[ font_2x2::next_original#4 font_2x2::next_original#1 ]
+[ font_2x2::c#11 font_2x2::c#1 ]
+[ font_2x2::l#2 font_2x2::l#1 ]
+[ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
+[ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+[ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
+[ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+[ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ]
+[ font_2x2::b#2 font_2x2::b#1 ]
+[ font_2x2::glyph_bit#0 ]
+Added variable memset::c#0 to live range equivalence class [ memset::c#0 ]
+Added variable show::c#0 to live range equivalence class [ show::c#0 ]
+Added variable show::x#0 to live range equivalence class [ show::x#0 ]
+Added variable show::y#0 to live range equivalence class [ show::y#0 ]
+Added variable show::$0 to live range equivalence class [ show::$0 ]
+Added variable show::$8 to live range equivalence class [ show::$8 ]
+Added variable show::$9 to live range equivalence class [ show::$9 ]
+Added variable show::$1 to live range equivalence class [ show::$1 ]
+Added variable show::$2 to live range equivalence class [ show::$2 ]
+Added variable show::$3 to live range equivalence class [ show::$3 ]
+Added variable show::ptr#0 to live range equivalence class [ show::ptr#0 ]
+Added variable show::$5 to live range equivalence class [ show::$5 ]
+Added variable show::$6 to live range equivalence class [ show::$6 ]
+Added variable show::$7 to live range equivalence class [ show::$7 ]
+Added variable font_find::glyph#0 to live range equivalence class [ font_find::glyph#0 ]
+Added variable font_find::font_size#0 to live range equivalence class [ font_find::font_size#0 ]
+Added variable font_find::return#0 to live range equivalence class [ font_find::return#0 ]
+Added variable font_2x2::$1 to live range equivalence class [ font_2x2::$1 ]
+Added variable font_2x2::$5 to live range equivalence class [ font_2x2::$5 ]
+Added variable font_2x2::glyph_bits_2x2#1 to live range equivalence class [ font_2x2::glyph_bits_2x2#1 ]
+Added variable font_2x2::$7 to live range equivalence class [ font_2x2::$7 ]
+Added variable font_2x2::$12 to live range equivalence class [ font_2x2::$12 ]
+Added variable font_2x2::$11 to live range equivalence class [ font_2x2::$11 ]
+Added variable font_2x2::$15 to live range equivalence class [ font_2x2::$15 ]
+Added variable font_2x2::$14 to live range equivalence class [ font_2x2::$14 ]
+Complete equivalence classes
+[ main::y#4 main::y#1 ]
+[ main::c#2 main::c#4 main::c#1 ]
+[ main::x#2 main::x#1 ]
+[ memset::dst#2 memset::dst#1 ]
+[ font_compress::next_original#2 font_compress::next_original#1 ]
+[ font_compress::font_size#2 font_compress::font_size#9 ]
+[ font_compress::i#4 font_compress::i#1 ]
+[ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ]
+[ font_compress::l#2 font_compress::l#1 ]
+[ font_compress::found#2 font_compress::found#3 font_compress::found#0 ]
+[ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ]
+[ font_find::font#4 font_find::font#1 ]
+[ font_find::return#3 font_find::i#2 font_find::i#1 ]
+[ font_find::l#2 font_find::l#1 ]
+[ font_find::found#2 ]
+[ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
+[ font_2x2::next_original#4 font_2x2::next_original#1 ]
+[ font_2x2::c#11 font_2x2::c#1 ]
+[ font_2x2::l#2 font_2x2::l#1 ]
+[ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
+[ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+[ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
+[ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+[ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ]
+[ font_2x2::b#2 font_2x2::b#1 ]
+[ font_2x2::glyph_bit#0 ]
+[ memset::c#0 ]
+[ show::c#0 ]
+[ show::x#0 ]
+[ show::y#0 ]
+[ show::$0 ]
+[ show::$8 ]
+[ show::$9 ]
+[ show::$1 ]
+[ show::$2 ]
+[ show::$3 ]
+[ show::ptr#0 ]
+[ show::$5 ]
+[ show::$6 ]
+[ show::$7 ]
+[ font_find::glyph#0 ]
+[ font_find::font_size#0 ]
+[ font_find::return#0 ]
+[ font_2x2::$1 ]
+[ font_2x2::$5 ]
+[ font_2x2::glyph_bits_2x2#1 ]
+[ font_2x2::$7 ]
+[ font_2x2::$12 ]
+[ font_2x2::$11 ]
+[ font_2x2::$15 ]
+[ font_2x2::$14 ]
+Allocated zp[1]:2 [ main::y#4 main::y#1 ]
+Allocated zp[1]:3 [ main::c#2 main::c#4 main::c#1 ]
+Allocated zp[1]:4 [ main::x#2 main::x#1 ]
+Allocated zp[2]:5 [ memset::dst#2 memset::dst#1 ]
+Allocated zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 ]
+Allocated zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ]
+Allocated zp[1]:10 [ font_compress::i#4 font_compress::i#1 ]
+Allocated zp[2]:11 [ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ]
+Allocated zp[1]:13 [ font_compress::l#2 font_compress::l#1 ]
+Allocated zp[1]:14 [ font_compress::found#2 font_compress::found#3 font_compress::found#0 ]
+Allocated zp[1]:15 [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ]
+Allocated zp[2]:16 [ font_find::font#4 font_find::font#1 ]
+Allocated zp[1]:18 [ font_find::return#3 font_find::i#2 font_find::i#1 ]
+Allocated zp[1]:19 [ font_find::l#2 font_find::l#1 ]
+Allocated zp[1]:20 [ font_find::found#2 ]
+Allocated zp[2]:21 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
+Allocated zp[2]:23 [ font_2x2::next_original#4 font_2x2::next_original#1 ]
+Allocated zp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ]
+Allocated zp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ]
+Allocated zp[2]:27 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
+Allocated zp[1]:29 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+Allocated zp[2]:30 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
+Allocated zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+Allocated zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ]
+Allocated zp[1]:35 [ font_2x2::b#2 font_2x2::b#1 ]
+Allocated zp[1]:36 [ font_2x2::glyph_bit#0 ]
+Allocated zp[1]:37 [ memset::c#0 ]
+Allocated zp[1]:38 [ show::c#0 ]
+Allocated zp[1]:39 [ show::x#0 ]
+Allocated zp[1]:40 [ show::y#0 ]
+Allocated zp[2]:41 [ show::$0 ]
+Allocated zp[2]:43 [ show::$8 ]
+Allocated zp[2]:45 [ show::$9 ]
+Allocated zp[2]:47 [ show::$1 ]
+Allocated zp[2]:49 [ show::$2 ]
+Allocated zp[1]:51 [ show::$3 ]
+Allocated zp[2]:52 [ show::ptr#0 ]
+Allocated zp[1]:54 [ show::$5 ]
+Allocated zp[1]:55 [ show::$6 ]
+Allocated zp[1]:56 [ show::$7 ]
+Allocated zp[2]:57 [ font_find::glyph#0 ]
+Allocated zp[1]:59 [ font_find::font_size#0 ]
+Allocated zp[1]:60 [ font_find::return#0 ]
+Allocated zp[1]:61 [ font_2x2::$1 ]
+Allocated zp[2]:62 [ font_2x2::$5 ]
+Allocated zp[2]:64 [ font_2x2::glyph_bits_2x2#1 ]
+Allocated zp[2]:66 [ font_2x2::$7 ]
+Allocated zp[1]:68 [ font_2x2::$12 ]
+Allocated zp[1]:69 [ font_2x2::$11 ]
+Allocated zp[1]:70 [ font_2x2::$15 ]
+Allocated zp[1]:71 [ font_2x2::$14 ]
+
+INITIAL ASM
+Target platform is c64basic / MOS6502X
+  // File Comments
+// Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars
+  // Upstart
+.pc = $801 "Basic"
+:BasicUpstart(__bbegin)
+.pc = $80d "Program"
+  // Global Constants & labels
+  // Processor Port Register controlling RAM/ROM configuration and the datasette
+  .label PROCPORT = 1
+  // RAM in $A000, $E000 CHAR ROM in $D000
+  .const PROCPORT_RAM_CHARROM = 1
+  // BASIC in $A000, I/O in $D000, KERNEL in $E000
+  .const PROCPORT_BASIC_KERNEL_IO = 7
+  // The address of the CHARGEN character set
+  .label CHARGEN = $d000
+  .label D018 = $d018
+  .label SCREEN = $400
+  .label FONT_ORIGINAL = $2000
+  .label FONT_COMPRESSED = $2800
+  // @begin
+__bbegin:
+  // [1] phi from @begin to @1 [phi:@begin->@1]
+__b1_from___bbegin:
+  jmp __b1
+  // @1
+__b1:
+  // [2] call main 
+  jsr main
+  // [3] phi from @1 to @end [phi:@1->@end]
+__bend_from___b1:
+  jmp __bend
+  // @end
+__bend:
+  // main
+main: {
+    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>FONT_COMPRESSED)/4&$f
+    .label c = 3
+    .label x = 4
+    .label y = 2
+    // asm { sei  }
+    // Create 2x2 font from CHARGEN
+    sei
+    // [5] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 
+    lda #PROCPORT_RAM_CHARROM
+    sta PROCPORT
+    // [6] call font_2x2 
+    // [83] phi from main to font_2x2 [phi:main->font_2x2]
+  font_2x2_from_main:
+    jsr font_2x2
+    jmp __b6
+    // main::@6
+  __b6:
+    // [7] *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 
+    lda #PROCPORT_BASIC_KERNEL_IO
+    sta PROCPORT
+    // asm { cli  }
+    cli
+    // [9] call font_compress 
+    // [47] phi from main::@6 to font_compress [phi:main::@6->font_compress]
+  font_compress_from___b6:
+    jsr font_compress
+    // [10] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181]
+  toD0181_from___b6:
+    jmp toD0181
+    // main::toD0181
+  toD0181:
+    jmp __b5
+    // main::@5
+  __b5:
+    // [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
+    // Show compressed font
+    lda #toD0181_return
+    sta D018
+    // [12] (byte) memset::c#0 ← *((const byte*) FONT_COMPRESSED_MAP+(byte) ' ') -- vbuz1=_deref_pbuc1 
+    lda FONT_COMPRESSED_MAP+' '
+    sta.z memset.c
+    // [13] call memset 
+  // Clear the screen
+    // [41] phi from main::@5 to memset [phi:main::@5->memset]
+  memset_from___b5:
+    jsr memset
+    // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+  __b1_from___b5:
+    // [14] phi (byte) main::y#4 = (byte) 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z y
+    // [14] phi (byte) main::c#4 = (byte) 0 [phi:main::@5->main::@1#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z c
+    jmp __b1
+    // [14] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
+  __b1_from___b3:
+    // [14] phi (byte) main::y#4 = (byte) main::y#1 [phi:main::@3->main::@1#0] -- register_copy 
+    // [14] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#1] -- register_copy 
+    jmp __b1
+    // main::@1
+  __b1:
+    // [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+  __b2_from___b1:
+    // [15] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z x
+    // [15] phi (byte) main::c#2 = (byte) main::c#4 [phi:main::@1->main::@2#1] -- register_copy 
+    jmp __b2
+    // [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+  __b2_from___b7:
+    // [15] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@7->main::@2#0] -- register_copy 
+    // [15] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@7->main::@2#1] -- register_copy 
+    jmp __b2
+    // main::@2
+  __b2:
+    // [16] (byte) show::c#0 ← (byte) main::c#2 -- vbuz1=vbuz2 
+    lda.z c
+    sta.z show.c
+    // [17] (byte) show::x#0 ← (byte) main::x#2 -- vbuz1=vbuz2 
+    lda.z x
+    sta.z show.x
+    // [18] (byte) show::y#0 ← (byte) main::y#4 -- vbuz1=vbuz2 
+    lda.z y
+    sta.z show.y
+    // [19] call show 
+    jsr show
+    jmp __b7
+    // main::@7
+  __b7:
+    // [20] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1 
+    inc.z c
+    // [21] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 
+    inc.z x
+    // [22] if((byte) main::x#1!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z x
+    bne __b2_from___b7
+    jmp __b3
+    // main::@3
+  __b3:
+    // [23] (byte) main::y#1 ← ++ (byte) main::y#4 -- vbuz1=_inc_vbuz1 
+    inc.z y
+    // [24] if((byte) main::y#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z y
+    bne __b1_from___b3
+    jmp __b4
+    // main::@4
+  __b4:
+    // [25] *((const byte*) SCREEN+(word) $3e7) ← ++ *((const byte*) SCREEN+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
+    inc SCREEN+$3e7
+    jmp __b4
+}
+  // show
+// Show a 2x2 char on the screen at 2x2-position (x, y) using a font compress mapping
+// show(byte zp($26) c, byte zp($27) x, byte zp($28) y)
+show: {
+    .label __0 = $29
+    .label __1 = $2f
+    .label __2 = $31
+    .label __3 = $33
+    .label __5 = $36
+    .label __6 = $37
+    .label __7 = $38
+    .label c = $26
+    .label x = $27
+    .label y = $28
+    .label ptr = $34
+    .label __8 = $2b
+    .label __9 = $2d
+    // [26] (word~) show::$0 ← (word)(byte) show::y#0 -- vwuz1=_word_vbuz2 
+    lda.z y
+    sta.z __0
+    lda #0
+    sta.z __0+1
+    // [27] (word~) show::$8 ← (word~) show::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
+    lda.z __0
+    asl
+    sta.z __8
+    lda.z __0+1
+    rol
+    sta.z __8+1
+    asl.z __8
+    rol.z __8+1
+    // [28] (word~) show::$9 ← (word~) show::$8 + (word~) show::$0 -- vwuz1=vwuz2_plus_vwuz3 
+    lda.z __8
+    clc
+    adc.z __0
+    sta.z __9
+    lda.z __8+1
+    adc.z __0+1
+    sta.z __9+1
+    // [29] (word~) show::$1 ← (word~) show::$9 << (byte) 4 -- vwuz1=vwuz2_rol_4 
+    lda.z __9
+    asl
+    sta.z __1
+    lda.z __9+1
+    rol
+    sta.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    // [30] (byte*~) show::$2 ← (const byte*) SCREEN + (word~) show::$1 -- pbuz1=pbuc1_plus_vwuz2 
+    lda.z __1
+    clc
+    adc #<SCREEN
+    sta.z __2
+    lda.z __1+1
+    adc #>SCREEN
+    sta.z __2+1
+    // [31] (byte~) show::$3 ← (byte) show::x#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    lda.z x
+    asl
+    sta.z __3
+    // [32] (byte*) show::ptr#0 ← (byte*~) show::$2 + (byte~) show::$3 -- pbuz1=pbuz2_plus_vbuz3 
+    lda.z __3
+    clc
+    adc.z __2
+    sta.z ptr
+    lda #0
+    adc.z __2+1
+    sta.z ptr+1
+    // [33] *((byte*) show::ptr#0) ← *((const byte*) FONT_COMPRESSED_MAP + (byte) show::c#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
+    ldy.z c
+    lda FONT_COMPRESSED_MAP,y
+    ldy #0
+    sta (ptr),y
+    // [34] (byte~) show::$5 ← (byte) show::c#0 -- vbuz1=vbuz2 
+    lda.z c
+    sta.z __5
+    // [35] *((byte*) show::ptr#0 + (byte) 1) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $40 + (byte~) show::$5) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
+    ldy.z __5
+    lda FONT_COMPRESSED_MAP+$40,y
+    ldy #1
+    sta (ptr),y
+    // [36] (byte~) show::$6 ← (byte) show::c#0 -- vbuz1=vbuz2 
+    lda.z c
+    sta.z __6
+    // [37] *((byte*) show::ptr#0 + (byte) $28) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $80 + (byte~) show::$6) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
+    ldy.z __6
+    lda FONT_COMPRESSED_MAP+$80,y
+    ldy #$28
+    sta (ptr),y
+    // [38] (byte~) show::$7 ← (byte) show::c#0 -- vbuz1=vbuz2 
+    lda.z c
+    sta.z __7
+    // [39] *((byte*) show::ptr#0 + (byte) $29) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $c0 + (byte~) show::$7) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
+    ldy.z __7
+    lda FONT_COMPRESSED_MAP+$c0,y
+    ldy #$29
+    sta (ptr),y
+    jmp __breturn
+    // show::@return
+  __breturn:
+    // [40] return 
+    rts
+}
+  // memset
+// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
+// memset(byte zp($25) c)
+memset: {
+    .label str = SCREEN
+    .const num = $400
+    .label end = str+num
+    .label dst = 5
+    .label c = $25
+    // [42] phi from memset to memset::@1 [phi:memset->memset::@1]
+  __b1_from_memset:
+    // [42] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
+    lda #<str
+    sta.z dst
+    lda #>str
+    sta.z dst+1
+    jmp __b1
+    // memset::@1
+  __b1:
+    // [43] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
+    lda.z dst+1
+    cmp #>end
+    bne __b2
+    lda.z dst
+    cmp #<end
+    bne __b2
+    jmp __breturn
+    // memset::@return
+  __breturn:
+    // [44] return 
+    rts
+    // memset::@2
+  __b2:
+    // [45] *((byte*) memset::dst#2) ← (byte) memset::c#0 -- _deref_pbuz1=vbuz2 
+    lda.z c
+    ldy #0
+    sta (dst),y
+    // [46] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
+    inc.z dst
+    bne !+
+    inc.z dst+1
+  !:
+    // [42] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
+  __b1_from___b2:
+    // [42] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy 
+    jmp __b1
+}
+  // font_compress
+// Compress a font finding identical characters
+// The compressed font is put into font_compressed and the compress_mapping is updated
+// so that compress_mapping[c] points to the char in font_compressed that is identical to char c in font_original
+// Returns the size of the compressed font (in chars)
+font_compress: {
+    .label found = $e
+    .label next_original = 7
+    .label i = $a
+    .label l = $d
+    .label next_compressed = $b
+    .label font_size = $f
+    .label return = $f
+    .label font_size_1 = 9
+    // [48] phi from font_compress to font_compress::@1 [phi:font_compress->font_compress::@1]
+  __b1_from_font_compress:
+    // [48] phi (byte*) font_compress::next_compressed#4 = (const byte*) FONT_COMPRESSED [phi:font_compress->font_compress::@1#0] -- pbuz1=pbuc1 
+    lda #<FONT_COMPRESSED
+    sta.z next_compressed
+    lda #>FONT_COMPRESSED
+    sta.z next_compressed+1
+    // [48] phi (byte) font_compress::i#4 = (byte) 0 [phi:font_compress->font_compress::@1#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z i
+    // [48] phi (byte) font_compress::font_size#2 = (byte) 0 [phi:font_compress->font_compress::@1#2] -- vbuz1=vbuc1 
+    lda #0
+    sta.z font_size_1
+    // [48] phi (byte*) font_compress::next_original#2 = (const byte*) FONT_ORIGINAL [phi:font_compress->font_compress::@1#3] -- pbuz1=pbuc1 
+    lda #<FONT_ORIGINAL
+    sta.z next_original
+    lda #>FONT_ORIGINAL
+    sta.z next_original+1
+    jmp __b1
+    // font_compress::@1
+  __b1:
+    // [49] (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2 -- pbuz1=pbuz2 
+    lda.z next_original
+    sta.z font_find.glyph
+    lda.z next_original+1
+    sta.z font_find.glyph+1
+    // [50] (byte) font_find::font_size#0 ← (byte) font_compress::font_size#2 -- vbuz1=vbuz2 
+    lda.z font_size_1
+    sta.z font_find.font_size
+    // [51] call font_find 
+    // [70] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find]
+  font_find_from___b1:
+    jsr font_find
+    // [52] (byte) font_find::return#0 ← (byte) font_find::return#3 -- vbuz1=vbuz2 
+    lda.z font_find.return_1
+    sta.z font_find.return
+    jmp __b5
+    // font_compress::@5
+  __b5:
+    // [53] (byte) font_compress::found#0 ← (byte) font_find::return#0 -- vbuz1=vbuz2 
+    lda.z font_find.return
+    sta.z found
+    // [54] if((byte) font_compress::found#0!=(byte) $ff) goto font_compress::@7 -- vbuz1_neq_vbuc1_then_la1 
+    lda #$ff
+    cmp.z found
+    bne __b7
+    // [55] phi from font_compress::@5 to font_compress::@3 [phi:font_compress::@5->font_compress::@3]
+  __b3_from___b5:
+    // [55] phi (byte) font_compress::l#2 = (byte) 0 [phi:font_compress::@5->font_compress::@3#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l
+    jmp __b3
+  // Glyph not found - create it
+    // [55] phi from font_compress::@3 to font_compress::@3 [phi:font_compress::@3->font_compress::@3]
+  __b3_from___b3:
+    // [55] phi (byte) font_compress::l#2 = (byte) font_compress::l#1 [phi:font_compress::@3->font_compress::@3#0] -- register_copy 
+    jmp __b3
+    // font_compress::@3
+  __b3:
+    // [56] *((byte*) font_compress::next_compressed#4 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#2 + (byte) font_compress::l#2) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 
+    ldy.z l
+    lda (next_original),y
+    sta (next_compressed),y
+    // [57] (byte) font_compress::l#1 ← ++ (byte) font_compress::l#2 -- vbuz1=_inc_vbuz1 
+    inc.z l
+    // [58] if((byte) font_compress::l#1!=(byte) 8) goto font_compress::@3 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l
+    bne __b3_from___b3
+    jmp __b4
+    // font_compress::@4
+  __b4:
+    // [59] (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_compressed
+    sta.z next_compressed
+    bcc !+
+    inc.z next_compressed+1
+  !:
+    // [60] (byte) font_compress::font_size#1 ← ++ (byte) font_compress::font_size#2 -- vbuz1=_inc_vbuz2 
+    ldy.z font_size_1
+    iny
+    sty.z font_size
+    // [61] (byte) font_compress::found#3 ← (byte) font_compress::font_size#2 -- vbuz1=vbuz2 
+    lda.z font_size_1
+    sta.z found
+    // [62] phi from font_compress::@4 font_compress::@7 to font_compress::@2 [phi:font_compress::@4/font_compress::@7->font_compress::@2]
+  __b2_from___b4:
+  __b2_from___b7:
+    // [62] phi (byte*) font_compress::next_compressed#7 = (byte*) font_compress::next_compressed#1 [phi:font_compress::@4/font_compress::@7->font_compress::@2#0] -- register_copy 
+    // [62] phi (byte) font_compress::return#1 = (byte) font_compress::font_size#1 [phi:font_compress::@4/font_compress::@7->font_compress::@2#1] -- register_copy 
+    // [62] phi (byte) font_compress::found#2 = (byte) font_compress::found#3 [phi:font_compress::@4/font_compress::@7->font_compress::@2#2] -- register_copy 
+    jmp __b2
+    // font_compress::@2
+  __b2:
+    // [63] *((const byte*) FONT_COMPRESSED_MAP + (byte) font_compress::i#4) ← (byte) font_compress::found#2 -- pbuc1_derefidx_vbuz1=vbuz2 
+    lda.z found
+    ldy.z i
+    sta FONT_COMPRESSED_MAP,y
+    // [64] (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // [65] (byte) font_compress::i#1 ← ++ (byte) font_compress::i#4 -- vbuz1=_inc_vbuz1 
+    inc.z i
+    // [66] if((byte) font_compress::i#1!=(byte) 0) goto font_compress::@6 -- vbuz1_neq_0_then_la1 
+    lda.z i
+    cmp #0
+    bne __b6
+    jmp __breturn
+    // font_compress::@return
+  __breturn:
+    // [67] return 
+    rts
+    // font_compress::@6
+  __b6:
+    // [68] (byte) font_compress::font_size#9 ← (byte) font_compress::return#1 -- vbuz1=vbuz2 
+    lda.z return
+    sta.z font_size_1
+    // [48] phi from font_compress::@6 to font_compress::@1 [phi:font_compress::@6->font_compress::@1]
+  __b1_from___b6:
+    // [48] phi (byte*) font_compress::next_compressed#4 = (byte*) font_compress::next_compressed#7 [phi:font_compress::@6->font_compress::@1#0] -- register_copy 
+    // [48] phi (byte) font_compress::i#4 = (byte) font_compress::i#1 [phi:font_compress::@6->font_compress::@1#1] -- register_copy 
+    // [48] phi (byte) font_compress::font_size#2 = (byte) font_compress::font_size#9 [phi:font_compress::@6->font_compress::@1#2] -- register_copy 
+    // [48] phi (byte*) font_compress::next_original#2 = (byte*) font_compress::next_original#1 [phi:font_compress::@6->font_compress::@1#3] -- register_copy 
+    jmp __b1
+    // font_compress::@7
+  __b7:
+    // [69] (byte) font_compress::return#5 ← (byte) font_compress::font_size#2 -- vbuz1=vbuz2 
+    lda.z font_size_1
+    sta.z return
+    jmp __b2_from___b7
+}
+  // font_find
+// Look for a glyph within a font
+// Only looks at the first font_size glyphs
+// Returns the index of the glyph within the font. Returns 0xff if the glyph is not found.
+// font_find(byte* zp($39) glyph, byte* zp($10) font, byte zp($3b) font_size)
+font_find: {
+    .label glyph = $39
+    .label font_size = $3b
+    // Not found
+    .label return = $3c
+    .label l = $13
+    .label font = $10
+    .label i = $12
+    // Not found
+    .label return_1 = $12
+    .label found = $14
+    // [71] phi from font_find to font_find::@1 [phi:font_find->font_find::@1]
+  __b1_from_font_find:
+    // [71] phi (byte*) font_find::font#4 = (const byte*) FONT_COMPRESSED [phi:font_find->font_find::@1#0] -- pbuz1=pbuc1 
+    lda #<FONT_COMPRESSED
+    sta.z font
+    lda #>FONT_COMPRESSED
+    sta.z font+1
+    // [71] phi (byte) font_find::i#2 = (byte) 0 [phi:font_find->font_find::@1#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z i
+    jmp __b1
+    // font_find::@1
+  __b1:
+    // [72] if((byte) font_find::i#2<(byte) font_find::font_size#0) goto font_find::@2 -- vbuz1_lt_vbuz2_then_la1 
+    lda.z i
+    cmp.z font_size
+    bcc __b2_from___b1
+    // [73] phi from font_find::@1 to font_find::@return [phi:font_find::@1->font_find::@return]
+  __breturn_from___b1:
+    // [73] phi (byte) font_find::return#3 = (byte) $ff [phi:font_find::@1->font_find::@return#0] -- vbuz1=vbuc1 
+    lda #$ff
+    sta.z return_1
+    jmp __breturn
+    // font_find::@return
+  __breturn:
+    // [74] return 
+    rts
+    // [75] phi from font_find::@1 to font_find::@2 [phi:font_find::@1->font_find::@2]
+  __b2_from___b1:
+    // [75] phi (byte) font_find::l#2 = (byte) 0 [phi:font_find::@1->font_find::@2#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l
+    jmp __b2
+    // [75] phi from font_find::@3 to font_find::@2 [phi:font_find::@3->font_find::@2]
+  __b2_from___b3:
+    // [75] phi (byte) font_find::l#2 = (byte) font_find::l#1 [phi:font_find::@3->font_find::@2#0] -- register_copy 
+    jmp __b2
+    // font_find::@2
+  __b2:
+    // [76] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@3 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 
+    ldy.z l
+    lda (glyph),y
+    cmp (font),y
+    beq __b3
+    // [79] phi from font_find::@2 to font_find::@4 [phi:font_find::@2->font_find::@4]
+  __b4_from___b2:
+    // [79] phi (byte) font_find::found#2 = (byte) 0 [phi:font_find::@2->font_find::@4#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z found
+    jmp __b4
+    // font_find::@3
+  __b3:
+    // [77] (byte) font_find::l#1 ← ++ (byte) font_find::l#2 -- vbuz1=_inc_vbuz1 
+    inc.z l
+    // [78] if((byte) font_find::l#1!=(byte) 8) goto font_find::@2 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l
+    bne __b2_from___b3
+    // [79] phi from font_find::@3 to font_find::@4 [phi:font_find::@3->font_find::@4]
+  __b4_from___b3:
+    // [79] phi (byte) font_find::found#2 = (byte) 1 [phi:font_find::@3->font_find::@4#0] -- vbuz1=vbuc1 
+    lda #1
+    sta.z found
+    jmp __b4
+    // font_find::@4
+  __b4:
+    // [80] if((byte) 0==(byte) font_find::found#2) goto font_find::@5 -- vbuc1_eq_vbuz1_then_la1 
+    lda #0
+    cmp.z found
+    beq __b5
+    // [73] phi from font_find::@4 to font_find::@return [phi:font_find::@4->font_find::@return]
+  __breturn_from___b4:
+    // [73] phi (byte) font_find::return#3 = (byte) font_find::i#2 [phi:font_find::@4->font_find::@return#0] -- register_copy 
+    jmp __breturn
+    // font_find::@5
+  __b5:
+    // [81] (byte*) font_find::font#1 ← (byte*) font_find::font#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z font
+    sta.z font
+    bcc !+
+    inc.z font+1
+  !:
+    // [82] (byte) font_find::i#1 ← ++ (byte) font_find::i#2 -- vbuz1=_inc_vbuz1 
+    inc.z i
+    // [71] phi from font_find::@5 to font_find::@1 [phi:font_find::@5->font_find::@1]
+  __b1_from___b5:
+    // [71] phi (byte*) font_find::font#4 = (byte*) font_find::font#1 [phi:font_find::@5->font_find::@1#0] -- register_copy 
+    // [71] phi (byte) font_find::i#2 = (byte) font_find::i#1 [phi:font_find::@5->font_find::@1#1] -- register_copy 
+    jmp __b1
+}
+  // font_2x2
+// Create a 2x2-font by doubling all pixels of the 64 first chars
+font_2x2: {
+    .label __1 = $3d
+    .label __5 = $3e
+    .label __7 = $42
+    .label __11 = $45
+    .label __12 = $44
+    .label __14 = $47
+    .label __15 = $46
+    .label next_2x2_left = $15
+    .label next_2x2_right = $1e
+    .label glyph_bits = $20
+    .label glyph_bit = $24
+    .label glyph_bits_2x2 = $40
+    .label glyph_bits_2x2_1 = $21
+    .label b = $23
+    .label l2 = $1d
+    .label l = $1a
+    .label next_2x2_left_1 = $1b
+    .label next_2x2 = $15
+    .label next_original = $17
+    .label c = $19
+    // [84] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1]
+  __b1_from_font_2x2:
+    // [84] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z c
+    // [84] phi (byte*) font_2x2::next_original#4 = (const byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 
+    lda #<CHARGEN
+    sta.z next_original
+    lda #>CHARGEN
+    sta.z next_original+1
+    // [84] phi (byte*) font_2x2::next_2x2_left#0 = (const byte*) FONT_ORIGINAL [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 
+    lda #<FONT_ORIGINAL
+    sta.z next_2x2_left
+    lda #>FONT_ORIGINAL
+    sta.z next_2x2_left+1
+    jmp __b1
+    // [84] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1]
+  __b1_from___b9:
+    // [84] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy 
+    // [84] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy 
+    // [84] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy 
+    jmp __b1
+    // font_2x2::@1
+  __b1:
+    // [85] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$40*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$40*8
+    sta.z next_2x2_right+1
+    // [86] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 
+    lda.z next_2x2_left
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    sta.z next_2x2_left_1+1
+    // [87] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2]
+  __b2_from___b1:
+    // [87] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy 
+    // [87] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l2
+    // [87] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy 
+    // [87] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l
+    jmp __b2
+    // [87] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2]
+  __b2_from___b8:
+    // [87] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy 
+    // [87] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy 
+    // [87] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy 
+    // [87] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy 
+    jmp __b2
+    // font_2x2::@2
+  __b2:
+    // [88] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 
+    ldy.z l
+    lda (next_original),y
+    sta.z glyph_bits
+    // [89] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3]
+  __b3_from___b2:
+    // [89] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z b
+    // [89] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 
+    lda #<0
+    sta.z glyph_bits_2x2_1
+    lda #>0
+    sta.z glyph_bits_2x2_1+1
+    // [89] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy 
+    jmp __b3
+    // [89] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3]
+  __b3_from___b5:
+    // [89] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy 
+    // [89] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy 
+    // [89] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy 
+    jmp __b3
+    // font_2x2::@3
+  __b3:
+    // [90] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 
+    lda #$80
+    and.z glyph_bits
+    sta.z __1
+    // [91] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuz1_then_la1 
+    lda #0
+    cmp.z __1
+    bne __b4_from___b3
+    // [93] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5]
+  __b5_from___b3:
+    // [93] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z glyph_bit
+    jmp __b5
+    // [92] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4]
+  __b4_from___b3:
+    jmp __b4
+    // font_2x2::@4
+  __b4:
+    // [93] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5]
+  __b5_from___b4:
+    // [93] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuz1=vbuc1 
+    lda #1
+    sta.z glyph_bit
+    jmp __b5
+    // font_2x2::@5
+  __b5:
+    // [94] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz2_rol_1 
+    lda.z glyph_bits_2x2_1
+    asl
+    sta.z __5
+    lda.z glyph_bits_2x2_1+1
+    rol
+    sta.z __5+1
+    // [95] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz2_bor_vbuz3 
+    lda.z glyph_bit
+    ora.z __5
+    sta.z glyph_bits_2x2
+    lda.z __5+1
+    sta.z glyph_bits_2x2+1
+    // [96] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz2_rol_1 
+    lda.z glyph_bits_2x2
+    asl
+    sta.z __7
+    lda.z glyph_bits_2x2+1
+    rol
+    sta.z __7+1
+    // [97] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz2_bor_vbuz3 
+    lda.z glyph_bit
+    ora.z __7
+    sta.z glyph_bits_2x2_1
+    lda.z __7+1
+    sta.z glyph_bits_2x2_1+1
+    // [98] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
+    // Move to next bit
+    asl.z glyph_bits
+    // [99] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuz1=_inc_vbuz1 
+    inc.z b
+    // [100] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z b
+    bne __b3_from___b5
+    jmp __b6
+    // font_2x2::@6
+  __b6:
+    // [101] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuz1=_hi_vwuz2 
+    lda.z glyph_bits_2x2_1+1
+    sta.z __12
+    // [102] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // Put the generated 2x2-line into the 2x2-font twice
+    lda.z __12
+    ldy.z l2
+    sta (next_2x2_left_1),y
+    // [103] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuz1=vbuz2_plus_1 
+    ldy.z l2
+    iny
+    sty.z __11
+    // [104] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuz3 
+    lda.z __12
+    ldy.z __11
+    sta (next_2x2_left_1),y
+    // [105] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 -- vbuz1=_lo_vwuz2 
+    lda.z glyph_bits_2x2_1
+    sta.z __15
+    // [106] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuz3 
+    lda.z __15
+    ldy.z l2
+    sta (next_2x2_right),y
+    // [107] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuz1=vbuz2_plus_1 
+    ldy.z l2
+    iny
+    sty.z __14
+    // [108] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuz3 
+    lda.z __15
+    ldy.z __14
+    sta (next_2x2_right),y
+    // [109] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 -- vbuz1=vbuz1_plus_2 
+    lda.z l2
+    clc
+    adc #2
+    sta.z l2
+    // [110] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l2
+    bne __b8_from___b6
+    jmp __b7
+    // font_2x2::@7
+  __b7:
+    // [111] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$80*8
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    adc #>$80*8
+    sta.z next_2x2_left_1+1
+    // [112] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$c0*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$c0*8
+    sta.z next_2x2_right+1
+    // [113] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8]
+  __b8_from___b7:
+    // [113] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy 
+    // [113] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l2
+    // [113] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy 
+    jmp __b8
+    // [113] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8]
+  __b8_from___b6:
+    // [113] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy 
+    // [113] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy 
+    // [113] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy 
+    jmp __b8
+    // font_2x2::@8
+  __b8:
+    // [114] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 
+    inc.z l
+    // [115] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l
+    bne __b2_from___b8
+    jmp __b9
+    // font_2x2::@9
+  __b9:
+    // [116] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_2x2
+    sta.z next_2x2
+    bcc !+
+    inc.z next_2x2+1
+  !:
+    // [117] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // [118] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 
+    inc.z c
+    // [119] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 
+    lda #$40
+    cmp.z c
+    bne __b1_from___b9
+    jmp __breturn
+    // font_2x2::@return
+  __breturn:
+    // [120] return 
+    rts
+}
+  // File Data
+  .align $100
+  FONT_COMPRESSED_MAP: .fill $100, 0
+
+REGISTER UPLIFT POTENTIAL REGISTERS
+Statement [5] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ ] ( main:2 [ ] { }  ) always clobbers reg byte a 
+Statement [7] *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO [ ] ( main:2 [ ] { }  ) always clobbers reg byte a 
+Statement [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { }  ) always clobbers reg byte a 
+Statement [26] (word~) show::$0 ← (word)(byte) show::y#0 [ show::c#0 show::x#0 show::$0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#4 main::y#1 ]
+Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::c#2 main::c#4 main::c#1 ]
+Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::x#2 main::x#1 ]
+Removing always clobbered register reg byte a as potential for zp[1]:38 [ show::c#0 ]
+Removing always clobbered register reg byte a as potential for zp[1]:39 [ show::x#0 ]
+Statement [27] (word~) show::$8 ← (word~) show::$0 << (byte) 2 [ show::c#0 show::x#0 show::$0 show::$8 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$0 show::$8 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [28] (word~) show::$9 ← (word~) show::$8 + (word~) show::$0 [ show::c#0 show::x#0 show::$9 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$9 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [29] (word~) show::$1 ← (word~) show::$9 << (byte) 4 [ show::c#0 show::x#0 show::$1 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$1 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [30] (byte*~) show::$2 ← (const byte*) SCREEN + (word~) show::$1 [ show::c#0 show::x#0 show::$2 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$2 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [31] (byte~) show::$3 ← (byte) show::x#0 << (byte) 1 [ show::c#0 show::$2 show::$3 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::$2 show::$3 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [32] (byte*) show::ptr#0 ← (byte*~) show::$2 + (byte~) show::$3 [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [33] *((byte*) show::ptr#0) ← *((const byte*) FONT_COMPRESSED_MAP + (byte) show::c#0) [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::y#4 main::y#1 ]
+Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::c#2 main::c#4 main::c#1 ]
+Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::x#2 main::x#1 ]
+Removing always clobbered register reg byte y as potential for zp[1]:38 [ show::c#0 ]
+Statement [35] *((byte*) show::ptr#0 + (byte) 1) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $40 + (byte~) show::$5) [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Statement [37] *((byte*) show::ptr#0 + (byte) $28) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $80 + (byte~) show::$6) [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Statement [39] *((byte*) show::ptr#0 + (byte) $29) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $c0 + (byte~) show::$7) [ ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Statement [43] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::c#0 memset::dst#2 ] ( main:2::memset:13 [ memset::c#0 memset::dst#2 ] { }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:37 [ memset::c#0 ]
+Statement [45] *((byte*) memset::dst#2) ← (byte) memset::c#0 [ memset::c#0 memset::dst#2 ] ( main:2::memset:13 [ memset::c#0 memset::dst#2 ] { }  ) always clobbers reg byte a reg byte y 
+Removing always clobbered register reg byte y as potential for zp[1]:37 [ memset::c#0 ]
+Statement [49] (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 ] ( main:2::font_compress:9 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 ] { { font_find::glyph#0 = font_compress::next_original#2 } { font_find::font_size#0 = font_compress::font_size#2 } { font_find::return#0 = font_find::return#3 } }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ]
+Removing always clobbered register reg byte a as potential for zp[1]:10 [ font_compress::i#4 font_compress::i#1 ]
+Statement [56] *((byte*) font_compress::next_compressed#4 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#2 + (byte) font_compress::l#2) [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_compress::l#2 ] ( main:2::font_compress:9 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_compress::l#2 ] { }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:13 [ font_compress::l#2 font_compress::l#1 ]
+Statement [59] (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#4 + (byte) 8 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#1 ] ( main:2::font_compress:9 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#1 ] { }  ) always clobbers reg byte a 
+Statement [64] (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#2 + (byte) 8 [ font_compress::i#4 font_compress::next_original#1 font_compress::next_compressed#7 font_compress::return#1 ] ( main:2::font_compress:9 [ font_compress::i#4 font_compress::next_original#1 font_compress::next_compressed#7 font_compress::return#1 ] { }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:15 [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ]
+Statement [76] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@3 [ font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#4 font_find::l#2 ] ( main:2::font_compress:9::font_find:51 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#4 font_find::l#2 ] { { font_find::glyph#0 = font_compress::next_original#2 } { font_find::font_size#0 = font_compress::font_size#2 } { font_find::return#0 = font_find::return#3 } }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:59 [ font_find::font_size#0 ]
+Removing always clobbered register reg byte a as potential for zp[1]:18 [ font_find::return#3 font_find::i#2 font_find::i#1 ]
+Removing always clobbered register reg byte a as potential for zp[1]:19 [ font_find::l#2 font_find::l#1 ]
+Statement [81] (byte*) font_find::font#1 ← (byte*) font_find::font#4 + (byte) 8 [ font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#1 ] ( main:2::font_compress:9::font_find:51 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#1 ] { { font_find::glyph#0 = font_compress::next_original#2 } { font_find::font_size#0 = font_compress::font_size#2 } { font_find::return#0 = font_find::return#3 } }  ) always clobbers reg byte a 
+Statement [85] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ]
+Statement [86] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { }  ) always clobbers reg byte a 
+Statement [88] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ]
+Removing always clobbered register reg byte a as potential for zp[1]:29 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+Statement [94] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { }  ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+Removing always clobbered register reg byte a as potential for zp[1]:35 [ font_2x2::b#2 font_2x2::b#1 ]
+Removing always clobbered register reg byte a as potential for zp[1]:36 [ font_2x2::glyph_bit#0 ]
+Statement [95] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { }  ) always clobbers reg byte a 
+Statement [96] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { }  ) always clobbers reg byte a 
+Statement [97] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { }  ) always clobbers reg byte a 
+Statement [111] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { }  ) always clobbers reg byte a 
+Statement [112] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { }  ) always clobbers reg byte a 
+Statement [116] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:2::font_2x2:6 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { }  ) always clobbers reg byte a 
+Statement [117] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:2::font_2x2:6 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { }  ) always clobbers reg byte a 
+Statement [5] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ ] ( main:2 [ ] { }  ) always clobbers reg byte a 
+Statement [7] *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO [ ] ( main:2 [ ] { }  ) always clobbers reg byte a 
+Statement [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { }  ) always clobbers reg byte a 
+Statement [26] (word~) show::$0 ← (word)(byte) show::y#0 [ show::c#0 show::x#0 show::$0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [27] (word~) show::$8 ← (word~) show::$0 << (byte) 2 [ show::c#0 show::x#0 show::$0 show::$8 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$0 show::$8 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [28] (word~) show::$9 ← (word~) show::$8 + (word~) show::$0 [ show::c#0 show::x#0 show::$9 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$9 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [29] (word~) show::$1 ← (word~) show::$9 << (byte) 4 [ show::c#0 show::x#0 show::$1 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$1 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [30] (byte*~) show::$2 ← (const byte*) SCREEN + (word~) show::$1 [ show::c#0 show::x#0 show::$2 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::x#0 show::$2 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [31] (byte~) show::$3 ← (byte) show::x#0 << (byte) 1 [ show::c#0 show::$2 show::$3 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::$2 show::$3 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [32] (byte*) show::ptr#0 ← (byte*~) show::$2 + (byte~) show::$3 [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a 
+Statement [33] *((byte*) show::ptr#0) ← *((const byte*) FONT_COMPRESSED_MAP + (byte) show::c#0) [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Statement [35] *((byte*) show::ptr#0 + (byte) 1) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $40 + (byte~) show::$5) [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Statement [37] *((byte*) show::ptr#0 + (byte) $28) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $80 + (byte~) show::$6) [ show::c#0 show::ptr#0 ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 show::c#0 show::ptr#0 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Statement [39] *((byte*) show::ptr#0 + (byte) $29) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $c0 + (byte~) show::$7) [ ] ( main:2::show:19 [ main::y#4 main::c#2 main::x#2 ] { { show::c#0 = main::c#2 } { show::x#0 = main::x#2 } { show::y#0 = main::y#4 } }  ) always clobbers reg byte a reg byte y 
+Statement [43] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::c#0 memset::dst#2 ] ( main:2::memset:13 [ memset::c#0 memset::dst#2 ] { }  ) always clobbers reg byte a 
+Statement [45] *((byte*) memset::dst#2) ← (byte) memset::c#0 [ memset::c#0 memset::dst#2 ] ( main:2::memset:13 [ memset::c#0 memset::dst#2 ] { }  ) always clobbers reg byte a reg byte y 
+Statement [49] (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 ] ( main:2::font_compress:9 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 ] { { font_find::glyph#0 = font_compress::next_original#2 } { font_find::font_size#0 = font_compress::font_size#2 } { font_find::return#0 = font_find::return#3 } }  ) always clobbers reg byte a 
+Statement [56] *((byte*) font_compress::next_compressed#4 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#2 + (byte) font_compress::l#2) [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_compress::l#2 ] ( main:2::font_compress:9 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_compress::l#2 ] { }  ) always clobbers reg byte a 
+Statement [59] (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#4 + (byte) 8 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#1 ] ( main:2::font_compress:9 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#1 ] { }  ) always clobbers reg byte a 
+Statement [64] (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#2 + (byte) 8 [ font_compress::i#4 font_compress::next_original#1 font_compress::next_compressed#7 font_compress::return#1 ] ( main:2::font_compress:9 [ font_compress::i#4 font_compress::next_original#1 font_compress::next_compressed#7 font_compress::return#1 ] { }  ) always clobbers reg byte a 
+Statement [76] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@3 [ font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#4 font_find::l#2 ] ( main:2::font_compress:9::font_find:51 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#4 font_find::l#2 ] { { font_find::glyph#0 = font_compress::next_original#2 } { font_find::font_size#0 = font_compress::font_size#2 } { font_find::return#0 = font_find::return#3 } }  ) always clobbers reg byte a 
+Statement [81] (byte*) font_find::font#1 ← (byte*) font_find::font#4 + (byte) 8 [ font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#1 ] ( main:2::font_compress:9::font_find:51 [ font_compress::next_original#2 font_compress::font_size#2 font_compress::i#4 font_compress::next_compressed#4 font_find::glyph#0 font_find::font_size#0 font_find::i#2 font_find::font#1 ] { { font_find::glyph#0 = font_compress::next_original#2 } { font_find::font_size#0 = font_compress::font_size#2 } { font_find::return#0 = font_find::return#3 } }  ) always clobbers reg byte a 
+Statement [85] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { }  ) always clobbers reg byte a 
+Statement [86] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { }  ) always clobbers reg byte a 
+Statement [88] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { }  ) always clobbers reg byte a 
+Statement [90] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] { }  ) always clobbers reg byte a 
+Statement [94] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { }  ) always clobbers reg byte a 
+Statement [95] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { }  ) always clobbers reg byte a 
+Statement [96] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { }  ) always clobbers reg byte a 
+Statement [97] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { }  ) always clobbers reg byte a 
+Statement [111] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { }  ) always clobbers reg byte a 
+Statement [112] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:2::font_2x2:6 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { }  ) always clobbers reg byte a 
+Statement [116] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:2::font_2x2:6 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { }  ) always clobbers reg byte a 
+Statement [117] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:2::font_2x2:6 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { }  ) always clobbers reg byte a 
+Potential registers zp[1]:2 [ main::y#4 main::y#1 ] : zp[1]:2 , reg byte x , 
+Potential registers zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] : zp[1]:3 , reg byte x , 
+Potential registers zp[1]:4 [ main::x#2 main::x#1 ] : zp[1]:4 , reg byte x , 
+Potential registers zp[2]:5 [ memset::dst#2 memset::dst#1 ] : zp[2]:5 , 
+Potential registers zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 ] : zp[2]:7 , 
+Potential registers zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ] : zp[1]:9 , reg byte x , reg byte y , 
+Potential registers zp[1]:10 [ font_compress::i#4 font_compress::i#1 ] : zp[1]:10 , reg byte x , reg byte y , 
+Potential registers zp[2]:11 [ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ] : zp[2]:11 , 
+Potential registers zp[1]:13 [ font_compress::l#2 font_compress::l#1 ] : zp[1]:13 , reg byte x , reg byte y , 
+Potential registers zp[1]:14 [ font_compress::found#2 font_compress::found#3 font_compress::found#0 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:15 [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ] : zp[1]:15 , reg byte x , reg byte y , 
+Potential registers zp[2]:16 [ font_find::font#4 font_find::font#1 ] : zp[2]:16 , 
+Potential registers zp[1]:18 [ font_find::return#3 font_find::i#2 font_find::i#1 ] : zp[1]:18 , reg byte x , reg byte y , 
+Potential registers zp[1]:19 [ font_find::l#2 font_find::l#1 ] : zp[1]:19 , reg byte x , reg byte y , 
+Potential registers zp[1]:20 [ font_find::found#2 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[2]:21 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] : zp[2]:21 , 
+Potential registers zp[2]:23 [ font_2x2::next_original#4 font_2x2::next_original#1 ] : zp[2]:23 , 
+Potential registers zp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ] : zp[1]:25 , reg byte x , reg byte y , 
+Potential registers zp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ] : zp[1]:26 , reg byte x , reg byte y , 
+Potential registers zp[2]:27 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] : zp[2]:27 , 
+Potential registers zp[1]:29 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] : zp[1]:29 , reg byte x , reg byte y , 
+Potential registers zp[2]:30 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] : zp[2]:30 , 
+Potential registers zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] : zp[1]:32 , reg byte x , reg byte y , 
+Potential registers zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] : zp[2]:33 , 
+Potential registers zp[1]:35 [ font_2x2::b#2 font_2x2::b#1 ] : zp[1]:35 , reg byte x , reg byte y , 
+Potential registers zp[1]:36 [ font_2x2::glyph_bit#0 ] : zp[1]:36 , reg byte x , reg byte y , 
+Potential registers zp[1]:37 [ memset::c#0 ] : zp[1]:37 , reg byte x , 
+Potential registers zp[1]:38 [ show::c#0 ] : zp[1]:38 , reg byte x , 
+Potential registers zp[1]:39 [ show::x#0 ] : zp[1]:39 , reg byte x , reg byte y , 
+Potential registers zp[1]:40 [ show::y#0 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[2]:41 [ show::$0 ] : zp[2]:41 , 
+Potential registers zp[2]:43 [ show::$8 ] : zp[2]:43 , 
+Potential registers zp[2]:45 [ show::$9 ] : zp[2]:45 , 
+Potential registers zp[2]:47 [ show::$1 ] : zp[2]:47 , 
+Potential registers zp[2]:49 [ show::$2 ] : zp[2]:49 , 
+Potential registers zp[1]:51 [ show::$3 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[2]:52 [ show::ptr#0 ] : zp[2]:52 , 
+Potential registers zp[1]:54 [ show::$5 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:55 [ show::$6 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:56 [ show::$7 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[2]:57 [ font_find::glyph#0 ] : zp[2]:57 , 
+Potential registers zp[1]:59 [ font_find::font_size#0 ] : zp[1]:59 , reg byte x , reg byte y , 
+Potential registers zp[1]:60 [ font_find::return#0 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:61 [ font_2x2::$1 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[2]:62 [ font_2x2::$5 ] : zp[2]:62 , 
+Potential registers zp[2]:64 [ font_2x2::glyph_bits_2x2#1 ] : zp[2]:64 , 
+Potential registers zp[2]:66 [ font_2x2::$7 ] : zp[2]:66 , 
+Potential registers zp[1]:68 [ font_2x2::$12 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:69 [ font_2x2::$11 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:70 [ font_2x2::$15 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp[1]:71 [ font_2x2::$14 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , 
+
+REGISTER UPLIFT SCOPES
+Uplift Scope [font_find] 35,000,003.5: zp[1]:19 [ font_find::l#2 font_find::l#1 ] 2,778,114.22: zp[1]:18 [ font_find::return#3 font_find::i#2 font_find::i#1 ] 2,500,001.38: zp[2]:16 [ font_find::font#4 font_find::font#1 ] 1,000,001: zp[1]:20 [ font_find::found#2 ] 769,307.85: zp[2]:57 [ font_find::glyph#0 ] 83,416.83: zp[1]:59 [ font_find::font_size#0 ] 2,002: zp[1]:60 [ font_find::return#0 ] 
+Uplift Scope [font_2x2] 200,002: zp[1]:61 [ font_2x2::$1 ] 200,002: zp[2]:62 [ font_2x2::$5 ] 200,002: zp[2]:64 [ font_2x2::glyph_bits_2x2#1 ] 200,002: zp[2]:66 [ font_2x2::$7 ] 170,001.7: zp[1]:35 [ font_2x2::b#2 font_2x2::b#1 ] 121,114.22: zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] 67,500.9: zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] 50,000.5: zp[1]:36 [ font_2x2::glyph_bit#0 ] 32,712.54: zp[2]:30 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] 24,396.38: zp[1]:29 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] 23,712.54: zp[2]:27 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] 20,002: zp[1]:69 [ font_2x2::$11 ] 20,002: zp[1]:71 [ font_2x2::$14 ] 16,112.72: zp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ] 10,001: zp[1]:68 [ font_2x2::$12 ] 10,001: zp[1]:70 [ font_2x2::$15 ] 1,560.38: zp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ] 1,250.69: zp[2]:21 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] 1,031.06: zp[2]:23 [ font_2x2::next_original#4 font_2x2::next_original#1 ] 
+Uplift Scope [show] 20,002: zp[2]:43 [ show::$8 ] 20,002: zp[2]:45 [ show::$9 ] 20,002: zp[2]:47 [ show::$1 ] 20,002: zp[1]:51 [ show::$3 ] 20,002: zp[1]:54 [ show::$5 ] 20,002: zp[1]:55 [ show::$6 ] 20,002: zp[1]:56 [ show::$7 ] 15,001.5: zp[2]:41 [ show::$0 ] 10,001: zp[2]:49 [ show::$2 ] 7,143.57: zp[2]:52 [ show::ptr#0 ] 2,733.67: zp[1]:38 [ show::c#0 ] 1,571.71: zp[1]:39 [ show::x#0 ] 1,001: zp[1]:40 [ show::y#0 ] 
+Uplift Scope [font_compress] 35,003.5: zp[1]:13 [ font_compress::l#2 font_compress::l#1 ] 6,006: zp[1]:14 [ font_compress::found#2 font_compress::found#3 font_compress::found#0 ] 3,603.6: zp[1]:15 [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ] 2,387: zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ] 2,251.5: zp[2]:11 [ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ] 1,265.44: zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 ] 1,167.83: zp[1]:10 [ font_compress::i#4 font_compress::i#1 ] 
+Uplift Scope [main] 2,002: zp[1]:4 [ main::x#2 main::x#1 ] 1,243.4: zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] 285.17: zp[1]:2 [ main::y#4 main::y#1 ] 
+Uplift Scope [memset] 3,336.67: zp[2]:5 [ memset::dst#2 memset::dst#1 ] 168.67: zp[1]:37 [ memset::c#0 ] 
+Uplift Scope [] 
+
+Uplifting [font_find] best 204483 combination reg byte y [ font_find::l#2 font_find::l#1 ] reg byte x [ font_find::return#3 font_find::i#2 font_find::i#1 ] zp[2]:16 [ font_find::font#4 font_find::font#1 ] reg byte a [ font_find::found#2 ] zp[2]:57 [ font_find::glyph#0 ] zp[1]:59 [ font_find::font_size#0 ] zp[1]:60 [ font_find::return#0 ] 
+Limited combination testing to 100 combinations of 432 possible.
+Uplifting [font_2x2] best 181483 combination reg byte a [ font_2x2::$1 ] zp[2]:62 [ font_2x2::$5 ] zp[2]:64 [ font_2x2::glyph_bits_2x2#1 ] zp[2]:66 [ font_2x2::$7 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] reg byte x [ font_2x2::glyph_bit#0 ] zp[2]:30 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] zp[1]:29 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] zp[2]:27 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] zp[1]:69 [ font_2x2::$11 ] zp[1]:71 [ font_2x2::$14 ] zp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ] zp[1]:68 [ font_2x2::$12 ] zp[1]:70 [ font_2x2::$15 ] zp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ] zp[2]:21 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] zp[2]:23 [ font_2x2::next_original#4 font_2x2::next_original#1 ] 
+Limited combination testing to 100 combinations of 746496 possible.
+Uplifting [show] best 181463 combination zp[2]:43 [ show::$8 ] zp[2]:45 [ show::$9 ] zp[2]:47 [ show::$1 ] reg byte a [ show::$3 ] reg byte x [ show::$5 ] reg byte a [ show::$6 ] reg byte a [ show::$7 ] zp[2]:41 [ show::$0 ] zp[2]:49 [ show::$2 ] zp[2]:52 [ show::ptr#0 ] zp[1]:38 [ show::c#0 ] zp[1]:39 [ show::x#0 ] zp[1]:40 [ show::y#0 ] 
+Limited combination testing to 100 combinations of 6144 possible.
+Uplifting [font_compress] best 180053 combination reg byte y [ font_compress::l#2 font_compress::l#1 ] reg byte a [ font_compress::found#2 font_compress::found#3 font_compress::found#0 ] reg byte x [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ] zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ] zp[2]:11 [ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ] zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 ] zp[1]:10 [ font_compress::i#4 font_compress::i#1 ] 
+Limited combination testing to 100 combinations of 324 possible.
+Uplifting [main] best 180053 combination zp[1]:4 [ main::x#2 main::x#1 ] zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] zp[1]:2 [ main::y#4 main::y#1 ] 
+Uplifting [memset] best 180040 combination zp[2]:5 [ memset::dst#2 memset::dst#1 ] reg byte x [ memset::c#0 ] 
+Uplifting [] best 180040 combination 
+Attempting to uplift remaining variables inzp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+Uplifting [font_2x2] best 180040 combination zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] 
+Attempting to uplift remaining variables inzp[1]:59 [ font_find::font_size#0 ]
+Uplifting [font_find] best 180040 combination zp[1]:59 [ font_find::font_size#0 ] 
+Attempting to uplift remaining variables inzp[1]:29 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+Uplifting [font_2x2] best 180040 combination zp[1]:29 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] 
+Attempting to uplift remaining variables inzp[1]:69 [ font_2x2::$11 ]
+Uplifting [font_2x2] best 179440 combination reg byte y [ font_2x2::$11 ] 
+Attempting to uplift remaining variables inzp[1]:71 [ font_2x2::$14 ]
+Uplifting [font_2x2] best 178840 combination reg byte y [ font_2x2::$14 ] 
+Attempting to uplift remaining variables inzp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ]
+Uplifting [font_2x2] best 178840 combination zp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ] 
+Attempting to uplift remaining variables inzp[1]:68 [ font_2x2::$12 ]
+Uplifting [font_2x2] best 177940 combination reg byte a [ font_2x2::$12 ] 
+Attempting to uplift remaining variables inzp[1]:70 [ font_2x2::$15 ]
+Uplifting [font_2x2] best 177040 combination reg byte a [ font_2x2::$15 ] 
+Attempting to uplift remaining variables inzp[1]:38 [ show::c#0 ]
+Uplifting [show] best 177040 combination zp[1]:38 [ show::c#0 ] 
+Attempting to uplift remaining variables inzp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ]
+Uplifting [font_compress] best 177040 combination zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ] 
+Attempting to uplift remaining variables inzp[1]:4 [ main::x#2 main::x#1 ]
+Uplifting [main] best 177040 combination zp[1]:4 [ main::x#2 main::x#1 ] 
+Attempting to uplift remaining variables inzp[1]:60 [ font_find::return#0 ]
+Uplifting [font_find] best 177000 combination reg byte a [ font_find::return#0 ] 
+Attempting to uplift remaining variables inzp[1]:39 [ show::x#0 ]
+Uplifting [show] best 176699 combination reg byte x [ show::x#0 ] 
+Attempting to uplift remaining variables inzp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ]
+Uplifting [font_2x2] best 176699 combination zp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ] 
+Attempting to uplift remaining variables inzp[1]:3 [ main::c#2 main::c#4 main::c#1 ]
+Uplifting [main] best 176699 combination zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] 
+Attempting to uplift remaining variables inzp[1]:10 [ font_compress::i#4 font_compress::i#1 ]
+Uplifting [font_compress] best 176699 combination zp[1]:10 [ font_compress::i#4 font_compress::i#1 ] 
+Attempting to uplift remaining variables inzp[1]:40 [ show::y#0 ]
+Uplifting [show] best 176396 combination reg byte a [ show::y#0 ] 
+Attempting to uplift remaining variables inzp[1]:2 [ main::y#4 main::y#1 ]
+Uplifting [main] best 176396 combination zp[1]:2 [ main::y#4 main::y#1 ] 
+Coalescing zero page register [ zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] ] with [ zp[1]:38 [ show::c#0 ] ] - score: 1
+Coalescing zero page register [ zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 ] ] with [ zp[2]:57 [ font_find::glyph#0 ] ] - score: 1
+Coalescing zero page register [ zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ] ] with [ zp[1]:59 [ font_find::font_size#0 ] ] - score: 1
+Coalescing zero page register [ zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] ] with [ zp[2]:62 [ font_2x2::$5 ] ] - score: 1
+Coalescing zero page register [ zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 ] ] with [ zp[2]:66 [ font_2x2::$7 ] ] - score: 1
+Coalescing zero page register [ zp[2]:41 [ show::$0 ] ] with [ zp[2]:45 [ show::$9 ] ] - score: 1
+Coalescing zero page register [ zp[2]:47 [ show::$1 ] ] with [ zp[2]:49 [ show::$2 ] ] - score: 1
+Coalescing zero page register [ zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 ] ] with [ zp[2]:64 [ font_2x2::glyph_bits_2x2#1 ] ] - score: 2
+Coalescing zero page register [ zp[2]:41 [ show::$0 show::$9 ] ] with [ zp[2]:47 [ show::$1 show::$2 ] ] - score: 1
+Coalescing zero page register [ zp[2]:41 [ show::$0 show::$9 show::$1 show::$2 ] ] with [ zp[2]:52 [ show::ptr#0 ] ] - score: 1
+Coalescing zero page register [ zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 font_find::glyph#0 ] ] with [ zp[2]:5 [ memset::dst#2 memset::dst#1 ] ]
+Coalescing zero page register [ zp[2]:21 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] ] with [ zp[2]:11 [ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ] ]
+Coalescing zero page register [ zp[2]:23 [ font_2x2::next_original#4 font_2x2::next_original#1 ] ] with [ zp[2]:16 [ font_find::font#4 font_find::font#1 ] ]
+Coalescing zero page register [ zp[1]:25 [ font_2x2::c#11 font_2x2::c#1 ] ] with [ zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 font_find::font_size#0 ] ]
+Coalescing zero page register [ zp[1]:26 [ font_2x2::l#2 font_2x2::l#1 ] ] with [ zp[1]:10 [ font_compress::i#4 font_compress::i#1 ] ]
+Coalescing zero page register [ zp[2]:41 [ show::$0 show::$9 show::$1 show::$2 show::ptr#0 ] ] with [ zp[2]:27 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] ]
+Coalescing zero page register [ zp[2]:43 [ show::$8 ] ] with [ zp[2]:30 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] ]
+Coalescing zero page register [ zp[2]:33 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] ] with [ zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 font_find::glyph#0 memset::dst#2 memset::dst#1 ] ]
+Allocated (was zp[2]:21) zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ]
+Allocated (was zp[2]:23) zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_find::font#4 font_find::font#1 ]
+Allocated (was zp[1]:25) zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_compress::font_size#2 font_compress::font_size#9 font_find::font_size#0 ]
+Allocated (was zp[1]:26) zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_compress::i#4 font_compress::i#1 ]
+Allocated (was zp[1]:29) zp[1]:11 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+Allocated (was zp[1]:32) zp[1]:12 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+Allocated (was zp[2]:33) zp[2]:13 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 font_compress::next_original#2 font_compress::next_original#1 font_find::glyph#0 memset::dst#2 memset::dst#1 ]
+Allocated (was zp[2]:41) zp[2]:15 [ show::$0 show::$9 show::$1 show::$2 show::ptr#0 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
+Allocated (was zp[2]:43) zp[2]:17 [ show::$8 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
+
+ASSEMBLER BEFORE OPTIMIZATION
+  // File Comments
+// Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars
+  // Upstart
+.pc = $801 "Basic"
+:BasicUpstart(__bbegin)
+.pc = $80d "Program"
+  // Global Constants & labels
+  // Processor Port Register controlling RAM/ROM configuration and the datasette
+  .label PROCPORT = 1
+  // RAM in $A000, $E000 CHAR ROM in $D000
+  .const PROCPORT_RAM_CHARROM = 1
+  // BASIC in $A000, I/O in $D000, KERNEL in $E000
+  .const PROCPORT_BASIC_KERNEL_IO = 7
+  // The address of the CHARGEN character set
+  .label CHARGEN = $d000
+  .label D018 = $d018
+  .label SCREEN = $400
+  .label FONT_ORIGINAL = $2000
+  .label FONT_COMPRESSED = $2800
+  // @begin
+__bbegin:
+  // [1] phi from @begin to @1 [phi:@begin->@1]
+__b1_from___bbegin:
+  jmp __b1
+  // @1
+__b1:
+  // [2] call main 
+  jsr main
+  // [3] phi from @1 to @end [phi:@1->@end]
+__bend_from___b1:
+  jmp __bend
+  // @end
+__bend:
+  // main
+main: {
+    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>FONT_COMPRESSED)/4&$f
+    .label c = 3
+    .label x = 4
+    .label y = 2
+    // asm { sei  }
+    // Create 2x2 font from CHARGEN
+    sei
+    // [5] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 
+    lda #PROCPORT_RAM_CHARROM
+    sta PROCPORT
+    // [6] call font_2x2 
+    // [83] phi from main to font_2x2 [phi:main->font_2x2]
+  font_2x2_from_main:
+    jsr font_2x2
+    jmp __b6
+    // main::@6
+  __b6:
+    // [7] *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 
+    lda #PROCPORT_BASIC_KERNEL_IO
+    sta PROCPORT
+    // asm { cli  }
+    cli
+    // [9] call font_compress 
+    // [47] phi from main::@6 to font_compress [phi:main::@6->font_compress]
+  font_compress_from___b6:
+    jsr font_compress
+    // [10] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181]
+  toD0181_from___b6:
+    jmp toD0181
+    // main::toD0181
+  toD0181:
+    jmp __b5
+    // main::@5
+  __b5:
+    // [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
+    // Show compressed font
+    lda #toD0181_return
+    sta D018
+    // [12] (byte) memset::c#0 ← *((const byte*) FONT_COMPRESSED_MAP+(byte) ' ') -- vbuxx=_deref_pbuc1 
+    ldx FONT_COMPRESSED_MAP+' '
+    // [13] call memset 
+  // Clear the screen
+    // [41] phi from main::@5 to memset [phi:main::@5->memset]
+  memset_from___b5:
+    jsr memset
+    // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+  __b1_from___b5:
+    // [14] phi (byte) main::y#4 = (byte) 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z y
+    // [14] phi (byte) main::c#4 = (byte) 0 [phi:main::@5->main::@1#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z c
+    jmp __b1
+    // [14] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
+  __b1_from___b3:
+    // [14] phi (byte) main::y#4 = (byte) main::y#1 [phi:main::@3->main::@1#0] -- register_copy 
+    // [14] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#1] -- register_copy 
+    jmp __b1
+    // main::@1
+  __b1:
+    // [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+  __b2_from___b1:
+    // [15] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z x
+    // [15] phi (byte) main::c#2 = (byte) main::c#4 [phi:main::@1->main::@2#1] -- register_copy 
+    jmp __b2
+    // [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+  __b2_from___b7:
+    // [15] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@7->main::@2#0] -- register_copy 
+    // [15] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@7->main::@2#1] -- register_copy 
+    jmp __b2
+    // main::@2
+  __b2:
+    // [16] (byte) show::c#0 ← (byte) main::c#2
+    // [17] (byte) show::x#0 ← (byte) main::x#2 -- vbuxx=vbuz1 
+    ldx.z x
+    // [18] (byte) show::y#0 ← (byte) main::y#4 -- vbuaa=vbuz1 
+    lda.z y
+    // [19] call show 
+    jsr show
+    jmp __b7
+    // main::@7
+  __b7:
+    // [20] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1 
+    inc.z c
+    // [21] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 
+    inc.z x
+    // [22] if((byte) main::x#1!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z x
+    bne __b2_from___b7
+    jmp __b3
+    // main::@3
+  __b3:
+    // [23] (byte) main::y#1 ← ++ (byte) main::y#4 -- vbuz1=_inc_vbuz1 
+    inc.z y
+    // [24] if((byte) main::y#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z y
+    bne __b1_from___b3
+    jmp __b4
+    // main::@4
+  __b4:
+    // [25] *((const byte*) SCREEN+(word) $3e7) ← ++ *((const byte*) SCREEN+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
+    inc SCREEN+$3e7
+    jmp __b4
+}
+  // show
+// Show a 2x2 char on the screen at 2x2-position (x, y) using a font compress mapping
+// show(byte zp(3) c, byte register(X) x, byte register(A) y)
+show: {
+    .label __0 = $f
+    .label __1 = $f
+    .label __2 = $f
+    .label c = 3
+    .label ptr = $f
+    .label __8 = $11
+    .label __9 = $f
+    // [26] (word~) show::$0 ← (word)(byte) show::y#0 -- vwuz1=_word_vbuaa 
+    sta.z __0
+    lda #0
+    sta.z __0+1
+    // [27] (word~) show::$8 ← (word~) show::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
+    lda.z __0
+    asl
+    sta.z __8
+    lda.z __0+1
+    rol
+    sta.z __8+1
+    asl.z __8
+    rol.z __8+1
+    // [28] (word~) show::$9 ← (word~) show::$8 + (word~) show::$0 -- vwuz1=vwuz2_plus_vwuz1 
+    lda.z __9
+    clc
+    adc.z __8
+    sta.z __9
+    lda.z __9+1
+    adc.z __8+1
+    sta.z __9+1
+    // [29] (word~) show::$1 ← (word~) show::$9 << (byte) 4 -- vwuz1=vwuz1_rol_4 
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    // [30] (byte*~) show::$2 ← (const byte*) SCREEN + (word~) show::$1 -- pbuz1=pbuc1_plus_vwuz1 
+    clc
+    lda.z __2
+    adc #<SCREEN
+    sta.z __2
+    lda.z __2+1
+    adc #>SCREEN
+    sta.z __2+1
+    // [31] (byte~) show::$3 ← (byte) show::x#0 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    txa
+    asl
+    // [32] (byte*) show::ptr#0 ← (byte*~) show::$2 + (byte~) show::$3 -- pbuz1=pbuz1_plus_vbuaa 
+    clc
+    adc.z ptr
+    sta.z ptr
+    bcc !+
+    inc.z ptr+1
+  !:
+    // [33] *((byte*) show::ptr#0) ← *((const byte*) FONT_COMPRESSED_MAP + (byte) show::c#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
+    ldy.z c
+    lda FONT_COMPRESSED_MAP,y
+    ldy #0
+    sta (ptr),y
+    // [34] (byte~) show::$5 ← (byte) show::c#0 -- vbuxx=vbuz1 
+    ldx.z c
+    // [35] *((byte*) show::ptr#0 + (byte) 1) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $40 + (byte~) show::$5) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx 
+    lda FONT_COMPRESSED_MAP+$40,x
+    ldy #1
+    sta (ptr),y
+    // [36] (byte~) show::$6 ← (byte) show::c#0 -- vbuaa=vbuz1 
+    lda.z c
+    // [37] *((byte*) show::ptr#0 + (byte) $28) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $80 + (byte~) show::$6) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa 
+    tay
+    lda FONT_COMPRESSED_MAP+$80,y
+    ldy #$28
+    sta (ptr),y
+    // [38] (byte~) show::$7 ← (byte) show::c#0 -- vbuaa=vbuz1 
+    lda.z c
+    // [39] *((byte*) show::ptr#0 + (byte) $29) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $c0 + (byte~) show::$7) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa 
+    tay
+    lda FONT_COMPRESSED_MAP+$c0,y
+    ldy #$29
+    sta (ptr),y
+    jmp __breturn
+    // show::@return
+  __breturn:
+    // [40] return 
+    rts
+}
+  // memset
+// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
+// memset(byte register(X) c)
+memset: {
+    .label str = SCREEN
+    .const num = $400
+    .label end = str+num
+    .label dst = $d
+    // [42] phi from memset to memset::@1 [phi:memset->memset::@1]
+  __b1_from_memset:
+    // [42] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
+    lda #<str
+    sta.z dst
+    lda #>str
+    sta.z dst+1
+    jmp __b1
+    // memset::@1
+  __b1:
+    // [43] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
+    lda.z dst+1
+    cmp #>end
+    bne __b2
+    lda.z dst
+    cmp #<end
+    bne __b2
+    jmp __breturn
+    // memset::@return
+  __breturn:
+    // [44] return 
+    rts
+    // memset::@2
+  __b2:
+    // [45] *((byte*) memset::dst#2) ← (byte) memset::c#0 -- _deref_pbuz1=vbuxx 
+    txa
+    ldy #0
+    sta (dst),y
+    // [46] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
+    inc.z dst
+    bne !+
+    inc.z dst+1
+  !:
+    // [42] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
+  __b1_from___b2:
+    // [42] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy 
+    jmp __b1
+}
+  // font_compress
+// Compress a font finding identical characters
+// The compressed font is put into font_compressed and the compress_mapping is updated
+// so that compress_mapping[c] points to the char in font_compressed that is identical to char c in font_original
+// Returns the size of the compressed font (in chars)
+font_compress: {
+    .label next_original = $d
+    .label i = $a
+    .label next_compressed = 5
+    .label font_size = 9
+    // [48] phi from font_compress to font_compress::@1 [phi:font_compress->font_compress::@1]
+  __b1_from_font_compress:
+    // [48] phi (byte*) font_compress::next_compressed#4 = (const byte*) FONT_COMPRESSED [phi:font_compress->font_compress::@1#0] -- pbuz1=pbuc1 
+    lda #<FONT_COMPRESSED
+    sta.z next_compressed
+    lda #>FONT_COMPRESSED
+    sta.z next_compressed+1
+    // [48] phi (byte) font_compress::i#4 = (byte) 0 [phi:font_compress->font_compress::@1#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z i
+    // [48] phi (byte) font_compress::font_size#2 = (byte) 0 [phi:font_compress->font_compress::@1#2] -- vbuz1=vbuc1 
+    lda #0
+    sta.z font_size
+    // [48] phi (byte*) font_compress::next_original#2 = (const byte*) FONT_ORIGINAL [phi:font_compress->font_compress::@1#3] -- pbuz1=pbuc1 
+    lda #<FONT_ORIGINAL
+    sta.z next_original
+    lda #>FONT_ORIGINAL
+    sta.z next_original+1
+    jmp __b1
+    // font_compress::@1
+  __b1:
+    // [49] (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2
+    // [50] (byte) font_find::font_size#0 ← (byte) font_compress::font_size#2
+    // [51] call font_find 
+    // [70] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find]
+  font_find_from___b1:
+    jsr font_find
+    // [52] (byte) font_find::return#0 ← (byte) font_find::return#3 -- vbuaa=vbuxx 
+    txa
+    jmp __b5
+    // font_compress::@5
+  __b5:
+    // [53] (byte) font_compress::found#0 ← (byte) font_find::return#0
+    // [54] if((byte) font_compress::found#0!=(byte) $ff) goto font_compress::@7 -- vbuaa_neq_vbuc1_then_la1 
+    cmp #$ff
+    bne __b7
+    // [55] phi from font_compress::@5 to font_compress::@3 [phi:font_compress::@5->font_compress::@3]
+  __b3_from___b5:
+    // [55] phi (byte) font_compress::l#2 = (byte) 0 [phi:font_compress::@5->font_compress::@3#0] -- vbuyy=vbuc1 
+    ldy #0
+    jmp __b3
+  // Glyph not found - create it
+    // [55] phi from font_compress::@3 to font_compress::@3 [phi:font_compress::@3->font_compress::@3]
+  __b3_from___b3:
+    // [55] phi (byte) font_compress::l#2 = (byte) font_compress::l#1 [phi:font_compress::@3->font_compress::@3#0] -- register_copy 
+    jmp __b3
+    // font_compress::@3
+  __b3:
+    // [56] *((byte*) font_compress::next_compressed#4 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#2 + (byte) font_compress::l#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy 
+    lda (next_original),y
+    sta (next_compressed),y
+    // [57] (byte) font_compress::l#1 ← ++ (byte) font_compress::l#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [58] if((byte) font_compress::l#1!=(byte) 8) goto font_compress::@3 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #8
+    bne __b3_from___b3
+    jmp __b4
+    // font_compress::@4
+  __b4:
+    // [59] (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_compressed
+    sta.z next_compressed
+    bcc !+
+    inc.z next_compressed+1
+  !:
+    // [60] (byte) font_compress::font_size#1 ← ++ (byte) font_compress::font_size#2 -- vbuxx=_inc_vbuz1 
+    ldx.z font_size
+    inx
+    // [61] (byte) font_compress::found#3 ← (byte) font_compress::font_size#2 -- vbuaa=vbuz1 
+    lda.z font_size
+    // [62] phi from font_compress::@4 font_compress::@7 to font_compress::@2 [phi:font_compress::@4/font_compress::@7->font_compress::@2]
+  __b2_from___b4:
+  __b2_from___b7:
+    // [62] phi (byte*) font_compress::next_compressed#7 = (byte*) font_compress::next_compressed#1 [phi:font_compress::@4/font_compress::@7->font_compress::@2#0] -- register_copy 
+    // [62] phi (byte) font_compress::return#1 = (byte) font_compress::font_size#1 [phi:font_compress::@4/font_compress::@7->font_compress::@2#1] -- register_copy 
+    // [62] phi (byte) font_compress::found#2 = (byte) font_compress::found#3 [phi:font_compress::@4/font_compress::@7->font_compress::@2#2] -- register_copy 
+    jmp __b2
+    // font_compress::@2
+  __b2:
+    // [63] *((const byte*) FONT_COMPRESSED_MAP + (byte) font_compress::i#4) ← (byte) font_compress::found#2 -- pbuc1_derefidx_vbuz1=vbuaa 
+    ldy.z i
+    sta FONT_COMPRESSED_MAP,y
+    // [64] (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // [65] (byte) font_compress::i#1 ← ++ (byte) font_compress::i#4 -- vbuz1=_inc_vbuz1 
+    inc.z i
+    // [66] if((byte) font_compress::i#1!=(byte) 0) goto font_compress::@6 -- vbuz1_neq_0_then_la1 
+    lda.z i
+    cmp #0
+    bne __b6
+    jmp __breturn
+    // font_compress::@return
+  __breturn:
+    // [67] return 
+    rts
+    // font_compress::@6
+  __b6:
+    // [68] (byte) font_compress::font_size#9 ← (byte) font_compress::return#1 -- vbuz1=vbuxx 
+    stx.z font_size
+    // [48] phi from font_compress::@6 to font_compress::@1 [phi:font_compress::@6->font_compress::@1]
+  __b1_from___b6:
+    // [48] phi (byte*) font_compress::next_compressed#4 = (byte*) font_compress::next_compressed#7 [phi:font_compress::@6->font_compress::@1#0] -- register_copy 
+    // [48] phi (byte) font_compress::i#4 = (byte) font_compress::i#1 [phi:font_compress::@6->font_compress::@1#1] -- register_copy 
+    // [48] phi (byte) font_compress::font_size#2 = (byte) font_compress::font_size#9 [phi:font_compress::@6->font_compress::@1#2] -- register_copy 
+    // [48] phi (byte*) font_compress::next_original#2 = (byte*) font_compress::next_original#1 [phi:font_compress::@6->font_compress::@1#3] -- register_copy 
+    jmp __b1
+    // font_compress::@7
+  __b7:
+    // [69] (byte) font_compress::return#5 ← (byte) font_compress::font_size#2 -- vbuxx=vbuz1 
+    ldx.z font_size
+    jmp __b2_from___b7
+}
+  // font_find
+// Look for a glyph within a font
+// Only looks at the first font_size glyphs
+// Returns the index of the glyph within the font. Returns 0xff if the glyph is not found.
+// font_find(byte* zp($d) glyph, byte* zp(7) font, byte zp(9) font_size)
+font_find: {
+    .label glyph = $d
+    .label font_size = 9
+    .label font = 7
+    // [71] phi from font_find to font_find::@1 [phi:font_find->font_find::@1]
+  __b1_from_font_find:
+    // [71] phi (byte*) font_find::font#4 = (const byte*) FONT_COMPRESSED [phi:font_find->font_find::@1#0] -- pbuz1=pbuc1 
+    lda #<FONT_COMPRESSED
+    sta.z font
+    lda #>FONT_COMPRESSED
+    sta.z font+1
+    // [71] phi (byte) font_find::i#2 = (byte) 0 [phi:font_find->font_find::@1#1] -- vbuxx=vbuc1 
+    ldx #0
+    jmp __b1
+    // font_find::@1
+  __b1:
+    // [72] if((byte) font_find::i#2<(byte) font_find::font_size#0) goto font_find::@2 -- vbuxx_lt_vbuz1_then_la1 
+    cpx.z font_size
+    bcc __b2_from___b1
+    // [73] phi from font_find::@1 to font_find::@return [phi:font_find::@1->font_find::@return]
+  __breturn_from___b1:
+    // [73] phi (byte) font_find::return#3 = (byte) $ff [phi:font_find::@1->font_find::@return#0] -- vbuxx=vbuc1 
+    ldx #$ff
+    jmp __breturn
+    // font_find::@return
+  __breturn:
+    // [74] return 
+    rts
+    // [75] phi from font_find::@1 to font_find::@2 [phi:font_find::@1->font_find::@2]
+  __b2_from___b1:
+    // [75] phi (byte) font_find::l#2 = (byte) 0 [phi:font_find::@1->font_find::@2#0] -- vbuyy=vbuc1 
+    ldy #0
+    jmp __b2
+    // [75] phi from font_find::@3 to font_find::@2 [phi:font_find::@3->font_find::@2]
+  __b2_from___b3:
+    // [75] phi (byte) font_find::l#2 = (byte) font_find::l#1 [phi:font_find::@3->font_find::@2#0] -- register_copy 
+    jmp __b2
+    // font_find::@2
+  __b2:
+    // [76] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@3 -- pbuz1_derefidx_vbuyy_eq_pbuz2_derefidx_vbuyy_then_la1 
+    lda (glyph),y
+    cmp (font),y
+    beq __b3
+    // [79] phi from font_find::@2 to font_find::@4 [phi:font_find::@2->font_find::@4]
+  __b4_from___b2:
+    // [79] phi (byte) font_find::found#2 = (byte) 0 [phi:font_find::@2->font_find::@4#0] -- vbuaa=vbuc1 
+    lda #0
+    jmp __b4
+    // font_find::@3
+  __b3:
+    // [77] (byte) font_find::l#1 ← ++ (byte) font_find::l#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [78] if((byte) font_find::l#1!=(byte) 8) goto font_find::@2 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #8
+    bne __b2_from___b3
+    // [79] phi from font_find::@3 to font_find::@4 [phi:font_find::@3->font_find::@4]
+  __b4_from___b3:
+    // [79] phi (byte) font_find::found#2 = (byte) 1 [phi:font_find::@3->font_find::@4#0] -- vbuaa=vbuc1 
+    lda #1
+    jmp __b4
+    // font_find::@4
+  __b4:
+    // [80] if((byte) 0==(byte) font_find::found#2) goto font_find::@5 -- vbuc1_eq_vbuaa_then_la1 
+    cmp #0
+    beq __b5
+    // [73] phi from font_find::@4 to font_find::@return [phi:font_find::@4->font_find::@return]
+  __breturn_from___b4:
+    // [73] phi (byte) font_find::return#3 = (byte) font_find::i#2 [phi:font_find::@4->font_find::@return#0] -- register_copy 
+    jmp __breturn
+    // font_find::@5
+  __b5:
+    // [81] (byte*) font_find::font#1 ← (byte*) font_find::font#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z font
+    sta.z font
+    bcc !+
+    inc.z font+1
+  !:
+    // [82] (byte) font_find::i#1 ← ++ (byte) font_find::i#2 -- vbuxx=_inc_vbuxx 
+    inx
+    // [71] phi from font_find::@5 to font_find::@1 [phi:font_find::@5->font_find::@1]
+  __b1_from___b5:
+    // [71] phi (byte*) font_find::font#4 = (byte*) font_find::font#1 [phi:font_find::@5->font_find::@1#0] -- register_copy 
+    // [71] phi (byte) font_find::i#2 = (byte) font_find::i#1 [phi:font_find::@5->font_find::@1#1] -- register_copy 
+    jmp __b1
+}
+  // font_2x2
+// Create a 2x2-font by doubling all pixels of the 64 first chars
+font_2x2: {
+    .label __5 = $d
+    .label __7 = $d
+    .label next_2x2_left = 5
+    .label next_2x2_right = $11
+    .label glyph_bits = $c
+    .label glyph_bits_2x2 = $d
+    .label l2 = $b
+    .label l = $a
+    .label next_2x2_left_1 = $f
+    .label next_2x2 = 5
+    .label next_original = 7
+    .label c = 9
+    // [84] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1]
+  __b1_from_font_2x2:
+    // [84] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z c
+    // [84] phi (byte*) font_2x2::next_original#4 = (const byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 
+    lda #<CHARGEN
+    sta.z next_original
+    lda #>CHARGEN
+    sta.z next_original+1
+    // [84] phi (byte*) font_2x2::next_2x2_left#0 = (const byte*) FONT_ORIGINAL [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 
+    lda #<FONT_ORIGINAL
+    sta.z next_2x2_left
+    lda #>FONT_ORIGINAL
+    sta.z next_2x2_left+1
+    jmp __b1
+    // [84] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1]
+  __b1_from___b9:
+    // [84] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy 
+    // [84] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy 
+    // [84] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy 
+    jmp __b1
+    // font_2x2::@1
+  __b1:
+    // [85] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$40*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$40*8
+    sta.z next_2x2_right+1
+    // [86] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 
+    lda.z next_2x2_left
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    sta.z next_2x2_left_1+1
+    // [87] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2]
+  __b2_from___b1:
+    // [87] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy 
+    // [87] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l2
+    // [87] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy 
+    // [87] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l
+    jmp __b2
+    // [87] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2]
+  __b2_from___b8:
+    // [87] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy 
+    // [87] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy 
+    // [87] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy 
+    // [87] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy 
+    jmp __b2
+    // font_2x2::@2
+  __b2:
+    // [88] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 
+    ldy.z l
+    lda (next_original),y
+    sta.z glyph_bits
+    // [89] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3]
+  __b3_from___b2:
+    // [89] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1 
+    ldy #0
+    // [89] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 
+    lda #<0
+    sta.z glyph_bits_2x2
+    lda #>0
+    sta.z glyph_bits_2x2+1
+    // [89] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy 
+    jmp __b3
+    // [89] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3]
+  __b3_from___b5:
+    // [89] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy 
+    // [89] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy 
+    // [89] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy 
+    jmp __b3
+    // font_2x2::@3
+  __b3:
+    // [90] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 
+    lda #$80
+    and.z glyph_bits
+    // [91] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuaa_then_la1 
+    cmp #0
+    bne __b4_from___b3
+    // [93] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5]
+  __b5_from___b3:
+    // [93] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1 
+    ldx #0
+    jmp __b5
+    // [92] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4]
+  __b4_from___b3:
+    jmp __b4
+    // font_2x2::@4
+  __b4:
+    // [93] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5]
+  __b5_from___b4:
+    // [93] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1 
+    ldx #1
+    jmp __b5
+    // font_2x2::@5
+  __b5:
+    // [94] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
+    asl.z __5
+    rol.z __5+1
+    // [95] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx 
+    txa
+    ora.z glyph_bits_2x2
+    sta.z glyph_bits_2x2
+    // [96] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz1_rol_1 
+    asl.z __7
+    rol.z __7+1
+    // [97] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx 
+    txa
+    ora.z glyph_bits_2x2
+    sta.z glyph_bits_2x2
+    // [98] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
+    // Move to next bit
+    asl.z glyph_bits
+    // [99] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [100] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #8
+    bne __b3_from___b5
+    jmp __b6
+    // font_2x2::@6
+  __b6:
+    // [101] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1 
+    lda.z glyph_bits_2x2+1
+    // [102] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // Put the generated 2x2-line into the 2x2-font twice
+    ldy.z l2
+    sta (next_2x2_left_1),y
+    // [103] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 
+    ldy.z l2
+    iny
+    // [104] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa 
+    sta (next_2x2_left_1),y
+    // [105] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1 
+    lda.z glyph_bits_2x2
+    // [106] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
+    ldy.z l2
+    sta (next_2x2_right),y
+    // [107] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 
+    ldy.z l2
+    iny
+    // [108] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuyy=vbuaa 
+    sta (next_2x2_right),y
+    // [109] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 -- vbuz1=vbuz1_plus_2 
+    lda.z l2
+    clc
+    adc #2
+    sta.z l2
+    // [110] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l2
+    bne __b8_from___b6
+    jmp __b7
+    // font_2x2::@7
+  __b7:
+    // [111] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$80*8
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    adc #>$80*8
+    sta.z next_2x2_left_1+1
+    // [112] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$c0*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$c0*8
+    sta.z next_2x2_right+1
+    // [113] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8]
+  __b8_from___b7:
+    // [113] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy 
+    // [113] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l2
+    // [113] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy 
+    jmp __b8
+    // [113] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8]
+  __b8_from___b6:
+    // [113] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy 
+    // [113] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy 
+    // [113] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy 
+    jmp __b8
+    // font_2x2::@8
+  __b8:
+    // [114] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 
+    inc.z l
+    // [115] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l
+    bne __b2_from___b8
+    jmp __b9
+    // font_2x2::@9
+  __b9:
+    // [116] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_2x2
+    sta.z next_2x2
+    bcc !+
+    inc.z next_2x2+1
+  !:
+    // [117] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // [118] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 
+    inc.z c
+    // [119] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 
+    lda #$40
+    cmp.z c
+    bne __b1_from___b9
+    jmp __breturn
+    // font_2x2::@return
+  __breturn:
+    // [120] return 
+    rts
+}
+  // File Data
+  .align $100
+  FONT_COMPRESSED_MAP: .fill $100, 0
+
+ASSEMBLER OPTIMIZATIONS
+Removing instruction jmp __b1
+Removing instruction jmp __bend
+Removing instruction jmp __b6
+Removing instruction jmp toD0181
+Removing instruction jmp __b5
+Removing instruction jmp __b1
+Removing instruction jmp __b2
+Removing instruction jmp __b7
+Removing instruction jmp __b3
+Removing instruction jmp __b4
+Removing instruction jmp __breturn
+Removing instruction jmp __b1
+Removing instruction jmp __breturn
+Removing instruction jmp __b1
+Removing instruction jmp __b5
+Removing instruction jmp __b3
+Removing instruction jmp __b4
+Removing instruction jmp __b2
+Removing instruction jmp __breturn
+Removing instruction jmp __b1
+Removing instruction jmp __breturn
+Removing instruction jmp __b2
+Removing instruction jmp __b4
+Removing instruction jmp __b1
+Removing instruction jmp __b2
+Removing instruction jmp __b3
+Removing instruction jmp __b4
+Removing instruction jmp __b5
+Removing instruction jmp __b6
+Removing instruction jmp __b7
+Removing instruction jmp __b8
+Removing instruction jmp __b9
+Removing instruction jmp __breturn
+Succesful ASM optimization Pass5NextJumpElimination
+Removing instruction lda #0
+Replacing instruction lda.z c with TXA
+Replacing instruction lda.z c with TXA
+Removing instruction lda #0
+Removing instruction lda #0
+Replacing instruction lda #<0 with TYA
+Removing instruction lda #>0
+Removing instruction ldy.z l2
+Removing instruction ldy.z l2
+Succesful ASM optimization Pass5UnnecesaryLoadElimination
+Replacing label __b2_from___b7 with __b2
+Replacing label __b1_from___b3 with __b1
+Replacing label __b3_from___b3 with __b3
+Replacing label __b2_from___b7 with __b2
+Replacing label __b2_from___b3 with __b2
+Replacing label __b4_from___b3 with __b4
+Replacing label __b3_from___b5 with __b3
+Replacing label __b8_from___b6 with __b8
+Replacing label __b2_from___b8 with __b2
+Replacing label __b1_from___b9 with __b1
+Removing instruction __b1_from___bbegin:
+Removing instruction __b1:
+Removing instruction __bend_from___b1:
+Removing instruction toD0181_from___b6:
+Removing instruction toD0181:
+Removing instruction __b1_from___b3:
+Removing instruction __b2_from___b1:
+Removing instruction __b2_from___b7:
+Removing instruction font_find_from___b1:
+Removing instruction __b3_from___b3:
+Removing instruction __b2_from___b4:
+Removing instruction __b2_from___b7:
+Removing instruction __b2_from___b3:
+Removing instruction __b1_from___b9:
+Removing instruction __b2_from___b8:
+Removing instruction __b3_from___b5:
+Removing instruction __b4_from___b3:
+Removing instruction __b5_from___b4:
+Removing instruction __b8_from___b6:
+Succesful ASM optimization Pass5RedundantLabelElimination
+Removing instruction __bend:
+Removing instruction font_2x2_from_main:
+Removing instruction __b6:
+Removing instruction font_compress_from___b6:
+Removing instruction __b5:
+Removing instruction memset_from___b5:
+Removing instruction __b1_from___b5:
+Removing instruction __b7:
+Removing instruction __b3:
+Removing instruction __breturn:
+Removing instruction __b1_from_memset:
+Removing instruction __breturn:
+Removing instruction __b1_from___b2:
+Removing instruction __b1_from_font_compress:
+Removing instruction __b5:
+Removing instruction __b3_from___b5:
+Removing instruction __b4:
+Removing instruction __breturn:
+Removing instruction __b1_from___b6:
+Removing instruction __b1_from_font_find:
+Removing instruction __breturn_from___b1:
+Removing instruction __b4_from___b2:
+Removing instruction __b4_from___b3:
+Removing instruction __breturn_from___b4:
+Removing instruction __b1_from___b5:
+Removing instruction __b1_from_font_2x2:
+Removing instruction __b2_from___b1:
+Removing instruction __b3_from___b2:
+Removing instruction __b5_from___b3:
+Removing instruction __b6:
+Removing instruction __b7:
+Removing instruction __b8_from___b7:
+Removing instruction __b9:
+Removing instruction __breturn:
+Succesful ASM optimization Pass5UnusedLabelElimination
+Updating BasicUpstart to call main directly
+Removing instruction jsr main
+Succesful ASM optimization Pass5SkipBegin
+Replacing jump to rts with rts in jmp __breturn
+Succesful ASM optimization Pass5DoubleJumpElimination
+Relabelling long label __b2_from___b1 to b1
+Succesful ASM optimization Pass5RelabelLongLabels
+Removing instruction jmp __b1
+Removing instruction jmp __b2
+Removing instruction jmp __b3
+Removing instruction jmp __b2
+Removing instruction jmp __b1
+Removing instruction jmp __b2
+Removing instruction jmp __b3
+Removing instruction jmp __b8
+Succesful ASM optimization Pass5NextJumpElimination
+Removing instruction lda #8
+Removing instruction lda #8
+Succesful ASM optimization Pass5UnnecesaryLoadElimination
+Removing instruction __bbegin:
+Removing instruction __breturn:
+Succesful ASM optimization Pass5UnusedLabelElimination
+Fixing long branch [396] bne __b1 to beq
+
+FINAL SYMBOL TABLE
+(label) @1
+(label) @begin
+(label) @end
+(const byte*) CHARGEN = (byte*) 53248
+(const byte*) D018 = (byte*) 53272
+(const byte*) FONT_COMPRESSED = (byte*) 10240
+(const byte*) FONT_COMPRESSED_MAP[(number) $100]  = { fill( $100, 0) }
+(const byte*) FONT_ORIGINAL = (byte*) 8192
+(const byte*) PROCPORT = (byte*) 1
+(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7
+(const byte) PROCPORT_RAM_CHARROM = (byte) 1
+(const byte*) SCREEN = (byte*) 1024
+(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
+(byte~) font_2x2::$1 reg byte a 200002.0
+(byte~) font_2x2::$11 reg byte y 20002.0
+(byte~) font_2x2::$12 reg byte a 10001.0
+(byte~) font_2x2::$14 reg byte y 20002.0
+(byte~) font_2x2::$15 reg byte a 10001.0
+(word~) font_2x2::$5 zp[2]:13 200002.0
+(word~) font_2x2::$7 zp[2]:13 200002.0
+(label) font_2x2::@1
+(label) font_2x2::@2
+(label) font_2x2::@3
+(label) font_2x2::@4
+(label) font_2x2::@5
+(label) font_2x2::@6
+(label) font_2x2::@7
+(label) font_2x2::@8
+(label) font_2x2::@9
+(label) font_2x2::@return
+(byte) font_2x2::b
+(byte) font_2x2::b#1 reg byte y 150001.5
+(byte) font_2x2::b#2 reg byte y 20000.2
+(byte) font_2x2::c
+(byte) font_2x2::c#1 c zp[1]:9 1501.5
+(byte) font_2x2::c#11 c zp[1]:9 58.88235294117647
+(byte*) font_2x2::font_2x2
+(byte*) font_2x2::font_original
+(byte) font_2x2::glyph_bit
+(byte) font_2x2::glyph_bit#0 reg byte x 50000.5
+(byte) font_2x2::glyph_bits
+(byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:12 20002.0
+(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:12 66667.33333333333
+(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:12 34444.88888888889
+(word) font_2x2::glyph_bits_2x2
+(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:13 200002.0
+(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:13 27500.5
+(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:13 40000.4
+(byte) font_2x2::l
+(byte) font_2x2::l#1 l zp[1]:10 15001.5
+(byte) font_2x2::l#2 l zp[1]:10 1111.2222222222222
+(byte) font_2x2::l2
+(byte) font_2x2::l2#1 l2 zp[1]:11 15001.5
+(byte) font_2x2::l2#8 l2 zp[1]:11 2727.5454545454545
+(byte) font_2x2::l2#9 l2 zp[1]:11 6667.333333333333
+(byte*) font_2x2::next_2x2
+(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:5 500.5
+(byte*) font_2x2::next_2x2_left
+(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:5 750.1875
+(byte*) font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:15 10001.0
+(byte*) font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:15 2002.0
+(byte*) font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:15 1708.5416666666665
+(byte*) font_2x2::next_2x2_left#8 next_2x2_left_1 zp[2]:15 10001.0
+(byte*) font_2x2::next_2x2_right
+(byte*) font_2x2::next_2x2_right#0 next_2x2_right zp[2]:17 1001.0
+(byte*) font_2x2::next_2x2_right#1 next_2x2_right zp[2]:17 20002.0
+(byte*) font_2x2::next_2x2_right#7 next_2x2_right zp[2]:17 1708.5416666666665
+(byte*) font_2x2::next_2x2_right#8 next_2x2_right zp[2]:17 10001.0
+(byte*) font_2x2::next_original
+(byte*) font_2x2::next_original#1 next_original zp[2]:7 667.3333333333334
+(byte*) font_2x2::next_original#4 next_original zp[2]:7 363.7272727272727
+(byte()) font_compress((byte*) font_compress::font_original , (byte*) font_compress::font_compressed , (byte*) font_compress::compress_mapping)
+(label) font_compress::@1
+(label) font_compress::@2
+(label) font_compress::@3
+(label) font_compress::@4
+(label) font_compress::@5
+(label) font_compress::@6
+(label) font_compress::@7
+(label) font_compress::@return
+(byte*) font_compress::compress_mapping
+(byte*) font_compress::font_compressed
+(byte*) font_compress::font_original
+(byte) font_compress::font_size
+(byte) font_compress::font_size#1 reg byte x 1001.0
+(byte) font_compress::font_size#2 font_size zp[1]:9 385.0
+(byte) font_compress::font_size#9 font_size zp[1]:9 2002.0
+(byte) font_compress::found
+(byte) font_compress::found#0 reg byte a 1001.0
+(byte) font_compress::found#2 reg byte a 3003.0
+(byte) font_compress::found#3 reg byte a 2002.0
+(byte) font_compress::i
+(byte) font_compress::i#1 i zp[1]:10 1001.0
+(byte) font_compress::i#4 i zp[1]:10 166.83333333333334
+(byte) font_compress::l
+(byte) font_compress::l#1 reg byte y 15001.5
+(byte) font_compress::l#2 reg byte y 20002.0
+(byte*) font_compress::next_compressed
+(byte*) font_compress::next_compressed#1 next_compressed zp[2]:5 667.3333333333334
+(byte*) font_compress::next_compressed#4 next_compressed zp[2]:5 1083.6666666666665
+(byte*) font_compress::next_compressed#7 next_compressed zp[2]:5 500.5
+(byte*) font_compress::next_original
+(byte*) font_compress::next_original#1 next_original zp[2]:13 500.5
+(byte*) font_compress::next_original#2 next_original zp[2]:13 764.9411764705882
+(byte) font_compress::return
+(byte) font_compress::return#1 reg byte x 600.5999999999999
+(byte) font_compress::return#5 reg byte x 2002.0
+(byte()) font_find((byte*) font_find::glyph , (byte*) font_find::font , (byte) font_find::font_size)
+(label) font_find::@1
+(label) font_find::@2
+(label) font_find::@3
+(label) font_find::@4
+(label) font_find::@5
+(label) font_find::@return
+(byte*) font_find::font
+(byte*) font_find::font#1 font zp[2]:7 1000001.0
+(byte*) font_find::font#4 font zp[2]:7 1500000.375
+(byte) font_find::font_size
+(byte) font_find::font_size#0 font_size zp[1]:9 83416.83333333334
+(byte) font_find::found
+(byte) font_find::found#2 reg byte a 1000001.0
+(byte*) font_find::glyph
+(byte*) font_find::glyph#0 glyph zp[2]:13 769307.8461538461
+(byte) font_find::i
+(byte) font_find::i#1 reg byte x 2000002.0
+(byte) font_find::i#2 reg byte x 444444.8888888889
+(byte) font_find::l
+(byte) font_find::l#1 reg byte y 1.50000015E7
+(byte) font_find::l#2 reg byte y 2.0000002E7
+(byte) font_find::return
+(byte) font_find::return#0 reg byte a 2002.0
+(byte) font_find::return#3 reg byte x 333667.3333333334
+(void()) main()
+(label) main::@1
+(label) main::@2
+(label) main::@3
+(label) main::@4
+(label) main::@5
+(label) main::@6
+(label) main::@7
+(byte) main::c
+(byte) main::c#1 c zp[1]:3 420.59999999999997
+(byte) main::c#2 c zp[1]:3 620.8
+(byte) main::c#4 c zp[1]:3 202.0
+(label) main::toD0181
+(byte*) main::toD0181_gfx
+(byte) main::toD0181_return
+(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) FONT_COMPRESSED/(byte) 4&(byte) $f
+(byte*) main::toD0181_screen
+(byte) main::x
+(byte) main::x#1 x zp[1]:4 1501.5
+(byte) main::x#2 x zp[1]:4 500.5
+(byte) main::y
+(byte) main::y#1 y zp[1]:2 151.5
+(byte) main::y#4 y zp[1]:2 133.66666666666669
+(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
+(label) memset::@1
+(label) memset::@2
+(label) memset::@return
+(byte) memset::c
+(byte) memset::c#0 reg byte x 168.66666666666669
+(byte*) memset::dst
+(byte*) memset::dst#1 dst zp[2]:13 2002.0
+(byte*) memset::dst#2 dst zp[2]:13 1334.6666666666667
+(byte*) memset::end
+(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
+(word) memset::num
+(const word) memset::num#0 num = (word) $400
+(void*) memset::return
+(void*) memset::str
+(const void*) memset::str#0 str = (void*)(const byte*) SCREEN
+(void()) show((byte) show::c , (byte) show::x , (byte) show::y , (byte*) show::font_mapping)
+(word~) show::$0 zp[2]:15 15001.5
+(word~) show::$1 zp[2]:15 20002.0
+(byte*~) show::$2 zp[2]:15 10001.0
+(byte~) show::$3 reg byte a 20002.0
+(byte~) show::$5 reg byte x 20002.0
+(byte~) show::$6 reg byte a 20002.0
+(byte~) show::$7 reg byte a 20002.0
+(word~) show::$8 zp[2]:17 20002.0
+(word~) show::$9 zp[2]:15 20002.0
+(label) show::@return
+(byte) show::c
+(byte) show::c#0 c zp[1]:3 2733.666666666667
+(byte*) show::font_mapping
+(byte*) show::ptr
+(byte*) show::ptr#0 ptr zp[2]:15 7143.571428571429
+(byte) show::x
+(byte) show::x#0 reg byte x 1571.7142857142858
+(byte) show::y
+(byte) show::y#0 reg byte a 1001.0
+
+zp[1]:2 [ main::y#4 main::y#1 ]
+zp[1]:3 [ main::c#2 main::c#4 main::c#1 show::c#0 ]
+zp[1]:4 [ main::x#2 main::x#1 ]
+reg byte y [ font_compress::l#2 font_compress::l#1 ]
+reg byte a [ font_compress::found#2 font_compress::found#3 font_compress::found#0 ]
+reg byte x [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ]
+reg byte x [ font_find::return#3 font_find::i#2 font_find::i#1 ]
+reg byte y [ font_find::l#2 font_find::l#1 ]
+reg byte a [ font_find::found#2 ]
+zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ]
+zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_find::font#4 font_find::font#1 ]
+zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_compress::font_size#2 font_compress::font_size#9 font_find::font_size#0 ]
+zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_compress::i#4 font_compress::i#1 ]
+zp[1]:11 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+zp[1]:12 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+zp[2]:13 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 font_compress::next_original#2 font_compress::next_original#1 font_find::glyph#0 memset::dst#2 memset::dst#1 ]
+reg byte y [ font_2x2::b#2 font_2x2::b#1 ]
+reg byte x [ font_2x2::glyph_bit#0 ]
+reg byte x [ memset::c#0 ]
+reg byte x [ show::x#0 ]
+reg byte a [ show::y#0 ]
+zp[2]:15 [ show::$0 show::$9 show::$1 show::$2 show::ptr#0 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
+zp[2]:17 [ show::$8 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
+reg byte a [ show::$3 ]
+reg byte x [ show::$5 ]
+reg byte a [ show::$6 ]
+reg byte a [ show::$7 ]
+reg byte a [ font_find::return#0 ]
+reg byte a [ font_2x2::$1 ]
+reg byte a [ font_2x2::$12 ]
+reg byte y [ font_2x2::$11 ]
+reg byte a [ font_2x2::$15 ]
+reg byte y [ font_2x2::$14 ]
+
+
+FINAL ASSEMBLER
+Score: 122846
+
+  // File Comments
+// Creates a 2x2 font from the system CHARGEN font and compress it by identifying identical chars
+  // Upstart
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+  // Global Constants & labels
+  // Processor Port Register controlling RAM/ROM configuration and the datasette
+  .label PROCPORT = 1
+  // RAM in $A000, $E000 CHAR ROM in $D000
+  .const PROCPORT_RAM_CHARROM = 1
+  // BASIC in $A000, I/O in $D000, KERNEL in $E000
+  .const PROCPORT_BASIC_KERNEL_IO = 7
+  // The address of the CHARGEN character set
+  .label CHARGEN = $d000
+  .label D018 = $d018
+  .label SCREEN = $400
+  .label FONT_ORIGINAL = $2000
+  .label FONT_COMPRESSED = $2800
+  // @begin
+  // [1] phi from @begin to @1 [phi:@begin->@1]
+  // @1
+  // [2] call main 
+  // [3] phi from @1 to @end [phi:@1->@end]
+  // @end
+  // main
+main: {
+    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>FONT_COMPRESSED)/4&$f
+    .label c = 3
+    .label x = 4
+    .label y = 2
+    // asm
+    // asm { sei  }
+    // Create 2x2 font from CHARGEN
+    sei
+    // *PROCPORT = PROCPORT_RAM_CHARROM
+    // [5] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 
+    lda #PROCPORT_RAM_CHARROM
+    sta PROCPORT
+    // font_2x2(CHARGEN, FONT_ORIGINAL)
+    // [6] call font_2x2 
+    // [83] phi from main to font_2x2 [phi:main->font_2x2]
+    jsr font_2x2
+    // main::@6
+    // *PROCPORT = PROCPORT_BASIC_KERNEL_IO
+    // [7] *((const byte*) PROCPORT) ← (const byte) PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2 
+    lda #PROCPORT_BASIC_KERNEL_IO
+    sta PROCPORT
+    // asm
+    // asm { cli  }
+    cli
+    // font_compress(FONT_ORIGINAL, FONT_COMPRESSED, FONT_COMPRESSED_MAP)
+    // [9] call font_compress 
+    // [47] phi from main::@6 to font_compress [phi:main::@6->font_compress]
+    jsr font_compress
+    // [10] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181]
+    // main::toD0181
+    // main::@5
+    // *D018 = toD018(SCREEN, FONT_COMPRESSED)
+    // [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
+    // Show compressed font
+    lda #toD0181_return
+    sta D018
+    // memset(SCREEN, FONT_COMPRESSED_MAP[' '], 0x0400)
+    // [12] (byte) memset::c#0 ← *((const byte*) FONT_COMPRESSED_MAP+(byte) ' ') -- vbuxx=_deref_pbuc1 
+    ldx FONT_COMPRESSED_MAP+' '
+    // [13] call memset 
+  // Clear the screen
+    // [41] phi from main::@5 to memset [phi:main::@5->memset]
+    jsr memset
+    // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+    // [14] phi (byte) main::y#4 = (byte) 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z y
+    // [14] phi (byte) main::c#4 = (byte) 0 [phi:main::@5->main::@1#1] -- vbuz1=vbuc1 
+    sta.z c
+    // [14] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
+    // [14] phi (byte) main::y#4 = (byte) main::y#1 [phi:main::@3->main::@1#0] -- register_copy 
+    // [14] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#1] -- register_copy 
+    // main::@1
+  __b1:
+    // [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+    // [15] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z x
+    // [15] phi (byte) main::c#2 = (byte) main::c#4 [phi:main::@1->main::@2#1] -- register_copy 
+    // [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+    // [15] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@7->main::@2#0] -- register_copy 
+    // [15] phi (byte) main::c#2 = (byte) main::c#1 [phi:main::@7->main::@2#1] -- register_copy 
+    // main::@2
+  __b2:
+    // show(c++, x, y, FONT_COMPRESSED_MAP)
+    // [16] (byte) show::c#0 ← (byte) main::c#2
+    // [17] (byte) show::x#0 ← (byte) main::x#2 -- vbuxx=vbuz1 
+    ldx.z x
+    // [18] (byte) show::y#0 ← (byte) main::y#4 -- vbuaa=vbuz1 
+    lda.z y
+    // [19] call show 
+    jsr show
+    // main::@7
+    // show(c++, x, y, FONT_COMPRESSED_MAP);
+    // [20] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1 
+    inc.z c
+    // for(char x:0..7)
+    // [21] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 
+    inc.z x
+    // [22] if((byte) main::x#1!=(byte) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z x
+    bne __b2
+    // main::@3
+    // for(char y:0..7)
+    // [23] (byte) main::y#1 ← ++ (byte) main::y#4 -- vbuz1=_inc_vbuz1 
+    inc.z y
+    // [24] if((byte) main::y#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
+    cmp.z y
+    bne __b1
+    // main::@4
+  __b4:
+    // (*(SCREEN+999))++;
+    // [25] *((const byte*) SCREEN+(word) $3e7) ← ++ *((const byte*) SCREEN+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
+    inc SCREEN+$3e7
+    jmp __b4
+}
+  // show
+// Show a 2x2 char on the screen at 2x2-position (x, y) using a font compress mapping
+// show(byte zp(3) c, byte register(X) x, byte register(A) y)
+show: {
+    .label __0 = $f
+    .label __1 = $f
+    .label __2 = $f
+    .label c = 3
+    .label ptr = $f
+    .label __8 = $11
+    .label __9 = $f
+    // (unsigned int)y
+    // [26] (word~) show::$0 ← (word)(byte) show::y#0 -- vwuz1=_word_vbuaa 
+    sta.z __0
+    lda #0
+    sta.z __0+1
+    // (unsigned int)y*80
+    // [27] (word~) show::$8 ← (word~) show::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
+    lda.z __0
+    asl
+    sta.z __8
+    lda.z __0+1
+    rol
+    sta.z __8+1
+    asl.z __8
+    rol.z __8+1
+    // [28] (word~) show::$9 ← (word~) show::$8 + (word~) show::$0 -- vwuz1=vwuz2_plus_vwuz1 
+    lda.z __9
+    clc
+    adc.z __8
+    sta.z __9
+    lda.z __9+1
+    adc.z __8+1
+    sta.z __9+1
+    // [29] (word~) show::$1 ← (word~) show::$9 << (byte) 4 -- vwuz1=vwuz1_rol_4 
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    asl.z __1
+    rol.z __1+1
+    // SCREEN + (unsigned int)y*80
+    // [30] (byte*~) show::$2 ← (const byte*) SCREEN + (word~) show::$1 -- pbuz1=pbuc1_plus_vwuz1 
+    clc
+    lda.z __2
+    adc #<SCREEN
+    sta.z __2
+    lda.z __2+1
+    adc #>SCREEN
+    sta.z __2+1
+    // x*2
+    // [31] (byte~) show::$3 ← (byte) show::x#0 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    txa
+    asl
+    // ptr = SCREEN + (unsigned int)y*80 + x*2
+    // [32] (byte*) show::ptr#0 ← (byte*~) show::$2 + (byte~) show::$3 -- pbuz1=pbuz1_plus_vbuaa 
+    clc
+    adc.z ptr
+    sta.z ptr
+    bcc !+
+    inc.z ptr+1
+  !:
+    // ptr[0] = font_mapping[c]
+    // [33] *((byte*) show::ptr#0) ← *((const byte*) FONT_COMPRESSED_MAP + (byte) show::c#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
+    ldy.z c
+    lda FONT_COMPRESSED_MAP,y
+    ldy #0
+    sta (ptr),y
+    // c+0x40
+    // [34] (byte~) show::$5 ← (byte) show::c#0 -- vbuxx=vbuz1 
+    ldx.z c
+    // ptr[1] = font_mapping[c+0x40]
+    // [35] *((byte*) show::ptr#0 + (byte) 1) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $40 + (byte~) show::$5) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx 
+    lda FONT_COMPRESSED_MAP+$40,x
+    ldy #1
+    sta (ptr),y
+    // c+0x80
+    // [36] (byte~) show::$6 ← (byte) show::c#0 -- vbuaa=vbuz1 
+    txa
+    // ptr[40] = font_mapping[c+0x80]
+    // [37] *((byte*) show::ptr#0 + (byte) $28) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $80 + (byte~) show::$6) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa 
+    tay
+    lda FONT_COMPRESSED_MAP+$80,y
+    ldy #$28
+    sta (ptr),y
+    // c+0xc0
+    // [38] (byte~) show::$7 ← (byte) show::c#0 -- vbuaa=vbuz1 
+    txa
+    // ptr[41] = font_mapping[c+0xc0]
+    // [39] *((byte*) show::ptr#0 + (byte) $29) ← *((const byte*) FONT_COMPRESSED_MAP+(byte) $c0 + (byte~) show::$7) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa 
+    tay
+    lda FONT_COMPRESSED_MAP+$c0,y
+    ldy #$29
+    sta (ptr),y
+    // show::@return
+    // }
+    // [40] return 
+    rts
+}
+  // memset
+// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
+// memset(byte register(X) c)
+memset: {
+    .label str = SCREEN
+    .const num = $400
+    .label end = str+num
+    .label dst = $d
+    // [42] phi from memset to memset::@1 [phi:memset->memset::@1]
+    // [42] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
+    lda #<str
+    sta.z dst
+    lda #>str
+    sta.z dst+1
+    // memset::@1
+  __b1:
+    // for(char* dst = str; dst!=end; dst++)
+    // [43] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
+    lda.z dst+1
+    cmp #>end
+    bne __b2
+    lda.z dst
+    cmp #<end
+    bne __b2
+    // memset::@return
+    // }
+    // [44] return 
+    rts
+    // memset::@2
+  __b2:
+    // *dst = c
+    // [45] *((byte*) memset::dst#2) ← (byte) memset::c#0 -- _deref_pbuz1=vbuxx 
+    txa
+    ldy #0
+    sta (dst),y
+    // for(char* dst = str; dst!=end; dst++)
+    // [46] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
+    inc.z dst
+    bne !+
+    inc.z dst+1
+  !:
+    // [42] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
+    // [42] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy 
+    jmp __b1
+}
+  // font_compress
+// Compress a font finding identical characters
+// The compressed font is put into font_compressed and the compress_mapping is updated
+// so that compress_mapping[c] points to the char in font_compressed that is identical to char c in font_original
+// Returns the size of the compressed font (in chars)
+font_compress: {
+    .label next_original = $d
+    .label i = $a
+    .label next_compressed = 5
+    .label font_size = 9
+    // [48] phi from font_compress to font_compress::@1 [phi:font_compress->font_compress::@1]
+    // [48] phi (byte*) font_compress::next_compressed#4 = (const byte*) FONT_COMPRESSED [phi:font_compress->font_compress::@1#0] -- pbuz1=pbuc1 
+    lda #<FONT_COMPRESSED
+    sta.z next_compressed
+    lda #>FONT_COMPRESSED
+    sta.z next_compressed+1
+    // [48] phi (byte) font_compress::i#4 = (byte) 0 [phi:font_compress->font_compress::@1#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z i
+    // [48] phi (byte) font_compress::font_size#2 = (byte) 0 [phi:font_compress->font_compress::@1#2] -- vbuz1=vbuc1 
+    sta.z font_size
+    // [48] phi (byte*) font_compress::next_original#2 = (const byte*) FONT_ORIGINAL [phi:font_compress->font_compress::@1#3] -- pbuz1=pbuc1 
+    lda #<FONT_ORIGINAL
+    sta.z next_original
+    lda #>FONT_ORIGINAL
+    sta.z next_original+1
+    // font_compress::@1
+  __b1:
+    // font_find(next_original, font_compressed, font_size)
+    // [49] (byte*) font_find::glyph#0 ← (byte*) font_compress::next_original#2
+    // [50] (byte) font_find::font_size#0 ← (byte) font_compress::font_size#2
+    // [51] call font_find 
+    // [70] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find]
+    jsr font_find
+    // font_find(next_original, font_compressed, font_size)
+    // [52] (byte) font_find::return#0 ← (byte) font_find::return#3 -- vbuaa=vbuxx 
+    txa
+    // font_compress::@5
+    // found = font_find(next_original, font_compressed, font_size)
+    // [53] (byte) font_compress::found#0 ← (byte) font_find::return#0
+    // if(found==0xff)
+    // [54] if((byte) font_compress::found#0!=(byte) $ff) goto font_compress::@7 -- vbuaa_neq_vbuc1_then_la1 
+    cmp #$ff
+    bne __b7
+    // [55] phi from font_compress::@5 to font_compress::@3 [phi:font_compress::@5->font_compress::@3]
+    // [55] phi (byte) font_compress::l#2 = (byte) 0 [phi:font_compress::@5->font_compress::@3#0] -- vbuyy=vbuc1 
+    ldy #0
+  // Glyph not found - create it
+    // [55] phi from font_compress::@3 to font_compress::@3 [phi:font_compress::@3->font_compress::@3]
+    // [55] phi (byte) font_compress::l#2 = (byte) font_compress::l#1 [phi:font_compress::@3->font_compress::@3#0] -- register_copy 
+    // font_compress::@3
+  __b3:
+    // next_compressed[l] = next_original[l]
+    // [56] *((byte*) font_compress::next_compressed#4 + (byte) font_compress::l#2) ← *((byte*) font_compress::next_original#2 + (byte) font_compress::l#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy 
+    lda (next_original),y
+    sta (next_compressed),y
+    // for(char l:0..7)
+    // [57] (byte) font_compress::l#1 ← ++ (byte) font_compress::l#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [58] if((byte) font_compress::l#1!=(byte) 8) goto font_compress::@3 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #8
+    bne __b3
+    // font_compress::@4
+    // next_compressed += 8
+    // [59] (byte*) font_compress::next_compressed#1 ← (byte*) font_compress::next_compressed#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_compressed
+    sta.z next_compressed
+    bcc !+
+    inc.z next_compressed+1
+  !:
+    // font_size++;
+    // [60] (byte) font_compress::font_size#1 ← ++ (byte) font_compress::font_size#2 -- vbuxx=_inc_vbuz1 
+    ldx.z font_size
+    inx
+    // [61] (byte) font_compress::found#3 ← (byte) font_compress::font_size#2 -- vbuaa=vbuz1 
+    lda.z font_size
+    // [62] phi from font_compress::@4 font_compress::@7 to font_compress::@2 [phi:font_compress::@4/font_compress::@7->font_compress::@2]
+    // [62] phi (byte*) font_compress::next_compressed#7 = (byte*) font_compress::next_compressed#1 [phi:font_compress::@4/font_compress::@7->font_compress::@2#0] -- register_copy 
+    // [62] phi (byte) font_compress::return#1 = (byte) font_compress::font_size#1 [phi:font_compress::@4/font_compress::@7->font_compress::@2#1] -- register_copy 
+    // [62] phi (byte) font_compress::found#2 = (byte) font_compress::found#3 [phi:font_compress::@4/font_compress::@7->font_compress::@2#2] -- register_copy 
+    // font_compress::@2
+  __b2:
+    // compress_mapping[i] = found
+    // [63] *((const byte*) FONT_COMPRESSED_MAP + (byte) font_compress::i#4) ← (byte) font_compress::found#2 -- pbuc1_derefidx_vbuz1=vbuaa 
+    ldy.z i
+    sta FONT_COMPRESSED_MAP,y
+    // next_original += 8
+    // [64] (byte*) font_compress::next_original#1 ← (byte*) font_compress::next_original#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // for(char i: 0..0xff)
+    // [65] (byte) font_compress::i#1 ← ++ (byte) font_compress::i#4 -- vbuz1=_inc_vbuz1 
+    inc.z i
+    // [66] if((byte) font_compress::i#1!=(byte) 0) goto font_compress::@6 -- vbuz1_neq_0_then_la1 
+    lda.z i
+    cmp #0
+    bne __b6
+    // font_compress::@return
+    // }
+    // [67] return 
+    rts
+    // font_compress::@6
+  __b6:
+    // [68] (byte) font_compress::font_size#9 ← (byte) font_compress::return#1 -- vbuz1=vbuxx 
+    stx.z font_size
+    // [48] phi from font_compress::@6 to font_compress::@1 [phi:font_compress::@6->font_compress::@1]
+    // [48] phi (byte*) font_compress::next_compressed#4 = (byte*) font_compress::next_compressed#7 [phi:font_compress::@6->font_compress::@1#0] -- register_copy 
+    // [48] phi (byte) font_compress::i#4 = (byte) font_compress::i#1 [phi:font_compress::@6->font_compress::@1#1] -- register_copy 
+    // [48] phi (byte) font_compress::font_size#2 = (byte) font_compress::font_size#9 [phi:font_compress::@6->font_compress::@1#2] -- register_copy 
+    // [48] phi (byte*) font_compress::next_original#2 = (byte*) font_compress::next_original#1 [phi:font_compress::@6->font_compress::@1#3] -- register_copy 
+    jmp __b1
+    // font_compress::@7
+  __b7:
+    // [69] (byte) font_compress::return#5 ← (byte) font_compress::font_size#2 -- vbuxx=vbuz1 
+    ldx.z font_size
+    jmp __b2
+}
+  // font_find
+// Look for a glyph within a font
+// Only looks at the first font_size glyphs
+// Returns the index of the glyph within the font. Returns 0xff if the glyph is not found.
+// font_find(byte* zp($d) glyph, byte* zp(7) font, byte zp(9) font_size)
+font_find: {
+    .label glyph = $d
+    .label font_size = 9
+    .label font = 7
+    // [71] phi from font_find to font_find::@1 [phi:font_find->font_find::@1]
+    // [71] phi (byte*) font_find::font#4 = (const byte*) FONT_COMPRESSED [phi:font_find->font_find::@1#0] -- pbuz1=pbuc1 
+    lda #<FONT_COMPRESSED
+    sta.z font
+    lda #>FONT_COMPRESSED
+    sta.z font+1
+    // [71] phi (byte) font_find::i#2 = (byte) 0 [phi:font_find->font_find::@1#1] -- vbuxx=vbuc1 
+    ldx #0
+    // font_find::@1
+  __b1:
+    // for(char i=0;i<font_size;i++)
+    // [72] if((byte) font_find::i#2<(byte) font_find::font_size#0) goto font_find::@2 -- vbuxx_lt_vbuz1_then_la1 
+    cpx.z font_size
+    bcc b1
+    // [73] phi from font_find::@1 to font_find::@return [phi:font_find::@1->font_find::@return]
+    // [73] phi (byte) font_find::return#3 = (byte) $ff [phi:font_find::@1->font_find::@return#0] -- vbuxx=vbuc1 
+    ldx #$ff
+    // font_find::@return
+    // }
+    // [74] return 
+    rts
+    // [75] phi from font_find::@1 to font_find::@2 [phi:font_find::@1->font_find::@2]
+  b1:
+    // [75] phi (byte) font_find::l#2 = (byte) 0 [phi:font_find::@1->font_find::@2#0] -- vbuyy=vbuc1 
+    ldy #0
+    // [75] phi from font_find::@3 to font_find::@2 [phi:font_find::@3->font_find::@2]
+    // [75] phi (byte) font_find::l#2 = (byte) font_find::l#1 [phi:font_find::@3->font_find::@2#0] -- register_copy 
+    // font_find::@2
+  __b2:
+    // if(glyph[l]!=font[l])
+    // [76] if(*((byte*) font_find::glyph#0 + (byte) font_find::l#2)==*((byte*) font_find::font#4 + (byte) font_find::l#2)) goto font_find::@3 -- pbuz1_derefidx_vbuyy_eq_pbuz2_derefidx_vbuyy_then_la1 
+    lda (glyph),y
+    cmp (font),y
+    beq __b3
+    // [79] phi from font_find::@2 to font_find::@4 [phi:font_find::@2->font_find::@4]
+    // [79] phi (byte) font_find::found#2 = (byte) 0 [phi:font_find::@2->font_find::@4#0] -- vbuaa=vbuc1 
+    lda #0
+    jmp __b4
+    // font_find::@3
+  __b3:
+    // for(char l:0..7)
+    // [77] (byte) font_find::l#1 ← ++ (byte) font_find::l#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [78] if((byte) font_find::l#1!=(byte) 8) goto font_find::@2 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #8
+    bne __b2
+    // [79] phi from font_find::@3 to font_find::@4 [phi:font_find::@3->font_find::@4]
+    // [79] phi (byte) font_find::found#2 = (byte) 1 [phi:font_find::@3->font_find::@4#0] -- vbuaa=vbuc1 
+    lda #1
+    // font_find::@4
+  __b4:
+    // if(found)
+    // [80] if((byte) 0==(byte) font_find::found#2) goto font_find::@5 -- vbuc1_eq_vbuaa_then_la1 
+    cmp #0
+    beq __b5
+    // [73] phi from font_find::@4 to font_find::@return [phi:font_find::@4->font_find::@return]
+    // [73] phi (byte) font_find::return#3 = (byte) font_find::i#2 [phi:font_find::@4->font_find::@return#0] -- register_copy 
+    rts
+    // font_find::@5
+  __b5:
+    // font += 8
+    // [81] (byte*) font_find::font#1 ← (byte*) font_find::font#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z font
+    sta.z font
+    bcc !+
+    inc.z font+1
+  !:
+    // for(char i=0;i<font_size;i++)
+    // [82] (byte) font_find::i#1 ← ++ (byte) font_find::i#2 -- vbuxx=_inc_vbuxx 
+    inx
+    // [71] phi from font_find::@5 to font_find::@1 [phi:font_find::@5->font_find::@1]
+    // [71] phi (byte*) font_find::font#4 = (byte*) font_find::font#1 [phi:font_find::@5->font_find::@1#0] -- register_copy 
+    // [71] phi (byte) font_find::i#2 = (byte) font_find::i#1 [phi:font_find::@5->font_find::@1#1] -- register_copy 
+    jmp __b1
+}
+  // font_2x2
+// Create a 2x2-font by doubling all pixels of the 64 first chars
+font_2x2: {
+    .label __5 = $d
+    .label __7 = $d
+    .label next_2x2_left = 5
+    .label next_2x2_right = $11
+    .label glyph_bits = $c
+    .label glyph_bits_2x2 = $d
+    .label l2 = $b
+    .label l = $a
+    .label next_2x2_left_1 = $f
+    .label next_2x2 = 5
+    .label next_original = 7
+    .label c = 9
+    // [84] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1]
+    // [84] phi (byte) font_2x2::c#11 = (byte) 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta.z c
+    // [84] phi (byte*) font_2x2::next_original#4 = (const byte*) CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1 
+    lda #<CHARGEN
+    sta.z next_original
+    lda #>CHARGEN
+    sta.z next_original+1
+    // [84] phi (byte*) font_2x2::next_2x2_left#0 = (const byte*) FONT_ORIGINAL [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1 
+    lda #<FONT_ORIGINAL
+    sta.z next_2x2_left
+    lda #>FONT_ORIGINAL
+    sta.z next_2x2_left+1
+    // [84] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1]
+    // [84] phi (byte) font_2x2::c#11 = (byte) font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy 
+    // [84] phi (byte*) font_2x2::next_original#4 = (byte*) font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy 
+    // [84] phi (byte*) font_2x2::next_2x2_left#0 = (byte*) font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy 
+    // font_2x2::@1
+  __b1:
+    // next_2x2_right = next_2x2 + 0x40*8
+    // [85] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$40*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$40*8
+    sta.z next_2x2_right+1
+    // [86] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 -- pbuz1=pbuz2 
+    lda.z next_2x2_left
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    sta.z next_2x2_left_1+1
+    // [87] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2]
+    // [87] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy 
+    // [87] phi (byte) font_2x2::l2#8 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l2
+    // [87] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy 
+    // [87] phi (byte) font_2x2::l#2 = (byte) 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1 
+    sta.z l
+    // [87] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2]
+    // [87] phi (byte*) font_2x2::next_2x2_right#7 = (byte*) font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy 
+    // [87] phi (byte) font_2x2::l2#8 = (byte) font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy 
+    // [87] phi (byte*) font_2x2::next_2x2_left#7 = (byte*) font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy 
+    // [87] phi (byte) font_2x2::l#2 = (byte) font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy 
+    // font_2x2::@2
+  __b2:
+    // glyph_bits = next_original[l]
+    // [88] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) -- vbuz1=pbuz2_derefidx_vbuz3 
+    ldy.z l
+    lda (next_original),y
+    sta.z glyph_bits
+    // [89] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3]
+    // [89] phi (byte) font_2x2::b#2 = (byte) 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1 
+    ldy #0
+    // [89] phi (word) font_2x2::glyph_bits_2x2#3 = (word) 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1 
+    tya
+    sta.z glyph_bits_2x2
+    sta.z glyph_bits_2x2+1
+    // [89] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy 
+    // [89] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3]
+    // [89] phi (byte) font_2x2::b#2 = (byte) font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy 
+    // [89] phi (word) font_2x2::glyph_bits_2x2#3 = (word) font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy 
+    // [89] phi (byte) font_2x2::glyph_bits#2 = (byte) font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy 
+    // font_2x2::@3
+  __b3:
+    // glyph_bits&0x80
+    // [90] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 
+    lda #$80
+    and.z glyph_bits
+    // (glyph_bits&0x80)?1uc:0uc
+    // [91] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 -- vbuc1_neq_vbuaa_then_la1 
+    cmp #0
+    bne __b4
+    // [93] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5]
+    // [93] phi (byte) font_2x2::glyph_bit#0 = (byte) 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1 
+    ldx #0
+    jmp __b5
+    // [92] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4]
+    // font_2x2::@4
+  __b4:
+    // (glyph_bits&0x80)?1uc:0uc
+    // [93] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5]
+    // [93] phi (byte) font_2x2::glyph_bit#0 = (byte) 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1 
+    ldx #1
+    // font_2x2::@5
+  __b5:
+    // glyph_bits_2x2<<1
+    // [94] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
+    asl.z __5
+    rol.z __5+1
+    // glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit
+    // [95] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx 
+    txa
+    ora.z glyph_bits_2x2
+    sta.z glyph_bits_2x2
+    // glyph_bits_2x2<<1
+    // [96] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 -- vwuz1=vwuz1_rol_1 
+    asl.z __7
+    rol.z __7+1
+    // glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit
+    // [97] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx 
+    txa
+    ora.z glyph_bits_2x2
+    sta.z glyph_bits_2x2
+    // glyph_bits <<= 1
+    // [98] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 
+    // Move to next bit
+    asl.z glyph_bits
+    // for(char b: 0..7)
+    // [99] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [100] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #8
+    bne __b3
+    // font_2x2::@6
+    // >glyph_bits_2x2
+    // [101] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1 
+    lda.z glyph_bits_2x2+1
+    // next_2x2_left[l2] = >glyph_bits_2x2
+    // [102] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // Put the generated 2x2-line into the 2x2-font twice
+    ldy.z l2
+    sta (next_2x2_left_1),y
+    // l2+1
+    // [103] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 
+    iny
+    // next_2x2_left[l2+1] = >glyph_bits_2x2
+    // [104] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa 
+    sta (next_2x2_left_1),y
+    // <glyph_bits_2x2
+    // [105] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1 
+    lda.z glyph_bits_2x2
+    // next_2x2_right[l2] = <glyph_bits_2x2
+    // [106] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
+    ldy.z l2
+    sta (next_2x2_right),y
+    // l2+1
+    // [107] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 -- vbuyy=vbuz1_plus_1 
+    iny
+    // next_2x2_right[l2+1] = <glyph_bits_2x2
+    // [108] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 -- pbuz1_derefidx_vbuyy=vbuaa 
+    sta (next_2x2_right),y
+    // l2 += 2
+    // [109] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 -- vbuz1=vbuz1_plus_2 
+    lda.z l2
+    clc
+    adc #2
+    sta.z l2
+    // if(l2==8)
+    // [110] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l2
+    bne __b8
+    // font_2x2::@7
+    // next_2x2_left = next_2x2 + 0x80*8
+    // [111] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$80*8
+    sta.z next_2x2_left_1
+    lda.z next_2x2_left+1
+    adc #>$80*8
+    sta.z next_2x2_left_1+1
+    // next_2x2_right = next_2x2 + 0xc0*8
+    // [112] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 -- pbuz1=pbuz2_plus_vwuc1 
+    lda.z next_2x2_left
+    clc
+    adc #<$c0*8
+    sta.z next_2x2_right
+    lda.z next_2x2_left+1
+    adc #>$c0*8
+    sta.z next_2x2_right+1
+    // [113] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8]
+    // [113] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy 
+    // [113] phi (byte) font_2x2::l2#9 = (byte) 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1 
+    lda #0
+    sta.z l2
+    // [113] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy 
+    // [113] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8]
+    // [113] phi (byte*) font_2x2::next_2x2_right#8 = (byte*) font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy 
+    // [113] phi (byte) font_2x2::l2#9 = (byte) font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy 
+    // [113] phi (byte*) font_2x2::next_2x2_left#8 = (byte*) font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy 
+    // font_2x2::@8
+  __b8:
+    // for(char l: 0..7)
+    // [114] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 -- vbuz1=_inc_vbuz1 
+    inc.z l
+    // [115] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1 
+    lda #8
+    cmp.z l
+    bne __b2
+    // font_2x2::@9
+    // next_2x2 += 8
+    // [116] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    clc
+    adc.z next_2x2
+    sta.z next_2x2
+    bcc !+
+    inc.z next_2x2+1
+  !:
+    // next_original += 8
+    // [117] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
+    lda #8
+    clc
+    adc.z next_original
+    sta.z next_original
+    bcc !+
+    inc.z next_original+1
+  !:
+    // for(char c: 0..0x3f)
+    // [118] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 -- vbuz1=_inc_vbuz1 
+    inc.z c
+    // [119] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1 
+    lda #$40
+    cmp.z c
+    beq !__b1+
+    jmp __b1
+  !__b1:
+    // font_2x2::@return
+    // }
+    // [120] return 
+    rts
+}
+  // File Data
+  .align $100
+  FONT_COMPRESSED_MAP: .fill $100, 0
+
diff --git a/src/test/ref/examples/font-2x2/font-2x2.sym b/src/test/ref/examples/font-2x2/font-2x2.sym
new file mode 100644
index 000000000..af664e48d
--- /dev/null
+++ b/src/test/ref/examples/font-2x2/font-2x2.sym
@@ -0,0 +1,225 @@
+(label) @1
+(label) @begin
+(label) @end
+(const byte*) CHARGEN = (byte*) 53248
+(const byte*) D018 = (byte*) 53272
+(const byte*) FONT_COMPRESSED = (byte*) 10240
+(const byte*) FONT_COMPRESSED_MAP[(number) $100]  = { fill( $100, 0) }
+(const byte*) FONT_ORIGINAL = (byte*) 8192
+(const byte*) PROCPORT = (byte*) 1
+(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7
+(const byte) PROCPORT_RAM_CHARROM = (byte) 1
+(const byte*) SCREEN = (byte*) 1024
+(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
+(byte~) font_2x2::$1 reg byte a 200002.0
+(byte~) font_2x2::$11 reg byte y 20002.0
+(byte~) font_2x2::$12 reg byte a 10001.0
+(byte~) font_2x2::$14 reg byte y 20002.0
+(byte~) font_2x2::$15 reg byte a 10001.0
+(word~) font_2x2::$5 zp[2]:13 200002.0
+(word~) font_2x2::$7 zp[2]:13 200002.0
+(label) font_2x2::@1
+(label) font_2x2::@2
+(label) font_2x2::@3
+(label) font_2x2::@4
+(label) font_2x2::@5
+(label) font_2x2::@6
+(label) font_2x2::@7
+(label) font_2x2::@8
+(label) font_2x2::@9
+(label) font_2x2::@return
+(byte) font_2x2::b
+(byte) font_2x2::b#1 reg byte y 150001.5
+(byte) font_2x2::b#2 reg byte y 20000.2
+(byte) font_2x2::c
+(byte) font_2x2::c#1 c zp[1]:9 1501.5
+(byte) font_2x2::c#11 c zp[1]:9 58.88235294117647
+(byte*) font_2x2::font_2x2
+(byte*) font_2x2::font_original
+(byte) font_2x2::glyph_bit
+(byte) font_2x2::glyph_bit#0 reg byte x 50000.5
+(byte) font_2x2::glyph_bits
+(byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:12 20002.0
+(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:12 66667.33333333333
+(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:12 34444.88888888889
+(word) font_2x2::glyph_bits_2x2
+(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:13 200002.0
+(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:13 27500.5
+(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:13 40000.4
+(byte) font_2x2::l
+(byte) font_2x2::l#1 l zp[1]:10 15001.5
+(byte) font_2x2::l#2 l zp[1]:10 1111.2222222222222
+(byte) font_2x2::l2
+(byte) font_2x2::l2#1 l2 zp[1]:11 15001.5
+(byte) font_2x2::l2#8 l2 zp[1]:11 2727.5454545454545
+(byte) font_2x2::l2#9 l2 zp[1]:11 6667.333333333333
+(byte*) font_2x2::next_2x2
+(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:5 500.5
+(byte*) font_2x2::next_2x2_left
+(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:5 750.1875
+(byte*) font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:15 10001.0
+(byte*) font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:15 2002.0
+(byte*) font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:15 1708.5416666666665
+(byte*) font_2x2::next_2x2_left#8 next_2x2_left_1 zp[2]:15 10001.0
+(byte*) font_2x2::next_2x2_right
+(byte*) font_2x2::next_2x2_right#0 next_2x2_right zp[2]:17 1001.0
+(byte*) font_2x2::next_2x2_right#1 next_2x2_right zp[2]:17 20002.0
+(byte*) font_2x2::next_2x2_right#7 next_2x2_right zp[2]:17 1708.5416666666665
+(byte*) font_2x2::next_2x2_right#8 next_2x2_right zp[2]:17 10001.0
+(byte*) font_2x2::next_original
+(byte*) font_2x2::next_original#1 next_original zp[2]:7 667.3333333333334
+(byte*) font_2x2::next_original#4 next_original zp[2]:7 363.7272727272727
+(byte()) font_compress((byte*) font_compress::font_original , (byte*) font_compress::font_compressed , (byte*) font_compress::compress_mapping)
+(label) font_compress::@1
+(label) font_compress::@2
+(label) font_compress::@3
+(label) font_compress::@4
+(label) font_compress::@5
+(label) font_compress::@6
+(label) font_compress::@7
+(label) font_compress::@return
+(byte*) font_compress::compress_mapping
+(byte*) font_compress::font_compressed
+(byte*) font_compress::font_original
+(byte) font_compress::font_size
+(byte) font_compress::font_size#1 reg byte x 1001.0
+(byte) font_compress::font_size#2 font_size zp[1]:9 385.0
+(byte) font_compress::font_size#9 font_size zp[1]:9 2002.0
+(byte) font_compress::found
+(byte) font_compress::found#0 reg byte a 1001.0
+(byte) font_compress::found#2 reg byte a 3003.0
+(byte) font_compress::found#3 reg byte a 2002.0
+(byte) font_compress::i
+(byte) font_compress::i#1 i zp[1]:10 1001.0
+(byte) font_compress::i#4 i zp[1]:10 166.83333333333334
+(byte) font_compress::l
+(byte) font_compress::l#1 reg byte y 15001.5
+(byte) font_compress::l#2 reg byte y 20002.0
+(byte*) font_compress::next_compressed
+(byte*) font_compress::next_compressed#1 next_compressed zp[2]:5 667.3333333333334
+(byte*) font_compress::next_compressed#4 next_compressed zp[2]:5 1083.6666666666665
+(byte*) font_compress::next_compressed#7 next_compressed zp[2]:5 500.5
+(byte*) font_compress::next_original
+(byte*) font_compress::next_original#1 next_original zp[2]:13 500.5
+(byte*) font_compress::next_original#2 next_original zp[2]:13 764.9411764705882
+(byte) font_compress::return
+(byte) font_compress::return#1 reg byte x 600.5999999999999
+(byte) font_compress::return#5 reg byte x 2002.0
+(byte()) font_find((byte*) font_find::glyph , (byte*) font_find::font , (byte) font_find::font_size)
+(label) font_find::@1
+(label) font_find::@2
+(label) font_find::@3
+(label) font_find::@4
+(label) font_find::@5
+(label) font_find::@return
+(byte*) font_find::font
+(byte*) font_find::font#1 font zp[2]:7 1000001.0
+(byte*) font_find::font#4 font zp[2]:7 1500000.375
+(byte) font_find::font_size
+(byte) font_find::font_size#0 font_size zp[1]:9 83416.83333333334
+(byte) font_find::found
+(byte) font_find::found#2 reg byte a 1000001.0
+(byte*) font_find::glyph
+(byte*) font_find::glyph#0 glyph zp[2]:13 769307.8461538461
+(byte) font_find::i
+(byte) font_find::i#1 reg byte x 2000002.0
+(byte) font_find::i#2 reg byte x 444444.8888888889
+(byte) font_find::l
+(byte) font_find::l#1 reg byte y 1.50000015E7
+(byte) font_find::l#2 reg byte y 2.0000002E7
+(byte) font_find::return
+(byte) font_find::return#0 reg byte a 2002.0
+(byte) font_find::return#3 reg byte x 333667.3333333334
+(void()) main()
+(label) main::@1
+(label) main::@2
+(label) main::@3
+(label) main::@4
+(label) main::@5
+(label) main::@6
+(label) main::@7
+(byte) main::c
+(byte) main::c#1 c zp[1]:3 420.59999999999997
+(byte) main::c#2 c zp[1]:3 620.8
+(byte) main::c#4 c zp[1]:3 202.0
+(label) main::toD0181
+(byte*) main::toD0181_gfx
+(byte) main::toD0181_return
+(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) FONT_COMPRESSED/(byte) 4&(byte) $f
+(byte*) main::toD0181_screen
+(byte) main::x
+(byte) main::x#1 x zp[1]:4 1501.5
+(byte) main::x#2 x zp[1]:4 500.5
+(byte) main::y
+(byte) main::y#1 y zp[1]:2 151.5
+(byte) main::y#4 y zp[1]:2 133.66666666666669
+(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
+(label) memset::@1
+(label) memset::@2
+(label) memset::@return
+(byte) memset::c
+(byte) memset::c#0 reg byte x 168.66666666666669
+(byte*) memset::dst
+(byte*) memset::dst#1 dst zp[2]:13 2002.0
+(byte*) memset::dst#2 dst zp[2]:13 1334.6666666666667
+(byte*) memset::end
+(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
+(word) memset::num
+(const word) memset::num#0 num = (word) $400
+(void*) memset::return
+(void*) memset::str
+(const void*) memset::str#0 str = (void*)(const byte*) SCREEN
+(void()) show((byte) show::c , (byte) show::x , (byte) show::y , (byte*) show::font_mapping)
+(word~) show::$0 zp[2]:15 15001.5
+(word~) show::$1 zp[2]:15 20002.0
+(byte*~) show::$2 zp[2]:15 10001.0
+(byte~) show::$3 reg byte a 20002.0
+(byte~) show::$5 reg byte x 20002.0
+(byte~) show::$6 reg byte a 20002.0
+(byte~) show::$7 reg byte a 20002.0
+(word~) show::$8 zp[2]:17 20002.0
+(word~) show::$9 zp[2]:15 20002.0
+(label) show::@return
+(byte) show::c
+(byte) show::c#0 c zp[1]:3 2733.666666666667
+(byte*) show::font_mapping
+(byte*) show::ptr
+(byte*) show::ptr#0 ptr zp[2]:15 7143.571428571429
+(byte) show::x
+(byte) show::x#0 reg byte x 1571.7142857142858
+(byte) show::y
+(byte) show::y#0 reg byte a 1001.0
+
+zp[1]:2 [ main::y#4 main::y#1 ]
+zp[1]:3 [ main::c#2 main::c#4 main::c#1 show::c#0 ]
+zp[1]:4 [ main::x#2 main::x#1 ]
+reg byte y [ font_compress::l#2 font_compress::l#1 ]
+reg byte a [ font_compress::found#2 font_compress::found#3 font_compress::found#0 ]
+reg byte x [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ]
+reg byte x [ font_find::return#3 font_find::i#2 font_find::i#1 ]
+reg byte y [ font_find::l#2 font_find::l#1 ]
+reg byte a [ font_find::found#2 ]
+zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ]
+zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_find::font#4 font_find::font#1 ]
+zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_compress::font_size#2 font_compress::font_size#9 font_find::font_size#0 ]
+zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_compress::i#4 font_compress::i#1 ]
+zp[1]:11 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
+zp[1]:12 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
+zp[2]:13 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 font_compress::next_original#2 font_compress::next_original#1 font_find::glyph#0 memset::dst#2 memset::dst#1 ]
+reg byte y [ font_2x2::b#2 font_2x2::b#1 ]
+reg byte x [ font_2x2::glyph_bit#0 ]
+reg byte x [ memset::c#0 ]
+reg byte x [ show::x#0 ]
+reg byte a [ show::y#0 ]
+zp[2]:15 [ show::$0 show::$9 show::$1 show::$2 show::ptr#0 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
+zp[2]:17 [ show::$8 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
+reg byte a [ show::$3 ]
+reg byte x [ show::$5 ]
+reg byte a [ show::$6 ]
+reg byte a [ show::$7 ]
+reg byte a [ font_find::return#0 ]
+reg byte a [ font_2x2::$1 ]
+reg byte a [ font_2x2::$12 ]
+reg byte y [ font_2x2::$11 ]
+reg byte a [ font_2x2::$15 ]
+reg byte y [ font_2x2::$14 ]