diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
index 3b6f07013..ebdde9e38 100644
--- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
+++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
@@ -103,7 +103,7 @@ public class TestPrograms {
    }
 
    @Test
-   public void testPlasma2() throws IOException, URISyntaxException {
+   public void testPlasmaUnroll() throws IOException, URISyntaxException {
       compileAndCompare("examples/plasma/plasma-unroll");
    }
 
diff --git a/src/test/ref/examples/plasma/plasma-unroll.asm b/src/test/ref/examples/plasma/plasma-unroll.asm
index d0b3f619a..0f05b7a92 100644
--- a/src/test/ref/examples/plasma/plasma-unroll.asm
+++ b/src/test/ref/examples/plasma/plasma-unroll.asm
@@ -1,5 +1,6 @@
 // A KickC version of the plasma routine from the CC65 samples
-// This version has an unrolled inner loop to reach ~50FPS
+// This version has an unrolled inner loop to reach 50+FPS
+// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
 // (w)2001 by groepaz/hitmen
 // Cleanup and porting to CC65 by Ullrich von Bassewitz.
 // Ported to KickC by Jesper Gravgaard.
@@ -70,6 +71,7 @@ main: {
 doplasma: {
     .label c1a = 8
     .label c1b = 9
+    .label yval = $d
     .label i = $a
     .label c2a = 8
     .label c2b = 9
@@ -78,35 +80,35 @@ doplasma: {
     sta c1a
     lda c1B
     sta c1b
+    lda #0
+    sta i
+    tax
+  // Calculate ybuff as a bunch of differences
+  b1:
     ldy c1a
     lda SINTABLE,y
     ldy c1b
     clc
     adc SINTABLE,y
-    sta ybuf
-    lda #1
-    sta i
-  // Calculate ybuff as a bunch of differences
-  b1:
+    sta yval
+    txa
+    eor #$ff
+    sec
+    adc yval
+    ldy i
+    sta ybuf,y
     lax c1a
     axs #-[4]
     stx c1a
     lax c1b
     axs #-[9]
     stx c1b
-    ldy c1a
-    lda SINTABLE,y
-    ldy c1b
-    clc
-    adc SINTABLE,y
-    ldy i
-    sec
-    sbc ybuf+-1,y
-    sta ybuf,y
     inc i
     lda i
     cmp #$19
-    bcc b1
+    bcs !b8+
+    jmp b8
+  !b8:
     lax c1A
     axs #-[3]
     stx c1A
@@ -146,12 +148,13 @@ doplasma: {
     stx c2B
     ldx #0
   b5:
+    // Find the first value on the row
     lda xbuf,x
+  // Calculate the next values as sums of diffs
+  // Use experimental loop unrolling to increase the speed
     clc
     adc ybuf
     sta SCREEN1,x
-  // Calculate the next values as sums of diffs
-  // Use experimental loop unrolling to increase the speed
     clc
     adc ybuf+1
     sta SCREEN1+1*$28,x
@@ -230,14 +233,17 @@ doplasma: {
     jmp b5
   !b5:
     rts
+  b8:
+    ldx yval
+    jmp b1
     xbuf: .fill $28, 0
     ybuf: .fill $19, 0
 }
 // Make a plasma-friendly charset where the chars are randomly filled
 makecharset: {
     .label _4 = 6
-    .label _8 = $d
-    .label _9 = $d
+    .label _8 = $e
+    .label _9 = $e
     .label s = 5
     .label i = 4
     .label c = 2
diff --git a/src/test/ref/examples/plasma/plasma-unroll.cfg b/src/test/ref/examples/plasma/plasma-unroll.cfg
index a4c7efc9b..1f2e615dc 100644
--- a/src/test/ref/examples/plasma/plasma-unroll.cfg
+++ b/src/test/ref/examples/plasma/plasma-unroll.cfg
@@ -46,150 +46,155 @@ main::@4: scope:[main]  from main::@3
 doplasma: scope:[doplasma]  from main::@4
   [19] (byte) doplasma::c1a#0 ← (byte) c1A#1
   [20] (byte) doplasma::c1b#0 ← (byte) c1B#1
-  [21] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#0)
-  [22] *((const byte[$19]) doplasma::ybuf#0) ← (byte~) doplasma::$0
   to:doplasma::@1
-doplasma::@1: scope:[doplasma]  from doplasma doplasma::@1
-  [23] (byte) doplasma::i#2 ← phi( doplasma/(byte/signed byte/word/signed word/dword/signed dword) 1 doplasma::@1/(byte) doplasma::i#1 )
-  [23] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@1/(byte) doplasma::c1b#1 )
-  [23] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@1/(byte) doplasma::c1a#1 )
-  [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4
-  [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9
-  [26] (byte~) doplasma::$1 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#1)
-  [27] (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((const byte[$19]) doplasma::ybuf#0+-(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) doplasma::i#2)
-  [28] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$3
-  [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
-  [30] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@1
+doplasma::@1: scope:[doplasma]  from doplasma doplasma::@8
+  [21] (byte) doplasma::i#2 ← phi( doplasma/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@8/(byte) doplasma::i#1 )
+  [21] (byte) doplasma::yprev#2 ← phi( doplasma/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@8/(byte~) doplasma::yprev#3 )
+  [21] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@8/(byte) doplasma::c1b#1 )
+  [21] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@8/(byte) doplasma::c1a#1 )
+  [22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2)
+  [23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2
+  [24] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1
+  [25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4
+  [26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9
+  [27] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
+  [28] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@8
   to:doplasma::@2
 doplasma::@2: scope:[doplasma]  from doplasma::@1
-  [31] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3
-  [32] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5
-  [33] (byte) doplasma::c2a#0 ← (byte) c2A#1
-  [34] (byte) doplasma::c2b#0 ← (byte) c2B#1
+  [29] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3
+  [30] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5
+  [31] (byte) doplasma::c2a#0 ← (byte) c2A#1
+  [32] (byte) doplasma::c2b#0 ← (byte) c2B#1
   to:doplasma::@3
 doplasma::@3: scope:[doplasma]  from doplasma::@2 doplasma::@3
-  [35] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@3/(byte) doplasma::i1#1 )
-  [35] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
-  [35] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
-  [36] (byte~) doplasma::$5 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2)
-  [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$5
-  [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3
-  [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7
-  [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
-  [41] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3
+  [33] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@3/(byte) doplasma::i1#1 )
+  [33] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
+  [33] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
+  [34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2)
+  [35] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3
+  [36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3
+  [37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7
+  [38] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
+  [39] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3
   to:doplasma::@4
 doplasma::@4: scope:[doplasma]  from doplasma::@3
-  [42] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2
-  [43] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3
+  [40] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2
+  [41] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3
   to:doplasma::@5
 doplasma::@5: scope:[doplasma]  from doplasma::@4 doplasma::@7
-  [44] (byte) doplasma::i2#2 ← phi( doplasma::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@7/(byte) doplasma::i2#1 )
-  [45] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0)
-  [46] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#0
+  [42] (byte) doplasma::i2#2 ← phi( doplasma::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@7/(byte) doplasma::i2#1 )
+  [43] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2)
   to:doplasma::@6
 doplasma::@6: scope:[doplasma]  from doplasma::@5
-  [47] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
-  [48] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1
+  [44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0)
+  [45] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1
   to:doplasma::@6_1
 doplasma::@6_1: scope:[doplasma]  from doplasma::@6
-  [49] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2)
-  [50] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4
+  [46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
+  [47] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4
   to:doplasma::@6_2
 doplasma::@6_2: scope:[doplasma]  from doplasma::@6_1
-  [51] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3)
-  [52] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6
+  [48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2)
+  [49] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6
   to:doplasma::@6_3
 doplasma::@6_3: scope:[doplasma]  from doplasma::@6_2
-  [53] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4)
-  [54] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8
+  [50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3)
+  [51] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8
   to:doplasma::@6_4
 doplasma::@6_4: scope:[doplasma]  from doplasma::@6_3
-  [55] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5)
-  [56] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10
+  [52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4)
+  [53] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10
   to:doplasma::@6_5
 doplasma::@6_5: scope:[doplasma]  from doplasma::@6_4
-  [57] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6)
-  [58] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12
+  [54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5)
+  [55] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12
   to:doplasma::@6_6
 doplasma::@6_6: scope:[doplasma]  from doplasma::@6_5
-  [59] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7)
-  [60] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14
+  [56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6)
+  [57] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14
   to:doplasma::@6_7
 doplasma::@6_7: scope:[doplasma]  from doplasma::@6_6
-  [61] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8)
-  [62] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16
+  [58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7)
+  [59] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16
   to:doplasma::@6_8
 doplasma::@6_8: scope:[doplasma]  from doplasma::@6_7
-  [63] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9)
-  [64] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18
+  [60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8)
+  [61] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18
   to:doplasma::@6_9
 doplasma::@6_9: scope:[doplasma]  from doplasma::@6_8
-  [65] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a)
-  [66] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20
+  [62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9)
+  [63] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20
   to:doplasma::@6_10
 doplasma::@6_10: scope:[doplasma]  from doplasma::@6_9
-  [67] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b)
-  [68] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22
+  [64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a)
+  [65] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22
   to:doplasma::@6_11
 doplasma::@6_11: scope:[doplasma]  from doplasma::@6_10
-  [69] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c)
-  [70] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24
+  [66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b)
+  [67] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24
   to:doplasma::@6_12
 doplasma::@6_12: scope:[doplasma]  from doplasma::@6_11
-  [71] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d)
-  [72] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26
+  [68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c)
+  [69] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26
   to:doplasma::@6_13
 doplasma::@6_13: scope:[doplasma]  from doplasma::@6_12
-  [73] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e)
-  [74] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28
+  [70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d)
+  [71] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28
   to:doplasma::@6_14
 doplasma::@6_14: scope:[doplasma]  from doplasma::@6_13
-  [75] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f)
-  [76] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30
+  [72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e)
+  [73] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30
   to:doplasma::@6_15
 doplasma::@6_15: scope:[doplasma]  from doplasma::@6_14
-  [77] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10)
-  [78] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32
+  [74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f)
+  [75] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32
   to:doplasma::@6_16
 doplasma::@6_16: scope:[doplasma]  from doplasma::@6_15
-  [79] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11)
-  [80] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34
+  [76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10)
+  [77] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34
   to:doplasma::@6_17
 doplasma::@6_17: scope:[doplasma]  from doplasma::@6_16
-  [81] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12)
-  [82] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36
+  [78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11)
+  [79] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36
   to:doplasma::@6_18
 doplasma::@6_18: scope:[doplasma]  from doplasma::@6_17
-  [83] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13)
-  [84] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38
+  [80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12)
+  [81] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38
   to:doplasma::@6_19
 doplasma::@6_19: scope:[doplasma]  from doplasma::@6_18
-  [85] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14)
-  [86] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40
+  [82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13)
+  [83] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40
   to:doplasma::@6_20
 doplasma::@6_20: scope:[doplasma]  from doplasma::@6_19
-  [87] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15)
-  [88] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42
+  [84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14)
+  [85] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42
   to:doplasma::@6_21
 doplasma::@6_21: scope:[doplasma]  from doplasma::@6_20
-  [89] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16)
-  [90] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44
+  [86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15)
+  [87] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44
   to:doplasma::@6_22
 doplasma::@6_22: scope:[doplasma]  from doplasma::@6_21
-  [91] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17)
-  [92] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46
+  [88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16)
+  [89] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46
   to:doplasma::@6_23
 doplasma::@6_23: scope:[doplasma]  from doplasma::@6_22
-  [93] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18)
-  [94] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48
+  [90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17)
+  [91] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48
+  to:doplasma::@6_24
+doplasma::@6_24: scope:[doplasma]  from doplasma::@6_23
+  [92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18)
+  [93] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#50
   to:doplasma::@7
-doplasma::@7: scope:[doplasma]  from doplasma::@6_23
-  [95] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
-  [96] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5
+doplasma::@7: scope:[doplasma]  from doplasma::@6_24
+  [94] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
+  [95] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5
   to:doplasma::@return
 doplasma::@return: scope:[doplasma]  from doplasma::@7
-  [97] return 
+  [96] return 
   to:@return
+doplasma::@8: scope:[doplasma]  from doplasma::@1
+  [97] (byte~) doplasma::yprev#3 ← (byte) doplasma::yval#0
+  to:doplasma::@1
 makecharset: scope:[makecharset]  from main::@2
   [98] phi()
   [99] call sid_rnd_init 
diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log
index e3a1ed439..e7484bcc9 100644
--- a/src/test/ref/examples/plasma/plasma-unroll.log
+++ b/src/test/ref/examples/plasma/plasma-unroll.log
@@ -331,9 +331,8 @@ doplasma: scope:[doplasma]  from main::@4
   (byte[$19]) doplasma::ybuf#0 ← { fill( $19, 0) }
   (byte) doplasma::c1a#0 ← (byte) c1A#8
   (byte) doplasma::c1b#0 ← (byte) c1B#8
