From 62d7ecbeffa377bdc7238a8aec8922459c7c5fdb Mon Sep 17 00:00:00 2001
From: jespergravgaard <jesper@balmangravgaard.dk>
Date: Wed, 10 Jul 2019 12:07:06 +0200
Subject: [PATCH] Moved back to malloc() based impl.

---
 src/test/kc/screen-show-spiral-buckets.kc   |   10 +-
 src/test/ref/screen-show-spiral-buckets.asm |  309 +-
 src/test/ref/screen-show-spiral-buckets.cfg |  595 +-
 src/test/ref/screen-show-spiral-buckets.log | 6698 ++++++++++---------
 src/test/ref/screen-show-spiral-buckets.sym |  181 +-
 5 files changed, 4334 insertions(+), 3459 deletions(-)

diff --git a/src/test/kc/screen-show-spiral-buckets.kc b/src/test/kc/screen-show-spiral-buckets.kc
index 9fd4aca1e..0f2db0bfd 100644
--- a/src/test/kc/screen-show-spiral-buckets.kc
+++ b/src/test/kc/screen-show-spiral-buckets.kc
@@ -7,9 +7,9 @@ import "sqr"
 import "atan2"
 
 // Screen containing distance to center
-const byte[1000] SCREEN_DIST; // = malloc(1000);
+const byte[] SCREEN_DIST = malloc(1000);
 // Screen containing angle to center
-const byte[1000] SCREEN_ANGLE; // = malloc(1000);
+const byte[] SCREEN_ANGLE= malloc(1000);
 // Screen containing angle to center
 const byte* SCREEN_FILL = 0x0400;
 
@@ -70,15 +70,15 @@ void main() {
 const byte NUM_BUCKETS = 0x30;
 
 // Array containing the bucket size for each of the distance buckets
-const byte[NUM_BUCKETS] BUCKET_SIZES; // = malloc(NUM_BUCKETS*sizeof(byte));
+const byte[] BUCKET_SIZES = malloc(NUM_BUCKETS*sizeof(byte));
 
 // Buckets containing screen indices for each distance from the center.
 // BUCKETS[dist] is an array of words containing screen indices.
 // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
-const word*[NUM_BUCKETS] BUCKETS; // = malloc(NUM_BUCKETS*sizeof(word*));
+const word*[] BUCKETS = malloc(NUM_BUCKETS*sizeof(word*));
 
 // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
-const byte[NUM_BUCKETS] BUCKET_IDX; // = malloc(NUM_BUCKETS*sizeof(byte));
+const byte[] BUCKET_IDX = malloc(NUM_BUCKETS*sizeof(byte));
 
 // Initialize buckets containing indices of chars on the screen with specific distances to the center.
 void init_buckets(byte* screen) {
diff --git a/src/test/ref/screen-show-spiral-buckets.asm b/src/test/ref/screen-show-spiral-buckets.asm
index 9f2e94c3b..98db1a967 100644
--- a/src/test/ref/screen-show-spiral-buckets.asm
+++ b/src/test/ref/screen-show-spiral-buckets.asm
@@ -1,9 +1,11 @@
 // Fill screen using a spiral based on distance-to-center / angle-to-center
 // Utilizes a bucket sort for identifying the minimum angle/distance
 .pc = $801 "Basic"
-:BasicUpstart(main)
+:BasicUpstart(bbegin)
 .pc = $80d "Program"
   .const SIZEOF_WORD = 2
+  .const SIZEOF_BYTE = 1
+  .const SIZEOF_POINTER = 2
   .label RASTER = $d012
   .label BORDERCOL = $d020
   // Color Ram
@@ -12,7 +14,6 @@
   .label HEAP_TOP = $a000
   // The number of iterations performed during 16-bit CORDIC atan2 calculation
   .const CORDIC_ITERATIONS_16 = $f
-  // = malloc(1000);
   // Screen containing angle to center
   .label SCREEN_FILL = $400
   // Char to fill with
@@ -22,20 +23,92 @@
   .const NUM_SQUARES = $30
   .label heap_head = $12
   .label SQUARES = $14
+  // Screen containing distance to center
+  .label SCREEN_DIST = $34
+  // Screen containing angle to center
+  .label SCREEN_ANGLE = $36
+  // Array containing the bucket size for each of the distance buckets
+  .label BUCKET_SIZES = $38
+  // Buckets containing screen indices for each distance from the center.
+  // BUCKETS[dist] is an array of words containing screen indices.
+  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
+  .label BUCKETS = $3a
+  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
+  .label BUCKET_IDX = $3c
+bbegin:
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  lda #<HEAP_TOP
+  sta heap_head
+  lda #>HEAP_TOP
+  sta heap_head+1
+  jsr malloc
+  lda malloc.mem
+  sta SCREEN_DIST
+  lda malloc.mem+1
+  sta SCREEN_DIST+1
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  jsr malloc
+  lda malloc.mem
+  sta SCREEN_ANGLE
+  lda malloc.mem+1
+  sta SCREEN_ANGLE+1
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  jsr malloc
+  lda malloc.mem
+  sta BUCKET_SIZES
+  lda malloc.mem+1
+  sta BUCKET_SIZES+1
+  lda #NUM_BUCKETS*SIZEOF_POINTER
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  jsr malloc
+  lda malloc.mem
+  sta BUCKETS
+  lda malloc.mem+1
+  sta BUCKETS+1
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  jsr malloc
+  lda malloc.mem
+  sta BUCKET_IDX
+  lda malloc.mem+1
+  sta BUCKET_IDX+1
+  jsr main
+  rts
 main: {
-    .label bucket = $34
-    .label bucket_size = $36
+    .label bucket = $3e
+    .label bucket_size = $40
     .label bucket_idx = 2
     .label offset = 6
-    .label fill = $37
-    .label angle = $39
+    .label fill = $41
+    .label angle = $43
     .label min_angle = 3
     .label fill1 = 6
     .label min_offset = 6
     .label min_offset_5 = 4
     .label min_offset_7 = 4
     sei
+    lda SCREEN_DIST
+    sta init_dist_screen.screen
+    lda SCREEN_DIST+1
+    sta init_dist_screen.screen+1
     jsr init_dist_screen
+    lda SCREEN_ANGLE
+    sta init_angle_screen.screen
+    lda SCREEN_ANGLE+1
+    sta init_angle_screen.screen+1
     jsr init_angle_screen
     jsr init_buckets
     lda #0
@@ -48,12 +121,13 @@ main: {
     lda bucket_idx
     asl
     tay
-    lda BUCKETS,y
+    lda (BUCKETS),y
     sta bucket
-    lda BUCKETS+1,y
+    iny
+    lda (BUCKETS),y
     sta bucket+1
     ldy bucket_idx
-    lda BUCKET_SIZES,y
+    lda (BUCKET_SIZES),y
     sta bucket_size
     cmp #0
     beq b4
@@ -84,12 +158,12 @@ main: {
     ldy #0
     cmp (fill),y
     beq b18
-    lda offset
+    lda SCREEN_ANGLE
     clc
-    adc #<SCREEN_ANGLE
+    adc offset
     sta angle
-    lda offset+1
-    adc #>SCREEN_ANGLE
+    lda SCREEN_ANGLE+1
+    adc offset+1
     sta angle+1
     lda (angle),y
     cmp min_angle
@@ -154,41 +228,49 @@ main: {
     jmp b6
 }
 // Initialize buckets containing indices of chars on the screen with specific distances to the center.
+// init_buckets(byte* zeropage($34) screen)
 init_buckets: {
     .label _5 = $14
-    .label _9 = $3d
-    .label _10 = $3f
-    .label _12 = $3b
-    .label _13 = $3d
+    .label _9 = $48
+    .label _10 = $4a
+    .label _12 = $45
+    .label _13 = $48
+    .label screen = $34
     .label dist = 8
     .label i1 = $a
     .label i2 = $c
-    .label bucket = $3d
+    .label distance = $47
+    .label bucket = $48
     .label dist_3 = $e
     .label i4 = $10
     .label dist_5 = $e
     .label _15 = $14
-    .label _16 = $3b
-    .label _17 = $3d
-    ldx #0
+    .label _16 = $45
+    .label _17 = $48
+    .label dist_8 = $e
+    ldy #0
   // Init bucket sizes to 0
   b1:
     lda #0
-    sta BUCKET_SIZES,x
-    inx
-    cpx #NUM_BUCKETS-1+1
+    sta (BUCKET_SIZES),y
+    iny
+    cpy #NUM_BUCKETS-1+1
     bne b1
+    lda screen
+    sta dist
+    lda screen+1
+    sta dist+1
+    lda #<0
     sta i1
     sta i1+1
-    lda #<SCREEN_DIST
-    sta dist
-    lda #>SCREEN_DIST
-    sta dist+1
-  b2:
+  b3:
     ldy #0
     lda (dist),y
-    tax
-    inc BUCKET_SIZES,x
+    tay
+    lda (BUCKET_SIZES),y
+    clc
+    adc #1
+    sta (BUCKET_SIZES),y
     inc dist
     bne !+
     inc dist+1
@@ -199,21 +281,21 @@ init_buckets: {
   !:
     lda i1+1
     cmp #>$3e8
-    bne b2
+    bne b3
     lda i1
     cmp #<$3e8
-    bne b2
+    bne b3
     lda #<0
     sta i2
     sta i2+1
   // Allocate the buckets
-  b3:
-    lda i2
+  b4:
+    lda BUCKET_SIZES
     clc
-    adc #<BUCKET_SIZES
+    adc i2
     sta _15
-    lda i2+1
-    adc #>BUCKET_SIZES
+    lda BUCKET_SIZES+1
+    adc i2+1
     sta _15+1
     ldy #0
     lda (malloc.size),y
@@ -229,12 +311,12 @@ init_buckets: {
     lda i2+1
     rol
     sta _12+1
-    clc
     lda _16
-    adc #<BUCKETS
+    clc
+    adc BUCKETS
     sta _16
     lda _16+1
-    adc #>BUCKETS
+    adc BUCKETS+1
     sta _16+1
     ldy #0
     lda _5
@@ -248,40 +330,40 @@ init_buckets: {
   !:
     lda i2+1
     cmp #>NUM_BUCKETS-1+1
-    bne b3
+    bne b4
     lda i2
     cmp #<NUM_BUCKETS-1+1
-    bne b3
-    ldx #0
-  // Iterate all distances and fill the buckets with indices into the screens
-  b4:
-    lda #0
-    sta BUCKET_IDX,x
-    inx
-    cpx #NUM_BUCKETS-1+1
     bne b4
+    ldy #0
+  // Iterate all distances and fill the buckets with indices into the screens
+  b5:
+    lda #0
+    sta (BUCKET_IDX),y
+    iny
+    cpy #NUM_BUCKETS-1+1
+    bne b5
+    lda screen
+    sta dist_8
+    lda screen+1
+    sta dist_8+1
+    lda #<0
     sta i4
     sta i4+1
-    lda #<SCREEN_DIST
-    sta dist_5
-    lda #>SCREEN_DIST
-    sta dist_5+1
-  b5:
+  b7:
     ldy #0
     lda (dist_5),y
-    tax
-    txa
+    sta distance
     sta _9
     tya
     sta _9+1
     asl _13
     rol _13+1
-    clc
     lda _17
-    adc #<BUCKETS
+    clc
+    adc BUCKETS
     sta _17
     lda _17+1
-    adc #>BUCKETS
+    adc BUCKETS+1
     sta _17+1
     lda (bucket),y
     pha
@@ -292,12 +374,13 @@ init_buckets: {
     sta bucket
     lda dist_5
     sec
-    sbc #<SCREEN_DIST
+    sbc screen
     sta _10
     lda dist_5+1
-    sbc #>SCREEN_DIST
+    sbc screen+1
     sta _10+1
-    lda BUCKET_IDX,x
+    ldy distance
+    lda (BUCKET_IDX),y
     asl
     tay
     lda _10
@@ -305,7 +388,11 @@ init_buckets: {
     iny
     lda _10+1
     sta (bucket),y
-    inc BUCKET_IDX,x
+    ldy distance
+    lda (BUCKET_IDX),y
+    clc
+    adc #1
+    sta (BUCKET_IDX),y
     inc dist_3
     bne !+
     inc dist_3+1
@@ -316,10 +403,10 @@ init_buckets: {
   !:
     lda i4+1
     cmp #>$3e8
-    bne b5
+    bne b7
     lda i4
     cmp #<$3e8
-    bne b5
+    bne b7
     rts
 }
 // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
@@ -343,24 +430,32 @@ malloc: {
 }
 // Populates 1000 bytes (a screen) with values representing the angle to the center.
 // Utilizes symmetry around the center
+// init_angle_screen(byte* zeropage($17) screen)
 init_angle_screen: {
     .label _10 = $21
-    .label xw = $41
-    .label yw = $43
-    .label angle_w = $21
-    .label ang_w = $45
-    .label x = $1b
-    .label xb = $1c
+    .label screen = $17
     .label screen_topline = $19
     .label screen_bottomline = $17
+    .label xw = $4c
+    .label yw = $4e
+    .label angle_w = $21
+    .label ang_w = $50
+    .label x = $1b
+    .label xb = $1c
     .label y = $16
-    lda #<SCREEN_ANGLE+$28*$c
+    lda screen
+    clc
+    adc #<$28*$c
     sta screen_topline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen+1
+    adc #>$28*$c
     sta screen_topline+1
-    lda #<SCREEN_ANGLE+$28*$c
+    clc
+    lda screen_bottomline
+    adc #<$28*$c
     sta screen_bottomline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen_bottomline+1
+    adc #>$28*$c
     sta screen_bottomline+1
     lda #0
     sta y
@@ -435,7 +530,7 @@ init_angle_screen: {
 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
 // Finding the angle requires a binary search using CORDIC_ITERATIONS_16
 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
-// atan2_16(signed word zeropage($41) x, signed word zeropage($43) y)
+// atan2_16(signed word zeropage($4c) x, signed word zeropage($4e) y)
 atan2_16: {
     .label _2 = $1d
     .label _7 = $1f
@@ -445,8 +540,8 @@ atan2_16: {
     .label xd = $25
     .label yd = $23
     .label return = $21
-    .label x = $41
-    .label y = $43
+    .label x = $4c
+    .label y = $4e
     lda y+1
     bmi !b1+
     jmp b1
@@ -624,24 +719,25 @@ atan2_16: {
 // Populates 1000 bytes (a screen) with values representing the distance to the center.
 // The actual value stored is distance*2 to increase precision
 // Utilizes symmetry around the center
+// init_dist_screen(byte* zeropage($28) screen)
 init_dist_screen: {
-    .label yds = $46
-    .label xds = $48
-    .label ds = $48
+    .label screen = $28
+    .label screen_bottomline = $2a
+    .label yds = $51
+    .label xds = $53
+    .label ds = $53
     .label x = $2c
     .label xb = $2d
     .label screen_topline = $28
-    .label screen_bottomline = $2a
     .label y = $27
     jsr init_squares
-    lda #<SCREEN_DIST+$28*$18
+    lda screen
+    clc
+    adc #<$28*$18
     sta screen_bottomline
-    lda #>SCREEN_DIST+$28*$18
+    lda screen+1
+    adc #>$28*$18
     sta screen_bottomline+1
-    lda #<SCREEN_DIST
-    sta screen_topline
-    lda #>SCREEN_DIST
-    sta screen_topline+1
     lda #0
     sta y
   b1:
@@ -722,12 +818,12 @@ init_dist_screen: {
 // Find the (integer) square root of a word value
 // If the square is not an integer then it returns the largest integer N where N*N <= val
 // Uses a table of squares that must be initialized by calling init_squares()
-// sqrt(word zeropage($48) val)
+// sqrt(word zeropage($53) val)
 sqrt: {
     .label _1 = $2e
     .label _3 = $2e
     .label found = $2e
-    .label val = $48
+    .label val = $53
     lda SQUARES
     sta bsearch16u.items
     lda SQUARES+1
@@ -750,14 +846,14 @@ sqrt: {
 // - items - Pointer to the start of the array to search in
 // - num - The number of items in the array
 // Returns pointer to an entry in the array that matches the search key
-// bsearch16u(word zeropage($48) key, word* zeropage($2e) items, byte register(X) num)
+// bsearch16u(word zeropage($53) key, word* zeropage($2e) items, byte register(X) num)
 bsearch16u: {
     .label _2 = $2e
-    .label pivot = $4a
-    .label result = $4c
+    .label pivot = $55
+    .label result = $57
     .label return = $2e
     .label items = $2e
-    .label key = $48
+    .label key = $53
     ldx #NUM_SQUARES
   b3:
     cpx #0
@@ -833,8 +929,8 @@ bsearch16u: {
 // Uses a table of squares that must be initialized by calling init_squares()
 // sqr(byte register(A) val)
 sqr: {
-    .label return = $48
-    .label return_2 = $46
+    .label return = $53
+    .label return_2 = $51
     asl
     tay
     lda (SQUARES),y
@@ -853,10 +949,6 @@ init_squares: {
     sta malloc.size
     lda #0
     sta malloc.size+1
-    lda #<HEAP_TOP
-    sta heap_head
-    lda #>HEAP_TOP
-    sta heap_head+1
     jsr malloc
     lda SQUARES
     sta squares
@@ -895,21 +987,8 @@ init_squares: {
     bne b1
     rts
 }
-  // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
+// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
 CORDIC_ATAN2_ANGLES_16:
 .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
         .word 256*2*256*atan(1/pow(2,i))/PI/2
 
-  // Screen containing distance to center
-  SCREEN_DIST: .fill $3e8, 0
-  // = malloc(1000);
-  // Screen containing angle to center
-  SCREEN_ANGLE: .fill $3e8, 0
-  // Array containing the bucket size for each of the distance buckets
-  BUCKET_SIZES: .fill NUM_BUCKETS, 0
-  // Buckets containing screen indices for each distance from the center.
-  // BUCKETS[dist] is an array of words containing screen indices.
-  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
-  BUCKETS: .fill 2*NUM_BUCKETS, 0
-  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
-  BUCKET_IDX: .fill NUM_BUCKETS, 0
diff --git a/src/test/ref/screen-show-spiral-buckets.cfg b/src/test/ref/screen-show-spiral-buckets.cfg
index 85dcda69a..6f5bf36d9 100644
--- a/src/test/ref/screen-show-spiral-buckets.cfg
+++ b/src/test/ref/screen-show-spiral-buckets.cfg
@@ -3,450 +3,487 @@
   to:@1
 @1: scope:[]  from @begin
   [1] phi()
-  [2] call main 
+  [2] call malloc 
+  to:@4
+@4: scope:[]  from @1
+  [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
+  [4] call malloc 
+  to:@5
+@5: scope:[]  from @4
+  [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0
+  to:@2
+@2: scope:[]  from @5
+  [6] phi()
+  [7] call malloc 
+  to:@6
+@6: scope:[]  from @2
+  [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0
+  [9] call malloc 
+  to:@7
+@7: scope:[]  from @6
+  [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0
+  [11] call malloc 
+  to:@8
+@8: scope:[]  from @7
+  [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0
+  to:@3
+@3: scope:[]  from @8
+  [13] phi()
+  [14] call main 
   to:@end
-@end: scope:[]  from @1
-  [3] phi()
-main: scope:[main]  from @1
+@end: scope:[]  from @3
+  [15] phi()
+main: scope:[main]  from @3
   asm { sei  }
-  [5] call init_dist_screen 
+  [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
+  [18] call init_dist_screen 
   to:main::@14
 main::@14: scope:[main]  from main
-  [6] phi()
-  [7] call init_angle_screen 
+  [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
+  [20] call init_angle_screen 
   to:main::@15
 main::@15: scope:[main]  from main::@14
-  [8] phi()
-  [9] call init_buckets 
+  [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0
+  [22] call init_buckets 
   to:main::@1
 main::@1: scope:[main]  from main::@10 main::@11 main::@15
-  [10] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 )
+  [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 )
   to:main::@2
 main::@2: scope:[main]  from main::@1 main::@2
-  [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2
+  [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2
   to:main::@3
 main::@3: scope:[main]  from main::@2
-  [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
-  [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1
-  [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21)
-  [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6)
-  [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4
+  [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
+  [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1
+  [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21)
+  [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6)
+  [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4
   to:main::@5
 main::@5: scope:[main]  from main::@16 main::@3
-  [17] (word) main::min_offset#5 ← phi( main::@3/(word) $ffff main::@16/(word~) main::min_offset#7 )
-  [17] (byte) main::min_angle#2 ← phi( main::@3/(byte) $ff main::@16/(byte) main::min_angle#4 )
-  [17] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@16/(byte) main::i#1 )
-  [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1
-  [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22)
-  [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0
-  [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18
+  [30] (word) main::min_offset#5 ← phi( main::@3/(word) $ffff main::@16/(word~) main::min_offset#7 )
+  [30] (byte) main::min_angle#2 ← phi( main::@3/(byte) $ff main::@16/(byte) main::min_angle#4 )
+  [30] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@16/(byte) main::i#1 )
+  [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1
+  [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22)
+  [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0
+  [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18
   to:main::@7
 main::@7: scope:[main]  from main::@5
-  [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0
-  [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17
+  [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0
+  [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17
   to:main::@8
 main::@8: scope:[main]  from main::@7
-  [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0)
+  [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0)
   to:main::@6
 main::@6: scope:[main]  from main::@17 main::@18 main::@8
-  [25] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 )
-  [25] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 )
-  [26] (byte) main::i#1 ← ++ (byte) main::i#2
-  [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16
+  [38] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 )
+  [38] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 )
+  [39] (byte) main::i#1 ← ++ (byte) main::i#2
+  [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16
   to:main::@9
 main::@9: scope:[main]  from main::@6
-  [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4
+  [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4
   to:main::@10
 main::@10: scope:[main]  from main::@9
-  [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2
-  [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0
-  [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
+  [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2
+  [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0
+  [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
   to:main::@1
 main::@4: scope:[main]  from main::@3 main::@9
-  [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6
-  [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11
+  [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6
+  [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11
   to:main::@12
 main::@12: scope:[main]  from main::@4
-  [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
+  [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
   to:main::@13
 main::@13: scope:[main]  from main::@12 main::@13
-  [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
+  [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
   to:main::@13
 main::@11: scope:[main]  from main::@4
-  [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
+  [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
   to:main::@1
 main::@16: scope:[main]  from main::@6
-  [37] (word~) main::min_offset#7 ← (word) main::min_offset#2
+  [50] (word~) main::min_offset#7 ← (word) main::min_offset#2
   to:main::@5
 main::@17: scope:[main]  from main::@7
-  [38] (word~) main::min_offset#8 ← (word) main::min_offset#5
+  [51] (word~) main::min_offset#8 ← (word) main::min_offset#5
   to:main::@6
 main::@18: scope:[main]  from main::@5
-  [39] (word~) main::min_offset#10 ← (word) main::min_offset#5
+  [52] (word~) main::min_offset#10 ← (word) main::min_offset#5
   to:main::@6
 init_buckets: scope:[init_buckets]  from main::@15
-  [40] phi()
+  [53] phi()
   to:init_buckets::@1
 init_buckets::@1: scope:[init_buckets]  from init_buckets init_buckets::@1
-  [41] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 )
-  [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0
-  [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2
-  [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1
+  [54] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 )
+  [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0
+  [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2
+  [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1
   to:init_buckets::@2
-init_buckets::@2: scope:[init_buckets]  from init_buckets::@1 init_buckets::@2
-  [45] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 )
-  [45] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@2/(byte*) init_buckets::dist#1 )
-  [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
-  [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
-  [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2
-  [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2
+init_buckets::@2: scope:[init_buckets]  from init_buckets::@1
+  [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0
   to:init_buckets::@3
-init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@6
-  [50] (word) init_buckets::i2#2 ← phi( init_buckets::@6/(word) init_buckets::i2#1 init_buckets::@2/(word) 0 )
-  [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2
-  [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1
-  [53] call malloc 
-  to:init_buckets::@6
-init_buckets::@6: scope:[init_buckets]  from init_buckets::@3
-  [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
-  [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1
-  [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12
-  [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5
-  [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2
-  [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3
+init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@3
+  [59] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 )
+  [59] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*~) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 )
+  [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
+  [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
+  [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2
+  [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3
   to:init_buckets::@4
-init_buckets::@4: scope:[init_buckets]  from init_buckets::@4 init_buckets::@6
-  [60] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 )
-  [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0
-  [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2
-  [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4
+init_buckets::@4: scope:[init_buckets]  from init_buckets::@3 init_buckets::@8
+  [64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 )
+  [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2
+  [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1
+  [67] call malloc 
+  to:init_buckets::@8
+init_buckets::@8: scope:[init_buckets]  from init_buckets::@4
+  [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
+  [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1
+  [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12
+  [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5
+  [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2
+  [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4
   to:init_buckets::@5
-init_buckets::@5: scope:[init_buckets]  from init_buckets::@4 init_buckets::@5
-  [64] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 )
-  [64] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@5/(byte*) init_buckets::dist#3 )
-  [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
-  [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
-  [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1
-  [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13
-  [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17)
-  [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0
-  [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
-  [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
-  [73] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
-  [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
-  [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2
-  [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5
+init_buckets::@5: scope:[init_buckets]  from init_buckets::@5 init_buckets::@8
+  [74] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 )
+  [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0
+  [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2
+  [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5
+  to:init_buckets::@6
+init_buckets::@6: scope:[init_buckets]  from init_buckets::@5
+  [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0
+  to:init_buckets::@7
+init_buckets::@7: scope:[init_buckets]  from init_buckets::@6 init_buckets::@7
+  [79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 )
+  [79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*~) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 )
+  [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
+  [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
+  [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1
+  [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13
+  [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17)
+  [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0
+  [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
+  [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
+  [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
+  [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
+  [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2
+  [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7
   to:init_buckets::@return
-init_buckets::@return: scope:[init_buckets]  from init_buckets::@5
-  [77] return 
+init_buckets::@return: scope:[init_buckets]  from init_buckets::@7
+  [92] return 
   to:@return
-malloc: scope:[malloc]  from init_buckets::@3 init_squares
-  [78] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
-  [78] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 )
-  [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2
-  [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0
+malloc: scope:[malloc]  from @1 @2 @4 @6 @7 init_buckets::@4 init_squares
+  [93] (word) malloc::size#7 ← phi( @1/(word) $3e8 @2/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE @4/(word) $3e8 @6/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER @7/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
+  [93] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP#0 @2/(byte*) heap_head#1 @4/(byte*) heap_head#1 @6/(byte*) heap_head#1 @7/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
+  [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7
+  [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0
   to:malloc::@return
 malloc::@return: scope:[malloc]  from malloc
-  [81] return 
+  [96] return 
   to:@return
 init_angle_screen: scope:[init_angle_screen]  from main::@14
-  [82] phi()
+  [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
+  [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
   to:init_angle_screen::@1
 init_angle_screen::@1: scope:[init_angle_screen]  from init_angle_screen init_angle_screen::@3
-  [83] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 )
-  [83] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 )
-  [83] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 )
+  [99] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 )
+  [99] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 )
+  [99] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 )
   to:init_angle_screen::@2
 init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@4
-  [84] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 )
-  [84] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 )
-  [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1
-  [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2
-  [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0
-  [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1
-  [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0
-  [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
-  [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
-  [92] call atan2_16 
-  [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0
+  [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 )
+  [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 )
+  [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1
+  [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2
+  [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0
+  [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1
+  [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0
+  [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
+  [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
+  [108] call atan2_16 
+  [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0
   to:init_angle_screen::@4
 init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
-  [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
-  [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80
-  [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10
-  [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
-  [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0
-  [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12
-  [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
-  [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13
-  [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
-  [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
-  [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
-  [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
-  [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2
+  [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
+  [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80
+  [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10
+  [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
+  [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0
+  [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12
+  [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
+  [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13
+  [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
+  [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
+  [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
+  [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
+  [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2
   to:init_angle_screen::@3
 init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@4
-  [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28
-  [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28
-  [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4
-  [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1
+  [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28
+  [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28
+  [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4
+  [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1
   to:init_angle_screen::@return
 init_angle_screen::@return: scope:[init_angle_screen]  from init_angle_screen::@3
-  [111] return 
+  [127] return 
   to:@return
 atan2_16: scope:[atan2_16]  from init_angle_screen::@2
-  [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
+  [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
   to:atan2_16::@2
 atan2_16::@2: scope:[atan2_16]  from atan2_16
-  [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
+  [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
   to:atan2_16::@3
 atan2_16::@3: scope:[atan2_16]  from atan2_16::@1 atan2_16::@2
-  [114] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
-  [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
+  [130] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
+  [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
   to:atan2_16::@5
 atan2_16::@5: scope:[atan2_16]  from atan2_16::@3
-  [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
+  [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
   to:atan2_16::@6
 atan2_16::@6: scope:[atan2_16]  from atan2_16::@4 atan2_16::@5
-  [117] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 )
+  [133] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 )
   to:atan2_16::@10
 atan2_16::@10: scope:[atan2_16]  from atan2_16::@19 atan2_16::@6
-  [118] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
-  [118] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
-  [118] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
-  [118] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 )
-  [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
+  [134] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
+  [134] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
+  [134] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
+  [134] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 )
+  [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
   to:atan2_16::@12
 atan2_16::@12: scope:[atan2_16]  from atan2_16::@10 atan2_16::@19
-  [120] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
-  [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
-  [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
+  [136] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
+  [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
+  [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
   to:atan2_16::@21
 atan2_16::@21: scope:[atan2_16]  from atan2_16::@12
-  [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
+  [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
   to:atan2_16::@7
 atan2_16::@7: scope:[atan2_16]  from atan2_16::@12 atan2_16::@21
-  [124] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
-  [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
+  [140] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
+  [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
   to:atan2_16::@9
 atan2_16::@9: scope:[atan2_16]  from atan2_16::@7
-  [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
+  [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
   to:atan2_16::@8
 atan2_16::@8: scope:[atan2_16]  from atan2_16::@7 atan2_16::@9
-  [127] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
+  [143] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
   to:atan2_16::@return
 atan2_16::@return: scope:[atan2_16]  from atan2_16::@8
-  [128] return 
+  [144] return 
   to:@return
 atan2_16::@11: scope:[atan2_16]  from atan2_16::@10
-  [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2
-  [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
-  [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3
+  [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2
+  [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
+  [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3
   to:atan2_16::@13
 atan2_16::@13: scope:[atan2_16]  from atan2_16::@11 atan2_16::@14
-  [132] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 )
-  [132] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 )
-  [132] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
-  [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
+  [148] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 )
+  [148] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 )
+  [148] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
+  [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
   to:atan2_16::@15
 atan2_16::@15: scope:[atan2_16]  from atan2_16::@13
-  [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
+  [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
   to:atan2_16::@16
 atan2_16::@16: scope:[atan2_16]  from atan2_16::@15
-  [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
-  [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1
+  [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
+  [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1
   to:atan2_16::@17
 atan2_16::@17: scope:[atan2_16]  from atan2_16::@15 atan2_16::@16
-  [137] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 )
-  [137] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 )
-  [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
+  [153] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 )
+  [153] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 )
+  [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
   to:atan2_16::@20
 atan2_16::@20: scope:[atan2_16]  from atan2_16::@17
-  [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
-  [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
-  [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
-  [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
+  [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
+  [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
+  [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
+  [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
   to:atan2_16::@19
 atan2_16::@19: scope:[atan2_16]  from atan2_16::@18 atan2_16::@20
-  [143] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
-  [143] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
-  [143] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
-  [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
-  [145] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12
+  [159] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
+  [159] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
+  [159] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
+  [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
+  [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12
   to:atan2_16::@10
 atan2_16::@18: scope:[atan2_16]  from atan2_16::@17
-  [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
-  [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
-  [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
-  [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
+  [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
+  [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
+  [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
+  [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
   to:atan2_16::@19
 atan2_16::@14: scope:[atan2_16]  from atan2_16::@13
-  [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
-  [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
-  [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2
+  [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
+  [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
+  [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2
   to:atan2_16::@13
 atan2_16::@4: scope:[atan2_16]  from atan2_16::@3
-  [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0
+  [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0
   to:atan2_16::@6
 atan2_16::@1: scope:[atan2_16]  from atan2_16
-  [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0
+  [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0
   to:atan2_16::@3
 init_dist_screen: scope:[init_dist_screen]  from main
-  [155] phi()
-  [156] call init_squares 
+  [171] phi()
+  [172] call init_squares 
+  to:init_dist_screen::@10
+init_dist_screen::@10: scope:[init_dist_screen]  from init_dist_screen
+  [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18
   to:init_dist_screen::@1
-init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen init_dist_screen::@9
-  [157] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 )
-  [157] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0 )
-  [157] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 )
-  [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
-  [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
+init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen::@10 init_dist_screen::@9
+  [174] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#0 )
+  [174] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen#0 )
+  [174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen::@10/(byte) 0 )
+  [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
+  [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
   to:init_dist_screen::@3
 init_dist_screen::@3: scope:[init_dist_screen]  from init_dist_screen::@1
-  [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0
+  [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0
   to:init_dist_screen::@4
 init_dist_screen::@4: scope:[init_dist_screen]  from init_dist_screen::@2 init_dist_screen::@3
-  [161] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 )
-  [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
-  [163] call sqr 
-  [164] (word) sqr::return#2 ← (word) sqr::return#0
-  to:init_dist_screen::@10
-init_dist_screen::@10: scope:[init_dist_screen]  from init_dist_screen::@4
-  [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
+  [178] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 )
+  [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
+  [180] call sqr 
+  [181] (word) sqr::return#2 ← (word) sqr::return#0
+  to:init_dist_screen::@11
+init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@4
+  [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
   to:init_dist_screen::@5
-init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@10 init_dist_screen::@12
-  [166] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 )
-  [166] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 )
-  [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
-  [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
+init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@11 init_dist_screen::@13
+  [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 )
+  [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 )
+  [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
+  [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
   to:init_dist_screen::@7
 init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
-  [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0
+  [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0
   to:init_dist_screen::@8
 init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6 init_dist_screen::@7
-  [170] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 )
-  [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
-  [172] call sqr 
-  [173] (word) sqr::return#3 ← (word) sqr::return#0
-  to:init_dist_screen::@11
-init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@8
-  [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
-  [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
-  [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
-  [177] call sqrt 
-  [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0
+  [187] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 )
+  [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
+  [189] call sqr 
+  [190] (word) sqr::return#3 ← (word) sqr::return#0
   to:init_dist_screen::@12
-init_dist_screen::@12: scope:[init_dist_screen]  from init_dist_screen::@11
-  [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
-  [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
-  [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
-  [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
-  [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
-  [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
-  [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
-  [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5
+init_dist_screen::@12: scope:[init_dist_screen]  from init_dist_screen::@8
+  [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
+  [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
+  [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
+  [194] call sqrt 
+  [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0
+  to:init_dist_screen::@13
+init_dist_screen::@13: scope:[init_dist_screen]  from init_dist_screen::@12
+  [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
+  [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
+  [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
+  [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
+  [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
+  [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
+  [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
+  [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5
   to:init_dist_screen::@9
-init_dist_screen::@9: scope:[init_dist_screen]  from init_dist_screen::@12
-  [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28
-  [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28
-  [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
-  [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1
+init_dist_screen::@9: scope:[init_dist_screen]  from init_dist_screen::@13
+  [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28
+  [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28
+  [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
+  [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1
   to:init_dist_screen::@return
 init_dist_screen::@return: scope:[init_dist_screen]  from init_dist_screen::@9
-  [191] return 
+  [208] return 
   to:@return
 init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
-  [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27
+  [209] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27
   to:init_dist_screen::@8
 init_dist_screen::@2: scope:[init_dist_screen]  from init_dist_screen::@1
-  [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
+  [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
   to:init_dist_screen::@4
-sqrt: scope:[sqrt]  from init_dist_screen::@11
-  [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0
-  [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
-  [196] call bsearch16u 
-  [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
+sqrt: scope:[sqrt]  from init_dist_screen::@12
+  [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0
+  [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
+  [213] call bsearch16u 
+  [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
   to:sqrt::@1
 sqrt::@1: scope:[sqrt]  from sqrt
-  [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
-  [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
-  [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
-  [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
+  [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
+  [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
+  [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
+  [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
   to:sqrt::@return
 sqrt::@return: scope:[sqrt]  from sqrt::@1
-  [202] return 
+  [219] return 
   to:@return
 bsearch16u: scope:[bsearch16u]  from sqrt
-  [203] phi()
+  [220] phi()
   to:bsearch16u::@3
 bsearch16u::@3: scope:[bsearch16u]  from bsearch16u bsearch16u::@7
-  [204] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
-  [204] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
-  [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
+  [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
+  [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
+  [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
   to:bsearch16u::@5
 bsearch16u::@5: scope:[bsearch16u]  from bsearch16u::@3
-  [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
+  [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
   to:bsearch16u::@1
 bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@5
-  [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
+  [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
   to:bsearch16u::@2
 bsearch16u::@2: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@5
-  [208] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
+  [225] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
   to:bsearch16u::@return
 bsearch16u::@return: scope:[bsearch16u]  from bsearch16u::@2 bsearch16u::@8
-  [209] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
-  [210] return 
+  [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
+  [227] return 
   to:@return
 bsearch16u::@4: scope:[bsearch16u]  from bsearch16u::@3
-  [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
-  [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
-  [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
-  [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
-  [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
+  [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
+  [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
+  [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
+  [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
+  [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
   to:bsearch16u::@8
 bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@4
-  [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
+  [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
   to:bsearch16u::@return
 bsearch16u::@6: scope:[bsearch16u]  from bsearch16u::@4
-  [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
+  [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
   to:bsearch16u::@9
 bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@6
-  [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
-  [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
+  [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
+  [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
   to:bsearch16u::@7
 bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@6 bsearch16u::@9
-  [220] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
-  [220] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
-  [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
+  [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
+  [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
+  [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
   to:bsearch16u::@3
 sqr: scope:[sqr]  from init_dist_screen::@4 init_dist_screen::@8
-  [222] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
-  [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
-  [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
+  [239] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
+  [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
+  [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
   to:sqr::@return
 sqr::@return: scope:[sqr]  from sqr
-  [225] return 
+  [242] return 
   to:@return
 init_squares: scope:[init_squares]  from init_dist_screen
-  [226] phi()
-  [227] call malloc 
+  [243] phi()
+  [244] call malloc 
   to:init_squares::@2
 init_squares::@2: scope:[init_squares]  from init_squares
-  [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
-  [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1
+  [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
+  [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1
   to:init_squares::@1
 init_squares::@1: scope:[init_squares]  from init_squares::@1 init_squares::@2
-  [230] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 )
-  [230] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 )
-  [230] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 )
-  [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
-  [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
-  [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
-  [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
-  [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
-  [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
-  [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1
+  [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 )
+  [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 )
+  [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 )
+  [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
+  [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
+  [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
+  [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
+  [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
+  [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
+  [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1
   to:init_squares::@return
 init_squares::@return: scope:[init_squares]  from init_squares::@1
-  [238] return 
+  [255] return 
   to:@return
diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log
index e913fa468..c11288bd1 100644
--- a/src/test/ref/screen-show-spiral-buckets.log
+++ b/src/test/ref/screen-show-spiral-buckets.log
@@ -1,5 +1,5 @@
-Resolved forward reference BUCKETS to (word*[NUM_BUCKETS]) BUCKETS
-Resolved forward reference BUCKET_SIZES to (byte[NUM_BUCKETS]) BUCKET_SIZES
+Resolved forward reference BUCKETS to (word*[]) BUCKETS
+Resolved forward reference BUCKET_SIZES to (byte[]) BUCKET_SIZES
 Resolved forward reference NUM_BUCKETS to (byte) NUM_BUCKETS
 Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
 Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
@@ -9,11 +9,11 @@ Fixing pointer addition (word~) sqrt::$1 ← (word*) sqrt::found - (word*) SQUAR
 Fixing pointer array-indexing *((word*) SQUARES + (byte) sqr::val)
 Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
 Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
-Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (byte) main::bucket_idx)
+Fixing pointer array-indexing *((word*[]) BUCKETS + (byte) main::bucket_idx)
 Fixing pointer array-indexing *((word[]) main::bucket + (byte) main::i)
-Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (word) init_buckets::i2)
-Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (word~) init_buckets::$9)
-Fixing pointer array-indexing *((word*) init_buckets::bucket + *((byte[NUM_BUCKETS]) BUCKET_IDX + (byte) init_buckets::distance))
+Fixing pointer array-indexing *((word*[]) BUCKETS + (word) init_buckets::i2)
+Fixing pointer array-indexing *((word*[]) BUCKETS + (word~) init_buckets::$9)
+Fixing pointer array-indexing *((word*) init_buckets::bucket + *((byte[]) BUCKET_IDX + (byte) init_buckets::distance))
 Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift
 Identified constant variable (byte*) HEAP_TOP
 Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
@@ -82,19 +82,19 @@ CONTROL FLOW GRAPH SSA
   (byte*) HEAP_TOP#0 ← ((byte*)) (number) $a000
   (byte*) heap_head#0 ← (byte*) HEAP_TOP#0
   to:@7
-malloc: scope:[malloc]  from init_buckets::@5 init_squares
-  (word) malloc::size#2 ← phi( init_buckets::@5/(word) malloc::size#1 init_squares/(word) malloc::size#0 )
-  (byte*) heap_head#13 ← phi( init_buckets::@5/(byte*) heap_head#25 init_squares/(byte*) heap_head#26 )
-  (byte*~) malloc::$0 ← (byte*) heap_head#13 - (word) malloc::size#2
+malloc: scope:[malloc]  from @12 @13 @17 @19 @20 init_buckets::@5 init_squares
+  (word) malloc::size#7 ← phi( @12/(word) malloc::size#1 @13/(word) malloc::size#3 @17/(word) malloc::size#2 @19/(word) malloc::size#4 @20/(word) malloc::size#5 init_buckets::@5/(word) malloc::size#6 init_squares/(word) malloc::size#0 )
+  (byte*) heap_head#18 ← phi( @12/(byte*) heap_head#35 @13/(byte*) heap_head#36 @17/(byte*) heap_head#5 @19/(byte*) heap_head#10 @20/(byte*) heap_head#11 init_buckets::@5/(byte*) heap_head#37 init_squares/(byte*) heap_head#38 )
+  (byte*~) malloc::$0 ← (byte*) heap_head#18 - (word) malloc::size#7
   (byte*) malloc::mem#0 ← (byte*~) malloc::$0
   (byte*) heap_head#1 ← (byte*) malloc::mem#0
   (void*) malloc::return#0 ← ((void*)) (byte*) malloc::mem#0
   to:malloc::@return
 malloc::@return: scope:[malloc]  from malloc
-  (byte*) heap_head#14 ← phi( malloc/(byte*) heap_head#1 )
-  (void*) malloc::return#4 ← phi( malloc/(void*) malloc::return#0 )
-  (void*) malloc::return#1 ← (void*) malloc::return#4
-  (byte*) heap_head#2 ← (byte*) heap_head#14
+  (byte*) heap_head#19 ← phi( malloc/(byte*) heap_head#1 )
+  (void*) malloc::return#9 ← phi( malloc/(void*) malloc::return#0 )
+  (void*) malloc::return#1 ← (void*) malloc::return#9
+  (byte*) heap_head#2 ← (byte*) heap_head#19
   return 
   to:@return
 bsearch16u: scope:[bsearch16u]  from sqrt
@@ -180,12 +180,12 @@ bsearch16u::@3: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@2
   (word*) bsearch16u::return#2 ← (word*~) bsearch16u::$4
   to:bsearch16u::@return
 @7: scope:[]  from @4
-  (byte*) heap_head#55 ← phi( @4/(byte*) heap_head#0 )
+  (byte*) heap_head#54 ← phi( @4/(byte*) heap_head#0 )
   (byte) NUM_SQUARES#0 ← (number) $ff
   (word*) SQUARES#0 ← (word*) 0
   to:@10
 init_squares: scope:[init_squares]  from init_dist_screen
-  (byte*) heap_head#26 ← phi( init_dist_screen/(byte*) heap_head#32 )
+  (byte*) heap_head#38 ← phi( init_dist_screen/(byte*) heap_head#44 )
   (byte) NUM_SQUARES#6 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 )
   (byte~) init_squares::$0 ← (byte) NUM_SQUARES#6 * (const byte) SIZEOF_WORD
   (word) malloc::size#0 ← (byte~) init_squares::$0
@@ -194,10 +194,10 @@ init_squares: scope:[init_squares]  from init_dist_screen
   to:init_squares::@3
 init_squares::@3: scope:[init_squares]  from init_squares
   (byte) NUM_SQUARES#7 ← phi( init_squares/(byte) NUM_SQUARES#6 )
-  (byte*) heap_head#15 ← phi( init_squares/(byte*) heap_head#2 )
-  (void*) malloc::return#5 ← phi( init_squares/(void*) malloc::return#2 )
-  (void*~) init_squares::$1 ← (void*) malloc::return#5
-  (byte*) heap_head#3 ← (byte*) heap_head#15
+  (byte*) heap_head#20 ← phi( init_squares/(byte*) heap_head#2 )
+  (void*) malloc::return#10 ← phi( init_squares/(void*) malloc::return#2 )
+  (void*~) init_squares::$1 ← (void*) malloc::return#10
+  (byte*) heap_head#3 ← (byte*) heap_head#20
   (word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1
   (word*) init_squares::squares#0 ← (word*) SQUARES#1
   (word) init_squares::sqr#0 ← (number) 0
@@ -206,7 +206,7 @@ init_squares::@3: scope:[init_squares]  from init_squares
   to:init_squares::@1
 init_squares::@1: scope:[init_squares]  from init_squares::@1 init_squares::@3
   (word*) SQUARES#17 ← phi( init_squares::@1/(word*) SQUARES#17 init_squares::@3/(word*) SQUARES#1 )
-  (byte*) heap_head#27 ← phi( init_squares::@1/(byte*) heap_head#27 init_squares::@3/(byte*) heap_head#3 )
+  (byte*) heap_head#39 ← phi( init_squares::@1/(byte*) heap_head#39 init_squares::@3/(byte*) heap_head#3 )
   (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@3/(byte) init_squares::i#0 )
   (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 )
   (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@3/(word) init_squares::sqr#0 )
@@ -221,8 +221,8 @@ init_squares::@1: scope:[init_squares]  from init_squares::@1 init_squares::@3
   to:init_squares::@return
 init_squares::@return: scope:[init_squares]  from init_squares::@1
   (word*) SQUARES#8 ← phi( init_squares::@1/(word*) SQUARES#17 )
-  (byte*) heap_head#16 ← phi( init_squares::@1/(byte*) heap_head#27 )
-  (byte*) heap_head#4 ← (byte*) heap_head#16
+  (byte*) heap_head#21 ← phi( init_squares::@1/(byte*) heap_head#39 )
+  (byte*) heap_head#4 ← (byte*) heap_head#21
   (word*) SQUARES#2 ← (word*) SQUARES#8
   return 
   to:@return
@@ -264,9 +264,9 @@ sqrt::@return: scope:[sqrt]  from sqrt::@2
   return 
   to:@return
 @10: scope:[]  from @7
-  (word*) SQUARES#42 ← phi( @7/(word*) SQUARES#0 )
-  (byte*) heap_head#49 ← phi( @7/(byte*) heap_head#55 )
-  (byte) NUM_SQUARES#31 ← phi( @7/(byte) NUM_SQUARES#0 )
+  (word*) SQUARES#57 ← phi( @7/(word*) SQUARES#0 )
+  (byte) NUM_SQUARES#51 ← phi( @7/(byte) NUM_SQUARES#0 )
+  (byte*) heap_head#47 ← phi( @7/(byte*) heap_head#54 )
   (byte) CORDIC_ITERATIONS_16#0 ← (number) $f
   (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 ← kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
         .word 256*2*256*atan(1/pow(2,i))/PI/2
@@ -483,78 +483,100 @@ atan2_16::@return: scope:[atan2_16]  from atan2_16::@8
   return 
   to:@return
 @12: scope:[]  from @10
-  (word*) SQUARES#39 ← phi( @10/(word*) SQUARES#42 )
-  (byte*) heap_head#45 ← phi( @10/(byte*) heap_head#49 )
-  (byte) NUM_SQUARES#28 ← phi( @10/(byte) NUM_SQUARES#31 )
-  (byte[$3e8]) SCREEN_DIST#0 ← { fill( $3e8, 0) }
-  (byte[$3e8]) SCREEN_ANGLE#0 ← { fill( $3e8, 0) }
+  (word*) SQUARES#56 ← phi( @10/(word*) SQUARES#57 )
+  (byte) NUM_SQUARES#49 ← phi( @10/(byte) NUM_SQUARES#51 )
+  (byte*) heap_head#35 ← phi( @10/(byte*) heap_head#47 )
+  (word) malloc::size#1 ← (number) $3e8
+  call malloc 
+  (void*) malloc::return#3 ← (void*) malloc::return#1
+  to:@17
+@17: scope:[]  from @12
+  (word*) SQUARES#54 ← phi( @12/(word*) SQUARES#56 )
+  (byte) NUM_SQUARES#45 ← phi( @12/(byte) NUM_SQUARES#49 )
+  (byte*) heap_head#22 ← phi( @12/(byte*) heap_head#2 )
+  (void*) malloc::return#11 ← phi( @12/(void*) malloc::return#3 )
+  (void*~) $0 ← (void*) malloc::return#11
+  (byte*) heap_head#5 ← (byte*) heap_head#22
+  (byte[]) SCREEN_DIST#0 ← ((byte*)) (void*~) $0
+  (word) malloc::size#2 ← (number) $3e8
+  call malloc 
+  (void*) malloc::return#4 ← (void*) malloc::return#1
+  to:@18
+@18: scope:[]  from @17
+  (word*) SQUARES#53 ← phi( @17/(word*) SQUARES#54 )
+  (byte) NUM_SQUARES#43 ← phi( @17/(byte) NUM_SQUARES#45 )
+  (byte*) heap_head#23 ← phi( @17/(byte*) heap_head#2 )
+  (void*) malloc::return#12 ← phi( @17/(void*) malloc::return#4 )
+  (void*~) $1 ← (void*) malloc::return#12
+  (byte*) heap_head#6 ← (byte*) heap_head#23
+  (byte[]) SCREEN_ANGLE#0 ← ((byte*)) (void*~) $1
   (byte*) SCREEN_FILL#0 ← ((byte*)) (number) $400
   (byte) FILL_CHAR#0 ← (byte) '*'
   to:@13
 main: scope:[main]  from @16
   (word*) SQUARES#21 ← phi( @16/(word*) SQUARES#25 )
-  (byte*) heap_head#28 ← phi( @16/(byte*) heap_head#34 )
+  (byte*) heap_head#40 ← phi( @16/(byte*) heap_head#46 )
   (byte) NUM_SQUARES#14 ← phi( @16/(byte) NUM_SQUARES#17 )
   asm { sei  }
-  (byte*) init_dist_screen::screen#0 ← (byte[$3e8]) SCREEN_DIST#0
+  (byte*) init_dist_screen::screen#0 ← (byte[]) SCREEN_DIST#0
   call init_dist_screen 
   to:main::@30
 main::@30: scope:[main]  from main
   (word*) SQUARES#12 ← phi( main/(word*) SQUARES#6 )
-  (byte*) heap_head#17 ← phi( main/(byte*) heap_head#11 )
+  (byte*) heap_head#24 ← phi( main/(byte*) heap_head#16 )
   (byte) NUM_SQUARES#9 ← phi( main/(byte) NUM_SQUARES#4 )
   (byte) NUM_SQUARES#1 ← (byte) NUM_SQUARES#9
-  (byte*) heap_head#5 ← (byte*) heap_head#17
+  (byte*) heap_head#7 ← (byte*) heap_head#24
   (word*) SQUARES#3 ← (word*) SQUARES#12
-  (byte*) init_angle_screen::screen#0 ← (byte[$3e8]) SCREEN_ANGLE#0
+  (byte*) init_angle_screen::screen#0 ← (byte[]) SCREEN_ANGLE#0
   call init_angle_screen 
   to:main::@31
 main::@31: scope:[main]  from main::@30
-  (word*) SQUARES#43 ← phi( main::@30/(word*) SQUARES#3 )
-  (byte) NUM_SQUARES#32 ← phi( main::@30/(byte) NUM_SQUARES#1 )
-  (byte*) heap_head#29 ← phi( main::@30/(byte*) heap_head#5 )
-  (byte*) init_buckets::screen#0 ← (byte[$3e8]) SCREEN_DIST#0
+  (word*) SQUARES#42 ← phi( main::@30/(word*) SQUARES#3 )
+  (byte) NUM_SQUARES#31 ← phi( main::@30/(byte) NUM_SQUARES#1 )
+  (byte*) heap_head#41 ← phi( main::@30/(byte*) heap_head#7 )
+  (byte*) init_buckets::screen#0 ← (byte[]) SCREEN_DIST#0
   call init_buckets 
   to:main::@32
 main::@32: scope:[main]  from main::@31
-  (word*) SQUARES#37 ← phi( main::@31/(word*) SQUARES#43 )
-  (byte) NUM_SQUARES#26 ← phi( main::@31/(byte) NUM_SQUARES#32 )
-  (byte*) heap_head#18 ← phi( main::@31/(byte*) heap_head#9 )
-  (byte*) heap_head#6 ← (byte*) heap_head#18
+  (word*) SQUARES#37 ← phi( main::@31/(word*) SQUARES#42 )
+  (byte) NUM_SQUARES#26 ← phi( main::@31/(byte) NUM_SQUARES#31 )
+  (byte*) heap_head#25 ← phi( main::@31/(byte*) heap_head#14 )
+  (byte*) heap_head#8 ← (byte*) heap_head#25
   (byte) main::bucket_idx#0 ← (number) 0
   to:main::@1
 main::@1: scope:[main]  from main::@14 main::@17 main::@32
   (word*) SQUARES#26 ← phi( main::@14/(word*) SQUARES#35 main::@17/(word*) SQUARES#36 main::@32/(word*) SQUARES#37 )
-  (byte*) heap_head#35 ← phi( main::@14/(byte*) heap_head#42 main::@17/(byte*) heap_head#43 main::@32/(byte*) heap_head#6 )
+  (byte*) heap_head#48 ← phi( main::@14/(byte*) heap_head#55 main::@17/(byte*) heap_head#56 main::@32/(byte*) heap_head#8 )
   (byte) NUM_SQUARES#18 ← phi( main::@14/(byte) NUM_SQUARES#24 main::@17/(byte) NUM_SQUARES#25 main::@32/(byte) NUM_SQUARES#26 )
   (byte) main::bucket_idx#6 ← phi( main::@14/(byte) main::bucket_idx#8 main::@17/(byte) main::bucket_idx#9 main::@32/(byte) main::bucket_idx#0 )
   if(true) goto main::@4
   to:main::@24
 main::@4: scope:[main]  from main::@1 main::@4
   (word*) SQUARES#47 ← phi( main::@1/(word*) SQUARES#26 main::@4/(word*) SQUARES#47 )
-  (byte*) heap_head#56 ← phi( main::@1/(byte*) heap_head#35 main::@4/(byte*) heap_head#56 )
+  (byte*) heap_head#66 ← phi( main::@1/(byte*) heap_head#48 main::@4/(byte*) heap_head#66 )
   (byte) NUM_SQUARES#36 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@4/(byte) NUM_SQUARES#36 )
   (byte) main::bucket_idx#4 ← phi( main::@1/(byte) main::bucket_idx#6 main::@4/(byte) main::bucket_idx#4 )
   (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $ff
   if((bool~) main::$3) goto main::@4
   to:main::@5
 main::@5: scope:[main]  from main::@4
-  (word*) SQUARES#45 ← phi( main::@4/(word*) SQUARES#47 )
-  (byte*) heap_head#51 ← phi( main::@4/(byte*) heap_head#56 )
-  (byte) NUM_SQUARES#34 ← phi( main::@4/(byte) NUM_SQUARES#36 )
+  (word*) SQUARES#44 ← phi( main::@4/(word*) SQUARES#47 )
+  (byte*) heap_head#62 ← phi( main::@4/(byte*) heap_head#66 )
+  (byte) NUM_SQUARES#33 ← phi( main::@4/(byte) NUM_SQUARES#36 )
   (byte) main::bucket_idx#2 ← phi( main::@4/(byte) main::bucket_idx#4 )
   *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
   (byte~) main::$21 ← (byte) main::bucket_idx#2 * (const byte) SIZEOF_POINTER
-  (word[]) main::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21)
-  (byte) main::bucket_size#0 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#2)
+  (word[]) main::bucket#0 ← *((word*[]) BUCKETS#0 + (byte~) main::$21)
+  (byte) main::bucket_size#0 ← *((byte[]) BUCKET_SIZES#0 + (byte) main::bucket_idx#2)
   (bool~) main::$4 ← (byte) main::bucket_size#0 > (number) 0
   (bool~) main::$5 ← ! (bool~) main::$4
   if((bool~) main::$5) goto main::@7
   to:main::@6
 main::@7: scope:[main]  from main::@13 main::@5
-  (word*) SQUARES#38 ← phi( main::@13/(word*) SQUARES#44 main::@5/(word*) SQUARES#45 )
-  (byte*) heap_head#44 ← phi( main::@13/(byte*) heap_head#50 main::@5/(byte*) heap_head#51 )
-  (byte) NUM_SQUARES#27 ← phi( main::@13/(byte) NUM_SQUARES#33 main::@5/(byte) NUM_SQUARES#34 )
+  (word*) SQUARES#38 ← phi( main::@13/(word*) SQUARES#43 main::@5/(word*) SQUARES#44 )
+  (byte*) heap_head#57 ← phi( main::@13/(byte*) heap_head#61 main::@5/(byte*) heap_head#62 )
+  (byte) NUM_SQUARES#27 ← phi( main::@13/(byte) NUM_SQUARES#32 main::@5/(byte) NUM_SQUARES#33 )
   (byte) main::bucket_idx#3 ← phi( main::@13/(byte) main::bucket_idx#5 main::@5/(byte) main::bucket_idx#2 )
   (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#3
   (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0
@@ -562,9 +584,9 @@ main::@7: scope:[main]  from main::@13 main::@5
   if((bool~) main::$17) goto main::@17
   to:main::@21
 main::@6: scope:[main]  from main::@5
-  (word*) SQUARES#52 ← phi( main::@5/(word*) SQUARES#45 )
-  (byte*) heap_head#66 ← phi( main::@5/(byte*) heap_head#51 )
-  (byte) NUM_SQUARES#43 ← phi( main::@5/(byte) NUM_SQUARES#34 )
+  (word*) SQUARES#55 ← phi( main::@5/(word*) SQUARES#44 )
+  (byte*) heap_head#76 ← phi( main::@5/(byte*) heap_head#62 )
+  (byte) NUM_SQUARES#46 ← phi( main::@5/(byte) NUM_SQUARES#33 )
   (byte) main::bucket_idx#13 ← phi( main::@5/(byte) main::bucket_idx#2 )
   (byte) main::bucket_size#5 ← phi( main::@5/(byte) main::bucket_size#0 )
   (byte) main::min_angle#0 ← (number) $ff
@@ -572,9 +594,9 @@ main::@6: scope:[main]  from main::@5
   (byte) main::i#0 ← (number) 0
   to:main::@8
 main::@8: scope:[main]  from main::@6 main::@9
-  (word*) SQUARES#51 ← phi( main::@6/(word*) SQUARES#52 main::@9/(word*) SQUARES#48 )
-  (byte*) heap_head#63 ← phi( main::@6/(byte*) heap_head#66 main::@9/(byte*) heap_head#57 )
-  (byte) NUM_SQUARES#41 ← phi( main::@6/(byte) NUM_SQUARES#43 main::@9/(byte) NUM_SQUARES#37 )
+  (word*) SQUARES#52 ← phi( main::@6/(word*) SQUARES#55 main::@9/(word*) SQUARES#48 )
+  (byte*) heap_head#73 ← phi( main::@6/(byte*) heap_head#76 main::@9/(byte*) heap_head#67 )
+  (byte) NUM_SQUARES#42 ← phi( main::@6/(byte) NUM_SQUARES#46 main::@9/(byte) NUM_SQUARES#37 )
   (byte) main::bucket_idx#12 ← phi( main::@6/(byte) main::bucket_idx#13 main::@9/(byte) main::bucket_idx#7 )
   (word) main::min_offset#6 ← phi( main::@6/(word) main::min_offset#0 main::@9/(word) main::min_offset#4 )
   (byte) main::min_angle#3 ← phi( main::@6/(byte) main::min_angle#0 main::@9/(byte) main::min_angle#4 )
@@ -589,9 +611,9 @@ main::@8: scope:[main]  from main::@6 main::@9
   if((bool~) main::$8) goto main::@9
   to:main::@11
 main::@9: scope:[main]  from main::@11 main::@12 main::@8
-  (word*) SQUARES#48 ← phi( main::@11/(word*) SQUARES#49 main::@12/(word*) SQUARES#50 main::@8/(word*) SQUARES#51 )
-  (byte*) heap_head#57 ← phi( main::@11/(byte*) heap_head#61 main::@12/(byte*) heap_head#62 main::@8/(byte*) heap_head#63 )
-  (byte) NUM_SQUARES#37 ← phi( main::@11/(byte) NUM_SQUARES#39 main::@12/(byte) NUM_SQUARES#40 main::@8/(byte) NUM_SQUARES#41 )
+  (word*) SQUARES#48 ← phi( main::@11/(word*) SQUARES#50 main::@12/(word*) SQUARES#51 main::@8/(word*) SQUARES#52 )
+  (byte*) heap_head#67 ← phi( main::@11/(byte*) heap_head#71 main::@12/(byte*) heap_head#72 main::@8/(byte*) heap_head#73 )
+  (byte) NUM_SQUARES#37 ← phi( main::@11/(byte) NUM_SQUARES#40 main::@12/(byte) NUM_SQUARES#41 main::@8/(byte) NUM_SQUARES#42 )
   (byte) main::bucket_idx#7 ← phi( main::@11/(byte) main::bucket_idx#10 main::@12/(byte) main::bucket_idx#11 main::@8/(byte) main::bucket_idx#12 )
   (byte) main::min_angle#4 ← phi( main::@11/(byte) main::min_angle#2 main::@12/(byte) main::min_angle#1 main::@8/(byte) main::min_angle#3 )
   (word) main::min_offset#4 ← phi( main::@11/(word) main::min_offset#5 main::@12/(word) main::min_offset#1 main::@8/(word) main::min_offset#6 )
@@ -602,25 +624,25 @@ main::@9: scope:[main]  from main::@11 main::@12 main::@8
   if((bool~) main::$12) goto main::@8
   to:main::@13
 main::@11: scope:[main]  from main::@8
-  (word*) SQUARES#49 ← phi( main::@8/(word*) SQUARES#51 )
-  (byte*) heap_head#61 ← phi( main::@8/(byte*) heap_head#63 )
-  (byte) NUM_SQUARES#39 ← phi( main::@8/(byte) NUM_SQUARES#41 )
+  (word*) SQUARES#50 ← phi( main::@8/(word*) SQUARES#52 )
+  (byte*) heap_head#71 ← phi( main::@8/(byte*) heap_head#73 )
+  (byte) NUM_SQUARES#40 ← phi( main::@8/(byte) NUM_SQUARES#42 )
   (byte) main::bucket_idx#10 ← phi( main::@8/(byte) main::bucket_idx#12 )
   (word) main::min_offset#5 ← phi( main::@8/(word) main::min_offset#6 )
   (byte) main::bucket_size#2 ← phi( main::@8/(byte) main::bucket_size#4 )
   (byte) main::i#4 ← phi( main::@8/(byte) main::i#2 )
   (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#3 )
   (word) main::offset#1 ← phi( main::@8/(word) main::offset#0 )
-  (byte*~) main::$9 ← (byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#1
+  (byte*~) main::$9 ← (byte[]) SCREEN_ANGLE#0 + (word) main::offset#1
   (byte*) main::angle#0 ← (byte*~) main::$9
   (bool~) main::$10 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2
   (bool~) main::$11 ← ! (bool~) main::$10
   if((bool~) main::$11) goto main::@9
   to:main::@12
 main::@12: scope:[main]  from main::@11
-  (word*) SQUARES#50 ← phi( main::@11/(word*) SQUARES#49 )
-  (byte*) heap_head#62 ← phi( main::@11/(byte*) heap_head#61 )
-  (byte) NUM_SQUARES#40 ← phi( main::@11/(byte) NUM_SQUARES#39 )
+  (word*) SQUARES#51 ← phi( main::@11/(word*) SQUARES#50 )
+  (byte*) heap_head#72 ← phi( main::@11/(byte*) heap_head#71 )
+  (byte) NUM_SQUARES#41 ← phi( main::@11/(byte) NUM_SQUARES#40 )
   (byte) main::bucket_idx#11 ← phi( main::@11/(byte) main::bucket_idx#10 )
   (byte) main::bucket_size#3 ← phi( main::@11/(byte) main::bucket_size#2 )
   (byte) main::i#5 ← phi( main::@11/(byte) main::i#4 )
@@ -630,9 +652,9 @@ main::@12: scope:[main]  from main::@11
   (word) main::min_offset#1 ← (word) main::offset#2
   to:main::@9
 main::@13: scope:[main]  from main::@9
-  (word*) SQUARES#44 ← phi( main::@9/(word*) SQUARES#48 )
-  (byte*) heap_head#50 ← phi( main::@9/(byte*) heap_head#57 )
-  (byte) NUM_SQUARES#33 ← phi( main::@9/(byte) NUM_SQUARES#37 )
+  (word*) SQUARES#43 ← phi( main::@9/(word*) SQUARES#48 )
+  (byte*) heap_head#61 ← phi( main::@9/(byte*) heap_head#67 )
+  (byte) NUM_SQUARES#32 ← phi( main::@9/(byte) NUM_SQUARES#37 )
   (byte) main::bucket_idx#5 ← phi( main::@9/(byte) main::bucket_idx#7 )
   (word) main::min_offset#2 ← phi( main::@9/(word) main::min_offset#4 )
   (bool~) main::$13 ← (word) main::min_offset#2 != (number) $ffff
@@ -640,9 +662,9 @@ main::@13: scope:[main]  from main::@9
   if((bool~) main::$14) goto main::@7
   to:main::@14
 main::@14: scope:[main]  from main::@13
-  (word*) SQUARES#35 ← phi( main::@13/(word*) SQUARES#44 )
-  (byte*) heap_head#42 ← phi( main::@13/(byte*) heap_head#50 )
-  (byte) NUM_SQUARES#24 ← phi( main::@13/(byte) NUM_SQUARES#33 )
+  (word*) SQUARES#35 ← phi( main::@13/(word*) SQUARES#43 )
+  (byte*) heap_head#55 ← phi( main::@13/(byte*) heap_head#61 )
+  (byte) NUM_SQUARES#24 ← phi( main::@13/(byte) NUM_SQUARES#32 )
   (byte) main::bucket_idx#8 ← phi( main::@13/(byte) main::bucket_idx#5 )
   (word) main::min_offset#3 ← phi( main::@13/(word) main::min_offset#2 )
   (byte*~) main::$15 ← (byte*) SCREEN_FILL#0 + (word) main::min_offset#3
@@ -652,75 +674,111 @@ main::@14: scope:[main]  from main::@13
   to:main::@1
 main::@17: scope:[main]  from main::@7
   (word*) SQUARES#36 ← phi( main::@7/(word*) SQUARES#38 )
-  (byte*) heap_head#43 ← phi( main::@7/(byte*) heap_head#44 )
+  (byte*) heap_head#56 ← phi( main::@7/(byte*) heap_head#57 )
   (byte) NUM_SQUARES#25 ← phi( main::@7/(byte) NUM_SQUARES#27 )
   (byte) main::bucket_idx#9 ← phi( main::@7/(byte) main::bucket_idx#1 )
   *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
   to:main::@1
 main::@21: scope:[main]  from main::@7
   (word*) SQUARES#27 ← phi( main::@7/(word*) SQUARES#38 )
-  (byte*) heap_head#36 ← phi( main::@7/(byte*) heap_head#44 )
+  (byte*) heap_head#49 ← phi( main::@7/(byte*) heap_head#57 )
   (byte) NUM_SQUARES#19 ← phi( main::@7/(byte) NUM_SQUARES#27 )
   *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
   to:main::@24
 main::@24: scope:[main]  from main::@1 main::@21 main::@25
   (word*) SQUARES#22 ← phi( main::@1/(word*) SQUARES#26 main::@21/(word*) SQUARES#27 main::@25/(word*) SQUARES#28 )
-  (byte*) heap_head#30 ← phi( main::@1/(byte*) heap_head#35 main::@21/(byte*) heap_head#36 main::@25/(byte*) heap_head#37 )
+  (byte*) heap_head#42 ← phi( main::@1/(byte*) heap_head#48 main::@21/(byte*) heap_head#49 main::@25/(byte*) heap_head#50 )
   (byte) NUM_SQUARES#15 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@21/(byte) NUM_SQUARES#19 main::@25/(byte) NUM_SQUARES#20 )
   if(true) goto main::@25
   to:main::@return
 main::@25: scope:[main]  from main::@24
   (word*) SQUARES#28 ← phi( main::@24/(word*) SQUARES#22 )
-  (byte*) heap_head#37 ← phi( main::@24/(byte*) heap_head#30 )
+  (byte*) heap_head#50 ← phi( main::@24/(byte*) heap_head#42 )
   (byte) NUM_SQUARES#20 ← phi( main::@24/(byte) NUM_SQUARES#15 )
   (byte*~) main::$20 ← (byte*) COLS#0 + (number) $3e7
   *((byte*~) main::$20) ← ++ *((byte*~) main::$20)
   to:main::@24
 main::@return: scope:[main]  from main::@24
   (word*) SQUARES#13 ← phi( main::@24/(word*) SQUARES#22 )
-  (byte*) heap_head#19 ← phi( main::@24/(byte*) heap_head#30 )
+  (byte*) heap_head#26 ← phi( main::@24/(byte*) heap_head#42 )
   (byte) NUM_SQUARES#10 ← phi( main::@24/(byte) NUM_SQUARES#15 )
   (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10
-  (byte*) heap_head#7 ← (byte*) heap_head#19
+  (byte*) heap_head#9 ← (byte*) heap_head#26
   (word*) SQUARES#4 ← (word*) SQUARES#13
   return 
   to:@return
-@13: scope:[]  from @12
-  (word*) SQUARES#34 ← phi( @12/(word*) SQUARES#39 )
-  (byte*) heap_head#41 ← phi( @12/(byte*) heap_head#45 )
-  (byte) NUM_SQUARES#23 ← phi( @12/(byte) NUM_SQUARES#28 )
+@13: scope:[]  from @18
+  (word*) SQUARES#49 ← phi( @18/(word*) SQUARES#53 )
+  (byte) NUM_SQUARES#38 ← phi( @18/(byte) NUM_SQUARES#43 )
+  (byte*) heap_head#36 ← phi( @18/(byte*) heap_head#6 )
   (byte) NUM_BUCKETS#0 ← (number) $30
-  (byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 ← { fill( NUM_BUCKETS#0, 0) }
-  (word*[NUM_BUCKETS#0]) BUCKETS#0 ← { fill( NUM_BUCKETS#0, 0) }
-  (byte[NUM_BUCKETS#0]) BUCKET_IDX#0 ← { fill( NUM_BUCKETS#0, 0) }
+  (byte~) $2 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
+  (word) malloc::size#3 ← (byte~) $2
+  call malloc 
+  (void*) malloc::return#5 ← (void*) malloc::return#1
+  to:@19
+@19: scope:[]  from @13
+  (word*) SQUARES#45 ← phi( @13/(word*) SQUARES#49 )
+  (byte) NUM_SQUARES#34 ← phi( @13/(byte) NUM_SQUARES#38 )
+  (byte*) heap_head#27 ← phi( @13/(byte*) heap_head#2 )
+  (void*) malloc::return#13 ← phi( @13/(void*) malloc::return#5 )
+  (void*~) $3 ← (void*) malloc::return#13
+  (byte*) heap_head#10 ← (byte*) heap_head#27
+  (byte[]) BUCKET_SIZES#0 ← ((byte*)) (void*~) $3
+  (byte~) $4 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER
+  (word) malloc::size#4 ← (byte~) $4
+  call malloc 
+  (void*) malloc::return#6 ← (void*) malloc::return#1
+  to:@20
+@20: scope:[]  from @19
+  (word*) SQUARES#39 ← phi( @19/(word*) SQUARES#45 )
+  (byte) NUM_SQUARES#28 ← phi( @19/(byte) NUM_SQUARES#34 )
+  (byte*) heap_head#28 ← phi( @19/(byte*) heap_head#2 )
+  (void*) malloc::return#14 ← phi( @19/(void*) malloc::return#6 )
+  (void*~) $5 ← (void*) malloc::return#14
+  (byte*) heap_head#11 ← (byte*) heap_head#28
+  (word*[]) BUCKETS#0 ← ((word**)) (void*~) $5
+  (byte~) $6 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
+  (word) malloc::size#5 ← (byte~) $6
+  call malloc 
+  (void*) malloc::return#7 ← (void*) malloc::return#1
+  to:@21
+@21: scope:[]  from @20
+  (word*) SQUARES#34 ← phi( @20/(word*) SQUARES#39 )
+  (byte) NUM_SQUARES#23 ← phi( @20/(byte) NUM_SQUARES#28 )
+  (byte*) heap_head#29 ← phi( @20/(byte*) heap_head#2 )
+  (void*) malloc::return#15 ← phi( @20/(void*) malloc::return#7 )
+  (void*~) $7 ← (void*) malloc::return#15
+  (byte*) heap_head#12 ← (byte*) heap_head#29
+  (byte[]) BUCKET_IDX#0 ← ((byte*)) (void*~) $7
   to:@16
 init_buckets: scope:[init_buckets]  from main::@31
-  (byte*) heap_head#64 ← phi( main::@31/(byte*) heap_head#29 )
+  (byte*) heap_head#74 ← phi( main::@31/(byte*) heap_head#41 )
   (byte*) init_buckets::screen#6 ← phi( main::@31/(byte*) init_buckets::screen#0 )
   (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (number) 1
   (byte) init_buckets::i#0 ← (byte) 0
   to:init_buckets::@1
 init_buckets::@1: scope:[init_buckets]  from init_buckets init_buckets::@1
-  (byte*) heap_head#58 ← phi( init_buckets/(byte*) heap_head#64 init_buckets::@1/(byte*) heap_head#58 )
+  (byte*) heap_head#68 ← phi( init_buckets/(byte*) heap_head#74 init_buckets::@1/(byte*) heap_head#68 )
   (byte*) init_buckets::screen#4 ← phi( init_buckets/(byte*) init_buckets::screen#6 init_buckets::@1/(byte*) init_buckets::screen#4 )
   (byte) init_buckets::i#2 ← phi( init_buckets/(byte) init_buckets::i#0 init_buckets::@1/(byte) init_buckets::i#1 )
-  *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0
+  *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0
   (byte) init_buckets::i#1 ← (byte) init_buckets::i#2 + rangenext(0,init_buckets::$0)
   (bool~) init_buckets::$1 ← (byte) init_buckets::i#1 != rangelast(0,init_buckets::$0)
   if((bool~) init_buckets::$1) goto init_buckets::@1
   to:init_buckets::@2
 init_buckets::@2: scope:[init_buckets]  from init_buckets::@1
-  (byte*) heap_head#52 ← phi( init_buckets::@1/(byte*) heap_head#58 )
+  (byte*) heap_head#63 ← phi( init_buckets::@1/(byte*) heap_head#68 )
   (byte*) init_buckets::screen#1 ← phi( init_buckets::@1/(byte*) init_buckets::screen#4 )
   (byte*) init_buckets::dist#0 ← (byte*) init_buckets::screen#1
   (word) init_buckets::i1#0 ← (word) 0
   to:init_buckets::@3
 init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@3
   (byte*) init_buckets::screen#11 ← phi( init_buckets::@2/(byte*) init_buckets::screen#1 init_buckets::@3/(byte*) init_buckets::screen#11 )
-  (byte*) heap_head#46 ← phi( init_buckets::@2/(byte*) heap_head#52 init_buckets::@3/(byte*) heap_head#46 )
+  (byte*) heap_head#58 ← phi( init_buckets::@2/(byte*) heap_head#63 init_buckets::@3/(byte*) heap_head#58 )
   (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) init_buckets::i1#0 init_buckets::@3/(word) init_buckets::i1#1 )
   (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#0 init_buckets::@3/(byte*) init_buckets::dist#1 )
-  *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
+  *((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
   (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
   (word) init_buckets::i1#1 ← (word) init_buckets::i1#2 + rangenext(0,$3e7)
   (bool~) init_buckets::$2 ← (word) init_buckets::i1#1 != rangelast(0,$3e7)
@@ -728,74 +786,74 @@ init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@3
   to:init_buckets::@4
 init_buckets::@4: scope:[init_buckets]  from init_buckets::@3
   (byte*) init_buckets::screen#10 ← phi( init_buckets::@3/(byte*) init_buckets::screen#11 )
-  (byte*) heap_head#38 ← phi( init_buckets::@3/(byte*) heap_head#46 )
+  (byte*) heap_head#51 ← phi( init_buckets::@3/(byte*) heap_head#58 )
   (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (number) 1
   (word) init_buckets::i2#0 ← (word) 0
   to:init_buckets::@5
 init_buckets::@5: scope:[init_buckets]  from init_buckets::@11 init_buckets::@4
   (byte*) init_buckets::screen#9 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 init_buckets::@4/(byte*) init_buckets::screen#10 )
-  (byte*) heap_head#25 ← phi( init_buckets::@11/(byte*) heap_head#8 init_buckets::@4/(byte*) heap_head#38 )
+  (byte*) heap_head#37 ← phi( init_buckets::@11/(byte*) heap_head#13 init_buckets::@4/(byte*) heap_head#51 )
   (word) init_buckets::i2#2 ← phi( init_buckets::@11/(word) init_buckets::i2#1 init_buckets::@4/(word) init_buckets::i2#0 )
-  (byte~) init_buckets::$4 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
-  (word) malloc::size#1 ← (byte~) init_buckets::$4
+  (byte~) init_buckets::$4 ← *((byte[]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
+  (word) malloc::size#6 ← (byte~) init_buckets::$4
   call malloc 
-  (void*) malloc::return#3 ← (void*) malloc::return#1
+  (void*) malloc::return#8 ← (void*) malloc::return#1
   to:init_buckets::@11
 init_buckets::@11: scope:[init_buckets]  from init_buckets::@5
   (byte*) init_buckets::screen#8 ← phi( init_buckets::@5/(byte*) init_buckets::screen#9 )
   (word) init_buckets::i2#3 ← phi( init_buckets::@5/(word) init_buckets::i2#2 )
-  (byte*) heap_head#20 ← phi( init_buckets::@5/(byte*) heap_head#2 )
-  (void*) malloc::return#6 ← phi( init_buckets::@5/(void*) malloc::return#3 )
-  (void*~) init_buckets::$5 ← (void*) malloc::return#6
-  (byte*) heap_head#8 ← (byte*) heap_head#20
+  (byte*) heap_head#30 ← phi( init_buckets::@5/(byte*) heap_head#2 )
+  (void*) malloc::return#16 ← phi( init_buckets::@5/(void*) malloc::return#8 )
+  (void*~) init_buckets::$5 ← (void*) malloc::return#16
+  (byte*) heap_head#13 ← (byte*) heap_head#30
   (word~) init_buckets::$12 ← (word) init_buckets::i2#3 * (const byte) SIZEOF_POINTER
-  *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12) ← ((word*)) (void*~) init_buckets::$5
+  *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← ((word*)) (void*~) init_buckets::$5
   (word) init_buckets::i2#1 ← (word) init_buckets::i2#3 + rangenext(0,init_buckets::$3)
   (bool~) init_buckets::$6 ← (word) init_buckets::i2#1 != rangelast(0,init_buckets::$3)
   if((bool~) init_buckets::$6) goto init_buckets::@5
   to:init_buckets::@6
 init_buckets::@6: scope:[init_buckets]  from init_buckets::@11
-  (byte*) heap_head#53 ← phi( init_buckets::@11/(byte*) heap_head#8 )
+  (byte*) heap_head#64 ← phi( init_buckets::@11/(byte*) heap_head#13 )
   (byte*) init_buckets::screen#7 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 )
   (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (number) 1
   (byte) init_buckets::i3#0 ← (byte) 0
   to:init_buckets::@7
 init_buckets::@7: scope:[init_buckets]  from init_buckets::@6 init_buckets::@7
-  (byte*) heap_head#47 ← phi( init_buckets::@6/(byte*) heap_head#53 init_buckets::@7/(byte*) heap_head#47 )
+  (byte*) heap_head#59 ← phi( init_buckets::@6/(byte*) heap_head#64 init_buckets::@7/(byte*) heap_head#59 )
   (byte*) init_buckets::screen#5 ← phi( init_buckets::@6/(byte*) init_buckets::screen#7 init_buckets::@7/(byte*) init_buckets::screen#5 )
   (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) init_buckets::i3#0 init_buckets::@7/(byte) init_buckets::i3#1 )
-  *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0
+  *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0
   (byte) init_buckets::i3#1 ← (byte) init_buckets::i3#2 + rangenext(0,init_buckets::$7)
   (bool~) init_buckets::$8 ← (byte) init_buckets::i3#1 != rangelast(0,init_buckets::$7)
   if((bool~) init_buckets::$8) goto init_buckets::@7
   to:init_buckets::@8
 init_buckets::@8: scope:[init_buckets]  from init_buckets::@7
-  (byte*) heap_head#39 ← phi( init_buckets::@7/(byte*) heap_head#47 )
+  (byte*) heap_head#52 ← phi( init_buckets::@7/(byte*) heap_head#59 )
   (byte*) init_buckets::screen#2 ← phi( init_buckets::@7/(byte*) init_buckets::screen#5 )
   (byte*) init_buckets::dist#2 ← (byte*) init_buckets::screen#2
   (word) init_buckets::i4#0 ← (word) 0
   to:init_buckets::@9
 init_buckets::@9: scope:[init_buckets]  from init_buckets::@8 init_buckets::@9
-  (byte*) heap_head#31 ← phi( init_buckets::@8/(byte*) heap_head#39 init_buckets::@9/(byte*) heap_head#31 )
+  (byte*) heap_head#43 ← phi( init_buckets::@8/(byte*) heap_head#52 init_buckets::@9/(byte*) heap_head#43 )
   (word) init_buckets::i4#2 ← phi( init_buckets::@8/(word) init_buckets::i4#0 init_buckets::@9/(word) init_buckets::i4#1 )
   (byte*) init_buckets::screen#3 ← phi( init_buckets::@8/(byte*) init_buckets::screen#2 init_buckets::@9/(byte*) init_buckets::screen#3 )
   (byte*) init_buckets::dist#5 ← phi( init_buckets::@8/(byte*) init_buckets::dist#2 init_buckets::@9/(byte*) init_buckets::dist#3 )
   (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
   (word~) init_buckets::$9 ← ((word)) (byte) init_buckets::distance#0
   (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER
-  (word*) init_buckets::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13)
+  (word*) init_buckets::bucket#0 ← *((word*[]) BUCKETS#0 + (word~) init_buckets::$13)
   (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#3
-  (byte~) init_buckets::$14 ← *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD
+  (byte~) init_buckets::$14 ← *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD
   *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
-  *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
+  *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
   (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
   (word) init_buckets::i4#1 ← (word) init_buckets::i4#2 + rangenext(0,$3e7)
   (bool~) init_buckets::$11 ← (word) init_buckets::i4#1 != rangelast(0,$3e7)
   if((bool~) init_buckets::$11) goto init_buckets::@9
   to:init_buckets::@return
 init_buckets::@return: scope:[init_buckets]  from init_buckets::@9
-  (byte*) heap_head#21 ← phi( init_buckets::@9/(byte*) heap_head#31 )
-  (byte*) heap_head#9 ← (byte*) heap_head#21
+  (byte*) heap_head#31 ← phi( init_buckets::@9/(byte*) heap_head#43 )
+  (byte*) heap_head#14 ← (byte*) heap_head#31
   return 
   to:@return
 init_angle_screen: scope:[init_angle_screen]  from main::@30
@@ -873,16 +931,16 @@ init_angle_screen::@return: scope:[init_angle_screen]  from init_angle_screen::@
 init_dist_screen: scope:[init_dist_screen]  from main
   (byte*) init_dist_screen::screen#2 ← phi( main/(byte*) init_dist_screen::screen#0 )
   (word*) SQUARES#23 ← phi( main/(word*) SQUARES#21 )
-  (byte*) heap_head#32 ← phi( main/(byte*) heap_head#28 )
+  (byte*) heap_head#44 ← phi( main/(byte*) heap_head#40 )
   (byte) NUM_SQUARES#3 ← (number) $30
   call init_squares 
   to:init_dist_screen::@15
 init_dist_screen::@15: scope:[init_dist_screen]  from init_dist_screen
-  (byte) NUM_SQUARES#47 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 )
+  (byte) NUM_SQUARES#52 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 )
   (byte*) init_dist_screen::screen#1 ← phi( init_dist_screen/(byte*) init_dist_screen::screen#2 )
   (word*) SQUARES#14 ← phi( init_dist_screen/(word*) SQUARES#2 )
-  (byte*) heap_head#22 ← phi( init_dist_screen/(byte*) heap_head#4 )
-  (byte*) heap_head#10 ← (byte*) heap_head#22
+  (byte*) heap_head#32 ← phi( init_dist_screen/(byte*) heap_head#4 )
+  (byte*) heap_head#15 ← (byte*) heap_head#32
   (word*) SQUARES#5 ← (word*) SQUARES#14
   (byte*) init_dist_screen::screen_topline#0 ← (byte*) init_dist_screen::screen#1
   (byte*~) init_dist_screen::$1 ← (byte*) init_dist_screen::screen#1 + (number) $28*(number) $18
@@ -890,10 +948,10 @@ init_dist_screen::@15: scope:[init_dist_screen]  from init_dist_screen
   (byte) init_dist_screen::y#0 ← (byte) 0
   to:init_dist_screen::@1
 init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen::@11 init_dist_screen::@15
-  (byte*) heap_head#71 ← phi( init_dist_screen::@11/(byte*) heap_head#33 init_dist_screen::@15/(byte*) heap_head#10 )
+  (byte*) heap_head#81 ← phi( init_dist_screen::@11/(byte*) heap_head#45 init_dist_screen::@15/(byte*) heap_head#15 )
   (byte*) init_dist_screen::screen_bottomline#13 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@15/(byte*) init_dist_screen::screen_bottomline#0 )
   (byte*) init_dist_screen::screen_topline#13 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@15/(byte*) init_dist_screen::screen_topline#0 )
-  (byte) NUM_SQUARES#46 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 init_dist_screen::@15/(byte) NUM_SQUARES#47 )
+  (byte) NUM_SQUARES#50 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 init_dist_screen::@15/(byte) NUM_SQUARES#52 )
   (word*) SQUARES#40 ← phi( init_dist_screen::@11/(word*) SQUARES#24 init_dist_screen::@15/(word*) SQUARES#5 )
   (byte) init_dist_screen::y#2 ← phi( init_dist_screen::@11/(byte) init_dist_screen::y#1 init_dist_screen::@15/(byte) init_dist_screen::y#0 )
   (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (number) 2
@@ -902,33 +960,33 @@ init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen::@11 init_
   if((bool~) init_dist_screen::$3) goto init_dist_screen::@2
   to:init_dist_screen::@3
 init_dist_screen::@2: scope:[init_dist_screen]  from init_dist_screen::@1
-  (byte*) heap_head#69 ← phi( init_dist_screen::@1/(byte*) heap_head#71 )
+  (byte*) heap_head#79 ← phi( init_dist_screen::@1/(byte*) heap_head#81 )
   (byte) init_dist_screen::y#12 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
   (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#13 )
   (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#13 )
-  (byte) NUM_SQUARES#44 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#46 )
+  (byte) NUM_SQUARES#47 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#50 )
   (word*) SQUARES#29 ← phi( init_dist_screen::@1/(word*) SQUARES#40 )
   (byte) init_dist_screen::y2#1 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 )
   (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (number) $18
   (number~) init_dist_screen::$7 ← (number~) init_dist_screen::$6
   to:init_dist_screen::@4
 init_dist_screen::@3: scope:[init_dist_screen]  from init_dist_screen::@1
-  (byte*) heap_head#70 ← phi( init_dist_screen::@1/(byte*) heap_head#71 )
+  (byte*) heap_head#80 ← phi( init_dist_screen::@1/(byte*) heap_head#81 )
   (byte) init_dist_screen::y#13 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
   (byte*) init_dist_screen::screen_bottomline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#13 )
   (byte*) init_dist_screen::screen_topline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#13 )
-  (byte) NUM_SQUARES#45 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#46 )
+  (byte) NUM_SQUARES#48 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#50 )
   (word*) SQUARES#30 ← phi( init_dist_screen::@1/(word*) SQUARES#40 )
   (byte) init_dist_screen::y2#2 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 )
   (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2
   (number~) init_dist_screen::$5 ← (number~) init_dist_screen::$4
   to:init_dist_screen::@4
 init_dist_screen::@4: scope:[init_dist_screen]  from init_dist_screen::@2 init_dist_screen::@3
-  (byte*) heap_head#68 ← phi( init_dist_screen::@2/(byte*) heap_head#69 init_dist_screen::@3/(byte*) heap_head#70 )
+  (byte*) heap_head#78 ← phi( init_dist_screen::@2/(byte*) heap_head#79 init_dist_screen::@3/(byte*) heap_head#80 )
   (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#12 init_dist_screen::@3/(byte) init_dist_screen::y#13 )
   (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
   (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
-  (byte) NUM_SQUARES#42 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#44 init_dist_screen::@3/(byte) NUM_SQUARES#45 )
+  (byte) NUM_SQUARES#44 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#47 init_dist_screen::@3/(byte) NUM_SQUARES#48 )
   (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#29 init_dist_screen::@3/(word*) SQUARES#30 )
   (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(number~) init_dist_screen::$7 init_dist_screen::@3/(number~) init_dist_screen::$5 )
   (byte) init_dist_screen::yd#0 ← (number~) init_dist_screen::$8
@@ -937,11 +995,11 @@ init_dist_screen::@4: scope:[init_dist_screen]  from init_dist_screen::@2 init_d
   (word) sqr::return#2 ← (word) sqr::return#1
   to:init_dist_screen::@16
 init_dist_screen::@16: scope:[init_dist_screen]  from init_dist_screen::@4
-  (byte*) heap_head#67 ← phi( init_dist_screen::@4/(byte*) heap_head#68 )
+  (byte*) heap_head#77 ← phi( init_dist_screen::@4/(byte*) heap_head#78 )
   (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@4/(byte) init_dist_screen::y#11 )
   (byte*) init_dist_screen::screen_bottomline#9 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_bottomline#10 )
   (byte*) init_dist_screen::screen_topline#9 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_topline#10 )
-  (byte) NUM_SQUARES#38 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#42 )
+  (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#44 )
   (word*) SQUARES#46 ← phi( init_dist_screen::@4/(word*) SQUARES#18 )
   (word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 )
   (word~) init_dist_screen::$9 ← (word) sqr::return#5
@@ -950,12 +1008,12 @@ init_dist_screen::@16: scope:[init_dist_screen]  from init_dist_screen::@4
   (byte) init_dist_screen::xb#0 ← (number) $27
   to:init_dist_screen::@5
 init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@16 init_dist_screen::@18
-  (byte*) heap_head#65 ← phi( init_dist_screen::@16/(byte*) heap_head#67 init_dist_screen::@18/(byte*) heap_head#40 )
+  (byte*) heap_head#75 ← phi( init_dist_screen::@16/(byte*) heap_head#77 init_dist_screen::@18/(byte*) heap_head#53 )
   (byte) init_dist_screen::y#9 ← phi( init_dist_screen::@16/(byte) init_dist_screen::y#10 init_dist_screen::@18/(byte) init_dist_screen::y#4 )
   (byte) init_dist_screen::xb#7 ← phi( init_dist_screen::@16/(byte) init_dist_screen::xb#0 init_dist_screen::@18/(byte) init_dist_screen::xb#1 )
   (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@16/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@18/(byte*) init_dist_screen::screen_bottomline#2 )
   (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@16/(byte*) init_dist_screen::screen_topline#9 init_dist_screen::@18/(byte*) init_dist_screen::screen_topline#2 )
-  (byte) NUM_SQUARES#35 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#38 init_dist_screen::@18/(byte) NUM_SQUARES#22 )
+  (byte) NUM_SQUARES#35 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#39 init_dist_screen::@18/(byte) NUM_SQUARES#22 )
   (word) init_dist_screen::yds#5 ← phi( init_dist_screen::@16/(word) init_dist_screen::yds#0 init_dist_screen::@18/(word) init_dist_screen::yds#6 )
   (word*) SQUARES#41 ← phi( init_dist_screen::@16/(word*) SQUARES#46 init_dist_screen::@18/(word*) SQUARES#33 )
   (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@16/(byte) init_dist_screen::x#0 init_dist_screen::@18/(byte) init_dist_screen::x#1 )
@@ -965,7 +1023,7 @@ init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@16 init_
   if((bool~) init_dist_screen::$11) goto init_dist_screen::@6
   to:init_dist_screen::@7
 init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
-  (byte*) heap_head#59 ← phi( init_dist_screen::@5/(byte*) heap_head#65 )
+  (byte*) heap_head#69 ← phi( init_dist_screen::@5/(byte*) heap_head#75 )
   (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 )
   (byte) init_dist_screen::xb#5 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 )
   (byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 )
@@ -979,7 +1037,7 @@ init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
   (number~) init_dist_screen::$15 ← (number~) init_dist_screen::$14
   to:init_dist_screen::@8
 init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
-  (byte*) heap_head#60 ← phi( init_dist_screen::@5/(byte*) heap_head#65 )
+  (byte*) heap_head#70 ← phi( init_dist_screen::@5/(byte*) heap_head#75 )
   (byte) init_dist_screen::y#8 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 )
   (byte) init_dist_screen::xb#6 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 )
   (byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 )
@@ -993,7 +1051,7 @@ init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
   (number~) init_dist_screen::$13 ← (number~) init_dist_screen::$12
   to:init_dist_screen::@8
 init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6 init_dist_screen::@7
-  (byte*) heap_head#54 ← phi( init_dist_screen::@6/(byte*) heap_head#59 init_dist_screen::@7/(byte*) heap_head#60 )
+  (byte*) heap_head#65 ← phi( init_dist_screen::@6/(byte*) heap_head#69 init_dist_screen::@7/(byte*) heap_head#70 )
   (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#7 init_dist_screen::@7/(byte) init_dist_screen::y#8 )
   (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#5 init_dist_screen::@7/(byte) init_dist_screen::xb#6 )
   (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#7 )
@@ -1009,7 +1067,7 @@ init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6 init_d
   (word) sqr::return#3 ← (word) sqr::return#1
   to:init_dist_screen::@17
 init_dist_screen::@17: scope:[init_dist_screen]  from init_dist_screen::@8
-  (byte*) heap_head#48 ← phi( init_dist_screen::@8/(byte*) heap_head#54 )
+  (byte*) heap_head#60 ← phi( init_dist_screen::@8/(byte*) heap_head#65 )
   (byte) init_dist_screen::y#5 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#6 )
   (byte) init_dist_screen::xb#3 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#4 )
   (byte*) init_dist_screen::screen_bottomline#4 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#5 )
@@ -1030,7 +1088,7 @@ init_dist_screen::@17: scope:[init_dist_screen]  from init_dist_screen::@8
 init_dist_screen::@18: scope:[init_dist_screen]  from init_dist_screen::@17
   (word) init_dist_screen::yds#6 ← phi( init_dist_screen::@17/(word) init_dist_screen::yds#1 )
   (word*) SQUARES#33 ← phi( init_dist_screen::@17/(word*) SQUARES#20 )
-  (byte*) heap_head#40 ← phi( init_dist_screen::@17/(byte*) heap_head#48 )
+  (byte*) heap_head#53 ← phi( init_dist_screen::@17/(byte*) heap_head#60 )
   (byte) NUM_SQUARES#22 ← phi( init_dist_screen::@17/(byte) NUM_SQUARES#13 )
   (byte) init_dist_screen::y#4 ← phi( init_dist_screen::@17/(byte) init_dist_screen::y#5 )
   (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@17/(byte) init_dist_screen::xb#3 )
@@ -1051,7 +1109,7 @@ init_dist_screen::@18: scope:[init_dist_screen]  from init_dist_screen::@17
   to:init_dist_screen::@11
 init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@18
   (word*) SQUARES#24 ← phi( init_dist_screen::@18/(word*) SQUARES#33 )
-  (byte*) heap_head#33 ← phi( init_dist_screen::@18/(byte*) heap_head#40 )
+  (byte*) heap_head#45 ← phi( init_dist_screen::@18/(byte*) heap_head#53 )
   (byte) NUM_SQUARES#16 ← phi( init_dist_screen::@18/(byte) NUM_SQUARES#22 )
   (byte) init_dist_screen::y#3 ← phi( init_dist_screen::@18/(byte) init_dist_screen::y#4 )
   (byte*) init_dist_screen::screen_bottomline#3 ← phi( init_dist_screen::@18/(byte*) init_dist_screen::screen_bottomline#2 )
@@ -1064,47 +1122,60 @@ init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@18
   to:init_dist_screen::@return
 init_dist_screen::@return: scope:[init_dist_screen]  from init_dist_screen::@11
   (word*) SQUARES#15 ← phi( init_dist_screen::@11/(word*) SQUARES#24 )
-  (byte*) heap_head#23 ← phi( init_dist_screen::@11/(byte*) heap_head#33 )
+  (byte*) heap_head#33 ← phi( init_dist_screen::@11/(byte*) heap_head#45 )
   (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 )
   (byte) NUM_SQUARES#4 ← (byte) NUM_SQUARES#11
-  (byte*) heap_head#11 ← (byte*) heap_head#23
+  (byte*) heap_head#16 ← (byte*) heap_head#33
   (word*) SQUARES#6 ← (word*) SQUARES#15
   return 
   to:@return
-@16: scope:[]  from @13
-  (word*) SQUARES#25 ← phi( @13/(word*) SQUARES#34 )
-  (byte*) heap_head#34 ← phi( @13/(byte*) heap_head#41 )
-  (byte) NUM_SQUARES#17 ← phi( @13/(byte) NUM_SQUARES#23 )
+@16: scope:[]  from @21
+  (word*) SQUARES#25 ← phi( @21/(word*) SQUARES#34 )
+  (byte*) heap_head#46 ← phi( @21/(byte*) heap_head#12 )
+  (byte) NUM_SQUARES#17 ← phi( @21/(byte) NUM_SQUARES#23 )
   call main 
-  to:@17
-@17: scope:[]  from @16
+  to:@22
+@22: scope:[]  from @16
   (word*) SQUARES#16 ← phi( @16/(word*) SQUARES#4 )
-  (byte*) heap_head#24 ← phi( @16/(byte*) heap_head#7 )
+  (byte*) heap_head#34 ← phi( @16/(byte*) heap_head#9 )
   (byte) NUM_SQUARES#12 ← phi( @16/(byte) NUM_SQUARES#2 )
   (byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12
-  (byte*) heap_head#12 ← (byte*) heap_head#24
+  (byte*) heap_head#17 ← (byte*) heap_head#34
   (word*) SQUARES#7 ← (word*) SQUARES#16
   to:@end
-@end: scope:[]  from @17
+@end: scope:[]  from @22
 
 SYMBOL TABLE SSA
+(void*~) $0
+(void*~) $1
+(byte~) $2
+(void*~) $3
+(byte~) $4
+(void*~) $5
+(byte~) $6
+(void*~) $7
 (label) @10
 (label) @12
 (label) @13
 (label) @16
 (label) @17
+(label) @18
+(label) @19
+(label) @20
+(label) @21
+(label) @22
 (label) @4
 (label) @7
 (label) @begin
 (label) @end
 (byte*) BORDERCOL
 (byte*) BORDERCOL#0
-(word*[NUM_BUCKETS#0]) BUCKETS
-(word*[NUM_BUCKETS#0]) BUCKETS#0
-(byte[NUM_BUCKETS#0]) BUCKET_IDX
-(byte[NUM_BUCKETS#0]) BUCKET_IDX#0
-(byte[NUM_BUCKETS#0]) BUCKET_SIZES
-(byte[NUM_BUCKETS#0]) BUCKET_SIZES#0
+(word*[]) BUCKETS
+(word*[]) BUCKETS#0
+(byte[]) BUCKET_IDX
+(byte[]) BUCKET_IDX#0
+(byte[]) BUCKET_SIZES
+(byte[]) BUCKET_SIZES#0
 (byte*) COLS
 (byte*) COLS#0
 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
@@ -1161,19 +1232,25 @@ SYMBOL TABLE SSA
 (byte) NUM_SQUARES#45
 (byte) NUM_SQUARES#46
 (byte) NUM_SQUARES#47
+(byte) NUM_SQUARES#48
+(byte) NUM_SQUARES#49
 (byte) NUM_SQUARES#5
+(byte) NUM_SQUARES#50
+(byte) NUM_SQUARES#51
+(byte) NUM_SQUARES#52
 (byte) NUM_SQUARES#6
 (byte) NUM_SQUARES#7
 (byte) NUM_SQUARES#8
 (byte) NUM_SQUARES#9
 (byte*) RASTER
 (byte*) RASTER#0
-(byte[$3e8]) SCREEN_ANGLE
-(byte[$3e8]) SCREEN_ANGLE#0
-(byte[$3e8]) SCREEN_DIST
-(byte[$3e8]) SCREEN_DIST#0
+(byte[]) SCREEN_ANGLE
+(byte[]) SCREEN_ANGLE#0
+(byte[]) SCREEN_DIST
+(byte[]) SCREEN_DIST#0
 (byte*) SCREEN_FILL
 (byte*) SCREEN_FILL#0
+(const byte) SIZEOF_BYTE = (byte) 1
 (const byte) SIZEOF_POINTER = (byte) 2
 (const byte) SIZEOF_WORD = (byte) 2
 (word*) SQUARES
@@ -1226,6 +1303,11 @@ SYMBOL TABLE SSA
 (word*) SQUARES#50
 (word*) SQUARES#51
 (word*) SQUARES#52
+(word*) SQUARES#53
+(word*) SQUARES#54
+(word*) SQUARES#55
+(word*) SQUARES#56
+(word*) SQUARES#57
 (word*) SQUARES#6
 (word*) SQUARES#7
 (word*) SQUARES#8
@@ -1568,7 +1650,17 @@ SYMBOL TABLE SSA
 (byte*) heap_head#7
 (byte*) heap_head#70
 (byte*) heap_head#71
+(byte*) heap_head#72
+(byte*) heap_head#73
+(byte*) heap_head#74
+(byte*) heap_head#75
+(byte*) heap_head#76
+(byte*) heap_head#77
+(byte*) heap_head#78
+(byte*) heap_head#79
 (byte*) heap_head#8
+(byte*) heap_head#80
+(byte*) heap_head#81
 (byte*) heap_head#9
 (void()) init_angle_screen((byte*) init_angle_screen::screen)
 (byte*~) init_angle_screen::$0
@@ -1960,15 +2052,30 @@ SYMBOL TABLE SSA
 (void*) malloc::return
 (void*) malloc::return#0
 (void*) malloc::return#1
+(void*) malloc::return#10
+(void*) malloc::return#11
+(void*) malloc::return#12
+(void*) malloc::return#13
+(void*) malloc::return#14
+(void*) malloc::return#15
+(void*) malloc::return#16
 (void*) malloc::return#2
 (void*) malloc::return#3
 (void*) malloc::return#4
 (void*) malloc::return#5
 (void*) malloc::return#6
+(void*) malloc::return#7
+(void*) malloc::return#8
+(void*) malloc::return#9
 (word) malloc::size
 (word) malloc::size#0
 (word) malloc::size#1
 (word) malloc::size#2
+(word) malloc::size#3
+(word) malloc::size#4
+(word) malloc::size#5
+(word) malloc::size#6
+(word) malloc::size#7
 (word()) sqr((byte) sqr::val)
 (byte~) sqr::$0
 (label) sqr::@return
@@ -2045,6 +2152,8 @@ Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (s
 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
 Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
 Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9
+Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8
+Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8
 Adding number conversion cast (unumber) 0 in (byte) main::bucket_idx#0 ← (number) 0
 Adding number conversion cast (unumber) $ff in (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $ff
 Adding number conversion cast (unumber) 0 in (bool~) main::$4 ← (byte) main::bucket_size#0 > (number) 0
@@ -2056,12 +2165,12 @@ Adding number conversion cast (unumber) $3e7 in (byte*~) main::$20 ← (byte*) C
 Adding number conversion cast (unumber) $30 in (byte) NUM_BUCKETS#0 ← (number) $30
 Adding number conversion cast (unumber) 1 in (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (number) 1
 Adding number conversion cast (unumber) init_buckets::$0 in (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1
-Adding number conversion cast (unumber) 0 in *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0
+Adding number conversion cast (unumber) 0 in *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0
 Adding number conversion cast (unumber) 1 in (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (number) 1
 Adding number conversion cast (unumber) init_buckets::$3 in (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1
 Adding number conversion cast (unumber) 1 in (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (number) 1
 Adding number conversion cast (unumber) init_buckets::$7 in (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1
-Adding number conversion cast (unumber) 0 in *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0
+Adding number conversion cast (unumber) 0 in *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0
 Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
 Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
 Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0
@@ -2093,11 +2202,11 @@ Adding number conversion cast (unumber) init_dist_screen::$7 in (number~) init_d
 Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2
 Adding number conversion cast (unumber) init_dist_screen::$4 in (number~) init_dist_screen::$4 ← (unumber)(number) $18 - (byte) init_dist_screen::y2#2
 Adding number conversion cast (unumber) init_dist_screen::$5 in (number~) init_dist_screen::$5 ← (unumber~) init_dist_screen::$4
-Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#68 ← phi( init_dist_screen::@2/(byte*) heap_head#69 init_dist_screen::@3/(byte*) heap_head#70 )
+Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#78 ← phi( init_dist_screen::@2/(byte*) heap_head#79 init_dist_screen::@3/(byte*) heap_head#80 )
   (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#12 init_dist_screen::@3/(byte) init_dist_screen::y#13 )
   (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
   (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
-  (byte) NUM_SQUARES#42 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#44 init_dist_screen::@3/(byte) NUM_SQUARES#45 )
+  (byte) NUM_SQUARES#44 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#47 init_dist_screen::@3/(byte) NUM_SQUARES#48 )
   (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#29 init_dist_screen::@3/(word*) SQUARES#30 )
   (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 )
 Adding number conversion cast (unumber) 0 in (byte) init_dist_screen::x#0 ← (number) 0
@@ -2111,7 +2220,7 @@ Adding number conversion cast (unumber) init_dist_screen::$15 in (number~) init_
 Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$12 ← (number) $27 - (byte) init_dist_screen::x2#2
 Adding number conversion cast (unumber) init_dist_screen::$12 in (number~) init_dist_screen::$12 ← (unumber)(number) $27 - (byte) init_dist_screen::x2#2
 Adding number conversion cast (unumber) init_dist_screen::$13 in (number~) init_dist_screen::$13 ← (unumber~) init_dist_screen::$12
-Adding number conversion cast (unumber) init_dist_screen::$16 in (byte*) heap_head#54 ← phi( init_dist_screen::@6/(byte*) heap_head#59 init_dist_screen::@7/(byte*) heap_head#60 )
+Adding number conversion cast (unumber) init_dist_screen::$16 in (byte*) heap_head#65 ← phi( init_dist_screen::@6/(byte*) heap_head#69 init_dist_screen::@7/(byte*) heap_head#70 )
   (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#7 init_dist_screen::@7/(byte) init_dist_screen::y#8 )
   (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#5 init_dist_screen::@7/(byte) init_dist_screen::xb#6 )
   (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#7 )
@@ -2138,15 +2247,22 @@ Inlining cast (word) init_squares::sqr#0 ← (unumber)(number) 0
 Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1
 Inlining cast (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f
 Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0
+Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8
+Inlining cast (byte[]) SCREEN_DIST#0 ← (byte*)(void*~) $0
+Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8
+Inlining cast (byte[]) SCREEN_ANGLE#0 ← (byte*)(void*~) $1
 Inlining cast (byte*) SCREEN_FILL#0 ← (byte*)(number) $400
 Inlining cast (byte) main::bucket_idx#0 ← (unumber)(number) 0
 Inlining cast (byte) main::min_angle#0 ← (unumber)(number) $ff
 Inlining cast (word) main::min_offset#0 ← (unumber)(number) $ffff
 Inlining cast (byte) main::i#0 ← (unumber)(number) 0
 Inlining cast (byte) NUM_BUCKETS#0 ← (unumber)(number) $30
-Inlining cast *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (unumber)(number) 0
-Inlining cast *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5
-Inlining cast *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (unumber)(number) 0
+Inlining cast (byte[]) BUCKET_SIZES#0 ← (byte*)(void*~) $3
+Inlining cast (word*[]) BUCKETS#0 ← (word**)(void*~) $5
+Inlining cast (byte[]) BUCKET_IDX#0 ← (byte*)(void*~) $7
+Inlining cast *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (unumber)(number) 0
+Inlining cast *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5
+Inlining cast *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (unumber)(number) 0
 Inlining cast (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
 Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0
 Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27
@@ -2190,6 +2306,8 @@ Simplifying constant integer cast 1
 Simplifying constant integer cast 1
 Simplifying constant integer cast 0
 Simplifying constant integer cast $8000
+Simplifying constant integer cast $3e8
+Simplifying constant integer cast $3e8
 Simplifying constant pointer cast (byte*) 1024
 Simplifying constant integer cast 0
 Simplifying constant integer cast $ff
@@ -2263,6 +2381,8 @@ Finalized signed number type (signed byte) 1
 Finalized signed number type (signed byte) 1
 Finalized signed number type (signed byte) 0
 Finalized unsigned number type (word) $8000
+Finalized unsigned number type (word) $3e8
+Finalized unsigned number type (word) $3e8
 Finalized unsigned number type (byte) 0
 Finalized unsigned number type (byte) $ff
 Finalized unsigned number type (byte) 0
@@ -2338,16 +2458,16 @@ Inversing boolean not [136] (bool~) atan2_16::$18 ← (signed word) atan2_16::yi
 Inversing boolean not [145] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [144] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
 Inversing boolean not [156] (bool~) atan2_16::$20 ← (byte) 0 == (byte) atan2_16::shift#4 from [155] (bool~) atan2_16::$25 ← (byte) 0 != (byte) atan2_16::shift#4
 Inversing boolean not [180] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [179] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
-Inversing boolean not [225] (bool~) main::$5 ← (byte) main::bucket_size#0 <= (byte) 0 from [224] (bool~) main::$4 ← (byte) main::bucket_size#0 > (byte) 0
-Inversing boolean not [230] (bool~) main::$17 ← (byte) main::bucket_idx#1 != (byte) NUM_BUCKETS#0 from [229] (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0
-Inversing boolean not [242] (bool~) main::$8 ← *((byte*) main::fill#0) == (byte) FILL_CHAR#0 from [241] (bool~) main::$7 ← *((byte*) main::fill#0) != (byte) FILL_CHAR#0
-Inversing boolean not [252] (bool~) main::$11 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [251] (bool~) main::$10 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2
-Inversing boolean not [259] (bool~) main::$14 ← (word) main::min_offset#2 == (word) $ffff from [258] (bool~) main::$13 ← (word) main::min_offset#2 != (word) $ffff
+Inversing boolean not [237] (bool~) main::$5 ← (byte) main::bucket_size#0 <= (byte) 0 from [236] (bool~) main::$4 ← (byte) main::bucket_size#0 > (byte) 0
+Inversing boolean not [242] (bool~) main::$17 ← (byte) main::bucket_idx#1 != (byte) NUM_BUCKETS#0 from [241] (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0
+Inversing boolean not [254] (bool~) main::$8 ← *((byte*) main::fill#0) == (byte) FILL_CHAR#0 from [253] (bool~) main::$7 ← *((byte*) main::fill#0) != (byte) FILL_CHAR#0
+Inversing boolean not [264] (bool~) main::$11 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [263] (bool~) main::$10 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2
+Inversing boolean not [271] (bool~) main::$14 ← (word) main::min_offset#2 == (word) $ffff from [270] (bool~) main::$13 ← (word) main::min_offset#2 != (word) $ffff
 Successful SSA optimization Pass2UnaryNotSimplification
-Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#55 (byte*) heap_head#49 (byte*) heap_head#45 (byte*) heap_head#41 (byte*) heap_head#34 
+Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#54 (byte*) heap_head#47 (byte*) heap_head#35 
 Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 
-Alias (void*) malloc::return#0 = (void*) malloc::return#4 (void*) malloc::return#1 
-Alias (byte*) heap_head#1 = (byte*) heap_head#14 (byte*) heap_head#2 
+Alias (void*) malloc::return#0 = (void*) malloc::return#9 (void*) malloc::return#1 
+Alias (byte*) heap_head#1 = (byte*) heap_head#19 (byte*) heap_head#2 
 Alias (byte) bsearch16u::num#3 = (byte) bsearch16u::num#4 (byte) bsearch16u::num#8 (byte) bsearch16u::num#6 
 Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#6 (word*) bsearch16u::items#3 (word*) bsearch16u::items#9 (word*) bsearch16u::items#4 (word*~) bsearch16u::$3 (word*) bsearch16u::items#5 
 Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#3 (word) bsearch16u::key#2 (word) bsearch16u::key#7 (word) bsearch16u::key#6 
@@ -2358,18 +2478,18 @@ Alias (word*) bsearch16u::items#0 = (word*~) bsearch16u::$15
 Alias (word*~) bsearch16u::$2 = (word*~) bsearch16u::$1 
 Alias (word*) bsearch16u::return#2 = (word*~) bsearch16u::$4 
 Alias (word) malloc::size#0 = (byte~) init_squares::$0 
-Alias (void*) malloc::return#2 = (void*) malloc::return#5 
+Alias (void*) malloc::return#10 = (void*) malloc::return#2 
 Alias (byte) NUM_SQUARES#6 = (byte) NUM_SQUARES#7 
-Alias (byte*) heap_head#15 = (byte*) heap_head#3 
-Alias (byte*) heap_head#16 = (byte*) heap_head#27 (byte*) heap_head#4 
+Alias (byte*) heap_head#20 = (byte*) heap_head#3 
+Alias (byte*) heap_head#21 = (byte*) heap_head#39 (byte*) heap_head#4 
 Alias (word*) SQUARES#17 = (word*) SQUARES#8 (word*) SQUARES#2 
 Alias (word) sqr::return#0 = (word) sqr::return#4 (word) sqr::return#1 
 Alias (word*) bsearch16u::return#3 = (word*) bsearch16u::return#5 
 Alias (word*) SQUARES#10 = (word*) SQUARES#11 
 Alias (word*) sqrt::found#0 = (word*~) sqrt::$0 
 Alias (byte) sqrt::return#0 = (byte) sqrt::sq#0 (byte~) sqrt::$2 (byte) sqrt::return#3 (byte) sqrt::return#1 
-Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#17 
-Alias (word*) SQUARES#0 = (word*) SQUARES#42 (word*) SQUARES#39 (word*) SQUARES#34 (word*) SQUARES#25 
+Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#51 (byte) NUM_SQUARES#49 (byte) NUM_SQUARES#45 (byte) NUM_SQUARES#43 (byte) NUM_SQUARES#38 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#17 
+Alias (word*) SQUARES#0 = (word*) SQUARES#57 (word*) SQUARES#56 (word*) SQUARES#54 (word*) SQUARES#53 (word*) SQUARES#49 (word*) SQUARES#45 (word*) SQUARES#39 (word*) SQUARES#34 (word*) SQUARES#25 
 Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#2 (signed word~) atan2_16::$3 (signed word) atan2_16::y#3 
 Alias (signed word) atan2_16::x#5 = (signed word) atan2_16::x#9 (signed word) atan2_16::x#6 
 Alias (signed word~) atan2_16::$2 = (signed word~) atan2_16::$1 
@@ -2407,14 +2527,18 @@ Alias (word) atan2_16::angle#4 = (word~) atan2_16::$12
 Alias (word) atan2_16::return#0 = (word) atan2_16::angle#10 (word) atan2_16::return#3 (word) atan2_16::return#1 
 Alias (word) atan2_16::angle#11 = (word) atan2_16::angle#15 
 Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15 
-Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#26 
-Alias (byte*) heap_head#17 = (byte*) heap_head#5 (byte*) heap_head#29 
-Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#43 (word*) SQUARES#37 
-Alias (byte*) heap_head#18 = (byte*) heap_head#6 
+Alias (void*) malloc::return#11 = (void*) malloc::return#3 
+Alias (byte*) heap_head#22 = (byte*) heap_head#5 
+Alias (void*) malloc::return#12 = (void*) malloc::return#4 
+Alias (byte*) heap_head#23 = (byte*) heap_head#6 (byte*) heap_head#36 
+Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#26 
+Alias (byte*) heap_head#24 = (byte*) heap_head#7 (byte*) heap_head#41 
+Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#42 (word*) SQUARES#37 
+Alias (byte*) heap_head#25 = (byte*) heap_head#8 
 Alias (byte) main::bucket_idx#13 = (byte) main::bucket_idx#2 (byte) main::bucket_idx#4 
-Alias (byte) NUM_SQUARES#34 = (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#43 
-Alias (byte*) heap_head#51 = (byte*) heap_head#56 (byte*) heap_head#66 
-Alias (word*) SQUARES#45 = (word*) SQUARES#47 (word*) SQUARES#52 
+Alias (byte) NUM_SQUARES#33 = (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#46 
+Alias (byte*) heap_head#62 = (byte*) heap_head#66 (byte*) heap_head#76 
+Alias (word*) SQUARES#44 = (word*) SQUARES#47 (word*) SQUARES#55 
 Alias (byte) main::bucket_size#0 = (byte) main::bucket_size#5 
 Alias (byte*) main::fill#0 = (byte*~) main::$6 
 Alias (word) main::offset#0 = (word) main::offset#1 (word) main::offset#2 (word) main::min_offset#1 
@@ -2423,35 +2547,44 @@ Alias (byte) main::i#2 = (byte) main::i#4 (byte) main::i#5
 Alias (byte) main::bucket_size#2 = (byte) main::bucket_size#4 (byte) main::bucket_size#3 
 Alias (word) main::min_offset#5 = (word) main::min_offset#6 
 Alias (byte) main::bucket_idx#10 = (byte) main::bucket_idx#12 (byte) main::bucket_idx#11 
-Alias (byte) NUM_SQUARES#39 = (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#40 
-Alias (byte*) heap_head#61 = (byte*) heap_head#63 (byte*) heap_head#62 
-Alias (word*) SQUARES#49 = (word*) SQUARES#51 (word*) SQUARES#50 
+Alias (byte) NUM_SQUARES#40 = (byte) NUM_SQUARES#42 (byte) NUM_SQUARES#41 
+Alias (byte*) heap_head#71 = (byte*) heap_head#73 (byte*) heap_head#72 
+Alias (word*) SQUARES#50 = (word*) SQUARES#52 (word*) SQUARES#51 
 Alias (byte*) main::angle#0 = (byte*~) main::$9 (byte*) main::angle#1 
 Alias (word) main::min_offset#2 = (word) main::min_offset#4 (word) main::min_offset#3 
 Alias (byte) main::bucket_idx#5 = (byte) main::bucket_idx#7 (byte) main::bucket_idx#8 
-Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#37 
-Alias (byte*) heap_head#42 = (byte*) heap_head#50 (byte*) heap_head#57 
-Alias (word*) SQUARES#35 = (word*) SQUARES#44 (word*) SQUARES#48 
+Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#37 
+Alias (byte*) heap_head#55 = (byte*) heap_head#61 (byte*) heap_head#67 
+Alias (word*) SQUARES#35 = (word*) SQUARES#43 (word*) SQUARES#48 
 Alias (byte*) main::fill1#0 = (byte*~) main::$15 
 Alias (byte) main::bucket_idx#1 = (byte) main::bucket_idx#9 
 Alias (byte) NUM_SQUARES#19 = (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#27 
-Alias (byte*) heap_head#36 = (byte*) heap_head#43 (byte*) heap_head#44 
+Alias (byte*) heap_head#49 = (byte*) heap_head#56 (byte*) heap_head#57 
 Alias (word*) SQUARES#27 = (word*) SQUARES#36 (word*) SQUARES#38 
 Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#2 
-Alias (byte*) heap_head#19 = (byte*) heap_head#37 (byte*) heap_head#30 (byte*) heap_head#7 
+Alias (byte*) heap_head#26 = (byte*) heap_head#50 (byte*) heap_head#42 (byte*) heap_head#9 
 Alias (word*) SQUARES#13 = (word*) SQUARES#28 (word*) SQUARES#22 (word*) SQUARES#4 
+Alias (word) malloc::size#3 = (byte~) $2 
+Alias (void*) malloc::return#13 = (void*) malloc::return#5 
+Alias (byte*) heap_head#10 = (byte*) heap_head#27 
+Alias (word) malloc::size#4 = (byte~) $4 
+Alias (void*) malloc::return#14 = (void*) malloc::return#6 
+Alias (byte*) heap_head#11 = (byte*) heap_head#28 
+Alias (word) malloc::size#5 = (byte~) $6 
+Alias (void*) malloc::return#15 = (void*) malloc::return#7 
+Alias (byte*) heap_head#12 = (byte*) heap_head#29 (byte*) heap_head#46 
 Alias (byte*) init_buckets::screen#1 = (byte*) init_buckets::screen#4 (byte*) init_buckets::dist#0 
-Alias (byte*) heap_head#52 = (byte*) heap_head#58 
-Alias (byte*) heap_head#38 = (byte*) heap_head#46 
+Alias (byte*) heap_head#63 = (byte*) heap_head#68 
+Alias (byte*) heap_head#51 = (byte*) heap_head#58 
 Alias (byte*) init_buckets::screen#10 = (byte*) init_buckets::screen#11 
-Alias (word) malloc::size#1 = (byte~) init_buckets::$4 
-Alias (void*) malloc::return#3 = (void*) malloc::return#6 
+Alias (word) malloc::size#6 = (byte~) init_buckets::$4 
+Alias (void*) malloc::return#16 = (void*) malloc::return#8 
 Alias (word) init_buckets::i2#2 = (word) init_buckets::i2#3 
 Alias (byte*) init_buckets::screen#7 = (byte*) init_buckets::screen#8 (byte*) init_buckets::screen#9 
-Alias (byte*) heap_head#20 = (byte*) heap_head#8 (byte*) heap_head#53 
+Alias (byte*) heap_head#13 = (byte*) heap_head#30 (byte*) heap_head#64 
 Alias (byte*) init_buckets::screen#2 = (byte*) init_buckets::screen#5 (byte*) init_buckets::dist#2 
-Alias (byte*) heap_head#39 = (byte*) heap_head#47 
-Alias (byte*) heap_head#21 = (byte*) heap_head#31 (byte*) heap_head#9 
+Alias (byte*) heap_head#52 = (byte*) heap_head#59 
+Alias (byte*) heap_head#14 = (byte*) heap_head#31 (byte*) heap_head#43 
 Alias (byte*) init_angle_screen::screen_topline#0 = (byte*~) init_angle_screen::$0 
 Alias (byte*) init_angle_screen::screen_bottomline#0 = (byte*~) init_angle_screen::$1 
 Alias (word~) init_angle_screen::$4 = (word~) init_angle_screen::$17 
@@ -2467,27 +2600,27 @@ Alias (byte) init_angle_screen::y#2 = (byte) init_angle_screen::y#5 (byte) init_
 Alias (word) init_angle_screen::angle_w#0 = (word~) init_angle_screen::$9 
 Alias (byte) init_angle_screen::ang_w#0 = (byte~) init_angle_screen::$11 
 Alias (byte*) init_dist_screen::screen#1 = (byte*) init_dist_screen::screen#2 (byte*) init_dist_screen::screen_topline#0 
-Alias (byte) NUM_SQUARES#3 = (byte) NUM_SQUARES#47 
-Alias (byte*) heap_head#10 = (byte*) heap_head#22 
+Alias (byte) NUM_SQUARES#3 = (byte) NUM_SQUARES#52 
+Alias (byte*) heap_head#15 = (byte*) heap_head#32 
 Alias (word*) SQUARES#14 = (word*) SQUARES#5 
 Alias (byte*) init_dist_screen::screen_bottomline#0 = (byte*~) init_dist_screen::$1 
 Alias (byte) init_dist_screen::y2#0 = (byte~) init_dist_screen::$2 (byte) init_dist_screen::y2#1 (byte) init_dist_screen::y2#2 
 Alias (word*) SQUARES#29 = (word*) SQUARES#40 (word*) SQUARES#30 
-Alias (byte) NUM_SQUARES#44 = (byte) NUM_SQUARES#46 (byte) NUM_SQUARES#45 
+Alias (byte) NUM_SQUARES#47 = (byte) NUM_SQUARES#50 (byte) NUM_SQUARES#48 
 Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#13 (byte*) init_dist_screen::screen_topline#12 
 Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#13 (byte*) init_dist_screen::screen_bottomline#12 
 Alias (byte) init_dist_screen::y#12 = (byte) init_dist_screen::y#2 (byte) init_dist_screen::y#13 
-Alias (byte*) heap_head#69 = (byte*) heap_head#71 (byte*) heap_head#70 
+Alias (byte*) heap_head#79 = (byte*) heap_head#81 (byte*) heap_head#80 
 Alias (byte~) init_dist_screen::$7 = (byte~) init_dist_screen::$6 
 Alias (byte~) init_dist_screen::$5 = (byte~) init_dist_screen::$4 
 Alias (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$8 
 Alias (word) sqr::return#2 = (word) sqr::return#5 
 Alias (word*) SQUARES#18 = (word*) SQUARES#46 
-Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#42 
+Alias (byte) NUM_SQUARES#39 = (byte) NUM_SQUARES#44 
 Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#9 
 Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#9 
 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#11 
-Alias (byte*) heap_head#67 = (byte*) heap_head#68 
+Alias (byte*) heap_head#77 = (byte*) heap_head#78 
 Alias (word) init_dist_screen::yds#0 = (word~) init_dist_screen::$9 
 Alias (byte) init_dist_screen::x2#0 = (byte~) init_dist_screen::$10 (byte) init_dist_screen::x2#1 (byte) init_dist_screen::x2#2 
 Alias (word*) SQUARES#31 = (word*) SQUARES#41 (word*) SQUARES#32 
@@ -2498,7 +2631,7 @@ Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#6 (byte) init_di
 Alias (byte*) init_dist_screen::screen_bottomline#6 = (byte*) init_dist_screen::screen_bottomline#8 (byte*) init_dist_screen::screen_bottomline#7 
 Alias (byte) init_dist_screen::xb#5 = (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#6 
 Alias (byte) init_dist_screen::y#7 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#8 
-Alias (byte*) heap_head#59 = (byte*) heap_head#65 (byte*) heap_head#60 
+Alias (byte*) heap_head#69 = (byte*) heap_head#75 (byte*) heap_head#70 
 Alias (byte~) init_dist_screen::$15 = (byte~) init_dist_screen::$14 
 Alias (byte~) init_dist_screen::$13 = (byte~) init_dist_screen::$12 
 Alias (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 
@@ -2511,13 +2644,13 @@ Alias (byte) init_dist_screen::x#3 = (byte) init_dist_screen::x#4 (byte) init_di
 Alias (byte*) init_dist_screen::screen_bottomline#2 = (byte*) init_dist_screen::screen_bottomline#4 (byte*) init_dist_screen::screen_bottomline#5 (byte*) init_dist_screen::screen_bottomline#3 
 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#3 (byte) init_dist_screen::xb#4 
 Alias (byte) init_dist_screen::y#3 = (byte) init_dist_screen::y#5 (byte) init_dist_screen::y#6 (byte) init_dist_screen::y#4 
-Alias (byte*) heap_head#11 = (byte*) heap_head#48 (byte*) heap_head#54 (byte*) heap_head#40 (byte*) heap_head#33 (byte*) heap_head#23 
+Alias (byte*) heap_head#16 = (byte*) heap_head#60 (byte*) heap_head#65 (byte*) heap_head#53 (byte*) heap_head#45 (byte*) heap_head#33 
 Alias (word) init_dist_screen::xds#0 = (word~) init_dist_screen::$17 
 Alias (word) init_dist_screen::ds#0 = (word~) init_dist_screen::$18 
 Alias (byte) sqrt::return#2 = (byte) sqrt::return#4 
 Alias (byte) init_dist_screen::d#0 = (byte~) init_dist_screen::$19 
 Alias (byte) NUM_SQUARES#12 = (byte) NUM_SQUARES#5 
-Alias (byte*) heap_head#12 = (byte*) heap_head#24 
+Alias (byte*) heap_head#17 = (byte*) heap_head#34 
 Alias (word*) SQUARES#16 = (word*) SQUARES#7 
 Successful SSA optimization Pass2AliasElimination
 Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#5 
@@ -2534,15 +2667,15 @@ Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5
 Alias (byte) main::i#2 = (byte) main::i#3 
 Alias (byte) main::bucket_size#1 = (byte) main::bucket_size#2 
 Alias (byte) main::bucket_idx#10 = (byte) main::bucket_idx#5 
-Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#39 
-Alias (byte*) heap_head#42 = (byte*) heap_head#61 
-Alias (word*) SQUARES#35 = (word*) SQUARES#49 
+Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#40 
+Alias (byte*) heap_head#55 = (byte*) heap_head#71 
+Alias (word*) SQUARES#35 = (word*) SQUARES#50 
 Alias (word*) SQUARES#18 = (word*) SQUARES#29 
-Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#44 
+Alias (byte) NUM_SQUARES#39 = (byte) NUM_SQUARES#47 
 Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#11 
 Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#11 
 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#12 
-Alias (byte*) heap_head#67 = (byte*) heap_head#69 
+Alias (byte*) heap_head#77 = (byte*) heap_head#79 
 Alias (word*) SQUARES#15 = (word*) SQUARES#31 
 Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#3 
 Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#29 
@@ -2551,10 +2684,10 @@ Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#3
 Alias (byte*) init_dist_screen::screen_bottomline#2 = (byte*) init_dist_screen::screen_bottomline#6 
 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 
 Alias (byte) init_dist_screen::y#3 = (byte) init_dist_screen::y#7 
-Alias (byte*) heap_head#11 = (byte*) heap_head#59 
+Alias (byte*) heap_head#16 = (byte*) heap_head#69 
 Successful SSA optimization Pass2AliasElimination
 Self Phi Eliminated (word) bsearch16u::key#1
-Self Phi Eliminated (byte*) heap_head#16
+Self Phi Eliminated (byte*) heap_head#21
 Self Phi Eliminated (word*) SQUARES#17
 Self Phi Eliminated (signed word) atan2_16::yi#10
 Self Phi Eliminated (signed word) atan2_16::xi#10
@@ -2563,26 +2696,26 @@ Self Phi Eliminated (word) atan2_16::angle#14
 Self Phi Eliminated (signed word) atan2_16::x#11
 Self Phi Eliminated (signed word) atan2_16::y#10
 Self Phi Eliminated (byte) main::bucket_idx#13
-Self Phi Eliminated (byte) NUM_SQUARES#34
-Self Phi Eliminated (byte*) heap_head#51
-Self Phi Eliminated (word*) SQUARES#45
+Self Phi Eliminated (byte) NUM_SQUARES#33
+Self Phi Eliminated (byte*) heap_head#62
+Self Phi Eliminated (word*) SQUARES#44
 Self Phi Eliminated (byte) main::bucket_size#1
 Self Phi Eliminated (byte) main::bucket_idx#10
 Self Phi Eliminated (byte) NUM_SQUARES#24
-Self Phi Eliminated (byte*) heap_head#42
+Self Phi Eliminated (byte*) heap_head#55
 Self Phi Eliminated (word*) SQUARES#35
 Self Phi Eliminated (byte) NUM_SQUARES#10
-Self Phi Eliminated (byte*) heap_head#19
+Self Phi Eliminated (byte*) heap_head#26
 Self Phi Eliminated (word*) SQUARES#13
 Self Phi Eliminated (byte*) init_buckets::screen#1
-Self Phi Eliminated (byte*) heap_head#52
-Self Phi Eliminated (byte*) heap_head#38
+Self Phi Eliminated (byte*) heap_head#63
+Self Phi Eliminated (byte*) heap_head#51
 Self Phi Eliminated (byte*) init_buckets::screen#10
 Self Phi Eliminated (byte*) init_buckets::screen#7
 Self Phi Eliminated (byte*) init_buckets::screen#2
-Self Phi Eliminated (byte*) heap_head#39
+Self Phi Eliminated (byte*) heap_head#52
 Self Phi Eliminated (byte*) init_buckets::screen#3
-Self Phi Eliminated (byte*) heap_head#21
+Self Phi Eliminated (byte*) heap_head#14
 Self Phi Eliminated (byte) init_angle_screen::y#2
 Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2
 Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2
@@ -2592,16 +2725,16 @@ Self Phi Eliminated (byte) NUM_SQUARES#11
 Self Phi Eliminated (byte*) init_dist_screen::screen_topline#2
 Self Phi Eliminated (byte*) init_dist_screen::screen_bottomline#2
 Self Phi Eliminated (byte) init_dist_screen::y#3
-Self Phi Eliminated (byte*) heap_head#11
+Self Phi Eliminated (byte*) heap_head#16
 Successful SSA optimization Pass2SelfPhiElimination
 Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2
 Identical Phi Values (word*) bsearch16u::items#7 (word*) bsearch16u::items#1
 Identical Phi Values (word) bsearch16u::key#4 (word) bsearch16u::key#0
 Identical Phi Values (word) bsearch16u::key#1 (word) bsearch16u::key#4
 Identical Phi Values (byte) NUM_SQUARES#6 (byte) NUM_SQUARES#3
-Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#32
-Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#1
-Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#15
+Identical Phi Values (byte*) heap_head#38 (byte*) heap_head#44
+Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#1
+Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#20
 Identical Phi Values (word*) SQUARES#17 (word*) SQUARES#1
 Identical Phi Values (word) sqrt::val#1 (word) sqrt::val#0
 Identical Phi Values (word*) SQUARES#10 (word*) SQUARES#15
@@ -2614,52 +2747,57 @@ Identical Phi Values (byte) atan2_16::i#10 (byte) atan2_16::i#2
 Identical Phi Values (word) atan2_16::angle#14 (word) atan2_16::angle#12
 Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#17
 Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#19
+Identical Phi Values (byte*) heap_head#22 (byte*) heap_head#1
+Identical Phi Values (byte*) heap_head#23 (byte*) heap_head#1
 Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#0
-Identical Phi Values (byte*) heap_head#28 (byte*) HEAP_TOP#0
+Identical Phi Values (byte*) heap_head#40 (byte*) heap_head#12
 Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0
 Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11
-Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#11
+Identical Phi Values (byte*) heap_head#24 (byte*) heap_head#16
 Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15
-Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#21
+Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#14
 Identical Phi Values (byte) main::bucket_idx#13 (byte) main::bucket_idx#6
-Identical Phi Values (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#18
-Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#35
-Identical Phi Values (word*) SQUARES#45 (word*) SQUARES#26
+Identical Phi Values (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#18
+Identical Phi Values (byte*) heap_head#62 (byte*) heap_head#48
+Identical Phi Values (word*) SQUARES#44 (word*) SQUARES#26
 Identical Phi Values (byte) main::bucket_size#1 (byte) main::bucket_size#0
 Identical Phi Values (byte) main::bucket_idx#10 (byte) main::bucket_idx#13
-Identical Phi Values (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#34
-Identical Phi Values (byte*) heap_head#42 (byte*) heap_head#51
-Identical Phi Values (word*) SQUARES#35 (word*) SQUARES#45
+Identical Phi Values (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#33
+Identical Phi Values (byte*) heap_head#55 (byte*) heap_head#62
+Identical Phi Values (word*) SQUARES#35 (word*) SQUARES#44
+Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#1
+Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#1
+Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#1
 Identical Phi Values (byte*) init_buckets::screen#6 (byte*) init_buckets::screen#0
-Identical Phi Values (byte*) heap_head#64 (byte*) heap_head#17
+Identical Phi Values (byte*) heap_head#74 (byte*) heap_head#24
 Identical Phi Values (byte*) init_buckets::screen#1 (byte*) init_buckets::screen#6
-Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#64
-Identical Phi Values (byte*) heap_head#38 (byte*) heap_head#52
+Identical Phi Values (byte*) heap_head#63 (byte*) heap_head#74
+Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#63
 Identical Phi Values (byte*) init_buckets::screen#10 (byte*) init_buckets::screen#1
 Identical Phi Values (byte*) init_buckets::screen#7 (byte*) init_buckets::screen#10
-Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#1
+Identical Phi Values (byte*) heap_head#13 (byte*) heap_head#1
 Identical Phi Values (byte*) init_buckets::screen#2 (byte*) init_buckets::screen#7
-Identical Phi Values (byte*) heap_head#39 (byte*) heap_head#20
+Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#13
 Identical Phi Values (byte*) init_buckets::screen#3 (byte*) init_buckets::screen#2
-Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#39
+Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#52
 Identical Phi Values (byte*) init_angle_screen::screen#1 (byte*) init_angle_screen::screen#0
 Identical Phi Values (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#4
 Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#5
 Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#5
-Identical Phi Values (byte*) heap_head#32 (byte*) heap_head#28
+Identical Phi Values (byte*) heap_head#44 (byte*) heap_head#40
 Identical Phi Values (word*) SQUARES#23 (word*) SQUARES#21
 Identical Phi Values (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#0
-Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#16
+Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#21
 Identical Phi Values (word*) SQUARES#14 (word*) SQUARES#17
 Identical Phi Values (word*) SQUARES#15 (word*) SQUARES#18
 Identical Phi Values (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#0
-Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#38
+Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#39
 Identical Phi Values (byte*) init_dist_screen::screen_topline#2 (byte*) init_dist_screen::screen_topline#10
 Identical Phi Values (byte*) init_dist_screen::screen_bottomline#2 (byte*) init_dist_screen::screen_bottomline#10
 Identical Phi Values (byte) init_dist_screen::y#3 (byte) init_dist_screen::y#10
-Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#67
+Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#77
 Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#10
-Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#19
+Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#26
 Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#13
 Successful SSA optimization Pass2IdenticalPhiElimination
 Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18
@@ -2667,11 +2805,11 @@ Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17
 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19
 Identical Phi Values (byte) main::bucket_idx#3 (byte) main::bucket_idx#6
 Identical Phi Values (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#18
-Identical Phi Values (byte*) heap_head#36 (byte*) heap_head#35
+Identical Phi Values (byte*) heap_head#49 (byte*) heap_head#48
 Identical Phi Values (word*) SQUARES#27 (word*) SQUARES#26
 Successful SSA optimization Pass2IdenticalPhiElimination
 Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#18
-Identical Phi Values (byte*) heap_head#19 (byte*) heap_head#35
+Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#48
 Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#26
 Successful SSA optimization Pass2IdenticalPhiElimination
 Simple Condition (bool~) bsearch16u::$5 [17] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7
@@ -2688,31 +2826,29 @@ Simple Condition (bool~) atan2_16::$20 [157] if((byte) 0==(byte) atan2_16::shift
 Simple Condition (bool~) atan2_16::$21 [160] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26
 Simple Condition (bool~) atan2_16::$22 [177] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15
 Simple Condition (bool~) atan2_16::$14 [181] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8
-Simple Condition (bool~) main::$3 [218] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4
-Simple Condition (bool~) main::$5 [226] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7
-Simple Condition (bool~) main::$17 [231] if((byte) main::bucket_idx#1!=(byte) NUM_BUCKETS#0) goto main::@17
-Simple Condition (bool~) main::$8 [243] if(*((byte*) main::fill#0)==(byte) FILL_CHAR#0) goto main::@9
-Simple Condition (bool~) main::$12 [247] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@8
-Simple Condition (bool~) main::$11 [253] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@9
-Simple Condition (bool~) main::$14 [260] if((word) main::min_offset#2==(word) $ffff) goto main::@7
-Simple Condition (bool~) init_buckets::$1 [292] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1
-Simple Condition (bool~) init_buckets::$2 [301] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3
-Simple Condition (bool~) init_buckets::$6 [317] if((word) init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5
-Simple Condition (bool~) init_buckets::$8 [325] if((byte) init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7
-Simple Condition (bool~) init_buckets::$11 [341] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9
-Simple Condition (bool~) init_angle_screen::$15 [386] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2
-Simple Condition (bool~) init_angle_screen::$16 [392] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
-Simple Condition (bool~) init_dist_screen::$3 [408] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
-Simple Condition (bool~) init_dist_screen::$11 [429] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
-Simple Condition (bool~) init_dist_screen::$20 [459] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
-Simple Condition (bool~) init_dist_screen::$21 [465] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
+Simple Condition (bool~) main::$3 [230] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4
+Simple Condition (bool~) main::$5 [238] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7
+Simple Condition (bool~) main::$17 [243] if((byte) main::bucket_idx#1!=(byte) NUM_BUCKETS#0) goto main::@17
+Simple Condition (bool~) main::$8 [255] if(*((byte*) main::fill#0)==(byte) FILL_CHAR#0) goto main::@9
+Simple Condition (bool~) main::$12 [259] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@8
+Simple Condition (bool~) main::$11 [265] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@9
+Simple Condition (bool~) main::$14 [272] if((word) main::min_offset#2==(word) $ffff) goto main::@7
+Simple Condition (bool~) init_buckets::$1 [325] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1
+Simple Condition (bool~) init_buckets::$2 [334] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3
+Simple Condition (bool~) init_buckets::$6 [350] if((word) init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5
+Simple Condition (bool~) init_buckets::$8 [358] if((byte) init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7
+Simple Condition (bool~) init_buckets::$11 [374] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9
+Simple Condition (bool~) init_angle_screen::$15 [419] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2
+Simple Condition (bool~) init_angle_screen::$16 [425] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
+Simple Condition (bool~) init_dist_screen::$3 [441] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
+Simple Condition (bool~) init_dist_screen::$11 [462] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
+Simple Condition (bool~) init_dist_screen::$20 [492] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
+Simple Condition (bool~) init_dist_screen::$21 [498] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
 Successful SSA optimization Pass2ConditionalJumpSimplification
 Negating conditional jump and destination [177] if((byte) atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17
 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
 Constant right-side identified [45] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
 Constant right-side identified [52] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
-Constant right-side identified [194] (byte[$3e8]) SCREEN_DIST#0 ← { fill( $3e8, 0) }
-Constant right-side identified [195] (byte[$3e8]) SCREEN_ANGLE#0 ← { fill( $3e8, 0) }
 Successful SSA optimization Pass2ConstantRValueConsolidation
 Constant (const byte*) RASTER#0 = (byte*) 53266
 Constant (const byte*) BORDERCOL#0 = (byte*) 53280
@@ -2730,8 +2866,8 @@ Constant (const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 = kickasm
  }}
 Constant (const word) atan2_16::angle#0 = 0
 Constant (const byte) atan2_16::i#0 = 0
-Constant (const byte[$3e8]) SCREEN_DIST#0 = { fill( $3e8, 0) }
-Constant (const byte[$3e8]) SCREEN_ANGLE#0 = { fill( $3e8, 0) }
+Constant (const word) malloc::size#1 = $3e8
+Constant (const word) malloc::size#2 = $3e8
 Constant (const byte*) SCREEN_FILL#0 = (byte*) 1024
 Constant (const byte) FILL_CHAR#0 = '*'
 Constant (const byte) main::bucket_idx#0 = 0
@@ -2752,33 +2888,25 @@ Constant (const byte) init_dist_screen::y#0 = 0
 Constant (const byte) init_dist_screen::x#0 = 0
 Constant (const byte) init_dist_screen::xb#0 = $27
 Successful SSA optimization Pass2ConstantIdentification
-Constant (const byte*) init_dist_screen::screen#0 = SCREEN_DIST#0
-Constant (const byte*) init_angle_screen::screen#0 = SCREEN_ANGLE#0
-Constant (const byte*) init_buckets::screen#0 = SCREEN_DIST#0
-Successful SSA optimization Pass2ConstantIdentification
-Constant value identified { fill( NUM_BUCKETS#0, 0) } in [282] (byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 ← { fill( NUM_BUCKETS#0, 0) }
-Constant value identified { fill( NUM_BUCKETS#0, 0) } in [283] (word*[NUM_BUCKETS#0]) BUCKETS#0 ← { fill( NUM_BUCKETS#0, 0) }
-Constant value identified { fill( NUM_BUCKETS#0, 0) } in [284] (byte[NUM_BUCKETS#0]) BUCKET_IDX#0 ← { fill( NUM_BUCKETS#0, 0) }
-Successful SSA optimization Pass2ConstantValues
-if() condition always true - replacing block destination [215] if(true) goto main::@4
-if() condition always true - replacing block destination [271] if(true) goto main::@25
+if() condition always true - replacing block destination [227] if(true) goto main::@4
+if() condition always true - replacing block destination [283] if(true) goto main::@25
 Successful SSA optimization Pass2ConstantIfs
-Resolved ranged next value [299] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++
-Resolved ranged comparison value [301] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8
-Resolved ranged next value [339] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++
-Resolved ranged comparison value [341] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8
-Resolved ranged next value [390] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++
-Resolved ranged comparison value [392] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
-Resolved ranged next value [463] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
-Resolved ranged comparison value [465] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
-Rewriting conditional comparison [386] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2
-Rewriting conditional comparison [459] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
-De-inlining pointer[w] to *(pointer+w)   [306] (word) malloc::size#1 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
-De-inlining pointer[w] to *(pointer+w)   [314] *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5
-De-inlining pointer[w] to *(pointer+w)   [333] (word*) init_buckets::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13)
+Resolved ranged next value [332] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++
+Resolved ranged comparison value [334] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8
+Resolved ranged next value [372] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++
+Resolved ranged comparison value [374] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8
+Resolved ranged next value [423] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++
+Resolved ranged comparison value [425] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
+Resolved ranged next value [496] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
+Resolved ranged comparison value [498] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
+Rewriting conditional comparison [419] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2
+Rewriting conditional comparison [492] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
+De-inlining pointer[w] to *(pointer+w)   [339] (word) malloc::size#6 ← *((byte[]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
+De-inlining pointer[w] to *(pointer+w)   [347] *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5
+De-inlining pointer[w] to *(pointer+w)   [366] (word*) init_buckets::bucket#0 ← *((word*[]) BUCKETS#0 + (word~) init_buckets::$13)
 Successful SSA optimization Pass2DeInlineWordDerefIdx
 Eliminating unused variable - keeping the phi block (byte) NUM_SQUARES#18
-Eliminating unused variable - keeping the phi block (byte*) heap_head#35
+Eliminating unused variable - keeping the phi block (byte*) heap_head#48
 Eliminating unused variable - keeping the phi block (word*) SQUARES#26
 Eliminating unused constant (const byte) NUM_SQUARES#0
 Eliminating unused constant (const word*) SQUARES#0
@@ -2816,53 +2944,50 @@ Self Phi Eliminated (signed word) atan2_16::x#17
 Self Phi Eliminated (signed word) atan2_16::y#19
 Self Phi Eliminated (byte) main::bucket_idx#6
 Self Phi Eliminated (word*) SQUARES#18
-Self Phi Eliminated (byte) NUM_SQUARES#38
-Self Phi Eliminated (byte*) heap_head#67
+Self Phi Eliminated (byte) NUM_SQUARES#39
+Self Phi Eliminated (byte*) heap_head#77
 Successful SSA optimization Pass2SelfPhiElimination
 Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0
 Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0
 Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1
-Identical Phi Values (byte) NUM_SQUARES#38 (const byte) NUM_SQUARES#3
-Identical Phi Values (byte*) heap_head#67 (byte*) heap_head#1
+Identical Phi Values (byte) NUM_SQUARES#39 (const byte) NUM_SQUARES#3
+Identical Phi Values (byte*) heap_head#77 (byte*) heap_head#1
 Successful SSA optimization Pass2IdenticalPhiElimination
-Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#1
+Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#1
 Successful SSA optimization Pass2IdenticalPhiElimination
 Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD
 Constant right-side identified [30] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1
 Constant right-side identified [60] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1
-Constant right-side identified [123] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7
-Constant right-side identified [128] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1
-Constant right-side identified [138] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1
-Constant right-side identified [150] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1
-Constant right-side identified [169] (byte*) init_angle_screen::screen_topline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
-Constant right-side identified [170] (byte*) init_angle_screen::screen_bottomline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
-Constant right-side identified [203] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18
+Constant right-side identified [134] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7
+Constant right-side identified [136] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
+Constant right-side identified [141] (word) malloc::size#4 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER
+Constant right-side identified [146] (word) malloc::size#5 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
+Constant right-side identified [151] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1
+Constant right-side identified [161] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1
+Constant right-side identified [173] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1
 Successful SSA optimization Pass2ConstantRValueConsolidation
 Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD
 Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1
 Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3
 Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1
 Constant (const byte*) main::$20 = COLS#0+$3e7
-Constant (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 = { fill( NUM_BUCKETS#0, 0) }
-Constant (const word*[NUM_BUCKETS#0]) BUCKETS#0 = { fill( NUM_BUCKETS#0, 0) }
-Constant (const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 = { fill( NUM_BUCKETS#0, 0) }
+Constant (const word) malloc::size#3 = NUM_BUCKETS#0*SIZEOF_BYTE
+Constant (const word) malloc::size#4 = NUM_BUCKETS#0*SIZEOF_POINTER
+Constant (const word) malloc::size#5 = NUM_BUCKETS#0*SIZEOF_BYTE
 Constant (const byte) init_buckets::$0 = NUM_BUCKETS#0-1
 Constant (const byte) init_buckets::$3 = NUM_BUCKETS#0-1
 Constant (const byte) init_buckets::$7 = NUM_BUCKETS#0-1
-Constant (const byte*) init_angle_screen::screen_topline#0 = init_angle_screen::screen#0+(word)$28*$c
-Constant (const byte*) init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0+(word)$28*$c
-Constant (const byte*) init_dist_screen::screen_bottomline#0 = init_dist_screen::screen#0+(word)$28*$18
 Successful SSA optimization Pass2ConstantIdentification
 Resolved ranged next value [37] init_squares::i#1 ← ++ init_squares::i#2 to ++
 Resolved ranged comparison value [38] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1
 Resolved ranged next value [85] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
 Resolved ranged comparison value [86] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1
-Resolved ranged next value [131] init_buckets::i#1 ← ++ init_buckets::i#2 to ++
-Resolved ranged comparison value [132] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1
-Resolved ranged next value [148] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++
-Resolved ranged comparison value [149] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1
-Resolved ranged next value [153] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++
-Resolved ranged comparison value [154] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1
+Resolved ranged next value [154] init_buckets::i#1 ← ++ init_buckets::i#2 to ++
+Resolved ranged comparison value [155] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1
+Resolved ranged next value [171] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++
+Resolved ranged comparison value [172] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1
+Resolved ranged next value [176] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++
+Resolved ranged comparison value [177] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1
 Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1
 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1
 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17
@@ -2895,12 +3020,22 @@ Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0
 Inlining Noop Cast [10] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0
 Inlining Noop Cast [11] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0)
 Successful SSA optimization Pass2NopCastInlining
-Inlining Noop Cast [25] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
-Inlining Noop Cast [133] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
+Inlining Noop Cast [25] (void*) malloc::return#10 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
+Inlining Noop Cast [90] (void*) malloc::return#11 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
+Inlining Noop Cast [94] (void*) malloc::return#12 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
+Inlining Noop Cast [132] (void*) malloc::return#13 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
+Inlining Noop Cast [136] (void*) malloc::return#14 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
+Inlining Noop Cast [140] (void*) malloc::return#15 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
+Inlining Noop Cast [156] (void*) malloc::return#16 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
 Successful SSA optimization Pass2NopCastInlining
 Inlining Noop Cast [27] (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 keeping SQUARES#1
-Inlining Noop Cast [163] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$4 keeping init_angle_screen::xw#0
-Inlining Noop Cast [166] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$7 keeping init_angle_screen::yw#0
+Inlining Noop Cast [92] (byte[]) SCREEN_DIST#0 ← (byte*)(void*~) $0 keeping SCREEN_DIST#0
+Inlining Noop Cast [96] (byte[]) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 keeping SCREEN_ANGLE#0
+Inlining Noop Cast [134] (byte[]) BUCKET_SIZES#0 ← (byte*)(void*~) $3 keeping BUCKET_SIZES#0
+Inlining Noop Cast [138] (word*[]) BUCKETS#0 ← (word**)(void*~) $5 keeping BUCKETS#0
+Inlining Noop Cast [142] (byte[]) BUCKET_IDX#0 ← (byte*)(void*~) $7 keeping BUCKET_IDX#0
+Inlining Noop Cast [188] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$4 keeping init_angle_screen::xw#0
+Inlining Noop Cast [191] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$7 keeping init_angle_screen::yw#0
 Successful SSA optimization Pass2NopCastInlining
 Rewriting multiplication to use shift [8] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
 Rewriting multiplication to use shift [32] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
@@ -2909,18 +3044,23 @@ Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$3 / (co
 Rewriting division to use shift [60] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2
 Rewriting multiplication to use shift [74] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
 Rewriting multiplication to use shift [78] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
-Rewriting multiplication to use shift [96] (byte~) main::$21 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER
-Rewriting multiplication to use shift [103] (byte~) main::$22 ← (byte) main::i#2 * (const byte) SIZEOF_WORD
-Rewriting multiplication to use shift [131] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) * (const byte) SIZEOF_POINTER
-Rewriting multiplication to use shift [135] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER
-Rewriting multiplication to use shift [147] (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER
-Rewriting multiplication to use shift [151] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD
-Rewriting multiplication to use shift [160] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2
-Rewriting multiplication to use shift [164] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 * (byte) 2
-Rewriting multiplication to use shift [191] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2
-Rewriting multiplication to use shift [201] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2
+Rewriting multiplication to use shift [107] (byte~) main::$21 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER
+Rewriting multiplication to use shift [114] (byte~) main::$22 ← (byte) main::i#2 * (const byte) SIZEOF_WORD
+Rewriting multiplication to use shift [154] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) * (const byte) SIZEOF_POINTER
+Rewriting multiplication to use shift [158] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER
+Rewriting multiplication to use shift [170] (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER
+Rewriting multiplication to use shift [174] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD
+Rewriting multiplication to use shift [185] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2
+Rewriting multiplication to use shift [189] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 * (byte) 2
+Rewriting multiplication to use shift [217] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2
+Rewriting multiplication to use shift [227] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2
 Successful SSA optimization Pass2MultiplyToShiftRewriting
+Inlining constant with var siblings (const word) malloc::size#1
+Inlining constant with var siblings (const word) malloc::size#2
 Inlining constant with var siblings (const word) malloc::size#0
+Inlining constant with var siblings (const word) malloc::size#3
+Inlining constant with var siblings (const word) malloc::size#4
+Inlining constant with var siblings (const word) malloc::size#5
 Inlining constant with var siblings (const byte) bsearch16u::num#2
 Inlining constant with var siblings (const word) init_squares::sqr#0
 Inlining constant with var siblings (const byte) init_squares::i#0
@@ -2938,50 +3078,44 @@ Inlining constant with var siblings (const word) init_buckets::i4#0
 Inlining constant with var siblings (const byte) init_angle_screen::y#0
 Inlining constant with var siblings (const byte) init_angle_screen::x#0
 Inlining constant with var siblings (const byte) init_angle_screen::xb#0
-Inlining constant with var siblings (const byte*) init_angle_screen::screen_topline#0
-Inlining constant with var siblings (const byte*) init_angle_screen::screen_bottomline#0
 Inlining constant with var siblings (const byte) init_dist_screen::y#0
 Inlining constant with var siblings (const byte) init_dist_screen::x#0
 Inlining constant with var siblings (const byte) init_dist_screen::xb#0
-Inlining constant with var siblings (const byte*) init_dist_screen::screen_bottomline#0
 Constant inlined init_buckets::i1#0 = (word) 0
 Constant inlined init_squares::sqr#0 = (byte) 0
 Constant inlined main::bucket_idx#0 = (byte) 0
 Constant inlined init_angle_screen::y#0 = (byte) 0
 Constant inlined init_angle_screen::x#0 = (byte) 0
 Constant inlined atan2_16::angle#0 = (byte) 0
-Constant inlined init_angle_screen::screen_bottomline#0 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c
 Constant inlined init_buckets::i#0 = (byte) 0
 Constant inlined init_dist_screen::y#0 = (byte) 0
 Constant inlined init_dist_screen::xb#0 = (byte) $27
 Constant inlined init_dist_screen::x#0 = (byte) 0
-Constant inlined init_angle_screen::screen#0 = (const byte[$3e8]) SCREEN_ANGLE#0
 Constant inlined main::i#0 = (byte) 0
 Constant inlined atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1
 Constant inlined main::min_offset#0 = (word) $ffff
 Constant inlined init_buckets::i3#0 = (byte) 0
 Constant inlined init_buckets::i2#0 = (word) 0
 Constant inlined init_buckets::i4#0 = (word) 0
-Constant inlined init_buckets::screen#0 = (const byte[$3e8]) SCREEN_DIST#0
+Constant inlined malloc::size#5 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE
 Constant inlined init_buckets::$0 = (const byte) NUM_BUCKETS#0-(byte) 1
+Constant inlined malloc::size#4 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER
+Constant inlined malloc::size#3 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE
+Constant inlined malloc::size#2 = (word) $3e8
 Constant inlined main::min_angle#0 = (byte) $ff
 Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#3
 Constant inlined init_angle_screen::xb#0 = (byte) $27
 Constant inlined atan2_16::i#0 = (byte) 0
 Constant inlined init_buckets::$7 = (const byte) NUM_BUCKETS#0-(byte) 1
+Constant inlined malloc::size#1 = (word) $3e8
 Constant inlined main::$20 = (const byte*) COLS#0+(word) $3e7
 Constant inlined malloc::size#0 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD
 Constant inlined bsearch16u::$17 = (byte) 1*(const byte) SIZEOF_WORD
 Constant inlined init_buckets::$3 = (const byte) NUM_BUCKETS#0-(byte) 1
 Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD
-Constant inlined init_dist_screen::screen#0 = (const byte[$3e8]) SCREEN_DIST#0
-Constant inlined init_angle_screen::screen_topline#0 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c
-Constant inlined init_dist_screen::screen_bottomline#0 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18
 Constant inlined init_squares::i#0 = (byte) 0
 Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1
 Successful SSA optimization Pass2ConstantInlining
-Eliminating unused constant (const byte) SIZEOF_POINTER
-Successful SSA optimization PassNEliminateUnusedVars
 Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10)
 Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1)
 Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15)
@@ -3007,131 +3141,130 @@ Adding NOP phi() at start of @4
 Adding NOP phi() at start of @7
 Adding NOP phi() at start of @10
 Adding NOP phi() at start of @12
-Adding NOP phi() at start of @13
 Adding NOP phi() at start of @16
-Adding NOP phi() at start of @17
+Adding NOP phi() at start of @22
 Adding NOP phi() at start of @end
-Adding NOP phi() at start of main::@30
-Adding NOP phi() at start of main::@31
 Adding NOP phi() at start of main::@32
 Adding NOP phi() at start of main::@6
 Adding NOP phi() at start of main::@24
 Adding NOP phi() at start of init_buckets
-Adding NOP phi() at start of init_buckets::@2
 Adding NOP phi() at start of init_buckets::@4
 Adding NOP phi() at start of init_buckets::@6
-Adding NOP phi() at start of init_buckets::@8
-Adding NOP phi() at start of init_angle_screen
 Adding NOP phi() at start of init_dist_screen
-Adding NOP phi() at start of init_dist_screen::@15
-Adding NOP phi() at start of init_squares
 CALL GRAPH
-Calls in [] to main:7 
-Calls in [main] to init_dist_screen:11 init_angle_screen:13 init_buckets:15 
-Calls in [init_buckets] to malloc:73 
-Calls in [init_angle_screen] to atan2_16:121 
-Calls in [init_dist_screen] to init_squares:217 sqr:227 sqr:238 sqrt:243 
-Calls in [sqrt] to bsearch16u:269 
-Calls in [init_squares] to malloc:309 
+Calls in [] to malloc:5 malloc:8 malloc:11 malloc:14 malloc:17 main:20 
+Calls in [main] to init_dist_screen:25 init_angle_screen:27 init_buckets:29 
+Calls in [init_buckets] to malloc:87 
+Calls in [init_angle_screen] to atan2_16:138 
+Calls in [init_dist_screen] to init_squares:234 sqr:246 sqr:257 sqrt:262 
+Calls in [sqrt] to bsearch16u:288 
+Calls in [init_squares] to malloc:328 
 
 Created 54 initial phi equivalence classes
-Coalesced [33] main::min_offset#9 ← main::offset#0
-Coalesced [34] main::min_angle#7 ← main::min_angle#1
-Coalesced [48] main::bucket_idx#14 ← main::bucket_idx#1
-Coalesced [49] main::i#6 ← main::i#1
-Coalesced [50] main::min_angle#5 ← main::min_angle#4
-Not coalescing [51] main::min_offset#7 ← main::min_offset#2
-Not coalescing [52] main::min_offset#8 ← main::min_offset#5
-Coalesced (already) [53] main::min_angle#6 ← main::min_angle#2
-Not coalescing [54] main::min_offset#10 ← main::min_offset#5
-Coalesced (already) [55] main::min_angle#8 ← main::min_angle#2
-Coalesced [71] heap_head#72 ← heap_head#1
-Coalesced [72] malloc::size#3 ← malloc::size#1
-Coalesced [100] init_buckets::dist#7 ← init_buckets::dist#3
-Coalesced [101] init_buckets::i4#3 ← init_buckets::i4#1
-Coalesced [102] init_buckets::i3#3 ← init_buckets::i3#1
-Coalesced [103] init_buckets::i2#4 ← init_buckets::i2#1
-Coalesced [104] init_buckets::dist#6 ← init_buckets::dist#1
-Coalesced [105] init_buckets::i1#3 ← init_buckets::i1#1
-Coalesced [106] init_buckets::i#3 ← init_buckets::i#1
-Not coalescing [109] heap_head#1 ← malloc::mem#0
-Coalesced [141] init_angle_screen::y#6 ← init_angle_screen::y#1
-Coalesced [142] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#1
-Coalesced [143] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#1
-Coalesced [144] init_angle_screen::x#4 ← init_angle_screen::x#1
-Coalesced [145] init_angle_screen::xb#4 ← init_angle_screen::xb#1
-Coalesced [148] atan2_16::yi#17 ← atan2_16::$2
-Coalesced [152] atan2_16::xi#14 ← atan2_16::$7
-Coalesced [154] atan2_16::yi#19 ← atan2_16::yi#0
-Coalesced [155] atan2_16::xi#16 ← atan2_16::xi#0
-Coalesced [158] atan2_16::angle#22 ← atan2_16::angle#12
-Coalesced [163] atan2_16::angle#27 ← atan2_16::angle#4
-Coalesced [167] atan2_16::return#5 ← atan2_16::angle#5
-Coalesced [170] atan2_16::return#6 ← atan2_16::angle#11
-Coalesced [171] atan2_16::angle#26 ← atan2_16::angle#1
-Not coalescing [172] atan2_16::shift#5 ← atan2_16::i#2
-Not coalescing [173] atan2_16::xd#10 ← atan2_16::xi#3
-Not coalescing [174] atan2_16::yd#10 ← atan2_16::yi#3
-Coalesced [180] atan2_16::yd#13 ← atan2_16::yd#2
-Coalesced [181] atan2_16::xd#13 ← atan2_16::xd#2
-Coalesced [188] atan2_16::yi#21 ← atan2_16::yi#2
-Coalesced [189] atan2_16::angle#25 ← atan2_16::angle#3
-Coalesced [190] atan2_16::xi#18 ← atan2_16::xi#2
-Coalesced [194] atan2_16::yi#18 ← atan2_16::yi#8
-Coalesced [195] atan2_16::xi#15 ← atan2_16::xi#8
-Coalesced [196] atan2_16::i#12 ← atan2_16::i#1
-Coalesced [197] atan2_16::angle#21 ← atan2_16::angle#13
-Coalesced (already) [198] atan2_16::angle#23 ← atan2_16::angle#13
-Coalesced [203] atan2_16::yi#20 ← atan2_16::yi#1
-Coalesced [204] atan2_16::angle#24 ← atan2_16::angle#2
-Coalesced [205] atan2_16::xi#17 ← atan2_16::xi#1
-Coalesced [206] atan2_16::yd#12 ← atan2_16::yd#3
-Coalesced [207] atan2_16::xd#12 ← atan2_16::xd#3
-Coalesced [211] atan2_16::shift#6 ← atan2_16::shift#1
-Coalesced [212] atan2_16::xd#11 ← atan2_16::xd#1
-Coalesced [213] atan2_16::yd#11 ← atan2_16::yd#1
-Not coalescing [214] atan2_16::xi#13 ← atan2_16::x#0
-Not coalescing [215] atan2_16::yi#16 ← atan2_16::y#0
-Coalesced [223] init_dist_screen::yd#2 ← init_dist_screen::$5
-Coalesced [226] sqr::val#3 ← sqr::val#0
-Coalesced [234] init_dist_screen::xd#2 ← init_dist_screen::$13
-Coalesced [237] sqr::val#4 ← sqr::val#1
-Coalesced [258] init_dist_screen::y#14 ← init_dist_screen::y#1
-Coalesced [259] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1
-Coalesced [260] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1
-Coalesced [261] init_dist_screen::x#8 ← init_dist_screen::x#1
-Coalesced [262] init_dist_screen::xb#8 ← init_dist_screen::xb#1
-Coalesced [264] init_dist_screen::xd#1 ← init_dist_screen::$15
-Coalesced [266] init_dist_screen::yd#1 ← init_dist_screen::$7
-Coalesced [276] bsearch16u::items#10 ← bsearch16u::items#1
-Coalesced [281] bsearch16u::return#9 ← bsearch16u::$2
-Coalesced [283] bsearch16u::return#7 ← bsearch16u::return#2
-Coalesced [286] bsearch16u::return#8 ← bsearch16u::items#2
-Not coalescing [292] bsearch16u::return#6 ← bsearch16u::pivot#0
-Coalesced [296] bsearch16u::num#10 ← bsearch16u::num#1
-Coalesced [297] bsearch16u::items#12 ← bsearch16u::items#0
-Coalesced [300] bsearch16u::num#9 ← bsearch16u::num#0
-Coalesced [301] bsearch16u::items#11 ← bsearch16u::items#8
-Coalesced [302] bsearch16u::num#11 ← bsearch16u::num#3
-Coalesced (already) [303] bsearch16u::items#13 ← bsearch16u::items#2
-Coalesced [312] init_squares::squares#4 ← init_squares::squares#0
-Coalesced [322] init_squares::sqr#3 ← init_squares::sqr#1
-Coalesced [323] init_squares::squares#3 ← init_squares::squares#1
-Coalesced [324] init_squares::i#3 ← init_squares::i#1
-Coalesced down to 44 phi equivalence classes
+Coalesced [7] heap_head#83 ← heap_head#1
+Coalesced (already) [10] heap_head#82 ← heap_head#1
+Coalesced (already) [13] heap_head#84 ← heap_head#1
+Coalesced (already) [16] heap_head#85 ← heap_head#1
+Coalesced [47] main::min_offset#9 ← main::offset#0
+Coalesced [48] main::min_angle#7 ← main::min_angle#1
+Coalesced [62] main::bucket_idx#14 ← main::bucket_idx#1
+Coalesced [63] main::i#6 ← main::i#1
+Coalesced [64] main::min_angle#5 ← main::min_angle#4
+Not coalescing [65] main::min_offset#7 ← main::min_offset#2
+Not coalescing [66] main::min_offset#8 ← main::min_offset#5
+Coalesced (already) [67] main::min_angle#6 ← main::min_angle#2
+Not coalescing [68] main::min_offset#10 ← main::min_offset#5
+Coalesced (already) [69] main::min_angle#8 ← main::min_angle#2
+Not coalescing [75] init_buckets::dist#6 ← init_buckets::screen#0
+Coalesced (already) [85] heap_head#86 ← heap_head#1
+Coalesced [86] malloc::size#8 ← malloc::size#6
+Not coalescing [99] init_buckets::dist#8 ← init_buckets::screen#0
+Coalesced [114] init_buckets::dist#9 ← init_buckets::dist#3
+Coalesced [115] init_buckets::i4#3 ← init_buckets::i4#1
+Coalesced [116] init_buckets::i3#3 ← init_buckets::i3#1
+Coalesced [117] init_buckets::i2#4 ← init_buckets::i2#1
+Coalesced [118] init_buckets::dist#7 ← init_buckets::dist#1
+Coalesced [119] init_buckets::i1#3 ← init_buckets::i1#1
+Coalesced [120] init_buckets::i#3 ← init_buckets::i#1
+Not coalescing [123] heap_head#1 ← malloc::mem#0
+Coalesced [127] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#0
+Coalesced [128] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#0
+Coalesced [158] init_angle_screen::y#6 ← init_angle_screen::y#1
+Coalesced [159] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1
+Coalesced [160] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1
+Coalesced [161] init_angle_screen::x#4 ← init_angle_screen::x#1
+Coalesced [162] init_angle_screen::xb#4 ← init_angle_screen::xb#1
+Coalesced [165] atan2_16::yi#17 ← atan2_16::$2
+Coalesced [169] atan2_16::xi#14 ← atan2_16::$7
+Coalesced [171] atan2_16::yi#19 ← atan2_16::yi#0
+Coalesced [172] atan2_16::xi#16 ← atan2_16::xi#0
+Coalesced [175] atan2_16::angle#22 ← atan2_16::angle#12
+Coalesced [180] atan2_16::angle#27 ← atan2_16::angle#4
+Coalesced [184] atan2_16::return#5 ← atan2_16::angle#5
+Coalesced [187] atan2_16::return#6 ← atan2_16::angle#11
+Coalesced [188] atan2_16::angle#26 ← atan2_16::angle#1
+Not coalescing [189] atan2_16::shift#5 ← atan2_16::i#2
+Not coalescing [190] atan2_16::xd#10 ← atan2_16::xi#3
+Not coalescing [191] atan2_16::yd#10 ← atan2_16::yi#3
+Coalesced [197] atan2_16::yd#13 ← atan2_16::yd#2
+Coalesced [198] atan2_16::xd#13 ← atan2_16::xd#2
+Coalesced [205] atan2_16::yi#21 ← atan2_16::yi#2
+Coalesced [206] atan2_16::angle#25 ← atan2_16::angle#3
+Coalesced [207] atan2_16::xi#18 ← atan2_16::xi#2
+Coalesced [211] atan2_16::yi#18 ← atan2_16::yi#8
+Coalesced [212] atan2_16::xi#15 ← atan2_16::xi#8
+Coalesced [213] atan2_16::i#12 ← atan2_16::i#1
+Coalesced [214] atan2_16::angle#21 ← atan2_16::angle#13
+Coalesced (already) [215] atan2_16::angle#23 ← atan2_16::angle#13
+Coalesced [220] atan2_16::yi#20 ← atan2_16::yi#1
+Coalesced [221] atan2_16::angle#24 ← atan2_16::angle#2
+Coalesced [222] atan2_16::xi#17 ← atan2_16::xi#1
+Coalesced [223] atan2_16::yd#12 ← atan2_16::yd#3
+Coalesced [224] atan2_16::xd#12 ← atan2_16::xd#3
+Coalesced [228] atan2_16::shift#6 ← atan2_16::shift#1
+Coalesced [229] atan2_16::xd#11 ← atan2_16::xd#1
+Coalesced [230] atan2_16::yd#11 ← atan2_16::yd#1
+Not coalescing [231] atan2_16::xi#13 ← atan2_16::x#0
+Not coalescing [232] atan2_16::yi#16 ← atan2_16::y#0
+Coalesced [236] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0
+Coalesced [237] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0
+Coalesced [242] init_dist_screen::yd#2 ← init_dist_screen::$5
+Coalesced [245] sqr::val#3 ← sqr::val#0
+Coalesced [253] init_dist_screen::xd#2 ← init_dist_screen::$13
+Coalesced [256] sqr::val#4 ← sqr::val#1
+Coalesced [277] init_dist_screen::y#14 ← init_dist_screen::y#1
+Coalesced [278] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1
+Coalesced [279] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1
+Coalesced [280] init_dist_screen::x#8 ← init_dist_screen::x#1
+Coalesced [281] init_dist_screen::xb#8 ← init_dist_screen::xb#1
+Coalesced [283] init_dist_screen::xd#1 ← init_dist_screen::$15
+Coalesced [285] init_dist_screen::yd#1 ← init_dist_screen::$7
+Coalesced [295] bsearch16u::items#10 ← bsearch16u::items#1
+Coalesced [300] bsearch16u::return#9 ← bsearch16u::$2
+Coalesced [302] bsearch16u::return#7 ← bsearch16u::return#2
+Coalesced [305] bsearch16u::return#8 ← bsearch16u::items#2
+Not coalescing [311] bsearch16u::return#6 ← bsearch16u::pivot#0
+Coalesced [315] bsearch16u::num#10 ← bsearch16u::num#1
+Coalesced [316] bsearch16u::items#12 ← bsearch16u::items#0
+Coalesced [319] bsearch16u::num#9 ← bsearch16u::num#0
+Coalesced [320] bsearch16u::items#11 ← bsearch16u::items#8
+Coalesced [321] bsearch16u::num#11 ← bsearch16u::num#3
+Coalesced (already) [322] bsearch16u::items#13 ← bsearch16u::items#2
+Coalesced (already) [327] heap_head#87 ← heap_head#1
+Coalesced [331] init_squares::squares#4 ← init_squares::squares#0
+Coalesced [341] init_squares::sqr#3 ← init_squares::sqr#1
+Coalesced [342] init_squares::squares#3 ← init_squares::squares#1
+Coalesced [343] init_squares::i#3 ← init_squares::i#1
+Coalesced down to 45 phi equivalence classes
 Culled Empty Block (label) @4
 Culled Empty Block (label) @7
 Culled Empty Block (label) @10
-Culled Empty Block (label) @12
-Culled Empty Block (label) @13
-Culled Empty Block (label) @17
+Culled Empty Block (label) @22
 Culled Empty Block (label) main::@32
 Culled Empty Block (label) main::@6
 Culled Empty Block (label) main::@24
-Culled Empty Block (label) init_buckets::@2
 Culled Empty Block (label) init_buckets::@4
 Culled Empty Block (label) init_buckets::@6
-Culled Empty Block (label) init_buckets::@8
 Culled Empty Block (label) init_buckets::@16
 Culled Empty Block (label) init_buckets::@15
 Culled Empty Block (label) init_buckets::@14
@@ -3145,13 +3278,19 @@ Culled Empty Block (label) atan2_16::@38
 Culled Empty Block (label) atan2_16::@34
 Culled Empty Block (label) atan2_16::@36
 Culled Empty Block (label) atan2_16::@37
-Culled Empty Block (label) init_dist_screen::@15
 Culled Empty Block (label) init_dist_screen::@19
 Culled Empty Block (label) init_dist_screen::@20
 Culled Empty Block (label) bsearch16u::@1
 Culled Empty Block (label) bsearch16u::@18
 Culled Empty Block (label) init_squares::@4
-Renumbering block @16 to @1
+Renumbering block @12 to @1
+Renumbering block @13 to @2
+Renumbering block @16 to @3
+Renumbering block @17 to @4
+Renumbering block @18 to @5
+Renumbering block @19 to @6
+Renumbering block @20 to @7
+Renumbering block @21 to @8
 Renumbering block bsearch16u::@2 to bsearch16u::@1
 Renumbering block bsearch16u::@3 to bsearch16u::@2
 Renumbering block bsearch16u::@6 to bsearch16u::@3
@@ -3193,23 +3332,23 @@ Renumbering block main::@31 to main::@15
 Renumbering block main::@33 to main::@16
 Renumbering block main::@34 to main::@17
 Renumbering block main::@35 to main::@18
-Renumbering block init_buckets::@3 to init_buckets::@2
-Renumbering block init_buckets::@5 to init_buckets::@3
-Renumbering block init_buckets::@7 to init_buckets::@4
-Renumbering block init_buckets::@9 to init_buckets::@5
-Renumbering block init_buckets::@11 to init_buckets::@6
+Renumbering block init_buckets::@5 to init_buckets::@4
+Renumbering block init_buckets::@7 to init_buckets::@5
+Renumbering block init_buckets::@8 to init_buckets::@6
+Renumbering block init_buckets::@9 to init_buckets::@7
+Renumbering block init_buckets::@11 to init_buckets::@8
 Renumbering block init_angle_screen::@5 to init_angle_screen::@4
 Renumbering block init_dist_screen::@11 to init_dist_screen::@9
-Renumbering block init_dist_screen::@16 to init_dist_screen::@10
-Renumbering block init_dist_screen::@17 to init_dist_screen::@11
-Renumbering block init_dist_screen::@18 to init_dist_screen::@12
+Renumbering block init_dist_screen::@15 to init_dist_screen::@10
+Renumbering block init_dist_screen::@16 to init_dist_screen::@11
+Renumbering block init_dist_screen::@17 to init_dist_screen::@12
+Renumbering block init_dist_screen::@18 to init_dist_screen::@13
 Adding NOP phi() at start of @begin
 Adding NOP phi() at start of @1
+Adding NOP phi() at start of @2
+Adding NOP phi() at start of @3
 Adding NOP phi() at start of @end
-Adding NOP phi() at start of main::@14
-Adding NOP phi() at start of main::@15
 Adding NOP phi() at start of init_buckets
-Adding NOP phi() at start of init_angle_screen
 Adding NOP phi() at start of init_dist_screen
 Adding NOP phi() at start of bsearch16u
 Adding NOP phi() at start of init_squares
@@ -3220,460 +3359,501 @@ FINAL CONTROL FLOW GRAPH
   to:@1
 @1: scope:[]  from @begin
   [1] phi()
-  [2] call main 
+  [2] call malloc 
+  to:@4
+@4: scope:[]  from @1
+  [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
+  [4] call malloc 
+  to:@5
+@5: scope:[]  from @4
+  [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0
+  to:@2
+@2: scope:[]  from @5
+  [6] phi()
+  [7] call malloc 
+  to:@6
+@6: scope:[]  from @2
+  [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0
+  [9] call malloc 
+  to:@7
+@7: scope:[]  from @6
+  [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0
+  [11] call malloc 
+  to:@8
+@8: scope:[]  from @7
+  [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0
+  to:@3
+@3: scope:[]  from @8
+  [13] phi()
+  [14] call main 
   to:@end
-@end: scope:[]  from @1
-  [3] phi()
-main: scope:[main]  from @1
+@end: scope:[]  from @3
+  [15] phi()
+main: scope:[main]  from @3
   asm { sei  }
-  [5] call init_dist_screen 
+  [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
+  [18] call init_dist_screen 
   to:main::@14
 main::@14: scope:[main]  from main
-  [6] phi()
-  [7] call init_angle_screen 
+  [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
+  [20] call init_angle_screen 
   to:main::@15
 main::@15: scope:[main]  from main::@14
-  [8] phi()
-  [9] call init_buckets 
+  [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0
+  [22] call init_buckets 
   to:main::@1
 main::@1: scope:[main]  from main::@10 main::@11 main::@15
-  [10] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 )
+  [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 )
   to:main::@2
 main::@2: scope:[main]  from main::@1 main::@2
-  [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2
+  [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2
   to:main::@3
 main::@3: scope:[main]  from main::@2
-  [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
-  [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1
-  [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21)
-  [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6)
-  [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4
+  [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
+  [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1
+  [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21)
+  [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6)
+  [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4
   to:main::@5
 main::@5: scope:[main]  from main::@16 main::@3
-  [17] (word) main::min_offset#5 ← phi( main::@3/(word) $ffff main::@16/(word~) main::min_offset#7 )
-  [17] (byte) main::min_angle#2 ← phi( main::@3/(byte) $ff main::@16/(byte) main::min_angle#4 )
-  [17] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@16/(byte) main::i#1 )
-  [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1
-  [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22)
-  [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0
-  [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18
+  [30] (word) main::min_offset#5 ← phi( main::@3/(word) $ffff main::@16/(word~) main::min_offset#7 )
+  [30] (byte) main::min_angle#2 ← phi( main::@3/(byte) $ff main::@16/(byte) main::min_angle#4 )
+  [30] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@16/(byte) main::i#1 )
+  [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1
+  [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22)
+  [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0
+  [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18
   to:main::@7
 main::@7: scope:[main]  from main::@5
-  [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0
-  [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17
+  [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0
+  [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17
   to:main::@8
 main::@8: scope:[main]  from main::@7
-  [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0)
+  [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0)
   to:main::@6
 main::@6: scope:[main]  from main::@17 main::@18 main::@8
-  [25] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 )
-  [25] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 )
-  [26] (byte) main::i#1 ← ++ (byte) main::i#2
-  [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16
+  [38] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 )
+  [38] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 )
+  [39] (byte) main::i#1 ← ++ (byte) main::i#2
+  [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16
   to:main::@9
 main::@9: scope:[main]  from main::@6
-  [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4
+  [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4
   to:main::@10
 main::@10: scope:[main]  from main::@9
-  [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2
-  [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0
-  [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
+  [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2
+  [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0
+  [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
   to:main::@1
 main::@4: scope:[main]  from main::@3 main::@9
-  [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6
-  [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11
+  [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6
+  [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11
   to:main::@12
 main::@12: scope:[main]  from main::@4
-  [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
+  [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
   to:main::@13
 main::@13: scope:[main]  from main::@12 main::@13
-  [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
+  [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
   to:main::@13
 main::@11: scope:[main]  from main::@4
-  [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
+  [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
   to:main::@1
 main::@16: scope:[main]  from main::@6
-  [37] (word~) main::min_offset#7 ← (word) main::min_offset#2
+  [50] (word~) main::min_offset#7 ← (word) main::min_offset#2
   to:main::@5
 main::@17: scope:[main]  from main::@7
-  [38] (word~) main::min_offset#8 ← (word) main::min_offset#5
+  [51] (word~) main::min_offset#8 ← (word) main::min_offset#5
   to:main::@6
 main::@18: scope:[main]  from main::@5
-  [39] (word~) main::min_offset#10 ← (word) main::min_offset#5
+  [52] (word~) main::min_offset#10 ← (word) main::min_offset#5
   to:main::@6
 init_buckets: scope:[init_buckets]  from main::@15
-  [40] phi()
+  [53] phi()
   to:init_buckets::@1
 init_buckets::@1: scope:[init_buckets]  from init_buckets init_buckets::@1
-  [41] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 )
-  [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0
-  [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2
-  [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1
+  [54] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 )
+  [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0
+  [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2
+  [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1
   to:init_buckets::@2
-init_buckets::@2: scope:[init_buckets]  from init_buckets::@1 init_buckets::@2
-  [45] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 )
-  [45] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@2/(byte*) init_buckets::dist#1 )
-  [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
-  [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
-  [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2
-  [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2
+init_buckets::@2: scope:[init_buckets]  from init_buckets::@1
+  [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0
   to:init_buckets::@3
-init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@6
-  [50] (word) init_buckets::i2#2 ← phi( init_buckets::@6/(word) init_buckets::i2#1 init_buckets::@2/(word) 0 )
-  [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2
-  [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1
-  [53] call malloc 
-  to:init_buckets::@6
-init_buckets::@6: scope:[init_buckets]  from init_buckets::@3
-  [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
-  [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1
-  [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12
-  [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5
-  [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2
-  [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3
+init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@3
+  [59] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 )
+  [59] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*~) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 )
+  [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
+  [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
+  [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2
+  [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3
   to:init_buckets::@4
-init_buckets::@4: scope:[init_buckets]  from init_buckets::@4 init_buckets::@6
-  [60] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 )
-  [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0
-  [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2
-  [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4
+init_buckets::@4: scope:[init_buckets]  from init_buckets::@3 init_buckets::@8
+  [64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 )
+  [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2
+  [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1
+  [67] call malloc 
+  to:init_buckets::@8
+init_buckets::@8: scope:[init_buckets]  from init_buckets::@4
+  [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
+  [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1
+  [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12
+  [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5
+  [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2
+  [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4
   to:init_buckets::@5
-init_buckets::@5: scope:[init_buckets]  from init_buckets::@4 init_buckets::@5
-  [64] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 )
-  [64] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@5/(byte*) init_buckets::dist#3 )
-  [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
-  [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
-  [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1
-  [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13
-  [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17)
-  [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0
-  [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
-  [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
-  [73] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
-  [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
-  [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2
-  [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5
+init_buckets::@5: scope:[init_buckets]  from init_buckets::@5 init_buckets::@8
+  [74] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 )
+  [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0
+  [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2
+  [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5
+  to:init_buckets::@6
+init_buckets::@6: scope:[init_buckets]  from init_buckets::@5
+  [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0
+  to:init_buckets::@7
+init_buckets::@7: scope:[init_buckets]  from init_buckets::@6 init_buckets::@7
+  [79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 )
+  [79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*~) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 )
+  [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
+  [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
+  [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1
+  [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13
+  [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17)
+  [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0
+  [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
+  [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
+  [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
+  [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
+  [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2
+  [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7
   to:init_buckets::@return
-init_buckets::@return: scope:[init_buckets]  from init_buckets::@5
-  [77] return 
+init_buckets::@return: scope:[init_buckets]  from init_buckets::@7
+  [92] return 
   to:@return
-malloc: scope:[malloc]  from init_buckets::@3 init_squares
-  [78] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
-  [78] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 )
-  [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2
-  [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0
+malloc: scope:[malloc]  from @1 @2 @4 @6 @7 init_buckets::@4 init_squares
+  [93] (word) malloc::size#7 ← phi( @1/(word) $3e8 @2/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE @4/(word) $3e8 @6/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER @7/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
+  [93] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP#0 @2/(byte*) heap_head#1 @4/(byte*) heap_head#1 @6/(byte*) heap_head#1 @7/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
+  [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7
+  [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0
   to:malloc::@return
 malloc::@return: scope:[malloc]  from malloc
-  [81] return 
+  [96] return 
   to:@return
 init_angle_screen: scope:[init_angle_screen]  from main::@14
-  [82] phi()
+  [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
+  [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
   to:init_angle_screen::@1
 init_angle_screen::@1: scope:[init_angle_screen]  from init_angle_screen init_angle_screen::@3
-  [83] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 )
-  [83] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 )
-  [83] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 )
+  [99] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 )
+  [99] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 )
+  [99] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 )
   to:init_angle_screen::@2
 init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@4
-  [84] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 )
-  [84] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 )
-  [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1
-  [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2
-  [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0
-  [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1
-  [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0
-  [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
-  [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
-  [92] call atan2_16 
-  [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0
+  [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 )
+  [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 )
+  [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1
+  [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2
+  [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0
+  [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1
+  [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0
+  [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
+  [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
+  [108] call atan2_16 
+  [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0
   to:init_angle_screen::@4
 init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
-  [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
-  [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80
-  [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10
-  [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
-  [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0
-  [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12
-  [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
-  [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13
-  [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
-  [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
-  [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
-  [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
-  [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2
+  [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
+  [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80
+  [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10
+  [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
+  [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0
+  [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12
+  [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
+  [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13
+  [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
+  [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
+  [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
+  [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
+  [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2
   to:init_angle_screen::@3
 init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@4
-  [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28
-  [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28
-  [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4
-  [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1
+  [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28
+  [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28
+  [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4
+  [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1
   to:init_angle_screen::@return
 init_angle_screen::@return: scope:[init_angle_screen]  from init_angle_screen::@3
-  [111] return 
+  [127] return 
   to:@return
 atan2_16: scope:[atan2_16]  from init_angle_screen::@2
-  [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
+  [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
   to:atan2_16::@2
 atan2_16::@2: scope:[atan2_16]  from atan2_16
-  [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
+  [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
   to:atan2_16::@3
 atan2_16::@3: scope:[atan2_16]  from atan2_16::@1 atan2_16::@2
-  [114] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
-  [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
+  [130] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
+  [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
   to:atan2_16::@5
 atan2_16::@5: scope:[atan2_16]  from atan2_16::@3
-  [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
+  [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
   to:atan2_16::@6
 atan2_16::@6: scope:[atan2_16]  from atan2_16::@4 atan2_16::@5
-  [117] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 )
+  [133] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 )
   to:atan2_16::@10
 atan2_16::@10: scope:[atan2_16]  from atan2_16::@19 atan2_16::@6
-  [118] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
-  [118] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
-  [118] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
-  [118] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 )
-  [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
+  [134] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
+  [134] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
+  [134] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
+  [134] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 )
+  [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
   to:atan2_16::@12
 atan2_16::@12: scope:[atan2_16]  from atan2_16::@10 atan2_16::@19
-  [120] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
-  [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
-  [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
+  [136] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
+  [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
+  [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
   to:atan2_16::@21
 atan2_16::@21: scope:[atan2_16]  from atan2_16::@12
-  [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
+  [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
   to:atan2_16::@7
 atan2_16::@7: scope:[atan2_16]  from atan2_16::@12 atan2_16::@21
-  [124] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
-  [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
+  [140] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
+  [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
   to:atan2_16::@9
 atan2_16::@9: scope:[atan2_16]  from atan2_16::@7
-  [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
+  [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
   to:atan2_16::@8
 atan2_16::@8: scope:[atan2_16]  from atan2_16::@7 atan2_16::@9
-  [127] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
+  [143] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
   to:atan2_16::@return
 atan2_16::@return: scope:[atan2_16]  from atan2_16::@8
-  [128] return 
+  [144] return 
   to:@return
 atan2_16::@11: scope:[atan2_16]  from atan2_16::@10
-  [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2
-  [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
-  [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3
+  [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2
+  [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
+  [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3
   to:atan2_16::@13
 atan2_16::@13: scope:[atan2_16]  from atan2_16::@11 atan2_16::@14
-  [132] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 )
-  [132] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 )
-  [132] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
-  [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
+  [148] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 )
+  [148] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 )
+  [148] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
+  [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
   to:atan2_16::@15
 atan2_16::@15: scope:[atan2_16]  from atan2_16::@13
-  [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
+  [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
   to:atan2_16::@16
 atan2_16::@16: scope:[atan2_16]  from atan2_16::@15
-  [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
-  [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1
+  [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
+  [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1
   to:atan2_16::@17
 atan2_16::@17: scope:[atan2_16]  from atan2_16::@15 atan2_16::@16
-  [137] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 )
-  [137] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 )
-  [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
+  [153] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 )
+  [153] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 )
+  [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
   to:atan2_16::@20
 atan2_16::@20: scope:[atan2_16]  from atan2_16::@17
-  [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
-  [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
-  [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
-  [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
+  [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
+  [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
+  [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
+  [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
   to:atan2_16::@19
 atan2_16::@19: scope:[atan2_16]  from atan2_16::@18 atan2_16::@20
-  [143] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
-  [143] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
-  [143] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
-  [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
-  [145] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12
+  [159] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
+  [159] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
+  [159] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
+  [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
+  [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12
   to:atan2_16::@10
 atan2_16::@18: scope:[atan2_16]  from atan2_16::@17
-  [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
-  [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
-  [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
-  [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
+  [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
+  [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
+  [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
+  [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
   to:atan2_16::@19
 atan2_16::@14: scope:[atan2_16]  from atan2_16::@13
-  [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
-  [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
-  [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2
+  [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
+  [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
+  [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2
   to:atan2_16::@13
 atan2_16::@4: scope:[atan2_16]  from atan2_16::@3
-  [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0
+  [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0
   to:atan2_16::@6
 atan2_16::@1: scope:[atan2_16]  from atan2_16
-  [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0
+  [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0
   to:atan2_16::@3
 init_dist_screen: scope:[init_dist_screen]  from main
-  [155] phi()
-  [156] call init_squares 
+  [171] phi()
+  [172] call init_squares 
+  to:init_dist_screen::@10
+init_dist_screen::@10: scope:[init_dist_screen]  from init_dist_screen
+  [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18
   to:init_dist_screen::@1
-init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen init_dist_screen::@9
-  [157] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 )
-  [157] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0 )
-  [157] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 )
-  [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
-  [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
+init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen::@10 init_dist_screen::@9
+  [174] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#0 )
+  [174] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen#0 )
+  [174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen::@10/(byte) 0 )
+  [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
+  [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
   to:init_dist_screen::@3
 init_dist_screen::@3: scope:[init_dist_screen]  from init_dist_screen::@1
-  [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0
+  [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0
   to:init_dist_screen::@4
 init_dist_screen::@4: scope:[init_dist_screen]  from init_dist_screen::@2 init_dist_screen::@3
-  [161] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 )
-  [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
-  [163] call sqr 
-  [164] (word) sqr::return#2 ← (word) sqr::return#0
-  to:init_dist_screen::@10
-init_dist_screen::@10: scope:[init_dist_screen]  from init_dist_screen::@4
-  [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
+  [178] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 )
+  [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
+  [180] call sqr 
+  [181] (word) sqr::return#2 ← (word) sqr::return#0
+  to:init_dist_screen::@11
+init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@4
+  [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
   to:init_dist_screen::@5
-init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@10 init_dist_screen::@12
-  [166] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 )
-  [166] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 )
-  [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
-  [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
+init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@11 init_dist_screen::@13
+  [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 )
+  [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 )
+  [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
+  [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
   to:init_dist_screen::@7
 init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
-  [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0
+  [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0
   to:init_dist_screen::@8
 init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6 init_dist_screen::@7
-  [170] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 )
-  [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
-  [172] call sqr 
-  [173] (word) sqr::return#3 ← (word) sqr::return#0
-  to:init_dist_screen::@11
-init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@8
-  [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
-  [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
-  [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
-  [177] call sqrt 
-  [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0
+  [187] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 )
+  [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
+  [189] call sqr 
+  [190] (word) sqr::return#3 ← (word) sqr::return#0
   to:init_dist_screen::@12
-init_dist_screen::@12: scope:[init_dist_screen]  from init_dist_screen::@11
-  [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
-  [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
-  [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
-  [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
-  [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
-  [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
-  [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
-  [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5
+init_dist_screen::@12: scope:[init_dist_screen]  from init_dist_screen::@8
+  [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
+  [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
+  [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
+  [194] call sqrt 
+  [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0
+  to:init_dist_screen::@13
+init_dist_screen::@13: scope:[init_dist_screen]  from init_dist_screen::@12
+  [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
+  [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
+  [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
+  [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
+  [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
+  [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
+  [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
+  [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5
   to:init_dist_screen::@9
-init_dist_screen::@9: scope:[init_dist_screen]  from init_dist_screen::@12
-  [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28
-  [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28
-  [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
-  [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1
+init_dist_screen::@9: scope:[init_dist_screen]  from init_dist_screen::@13
+  [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28
+  [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28
+  [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
+  [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1
   to:init_dist_screen::@return
 init_dist_screen::@return: scope:[init_dist_screen]  from init_dist_screen::@9
-  [191] return 
+  [208] return 
   to:@return
 init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
-  [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27
+  [209] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27
   to:init_dist_screen::@8
 init_dist_screen::@2: scope:[init_dist_screen]  from init_dist_screen::@1
-  [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
+  [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
   to:init_dist_screen::@4
-sqrt: scope:[sqrt]  from init_dist_screen::@11
-  [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0
-  [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
-  [196] call bsearch16u 
-  [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
+sqrt: scope:[sqrt]  from init_dist_screen::@12
+  [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0
+  [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
+  [213] call bsearch16u 
+  [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
   to:sqrt::@1
 sqrt::@1: scope:[sqrt]  from sqrt
-  [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
-  [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
-  [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
-  [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
+  [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
+  [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
+  [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
+  [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
   to:sqrt::@return
 sqrt::@return: scope:[sqrt]  from sqrt::@1
-  [202] return 
+  [219] return 
   to:@return
 bsearch16u: scope:[bsearch16u]  from sqrt
-  [203] phi()
+  [220] phi()
   to:bsearch16u::@3
 bsearch16u::@3: scope:[bsearch16u]  from bsearch16u bsearch16u::@7
-  [204] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
-  [204] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
-  [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
+  [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
+  [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
+  [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
   to:bsearch16u::@5
 bsearch16u::@5: scope:[bsearch16u]  from bsearch16u::@3
-  [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
+  [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
   to:bsearch16u::@1
 bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@5
-  [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
+  [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
   to:bsearch16u::@2
 bsearch16u::@2: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@5
-  [208] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
+  [225] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
   to:bsearch16u::@return
 bsearch16u::@return: scope:[bsearch16u]  from bsearch16u::@2 bsearch16u::@8
-  [209] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
-  [210] return 
+  [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
+  [227] return 
   to:@return
 bsearch16u::@4: scope:[bsearch16u]  from bsearch16u::@3
-  [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
-  [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
-  [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
-  [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
-  [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
+  [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
+  [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
+  [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
+  [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
+  [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
   to:bsearch16u::@8
 bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@4
-  [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
+  [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
   to:bsearch16u::@return
 bsearch16u::@6: scope:[bsearch16u]  from bsearch16u::@4
-  [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
+  [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
   to:bsearch16u::@9
 bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@6
-  [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
-  [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
+  [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
+  [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
   to:bsearch16u::@7
 bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@6 bsearch16u::@9
-  [220] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
-  [220] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
-  [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
+  [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
+  [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
+  [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
   to:bsearch16u::@3
 sqr: scope:[sqr]  from init_dist_screen::@4 init_dist_screen::@8
-  [222] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
-  [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
-  [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
+  [239] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
+  [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
+  [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
   to:sqr::@return
 sqr::@return: scope:[sqr]  from sqr
-  [225] return 
+  [242] return 
   to:@return
 init_squares: scope:[init_squares]  from init_dist_screen
-  [226] phi()
-  [227] call malloc 
+  [243] phi()
+  [244] call malloc 
   to:init_squares::@2
 init_squares::@2: scope:[init_squares]  from init_squares
-  [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
-  [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1
+  [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
+  [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1
   to:init_squares::@1
 init_squares::@1: scope:[init_squares]  from init_squares::@1 init_squares::@2
-  [230] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 )
-  [230] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 )
-  [230] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 )
-  [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
-  [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
-  [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
-  [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
-  [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
-  [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
-  [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1
+  [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 )
+  [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 )
+  [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 )
+  [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
+  [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
+  [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
+  [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
+  [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
+  [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
+  [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1
   to:init_squares::@return
 init_squares::@return: scope:[init_squares]  from init_squares::@1
-  [238] return 
+  [255] return 
   to:@return
 
+null depth in calling loop Loop head: init_buckets::@4 tails: init_buckets::@8 blocks: init_buckets::@8 init_buckets::@4  in scope malloc
 
 VARIABLE REGISTER WEIGHTS
 (byte*) BORDERCOL
-(word*[NUM_BUCKETS#0]) BUCKETS
-(byte[NUM_BUCKETS#0]) BUCKET_IDX
-(byte[NUM_BUCKETS#0]) BUCKET_SIZES
+(word*[]) BUCKETS
+(void*) BUCKETS#0 0.02531645569620253
+(byte[]) BUCKET_IDX
+(void*) BUCKET_IDX#0 0.0425531914893617
+(byte[]) BUCKET_SIZES
+(void*) BUCKET_SIZES#0 0.024691358024691357
 (byte*) COLS
 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
 (byte) CORDIC_ITERATIONS_16
@@ -3682,11 +3862,13 @@ VARIABLE REGISTER WEIGHTS
 (byte) NUM_BUCKETS
 (byte) NUM_SQUARES
 (byte*) RASTER
-(byte[$3e8]) SCREEN_ANGLE
-(byte[$3e8]) SCREEN_DIST
+(byte[]) SCREEN_ANGLE
+(void*) SCREEN_ANGLE#0 0.045454545454545456
+(byte[]) SCREEN_DIST
+(void*) SCREEN_DIST#0 0.125
 (byte*) SCREEN_FILL
 (word*) SQUARES
-(void*) SQUARES#1 0.03278688524590164
+(void*) SQUARES#1 0.03225806451612903
 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
 (signed word~) atan2_16::$2 4.0
 (byte~) atan2_16::$23 2002.0
@@ -3768,8 +3950,8 @@ VARIABLE REGISTER WEIGHTS
 (word*) bsearch16u::return#3 4.0
 (word*~) bsearch16u::return#6 4.0
 (byte*) heap_head
-(byte*) heap_head#1 0.17105263157894737
-(byte*) heap_head#13 13.0
+(byte*) heap_head#1 0.2446808510638298
+(byte*) heap_head#18 23.0
 (void()) init_angle_screen((byte*) init_angle_screen::screen)
 (word~) init_angle_screen::$10 202.0
 (byte~) init_angle_screen::$12 202.0
@@ -3783,12 +3965,15 @@ VARIABLE REGISTER WEIGHTS
 (word) init_angle_screen::angle_w
 (word) init_angle_screen::angle_w#0 202.0
 (byte*) init_angle_screen::screen
+(byte*) init_angle_screen::screen#0 3.0
 (byte*) init_angle_screen::screen_bottomline
+(byte*) init_angle_screen::screen_bottomline#0 4.0
 (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333
-(byte*) init_angle_screen::screen_bottomline#5 8.959999999999999
+(byte*) init_angle_screen::screen_bottomline#5 9.040000000000001
 (byte*) init_angle_screen::screen_topline
+(byte*) init_angle_screen::screen_topline#0 2.0
 (byte*) init_angle_screen::screen_topline#1 5.5
-(byte*) init_angle_screen::screen_topline#5 9.333333333333334
+(byte*) init_angle_screen::screen_topline#5 9.416666666666666
 (byte) init_angle_screen::x
 (byte) init_angle_screen::x#1 101.0
 (byte) init_angle_screen::x#2 25.25
@@ -3817,8 +4002,10 @@ VARIABLE REGISTER WEIGHTS
 (byte*) init_buckets::dist
 (byte*) init_buckets::dist#1 7.333333333333333
 (byte*) init_buckets::dist#3 7.333333333333333
-(byte*) init_buckets::dist#4 22.0
-(byte*) init_buckets::dist#5 4.4
+(byte*) init_buckets::dist#4 23.0
+(byte*) init_buckets::dist#5 4.6000000000000005
+(byte*~) init_buckets::dist#6 4.0
+(byte*~) init_buckets::dist#8 4.0
 (byte) init_buckets::distance
 (byte) init_buckets::distance#0 5.5
 (byte) init_buckets::i
@@ -3837,6 +4024,7 @@ VARIABLE REGISTER WEIGHTS
 (word) init_buckets::i4#1 16.5
 (word) init_buckets::i4#2 2.0
 (byte*) init_buckets::screen
+(byte*) init_buckets::screen#0 0.42500000000000004
 (void()) init_dist_screen((byte*) init_dist_screen::screen)
 (byte~) init_dist_screen::$13 202.0
 (byte~) init_dist_screen::$15 202.0
@@ -3847,12 +4035,14 @@ VARIABLE REGISTER WEIGHTS
 (word) init_dist_screen::ds
 (word) init_dist_screen::ds#0 202.0
 (byte*) init_dist_screen::screen
+(byte*) init_dist_screen::screen#0 1.5
 (byte*) init_dist_screen::screen_bottomline
+(byte*) init_dist_screen::screen_bottomline#0 4.0
 (byte*) init_dist_screen::screen_bottomline#1 7.333333333333333
-(byte*) init_dist_screen::screen_bottomline#10 6.787878787878788
+(byte*) init_dist_screen::screen_bottomline#10 6.848484848484849
 (byte*) init_dist_screen::screen_topline
 (byte*) init_dist_screen::screen_topline#1 5.5
-(byte*) init_dist_screen::screen_topline#10 7.0
+(byte*) init_dist_screen::screen_topline#10 7.0625
 (byte) init_dist_screen::x
 (byte) init_dist_screen::x#1 101.0
 (byte) init_dist_screen::x#2 26.578947368421055
@@ -3920,11 +4110,11 @@ VARIABLE REGISTER WEIGHTS
 (word) main::offset#0 67.33333333333333
 (void*()) malloc((word) malloc::size)
 (byte*) malloc::mem
-(byte*) malloc::mem#0 0.8
+(byte*) malloc::mem#0 0.4
 (void*) malloc::return
 (word) malloc::size
-(word) malloc::size#1 22.0
-(word) malloc::size#2 13.0
+(word) malloc::size#6 22.0
+(word) malloc::size#7 13.0
 (word()) sqr((byte) sqr::val)
 (byte~) sqr::$0 4.0
 (word) sqr::return
@@ -3954,17 +4144,17 @@ Initial phi equivalence classes
 [ main::min_offset#5 main::min_offset#7 ]
 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ]
 [ init_buckets::i#2 init_buckets::i#1 ]
-[ init_buckets::dist#4 init_buckets::dist#1 ]
+[ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
 [ init_buckets::i1#2 init_buckets::i1#1 ]
 [ init_buckets::i2#2 init_buckets::i2#1 ]
 [ init_buckets::i3#2 init_buckets::i3#1 ]
-[ init_buckets::dist#5 init_buckets::dist#3 ]
+[ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
 [ init_buckets::i4#2 init_buckets::i4#1 ]
-[ heap_head#13 heap_head#1 ]
-[ malloc::size#2 malloc::size#1 ]
+[ heap_head#18 heap_head#1 ]
+[ malloc::size#7 malloc::size#6 ]
 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
-[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ]
-[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ]
+[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
+[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
@@ -3976,8 +4166,8 @@ Initial phi equivalence classes
 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
-[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
+[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
+[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
@@ -3988,6 +4178,13 @@ Initial phi equivalence classes
 [ init_squares::sqr#2 init_squares::sqr#1 ]
 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
 [ init_squares::i#2 init_squares::i#1 ]
+Added variable SCREEN_DIST#0 to zero page equivalence class [ SCREEN_DIST#0 ]
+Added variable SCREEN_ANGLE#0 to zero page equivalence class [ SCREEN_ANGLE#0 ]
+Added variable BUCKET_SIZES#0 to zero page equivalence class [ BUCKET_SIZES#0 ]
+Added variable BUCKETS#0 to zero page equivalence class [ BUCKETS#0 ]
+Added variable BUCKET_IDX#0 to zero page equivalence class [ BUCKET_IDX#0 ]
+Added variable init_angle_screen::screen#0 to zero page equivalence class [ init_angle_screen::screen#0 ]
+Added variable init_buckets::screen#0 to zero page equivalence class [ init_buckets::screen#0 ]
 Added variable main::$21 to zero page equivalence class [ main::$21 ]
 Added variable main::bucket#0 to zero page equivalence class [ main::bucket#0 ]
 Added variable main::bucket_size#0 to zero page equivalence class [ main::bucket_size#0 ]
@@ -4055,17 +4252,17 @@ Complete equivalence classes
 [ main::min_offset#5 main::min_offset#7 ]
 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ]
 [ init_buckets::i#2 init_buckets::i#1 ]
-[ init_buckets::dist#4 init_buckets::dist#1 ]
+[ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
 [ init_buckets::i1#2 init_buckets::i1#1 ]
 [ init_buckets::i2#2 init_buckets::i2#1 ]
 [ init_buckets::i3#2 init_buckets::i3#1 ]
-[ init_buckets::dist#5 init_buckets::dist#3 ]
+[ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
 [ init_buckets::i4#2 init_buckets::i4#1 ]
-[ heap_head#13 heap_head#1 ]
-[ malloc::size#2 malloc::size#1 ]
+[ heap_head#18 heap_head#1 ]
+[ malloc::size#7 malloc::size#6 ]
 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
-[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ]
-[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ]
+[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
+[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
@@ -4077,8 +4274,8 @@ Complete equivalence classes
 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
-[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
+[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
+[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
@@ -4089,6 +4286,13 @@ Complete equivalence classes
 [ init_squares::sqr#2 init_squares::sqr#1 ]
 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
 [ init_squares::i#2 init_squares::i#1 ]
+[ SCREEN_DIST#0 ]
+[ SCREEN_ANGLE#0 ]
+[ BUCKET_SIZES#0 ]
+[ BUCKETS#0 ]
+[ BUCKET_IDX#0 ]
+[ init_angle_screen::screen#0 ]
+[ init_buckets::screen#0 ]
 [ main::$21 ]
 [ main::bucket#0 ]
 [ main::bucket_size#0 ]
@@ -4155,17 +4359,17 @@ Allocated zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ]
 Allocated zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ]
 Allocated zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ]
 Allocated zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ]
-Allocated zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#1 ]
+Allocated zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
 Allocated zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ]
 Allocated zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ]
 Allocated zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ]
-Allocated zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ]
+Allocated zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
 Allocated zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ]
-Allocated zp ZP_WORD:21 [ heap_head#13 heap_head#1 ]
-Allocated zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ]
+Allocated zp ZP_WORD:21 [ heap_head#18 heap_head#1 ]
+Allocated zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ]
 Allocated zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
-Allocated zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ]
-Allocated zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ]
+Allocated zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
+Allocated zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
 Allocated zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 Allocated zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
 Allocated zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
@@ -4177,8 +4381,8 @@ Allocated zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1
 Allocated zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
 Allocated zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
 Allocated zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-Allocated zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
-Allocated zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
+Allocated zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
+Allocated zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
 Allocated zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
 Allocated zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 Allocated zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
@@ -4189,66 +4393,73 @@ Allocated zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ]
 Allocated zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ]
 Allocated zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
 Allocated zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ]
-Allocated zp ZP_BYTE:64 [ main::$21 ]
-Allocated zp ZP_WORD:65 [ main::bucket#0 ]
-Allocated zp ZP_BYTE:67 [ main::bucket_size#0 ]
-Allocated zp ZP_BYTE:68 [ main::$22 ]
-Allocated zp ZP_WORD:69 [ main::fill#0 ]
-Allocated zp ZP_WORD:71 [ main::angle#0 ]
-Allocated zp ZP_WORD:73 [ main::fill1#0 ]
-Allocated zp ZP_WORD:75 [ init_buckets::$15 ]
-Allocated zp ZP_WORD:77 [ init_buckets::$5 ]
-Allocated zp ZP_WORD:79 [ init_buckets::$12 ]
-Allocated zp ZP_WORD:81 [ init_buckets::$16 ]
-Allocated zp ZP_BYTE:83 [ init_buckets::distance#0 ]
-Allocated zp ZP_WORD:84 [ init_buckets::$9 ]
-Allocated zp ZP_WORD:86 [ init_buckets::$13 ]
-Allocated zp ZP_WORD:88 [ init_buckets::$17 ]
-Allocated zp ZP_WORD:90 [ init_buckets::bucket#0 ]
-Allocated zp ZP_WORD:92 [ init_buckets::$10 ]
-Allocated zp ZP_BYTE:94 [ init_buckets::$14 ]
-Allocated zp ZP_WORD:95 [ malloc::mem#0 ]
-Allocated zp ZP_BYTE:97 [ init_angle_screen::$2 ]
-Allocated zp ZP_BYTE:98 [ init_angle_screen::$3 ]
-Allocated zp ZP_WORD:99 [ init_angle_screen::xw#0 ]
-Allocated zp ZP_BYTE:101 [ init_angle_screen::$6 ]
-Allocated zp ZP_WORD:102 [ init_angle_screen::yw#0 ]
-Allocated zp ZP_WORD:104 [ atan2_16::x#0 ]
-Allocated zp ZP_WORD:106 [ atan2_16::y#0 ]
-Allocated zp ZP_WORD:108 [ atan2_16::return#2 ]
-Allocated zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ]
-Allocated zp ZP_WORD:112 [ init_angle_screen::$10 ]
-Allocated zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ]
-Allocated zp ZP_BYTE:115 [ init_angle_screen::$12 ]
-Allocated zp ZP_BYTE:116 [ init_angle_screen::$13 ]
-Allocated zp ZP_BYTE:117 [ init_angle_screen::$14 ]
-Allocated zp ZP_BYTE:118 [ atan2_16::$24 ]
-Allocated zp ZP_BYTE:119 [ atan2_16::$23 ]
-Allocated zp ZP_BYTE:120 [ init_dist_screen::y2#0 ]
-Allocated zp ZP_WORD:121 [ sqr::return#2 ]
-Allocated zp ZP_WORD:123 [ init_dist_screen::yds#0 ]
-Allocated zp ZP_BYTE:125 [ init_dist_screen::x2#0 ]
-Allocated zp ZP_WORD:126 [ sqr::return#3 ]
-Allocated zp ZP_WORD:128 [ init_dist_screen::xds#0 ]
-Allocated zp ZP_WORD:130 [ init_dist_screen::ds#0 ]
-Allocated zp ZP_WORD:132 [ sqrt::val#0 ]
-Allocated zp ZP_BYTE:134 [ sqrt::return#2 ]
-Allocated zp ZP_BYTE:135 [ init_dist_screen::d#0 ]
-Allocated zp ZP_WORD:136 [ bsearch16u::key#0 ]
-Allocated zp ZP_WORD:138 [ bsearch16u::return#3 ]
-Allocated zp ZP_WORD:140 [ sqrt::found#0 ]
-Allocated zp ZP_WORD:142 [ sqrt::$3 ]
-Allocated zp ZP_WORD:144 [ sqrt::$1 ]
-Allocated zp ZP_BYTE:146 [ sqrt::return#0 ]
-Allocated zp ZP_BYTE:147 [ bsearch16u::$6 ]
-Allocated zp ZP_BYTE:148 [ bsearch16u::$16 ]
-Allocated zp ZP_WORD:149 [ bsearch16u::pivot#0 ]
-Allocated zp ZP_WORD:151 [ bsearch16u::result#0 ]
-Allocated zp ZP_BYTE:153 [ sqr::$0 ]
-Allocated zp ZP_WORD:154 [ sqr::return#0 ]
-Allocated zp ZP_WORD:156 [ SQUARES#1 ]
-Allocated zp ZP_BYTE:158 [ init_squares::$3 ]
-Allocated zp ZP_BYTE:159 [ init_squares::$4 ]
+Allocated zp ZP_WORD:64 [ SCREEN_DIST#0 ]
+Allocated zp ZP_WORD:66 [ SCREEN_ANGLE#0 ]
+Allocated zp ZP_WORD:68 [ BUCKET_SIZES#0 ]
+Allocated zp ZP_WORD:70 [ BUCKETS#0 ]
+Allocated zp ZP_WORD:72 [ BUCKET_IDX#0 ]
+Allocated zp ZP_WORD:74 [ init_angle_screen::screen#0 ]
+Allocated zp ZP_WORD:76 [ init_buckets::screen#0 ]
+Allocated zp ZP_BYTE:78 [ main::$21 ]
+Allocated zp ZP_WORD:79 [ main::bucket#0 ]
+Allocated zp ZP_BYTE:81 [ main::bucket_size#0 ]
+Allocated zp ZP_BYTE:82 [ main::$22 ]
+Allocated zp ZP_WORD:83 [ main::fill#0 ]
+Allocated zp ZP_WORD:85 [ main::angle#0 ]
+Allocated zp ZP_WORD:87 [ main::fill1#0 ]
+Allocated zp ZP_WORD:89 [ init_buckets::$15 ]
+Allocated zp ZP_WORD:91 [ init_buckets::$5 ]
+Allocated zp ZP_WORD:93 [ init_buckets::$12 ]
+Allocated zp ZP_WORD:95 [ init_buckets::$16 ]
+Allocated zp ZP_BYTE:97 [ init_buckets::distance#0 ]
+Allocated zp ZP_WORD:98 [ init_buckets::$9 ]
+Allocated zp ZP_WORD:100 [ init_buckets::$13 ]
+Allocated zp ZP_WORD:102 [ init_buckets::$17 ]
+Allocated zp ZP_WORD:104 [ init_buckets::bucket#0 ]
+Allocated zp ZP_WORD:106 [ init_buckets::$10 ]
+Allocated zp ZP_BYTE:108 [ init_buckets::$14 ]
+Allocated zp ZP_WORD:109 [ malloc::mem#0 ]
+Allocated zp ZP_BYTE:111 [ init_angle_screen::$2 ]
+Allocated zp ZP_BYTE:112 [ init_angle_screen::$3 ]
+Allocated zp ZP_WORD:113 [ init_angle_screen::xw#0 ]
+Allocated zp ZP_BYTE:115 [ init_angle_screen::$6 ]
+Allocated zp ZP_WORD:116 [ init_angle_screen::yw#0 ]
+Allocated zp ZP_WORD:118 [ atan2_16::x#0 ]
+Allocated zp ZP_WORD:120 [ atan2_16::y#0 ]
+Allocated zp ZP_WORD:122 [ atan2_16::return#2 ]
+Allocated zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ]
+Allocated zp ZP_WORD:126 [ init_angle_screen::$10 ]
+Allocated zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ]
+Allocated zp ZP_BYTE:129 [ init_angle_screen::$12 ]
+Allocated zp ZP_BYTE:130 [ init_angle_screen::$13 ]
+Allocated zp ZP_BYTE:131 [ init_angle_screen::$14 ]
+Allocated zp ZP_BYTE:132 [ atan2_16::$24 ]
+Allocated zp ZP_BYTE:133 [ atan2_16::$23 ]
+Allocated zp ZP_BYTE:134 [ init_dist_screen::y2#0 ]
+Allocated zp ZP_WORD:135 [ sqr::return#2 ]
+Allocated zp ZP_WORD:137 [ init_dist_screen::yds#0 ]
+Allocated zp ZP_BYTE:139 [ init_dist_screen::x2#0 ]
+Allocated zp ZP_WORD:140 [ sqr::return#3 ]
+Allocated zp ZP_WORD:142 [ init_dist_screen::xds#0 ]
+Allocated zp ZP_WORD:144 [ init_dist_screen::ds#0 ]
+Allocated zp ZP_WORD:146 [ sqrt::val#0 ]
+Allocated zp ZP_BYTE:148 [ sqrt::return#2 ]
+Allocated zp ZP_BYTE:149 [ init_dist_screen::d#0 ]
+Allocated zp ZP_WORD:150 [ bsearch16u::key#0 ]
+Allocated zp ZP_WORD:152 [ bsearch16u::return#3 ]
+Allocated zp ZP_WORD:154 [ sqrt::found#0 ]
+Allocated zp ZP_WORD:156 [ sqrt::$3 ]
+Allocated zp ZP_WORD:158 [ sqrt::$1 ]
+Allocated zp ZP_BYTE:160 [ sqrt::return#0 ]
+Allocated zp ZP_BYTE:161 [ bsearch16u::$6 ]
+Allocated zp ZP_BYTE:162 [ bsearch16u::$16 ]
+Allocated zp ZP_WORD:163 [ bsearch16u::pivot#0 ]
+Allocated zp ZP_WORD:165 [ bsearch16u::result#0 ]
+Allocated zp ZP_BYTE:167 [ sqr::$0 ]
+Allocated zp ZP_WORD:168 [ sqr::return#0 ]
+Allocated zp ZP_WORD:170 [ SQUARES#1 ]
+Allocated zp ZP_BYTE:172 [ init_squares::$3 ]
+Allocated zp ZP_BYTE:173 [ init_squares::$4 ]
 
 INITIAL ASM
   // File Comments
@@ -4260,6 +4471,8 @@ INITIAL ASM
 .pc = $80d "Program"
   // Global Constants & labels
   .const SIZEOF_WORD = 2
+  .const SIZEOF_BYTE = 1
+  .const SIZEOF_POINTER = 2
   .label RASTER = $d012
   .label BORDERCOL = $d020
   // Color Ram
@@ -4268,7 +4481,6 @@ INITIAL ASM
   .label HEAP_TOP = $a000
   // The number of iterations performed during 16-bit CORDIC atan2 calculation
   .const CORDIC_ITERATIONS_16 = $f
-  // = malloc(1000);
   // Screen containing angle to center
   .label SCREEN_FILL = $400
   // Char to fill with
@@ -4277,7 +4489,19 @@ INITIAL ASM
   .const NUM_BUCKETS = $30
   .const NUM_SQUARES = $30
   .label heap_head = $15
-  .label SQUARES = $9c
+  .label SQUARES = $aa
+  // Screen containing distance to center
+  .label SCREEN_DIST = $40
+  // Screen containing angle to center
+  .label SCREEN_ANGLE = $42
+  // Array containing the bucket size for each of the distance buckets
+  .label BUCKET_SIZES = $44
+  // Buckets containing screen indices for each distance from the center.
+  // BUCKETS[dist] is an array of words containing screen indices.
+  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
+  .label BUCKETS = $46
+  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
+  .label BUCKET_IDX = $48
   // @begin
 bbegin:
   // [1] phi from @begin to @1 [phi:@begin->@1]
@@ -4285,56 +4509,169 @@ b1_from_bbegin:
   jmp b1
   // @1
 b1:
-  // [2] call main 
+  // [2] call malloc 
+  // [93] phi from @1 to malloc [phi:@1->malloc]
+malloc_from_b1:
+  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 
+  lda #<HEAP_TOP
+  sta heap_head
+  lda #>HEAP_TOP
+  sta heap_head+1
+  jsr malloc
+  jmp b4
+  // @4
+b4:
+  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta SCREEN_DIST
+  lda malloc.mem+1
+  sta SCREEN_DIST+1
+  // [4] call malloc 
+  // [93] phi from @4 to malloc [phi:@4->malloc]
+malloc_from_b4:
+  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b5
+  // @5
+b5:
+  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta SCREEN_ANGLE
+  lda malloc.mem+1
+  sta SCREEN_ANGLE+1
+  // [6] phi from @5 to @2 [phi:@5->@2]
+b2_from_b5:
+  jmp b2
+  // @2
+b2:
+  // [7] call malloc 
+  // [93] phi from @2 to malloc [phi:@2->malloc]
+malloc_from_b2:
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b6
+  // @6
+b6:
+  // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKET_SIZES
+  lda malloc.mem+1
+  sta BUCKET_SIZES+1
+  // [9] call malloc 
+  // [93] phi from @6 to malloc [phi:@6->malloc]
+malloc_from_b6:
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_POINTER
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b7
+  // @7
+b7:
+  // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKETS
+  lda malloc.mem+1
+  sta BUCKETS+1
+  // [11] call malloc 
+  // [93] phi from @7 to malloc [phi:@7->malloc]
+malloc_from_b7:
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b8
+  // @8
+b8:
+  // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKET_IDX
+  lda malloc.mem+1
+  sta BUCKET_IDX+1
+  // [13] phi from @8 to @3 [phi:@8->@3]
+b3_from_b8:
+  jmp b3
+  // @3
+b3:
+  // [14] call main 
   jsr main
-  // [3] phi from @1 to @end [phi:@1->@end]
-bend_from_b1:
+  // [15] phi from @3 to @end [phi:@3->@end]
+bend_from_b3:
   jmp bend
   // @end
 bend:
   // main
 main: {
-    .label _21 = $40
-    .label _22 = $44
-    .label bucket = $41
-    .label bucket_size = $43
+    .label _21 = $4e
+    .label _22 = $52
+    .label bucket = $4f
+    .label bucket_size = $51
     .label bucket_idx = 2
     .label offset = 7
-    .label fill = $45
+    .label fill = $53
     .label i = 3
-    .label angle = $47
+    .label angle = $55
     .label min_angle = 4
-    .label fill1 = $49
+    .label fill1 = $57
     .label min_offset = 7
     .label min_offset_5 = 5
     .label min_offset_7 = 5
     // asm { sei  }
     sei
-    // [5] call init_dist_screen 
-    // [155] phi from main to init_dist_screen [phi:main->init_dist_screen]
+    // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
+    lda SCREEN_DIST
+    sta init_dist_screen.screen
+    lda SCREEN_DIST+1
+    sta init_dist_screen.screen+1
+    // [18] call init_dist_screen 
+    // [171] phi from main to init_dist_screen [phi:main->init_dist_screen]
   init_dist_screen_from_main:
     jsr init_dist_screen
-    // [6] phi from main to main::@14 [phi:main->main::@14]
-  b14_from_main:
     jmp b14
     // main::@14
   b14:
-    // [7] call init_angle_screen 
-    // [82] phi from main::@14 to init_angle_screen [phi:main::@14->init_angle_screen]
-  init_angle_screen_from_b14:
+    // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
+    lda SCREEN_ANGLE
+    sta init_angle_screen.screen
+    lda SCREEN_ANGLE+1
+    sta init_angle_screen.screen+1
+    // [20] call init_angle_screen 
     jsr init_angle_screen
-    // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15]
-  b15_from_b14:
     jmp b15
     // main::@15
   b15:
-    // [9] call init_buckets 
-    // [40] phi from main::@15 to init_buckets [phi:main::@15->init_buckets]
+    // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
+    lda SCREEN_DIST
+    sta init_buckets.screen
+    lda SCREEN_DIST+1
+    sta init_buckets.screen+1
+    // [22] call init_buckets 
+    // [53] phi from main::@15 to init_buckets [phi:main::@15->init_buckets]
   init_buckets_from_b15:
     jsr init_buckets
-    // [10] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
+    // [23] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
   b1_from_b15:
-    // [10] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 
+    // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 
     lda #0
     sta bucket_idx
     jmp b1
@@ -4343,61 +4680,62 @@ main: {
     jmp b2
     // main::@2
   b2:
-    // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
+    // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
     lda #$ff
     cmp RASTER
     bne b2
     jmp b3
     // main::@3
   b3:
-    // [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
+    // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
     inc BORDERCOL
-    // [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda bucket_idx
     asl
     sta _21
-    // [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptc1_derefidx_vbuz2 
+    // [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuz3 
     ldy _21
-    lda BUCKETS,y
+    lda (BUCKETS),y
     sta bucket
-    lda BUCKETS+1,y
+    iny
+    lda (BUCKETS),y
     sta bucket+1
-    // [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 
+    // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 
     ldy bucket_idx
-    lda BUCKET_SIZES,y
+    lda (BUCKET_SIZES),y
     sta bucket_size
-    // [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
+    // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
     lda bucket_size
     cmp #0
     beq b4
-    // [17] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
+    // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
   b5_from_b3:
-    // [17] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 
+    // [30] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 
     lda #<$ffff
     sta min_offset_5
     lda #>$ffff
     sta min_offset_5+1
-    // [17] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 
+    // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 
     lda #$ff
     sta min_angle
-    // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuz1=vbuc1 
+    // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuz1=vbuc1 
     lda #0
     sta i
     jmp b5
     // main::@5
   b5:
-    // [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda i
     asl
     sta _22
-    // [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuz3 
+    // [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuz3 
     ldy _22
     lda (bucket),y
     sta offset
     iny
     lda (bucket),y
     sta offset+1
-    // [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
+    // [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
     lda offset
     clc
     adc #<SCREEN_FILL
@@ -4405,7 +4743,7 @@ main: {
     lda offset+1
     adc #>SCREEN_FILL
     sta fill+1
-    // [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
+    // [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
     lda #FILL_CHAR
     ldy #0
     cmp (fill),y
@@ -4413,15 +4751,15 @@ main: {
     jmp b7
     // main::@7
   b7:
-    // [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
-    lda offset
+    // [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 
+    lda SCREEN_ANGLE
     clc
-    adc #<SCREEN_ANGLE
+    adc offset
     sta angle
-    lda offset+1
-    adc #>SCREEN_ANGLE
+    lda SCREEN_ANGLE+1
+    adc offset+1
     sta angle+1
-    // [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
+    // [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
     ldy #0
     lda (angle),y
     cmp min_angle
@@ -4431,29 +4769,29 @@ main: {
     jmp b8
     // main::@8
   b8:
-    // [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
+    // [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
     ldy #0
     lda (angle),y
     sta min_angle
-    // [25] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6]
+    // [38] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6]
   b6_from_b17:
   b6_from_b18:
   b6_from_b8:
-    // [25] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy 
-    // [25] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy 
+    // [38] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy 
+    // [38] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy 
     jmp b6
     // main::@6
   b6:
-    // [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
+    // [39] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
     inc i
-    // [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuz1_lt_vbuz2_then_la1 
+    // [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuz1_lt_vbuz2_then_la1 
     lda i
     cmp bucket_size
     bcc b16
     jmp b9
     // main::@9
   b9:
-    // [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
+    // [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
     lda min_offset
     cmp #<$ffff
     bne !+
@@ -4464,7 +4802,7 @@ main: {
     jmp b10
     // main::@10
   b10:
-    // [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz2 
+    // [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz2 
     lda min_offset
     clc
     adc #<SCREEN_FILL
@@ -4472,58 +4810,58 @@ main: {
     lda min_offset+1
     adc #>SCREEN_FILL
     sta fill1+1
-    // [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
+    // [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
     lda #FILL_CHAR
     ldy #0
     sta (fill1),y
-    // [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
-    // [10] phi from main::@10 to main::@1 [phi:main::@10->main::@1]
+    // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1]
   b1_from_b10:
     jmp b1
     // main::@4
   b4:
-    // [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
+    // [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
     inc bucket_idx
-    // [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 
+    // [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 
     lda #NUM_BUCKETS
     cmp bucket_idx
     bne b11
     jmp b12
     // main::@12
   b12:
-    // [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
     jmp b13
     // main::@13
   b13:
-    // [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
+    // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
     inc COLS+$3e7
     jmp b13
     // main::@11
   b11:
-    // [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
-    // [10] phi from main::@11 to main::@1 [phi:main::@11->main::@1]
+    // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1]
   b1_from_b11:
-    // [10] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy 
+    // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy 
     jmp b1
     // main::@16
   b16:
-    // [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
+    // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
     lda min_offset
     sta min_offset_7
     lda min_offset+1
     sta min_offset_7+1
-    // [17] phi from main::@16 to main::@5 [phi:main::@16->main::@5]
+    // [30] phi from main::@16 to main::@5 [phi:main::@16->main::@5]
   b5_from_b16:
-    // [17] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy 
-    // [17] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy 
-    // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy 
+    // [30] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy 
+    // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy 
+    // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy 
     jmp b5
     // main::@17
   b17:
-    // [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
+    // [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
     lda min_offset_5
     sta min_offset
     lda min_offset_5+1
@@ -4531,7 +4869,7 @@ main: {
     jmp b6_from_b17
     // main::@18
   b18:
-    // [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
+    // [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
     lda min_offset_5
     sta min_offset
     lda min_offset_5+1
@@ -4540,115 +4878,125 @@ main: {
 }
   // init_buckets
 // Initialize buckets containing indices of chars on the screen with specific distances to the center.
+// init_buckets(byte* zeropage($4c) screen)
 init_buckets: {
-    .label _5 = $4d
-    .label _9 = $54
-    .label _10 = $5c
-    .label _12 = $4f
-    .label _13 = $56
-    .label _14 = $5e
+    .label _5 = $5b
+    .label _9 = $62
+    .label _10 = $6a
+    .label _12 = $5d
+    .label _13 = $64
+    .label _14 = $6c
+    .label screen = $4c
     .label i = 9
     .label dist = $a
     .label i1 = $c
     .label i2 = $e
     .label i3 = $10
-    .label distance = $53
-    .label bucket = $5a
+    .label distance = $61
+    .label bucket = $68
     .label dist_3 = $11
     .label i4 = $13
     .label dist_5 = $11
-    .label _15 = $4b
-    .label _16 = $51
-    .label _17 = $58
-    // [41] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
+    .label _15 = $59
+    .label _16 = $5f
+    .label _17 = $66
+    .label dist_8 = $11
+    // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
   b1_from_init_buckets:
-    // [41] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 
+    // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 
     lda #0
     sta i
     jmp b1
   // Init bucket sizes to 0
-    // [41] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
+    // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
   b1_from_b1:
-    // [41] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
+    // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
     jmp b1
     // init_buckets::@1
   b1:
-    // [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
+    // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
     lda #0
     ldy i
-    sta BUCKET_SIZES,y
-    // [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 
+    sta (BUCKET_SIZES),y
+    // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 
     inc i
-    // [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #NUM_BUCKETS-1+1
     cmp i
     bne b1_from_b1
-    // [45] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2]
-  b2_from_b1:
-    // [45] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 
+    jmp b2
+    // init_buckets::@2
+  b2:
+    // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
+    lda screen
+    sta dist
+    lda screen+1
+    sta dist+1
+    // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
+  b3_from_b2:
+    // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
     lda #<0
     sta i1
     lda #>0
     sta i1+1
-    // [45] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta dist
-    lda #>SCREEN_DIST
-    sta dist+1
-    jmp b2
-    // [45] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2]
-  b2_from_b2:
-    // [45] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy 
-    // [45] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy 
-    jmp b2
-    // init_buckets::@2
-  b2:
-    // [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 
+    // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
+    jmp b3
+    // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
+  b3_from_b3:
+    // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
+    // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy 
+    jmp b3
+    // init_buckets::@3
+  b3:
+    // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 
     ldy #0
     lda (dist),y
-    tax
-    inc BUCKET_SIZES,x
-    // [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
+    tay
+    lda (BUCKET_SIZES),y
+    clc
+    adc #1
+    sta (BUCKET_SIZES),y
+    // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
     inc dist
     bne !+
     inc dist+1
   !:
-    // [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
+    // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
     inc i1
     bne !+
     inc i1+1
   !:
-    // [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 
+    // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
     lda i1+1
     cmp #>$3e8
-    bne b2_from_b2
+    bne b3_from_b3
     lda i1
     cmp #<$3e8
-    bne b2_from_b2
-    // [50] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
-  b3_from_b2:
-    // [50] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
+    bne b3_from_b3
+    // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
+  b4_from_b3:
+    // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 
     lda #<0
     sta i2
     lda #>0
     sta i2+1
-    jmp b3
+    jmp b4
   // Allocate the buckets
-    // [50] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3]
-  b3_from_b6:
-    // [50] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy 
-    jmp b3
-    // init_buckets::@3
-  b3:
-    // [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 
-    lda i2
+    // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
+  b4_from_b8:
+    // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy 
+    jmp b4
+    // init_buckets::@4
+  b4:
+    // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 
+    lda BUCKET_SIZES
     clc
-    adc #<BUCKET_SIZES
+    adc i2
     sta _15
-    lda i2+1
-    adc #>BUCKET_SIZES
+    lda BUCKET_SIZES+1
+    adc i2+1
     sta _15+1
-    // [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 
+    // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 
     ldy #0
     lda _15
     asl
@@ -4656,172 +5004,179 @@ init_buckets: {
     lda #0
     rol
     sta malloc.size+1
-    // [53] call malloc 
-    // [78] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc]
-  malloc_from_b3:
-    // [78] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy 
-    // [78] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy 
+    // [67] call malloc 
+    // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
+  malloc_from_b4:
+    // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
+    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy 
     jsr malloc
-    jmp b6
-    // init_buckets::@6
-  b6:
-    // [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+    jmp b8
+    // init_buckets::@8
+  b8:
+    // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
     lda malloc.mem
     sta _5
     lda malloc.mem+1
     sta _5+1
-    // [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
+    // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
     lda i2
     asl
     sta _12
     lda i2+1
     rol
     sta _12+1
-    // [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz2 
-    lda _12
+    // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz3 
+    lda BUCKETS
     clc
-    adc #<BUCKETS
+    adc _12
     sta _16
-    lda _12+1
-    adc #>BUCKETS
+    lda BUCKETS+1
+    adc _12+1
     sta _16+1
-    // [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
+    // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
     ldy #0
     lda _5
     sta (_16),y
     iny
     lda _5+1
     sta (_16),y
-    // [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
+    // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
     inc i2
     bne !+
     inc i2+1
   !:
-    // [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
+    // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 
     lda i2+1
     cmp #>NUM_BUCKETS-1+1
-    bne b3_from_b6
+    bne b4_from_b8
     lda i2
     cmp #<NUM_BUCKETS-1+1
-    bne b3_from_b6
-    // [60] phi from init_buckets::@6 to init_buckets::@4 [phi:init_buckets::@6->init_buckets::@4]
-  b4_from_b6:
-    // [60] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuz1=vbuc1 
+    bne b4_from_b8
+    // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
+  b5_from_b8:
+    // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuz1=vbuc1 
     lda #0
     sta i3
-    jmp b4
+    jmp b5
   // Iterate all distances and fill the buckets with indices into the screens
-    // [60] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4]
-  b4_from_b4:
-    // [60] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy 
-    jmp b4
-    // init_buckets::@4
-  b4:
-    // [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
+    // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
+  b5_from_b5:
+    // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
+    jmp b5
+    // init_buckets::@5
+  b5:
+    // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
     lda #0
     ldy i3
-    sta BUCKET_IDX,y
-    // [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 
+    sta (BUCKET_IDX),y
+    // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 
     inc i3
-    // [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vbuz1_neq_vbuc1_then_la1 
+    // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuz1_neq_vbuc1_then_la1 
     lda #NUM_BUCKETS-1+1
     cmp i3
-    bne b4_from_b4
-    // [64] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5]
-  b5_from_b4:
-    // [64] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 
+    bne b5_from_b5
+    jmp b6
+    // init_buckets::@6
+  b6:
+    // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
+    lda screen
+    sta dist_8
+    lda screen+1
+    sta dist_8+1
+    // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
+  b7_from_b6:
+    // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 
     lda #<0
     sta i4
     lda #>0
     sta i4+1
-    // [64] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta dist_5
-    lda #>SCREEN_DIST
-    sta dist_5+1
-    jmp b5
-    // [64] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
-  b5_from_b5:
-    // [64] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
-    // [64] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy 
-    jmp b5
-    // init_buckets::@5
-  b5:
-    // [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
+    // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
+    jmp b7
+    // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
+  b7_from_b7:
+    // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
+    // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy 
+    jmp b7
+    // init_buckets::@7
+  b7:
+    // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
     ldy #0
     lda (dist_5),y
     sta distance
-    // [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
+    // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
     lda distance
     sta _9
     lda #0
     sta _9+1
-    // [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz2_rol_1 
+    // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz2_rol_1 
     lda _9
     asl
     sta _13
     lda _9+1
     rol
     sta _13+1
-    // [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz2 
-    lda _13
+    // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz3 
+    lda BUCKETS
     clc
-    adc #<BUCKETS
+    adc _13
     sta _17
-    lda _13+1
-    adc #>BUCKETS
+    lda BUCKETS+1
+    adc _13+1
     sta _17+1
-    // [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 
+    // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 
     ldy #0
     lda (_17),y
     sta bucket
     iny
     lda (_17),y
     sta bucket+1
-    // [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 
+    // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
     lda dist_5
     sec
-    sbc #<SCREEN_DIST
+    sbc screen
     sta _10
     lda dist_5+1
-    sbc #>SCREEN_DIST
+    sbc screen+1
     sta _10+1
-    // [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_rol_1 
+    // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 
     ldy distance
-    lda BUCKET_IDX,y
+    lda (BUCKET_IDX),y
     asl
     sta _14
-    // [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuz2=vwuz3 
+    // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuz2=vwuz3 
     ldy _14
     lda _10
     sta (bucket),y
     iny
     lda _10+1
     sta (bucket),y
-    // [73] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 
-    ldx distance
-    inc BUCKET_IDX,x
-    // [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
+    // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 
+    ldy distance
+    lda (BUCKET_IDX),y
+    clc
+    adc #1
+    sta (BUCKET_IDX),y
+    // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
     inc dist_3
     bne !+
     inc dist_3+1
   !:
-    // [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
+    // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
     inc i4
     bne !+
     inc i4+1
   !:
-    // [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 
+    // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 
     lda i4+1
     cmp #>$3e8
-    bne b5_from_b5
+    bne b7_from_b7
     lda i4
     cmp #<$3e8
-    bne b5_from_b5
+    bne b7_from_b7
     jmp breturn
     // init_buckets::@return
   breturn:
-    // [77] return 
+    // [92] return 
     rts
 }
   // malloc
@@ -4829,9 +5184,9 @@ init_buckets: {
 // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
 // malloc(word zeropage($17) size)
 malloc: {
-    .label mem = $5f
+    .label mem = $6d
     .label size = $17
-    // [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz3 
+    // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz3 
     lda heap_head
     sec
     sbc size
@@ -4839,7 +5194,7 @@ malloc: {
     lda heap_head+1
     sbc size+1
     sta mem+1
-    // [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
+    // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
     lda mem
     sta heap_head
     lda mem+1
@@ -4847,105 +5202,115 @@ malloc: {
     jmp breturn
     // malloc::@return
   breturn:
-    // [81] return 
+    // [96] return 
     rts
 }
   // init_angle_screen
 // Populates 1000 bytes (a screen) with values representing the angle to the center.
 // Utilizes symmetry around the center
+// init_angle_screen(byte* zeropage($4a) screen)
 init_angle_screen: {
-    .label _2 = $61
-    .label _3 = $62
-    .label _6 = $65
-    .label _10 = $70
-    .label _12 = $73
-    .label _13 = $74
-    .label _14 = $75
-    .label xw = $63
-    .label yw = $66
-    .label angle_w = $6e
-    .label ang_w = $72
-    .label x = $1e
-    .label xb = $1f
+    .label _2 = $6f
+    .label _3 = $70
+    .label _6 = $73
+    .label _10 = $7e
+    .label _12 = $81
+    .label _13 = $82
+    .label _14 = $83
+    .label screen = $4a
     .label screen_topline = $1c
     .label screen_bottomline = $1a
+    .label xw = $71
+    .label yw = $74
+    .label angle_w = $7c
+    .label ang_w = $80
+    .label x = $1e
+    .label xb = $1f
     .label y = $19
-    // [83] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
-  b1_from_init_angle_screen:
-    // [83] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 
-    lda #<SCREEN_ANGLE+$28*$c
+    // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
+    lda screen
+    clc
+    adc #<$28*$c
     sta screen_topline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen+1
+    adc #>$28*$c
     sta screen_topline+1
-    // [83] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_ANGLE+$28*$c
+    // [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
+    lda screen
+    clc
+    adc #<$28*$c
     sta screen_bottomline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen+1
+    adc #>$28*$c
     sta screen_bottomline+1
-    // [83] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
+    // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
+  b1_from_init_angle_screen:
+    // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
+    // [99] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
     lda #0
     sta y
     jmp b1
-    // [83] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
+    // [99] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
   b1_from_b3:
-    // [83] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy 
-    // [83] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy 
-    // [83] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy 
+    // [99] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy 
     jmp b1
     // init_angle_screen::@1
   b1:
-    // [84] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
+    // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
   b2_from_b1:
-    // [84] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
+    // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
     lda #$27
     sta xb
-    // [84] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
+    // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
     lda #0
     sta x
     jmp b2
-    // [84] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
+    // [100] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
   b2_from_b4:
-    // [84] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy 
-    // [84] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy 
+    // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy 
+    // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy 
     jmp b2
     // init_angle_screen::@2
   b2:
-    // [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda x
     asl
     sta _2
-    // [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuz1=vbuc1_minus_vbuz2 
+    // [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuz1=vbuc1_minus_vbuz2 
     lda #$27
     sec
     sbc _2
     sta _3
-    // [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
+    // [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
     lda _3
     ldy #0
     sta xw+1
     sty xw
-    // [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda y
     asl
     sta _6
-    // [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
+    // [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
     lda _6
     ldy #0
     sta yw+1
     sty yw
-    // [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 
+    // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 
     lda xw
     sta atan2_16.x
     lda xw+1
     sta atan2_16.x+1
-    // [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 
+    // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 
     lda yw
     sta atan2_16.y
     lda yw+1
     sta atan2_16.y+1
-    // [92] call atan2_16 
+    // [108] call atan2_16 
     jsr atan2_16
-    // [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 
+    // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 
     lda atan2_16.return
     sta atan2_16.return_2
     lda atan2_16.return+1
@@ -4953,12 +5318,12 @@ init_angle_screen: {
     jmp b4
     // init_angle_screen::@4
   b4:
-    // [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 
+    // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 
     lda atan2_16.return_2
     sta angle_w
     lda atan2_16.return_2+1
     sta angle_w+1
-    // [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 
+    // [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 
     lda #$80
     clc
     adc angle_w
@@ -4966,52 +5331,52 @@ init_angle_screen: {
     lda #0
     adc angle_w+1
     sta _10+1
-    // [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 
+    // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 
     lda _10+1
     sta ang_w
-    // [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda ang_w
     ldy xb
     sta (screen_bottomline),y
-    // [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 
+    // [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 
     lda ang_w
     eor #$ff
     clc
     adc #1
     sta _12
-    // [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda _12
     ldy xb
     sta (screen_topline),y
-    // [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 
+    // [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 
     lax ang_w
     axs #-[$80]
     stx _13
-    // [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda _13
     ldy x
     sta (screen_topline),y
-    // [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 
+    // [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 
     lda #$80
     sec
     sbc ang_w
     sta _14
-    // [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda _14
     ldy x
     sta (screen_bottomline),y
-    // [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
+    // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
     inc x
-    // [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
+    // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
     dec xb
-    // [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 
+    // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 
     lda x
     cmp #$13+1
     bcc b2_from_b4
     jmp b3
     // init_angle_screen::@3
   b3:
-    // [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
+    // [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
     lda screen_topline
     sec
     sbc #<$28
@@ -5019,7 +5384,7 @@ init_angle_screen: {
     lda screen_topline+1
     sbc #>$28
     sta screen_topline+1
-    // [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
+    // [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$28
     clc
     adc screen_bottomline
@@ -5027,28 +5392,28 @@ init_angle_screen: {
     bcc !+
     inc screen_bottomline+1
   !:
-    // [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 
+    // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 
     inc y
-    // [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #$d
     cmp y
     bne b1_from_b3
     jmp breturn
     // init_angle_screen::@return
   breturn:
-    // [111] return 
+    // [127] return 
     rts
 }
   // atan2_16
 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
 // Finding the angle requires a binary search using CORDIC_ITERATIONS_16
 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
-// atan2_16(signed word zeropage($68) x, signed word zeropage($6a) y)
+// atan2_16(signed word zeropage($76) x, signed word zeropage($78) y)
 atan2_16: {
     .label _2 = $20
     .label _7 = $22
-    .label _23 = $77
-    .label _24 = $76
+    .label _23 = $85
+    .label _24 = $84
     .label yi = $20
     .label xi = $22
     .label angle = $27
@@ -5059,19 +5424,19 @@ atan2_16: {
     .label angle_3 = $25
     .label i = $24
     .label return = $27
-    .label x = $68
-    .label y = $6a
-    .label return_2 = $6c
+    .label x = $76
+    .label y = $78
+    .label return_2 = $7a
     .label angle_6 = $25
     .label angle_12 = $25
     .label angle_13 = $25
-    // [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
+    // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
     lda y+1
     bpl b1
     jmp b2
     // atan2_16::@2
   b2:
-    // [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
+    // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
     sec
     lda #0
     sbc y
@@ -5079,20 +5444,20 @@ atan2_16: {
     lda #0
     sbc y+1
     sta _2+1
-    // [114] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
+    // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
   b3_from_b1:
   b3_from_b2:
-    // [114] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy 
+    // [130] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy 
     jmp b3
     // atan2_16::@3
   b3:
-    // [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
+    // [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
     lda x+1
     bpl b4
     jmp b5
     // atan2_16::@5
   b5:
-    // [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
+    // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
     sec
     lda #0
     sbc x
@@ -5100,54 +5465,54 @@ atan2_16: {
     lda #0
     sbc x+1
     sta _7+1
-    // [117] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
+    // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
   b6_from_b4:
   b6_from_b5:
-    // [117] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy 
+    // [133] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy 
     jmp b6
     // atan2_16::@6
   b6:
-    // [118] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
+    // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
   b10_from_b6:
-    // [118] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
+    // [134] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
     lda #0
     sta angle_12
     lda #0
     sta angle_12+1
-    // [118] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 
+    // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 
     lda #0
     sta i
-    // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
-    // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy 
+    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
+    // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy 
     jmp b10
     // atan2_16::@10
   b10:
-    // [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
+    // [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
     lda yi+1
     bne b11
     lda yi
     bne b11
-    // [120] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
+    // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
   b12_from_b10:
   b12_from_b19:
-    // [120] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy 
+    // [136] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy 
     jmp b12
     // atan2_16::@12
   b12:
-    // [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
+    // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
     lda angle_6+1
     lsr
     sta angle+1
     lda angle_6
     ror
     sta angle
-    // [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
+    // [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
     lda x+1
     bpl b7_from_b12
     jmp b21
     // atan2_16::@21
   b21:
-    // [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
+    // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
     sec
     lda #<$8000
     sbc angle
@@ -5155,20 +5520,20 @@ atan2_16: {
     lda #>$8000
     sbc angle+1
     sta angle+1
-    // [124] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
+    // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
   b7_from_b12:
   b7_from_b21:
-    // [124] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy 
+    // [140] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy 
     jmp b7
     // atan2_16::@7
   b7:
-    // [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
+    // [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
     lda y+1
     bpl b8_from_b7
     jmp b9
     // atan2_16::@9
   b9:
-    // [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
+    // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
     sec
     lda #0
     sbc angle
@@ -5176,81 +5541,81 @@ atan2_16: {
     lda #0
     sbc angle+1
     sta angle+1
-    // [127] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
+    // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
   b8_from_b7:
   b8_from_b9:
-    // [127] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy 
+    // [143] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy 
     jmp b8
     // atan2_16::@8
   b8:
     jmp breturn
     // atan2_16::@return
   breturn:
-    // [128] return 
+    // [144] return 
     rts
     // atan2_16::@11
   b11:
-    // [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 
+    // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 
     lda i
     sta shift
-    // [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
+    // [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
     lda xi
     sta xd
     lda xi+1
     sta xd+1
-    // [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
+    // [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
     lda yi
     sta yd
     lda yi+1
     sta yd+1
-    // [132] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
+    // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
   b13_from_b11:
   b13_from_b14:
-    // [132] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy 
-    // [132] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy 
-    // [132] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy 
+    // [148] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy 
+    // [148] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy 
+    // [148] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy 
     jmp b13
     // atan2_16::@13
   b13:
-    // [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 
+    // [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 
     lda shift
     cmp #2
     bcs b14
     jmp b15
     // atan2_16::@15
   b15:
-    // [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 
+    // [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 
     lda #0
     cmp shift
     beq b17_from_b15
     jmp b16
     // atan2_16::@16
   b16:
-    // [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
+    // [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
     lda xd+1
     cmp #$80
     ror xd+1
     ror xd
-    // [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
+    // [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
     lda yd+1
     cmp #$80
     ror yd+1
     ror yd
-    // [137] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
+    // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
   b17_from_b15:
   b17_from_b16:
-    // [137] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy 
-    // [137] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy 
+    // [153] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy 
+    // [153] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy 
     jmp b17
     // atan2_16::@17
   b17:
-    // [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
+    // [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
     lda yi+1
     bpl b18
     jmp b20
     // atan2_16::@20
   b20:
-    // [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
+    // [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
     lda xi
     sec
     sbc yd
@@ -5258,7 +5623,7 @@ atan2_16: {
     lda xi+1
     sbc yd+1
     sta xi+1
-    // [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
+    // [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
     lda yi
     clc
     adc xd
@@ -5266,11 +5631,11 @@ atan2_16: {
     lda yi+1
     adc xd+1
     sta yi+1
-    // [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda i
     asl
     sta _24
-    // [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 
+    // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 
     ldy _24
     sec
     lda angle_3
@@ -5279,31 +5644,31 @@ atan2_16: {
     lda angle_3+1
     sbc CORDIC_ATAN2_ANGLES_16+1,y
     sta angle_3+1
-    // [143] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
+    // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
   b19_from_b18:
   b19_from_b20:
-    // [143] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy 
-    // [143] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
-    // [143] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy 
+    // [159] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy 
+    // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
+    // [159] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy 
     jmp b19
     // atan2_16::@19
   b19:
-    // [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 
+    // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 
     inc i
-    // [145] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 
+    // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 
     lda #CORDIC_ITERATIONS_16-1+1
     cmp i
     beq b12_from_b19
-    // [118] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
+    // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
   b10_from_b19:
-    // [118] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
-    // [118] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
-    // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
-    // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy 
+    // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
+    // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
+    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
+    // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy 
     jmp b10
     // atan2_16::@18
   b18:
-    // [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
+    // [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
     lda xi
     clc
     adc yd
@@ -5311,7 +5676,7 @@ atan2_16: {
     lda xi+1
     adc yd+1
     sta xi+1
-    // [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
+    // [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
     lda yi
     sec
     sbc xd
@@ -5319,11 +5684,11 @@ atan2_16: {
     lda yi+1
     sbc xd+1
     sta yi+1
-    // [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda i
     asl
     sta _23
-    // [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 
+    // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 
     ldy _23
     clc
     lda angle_2
@@ -5335,7 +5700,7 @@ atan2_16: {
     jmp b19_from_b18
     // atan2_16::@14
   b14:
-    // [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
+    // [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
     lda xd+1
     cmp #$80
     ror xd+1
@@ -5344,7 +5709,7 @@ atan2_16: {
     cmp #$80
     ror xd+1
     ror xd
-    // [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
+    // [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
     lda yd+1
     cmp #$80
     ror yd+1
@@ -5353,13 +5718,13 @@ atan2_16: {
     cmp #$80
     ror yd+1
     ror yd
-    // [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 
+    // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 
     dec shift
     dec shift
     jmp b13_from_b14
     // atan2_16::@4
   b4:
-    // [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
+    // [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
     lda x
     sta xi
     lda x+1
@@ -5367,7 +5732,7 @@ atan2_16: {
     jmp b6_from_b4
     // atan2_16::@1
   b1:
-    // [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
+    // [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
     lda y
     sta yi
     lda y+1
@@ -5378,157 +5743,162 @@ atan2_16: {
 // Populates 1000 bytes (a screen) with values representing the distance to the center.
 // The actual value stored is distance*2 to increase precision
 // Utilizes symmetry around the center
+// init_dist_screen(byte* zeropage($2f) screen)
 init_dist_screen: {
     .label _5 = $33
     .label _7 = $33
     .label _13 = $36
     .label _15 = $36
-    .label y2 = $78
+    .label screen = $2f
+    .label screen_bottomline = $31
+    .label y2 = $86
     .label yd = $33
-    .label yds = $7b
-    .label x2 = $7d
+    .label yds = $89
+    .label x2 = $8b
     .label xd = $36
-    .label xds = $80
-    .label ds = $82
-    .label d = $87
+    .label xds = $8e
+    .label ds = $90
+    .label d = $95
     .label x = $34
     .label xb = $35
     .label screen_topline = $2f
-    .label screen_bottomline = $31
     .label y = $2e
-    // [156] call init_squares 
-    // [226] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
+    // [172] call init_squares 
+    // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
   init_squares_from_init_dist_screen:
     jsr init_squares
-    // [157] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1]
-  b1_from_init_dist_screen:
-    // [157] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST+$28*$18
+    jmp b10
+    // init_dist_screen::@10
+  b10:
+    // [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 
+    lda screen
+    clc
+    adc #<$28*$18
     sta screen_bottomline
-    lda #>SCREEN_DIST+$28*$18
+    lda screen+1
+    adc #>$28*$18
     sta screen_bottomline+1
-    // [157] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta screen_topline
-    lda #>SCREEN_DIST
-    sta screen_topline+1
-    // [157] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 
+    // [174] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1]
+  b1_from_b10:
+    // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@10->init_dist_screen::@1#0] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@10->init_dist_screen::@1#1] -- register_copy 
+    // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@1#2] -- vbuz1=vbuc1 
     lda #0
     sta y
     jmp b1
-    // [157] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
+    // [174] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
   b1_from_b9:
-    // [157] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
-    // [157] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
-    // [157] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
+    // [174] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
     jmp b1
     // init_dist_screen::@1
   b1:
-    // [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda y
     asl
     sta y2
-    // [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 
+    // [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 
     lda y2
     cmp #$18
     bcs b2
     jmp b3
     // init_dist_screen::@3
   b3:
-    // [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 
+    // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 
     lda #$18
     sec
     sbc y2
     sta _5
-    // [161] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
+    // [178] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
   b4_from_b2:
   b4_from_b3:
-    // [161] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
+    // [178] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
     jmp b4
     // init_dist_screen::@4
   b4:
-    // [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 
+    // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 
     lda yd
     sta sqr.val
-    // [163] call sqr 
-    // [222] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
+    // [180] call sqr 
+    // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
   sqr_from_b4:
-    // [222] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
+    // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
     jsr sqr
-    // [164] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
+    // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
     lda sqr.return
     sta sqr.return_2
     lda sqr.return+1
     sta sqr.return_2+1
-    jmp b10
-    // init_dist_screen::@10
-  b10:
-    // [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 
+    jmp b11
+    // init_dist_screen::@11
+  b11:
+    // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 
     lda sqr.return_2
     sta yds
     lda sqr.return_2+1
     sta yds+1
-    // [166] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5]
-  b5_from_b10:
-    // [166] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 
+    // [183] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5]
+  b5_from_b11:
+    // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 
     lda #$27
     sta xb
-    // [166] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 
+    // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 
     lda #0
     sta x
     jmp b5
-    // [166] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
-  b5_from_b12:
-    // [166] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy 
-    // [166] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy 
+    // [183] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5]
+  b5_from_b13:
+    // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy 
+    // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy 
     jmp b5
     // init_dist_screen::@5
   b5:
-    // [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda x
     asl
     sta x2
-    // [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuz1_ge_vbuc1_then_la1 
+    // [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuz1_ge_vbuc1_then_la1 
     lda x2
     cmp #$27
     bcs b6
     jmp b7
     // init_dist_screen::@7
   b7:
-    // [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 
+    // [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 
     lda #$27
     sec
     sbc x2
     sta _13
-    // [170] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
+    // [187] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
   b8_from_b6:
   b8_from_b7:
-    // [170] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
+    // [187] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
     jmp b8
     // init_dist_screen::@8
   b8:
-    // [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 
+    // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 
     lda xd
     sta sqr.val
-    // [172] call sqr 
-    // [222] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
+    // [189] call sqr 
+    // [239] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
   sqr_from_b8:
-    // [222] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
+    // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
     jsr sqr
-    // [173] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 
+    // [190] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 
     lda sqr.return
     sta sqr.return_3
     lda sqr.return+1
     sta sqr.return_3+1
-    jmp b11
-    // init_dist_screen::@11
-  b11:
-    // [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 
+    jmp b12
+    // init_dist_screen::@12
+  b12:
+    // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 
     lda sqr.return_3
     sta xds
     lda sqr.return_3+1
     sta xds+1
-    // [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 
+    // [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 
     lda xds
     clc
     adc yds
@@ -5536,50 +5906,50 @@ init_dist_screen: {
     lda xds+1
     adc yds+1
     sta ds+1
-    // [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 
+    // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 
     lda ds
     sta sqrt.val
     lda ds+1
     sta sqrt.val+1
-    // [177] call sqrt 
+    // [194] call sqrt 
     jsr sqrt
-    // [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 
+    // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 
     lda sqrt.return
     sta sqrt.return_2
-    jmp b12
-    // init_dist_screen::@12
-  b12:
-    // [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 
+    jmp b13
+    // init_dist_screen::@13
+  b13:
+    // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 
     lda sqrt.return_2
     sta d
-    // [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda d
     ldy x
     sta (screen_topline),y
-    // [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda d
     ldy x
     sta (screen_bottomline),y
-    // [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda d
     ldy xb
     sta (screen_topline),y
-    // [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda d
     ldy xb
     sta (screen_bottomline),y
-    // [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
+    // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
     inc x
-    // [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
+    // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
     dec xb
-    // [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
+    // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
     lda x
     cmp #$13+1
-    bcc b5_from_b12
+    bcc b5_from_b13
     jmp b9
     // init_dist_screen::@9
   b9:
-    // [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
+    // [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$28
     clc
     adc screen_topline
@@ -5587,7 +5957,7 @@ init_dist_screen: {
     bcc !+
     inc screen_topline+1
   !:
-    // [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
+    // [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
     lda screen_bottomline
     sec
     sbc #<$28
@@ -5595,27 +5965,27 @@ init_dist_screen: {
     lda screen_bottomline+1
     sbc #>$28
     sta screen_bottomline+1
-    // [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
+    // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
     inc y
-    // [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #$d
     cmp y
     bne b1_from_b9
     jmp breturn
     // init_dist_screen::@return
   breturn:
-    // [191] return 
+    // [208] return 
     rts
     // init_dist_screen::@6
   b6:
-    // [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 
+    // [209] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 
     lax x2
     axs #$27
     stx _15
     jmp b8_from_b6
     // init_dist_screen::@2
   b2:
-    // [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 
+    // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 
     lax y2
     axs #$18
     stx _7
@@ -5625,29 +5995,29 @@ init_dist_screen: {
 // Find the (integer) square root of a word value
 // If the square is not an integer then it returns the largest integer N where N*N <= val
 // Uses a table of squares that must be initialized by calling init_squares()
-// sqrt(word zeropage($84) val)
+// sqrt(word zeropage($92) val)
 sqrt: {
-    .label _1 = $90
-    .label _3 = $8e
-    .label found = $8c
-    .label return = $92
-    .label val = $84
-    .label return_2 = $86
-    // [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 
+    .label _1 = $9e
+    .label _3 = $9c
+    .label found = $9a
+    .label return = $a0
+    .label val = $92
+    .label return_2 = $94
+    // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 
     lda val
     sta bsearch16u.key
     lda val+1
     sta bsearch16u.key+1
-    // [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
+    // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
     lda SQUARES
     sta bsearch16u.items
     lda SQUARES+1
     sta bsearch16u.items+1
-    // [196] call bsearch16u 
-    // [203] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
+    // [213] call bsearch16u 
+    // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
   bsearch16u_from_sqrt:
     jsr bsearch16u
-    // [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 
+    // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 
     lda bsearch16u.return
     sta bsearch16u.return_3
     lda bsearch16u.return+1
@@ -5655,12 +6025,12 @@ sqrt: {
     jmp b1
     // sqrt::@1
   b1:
-    // [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 
+    // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 
     lda bsearch16u.return_3
     sta found
     lda bsearch16u.return_3+1
     sta found+1
-    // [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 
+    // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 
     lda found
     sec
     sbc SQUARES
@@ -5668,20 +6038,20 @@ sqrt: {
     lda found+1
     sbc SQUARES+1
     sta _3+1
-    // [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
+    // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
     lda _3+1
     lsr
     sta _1+1
     lda _3
     ror
     sta _1
-    // [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 
+    // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 
     lda _1
     sta return
     jmp breturn
     // sqrt::@return
   breturn:
-    // [202] return 
+    // [219] return 
     rts
 }
   // bsearch16u
@@ -5690,34 +6060,34 @@ sqrt: {
 // - items - Pointer to the start of the array to search in
 // - num - The number of items in the array
 // Returns pointer to an entry in the array that matches the search key
-// bsearch16u(word zeropage($88) key, word* zeropage($37) items, byte zeropage($39) num)
+// bsearch16u(word zeropage($96) key, word* zeropage($37) items, byte zeropage($39) num)
 bsearch16u: {
     .label _2 = $37
-    .label _6 = $93
-    .label _16 = $94
-    .label pivot = $95
-    .label result = $97
+    .label _6 = $a1
+    .label _16 = $a2
+    .label pivot = $a3
+    .label result = $a5
     .label return = $37
     .label num = $39
     .label items = $37
-    .label key = $88
-    .label return_3 = $8a
-    // [204] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
+    .label key = $96
+    .label return_3 = $98
+    // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
   b3_from_bsearch16u:
-    // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
-    // [204] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 
+    // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
+    // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 
     lda #NUM_SQUARES
     sta num
     jmp b3
     // bsearch16u::@3
   b3:
-    // [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 
+    // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 
     lda num
     bne b4
     jmp b5
     // bsearch16u::@5
   b5:
-    // [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
+    // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
     ldy #1
     lda (items),y
     cmp key+1
@@ -5731,7 +6101,7 @@ bsearch16u: {
     jmp b1
     // bsearch16u::@1
   b1:
-    // [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
+    // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
     lda _2
     sec
     sbc #<1*SIZEOF_WORD
@@ -5739,33 +6109,33 @@ bsearch16u: {
     lda _2+1
     sbc #>1*SIZEOF_WORD
     sta _2+1
-    // [208] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
+    // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
   b2_from_b1:
   b2_from_b5:
-    // [208] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
+    // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
     jmp b2
     // bsearch16u::@2
   b2:
-    // [209] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
+    // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
   breturn_from_b2:
   breturn_from_b8:
-    // [209] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
+    // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
     jmp breturn
     // bsearch16u::@return
   breturn:
-    // [210] return 
+    // [227] return 
     rts
     // bsearch16u::@4
   b4:
-    // [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 
+    // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 
     lda num
     lsr
     sta _6
-    // [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda _6
     asl
     sta _16
-    // [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 
+    // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 
     lda _16
     clc
     adc items
@@ -5773,7 +6143,7 @@ bsearch16u: {
     lda #0
     adc items+1
     sta pivot+1
-    // [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
+    // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
     sec
     lda key
     ldy #0
@@ -5783,7 +6153,7 @@ bsearch16u: {
     iny
     sbc (pivot),y
     sta result+1
-    // [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
+    // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
     lda result+1
     bne b6
     lda result
@@ -5791,7 +6161,7 @@ bsearch16u: {
     jmp b8
     // bsearch16u::@8
   b8:
-    // [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
+    // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
     lda pivot
     sta return
     lda pivot+1
@@ -5799,7 +6169,7 @@ bsearch16u: {
     jmp breturn_from_b8
     // bsearch16u::@6
   b6:
-    // [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
+    // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
     lda result+1
     bmi b7_from_b6
     bne !+
@@ -5809,7 +6179,7 @@ bsearch16u: {
     jmp b9
     // bsearch16u::@9
   b9:
-    // [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
+    // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
     lda #1*SIZEOF_WORD
     clc
     adc pivot
@@ -5817,22 +6187,22 @@ bsearch16u: {
     lda #0
     adc pivot+1
     sta items+1
-    // [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 
+    // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 
     dec num
-    // [220] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
+    // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
   b7_from_b6:
   b7_from_b9:
-    // [220] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
-    // [220] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
+    // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
+    // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
     jmp b7
     // bsearch16u::@7
   b7:
-    // [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 
+    // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 
     lsr num
-    // [204] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
+    // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
   b3_from_b7:
-    // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
-    // [204] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
+    // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
+    // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
     jmp b3
 }
   // sqr
@@ -5840,16 +6210,16 @@ bsearch16u: {
 // Uses a table of squares that must be initialized by calling init_squares()
 // sqr(byte zeropage($3a) val)
 sqr: {
-    .label _0 = $99
-    .label return = $9a
+    .label _0 = $a7
+    .label return = $a8
     .label val = $3a
-    .label return_2 = $79
-    .label return_3 = $7e
-    // [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    .label return_2 = $87
+    .label return_3 = $8c
+    // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda val
     asl
     sta _0
-    // [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 
+    // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 
     ldy _0
     lda (SQUARES),y
     sta return
@@ -5859,73 +6229,69 @@ sqr: {
     jmp breturn
     // sqr::@return
   breturn:
-    // [225] return 
+    // [242] return 
     rts
 }
   // init_squares
 // Initialize squares table
 // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
 init_squares: {
-    .label _3 = $9e
-    .label _4 = $9f
+    .label _3 = $ac
+    .label _4 = $ad
     .label squares = $3d
     .label sqr = $3b
     .label i = $3f
-    // [227] call malloc 
-    // [78] phi from init_squares to malloc [phi:init_squares->malloc]
+    // [244] call malloc 
+    // [93] phi from init_squares to malloc [phi:init_squares->malloc]
   malloc_from_init_squares:
-    // [78] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
+    // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
     lda #NUM_SQUARES*SIZEOF_WORD
     sta malloc.size
     lda #0
     sta malloc.size+1
-    // [78] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 
-    lda #<HEAP_TOP
-    sta heap_head
-    lda #>HEAP_TOP
-    sta heap_head+1
+    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
     jsr malloc
     jmp b2
     // init_squares::@2
   b2:
-    // [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+    // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
     lda malloc.mem
     sta SQUARES
     lda malloc.mem+1
     sta SQUARES+1
-    // [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
+    // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
     lda SQUARES
     sta squares
     lda SQUARES+1
     sta squares+1
-    // [230] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
+    // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
   b1_from_b2:
-    // [230] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 
+    // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 
     lda #0
     sta i
-    // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
-    // [230] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 
+    // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
+    // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 
     lda #0
     sta sqr
     lda #0
     sta sqr+1
     jmp b1
-    // [230] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
+    // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
   b1_from_b1:
-    // [230] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
-    // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
-    // [230] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
+    // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
+    // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
+    // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
     jmp b1
     // init_squares::@1
   b1:
-    // [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
+    // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
     ldy #0
     lda sqr
     sta (squares),y
     iny
     lda sqr+1
     sta (squares),y
-    // [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
+    // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
     lda #SIZEOF_WORD
     clc
     adc squares
@@ -5933,15 +6299,15 @@ init_squares: {
     bcc !+
     inc squares+1
   !:
-    // [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
+    // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
     lda i
     asl
     sta _3
-    // [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 
+    // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 
     ldy _3
     iny
     sty _4
-    // [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 
+    // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 
     lda _4
     clc
     adc sqr
@@ -5949,463 +6315,495 @@ init_squares: {
     bcc !+
     inc sqr+1
   !:
-    // [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 
+    // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 
     inc i
-    // [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #NUM_SQUARES-1+1
     cmp i
     bne b1_from_b1
     jmp breturn
     // init_squares::@return
   breturn:
-    // [238] return 
+    // [255] return 
     rts
 }
   // File Data
-  // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
+// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
 CORDIC_ATAN2_ANGLES_16:
 .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
         .word 256*2*256*atan(1/pow(2,i))/PI/2
 
-  // Screen containing distance to center
-  SCREEN_DIST: .fill $3e8, 0
-  // = malloc(1000);
-  // Screen containing angle to center
-  SCREEN_ANGLE: .fill $3e8, 0
-  // Array containing the bucket size for each of the distance buckets
-  BUCKET_SIZES: .fill NUM_BUCKETS, 0
-  // Buckets containing screen indices for each distance from the center.
-  // BUCKETS[dist] is an array of words containing screen indices.
-  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
-  BUCKETS: .fill 2*NUM_BUCKETS, 0
-  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
-  BUCKET_IDX: .fill NUM_BUCKETS, 0
 
 REGISTER UPLIFT POTENTIAL REGISTERS
-Statement [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ main::bucket_idx#6 ] ( main:2 [ main::bucket_idx#6 ] ) always clobbers reg byte a 
+Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] (  [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
-Statement [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::$21 ] ( main:2 [ main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
-Statement [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) [ main::bucket_idx#6 main::bucket#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a 
-Statement [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:67 [ main::bucket_size#0 ]
+Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
+Statement [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
+Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y 
+Statement [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:81 [ main::bucket_size#0 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ]
-Statement [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:67 [ main::bucket_size#0 ]
+Statement [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:81 [ main::bucket_size#0 ]
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ]
-Statement [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
-Statement [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
-Statement [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
-Statement [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
-Statement [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
-Statement [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ main::bucket_idx#6 main::min_offset#2 ] ( main:2 [ main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
-Statement [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ main::fill1#0 ] ( main:2 [ main::fill1#0 ] ) always clobbers reg byte a 
-Statement [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y 
-Statement [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a 
-Statement [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a 
-Statement [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a 
-Statement [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
+Statement [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
+Statement [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
+Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
+Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
+Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
+Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
+Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a 
+Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y 
+Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a 
+Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a 
+Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a 
+Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ]
-Statement [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y 
-Statement [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
-Statement [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
-Statement [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a reg byte y 
-Statement [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
-Statement [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
-Statement [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
-Statement [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
-Statement [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
-Statement [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:9 [ init_buckets::i3#2 ] ) always clobbers reg byte a 
+Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a 
+Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
+Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
+Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
+Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
+Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
+Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
+Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ]
-Statement [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
-Statement [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:83 [ init_buckets::distance#0 ]
-Statement [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
-Statement [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
-Statement [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:83 [ init_buckets::distance#0 ]
-Statement [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
-Statement [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a 
-Statement [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
-Statement [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
-Statement [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 ] ) always clobbers reg byte a 
-Statement [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
-Statement [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a 
+Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a 
+Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
+Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:97 [ init_buckets::distance#0 ]
+Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
+Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
+Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:97 [ init_buckets::distance#0 ]
+Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
+Statement [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
+Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
+Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y 
+Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
+Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
+Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
+Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
+Statement [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
-Statement [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
-Statement [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
+Statement [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
+Statement [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
-Statement [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a 
-Statement [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
-Statement [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
-Statement [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
-Statement [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
-Statement [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
-Statement [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a 
-Statement [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
-Statement [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ]
-Statement [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a 
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ]
-Statement [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
-Statement [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
-Statement [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
-Statement [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a 
-Statement [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
-Statement [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
-Statement [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
-Statement [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
-Statement [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
-Statement [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
-Statement [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
-Statement [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
+Statement [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a 
+Statement [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
+Statement [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
+Statement [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
+Statement [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
+Statement [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
+Statement [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a 
+Statement [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
+Statement [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ]
+Statement [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a 
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ]
+Statement [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
+Statement [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
+Statement [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
+Statement [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a 
+Statement [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
+Statement [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
+Statement [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
+Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
+Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
+Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
+Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
+Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ]
-Statement [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
-Statement [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
-Statement [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
-Statement [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
-Statement [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
-Statement [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
+Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
+Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
+Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
+Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
+Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
+Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
-Statement [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
-Statement [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
-Statement [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
-Statement [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
-Statement [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
-Statement [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
-Statement [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a 
-Statement [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
-Statement [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a 
-Statement [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
-Statement [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
-Statement [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
-Statement [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
-Statement [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
+Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
+Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
+Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
+Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
+Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
+Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a 
+Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
+Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a 
+Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
+Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
+Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
+Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
+Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-Statement [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [164] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
-Statement [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [173] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
-Statement [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
-Statement [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
-Statement [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
-Statement [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
+Statement [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
+Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
+Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
+Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
+Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
-Statement [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
-Statement [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
+Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
+Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
-Statement [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
-Statement [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
-Statement [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
+Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
+Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
+Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
-Statement [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
-Statement [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
-Statement [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
-Statement [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
-Statement [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:163 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
-Statement [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:163 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
-Statement [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
-Statement [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
+Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
+Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
+Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
+Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
+Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
+Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
+Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
+Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ]
 Removing always clobbered register reg byte y as potential for zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ]
-Statement [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
-Statement [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
-Statement [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
-Statement [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ main::bucket_idx#6 ] ( main:2 [ main::bucket_idx#6 ] ) always clobbers reg byte a 
-Statement [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::$21 ] ( main:2 [ main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
-Statement [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) [ main::bucket_idx#6 main::bucket#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a 
-Statement [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a 
-Statement [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
-Statement [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
-Statement [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
-Statement [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
-Statement [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
-Statement [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
-Statement [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ main::bucket_idx#6 main::min_offset#2 ] ( main:2 [ main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
-Statement [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ main::fill1#0 ] ( main:2 [ main::fill1#0 ] ) always clobbers reg byte a 
-Statement [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y 
-Statement [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a 
-Statement [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a 
-Statement [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a 
-Statement [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
-Statement [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y 
-Statement [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
-Statement [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
-Statement [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a reg byte y 
-Statement [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
-Statement [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
-Statement [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
-Statement [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
-Statement [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
-Statement [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:9 [ init_buckets::i3#2 ] ) always clobbers reg byte a 
-Statement [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
-Statement [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
-Statement [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
-Statement [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
-Statement [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
-Statement [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
-Statement [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a 
-Statement [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
-Statement [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
-Statement [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 ] ) always clobbers reg byte a 
-Statement [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
-Statement [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a 
-Statement [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
-Statement [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
-Statement [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a 
-Statement [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
-Statement [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
-Statement [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
-Statement [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
-Statement [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
-Statement [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a 
-Statement [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
-Statement [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
-Statement [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a 
-Statement [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
-Statement [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
-Statement [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
-Statement [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a 
-Statement [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
-Statement [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
-Statement [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
-Statement [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
-Statement [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
-Statement [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
-Statement [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
-Statement [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
-Statement [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
-Statement [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
-Statement [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
-Statement [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
-Statement [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
-Statement [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
-Statement [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
-Statement [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
-Statement [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
-Statement [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
-Statement [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
-Statement [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
-Statement [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a 
-Statement [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
-Statement [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a 
-Statement [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
-Statement [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
-Statement [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
-Statement [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
-Statement [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [164] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [173] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:135 [ init_dist_screen::d#0 ]
-Statement [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
-Statement [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
-Statement [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
-Statement [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
-Statement [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
-Statement [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
-Statement [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
-Statement [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
-Statement [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
-Statement [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
-Statement [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
-Statement [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
-Statement [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
-Statement [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
-Statement [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
-Statement [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
-Statement [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
-Statement [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:163 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
-Statement [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:163 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
-Statement [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
-Statement [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
-Statement [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
-Statement [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
-Statement [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
-Statement [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ main::bucket_idx#6 ] ( main:2 [ main::bucket_idx#6 ] ) always clobbers reg byte a 
-Statement [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::$21 ] ( main:2 [ main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
-Statement [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) [ main::bucket_idx#6 main::bucket#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a 
-Statement [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a 
-Statement [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
-Statement [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
-Statement [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
-Statement [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
-Statement [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
-Statement [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
-Statement [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ main::bucket_idx#6 main::min_offset#2 ] ( main:2 [ main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
-Statement [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ main::fill1#0 ] ( main:2 [ main::fill1#0 ] ) always clobbers reg byte a 
-Statement [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y 
-Statement [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a 
-Statement [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a 
-Statement [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a 
-Statement [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
-Statement [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y 
-Statement [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
-Statement [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
-Statement [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a reg byte y 
-Statement [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
-Statement [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
-Statement [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
-Statement [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
-Statement [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
-Statement [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:9 [ init_buckets::i3#2 ] ) always clobbers reg byte a 
-Statement [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
-Statement [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
-Statement [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
-Statement [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
-Statement [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
-Statement [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
-Statement [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a 
-Statement [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
-Statement [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
-Statement [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 ] ) always clobbers reg byte a 
-Statement [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
-Statement [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a 
-Statement [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
-Statement [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
-Statement [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a 
-Statement [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
-Statement [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
-Statement [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
-Statement [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
-Statement [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
-Statement [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a 
-Statement [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
-Statement [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
-Statement [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a 
-Statement [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
-Statement [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
-Statement [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
-Statement [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a 
-Statement [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
-Statement [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
-Statement [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
-Statement [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
-Statement [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
-Statement [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
-Statement [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
-Statement [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
-Statement [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
-Statement [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
-Statement [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
-Statement [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
-Statement [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
-Statement [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
-Statement [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
-Statement [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
-Statement [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
-Statement [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
-Statement [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
-Statement [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
-Statement [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a 
-Statement [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
-Statement [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a 
-Statement [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
-Statement [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
-Statement [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
-Statement [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
-Statement [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
-Statement [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [164] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [173] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
-Statement [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
-Statement [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
-Statement [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
-Statement [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
-Statement [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
-Statement [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
-Statement [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
-Statement [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
-Statement [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
-Statement [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
-Statement [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
-Statement [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
-Statement [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
-Statement [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
-Statement [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
-Statement [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
-Statement [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
-Statement [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:163 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
-Statement [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:163 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
-Statement [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
-Statement [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
-Statement [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
-Statement [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
-Statement [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
-Statement [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
+Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
+Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
+Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
+Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] (  [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
+Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
+Statement [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
+Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y 
+Statement [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a 
+Statement [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
+Statement [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
+Statement [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
+Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
+Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
+Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
+Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
+Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a 
+Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y 
+Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a 
+Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a 
+Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a 
+Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
+Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a 
+Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
+Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
+Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
+Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
+Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
+Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
+Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a 
+Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a 
+Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
+Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
+Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
+Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
+Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
+Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
+Statement [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
+Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
+Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y 
+Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
+Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
+Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
+Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
+Statement [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a 
+Statement [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
+Statement [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
+Statement [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a 
+Statement [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
+Statement [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
+Statement [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
+Statement [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
+Statement [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
+Statement [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a 
+Statement [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
+Statement [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
+Statement [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a 
+Statement [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
+Statement [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
+Statement [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
+Statement [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a 
+Statement [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
+Statement [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
+Statement [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
+Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
+Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
+Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
+Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
+Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
+Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
+Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
+Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
+Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
+Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
+Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
+Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
+Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
+Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
+Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
+Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
+Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
+Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a 
+Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
+Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a 
+Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
+Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
+Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
+Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
+Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:149 [ init_dist_screen::d#0 ]
+Statement [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
+Statement [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
+Statement [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
+Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
+Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
+Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
+Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
+Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
+Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
+Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
+Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
+Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
+Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
+Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
+Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
+Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
+Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
+Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
+Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
+Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
+Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
+Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
+Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
+Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
+Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] (  [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
+Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
+Statement [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
+Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y 
+Statement [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a 
+Statement [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
+Statement [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
+Statement [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y 
+Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
+Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
+Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
+Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
+Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a 
+Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y 
+Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a 
+Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a 
+Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a 
+Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
+Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a 
+Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
+Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
+Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
+Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
+Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
+Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
+Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
+Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a 
+Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a 
+Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
+Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
+Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
+Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
+Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
+Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
+Statement [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
+Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
+Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y 
+Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
+Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
+Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
+Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
+Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
+Statement [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a 
+Statement [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
+Statement [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
+Statement [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a 
+Statement [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
+Statement [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
+Statement [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
+Statement [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
+Statement [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
+Statement [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a 
+Statement [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
+Statement [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
+Statement [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a 
+Statement [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
+Statement [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
+Statement [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
+Statement [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a 
+Statement [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
+Statement [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
+Statement [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
+Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
+Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
+Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
+Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
+Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
+Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
+Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
+Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
+Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
+Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
+Statement [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
+Statement [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
+Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
+Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
+Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
+Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
+Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
+Statement [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a 
+Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
+Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a 
+Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
+Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
+Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
+Statement [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
+Statement [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
+Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
+Statement [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
+Statement [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
+Statement [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
+Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
+Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
+Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
+Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
+Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
+Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
+Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
+Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
+Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
+Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
+Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
+Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
+Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
+Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
+Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
+Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
+Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
+Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
+Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
+Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
+Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
+Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
 Potential registers zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] : zp ZP_BYTE:2 , reg byte x , 
 Potential registers zp ZP_BYTE:3 [ main::i#2 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , 
 Potential registers zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] : zp ZP_BYTE:4 , reg byte x , 
 Potential registers zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] : zp ZP_WORD:5 , 
 Potential registers zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] : zp ZP_WORD:7 , 
 Potential registers zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#1 ] : zp ZP_WORD:10 , 
+Potential registers zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] : zp ZP_WORD:10 , 
 Potential registers zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] : zp ZP_WORD:12 , 
 Potential registers zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] : zp ZP_WORD:14 , 
 Potential registers zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] : zp ZP_BYTE:16 , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] : zp ZP_WORD:17 , 
+Potential registers zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] : zp ZP_WORD:17 , 
 Potential registers zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] : zp ZP_WORD:19 , 
-Potential registers zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] : zp ZP_WORD:21 , 
-Potential registers zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] : zp ZP_WORD:23 , 
+Potential registers zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] : zp ZP_WORD:21 , 
+Potential registers zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] : zp ZP_WORD:23 , 
 Potential registers zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] : zp ZP_BYTE:25 , reg byte x , 
-Potential registers zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:26 , 
-Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:28 , 
+Potential registers zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:26 , 
+Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:28 , 
 Potential registers zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:30 , reg byte x , 
 Potential registers zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:31 , reg byte x , 
 Potential registers zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:32 , 
@@ -6417,8 +6815,8 @@ Potential registers zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16
 Potential registers zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp ZP_WORD:42 , 
 Potential registers zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp ZP_WORD:44 , 
 Potential registers zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp ZP_BYTE:46 , reg byte x , 
-Potential registers zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:47 , 
-Potential registers zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:49 , 
+Potential registers zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] : zp ZP_WORD:47 , 
+Potential registers zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] : zp ZP_WORD:49 , 
 Potential registers zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , 
 Potential registers zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:52 , reg byte x , 
 Potential registers zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:53 , reg byte x , 
@@ -6429,161 +6827,172 @@ Potential registers zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] : zp ZP_B
 Potential registers zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:59 , 
 Potential registers zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:61 , 
 Potential registers zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:63 , reg byte x , 
-Potential registers zp ZP_BYTE:64 [ main::$21 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:65 [ main::bucket#0 ] : zp ZP_WORD:65 , 
-Potential registers zp ZP_BYTE:67 [ main::bucket_size#0 ] : zp ZP_BYTE:67 , reg byte x , 
-Potential registers zp ZP_BYTE:68 [ main::$22 ] : zp ZP_BYTE:68 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:69 [ main::fill#0 ] : zp ZP_WORD:69 , 
-Potential registers zp ZP_WORD:71 [ main::angle#0 ] : zp ZP_WORD:71 , 
-Potential registers zp ZP_WORD:73 [ main::fill1#0 ] : zp ZP_WORD:73 , 
-Potential registers zp ZP_WORD:75 [ init_buckets::$15 ] : zp ZP_WORD:75 , 
-Potential registers zp ZP_WORD:77 [ init_buckets::$5 ] : zp ZP_WORD:77 , 
-Potential registers zp ZP_WORD:79 [ init_buckets::$12 ] : zp ZP_WORD:79 , 
-Potential registers zp ZP_WORD:81 [ init_buckets::$16 ] : zp ZP_WORD:81 , 
-Potential registers zp ZP_BYTE:83 [ init_buckets::distance#0 ] : zp ZP_BYTE:83 , reg byte x , 
-Potential registers zp ZP_WORD:84 [ init_buckets::$9 ] : zp ZP_WORD:84 , 
-Potential registers zp ZP_WORD:86 [ init_buckets::$13 ] : zp ZP_WORD:86 , 
-Potential registers zp ZP_WORD:88 [ init_buckets::$17 ] : zp ZP_WORD:88 , 
-Potential registers zp ZP_WORD:90 [ init_buckets::bucket#0 ] : zp ZP_WORD:90 , 
-Potential registers zp ZP_WORD:92 [ init_buckets::$10 ] : zp ZP_WORD:92 , 
-Potential registers zp ZP_BYTE:94 [ init_buckets::$14 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:95 [ malloc::mem#0 ] : zp ZP_WORD:95 , 
-Potential registers zp ZP_BYTE:97 [ init_angle_screen::$2 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:98 [ init_angle_screen::$3 ] : zp ZP_BYTE:98 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:99 [ init_angle_screen::xw#0 ] : zp ZP_WORD:99 , 
-Potential registers zp ZP_BYTE:101 [ init_angle_screen::$6 ] : zp ZP_BYTE:101 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:102 [ init_angle_screen::yw#0 ] : zp ZP_WORD:102 , 
-Potential registers zp ZP_WORD:104 [ atan2_16::x#0 ] : zp ZP_WORD:104 , 
-Potential registers zp ZP_WORD:106 [ atan2_16::y#0 ] : zp ZP_WORD:106 , 
-Potential registers zp ZP_WORD:108 [ atan2_16::return#2 ] : zp ZP_WORD:108 , 
-Potential registers zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:110 , 
-Potential registers zp ZP_WORD:112 [ init_angle_screen::$10 ] : zp ZP_WORD:112 , 
-Potential registers zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:114 , reg byte x , 
-Potential registers zp ZP_BYTE:115 [ init_angle_screen::$12 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:116 [ init_angle_screen::$13 ] : zp ZP_BYTE:116 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:117 [ init_angle_screen::$14 ] : zp ZP_BYTE:117 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:118 [ atan2_16::$24 ] : zp ZP_BYTE:118 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:119 [ atan2_16::$23 ] : zp ZP_BYTE:119 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:120 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:120 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:121 [ sqr::return#2 ] : zp ZP_WORD:121 , 
-Potential registers zp ZP_WORD:123 [ init_dist_screen::yds#0 ] : zp ZP_WORD:123 , 
-Potential registers zp ZP_BYTE:125 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:125 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:126 [ sqr::return#3 ] : zp ZP_WORD:126 , 
-Potential registers zp ZP_WORD:128 [ init_dist_screen::xds#0 ] : zp ZP_WORD:128 , 
-Potential registers zp ZP_WORD:130 [ init_dist_screen::ds#0 ] : zp ZP_WORD:130 , 
-Potential registers zp ZP_WORD:132 [ sqrt::val#0 ] : zp ZP_WORD:132 , 
-Potential registers zp ZP_BYTE:134 [ sqrt::return#2 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:135 [ init_dist_screen::d#0 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , 
-Potential registers zp ZP_WORD:136 [ bsearch16u::key#0 ] : zp ZP_WORD:136 , 
-Potential registers zp ZP_WORD:138 [ bsearch16u::return#3 ] : zp ZP_WORD:138 , 
-Potential registers zp ZP_WORD:140 [ sqrt::found#0 ] : zp ZP_WORD:140 , 
-Potential registers zp ZP_WORD:142 [ sqrt::$3 ] : zp ZP_WORD:142 , 
-Potential registers zp ZP_WORD:144 [ sqrt::$1 ] : zp ZP_WORD:144 , 
-Potential registers zp ZP_BYTE:146 [ sqrt::return#0 ] : zp ZP_BYTE:146 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:147 [ bsearch16u::$6 ] : zp ZP_BYTE:147 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:148 [ bsearch16u::$16 ] : zp ZP_BYTE:148 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:149 [ bsearch16u::pivot#0 ] : zp ZP_WORD:149 , 
-Potential registers zp ZP_WORD:151 [ bsearch16u::result#0 ] : zp ZP_WORD:151 , 
-Potential registers zp ZP_BYTE:153 [ sqr::$0 ] : zp ZP_BYTE:153 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_WORD:154 [ sqr::return#0 ] : zp ZP_WORD:154 , 
-Potential registers zp ZP_WORD:156 [ SQUARES#1 ] : zp ZP_WORD:156 , 
-Potential registers zp ZP_BYTE:158 [ init_squares::$3 ] : zp ZP_BYTE:158 , reg byte a , reg byte x , reg byte y , 
-Potential registers zp ZP_BYTE:159 [ init_squares::$4 ] : zp ZP_BYTE:159 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:64 [ SCREEN_DIST#0 ] : zp ZP_WORD:64 , 
+Potential registers zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:66 , 
+Potential registers zp ZP_WORD:68 [ BUCKET_SIZES#0 ] : zp ZP_WORD:68 , 
+Potential registers zp ZP_WORD:70 [ BUCKETS#0 ] : zp ZP_WORD:70 , 
+Potential registers zp ZP_WORD:72 [ BUCKET_IDX#0 ] : zp ZP_WORD:72 , 
+Potential registers zp ZP_WORD:74 [ init_angle_screen::screen#0 ] : zp ZP_WORD:74 , 
+Potential registers zp ZP_WORD:76 [ init_buckets::screen#0 ] : zp ZP_WORD:76 , 
+Potential registers zp ZP_BYTE:78 [ main::$21 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:79 [ main::bucket#0 ] : zp ZP_WORD:79 , 
+Potential registers zp ZP_BYTE:81 [ main::bucket_size#0 ] : zp ZP_BYTE:81 , reg byte x , 
+Potential registers zp ZP_BYTE:82 [ main::$22 ] : zp ZP_BYTE:82 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:83 [ main::fill#0 ] : zp ZP_WORD:83 , 
+Potential registers zp ZP_WORD:85 [ main::angle#0 ] : zp ZP_WORD:85 , 
+Potential registers zp ZP_WORD:87 [ main::fill1#0 ] : zp ZP_WORD:87 , 
+Potential registers zp ZP_WORD:89 [ init_buckets::$15 ] : zp ZP_WORD:89 , 
+Potential registers zp ZP_WORD:91 [ init_buckets::$5 ] : zp ZP_WORD:91 , 
+Potential registers zp ZP_WORD:93 [ init_buckets::$12 ] : zp ZP_WORD:93 , 
+Potential registers zp ZP_WORD:95 [ init_buckets::$16 ] : zp ZP_WORD:95 , 
+Potential registers zp ZP_BYTE:97 [ init_buckets::distance#0 ] : zp ZP_BYTE:97 , reg byte x , 
+Potential registers zp ZP_WORD:98 [ init_buckets::$9 ] : zp ZP_WORD:98 , 
+Potential registers zp ZP_WORD:100 [ init_buckets::$13 ] : zp ZP_WORD:100 , 
+Potential registers zp ZP_WORD:102 [ init_buckets::$17 ] : zp ZP_WORD:102 , 
+Potential registers zp ZP_WORD:104 [ init_buckets::bucket#0 ] : zp ZP_WORD:104 , 
+Potential registers zp ZP_WORD:106 [ init_buckets::$10 ] : zp ZP_WORD:106 , 
+Potential registers zp ZP_BYTE:108 [ init_buckets::$14 ] : zp ZP_BYTE:108 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:109 [ malloc::mem#0 ] : zp ZP_WORD:109 , 
+Potential registers zp ZP_BYTE:111 [ init_angle_screen::$2 ] : zp ZP_BYTE:111 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:112 [ init_angle_screen::$3 ] : zp ZP_BYTE:112 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:113 [ init_angle_screen::xw#0 ] : zp ZP_WORD:113 , 
+Potential registers zp ZP_BYTE:115 [ init_angle_screen::$6 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:116 [ init_angle_screen::yw#0 ] : zp ZP_WORD:116 , 
+Potential registers zp ZP_WORD:118 [ atan2_16::x#0 ] : zp ZP_WORD:118 , 
+Potential registers zp ZP_WORD:120 [ atan2_16::y#0 ] : zp ZP_WORD:120 , 
+Potential registers zp ZP_WORD:122 [ atan2_16::return#2 ] : zp ZP_WORD:122 , 
+Potential registers zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:124 , 
+Potential registers zp ZP_WORD:126 [ init_angle_screen::$10 ] : zp ZP_WORD:126 , 
+Potential registers zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:128 , reg byte x , 
+Potential registers zp ZP_BYTE:129 [ init_angle_screen::$12 ] : zp ZP_BYTE:129 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:130 [ init_angle_screen::$13 ] : zp ZP_BYTE:130 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:131 [ init_angle_screen::$14 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:132 [ atan2_16::$24 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:133 [ atan2_16::$23 ] : zp ZP_BYTE:133 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:135 [ sqr::return#2 ] : zp ZP_WORD:135 , 
+Potential registers zp ZP_WORD:137 [ init_dist_screen::yds#0 ] : zp ZP_WORD:137 , 
+Potential registers zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:139 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:140 [ sqr::return#3 ] : zp ZP_WORD:140 , 
+Potential registers zp ZP_WORD:142 [ init_dist_screen::xds#0 ] : zp ZP_WORD:142 , 
+Potential registers zp ZP_WORD:144 [ init_dist_screen::ds#0 ] : zp ZP_WORD:144 , 
+Potential registers zp ZP_WORD:146 [ sqrt::val#0 ] : zp ZP_WORD:146 , 
+Potential registers zp ZP_BYTE:148 [ sqrt::return#2 ] : zp ZP_BYTE:148 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:149 [ init_dist_screen::d#0 ] : zp ZP_BYTE:149 , reg byte a , reg byte x , 
+Potential registers zp ZP_WORD:150 [ bsearch16u::key#0 ] : zp ZP_WORD:150 , 
+Potential registers zp ZP_WORD:152 [ bsearch16u::return#3 ] : zp ZP_WORD:152 , 
+Potential registers zp ZP_WORD:154 [ sqrt::found#0 ] : zp ZP_WORD:154 , 
+Potential registers zp ZP_WORD:156 [ sqrt::$3 ] : zp ZP_WORD:156 , 
+Potential registers zp ZP_WORD:158 [ sqrt::$1 ] : zp ZP_WORD:158 , 
+Potential registers zp ZP_BYTE:160 [ sqrt::return#0 ] : zp ZP_BYTE:160 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:161 [ bsearch16u::$6 ] : zp ZP_BYTE:161 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:162 [ bsearch16u::$16 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:163 [ bsearch16u::pivot#0 ] : zp ZP_WORD:163 , 
+Potential registers zp ZP_WORD:165 [ bsearch16u::result#0 ] : zp ZP_WORD:165 , 
+Potential registers zp ZP_BYTE:167 [ sqr::$0 ] : zp ZP_BYTE:167 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_WORD:168 [ sqr::return#0 ] : zp ZP_WORD:168 , 
+Potential registers zp ZP_WORD:170 [ SQUARES#1 ] : zp ZP_WORD:170 , 
+Potential registers zp ZP_BYTE:172 [ init_squares::$3 ] : zp ZP_BYTE:172 , reg byte a , reg byte x , reg byte y , 
+Potential registers zp ZP_BYTE:173 [ init_squares::$4 ] : zp ZP_BYTE:173 , reg byte a , reg byte x , reg byte y , 
 
 REGISTER UPLIFT SCOPES
-Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:118 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:119 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:108 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:104 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:106 [ atan2_16::y#0 ] 
-Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:147 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:148 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:151 [ bsearch16u::result#0 ] 501: zp ZP_WORD:149 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:138 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:136 [ bsearch16u::key#0 ] 
-Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:97 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:98 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:101 [ init_angle_screen::$6 ] 202: zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:112 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:115 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:116 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:117 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:102 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:99 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] 
-Uplift Scope [main] 577.83: zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] 347.89: zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 245.29: zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] 202: zp ZP_BYTE:68 [ main::$22 ] 202: zp ZP_WORD:69 [ main::fill#0 ] 151.5: zp ZP_WORD:71 [ main::angle#0 ] 128.55: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:64 [ main::$21 ] 22: zp ZP_WORD:73 [ main::fill1#0 ] 13: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:67 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:65 [ main::bucket#0 ] 
-Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:125 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:128 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:130 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:135 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:120 [ init_dist_screen::y2#0 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.12: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] 12.5: zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:123 [ init_dist_screen::yds#0 ] 
-Uplift Scope [sqr] 338: zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:126 [ sqr::return#3 ] 28.5: zp ZP_WORD:154 [ sqr::return#0 ] 22: zp ZP_WORD:121 [ sqr::return#2 ] 4: zp ZP_BYTE:153 [ sqr::$0 ] 
-Uplift Scope [init_buckets] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 29.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:75 [ init_buckets::$15 ] 22: zp ZP_WORD:79 [ init_buckets::$12 ] 22: zp ZP_WORD:81 [ init_buckets::$16 ] 22: zp ZP_WORD:84 [ init_buckets::$9 ] 22: zp ZP_WORD:86 [ init_buckets::$13 ] 22: zp ZP_WORD:88 [ init_buckets::$17 ] 22: zp ZP_BYTE:94 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 11.73: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] 11: zp ZP_WORD:92 [ init_buckets::$10 ] 7.33: zp ZP_WORD:90 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:83 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:77 [ init_buckets::$5 ] 
-Uplift Scope [sqrt] 202: zp ZP_BYTE:134 [ sqrt::return#2 ] 103: zp ZP_WORD:132 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:146 [ sqrt::return#0 ] 4: zp ZP_WORD:140 [ sqrt::found#0 ] 4: zp ZP_WORD:142 [ sqrt::$3 ] 2: zp ZP_WORD:144 [ sqrt::$1 ] 
-Uplift Scope [init_squares] 25.17: zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:158 [ init_squares::$3 ] 22: zp ZP_BYTE:159 [ init_squares::$4 ] 13.93: zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] 
-Uplift Scope [malloc] 35: zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] 0.8: zp ZP_WORD:95 [ malloc::mem#0 ] 
-Uplift Scope [] 13.17: zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] 0.03: zp ZP_WORD:156 [ SQUARES#1 ] 
+Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:132 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:133 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:122 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:118 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:120 [ atan2_16::y#0 ] 
+Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:161 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:162 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:165 [ bsearch16u::result#0 ] 501: zp ZP_WORD:163 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:152 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:150 [ bsearch16u::key#0 ] 
+Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:111 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:112 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:115 [ init_angle_screen::$6 ] 202: zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:126 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:129 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:130 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:131 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:116 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:113 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:74 [ init_angle_screen::screen#0 ] 
+Uplift Scope [main] 577.83: zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] 347.89: zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 245.29: zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] 202: zp ZP_BYTE:82 [ main::$22 ] 202: zp ZP_WORD:83 [ main::fill#0 ] 151.5: zp ZP_WORD:85 [ main::angle#0 ] 128.55: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:78 [ main::$21 ] 22: zp ZP_WORD:87 [ main::fill1#0 ] 13: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:81 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:79 [ main::bucket#0 ] 
+Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:142 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:144 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:149 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] 4.87: zp ZP_WORD:137 [ init_dist_screen::yds#0 ] 
+Uplift Scope [sqr] 338: zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:140 [ sqr::return#3 ] 28.5: zp ZP_WORD:168 [ sqr::return#0 ] 22: zp ZP_WORD:135 [ sqr::return#2 ] 4: zp ZP_BYTE:167 [ sqr::$0 ] 
+Uplift Scope [init_buckets] 34.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:89 [ init_buckets::$15 ] 22: zp ZP_WORD:93 [ init_buckets::$12 ] 22: zp ZP_WORD:95 [ init_buckets::$16 ] 22: zp ZP_WORD:98 [ init_buckets::$9 ] 22: zp ZP_WORD:100 [ init_buckets::$13 ] 22: zp ZP_WORD:102 [ init_buckets::$17 ] 22: zp ZP_BYTE:108 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 15.93: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] 11: zp ZP_WORD:106 [ init_buckets::$10 ] 7.33: zp ZP_WORD:104 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:97 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:91 [ init_buckets::$5 ] 0.43: zp ZP_WORD:76 [ init_buckets::screen#0 ] 
+Uplift Scope [sqrt] 202: zp ZP_BYTE:148 [ sqrt::return#2 ] 103: zp ZP_WORD:146 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:160 [ sqrt::return#0 ] 4: zp ZP_WORD:154 [ sqrt::found#0 ] 4: zp ZP_WORD:156 [ sqrt::$3 ] 2: zp ZP_WORD:158 [ sqrt::$1 ] 
+Uplift Scope [init_squares] 25.17: zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:172 [ init_squares::$3 ] 22: zp ZP_BYTE:173 [ init_squares::$4 ] 13.93: zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] 
+Uplift Scope [malloc] 35: zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] 0.4: zp ZP_WORD:109 [ malloc::mem#0 ] 
+Uplift Scope [] 23.24: zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] 0.12: zp ZP_WORD:64 [ SCREEN_DIST#0 ] 0.05: zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] 0.04: zp ZP_WORD:72 [ BUCKET_IDX#0 ] 0.03: zp ZP_WORD:170 [ SQUARES#1 ] 0.03: zp ZP_WORD:70 [ BUCKETS#0 ] 0.02: zp ZP_WORD:68 [ BUCKET_SIZES#0 ] 
 
-Uplifting [atan2_16] best 1253711 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:108 [ atan2_16::return#2 ] zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:104 [ atan2_16::x#0 ] zp ZP_WORD:106 [ atan2_16::y#0 ] 
+Uplifting [atan2_16] best 1253979 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:122 [ atan2_16::return#2 ] zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:118 [ atan2_16::x#0 ] zp ZP_WORD:120 [ atan2_16::y#0 ] 
 Limited combination testing to 100 combinations of 144 possible.
-Uplifting [bsearch16u] best 1234711 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:151 [ bsearch16u::result#0 ] zp ZP_WORD:149 [ bsearch16u::pivot#0 ] zp ZP_WORD:138 [ bsearch16u::return#3 ] zp ZP_WORD:136 [ bsearch16u::key#0 ] 
-Uplifting [init_angle_screen] best 1232511 combination reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$6 ] zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:112 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:116 [ init_angle_screen::$13 ] zp ZP_BYTE:117 [ init_angle_screen::$14 ] zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:102 [ init_angle_screen::yw#0 ] zp ZP_WORD:99 [ init_angle_screen::xw#0 ] zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] 
+Uplifting [bsearch16u] best 1234979 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:165 [ bsearch16u::result#0 ] zp ZP_WORD:163 [ bsearch16u::pivot#0 ] zp ZP_WORD:152 [ bsearch16u::return#3 ] zp ZP_WORD:150 [ bsearch16u::key#0 ] 
+Uplifting [init_angle_screen] best 1232779 combination reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$6 ] zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:126 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:130 [ init_angle_screen::$13 ] zp ZP_BYTE:131 [ init_angle_screen::$14 ] zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:116 [ init_angle_screen::yw#0 ] zp ZP_WORD:113 [ init_angle_screen::xw#0 ] zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:74 [ init_angle_screen::screen#0 ] 
 Limited combination testing to 100 combinations of 65536 possible.
-Uplifting [main] best 1231071 combination zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] reg byte a [ main::$22 ] zp ZP_WORD:69 [ main::fill#0 ] zp ZP_WORD:71 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$21 ] zp ZP_WORD:73 [ main::fill1#0 ] zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_BYTE:67 [ main::bucket_size#0 ] zp ZP_WORD:65 [ main::bucket#0 ] 
+Uplifting [main] best 1231339 combination zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] reg byte a [ main::$22 ] zp ZP_WORD:83 [ main::fill#0 ] zp ZP_WORD:85 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$21 ] zp ZP_WORD:87 [ main::fill1#0 ] zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_BYTE:81 [ main::bucket_size#0 ] zp ZP_WORD:79 [ main::bucket#0 ] 
 Limited combination testing to 100 combinations of 256 possible.
-Uplifting [init_dist_screen] best 1227871 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:128 [ init_dist_screen::xds#0 ] zp ZP_WORD:130 [ init_dist_screen::ds#0 ] zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:120 [ init_dist_screen::y2#0 ] zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] zp ZP_WORD:123 [ init_dist_screen::yds#0 ] 
+Uplifting [init_dist_screen] best 1228139 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:142 [ init_dist_screen::xds#0 ] zp ZP_WORD:144 [ init_dist_screen::ds#0 ] zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] zp ZP_WORD:137 [ init_dist_screen::yds#0 ] 
 Limited combination testing to 100 combinations of 6144 possible.
-Uplifting [sqr] best 1227534 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:126 [ sqr::return#3 ] zp ZP_WORD:154 [ sqr::return#0 ] zp ZP_WORD:121 [ sqr::return#2 ] reg byte a [ sqr::$0 ] 
-Uplifting [init_buckets] best 1227174 combination reg byte x [ init_buckets::i#2 init_buckets::i#1 ] reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#1 ] zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:75 [ init_buckets::$15 ] zp ZP_WORD:79 [ init_buckets::$12 ] zp ZP_WORD:81 [ init_buckets::$16 ] zp ZP_WORD:84 [ init_buckets::$9 ] zp ZP_WORD:86 [ init_buckets::$13 ] zp ZP_WORD:88 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] zp ZP_WORD:92 [ init_buckets::$10 ] zp ZP_WORD:90 [ init_buckets::bucket#0 ] reg byte x [ init_buckets::distance#0 ] zp ZP_WORD:77 [ init_buckets::$5 ] 
-Uplifting [sqrt] best 1226271 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:132 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:140 [ sqrt::found#0 ] zp ZP_WORD:142 [ sqrt::$3 ] zp ZP_WORD:144 [ sqrt::$1 ] 
-Uplifting [init_squares] best 1226071 combination zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] 
-Uplifting [malloc] best 1226071 combination zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] zp ZP_WORD:95 [ malloc::mem#0 ] 
-Uplifting [] best 1226071 combination zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] zp ZP_WORD:156 [ SQUARES#1 ] 
+Uplifting [sqr] best 1227802 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:140 [ sqr::return#3 ] zp ZP_WORD:168 [ sqr::return#0 ] zp ZP_WORD:135 [ sqr::return#2 ] reg byte a [ sqr::$0 ] 
+Uplifting [init_buckets] best 1227522 combination zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:89 [ init_buckets::$15 ] zp ZP_WORD:93 [ init_buckets::$12 ] zp ZP_WORD:95 [ init_buckets::$16 ] zp ZP_WORD:98 [ init_buckets::$9 ] zp ZP_WORD:100 [ init_buckets::$13 ] zp ZP_WORD:102 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp ZP_WORD:106 [ init_buckets::$10 ] zp ZP_WORD:104 [ init_buckets::bucket#0 ] zp ZP_BYTE:97 [ init_buckets::distance#0 ] zp ZP_WORD:91 [ init_buckets::$5 ] zp ZP_WORD:76 [ init_buckets::screen#0 ] 
+Uplifting [sqrt] best 1226619 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:146 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:154 [ sqrt::found#0 ] zp ZP_WORD:156 [ sqrt::$3 ] zp ZP_WORD:158 [ sqrt::$1 ] 
+Uplifting [init_squares] best 1226419 combination zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] 
+Uplifting [malloc] best 1226419 combination zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] zp ZP_WORD:109 [ malloc::mem#0 ] 
+Uplifting [] best 1226419 combination zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] zp ZP_WORD:64 [ SCREEN_DIST#0 ] zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] zp ZP_WORD:72 [ BUCKET_IDX#0 ] zp ZP_WORD:170 [ SQUARES#1 ] zp ZP_WORD:70 [ BUCKETS#0 ] zp ZP_WORD:68 [ BUCKET_SIZES#0 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ]
-Uplifting [main] best 1226071 combination zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:116 [ init_angle_screen::$13 ]
-Uplifting [init_angle_screen] best 1225671 combination reg byte a [ init_angle_screen::$13 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:117 [ init_angle_screen::$14 ]
-Uplifting [init_angle_screen] best 1225071 combination reg byte a [ init_angle_screen::$14 ] 
+Uplifting [main] best 1226419 combination zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:130 [ init_angle_screen::$13 ]
+Uplifting [init_angle_screen] best 1226019 combination reg byte a [ init_angle_screen::$13 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:131 [ init_angle_screen::$14 ]
+Uplifting [init_angle_screen] best 1225419 combination reg byte a [ init_angle_screen::$14 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
-Uplifting [init_dist_screen] best 1225071 combination zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 
+Uplifting [init_dist_screen] best 1225419 combination zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
-Uplifting [init_angle_screen] best 1225071 combination zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 
+Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
-Uplifting [init_dist_screen] best 1225071 combination zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 
+Uplifting [init_dist_screen] best 1225419 combination zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
-Uplifting [init_angle_screen] best 1225071 combination zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ]
-Uplifting [init_angle_screen] best 1225071 combination zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] 
+Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ]
+Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
-Uplifting [init_dist_screen] best 1225001 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:120 [ init_dist_screen::y2#0 ]
-Uplifting [init_dist_screen] best 1224901 combination reg byte a [ init_dist_screen::y2#0 ] 
+Uplifting [init_dist_screen] best 1225349 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:134 [ init_dist_screen::y2#0 ]
+Uplifting [init_dist_screen] best 1225249 combination reg byte a [ init_dist_screen::y2#0 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
-Uplifting [init_angle_screen] best 1224901 combination zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 
+Uplifting [init_angle_screen] best 1225249 combination zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-Uplifting [init_dist_screen] best 1224901 combination zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 
+Uplifting [init_dist_screen] best 1225249 combination zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 
 Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
-Uplifting [main] best 1224901 combination zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 
-Attempting to uplift remaining variables inzp ZP_BYTE:67 [ main::bucket_size#0 ]
-Uplifting [main] best 1224901 combination zp ZP_BYTE:67 [ main::bucket_size#0 ] 
-Coalescing zero page register with common assignment [ zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] ] with [ zp ZP_WORD:73 [ main::fill1#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] ] with [ zp ZP_WORD:75 [ init_buckets::$15 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 ] ] with [ zp ZP_WORD:95 [ malloc::mem#0 ] ] - score: 1
+Uplifting [main] best 1225249 combination zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:81 [ main::bucket_size#0 ]
+Uplifting [main] best 1225249 combination zp ZP_BYTE:81 [ main::bucket_size#0 ] 
+Attempting to uplift remaining variables inzp ZP_BYTE:97 [ init_buckets::distance#0 ]
+Uplifting [init_buckets] best 1225249 combination zp ZP_BYTE:97 [ init_buckets::distance#0 ] 
+Coalescing zero page register with common assignment [ zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] ] with [ zp ZP_WORD:87 [ main::fill1#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] ] with [ zp ZP_WORD:89 [ init_buckets::$15 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 ] ] with [ zp ZP_WORD:109 [ malloc::mem#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:74 [ init_angle_screen::screen#0 ] ] - score: 1
 Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:138 [ bsearch16u::return#3 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:79 [ init_buckets::$12 ] ] with [ zp ZP_WORD:81 [ init_buckets::$16 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:84 [ init_buckets::$9 ] ] with [ zp ZP_WORD:86 [ init_buckets::$13 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:88 [ init_buckets::$17 ] ] with [ zp ZP_WORD:90 [ init_buckets::bucket#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:99 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:104 [ atan2_16::x#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:102 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:106 [ atan2_16::y#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:108 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:121 [ sqr::return#2 ] ] with [ zp ZP_WORD:123 [ init_dist_screen::yds#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 ] ] with [ zp ZP_WORD:128 [ init_dist_screen::xds#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:154 [ sqr::return#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:130 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:132 [ sqrt::val#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqrt::found#0 ] ] with [ zp ZP_WORD:142 [ sqrt::$3 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:77 [ init_buckets::$5 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:156 [ SQUARES#1 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:108 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:140 [ sqrt::found#0 sqrt::$3 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:84 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:88 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:130 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:112 [ init_angle_screen::$10 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:144 [ sqrt::$1 ] ] - score: 1
-Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:136 [ bsearch16u::key#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:152 [ bsearch16u::return#3 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:64 [ SCREEN_DIST#0 ] ] with [ zp ZP_WORD:76 [ init_buckets::screen#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:93 [ init_buckets::$12 ] ] with [ zp ZP_WORD:95 [ init_buckets::$16 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:98 [ init_buckets::$9 ] ] with [ zp ZP_WORD:100 [ init_buckets::$13 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:102 [ init_buckets::$17 ] ] with [ zp ZP_WORD:104 [ init_buckets::bucket#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:113 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:118 [ atan2_16::x#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:116 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:120 [ atan2_16::y#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:122 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:135 [ sqr::return#2 ] ] with [ zp ZP_WORD:137 [ init_dist_screen::yds#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 ] ] with [ zp ZP_WORD:142 [ init_dist_screen::xds#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:168 [ sqr::return#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:144 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:146 [ sqrt::val#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:154 [ sqrt::found#0 ] ] with [ zp ZP_WORD:156 [ sqrt::$3 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:91 [ init_buckets::$5 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:170 [ SQUARES#1 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:122 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:154 [ sqrt::found#0 sqrt::$3 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:98 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:102 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:144 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:126 [ init_angle_screen::$10 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:158 [ sqrt::$1 ] ] - score: 1
+Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:150 [ bsearch16u::key#0 ] ] - score: 1
 Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:3 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ]
 Allocated (was zp ZP_WORD:5) zp ZP_WORD:4 [ main::min_offset#5 main::min_offset#7 ]
 Allocated (was zp ZP_WORD:7) zp ZP_WORD:6 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 main::fill1#0 ]
-Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#1 ]
+Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
 Allocated (was zp ZP_WORD:12) zp ZP_WORD:10 [ init_buckets::i1#2 init_buckets::i1#1 ]
 Allocated (was zp ZP_WORD:14) zp ZP_WORD:12 [ init_buckets::i2#2 init_buckets::i2#1 ]
-Allocated (was zp ZP_WORD:17) zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#3 ]
+Allocated (was zp ZP_WORD:17) zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
 Allocated (was zp ZP_WORD:19) zp ZP_WORD:16 [ init_buckets::i4#2 init_buckets::i4#1 ]
-Allocated (was zp ZP_WORD:21) zp ZP_WORD:18 [ heap_head#13 heap_head#1 ]
-Allocated (was zp ZP_WORD:23) zp ZP_WORD:20 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
+Allocated (was zp ZP_WORD:21) zp ZP_WORD:18 [ heap_head#18 heap_head#1 ]
+Allocated (was zp ZP_WORD:23) zp ZP_WORD:20 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
 Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:22 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
-Allocated (was zp ZP_WORD:26) zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ]
-Allocated (was zp ZP_WORD:28) zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ]
+Allocated (was zp ZP_WORD:26) zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ]
+Allocated (was zp ZP_WORD:28) zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
 Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:27 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 Allocated (was zp ZP_BYTE:31) zp ZP_BYTE:28 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
 Allocated (was zp ZP_WORD:32) zp ZP_WORD:29 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
@@ -6592,27 +7001,33 @@ Allocated (was zp ZP_WORD:37) zp ZP_WORD:33 [ atan2_16::angle#6 atan2_16::angle#
 Allocated (was zp ZP_WORD:42) zp ZP_WORD:35 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
 Allocated (was zp ZP_WORD:44) zp ZP_WORD:37 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
 Allocated (was zp ZP_BYTE:46) zp ZP_BYTE:39 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-Allocated (was zp ZP_WORD:47) zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
-Allocated (was zp ZP_WORD:49) zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
+Allocated (was zp ZP_WORD:47) zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
+Allocated (was zp ZP_WORD:49) zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
 Allocated (was zp ZP_BYTE:52) zp ZP_BYTE:44 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 Allocated (was zp ZP_BYTE:53) zp ZP_BYTE:45 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
 Allocated (was zp ZP_WORD:55) zp ZP_WORD:46 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ]
 Allocated (was zp ZP_WORD:59) zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ]
 Allocated (was zp ZP_WORD:61) zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
-Allocated (was zp ZP_WORD:65) zp ZP_WORD:52 [ main::bucket#0 ]
-Allocated (was zp ZP_BYTE:67) zp ZP_BYTE:54 [ main::bucket_size#0 ]
-Allocated (was zp ZP_WORD:69) zp ZP_WORD:55 [ main::fill#0 ]
-Allocated (was zp ZP_WORD:71) zp ZP_WORD:57 [ main::angle#0 ]
-Allocated (was zp ZP_WORD:79) zp ZP_WORD:59 [ init_buckets::$12 init_buckets::$16 ]
-Allocated (was zp ZP_WORD:84) zp ZP_WORD:61 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
-Allocated (was zp ZP_WORD:92) zp ZP_WORD:63 [ init_buckets::$10 ]
-Allocated (was zp ZP_WORD:99) zp ZP_WORD:65 [ init_angle_screen::xw#0 atan2_16::x#0 ]
-Allocated (was zp ZP_WORD:102) zp ZP_WORD:67 [ init_angle_screen::yw#0 atan2_16::y#0 ]
-Allocated (was zp ZP_BYTE:114) zp ZP_BYTE:69 [ init_angle_screen::ang_w#0 ]
-Allocated (was zp ZP_WORD:121) zp ZP_WORD:70 [ sqr::return#2 init_dist_screen::yds#0 ]
-Allocated (was zp ZP_WORD:126) zp ZP_WORD:72 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ]
-Allocated (was zp ZP_WORD:149) zp ZP_WORD:74 [ bsearch16u::pivot#0 ]
-Allocated (was zp ZP_WORD:151) zp ZP_WORD:76 [ bsearch16u::result#0 ]
+Allocated (was zp ZP_WORD:64) zp ZP_WORD:52 [ SCREEN_DIST#0 init_buckets::screen#0 ]
+Allocated (was zp ZP_WORD:66) zp ZP_WORD:54 [ SCREEN_ANGLE#0 ]
+Allocated (was zp ZP_WORD:68) zp ZP_WORD:56 [ BUCKET_SIZES#0 ]
+Allocated (was zp ZP_WORD:70) zp ZP_WORD:58 [ BUCKETS#0 ]
+Allocated (was zp ZP_WORD:72) zp ZP_WORD:60 [ BUCKET_IDX#0 ]
+Allocated (was zp ZP_WORD:79) zp ZP_WORD:62 [ main::bucket#0 ]
+Allocated (was zp ZP_BYTE:81) zp ZP_BYTE:64 [ main::bucket_size#0 ]
+Allocated (was zp ZP_WORD:83) zp ZP_WORD:65 [ main::fill#0 ]
+Allocated (was zp ZP_WORD:85) zp ZP_WORD:67 [ main::angle#0 ]
+Allocated (was zp ZP_WORD:93) zp ZP_WORD:69 [ init_buckets::$12 init_buckets::$16 ]
+Allocated (was zp ZP_BYTE:97) zp ZP_BYTE:71 [ init_buckets::distance#0 ]
+Allocated (was zp ZP_WORD:98) zp ZP_WORD:72 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
+Allocated (was zp ZP_WORD:106) zp ZP_WORD:74 [ init_buckets::$10 ]
+Allocated (was zp ZP_WORD:113) zp ZP_WORD:76 [ init_angle_screen::xw#0 atan2_16::x#0 ]
+Allocated (was zp ZP_WORD:116) zp ZP_WORD:78 [ init_angle_screen::yw#0 atan2_16::y#0 ]
+Allocated (was zp ZP_BYTE:128) zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ]
+Allocated (was zp ZP_WORD:135) zp ZP_WORD:81 [ sqr::return#2 init_dist_screen::yds#0 ]
+Allocated (was zp ZP_WORD:140) zp ZP_WORD:83 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ]
+Allocated (was zp ZP_WORD:163) zp ZP_WORD:85 [ bsearch16u::pivot#0 ]
+Allocated (was zp ZP_WORD:165) zp ZP_WORD:87 [ bsearch16u::result#0 ]
 
 ASSEMBLER BEFORE OPTIMIZATION
   // File Comments
@@ -6624,6 +7039,8 @@ ASSEMBLER BEFORE OPTIMIZATION
 .pc = $80d "Program"
   // Global Constants & labels
   .const SIZEOF_WORD = 2
+  .const SIZEOF_BYTE = 1
+  .const SIZEOF_POINTER = 2
   .label RASTER = $d012
   .label BORDERCOL = $d020
   // Color Ram
@@ -6632,7 +7049,6 @@ ASSEMBLER BEFORE OPTIMIZATION
   .label HEAP_TOP = $a000
   // The number of iterations performed during 16-bit CORDIC atan2 calculation
   .const CORDIC_ITERATIONS_16 = $f
-  // = malloc(1000);
   // Screen containing angle to center
   .label SCREEN_FILL = $400
   // Char to fill with
@@ -6642,6 +7058,18 @@ ASSEMBLER BEFORE OPTIMIZATION
   .const NUM_SQUARES = $30
   .label heap_head = $12
   .label SQUARES = $14
+  // Screen containing distance to center
+  .label SCREEN_DIST = $34
+  // Screen containing angle to center
+  .label SCREEN_ANGLE = $36
+  // Array containing the bucket size for each of the distance buckets
+  .label BUCKET_SIZES = $38
+  // Buckets containing screen indices for each distance from the center.
+  // BUCKETS[dist] is an array of words containing screen indices.
+  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
+  .label BUCKETS = $3a
+  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
+  .label BUCKET_IDX = $3c
   // @begin
 bbegin:
   // [1] phi from @begin to @1 [phi:@begin->@1]
@@ -6649,21 +7077,125 @@ b1_from_bbegin:
   jmp b1
   // @1
 b1:
-  // [2] call main 
+  // [2] call malloc 
+  // [93] phi from @1 to malloc [phi:@1->malloc]
+malloc_from_b1:
+  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 
+  lda #<HEAP_TOP
+  sta heap_head
+  lda #>HEAP_TOP
+  sta heap_head+1
+  jsr malloc
+  jmp b4
+  // @4
+b4:
+  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta SCREEN_DIST
+  lda malloc.mem+1
+  sta SCREEN_DIST+1
+  // [4] call malloc 
+  // [93] phi from @4 to malloc [phi:@4->malloc]
+malloc_from_b4:
+  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b5
+  // @5
+b5:
+  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta SCREEN_ANGLE
+  lda malloc.mem+1
+  sta SCREEN_ANGLE+1
+  // [6] phi from @5 to @2 [phi:@5->@2]
+b2_from_b5:
+  jmp b2
+  // @2
+b2:
+  // [7] call malloc 
+  // [93] phi from @2 to malloc [phi:@2->malloc]
+malloc_from_b2:
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b6
+  // @6
+b6:
+  // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKET_SIZES
+  lda malloc.mem+1
+  sta BUCKET_SIZES+1
+  // [9] call malloc 
+  // [93] phi from @6 to malloc [phi:@6->malloc]
+malloc_from_b6:
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_POINTER
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b7
+  // @7
+b7:
+  // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKETS
+  lda malloc.mem+1
+  sta BUCKETS+1
+  // [11] call malloc 
+  // [93] phi from @7 to malloc [phi:@7->malloc]
+malloc_from_b7:
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy 
+  jsr malloc
+  jmp b8
+  // @8
+b8:
+  // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKET_IDX
+  lda malloc.mem+1
+  sta BUCKET_IDX+1
+  // [13] phi from @8 to @3 [phi:@8->@3]
+b3_from_b8:
+  jmp b3
+  // @3
+b3:
+  // [14] call main 
   jsr main
-  // [3] phi from @1 to @end [phi:@1->@end]
-bend_from_b1:
+  // [15] phi from @3 to @end [phi:@3->@end]
+bend_from_b3:
   jmp bend
   // @end
 bend:
   // main
 main: {
-    .label bucket = $34
-    .label bucket_size = $36
+    .label bucket = $3e
+    .label bucket_size = $40
     .label bucket_idx = 2
     .label offset = 6
-    .label fill = $37
-    .label angle = $39
+    .label fill = $41
+    .label angle = $43
     .label min_angle = 3
     .label fill1 = 6
     .label min_offset = 6
@@ -6671,31 +7203,36 @@ main: {
     .label min_offset_7 = 4
     // asm { sei  }
     sei
-    // [5] call init_dist_screen 
-    // [155] phi from main to init_dist_screen [phi:main->init_dist_screen]
+    // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
+    lda SCREEN_DIST
+    sta init_dist_screen.screen
+    lda SCREEN_DIST+1
+    sta init_dist_screen.screen+1
+    // [18] call init_dist_screen 
+    // [171] phi from main to init_dist_screen [phi:main->init_dist_screen]
   init_dist_screen_from_main:
     jsr init_dist_screen
-    // [6] phi from main to main::@14 [phi:main->main::@14]
-  b14_from_main:
     jmp b14
     // main::@14
   b14:
-    // [7] call init_angle_screen 
-    // [82] phi from main::@14 to init_angle_screen [phi:main::@14->init_angle_screen]
-  init_angle_screen_from_b14:
+    // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
+    lda SCREEN_ANGLE
+    sta init_angle_screen.screen
+    lda SCREEN_ANGLE+1
+    sta init_angle_screen.screen+1
+    // [20] call init_angle_screen 
     jsr init_angle_screen
-    // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15]
-  b15_from_b14:
     jmp b15
     // main::@15
   b15:
-    // [9] call init_buckets 
-    // [40] phi from main::@15 to init_buckets [phi:main::@15->init_buckets]
+    // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0
+    // [22] call init_buckets 
+    // [53] phi from main::@15 to init_buckets [phi:main::@15->init_buckets]
   init_buckets_from_b15:
     jsr init_buckets
-    // [10] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
+    // [23] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
   b1_from_b15:
-    // [10] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 
+    // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 
     lda #0
     sta bucket_idx
     jmp b1
@@ -6704,58 +7241,59 @@ main: {
     jmp b2
     // main::@2
   b2:
-    // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
+    // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
     lda #$ff
     cmp RASTER
     bne b2
     jmp b3
     // main::@3
   b3:
-    // [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
+    // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
     inc BORDERCOL
-    // [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda bucket_idx
     asl
-    // [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptc1_derefidx_vbuaa 
+    // [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuaa 
     tay
-    lda BUCKETS,y
+    lda (BUCKETS),y
     sta bucket
-    lda BUCKETS+1,y
+    iny
+    lda (BUCKETS),y
     sta bucket+1
-    // [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 
+    // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 
     ldy bucket_idx
-    lda BUCKET_SIZES,y
+    lda (BUCKET_SIZES),y
     sta bucket_size
-    // [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
+    // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
     lda bucket_size
     cmp #0
     beq b4
-    // [17] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
+    // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
   b5_from_b3:
-    // [17] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 
+    // [30] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 
     lda #<$ffff
     sta min_offset_5
     lda #>$ffff
     sta min_offset_5+1
-    // [17] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 
+    // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 
     lda #$ff
     sta min_angle
-    // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 
+    // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 
     ldx #0
     jmp b5
     // main::@5
   b5:
-    // [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
-    // [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa 
+    // [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa 
     tay
     lda (bucket),y
     sta offset
     iny
     lda (bucket),y
     sta offset+1
-    // [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
+    // [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
     lda offset
     clc
     adc #<SCREEN_FILL
@@ -6763,7 +7301,7 @@ main: {
     lda offset+1
     adc #>SCREEN_FILL
     sta fill+1
-    // [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
+    // [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
     lda #FILL_CHAR
     ldy #0
     cmp (fill),y
@@ -6771,15 +7309,15 @@ main: {
     jmp b7
     // main::@7
   b7:
-    // [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
-    lda offset
+    // [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 
+    lda SCREEN_ANGLE
     clc
-    adc #<SCREEN_ANGLE
+    adc offset
     sta angle
-    lda offset+1
-    adc #>SCREEN_ANGLE
+    lda SCREEN_ANGLE+1
+    adc offset+1
     sta angle+1
-    // [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
+    // [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
     ldy #0
     lda (angle),y
     cmp min_angle
@@ -6789,28 +7327,28 @@ main: {
     jmp b8
     // main::@8
   b8:
-    // [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
+    // [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
     ldy #0
     lda (angle),y
     sta min_angle
-    // [25] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6]
+    // [38] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6]
   b6_from_b17:
   b6_from_b18:
   b6_from_b8:
-    // [25] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy 
-    // [25] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy 
+    // [38] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy 
+    // [38] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy 
     jmp b6
     // main::@6
   b6:
-    // [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
+    // [39] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuxx_lt_vbuz1_then_la1 
+    // [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuxx_lt_vbuz1_then_la1 
     cpx bucket_size
     bcc b16
     jmp b9
     // main::@9
   b9:
-    // [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
+    // [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
     lda min_offset
     cmp #<$ffff
     bne !+
@@ -6821,7 +7359,7 @@ main: {
     jmp b10
     // main::@10
   b10:
-    // [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 
+    // [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 
     clc
     lda fill1
     adc #<SCREEN_FILL
@@ -6829,58 +7367,58 @@ main: {
     lda fill1+1
     adc #>SCREEN_FILL
     sta fill1+1
-    // [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
+    // [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
     lda #FILL_CHAR
     ldy #0
     sta (fill1),y
-    // [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
-    // [10] phi from main::@10 to main::@1 [phi:main::@10->main::@1]
+    // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1]
   b1_from_b10:
     jmp b1
     // main::@4
   b4:
-    // [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
+    // [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
     inc bucket_idx
-    // [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 
+    // [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 
     lda #NUM_BUCKETS
     cmp bucket_idx
     bne b11
     jmp b12
     // main::@12
   b12:
-    // [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
     jmp b13
     // main::@13
   b13:
-    // [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
+    // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
     inc COLS+$3e7
     jmp b13
     // main::@11
   b11:
-    // [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
-    // [10] phi from main::@11 to main::@1 [phi:main::@11->main::@1]
+    // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1]
   b1_from_b11:
-    // [10] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy 
+    // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy 
     jmp b1
     // main::@16
   b16:
-    // [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
+    // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
     lda min_offset
     sta min_offset_7
     lda min_offset+1
     sta min_offset_7+1
-    // [17] phi from main::@16 to main::@5 [phi:main::@16->main::@5]
+    // [30] phi from main::@16 to main::@5 [phi:main::@16->main::@5]
   b5_from_b16:
-    // [17] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy 
-    // [17] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy 
-    // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy 
+    // [30] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy 
+    // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy 
+    // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy 
     jmp b5
     // main::@17
   b17:
-    // [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
+    // [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
     lda min_offset_5
     sta min_offset
     lda min_offset_5+1
@@ -6888,7 +7426,7 @@ main: {
     jmp b6_from_b17
     // main::@18
   b18:
-    // [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
+    // [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
     lda min_offset_5
     sta min_offset
     lda min_offset_5+1
@@ -6897,108 +7435,119 @@ main: {
 }
   // init_buckets
 // Initialize buckets containing indices of chars on the screen with specific distances to the center.
+// init_buckets(byte* zeropage($34) screen)
 init_buckets: {
     .label _5 = $14
-    .label _9 = $3d
-    .label _10 = $3f
-    .label _12 = $3b
-    .label _13 = $3d
+    .label _9 = $48
+    .label _10 = $4a
+    .label _12 = $45
+    .label _13 = $48
+    .label screen = $34
     .label dist = 8
     .label i1 = $a
     .label i2 = $c
-    .label bucket = $3d
+    .label distance = $47
+    .label bucket = $48
     .label dist_3 = $e
     .label i4 = $10
     .label dist_5 = $e
     .label _15 = $14
-    .label _16 = $3b
-    .label _17 = $3d
-    // [41] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
+    .label _16 = $45
+    .label _17 = $48
+    .label dist_8 = $e
+    // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
   b1_from_init_buckets:
-    // [41] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 
-    ldx #0
+    // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 
+    ldy #0
     jmp b1
   // Init bucket sizes to 0
-    // [41] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
+    // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
   b1_from_b1:
-    // [41] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
+    // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
     jmp b1
     // init_buckets::@1
   b1:
-    // [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
+    // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
     lda #0
-    sta BUCKET_SIZES,x
-    // [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx 
-    inx
-    // [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuxx_neq_vbuc1_then_la1 
-    cpx #NUM_BUCKETS-1+1
+    sta (BUCKET_SIZES),y
+    // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #NUM_BUCKETS-1+1
     bne b1_from_b1
-    // [45] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2]
-  b2_from_b1:
-    // [45] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 
+    jmp b2
+    // init_buckets::@2
+  b2:
+    // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
+    lda screen
+    sta dist
+    lda screen+1
+    sta dist+1
+    // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
+  b3_from_b2:
+    // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
     lda #<0
     sta i1
     lda #>0
     sta i1+1
-    // [45] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta dist
-    lda #>SCREEN_DIST
-    sta dist+1
-    jmp b2
-    // [45] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2]
-  b2_from_b2:
-    // [45] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy 
-    // [45] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy 
-    jmp b2
-    // init_buckets::@2
-  b2:
-    // [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 
+    // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
+    jmp b3
+    // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
+  b3_from_b3:
+    // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
+    // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy 
+    jmp b3
+    // init_buckets::@3
+  b3:
+    // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 
     ldy #0
     lda (dist),y
-    tax
-    inc BUCKET_SIZES,x
-    // [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
+    tay
+    lda (BUCKET_SIZES),y
+    clc
+    adc #1
+    sta (BUCKET_SIZES),y
+    // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
     inc dist
     bne !+
     inc dist+1
   !:
-    // [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
+    // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
     inc i1
     bne !+
     inc i1+1
   !:
-    // [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 
+    // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
     lda i1+1
     cmp #>$3e8
-    bne b2_from_b2
+    bne b3_from_b3
     lda i1
     cmp #<$3e8
-    bne b2_from_b2
-    // [50] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
-  b3_from_b2:
-    // [50] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
+    bne b3_from_b3
+    // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
+  b4_from_b3:
+    // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 
     lda #<0
     sta i2
     lda #>0
     sta i2+1
-    jmp b3
+    jmp b4
   // Allocate the buckets
-    // [50] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3]
-  b3_from_b6:
-    // [50] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy 
-    jmp b3
-    // init_buckets::@3
-  b3:
-    // [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 
-    lda i2
+    // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
+  b4_from_b8:
+    // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy 
+    jmp b4
+    // init_buckets::@4
+  b4:
+    // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 
+    lda BUCKET_SIZES
     clc
-    adc #<BUCKET_SIZES
+    adc i2
     sta _15
-    lda i2+1
-    adc #>BUCKET_SIZES
+    lda BUCKET_SIZES+1
+    adc i2+1
     sta _15+1
-    // [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 
+    // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 
     ldy #0
     lda (malloc.size),y
     asl
@@ -7006,111 +7555,115 @@ init_buckets: {
     lda #0
     rol
     sta malloc.size+1
-    // [53] call malloc 
-    // [78] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc]
-  malloc_from_b3:
-    // [78] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy 
-    // [78] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy 
+    // [67] call malloc 
+    // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
+  malloc_from_b4:
+    // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
+    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy 
     jsr malloc
-    jmp b6
-    // init_buckets::@6
-  b6:
-    // [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
-    // [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
+    jmp b8
+    // init_buckets::@8
+  b8:
+    // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
+    // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
     lda i2
     asl
     sta _12
     lda i2+1
     rol
     sta _12+1
-    // [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz1 
-    clc
+    // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 
     lda _16
-    adc #<BUCKETS
+    clc
+    adc BUCKETS
     sta _16
     lda _16+1
-    adc #>BUCKETS
+    adc BUCKETS+1
     sta _16+1
-    // [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
+    // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
     ldy #0
     lda _5
     sta (_16),y
     iny
     lda _5+1
     sta (_16),y
-    // [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
+    // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
     inc i2
     bne !+
     inc i2+1
   !:
-    // [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
+    // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 
     lda i2+1
     cmp #>NUM_BUCKETS-1+1
-    bne b3_from_b6
+    bne b4_from_b8
     lda i2
     cmp #<NUM_BUCKETS-1+1
-    bne b3_from_b6
-    // [60] phi from init_buckets::@6 to init_buckets::@4 [phi:init_buckets::@6->init_buckets::@4]
-  b4_from_b6:
-    // [60] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuxx=vbuc1 
-    ldx #0
-    jmp b4
+    bne b4_from_b8
+    // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
+  b5_from_b8:
+    // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 
+    ldy #0
+    jmp b5
   // Iterate all distances and fill the buckets with indices into the screens
-    // [60] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4]
-  b4_from_b4:
-    // [60] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy 
-    jmp b4
-    // init_buckets::@4
-  b4:
-    // [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
+    // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
+  b5_from_b5:
+    // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
+    jmp b5
+    // init_buckets::@5
+  b5:
+    // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
     lda #0
-    sta BUCKET_IDX,x
-    // [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx 
-    inx
-    // [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vbuxx_neq_vbuc1_then_la1 
-    cpx #NUM_BUCKETS-1+1
-    bne b4_from_b4
-    // [64] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5]
-  b5_from_b4:
-    // [64] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 
+    sta (BUCKET_IDX),y
+    // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #NUM_BUCKETS-1+1
+    bne b5_from_b5
+    jmp b6
+    // init_buckets::@6
+  b6:
+    // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
+    lda screen
+    sta dist_8
+    lda screen+1
+    sta dist_8+1
+    // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
+  b7_from_b6:
+    // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 
     lda #<0
     sta i4
     lda #>0
     sta i4+1
-    // [64] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta dist_5
-    lda #>SCREEN_DIST
-    sta dist_5+1
-    jmp b5
-    // [64] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
-  b5_from_b5:
-    // [64] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
-    // [64] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy 
-    jmp b5
-    // init_buckets::@5
-  b5:
-    // [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 
+    // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
+    jmp b7
+    // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
+  b7_from_b7:
+    // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
+    // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy 
+    jmp b7
+    // init_buckets::@7
+  b7:
+    // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
     ldy #0
     lda (dist_5),y
-    tax
-    // [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuxx 
-    txa
+    sta distance
+    // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
+    lda distance
     sta _9
     lda #0
     sta _9+1
-    // [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 
+    // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 
     asl _13
     rol _13+1
-    // [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz1 
-    clc
+    // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 
     lda _17
-    adc #<BUCKETS
+    clc
+    adc BUCKETS
     sta _17
     lda _17+1
-    adc #>BUCKETS
+    adc BUCKETS+1
     sta _17+1
-    // [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 
+    // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 
     ldy #0
     lda (bucket),y
     pha
@@ -7119,47 +7672,52 @@ init_buckets: {
     sta bucket+1
     pla
     sta bucket
-    // [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 
+    // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
     lda dist_5
     sec
-    sbc #<SCREEN_DIST
+    sbc screen
     sta _10
     lda dist_5+1
-    sbc #>SCREEN_DIST
+    sbc screen+1
     sta _10+1
-    // [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_rol_1 
-    lda BUCKET_IDX,x
+    // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 
+    ldy distance
+    lda (BUCKET_IDX),y
     asl
-    // [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 
+    // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 
     tay
     lda _10
     sta (bucket),y
     iny
     lda _10+1
     sta (bucket),y
-    // [73] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx 
-    inc BUCKET_IDX,x
-    // [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
+    // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 
+    ldy distance
+    lda (BUCKET_IDX),y
+    clc
+    adc #1
+    sta (BUCKET_IDX),y
+    // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
     inc dist_3
     bne !+
     inc dist_3+1
   !:
-    // [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
+    // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
     inc i4
     bne !+
     inc i4+1
   !:
-    // [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 
+    // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 
     lda i4+1
     cmp #>$3e8
-    bne b5_from_b5
+    bne b7_from_b7
     lda i4
     cmp #<$3e8
-    bne b5_from_b5
+    bne b7_from_b7
     jmp breturn
     // init_buckets::@return
   breturn:
-    // [77] return 
+    // [92] return 
     rts
 }
   // malloc
@@ -7169,7 +7727,7 @@ init_buckets: {
 malloc: {
     .label mem = $14
     .label size = $14
-    // [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 
+    // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 
     lda heap_head
     sec
     sbc mem
@@ -7177,7 +7735,7 @@ malloc: {
     lda heap_head+1
     sbc mem+1
     sta mem+1
-    // [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
+    // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
     lda mem
     sta heap_head
     lda mem+1
@@ -7185,91 +7743,101 @@ malloc: {
     jmp breturn
     // malloc::@return
   breturn:
-    // [81] return 
+    // [96] return 
     rts
 }
   // init_angle_screen
 // Populates 1000 bytes (a screen) with values representing the angle to the center.
 // Utilizes symmetry around the center
+// init_angle_screen(byte* zeropage($17) screen)
 init_angle_screen: {
     .label _10 = $21
-    .label xw = $41
-    .label yw = $43
-    .label angle_w = $21
-    .label ang_w = $45
-    .label x = $1b
-    .label xb = $1c
+    .label screen = $17
     .label screen_topline = $19
     .label screen_bottomline = $17
+    .label xw = $4c
+    .label yw = $4e
+    .label angle_w = $21
+    .label ang_w = $50
+    .label x = $1b
+    .label xb = $1c
     .label y = $16
-    // [83] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
-  b1_from_init_angle_screen:
-    // [83] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 
-    lda #<SCREEN_ANGLE+$28*$c
+    // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
+    lda screen
+    clc
+    adc #<$28*$c
     sta screen_topline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen+1
+    adc #>$28*$c
     sta screen_topline+1
-    // [83] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_ANGLE+$28*$c
+    // [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 
+    clc
+    lda screen_bottomline
+    adc #<$28*$c
     sta screen_bottomline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen_bottomline+1
+    adc #>$28*$c
     sta screen_bottomline+1
-    // [83] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
+    // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
+  b1_from_init_angle_screen:
+    // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
+    // [99] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
     lda #0
     sta y
     jmp b1
-    // [83] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
+    // [99] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
   b1_from_b3:
-    // [83] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy 
-    // [83] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy 
-    // [83] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy 
+    // [99] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy 
     jmp b1
     // init_angle_screen::@1
   b1:
-    // [84] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
+    // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
   b2_from_b1:
-    // [84] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
+    // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
     lda #$27
     sta xb
-    // [84] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
+    // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
     lda #0
     sta x
     jmp b2
-    // [84] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
+    // [100] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
   b2_from_b4:
-    // [84] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy 
-    // [84] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy 
+    // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy 
+    // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy 
     jmp b2
     // init_angle_screen::@2
   b2:
-    // [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda x
     asl
-    // [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa 
+    // [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa 
     eor #$ff
     clc
     adc #$27+1
-    // [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
+    // [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
     ldy #0
     sta xw+1
     sty xw
-    // [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda y
     asl
-    // [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
+    // [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
     ldy #0
     sta yw+1
     sty yw
-    // [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
-    // [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
-    // [92] call atan2_16 
+    // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
+    // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
+    // [108] call atan2_16 
     jsr atan2_16
-    // [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0
+    // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0
     jmp b4
     // init_angle_screen::@4
   b4:
-    // [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
-    // [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
+    // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
+    // [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
     lda #$80
     clc
     adc _10
@@ -7277,47 +7845,47 @@ init_angle_screen: {
     bcc !+
     inc _10+1
   !:
-    // [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 
+    // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 
     lda _10+1
     sta ang_w
-    // [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
     lda ang_w
     ldy xb
     sta (screen_bottomline),y
-    // [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
+    // [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
     lda ang_w
     eor #$ff
     clc
     adc #1
-    // [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy xb
     sta (screen_topline),y
-    // [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
+    // [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
     lda #$80
     clc
     adc ang_w
-    // [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy x
     sta (screen_topline),y
-    // [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
+    // [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
     lda #$80
     sec
     sbc ang_w
-    // [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy x
     sta (screen_bottomline),y
-    // [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
+    // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
     inc x
-    // [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
+    // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
     dec xb
-    // [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 
+    // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 
     lda x
     cmp #$13+1
     bcc b2_from_b4
     jmp b3
     // init_angle_screen::@3
   b3:
-    // [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
+    // [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
     lda screen_topline
     sec
     sbc #<$28
@@ -7325,7 +7893,7 @@ init_angle_screen: {
     lda screen_topline+1
     sbc #>$28
     sta screen_topline+1
-    // [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
+    // [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$28
     clc
     adc screen_bottomline
@@ -7333,23 +7901,23 @@ init_angle_screen: {
     bcc !+
     inc screen_bottomline+1
   !:
-    // [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 
+    // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 
     inc y
-    // [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #$d
     cmp y
     bne b1_from_b3
     jmp breturn
     // init_angle_screen::@return
   breturn:
-    // [111] return 
+    // [127] return 
     rts
 }
   // atan2_16
 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
 // Finding the angle requires a binary search using CORDIC_ITERATIONS_16
 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
-// atan2_16(signed word zeropage($41) x, signed word zeropage($43) y)
+// atan2_16(signed word zeropage($4c) x, signed word zeropage($4e) y)
 atan2_16: {
     .label _2 = $1d
     .label _7 = $1f
@@ -7359,15 +7927,15 @@ atan2_16: {
     .label xd = $25
     .label yd = $23
     .label return = $21
-    .label x = $41
-    .label y = $43
-    // [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
+    .label x = $4c
+    .label y = $4e
+    // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
     lda y+1
     bpl b1
     jmp b2
     // atan2_16::@2
   b2:
-    // [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
+    // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
     sec
     lda #0
     sbc y
@@ -7375,20 +7943,20 @@ atan2_16: {
     lda #0
     sbc y+1
     sta _2+1
-    // [114] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
+    // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
   b3_from_b1:
   b3_from_b2:
-    // [114] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy 
+    // [130] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy 
     jmp b3
     // atan2_16::@3
   b3:
-    // [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
+    // [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
     lda x+1
     bpl b4
     jmp b5
     // atan2_16::@5
   b5:
-    // [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
+    // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
     sec
     lda #0
     sbc x
@@ -7396,49 +7964,49 @@ atan2_16: {
     lda #0
     sbc x+1
     sta _7+1
-    // [117] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
+    // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
   b6_from_b4:
   b6_from_b5:
-    // [117] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy 
+    // [133] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy 
     jmp b6
     // atan2_16::@6
   b6:
-    // [118] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
+    // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
   b10_from_b6:
-    // [118] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
+    // [134] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
     lda #0
     sta angle
     lda #0
     sta angle+1
-    // [118] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
+    // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
     ldx #0
-    // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
-    // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy 
+    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
+    // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy 
     jmp b10
     // atan2_16::@10
   b10:
-    // [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
+    // [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
     lda yi+1
     bne b11
     lda yi
     bne b11
-    // [120] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
+    // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
   b12_from_b10:
   b12_from_b19:
-    // [120] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy 
+    // [136] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy 
     jmp b12
     // atan2_16::@12
   b12:
-    // [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
+    // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
     lsr angle+1
     ror angle
-    // [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
+    // [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
     lda x+1
     bpl b7_from_b12
     jmp b21
     // atan2_16::@21
   b21:
-    // [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
+    // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
     sec
     lda #<$8000
     sbc angle
@@ -7446,20 +8014,20 @@ atan2_16: {
     lda #>$8000
     sbc angle+1
     sta angle+1
-    // [124] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
+    // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
   b7_from_b12:
   b7_from_b21:
-    // [124] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy 
+    // [140] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy 
     jmp b7
     // atan2_16::@7
   b7:
-    // [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
+    // [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
     lda y+1
     bpl b8_from_b7
     jmp b9
     // atan2_16::@9
   b9:
-    // [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
+    // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
     sec
     lda #0
     sbc angle
@@ -7467,79 +8035,79 @@ atan2_16: {
     lda #0
     sbc angle+1
     sta angle+1
-    // [127] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
+    // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
   b8_from_b7:
   b8_from_b9:
-    // [127] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy 
+    // [143] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy 
     jmp b8
     // atan2_16::@8
   b8:
     jmp breturn
     // atan2_16::@return
   breturn:
-    // [128] return 
+    // [144] return 
     rts
     // atan2_16::@11
   b11:
-    // [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
+    // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
     txa
     tay
-    // [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
+    // [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
     lda xi
     sta xd
     lda xi+1
     sta xd+1
-    // [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
+    // [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
     lda yi
     sta yd
     lda yi+1
     sta yd+1
-    // [132] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
+    // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
   b13_from_b11:
   b13_from_b14:
-    // [132] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy 
-    // [132] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy 
-    // [132] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy 
+    // [148] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy 
+    // [148] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy 
+    // [148] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy 
     jmp b13
     // atan2_16::@13
   b13:
-    // [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 
+    // [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 
     cpy #2
     bcs b14
     jmp b15
     // atan2_16::@15
   b15:
-    // [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 
+    // [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 
     cpy #0
     beq b17_from_b15
     jmp b16
     // atan2_16::@16
   b16:
-    // [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
+    // [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
     lda xd+1
     cmp #$80
     ror xd+1
     ror xd
-    // [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
+    // [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
     lda yd+1
     cmp #$80
     ror yd+1
     ror yd
-    // [137] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
+    // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
   b17_from_b15:
   b17_from_b16:
-    // [137] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy 
-    // [137] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy 
+    // [153] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy 
+    // [153] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy 
     jmp b17
     // atan2_16::@17
   b17:
-    // [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
+    // [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
     lda yi+1
     bpl b18
     jmp b20
     // atan2_16::@20
   b20:
-    // [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
+    // [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
     lda xi
     sec
     sbc yd
@@ -7547,7 +8115,7 @@ atan2_16: {
     lda xi+1
     sbc yd+1
     sta xi+1
-    // [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
+    // [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
     lda yi
     clc
     adc xd
@@ -7555,10 +8123,10 @@ atan2_16: {
     lda yi+1
     adc xd+1
     sta yi+1
-    // [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
-    // [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa 
+    // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa 
     tay
     sec
     lda angle
@@ -7567,30 +8135,30 @@ atan2_16: {
     lda angle+1
     sbc CORDIC_ATAN2_ANGLES_16+1,y
     sta angle+1
-    // [143] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
+    // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
   b19_from_b18:
   b19_from_b20:
-    // [143] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy 
-    // [143] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
-    // [143] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy 
+    // [159] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy 
+    // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
+    // [159] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy 
     jmp b19
     // atan2_16::@19
   b19:
-    // [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
+    // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [145] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
+    // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
     cpx #CORDIC_ITERATIONS_16-1+1
     beq b12_from_b19
-    // [118] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
+    // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
   b10_from_b19:
-    // [118] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
-    // [118] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
-    // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
-    // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy 
+    // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
+    // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
+    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
+    // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy 
     jmp b10
     // atan2_16::@18
   b18:
-    // [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
+    // [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
     lda xi
     clc
     adc yd
@@ -7598,7 +8166,7 @@ atan2_16: {
     lda xi+1
     adc yd+1
     sta xi+1
-    // [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
+    // [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
     lda yi
     sec
     sbc xd
@@ -7606,10 +8174,10 @@ atan2_16: {
     lda yi+1
     sbc xd+1
     sta yi+1
-    // [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
-    // [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa 
+    // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa 
     tay
     clc
     lda angle
@@ -7621,7 +8189,7 @@ atan2_16: {
     jmp b19_from_b18
     // atan2_16::@14
   b14:
-    // [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
+    // [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
     lda xd+1
     cmp #$80
     ror xd+1
@@ -7630,7 +8198,7 @@ atan2_16: {
     cmp #$80
     ror xd+1
     ror xd
-    // [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
+    // [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
     lda yd+1
     cmp #$80
     ror yd+1
@@ -7639,13 +8207,13 @@ atan2_16: {
     cmp #$80
     ror yd+1
     ror yd
-    // [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
+    // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
     dey
     dey
     jmp b13_from_b14
     // atan2_16::@4
   b4:
-    // [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
+    // [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
     lda x
     sta xi
     lda x+1
@@ -7653,7 +8221,7 @@ atan2_16: {
     jmp b6_from_b4
     // atan2_16::@1
   b1:
-    // [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
+    // [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
     lda y
     sta yi
     lda y+1
@@ -7664,126 +8232,131 @@ atan2_16: {
 // Populates 1000 bytes (a screen) with values representing the distance to the center.
 // The actual value stored is distance*2 to increase precision
 // Utilizes symmetry around the center
+// init_dist_screen(byte* zeropage($28) screen)
 init_dist_screen: {
-    .label yds = $46
-    .label xds = $48
-    .label ds = $48
+    .label screen = $28
+    .label screen_bottomline = $2a
+    .label yds = $51
+    .label xds = $53
+    .label ds = $53
     .label x = $2c
     .label xb = $2d
     .label screen_topline = $28
-    .label screen_bottomline = $2a
     .label y = $27
-    // [156] call init_squares 
-    // [226] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
+    // [172] call init_squares 
+    // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
   init_squares_from_init_dist_screen:
     jsr init_squares
-    // [157] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1]
-  b1_from_init_dist_screen:
-    // [157] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST+$28*$18
+    jmp b10
+    // init_dist_screen::@10
+  b10:
+    // [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 
+    lda screen
+    clc
+    adc #<$28*$18
     sta screen_bottomline
-    lda #>SCREEN_DIST+$28*$18
+    lda screen+1
+    adc #>$28*$18
     sta screen_bottomline+1
-    // [157] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta screen_topline
-    lda #>SCREEN_DIST
-    sta screen_topline+1
-    // [157] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 
+    // [174] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1]
+  b1_from_b10:
+    // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@10->init_dist_screen::@1#0] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@10->init_dist_screen::@1#1] -- register_copy 
+    // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@1#2] -- vbuz1=vbuc1 
     lda #0
     sta y
     jmp b1
-    // [157] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
+    // [174] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
   b1_from_b9:
-    // [157] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
-    // [157] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
-    // [157] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
+    // [174] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
     jmp b1
     // init_dist_screen::@1
   b1:
-    // [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda y
     asl
-    // [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 
+    // [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 
     cmp #$18
     bcs b2
     jmp b3
     // init_dist_screen::@3
   b3:
-    // [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
+    // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
     eor #$ff
     clc
     adc #$18+1
-    // [161] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
+    // [178] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
   b4_from_b2:
   b4_from_b3:
-    // [161] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
+    // [178] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
     jmp b4
     // init_dist_screen::@4
   b4:
-    // [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
-    // [163] call sqr 
-    // [222] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
+    // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
+    // [180] call sqr 
+    // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
   sqr_from_b4:
-    // [222] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
+    // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
     jsr sqr
-    // [164] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
+    // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
     lda sqr.return
     sta sqr.return_2
     lda sqr.return+1
     sta sqr.return_2+1
-    jmp b10
-    // init_dist_screen::@10
-  b10:
-    // [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
-    // [166] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5]
-  b5_from_b10:
-    // [166] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 
+    jmp b11
+    // init_dist_screen::@11
+  b11:
+    // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
+    // [183] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5]
+  b5_from_b11:
+    // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 
     lda #$27
     sta xb
-    // [166] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 
+    // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 
     lda #0
     sta x
     jmp b5
-    // [166] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
-  b5_from_b12:
-    // [166] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy 
-    // [166] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy 
+    // [183] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5]
+  b5_from_b13:
+    // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy 
+    // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy 
     jmp b5
     // init_dist_screen::@5
   b5:
-    // [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda x
     asl
-    // [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 
+    // [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 
     cmp #$27
     bcs b6
     jmp b7
     // init_dist_screen::@7
   b7:
-    // [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
+    // [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
     eor #$ff
     clc
     adc #$27+1
-    // [170] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
+    // [187] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
   b8_from_b6:
   b8_from_b7:
-    // [170] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
+    // [187] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
     jmp b8
     // init_dist_screen::@8
   b8:
-    // [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
-    // [172] call sqr 
-    // [222] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
+    // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
+    // [189] call sqr 
+    // [239] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
   sqr_from_b8:
-    // [222] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
+    // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
     jsr sqr
-    // [173] (word) sqr::return#3 ← (word) sqr::return#0
-    jmp b11
-    // init_dist_screen::@11
-  b11:
-    // [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
-    // [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
+    // [190] (word) sqr::return#3 ← (word) sqr::return#0
+    jmp b12
+    // init_dist_screen::@12
+  b12:
+    // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
+    // [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
     lda ds
     clc
     adc yds
@@ -7791,38 +8364,38 @@ init_dist_screen: {
     lda ds+1
     adc yds+1
     sta ds+1
-    // [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
-    // [177] call sqrt 
+    // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
+    // [194] call sqrt 
     jsr sqrt
-    // [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0
-    jmp b12
-    // init_dist_screen::@12
-  b12:
-    // [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
-    // [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0
+    jmp b13
+    // init_dist_screen::@13
+  b13:
+    // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
+    // [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy x
     sta (screen_topline),y
-    // [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy x
     sta (screen_bottomline),y
-    // [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy xb
     sta (screen_topline),y
-    // [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy xb
     sta (screen_bottomline),y
-    // [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
+    // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
     inc x
-    // [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
+    // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
     dec xb
-    // [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
+    // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
     lda x
     cmp #$13+1
-    bcc b5_from_b12
+    bcc b5_from_b13
     jmp b9
     // init_dist_screen::@9
   b9:
-    // [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
+    // [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$28
     clc
     adc screen_topline
@@ -7830,7 +8403,7 @@ init_dist_screen: {
     bcc !+
     inc screen_topline+1
   !:
-    // [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
+    // [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
     lda screen_bottomline
     sec
     sbc #<$28
@@ -7838,26 +8411,26 @@ init_dist_screen: {
     lda screen_bottomline+1
     sbc #>$28
     sta screen_bottomline+1
-    // [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
+    // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
     inc y
-    // [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #$d
     cmp y
     bne b1_from_b9
     jmp breturn
     // init_dist_screen::@return
   breturn:
-    // [191] return 
+    // [208] return 
     rts
     // init_dist_screen::@6
   b6:
-    // [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
+    // [209] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
     sec
     sbc #$27
     jmp b8_from_b6
     // init_dist_screen::@2
   b2:
-    // [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 
+    // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 
     sec
     sbc #$18
     jmp b4_from_b2
@@ -7866,28 +8439,28 @@ init_dist_screen: {
 // Find the (integer) square root of a word value
 // If the square is not an integer then it returns the largest integer N where N*N <= val
 // Uses a table of squares that must be initialized by calling init_squares()
-// sqrt(word zeropage($48) val)
+// sqrt(word zeropage($53) val)
 sqrt: {
     .label _1 = $2e
     .label _3 = $2e
     .label found = $2e
-    .label val = $48
-    // [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0
-    // [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
+    .label val = $53
+    // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0
+    // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
     lda SQUARES
     sta bsearch16u.items
     lda SQUARES+1
     sta bsearch16u.items+1
-    // [196] call bsearch16u 
-    // [203] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
+    // [213] call bsearch16u 
+    // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
   bsearch16u_from_sqrt:
     jsr bsearch16u
-    // [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
+    // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
     jmp b1
     // sqrt::@1
   b1:
-    // [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
-    // [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 
+    // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
+    // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 
     lda _3
     sec
     sbc SQUARES
@@ -7895,15 +8468,15 @@ sqrt: {
     lda _3+1
     sbc SQUARES+1
     sta _3+1
-    // [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
+    // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
     lsr _1+1
     ror _1
-    // [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
+    // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
     lda _1
     jmp breturn
     // sqrt::@return
   breturn:
-    // [202] return 
+    // [219] return 
     rts
 }
   // bsearch16u
@@ -7912,29 +8485,29 @@ sqrt: {
 // - items - Pointer to the start of the array to search in
 // - num - The number of items in the array
 // Returns pointer to an entry in the array that matches the search key
-// bsearch16u(word zeropage($48) key, word* zeropage($2e) items, byte register(X) num)
+// bsearch16u(word zeropage($53) key, word* zeropage($2e) items, byte register(X) num)
 bsearch16u: {
     .label _2 = $2e
-    .label pivot = $4a
-    .label result = $4c
+    .label pivot = $55
+    .label result = $57
     .label return = $2e
     .label items = $2e
-    .label key = $48
-    // [204] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
+    .label key = $53
+    // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
   b3_from_bsearch16u:
-    // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
-    // [204] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
+    // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
+    // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
     ldx #NUM_SQUARES
     jmp b3
     // bsearch16u::@3
   b3:
-    // [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
+    // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
     cpx #0
     bne b4
     jmp b5
     // bsearch16u::@5
   b5:
-    // [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
+    // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
     ldy #1
     lda (items),y
     cmp key+1
@@ -7948,7 +8521,7 @@ bsearch16u: {
     jmp b1
     // bsearch16u::@1
   b1:
-    // [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
+    // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
     lda _2
     sec
     sbc #<1*SIZEOF_WORD
@@ -7956,37 +8529,37 @@ bsearch16u: {
     lda _2+1
     sbc #>1*SIZEOF_WORD
     sta _2+1
-    // [208] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
+    // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
   b2_from_b1:
   b2_from_b5:
-    // [208] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
+    // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
     jmp b2
     // bsearch16u::@2
   b2:
-    // [209] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
+    // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
   breturn_from_b2:
   breturn_from_b8:
-    // [209] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
+    // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
     jmp breturn
     // bsearch16u::@return
   breturn:
-    // [210] return 
+    // [227] return 
     rts
     // bsearch16u::@4
   b4:
-    // [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
+    // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
     txa
     lsr
-    // [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
+    // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
     asl
-    // [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
+    // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
     clc
     adc items
     sta pivot
     lda #0
     adc items+1
     sta pivot+1
-    // [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
+    // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
     sec
     lda key
     ldy #0
@@ -7996,7 +8569,7 @@ bsearch16u: {
     iny
     sbc (pivot),y
     sta result+1
-    // [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
+    // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
     lda result+1
     bne b6
     lda result
@@ -8004,7 +8577,7 @@ bsearch16u: {
     jmp b8
     // bsearch16u::@8
   b8:
-    // [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
+    // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
     lda pivot
     sta return
     lda pivot+1
@@ -8012,7 +8585,7 @@ bsearch16u: {
     jmp breturn_from_b8
     // bsearch16u::@6
   b6:
-    // [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
+    // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
     lda result+1
     bmi b7_from_b6
     bne !+
@@ -8022,7 +8595,7 @@ bsearch16u: {
     jmp b9
     // bsearch16u::@9
   b9:
-    // [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
+    // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
     lda #1*SIZEOF_WORD
     clc
     adc pivot
@@ -8030,24 +8603,24 @@ bsearch16u: {
     lda #0
     adc pivot+1
     sta items+1
-    // [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
+    // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
     dex
-    // [220] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
+    // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
   b7_from_b6:
   b7_from_b9:
-    // [220] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
-    // [220] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
+    // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
+    // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
     jmp b7
     // bsearch16u::@7
   b7:
-    // [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
+    // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
     txa
     lsr
     tax
-    // [204] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
+    // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
   b3_from_b7:
-    // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
-    // [204] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
+    // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
+    // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
     jmp b3
 }
   // sqr
@@ -8055,11 +8628,11 @@ bsearch16u: {
 // Uses a table of squares that must be initialized by calling init_squares()
 // sqr(byte register(A) val)
 sqr: {
-    .label return = $48
-    .label return_2 = $46
-    // [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
+    .label return = $53
+    .label return_2 = $51
+    // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
     asl
-    // [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa 
+    // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa 
     tay
     lda (SQUARES),y
     sta return
@@ -8069,7 +8642,7 @@ sqr: {
     jmp breturn
     // sqr::@return
   breturn:
-    // [225] return 
+    // [242] return 
     rts
 }
   // init_squares
@@ -8078,56 +8651,52 @@ sqr: {
 init_squares: {
     .label squares = $32
     .label sqr = $30
-    // [227] call malloc 
-    // [78] phi from init_squares to malloc [phi:init_squares->malloc]
+    // [244] call malloc 
+    // [93] phi from init_squares to malloc [phi:init_squares->malloc]
   malloc_from_init_squares:
-    // [78] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
+    // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
     lda #NUM_SQUARES*SIZEOF_WORD
     sta malloc.size
     lda #0
     sta malloc.size+1
-    // [78] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 
-    lda #<HEAP_TOP
-    sta heap_head
-    lda #>HEAP_TOP
-    sta heap_head+1
+    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
     jsr malloc
     jmp b2
     // init_squares::@2
   b2:
-    // [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
-    // [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
+    // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
+    // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
     lda SQUARES
     sta squares
     lda SQUARES+1
     sta squares+1
-    // [230] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
+    // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
   b1_from_b2:
-    // [230] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 
+    // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 
     ldx #0
-    // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
-    // [230] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 
+    // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
+    // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 
     lda #0
     sta sqr
     lda #0
     sta sqr+1
     jmp b1
-    // [230] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
+    // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
   b1_from_b1:
-    // [230] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
-    // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
-    // [230] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
+    // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
+    // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
+    // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
     jmp b1
     // init_squares::@1
   b1:
-    // [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
+    // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
     ldy #0
     lda sqr
     sta (squares),y
     iny
     lda sqr+1
     sta (squares),y
-    // [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
+    // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
     lda #SIZEOF_WORD
     clc
     adc squares
@@ -8135,52 +8704,46 @@ init_squares: {
     bcc !+
     inc squares+1
   !:
-    // [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
-    // [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
+    // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
     clc
     adc #1
-    // [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
+    // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
     clc
     adc sqr
     sta sqr
     bcc !+
     inc sqr+1
   !:
-    // [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
+    // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 
+    // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 
     cpx #NUM_SQUARES-1+1
     bne b1_from_b1
     jmp breturn
     // init_squares::@return
   breturn:
-    // [238] return 
+    // [255] return 
     rts
 }
   // File Data
-  // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
+// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
 CORDIC_ATAN2_ANGLES_16:
 .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
         .word 256*2*256*atan(1/pow(2,i))/PI/2
 
-  // Screen containing distance to center
-  SCREEN_DIST: .fill $3e8, 0
-  // = malloc(1000);
-  // Screen containing angle to center
-  SCREEN_ANGLE: .fill $3e8, 0
-  // Array containing the bucket size for each of the distance buckets
-  BUCKET_SIZES: .fill NUM_BUCKETS, 0
-  // Buckets containing screen indices for each distance from the center.
-  // BUCKETS[dist] is an array of words containing screen indices.
-  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
-  BUCKETS: .fill 2*NUM_BUCKETS, 0
-  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
-  BUCKET_IDX: .fill NUM_BUCKETS, 0
 
 ASSEMBLER OPTIMIZATIONS
 Removing instruction jmp b1
+Removing instruction jmp b4
+Removing instruction jmp b5
+Removing instruction jmp b2
+Removing instruction jmp b6
+Removing instruction jmp b7
+Removing instruction jmp b8
+Removing instruction jmp b3
 Removing instruction jmp bend
 Removing instruction jmp b14
 Removing instruction jmp b15
@@ -8198,9 +8761,11 @@ Removing instruction jmp b13
 Removing instruction jmp b1
 Removing instruction jmp b2
 Removing instruction jmp b3
-Removing instruction jmp b6
 Removing instruction jmp b4
+Removing instruction jmp b8
 Removing instruction jmp b5
+Removing instruction jmp b6
+Removing instruction jmp b7
 Removing instruction jmp breturn
 Removing instruction jmp breturn
 Removing instruction jmp b1
@@ -8225,15 +8790,16 @@ Removing instruction jmp b16
 Removing instruction jmp b17
 Removing instruction jmp b20
 Removing instruction jmp b19
+Removing instruction jmp b10
 Removing instruction jmp b1
 Removing instruction jmp b3
 Removing instruction jmp b4
-Removing instruction jmp b10
+Removing instruction jmp b11
 Removing instruction jmp b5
 Removing instruction jmp b7
 Removing instruction jmp b8
-Removing instruction jmp b11
 Removing instruction jmp b12
+Removing instruction jmp b13
 Removing instruction jmp b9
 Removing instruction jmp breturn
 Removing instruction jmp b1
@@ -8256,6 +8822,7 @@ Removing instruction lda #>0
 Removing instruction lda #>0
 Replacing instruction lda #0 with TYA
 Removing instruction lda #>0
+Removing instruction lda distance
 Replacing instruction lda #0 with TYA
 Removing instruction ldy #0
 Removing instruction ldy #0
@@ -8276,13 +8843,13 @@ Replacing label b1 with b2
 Replacing label b6_from_b17 with b6
 Replacing label b6_from_b18 with b6
 Replacing label b1_from_b1 with b1
-Replacing label b2_from_b2 with b2
-Replacing label b2_from_b2 with b2
-Replacing label b3_from_b6 with b3
-Replacing label b3_from_b6 with b3
-Replacing label b4_from_b4 with b4
-Replacing label b5_from_b5 with b5
+Replacing label b3_from_b3 with b3
+Replacing label b3_from_b3 with b3
+Replacing label b4_from_b8 with b4
+Replacing label b4_from_b8 with b4
 Replacing label b5_from_b5 with b5
+Replacing label b7_from_b7 with b7
+Replacing label b7_from_b7 with b7
 Replacing label b2_from_b4 with b2
 Replacing label b1_from_b3 with b1
 Replacing label b7_from_b12 with b7
@@ -8293,7 +8860,7 @@ Replacing label b19_from_b18 with b19
 Replacing label b13_from_b14 with b13
 Replacing label b6_from_b4 with b6
 Replacing label b3_from_b1 with b3
-Replacing label b5_from_b12 with b5
+Replacing label b5_from_b13 with b5
 Replacing label b1_from_b9 with b1
 Replacing label b8_from_b6 with b8
 Replacing label b4_from_b2 with b4
@@ -8305,20 +8872,21 @@ Replacing label b7_from_b6 with b7
 Replacing label b1_from_b1 with b1
 Removing instruction b1_from_bbegin:
 Removing instruction b1:
-Removing instruction bend_from_b1:
-Removing instruction b14_from_main:
-Removing instruction init_angle_screen_from_b14:
-Removing instruction b15_from_b14:
+Removing instruction malloc_from_b1:
+Removing instruction b2_from_b5:
+Removing instruction malloc_from_b2:
+Removing instruction b3_from_b8:
+Removing instruction bend_from_b3:
 Removing instruction init_buckets_from_b15:
 Removing instruction b1:
 Removing instruction b6_from_b17:
 Removing instruction b6_from_b18:
 Removing instruction b6_from_b8:
 Removing instruction b1_from_b1:
-Removing instruction b2_from_b2:
-Removing instruction b3_from_b6:
-Removing instruction b4_from_b4:
+Removing instruction b3_from_b3:
+Removing instruction b4_from_b8:
 Removing instruction b5_from_b5:
+Removing instruction b7_from_b7:
 Removing instruction b1_from_b3:
 Removing instruction b2_from_b1:
 Removing instruction b2_from_b4:
@@ -8344,8 +8912,8 @@ Removing instruction b1_from_b9:
 Removing instruction b4_from_b2:
 Removing instruction b4_from_b3:
 Removing instruction sqr_from_b4:
-Removing instruction b5_from_b10:
-Removing instruction b5_from_b12:
+Removing instruction b5_from_b11:
+Removing instruction b5_from_b13:
 Removing instruction b8_from_b6:
 Removing instruction b8_from_b7:
 Removing instruction sqr_from_b8:
@@ -8358,6 +8926,16 @@ Removing instruction b7_from_b6:
 Removing instruction b7_from_b9:
 Removing instruction b1_from_b1:
 Succesful ASM optimization Pass5RedundantLabelElimination
+Removing instruction b4:
+Removing instruction malloc_from_b4:
+Removing instruction b5:
+Removing instruction b2:
+Removing instruction b6:
+Removing instruction malloc_from_b6:
+Removing instruction b7:
+Removing instruction malloc_from_b7:
+Removing instruction b8:
+Removing instruction b3:
 Removing instruction bend:
 Removing instruction init_dist_screen_from_main:
 Removing instruction b14:
@@ -8374,12 +8952,14 @@ Removing instruction b12:
 Removing instruction b1_from_b11:
 Removing instruction b5_from_b16:
 Removing instruction b1_from_init_buckets:
-Removing instruction b2_from_b1:
+Removing instruction b2:
 Removing instruction b3_from_b2:
-Removing instruction malloc_from_b3:
+Removing instruction b4_from_b3:
+Removing instruction malloc_from_b4:
+Removing instruction b8:
+Removing instruction b5_from_b8:
 Removing instruction b6:
-Removing instruction b4_from_b6:
-Removing instruction b5_from_b4:
+Removing instruction b7_from_b6:
 Removing instruction breturn:
 Removing instruction breturn:
 Removing instruction b1_from_init_angle_screen:
@@ -8395,12 +8975,13 @@ Removing instruction b16:
 Removing instruction b20:
 Removing instruction b10_from_b19:
 Removing instruction init_squares_from_init_dist_screen:
-Removing instruction b1_from_init_dist_screen:
-Removing instruction b3:
 Removing instruction b10:
-Removing instruction b7:
+Removing instruction b1_from_b10:
+Removing instruction b3:
 Removing instruction b11:
+Removing instruction b7:
 Removing instruction b12:
+Removing instruction b13:
 Removing instruction b9:
 Removing instruction breturn:
 Removing instruction bsearch16u_from_sqrt:
@@ -8418,16 +8999,15 @@ Removing instruction b2:
 Removing instruction b1_from_b2:
 Removing instruction breturn:
 Succesful ASM optimization Pass5UnusedLabelElimination
-Updating BasicUpstart to call main directly
-Removing instruction jsr main
-Succesful ASM optimization Pass5SkipBegin
 Replacing jump to rts with rts in jmp b2
 Succesful ASM optimization Pass5DoubleJumpElimination
+Adding RTS to root block 
+Succesful ASM optimization Pass5AddMainRts
 Removing instruction jmp b1
-Removing instruction jmp b2
 Removing instruction jmp b3
 Removing instruction jmp b4
 Removing instruction jmp b5
+Removing instruction jmp b7
 Removing instruction jmp b1
 Removing instruction jmp b2
 Removing instruction jmp b1
@@ -8435,27 +9015,30 @@ Removing instruction jmp b5
 Removing instruction jmp b1
 Succesful ASM optimization Pass5NextJumpElimination
 Removing instruction ldy #0
-Removing instruction lda #<0
-Removing instruction lda #<0
 Succesful ASM optimization Pass5UnnecesaryLoadElimination
-Removing instruction bbegin:
-Succesful ASM optimization Pass5UnusedLabelElimination
-Fixing long branch [556] beq b12 to bne
-Fixing long branch [450] bpl b1 to bmi
-Fixing long branch [462] bpl b4 to bmi
+Fixing long branch [651] beq b12 to bne
+Fixing long branch [545] bpl b1 to bmi
+Fixing long branch [557] bpl b4 to bmi
 
 FINAL SYMBOL TABLE
 (label) @1
+(label) @2
+(label) @3
+(label) @4
+(label) @5
+(label) @6
+(label) @7
+(label) @8
 (label) @begin
 (label) @end
 (byte*) BORDERCOL
 (const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280
-(word*[NUM_BUCKETS#0]) BUCKETS
-(const word*[NUM_BUCKETS#0]) BUCKETS#0 BUCKETS = { fill( NUM_BUCKETS#0, 0) }
-(byte[NUM_BUCKETS#0]) BUCKET_IDX
-(const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 BUCKET_IDX = { fill( NUM_BUCKETS#0, 0) }
-(byte[NUM_BUCKETS#0]) BUCKET_SIZES
-(const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 BUCKET_SIZES = { fill( NUM_BUCKETS#0, 0) }
+(word*[]) BUCKETS
+(void*) BUCKETS#0 BUCKETS zp ZP_WORD:58 0.02531645569620253
+(byte[]) BUCKET_IDX
+(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:60 0.0425531914893617
+(byte[]) BUCKET_SIZES
+(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:56 0.024691358024691357
 (byte*) COLS
 (const byte*) COLS#0 COLS = (byte*) 55296
 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
@@ -8474,15 +9057,17 @@ FINAL SYMBOL TABLE
 (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30
 (byte*) RASTER
 (const byte*) RASTER#0 RASTER = (byte*) 53266
-(byte[$3e8]) SCREEN_ANGLE
-(const byte[$3e8]) SCREEN_ANGLE#0 SCREEN_ANGLE = { fill( $3e8, 0) }
-(byte[$3e8]) SCREEN_DIST
-(const byte[$3e8]) SCREEN_DIST#0 SCREEN_DIST = { fill( $3e8, 0) }
+(byte[]) SCREEN_ANGLE
+(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:54 0.045454545454545456
+(byte[]) SCREEN_DIST
+(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:52 0.125
 (byte*) SCREEN_FILL
 (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024
+(const byte) SIZEOF_BYTE SIZEOF_BYTE = (byte) 1
+(const byte) SIZEOF_POINTER SIZEOF_POINTER = (byte) 2
 (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2
 (word*) SQUARES
-(void*) SQUARES#1 SQUARES zp ZP_WORD:20 0.03278688524590164
+(void*) SQUARES#1 SQUARES zp ZP_WORD:20 0.03225806451612903
 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
 (signed word~) atan2_16::$2 $2 zp ZP_WORD:29 4.0
 (byte~) atan2_16::$23 reg byte a 2002.0
@@ -8531,7 +9116,7 @@ FINAL SYMBOL TABLE
 (byte) atan2_16::shift#2 reg byte y 8001.25
 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334
 (signed word) atan2_16::x
-(signed word) atan2_16::x#0 x zp ZP_WORD:65 2.8684210526315796
+(signed word) atan2_16::x#0 x zp ZP_WORD:76 2.8684210526315796
 (signed word) atan2_16::xd
 (signed word) atan2_16::xd#1 xd zp ZP_WORD:37 6667.333333333333
 (signed word~) atan2_16::xd#10 xd zp ZP_WORD:37 1001.0
@@ -8546,7 +9131,7 @@ FINAL SYMBOL TABLE
 (signed word) atan2_16::xi#3 xi zp ZP_WORD:31 267.0666666666667
 (signed word) atan2_16::xi#8 xi zp ZP_WORD:31 1001.0
 (signed word) atan2_16::y
-(signed word) atan2_16::y#0 y zp ZP_WORD:67 2.724999999999999
+(signed word) atan2_16::y#0 y zp ZP_WORD:78 2.724999999999999
 (signed word) atan2_16::yd
 (signed word) atan2_16::yd#1 yd zp ZP_WORD:35 10001.0
 (signed word~) atan2_16::yd#10 yd zp ZP_WORD:35 2002.0
@@ -8580,24 +9165,24 @@ FINAL SYMBOL TABLE
 (word*) bsearch16u::items#2 items zp ZP_WORD:46 334.5555555555556
 (word*) bsearch16u::items#8 items zp ZP_WORD:46 1501.5
 (word) bsearch16u::key
-(word) bsearch16u::key#0 key zp ZP_WORD:72 0.26666666666666666
+(word) bsearch16u::key#0 key zp ZP_WORD:83 0.26666666666666666
 (byte) bsearch16u::num
 (byte) bsearch16u::num#0 reg byte x 2002.0
 (byte) bsearch16u::num#1 reg byte x 2002.0
 (byte) bsearch16u::num#3 reg byte x 556.1111111111111
 (byte) bsearch16u::num#5 reg byte x 3003.0
 (word*) bsearch16u::pivot
-(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:74 501.0
+(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:85 501.0
 (signed word) bsearch16u::result
-(signed word) bsearch16u::result#0 result zp ZP_WORD:76 1501.5
+(signed word) bsearch16u::result#0 result zp ZP_WORD:87 1501.5
 (word*) bsearch16u::return
 (word*) bsearch16u::return#1 return zp ZP_WORD:46 2.0
 (word*) bsearch16u::return#2 return zp ZP_WORD:46 6.0
 (word*) bsearch16u::return#3 return zp ZP_WORD:46 4.0
 (word*~) bsearch16u::return#6 return zp ZP_WORD:46 4.0
 (byte*) heap_head
-(byte*) heap_head#1 heap_head zp ZP_WORD:18 0.17105263157894737
-(byte*) heap_head#13 heap_head zp ZP_WORD:18 13.0
+(byte*) heap_head#1 heap_head zp ZP_WORD:18 0.2446808510638298
+(byte*) heap_head#18 heap_head zp ZP_WORD:18 23.0
 (void()) init_angle_screen((byte*) init_angle_screen::screen)
 (word~) init_angle_screen::$10 $10 zp ZP_WORD:33 202.0
 (byte~) init_angle_screen::$12 reg byte a 202.0
@@ -8612,16 +9197,19 @@ FINAL SYMBOL TABLE
 (label) init_angle_screen::@4
 (label) init_angle_screen::@return
 (byte) init_angle_screen::ang_w
-(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:69 84.16666666666666
+(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:80 84.16666666666666
 (word) init_angle_screen::angle_w
 (word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:33 202.0
 (byte*) init_angle_screen::screen
+(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:23 3.0
 (byte*) init_angle_screen::screen_bottomline
+(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:23 4.0
 (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:23 7.333333333333333
-(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:23 8.959999999999999
+(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:23 9.040000000000001
 (byte*) init_angle_screen::screen_topline
+(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:25 2.0
 (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:25 5.5
-(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:25 9.333333333333334
+(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:25 9.416666666666666
 (byte) init_angle_screen::x
 (byte) init_angle_screen::x#1 x zp ZP_BYTE:27 101.0
 (byte) init_angle_screen::x#2 x zp ZP_BYTE:27 25.25
@@ -8629,41 +9217,45 @@ FINAL SYMBOL TABLE
 (byte) init_angle_screen::xb#1 xb zp ZP_BYTE:28 101.0
 (byte) init_angle_screen::xb#2 xb zp ZP_BYTE:28 19.238095238095237
 (signed word) init_angle_screen::xw
-(word) init_angle_screen::xw#0 xw zp ZP_WORD:65 33.666666666666664
+(word) init_angle_screen::xw#0 xw zp ZP_WORD:76 33.666666666666664
 (byte) init_angle_screen::y
 (byte) init_angle_screen::y#1 y zp ZP_BYTE:22 16.5
 (byte) init_angle_screen::y#4 y zp ZP_BYTE:22 4.730769230769231
 (signed word) init_angle_screen::yw
-(word) init_angle_screen::yw#0 yw zp ZP_WORD:67 50.5
+(word) init_angle_screen::yw#0 yw zp ZP_WORD:78 50.5
 (void()) init_buckets((byte*) init_buckets::screen)
-(word~) init_buckets::$10 $10 zp ZP_WORD:63 11.0
-(word~) init_buckets::$12 $12 zp ZP_WORD:59 22.0
-(word~) init_buckets::$13 $13 zp ZP_WORD:61 22.0
+(word~) init_buckets::$10 $10 zp ZP_WORD:74 11.0
+(word~) init_buckets::$12 $12 zp ZP_WORD:69 22.0
+(word~) init_buckets::$13 $13 zp ZP_WORD:72 22.0
 (byte~) init_buckets::$14 reg byte a 22.0
 (byte*~) init_buckets::$15 $15 zp ZP_WORD:20 22.0
-(word**~) init_buckets::$16 $16 zp ZP_WORD:59 22.0
-(word**~) init_buckets::$17 $17 zp ZP_WORD:61 22.0
+(word**~) init_buckets::$16 $16 zp ZP_WORD:69 22.0
+(word**~) init_buckets::$17 $17 zp ZP_WORD:72 22.0
 (void*~) init_buckets::$5 $5 zp ZP_WORD:20 3.6666666666666665
-(word~) init_buckets::$9 $9 zp ZP_WORD:61 22.0
+(word~) init_buckets::$9 $9 zp ZP_WORD:72 22.0
 (label) init_buckets::@1
 (label) init_buckets::@2
 (label) init_buckets::@3
 (label) init_buckets::@4
 (label) init_buckets::@5
 (label) init_buckets::@6
+(label) init_buckets::@7
+(label) init_buckets::@8
 (label) init_buckets::@return
 (word*) init_buckets::bucket
-(word*) init_buckets::bucket#0 bucket zp ZP_WORD:61 7.333333333333333
+(word*) init_buckets::bucket#0 bucket zp ZP_WORD:72 7.333333333333333
 (byte*) init_buckets::dist
 (byte*) init_buckets::dist#1 dist zp ZP_WORD:8 7.333333333333333
 (byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:14 7.333333333333333
-(byte*) init_buckets::dist#4 dist zp ZP_WORD:8 22.0
-(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:14 4.4
+(byte*) init_buckets::dist#4 dist zp ZP_WORD:8 23.0
+(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:14 4.6000000000000005
+(byte*~) init_buckets::dist#6 dist zp ZP_WORD:8 4.0
+(byte*~) init_buckets::dist#8 dist#8 zp ZP_WORD:14 4.0
 (byte) init_buckets::distance
-(byte) init_buckets::distance#0 reg byte x 5.5
+(byte) init_buckets::distance#0 distance zp ZP_BYTE:71 5.5
 (byte) init_buckets::i
-(byte) init_buckets::i#1 reg byte x 16.5
-(byte) init_buckets::i#2 reg byte x 16.5
+(byte) init_buckets::i#1 reg byte y 16.5
+(byte) init_buckets::i#2 reg byte y 16.5
 (word) init_buckets::i1
 (word) init_buckets::i1#1 i1 zp ZP_WORD:10 16.5
 (word) init_buckets::i1#2 i1 zp ZP_WORD:10 7.333333333333333
@@ -8671,12 +9263,13 @@ FINAL SYMBOL TABLE
 (word) init_buckets::i2#1 i2 zp ZP_WORD:12 16.5
 (word) init_buckets::i2#2 i2 zp ZP_WORD:12 5.5
 (byte) init_buckets::i3
-(byte) init_buckets::i3#1 reg byte x 16.5
-(byte) init_buckets::i3#2 reg byte x 16.5
+(byte) init_buckets::i3#1 reg byte y 16.5
+(byte) init_buckets::i3#2 reg byte y 16.5
 (word) init_buckets::i4
 (word) init_buckets::i4#1 i4 zp ZP_WORD:16 16.5
 (word) init_buckets::i4#2 i4 zp ZP_WORD:16 2.0
 (byte*) init_buckets::screen
+(byte*) init_buckets::screen#0 screen zp ZP_WORD:52 0.42500000000000004
 (void()) init_dist_screen((byte*) init_dist_screen::screen)
 (byte~) init_dist_screen::$13 reg byte a 202.0
 (byte~) init_dist_screen::$15 reg byte a 202.0
@@ -8686,6 +9279,7 @@ FINAL SYMBOL TABLE
 (label) init_dist_screen::@10
 (label) init_dist_screen::@11
 (label) init_dist_screen::@12
+(label) init_dist_screen::@13
 (label) init_dist_screen::@2
 (label) init_dist_screen::@3
 (label) init_dist_screen::@4
@@ -8698,14 +9292,16 @@ FINAL SYMBOL TABLE
 (byte) init_dist_screen::d
 (byte) init_dist_screen::d#0 reg byte a 126.25
 (word) init_dist_screen::ds
-(word) init_dist_screen::ds#0 ds zp ZP_WORD:72 202.0
+(word) init_dist_screen::ds#0 ds zp ZP_WORD:83 202.0
 (byte*) init_dist_screen::screen
+(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:40 1.5
 (byte*) init_dist_screen::screen_bottomline
+(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:42 4.0
 (byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:42 7.333333333333333
-(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:42 6.787878787878788
+(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:42 6.848484848484849
 (byte*) init_dist_screen::screen_topline
 (byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:40 5.5
-(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:40 7.0
+(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:40 7.0625
 (byte) init_dist_screen::x
 (byte) init_dist_screen::x#1 x zp ZP_BYTE:44 101.0
 (byte) init_dist_screen::x#2 x zp ZP_BYTE:44 26.578947368421055
@@ -8717,7 +9313,7 @@ FINAL SYMBOL TABLE
 (byte) init_dist_screen::xd
 (byte) init_dist_screen::xd#0 reg byte a 303.0
 (word) init_dist_screen::xds
-(word) init_dist_screen::xds#0 xds zp ZP_WORD:72 202.0
+(word) init_dist_screen::xds#0 xds zp ZP_WORD:83 202.0
 (byte) init_dist_screen::y
 (byte) init_dist_screen::y#1 y zp ZP_BYTE:39 16.5
 (byte) init_dist_screen::y#10 y zp ZP_BYTE:39 0.9705882352941178
@@ -8726,7 +9322,7 @@ FINAL SYMBOL TABLE
 (byte) init_dist_screen::yd
 (byte) init_dist_screen::yd#0 reg byte a 33.0
 (word) init_dist_screen::yds
-(word) init_dist_screen::yds#0 yds zp ZP_WORD:70 4.869565217391305
+(word) init_dist_screen::yds#0 yds zp ZP_WORD:81 4.869565217391305
 (void()) init_squares()
 (byte~) init_squares::$3 reg byte a 22.0
 (byte~) init_squares::$4 reg byte a 22.0
@@ -8765,16 +9361,16 @@ FINAL SYMBOL TABLE
 (label) main::@8
 (label) main::@9
 (byte*) main::angle
-(byte*) main::angle#0 angle zp ZP_WORD:57 151.5
+(byte*) main::angle#0 angle zp ZP_WORD:67 151.5
 (word[]) main::bucket
-(word[]) main::bucket#0 bucket zp ZP_WORD:52 6.588235294117648
+(word[]) main::bucket#0 bucket zp ZP_WORD:62 6.588235294117648
 (byte) main::bucket_idx
 (byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:2 11.0
 (byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 2.0
 (byte) main::bucket_size
-(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:54 7.6875
+(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:64 7.6875
 (byte*) main::fill
-(byte*) main::fill#0 fill zp ZP_WORD:55 202.0
+(byte*) main::fill#0 fill zp ZP_WORD:65 202.0
 (byte*) main::fill1
 (byte*) main::fill1#0 fill1 zp ZP_WORD:6 22.0
 (byte) main::i
@@ -8795,18 +9391,18 @@ FINAL SYMBOL TABLE
 (void*()) malloc((word) malloc::size)
 (label) malloc::@return
 (byte*) malloc::mem
-(byte*) malloc::mem#0 mem zp ZP_WORD:20 0.8
+(byte*) malloc::mem#0 mem zp ZP_WORD:20 0.4
 (void*) malloc::return
 (word) malloc::size
-(word) malloc::size#1 size zp ZP_WORD:20 22.0
-(word) malloc::size#2 size zp ZP_WORD:20 13.0
+(word) malloc::size#6 size zp ZP_WORD:20 22.0
+(word) malloc::size#7 size zp ZP_WORD:20 13.0
 (word()) sqr((byte) sqr::val)
 (byte~) sqr::$0 reg byte a 4.0
 (label) sqr::@return
 (word) sqr::return
-(word) sqr::return#0 return zp ZP_WORD:72 28.5
-(word) sqr::return#2 return#2 zp ZP_WORD:70 22.0
-(word) sqr::return#3 return zp ZP_WORD:72 202.0
+(word) sqr::return#0 return zp ZP_WORD:83 28.5
+(word) sqr::return#2 return#2 zp ZP_WORD:81 22.0
+(word) sqr::return#3 return zp ZP_WORD:83 202.0
 (byte) sqr::val
 (byte) sqr::val#0 reg byte a 22.0
 (byte) sqr::val#1 reg byte a 202.0
@@ -8823,25 +9419,25 @@ FINAL SYMBOL TABLE
 (byte) sqrt::return#2 reg byte a 202.0
 (byte) sqrt::sq
 (word) sqrt::val
-(word) sqrt::val#0 val zp ZP_WORD:72 103.0
+(word) sqrt::val#0 val zp ZP_WORD:83 103.0
 
 zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
 reg byte x [ main::i#2 main::i#1 ]
 zp ZP_BYTE:3 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ]
 zp ZP_WORD:4 [ main::min_offset#5 main::min_offset#7 ]
 zp ZP_WORD:6 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 main::fill1#0 ]
-reg byte x [ init_buckets::i#2 init_buckets::i#1 ]
-zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#1 ]
+reg byte y [ init_buckets::i#2 init_buckets::i#1 ]
+zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
 zp ZP_WORD:10 [ init_buckets::i1#2 init_buckets::i1#1 ]
 zp ZP_WORD:12 [ init_buckets::i2#2 init_buckets::i2#1 ]
-reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ]
-zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#3 ]
+reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ]
+zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
 zp ZP_WORD:16 [ init_buckets::i4#2 init_buckets::i4#1 ]
-zp ZP_WORD:18 [ heap_head#13 heap_head#1 ]
-zp ZP_WORD:20 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
+zp ZP_WORD:18 [ heap_head#18 heap_head#1 ]
+zp ZP_WORD:20 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
 zp ZP_BYTE:22 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
-zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ]
-zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ]
+zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ]
+zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
 zp ZP_BYTE:27 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 zp ZP_BYTE:28 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
 zp ZP_WORD:29 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
@@ -8852,8 +9448,8 @@ reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
 zp ZP_WORD:35 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
 zp ZP_WORD:37 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
 zp ZP_BYTE:39 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
-zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
+zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
+zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
 reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
 zp ZP_BYTE:44 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 zp ZP_BYTE:45 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
@@ -8864,56 +9460,63 @@ reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ]
 zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ]
 zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
 reg byte x [ init_squares::i#2 init_squares::i#1 ]
+zp ZP_WORD:52 [ SCREEN_DIST#0 init_buckets::screen#0 ]
+zp ZP_WORD:54 [ SCREEN_ANGLE#0 ]
+zp ZP_WORD:56 [ BUCKET_SIZES#0 ]
+zp ZP_WORD:58 [ BUCKETS#0 ]
+zp ZP_WORD:60 [ BUCKET_IDX#0 ]
 reg byte a [ main::$21 ]
-zp ZP_WORD:52 [ main::bucket#0 ]
-zp ZP_BYTE:54 [ main::bucket_size#0 ]
+zp ZP_WORD:62 [ main::bucket#0 ]
+zp ZP_BYTE:64 [ main::bucket_size#0 ]
 reg byte a [ main::$22 ]
-zp ZP_WORD:55 [ main::fill#0 ]
-zp ZP_WORD:57 [ main::angle#0 ]
-zp ZP_WORD:59 [ init_buckets::$12 init_buckets::$16 ]
-reg byte x [ init_buckets::distance#0 ]
-zp ZP_WORD:61 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
-zp ZP_WORD:63 [ init_buckets::$10 ]
+zp ZP_WORD:65 [ main::fill#0 ]
+zp ZP_WORD:67 [ main::angle#0 ]
+zp ZP_WORD:69 [ init_buckets::$12 init_buckets::$16 ]
+zp ZP_BYTE:71 [ init_buckets::distance#0 ]
+zp ZP_WORD:72 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
+zp ZP_WORD:74 [ init_buckets::$10 ]
 reg byte a [ init_buckets::$14 ]
 reg byte a [ init_angle_screen::$2 ]
 reg byte a [ init_angle_screen::$3 ]
-zp ZP_WORD:65 [ init_angle_screen::xw#0 atan2_16::x#0 ]
+zp ZP_WORD:76 [ init_angle_screen::xw#0 atan2_16::x#0 ]
 reg byte a [ init_angle_screen::$6 ]
-zp ZP_WORD:67 [ init_angle_screen::yw#0 atan2_16::y#0 ]
-zp ZP_BYTE:69 [ init_angle_screen::ang_w#0 ]
+zp ZP_WORD:78 [ init_angle_screen::yw#0 atan2_16::y#0 ]
+zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ]
 reg byte a [ init_angle_screen::$12 ]
 reg byte a [ init_angle_screen::$13 ]
 reg byte a [ init_angle_screen::$14 ]
 reg byte a [ atan2_16::$24 ]
 reg byte a [ atan2_16::$23 ]
 reg byte a [ init_dist_screen::y2#0 ]
-zp ZP_WORD:70 [ sqr::return#2 init_dist_screen::yds#0 ]
+zp ZP_WORD:81 [ sqr::return#2 init_dist_screen::yds#0 ]
 reg byte a [ init_dist_screen::x2#0 ]
-zp ZP_WORD:72 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ]
+zp ZP_WORD:83 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ]
 reg byte a [ sqrt::return#2 ]
 reg byte a [ init_dist_screen::d#0 ]
 reg byte a [ sqrt::return#0 ]
 reg byte a [ bsearch16u::$6 ]
 reg byte a [ bsearch16u::$16 ]
-zp ZP_WORD:74 [ bsearch16u::pivot#0 ]
-zp ZP_WORD:76 [ bsearch16u::result#0 ]
+zp ZP_WORD:85 [ bsearch16u::pivot#0 ]
+zp ZP_WORD:87 [ bsearch16u::result#0 ]
 reg byte a [ sqr::$0 ]
 reg byte a [ init_squares::$3 ]
 reg byte a [ init_squares::$4 ]
 
 
 FINAL ASSEMBLER
-Score: 1115810
+Score: 1116084
 
   // File Comments
 // Fill screen using a spiral based on distance-to-center / angle-to-center
 // Utilizes a bucket sort for identifying the minimum angle/distance
   // Basic Upstart
 .pc = $801 "Basic"
-:BasicUpstart(main)
+:BasicUpstart(bbegin)
 .pc = $80d "Program"
   // Global Constants & labels
   .const SIZEOF_WORD = 2
+  .const SIZEOF_BYTE = 1
+  .const SIZEOF_POINTER = 2
   .label RASTER = $d012
   .label BORDERCOL = $d020
   // Color Ram
@@ -8922,7 +9525,6 @@ Score: 1115810
   .label HEAP_TOP = $a000
   // The number of iterations performed during 16-bit CORDIC atan2 calculation
   .const CORDIC_ITERATIONS_16 = $f
-  // = malloc(1000);
   // Screen containing angle to center
   .label SCREEN_FILL = $400
   // Char to fill with
@@ -8932,20 +9534,127 @@ Score: 1115810
   .const NUM_SQUARES = $30
   .label heap_head = $12
   .label SQUARES = $14
+  // Screen containing distance to center
+  .label SCREEN_DIST = $34
+  // Screen containing angle to center
+  .label SCREEN_ANGLE = $36
+  // Array containing the bucket size for each of the distance buckets
+  .label BUCKET_SIZES = $38
+  // Buckets containing screen indices for each distance from the center.
+  // BUCKETS[dist] is an array of words containing screen indices.
+  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
+  .label BUCKETS = $3a
+  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
+  .label BUCKET_IDX = $3c
   // @begin
+bbegin:
   // [1] phi from @begin to @1 [phi:@begin->@1]
   // @1
-  // [2] call main 
-  // [3] phi from @1 to @end [phi:@1->@end]
+  // malloc(1000)
+  // [2] call malloc 
+  // [93] phi from @1 to malloc [phi:@1->malloc]
+  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 
+  lda #<HEAP_TOP
+  sta heap_head
+  lda #>HEAP_TOP
+  sta heap_head+1
+  jsr malloc
+  // @4
+  // malloc(1000)
+  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta SCREEN_DIST
+  lda malloc.mem+1
+  sta SCREEN_DIST+1
+  // [4] call malloc 
+  // [93] phi from @4 to malloc [phi:@4->malloc]
+  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 
+  lda #<$3e8
+  sta malloc.size
+  lda #>$3e8
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
+  jsr malloc
+  // @5
+  // malloc(1000)
+  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta SCREEN_ANGLE
+  lda malloc.mem+1
+  sta SCREEN_ANGLE+1
+  // [6] phi from @5 to @2 [phi:@5->@2]
+  // @2
+  // malloc(NUM_BUCKETS*sizeof(byte))
+  // [7] call malloc 
+  // [93] phi from @2 to malloc [phi:@2->malloc]
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy 
+  jsr malloc
+  // @6
+  // malloc(NUM_BUCKETS*sizeof(byte))
+  // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKET_SIZES
+  lda malloc.mem+1
+  sta BUCKET_SIZES+1
+  // malloc(NUM_BUCKETS*sizeof(word*))
+  // [9] call malloc 
+  // [93] phi from @6 to malloc [phi:@6->malloc]
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_POINTER
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
+  jsr malloc
+  // @7
+  // malloc(NUM_BUCKETS*sizeof(word*))
+  // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKETS
+  lda malloc.mem+1
+  sta BUCKETS+1
+  // malloc(NUM_BUCKETS*sizeof(byte))
+  // [11] call malloc 
+  // [93] phi from @7 to malloc [phi:@7->malloc]
+  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 
+  lda #NUM_BUCKETS*SIZEOF_BYTE
+  sta malloc.size
+  lda #0
+  sta malloc.size+1
+  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy 
+  jsr malloc
+  // @8
+  // malloc(NUM_BUCKETS*sizeof(byte))
+  // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
+  lda malloc.mem
+  sta BUCKET_IDX
+  lda malloc.mem+1
+  sta BUCKET_IDX+1
+  // [13] phi from @8 to @3 [phi:@8->@3]
+  // @3
+  // [14] call main 
+  jsr main
+  rts
+  // [15] phi from @3 to @end [phi:@3->@end]
   // @end
   // main
 main: {
-    .label bucket = $34
-    .label bucket_size = $36
+    .label bucket = $3e
+    .label bucket_size = $40
     .label bucket_idx = 2
     .label offset = 6
-    .label fill = $37
-    .label angle = $39
+    .label fill = $41
+    .label angle = $43
     .label min_angle = 3
     .label fill1 = 6
     .label min_offset = 6
@@ -8955,74 +9664,83 @@ main: {
     // asm { sei  }
     sei
     // init_dist_screen(SCREEN_DIST)
-    // [5] call init_dist_screen 
-    // [155] phi from main to init_dist_screen [phi:main->init_dist_screen]
+    // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
+    lda SCREEN_DIST
+    sta init_dist_screen.screen
+    lda SCREEN_DIST+1
+    sta init_dist_screen.screen+1
+    // [18] call init_dist_screen 
+    // [171] phi from main to init_dist_screen [phi:main->init_dist_screen]
     jsr init_dist_screen
-    // [6] phi from main to main::@14 [phi:main->main::@14]
     // main::@14
     // init_angle_screen(SCREEN_ANGLE)
-    // [7] call init_angle_screen 
-    // [82] phi from main::@14 to init_angle_screen [phi:main::@14->init_angle_screen]
+    // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
+    lda SCREEN_ANGLE
+    sta init_angle_screen.screen
+    lda SCREEN_ANGLE+1
+    sta init_angle_screen.screen+1
+    // [20] call init_angle_screen 
     jsr init_angle_screen
-    // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15]
     // main::@15
     // init_buckets(SCREEN_DIST)
-    // [9] call init_buckets 
-    // [40] phi from main::@15 to init_buckets [phi:main::@15->init_buckets]
+    // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0
+    // [22] call init_buckets 
+    // [53] phi from main::@15 to init_buckets [phi:main::@15->init_buckets]
     jsr init_buckets
-    // [10] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
-    // [10] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 
+    // [23] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
+    // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 
     lda #0
     sta bucket_idx
     // main::@1
     // main::@2
   b2:
     // while (*RASTER!=0xff)
-    // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
+    // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
     lda #$ff
     cmp RASTER
     bne b2
     // main::@3
     // (*BORDERCOL)++;
-    // [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
+    // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
     inc BORDERCOL
     // bucket = BUCKETS[bucket_idx]
-    // [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda bucket_idx
     asl
-    // [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptc1_derefidx_vbuaa 
+    // [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuaa 
     tay
-    lda BUCKETS,y
+    lda (BUCKETS),y
     sta bucket
-    lda BUCKETS+1,y
+    iny
+    lda (BUCKETS),y
     sta bucket+1
     // bucket_size = BUCKET_SIZES[bucket_idx]
-    // [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 
+    // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 
     ldy bucket_idx
-    lda BUCKET_SIZES,y
+    lda (BUCKET_SIZES),y
     sta bucket_size
     // if(bucket_size>0)
-    // [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
+    // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
     cmp #0
     beq b4
-    // [17] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
-    // [17] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 
+    // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
+    // [30] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 
     lda #<$ffff
     sta min_offset_5
     lda #>$ffff
     sta min_offset_5+1
-    // [17] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 
+    // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 
     lda #$ff
     sta min_angle
-    // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 
+    // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 
     ldx #0
     // main::@5
   b5:
     // offset = bucket[i]
-    // [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
-    // [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa 
+    // [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa 
     tay
     lda (bucket),y
     sta offset
@@ -9030,7 +9748,7 @@ main: {
     lda (bucket),y
     sta offset+1
     // fill = SCREEN_FILL+offset
-    // [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
+    // [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
     lda offset
     clc
     adc #<SCREEN_FILL
@@ -9039,23 +9757,23 @@ main: {
     adc #>SCREEN_FILL
     sta fill+1
     // if(*fill!=FILL_CHAR)
-    // [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
+    // [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
     lda #FILL_CHAR
     ldy #0
     cmp (fill),y
     beq b18
     // main::@7
     // angle = SCREEN_ANGLE+offset
-    // [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
-    lda offset
+    // [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 
+    lda SCREEN_ANGLE
     clc
-    adc #<SCREEN_ANGLE
+    adc offset
     sta angle
-    lda offset+1
-    adc #>SCREEN_ANGLE
+    lda SCREEN_ANGLE+1
+    adc offset+1
     sta angle+1
     // if(*angle<=min_angle)
-    // [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
+    // [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
     lda (angle),y
     cmp min_angle
     beq !+
@@ -9063,24 +9781,24 @@ main: {
   !:
     // main::@8
     // min_angle = *angle
-    // [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
+    // [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
     ldy #0
     lda (angle),y
     sta min_angle
-    // [25] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6]
-    // [25] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy 
-    // [25] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy 
+    // [38] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6]
+    // [38] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy 
+    // [38] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy 
     // main::@6
   b6:
     // for( byte i=0;i<bucket_size;i++)
-    // [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
+    // [39] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuxx_lt_vbuz1_then_la1 
+    // [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuxx_lt_vbuz1_then_la1 
     cpx bucket_size
     bcc b16
     // main::@9
     // if(min_offset!=0xffff)
-    // [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
+    // [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
     lda min_offset
     cmp #<$ffff
     bne !+
@@ -9090,7 +9808,7 @@ main: {
   !:
     // main::@10
     // fill = SCREEN_FILL+min_offset
-    // [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 
+    // [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 
     clc
     lda fill1
     adc #<SCREEN_FILL
@@ -9099,58 +9817,58 @@ main: {
     adc #>SCREEN_FILL
     sta fill1+1
     // *fill = FILL_CHAR
-    // [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
+    // [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
     lda #FILL_CHAR
     ldy #0
     sta (fill1),y
     // (*BORDERCOL)--;
-    // [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
-    // [10] phi from main::@10 to main::@1 [phi:main::@10->main::@1]
+    // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1]
     jmp b2
     // main::@4
   b4:
     // bucket_idx++;
-    // [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
+    // [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
     inc bucket_idx
     // if(bucket_idx==NUM_BUCKETS)
-    // [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 
+    // [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 
     lda #NUM_BUCKETS
     cmp bucket_idx
     bne b11
     // main::@12
     // (*BORDERCOL)--;
-    // [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
     // main::@13
   b13:
     // (*(COLS+999))++;
-    // [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
+    // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
     inc COLS+$3e7
     jmp b13
     // main::@11
   b11:
     // (*BORDERCOL)--;
-    // [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
+    // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
     dec BORDERCOL
-    // [10] phi from main::@11 to main::@1 [phi:main::@11->main::@1]
-    // [10] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy 
+    // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1]
+    // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy 
     jmp b2
     // main::@16
   b16:
-    // [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
+    // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
     lda min_offset
     sta min_offset_7
     lda min_offset+1
     sta min_offset_7+1
-    // [17] phi from main::@16 to main::@5 [phi:main::@16->main::@5]
-    // [17] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy 
-    // [17] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy 
-    // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy 
+    // [30] phi from main::@16 to main::@5 [phi:main::@16->main::@5]
+    // [30] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy 
+    // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy 
+    // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy 
     jmp b5
     // main::@17
   b17:
-    // [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
+    // [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
     lda min_offset_5
     sta min_offset
     lda min_offset_5+1
@@ -9158,7 +9876,7 @@ main: {
     jmp b6
     // main::@18
   b18:
-    // [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
+    // [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
     lda min_offset_5
     sta min_offset
     lda min_offset_5+1
@@ -9167,99 +9885,109 @@ main: {
 }
   // init_buckets
 // Initialize buckets containing indices of chars on the screen with specific distances to the center.
+// init_buckets(byte* zeropage($34) screen)
 init_buckets: {
     .label _5 = $14
-    .label _9 = $3d
-    .label _10 = $3f
-    .label _12 = $3b
-    .label _13 = $3d
+    .label _9 = $48
+    .label _10 = $4a
+    .label _12 = $45
+    .label _13 = $48
+    .label screen = $34
     .label dist = 8
     .label i1 = $a
     .label i2 = $c
-    .label bucket = $3d
+    .label distance = $47
+    .label bucket = $48
     .label dist_3 = $e
     .label i4 = $10
     .label dist_5 = $e
     .label _15 = $14
-    .label _16 = $3b
-    .label _17 = $3d
-    // [41] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
-    // [41] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 
-    ldx #0
+    .label _16 = $45
+    .label _17 = $48
+    .label dist_8 = $e
+    // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
+    // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 
+    ldy #0
   // Init bucket sizes to 0
-    // [41] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
-    // [41] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
+    // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
+    // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
     // init_buckets::@1
   b1:
     // BUCKET_SIZES[i]=0
-    // [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
+    // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
     lda #0
-    sta BUCKET_SIZES,x
+    sta (BUCKET_SIZES),y
     // for(byte i:0..NUM_BUCKETS-1)
-    // [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx 
-    inx
-    // [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuxx_neq_vbuc1_then_la1 
-    cpx #NUM_BUCKETS-1+1
+    // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #NUM_BUCKETS-1+1
     bne b1
-    // [45] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2]
-    // [45] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 
+    // init_buckets::@2
+    // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
+    lda screen
+    sta dist
+    lda screen+1
+    sta dist+1
+    // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
+    // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
+    lda #<0
     sta i1
     sta i1+1
-    // [45] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta dist
-    lda #>SCREEN_DIST
-    sta dist+1
-    // [45] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2]
-    // [45] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy 
-    // [45] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy 
-    // init_buckets::@2
-  b2:
+    // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
+    // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
+    // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
+    // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy 
+    // init_buckets::@3
+  b3:
     // BUCKET_SIZES[*dist]++;
-    // [46] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 
+    // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 
     ldy #0
     lda (dist),y
-    tax
-    inc BUCKET_SIZES,x
+    tay
+    lda (BUCKET_SIZES),y
+    clc
+    adc #1
+    sta (BUCKET_SIZES),y
     // dist++;
-    // [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
+    // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
     inc dist
     bne !+
     inc dist+1
   !:
     // for( word i:0..999)
-    // [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
+    // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
     inc i1
     bne !+
     inc i1+1
   !:
-    // [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 
+    // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
     lda i1+1
     cmp #>$3e8
-    bne b2
+    bne b3
     lda i1
     cmp #<$3e8
-    bne b2
-    // [50] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
-    // [50] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
+    bne b3
+    // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
+    // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 
     lda #<0
     sta i2
     sta i2+1
   // Allocate the buckets
-    // [50] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3]
-    // [50] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy 
-    // init_buckets::@3
-  b3:
+    // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
+    // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy 
+    // init_buckets::@4
+  b4:
     // malloc(BUCKET_SIZES[i]*sizeof(byte*))
-    // [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 
-    lda i2
+    // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 
+    lda BUCKET_SIZES
     clc
-    adc #<BUCKET_SIZES
+    adc i2
     sta _15
-    lda i2+1
-    adc #>BUCKET_SIZES
+    lda BUCKET_SIZES+1
+    adc i2+1
     sta _15+1
-    // [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 
+    // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 
     ldy #0
     lda (malloc.size),y
     asl
@@ -9267,31 +9995,31 @@ init_buckets: {
     tya
     rol
     sta malloc.size+1
-    // [53] call malloc 
-    // [78] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc]
-    // [78] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy 
-    // [78] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy 
+    // [67] call malloc 
+    // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
+    // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
+    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy 
     jsr malloc
-    // init_buckets::@6
+    // init_buckets::@8
     // malloc(BUCKET_SIZES[i]*sizeof(byte*))
-    // [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
+    // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
     // BUCKETS[i] = malloc(BUCKET_SIZES[i]*sizeof(byte*))
-    // [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
+    // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
     lda i2
     asl
     sta _12
     lda i2+1
     rol
     sta _12+1
-    // [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz1 
-    clc
+    // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 
     lda _16
-    adc #<BUCKETS
+    clc
+    adc BUCKETS
     sta _16
     lda _16+1
-    adc #>BUCKETS
+    adc BUCKETS+1
     sta _16+1
-    // [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
+    // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
     ldy #0
     lda _5
     sta (_16),y
@@ -9299,74 +10027,76 @@ init_buckets: {
     lda _5+1
     sta (_16),y
     // for( word i:0..NUM_BUCKETS-1)
-    // [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
+    // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
     inc i2
     bne !+
     inc i2+1
   !:
-    // [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
+    // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 
     lda i2+1
     cmp #>NUM_BUCKETS-1+1
-    bne b3
+    bne b4
     lda i2
     cmp #<NUM_BUCKETS-1+1
-    bne b3
-    // [60] phi from init_buckets::@6 to init_buckets::@4 [phi:init_buckets::@6->init_buckets::@4]
-    // [60] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuxx=vbuc1 
-    ldx #0
-  // Iterate all distances and fill the buckets with indices into the screens
-    // [60] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4]
-    // [60] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy 
-    // init_buckets::@4
-  b4:
-    // BUCKET_IDX[i]=0
-    // [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
-    lda #0
-    sta BUCKET_IDX,x
-    // for(byte i:0..NUM_BUCKETS-1)
-    // [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx 
-    inx
-    // [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vbuxx_neq_vbuc1_then_la1 
-    cpx #NUM_BUCKETS-1+1
     bne b4
-    // [64] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5]
-    // [64] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 
-    sta i4
-    sta i4+1
-    // [64] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta dist_5
-    lda #>SCREEN_DIST
-    sta dist_5+1
-    // [64] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
-    // [64] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
-    // [64] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy 
+    // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
+    // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 
+    ldy #0
+  // Iterate all distances and fill the buckets with indices into the screens
+    // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
+    // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
     // init_buckets::@5
   b5:
+    // BUCKET_IDX[i]=0
+    // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
+    lda #0
+    sta (BUCKET_IDX),y
+    // for(byte i:0..NUM_BUCKETS-1)
+    // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy 
+    iny
+    // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 
+    cpy #NUM_BUCKETS-1+1
+    bne b5
+    // init_buckets::@6
+    // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
+    lda screen
+    sta dist_8
+    lda screen+1
+    sta dist_8+1
+    // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
+    // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 
+    lda #<0
+    sta i4
+    sta i4+1
+    // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
+    // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
+    // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
+    // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy 
+    // init_buckets::@7
+  b7:
     // distance = *dist
-    // [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 
+    // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
     ldy #0
     lda (dist_5),y
-    tax
+    sta distance
     // (word)distance
-    // [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuxx 
-    txa
+    // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
     sta _9
     tya
     sta _9+1
     // bucket = BUCKETS[(word)distance]
-    // [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 
+    // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 
     asl _13
     rol _13+1
-    // [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz1 
-    clc
+    // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 
     lda _17
-    adc #<BUCKETS
+    clc
+    adc BUCKETS
     sta _17
     lda _17+1
-    adc #>BUCKETS
+    adc BUCKETS+1
     sta _17+1
-    // [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 
+    // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 
     lda (bucket),y
     pha
     iny
@@ -9375,19 +10105,20 @@ init_buckets: {
     pla
     sta bucket
     // dist-screen
-    // [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 
+    // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
     lda dist_5
     sec
-    sbc #<SCREEN_DIST
+    sbc screen
     sta _10
     lda dist_5+1
-    sbc #>SCREEN_DIST
+    sbc screen+1
     sta _10+1
     // bucket[BUCKET_IDX[distance]] = dist-screen
-    // [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_rol_1 
-    lda BUCKET_IDX,x
+    // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 
+    ldy distance
+    lda (BUCKET_IDX),y
     asl
-    // [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 
+    // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 
     tay
     lda _10
     sta (bucket),y
@@ -9395,30 +10126,34 @@ init_buckets: {
     lda _10+1
     sta (bucket),y
     // BUCKET_IDX[distance]++;
-    // [73] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx 
-    inc BUCKET_IDX,x
+    // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 
+    ldy distance
+    lda (BUCKET_IDX),y
+    clc
+    adc #1
+    sta (BUCKET_IDX),y
     // *dist++;
-    // [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
+    // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
     inc dist_3
     bne !+
     inc dist_3+1
   !:
     // for(word i:0..999)
-    // [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
+    // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
     inc i4
     bne !+
     inc i4+1
   !:
-    // [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 
+    // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 
     lda i4+1
     cmp #>$3e8
-    bne b5
+    bne b7
     lda i4
     cmp #<$3e8
-    bne b5
+    bne b7
     // init_buckets::@return
     // }
-    // [77] return 
+    // [92] return 
     rts
 }
   // malloc
@@ -9429,7 +10164,7 @@ malloc: {
     .label mem = $14
     .label size = $14
     // mem = heap_head-size
-    // [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 
+    // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 
     lda heap_head
     sec
     sbc mem
@@ -9438,95 +10173,107 @@ malloc: {
     sbc mem+1
     sta mem+1
     // heap_head = mem
-    // [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
+    // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
     lda mem
     sta heap_head
     lda mem+1
     sta heap_head+1
     // malloc::@return
     // }
-    // [81] return 
+    // [96] return 
     rts
 }
   // init_angle_screen
 // Populates 1000 bytes (a screen) with values representing the angle to the center.
 // Utilizes symmetry around the center
+// init_angle_screen(byte* zeropage($17) screen)
 init_angle_screen: {
     .label _10 = $21
-    .label xw = $41
-    .label yw = $43
-    .label angle_w = $21
-    .label ang_w = $45
-    .label x = $1b
-    .label xb = $1c
+    .label screen = $17
     .label screen_topline = $19
     .label screen_bottomline = $17
+    .label xw = $4c
+    .label yw = $4e
+    .label angle_w = $21
+    .label ang_w = $50
+    .label x = $1b
+    .label xb = $1c
     .label y = $16
-    // [83] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
-    // [83] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 
-    lda #<SCREEN_ANGLE+$28*$c
+    // screen_topline = screen+40*12
+    // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
+    lda screen
+    clc
+    adc #<$28*$c
     sta screen_topline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen+1
+    adc #>$28*$c
     sta screen_topline+1
-    // [83] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_ANGLE+$28*$c
+    // screen_bottomline = screen+40*12
+    // [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 
+    clc
+    lda screen_bottomline
+    adc #<$28*$c
     sta screen_bottomline
-    lda #>SCREEN_ANGLE+$28*$c
+    lda screen_bottomline+1
+    adc #>$28*$c
     sta screen_bottomline+1
-    // [83] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
+    // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
+    // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
+    // [99] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
     lda #0
     sta y
-    // [83] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
-    // [83] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy 
-    // [83] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy 
-    // [83] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy 
+    // [99] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
+    // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy 
+    // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy 
+    // [99] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy 
     // init_angle_screen::@1
   b1:
-    // [84] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
-    // [84] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
+    // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
+    // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
     lda #$27
     sta xb
-    // [84] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
+    // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
     lda #0
     sta x
-    // [84] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
-    // [84] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy 
-    // [84] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy 
+    // [100] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
+    // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy 
+    // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy 
     // init_angle_screen::@2
   b2:
     // x*2
-    // [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda x
     asl
     // 39-x*2
-    // [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa 
+    // [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa 
     eor #$ff
     clc
     adc #$27+1
     // (word){ 39-x*2, 0 }
-    // [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
+    // [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
     ldy #0
     sta xw+1
     sty xw
     // y*2
-    // [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda y
     asl
     // (word){ y*2, 0 }
-    // [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
+    // [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
     sta yw+1
     sty yw
     // atan2_16(xw, yw)
-    // [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
-    // [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
-    // [92] call atan2_16 
+    // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
+    // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
+    // [108] call atan2_16 
     jsr atan2_16
-    // [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0
+    // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0
     // init_angle_screen::@4
     // angle_w = atan2_16(xw, yw)
-    // [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
+    // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
     // angle_w+0x0080
-    // [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
+    // [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
     lda #$80
     clc
     adc _10
@@ -9535,50 +10282,50 @@ init_angle_screen: {
     inc _10+1
   !:
     // ang_w = >(angle_w+0x0080)
-    // [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 
+    // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 
     lda _10+1
     sta ang_w
     // screen_bottomline[xb] = ang_w
-    // [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
+    // [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
     ldy xb
     sta (screen_bottomline),y
     // -ang_w
-    // [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
+    // [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
     eor #$ff
     clc
     adc #1
     // screen_topline[xb] = -ang_w
-    // [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa 
     sta (screen_topline),y
     // 0x80+ang_w
-    // [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
+    // [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
     lda #$80
     clc
     adc ang_w
     // screen_topline[x] = 0x80+ang_w
-    // [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy x
     sta (screen_topline),y
     // 0x80-ang_w
-    // [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
+    // [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
     lda #$80
     sec
     sbc ang_w
     // screen_bottomline[x] = 0x80-ang_w
-    // [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
     sta (screen_bottomline),y
     // for( byte x=0,xb=39; x<=19; x++, xb--)
-    // [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
+    // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
     inc x
-    // [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
+    // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
     dec xb
-    // [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 
+    // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 
     lda x
     cmp #$13+1
     bcc b2
     // init_angle_screen::@3
     // screen_topline -= 40
-    // [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
+    // [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
     lda screen_topline
     sec
     sbc #<$28
@@ -9587,7 +10334,7 @@ init_angle_screen: {
     sbc #>$28
     sta screen_topline+1
     // screen_bottomline += 40
-    // [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
+    // [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$28
     clc
     adc screen_bottomline
@@ -9596,22 +10343,22 @@ init_angle_screen: {
     inc screen_bottomline+1
   !:
     // for(byte y: 0..12)
-    // [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 
+    // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 
     inc y
-    // [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [126] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #$d
     cmp y
     bne b1
     // init_angle_screen::@return
     // }
-    // [111] return 
+    // [127] return 
     rts
 }
   // atan2_16
 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
 // Finding the angle requires a binary search using CORDIC_ITERATIONS_16
 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
-// atan2_16(signed word zeropage($41) x, signed word zeropage($43) y)
+// atan2_16(signed word zeropage($4c) x, signed word zeropage($4e) y)
 atan2_16: {
     .label _2 = $1d
     .label _7 = $1f
@@ -9621,16 +10368,16 @@ atan2_16: {
     .label xd = $25
     .label yd = $23
     .label return = $21
-    .label x = $41
-    .label y = $43
+    .label x = $4c
+    .label y = $4e
     // (y>=0)?y:-y
-    // [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
+    // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
     lda y+1
     bmi !b1+
     jmp b1
   !b1:
     // atan2_16::@2
-    // [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
+    // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
     sec
     lda #0
     sbc y
@@ -9638,18 +10385,18 @@ atan2_16: {
     lda #0
     sbc y+1
     sta _2+1
-    // [114] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
-    // [114] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy 
+    // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
+    // [130] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy 
     // atan2_16::@3
   b3:
     // (x>=0)?x:-x
-    // [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
+    // [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
     lda x+1
     bmi !b4+
     jmp b4
   !b4:
     // atan2_16::@5
-    // [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
+    // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
     sec
     lda #0
     sbc x
@@ -9657,42 +10404,42 @@ atan2_16: {
     lda #0
     sbc x+1
     sta _7+1
-    // [117] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
-    // [117] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy 
+    // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
+    // [133] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy 
     // atan2_16::@6
   b6:
-    // [118] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
-    // [118] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
+    // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
+    // [134] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
     lda #0
     sta angle
     sta angle+1
-    // [118] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
+    // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
     tax
-    // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
-    // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy 
+    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
+    // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy 
     // atan2_16::@10
   b10:
     // if(yi==0)
-    // [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
+    // [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
     lda yi+1
     bne b11
     lda yi
     bne b11
-    // [120] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
-    // [120] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy 
+    // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
+    // [136] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy 
     // atan2_16::@12
   b12:
     // angle /=2
-    // [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
+    // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
     lsr angle+1
     ror angle
     // if(x<0)
-    // [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
+    // [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
     lda x+1
     bpl b7
     // atan2_16::@21
     // angle = 0x8000-angle
-    // [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
+    // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
     sec
     lda #<$8000
     sbc angle
@@ -9700,17 +10447,17 @@ atan2_16: {
     lda #>$8000
     sbc angle+1
     sta angle+1
-    // [124] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
-    // [124] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy 
+    // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
+    // [140] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy 
     // atan2_16::@7
   b7:
     // if(y<0)
-    // [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
+    // [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
     lda y+1
     bpl b8
     // atan2_16::@9
     // angle = -angle
-    // [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
+    // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
     sec
     lda #0
     sbc angle
@@ -9718,69 +10465,69 @@ atan2_16: {
     lda #0
     sbc angle+1
     sta angle+1
-    // [127] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
-    // [127] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy 
+    // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
+    // [143] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy 
     // atan2_16::@8
   b8:
     // atan2_16::@return
     // }
-    // [128] return 
+    // [144] return 
     rts
     // atan2_16::@11
   b11:
-    // [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
+    // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
     txa
     tay
-    // [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
+    // [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
     lda xi
     sta xd
     lda xi+1
     sta xd+1
-    // [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
+    // [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
     lda yi
     sta yd
     lda yi+1
     sta yd+1
-    // [132] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
-    // [132] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy 
-    // [132] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy 
-    // [132] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy 
+    // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
+    // [148] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy 
+    // [148] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy 
+    // [148] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy 
     // atan2_16::@13
   b13:
     // while(shift>=2)
-    // [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 
+    // [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 
     cpy #2
     bcs b14
     // atan2_16::@15
     // if(shift)
-    // [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 
+    // [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 
     cpy #0
     beq b17
     // atan2_16::@16
     // xd >>= 1
-    // [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
+    // [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
     lda xd+1
     cmp #$80
     ror xd+1
     ror xd
     // yd >>= 1
-    // [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
+    // [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
     lda yd+1
     cmp #$80
     ror yd+1
     ror yd
-    // [137] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
-    // [137] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy 
-    // [137] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy 
+    // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
+    // [153] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy 
+    // [153] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy 
     // atan2_16::@17
   b17:
     // if(yi>=0)
-    // [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
+    // [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
     lda yi+1
     bpl b18
     // atan2_16::@20
     // xi -= yd
-    // [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
+    // [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
     lda xi
     sec
     sbc yd
@@ -9789,7 +10536,7 @@ atan2_16: {
     sbc yd+1
     sta xi+1
     // yi += xd
-    // [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
+    // [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
     lda yi
     clc
     adc xd
@@ -9798,10 +10545,10 @@ atan2_16: {
     adc xd+1
     sta yi+1
     // angle -= CORDIC_ATAN2_ANGLES_16[i]
-    // [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
-    // [142] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa 
+    // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa 
     tay
     sec
     lda angle
@@ -9810,30 +10557,30 @@ atan2_16: {
     lda angle+1
     sbc CORDIC_ATAN2_ANGLES_16+1,y
     sta angle+1
-    // [143] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
-    // [143] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy 
-    // [143] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
-    // [143] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy 
+    // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
+    // [159] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy 
+    // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
+    // [159] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy 
     // atan2_16::@19
   b19:
     // for( byte i: 0..CORDIC_ITERATIONS_16-1)
-    // [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
+    // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [145] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
+    // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
     cpx #CORDIC_ITERATIONS_16-1+1
     bne !b12+
     jmp b12
   !b12:
-    // [118] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
-    // [118] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
-    // [118] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
-    // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
-    // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy 
+    // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
+    // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
+    // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
+    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
+    // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy 
     jmp b10
     // atan2_16::@18
   b18:
     // xi += yd
-    // [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
+    // [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
     lda xi
     clc
     adc yd
@@ -9842,7 +10589,7 @@ atan2_16: {
     adc yd+1
     sta xi+1
     // yi -= xd
-    // [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
+    // [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
     lda yi
     sec
     sbc xd
@@ -9851,10 +10598,10 @@ atan2_16: {
     sbc xd+1
     sta yi+1
     // angle += CORDIC_ATAN2_ANGLES_16[i]
-    // [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
-    // [149] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa 
+    // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa 
     tay
     clc
     lda angle
@@ -9867,7 +10614,7 @@ atan2_16: {
     // atan2_16::@14
   b14:
     // xd >>= 2
-    // [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
+    // [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
     lda xd+1
     cmp #$80
     ror xd+1
@@ -9877,7 +10624,7 @@ atan2_16: {
     ror xd+1
     ror xd
     // yd >>= 2
-    // [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
+    // [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
     lda yd+1
     cmp #$80
     ror yd+1
@@ -9887,13 +10634,13 @@ atan2_16: {
     ror yd+1
     ror yd
     // shift -=2
-    // [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
+    // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
     dey
     dey
     jmp b13
     // atan2_16::@4
   b4:
-    // [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
+    // [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
     lda x
     sta xi
     lda x+1
@@ -9901,7 +10648,7 @@ atan2_16: {
     jmp b6
     // atan2_16::@1
   b1:
-    // [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
+    // [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
     lda y
     sta yi
     lda y+1
@@ -9912,113 +10659,117 @@ atan2_16: {
 // Populates 1000 bytes (a screen) with values representing the distance to the center.
 // The actual value stored is distance*2 to increase precision
 // Utilizes symmetry around the center
+// init_dist_screen(byte* zeropage($28) screen)
 init_dist_screen: {
-    .label yds = $46
-    .label xds = $48
-    .label ds = $48
+    .label screen = $28
+    .label screen_bottomline = $2a
+    .label yds = $51
+    .label xds = $53
+    .label ds = $53
     .label x = $2c
     .label xb = $2d
     .label screen_topline = $28
-    .label screen_bottomline = $2a
     .label y = $27
     // init_squares()
-    // [156] call init_squares 
-    // [226] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
+    // [172] call init_squares 
+    // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
     jsr init_squares
-    // [157] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1]
-    // [157] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST+$28*$18
+    // init_dist_screen::@10
+    // screen_bottomline = screen+40*24
+    // [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 
+    lda screen
+    clc
+    adc #<$28*$18
     sta screen_bottomline
-    lda #>SCREEN_DIST+$28*$18
+    lda screen+1
+    adc #>$28*$18
     sta screen_bottomline+1
-    // [157] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 
-    lda #<SCREEN_DIST
-    sta screen_topline
-    lda #>SCREEN_DIST
-    sta screen_topline+1
-    // [157] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 
+    // [174] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1]
+    // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@10->init_dist_screen::@1#0] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@10->init_dist_screen::@1#1] -- register_copy 
+    // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@1#2] -- vbuz1=vbuc1 
     lda #0
     sta y
-    // [157] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
-    // [157] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
-    // [157] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
-    // [157] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
+    // [174] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
+    // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
+    // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
+    // [174] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
     // init_dist_screen::@1
   b1:
     // y2 = y*2
-    // [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda y
     asl
     // (y2>=24)?(y2-24):(24-y2)
-    // [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 
+    // [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 
     cmp #$18
     bcs b2
     // init_dist_screen::@3
-    // [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
+    // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
     eor #$ff
     clc
     adc #$18+1
-    // [161] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
-    // [161] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
+    // [178] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
+    // [178] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
     // init_dist_screen::@4
   b4:
     // sqr(yd)
-    // [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
-    // [163] call sqr 
-    // [222] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
-    // [222] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
+    // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
+    // [180] call sqr 
+    // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
+    // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
     jsr sqr
     // sqr(yd)
-    // [164] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
+    // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
     lda sqr.return
     sta sqr.return_2
     lda sqr.return+1
     sta sqr.return_2+1
-    // init_dist_screen::@10
+    // init_dist_screen::@11
     // yds = sqr(yd)
-    // [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
-    // [166] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5]
-    // [166] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 
+    // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
+    // [183] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5]
+    // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 
     lda #$27
     sta xb
-    // [166] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 
+    // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 
     lda #0
     sta x
-    // [166] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
-    // [166] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy 
-    // [166] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy 
+    // [183] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5]
+    // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy 
+    // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy 
     // init_dist_screen::@5
   b5:
     // x2 = x*2
-    // [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
+    // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
     lda x
     asl
     // (x2>=39)?(x2-39):(39-x2)
-    // [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 
+    // [185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 
     cmp #$27
     bcs b6
     // init_dist_screen::@7
-    // [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
+    // [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
     eor #$ff
     clc
     adc #$27+1
-    // [170] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
-    // [170] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
+    // [187] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
+    // [187] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
     // init_dist_screen::@8
   b8:
     // sqr(xd)
-    // [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
-    // [172] call sqr 
-    // [222] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
-    // [222] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
+    // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
+    // [189] call sqr 
+    // [239] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
+    // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
     jsr sqr
     // sqr(xd)
-    // [173] (word) sqr::return#3 ← (word) sqr::return#0
-    // init_dist_screen::@11
+    // [190] (word) sqr::return#3 ← (word) sqr::return#0
+    // init_dist_screen::@12
     // xds = sqr(xd)
-    // [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
+    // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
     // ds = xds+yds
-    // [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
+    // [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
     lda ds
     clc
     adc yds
@@ -10027,39 +10778,39 @@ init_dist_screen: {
     adc yds+1
     sta ds+1
     // sqrt(ds)
-    // [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
-    // [177] call sqrt 
+    // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
+    // [194] call sqrt 
     jsr sqrt
-    // [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0
-    // init_dist_screen::@12
+    // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0
+    // init_dist_screen::@13
     // d = sqrt(ds)
-    // [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
+    // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
     // screen_topline[x] = d
-    // [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy x
     sta (screen_topline),y
     // screen_bottomline[x] = d
-    // [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     sta (screen_bottomline),y
     // screen_topline[xb] = d
-    // [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     ldy xb
     sta (screen_topline),y
     // screen_bottomline[xb] = d
-    // [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
+    // [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
     sta (screen_bottomline),y
     // for( byte x=0,xb=39; x<=19; x++, xb--)
-    // [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
+    // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
     inc x
-    // [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
+    // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
     dec xb
-    // [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
+    // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
     lda x
     cmp #$13+1
     bcc b5
     // init_dist_screen::@9
     // screen_topline += 40
-    // [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
+    // [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
     lda #$28
     clc
     adc screen_topline
@@ -10068,7 +10819,7 @@ init_dist_screen: {
     inc screen_topline+1
   !:
     // screen_bottomline -= 40
-    // [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
+    // [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
     lda screen_bottomline
     sec
     sbc #<$28
@@ -10077,27 +10828,27 @@ init_dist_screen: {
     sbc #>$28
     sta screen_bottomline+1
     // for(byte y: 0..12)
-    // [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
+    // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
     inc y
-    // [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
+    // [207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
     lda #$d
     cmp y
     bne b1
     // init_dist_screen::@return
     // }
-    // [191] return 
+    // [208] return 
     rts
     // init_dist_screen::@6
   b6:
     // (x2>=39)?(x2-39):(39-x2)
-    // [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
+    // [209] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
     sec
     sbc #$27
     jmp b8
     // init_dist_screen::@2
   b2:
     // (y2>=24)?(y2-24):(24-y2)
-    // [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 
+    // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 
     sec
     sbc #$18
     jmp b4
@@ -10106,29 +10857,29 @@ init_dist_screen: {
 // Find the (integer) square root of a word value
 // If the square is not an integer then it returns the largest integer N where N*N <= val
 // Uses a table of squares that must be initialized by calling init_squares()
-// sqrt(word zeropage($48) val)
+// sqrt(word zeropage($53) val)
 sqrt: {
     .label _1 = $2e
     .label _3 = $2e
     .label found = $2e
-    .label val = $48
+    .label val = $53
     // bsearch16u(val, SQUARES, NUM_SQUARES)
-    // [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0
-    // [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
+    // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0
+    // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
     lda SQUARES
     sta bsearch16u.items
     lda SQUARES+1
     sta bsearch16u.items+1
-    // [196] call bsearch16u 
-    // [203] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
+    // [213] call bsearch16u 
+    // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
     jsr bsearch16u
     // bsearch16u(val, SQUARES, NUM_SQUARES)
-    // [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
+    // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
     // sqrt::@1
     // found = bsearch16u(val, SQUARES, NUM_SQUARES)
-    // [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
+    // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
     // found-SQUARES
-    // [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 
+    // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 
     lda _3
     sec
     sbc SQUARES
@@ -10136,15 +10887,15 @@ sqrt: {
     lda _3+1
     sbc SQUARES+1
     sta _3+1
-    // [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
+    // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
     lsr _1+1
     ror _1
     // (byte)(found-SQUARES)
-    // [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
+    // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
     lda _1
     // sqrt::@return
     // }
-    // [202] return 
+    // [219] return 
     rts
 }
   // bsearch16u
@@ -10153,27 +10904,27 @@ sqrt: {
 // - items - Pointer to the start of the array to search in
 // - num - The number of items in the array
 // Returns pointer to an entry in the array that matches the search key
-// bsearch16u(word zeropage($48) key, word* zeropage($2e) items, byte register(X) num)
+// bsearch16u(word zeropage($53) key, word* zeropage($2e) items, byte register(X) num)
 bsearch16u: {
     .label _2 = $2e
-    .label pivot = $4a
-    .label result = $4c
+    .label pivot = $55
+    .label result = $57
     .label return = $2e
     .label items = $2e
-    .label key = $48
-    // [204] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
-    // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
-    // [204] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
+    .label key = $53
+    // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
+    // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
+    // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
     ldx #NUM_SQUARES
     // bsearch16u::@3
   b3:
     // while (num > 0)
-    // [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
+    // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
     cpx #0
     bne b4
     // bsearch16u::@5
     // *items<=key?items:items-1
-    // [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
+    // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
     ldy #1
     lda (items),y
     cmp key+1
@@ -10185,7 +10936,7 @@ bsearch16u: {
   !:
     bcc b2
     // bsearch16u::@1
-    // [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
+    // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
     lda _2
     sec
     sbc #<1*SIZEOF_WORD
@@ -10193,26 +10944,26 @@ bsearch16u: {
     lda _2+1
     sbc #>1*SIZEOF_WORD
     sta _2+1
-    // [208] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
-    // [208] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
+    // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
+    // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
     // bsearch16u::@2
   b2:
-    // [209] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
-    // [209] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
+    // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
+    // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
     // bsearch16u::@return
     // }
-    // [210] return 
+    // [227] return 
     rts
     // bsearch16u::@4
   b4:
     // num >> 1
-    // [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
+    // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
     txa
     lsr
     // items + (num >> 1)
-    // [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
+    // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
     asl
-    // [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
+    // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
     clc
     adc items
     sta pivot
@@ -10220,7 +10971,7 @@ bsearch16u: {
     adc items+1
     sta pivot+1
     // result = (signed word)key-(signed word)*pivot
-    // [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
+    // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
     sec
     lda key
     ldy #0
@@ -10231,12 +10982,12 @@ bsearch16u: {
     sbc (pivot),y
     sta result+1
     // if (result == 0)
-    // [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
+    // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
     bne b6
     lda result
     bne b6
     // bsearch16u::@8
-    // [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
+    // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
     lda pivot
     sta return
     lda pivot+1
@@ -10245,7 +10996,7 @@ bsearch16u: {
     // bsearch16u::@6
   b6:
     // if (result > 0)
-    // [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
+    // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
     lda result+1
     bmi b7
     bne !+
@@ -10254,7 +11005,7 @@ bsearch16u: {
   !:
     // bsearch16u::@9
     // items = pivot+1
-    // [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
+    // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
     lda #1*SIZEOF_WORD
     clc
     adc pivot
@@ -10263,21 +11014,21 @@ bsearch16u: {
     adc pivot+1
     sta items+1
     // num--;
-    // [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
+    // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
     dex
-    // [220] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
-    // [220] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
-    // [220] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
+    // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
+    // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
+    // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
     // bsearch16u::@7
   b7:
     // num >>= 1
-    // [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
+    // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
     txa
     lsr
     tax
-    // [204] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
-    // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
-    // [204] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
+    // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
+    // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
+    // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
     jmp b3
 }
   // sqr
@@ -10285,12 +11036,12 @@ bsearch16u: {
 // Uses a table of squares that must be initialized by calling init_squares()
 // sqr(byte register(A) val)
 sqr: {
-    .label return = $48
-    .label return_2 = $46
+    .label return = $53
+    .label return_2 = $51
     // return SQUARES[val];
-    // [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
+    // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
     asl
-    // [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa 
+    // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa 
     tay
     lda (SQUARES),y
     sta return
@@ -10299,7 +11050,7 @@ sqr: {
     sta return+1
     // sqr::@return
     // }
-    // [225] return 
+    // [242] return 
     rts
 }
   // init_squares
@@ -10309,44 +11060,40 @@ init_squares: {
     .label squares = $32
     .label sqr = $30
     // malloc(NUM_SQUARES*sizeof(word))
-    // [227] call malloc 
-    // [78] phi from init_squares to malloc [phi:init_squares->malloc]
-    // [78] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
+    // [244] call malloc 
+    // [93] phi from init_squares to malloc [phi:init_squares->malloc]
+    // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
     lda #NUM_SQUARES*SIZEOF_WORD
     sta malloc.size
     lda #0
     sta malloc.size+1
-    // [78] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 
-    lda #<HEAP_TOP
-    sta heap_head
-    lda #>HEAP_TOP
-    sta heap_head+1
+    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
     jsr malloc
     // init_squares::@2
     // malloc(NUM_SQUARES*sizeof(word))
-    // [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
+    // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
     // squares = SQUARES
-    // [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
+    // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
     lda SQUARES
     sta squares
     lda SQUARES+1
     sta squares+1
-    // [230] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
-    // [230] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 
+    // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
+    // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 
     ldx #0
-    // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
-    // [230] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 
+    // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
+    // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 
     txa
     sta sqr
     sta sqr+1
-    // [230] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
-    // [230] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
-    // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
-    // [230] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
+    // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
+    // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
+    // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
+    // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
     // init_squares::@1
   b1:
     // *squares++ = sqr
-    // [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
+    // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
     ldy #0
     lda sqr
     sta (squares),y
@@ -10354,7 +11101,7 @@ init_squares: {
     lda sqr+1
     sta (squares),y
     // *squares++ = sqr;
-    // [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
+    // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
     lda #SIZEOF_WORD
     clc
     adc squares
@@ -10363,15 +11110,15 @@ init_squares: {
     inc squares+1
   !:
     // i*2
-    // [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
+    // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
     txa
     asl
     // i*2+1
-    // [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
+    // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
     clc
     adc #1
     // sqr += i*2+1
-    // [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
+    // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
     clc
     adc sqr
     sta sqr
@@ -10379,33 +11126,20 @@ init_squares: {
     inc sqr+1
   !:
     // for( byte i: 0..NUM_SQUARES-1)
-    // [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
+    // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
     inx
-    // [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 
+    // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 
     cpx #NUM_SQUARES-1+1
     bne b1
     // init_squares::@return
     // }
-    // [238] return 
+    // [255] return 
     rts
 }
   // File Data
-  // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
+// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
 CORDIC_ATAN2_ANGLES_16:
 .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
         .word 256*2*256*atan(1/pow(2,i))/PI/2
 
-  // Screen containing distance to center
-  SCREEN_DIST: .fill $3e8, 0
-  // = malloc(1000);
-  // Screen containing angle to center
-  SCREEN_ANGLE: .fill $3e8, 0
-  // Array containing the bucket size for each of the distance buckets
-  BUCKET_SIZES: .fill NUM_BUCKETS, 0
-  // Buckets containing screen indices for each distance from the center.
-  // BUCKETS[dist] is an array of words containing screen indices.
-  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
-  BUCKETS: .fill 2*NUM_BUCKETS, 0
-  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
-  BUCKET_IDX: .fill NUM_BUCKETS, 0
 
diff --git a/src/test/ref/screen-show-spiral-buckets.sym b/src/test/ref/screen-show-spiral-buckets.sym
index f8191acef..bf36cc692 100644
--- a/src/test/ref/screen-show-spiral-buckets.sym
+++ b/src/test/ref/screen-show-spiral-buckets.sym
@@ -1,14 +1,21 @@
 (label) @1
+(label) @2
+(label) @3
+(label) @4
+(label) @5
+(label) @6
+(label) @7
+(label) @8
 (label) @begin
 (label) @end
 (byte*) BORDERCOL
 (const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280
-(word*[NUM_BUCKETS#0]) BUCKETS
-(const word*[NUM_BUCKETS#0]) BUCKETS#0 BUCKETS = { fill( NUM_BUCKETS#0, 0) }
-(byte[NUM_BUCKETS#0]) BUCKET_IDX
-(const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 BUCKET_IDX = { fill( NUM_BUCKETS#0, 0) }
-(byte[NUM_BUCKETS#0]) BUCKET_SIZES
-(const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 BUCKET_SIZES = { fill( NUM_BUCKETS#0, 0) }
+(word*[]) BUCKETS
+(void*) BUCKETS#0 BUCKETS zp ZP_WORD:58 0.02531645569620253
+(byte[]) BUCKET_IDX
+(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:60 0.0425531914893617
+(byte[]) BUCKET_SIZES
+(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:56 0.024691358024691357
 (byte*) COLS
 (const byte*) COLS#0 COLS = (byte*) 55296
 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
@@ -27,15 +34,17 @@
 (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30
 (byte*) RASTER
 (const byte*) RASTER#0 RASTER = (byte*) 53266
-(byte[$3e8]) SCREEN_ANGLE
-(const byte[$3e8]) SCREEN_ANGLE#0 SCREEN_ANGLE = { fill( $3e8, 0) }
-(byte[$3e8]) SCREEN_DIST
-(const byte[$3e8]) SCREEN_DIST#0 SCREEN_DIST = { fill( $3e8, 0) }
+(byte[]) SCREEN_ANGLE
+(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:54 0.045454545454545456
+(byte[]) SCREEN_DIST
+(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:52 0.125
 (byte*) SCREEN_FILL
 (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024
+(const byte) SIZEOF_BYTE SIZEOF_BYTE = (byte) 1
+(const byte) SIZEOF_POINTER SIZEOF_POINTER = (byte) 2
 (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2
 (word*) SQUARES
-(void*) SQUARES#1 SQUARES zp ZP_WORD:20 0.03278688524590164
+(void*) SQUARES#1 SQUARES zp ZP_WORD:20 0.03225806451612903
 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
 (signed word~) atan2_16::$2 $2 zp ZP_WORD:29 4.0
 (byte~) atan2_16::$23 reg byte a 2002.0
@@ -84,7 +93,7 @@
 (byte) atan2_16::shift#2 reg byte y 8001.25
 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334
 (signed word) atan2_16::x
-(signed word) atan2_16::x#0 x zp ZP_WORD:65 2.8684210526315796
+(signed word) atan2_16::x#0 x zp ZP_WORD:76 2.8684210526315796
 (signed word) atan2_16::xd
 (signed word) atan2_16::xd#1 xd zp ZP_WORD:37 6667.333333333333
 (signed word~) atan2_16::xd#10 xd zp ZP_WORD:37 1001.0
@@ -99,7 +108,7 @@
 (signed word) atan2_16::xi#3 xi zp ZP_WORD:31 267.0666666666667
 (signed word) atan2_16::xi#8 xi zp ZP_WORD:31 1001.0
 (signed word) atan2_16::y
-(signed word) atan2_16::y#0 y zp ZP_WORD:67 2.724999999999999
+(signed word) atan2_16::y#0 y zp ZP_WORD:78 2.724999999999999
 (signed word) atan2_16::yd
 (signed word) atan2_16::yd#1 yd zp ZP_WORD:35 10001.0
 (signed word~) atan2_16::yd#10 yd zp ZP_WORD:35 2002.0
@@ -133,24 +142,24 @@
 (word*) bsearch16u::items#2 items zp ZP_WORD:46 334.5555555555556
 (word*) bsearch16u::items#8 items zp ZP_WORD:46 1501.5
 (word) bsearch16u::key
-(word) bsearch16u::key#0 key zp ZP_WORD:72 0.26666666666666666
+(word) bsearch16u::key#0 key zp ZP_WORD:83 0.26666666666666666
 (byte) bsearch16u::num
 (byte) bsearch16u::num#0 reg byte x 2002.0
 (byte) bsearch16u::num#1 reg byte x 2002.0
 (byte) bsearch16u::num#3 reg byte x 556.1111111111111
 (byte) bsearch16u::num#5 reg byte x 3003.0
 (word*) bsearch16u::pivot
-(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:74 501.0
+(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:85 501.0
 (signed word) bsearch16u::result
-(signed word) bsearch16u::result#0 result zp ZP_WORD:76 1501.5
+(signed word) bsearch16u::result#0 result zp ZP_WORD:87 1501.5
 (word*) bsearch16u::return
 (word*) bsearch16u::return#1 return zp ZP_WORD:46 2.0
 (word*) bsearch16u::return#2 return zp ZP_WORD:46 6.0
 (word*) bsearch16u::return#3 return zp ZP_WORD:46 4.0
 (word*~) bsearch16u::return#6 return zp ZP_WORD:46 4.0
 (byte*) heap_head
-(byte*) heap_head#1 heap_head zp ZP_WORD:18 0.17105263157894737
-(byte*) heap_head#13 heap_head zp ZP_WORD:18 13.0
+(byte*) heap_head#1 heap_head zp ZP_WORD:18 0.2446808510638298
+(byte*) heap_head#18 heap_head zp ZP_WORD:18 23.0
 (void()) init_angle_screen((byte*) init_angle_screen::screen)
 (word~) init_angle_screen::$10 $10 zp ZP_WORD:33 202.0
 (byte~) init_angle_screen::$12 reg byte a 202.0
@@ -165,16 +174,19 @@
 (label) init_angle_screen::@4
 (label) init_angle_screen::@return
 (byte) init_angle_screen::ang_w
-(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:69 84.16666666666666
+(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:80 84.16666666666666
 (word) init_angle_screen::angle_w
 (word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:33 202.0
 (byte*) init_angle_screen::screen
+(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:23 3.0
 (byte*) init_angle_screen::screen_bottomline
+(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:23 4.0
 (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:23 7.333333333333333
-(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:23 8.959999999999999
+(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:23 9.040000000000001
 (byte*) init_angle_screen::screen_topline
+(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:25 2.0
 (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:25 5.5
-(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:25 9.333333333333334
+(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:25 9.416666666666666
 (byte) init_angle_screen::x
 (byte) init_angle_screen::x#1 x zp ZP_BYTE:27 101.0
 (byte) init_angle_screen::x#2 x zp ZP_BYTE:27 25.25
@@ -182,41 +194,45 @@
 (byte) init_angle_screen::xb#1 xb zp ZP_BYTE:28 101.0
 (byte) init_angle_screen::xb#2 xb zp ZP_BYTE:28 19.238095238095237
 (signed word) init_angle_screen::xw
-(word) init_angle_screen::xw#0 xw zp ZP_WORD:65 33.666666666666664
+(word) init_angle_screen::xw#0 xw zp ZP_WORD:76 33.666666666666664
 (byte) init_angle_screen::y
 (byte) init_angle_screen::y#1 y zp ZP_BYTE:22 16.5
 (byte) init_angle_screen::y#4 y zp ZP_BYTE:22 4.730769230769231
 (signed word) init_angle_screen::yw
-(word) init_angle_screen::yw#0 yw zp ZP_WORD:67 50.5
+(word) init_angle_screen::yw#0 yw zp ZP_WORD:78 50.5
 (void()) init_buckets((byte*) init_buckets::screen)
-(word~) init_buckets::$10 $10 zp ZP_WORD:63 11.0
-(word~) init_buckets::$12 $12 zp ZP_WORD:59 22.0
-(word~) init_buckets::$13 $13 zp ZP_WORD:61 22.0
+(word~) init_buckets::$10 $10 zp ZP_WORD:74 11.0
+(word~) init_buckets::$12 $12 zp ZP_WORD:69 22.0
+(word~) init_buckets::$13 $13 zp ZP_WORD:72 22.0
 (byte~) init_buckets::$14 reg byte a 22.0
 (byte*~) init_buckets::$15 $15 zp ZP_WORD:20 22.0
-(word**~) init_buckets::$16 $16 zp ZP_WORD:59 22.0
-(word**~) init_buckets::$17 $17 zp ZP_WORD:61 22.0
+(word**~) init_buckets::$16 $16 zp ZP_WORD:69 22.0
+(word**~) init_buckets::$17 $17 zp ZP_WORD:72 22.0
 (void*~) init_buckets::$5 $5 zp ZP_WORD:20 3.6666666666666665
-(word~) init_buckets::$9 $9 zp ZP_WORD:61 22.0
+(word~) init_buckets::$9 $9 zp ZP_WORD:72 22.0
 (label) init_buckets::@1
 (label) init_buckets::@2
 (label) init_buckets::@3
 (label) init_buckets::@4
 (label) init_buckets::@5
 (label) init_buckets::@6
+(label) init_buckets::@7
+(label) init_buckets::@8
 (label) init_buckets::@return
 (word*) init_buckets::bucket
-(word*) init_buckets::bucket#0 bucket zp ZP_WORD:61 7.333333333333333
+(word*) init_buckets::bucket#0 bucket zp ZP_WORD:72 7.333333333333333
 (byte*) init_buckets::dist
 (byte*) init_buckets::dist#1 dist zp ZP_WORD:8 7.333333333333333
 (byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:14 7.333333333333333
-(byte*) init_buckets::dist#4 dist zp ZP_WORD:8 22.0
-(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:14 4.4
+(byte*) init_buckets::dist#4 dist zp ZP_WORD:8 23.0
+(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:14 4.6000000000000005
+(byte*~) init_buckets::dist#6 dist zp ZP_WORD:8 4.0
+(byte*~) init_buckets::dist#8 dist#8 zp ZP_WORD:14 4.0
 (byte) init_buckets::distance
-(byte) init_buckets::distance#0 reg byte x 5.5
+(byte) init_buckets::distance#0 distance zp ZP_BYTE:71 5.5
 (byte) init_buckets::i
-(byte) init_buckets::i#1 reg byte x 16.5
-(byte) init_buckets::i#2 reg byte x 16.5
+(byte) init_buckets::i#1 reg byte y 16.5
+(byte) init_buckets::i#2 reg byte y 16.5
 (word) init_buckets::i1
 (word) init_buckets::i1#1 i1 zp ZP_WORD:10 16.5
 (word) init_buckets::i1#2 i1 zp ZP_WORD:10 7.333333333333333
@@ -224,12 +240,13 @@
 (word) init_buckets::i2#1 i2 zp ZP_WORD:12 16.5
 (word) init_buckets::i2#2 i2 zp ZP_WORD:12 5.5
 (byte) init_buckets::i3
-(byte) init_buckets::i3#1 reg byte x 16.5
-(byte) init_buckets::i3#2 reg byte x 16.5
+(byte) init_buckets::i3#1 reg byte y 16.5
+(byte) init_buckets::i3#2 reg byte y 16.5
 (word) init_buckets::i4
 (word) init_buckets::i4#1 i4 zp ZP_WORD:16 16.5
 (word) init_buckets::i4#2 i4 zp ZP_WORD:16 2.0
 (byte*) init_buckets::screen
+(byte*) init_buckets::screen#0 screen zp ZP_WORD:52 0.42500000000000004
 (void()) init_dist_screen((byte*) init_dist_screen::screen)
 (byte~) init_dist_screen::$13 reg byte a 202.0
 (byte~) init_dist_screen::$15 reg byte a 202.0
@@ -239,6 +256,7 @@
 (label) init_dist_screen::@10
 (label) init_dist_screen::@11
 (label) init_dist_screen::@12
+(label) init_dist_screen::@13
 (label) init_dist_screen::@2
 (label) init_dist_screen::@3
 (label) init_dist_screen::@4
@@ -251,14 +269,16 @@
 (byte) init_dist_screen::d
 (byte) init_dist_screen::d#0 reg byte a 126.25
 (word) init_dist_screen::ds
-(word) init_dist_screen::ds#0 ds zp ZP_WORD:72 202.0
+(word) init_dist_screen::ds#0 ds zp ZP_WORD:83 202.0
 (byte*) init_dist_screen::screen
+(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:40 1.5
 (byte*) init_dist_screen::screen_bottomline
+(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:42 4.0
 (byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:42 7.333333333333333
-(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:42 6.787878787878788
+(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:42 6.848484848484849
 (byte*) init_dist_screen::screen_topline
 (byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:40 5.5
-(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:40 7.0
+(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:40 7.0625
 (byte) init_dist_screen::x
 (byte) init_dist_screen::x#1 x zp ZP_BYTE:44 101.0
 (byte) init_dist_screen::x#2 x zp ZP_BYTE:44 26.578947368421055
@@ -270,7 +290,7 @@
 (byte) init_dist_screen::xd
 (byte) init_dist_screen::xd#0 reg byte a 303.0
 (word) init_dist_screen::xds
-(word) init_dist_screen::xds#0 xds zp ZP_WORD:72 202.0
+(word) init_dist_screen::xds#0 xds zp ZP_WORD:83 202.0
 (byte) init_dist_screen::y
 (byte) init_dist_screen::y#1 y zp ZP_BYTE:39 16.5
 (byte) init_dist_screen::y#10 y zp ZP_BYTE:39 0.9705882352941178
@@ -279,7 +299,7 @@
 (byte) init_dist_screen::yd
 (byte) init_dist_screen::yd#0 reg byte a 33.0
 (word) init_dist_screen::yds
-(word) init_dist_screen::yds#0 yds zp ZP_WORD:70 4.869565217391305
+(word) init_dist_screen::yds#0 yds zp ZP_WORD:81 4.869565217391305
 (void()) init_squares()
 (byte~) init_squares::$3 reg byte a 22.0
 (byte~) init_squares::$4 reg byte a 22.0
@@ -318,16 +338,16 @@
 (label) main::@8
 (label) main::@9
 (byte*) main::angle
-(byte*) main::angle#0 angle zp ZP_WORD:57 151.5
+(byte*) main::angle#0 angle zp ZP_WORD:67 151.5
 (word[]) main::bucket
-(word[]) main::bucket#0 bucket zp ZP_WORD:52 6.588235294117648
+(word[]) main::bucket#0 bucket zp ZP_WORD:62 6.588235294117648
 (byte) main::bucket_idx
 (byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:2 11.0
 (byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 2.0
 (byte) main::bucket_size
-(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:54 7.6875
+(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:64 7.6875
 (byte*) main::fill
-(byte*) main::fill#0 fill zp ZP_WORD:55 202.0
+(byte*) main::fill#0 fill zp ZP_WORD:65 202.0
 (byte*) main::fill1
 (byte*) main::fill1#0 fill1 zp ZP_WORD:6 22.0
 (byte) main::i
@@ -348,18 +368,18 @@
 (void*()) malloc((word) malloc::size)
 (label) malloc::@return
 (byte*) malloc::mem
-(byte*) malloc::mem#0 mem zp ZP_WORD:20 0.8
+(byte*) malloc::mem#0 mem zp ZP_WORD:20 0.4
 (void*) malloc::return
 (word) malloc::size
-(word) malloc::size#1 size zp ZP_WORD:20 22.0
-(word) malloc::size#2 size zp ZP_WORD:20 13.0
+(word) malloc::size#6 size zp ZP_WORD:20 22.0
+(word) malloc::size#7 size zp ZP_WORD:20 13.0
 (word()) sqr((byte) sqr::val)
 (byte~) sqr::$0 reg byte a 4.0
 (label) sqr::@return
 (word) sqr::return
-(word) sqr::return#0 return zp ZP_WORD:72 28.5
-(word) sqr::return#2 return#2 zp ZP_WORD:70 22.0
-(word) sqr::return#3 return zp ZP_WORD:72 202.0
+(word) sqr::return#0 return zp ZP_WORD:83 28.5
+(word) sqr::return#2 return#2 zp ZP_WORD:81 22.0
+(word) sqr::return#3 return zp ZP_WORD:83 202.0
 (byte) sqr::val
 (byte) sqr::val#0 reg byte a 22.0
 (byte) sqr::val#1 reg byte a 202.0
@@ -376,25 +396,25 @@
 (byte) sqrt::return#2 reg byte a 202.0
 (byte) sqrt::sq
 (word) sqrt::val
-(word) sqrt::val#0 val zp ZP_WORD:72 103.0
+(word) sqrt::val#0 val zp ZP_WORD:83 103.0
 
 zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
 reg byte x [ main::i#2 main::i#1 ]
 zp ZP_BYTE:3 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ]
 zp ZP_WORD:4 [ main::min_offset#5 main::min_offset#7 ]
 zp ZP_WORD:6 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 main::fill1#0 ]
-reg byte x [ init_buckets::i#2 init_buckets::i#1 ]
-zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#1 ]
+reg byte y [ init_buckets::i#2 init_buckets::i#1 ]
+zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
 zp ZP_WORD:10 [ init_buckets::i1#2 init_buckets::i1#1 ]
 zp ZP_WORD:12 [ init_buckets::i2#2 init_buckets::i2#1 ]
-reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ]
-zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#3 ]
+reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ]
+zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
 zp ZP_WORD:16 [ init_buckets::i4#2 init_buckets::i4#1 ]
-zp ZP_WORD:18 [ heap_head#13 heap_head#1 ]
-zp ZP_WORD:20 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
+zp ZP_WORD:18 [ heap_head#18 heap_head#1 ]
+zp ZP_WORD:20 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
 zp ZP_BYTE:22 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
-zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ]
-zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ]
+zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ]
+zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
 zp ZP_BYTE:27 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
 zp ZP_BYTE:28 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
 zp ZP_WORD:29 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
@@ -405,8 +425,8 @@ reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
 zp ZP_WORD:35 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
 zp ZP_WORD:37 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
 zp ZP_BYTE:39 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
-zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
-zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
+zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
+zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
 reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
 zp ZP_BYTE:44 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
 zp ZP_BYTE:45 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
@@ -417,39 +437,44 @@ reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ]
 zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ]
 zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
 reg byte x [ init_squares::i#2 init_squares::i#1 ]
+zp ZP_WORD:52 [ SCREEN_DIST#0 init_buckets::screen#0 ]
+zp ZP_WORD:54 [ SCREEN_ANGLE#0 ]
+zp ZP_WORD:56 [ BUCKET_SIZES#0 ]
+zp ZP_WORD:58 [ BUCKETS#0 ]
+zp ZP_WORD:60 [ BUCKET_IDX#0 ]
 reg byte a [ main::$21 ]
-zp ZP_WORD:52 [ main::bucket#0 ]
-zp ZP_BYTE:54 [ main::bucket_size#0 ]
+zp ZP_WORD:62 [ main::bucket#0 ]
+zp ZP_BYTE:64 [ main::bucket_size#0 ]
 reg byte a [ main::$22 ]
-zp ZP_WORD:55 [ main::fill#0 ]
-zp ZP_WORD:57 [ main::angle#0 ]
-zp ZP_WORD:59 [ init_buckets::$12 init_buckets::$16 ]
-reg byte x [ init_buckets::distance#0 ]
-zp ZP_WORD:61 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
-zp ZP_WORD:63 [ init_buckets::$10 ]
+zp ZP_WORD:65 [ main::fill#0 ]
+zp ZP_WORD:67 [ main::angle#0 ]
+zp ZP_WORD:69 [ init_buckets::$12 init_buckets::$16 ]
+zp ZP_BYTE:71 [ init_buckets::distance#0 ]
+zp ZP_WORD:72 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
+zp ZP_WORD:74 [ init_buckets::$10 ]
 reg byte a [ init_buckets::$14 ]
 reg byte a [ init_angle_screen::$2 ]
 reg byte a [ init_angle_screen::$3 ]
-zp ZP_WORD:65 [ init_angle_screen::xw#0 atan2_16::x#0 ]
+zp ZP_WORD:76 [ init_angle_screen::xw#0 atan2_16::x#0 ]
 reg byte a [ init_angle_screen::$6 ]
-zp ZP_WORD:67 [ init_angle_screen::yw#0 atan2_16::y#0 ]
-zp ZP_BYTE:69 [ init_angle_screen::ang_w#0 ]
+zp ZP_WORD:78 [ init_angle_screen::yw#0 atan2_16::y#0 ]
+zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ]
 reg byte a [ init_angle_screen::$12 ]
 reg byte a [ init_angle_screen::$13 ]
 reg byte a [ init_angle_screen::$14 ]
 reg byte a [ atan2_16::$24 ]
 reg byte a [ atan2_16::$23 ]
 reg byte a [ init_dist_screen::y2#0 ]
-zp ZP_WORD:70 [ sqr::return#2 init_dist_screen::yds#0 ]
+zp ZP_WORD:81 [ sqr::return#2 init_dist_screen::yds#0 ]
 reg byte a [ init_dist_screen::x2#0 ]
-zp ZP_WORD:72 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ]
+zp ZP_WORD:83 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ]
 reg byte a [ sqrt::return#2 ]
 reg byte a [ init_dist_screen::d#0 ]
 reg byte a [ sqrt::return#0 ]
 reg byte a [ bsearch16u::$6 ]
 reg byte a [ bsearch16u::$16 ]
-zp ZP_WORD:74 [ bsearch16u::pivot#0 ]
-zp ZP_WORD:76 [ bsearch16u::result#0 ]
+zp ZP_WORD:85 [ bsearch16u::pivot#0 ]
+zp ZP_WORD:87 [ bsearch16u::result#0 ]
 reg byte a [ sqr::$0 ]
 reg byte a [ init_squares::$3 ]
 reg byte a [ init_squares::$4 ]