-  (byte~) doplasma::$0 ← *((byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((byte*) SINTABLE#0 + (byte) doplasma::c1b#0)
-  *((byte[$19]) doplasma::ybuf#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) doplasma::$0
-  (byte) doplasma::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
+  (byte) doplasma::yprev#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
+  (byte) doplasma::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
   to:doplasma::@1
 doplasma::@1: scope:[doplasma]  from doplasma doplasma::@1
   (byte*) doplasma::screen#7 ← phi( doplasma/(byte*) doplasma::screen#8 doplasma::@1/(byte*) doplasma::screen#7 )
@@ -342,17 +341,19 @@ doplasma::@1: scope:[doplasma]  from doplasma doplasma::@1
   (byte) c1B#14 ← phi( doplasma/(byte) c1B#8 doplasma::@1/(byte) c1B#14 )
   (byte) c1A#14 ← phi( doplasma/(byte) c1A#8 doplasma::@1/(byte) c1A#14 )
   (byte) doplasma::i#2 ← phi( doplasma/(byte) doplasma::i#0 doplasma::@1/(byte) doplasma::i#1 )
+  (byte) doplasma::yprev#2 ← phi( doplasma/(byte) doplasma::yprev#0 doplasma::@1/(byte) doplasma::yprev#1 )
   (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@1/(byte) doplasma::c1b#1 )
   (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@1/(byte) doplasma::c1a#1 )
+  (byte~) doplasma::$0 ← *((byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((byte*) SINTABLE#0 + (byte) doplasma::c1b#2)
+  (byte) doplasma::yval#0 ← (byte~) doplasma::$0
+  (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2
+  *((byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1
+  (byte) doplasma::yprev#1 ← (byte) doplasma::yval#0
   (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4
   (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9
-  (byte~) doplasma::$1 ← *((byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((byte*) SINTABLE#0 + (byte) doplasma::c1b#1)
-  (byte/signed word/word/dword/signed dword~) doplasma::$2 ← (byte) doplasma::i#2 - (byte/signed byte/word/signed word/dword/signed dword) 1
-  (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((byte[$19]) doplasma::ybuf#0 + (byte/signed word/word/dword/signed dword~) doplasma::$2)
-  *((byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$3
   (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
-  (bool~) doplasma::$4 ← (byte) doplasma::i#1 < (byte/signed byte/word/signed word/dword/signed dword) $19
-  if((bool~) doplasma::$4) goto doplasma::@1
+  (bool~) doplasma::$2 ← (byte) doplasma::i#1 < (byte/signed byte/word/signed word/dword/signed dword) $19
+  if((bool~) doplasma::$2) goto doplasma::@1
   to:doplasma::@2
 doplasma::@2: scope:[doplasma]  from doplasma::@1
   (byte*) doplasma::screen#6 ← phi( doplasma::@1/(byte*) doplasma::screen#7 )
@@ -375,13 +376,13 @@ doplasma::@3: scope:[doplasma]  from doplasma::@2 doplasma::@3
   (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte) doplasma::i1#0 doplasma::@3/(byte) doplasma::i1#1 )
   (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
   (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
-  (byte~) doplasma::$5 ← *((byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((byte*) SINTABLE#0 + (byte) doplasma::c2b#2)
-  *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$5
+  (byte~) doplasma::$3 ← *((byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((byte*) SINTABLE#0 + (byte) doplasma::c2b#2)
+  *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3
   (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3
   (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7
   (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
-  (bool~) doplasma::$6 ← (byte) doplasma::i1#1 < (byte/signed byte/word/signed word/dword/signed dword) $28
-  if((bool~) doplasma::$6) goto doplasma::@3
+  (bool~) doplasma::$4 ← (byte) doplasma::i1#1 < (byte/signed byte/word/signed word/dword/signed dword) $28
+  if((bool~) doplasma::$4) goto doplasma::@3
   to:doplasma::@4
 doplasma::@4: scope:[doplasma]  from doplasma::@3
   (byte) c1B#22 ← phi( doplasma::@3/(byte) c1B#24 )
@@ -398,14 +399,10 @@ doplasma::@5: scope:[doplasma]  from doplasma::@4 doplasma::@7
   (byte) c2A#22 ← phi( doplasma::@4/(byte) c2A#3 doplasma::@7/(byte) c2A#16 )
   (byte) c1B#20 ← phi( doplasma::@4/(byte) c1B#22 doplasma::@7/(byte) c1B#15 )
   (byte) c1A#20 ← phi( doplasma::@4/(byte) c1A#22 doplasma::@7/(byte) c1A#15 )
-  (byte*) doplasma::screen#1 ← phi( doplasma::@4/(byte*) doplasma::screen#3 doplasma::@7/(byte*) doplasma::screen#4 )
+  (byte*) doplasma::screen#2 ← phi( doplasma::@4/(byte*) doplasma::screen#3 doplasma::@7/(byte*) doplasma::screen#4 )
   (byte) doplasma::i2#2 ← phi( doplasma::@4/(byte) doplasma::i2#0 doplasma::@7/(byte) doplasma::i2#1 )
-  (byte~) doplasma::$7 ← *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((byte[$19]) doplasma::ybuf#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)
-  (byte) doplasma::val#0 ← (byte~) doplasma::$7
-  (byte/signed byte/word/signed word/dword/signed dword~) doplasma::$8 ← (byte/signed byte/word/signed word/dword/signed dword) 0 * (byte/signed byte/word/signed word/dword/signed dword) $28
-  (byte*~) doplasma::$9 ← (byte*) doplasma::screen#1 + (byte/signed byte/word/signed word/dword/signed dword~) doplasma::$8
-  *((byte*~) doplasma::$9 + (byte) doplasma::i2#2) ← (byte) doplasma::val#0
-  (byte) doplasma::ii#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
+  (byte) doplasma::val#0 ← *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2)
+  (byte) doplasma::ii#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
   to:doplasma::@6
 doplasma::@6: scope:[doplasma]  from doplasma::@5 doplasma::@6
   (byte) c2B#20 ← phi( doplasma::@5/(byte) c2B#22 doplasma::@6/(byte) c2B#20 )
@@ -413,27 +410,27 @@ doplasma::@6: scope:[doplasma]  from doplasma::@5 doplasma::@6
   (byte) c1B#18 ← phi( doplasma::@5/(byte) c1B#20 doplasma::@6/(byte) c1B#18 )
   (byte) c1A#18 ← phi( doplasma::@5/(byte) c1A#20 doplasma::@6/(byte) c1A#18 )
   (byte) doplasma::i2#3 ← phi( doplasma::@5/(byte) doplasma::i2#2 doplasma::@6/(byte) doplasma::i2#3 )
-  (byte*) doplasma::screen#2 ← phi( doplasma::@5/(byte*) doplasma::screen#1 doplasma::@6/(byte*) doplasma::screen#2 )
+  (byte*) doplasma::screen#1 ← phi( doplasma::@5/(byte*) doplasma::screen#2 doplasma::@6/(byte*) doplasma::screen#1 )
   (byte) doplasma::ii#2 ← phi( doplasma::@5/(byte) doplasma::ii#0 doplasma::@6/(byte) doplasma::ii#1 )
   (byte) doplasma::val#2 ← phi( doplasma::@5/(byte) doplasma::val#0 doplasma::@6/(byte) doplasma::val#1 )
   (byte) doplasma::val#1 ← (byte) doplasma::val#2 + *((byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2)
-  (byte/signed word/word/dword/signed dword~) doplasma::$10 ← (byte) doplasma::ii#2 * (byte/signed byte/word/signed word/dword/signed dword) $28
-  (byte*~) doplasma::$11 ← (byte*) doplasma::screen#2 + (byte/signed word/word/dword/signed dword~) doplasma::$10
-  *((byte*~) doplasma::$11 + (byte) doplasma::i2#3) ← (byte) doplasma::val#1
+  (byte/signed word/word/dword/signed dword~) doplasma::$5 ← (byte) doplasma::ii#2 * (byte/signed byte/word/signed word/dword/signed dword) $28
+  (byte*~) doplasma::$6 ← (byte*) doplasma::screen#1 + (byte/signed word/word/dword/signed dword~) doplasma::$5
+  *((byte*~) doplasma::$6 + (byte) doplasma::i2#3) ← (byte) doplasma::val#1
   (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#2
-  (bool~) doplasma::$12 ← (byte) doplasma::ii#1 < (byte/signed byte/word/signed word/dword/signed dword) $19
-  unroll if((bool~) doplasma::$12) goto doplasma::@6
+  (bool~) doplasma::$7 ← (byte) doplasma::ii#1 < (byte/signed byte/word/signed word/dword/signed dword) $19
+  unroll if((bool~) doplasma::$7) goto doplasma::@6
   to:doplasma::@7
 doplasma::@7: scope:[doplasma]  from doplasma::@6
+  (byte*) doplasma::screen#4 ← phi( doplasma::@6/(byte*) doplasma::screen#1 )
   (byte) c2B#16 ← phi( doplasma::@6/(byte) c2B#20 )
   (byte) c2A#16 ← phi( doplasma::@6/(byte) c2A#20 )
   (byte) c1B#15 ← phi( doplasma::@6/(byte) c1B#18 )
   (byte) c1A#15 ← phi( doplasma::@6/(byte) c1A#18 )
-  (byte*) doplasma::screen#4 ← phi( doplasma::@6/(byte*) doplasma::screen#2 )
   (byte) doplasma::i2#4 ← phi( doplasma::@6/(byte) doplasma::i2#3 )
   (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#4
-  (bool~) doplasma::$13 ← (byte) doplasma::i2#1 < (byte/signed byte/word/signed word/dword/signed dword) $28
-  if((bool~) doplasma::$13) goto doplasma::@5
+  (bool~) doplasma::$8 ← (byte) doplasma::i2#1 < (byte/signed byte/word/signed word/dword/signed dword) $28
+  if((bool~) doplasma::$8) goto doplasma::@5
   to:doplasma::@return
 doplasma::@return: scope:[doplasma]  from doplasma::@7
   (byte) c2B#10 ← phi( doplasma::@7/(byte) c2B#16 )
@@ -942,18 +939,13 @@ SYMBOL TABLE SSA
 (void()) doplasma((byte*) doplasma::screen)
 (byte~) doplasma::$0
 (byte~) doplasma::$1
-(byte/signed word/word/dword/signed dword~) doplasma::$10
-(byte*~) doplasma::$11
-(bool~) doplasma::$12
-(bool~) doplasma::$13
-(byte/signed word/word/dword/signed dword~) doplasma::$2
+(bool~) doplasma::$2
 (byte~) doplasma::$3
 (bool~) doplasma::$4
-(byte~) doplasma::$5
-(bool~) doplasma::$6
-(byte~) doplasma::$7
-(byte/signed byte/word/signed word/dword/signed dword~) doplasma::$8
-(byte*~) doplasma::$9
+(byte/signed word/word/dword/signed dword~) doplasma::$5
+(byte*~) doplasma::$6
+(bool~) doplasma::$7
+(bool~) doplasma::$8
 (label) doplasma::@1
 (label) doplasma::@2
 (label) doplasma::@3
@@ -1014,6 +1006,12 @@ SYMBOL TABLE SSA
 (byte[$28]) doplasma::xbuf#0
 (byte[$19]) doplasma::ybuf
 (byte[$19]) doplasma::ybuf#0
+(byte) doplasma::yprev
+(byte) doplasma::yprev#0
+(byte) doplasma::yprev#1
+(byte) doplasma::yprev#2
+(byte) doplasma::yval
+(byte) doplasma::yval#0
 (void()) main()
 (byte~) main::$1
 (byte*~) main::$2
@@ -1285,8 +1283,8 @@ SYMBOL TABLE SSA
 (void()) sid_rnd_init()
 (label) sid_rnd_init::@return
 
-Inversing boolean not [273] (bool~) makecharset::$6 ← (byte~) makecharset::$4 <= (byte) makecharset::s#1 from [272] (bool~) makecharset::$5 ← (byte~) makecharset::$4 > (byte) makecharset::s#1
-Inversing boolean not [291] (bool~) makecharset::$13 ← (byte/word~) makecharset::$11 != (byte/signed byte/word/signed word/dword/signed dword) 0 from [290] (bool~) makecharset::$12 ← (byte/word~) makecharset::$11 == (byte/signed byte/word/signed word/dword/signed dword) 0
+Inversing boolean not [269] (bool~) makecharset::$6 ← (byte~) makecharset::$4 <= (byte) makecharset::s#1 from [268] (bool~) makecharset::$5 ← (byte~) makecharset::$4 > (byte) makecharset::s#1
+Inversing boolean not [287] (bool~) makecharset::$13 ← (byte/word~) makecharset::$11 != (byte/signed byte/word/signed word/dword/signed dword) 0 from [286] (bool~) makecharset::$12 ← (byte/word~) makecharset::$11 == (byte/signed byte/word/signed word/dword/signed dword) 0
 Successful SSA optimization Pass2UnaryNotSimplification
 Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#35 (byte*) print_char_cursor#40 (byte*) print_screen#13 (byte*) print_line_cursor#32 (byte*) print_char_cursor#37 (byte*) print_screen#12 (byte*) print_line_cursor#29 (byte*) print_char_cursor#35 (byte*) print_screen#11 (byte*) print_line_cursor#25 (byte*) print_char_cursor#31 (byte*) print_screen#10 (byte*) print_line_cursor#18 (byte*) print_char_cursor#25 (byte*) print_screen#9 
 Alias (byte*) print_char_cursor#1 = (byte*) print_char_cursor#12 (byte*) print_char_cursor#2 
@@ -1314,6 +1312,7 @@ Alias (byte) c1A#0 = (byte) c1A#6
 Alias (byte) c1B#0 = (byte) c1B#6 
 Alias (byte) c2A#0 = (byte) c2A#6 
 Alias (byte) c2B#0 = (byte) c2B#6 
+Alias (byte) doplasma::yval#0 = (byte~) doplasma::$0 (byte) doplasma::yprev#1 
 Alias (byte) c1A#14 = (byte) c1A#9 
 Alias (byte) c1B#14 = (byte) c1B#9 
 Alias (byte) c2A#14 = (byte) c2A#8 
@@ -1324,13 +1323,12 @@ Alias (byte) c2B#15 = (byte) c2B#9
 Alias (byte*) doplasma::screen#3 = (byte*) doplasma::screen#5 
 Alias (byte) c1A#22 = (byte) c1A#24 
 Alias (byte) c1B#22 = (byte) c1B#24 
-Alias (byte) doplasma::val#0 = (byte~) doplasma::$7 
 Alias (byte) doplasma::i2#3 = (byte) doplasma::i2#4 
-Alias (byte*) doplasma::screen#2 = (byte*) doplasma::screen#4 
 Alias (byte) c1A#10 = (byte) c1A#15 (byte) c1A#18 (byte) c1A#4 
 Alias (byte) c1B#10 = (byte) c1B#15 (byte) c1B#18 (byte) c1B#4 
 Alias (byte) c2A#10 = (byte) c2A#16 (byte) c2A#20 (byte) c2A#4 
 Alias (byte) c2B#10 = (byte) c2B#16 (byte) c2B#20 (byte) c2B#4 
+Alias (byte*) doplasma::screen#1 = (byte*) doplasma::screen#4 
 Alias (byte*) print_screen#4 = (byte*) print_screen#5 
 Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#22 
 Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#29 
@@ -1395,7 +1393,7 @@ Self Phi Eliminated (byte) c2B#15
 Self Phi Eliminated (byte*) doplasma::screen#3
 Self Phi Eliminated (byte) c1A#22
 Self Phi Eliminated (byte) c1B#22
-Self Phi Eliminated (byte*) doplasma::screen#2
+Self Phi Eliminated (byte*) doplasma::screen#1
 Self Phi Eliminated (byte) doplasma::i2#3
 Self Phi Eliminated (byte) c1A#10
 Self Phi Eliminated (byte) c1B#10
@@ -1449,7 +1447,7 @@ Redundant Phi (byte) c2B#15 (byte) c2B#14
 Redundant Phi (byte*) doplasma::screen#3 (byte*) doplasma::screen#6
 Redundant Phi (byte) c1A#22 (byte) c1A#3
 Redundant Phi (byte) c1B#22 (byte) c1B#3
-Redundant Phi (byte*) doplasma::screen#2 (byte*) doplasma::screen#1
+Redundant Phi (byte*) doplasma::screen#1 (byte*) doplasma::screen#2
 Redundant Phi (byte) doplasma::i2#3 (byte) doplasma::i2#2
 Redundant Phi (byte) c1A#10 (byte) c1A#20
 Redundant Phi (byte) c1B#10 (byte) c1B#20
@@ -1477,15 +1475,15 @@ Redundant Phi (byte) c2B#11 (byte) c2B#1
 Successful SSA optimization Pass2RedundantPhiElimination
 Simple Condition (bool~) print_cls::$1 [97] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
 Simple Condition (bool~) main::$3 [141] if((byte*) main::col#1!=rangelast(COLS#0,main::$2)) goto main::@1
-Simple Condition (bool~) doplasma::$4 [206] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@1
-Simple Condition (bool~) doplasma::$6 [220] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3
-Simple Condition (bool~) doplasma::$12 [239] unroll if((byte) doplasma::ii#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6
-Simple Condition (bool~) doplasma::$13 [243] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5
-Simple Condition (bool~) makecharset::$6 [274] if((byte~) makecharset::$4<=(byte) makecharset::s#3) goto makecharset::@4
-Simple Condition (bool~) makecharset::$7 [278] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3
-Simple Condition (bool~) makecharset::$10 [287] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2
-Simple Condition (bool~) makecharset::$13 [292] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9
-Simple Condition (bool~) makecharset::$15 [296] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1
+Simple Condition (bool~) doplasma::$2 [206] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@1
+Simple Condition (bool~) doplasma::$4 [220] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3
+Simple Condition (bool~) doplasma::$7 [235] unroll if((byte) doplasma::ii#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6
+Simple Condition (bool~) doplasma::$8 [239] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5
+Simple Condition (bool~) makecharset::$6 [270] if((byte~) makecharset::$4<=(byte) makecharset::s#3) goto makecharset::@4
+Simple Condition (bool~) makecharset::$7 [274] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3
+Simple Condition (bool~) makecharset::$10 [283] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2
+Simple Condition (bool~) makecharset::$13 [288] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9
+Simple Condition (bool~) makecharset::$15 [292] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1
 Successful SSA optimization Pass2ConditionalJumpSimplification
 Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
@@ -1590,11 +1588,11 @@ Constant (const byte) c2A#17 = 0
 Constant (const byte) c2B#17 = 0
 Constant (const byte[$28]) doplasma::xbuf#0 = { fill( $28, 0) }
 Constant (const byte[$19]) doplasma::ybuf#0 = { fill( $19, 0) }
-Constant (const byte) doplasma::i#0 = 1
+Constant (const byte) doplasma::yprev#0 = 0
+Constant (const byte) doplasma::i#0 = 0
 Constant (const byte) doplasma::i1#0 = 0
 Constant (const byte) doplasma::i2#0 = 0
-Constant (const byte/signed byte/word/signed word/dword/signed dword) doplasma::$8 = 0*$28
-Constant (const byte) doplasma::ii#0 = 1
+Constant (const byte) doplasma::ii#0 = 0
 Constant (const byte[8]) makecharset::bittab#0 = { 1, 2, 4, 8, $10, $20, $40, $80 }
 Constant (const word) makecharset::c#0 = 0
 Constant (const byte) makecharset::i#0 = 0
@@ -1625,14 +1623,8 @@ Constant (const byte/word/dword) main::toD0181_$7#0 = main::toD0181_$6#0&$f
 Successful SSA optimization Pass2ConstantIdentification
 Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0
 Successful SSA optimization Pass2ConstantIdentification
-Consolidated array index constant in *(doplasma::ybuf#0+0)
-Consolidated array index constant in assignment *(doplasma::ybuf#0+-1 + doplasma::$2)
-Consolidated array index constant in *(doplasma::ybuf#0+0)
-Removed zero-constant in assignment doplasma::$9
-Successful SSA optimization Pass2ConstantAdditionElimination
 if() condition always true - replacing block destination [24] if(true) goto main::@4
 Successful SSA optimization Pass2ConstantIfs
-Inferred type updated to byte in [35] (byte/signed word/word/dword/signed dword~) doplasma::$2 ← (byte) doplasma::i#2
 Successful SSA optimization PassNEliminateUnusedVars
 Successful SSA optimization PassNEliminateUnusedVars
 Removing unused block main::@return
@@ -1653,10 +1645,7 @@ Culled Empty Block (label) makecharset::@12
 Culled Empty Block (label) makecharset::@14
 Culled Empty Block (label) @29
 Successful SSA optimization Pass2CullEmptyBlocks
-Alias (byte) doplasma::i#2 = (byte~) doplasma::$2 
-Alias (byte*) doplasma::screen#1 = (byte*~) doplasma::$9 
-Successful SSA optimization Pass2AliasElimination
-Self Phi Eliminated (byte*) doplasma::screen#1
+Self Phi Eliminated (byte*) doplasma::screen#2
 Self Phi Eliminated (byte) c1A#20
 Self Phi Eliminated (byte) c1B#20
 Self Phi Eliminated (byte) c2A#22
@@ -1667,7 +1656,7 @@ Self Phi Eliminated (byte*) makecharset::charset#6
 Self Phi Eliminated (byte*) print_line_cursor#39
 Self Phi Eliminated (byte*) print_char_cursor#44
 Successful SSA optimization Pass2SelfPhiElimination
-Redundant Phi (byte*) doplasma::screen#1 (const byte*) doplasma::screen#0
+Redundant Phi (byte*) doplasma::screen#2 (const byte*) doplasma::screen#0
 Redundant Phi (byte) c1A#20 (byte) c1A#3
 Redundant Phi (byte) c1B#20 (byte) c1B#3
 Redundant Phi (byte) c2A#22 (byte) c2A#3
@@ -1678,8 +1667,8 @@ Redundant Phi (byte*) makecharset::charset#6 (byte*) makecharset::charset#7
 Redundant Phi (byte*) print_line_cursor#39 (byte*) print_line_cursor#40
 Redundant Phi (byte*) print_char_cursor#44 (byte*) print_char_cursor#45
 Successful SSA optimization Pass2RedundantPhiElimination
-Inferred type updated to word in [79] (word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3
-Inferred type updated to word in [80] (word/signed dword/dword~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7
+Inferred type updated to word in [76] (word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3
+Inferred type updated to word in [77] (word/signed dword/dword~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7
 Successful SSA optimization PassNEliminateUnusedVars
 Self Phi Eliminated (byte*) makecharset::charset#7
 Successful SSA optimization Pass2SelfPhiElimination
@@ -1691,14 +1680,14 @@ Alias (byte) doplasma::val#0 = (byte) doplasma::val#2
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#2 (const byte) doplasma::ii#0
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const byte/signed word/word/dword/signed dword) doplasma::$10 = doplasma::ii#0*$28
+Constant (const byte/signed word/word/dword/signed dword) doplasma::$5 = doplasma::ii#0*$28
 Constant (const byte) doplasma::ii#1 = ++doplasma::ii#0
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$11 = doplasma::screen#0+doplasma::$10
+Constant (const byte*) doplasma::$6 = doplasma::screen#0+doplasma::$5
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#0)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [55] if((const byte) doplasma::ii#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_1
+if() condition always true - replacing block destination [52] if((const byte) doplasma::ii#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_1
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_1 tails: doplasma::@6_1 blocks: doplasma::@6_1 
 Successful SSA optimization Pass2LoopUnroll
@@ -1706,14 +1695,14 @@ Alias (byte) doplasma::val#1 = (byte) doplasma::val#3
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#3 (const byte) doplasma::ii#1
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const byte/signed word/word/dword/signed dword) doplasma::$14 = doplasma::ii#1*$28
+Constant (const byte/signed word/word/dword/signed dword) doplasma::$9 = doplasma::ii#1*$28
 Constant (const byte) doplasma::ii#4 = ++doplasma::ii#1
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$15 = doplasma::screen#0+doplasma::$14
+Constant (const byte*) doplasma::$10 = doplasma::screen#0+doplasma::$9
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#1)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [45] if((const byte) doplasma::ii#4<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_2
+if() condition always true - replacing block destination [42] if((const byte) doplasma::ii#4<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_2
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_2 tails: doplasma::@6_2 blocks: doplasma::@6_2 
 Successful SSA optimization Pass2LoopUnroll
@@ -1721,14 +1710,14 @@ Alias (byte) doplasma::val#4 = (byte) doplasma::val#5
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#5 (const byte) doplasma::ii#4
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const byte/signed word/word/dword/signed dword) doplasma::$16 = doplasma::ii#4*$28
+Constant (const byte/signed word/word/dword/signed dword) doplasma::$11 = doplasma::ii#4*$28
 Constant (const byte) doplasma::ii#6 = ++doplasma::ii#4
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$17 = doplasma::screen#0+doplasma::$16
+Constant (const byte*) doplasma::$12 = doplasma::screen#0+doplasma::$11
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#4)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [47] if((const byte) doplasma::ii#6<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_3
+if() condition always true - replacing block destination [44] if((const byte) doplasma::ii#6<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_3
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_3 tails: doplasma::@6_3 blocks: doplasma::@6_3 
 Successful SSA optimization Pass2LoopUnroll
@@ -1736,14 +1725,14 @@ Alias (byte) doplasma::val#6 = (byte) doplasma::val#7
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#7 (const byte) doplasma::ii#6
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const byte/signed word/word/dword/signed dword) doplasma::$18 = doplasma::ii#6*$28
+Constant (const byte/signed word/word/dword/signed dword) doplasma::$13 = doplasma::ii#6*$28
 Constant (const byte) doplasma::ii#8 = ++doplasma::ii#6
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$19 = doplasma::screen#0+doplasma::$18
+Constant (const byte*) doplasma::$14 = doplasma::screen#0+doplasma::$13
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#6)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [49] if((const byte) doplasma::ii#8<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_4
+if() condition always true - replacing block destination [46] if((const byte) doplasma::ii#8<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_4
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_4 tails: doplasma::@6_4 blocks: doplasma::@6_4 
 Successful SSA optimization Pass2LoopUnroll
@@ -1751,14 +1740,14 @@ Alias (byte) doplasma::val#8 = (byte) doplasma::val#9
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#9 (const byte) doplasma::ii#8
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const byte/signed word/word/dword/signed dword) doplasma::$20 = doplasma::ii#8*$28
+Constant (const byte/signed word/word/dword/signed dword) doplasma::$15 = doplasma::ii#8*$28
 Constant (const byte) doplasma::ii#10 = ++doplasma::ii#8
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$21 = doplasma::screen#0+doplasma::$20
+Constant (const byte*) doplasma::$16 = doplasma::screen#0+doplasma::$15
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#8)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [51] if((const byte) doplasma::ii#10<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_5
+if() condition always true - replacing block destination [48] if((const byte) doplasma::ii#10<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_5
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_5 tails: doplasma::@6_5 blocks: doplasma::@6_5 
 Successful SSA optimization Pass2LoopUnroll
@@ -1766,14 +1755,14 @@ Alias (byte) doplasma::val#10 = (byte) doplasma::val#11
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#11 (const byte) doplasma::ii#10
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const byte/signed word/word/dword/signed dword) doplasma::$22 = doplasma::ii#10*$28
+Constant (const byte/signed word/word/dword/signed dword) doplasma::$17 = doplasma::ii#10*$28
 Constant (const byte) doplasma::ii#12 = ++doplasma::ii#10
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$23 = doplasma::screen#0+doplasma::$22
+Constant (const byte*) doplasma::$18 = doplasma::screen#0+doplasma::$17
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#10)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [53] if((const byte) doplasma::ii#12<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_6
+if() condition always true - replacing block destination [50] if((const byte) doplasma::ii#12<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_6
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_6 tails: doplasma::@6_6 blocks: doplasma::@6_6 
 Successful SSA optimization Pass2LoopUnroll
@@ -1781,14 +1770,14 @@ Alias (byte) doplasma::val#12 = (byte) doplasma::val#13
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#13 (const byte) doplasma::ii#12
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$24 = doplasma::ii#12*$28
+Constant (const byte/signed word/word/dword/signed dword) doplasma::$19 = doplasma::ii#12*$28
 Constant (const byte) doplasma::ii#14 = ++doplasma::ii#12
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$25 = doplasma::screen#0+doplasma::$24
+Constant (const byte*) doplasma::$20 = doplasma::screen#0+doplasma::$19
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#12)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [55] if((const byte) doplasma::ii#14<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_7
+if() condition always true - replacing block destination [52] if((const byte) doplasma::ii#14<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_7
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_7 tails: doplasma::@6_7 blocks: doplasma::@6_7 
 Successful SSA optimization Pass2LoopUnroll
@@ -1796,14 +1785,14 @@ Alias (byte) doplasma::val#14 = (byte) doplasma::val#15
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#15 (const byte) doplasma::ii#14
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$26 = doplasma::ii#14*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$21 = doplasma::ii#14*$28
 Constant (const byte) doplasma::ii#16 = ++doplasma::ii#14
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$27 = doplasma::screen#0+doplasma::$26
+Constant (const byte*) doplasma::$22 = doplasma::screen#0+doplasma::$21
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#14)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [57] if((const byte) doplasma::ii#16<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_8
+if() condition always true - replacing block destination [54] if((const byte) doplasma::ii#16<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_8
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_8 tails: doplasma::@6_8 blocks: doplasma::@6_8 
 Successful SSA optimization Pass2LoopUnroll
@@ -1811,14 +1800,14 @@ Alias (byte) doplasma::val#16 = (byte) doplasma::val#17
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#17 (const byte) doplasma::ii#16
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$28 = doplasma::ii#16*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$23 = doplasma::ii#16*$28
 Constant (const byte) doplasma::ii#18 = ++doplasma::ii#16
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$29 = doplasma::screen#0+doplasma::$28
+Constant (const byte*) doplasma::$24 = doplasma::screen#0+doplasma::$23
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#16)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [59] if((const byte) doplasma::ii#18<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_9
+if() condition always true - replacing block destination [56] if((const byte) doplasma::ii#18<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_9
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_9 tails: doplasma::@6_9 blocks: doplasma::@6_9 
 Successful SSA optimization Pass2LoopUnroll
@@ -1826,14 +1815,14 @@ Alias (byte) doplasma::val#18 = (byte) doplasma::val#19
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#19 (const byte) doplasma::ii#18
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$30 = doplasma::ii#18*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$25 = doplasma::ii#18*$28
 Constant (const byte) doplasma::ii#20 = ++doplasma::ii#18
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$31 = doplasma::screen#0+doplasma::$30
+Constant (const byte*) doplasma::$26 = doplasma::screen#0+doplasma::$25
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#18)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [61] if((const byte) doplasma::ii#20<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_10
+if() condition always true - replacing block destination [58] if((const byte) doplasma::ii#20<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_10
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_10 tails: doplasma::@6_10 blocks: doplasma::@6_10 
 Successful SSA optimization Pass2LoopUnroll
@@ -1841,14 +1830,14 @@ Alias (byte) doplasma::val#20 = (byte) doplasma::val#21
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#21 (const byte) doplasma::ii#20
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$32 = doplasma::ii#20*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$27 = doplasma::ii#20*$28
 Constant (const byte) doplasma::ii#22 = ++doplasma::ii#20
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$33 = doplasma::screen#0+doplasma::$32
+Constant (const byte*) doplasma::$28 = doplasma::screen#0+doplasma::$27
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#20)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [63] if((const byte) doplasma::ii#22<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_11
+if() condition always true - replacing block destination [60] if((const byte) doplasma::ii#22<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_11
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_11 tails: doplasma::@6_11 blocks: doplasma::@6_11 
 Successful SSA optimization Pass2LoopUnroll
@@ -1856,14 +1845,14 @@ Alias (byte) doplasma::val#22 = (byte) doplasma::val#23
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#23 (const byte) doplasma::ii#22
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$34 = doplasma::ii#22*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$29 = doplasma::ii#22*$28
 Constant (const byte) doplasma::ii#24 = ++doplasma::ii#22
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$35 = doplasma::screen#0+doplasma::$34
+Constant (const byte*) doplasma::$30 = doplasma::screen#0+doplasma::$29
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#22)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [65] if((const byte) doplasma::ii#24<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_12
+if() condition always true - replacing block destination [62] if((const byte) doplasma::ii#24<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_12
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_12 tails: doplasma::@6_12 blocks: doplasma::@6_12 
 Successful SSA optimization Pass2LoopUnroll
@@ -1871,14 +1860,14 @@ Alias (byte) doplasma::val#24 = (byte) doplasma::val#25
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#25 (const byte) doplasma::ii#24
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$36 = doplasma::ii#24*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$31 = doplasma::ii#24*$28
 Constant (const byte) doplasma::ii#26 = ++doplasma::ii#24
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$37 = doplasma::screen#0+doplasma::$36
+Constant (const byte*) doplasma::$32 = doplasma::screen#0+doplasma::$31
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#24)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [67] if((const byte) doplasma::ii#26<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_13
+if() condition always true - replacing block destination [64] if((const byte) doplasma::ii#26<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_13
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_13 tails: doplasma::@6_13 blocks: doplasma::@6_13 
 Successful SSA optimization Pass2LoopUnroll
@@ -1886,14 +1875,14 @@ Alias (byte) doplasma::val#26 = (byte) doplasma::val#27
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#27 (const byte) doplasma::ii#26
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$38 = doplasma::ii#26*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$33 = doplasma::ii#26*$28
 Constant (const byte) doplasma::ii#28 = ++doplasma::ii#26
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$39 = doplasma::screen#0+doplasma::$38
+Constant (const byte*) doplasma::$34 = doplasma::screen#0+doplasma::$33
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#26)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [69] if((const byte) doplasma::ii#28<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_14
+if() condition always true - replacing block destination [66] if((const byte) doplasma::ii#28<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_14
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_14 tails: doplasma::@6_14 blocks: doplasma::@6_14 
 Successful SSA optimization Pass2LoopUnroll
@@ -1901,14 +1890,14 @@ Alias (byte) doplasma::val#28 = (byte) doplasma::val#29
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#29 (const byte) doplasma::ii#28
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$40 = doplasma::ii#28*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$35 = doplasma::ii#28*$28
 Constant (const byte) doplasma::ii#30 = ++doplasma::ii#28
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$41 = doplasma::screen#0+doplasma::$40
+Constant (const byte*) doplasma::$36 = doplasma::screen#0+doplasma::$35
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#28)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [71] if((const byte) doplasma::ii#30<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_15
+if() condition always true - replacing block destination [68] if((const byte) doplasma::ii#30<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_15
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_15 tails: doplasma::@6_15 blocks: doplasma::@6_15 
 Successful SSA optimization Pass2LoopUnroll
@@ -1916,14 +1905,14 @@ Alias (byte) doplasma::val#30 = (byte) doplasma::val#31
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#31 (const byte) doplasma::ii#30
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$42 = doplasma::ii#30*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$37 = doplasma::ii#30*$28
 Constant (const byte) doplasma::ii#32 = ++doplasma::ii#30
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$43 = doplasma::screen#0+doplasma::$42
+Constant (const byte*) doplasma::$38 = doplasma::screen#0+doplasma::$37
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#30)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [73] if((const byte) doplasma::ii#32<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_16
+if() condition always true - replacing block destination [70] if((const byte) doplasma::ii#32<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_16
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_16 tails: doplasma::@6_16 blocks: doplasma::@6_16 
 Successful SSA optimization Pass2LoopUnroll
@@ -1931,14 +1920,14 @@ Alias (byte) doplasma::val#32 = (byte) doplasma::val#33
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#33 (const byte) doplasma::ii#32
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$44 = doplasma::ii#32*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$39 = doplasma::ii#32*$28
 Constant (const byte) doplasma::ii#34 = ++doplasma::ii#32
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$45 = doplasma::screen#0+doplasma::$44
+Constant (const byte*) doplasma::$40 = doplasma::screen#0+doplasma::$39
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#32)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [75] if((const byte) doplasma::ii#34<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_17
+if() condition always true - replacing block destination [72] if((const byte) doplasma::ii#34<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_17
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_17 tails: doplasma::@6_17 blocks: doplasma::@6_17 
 Successful SSA optimization Pass2LoopUnroll
@@ -1946,14 +1935,14 @@ Alias (byte) doplasma::val#34 = (byte) doplasma::val#35
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#35 (const byte) doplasma::ii#34
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$46 = doplasma::ii#34*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$41 = doplasma::ii#34*$28
 Constant (const byte) doplasma::ii#36 = ++doplasma::ii#34
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$47 = doplasma::screen#0+doplasma::$46
+Constant (const byte*) doplasma::$42 = doplasma::screen#0+doplasma::$41
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#34)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [77] if((const byte) doplasma::ii#36<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_18
+if() condition always true - replacing block destination [74] if((const byte) doplasma::ii#36<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_18
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_18 tails: doplasma::@6_18 blocks: doplasma::@6_18 
 Successful SSA optimization Pass2LoopUnroll
@@ -1961,14 +1950,14 @@ Alias (byte) doplasma::val#36 = (byte) doplasma::val#37
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#37 (const byte) doplasma::ii#36
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$48 = doplasma::ii#36*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$43 = doplasma::ii#36*$28
 Constant (const byte) doplasma::ii#38 = ++doplasma::ii#36
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$49 = doplasma::screen#0+doplasma::$48
+Constant (const byte*) doplasma::$44 = doplasma::screen#0+doplasma::$43
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#36)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [79] if((const byte) doplasma::ii#38<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_19
+if() condition always true - replacing block destination [76] if((const byte) doplasma::ii#38<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_19
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_19 tails: doplasma::@6_19 blocks: doplasma::@6_19 
 Successful SSA optimization Pass2LoopUnroll
@@ -1976,14 +1965,14 @@ Alias (byte) doplasma::val#38 = (byte) doplasma::val#39
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#39 (const byte) doplasma::ii#38
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$50 = doplasma::ii#38*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$45 = doplasma::ii#38*$28
 Constant (const byte) doplasma::ii#40 = ++doplasma::ii#38
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$51 = doplasma::screen#0+doplasma::$50
+Constant (const byte*) doplasma::$46 = doplasma::screen#0+doplasma::$45
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#38)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [81] if((const byte) doplasma::ii#40<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_20
+if() condition always true - replacing block destination [78] if((const byte) doplasma::ii#40<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_20
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_20 tails: doplasma::@6_20 blocks: doplasma::@6_20 
 Successful SSA optimization Pass2LoopUnroll
@@ -1991,14 +1980,14 @@ Alias (byte) doplasma::val#40 = (byte) doplasma::val#41
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#41 (const byte) doplasma::ii#40
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$52 = doplasma::ii#40*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$47 = doplasma::ii#40*$28
 Constant (const byte) doplasma::ii#42 = ++doplasma::ii#40
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$53 = doplasma::screen#0+doplasma::$52
+Constant (const byte*) doplasma::$48 = doplasma::screen#0+doplasma::$47
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#40)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [83] if((const byte) doplasma::ii#42<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_21
+if() condition always true - replacing block destination [80] if((const byte) doplasma::ii#42<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_21
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_21 tails: doplasma::@6_21 blocks: doplasma::@6_21 
 Successful SSA optimization Pass2LoopUnroll
@@ -2006,14 +1995,14 @@ Alias (byte) doplasma::val#42 = (byte) doplasma::val#43
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#43 (const byte) doplasma::ii#42
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$54 = doplasma::ii#42*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$49 = doplasma::ii#42*$28
 Constant (const byte) doplasma::ii#44 = ++doplasma::ii#42
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$55 = doplasma::screen#0+doplasma::$54
+Constant (const byte*) doplasma::$50 = doplasma::screen#0+doplasma::$49
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#42)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [85] if((const byte) doplasma::ii#44<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_22
+if() condition always true - replacing block destination [82] if((const byte) doplasma::ii#44<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_22
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_22 tails: doplasma::@6_22 blocks: doplasma::@6_22 
 Successful SSA optimization Pass2LoopUnroll
@@ -2021,14 +2010,14 @@ Alias (byte) doplasma::val#44 = (byte) doplasma::val#45
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#45 (const byte) doplasma::ii#44
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$56 = doplasma::ii#44*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$51 = doplasma::ii#44*$28
 Constant (const byte) doplasma::ii#46 = ++doplasma::ii#44
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$57 = doplasma::screen#0+doplasma::$56
+Constant (const byte*) doplasma::$52 = doplasma::screen#0+doplasma::$51
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#44)
 Successful SSA optimization Pass2ConstantAdditionElimination
-if() condition always true - replacing block destination [87] if((const byte) doplasma::ii#46<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_23
+if() condition always true - replacing block destination [84] if((const byte) doplasma::ii#46<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_23
 Successful SSA optimization Pass2ConstantIfs
 Unrolling loop Loop head: doplasma::@6_23 tails: doplasma::@6_23 blocks: doplasma::@6_23 
 Successful SSA optimization Pass2LoopUnroll
@@ -2036,28 +2025,44 @@ Alias (byte) doplasma::val#46 = (byte) doplasma::val#47
 Successful SSA optimization Pass2AliasElimination
 Redundant Phi (byte) doplasma::ii#47 (const byte) doplasma::ii#46
 Successful SSA optimization Pass2RedundantPhiElimination
-Constant (const word/signed word/dword/signed dword) doplasma::$58 = doplasma::ii#46*$28
+Constant (const word/signed word/dword/signed dword) doplasma::$53 = doplasma::ii#46*$28
 Constant (const byte) doplasma::ii#48 = ++doplasma::ii#46
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) doplasma::$59 = doplasma::screen#0+doplasma::$58
+Constant (const byte*) doplasma::$54 = doplasma::screen#0+doplasma::$53
 Successful SSA optimization Pass2ConstantIdentification
 Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#46)
 Successful SSA optimization Pass2ConstantAdditionElimination
-Removing PHI-reference to removed block (doplasma::@6_23) in block doplasma::@6_24
-Removing PHI-reference to removed block (doplasma::@6_23) in block doplasma::@6_24
-if() condition always false - eliminating [89] if((const byte) doplasma::ii#48<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_24
+if() condition always true - replacing block destination [86] if((const byte) doplasma::ii#48<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_24
+Successful SSA optimization Pass2ConstantIfs
+Unrolling loop Loop head: doplasma::@6_24 tails: doplasma::@6_24 blocks: doplasma::@6_24 
+Successful SSA optimization Pass2LoopUnroll
+Alias (byte) doplasma::val#48 = (byte) doplasma::val#49 
+Successful SSA optimization Pass2AliasElimination
+Redundant Phi (byte) doplasma::ii#49 (const byte) doplasma::ii#48
+Successful SSA optimization Pass2RedundantPhiElimination
+Constant (const word/signed word/dword/signed dword) doplasma::$55 = doplasma::ii#48*$28
+Constant (const byte) doplasma::ii#50 = ++doplasma::ii#48
+Successful SSA optimization Pass2ConstantIdentification
+Constant (const byte*) doplasma::$56 = doplasma::screen#0+doplasma::$55
+Successful SSA optimization Pass2ConstantIdentification
+Consolidated array index constant in *(doplasma::ybuf#0+doplasma::ii#48)
+Successful SSA optimization Pass2ConstantAdditionElimination
+Removing PHI-reference to removed block (doplasma::@6_24) in block doplasma::@6_25
+Removing PHI-reference to removed block (doplasma::@6_24) in block doplasma::@6_25
+if() condition always false - eliminating [88] if((const byte) doplasma::ii#50<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@6_25
 Successful SSA optimization Pass2ConstantIfs
 Successful SSA optimization PassNEliminateUnusedVars
-Eliminating variable (byte) doplasma::val#49 from unused block doplasma::@6_24
-Eliminating variable (byte) doplasma::ii#49 from unused block doplasma::@6_24
-Eliminating variable (byte) doplasma::val#50 from unused block doplasma::@6_24
-Eliminating variable (byte/signed word/word/dword/signed dword~) doplasma::$60 from unused block doplasma::@6_24
-Eliminating variable (byte*~) doplasma::$61 from unused block doplasma::@6_24
-Eliminating variable (byte) doplasma::ii#50 from unused block doplasma::@6_24
-Removing unused block doplasma::@6_24
+Eliminating variable (byte) doplasma::val#51 from unused block doplasma::@6_25
+Eliminating variable (byte) doplasma::ii#51 from unused block doplasma::@6_25
+Eliminating variable (byte) doplasma::val#52 from unused block doplasma::@6_25
+Eliminating variable (byte/signed word/word/dword/signed dword~) doplasma::$57 from unused block doplasma::@6_25
+Eliminating variable (byte*~) doplasma::$58 from unused block doplasma::@6_25
+Eliminating variable (byte) doplasma::ii#52 from unused block doplasma::@6_25
+Removing unused block doplasma::@6_25
 Successful SSA optimization Pass2EliminateUnusedBlocks
 Inlining constant with var siblings (const byte*) print_cls::sc#0
 Inlining constant with var siblings (const byte*) main::col#0
+Inlining constant with var siblings (const byte) doplasma::yprev#0
 Inlining constant with var siblings (const byte) doplasma::i#0
 Inlining constant with var siblings (const byte) doplasma::i1#0
 Inlining constant with var siblings (const byte) doplasma::i2#0
@@ -2085,6 +2090,7 @@ Inlining constant with different constant siblings (const byte) doplasma::ii#40
 Inlining constant with different constant siblings (const byte) doplasma::ii#42
 Inlining constant with different constant siblings (const byte) doplasma::ii#44
 Inlining constant with different constant siblings (const byte) doplasma::ii#46
+Inlining constant with different constant siblings (const byte) doplasma::ii#48
 Inlining constant with var siblings (const word) makecharset::c#0
 Inlining constant with var siblings (const byte) makecharset::i#0
 Inlining constant with var siblings (const byte) makecharset::b#0
@@ -2093,109 +2099,115 @@ Inlining constant with var siblings (const byte) c1A#16
 Inlining constant with var siblings (const byte) c1B#16
 Inlining constant with var siblings (const byte) c2A#17
 Inlining constant with var siblings (const byte) c2B#17
-Constant inlined doplasma::ii#46 = ++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#46 = ++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#48 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined main::col#0 = (const byte*) COLS#0
-Constant inlined doplasma::ii#40 = ++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#42 = ++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#44 = ++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#6 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#8 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#40 = ++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#42 = ++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#44 = ++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#6 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#8 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined c1A#16 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::ii#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#1 = ++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#4 = ++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#1 = ++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#4 = ++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined main::toD0181_$7#0 = >((word))(const byte*) CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4&(byte/signed byte/word/signed word/dword/signed dword) $f
-Constant inlined doplasma::$57 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined main::toD0181_$3#0 = >((word))(const byte*) SCREEN1#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4
-Constant inlined doplasma::$56 = ++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$59 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$58 = ++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$53 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$52 = ++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$55 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$56 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$53 = ++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$52 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$55 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined makecharset::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$54 = ++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$51 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$50 = ++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$54 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$51 = ++++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$50 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN1#0
-Constant inlined doplasma::ii#24 = ++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#26 = ++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#24 = ++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#26 = ++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined print_cls::$0 = (const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) $3e8
-Constant inlined doplasma::ii#28 = ++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#20 = ++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#22 = ++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#36 = ++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#38 = ++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#28 = ++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#20 = ++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#22 = ++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::$9 = ++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$6 = (const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::ii#36 = ++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::$5 = (byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::ii#38 = ++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined main::toD0181_$0#0 = ((word))(const byte*) SCREEN1#0
-Constant inlined doplasma::ii#30 = ++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#30 = ++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined print_cls::sc#0 = (const byte*) print_line_cursor#0
-Constant inlined doplasma::ii#32 = ++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#34 = ++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#32 = ++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#34 = ++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined main::$2 = (const byte*) COLS#0+(word/signed word/dword/signed dword) $3e8
 Constant inlined main::toD0181_$4#0 = ((word))(const byte*) CHARSET#0
 Constant inlined c2B#17 = (byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined doplasma::i2#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$28 = ++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$27 = (const byte*) SCREEN1#0+++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$29 = (const byte*) SCREEN1#0+++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$24 = ++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$23 = (const byte*) SCREEN1#0+++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$26 = ++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$25 = (const byte*) SCREEN1#0+++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$20 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$28 = (const byte*) SCREEN1#0+++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$27 = ++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$29 = ++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$24 = (const byte*) SCREEN1#0+++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$23 = ++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$26 = (const byte*) SCREEN1#0+++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$25 = ++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$20 = (const byte*) SCREEN1#0+++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined c2A#17 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$22 = ++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$21 = (const byte*) SCREEN1#0+++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::ii#14 = ++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#16 = ++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#18 = ++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::$22 = (const byte*) SCREEN1#0+++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$21 = ++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::ii#14 = ++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#16 = ++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#18 = ++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined main::toD0181_$1#0 = ((word))(const byte*) SCREEN1#0&(word/signed word/dword/signed dword) $3fff
-Constant inlined doplasma::ii#10 = ++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
-Constant inlined doplasma::ii#12 = ++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::ii#10 = ++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::ii#12 = ++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined makecharset::ii#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$17 = (const byte*) SCREEN1#0+++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$17 = ++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined makecharset::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$16 = ++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$16 = (const byte*) SCREEN1#0+++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined makecharset::charset#0 = (const byte*) CHARSET#0
-Constant inlined doplasma::$19 = (const byte*) SCREEN1#0+++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$18 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$19 = ++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$18 = (const byte*) SCREEN1#0+++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$13 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined doplasma::screen#0 = (const byte*) SCREEN1#0
-Constant inlined doplasma::$15 = (const byte*) SCREEN1#0+++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$12 = (const byte*) SCREEN1#0+++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$15 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined main::toD0181_$5#0 = >((word))(const byte*) CHARSET#0
-Constant inlined doplasma::$14 = ++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$11 = (const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$10 = (byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$14 = (const byte*) SCREEN1#0+++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$11 = ++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$10 = (const byte*) SCREEN1#0+++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET#0
-Constant inlined doplasma::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
+Constant inlined doplasma::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
 Constant inlined doplasma::i1#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$49 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$46 = ++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$45 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$48 = ++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$47 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$42 = ++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$41 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$44 = ++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$43 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$40 = ++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::yprev#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
+Constant inlined doplasma::$49 = ++++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$46 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$45 = ++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$48 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$47 = ++++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$42 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$41 = ++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$44 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$43 = ++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$40 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined main::toD0181_$6#0 = >((word))(const byte*) CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4
-Constant inlined doplasma::$39 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$38 = ++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$39 = ++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$38 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined main::toD0181_$2#0 = ((word))(const byte*) SCREEN1#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4
-Constant inlined doplasma::$35 = (const byte*) SCREEN1#0+++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$35 = ++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined c1B#16 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$34 = ++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$37 = (const byte*) SCREEN1#0+++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$36 = ++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$31 = (const byte*) SCREEN1#0+++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$30 = ++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$34 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$37 = ++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$36 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$31 = ++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$30 = (const byte*) SCREEN1#0+++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Constant inlined makecharset::b#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
-Constant inlined doplasma::$33 = (const byte*) SCREEN1#0+++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
-Constant inlined doplasma::$32 = ++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$33 = ++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
+Constant inlined doplasma::$32 = (const byte*) SCREEN1#0+++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) $28
 Successful SSA optimization Pass2ConstantInlining
 Simplifying constant plus zero doplasma::ybuf#0+0
-Simplifying constant plus zero doplasma::ybuf#0+0
-Simplifying constant integer increment ++1
+Simplifying constant multiply by zero 0*$28
+Simplifying constant integer increment ++0
+Simplifying constant integer increment ++0
+Simplifying constant integer increment ++0
 Simplifying constant integer increment ++1
 Simplifying constant integer increment ++1
 Simplifying constant integer increment ++2
@@ -2242,6 +2254,8 @@ Simplifying constant integer increment ++$16
 Simplifying constant integer increment ++$16
 Simplifying constant integer increment ++$17
 Successful SSA optimization Pass2ConstantSimplification
+Simplifying constant plus zero SCREEN1#0+0
+Simplifying constant integer increment ++1
 Simplifying constant integer increment ++2
 Simplifying constant integer increment ++3
 Simplifying constant integer increment ++4
@@ -2290,22 +2304,23 @@ Calls in [] to main:3
 Calls in [main] to makecharset:13 doplasma:18 
 Calls in [makecharset] to sid_rnd_init:115 print_cls:117 sid_rnd:123 print_char:141 
 
-Created 20 initial phi equivalence classes
+Created 21 initial phi equivalence classes
 Coalesced [19] c1A#28 ← c1A#3
 Coalesced [20] c1B#28 ← c1B#3
 Coalesced [21] c2A#28 ← c2A#3
 Coalesced [22] c2B#28 ← c2B#3
 Coalesced [23] main::col#3 ← main::col#1
-Coalesced [28] doplasma::c1a#3 ← doplasma::c1a#0
-Coalesced [29] doplasma::c1b#3 ← doplasma::c1b#0
-Coalesced [42] doplasma::c2a#3 ← doplasma::c2a#0
-Coalesced [43] doplasma::c2b#3 ← doplasma::c2b#0
-Coalesced [107] doplasma::i2#5 ← doplasma::i2#1
-Coalesced [108] doplasma::c2a#4 ← doplasma::c2a#1
-Coalesced [109] doplasma::c2b#4 ← doplasma::c2b#1
-Coalesced [110] doplasma::i1#3 ← doplasma::i1#1
-Coalesced [111] doplasma::c1a#4 ← doplasma::c1a#1
-Coalesced [112] doplasma::c1b#4 ← doplasma::c1b#1
+Coalesced [26] doplasma::c1a#3 ← doplasma::c1a#0
+Coalesced [27] doplasma::c1b#3 ← doplasma::c1b#0
+Coalesced [40] doplasma::c2a#3 ← doplasma::c2a#0
+Coalesced [41] doplasma::c2b#3 ← doplasma::c2b#0
+Coalesced [106] doplasma::i2#5 ← doplasma::i2#1
+Coalesced [107] doplasma::c2a#4 ← doplasma::c2a#1
+Coalesced [108] doplasma::c2b#4 ← doplasma::c2b#1
+Coalesced [109] doplasma::i1#3 ← doplasma::i1#1
+Coalesced [110] doplasma::c1a#4 ← doplasma::c1a#1
+Coalesced [111] doplasma::c1b#4 ← doplasma::c1b#1
+Not coalescing [112] doplasma::yprev#3 ← doplasma::yval#0
 Coalesced [113] doplasma::i#3 ← doplasma::i#1
 Coalesced [129] makecharset::b#9 ← makecharset::b#1
 Coalesced [142] print_char_cursor#47 ← print_char_cursor#1
@@ -2317,11 +2332,10 @@ Coalesced [151] makecharset::ii#6 ← makecharset::ii#1
 Coalesced [152] makecharset::b#7 ← makecharset::b#3
 Coalesced (already) [153] makecharset::b#8 ← makecharset::b#2
 Coalesced [165] print_cls::sc#3 ← print_cls::sc#1
-Coalesced down to 18 phi equivalence classes
+Coalesced down to 20 phi equivalence classes
 Culled Empty Block (label) main::@12
 Culled Empty Block (label) doplasma::@11
 Culled Empty Block (label) doplasma::@10
-Culled Empty Block (label) doplasma::@9
 Culled Empty Block (label) makecharset::@15
 Culled Empty Block (label) makecharset::@19
 Culled Empty Block (label) makecharset::@16
@@ -2331,6 +2345,7 @@ Culled Empty Block (label) print_cls::@3
 Renumbering block @25 to @1
 Renumbering block @28 to @2
 Renumbering block main::@9 to main::@5
+Renumbering block doplasma::@9 to doplasma::@8
 Renumbering block makecharset::@11 to makecharset::@10
 Renumbering block makecharset::@13 to makecharset::@11
 Adding NOP phi() at start of @begin
@@ -2393,150 +2408,155 @@ main::@4: scope:[main]  from main::@3
 doplasma: scope:[doplasma]  from main::@4
   [19] (byte) doplasma::c1a#0 ← (byte) c1A#1
   [20] (byte) doplasma::c1b#0 ← (byte) c1B#1
-  [21] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#0)
-  [22] *((const byte[$19]) doplasma::ybuf#0) ← (byte~) doplasma::$0
   to:doplasma::@1
-doplasma::@1: scope:[doplasma]  from doplasma doplasma::@1
-  [23] (byte) doplasma::i#2 ← phi( doplasma/(byte/signed byte/word/signed word/dword/signed dword) 1 doplasma::@1/(byte) doplasma::i#1 )
-  [23] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@1/(byte) doplasma::c1b#1 )
-  [23] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@1/(byte) doplasma::c1a#1 )
-  [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4
-  [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9
-  [26] (byte~) doplasma::$1 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#1)
-  [27] (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((const byte[$19]) doplasma::ybuf#0+-(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) doplasma::i#2)
-  [28] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$3
-  [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
-  [30] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@1
+doplasma::@1: scope:[doplasma]  from doplasma doplasma::@8
+  [21] (byte) doplasma::i#2 ← phi( doplasma/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@8/(byte) doplasma::i#1 )
+  [21] (byte) doplasma::yprev#2 ← phi( doplasma/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@8/(byte~) doplasma::yprev#3 )
+  [21] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@8/(byte) doplasma::c1b#1 )
+  [21] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@8/(byte) doplasma::c1a#1 )
+  [22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2)
+  [23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2
+  [24] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1
+  [25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4
+  [26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9
+  [27] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
+  [28] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@8
   to:doplasma::@2
 doplasma::@2: scope:[doplasma]  from doplasma::@1
-  [31] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3
-  [32] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5
-  [33] (byte) doplasma::c2a#0 ← (byte) c2A#1
-  [34] (byte) doplasma::c2b#0 ← (byte) c2B#1
+  [29] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3
+  [30] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5
+  [31] (byte) doplasma::c2a#0 ← (byte) c2A#1
+  [32] (byte) doplasma::c2b#0 ← (byte) c2B#1
   to:doplasma::@3
 doplasma::@3: scope:[doplasma]  from doplasma::@2 doplasma::@3
-  [35] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@3/(byte) doplasma::i1#1 )
-  [35] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
-  [35] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
-  [36] (byte~) doplasma::$5 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2)
-  [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$5
-  [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3
-  [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7
-  [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
-  [41] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3
+  [33] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@3/(byte) doplasma::i1#1 )
+  [33] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
+  [33] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
+  [34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2)
+  [35] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3
+  [36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3
+  [37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7
+  [38] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
+  [39] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3
   to:doplasma::@4
 doplasma::@4: scope:[doplasma]  from doplasma::@3
-  [42] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2
-  [43] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3
+  [40] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2
+  [41] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3
   to:doplasma::@5
 doplasma::@5: scope:[doplasma]  from doplasma::@4 doplasma::@7
-  [44] (byte) doplasma::i2#2 ← phi( doplasma::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@7/(byte) doplasma::i2#1 )
-  [45] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0)
-  [46] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#0
+  [42] (byte) doplasma::i2#2 ← phi( doplasma::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 doplasma::@7/(byte) doplasma::i2#1 )
+  [43] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2)
   to:doplasma::@6
 doplasma::@6: scope:[doplasma]  from doplasma::@5
-  [47] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
-  [48] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1
+  [44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0)
+  [45] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1
   to:doplasma::@6_1
 doplasma::@6_1: scope:[doplasma]  from doplasma::@6
-  [49] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2)
-  [50] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4
+  [46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
+  [47] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4
   to:doplasma::@6_2
 doplasma::@6_2: scope:[doplasma]  from doplasma::@6_1
-  [51] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3)
-  [52] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6
+  [48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2)
+  [49] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6
   to:doplasma::@6_3
 doplasma::@6_3: scope:[doplasma]  from doplasma::@6_2
-  [53] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4)
-  [54] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8
+  [50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3)
+  [51] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8
   to:doplasma::@6_4
 doplasma::@6_4: scope:[doplasma]  from doplasma::@6_3
-  [55] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5)
-  [56] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10
+  [52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4)
+  [53] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10
   to:doplasma::@6_5
 doplasma::@6_5: scope:[doplasma]  from doplasma::@6_4
-  [57] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6)
-  [58] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12
+  [54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5)
+  [55] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12
   to:doplasma::@6_6
 doplasma::@6_6: scope:[doplasma]  from doplasma::@6_5
-  [59] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7)
-  [60] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14
+  [56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6)
+  [57] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14
   to:doplasma::@6_7
 doplasma::@6_7: scope:[doplasma]  from doplasma::@6_6
-  [61] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8)
-  [62] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16
+  [58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7)
+  [59] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16
   to:doplasma::@6_8
 doplasma::@6_8: scope:[doplasma]  from doplasma::@6_7
-  [63] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9)
-  [64] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18
+  [60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8)
+  [61] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18
   to:doplasma::@6_9
 doplasma::@6_9: scope:[doplasma]  from doplasma::@6_8
-  [65] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a)
-  [66] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20
+  [62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9)
+  [63] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20
   to:doplasma::@6_10
 doplasma::@6_10: scope:[doplasma]  from doplasma::@6_9
-  [67] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b)
-  [68] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22
+  [64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a)
+  [65] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22
   to:doplasma::@6_11
 doplasma::@6_11: scope:[doplasma]  from doplasma::@6_10
-  [69] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c)
-  [70] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24
+  [66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b)
+  [67] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24
   to:doplasma::@6_12
 doplasma::@6_12: scope:[doplasma]  from doplasma::@6_11
-  [71] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d)
-  [72] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26
+  [68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c)
+  [69] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26
   to:doplasma::@6_13
 doplasma::@6_13: scope:[doplasma]  from doplasma::@6_12
-  [73] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e)
-  [74] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28
+  [70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d)
+  [71] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28
   to:doplasma::@6_14
 doplasma::@6_14: scope:[doplasma]  from doplasma::@6_13
-  [75] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f)
-  [76] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30
+  [72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e)
+  [73] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30
   to:doplasma::@6_15
 doplasma::@6_15: scope:[doplasma]  from doplasma::@6_14
-  [77] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10)
-  [78] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32
+  [74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f)
+  [75] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32
   to:doplasma::@6_16
 doplasma::@6_16: scope:[doplasma]  from doplasma::@6_15
-  [79] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11)
-  [80] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34
+  [76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10)
+  [77] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34
   to:doplasma::@6_17
 doplasma::@6_17: scope:[doplasma]  from doplasma::@6_16
-  [81] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12)
-  [82] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36
+  [78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11)
+  [79] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36
   to:doplasma::@6_18
 doplasma::@6_18: scope:[doplasma]  from doplasma::@6_17
-  [83] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13)
-  [84] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38
+  [80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12)
+  [81] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38
   to:doplasma::@6_19
 doplasma::@6_19: scope:[doplasma]  from doplasma::@6_18
-  [85] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14)
-  [86] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40
+  [82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13)
+  [83] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40
   to:doplasma::@6_20
 doplasma::@6_20: scope:[doplasma]  from doplasma::@6_19
-  [87] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15)
-  [88] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42
+  [84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14)
+  [85] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42
   to:doplasma::@6_21
 doplasma::@6_21: scope:[doplasma]  from doplasma::@6_20
-  [89] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16)
-  [90] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44
+  [86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15)
+  [87] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44
   to:doplasma::@6_22
 doplasma::@6_22: scope:[doplasma]  from doplasma::@6_21
-  [91] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17)
-  [92] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46
+  [88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16)
+  [89] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46
   to:doplasma::@6_23
 doplasma::@6_23: scope:[doplasma]  from doplasma::@6_22
-  [93] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18)
-  [94] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48
+  [90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17)
+  [91] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48
+  to:doplasma::@6_24
+doplasma::@6_24: scope:[doplasma]  from doplasma::@6_23
+  [92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18)
+  [93] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#50
   to:doplasma::@7
-doplasma::@7: scope:[doplasma]  from doplasma::@6_23
-  [95] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
-  [96] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5
+doplasma::@7: scope:[doplasma]  from doplasma::@6_24
+  [94] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
+  [95] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5
   to:doplasma::@return
 doplasma::@return: scope:[doplasma]  from doplasma::@7
-  [97] return 
+  [96] return 
   to:@return
+doplasma::@8: scope:[doplasma]  from doplasma::@1
+  [97] (byte~) doplasma::yprev#3 ← (byte) doplasma::yval#0
+  to:doplasma::@1
 makecharset: scope:[makecharset]  from main::@2
   [98] phi()
   [99] call sid_rnd_init 
@@ -2727,30 +2747,28 @@ VARIABLE REGISTER WEIGHTS
 (byte) WHITE
 (byte) YELLOW
 (byte) c1A
-(byte) c1A#1 1.0714285714285714
-(byte) c1A#3 0.1911764705882353
+(byte) c1A#1 1.1538461538461537
+(byte) c1A#3 0.18840579710144925
 (byte) c1B
-(byte) c1B#1 0.9999999999999999
-(byte) c1B#3 0.19402985074626866
+(byte) c1B#1 1.0714285714285714
+(byte) c1B#3 0.1911764705882353
 (byte) c2A
-(byte) c2A#1 0.6
-(byte) c2A#3 0.22807017543859648
+(byte) c2A#1 0.625
+(byte) c2A#3 0.22413793103448276
 (byte) c2B
-(byte) c2B#1 0.5769230769230769
-(byte) c2B#3 0.23214285714285715
+(byte) c2B#1 0.6
+(byte) c2B#3 0.22807017543859648
 (void()) doplasma((byte*) doplasma::screen)
-(byte~) doplasma::$0 4.0
 (byte~) doplasma::$1 202.0
 (byte~) doplasma::$3 202.0
-(byte~) doplasma::$5 202.0
 (byte) doplasma::c1a
-(byte) doplasma::c1a#0 1.5
-(byte) doplasma::c1a#1 43.285714285714285
-(byte) doplasma::c1a#2 204.0
+(byte) doplasma::c1a#0 2.0
+(byte) doplasma::c1a#1 40.4
+(byte) doplasma::c1a#2 76.25
 (byte) doplasma::c1b
-(byte) doplasma::c1b#0 2.0
+(byte) doplasma::c1b#0 4.0
 (byte) doplasma::c1b#1 50.5
-(byte) doplasma::c1b#2 102.0
+(byte) doplasma::c1b#2 61.0
 (byte) doplasma::c2a
 (byte) doplasma::c2a#0 2.0
 (byte) doplasma::c2a#1 50.5
@@ -2760,18 +2778,18 @@ VARIABLE REGISTER WEIGHTS
 (byte) doplasma::c2b#1 67.33333333333333
 (byte) doplasma::c2b#2 76.25
 (byte) doplasma::i
-(byte) doplasma::i#1 151.5
-(byte) doplasma::i#2 67.33333333333333
+(byte) doplasma::i#1 101.0
+(byte) doplasma::i#2 50.5
 (byte) doplasma::i1
 (byte) doplasma::i1#1 151.5
 (byte) doplasma::i1#2 60.599999999999994
 (byte) doplasma::i2
 (byte) doplasma::i2#1 151.5
-(byte) doplasma::i2#2 55.45098039215691
+(byte) doplasma::i2#2 54.3846153846154
 (byte) doplasma::ii
 (byte*) doplasma::screen
 (byte) doplasma::val
-(byte) doplasma::val#0 151.5
+(byte) doplasma::val#0 202.0
 (byte) doplasma::val#1 151.5
 (byte) doplasma::val#10 151.5
 (byte) doplasma::val#12 151.5
@@ -2793,11 +2811,17 @@ VARIABLE REGISTER WEIGHTS
 (byte) doplasma::val#42 151.5
 (byte) doplasma::val#44 151.5
 (byte) doplasma::val#46 151.5
-(byte) doplasma::val#48 202.0
+(byte) doplasma::val#48 151.5
+(byte) doplasma::val#50 202.0
 (byte) doplasma::val#6 151.5
 (byte) doplasma::val#8 151.5
 (byte[$28]) doplasma::xbuf
 (byte[$19]) doplasma::ybuf
+(byte) doplasma::yprev
+(byte) doplasma::yprev#2 101.0
+(byte~) doplasma::yprev#3 202.0
+(byte) doplasma::yval
+(byte) doplasma::yval#0 43.285714285714285
 (void()) main()
 (byte*) main::col
 (byte*) main::col#1 16.5
@@ -2865,6 +2889,7 @@ Initial phi equivalence classes
 [ c2B#1 c2B#3 ]
 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
+[ doplasma::yprev#2 doplasma::yprev#3 ]
 [ doplasma::i#2 doplasma::i#1 ]
 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
@@ -2876,10 +2901,9 @@ Initial phi equivalence classes
 [ makecharset::ii#2 makecharset::ii#1 ]
 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
 [ print_cls::sc#2 print_cls::sc#1 ]
-Added variable doplasma::$0 to zero page equivalence class [ doplasma::$0 ]
+Added variable doplasma::yval#0 to zero page equivalence class [ doplasma::yval#0 ]
 Added variable doplasma::$1 to zero page equivalence class [ doplasma::$1 ]
 Added variable doplasma::$3 to zero page equivalence class [ doplasma::$3 ]
-Added variable doplasma::$5 to zero page equivalence class [ doplasma::$5 ]
 Added variable doplasma::val#0 to zero page equivalence class [ doplasma::val#0 ]
 Added variable doplasma::val#1 to zero page equivalence class [ doplasma::val#1 ]
 Added variable doplasma::val#4 to zero page equivalence class [ doplasma::val#4 ]
@@ -2905,6 +2929,7 @@ Added variable doplasma::val#42 to zero page equivalence class [ doplasma::val#4
 Added variable doplasma::val#44 to zero page equivalence class [ doplasma::val#44 ]
 Added variable doplasma::val#46 to zero page equivalence class [ doplasma::val#46 ]
 Added variable doplasma::val#48 to zero page equivalence class [ doplasma::val#48 ]
+Added variable doplasma::val#50 to zero page equivalence class [ doplasma::val#50 ]
 Added variable makecharset::$2 to zero page equivalence class [ makecharset::$2 ]
 Added variable makecharset::s#0 to zero page equivalence class [ makecharset::s#0 ]
 Added variable sid_rnd::return#2 to zero page equivalence class [ sid_rnd::return#2 ]
@@ -2922,6 +2947,7 @@ Complete equivalence classes
 [ c2B#1 c2B#3 ]
 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
+[ doplasma::yprev#2 doplasma::yprev#3 ]
 [ doplasma::i#2 doplasma::i#1 ]
 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
@@ -2933,10 +2959,9 @@ Complete equivalence classes
 [ makecharset::ii#2 makecharset::ii#1 ]
 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
 [ print_cls::sc#2 print_cls::sc#1 ]
-[ doplasma::$0 ]
+[ doplasma::yval#0 ]
 [ doplasma::$1 ]
 [ doplasma::$3 ]
-[ doplasma::$5 ]
 [ doplasma::val#0 ]
 [ doplasma::val#1 ]
 [ doplasma::val#4 ]
@@ -2962,6 +2987,7 @@ Complete equivalence classes
 [ doplasma::val#44 ]
 [ doplasma::val#46 ]
 [ doplasma::val#48 ]
+[ doplasma::val#50 ]
 [ makecharset::$2 ]
 [ makecharset::s#0 ]
 [ sid_rnd::return#2 ]
@@ -2978,21 +3004,21 @@ Allocated zp ZP_BYTE:6 [ c2A#1 c2A#3 ]
 Allocated zp ZP_BYTE:7 [ c2B#1 c2B#3 ]
 Allocated zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
 Allocated zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
-Allocated zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ]
-Allocated zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
-Allocated zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
-Allocated zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ]
-Allocated zp ZP_BYTE:14 [ doplasma::i2#2 doplasma::i2#1 ]
-Allocated zp ZP_WORD:15 [ makecharset::c#2 makecharset::c#1 ]
-Allocated zp ZP_WORD:17 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ]
-Allocated zp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ]
-Allocated zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ]
-Allocated zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
-Allocated zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ]
-Allocated zp ZP_BYTE:24 [ doplasma::$0 ]
-Allocated zp ZP_BYTE:25 [ doplasma::$1 ]
-Allocated zp ZP_BYTE:26 [ doplasma::$3 ]
-Allocated zp ZP_BYTE:27 [ doplasma::$5 ]
+Allocated zp ZP_BYTE:10 [ doplasma::yprev#2 doplasma::yprev#3 ]
+Allocated zp ZP_BYTE:11 [ doplasma::i#2 doplasma::i#1 ]
+Allocated zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
+Allocated zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
+Allocated zp ZP_BYTE:14 [ doplasma::i1#2 doplasma::i1#1 ]
+Allocated zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ]
+Allocated zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ]
+Allocated zp ZP_WORD:18 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ]
+Allocated zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ]
+Allocated zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ]
+Allocated zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
+Allocated zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ]
+Allocated zp ZP_BYTE:25 [ doplasma::yval#0 ]
+Allocated zp ZP_BYTE:26 [ doplasma::$1 ]
+Allocated zp ZP_BYTE:27 [ doplasma::$3 ]
 Allocated zp ZP_BYTE:28 [ doplasma::val#0 ]
 Allocated zp ZP_BYTE:29 [ doplasma::val#1 ]
 Allocated zp ZP_BYTE:30 [ doplasma::val#4 ]
@@ -3018,20 +3044,22 @@ Allocated zp ZP_BYTE:49 [ doplasma::val#42 ]
 Allocated zp ZP_BYTE:50 [ doplasma::val#44 ]
 Allocated zp ZP_BYTE:51 [ doplasma::val#46 ]
 Allocated zp ZP_BYTE:52 [ doplasma::val#48 ]
-Allocated zp ZP_BYTE:53 [ makecharset::$2 ]
-Allocated zp ZP_BYTE:54 [ makecharset::s#0 ]
-Allocated zp ZP_BYTE:55 [ sid_rnd::return#2 ]
-Allocated zp ZP_BYTE:56 [ makecharset::$3 ]
-Allocated zp ZP_BYTE:57 [ makecharset::$4 ]
-Allocated zp ZP_WORD:58 [ makecharset::$8 ]
-Allocated zp ZP_WORD:60 [ makecharset::$9 ]
-Allocated zp ZP_BYTE:62 [ makecharset::$11 ]
-Allocated zp ZP_BYTE:63 [ sid_rnd::return#0 ]
+Allocated zp ZP_BYTE:53 [ doplasma::val#50 ]
+Allocated zp ZP_BYTE:54 [ makecharset::$2 ]
+Allocated zp ZP_BYTE:55 [ makecharset::s#0 ]
+Allocated zp ZP_BYTE:56 [ sid_rnd::return#2 ]
+Allocated zp ZP_BYTE:57 [ makecharset::$3 ]
+Allocated zp ZP_BYTE:58 [ makecharset::$4 ]
+Allocated zp ZP_WORD:59 [ makecharset::$8 ]
+Allocated zp ZP_WORD:61 [ makecharset::$9 ]
+Allocated zp ZP_BYTE:63 [ makecharset::$11 ]
+Allocated zp ZP_BYTE:64 [ sid_rnd::return#0 ]
 
 INITIAL ASM
 //SEG0 File Comments
 // A KickC version of the plasma routine from the CC65 samples
-// This version has an unrolled inner loop to reach ~50FPS
+// This version has an unrolled inner loop to reach 50+FPS
+// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
 // (w)2001 by groepaz/hitmen
 // Cleanup and porting to CC65 by Ullrich von Bassewitz.
 // Ported to KickC by Jesper Gravgaard.
@@ -3058,7 +3086,7 @@ INITIAL ASM
   .label SCREEN1 = $2800
   .label CHARSET = $2000
   .label SINTABLE = $1f00
-  .label print_char_cursor = $11
+  .label print_char_cursor = $12
   .label c1A = 4
   .label c1B = 5
   .label c2A = 6
@@ -3178,19 +3206,19 @@ main: {
 //SEG45 doplasma
 // Render plasma to the passed screen
 doplasma: {
-    .label _0 = $18
-    .label _1 = $19
-    .label _3 = $1a
-    .label _5 = $1b
+    .label _1 = $1a
+    .label _3 = $1b
     .label c1a = 8
     .label c1b = 9
-    .label i = $a
-    .label c2a = $b
-    .label c2b = $c
-    .label i1 = $d
+    .label yval = $19
+    .label i = $b
+    .label c2a = $c
+    .label c2b = $d
+    .label i1 = $e
     .label val = $1c
     .label val_1 = $1d
-    .label i2 = $e
+    .label i2 = $f
+    .label yprev = $a
     .label val_4 = $1e
     .label val_6 = $1f
     .label val_8 = $20
@@ -3214,593 +3242,599 @@ doplasma: {
     .label val_44 = $32
     .label val_46 = $33
     .label val_48 = $34
+    .label val_50 = $35
   //SEG46 [19] (byte) doplasma::c1a#0 ← (byte) c1A#1 -- vbuz1=vbuz2 
     lda c1A
     sta c1a
   //SEG47 [20] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 
     lda c1B
     sta c1b
-  //SEG48 [21] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#0) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
+  //SEG48 [21] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
+  b1_from_doplasma:
+  //SEG49 [21] phi (byte) doplasma::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta i
+  //SEG50 [21] phi (byte) doplasma::yprev#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 
+    lda #0
+    sta yprev
+  //SEG51 [21] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
+  //SEG52 [21] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#3] -- register_copy 
+    jmp b1
+  // Calculate ybuff as a bunch of differences
+  //SEG53 doplasma::@1
+  b1:
+  //SEG54 [22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
     ldy c1a
     lda SINTABLE,y
     ldy c1b
     clc
     adc SINTABLE,y
-    sta _0
-  //SEG49 [22] *((const byte[$19]) doplasma::ybuf#0) ← (byte~) doplasma::$0 -- _deref_pbuc1=vbuz1 
-    lda _0
-    sta ybuf
-  //SEG50 [23] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
-  b1_from_doplasma:
-  //SEG51 [23] phi (byte) doplasma::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
-    lda #1
-    sta i
-  //SEG52 [23] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy 
-  //SEG53 [23] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
-    jmp b1
-  // Calculate ybuff as a bunch of differences
-  //SEG54 [23] phi from doplasma::@1 to doplasma::@1 [phi:doplasma::@1->doplasma::@1]
-  b1_from_b1:
-  //SEG55 [23] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@1#0] -- register_copy 
-  //SEG56 [23] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@1#1] -- register_copy 
-  //SEG57 [23] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@1#2] -- register_copy 
-    jmp b1
-  //SEG58 doplasma::@1
-  b1:
-  //SEG59 [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1 
+    sta yval
+  //SEG55 [23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 -- vbuz1=vbuz2_minus_vbuz3 
+    lda yval
+    sec
+    sbc yprev
+    sta _1
+  //SEG56 [24] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuz2 
+    lda _1
+    ldy i
+    sta ybuf,y
+  //SEG57 [25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1a
     axs #-[4]
     stx c1a
-  //SEG60 [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG58 [26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1b
     axs #-[9]
     stx c1b
-  //SEG61 [26] (byte~) doplasma::$1 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#1) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
-    ldy c1a
-    lda SINTABLE,y
-    ldy c1b
-    clc
-    adc SINTABLE,y
-    sta _1
-  //SEG62 [27] (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((const byte[$19]) doplasma::ybuf#0+-(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) doplasma::i#2) -- vbuz1=vbuz2_minus_pbuc1_derefidx_vbuz3 
-    lda _1
-    ldy i
-    sec
-    sbc ybuf+-1,y
-    sta _3
-  //SEG63 [28] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuz2 
-    lda _3
-    ldy i
-    sta ybuf,y
-  //SEG64 [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
+  //SEG59 [27] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
     inc i
-  //SEG65 [30] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@1 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG60 [28] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 
     lda i
     cmp #$19
-    bcc b1_from_b1
+    bcc b8
     jmp b2
-  //SEG66 doplasma::@2
+  //SEG61 doplasma::@2
   b2:
-  //SEG67 [31] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG62 [29] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1A
     axs #-[3]
     stx c1A
-  //SEG68 [32] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz1_minus_vbuc1 
+  //SEG63 [30] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz1_minus_vbuc1 
     lax c1B
     axs #5
     stx c1B
-  //SEG69 [33] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
+  //SEG64 [31] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
     lda c2A
     sta c2a
-  //SEG70 [34] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
+  //SEG65 [32] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
     lda c2B
     sta c2b
-  //SEG71 [35] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
+  //SEG66 [33] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
   b3_from_b2:
-  //SEG72 [35] phi (byte) doplasma::i1#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
+  //SEG67 [33] phi (byte) doplasma::i1#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
     lda #0
     sta i1
-  //SEG73 [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
-  //SEG74 [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
+  //SEG68 [33] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
+  //SEG69 [33] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
     jmp b3
-  //SEG75 [35] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
+  //SEG70 [33] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
   b3_from_b3:
-  //SEG76 [35] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
-  //SEG77 [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
-  //SEG78 [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
+  //SEG71 [33] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
+  //SEG72 [33] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
+  //SEG73 [33] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
     jmp b3
-  //SEG79 doplasma::@3
+  //SEG74 doplasma::@3
   b3:
-  //SEG80 [36] (byte~) doplasma::$5 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
+  //SEG75 [34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
     ldy c2a
     lda SINTABLE,y
     ldy c2b
     clc
     adc SINTABLE,y
-    sta _5
-  //SEG81 [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$5 -- pbuc1_derefidx_vbuz1=vbuz2 
-    lda _5
+    sta _3
+  //SEG76 [35] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuz2 
+    lda _3
     ldy i1
     sta xbuf,y
-  //SEG82 [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG77 [36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
     lax c2a
     axs #-[3]
     stx c2a
-  //SEG83 [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG78 [37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz1_plus_vbuc1 
     lax c2b
     axs #-[7]
     stx c2b
-  //SEG84 [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
+  //SEG79 [38] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
     inc i1
-  //SEG85 [41] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG80 [39] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
     lda i1
     cmp #$28
     bcc b3_from_b3
     jmp b4
-  //SEG86 doplasma::@4
+  //SEG81 doplasma::@4
   b4:
-  //SEG87 [42] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2 
+  //SEG82 [40] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2 
     lda c2A
     clc
     adc #2
     sta c2A
-  //SEG88 [43] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_minus_vbuc1 
+  //SEG83 [41] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_minus_vbuc1 
     lax c2B
     axs #3
     stx c2B
-  //SEG89 [44] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
+  //SEG84 [42] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
   b5_from_b4:
-  //SEG90 [44] phi (byte) doplasma::i2#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@4->doplasma::@5#0] -- vbuz1=vbuc1 
+  //SEG85 [42] phi (byte) doplasma::i2#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@4->doplasma::@5#0] -- vbuz1=vbuc1 
     lda #0
     sta i2
     jmp b5
-  //SEG91 [44] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
+  //SEG86 [42] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
   b5_from_b7:
-  //SEG92 [44] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
+  //SEG87 [42] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
     jmp b5
-  //SEG93 doplasma::@5
+  //SEG88 doplasma::@5
   b5:
-  //SEG94 [45] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0) -- vbuz1=pbuc1_derefidx_vbuz2_plus__deref_pbuc2 
+  //SEG89 [43] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) -- vbuz1=pbuc1_derefidx_vbuz2 
+    // Find the first value on the row
     ldy i2
     lda xbuf,y
-    clc
-    adc ybuf
     sta val
-  //SEG95 [46] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#0 -- pbuc1_derefidx_vbuz1=vbuz2 
-    lda val
-    ldy i2
-    sta SCREEN1,y
     jmp b6
   // Calculate the next values as sums of diffs
   // Use experimental loop unrolling to increase the speed
-  //SEG96 doplasma::@6
+  //SEG90 doplasma::@6
   b6:
-  //SEG97 [47] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+1
+  //SEG91 [44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf
     clc
     adc val
     sta val_1
-  //SEG98 [48] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG92 [45] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_1
     ldy i2
-    sta SCREEN1+1*$28,y
+    sta SCREEN1,y
     jmp b6_1
-  //SEG99 doplasma::@6_1
+  //SEG93 doplasma::@6_1
   b6_1:
-  //SEG100 [49] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+2
+  //SEG94 [46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+1
     clc
     adc val_1
     sta val_4
-  //SEG101 [50] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG95 [47] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_4
     ldy i2
-    sta SCREEN1+2*$28,y
+    sta SCREEN1+1*$28,y
     jmp b6_2
-  //SEG102 doplasma::@6_2
+  //SEG96 doplasma::@6_2
   b6_2:
-  //SEG103 [51] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+3
+  //SEG97 [48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+2
     clc
     adc val_4
     sta val_6
-  //SEG104 [52] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG98 [49] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_6
     ldy i2
-    sta SCREEN1+3*$28,y
+    sta SCREEN1+2*$28,y
     jmp b6_3
-  //SEG105 doplasma::@6_3
+  //SEG99 doplasma::@6_3
   b6_3:
-  //SEG106 [53] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+4
+  //SEG100 [50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+3
     clc
     adc val_6
     sta val_8
-  //SEG107 [54] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG101 [51] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_8
     ldy i2
-    sta SCREEN1+4*$28,y
+    sta SCREEN1+3*$28,y
     jmp b6_4
-  //SEG108 doplasma::@6_4
+  //SEG102 doplasma::@6_4
   b6_4:
-  //SEG109 [55] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+5
+  //SEG103 [52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+4
     clc
     adc val_8
     sta val_10
-  //SEG110 [56] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG104 [53] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_10
     ldy i2
-    sta SCREEN1+5*$28,y
+    sta SCREEN1+4*$28,y
     jmp b6_5
-  //SEG111 doplasma::@6_5
+  //SEG105 doplasma::@6_5
   b6_5:
-  //SEG112 [57] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+6
+  //SEG106 [54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+5
     clc
     adc val_10
     sta val_12
-  //SEG113 [58] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG107 [55] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_12
     ldy i2
-    sta SCREEN1+6*$28,y
+    sta SCREEN1+5*$28,y
     jmp b6_6
-  //SEG114 doplasma::@6_6
+  //SEG108 doplasma::@6_6
   b6_6:
-  //SEG115 [59] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+7
+  //SEG109 [56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+6
     clc
     adc val_12
     sta val_14
-  //SEG116 [60] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG110 [57] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_14
     ldy i2
-    sta SCREEN1+7*$28,y
+    sta SCREEN1+6*$28,y
     jmp b6_7
-  //SEG117 doplasma::@6_7
+  //SEG111 doplasma::@6_7
   b6_7:
-  //SEG118 [61] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+8
+  //SEG112 [58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+7
     clc
     adc val_14
     sta val_16
-  //SEG119 [62] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG113 [59] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_16
     ldy i2
-    sta SCREEN1+8*$28,y
+    sta SCREEN1+7*$28,y
     jmp b6_8
-  //SEG120 doplasma::@6_8
+  //SEG114 doplasma::@6_8
   b6_8:
-  //SEG121 [63] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+9
+  //SEG115 [60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+8
     clc
     adc val_16
     sta val_18
-  //SEG122 [64] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG116 [61] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_18
     ldy i2
-    sta SCREEN1+9*$28,y
+    sta SCREEN1+8*$28,y
     jmp b6_9
-  //SEG123 doplasma::@6_9
+  //SEG117 doplasma::@6_9
   b6_9:
-  //SEG124 [65] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$a
+  //SEG118 [62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+9
     clc
     adc val_18
     sta val_20
-  //SEG125 [66] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG119 [63] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_20
     ldy i2
-    sta SCREEN1+$a*$28,y
+    sta SCREEN1+9*$28,y
     jmp b6_10
-  //SEG126 doplasma::@6_10
+  //SEG120 doplasma::@6_10
   b6_10:
-  //SEG127 [67] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$b
+  //SEG121 [64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$a
     clc
     adc val_20
     sta val_22
-  //SEG128 [68] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG122 [65] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_22
     ldy i2
-    sta SCREEN1+$b*$28,y
+    sta SCREEN1+$a*$28,y
     jmp b6_11
-  //SEG129 doplasma::@6_11
+  //SEG123 doplasma::@6_11
   b6_11:
-  //SEG130 [69] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$c
+  //SEG124 [66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$b
     clc
     adc val_22
     sta val_24
-  //SEG131 [70] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG125 [67] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_24
     ldy i2
-    sta SCREEN1+$c*$28,y
+    sta SCREEN1+$b*$28,y
     jmp b6_12
-  //SEG132 doplasma::@6_12
+  //SEG126 doplasma::@6_12
   b6_12:
-  //SEG133 [71] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$d
+  //SEG127 [68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$c
     clc
     adc val_24
     sta val_26
-  //SEG134 [72] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG128 [69] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_26
     ldy i2
-    sta SCREEN1+$d*$28,y
+    sta SCREEN1+$c*$28,y
     jmp b6_13
-  //SEG135 doplasma::@6_13
+  //SEG129 doplasma::@6_13
   b6_13:
-  //SEG136 [73] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$e
+  //SEG130 [70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$d
     clc
     adc val_26
     sta val_28
-  //SEG137 [74] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG131 [71] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_28
     ldy i2
-    sta SCREEN1+$e*$28,y
+    sta SCREEN1+$d*$28,y
     jmp b6_14
-  //SEG138 doplasma::@6_14
+  //SEG132 doplasma::@6_14
   b6_14:
-  //SEG139 [75] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$f
+  //SEG133 [72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$e
     clc
     adc val_28
     sta val_30
-  //SEG140 [76] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG134 [73] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_30
     ldy i2
-    sta SCREEN1+$f*$28,y
+    sta SCREEN1+$e*$28,y
     jmp b6_15
-  //SEG141 doplasma::@6_15
+  //SEG135 doplasma::@6_15
   b6_15:
-  //SEG142 [77] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$10
+  //SEG136 [74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$f
     clc
     adc val_30
     sta val_32
-  //SEG143 [78] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG137 [75] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_32
     ldy i2
-    sta SCREEN1+$10*$28,y
+    sta SCREEN1+$f*$28,y
     jmp b6_16
-  //SEG144 doplasma::@6_16
+  //SEG138 doplasma::@6_16
   b6_16:
-  //SEG145 [79] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$11
+  //SEG139 [76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$10
     clc
     adc val_32
     sta val_34
-  //SEG146 [80] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG140 [77] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_34
     ldy i2
-    sta SCREEN1+$11*$28,y
+    sta SCREEN1+$10*$28,y
     jmp b6_17
-  //SEG147 doplasma::@6_17
+  //SEG141 doplasma::@6_17
   b6_17:
-  //SEG148 [81] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$12
+  //SEG142 [78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$11
     clc
     adc val_34
     sta val_36
-  //SEG149 [82] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG143 [79] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_36
     ldy i2
-    sta SCREEN1+$12*$28,y
+    sta SCREEN1+$11*$28,y
     jmp b6_18
-  //SEG150 doplasma::@6_18
+  //SEG144 doplasma::@6_18
   b6_18:
-  //SEG151 [83] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$13
+  //SEG145 [80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$12
     clc
     adc val_36
     sta val_38
-  //SEG152 [84] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG146 [81] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_38
     ldy i2
-    sta SCREEN1+$13*$28,y
+    sta SCREEN1+$12*$28,y
     jmp b6_19
-  //SEG153 doplasma::@6_19
+  //SEG147 doplasma::@6_19
   b6_19:
-  //SEG154 [85] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$14
+  //SEG148 [82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$13
     clc
     adc val_38
     sta val_40
-  //SEG155 [86] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG149 [83] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_40
     ldy i2
-    sta SCREEN1+$14*$28,y
+    sta SCREEN1+$13*$28,y
     jmp b6_20
-  //SEG156 doplasma::@6_20
+  //SEG150 doplasma::@6_20
   b6_20:
-  //SEG157 [87] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$15
+  //SEG151 [84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$14
     clc
     adc val_40
     sta val_42
-  //SEG158 [88] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG152 [85] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_42
     ldy i2
-    sta SCREEN1+$15*$28,y
+    sta SCREEN1+$14*$28,y
     jmp b6_21
-  //SEG159 doplasma::@6_21
+  //SEG153 doplasma::@6_21
   b6_21:
-  //SEG160 [89] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$16
+  //SEG154 [86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$15
     clc
     adc val_42
     sta val_44
-  //SEG161 [90] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG155 [87] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_44
     ldy i2
-    sta SCREEN1+$16*$28,y
+    sta SCREEN1+$15*$28,y
     jmp b6_22
-  //SEG162 doplasma::@6_22
+  //SEG156 doplasma::@6_22
   b6_22:
-  //SEG163 [91] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$17
+  //SEG157 [88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$16
     clc
     adc val_44
     sta val_46
-  //SEG164 [92] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG158 [89] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_46
     ldy i2
-    sta SCREEN1+$17*$28,y
+    sta SCREEN1+$16*$28,y
     jmp b6_23
-  //SEG165 doplasma::@6_23
+  //SEG159 doplasma::@6_23
   b6_23:
-  //SEG166 [93] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) -- vbuz1=vbuz2_plus__deref_pbuc1 
-    lda ybuf+$18
+  //SEG160 [90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$17
     clc
     adc val_46
     sta val_48
-  //SEG167 [94] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48 -- pbuc1_derefidx_vbuz1=vbuz2 
+  //SEG161 [91] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48 -- pbuc1_derefidx_vbuz1=vbuz2 
     lda val_48
     ldy i2
+    sta SCREEN1+$17*$28,y
+    jmp b6_24
+  //SEG162 doplasma::@6_24
+  b6_24:
+  //SEG163 [92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) -- vbuz1=vbuz2_plus__deref_pbuc1 
+    lda ybuf+$18
+    clc
+    adc val_48
+    sta val_50
+  //SEG164 [93] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#50 -- pbuc1_derefidx_vbuz1=vbuz2 
+    lda val_50
+    ldy i2
     sta SCREEN1+$18*$28,y
     jmp b7
-  //SEG168 doplasma::@7
+  //SEG165 doplasma::@7
   b7:
-  //SEG169 [95] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuz1=_inc_vbuz1 
+  //SEG166 [94] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuz1=_inc_vbuz1 
     inc i2
-  //SEG170 [96] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG167 [95] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 
     lda i2
     cmp #$28
     bcc b5_from_b7
     jmp breturn
-  //SEG171 doplasma::@return
+  //SEG168 doplasma::@return
   breturn:
-  //SEG172 [97] return 
+  //SEG169 [96] return 
     rts
+  //SEG170 doplasma::@8
+  b8:
+  //SEG171 [97] (byte~) doplasma::yprev#3 ← (byte) doplasma::yval#0 -- vbuz1=vbuz2 
+    lda yval
+    sta yprev
+  //SEG172 [21] phi from doplasma::@8 to doplasma::@1 [phi:doplasma::@8->doplasma::@1]
+  b1_from_b8:
+  //SEG173 [21] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@8->doplasma::@1#0] -- register_copy 
+  //SEG174 [21] phi (byte) doplasma::yprev#2 = (byte~) doplasma::yprev#3 [phi:doplasma::@8->doplasma::@1#1] -- register_copy 
+  //SEG175 [21] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@8->doplasma::@1#2] -- register_copy 
+  //SEG176 [21] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@8->doplasma::@1#3] -- register_copy 
+    jmp b1
     xbuf: .fill $28, 0
     ybuf: .fill $19, 0
 }
-//SEG173 makecharset
+//SEG177 makecharset
 // Make a plasma-friendly charset where the chars are randomly filled
 makecharset: {
-    .label _2 = $35
-    .label _3 = $38
-    .label _4 = $39
-    .label _8 = $3a
-    .label _9 = $3c
-    .label _11 = $3e
-    .label s = $36
-    .label ii = $14
-    .label b = $15
-    .label i = $13
-    .label c = $f
-  //SEG174 [99] call sid_rnd_init 
+    .label _2 = $36
+    .label _3 = $39
+    .label _4 = $3a
+    .label _8 = $3b
+    .label _9 = $3d
+    .label _11 = $3f
+    .label s = $37
+    .label ii = $15
+    .label b = $16
+    .label i = $14
+    .label c = $10
+  //SEG178 [99] call sid_rnd_init 
     jsr sid_rnd_init
-  //SEG175 [100] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
+  //SEG179 [100] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
   b10_from_makecharset:
     jmp b10
-  //SEG176 makecharset::@10
+  //SEG180 makecharset::@10
   b10:
-  //SEG177 [101] call print_cls 
-  //SEG178 [134] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
+  //SEG181 [101] call print_cls 
+  //SEG182 [134] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
   print_cls_from_b10:
     jsr print_cls
-  //SEG179 [102] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
+  //SEG183 [102] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
   b1_from_b10:
-  //SEG180 [102] phi (byte*) print_char_cursor#45 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
+  //SEG184 [102] phi (byte*) print_char_cursor#45 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
     lda #<print_line_cursor
     sta print_char_cursor
     lda #>print_line_cursor
     sta print_char_cursor+1
-  //SEG181 [102] phi (word) makecharset::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
+  //SEG185 [102] phi (word) makecharset::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
     lda #0
     sta c
     lda #0
     sta c+1
     jmp b1
-  //SEG182 [102] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
+  //SEG186 [102] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
   b1_from_b9:
-  //SEG183 [102] phi (byte*) print_char_cursor#45 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
-  //SEG184 [102] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
+  //SEG187 [102] phi (byte*) print_char_cursor#45 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
+  //SEG188 [102] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
     jmp b1
-  //SEG185 makecharset::@1
+  //SEG189 makecharset::@1
   b1:
-  //SEG186 [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuz1=_lo_vwuz2 
+  //SEG190 [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuz1=_lo_vwuz2 
     lda c
     sta _2
-  //SEG187 [104] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuz2 
+  //SEG191 [104] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuz2 
     ldy _2
     lda SINTABLE,y
     sta s
-  //SEG188 [105] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
+  //SEG192 [105] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
   b2_from_b1:
-  //SEG189 [105] phi (byte) makecharset::i#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
+  //SEG193 [105] phi (byte) makecharset::i#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
     lda #0
     sta i
     jmp b2
-  //SEG190 [105] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
+  //SEG194 [105] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
   b2_from_b6:
-  //SEG191 [105] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
+  //SEG195 [105] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
     jmp b2
-  //SEG192 makecharset::@2
+  //SEG196 makecharset::@2
   b2:
-  //SEG193 [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
+  //SEG197 [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
   b3_from_b2:
-  //SEG194 [106] phi (byte) makecharset::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 
+  //SEG198 [106] phi (byte) makecharset::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 
     lda #0
     sta b
-  //SEG195 [106] phi (byte) makecharset::ii#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuz1=vbuc1 
+  //SEG199 [106] phi (byte) makecharset::ii#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuz1=vbuc1 
     lda #0
     sta ii
     jmp b3
-  //SEG196 [106] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
+  //SEG200 [106] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
   b3_from_b4:
-  //SEG197 [106] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
-  //SEG198 [106] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
+  //SEG201 [106] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
+  //SEG202 [106] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
     jmp b3
-  //SEG199 makecharset::@3
+  //SEG203 makecharset::@3
   b3:
-  //SEG200 [107] call sid_rnd 
+  //SEG204 [107] call sid_rnd 
     jsr sid_rnd
-  //SEG201 [108] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 
+  //SEG205 [108] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 
     lda sid_rnd.return
     sta sid_rnd.return_2
     jmp b11
-  //SEG202 makecharset::@11
+  //SEG206 makecharset::@11
   b11:
-  //SEG203 [109] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 
+  //SEG207 [109] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 
     lda sid_rnd.return_2
     sta _3
-  //SEG204 [110] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuz2_band_vbuc1 
+  //SEG208 [110] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuz2_band_vbuc1 
     lda #$ff
     and _3
     sta _4
-  //SEG205 [111] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
+  //SEG209 [111] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
     lda s
     cmp _4
     bcs b4_from_b11
     jmp b5
-  //SEG206 makecharset::@5
+  //SEG210 makecharset::@5
   b5:
-  //SEG207 [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 
+  //SEG211 [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 
     lda b
     ldy ii
     ora bittab,y
     sta b
-  //SEG208 [113] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
+  //SEG212 [113] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
   b4_from_b11:
   b4_from_b5:
-  //SEG209 [113] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
+  //SEG213 [113] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
     jmp b4
-  //SEG210 makecharset::@4
+  //SEG214 makecharset::@4
   b4:
-  //SEG211 [114] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 
+  //SEG215 [114] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 
     inc ii
-  //SEG212 [115] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG216 [115] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3 -- vbuz1_lt_vbuc1_then_la1 
     lda ii
     cmp #8
     bcc b3_from_b4
     jmp b6
-  //SEG213 makecharset::@6
+  //SEG217 makecharset::@6
   b6:
-  //SEG214 [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwuz1=vwuz2_rol_3 
+  //SEG218 [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwuz1=vwuz2_rol_3 
     lda c
     asl
     sta _8
@@ -3811,7 +3845,7 @@ makecharset: {
     rol _8+1
     asl _8
     rol _8+1
-  //SEG215 [117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz2_plus_vbuz3 
+  //SEG219 [117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz2_plus_vbuz3 
     lda i
     clc
     adc _8
@@ -3819,7 +3853,7 @@ makecharset: {
     lda #0
     adc _8+1
     sta _9+1
-  //SEG216 [118] *((const byte*) CHARSET#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 -- pbuc1_derefidx_vwuz1=vbuz2 
+  //SEG220 [118] *((const byte*) CHARSET#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 -- pbuc1_derefidx_vwuz1=vbuz2 
     lda b
     sta !v++1
     lda #<CHARSET
@@ -3833,43 +3867,43 @@ makecharset: {
     lda #0
   !a:
     sta CHARSET
-  //SEG217 [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
+  //SEG221 [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
     inc i
-  //SEG218 [120] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG222 [120] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
     lda i
     cmp #8
     bcc b2_from_b6
     jmp b7
-  //SEG219 makecharset::@7
+  //SEG223 makecharset::@7
   b7:
-  //SEG220 [121] (byte/word~) makecharset::$11 ← (word) makecharset::c#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vwuz2_band_vbuc1 
+  //SEG224 [121] (byte/word~) makecharset::$11 ← (word) makecharset::c#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vwuz2_band_vbuc1 
     lda c
     and #7
     sta _11
-  //SEG221 [122] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9 -- vbuz1_neq_0_then_la1 
+  //SEG225 [122] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9 -- vbuz1_neq_0_then_la1 
     lda _11
     cmp #0
     bne b9_from_b7
-  //SEG222 [123] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
+  //SEG226 [123] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
   b8_from_b7:
     jmp b8
-  //SEG223 makecharset::@8
+  //SEG227 makecharset::@8
   b8:
-  //SEG224 [124] call print_char 
+  //SEG228 [124] call print_char 
     jsr print_char
-  //SEG225 [125] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
+  //SEG229 [125] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
   b9_from_b7:
   b9_from_b8:
-  //SEG226 [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#45 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
+  //SEG230 [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#45 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
     jmp b9
-  //SEG227 makecharset::@9
+  //SEG231 makecharset::@9
   b9:
-  //SEG228 [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
+  //SEG232 [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
     inc c
     bne !+
     inc c+1
   !:
-  //SEG229 [127] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
+  //SEG233 [127] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
     lda c+1
     cmp #>$100
     bcc b1_from_b9
@@ -3879,74 +3913,74 @@ makecharset: {
     bcc b1_from_b9
   !:
     jmp breturn
-  //SEG230 makecharset::@return
+  //SEG234 makecharset::@return
   breturn:
-  //SEG231 [128] return 
+  //SEG235 [128] return 
     rts
     bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
 }
-//SEG232 print_char
+//SEG236 print_char
 // Print a single char
 print_char: {
     .const ch = '.'
-  //SEG233 [129] *((byte*) print_char_cursor#45) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
+  //SEG237 [129] *((byte*) print_char_cursor#45) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
     lda #ch
     ldy #0
     sta (print_char_cursor),y
-  //SEG234 [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#45 -- pbuz1=_inc_pbuz1 
+  //SEG238 [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#45 -- pbuz1=_inc_pbuz1 
     inc print_char_cursor
     bne !+
     inc print_char_cursor+1
   !:
     jmp breturn
-  //SEG235 print_char::@return
+  //SEG239 print_char::@return
   breturn:
-  //SEG236 [131] return 
+  //SEG240 [131] return 
     rts
 }
-//SEG237 sid_rnd
+//SEG241 sid_rnd
 // Get a random number from the SID voice 3,
 // Must be initialized with sid_rnd_init()
 sid_rnd: {
-    .label return = $3f
-    .label return_2 = $37
-  //SEG238 [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 
+    .label return = $40
+    .label return_2 = $38
+  //SEG242 [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 
     lda SID_VOICE3_OSC
     sta return
     jmp breturn
-  //SEG239 sid_rnd::@return
+  //SEG243 sid_rnd::@return
   breturn:
-  //SEG240 [133] return 
+  //SEG244 [133] return 
     rts
 }
-//SEG241 print_cls
+//SEG245 print_cls
 // Clear the screen. Also resets current line/char cursor.
 print_cls: {
-    .label sc = $16
-  //SEG242 [135] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
+    .label sc = $17
+  //SEG246 [135] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
   b1_from_print_cls:
-  //SEG243 [135] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
+  //SEG247 [135] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
     lda #<print_line_cursor
     sta sc
     lda #>print_line_cursor
     sta sc+1
     jmp b1
-  //SEG244 [135] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
+  //SEG248 [135] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
   b1_from_b1:
-  //SEG245 [135] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
+  //SEG249 [135] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
     jmp b1
-  //SEG246 print_cls::@1
+  //SEG250 print_cls::@1
   b1:
-  //SEG247 [136] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
+  //SEG251 [136] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
     lda #' '
     ldy #0
     sta (sc),y
-  //SEG248 [137] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
+  //SEG252 [137] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
     inc sc
     bne !+
     inc sc+1
   !:
-  //SEG249 [138] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
+  //SEG253 [138] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
     lda sc+1
     cmp #>print_line_cursor+$3e8
     bne b1_from_b1
@@ -3954,26 +3988,26 @@ print_cls: {
     cmp #<print_line_cursor+$3e8
     bne b1_from_b1
     jmp breturn
-  //SEG250 print_cls::@return
+  //SEG254 print_cls::@return
   breturn:
-  //SEG251 [139] return 
+  //SEG255 [139] return 
     rts
 }
-//SEG252 sid_rnd_init
+//SEG256 sid_rnd_init
 // Initialize SID voice 3 for random number generation
 sid_rnd_init: {
-  //SEG253 [140] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2 
+  //SEG257 [140] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2 
     lda #<$ffff
     sta SID_VOICE3_FREQ
     lda #>$ffff
     sta SID_VOICE3_FREQ+1
-  //SEG254 [141] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
+  //SEG258 [141] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
     lda #SID_CONTROL_NOISE
     sta SID_VOICE3_CONTROL
     jmp breturn
-  //SEG255 sid_rnd_init::@return
+  //SEG259 sid_rnd_init::@return
   breturn:
-  //SEG256 [142] return 
+  //SEG260 [142] return 
     rts
 }
 .pc = SINTABLE "SINTABLE"
@@ -3987,60 +4021,61 @@ Statement [7] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [ ] ( main:3 [ ]
 Statement [9] *((byte*) main::col#2) ← (const byte) BLACK#0 [ main::col#2 ] ( main:3 [ main::col#2 ] ) always clobbers reg byte a reg byte y 
 Statement [11] if((byte*) main::col#1!=(byte*)(const byte*) COLS#0+(word/signed word/dword/signed dword) $3e8+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::col#1 ] ( main:3 [ main::col#1 ] ) always clobbers reg byte a 
 Statement [15] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
-Statement [21] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#0) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#0 doplasma::c1b#0 doplasma::$0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#0 doplasma::c1b#0 doplasma::$0 ] ) always clobbers reg byte a 
+Statement [22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::i#2 doplasma::yval#0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::i#2 doplasma::yval#0 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ c1A#1 c1A#3 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ c1B#1 c1B#3 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ c2A#1 c2A#3 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ c2B#1 c2B#3 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
-Statement [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ]
-Statement [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a 
-Statement [26] (byte~) doplasma::$1 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#1) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$1 ] ) always clobbers reg byte a 
-Statement [27] (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((const byte[$19]) doplasma::ybuf#0+-(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) doplasma::i#2) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$3 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$3 ] ) always clobbers reg byte a 
-Statement [31] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:3::doplasma:18 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a 
-Statement [32] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a 
-Statement [36] (byte~) doplasma::$5 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$5 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$5 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ]
-Statement [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ) always clobbers reg byte a 
-Statement [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
-Statement [43] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a 
-Statement [45] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#0 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#0 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::i2#2 doplasma::i2#1 ]
-Statement [47] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ) always clobbers reg byte a 
-Statement [49] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ) always clobbers reg byte a 
-Statement [51] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ) always clobbers reg byte a 
-Statement [53] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ) always clobbers reg byte a 
-Statement [55] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ) always clobbers reg byte a 
-Statement [57] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ) always clobbers reg byte a 
-Statement [59] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ) always clobbers reg byte a 
-Statement [61] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ) always clobbers reg byte a 
-Statement [63] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ) always clobbers reg byte a 
-Statement [65] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ) always clobbers reg byte a 
-Statement [67] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ) always clobbers reg byte a 
-Statement [69] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ) always clobbers reg byte a 
-Statement [71] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ) always clobbers reg byte a 
-Statement [73] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ) always clobbers reg byte a 
-Statement [75] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ) always clobbers reg byte a 
-Statement [77] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ) always clobbers reg byte a 
-Statement [79] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ) always clobbers reg byte a 
-Statement [81] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ) always clobbers reg byte a 
-Statement [83] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ) always clobbers reg byte a 
-Statement [85] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ) always clobbers reg byte a 
-Statement [87] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ) always clobbers reg byte a 
-Statement [89] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ) always clobbers reg byte a 
-Statement [91] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ) always clobbers reg byte a 
-Statement [93] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::yprev#2 doplasma::yprev#3 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::i#2 doplasma::i#1 ]
+Statement [23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::yval#0 doplasma::$1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::yval#0 doplasma::$1 ] ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ doplasma::yval#0 ]
+Statement [25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 doplasma::yval#0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 doplasma::yval#0 ] ) always clobbers reg byte a 
+Statement [26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ) always clobbers reg byte a 
+Statement [29] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:3::doplasma:18 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a 
+Statement [30] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a 
+Statement [34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$3 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$3 ] ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::i1#2 doplasma::i1#1 ]
+Statement [36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ) always clobbers reg byte a 
+Statement [37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
+Statement [41] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a 
+Statement [44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ]
+Statement [46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ) always clobbers reg byte a 
+Statement [48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ) always clobbers reg byte a 
+Statement [50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ) always clobbers reg byte a 
+Statement [52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ) always clobbers reg byte a 
+Statement [54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ) always clobbers reg byte a 
+Statement [56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ) always clobbers reg byte a 
+Statement [58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ) always clobbers reg byte a 
+Statement [60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ) always clobbers reg byte a 
+Statement [62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ) always clobbers reg byte a 
+Statement [64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ) always clobbers reg byte a 
+Statement [66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ) always clobbers reg byte a 
+Statement [68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ) always clobbers reg byte a 
+Statement [70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ) always clobbers reg byte a 
+Statement [72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ) always clobbers reg byte a 
+Statement [74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ) always clobbers reg byte a 
+Statement [76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ) always clobbers reg byte a 
+Statement [78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ) always clobbers reg byte a 
+Statement [80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ) always clobbers reg byte a 
+Statement [82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ) always clobbers reg byte a 
+Statement [84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ) always clobbers reg byte a 
+Statement [86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ) always clobbers reg byte a 
+Statement [88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ) always clobbers reg byte a 
+Statement [90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ) always clobbers reg byte a 
+Statement [92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#50 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#50 ] ) always clobbers reg byte a 
 Statement [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#45 makecharset::$2 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::$2 ] ) always clobbers reg byte a 
 Statement [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:54 [ makecharset::s#0 ]
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ]
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:55 [ makecharset::s#0 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ]
 Statement [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
 Statement [117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$9 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$9 ] ) always clobbers reg byte a 
 Statement [118] *((const byte*) CHARSET#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 ] ) always clobbers reg byte a 
 Statement [121] (byte/word~) makecharset::$11 ← (word) makecharset::c#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ makecharset::c#2 print_char_cursor#45 makecharset::$11 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::$11 ] ) always clobbers reg byte a 
@@ -4055,42 +4090,41 @@ Statement [7] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [ ] ( main:3 [ ]
 Statement [9] *((byte*) main::col#2) ← (const byte) BLACK#0 [ main::col#2 ] ( main:3 [ main::col#2 ] ) always clobbers reg byte a reg byte y 
 Statement [11] if((byte*) main::col#1!=(byte*)(const byte*) COLS#0+(word/signed word/dword/signed dword) $3e8+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::col#1 ] ( main:3 [ main::col#1 ] ) always clobbers reg byte a 
 Statement [15] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
-Statement [21] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#0) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#0 doplasma::c1b#0 doplasma::$0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#0 doplasma::c1b#0 doplasma::$0 ] ) always clobbers reg byte a 
-Statement [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ) always clobbers reg byte a 
-Statement [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a 
-Statement [26] (byte~) doplasma::$1 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#1) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$1 ] ) always clobbers reg byte a 
-Statement [27] (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((const byte[$19]) doplasma::ybuf#0+-(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) doplasma::i#2) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$3 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::$3 ] ) always clobbers reg byte a 
-Statement [31] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:3::doplasma:18 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a 
-Statement [32] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a 
-Statement [36] (byte~) doplasma::$5 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$5 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$5 ] ) always clobbers reg byte a 
-Statement [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ) always clobbers reg byte a 
-Statement [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
-Statement [43] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a 
-Statement [45] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#0 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#0 ] ) always clobbers reg byte a 
-Statement [47] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ) always clobbers reg byte a 
-Statement [49] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ) always clobbers reg byte a 
-Statement [51] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ) always clobbers reg byte a 
-Statement [53] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ) always clobbers reg byte a 
-Statement [55] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ) always clobbers reg byte a 
-Statement [57] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ) always clobbers reg byte a 
-Statement [59] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ) always clobbers reg byte a 
-Statement [61] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ) always clobbers reg byte a 
-Statement [63] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ) always clobbers reg byte a 
-Statement [65] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ) always clobbers reg byte a 
-Statement [67] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ) always clobbers reg byte a 
-Statement [69] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ) always clobbers reg byte a 
-Statement [71] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ) always clobbers reg byte a 
-Statement [73] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ) always clobbers reg byte a 
-Statement [75] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ) always clobbers reg byte a 
-Statement [77] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ) always clobbers reg byte a 
-Statement [79] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ) always clobbers reg byte a 
-Statement [81] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ) always clobbers reg byte a 
-Statement [83] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ) always clobbers reg byte a 
-Statement [85] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ) always clobbers reg byte a 
-Statement [87] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ) always clobbers reg byte a 
-Statement [89] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ) always clobbers reg byte a 
-Statement [91] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ) always clobbers reg byte a 
-Statement [93] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ) always clobbers reg byte a 
+Statement [22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::i#2 doplasma::yval#0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::yprev#2 doplasma::i#2 doplasma::yval#0 ] ) always clobbers reg byte a 
+Statement [23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::yval#0 doplasma::$1 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::yval#0 doplasma::$1 ] ) always clobbers reg byte a 
+Statement [25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 doplasma::yval#0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 doplasma::yval#0 ] ) always clobbers reg byte a 
+Statement [26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ( main:3::doplasma:18 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 doplasma::yval#0 ] ) always clobbers reg byte a 
+Statement [29] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:3::doplasma:18 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a 
+Statement [30] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a 
+Statement [34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$3 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$3 ] ) always clobbers reg byte a 
+Statement [36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ) always clobbers reg byte a 
+Statement [37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:3::doplasma:18 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
+Statement [41] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a 
+Statement [44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#1 ] ) always clobbers reg byte a 
+Statement [46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#4 ] ) always clobbers reg byte a 
+Statement [48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#6 ] ) always clobbers reg byte a 
+Statement [50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#8 ] ) always clobbers reg byte a 
+Statement [52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#10 ] ) always clobbers reg byte a 
+Statement [54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#12 ] ) always clobbers reg byte a 
+Statement [56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#14 ] ) always clobbers reg byte a 
+Statement [58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#16 ] ) always clobbers reg byte a 
+Statement [60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#18 ] ) always clobbers reg byte a 
+Statement [62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#20 ] ) always clobbers reg byte a 
+Statement [64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#22 ] ) always clobbers reg byte a 
+Statement [66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#24 ] ) always clobbers reg byte a 
+Statement [68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#26 ] ) always clobbers reg byte a 
+Statement [70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#28 ] ) always clobbers reg byte a 
+Statement [72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#30 ] ) always clobbers reg byte a 
+Statement [74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#32 ] ) always clobbers reg byte a 
+Statement [76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#34 ] ) always clobbers reg byte a 
+Statement [78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#36 ] ) always clobbers reg byte a 
+Statement [80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#38 ] ) always clobbers reg byte a 
+Statement [82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#40 ] ) always clobbers reg byte a 
+Statement [84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#42 ] ) always clobbers reg byte a 
+Statement [86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#44 ] ) always clobbers reg byte a 
+Statement [88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#46 ] ) always clobbers reg byte a 
+Statement [90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#48 ] ) always clobbers reg byte a 
+Statement [92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#50 ] ( main:3::doplasma:18 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#2 doplasma::val#50 ] ) always clobbers reg byte a 
 Statement [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#45 makecharset::$2 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::$2 ] ) always clobbers reg byte a 
 Statement [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a 
 Statement [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ( main:3::makecharset:13 [ makecharset::c#2 print_char_cursor#45 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ) always clobbers reg byte a 
@@ -4110,21 +4144,21 @@ Potential registers zp ZP_BYTE:6 [ c2A#1 c2A#3 ] : zp ZP_BYTE:6 , reg byte x , r
 Potential registers zp ZP_BYTE:7 [ c2B#1 c2B#3 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:14 [ doplasma::i2#2 doplasma::i2#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:15 [ makecharset::c#2 makecharset::c#1 ] : zp ZP_WORD:15 , 
-Potential registers zp ZP_WORD:17 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ] : zp ZP_WORD:17 , 
-Potential registers zp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ] : zp ZP_BYTE:19 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:22 , 
-Potential registers zp ZP_BYTE:24 [ doplasma::$0 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:25 [ doplasma::$1 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:26 [ doplasma::$3 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:27 [ doplasma::$5 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:10 [ doplasma::yprev#2 doplasma::yprev#3 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:11 [ doplasma::i#2 doplasma::i#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:14 [ doplasma::i1#2 doplasma::i1#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] : zp ZP_WORD:16 , 
+Potential registers zp ZP_WORD:18 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ] : zp ZP_WORD:18 , 
+Potential registers zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:23 , 
+Potential registers zp ZP_BYTE:25 [ doplasma::yval#0 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:26 [ doplasma::$1 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:27 [ doplasma::$3 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:28 [ doplasma::val#0 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:29 [ doplasma::val#1 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:30 [ doplasma::val#4 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , 
@@ -4150,140 +4184,146 @@ Potential registers zp ZP_BYTE:49 [ doplasma::val#42 ] : zp ZP_BYTE:49 , reg byt
 Potential registers zp ZP_BYTE:50 [ doplasma::val#44 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:51 [ doplasma::val#46 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:52 [ doplasma::val#48 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:53 [ makecharset::$2 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:54 [ makecharset::s#0 ] : zp ZP_BYTE:54 , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:55 [ sid_rnd::return#2 ] : zp ZP_BYTE:55 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:56 [ makecharset::$3 ] : zp ZP_BYTE:56 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:57 [ makecharset::$4 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:58 [ makecharset::$8 ] : zp ZP_WORD:58 , 
-Potential registers zp ZP_WORD:60 [ makecharset::$9 ] : zp ZP_WORD:60 , 
-Potential registers zp ZP_BYTE:62 [ makecharset::$11 ] : zp ZP_BYTE:62 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:63 [ sid_rnd::return#0 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:53 [ doplasma::val#50 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:54 [ makecharset::$2 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:55 [ makecharset::s#0 ] : zp ZP_BYTE:55 , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:56 [ sid_rnd::return#2 ] : zp ZP_BYTE:56 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:57 [ makecharset::$3 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:58 [ makecharset::$4 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:59 [ makecharset::$8 ] : zp ZP_WORD:59 , 
+Potential registers zp ZP_WORD:61 [ makecharset::$9 ] : zp ZP_WORD:61 , 
+Potential registers zp ZP_BYTE:63 [ makecharset::$11 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:64 [ sid_rnd::return#0 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , 
 
 REGISTER UPLIFT SCOPES
-Uplift Scope [makecharset] 3,123.3: zp ZP_BYTE:21 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] 2,002: zp ZP_BYTE:56 [ makecharset::$3 ] 2,002: zp ZP_BYTE:57 [ makecharset::$4 ] 1,876.88: zp ZP_BYTE:20 [ makecharset::ii#2 makecharset::ii#1 ] 202: zp ZP_WORD:58 [ makecharset::$8 ] 202: zp ZP_WORD:60 [ makecharset::$9 ] 173.14: zp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ] 59.53: zp ZP_BYTE:54 [ makecharset::s#0 ] 22.54: zp ZP_WORD:15 [ makecharset::c#2 makecharset::c#1 ] 22: zp ZP_BYTE:53 [ makecharset::$2 ] 22: zp ZP_BYTE:62 [ makecharset::$11 ] 
-Uplift Scope [doplasma] 248.79: zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 218.83: zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] 212.1: zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] 206.95: zp ZP_BYTE:14 [ doplasma::i2#2 doplasma::i2#1 ] 202: zp ZP_BYTE:25 [ doplasma::$1 ] 202: zp ZP_BYTE:26 [ doplasma::$3 ] 202: zp ZP_BYTE:27 [ doplasma::$5 ] 202: zp ZP_BYTE:52 [ doplasma::val#48 ] 154.5: zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 154.17: zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] 151.5: zp ZP_BYTE:28 [ doplasma::val#0 ] 151.5: zp ZP_BYTE:29 [ doplasma::val#1 ] 151.5: zp ZP_BYTE:30 [ doplasma::val#4 ] 151.5: zp ZP_BYTE:31 [ doplasma::val#6 ] 151.5: zp ZP_BYTE:32 [ doplasma::val#8 ] 151.5: zp ZP_BYTE:33 [ doplasma::val#10 ] 151.5: zp ZP_BYTE:34 [ doplasma::val#12 ] 151.5: zp ZP_BYTE:35 [ doplasma::val#14 ] 151.5: zp ZP_BYTE:36 [ doplasma::val#16 ] 151.5: zp ZP_BYTE:37 [ doplasma::val#18 ] 151.5: zp ZP_BYTE:38 [ doplasma::val#20 ] 151.5: zp ZP_BYTE:39 [ doplasma::val#22 ] 151.5: zp ZP_BYTE:40 [ doplasma::val#24 ] 151.5: zp ZP_BYTE:41 [ doplasma::val#26 ] 151.5: zp ZP_BYTE:42 [ doplasma::val#28 ] 151.5: zp ZP_BYTE:43 [ doplasma::val#30 ] 151.5: zp ZP_BYTE:44 [ doplasma::val#32 ] 151.5: zp ZP_BYTE:45 [ doplasma::val#34 ] 151.5: zp ZP_BYTE:46 [ doplasma::val#36 ] 151.5: zp ZP_BYTE:47 [ doplasma::val#38 ] 151.5: zp ZP_BYTE:48 [ doplasma::val#40 ] 151.5: zp ZP_BYTE:49 [ doplasma::val#42 ] 151.5: zp ZP_BYTE:50 [ doplasma::val#44 ] 151.5: zp ZP_BYTE:51 [ doplasma::val#46 ] 147.58: zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 4: zp ZP_BYTE:24 [ doplasma::$0 ] 
-Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:55 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:63 [ sid_rnd::return#0 ] 
-Uplift Scope [print_cls] 33: zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] 
+Uplift Scope [makecharset] 3,123.3: zp ZP_BYTE:22 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] 2,002: zp ZP_BYTE:57 [ makecharset::$3 ] 2,002: zp ZP_BYTE:58 [ makecharset::$4 ] 1,876.88: zp ZP_BYTE:21 [ makecharset::ii#2 makecharset::ii#1 ] 202: zp ZP_WORD:59 [ makecharset::$8 ] 202: zp ZP_WORD:61 [ makecharset::$9 ] 173.14: zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ] 59.53: zp ZP_BYTE:55 [ makecharset::s#0 ] 22.54: zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] 22: zp ZP_BYTE:54 [ makecharset::$2 ] 22: zp ZP_BYTE:63 [ makecharset::$11 ] 
+Uplift Scope [doplasma] 303: zp ZP_BYTE:10 [ doplasma::yprev#2 doplasma::yprev#3 ] 212.1: zp ZP_BYTE:14 [ doplasma::i1#2 doplasma::i1#1 ] 205.88: zp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ] 202: zp ZP_BYTE:26 [ doplasma::$1 ] 202: zp ZP_BYTE:27 [ doplasma::$3 ] 202: zp ZP_BYTE:28 [ doplasma::val#0 ] 202: zp ZP_BYTE:53 [ doplasma::val#50 ] 154.17: zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] 151.5: zp ZP_BYTE:11 [ doplasma::i#2 doplasma::i#1 ] 151.5: zp ZP_BYTE:29 [ doplasma::val#1 ] 151.5: zp ZP_BYTE:30 [ doplasma::val#4 ] 151.5: zp ZP_BYTE:31 [ doplasma::val#6 ] 151.5: zp ZP_BYTE:32 [ doplasma::val#8 ] 151.5: zp ZP_BYTE:33 [ doplasma::val#10 ] 151.5: zp ZP_BYTE:34 [ doplasma::val#12 ] 151.5: zp ZP_BYTE:35 [ doplasma::val#14 ] 151.5: zp ZP_BYTE:36 [ doplasma::val#16 ] 151.5: zp ZP_BYTE:37 [ doplasma::val#18 ] 151.5: zp ZP_BYTE:38 [ doplasma::val#20 ] 151.5: zp ZP_BYTE:39 [ doplasma::val#22 ] 151.5: zp ZP_BYTE:40 [ doplasma::val#24 ] 151.5: zp ZP_BYTE:41 [ doplasma::val#26 ] 151.5: zp ZP_BYTE:42 [ doplasma::val#28 ] 151.5: zp ZP_BYTE:43 [ doplasma::val#30 ] 151.5: zp ZP_BYTE:44 [ doplasma::val#32 ] 151.5: zp ZP_BYTE:45 [ doplasma::val#34 ] 151.5: zp ZP_BYTE:46 [ doplasma::val#36 ] 151.5: zp ZP_BYTE:47 [ doplasma::val#38 ] 151.5: zp ZP_BYTE:48 [ doplasma::val#40 ] 151.5: zp ZP_BYTE:49 [ doplasma::val#42 ] 151.5: zp ZP_BYTE:50 [ doplasma::val#44 ] 151.5: zp ZP_BYTE:51 [ doplasma::val#46 ] 151.5: zp ZP_BYTE:52 [ doplasma::val#48 ] 147.58: zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 118.65: zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 115.5: zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 43.29: zp ZP_BYTE:25 [ doplasma::yval#0 ] 
+Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:56 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:64 [ sid_rnd::return#0 ] 
+Uplift Scope [print_cls] 33: zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] 
 Uplift Scope [main] 33: zp ZP_WORD:2 [ main::col#2 main::col#1 ] 
-Uplift Scope [] 16.46: zp ZP_WORD:17 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ] 1.26: zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 1.19: zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 0.83: zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 0.81: zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
+Uplift Scope [] 16.46: zp ZP_WORD:18 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ] 1.34: zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 1.26: zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 0.85: zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 0.83: zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
 Uplift Scope [print_char] 
 Uplift Scope [sid_rnd_init] 
 
-Uplifting [makecharset] best 164232 combination reg byte y [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] reg byte a [ makecharset::$3 ] zp ZP_BYTE:57 [ makecharset::$4 ] reg byte x [ makecharset::ii#2 makecharset::ii#1 ] zp ZP_WORD:58 [ makecharset::$8 ] zp ZP_WORD:60 [ makecharset::$9 ] zp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ] zp ZP_BYTE:54 [ makecharset::s#0 ] zp ZP_WORD:15 [ makecharset::c#2 makecharset::c#1 ] zp ZP_BYTE:53 [ makecharset::$2 ] zp ZP_BYTE:62 [ makecharset::$11 ] 
+Uplifting [makecharset] best 165755 combination reg byte y [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] reg byte a [ makecharset::$3 ] zp ZP_BYTE:58 [ makecharset::$4 ] reg byte x [ makecharset::ii#2 makecharset::ii#1 ] zp ZP_WORD:59 [ makecharset::$8 ] zp ZP_WORD:61 [ makecharset::$9 ] zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ] zp ZP_BYTE:55 [ makecharset::s#0 ] zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] zp ZP_BYTE:54 [ makecharset::$2 ] zp ZP_BYTE:63 [ makecharset::$11 ] 
 Limited combination testing to 100 combinations of 20736 possible.
-Uplifting [sid_rnd] best 155229 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] 
-Uplifting [print_cls] best 155229 combination zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] 
-Uplifting [main] best 155229 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] 
-Uplifting [] best 155229 combination zp ZP_WORD:17 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#1 c1A#3 ] zp ZP_BYTE:5 [ c1B#1 c1B#3 ] zp ZP_BYTE:6 [ c2A#1 c2A#3 ] zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
-Uplifting [print_char] best 155229 combination 
-Uplifting [sid_rnd_init] best 155229 combination 
-Attempting to uplift remaining variables inzp ZP_BYTE:57 [ makecharset::$4 ]
-Uplifting [makecharset] best 155229 combination zp ZP_BYTE:57 [ makecharset::$4 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
-Uplifting [doplasma] best 155229 combination zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ]
-Uplifting [doplasma] best 155229 combination zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ]
-Uplifting [doplasma] best 155229 combination zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:14 [ doplasma::i2#2 doplasma::i2#1 ]
-Uplifting [doplasma] best 146529 combination reg byte x [ doplasma::i2#2 doplasma::i2#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:25 [ doplasma::$1 ]
-Uplifting [doplasma] best 145929 combination reg byte a [ doplasma::$1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:26 [ doplasma::$3 ]
-Uplifting [doplasma] best 145329 combination reg byte a [ doplasma::$3 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:27 [ doplasma::$5 ]
-Uplifting [doplasma] best 144729 combination reg byte a [ doplasma::$5 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:52 [ doplasma::val#48 ]
-Uplifting [doplasma] best 144129 combination reg byte a [ doplasma::val#48 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ]
-Uplifting [makecharset] best 144129 combination zp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
-Uplifting [doplasma] best 144129 combination zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
-Uplifting [doplasma] best 144129 combination zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] 
+Uplifting [sid_rnd] best 156752 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] 
+Uplifting [print_cls] best 156752 combination zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] 
+Uplifting [main] best 156752 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] 
+Uplifting [] best 156752 combination zp ZP_WORD:18 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#1 c1A#3 ] zp ZP_BYTE:5 [ c1B#1 c1B#3 ] zp ZP_BYTE:6 [ c2A#1 c2A#3 ] zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
+Uplifting [print_char] best 156752 combination 
+Uplifting [sid_rnd_init] best 156752 combination 
+Attempting to uplift remaining variables inzp ZP_BYTE:58 [ makecharset::$4 ]
+Uplifting [makecharset] best 156752 combination zp ZP_BYTE:58 [ makecharset::$4 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::yprev#2 doplasma::yprev#3 ]
+Uplifting [doplasma] best 156252 combination reg byte x [ doplasma::yprev#2 doplasma::yprev#3 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:14 [ doplasma::i1#2 doplasma::i1#1 ]
+Uplifting [doplasma] best 156252 combination zp ZP_BYTE:14 [ doplasma::i1#2 doplasma::i1#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:15 [ doplasma::i2#2 doplasma::i2#1 ]
+Uplifting [doplasma] best 147552 combination reg byte x [ doplasma::i2#2 doplasma::i2#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:26 [ doplasma::$1 ]
+Uplifting [doplasma] best 146952 combination reg byte a [ doplasma::$1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:27 [ doplasma::$3 ]
+Uplifting [doplasma] best 146352 combination reg byte a [ doplasma::$3 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:28 [ doplasma::val#0 ]
-Uplifting [doplasma] best 143229 combination reg byte a [ doplasma::val#0 ] 
+Uplifting [doplasma] best 145752 combination reg byte a [ doplasma::val#0 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:53 [ doplasma::val#50 ]
+Uplifting [doplasma] best 145152 combination reg byte a [ doplasma::val#50 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ]
+Uplifting [makecharset] best 145152 combination zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
+Uplifting [doplasma] best 145152 combination zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::i#2 doplasma::i#1 ]
+Uplifting [doplasma] best 145152 combination zp ZP_BYTE:11 [ doplasma::i#2 doplasma::i#1 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:29 [ doplasma::val#1 ]
-Uplifting [doplasma] best 142329 combination reg byte a [ doplasma::val#1 ] 
+Uplifting [doplasma] best 144252 combination reg byte a [ doplasma::val#1 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:30 [ doplasma::val#4 ]
-Uplifting [doplasma] best 141429 combination reg byte a [ doplasma::val#4 ] 
+Uplifting [doplasma] best 143352 combination reg byte a [ doplasma::val#4 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:31 [ doplasma::val#6 ]
-Uplifting [doplasma] best 140529 combination reg byte a [ doplasma::val#6 ] 
+Uplifting [doplasma] best 142452 combination reg byte a [ doplasma::val#6 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:32 [ doplasma::val#8 ]
-Uplifting [doplasma] best 139629 combination reg byte a [ doplasma::val#8 ] 
+Uplifting [doplasma] best 141552 combination reg byte a [ doplasma::val#8 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:33 [ doplasma::val#10 ]
-Uplifting [doplasma] best 138729 combination reg byte a [ doplasma::val#10 ] 
+Uplifting [doplasma] best 140652 combination reg byte a [ doplasma::val#10 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:34 [ doplasma::val#12 ]
-Uplifting [doplasma] best 137829 combination reg byte a [ doplasma::val#12 ] 
+Uplifting [doplasma] best 139752 combination reg byte a [ doplasma::val#12 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:35 [ doplasma::val#14 ]
-Uplifting [doplasma] best 136929 combination reg byte a [ doplasma::val#14 ] 
+Uplifting [doplasma] best 138852 combination reg byte a [ doplasma::val#14 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:36 [ doplasma::val#16 ]
-Uplifting [doplasma] best 136029 combination reg byte a [ doplasma::val#16 ] 
+Uplifting [doplasma] best 137952 combination reg byte a [ doplasma::val#16 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:37 [ doplasma::val#18 ]
-Uplifting [doplasma] best 135129 combination reg byte a [ doplasma::val#18 ] 
+Uplifting [doplasma] best 137052 combination reg byte a [ doplasma::val#18 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:38 [ doplasma::val#20 ]
-Uplifting [doplasma] best 134229 combination reg byte a [ doplasma::val#20 ] 
+Uplifting [doplasma] best 136152 combination reg byte a [ doplasma::val#20 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:39 [ doplasma::val#22 ]
-Uplifting [doplasma] best 133329 combination reg byte a [ doplasma::val#22 ] 
+Uplifting [doplasma] best 135252 combination reg byte a [ doplasma::val#22 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:40 [ doplasma::val#24 ]
-Uplifting [doplasma] best 132429 combination reg byte a [ doplasma::val#24 ] 
+Uplifting [doplasma] best 134352 combination reg byte a [ doplasma::val#24 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:41 [ doplasma::val#26 ]
-Uplifting [doplasma] best 131529 combination reg byte a [ doplasma::val#26 ] 
+Uplifting [doplasma] best 133452 combination reg byte a [ doplasma::val#26 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:42 [ doplasma::val#28 ]
-Uplifting [doplasma] best 130629 combination reg byte a [ doplasma::val#28 ] 
+Uplifting [doplasma] best 132552 combination reg byte a [ doplasma::val#28 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:43 [ doplasma::val#30 ]
-Uplifting [doplasma] best 129729 combination reg byte a [ doplasma::val#30 ] 
+Uplifting [doplasma] best 131652 combination reg byte a [ doplasma::val#30 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:44 [ doplasma::val#32 ]
-Uplifting [doplasma] best 128829 combination reg byte a [ doplasma::val#32 ] 
+Uplifting [doplasma] best 130752 combination reg byte a [ doplasma::val#32 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:45 [ doplasma::val#34 ]
-Uplifting [doplasma] best 127929 combination reg byte a [ doplasma::val#34 ] 
+Uplifting [doplasma] best 129852 combination reg byte a [ doplasma::val#34 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:46 [ doplasma::val#36 ]
-Uplifting [doplasma] best 127029 combination reg byte a [ doplasma::val#36 ] 
+Uplifting [doplasma] best 128952 combination reg byte a [ doplasma::val#36 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:47 [ doplasma::val#38 ]
-Uplifting [doplasma] best 126129 combination reg byte a [ doplasma::val#38 ] 
+Uplifting [doplasma] best 128052 combination reg byte a [ doplasma::val#38 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:48 [ doplasma::val#40 ]
-Uplifting [doplasma] best 125229 combination reg byte a [ doplasma::val#40 ] 
+Uplifting [doplasma] best 127152 combination reg byte a [ doplasma::val#40 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:49 [ doplasma::val#42 ]
-Uplifting [doplasma] best 124329 combination reg byte a [ doplasma::val#42 ] 
+Uplifting [doplasma] best 126252 combination reg byte a [ doplasma::val#42 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:50 [ doplasma::val#44 ]
-Uplifting [doplasma] best 123429 combination reg byte a [ doplasma::val#44 ] 
+Uplifting [doplasma] best 125352 combination reg byte a [ doplasma::val#44 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:51 [ doplasma::val#46 ]
-Uplifting [doplasma] best 122529 combination reg byte a [ doplasma::val#46 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
-Uplifting [doplasma] best 122529 combination zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:54 [ makecharset::s#0 ]
-Uplifting [makecharset] best 122529 combination zp ZP_BYTE:54 [ makecharset::s#0 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:53 [ makecharset::$2 ]
-Uplifting [makecharset] best 122489 combination reg byte a [ makecharset::$2 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:62 [ makecharset::$11 ]
-Uplifting [makecharset] best 122429 combination reg byte a [ makecharset::$11 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:24 [ doplasma::$0 ]
-Uplifting [doplasma] best 122423 combination reg byte a [ doplasma::$0 ] 
+Uplifting [doplasma] best 124452 combination reg byte a [ doplasma::val#46 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:52 [ doplasma::val#48 ]
+Uplifting [doplasma] best 123552 combination reg byte a [ doplasma::val#48 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
+Uplifting [doplasma] best 123552 combination zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
+Uplifting [doplasma] best 123552 combination zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
+Uplifting [doplasma] best 123552 combination zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:55 [ makecharset::s#0 ]
+Uplifting [makecharset] best 123552 combination zp ZP_BYTE:55 [ makecharset::s#0 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:25 [ doplasma::yval#0 ]
+Uplifting [doplasma] best 123552 combination zp ZP_BYTE:25 [ doplasma::yval#0 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:54 [ makecharset::$2 ]
+Uplifting [makecharset] best 123512 combination reg byte a [ makecharset::$2 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:63 [ makecharset::$11 ]
+Uplifting [makecharset] best 123452 combination reg byte a [ makecharset::$11 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:4 [ c1A#1 c1A#3 ]
-Uplifting [] best 122423 combination zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 
+Uplifting [] best 123452 combination zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:5 [ c1B#1 c1B#3 ]
-Uplifting [] best 122423 combination zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 
+Uplifting [] best 123452 combination zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:6 [ c2A#1 c2A#3 ]
-Uplifting [] best 122423 combination zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 
+Uplifting [] best 123452 combination zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:7 [ c2B#1 c2B#3 ]
-Uplifting [] best 122423 combination zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
-Coalescing zero page register with common assignment [ zp ZP_WORD:58 [ makecharset::$8 ] ] with [ zp ZP_WORD:60 [ makecharset::$9 ] ] - score: 1
-Coalescing zero page register [ zp ZP_WORD:2 [ main::col#2 main::col#1 ] ] with [ zp ZP_WORD:15 [ makecharset::c#2 makecharset::c#1 ] ]
-Coalescing zero page register [ zp ZP_WORD:2 [ main::col#2 main::col#1 makecharset::c#2 makecharset::c#1 ] ] with [ zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] ]
-Coalescing zero page register [ zp ZP_BYTE:4 [ c1A#1 c1A#3 ] ] with [ zp ZP_BYTE:19 [ makecharset::i#7 makecharset::i#1 ] ]
-Coalescing zero page register [ zp ZP_BYTE:5 [ c1B#1 c1B#3 ] ] with [ zp ZP_BYTE:54 [ makecharset::s#0 ] ]
-Coalescing zero page register [ zp ZP_BYTE:6 [ c2A#1 c2A#3 ] ] with [ zp ZP_BYTE:57 [ makecharset::$4 ] ]
-Coalescing zero page register [ zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] ] with [ zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] ]
-Coalescing zero page register [ zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] ] with [ zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] ]
-Coalescing zero page register [ zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] ] with [ zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] ]
-Allocated (was zp ZP_WORD:17) zp ZP_WORD:11 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ]
-Allocated (was zp ZP_WORD:58) zp ZP_WORD:13 [ makecharset::$8 makecharset::$9 ]
+Uplifting [] best 123452 combination zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
+Coalescing zero page register with common assignment [ zp ZP_WORD:59 [ makecharset::$8 ] ] with [ zp ZP_WORD:61 [ makecharset::$9 ] ] - score: 1
+Coalescing zero page register [ zp ZP_WORD:2 [ main::col#2 main::col#1 ] ] with [ zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ] ]
+Coalescing zero page register [ zp ZP_WORD:2 [ main::col#2 main::col#1 makecharset::c#2 makecharset::c#1 ] ] with [ zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] ]
+Coalescing zero page register [ zp ZP_BYTE:4 [ c1A#1 c1A#3 ] ] with [ zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ] ]
+Coalescing zero page register [ zp ZP_BYTE:5 [ c1B#1 c1B#3 ] ] with [ zp ZP_BYTE:55 [ makecharset::s#0 ] ]
+Coalescing zero page register [ zp ZP_BYTE:6 [ c2A#1 c2A#3 ] ] with [ zp ZP_BYTE:58 [ makecharset::$4 ] ]
+Coalescing zero page register [ zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] ] with [ zp ZP_BYTE:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] ]
+Coalescing zero page register [ zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] ] with [ zp ZP_BYTE:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] ]
+Coalescing zero page register [ zp ZP_BYTE:11 [ doplasma::i#2 doplasma::i#1 ] ] with [ zp ZP_BYTE:14 [ doplasma::i1#2 doplasma::i1#1 ] ]
+Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 doplasma::i1#2 doplasma::i1#1 ]
+Allocated (was zp ZP_WORD:18) zp ZP_WORD:11 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ]
+Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:13 [ doplasma::yval#0 ]
+Allocated (was zp ZP_WORD:59) zp ZP_WORD:14 [ makecharset::$8 makecharset::$9 ]
 
 ASSEMBLER BEFORE OPTIMIZATION
 //SEG0 File Comments
 // A KickC version of the plasma routine from the CC65 samples
-// This version has an unrolled inner loop to reach ~50FPS
+// This version has an unrolled inner loop to reach 50+FPS
+// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
 // (w)2001 by groepaz/hitmen
 // Cleanup and porting to CC65 by Ullrich von Bassewitz.
 // Ported to KickC by Jesper Gravgaard.
@@ -4432,6 +4472,7 @@ main: {
 doplasma: {
     .label c1a = 8
     .label c1b = 9
+    .label yval = $d
     .label i = $a
     .label c2a = 8
     .label c2b = 9
@@ -4442,462 +4483,468 @@ doplasma: {
   //SEG47 [20] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 
     lda c1B
     sta c1b
-  //SEG48 [21] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#0) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
+  //SEG48 [21] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
+  b1_from_doplasma:
+  //SEG49 [21] phi (byte) doplasma::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta i
+  //SEG50 [21] phi (byte) doplasma::yprev#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma->doplasma::@1#1] -- vbuxx=vbuc1 
+    ldx #0
+  //SEG51 [21] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
+  //SEG52 [21] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#3] -- register_copy 
+    jmp b1
+  // Calculate ybuff as a bunch of differences
+  //SEG53 doplasma::@1
+  b1:
+  //SEG54 [22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
     ldy c1a
     lda SINTABLE,y
     ldy c1b
     clc
     adc SINTABLE,y
-  //SEG49 [22] *((const byte[$19]) doplasma::ybuf#0) ← (byte~) doplasma::$0 -- _deref_pbuc1=vbuaa 
-    sta ybuf
-  //SEG50 [23] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
-  b1_from_doplasma:
-  //SEG51 [23] phi (byte) doplasma::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
-    lda #1
-    sta i
-  //SEG52 [23] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy 
-  //SEG53 [23] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
-    jmp b1
-  // Calculate ybuff as a bunch of differences
-  //SEG54 [23] phi from doplasma::@1 to doplasma::@1 [phi:doplasma::@1->doplasma::@1]
-  b1_from_b1:
-  //SEG55 [23] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@1#0] -- register_copy 
-  //SEG56 [23] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@1#1] -- register_copy 
-  //SEG57 [23] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@1#2] -- register_copy 
-    jmp b1
-  //SEG58 doplasma::@1
-  b1:
-  //SEG59 [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1 
+    sta yval
+  //SEG55 [23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 -- vbuaa=vbuz1_minus_vbuxx 
+    txa
+    eor #$ff
+    sec
+    adc yval
+  //SEG56 [24] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa 
+    ldy i
+    sta ybuf,y
+  //SEG57 [25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1a
     axs #-[4]
     stx c1a
-  //SEG60 [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG58 [26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1b
     axs #-[9]
     stx c1b
-  //SEG61 [26] (byte~) doplasma::$1 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#1) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
-    ldy c1a
-    lda SINTABLE,y
-    ldy c1b
-    clc
-    adc SINTABLE,y
-  //SEG62 [27] (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((const byte[$19]) doplasma::ybuf#0+-(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) doplasma::i#2) -- vbuaa=vbuaa_minus_pbuc1_derefidx_vbuz1 
-    ldy i
-    sec
-    sbc ybuf+-1,y
-  //SEG63 [28] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa 
-    ldy i
-    sta ybuf,y
-  //SEG64 [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
+  //SEG59 [27] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
     inc i
-  //SEG65 [30] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@1 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG60 [28] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 
     lda i
     cmp #$19
-    bcc b1_from_b1
+    bcc b8
     jmp b2
-  //SEG66 doplasma::@2
+  //SEG61 doplasma::@2
   b2:
-  //SEG67 [31] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG62 [29] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1A
     axs #-[3]
     stx c1A
-  //SEG68 [32] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz1_minus_vbuc1 
+  //SEG63 [30] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz1_minus_vbuc1 
     lax c1B
     axs #5
     stx c1B
-  //SEG69 [33] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
+  //SEG64 [31] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
     lda c2A
     sta c2a
-  //SEG70 [34] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
+  //SEG65 [32] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
     lda c2B
     sta c2b
-  //SEG71 [35] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
+  //SEG66 [33] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
   b3_from_b2:
-  //SEG72 [35] phi (byte) doplasma::i1#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
+  //SEG67 [33] phi (byte) doplasma::i1#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
     lda #0
     sta i1
-  //SEG73 [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
-  //SEG74 [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
+  //SEG68 [33] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
+  //SEG69 [33] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
     jmp b3
-  //SEG75 [35] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
+  //SEG70 [33] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
   b3_from_b3:
-  //SEG76 [35] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
-  //SEG77 [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
-  //SEG78 [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
+  //SEG71 [33] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
+  //SEG72 [33] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
+  //SEG73 [33] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
     jmp b3
-  //SEG79 doplasma::@3
+  //SEG74 doplasma::@3
   b3:
-  //SEG80 [36] (byte~) doplasma::$5 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
+  //SEG75 [34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
     ldy c2a
     lda SINTABLE,y
     ldy c2b
     clc
     adc SINTABLE,y
-  //SEG81 [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$5 -- pbuc1_derefidx_vbuz1=vbuaa 
+  //SEG76 [35] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa 
     ldy i1
     sta xbuf,y
-  //SEG82 [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG77 [36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
     lax c2a
     axs #-[3]
     stx c2a
-  //SEG83 [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG78 [37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz1_plus_vbuc1 
     lax c2b
     axs #-[7]
     stx c2b
-  //SEG84 [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
+  //SEG79 [38] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
     inc i1
-  //SEG85 [41] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG80 [39] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
     lda i1
     cmp #$28
     bcc b3_from_b3
     jmp b4
-  //SEG86 doplasma::@4
+  //SEG81 doplasma::@4
   b4:
-  //SEG87 [42] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2 
+  //SEG82 [40] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2 
     lda c2A
     clc
     adc #2
     sta c2A
-  //SEG88 [43] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_minus_vbuc1 
+  //SEG83 [41] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_minus_vbuc1 
     lax c2B
     axs #3
     stx c2B
-  //SEG89 [44] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
+  //SEG84 [42] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
   b5_from_b4:
-  //SEG90 [44] phi (byte) doplasma::i2#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@4->doplasma::@5#0] -- vbuxx=vbuc1 
+  //SEG85 [42] phi (byte) doplasma::i2#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@4->doplasma::@5#0] -- vbuxx=vbuc1 
     ldx #0
     jmp b5
-  //SEG91 [44] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
+  //SEG86 [42] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
   b5_from_b7:
-  //SEG92 [44] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
+  //SEG87 [42] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
     jmp b5
-  //SEG93 doplasma::@5
+  //SEG88 doplasma::@5
   b5:
-  //SEG94 [45] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=pbuc1_derefidx_vbuxx_plus__deref_pbuc2 
+  //SEG89 [43] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) -- vbuaa=pbuc1_derefidx_vbuxx 
+    // Find the first value on the row
     lda xbuf,x
-    clc
-    adc ybuf
-  //SEG95 [46] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#0 -- pbuc1_derefidx_vbuxx=vbuaa 
-    sta SCREEN1,x
     jmp b6
   // Calculate the next values as sums of diffs
   // Use experimental loop unrolling to increase the speed
-  //SEG96 doplasma::@6
+  //SEG90 doplasma::@6
   b6:
-  //SEG97 [47] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG91 [44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    clc
+    adc ybuf
+  //SEG92 [45] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa 
+    sta SCREEN1,x
+    jmp b6_1
+  //SEG93 doplasma::@6_1
+  b6_1:
+  //SEG94 [46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+1
-  //SEG98 [48] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG95 [47] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+1*$28,x
-    jmp b6_1
-  //SEG99 doplasma::@6_1
-  b6_1:
-  //SEG100 [49] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_2
+  //SEG96 doplasma::@6_2
+  b6_2:
+  //SEG97 [48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+2
-  //SEG101 [50] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG98 [49] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+2*$28,x
-    jmp b6_2
-  //SEG102 doplasma::@6_2
-  b6_2:
-  //SEG103 [51] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_3
+  //SEG99 doplasma::@6_3
+  b6_3:
+  //SEG100 [50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+3
-  //SEG104 [52] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG101 [51] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+3*$28,x
-    jmp b6_3
-  //SEG105 doplasma::@6_3
-  b6_3:
-  //SEG106 [53] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_4
+  //SEG102 doplasma::@6_4
+  b6_4:
+  //SEG103 [52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+4
-  //SEG107 [54] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG104 [53] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+4*$28,x
-    jmp b6_4
-  //SEG108 doplasma::@6_4
-  b6_4:
-  //SEG109 [55] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_5
+  //SEG105 doplasma::@6_5
+  b6_5:
+  //SEG106 [54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+5
-  //SEG110 [56] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG107 [55] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+5*$28,x
-    jmp b6_5
-  //SEG111 doplasma::@6_5
-  b6_5:
-  //SEG112 [57] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_6
+  //SEG108 doplasma::@6_6
+  b6_6:
+  //SEG109 [56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+6
-  //SEG113 [58] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG110 [57] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+6*$28,x
-    jmp b6_6
-  //SEG114 doplasma::@6_6
-  b6_6:
-  //SEG115 [59] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_7
+  //SEG111 doplasma::@6_7
+  b6_7:
+  //SEG112 [58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+7
-  //SEG116 [60] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG113 [59] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+7*$28,x
-    jmp b6_7
-  //SEG117 doplasma::@6_7
-  b6_7:
-  //SEG118 [61] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_8
+  //SEG114 doplasma::@6_8
+  b6_8:
+  //SEG115 [60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+8
-  //SEG119 [62] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG116 [61] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+8*$28,x
-    jmp b6_8
-  //SEG120 doplasma::@6_8
-  b6_8:
-  //SEG121 [63] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_9
+  //SEG117 doplasma::@6_9
+  b6_9:
+  //SEG118 [62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+9
-  //SEG122 [64] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG119 [63] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+9*$28,x
-    jmp b6_9
-  //SEG123 doplasma::@6_9
-  b6_9:
-  //SEG124 [65] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_10
+  //SEG120 doplasma::@6_10
+  b6_10:
+  //SEG121 [64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$a
-  //SEG125 [66] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG122 [65] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$a*$28,x
-    jmp b6_10
-  //SEG126 doplasma::@6_10
-  b6_10:
-  //SEG127 [67] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_11
+  //SEG123 doplasma::@6_11
+  b6_11:
+  //SEG124 [66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$b
-  //SEG128 [68] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG125 [67] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$b*$28,x
-    jmp b6_11
-  //SEG129 doplasma::@6_11
-  b6_11:
-  //SEG130 [69] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_12
+  //SEG126 doplasma::@6_12
+  b6_12:
+  //SEG127 [68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$c
-  //SEG131 [70] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG128 [69] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$c*$28,x
-    jmp b6_12
-  //SEG132 doplasma::@6_12
-  b6_12:
-  //SEG133 [71] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_13
+  //SEG129 doplasma::@6_13
+  b6_13:
+  //SEG130 [70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$d
-  //SEG134 [72] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG131 [71] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$d*$28,x
-    jmp b6_13
-  //SEG135 doplasma::@6_13
-  b6_13:
-  //SEG136 [73] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_14
+  //SEG132 doplasma::@6_14
+  b6_14:
+  //SEG133 [72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$e
-  //SEG137 [74] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG134 [73] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$e*$28,x
-    jmp b6_14
-  //SEG138 doplasma::@6_14
-  b6_14:
-  //SEG139 [75] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_15
+  //SEG135 doplasma::@6_15
+  b6_15:
+  //SEG136 [74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$f
-  //SEG140 [76] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG137 [75] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$f*$28,x
-    jmp b6_15
-  //SEG141 doplasma::@6_15
-  b6_15:
-  //SEG142 [77] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_16
+  //SEG138 doplasma::@6_16
+  b6_16:
+  //SEG139 [76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$10
-  //SEG143 [78] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG140 [77] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$10*$28,x
-    jmp b6_16
-  //SEG144 doplasma::@6_16
-  b6_16:
-  //SEG145 [79] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_17
+  //SEG141 doplasma::@6_17
+  b6_17:
+  //SEG142 [78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$11
-  //SEG146 [80] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG143 [79] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$11*$28,x
-    jmp b6_17
-  //SEG147 doplasma::@6_17
-  b6_17:
-  //SEG148 [81] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_18
+  //SEG144 doplasma::@6_18
+  b6_18:
+  //SEG145 [80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$12
-  //SEG149 [82] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG146 [81] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$12*$28,x
-    jmp b6_18
-  //SEG150 doplasma::@6_18
-  b6_18:
-  //SEG151 [83] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_19
+  //SEG147 doplasma::@6_19
+  b6_19:
+  //SEG148 [82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$13
-  //SEG152 [84] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG149 [83] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$13*$28,x
-    jmp b6_19
-  //SEG153 doplasma::@6_19
-  b6_19:
-  //SEG154 [85] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_20
+  //SEG150 doplasma::@6_20
+  b6_20:
+  //SEG151 [84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$14
-  //SEG155 [86] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG152 [85] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$14*$28,x
-    jmp b6_20
-  //SEG156 doplasma::@6_20
-  b6_20:
-  //SEG157 [87] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_21
+  //SEG153 doplasma::@6_21
+  b6_21:
+  //SEG154 [86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$15
-  //SEG158 [88] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG155 [87] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$15*$28,x
-    jmp b6_21
-  //SEG159 doplasma::@6_21
-  b6_21:
-  //SEG160 [89] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_22
+  //SEG156 doplasma::@6_22
+  b6_22:
+  //SEG157 [88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$16
-  //SEG161 [90] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG158 [89] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$16*$28,x
-    jmp b6_22
-  //SEG162 doplasma::@6_22
-  b6_22:
-  //SEG163 [91] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_23
+  //SEG159 doplasma::@6_23
+  b6_23:
+  //SEG160 [90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$17
-  //SEG164 [92] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG161 [91] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$17*$28,x
-    jmp b6_23
-  //SEG165 doplasma::@6_23
-  b6_23:
-  //SEG166 [93] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    jmp b6_24
+  //SEG162 doplasma::@6_24
+  b6_24:
+  //SEG163 [92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$18
-  //SEG167 [94] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG164 [93] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#50 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$18*$28,x
     jmp b7
-  //SEG168 doplasma::@7
+  //SEG165 doplasma::@7
   b7:
-  //SEG169 [95] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuxx=_inc_vbuxx 
+  //SEG166 [94] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuxx=_inc_vbuxx 
     inx
-  //SEG170 [96] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5 -- vbuxx_lt_vbuc1_then_la1 
+  //SEG167 [95] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5 -- vbuxx_lt_vbuc1_then_la1 
     cpx #$28
     bcc b5_from_b7
     jmp breturn
-  //SEG171 doplasma::@return
+  //SEG168 doplasma::@return
   breturn:
-  //SEG172 [97] return 
+  //SEG169 [96] return 
     rts
+  //SEG170 doplasma::@8
+  b8:
+  //SEG171 [97] (byte~) doplasma::yprev#3 ← (byte) doplasma::yval#0 -- vbuxx=vbuz1 
+    ldx yval
+  //SEG172 [21] phi from doplasma::@8 to doplasma::@1 [phi:doplasma::@8->doplasma::@1]
+  b1_from_b8:
+  //SEG173 [21] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@8->doplasma::@1#0] -- register_copy 
+  //SEG174 [21] phi (byte) doplasma::yprev#2 = (byte~) doplasma::yprev#3 [phi:doplasma::@8->doplasma::@1#1] -- register_copy 
+  //SEG175 [21] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@8->doplasma::@1#2] -- register_copy 
+  //SEG176 [21] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@8->doplasma::@1#3] -- register_copy 
+    jmp b1
     xbuf: .fill $28, 0
     ybuf: .fill $19, 0
 }
-//SEG173 makecharset
+//SEG177 makecharset
 // Make a plasma-friendly charset where the chars are randomly filled
 makecharset: {
     .label _4 = 6
-    .label _8 = $d
-    .label _9 = $d
+    .label _8 = $e
+    .label _9 = $e
     .label s = 5
     .label i = 4
     .label c = 2
-  //SEG174 [99] call sid_rnd_init 
+  //SEG178 [99] call sid_rnd_init 
     jsr sid_rnd_init
-  //SEG175 [100] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
+  //SEG179 [100] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
   b10_from_makecharset:
     jmp b10
-  //SEG176 makecharset::@10
+  //SEG180 makecharset::@10
   b10:
-  //SEG177 [101] call print_cls 
-  //SEG178 [134] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
+  //SEG181 [101] call print_cls 
+  //SEG182 [134] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
   print_cls_from_b10:
     jsr print_cls
-  //SEG179 [102] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
+  //SEG183 [102] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
   b1_from_b10:
-  //SEG180 [102] phi (byte*) print_char_cursor#45 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
+  //SEG184 [102] phi (byte*) print_char_cursor#45 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
     lda #<print_line_cursor
     sta print_char_cursor
     lda #>print_line_cursor
     sta print_char_cursor+1
-  //SEG181 [102] phi (word) makecharset::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
+  //SEG185 [102] phi (word) makecharset::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
     lda #0
     sta c
     lda #0
     sta c+1
     jmp b1
-  //SEG182 [102] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
+  //SEG186 [102] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
   b1_from_b9:
-  //SEG183 [102] phi (byte*) print_char_cursor#45 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
-  //SEG184 [102] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
+  //SEG187 [102] phi (byte*) print_char_cursor#45 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
+  //SEG188 [102] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
     jmp b1
-  //SEG185 makecharset::@1
+  //SEG189 makecharset::@1
   b1:
-  //SEG186 [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 
+  //SEG190 [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 
     lda c
-  //SEG187 [104] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuaa 
+  //SEG191 [104] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuaa 
     tay
     lda SINTABLE,y
     sta s
-  //SEG188 [105] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
+  //SEG192 [105] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
   b2_from_b1:
-  //SEG189 [105] phi (byte) makecharset::i#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
+  //SEG193 [105] phi (byte) makecharset::i#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
     lda #0
     sta i
     jmp b2
-  //SEG190 [105] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
+  //SEG194 [105] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
   b2_from_b6:
-  //SEG191 [105] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
+  //SEG195 [105] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
     jmp b2
-  //SEG192 makecharset::@2
+  //SEG196 makecharset::@2
   b2:
-  //SEG193 [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
+  //SEG197 [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
   b3_from_b2:
-  //SEG194 [106] phi (byte) makecharset::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuyy=vbuc1 
+  //SEG198 [106] phi (byte) makecharset::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuyy=vbuc1 
     ldy #0
-  //SEG195 [106] phi (byte) makecharset::ii#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuxx=vbuc1 
+  //SEG199 [106] phi (byte) makecharset::ii#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuxx=vbuc1 
     ldx #0
     jmp b3
-  //SEG196 [106] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
+  //SEG200 [106] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
   b3_from_b4:
-  //SEG197 [106] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
-  //SEG198 [106] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
+  //SEG201 [106] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
+  //SEG202 [106] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
     jmp b3
-  //SEG199 makecharset::@3
+  //SEG203 makecharset::@3
   b3:
-  //SEG200 [107] call sid_rnd 
+  //SEG204 [107] call sid_rnd 
     jsr sid_rnd
-  //SEG201 [108] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
+  //SEG205 [108] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
     jmp b11
-  //SEG202 makecharset::@11
+  //SEG206 makecharset::@11
   b11:
-  //SEG203 [109] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
-  //SEG204 [110] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuaa_band_vbuc1 
+  //SEG207 [109] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
+  //SEG208 [110] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuaa_band_vbuc1 
     and #$ff
     sta _4
-  //SEG205 [111] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
+  //SEG209 [111] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
     lda s
     cmp _4
     bcs b4_from_b11
     jmp b5
-  //SEG206 makecharset::@5
+  //SEG210 makecharset::@5
   b5:
-  //SEG207 [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
+  //SEG211 [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
     tya
     ora bittab,x
     tay
-  //SEG208 [113] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
+  //SEG212 [113] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
   b4_from_b11:
   b4_from_b5:
-  //SEG209 [113] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
+  //SEG213 [113] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
     jmp b4
-  //SEG210 makecharset::@4
+  //SEG214 makecharset::@4
   b4:
-  //SEG211 [114] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx 
+  //SEG215 [114] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx 
     inx
-  //SEG212 [115] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3 -- vbuxx_lt_vbuc1_then_la1 
+  //SEG216 [115] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3 -- vbuxx_lt_vbuc1_then_la1 
     cpx #8
     bcc b3_from_b4
     jmp b6
-  //SEG213 makecharset::@6
+  //SEG217 makecharset::@6
   b6:
-  //SEG214 [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwuz1=vwuz2_rol_3 
+  //SEG218 [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwuz1=vwuz2_rol_3 
     lda c
     asl
     sta _8
@@ -4908,7 +4955,7 @@ makecharset: {
     rol _8+1
     asl _8
     rol _8+1
-  //SEG215 [117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz1_plus_vbuz2 
+  //SEG219 [117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz1_plus_vbuz2 
     lda i
     clc
     adc _9
@@ -4916,7 +4963,7 @@ makecharset: {
     bcc !+
     inc _9+1
   !:
-  //SEG216 [118] *((const byte*) CHARSET#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 -- pbuc1_derefidx_vwuz1=vbuyy 
+  //SEG220 [118] *((const byte*) CHARSET#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 -- pbuc1_derefidx_vwuz1=vbuyy 
     tya
     sta !v++1
     lda #<CHARSET
@@ -4930,41 +4977,41 @@ makecharset: {
     lda #0
   !a:
     sta CHARSET
-  //SEG217 [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
+  //SEG221 [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
     inc i
-  //SEG218 [120] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG222 [120] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
     lda i
     cmp #8
     bcc b2_from_b6
     jmp b7
-  //SEG219 makecharset::@7
+  //SEG223 makecharset::@7
   b7:
-  //SEG220 [121] (byte/word~) makecharset::$11 ← (word) makecharset::c#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vwuz1_band_vbuc1 
+  //SEG224 [121] (byte/word~) makecharset::$11 ← (word) makecharset::c#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vwuz1_band_vbuc1 
     lda c
     and #7
-  //SEG221 [122] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9 -- vbuaa_neq_0_then_la1 
+  //SEG225 [122] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9 -- vbuaa_neq_0_then_la1 
     cmp #0
     bne b9_from_b7
-  //SEG222 [123] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
+  //SEG226 [123] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
   b8_from_b7:
     jmp b8
-  //SEG223 makecharset::@8
+  //SEG227 makecharset::@8
   b8:
-  //SEG224 [124] call print_char 
+  //SEG228 [124] call print_char 
     jsr print_char
-  //SEG225 [125] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
+  //SEG229 [125] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
   b9_from_b7:
   b9_from_b8:
-  //SEG226 [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#45 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
+  //SEG230 [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#45 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
     jmp b9
-  //SEG227 makecharset::@9
+  //SEG231 makecharset::@9
   b9:
-  //SEG228 [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
+  //SEG232 [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
     inc c
     bne !+
     inc c+1
   !:
-  //SEG229 [127] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
+  //SEG233 [127] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
     lda c+1
     cmp #>$100
     bcc b1_from_b9
@@ -4974,71 +5021,71 @@ makecharset: {
     bcc b1_from_b9
   !:
     jmp breturn
-  //SEG230 makecharset::@return
+  //SEG234 makecharset::@return
   breturn:
-  //SEG231 [128] return 
+  //SEG235 [128] return 
     rts
     bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
 }
-//SEG232 print_char
+//SEG236 print_char
 // Print a single char
 print_char: {
     .const ch = '.'
-  //SEG233 [129] *((byte*) print_char_cursor#45) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
+  //SEG237 [129] *((byte*) print_char_cursor#45) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
     lda #ch
     ldy #0
     sta (print_char_cursor),y
-  //SEG234 [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#45 -- pbuz1=_inc_pbuz1 
+  //SEG238 [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#45 -- pbuz1=_inc_pbuz1 
     inc print_char_cursor
     bne !+
     inc print_char_cursor+1
   !:
     jmp breturn
-  //SEG235 print_char::@return
+  //SEG239 print_char::@return
   breturn:
-  //SEG236 [131] return 
+  //SEG240 [131] return 
     rts
 }
-//SEG237 sid_rnd
+//SEG241 sid_rnd
 // Get a random number from the SID voice 3,
 // Must be initialized with sid_rnd_init()
 sid_rnd: {
-  //SEG238 [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
+  //SEG242 [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
     lda SID_VOICE3_OSC
     jmp breturn
-  //SEG239 sid_rnd::@return
+  //SEG243 sid_rnd::@return
   breturn:
-  //SEG240 [133] return 
+  //SEG244 [133] return 
     rts
 }
-//SEG241 print_cls
+//SEG245 print_cls
 // Clear the screen. Also resets current line/char cursor.
 print_cls: {
     .label sc = 2
-  //SEG242 [135] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
+  //SEG246 [135] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
   b1_from_print_cls:
-  //SEG243 [135] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
+  //SEG247 [135] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
     lda #<print_line_cursor
     sta sc
     lda #>print_line_cursor
     sta sc+1
     jmp b1
-  //SEG244 [135] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
+  //SEG248 [135] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
   b1_from_b1:
-  //SEG245 [135] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
+  //SEG249 [135] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
     jmp b1
-  //SEG246 print_cls::@1
+  //SEG250 print_cls::@1
   b1:
-  //SEG247 [136] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
+  //SEG251 [136] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
     lda #' '
     ldy #0
     sta (sc),y
-  //SEG248 [137] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
+  //SEG252 [137] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
     inc sc
     bne !+
     inc sc+1
   !:
-  //SEG249 [138] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
+  //SEG253 [138] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
     lda sc+1
     cmp #>print_line_cursor+$3e8
     bne b1_from_b1
@@ -5046,26 +5093,26 @@ print_cls: {
     cmp #<print_line_cursor+$3e8
     bne b1_from_b1
     jmp breturn
-  //SEG250 print_cls::@return
+  //SEG254 print_cls::@return
   breturn:
-  //SEG251 [139] return 
+  //SEG255 [139] return 
     rts
 }
-//SEG252 sid_rnd_init
+//SEG256 sid_rnd_init
 // Initialize SID voice 3 for random number generation
 sid_rnd_init: {
-  //SEG253 [140] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2 
+  //SEG257 [140] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2 
     lda #<$ffff
     sta SID_VOICE3_FREQ
     lda #>$ffff
     sta SID_VOICE3_FREQ+1
-  //SEG254 [141] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
+  //SEG258 [141] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
     lda #SID_CONTROL_NOISE
     sta SID_VOICE3_CONTROL
     jmp breturn
-  //SEG255 sid_rnd_init::@return
+  //SEG259 sid_rnd_init::@return
   breturn:
-  //SEG256 [142] return 
+  //SEG260 [142] return 
     rts
 }
 .pc = SINTABLE "SINTABLE"
@@ -5112,6 +5159,7 @@ Removing instruction jmp b6_20
 Removing instruction jmp b6_21
 Removing instruction jmp b6_22
 Removing instruction jmp b6_23
+Removing instruction jmp b6_24
 Removing instruction jmp b7
 Removing instruction jmp breturn
 Removing instruction jmp b10
@@ -5136,13 +5184,12 @@ Removing instruction lda #BLUE
 Removing instruction lda #0
 Removing instruction lda #0
 Removing instruction lda #0
-Removing instruction ldy i
+Replacing instruction ldx #0 with TAX
 Removing instruction lda #0
 Succesful ASM optimization Pass5UnnecesaryLoadElimination
 Replacing label b1_from_b1 with b1
 Replacing label b1_from_b1 with b1
 Replacing label b3 with b4
-Replacing label b1_from_b1 with b1
 Replacing label b3_from_b3 with b3
 Replacing label b5_from_b7 with b5
 Replacing label b4_from_b11 with b4
@@ -5164,7 +5211,6 @@ Removing instruction toD0181_from_b2:
 Removing instruction toD0181:
 Removing instruction b3:
 Removing instruction b4_from_b3:
-Removing instruction b1_from_b1:
 Removing instruction b3_from_b3:
 Removing instruction b5_from_b7:
 Removing instruction b10_from_makecharset:
@@ -5215,8 +5261,10 @@ Removing instruction b6_20:
 Removing instruction b6_21:
 Removing instruction b6_22:
 Removing instruction b6_23:
+Removing instruction b6_24:
 Removing instruction b7:
 Removing instruction breturn:
+Removing instruction b1_from_b8:
 Removing instruction b10:
 Removing instruction b1_from_b10:
 Removing instruction b2_from_b1:
@@ -5236,7 +5284,6 @@ Updating BasicUpstart to call main directly
 Removing instruction jsr main
 Succesful ASM optimization Pass5SkipBegin
 Removing instruction jmp b1
-Removing instruction jmp b1
 Removing instruction jmp b3
 Removing instruction jmp b5
 Removing instruction jmp b1
@@ -5246,8 +5293,9 @@ Removing instruction jmp b1
 Succesful ASM optimization Pass5NextJumpElimination
 Removing instruction bbegin:
 Succesful ASM optimization Pass5UnusedLabelElimination
-Fixing long branch [228] bcc b5 to bcs
-Fixing long branch [326] bcc b1 to bcs
+Fixing long branch [229] bcc b5 to bcs
+Fixing long branch [330] bcc b1 to bcs
+Fixing long branch [108] bcc b8 to bcs
 
 FINAL SYMBOL TABLE
 (label) @1
@@ -5363,22 +5411,20 @@ FINAL SYMBOL TABLE
 (byte) WHITE
 (byte) YELLOW
 (byte) c1A
-(byte) c1A#1 c1A zp ZP_BYTE:4 1.0714285714285714
-(byte) c1A#3 c1A zp ZP_BYTE:4 0.1911764705882353
+(byte) c1A#1 c1A zp ZP_BYTE:4 1.1538461538461537
+(byte) c1A#3 c1A zp ZP_BYTE:4 0.18840579710144925
 (byte) c1B
-(byte) c1B#1 c1B zp ZP_BYTE:5 0.9999999999999999
-(byte) c1B#3 c1B zp ZP_BYTE:5 0.19402985074626866
+(byte) c1B#1 c1B zp ZP_BYTE:5 1.0714285714285714
+(byte) c1B#3 c1B zp ZP_BYTE:5 0.1911764705882353
 (byte) c2A
-(byte) c2A#1 c2A zp ZP_BYTE:6 0.6
-(byte) c2A#3 c2A zp ZP_BYTE:6 0.22807017543859648
+(byte) c2A#1 c2A zp ZP_BYTE:6 0.625
+(byte) c2A#3 c2A zp ZP_BYTE:6 0.22413793103448276
 (byte) c2B
-(byte) c2B#1 c2B zp ZP_BYTE:7 0.5769230769230769
-(byte) c2B#3 c2B zp ZP_BYTE:7 0.23214285714285715
+(byte) c2B#1 c2B zp ZP_BYTE:7 0.6
+(byte) c2B#3 c2B zp ZP_BYTE:7 0.22807017543859648
 (void()) doplasma((byte*) doplasma::screen)
-(byte~) doplasma::$0 reg byte a 4.0
 (byte~) doplasma::$1 reg byte a 202.0
 (byte~) doplasma::$3 reg byte a 202.0
-(byte~) doplasma::$5 reg byte a 202.0
 (label) doplasma::@1
 (label) doplasma::@2
 (label) doplasma::@3
@@ -5401,6 +5447,7 @@ FINAL SYMBOL TABLE
 (label) doplasma::@6_21
 (label) doplasma::@6_22
 (label) doplasma::@6_23
+(label) doplasma::@6_24
 (label) doplasma::@6_3
 (label) doplasma::@6_4
 (label) doplasma::@6_5
@@ -5409,15 +5456,16 @@ FINAL SYMBOL TABLE
 (label) doplasma::@6_8
 (label) doplasma::@6_9
 (label) doplasma::@7
+(label) doplasma::@8
 (label) doplasma::@return
 (byte) doplasma::c1a
-(byte) doplasma::c1a#0 c1a zp ZP_BYTE:8 1.5
-(byte) doplasma::c1a#1 c1a zp ZP_BYTE:8 43.285714285714285
-(byte) doplasma::c1a#2 c1a zp ZP_BYTE:8 204.0
+(byte) doplasma::c1a#0 c1a zp ZP_BYTE:8 2.0
+(byte) doplasma::c1a#1 c1a zp ZP_BYTE:8 40.4
+(byte) doplasma::c1a#2 c1a zp ZP_BYTE:8 76.25
 (byte) doplasma::c1b
-(byte) doplasma::c1b#0 c1b zp ZP_BYTE:9 2.0
+(byte) doplasma::c1b#0 c1b zp ZP_BYTE:9 4.0
 (byte) doplasma::c1b#1 c1b zp ZP_BYTE:9 50.5
-(byte) doplasma::c1b#2 c1b zp ZP_BYTE:9 102.0
+(byte) doplasma::c1b#2 c1b zp ZP_BYTE:9 61.0
 (byte) doplasma::c2a
 (byte) doplasma::c2a#0 c2a zp ZP_BYTE:8 2.0
 (byte) doplasma::c2a#1 c2a zp ZP_BYTE:8 50.5
@@ -5427,18 +5475,18 @@ FINAL SYMBOL TABLE
 (byte) doplasma::c2b#1 c2b zp ZP_BYTE:9 67.33333333333333
 (byte) doplasma::c2b#2 c2b zp ZP_BYTE:9 76.25
 (byte) doplasma::i
-(byte) doplasma::i#1 i zp ZP_BYTE:10 151.5
-(byte) doplasma::i#2 i zp ZP_BYTE:10 67.33333333333333
+(byte) doplasma::i#1 i zp ZP_BYTE:10 101.0
+(byte) doplasma::i#2 i zp ZP_BYTE:10 50.5
 (byte) doplasma::i1
 (byte) doplasma::i1#1 i1 zp ZP_BYTE:10 151.5
 (byte) doplasma::i1#2 i1 zp ZP_BYTE:10 60.599999999999994
 (byte) doplasma::i2
 (byte) doplasma::i2#1 reg byte x 151.5
-(byte) doplasma::i2#2 reg byte x 55.45098039215691
+(byte) doplasma::i2#2 reg byte x 54.3846153846154
 (byte) doplasma::ii
 (byte*) doplasma::screen
 (byte) doplasma::val
-(byte) doplasma::val#0 reg byte a 151.5
+(byte) doplasma::val#0 reg byte a 202.0
 (byte) doplasma::val#1 reg byte a 151.5
 (byte) doplasma::val#10 reg byte a 151.5
 (byte) doplasma::val#12 reg byte a 151.5
@@ -5460,13 +5508,19 @@ FINAL SYMBOL TABLE
 (byte) doplasma::val#42 reg byte a 151.5
 (byte) doplasma::val#44 reg byte a 151.5
 (byte) doplasma::val#46 reg byte a 151.5
-(byte) doplasma::val#48 reg byte a 202.0
+(byte) doplasma::val#48 reg byte a 151.5
+(byte) doplasma::val#50 reg byte a 202.0
 (byte) doplasma::val#6 reg byte a 151.5
 (byte) doplasma::val#8 reg byte a 151.5
 (byte[$28]) doplasma::xbuf
 (const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) }
 (byte[$19]) doplasma::ybuf
 (const byte[$19]) doplasma::ybuf#0 ybuf = { fill( $19, 0) }
+(byte) doplasma::yprev
+(byte) doplasma::yprev#2 reg byte x 101.0
+(byte~) doplasma::yprev#3 reg byte x 202.0
+(byte) doplasma::yval
+(byte) doplasma::yval#0 yval zp ZP_BYTE:13 43.285714285714285
 (void()) main()
 (label) main::@1
 (label) main::@2
@@ -5495,8 +5549,8 @@ FINAL SYMBOL TABLE
 (byte~) makecharset::$2 reg byte a 22.0
 (byte~) makecharset::$3 reg byte a 2002.0
 (byte~) makecharset::$4 $4 zp ZP_BYTE:6 2002.0
-(word~) makecharset::$8 $8 zp ZP_WORD:13 202.0
-(word~) makecharset::$9 $9 zp ZP_WORD:13 202.0
+(word~) makecharset::$8 $8 zp ZP_WORD:14 202.0
+(word~) makecharset::$9 $9 zp ZP_WORD:14 202.0
 (label) makecharset::@1
 (label) makecharset::@10
 (label) makecharset::@11
@@ -5560,15 +5614,15 @@ zp ZP_BYTE:6 [ c2A#1 c2A#3 makecharset::$4 ]
 zp ZP_BYTE:7 [ c2B#1 c2B#3 ]
 zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
 zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
+reg byte x [ doplasma::yprev#2 doplasma::yprev#3 ]
 zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 doplasma::i1#2 doplasma::i1#1 ]
 reg byte x [ doplasma::i2#2 doplasma::i2#1 ]
 zp ZP_WORD:11 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ]
 reg byte x [ makecharset::ii#2 makecharset::ii#1 ]
 reg byte y [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
-reg byte a [ doplasma::$0 ]
+zp ZP_BYTE:13 [ doplasma::yval#0 ]
 reg byte a [ doplasma::$1 ]
 reg byte a [ doplasma::$3 ]
-reg byte a [ doplasma::$5 ]
 reg byte a [ doplasma::val#0 ]
 reg byte a [ doplasma::val#1 ]
 reg byte a [ doplasma::val#4 ]
@@ -5594,20 +5648,22 @@ reg byte a [ doplasma::val#42 ]
 reg byte a [ doplasma::val#44 ]
 reg byte a [ doplasma::val#46 ]
 reg byte a [ doplasma::val#48 ]
+reg byte a [ doplasma::val#50 ]
 reg byte a [ makecharset::$2 ]
 reg byte a [ sid_rnd::return#2 ]
 reg byte a [ makecharset::$3 ]
-zp ZP_WORD:13 [ makecharset::$8 makecharset::$9 ]
+zp ZP_WORD:14 [ makecharset::$8 makecharset::$9 ]
 reg byte a [ makecharset::$11 ]
 reg byte a [ sid_rnd::return#0 ]
 
 
 FINAL ASSEMBLER
-Score: 92771
+Score: 94400
 
 //SEG0 File Comments
 // A KickC version of the plasma routine from the CC65 samples
-// This version has an unrolled inner loop to reach ~50FPS
+// This version has an unrolled inner loop to reach 50+FPS
+// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
 // (w)2001 by groepaz/hitmen
 // Cleanup and porting to CC65 by Ullrich von Bassewitz.
 // Ported to KickC by Jesper Gravgaard.
@@ -5723,6 +5779,7 @@ main: {
 doplasma: {
     .label c1a = 8
     .label c1b = 9
+    .label yval = $d
     .label i = $a
     .label c2a = 8
     .label c2b = 9
@@ -5733,369 +5790,377 @@ doplasma: {
   //SEG47 [20] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 
     lda c1B
     sta c1b
-  //SEG48 [21] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#0) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#0) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
+  //SEG48 [21] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
+  //SEG49 [21] phi (byte) doplasma::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
+    lda #0
+    sta i
+  //SEG50 [21] phi (byte) doplasma::yprev#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma->doplasma::@1#1] -- vbuxx=vbuc1 
+    tax
+  //SEG51 [21] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
+  //SEG52 [21] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#3] -- register_copy 
+  // Calculate ybuff as a bunch of differences
+  //SEG53 doplasma::@1
+  b1:
+  //SEG54 [22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
     ldy c1a
     lda SINTABLE,y
     ldy c1b
     clc
     adc SINTABLE,y
-  //SEG49 [22] *((const byte[$19]) doplasma::ybuf#0) ← (byte~) doplasma::$0 -- _deref_pbuc1=vbuaa 
-    sta ybuf
-  //SEG50 [23] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
-  //SEG51 [23] phi (byte) doplasma::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
-    lda #1
-    sta i
-  //SEG52 [23] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy 
-  //SEG53 [23] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
-  // Calculate ybuff as a bunch of differences
-  //SEG54 [23] phi from doplasma::@1 to doplasma::@1 [phi:doplasma::@1->doplasma::@1]
-  //SEG55 [23] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@1#0] -- register_copy 
-  //SEG56 [23] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@1#1] -- register_copy 
-  //SEG57 [23] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@1#2] -- register_copy 
-  //SEG58 doplasma::@1
-  b1:
-  //SEG59 [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1 
+    sta yval
+  //SEG55 [23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 -- vbuaa=vbuz1_minus_vbuxx 
+    txa
+    eor #$ff
+    sec
+    adc yval
+  //SEG56 [24] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa 
+    ldy i
+    sta ybuf,y
+  //SEG57 [25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1a
     axs #-[4]
     stx c1a
-  //SEG60 [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG58 [26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte/signed byte/word/signed word/dword/signed dword) 9 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1b
     axs #-[9]
     stx c1b
-  //SEG61 [26] (byte~) doplasma::$1 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#1) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#1) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
-    ldy c1a
-    lda SINTABLE,y
-    ldy c1b
-    clc
-    adc SINTABLE,y
-  //SEG62 [27] (byte~) doplasma::$3 ← (byte~) doplasma::$1 - *((const byte[$19]) doplasma::ybuf#0+-(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) doplasma::i#2) -- vbuaa=vbuaa_minus_pbuc1_derefidx_vbuz1 
-    ldy i
-    sec
-    sbc ybuf+-1,y
-  //SEG63 [28] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa 
-    sta ybuf,y
-  //SEG64 [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
+  //SEG59 [27] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
     inc i
-  //SEG65 [30] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@1 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG60 [28] if((byte) doplasma::i#1<(byte/signed byte/word/signed word/dword/signed dword) $19) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 
     lda i
     cmp #$19
-    bcc b1
-  //SEG66 doplasma::@2
-  //SEG67 [31] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
+    bcs !b8+
+    jmp b8
+  !b8:
+  //SEG61 doplasma::@2
+  //SEG62 [29] (byte) c1A#3 ← (byte) c1A#1 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
     lax c1A
     axs #-[3]
     stx c1A
-  //SEG68 [32] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz1_minus_vbuc1 
+  //SEG63 [30] (byte) c1B#3 ← (byte) c1B#1 - (byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz1_minus_vbuc1 
     lax c1B
     axs #5
     stx c1B
-  //SEG69 [33] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
+  //SEG64 [31] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
     lda c2A
     sta c2a
-  //SEG70 [34] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
+  //SEG65 [32] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
     lda c2B
     sta c2b
-  //SEG71 [35] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
-  //SEG72 [35] phi (byte) doplasma::i1#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
+  //SEG66 [33] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
+  //SEG67 [33] phi (byte) doplasma::i1#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
     lda #0
     sta i1
-  //SEG73 [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
-  //SEG74 [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
-  //SEG75 [35] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
-  //SEG76 [35] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
-  //SEG77 [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
-  //SEG78 [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
-  //SEG79 doplasma::@3
+  //SEG68 [33] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
+  //SEG69 [33] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
+  //SEG70 [33] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
+  //SEG71 [33] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
+  //SEG72 [33] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
+  //SEG73 [33] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
+  //SEG74 doplasma::@3
   b3:
-  //SEG80 [36] (byte~) doplasma::$5 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
+  //SEG75 [34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
     ldy c2a
     lda SINTABLE,y
     ldy c2b
     clc
     adc SINTABLE,y
-  //SEG81 [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$5 -- pbuc1_derefidx_vbuz1=vbuaa 
+  //SEG76 [35] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa 
     ldy i1
     sta xbuf,y
-  //SEG82 [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG77 [36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1 
     lax c2a
     axs #-[3]
     stx c2a
-  //SEG83 [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz1_plus_vbuc1 
+  //SEG78 [37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz1_plus_vbuc1 
     lax c2b
     axs #-[7]
     stx c2b
-  //SEG84 [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
+  //SEG79 [38] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
     inc i1
-  //SEG85 [41] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG80 [39] if((byte) doplasma::i1#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
     lda i1
     cmp #$28
     bcc b3
-  //SEG86 doplasma::@4
-  //SEG87 [42] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2 
+  //SEG81 doplasma::@4
+  //SEG82 [40] (byte) c2A#3 ← (byte) c2A#1 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2 
     lda c2A
     clc
     adc #2
     sta c2A
-  //SEG88 [43] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_minus_vbuc1 
+  //SEG83 [41] (byte) c2B#3 ← (byte) c2B#1 - (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_minus_vbuc1 
     lax c2B
     axs #3
     stx c2B
-  //SEG89 [44] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
-  //SEG90 [44] phi (byte) doplasma::i2#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@4->doplasma::@5#0] -- vbuxx=vbuc1 
+  //SEG84 [42] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
+  //SEG85 [42] phi (byte) doplasma::i2#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:doplasma::@4->doplasma::@5#0] -- vbuxx=vbuc1 
     ldx #0
-  //SEG91 [44] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
-  //SEG92 [44] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
-  //SEG93 doplasma::@5
+  //SEG86 [42] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
+  //SEG87 [42] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
+  //SEG88 doplasma::@5
   b5:
-  //SEG94 [45] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=pbuc1_derefidx_vbuxx_plus__deref_pbuc2 
+  //SEG89 [43] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) -- vbuaa=pbuc1_derefidx_vbuxx 
+    // Find the first value on the row
     lda xbuf,x
-    clc
-    adc ybuf
-  //SEG95 [46] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#0 -- pbuc1_derefidx_vbuxx=vbuaa 
-    sta SCREEN1,x
   // Calculate the next values as sums of diffs
   // Use experimental loop unrolling to increase the speed
-  //SEG96 doplasma::@6
-  //SEG97 [47] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG90 doplasma::@6
+  //SEG91 [44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 
+    clc
+    adc ybuf
+  //SEG92 [45] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa 
+    sta SCREEN1,x
+  //SEG93 doplasma::@6_1
+  //SEG94 [46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+1
-  //SEG98 [48] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG95 [47] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+1*$28,x
-  //SEG99 doplasma::@6_1
-  //SEG100 [49] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG96 doplasma::@6_2
+  //SEG97 [48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+2
-  //SEG101 [50] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG98 [49] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+2*$28,x
-  //SEG102 doplasma::@6_2
-  //SEG103 [51] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG99 doplasma::@6_3
+  //SEG100 [50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+3
-  //SEG104 [52] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG101 [51] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 3*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+3*$28,x
-  //SEG105 doplasma::@6_3
-  //SEG106 [53] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG102 doplasma::@6_4
+  //SEG103 [52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+4
-  //SEG107 [54] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG104 [53] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+4*$28,x
-  //SEG108 doplasma::@6_4
-  //SEG109 [55] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG105 doplasma::@6_5
+  //SEG106 [54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+5
-  //SEG110 [56] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG107 [55] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 5*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+5*$28,x
-  //SEG111 doplasma::@6_5
-  //SEG112 [57] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG108 doplasma::@6_6
+  //SEG109 [56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+6
-  //SEG113 [58] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG110 [57] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+6*$28,x
-  //SEG114 doplasma::@6_6
-  //SEG115 [59] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG111 doplasma::@6_7
+  //SEG112 [58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+7
-  //SEG116 [60] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG113 [59] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 7*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+7*$28,x
-  //SEG117 doplasma::@6_7
-  //SEG118 [61] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG114 doplasma::@6_8
+  //SEG115 [60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+8
-  //SEG119 [62] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG116 [61] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 8*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+8*$28,x
-  //SEG120 doplasma::@6_8
-  //SEG121 [63] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG117 doplasma::@6_9
+  //SEG118 [62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+9
-  //SEG122 [64] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG119 [63] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) 9*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+9*$28,x
-  //SEG123 doplasma::@6_9
-  //SEG124 [65] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG120 doplasma::@6_10
+  //SEG121 [64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$a
-  //SEG125 [66] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG122 [65] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $a*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$a*$28,x
-  //SEG126 doplasma::@6_10
-  //SEG127 [67] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG123 doplasma::@6_11
+  //SEG124 [66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$b
-  //SEG128 [68] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG125 [67] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $b*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$b*$28,x
-  //SEG129 doplasma::@6_11
-  //SEG130 [69] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG126 doplasma::@6_12
+  //SEG127 [68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$c
-  //SEG131 [70] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG128 [69] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $c*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$c*$28,x
-  //SEG132 doplasma::@6_12
-  //SEG133 [71] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG129 doplasma::@6_13
+  //SEG130 [70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$d
-  //SEG134 [72] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG131 [71] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $d*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$d*$28,x
-  //SEG135 doplasma::@6_13
-  //SEG136 [73] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG132 doplasma::@6_14
+  //SEG133 [72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$e
-  //SEG137 [74] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG134 [73] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $e*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$e*$28,x
-  //SEG138 doplasma::@6_14
-  //SEG139 [75] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG135 doplasma::@6_15
+  //SEG136 [74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$f
-  //SEG140 [76] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG137 [75] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$f*$28,x
-  //SEG141 doplasma::@6_15
-  //SEG142 [77] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG138 doplasma::@6_16
+  //SEG139 [76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$10
-  //SEG143 [78] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG140 [77] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $10*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$10*$28,x
-  //SEG144 doplasma::@6_16
-  //SEG145 [79] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG141 doplasma::@6_17
+  //SEG142 [78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$11
-  //SEG146 [80] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG143 [79] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $11*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$11*$28,x
-  //SEG147 doplasma::@6_17
-  //SEG148 [81] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG144 doplasma::@6_18
+  //SEG145 [80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$12
-  //SEG149 [82] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG146 [81] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $12*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$12*$28,x
-  //SEG150 doplasma::@6_18
-  //SEG151 [83] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG147 doplasma::@6_19
+  //SEG148 [82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$13
-  //SEG152 [84] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG149 [83] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $13*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$13*$28,x
-  //SEG153 doplasma::@6_19
-  //SEG154 [85] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG150 doplasma::@6_20
+  //SEG151 [84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$14
-  //SEG155 [86] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG152 [85] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $14*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$14*$28,x
-  //SEG156 doplasma::@6_20
-  //SEG157 [87] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG153 doplasma::@6_21
+  //SEG154 [86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$15
-  //SEG158 [88] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG155 [87] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $15*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$15*$28,x
-  //SEG159 doplasma::@6_21
-  //SEG160 [89] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG156 doplasma::@6_22
+  //SEG157 [88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$16
-  //SEG161 [90] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG158 [89] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $16*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$16*$28,x
-  //SEG162 doplasma::@6_22
-  //SEG163 [91] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG159 doplasma::@6_23
+  //SEG160 [90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$17
-  //SEG164 [92] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG161 [91] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $17*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$17*$28,x
-  //SEG165 doplasma::@6_23
-  //SEG166 [93] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 
+  //SEG162 doplasma::@6_24
+  //SEG163 [92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte/signed byte/word/signed word/dword/signed dword) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 
     clc
     adc ybuf+$18
-  //SEG167 [94] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48 -- pbuc1_derefidx_vbuxx=vbuaa 
+  //SEG164 [93] *((const byte*) SCREEN1#0+(byte/signed byte/word/signed word/dword/signed dword) $18*(byte/signed byte/word/signed word/dword/signed dword) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#50 -- pbuc1_derefidx_vbuxx=vbuaa 
     sta SCREEN1+$18*$28,x
-  //SEG168 doplasma::@7
-  //SEG169 [95] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuxx=_inc_vbuxx 
+  //SEG165 doplasma::@7
+  //SEG166 [94] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuxx=_inc_vbuxx 
     inx
-  //SEG170 [96] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5 -- vbuxx_lt_vbuc1_then_la1 
+  //SEG167 [95] if((byte) doplasma::i2#1<(byte/signed byte/word/signed word/dword/signed dword) $28) goto doplasma::@5 -- vbuxx_lt_vbuc1_then_la1 
     cpx #$28
     bcs !b5+
     jmp b5
   !b5:
-  //SEG171 doplasma::@return
-  //SEG172 [97] return 
+  //SEG168 doplasma::@return
+  //SEG169 [96] return 
     rts
+  //SEG170 doplasma::@8
+  b8:
+  //SEG171 [97] (byte~) doplasma::yprev#3 ← (byte) doplasma::yval#0 -- vbuxx=vbuz1 
+    ldx yval
+  //SEG172 [21] phi from doplasma::@8 to doplasma::@1 [phi:doplasma::@8->doplasma::@1]
+  //SEG173 [21] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@8->doplasma::@1#0] -- register_copy 
+  //SEG174 [21] phi (byte) doplasma::yprev#2 = (byte~) doplasma::yprev#3 [phi:doplasma::@8->doplasma::@1#1] -- register_copy 
+  //SEG175 [21] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@8->doplasma::@1#2] -- register_copy 
+  //SEG176 [21] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@8->doplasma::@1#3] -- register_copy 
+    jmp b1
     xbuf: .fill $28, 0
     ybuf: .fill $19, 0
 }
-//SEG173 makecharset
+//SEG177 makecharset
 // Make a plasma-friendly charset where the chars are randomly filled
 makecharset: {
     .label _4 = 6
-    .label _8 = $d
-    .label _9 = $d
+    .label _8 = $e
+    .label _9 = $e
     .label s = 5
     .label i = 4
     .label c = 2
-  //SEG174 [99] call sid_rnd_init 
+  //SEG178 [99] call sid_rnd_init 
     jsr sid_rnd_init
-  //SEG175 [100] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
-  //SEG176 makecharset::@10
-  //SEG177 [101] call print_cls 
-  //SEG178 [134] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
+  //SEG179 [100] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
+  //SEG180 makecharset::@10
+  //SEG181 [101] call print_cls 
+  //SEG182 [134] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
     jsr print_cls
-  //SEG179 [102] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
-  //SEG180 [102] phi (byte*) print_char_cursor#45 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
+  //SEG183 [102] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
+  //SEG184 [102] phi (byte*) print_char_cursor#45 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
     lda #<print_line_cursor
     sta print_char_cursor
     lda #>print_line_cursor
     sta print_char_cursor+1
-  //SEG181 [102] phi (word) makecharset::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
+  //SEG185 [102] phi (word) makecharset::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
     lda #0
     sta c
     sta c+1
-  //SEG182 [102] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
-  //SEG183 [102] phi (byte*) print_char_cursor#45 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
-  //SEG184 [102] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
-  //SEG185 makecharset::@1
+  //SEG186 [102] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
+  //SEG187 [102] phi (byte*) print_char_cursor#45 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
+  //SEG188 [102] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
+  //SEG189 makecharset::@1
   b1:
-  //SEG186 [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 
+  //SEG190 [103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 
     lda c
-  //SEG187 [104] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuaa 
+  //SEG191 [104] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuaa 
     tay
     lda SINTABLE,y
     sta s
-  //SEG188 [105] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
-  //SEG189 [105] phi (byte) makecharset::i#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
+  //SEG192 [105] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
+  //SEG193 [105] phi (byte) makecharset::i#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
     lda #0
     sta i
-  //SEG190 [105] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
-  //SEG191 [105] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
-  //SEG192 makecharset::@2
+  //SEG194 [105] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
+  //SEG195 [105] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
+  //SEG196 makecharset::@2
   b2:
-  //SEG193 [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
-  //SEG194 [106] phi (byte) makecharset::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuyy=vbuc1 
+  //SEG197 [106] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
+  //SEG198 [106] phi (byte) makecharset::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuyy=vbuc1 
     ldy #0
-  //SEG195 [106] phi (byte) makecharset::ii#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuxx=vbuc1 
+  //SEG199 [106] phi (byte) makecharset::ii#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuxx=vbuc1 
     ldx #0
-  //SEG196 [106] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
-  //SEG197 [106] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
-  //SEG198 [106] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
-  //SEG199 makecharset::@3
+  //SEG200 [106] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
+  //SEG201 [106] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
+  //SEG202 [106] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
+  //SEG203 makecharset::@3
   b3:
-  //SEG200 [107] call sid_rnd 
+  //SEG204 [107] call sid_rnd 
     jsr sid_rnd
-  //SEG201 [108] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
-  //SEG202 makecharset::@11
-  //SEG203 [109] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
-  //SEG204 [110] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuaa_band_vbuc1 
+  //SEG205 [108] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
+  //SEG206 makecharset::@11
+  //SEG207 [109] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
+  //SEG208 [110] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuaa_band_vbuc1 
     and #$ff
     sta _4
-  //SEG205 [111] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
+  //SEG209 [111] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
     lda s
     cmp _4
     bcs b4
-  //SEG206 makecharset::@5
-  //SEG207 [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
+  //SEG210 makecharset::@5
+  //SEG211 [112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
     tya
     ora bittab,x
     tay
-  //SEG208 [113] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
-  //SEG209 [113] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
-  //SEG210 makecharset::@4
+  //SEG212 [113] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
+  //SEG213 [113] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
+  //SEG214 makecharset::@4
   b4:
-  //SEG211 [114] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx 
+  //SEG215 [114] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx 
     inx
-  //SEG212 [115] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3 -- vbuxx_lt_vbuc1_then_la1 
+  //SEG216 [115] if((byte) makecharset::ii#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@3 -- vbuxx_lt_vbuc1_then_la1 
     cpx #8
     bcc b3
-  //SEG213 makecharset::@6
-  //SEG214 [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwuz1=vwuz2_rol_3 
+  //SEG217 makecharset::@6
+  //SEG218 [116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwuz1=vwuz2_rol_3 
     lda c
     asl
     sta _8
@@ -6106,7 +6171,7 @@ makecharset: {
     rol _8+1
     asl _8
     rol _8+1
-  //SEG215 [117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz1_plus_vbuz2 
+  //SEG219 [117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz1_plus_vbuz2 
     lda i
     clc
     adc _9
@@ -6114,7 +6179,7 @@ makecharset: {
     bcc !+
     inc _9+1
   !:
-  //SEG216 [118] *((const byte*) CHARSET#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 -- pbuc1_derefidx_vwuz1=vbuyy 
+  //SEG220 [118] *((const byte*) CHARSET#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 -- pbuc1_derefidx_vwuz1=vbuyy 
     tya
     sta !v++1
     lda #<CHARSET
@@ -6128,33 +6193,33 @@ makecharset: {
     lda #0
   !a:
     sta CHARSET
-  //SEG217 [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
+  //SEG221 [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
     inc i
-  //SEG218 [120] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
+  //SEG222 [120] if((byte) makecharset::i#1<(byte/signed byte/word/signed word/dword/signed dword) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
     lda i
     cmp #8
     bcc b2
-  //SEG219 makecharset::@7
-  //SEG220 [121] (byte/word~) makecharset::$11 ← (word) makecharset::c#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vwuz1_band_vbuc1 
+  //SEG223 makecharset::@7
+  //SEG224 [121] (byte/word~) makecharset::$11 ← (word) makecharset::c#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vwuz1_band_vbuc1 
     lda c
     and #7
-  //SEG221 [122] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9 -- vbuaa_neq_0_then_la1 
+  //SEG225 [122] if((byte/word~) makecharset::$11!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto makecharset::@9 -- vbuaa_neq_0_then_la1 
     cmp #0
     bne b9
-  //SEG222 [123] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
-  //SEG223 makecharset::@8
-  //SEG224 [124] call print_char 
+  //SEG226 [123] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
+  //SEG227 makecharset::@8
+  //SEG228 [124] call print_char 
     jsr print_char
-  //SEG225 [125] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
-  //SEG226 [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#45 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
-  //SEG227 makecharset::@9
+  //SEG229 [125] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
+  //SEG230 [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#45 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
+  //SEG231 makecharset::@9
   b9:
-  //SEG228 [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
+  //SEG232 [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
     inc c
     bne !+
     inc c+1
   !:
-  //SEG229 [127] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
+  //SEG233 [127] if((word) makecharset::c#1<(word/signed word/dword/signed dword) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
     lda c+1
     cmp #>$100
     bcc b1
@@ -6165,85 +6230,85 @@ makecharset: {
     jmp b1
   !b1:
   !:
-  //SEG230 makecharset::@return
-  //SEG231 [128] return 
+  //SEG234 makecharset::@return
+  //SEG235 [128] return 
     rts
     bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
 }
-//SEG232 print_char
+//SEG236 print_char
 // Print a single char
 print_char: {
     .const ch = '.'
-  //SEG233 [129] *((byte*) print_char_cursor#45) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
+  //SEG237 [129] *((byte*) print_char_cursor#45) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
     lda #ch
     ldy #0
     sta (print_char_cursor),y
-  //SEG234 [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#45 -- pbuz1=_inc_pbuz1 
+  //SEG238 [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#45 -- pbuz1=_inc_pbuz1 
     inc print_char_cursor
     bne !+
     inc print_char_cursor+1
   !:
-  //SEG235 print_char::@return
-  //SEG236 [131] return 
+  //SEG239 print_char::@return
+  //SEG240 [131] return 
     rts
 }
-//SEG237 sid_rnd
+//SEG241 sid_rnd
 // Get a random number from the SID voice 3,
 // Must be initialized with sid_rnd_init()
 sid_rnd: {
-  //SEG238 [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
+  //SEG242 [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
     lda SID_VOICE3_OSC
-  //SEG239 sid_rnd::@return
-  //SEG240 [133] return 
+  //SEG243 sid_rnd::@return
+  //SEG244 [133] return 
     rts
 }
-//SEG241 print_cls
+//SEG245 print_cls
 // Clear the screen. Also resets current line/char cursor.
 print_cls: {
     .label sc = 2
-  //SEG242 [135] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
-  //SEG243 [135] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
+  //SEG246 [135] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
+  //SEG247 [135] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
     lda #<print_line_cursor
     sta sc
     lda #>print_line_cursor
     sta sc+1
-  //SEG244 [135] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
-  //SEG245 [135] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
-  //SEG246 print_cls::@1
+  //SEG248 [135] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
+  //SEG249 [135] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
+  //SEG250 print_cls::@1
   b1:
-  //SEG247 [136] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
+  //SEG251 [136] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
     lda #' '
     ldy #0
     sta (sc),y
-  //SEG248 [137] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
+  //SEG252 [137] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
     inc sc
     bne !+
     inc sc+1
   !:
-  //SEG249 [138] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
+  //SEG253 [138] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
     lda sc+1
     cmp #>print_line_cursor+$3e8
     bne b1
     lda sc
     cmp #<print_line_cursor+$3e8
     bne b1
-  //SEG250 print_cls::@return
-  //SEG251 [139] return 
+  //SEG254 print_cls::@return
+  //SEG255 [139] return 
     rts
 }
-//SEG252 sid_rnd_init
+//SEG256 sid_rnd_init
 // Initialize SID voice 3 for random number generation
 sid_rnd_init: {
-  //SEG253 [140] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2 
+  //SEG257 [140] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2 
     lda #<$ffff
     sta SID_VOICE3_FREQ
     lda #>$ffff
     sta SID_VOICE3_FREQ+1
-  //SEG254 [141] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
+  //SEG258 [141] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
     lda #SID_CONTROL_NOISE
     sta SID_VOICE3_CONTROL
-  //SEG255 sid_rnd_init::@return
-  //SEG256 [142] return 
+  //SEG259 sid_rnd_init::@return
+  //SEG260 [142] return 
     rts
 }
 .pc = SINTABLE "SINTABLE"
diff --git a/src/test/ref/examples/plasma/plasma-unroll.sym b/src/test/ref/examples/plasma/plasma-unroll.sym
index 6da6c88bb..290f51fde 100644
--- a/src/test/ref/examples/plasma/plasma-unroll.sym
+++ b/src/test/ref/examples/plasma/plasma-unroll.sym
@@ -111,22 +111,20 @@
 (byte) WHITE
 (byte) YELLOW
 (byte) c1A
-(byte) c1A#1 c1A zp ZP_BYTE:4 1.0714285714285714
-(byte) c1A#3 c1A zp ZP_BYTE:4 0.1911764705882353
+(byte) c1A#1 c1A zp ZP_BYTE:4 1.1538461538461537
+(byte) c1A#3 c1A zp ZP_BYTE:4 0.18840579710144925
 (byte) c1B
-(byte) c1B#1 c1B zp ZP_BYTE:5 0.9999999999999999
-(byte) c1B#3 c1B zp ZP_BYTE:5 0.19402985074626866
+(byte) c1B#1 c1B zp ZP_BYTE:5 1.0714285714285714
+(byte) c1B#3 c1B zp ZP_BYTE:5 0.1911764705882353
 (byte) c2A
-(byte) c2A#1 c2A zp ZP_BYTE:6 0.6
-(byte) c2A#3 c2A zp ZP_BYTE:6 0.22807017543859648
+(byte) c2A#1 c2A zp ZP_BYTE:6 0.625
+(byte) c2A#3 c2A zp ZP_BYTE:6 0.22413793103448276
 (byte) c2B
-(byte) c2B#1 c2B zp ZP_BYTE:7 0.5769230769230769
-(byte) c2B#3 c2B zp ZP_BYTE:7 0.23214285714285715
+(byte) c2B#1 c2B zp ZP_BYTE:7 0.6
+(byte) c2B#3 c2B zp ZP_BYTE:7 0.22807017543859648
 (void()) doplasma((byte*) doplasma::screen)
-(byte~) doplasma::$0 reg byte a 4.0
 (byte~) doplasma::$1 reg byte a 202.0
 (byte~) doplasma::$3 reg byte a 202.0
-(byte~) doplasma::$5 reg byte a 202.0
 (label) doplasma::@1
 (label) doplasma::@2
 (label) doplasma::@3
@@ -149,6 +147,7 @@
 (label) doplasma::@6_21
 (label) doplasma::@6_22
 (label) doplasma::@6_23
+(label) doplasma::@6_24
 (label) doplasma::@6_3
 (label) doplasma::@6_4
 (label) doplasma::@6_5
@@ -157,15 +156,16 @@
 (label) doplasma::@6_8
 (label) doplasma::@6_9
 (label) doplasma::@7
+(label) doplasma::@8
 (label) doplasma::@return
 (byte) doplasma::c1a
-(byte) doplasma::c1a#0 c1a zp ZP_BYTE:8 1.5
-(byte) doplasma::c1a#1 c1a zp ZP_BYTE:8 43.285714285714285
-(byte) doplasma::c1a#2 c1a zp ZP_BYTE:8 204.0
+(byte) doplasma::c1a#0 c1a zp ZP_BYTE:8 2.0
+(byte) doplasma::c1a#1 c1a zp ZP_BYTE:8 40.4
+(byte) doplasma::c1a#2 c1a zp ZP_BYTE:8 76.25
 (byte) doplasma::c1b
-(byte) doplasma::c1b#0 c1b zp ZP_BYTE:9 2.0
+(byte) doplasma::c1b#0 c1b zp ZP_BYTE:9 4.0
 (byte) doplasma::c1b#1 c1b zp ZP_BYTE:9 50.5
-(byte) doplasma::c1b#2 c1b zp ZP_BYTE:9 102.0
+(byte) doplasma::c1b#2 c1b zp ZP_BYTE:9 61.0
 (byte) doplasma::c2a
 (byte) doplasma::c2a#0 c2a zp ZP_BYTE:8 2.0
 (byte) doplasma::c2a#1 c2a zp ZP_BYTE:8 50.5
@@ -175,18 +175,18 @@
 (byte) doplasma::c2b#1 c2b zp ZP_BYTE:9 67.33333333333333
 (byte) doplasma::c2b#2 c2b zp ZP_BYTE:9 76.25
 (byte) doplasma::i
-(byte) doplasma::i#1 i zp ZP_BYTE:10 151.5
-(byte) doplasma::i#2 i zp ZP_BYTE:10 67.33333333333333
+(byte) doplasma::i#1 i zp ZP_BYTE:10 101.0
+(byte) doplasma::i#2 i zp ZP_BYTE:10 50.5
 (byte) doplasma::i1
 (byte) doplasma::i1#1 i1 zp ZP_BYTE:10 151.5
 (byte) doplasma::i1#2 i1 zp ZP_BYTE:10 60.599999999999994
 (byte) doplasma::i2
 (byte) doplasma::i2#1 reg byte x 151.5
-(byte) doplasma::i2#2 reg byte x 55.45098039215691
+(byte) doplasma::i2#2 reg byte x 54.3846153846154
 (byte) doplasma::ii
 (byte*) doplasma::screen
 (byte) doplasma::val
-(byte) doplasma::val#0 reg byte a 151.5
+(byte) doplasma::val#0 reg byte a 202.0
 (byte) doplasma::val#1 reg byte a 151.5
 (byte) doplasma::val#10 reg byte a 151.5
 (byte) doplasma::val#12 reg byte a 151.5
@@ -208,13 +208,19 @@
 (byte) doplasma::val#42 reg byte a 151.5
 (byte) doplasma::val#44 reg byte a 151.5
 (byte) doplasma::val#46 reg byte a 151.5
-(byte) doplasma::val#48 reg byte a 202.0
+(byte) doplasma::val#48 reg byte a 151.5
+(byte) doplasma::val#50 reg byte a 202.0
 (byte) doplasma::val#6 reg byte a 151.5
 (byte) doplasma::val#8 reg byte a 151.5
 (byte[$28]) doplasma::xbuf
 (const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) }
 (byte[$19]) doplasma::ybuf
 (const byte[$19]) doplasma::ybuf#0 ybuf = { fill( $19, 0) }
+(byte) doplasma::yprev
+(byte) doplasma::yprev#2 reg byte x 101.0
+(byte~) doplasma::yprev#3 reg byte x 202.0
+(byte) doplasma::yval
+(byte) doplasma::yval#0 yval zp ZP_BYTE:13 43.285714285714285
 (void()) main()
 (label) main::@1
 (label) main::@2
@@ -243,8 +249,8 @@
 (byte~) makecharset::$2 reg byte a 22.0
 (byte~) makecharset::$3 reg byte a 2002.0
 (byte~) makecharset::$4 $4 zp ZP_BYTE:6 2002.0
-(word~) makecharset::$8 $8 zp ZP_WORD:13 202.0
-(word~) makecharset::$9 $9 zp ZP_WORD:13 202.0
+(word~) makecharset::$8 $8 zp ZP_WORD:14 202.0
+(word~) makecharset::$9 $9 zp ZP_WORD:14 202.0
 (label) makecharset::@1
 (label) makecharset::@10
 (label) makecharset::@11
@@ -308,15 +314,15 @@ zp ZP_BYTE:6 [ c2A#1 c2A#3 makecharset::$4 ]
 zp ZP_BYTE:7 [ c2B#1 c2B#3 ]
 zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
 zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
+reg byte x [ doplasma::yprev#2 doplasma::yprev#3 ]
 zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 doplasma::i1#2 doplasma::i1#1 ]
 reg byte x [ doplasma::i2#2 doplasma::i2#1 ]
 zp ZP_WORD:11 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ]
 reg byte x [ makecharset::ii#2 makecharset::ii#1 ]
 reg byte y [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
-reg byte a [ doplasma::$0 ]
+zp ZP_BYTE:13 [ doplasma::yval#0 ]
 reg byte a [ doplasma::$1 ]
 reg byte a [ doplasma::$3 ]
-reg byte a [ doplasma::$5 ]
 reg byte a [ doplasma::val#0 ]
 reg byte a [ doplasma::val#1 ]
 reg byte a [ doplasma::val#4 ]
@@ -342,9 +348,10 @@ reg byte a [ doplasma::val#42 ]
 reg byte a [ doplasma::val#44 ]
 reg byte a [ doplasma::val#46 ]
 reg byte a [ doplasma::val#48 ]
+reg byte a [ doplasma::val#50 ]
 reg byte a [ makecharset::$2 ]
 reg byte a [ sid_rnd::return#2 ]
 reg byte a [ makecharset::$3 ]
-zp ZP_WORD:13 [ makecharset::$8 makecharset::$9 ]
+zp ZP_WORD:14 [ makecharset::$8 makecharset::$9 ]
 reg byte a [ makecharset::$11 ]
 reg byte a [ sid_rnd::return#0 ]