Resolved forward reference irqTop to interrupt(HARDWARE_ALL)(void()) irqTop()
Resolved forward reference RASTER_IRQ_TOP to (byte) RASTER_IRQ_TOP
Resolved forward reference RASTER_IRQ_MIDDLE to (byte) RASTER_IRQ_MIDDLE
Resolved forward reference irqBottom to interrupt(HARDWARE_ALL)(void()) irqBottom()
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer increment (word*) init_squares::squares ← ++ (word*) init_squares::squares
Fixing pointer addition (word~) sqrt::$1 ← (word*) sqrt::found - (word*) SQUARES
Fixing pointer addition (struct ProcessingSprite*~) processChars::$2 ← (struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) processChars::i
Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
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 *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) main::i)
Fixing pointer array-indexing *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) startProcessing::i)
Fixing pointer array-indexing *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) startProcessing::spriteIdx)
Fixing pointer array-indexing *((word[$28]) VXSIN + (byte) processChars::xchar)
Fixing pointer array-indexing *((word[$19]) VYSIN + (byte) processChars::ychar)
Created struct value member variable (byte) main::center_x
Created struct value member variable (byte) main::center_y
Created struct value member variable (byte) main::center_dist
Converted struct value to member variables (struct ProcessingChar) main::center
Created struct value member variable (byte) main::$9_x
Created struct value member variable (byte) main::$9_y
Created struct value member variable (byte) main::$9_dist
Converted struct value to member variables (struct ProcessingChar~) main::$9
Created struct value member variable (byte) getCharToProcess::return_x
Created struct value member variable (byte) getCharToProcess::return_y
Created struct value member variable (byte) getCharToProcess::return_dist
Converted struct value to member variables (struct ProcessingChar) getCharToProcess::return
Created struct value member variable (byte) getCharToProcess::closest_x
Created struct value member variable (byte) getCharToProcess::closest_y
Created struct value member variable (byte) getCharToProcess::closest_dist
Converted struct value to member variables (struct ProcessingChar) getCharToProcess::closest
Created struct value member variable (byte) startProcessing::center_x
Created struct value member variable (byte) startProcessing::center_y
Created struct value member variable (byte) startProcessing::center_dist
Converted struct value to member variables (struct ProcessingChar) startProcessing::center
Converted procedure struct value parameter to member unwinding (void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
Adding struct value list initializer *((word*) main::$17 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$18 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$19 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$20 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$21 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$22 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$23 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$24 + (byte~) main::$16) ← (const byte) STATUS_FREE
Adding struct value list initializer *((byte**) main::$25 + (byte~) main::$16) ← (number) 0
Converted procedure call LValue to member unwinding { (byte) main::$9_x, (byte) main::$9_y, (byte) main::$9_dist } ← call getCharToProcess 
Adding struct value member variable copy (byte) main::center_x ← (byte) main::$9_x
Adding struct value member variable copy (byte) main::center_y ← (byte) main::$9_y
Adding struct value member variable copy (byte) main::center_dist ← (byte) main::$9_dist
Converted procedure struct value parameter to member unwinding in call (void~) main::$12 ← call startProcessing (byte) main::center_x (byte) main::center_y (byte) main::center_dist 
Adding struct value list initializer (byte) getCharToProcess::closest_x ← (number) 0
Adding struct value list initializer (byte) getCharToProcess::closest_y ← (number) 0
Adding struct value list initializer (byte) getCharToProcess::closest_dist ← (byte) NOT_FOUND
Adding struct value list initializer (byte) getCharToProcess::closest_x ← (byte) getCharToProcess::x
Adding struct value list initializer (byte) getCharToProcess::closest_y ← (byte) getCharToProcess::y
Adding struct value list initializer (byte) getCharToProcess::closest_dist ← (byte) getCharToProcess::dist
Adding struct value member variable copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::closest_x
Adding struct value member variable copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::closest_y
Adding struct value member variable copy (byte) getCharToProcess::return_dist ← (byte) getCharToProcess::closest_dist
Adding struct value member variable copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::return_x
Adding struct value member variable copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::return_y
Adding struct value member variable copy (byte) getCharToProcess::return_dist ← (byte) getCharToProcess::return_dist
Converted procedure struct return value to member unwinding return { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (byte) getCharToProcess::return_dist }
Adding struct value list initializer *((word*) startProcessing::$32 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX
Adding struct value list initializer *((word*) startProcessing::$33 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY
Adding struct value list initializer *((word*) startProcessing::$34 + (byte~) startProcessing::$31) ← (word~) startProcessing::$23
Adding struct value list initializer *((word*) startProcessing::$35 + (byte~) startProcessing::$31) ← (number) $3c
Adding struct value list initializer *((byte*) startProcessing::$36 + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteIdx
Adding struct value list initializer *((byte*) startProcessing::$37 + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr
Adding struct value list initializer *((byte*) startProcessing::$38 + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol
Adding struct value list initializer *((byte*) startProcessing::$39 + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW
Adding struct value list initializer *((byte**) startProcessing::$40 + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr
Replacing struct member reference (struct ProcessingChar) main::center.dist with member unwinding reference (byte) main::center_dist
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member unwinding reference (byte) getCharToProcess::closest_dist
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member unwinding reference (byte) getCharToProcess::closest_dist
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.y with member unwinding reference (byte) getCharToProcess::closest_y
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.x with member unwinding reference (byte) getCharToProcess::closest_x
Replacing struct member reference (struct ProcessingChar) startProcessing::center.y with member unwinding reference (byte) startProcessing::center_y
Replacing struct member reference (struct ProcessingChar) startProcessing::center.x with member unwinding reference (byte) startProcessing::center_x
Replacing struct member reference (struct ProcessingChar) startProcessing::center.x with member unwinding reference (byte) startProcessing::center_x
Replacing struct member reference (struct ProcessingChar) startProcessing::center.y with member unwinding reference (byte) startProcessing::center_y
Rewriting struct pointer member access *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte~) startProcessing::$30).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).id
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).screenPtr
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).col
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).id
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).id
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).ptr
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vx
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vx
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vx
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vy
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vy
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vy
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (byte~) processChars::$11
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 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) atan2_16::@9
Culled Empty Block (label) atan2_16::@10
Culled Empty Block (label) atan2_16::@11
Culled Empty Block (label) atan2_16::@12
Culled Empty Block (label) atan2_16::@28
Culled Empty Block (label) atan2_16::@29
Culled Empty Block (label) atan2_16::@21
Culled Empty Block (label) atan2_16::@22
Culled Empty Block (label) atan2_16::@23
Culled Empty Block (label) atan2_16::@31
Culled Empty Block (label) atan2_16::@32
Culled Empty Block (label) atan2_16::@14
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) @21
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@14
Culled Empty Block (label) main::@16
Culled Empty Block (label) @27
Culled Empty Block (label) getCharToProcess::@6
Culled Empty Block (label) getCharToProcess::@2
Culled Empty Block (label) @28
Culled Empty Block (label) startProcessing::@6
Culled Empty Block (label) startProcessing::@7
Culled Empty Block (label) processChars::@10
Culled Empty Block (label) processChars::@12
Culled Empty Block (label) processChars::@1
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) init_angle_screen::@5
Culled Empty Block (label) init_angle_screen::@6
Culled Empty Block (label) init_angle_screen::@7
Culled Empty Block (label) init_angle_screen::@8
Culled Empty Block (label) @32
Culled Empty Block (label) initSprites::@4
Culled Empty Block (label) initSprites::@5
Culled Empty Block (label) initSprites::@6
Culled Empty Block (label) @33
Culled Empty Block (label) setupRasterIrq::@4
Unwinding list assignment { (byte) main::$9_x, (byte) main::$9_y, (byte) main::$9_dist } ← { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (byte) getCharToProcess::return_dist }
Unwinding list assignment { (byte) getCharToProcess::return_x#0, (byte) getCharToProcess::return_y#0, (byte) getCharToProcess::return_dist#0 } ← { (byte) getCharToProcess::return_x#2, (byte) getCharToProcess::return_y#2, (byte) getCharToProcess::return_dist#2 }
Adding versioned struct unwinding for (struct ProcessingChar) getCharToProcess::return#0
Adding versioned struct unwinding for (struct ProcessingChar) getCharToProcess::return#1

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@4
@4: scope:[]  from @begin
  (byte*) HEAP_TOP#0 ← ((byte*)) (number) $a000
  (byte*) heap_head#0 ← (byte*) HEAP_TOP#0
  to:@15
malloc: scope:[malloc]  from @26 @37
  (word) malloc::size#2 ← phi( @26/(word) malloc::size#0 @37/(word) malloc::size#1 )
  (byte*) heap_head#5 ← phi( @26/(byte*) heap_head#9 @37/(byte*) heap_head#3 )
  (byte*~) malloc::$0 ← (byte*) heap_head#5 - (word) malloc::size#2
  (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#6 ← 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#6
  return 
  to:@return
@15: scope:[]  from @4
  (byte*) heap_head#11 ← phi( @4/(byte*) heap_head#0 )
  (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
 }}
  to:@22
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  (signed word) atan2_16::x#9 ← phi( init_angle_screen::@3/(signed word) atan2_16::x#0 )
  (signed word) atan2_16::y#1 ← phi( init_angle_screen::@3/(signed word) atan2_16::y#0 )
  (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
  if((bool~) atan2_16::$0) goto atan2_16::@1
  to:atan2_16::@2
atan2_16::@1: scope:[atan2_16]  from atan2_16
  (signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 )
  (signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 )
  (signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2
  to:atan2_16::@3
atan2_16::@2: scope:[atan2_16]  from atan2_16
  (signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 )
  (signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 )
  (signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3
  (signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1
  to:atan2_16::@3
atan2_16::@3: scope:[atan2_16]  from atan2_16::@1 atan2_16::@2
  (signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 )
  (signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 )
  (signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 )
  (signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4
  (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
  if((bool~) atan2_16::$5) goto atan2_16::@4
  to:atan2_16::@5
atan2_16::@4: scope:[atan2_16]  from atan2_16::@3
  (signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
  (signed word) atan2_16::yi#12 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
  (signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
  (signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2
  to:atan2_16::@6
atan2_16::@5: scope:[atan2_16]  from atan2_16::@3
  (signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
  (signed word) atan2_16::yi#13 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
  (signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
  (signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3
  (signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6
  to:atan2_16::@6
atan2_16::@6: scope:[atan2_16]  from atan2_16::@4 atan2_16::@5
  (signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 )
  (signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 )
  (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 )
  (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 )
  (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9
  (word) atan2_16::angle#0 ← (number) 0
  (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (number) 1
  (byte) atan2_16::i#0 ← (byte) 0
  to:atan2_16::@15
atan2_16::@15: scope:[atan2_16]  from atan2_16::@27 atan2_16::@6
  (signed word) atan2_16::y#7 ← phi( atan2_16::@27/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 )
  (signed word) atan2_16::x#7 ← phi( atan2_16::@27/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 )
  (word) atan2_16::angle#12 ← phi( atan2_16::@27/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 )
  (byte) atan2_16::i#6 ← phi( atan2_16::@27/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 )
  (signed word) atan2_16::xi#6 ← phi( atan2_16::@27/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
  (signed word) atan2_16::yi#3 ← phi( atan2_16::@27/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#9 )
  (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 == (number) 0
  (bool~) atan2_16::$18 ← ! (bool~) atan2_16::$17
  if((bool~) atan2_16::$18) goto atan2_16::@16
  to:atan2_16::@17
atan2_16::@16: scope:[atan2_16]  from atan2_16::@15
  (signed word) atan2_16::y#19 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 )
  (signed word) atan2_16::x#17 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 )
  (word) atan2_16::angle#19 ← phi( atan2_16::@15/(word) atan2_16::angle#12 )
  (byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 )
  (signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 )
  (signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(signed word) atan2_16::xi#6 )
  (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3
  (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#4
  (byte) atan2_16::shift#0 ← (byte) atan2_16::i#2
  to:atan2_16::@18
atan2_16::@17: scope:[atan2_16]  from atan2_16::@15 atan2_16::@27
  (signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@27/(signed word) atan2_16::y#8 )
  (signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@27/(signed word) atan2_16::x#8 )
  (word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@27/(word) atan2_16::angle#13 )
  (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
  (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
  (bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10
  if((bool~) atan2_16::$11) goto atan2_16::@7
  to:atan2_16::@33
atan2_16::@18: scope:[atan2_16]  from atan2_16::@16 atan2_16::@19
  (signed word) atan2_16::y#18 ← phi( atan2_16::@16/(signed word) atan2_16::y#19 atan2_16::@19/(signed word) atan2_16::y#20 )
  (signed word) atan2_16::x#16 ← phi( atan2_16::@16/(signed word) atan2_16::x#17 atan2_16::@19/(signed word) atan2_16::x#18 )
  (word) atan2_16::angle#18 ← phi( atan2_16::@16/(word) atan2_16::angle#19 atan2_16::@19/(word) atan2_16::angle#20 )
  (byte) atan2_16::i#10 ← phi( atan2_16::@16/(byte) atan2_16::i#2 atan2_16::@19/(byte) atan2_16::i#11 )
  (signed word) atan2_16::xi#11 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 atan2_16::@19/(signed word) atan2_16::xi#12 )
  (signed word) atan2_16::yi#14 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 atan2_16::@19/(signed word) atan2_16::yi#15 )
  (signed word) atan2_16::yd#7 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 atan2_16::@19/(signed word) atan2_16::yd#1 )
  (signed word) atan2_16::xd#7 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 atan2_16::@19/(signed word) atan2_16::xd#1 )
  (byte) atan2_16::shift#2 ← phi( atan2_16::@16/(byte) atan2_16::shift#0 atan2_16::@19/(byte) atan2_16::shift#1 )
  (bool~) atan2_16::$19 ← (byte) atan2_16::shift#2 >= (number) 2
  if((bool~) atan2_16::$19) goto atan2_16::@19
  to:atan2_16::@20
atan2_16::@19: scope:[atan2_16]  from atan2_16::@18
  (signed word) atan2_16::y#20 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
  (signed word) atan2_16::x#18 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
  (word) atan2_16::angle#20 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
  (byte) atan2_16::i#11 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
  (signed word) atan2_16::xi#12 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
  (signed word) atan2_16::yi#15 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
  (byte) atan2_16::shift#3 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 )
  (signed word) atan2_16::yd#3 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
  (signed word) atan2_16::xd#3 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 )
  (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
  (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
  (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
  to:atan2_16::@18
atan2_16::@20: scope:[atan2_16]  from atan2_16::@18
  (signed word) atan2_16::y#16 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
  (signed word) atan2_16::x#14 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
  (word) atan2_16::angle#16 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
  (byte) atan2_16::i#8 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
  (signed word) atan2_16::xi#9 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
  (signed word) atan2_16::yd#8 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
  (signed word) atan2_16::xd#8 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 )
  (signed word) atan2_16::yi#10 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
  (byte) atan2_16::shift#4 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 )
  (bool~) atan2_16::$25 ← (number) 0 != (byte) atan2_16::shift#4
  (bool~) atan2_16::$20 ← ! (bool~) atan2_16::$25
  if((bool~) atan2_16::$20) goto atan2_16::@25
  to:atan2_16::@24
atan2_16::@25: scope:[atan2_16]  from atan2_16::@20 atan2_16::@24
  (signed word) atan2_16::y#14 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 atan2_16::@24/(signed word) atan2_16::y#17 )
  (signed word) atan2_16::x#13 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 atan2_16::@24/(signed word) atan2_16::x#15 )
  (word) atan2_16::angle#14 ← phi( atan2_16::@20/(word) atan2_16::angle#16 atan2_16::@24/(word) atan2_16::angle#17 )
  (byte) atan2_16::i#7 ← phi( atan2_16::@20/(byte) atan2_16::i#8 atan2_16::@24/(byte) atan2_16::i#9 )
  (signed word) atan2_16::xd#9 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 atan2_16::@24/(signed word) atan2_16::xd#2 )
  (signed word) atan2_16::yd#9 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 atan2_16::@24/(signed word) atan2_16::yd#2 )
  (signed word) atan2_16::xi#7 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 atan2_16::@24/(signed word) atan2_16::xi#10 )
  (signed word) atan2_16::yi#5 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 atan2_16::@24/(signed word) atan2_16::yi#11 )
  (bool~) atan2_16::$21 ← (signed word) atan2_16::yi#5 >= (number) 0
  if((bool~) atan2_16::$21) goto atan2_16::@26
  to:atan2_16::@30
atan2_16::@24: scope:[atan2_16]  from atan2_16::@20
  (signed word) atan2_16::y#17 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 )
  (signed word) atan2_16::x#15 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 )
  (word) atan2_16::angle#17 ← phi( atan2_16::@20/(word) atan2_16::angle#16 )
  (byte) atan2_16::i#9 ← phi( atan2_16::@20/(byte) atan2_16::i#8 )
  (signed word) atan2_16::xi#10 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 )
  (signed word) atan2_16::yi#11 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 )
  (signed word) atan2_16::yd#4 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 )
  (signed word) atan2_16::xd#4 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 )
  (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
  (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
  to:atan2_16::@25
atan2_16::@26: scope:[atan2_16]  from atan2_16::@25
  (signed word) atan2_16::y#10 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
  (signed word) atan2_16::x#11 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
  (word) atan2_16::angle#7 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
  (byte) atan2_16::i#3 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
  (signed word) atan2_16::xd#5 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
  (signed word) atan2_16::yi#6 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
  (signed word) atan2_16::yd#5 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
  (signed word) atan2_16::xi#4 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 )
  (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#5
  (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#6 - (signed word) atan2_16::xd#5
  (byte~) atan2_16::$23 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
  to:atan2_16::@27
atan2_16::@30: scope:[atan2_16]  from atan2_16::@25
  (signed word) atan2_16::y#11 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
  (signed word) atan2_16::x#12 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
  (word) atan2_16::angle#8 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
  (byte) atan2_16::i#4 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
  (signed word) atan2_16::xd#6 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
  (signed word) atan2_16::yi#7 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
  (signed word) atan2_16::yd#6 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
  (signed word) atan2_16::xi#5 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 )
  (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#6
  (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#7 + (signed word) atan2_16::xd#6
  (byte~) atan2_16::$24 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
  to:atan2_16::@27
atan2_16::@27: scope:[atan2_16]  from atan2_16::@26 atan2_16::@30
  (signed word) atan2_16::y#8 ← phi( atan2_16::@26/(signed word) atan2_16::y#10 atan2_16::@30/(signed word) atan2_16::y#11 )
  (signed word) atan2_16::xi#8 ← phi( atan2_16::@26/(signed word) atan2_16::xi#1 atan2_16::@30/(signed word) atan2_16::xi#2 )
  (signed word) atan2_16::x#8 ← phi( atan2_16::@26/(signed word) atan2_16::x#11 atan2_16::@30/(signed word) atan2_16::x#12 )
  (word) atan2_16::angle#13 ← phi( atan2_16::@26/(word) atan2_16::angle#2 atan2_16::@30/(word) atan2_16::angle#3 )
  (signed word) atan2_16::yi#8 ← phi( atan2_16::@26/(signed word) atan2_16::yi#1 atan2_16::@30/(signed word) atan2_16::yi#2 )
  (byte) atan2_16::i#5 ← phi( atan2_16::@26/(byte) atan2_16::i#3 atan2_16::@30/(byte) atan2_16::i#4 )
  (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,atan2_16::$16)
  (bool~) atan2_16::$22 ← (byte) atan2_16::i#1 != rangelast(0,atan2_16::$16)
  if((bool~) atan2_16::$22) goto atan2_16::@15
  to:atan2_16::@17
atan2_16::@7: scope:[atan2_16]  from atan2_16::@17 atan2_16::@33
  (word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@33/(word) atan2_16::angle#4 )
  (signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@33/(signed word) atan2_16::y#6 )
  (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
  (bool~) atan2_16::$14 ← ! (bool~) atan2_16::$13
  if((bool~) atan2_16::$14) goto atan2_16::@8
  to:atan2_16::@13
atan2_16::@33: scope:[atan2_16]  from atan2_16::@17
  (signed word) atan2_16::y#6 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 )
  (word) atan2_16::angle#9 ← phi( atan2_16::@17/(word) atan2_16::angle#1 )
  (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
  (word) atan2_16::angle#4 ← (number~) atan2_16::$12
  to:atan2_16::@7
atan2_16::@8: scope:[atan2_16]  from atan2_16::@13 atan2_16::@7
  (word) atan2_16::angle#10 ← phi( atan2_16::@13/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#15 )
  (word) atan2_16::return#0 ← (word) atan2_16::angle#10
  to:atan2_16::@return
atan2_16::@13: scope:[atan2_16]  from atan2_16::@7
  (word) atan2_16::angle#11 ← phi( atan2_16::@7/(word) atan2_16::angle#15 )
  (word~) atan2_16::$15 ← - (word) atan2_16::angle#11
  (word) atan2_16::angle#5 ← (word~) atan2_16::$15
  to:atan2_16::@8
atan2_16::@return: scope:[atan2_16]  from atan2_16::@8
  (word) atan2_16::return#3 ← phi( atan2_16::@8/(word) atan2_16::return#0 )
  (word) atan2_16::return#1 ← (word) atan2_16::return#3
  return 
  to:@return
@22: scope:[]  from @15
  (byte*) heap_head#10 ← phi( @15/(byte*) heap_head#11 )
  (byte*) PROCPORT_DDR#0 ← ((byte*)) (number) 0
  (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (number) 7
  (byte*) PROCPORT#0 ← ((byte*)) (number) 1
  (byte) PROCPORT_RAM_IO#0 ← (number) 5
  (byte) PROCPORT_RAM_CHARROM#0 ← (number) 1
  (byte*) CHARGEN#0 ← ((byte*)) (number) $d000
  (byte) BORDER_XPOS_LEFT#0 ← (number) $18
  (word) BORDER_XPOS_RIGHT#0 ← (number) $158
  (byte) BORDER_YPOS_TOP#0 ← (number) $32
  (byte) BORDER_YPOS_BOTTOM#0 ← (number) $fa
  (word) SPRITE_PTRS#0 ← (number) $3f8
  (byte*) SPRITES_XPOS#0 ← ((byte*)) (number) $d000
  (byte*) SPRITES_YPOS#0 ← ((byte*)) (number) $d001
  (byte*) SPRITES_XMSB#0 ← ((byte*)) (number) $d010
  (byte*) RASTER#0 ← ((byte*)) (number) $d012
  (byte*) SPRITES_ENABLE#0 ← ((byte*)) (number) $d015
  (byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (number) $d017
  (byte*) SPRITES_MC#0 ← ((byte*)) (number) $d01c
  (byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (number) $d01d
  (byte*) BORDERCOL#0 ← ((byte*)) (number) $d020
  (byte*) BGCOL#0 ← ((byte*)) (number) $d021
  (byte*) SPRITES_COLS#0 ← ((byte*)) (number) $d027
  (byte*) VIC_CONTROL#0 ← ((byte*)) (number) $d011
  (byte*) IRQ_STATUS#0 ← ((byte*)) (number) $d019
  (byte*) IRQ_ENABLE#0 ← ((byte*)) (number) $d01a
  (byte) IRQ_RASTER#0 ← (number) 1
  (byte*) COLS#0 ← ((byte*)) (number) $d800
  (byte*) CIA1_INTERRUPT#0 ← ((byte*)) (number) $dc0d
  (byte) CIA_INTERRUPT_CLEAR#0 ← (number) $7f
  (void()**) HARDWARE_IRQ#0 ← ((void()**)) (number) $fffe
  (byte) WHITE#0 ← (number) 1
  (byte) BLUE#0 ← (number) 6
  (byte) LIGHT_BLUE#0 ← (number) $e
  to:@26
@26: scope:[]  from @22
  (byte*) heap_head#9 ← phi( @22/(byte*) heap_head#10 )
  (bool) DEBUG#0 ← false
  (byte*) SCREEN#0 ← ((byte*)) (number) $400
  (byte*) SPRITE_DATA#0 ← ((byte*)) (number) $2000
  (word[$28]) VXSIN#0 ← kickasm {{ .for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }
 }}
  (word[$19]) VYSIN#0 ← kickasm {{ .for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }
 }}
  (word) malloc::size#0 ← (number) $3e8
  call malloc 
  (void*) malloc::return#2 ← (void*) malloc::return#1
  to:@37
@37: scope:[]  from @26
  (byte*) heap_head#7 ← phi( @26/(byte*) heap_head#2 )
  (void*) malloc::return#5 ← phi( @26/(void*) malloc::return#2 )
  (void*~) $0 ← (void*) malloc::return#5
  (byte*) heap_head#3 ← (byte*) heap_head#7
  (byte*) SCREEN_COPY#0 ← ((byte*)) (void*~) $0
  (word) malloc::size#1 ← (number) $3e8
  call malloc 
  (void*) malloc::return#3 ← (void*) malloc::return#1
  to:@38
@38: scope:[]  from @37
  (byte*) SCREEN_COPY#25 ← phi( @37/(byte*) SCREEN_COPY#0 )
  (byte*) heap_head#8 ← phi( @37/(byte*) heap_head#2 )
  (void*) malloc::return#6 ← phi( @37/(void*) malloc::return#3 )
  (void*~) $1 ← (void*) malloc::return#6
  (byte*) heap_head#4 ← (byte*) heap_head#8
  (byte*) SCREEN_DIST#0 ← ((byte*)) (void*~) $1
  (byte) NUM_PROCESSING#0 ← (number) 8
  (byte) NOT_FOUND#0 ← (number) $ff
  (struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 ← { fill( NUM_PROCESSING#0, 0) }
  to:@29
main: scope:[main]  from @36
  (byte*) SCREEN_COPY#4 ← phi( @36/(byte*) SCREEN_COPY#7 )
  (byte*) SCREEN_DIST#1 ← phi( @36/(byte*) SCREEN_DIST#3 )
  (byte*) init_angle_screen::screen#0 ← (byte*) SCREEN_DIST#1
  call init_angle_screen 
  to:main::@17
main::@17: scope:[main]  from main
  (byte*) SCREEN_DIST#17 ← phi( main/(byte*) SCREEN_DIST#1 )
  (byte*) SCREEN_COPY#1 ← phi( main/(byte*) SCREEN_COPY#4 )
  (byte*) main::src#0 ← (byte*) SCREEN#0
  (byte*) main::dst#0 ← (byte*) SCREEN_COPY#1
  to:main::@1
main::@1: scope:[main]  from main::@17 main::@2
  (byte*) SCREEN_DIST#16 ← phi( main::@17/(byte*) SCREEN_DIST#17 main::@2/(byte*) SCREEN_DIST#18 )
  (byte*) SCREEN_COPY#26 ← phi( main::@17/(byte*) SCREEN_COPY#1 main::@2/(byte*) SCREEN_COPY#27 )
  (byte*) main::dst#3 ← phi( main::@17/(byte*) main::dst#0 main::@2/(byte*) main::dst#1 )
  (byte*) main::src#2 ← phi( main::@17/(byte*) main::src#0 main::@2/(byte*) main::src#1 )
  (byte*~) main::$5 ← (byte*) SCREEN#0 + (number) $3e8
  (bool~) main::$6 ← (byte*) main::src#2 != (byte*~) main::$5
  if((bool~) main::$6) goto main::@2
  to:main::@3
main::@2: scope:[main]  from main::@1
  (byte*) SCREEN_DIST#18 ← phi( main::@1/(byte*) SCREEN_DIST#16 )
  (byte*) SCREEN_COPY#27 ← phi( main::@1/(byte*) SCREEN_COPY#26 )
  (byte*) main::dst#2 ← phi( main::@1/(byte*) main::dst#3 )
  (byte*) main::src#3 ← phi( main::@1/(byte*) main::src#2 )
  *((byte*) main::dst#2) ← *((byte*) main::src#3)
  (byte*) main::src#1 ← ++ (byte*) main::src#3
  (byte*) main::dst#1 ← ++ (byte*) main::dst#2
  to:main::@1
main::@3: scope:[main]  from main::@1
  (byte*) SCREEN_DIST#15 ← phi( main::@1/(byte*) SCREEN_DIST#16 )
  (byte*) SCREEN_COPY#24 ← phi( main::@1/(byte*) SCREEN_COPY#26 )
  (number~) main::$7 ← (byte) NUM_PROCESSING#0 - (number) 1
  (byte) main::i#0 ← (byte) 0
  to:main::@7
main::@7: scope:[main]  from main::@3 main::@7
  (byte*) SCREEN_DIST#14 ← phi( main::@3/(byte*) SCREEN_DIST#15 main::@7/(byte*) SCREEN_DIST#14 )
  (byte*) SCREEN_COPY#21 ← phi( main::@3/(byte*) SCREEN_COPY#24 main::@7/(byte*) SCREEN_COPY#21 )
  (byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@7/(byte) main::i#1 )
  (byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  (word*) main::$17 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  *((word*) main::$17 + (byte~) main::$16) ← (number) 0
  (word*) main::$18 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  *((word*) main::$18 + (byte~) main::$16) ← (number) 0
  (word*) main::$19 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  *((word*) main::$19 + (byte~) main::$16) ← (number) 0
  (word*) main::$20 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  *((word*) main::$20 + (byte~) main::$16) ← (number) 0
  (byte*) main::$21 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  *((byte*) main::$21 + (byte~) main::$16) ← (number) 0
  (byte*) main::$22 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
  *((byte*) main::$22 + (byte~) main::$16) ← (number) 0
  (byte*) main::$23 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
  *((byte*) main::$23 + (byte~) main::$16) ← (number) 0
  (byte*) main::$24 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  *((byte*) main::$24 + (byte~) main::$16) ← (const byte) STATUS_FREE
  (byte**) main::$25 ← (byte**)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
  *((byte**) main::$25 + (byte~) main::$16) ← ((byte*)) (number) 0
  (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,main::$7)
  (bool~) main::$8 ← (byte) main::i#1 != rangelast(0,main::$7)
  if((bool~) main::$8) goto main::@7
  to:main::@8
main::@8: scope:[main]  from main::@7
  (byte*) SCREEN_DIST#11 ← phi( main::@7/(byte*) SCREEN_DIST#14 )
  (byte*) SCREEN_COPY#15 ← phi( main::@7/(byte*) SCREEN_COPY#21 )
  call initSprites 
  to:main::@18
main::@18: scope:[main]  from main::@8
  (byte*) SCREEN_DIST#8 ← phi( main::@8/(byte*) SCREEN_DIST#11 )
  (byte*) SCREEN_COPY#11 ← phi( main::@8/(byte*) SCREEN_COPY#15 )
  (void()*~) main::$2 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
  (word) setupRasterIrq::raster#0 ← (byte) RASTER_IRQ_TOP#0
  (void()*) setupRasterIrq::irqRoutine#0 ← (void()*~) main::$2
  call setupRasterIrq 
  to:main::@19
main::@19: scope:[main]  from main::@18
  (byte*) SCREEN_DIST#5 ← phi( main::@18/(byte*) SCREEN_DIST#8 )
  (byte*) SCREEN_COPY#8 ← phi( main::@18/(byte*) SCREEN_COPY#11 )
  to:main::@9
main::@9: scope:[main]  from main::@19 main::@21
  (byte*) SCREEN_DIST#4 ← phi( main::@19/(byte*) SCREEN_DIST#5 main::@21/(byte*) SCREEN_DIST#6 )
  (byte*) SCREEN_COPY#5 ← phi( main::@19/(byte*) SCREEN_COPY#8 main::@21/(byte*) SCREEN_COPY#9 )
  call getCharToProcess 
  (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#2
  (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#2
  (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#2
  to:main::@20
main::@20: scope:[main]  from main::@9
  (byte*) SCREEN_DIST#12 ← phi( main::@9/(byte*) SCREEN_DIST#4 )
  (byte*) SCREEN_COPY#16 ← phi( main::@9/(byte*) SCREEN_COPY#5 )
  (byte) getCharToProcess::return_dist#3 ← phi( main::@9/(byte) getCharToProcess::return_dist#0 )
  (byte) getCharToProcess::return_y#3 ← phi( main::@9/(byte) getCharToProcess::return_y#0 )
  (byte) getCharToProcess::return_x#3 ← phi( main::@9/(byte) getCharToProcess::return_x#0 )
  (byte) main::$9_x ← (byte) getCharToProcess::return_x#3
  (byte) main::$9_y ← (byte) getCharToProcess::return_y#3
  (byte) main::$9_dist ← (byte) getCharToProcess::return_dist#3
  (byte) main::center_x#0 ← (byte) main::$9_x
  (byte) main::center_y#0 ← (byte) main::$9_y
  (byte) main::center_dist#0 ← (byte) main::$9_dist
  (bool~) main::$10 ← (byte) main::center_dist#0 == (byte) NOT_FOUND#0
  (bool~) main::$11 ← ! (bool~) main::$10
  if((bool~) main::$11) goto main::@10
  to:main::@11
main::@10: scope:[main]  from main::@20
  (byte*) SCREEN_DIST#9 ← phi( main::@20/(byte*) SCREEN_DIST#12 )
  (byte*) SCREEN_COPY#12 ← phi( main::@20/(byte*) SCREEN_COPY#16 )
  (byte) main::center_dist#1 ← phi( main::@20/(byte) main::center_dist#0 )
  (byte) main::center_y#1 ← phi( main::@20/(byte) main::center_y#0 )
  (byte) main::center_x#1 ← phi( main::@20/(byte) main::center_x#0 )
  (byte) startProcessing::center_x#0 ← (byte) main::center_x#1
  (byte) startProcessing::center_y#0 ← (byte) main::center_y#1
  (byte) startProcessing::center_dist#0 ← (byte) main::center_dist#1
  call startProcessing 
  to:main::@21
main::@21: scope:[main]  from main::@10
  (byte*) SCREEN_DIST#6 ← phi( main::@10/(byte*) SCREEN_DIST#9 )
  (byte*) SCREEN_COPY#9 ← phi( main::@10/(byte*) SCREEN_COPY#12 )
  if(true) goto main::@9
  to:main::@11
main::@11: scope:[main]  from main::@20 main::@21
  (byte*~) main::$4 ← (byte*) SCREEN#0 + (number) $3e7
  *((byte*~) main::$4) ← (byte) '.'
  to:main::@15
main::@15: scope:[main]  from main::@11 main::@15
  (byte*~) main::$15 ← (byte*) COLS#0 + (number) $3e7
  *((byte*~) main::$15) ← ++ *((byte*~) main::$15)
  if(true) goto main::@15
  to:main::@return
main::@return: scope:[main]  from main::@15
  return 
  to:@return
getCharToProcess: scope:[getCharToProcess]  from main::@9
  (byte*) SCREEN_DIST#2 ← phi( main::@9/(byte*) SCREEN_DIST#4 )
  (byte*) SCREEN_COPY#2 ← phi( main::@9/(byte*) SCREEN_COPY#5 )
  (byte) getCharToProcess::closest_x#0 ← (number) 0
  (byte) getCharToProcess::closest_y#0 ← (number) 0
  (byte) getCharToProcess::closest_dist#0 ← (byte) NOT_FOUND#0
  (byte*) getCharToProcess::screen_line#0 ← (byte*) SCREEN_COPY#2
  (byte*) getCharToProcess::dist_line#0 ← (byte*) SCREEN_DIST#2
  (byte) getCharToProcess::y#0 ← (byte) 0
  to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess]  from getCharToProcess getCharToProcess::@9
  (byte*) SCREEN_COPY#22 ← phi( getCharToProcess/(byte*) SCREEN_COPY#2 getCharToProcess::@9/(byte*) SCREEN_COPY#10 )
  (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) getCharToProcess::closest_y#0 getCharToProcess::@9/(byte) getCharToProcess::closest_y#5 )
  (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) getCharToProcess::closest_x#0 getCharToProcess::@9/(byte) getCharToProcess::closest_x#5 )
  (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) getCharToProcess::y#0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
  (byte) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(byte) getCharToProcess::closest_dist#0 getCharToProcess::@9/(byte) getCharToProcess::closest_dist#6 )
  (byte*) getCharToProcess::dist_line#6 ← phi( getCharToProcess/(byte*) getCharToProcess::dist_line#0 getCharToProcess::@9/(byte*) getCharToProcess::dist_line#1 )
  (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(byte*) getCharToProcess::screen_line#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
  (byte) getCharToProcess::x#0 ← (byte) 0
  to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess]  from getCharToProcess::@3 getCharToProcess::@5
  (byte*) SCREEN_COPY#17 ← phi( getCharToProcess::@3/(byte*) SCREEN_COPY#22 getCharToProcess::@5/(byte*) SCREEN_COPY#13 )
  (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@3/(byte) getCharToProcess::closest_y#9 getCharToProcess::@5/(byte) getCharToProcess::closest_y#6 )
  (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@3/(byte) getCharToProcess::closest_x#9 getCharToProcess::@5/(byte) getCharToProcess::closest_x#6 )
  (byte) getCharToProcess::y#6 ← phi( getCharToProcess::@3/(byte) getCharToProcess::y#7 getCharToProcess::@5/(byte) getCharToProcess::y#5 )
  (byte) getCharToProcess::closest_dist#5 ← phi( getCharToProcess::@3/(byte) getCharToProcess::closest_dist#8 getCharToProcess::@5/(byte) getCharToProcess::closest_dist#9 )
  (byte*) getCharToProcess::dist_line#4 ← phi( getCharToProcess::@3/(byte*) getCharToProcess::dist_line#6 getCharToProcess::@5/(byte*) getCharToProcess::dist_line#5 )
  (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@3/(byte) getCharToProcess::x#0 getCharToProcess::@5/(byte) getCharToProcess::x#1 )
  (byte*) getCharToProcess::screen_line#2 ← phi( getCharToProcess::@3/(byte*) getCharToProcess::screen_line#4 getCharToProcess::@5/(byte*) getCharToProcess::screen_line#5 )
  (bool~) getCharToProcess::$2 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) != (byte) ' '
  (bool~) getCharToProcess::$3 ← ! (bool~) getCharToProcess::$2
  if((bool~) getCharToProcess::$3) goto getCharToProcess::@5
  to:getCharToProcess::@7
getCharToProcess::@5: scope:[getCharToProcess]  from getCharToProcess::@4 getCharToProcess::@7 getCharToProcess::@8
  (byte*) SCREEN_COPY#13 ← phi( getCharToProcess::@4/(byte*) SCREEN_COPY#17 getCharToProcess::@7/(byte*) SCREEN_COPY#18 getCharToProcess::@8/(byte*) SCREEN_COPY#19 )
  (byte) getCharToProcess::closest_y#6 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_y#7 getCharToProcess::@7/(byte) getCharToProcess::closest_y#8 getCharToProcess::@8/(byte) getCharToProcess::closest_y#1 )
  (byte) getCharToProcess::closest_x#6 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_x#7 getCharToProcess::@7/(byte) getCharToProcess::closest_x#8 getCharToProcess::@8/(byte) getCharToProcess::closest_x#1 )
  (byte) getCharToProcess::closest_dist#9 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_dist#5 getCharToProcess::@7/(byte) getCharToProcess::closest_dist#2 getCharToProcess::@8/(byte) getCharToProcess::closest_dist#1 )
  (byte) getCharToProcess::y#5 ← phi( getCharToProcess::@4/(byte) getCharToProcess::y#6 getCharToProcess::@7/(byte) getCharToProcess::y#4 getCharToProcess::@8/(byte) getCharToProcess::y#2 )
  (byte*) getCharToProcess::dist_line#5 ← phi( getCharToProcess::@4/(byte*) getCharToProcess::dist_line#4 getCharToProcess::@7/(byte*) getCharToProcess::dist_line#2 getCharToProcess::@8/(byte*) getCharToProcess::dist_line#7 )
  (byte*) getCharToProcess::screen_line#5 ← phi( getCharToProcess::@4/(byte*) getCharToProcess::screen_line#2 getCharToProcess::@7/(byte*) getCharToProcess::screen_line#6 getCharToProcess::@8/(byte*) getCharToProcess::screen_line#7 )
  (byte) getCharToProcess::x#3 ← phi( getCharToProcess::@4/(byte) getCharToProcess::x#2 getCharToProcess::@7/(byte) getCharToProcess::x#4 getCharToProcess::@8/(byte) getCharToProcess::x#5 )
  (byte) getCharToProcess::x#1 ← (byte) getCharToProcess::x#3 + rangenext(0,$27)
  (bool~) getCharToProcess::$6 ← (byte) getCharToProcess::x#1 != rangelast(0,$27)
  if((bool~) getCharToProcess::$6) goto getCharToProcess::@4
  to:getCharToProcess::@9
getCharToProcess::@7: scope:[getCharToProcess]  from getCharToProcess::@4
  (byte*) SCREEN_COPY#18 ← phi( getCharToProcess::@4/(byte*) SCREEN_COPY#17 )
  (byte) getCharToProcess::closest_y#8 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_y#7 )
  (byte) getCharToProcess::closest_x#8 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_x#7 )
  (byte*) getCharToProcess::screen_line#6 ← phi( getCharToProcess::@4/(byte*) getCharToProcess::screen_line#2 )
  (byte) getCharToProcess::y#4 ← phi( getCharToProcess::@4/(byte) getCharToProcess::y#6 )
  (byte) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_dist#5 )
  (byte) getCharToProcess::x#4 ← phi( getCharToProcess::@4/(byte) getCharToProcess::x#2 )
  (byte*) getCharToProcess::dist_line#2 ← phi( getCharToProcess::@4/(byte*) getCharToProcess::dist_line#4 )
  (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#2 + (byte) getCharToProcess::x#4)
  (bool~) getCharToProcess::$4 ← (byte) getCharToProcess::dist#0 < (byte) getCharToProcess::closest_dist#2
  (bool~) getCharToProcess::$5 ← ! (bool~) getCharToProcess::$4
  if((bool~) getCharToProcess::$5) goto getCharToProcess::@5
  to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess]  from getCharToProcess::@7
  (byte*) SCREEN_COPY#19 ← phi( getCharToProcess::@7/(byte*) SCREEN_COPY#18 )
  (byte*) getCharToProcess::dist_line#7 ← phi( getCharToProcess::@7/(byte*) getCharToProcess::dist_line#2 )
  (byte*) getCharToProcess::screen_line#7 ← phi( getCharToProcess::@7/(byte*) getCharToProcess::screen_line#6 )
  (byte) getCharToProcess::dist#1 ← phi( getCharToProcess::@7/(byte) getCharToProcess::dist#0 )
  (byte) getCharToProcess::y#2 ← phi( getCharToProcess::@7/(byte) getCharToProcess::y#4 )
  (byte) getCharToProcess::x#5 ← phi( getCharToProcess::@7/(byte) getCharToProcess::x#4 )
  (byte) getCharToProcess::closest_x#1 ← (byte) getCharToProcess::x#5
  (byte) getCharToProcess::closest_y#1 ← (byte) getCharToProcess::y#2
  (byte) getCharToProcess::closest_dist#1 ← (byte) getCharToProcess::dist#1
  to:getCharToProcess::@5
getCharToProcess::@9: scope:[getCharToProcess]  from getCharToProcess::@5
  (byte*) SCREEN_COPY#10 ← phi( getCharToProcess::@5/(byte*) SCREEN_COPY#13 )
  (byte) getCharToProcess::closest_y#5 ← phi( getCharToProcess::@5/(byte) getCharToProcess::closest_y#6 )
  (byte) getCharToProcess::closest_x#5 ← phi( getCharToProcess::@5/(byte) getCharToProcess::closest_x#6 )
  (byte) getCharToProcess::closest_dist#6 ← phi( getCharToProcess::@5/(byte) getCharToProcess::closest_dist#9 )
  (byte) getCharToProcess::y#3 ← phi( getCharToProcess::@5/(byte) getCharToProcess::y#5 )
  (byte*) getCharToProcess::dist_line#3 ← phi( getCharToProcess::@5/(byte*) getCharToProcess::dist_line#5 )
  (byte*) getCharToProcess::screen_line#3 ← phi( getCharToProcess::@5/(byte*) getCharToProcess::screen_line#5 )
  (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#3 + (number) $28
  (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#3 + (number) $28
  (byte) getCharToProcess::y#1 ← (byte) getCharToProcess::y#3 + rangenext(0,$18)
  (bool~) getCharToProcess::$7 ← (byte) getCharToProcess::y#1 != rangelast(0,$18)
  if((bool~) getCharToProcess::$7) goto getCharToProcess::@3
  to:getCharToProcess::@10
getCharToProcess::@10: scope:[getCharToProcess]  from getCharToProcess::@9
  (byte*) SCREEN_COPY#6 ← phi( getCharToProcess::@9/(byte*) SCREEN_COPY#10 )
  (byte) getCharToProcess::closest_y#4 ← phi( getCharToProcess::@9/(byte) getCharToProcess::closest_y#5 )
  (byte) getCharToProcess::closest_x#4 ← phi( getCharToProcess::@9/(byte) getCharToProcess::closest_x#5 )
  (byte) getCharToProcess::closest_dist#3 ← phi( getCharToProcess::@9/(byte) getCharToProcess::closest_dist#6 )
  (bool~) getCharToProcess::$0 ← (byte) getCharToProcess::closest_dist#3 != (byte) NOT_FOUND#0
  (bool~) getCharToProcess::$1 ← ! (bool~) getCharToProcess::$0
  if((bool~) getCharToProcess::$1) goto getCharToProcess::@1
  to:getCharToProcess::@11
getCharToProcess::@1: scope:[getCharToProcess]  from getCharToProcess::@10 getCharToProcess::@11
  (byte) getCharToProcess::closest_dist#4 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_dist#3 getCharToProcess::@11/(byte) getCharToProcess::closest_dist#7 )
  (byte) getCharToProcess::closest_y#2 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_y#4 getCharToProcess::@11/(byte) getCharToProcess::closest_y#3 )
  (byte) getCharToProcess::closest_x#2 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_x#4 getCharToProcess::@11/(byte) getCharToProcess::closest_x#3 )
  (byte) getCharToProcess::return_x#1 ← (byte) getCharToProcess::closest_x#2
  (byte) getCharToProcess::return_y#1 ← (byte) getCharToProcess::closest_y#2
  (byte) getCharToProcess::return_dist#1 ← (byte) getCharToProcess::closest_dist#4
  (struct ProcessingChar) getCharToProcess::return#0 ← struct-unwound {(byte) getCharToProcess::return_x#1, (byte) getCharToProcess::return_y#1, (byte) getCharToProcess::return_dist#1}
  to:getCharToProcess::@return
getCharToProcess::@11: scope:[getCharToProcess]  from getCharToProcess::@10
  (byte) getCharToProcess::closest_dist#7 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_dist#3 )
  (byte) getCharToProcess::closest_x#3 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_x#4 )
  (byte*) SCREEN_COPY#3 ← phi( getCharToProcess::@10/(byte*) SCREEN_COPY#6 )
  (byte) getCharToProcess::closest_y#3 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_y#4 )
  (word~) getCharToProcess::$8 ← ((word)) (byte) getCharToProcess::closest_y#3
  (number~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (number) $28
  (byte*~) getCharToProcess::$10 ← (byte*) SCREEN_COPY#3 + (number~) getCharToProcess::$9
  (byte*~) getCharToProcess::$11 ← (byte*~) getCharToProcess::$10 + (byte) getCharToProcess::closest_x#3
  *((byte*~) getCharToProcess::$11) ← (byte) ' '
  to:getCharToProcess::@1
getCharToProcess::@return: scope:[getCharToProcess]  from getCharToProcess::@1
  (byte) getCharToProcess::return_dist#4 ← phi( getCharToProcess::@1/(byte) getCharToProcess::return_dist#1 )
  (byte) getCharToProcess::return_y#4 ← phi( getCharToProcess::@1/(byte) getCharToProcess::return_y#1 )
  (byte) getCharToProcess::return_x#4 ← phi( getCharToProcess::@1/(byte) getCharToProcess::return_x#1 )
  (byte) getCharToProcess::return_x#2 ← (byte) getCharToProcess::return_x#4
  (byte) getCharToProcess::return_y#2 ← (byte) getCharToProcess::return_y#4
  (byte) getCharToProcess::return_dist#2 ← (byte) getCharToProcess::return_dist#4
  (struct ProcessingChar) getCharToProcess::return#1 ← struct-unwound {(byte) getCharToProcess::return_x#2, (byte) getCharToProcess::return_y#2, (byte) getCharToProcess::return_dist#2}
  return 
  to:@return
startProcessing: scope:[startProcessing]  from main::@10
  (byte) startProcessing::center_x#9 ← phi( main::@10/(byte) startProcessing::center_x#0 )
  (byte) startProcessing::center_y#9 ← phi( main::@10/(byte) startProcessing::center_y#0 )
  (byte) startProcessing::freeIdx#0 ← (number) $ff
  to:startProcessing::@1
startProcessing::@1: scope:[startProcessing]  from startProcessing startProcessing::@4
  (byte) startProcessing::center_x#8 ← phi( startProcessing/(byte) startProcessing::center_x#9 startProcessing::@4/(byte) startProcessing::center_x#3 )
  (byte) startProcessing::center_y#8 ← phi( startProcessing/(byte) startProcessing::center_y#9 startProcessing::@4/(byte) startProcessing::center_y#3 )
  (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) startProcessing::freeIdx#0 startProcessing::@4/(byte) startProcessing::freeIdx#2 )
  (number~) startProcessing::$24 ← (byte) NUM_PROCESSING#0 - (number) 1
  (byte) startProcessing::i#0 ← (byte) 0
  to:startProcessing::@2
startProcessing::@2: scope:[startProcessing]  from startProcessing::@1 startProcessing::@3
  (byte) startProcessing::center_x#7 ← phi( startProcessing::@1/(byte) startProcessing::center_x#8 startProcessing::@3/(byte) startProcessing::center_x#5 )
  (byte) startProcessing::center_y#7 ← phi( startProcessing::@1/(byte) startProcessing::center_y#8 startProcessing::@3/(byte) startProcessing::center_y#5 )
  (byte) startProcessing::freeIdx#5 ← phi( startProcessing::@1/(byte) startProcessing::freeIdx#6 startProcessing::@3/(byte) startProcessing::freeIdx#4 )
  (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) startProcessing::i#0 startProcessing::@3/(byte) startProcessing::i#1 )
  (byte~) startProcessing::$30 ← (byte) startProcessing::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  (byte*) startProcessing::$41 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  (bool~) startProcessing::$25 ← *((byte*) startProcessing::$41 + (byte~) startProcessing::$30) == (const byte) STATUS_FREE
  (bool~) startProcessing::$26 ← ! (bool~) startProcessing::$25
  if((bool~) startProcessing::$26) goto startProcessing::@3
  to:startProcessing::@5
startProcessing::@3: scope:[startProcessing]  from startProcessing::@2
  (byte) startProcessing::center_x#5 ← phi( startProcessing::@2/(byte) startProcessing::center_x#7 )
  (byte) startProcessing::center_y#5 ← phi( startProcessing::@2/(byte) startProcessing::center_y#7 )
  (byte) startProcessing::freeIdx#4 ← phi( startProcessing::@2/(byte) startProcessing::freeIdx#5 )
  (byte) startProcessing::i#3 ← phi( startProcessing::@2/(byte) startProcessing::i#2 )
  (byte) startProcessing::i#1 ← (byte) startProcessing::i#3 + rangenext(0,startProcessing::$24)
  (bool~) startProcessing::$27 ← (byte) startProcessing::i#1 != rangelast(0,startProcessing::$24)
  if((bool~) startProcessing::$27) goto startProcessing::@2
  to:startProcessing::@4
startProcessing::@5: scope:[startProcessing]  from startProcessing::@2
  (byte) startProcessing::center_x#6 ← phi( startProcessing::@2/(byte) startProcessing::center_x#7 )
  (byte) startProcessing::center_y#6 ← phi( startProcessing::@2/(byte) startProcessing::center_y#7 )
  (byte) startProcessing::i#4 ← phi( startProcessing::@2/(byte) startProcessing::i#2 )
  (byte) startProcessing::freeIdx#1 ← (byte) startProcessing::i#4
  to:startProcessing::@4
startProcessing::@4: scope:[startProcessing]  from startProcessing::@3 startProcessing::@5
  (byte) startProcessing::center_x#3 ← phi( startProcessing::@3/(byte) startProcessing::center_x#5 startProcessing::@5/(byte) startProcessing::center_x#6 )
  (byte) startProcessing::center_y#3 ← phi( startProcessing::@3/(byte) startProcessing::center_y#5 startProcessing::@5/(byte) startProcessing::center_y#6 )
  (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@3/(byte) startProcessing::freeIdx#4 startProcessing::@5/(byte) startProcessing::freeIdx#1 )
  (bool~) startProcessing::$28 ← (byte) startProcessing::freeIdx#2 == (number) $ff
  if((bool~) startProcessing::$28) goto startProcessing::@1
  to:startProcessing::@8
startProcessing::@8: scope:[startProcessing]  from startProcessing::@4
  (byte) startProcessing::center_x#1 ← phi( startProcessing::@4/(byte) startProcessing::center_x#3 )
  (byte) startProcessing::center_y#1 ← phi( startProcessing::@4/(byte) startProcessing::center_y#3 )
  (byte) startProcessing::freeIdx#3 ← phi( startProcessing::@4/(byte) startProcessing::freeIdx#2 )
  (byte) startProcessing::spriteIdx#0 ← (byte) startProcessing::freeIdx#3
  (word~) startProcessing::$0 ← ((word)) (byte) startProcessing::center_y#1
  (number~) startProcessing::$1 ← (word~) startProcessing::$0 * (number) $28
  (number~) startProcessing::$2 ← (number~) startProcessing::$1 + (byte) startProcessing::center_x#1
  (word) startProcessing::offset#0 ← (number~) startProcessing::$2
  (byte*~) startProcessing::$3 ← (byte*) COLS#0 + (word) startProcessing::offset#0
  (byte*) startProcessing::colPtr#0 ← (byte*~) startProcessing::$3
  (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0)
  (byte*~) startProcessing::$4 ← (byte*) SCREEN#0 + (word) startProcessing::offset#0
  (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$4
  (word~) startProcessing::$5 ← ((word)) (byte) startProcessing::spriteIdx#0
  (number~) startProcessing::$6 ← (word~) startProcessing::$5 * (number) $40
  (byte*~) startProcessing::$7 ← (byte*) SPRITE_DATA#0 + (number~) startProcessing::$6
  (byte*) startProcessing::spriteData#0 ← (byte*~) startProcessing::$7
  (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0)
  (word~) startProcessing::$8 ← ((word)) (byte) startProcessing::ch#0
  (number~) startProcessing::$9 ← (word~) startProcessing::$8 * (number) 8
  (byte*~) startProcessing::$10 ← (byte*) CHARGEN#0 + (number~) startProcessing::$9
  (byte*) startProcessing::chargenData#0 ← (byte*~) startProcessing::$10
  asm { sei  }
  *((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_CHARROM#0
  (byte) startProcessing::i1#0 ← (byte) 0
  to:startProcessing::@9
startProcessing::@9: scope:[startProcessing]  from startProcessing::@8 startProcessing::@9
  (byte*) startProcessing::screenPtr#2 ← phi( startProcessing::@8/(byte*) startProcessing::screenPtr#0 startProcessing::@9/(byte*) startProcessing::screenPtr#2 )
  (byte) startProcessing::spriteCol#2 ← phi( startProcessing::@8/(byte) startProcessing::spriteCol#0 startProcessing::@9/(byte) startProcessing::spriteCol#2 )
  (byte) startProcessing::spriteIdx#2 ← phi( startProcessing::@8/(byte) startProcessing::spriteIdx#0 startProcessing::@9/(byte) startProcessing::spriteIdx#2 )
  (byte) startProcessing::center_y#4 ← phi( startProcessing::@8/(byte) startProcessing::center_y#1 startProcessing::@9/(byte) startProcessing::center_y#4 )
  (byte) startProcessing::center_x#4 ← phi( startProcessing::@8/(byte) startProcessing::center_x#1 startProcessing::@9/(byte) startProcessing::center_x#4 )
  (byte) startProcessing::i1#2 ← phi( startProcessing::@8/(byte) startProcessing::i1#0 startProcessing::@9/(byte) startProcessing::i1#1 )
  (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@8/(byte*) startProcessing::spriteData#0 startProcessing::@9/(byte*) startProcessing::spriteData#1 )
  (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@8/(byte*) startProcessing::chargenData#0 startProcessing::@9/(byte*) startProcessing::chargenData#1 )
  *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
  (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (number) 3
  (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
  (byte) startProcessing::i1#1 ← (byte) startProcessing::i1#2 + rangenext(0,7)
  (bool~) startProcessing::$29 ← (byte) startProcessing::i1#1 != rangelast(0,7)
  if((bool~) startProcessing::$29) goto startProcessing::@9
  to:startProcessing::@10
startProcessing::@10: scope:[startProcessing]  from startProcessing::@9
  (byte*) startProcessing::screenPtr#1 ← phi( startProcessing::@9/(byte*) startProcessing::screenPtr#2 )
  (byte) startProcessing::spriteCol#1 ← phi( startProcessing::@9/(byte) startProcessing::spriteCol#2 )
  (byte) startProcessing::spriteIdx#1 ← phi( startProcessing::@9/(byte) startProcessing::spriteIdx#2 )
  (byte) startProcessing::center_y#2 ← phi( startProcessing::@9/(byte) startProcessing::center_y#4 )
  (byte) startProcessing::center_x#2 ← phi( startProcessing::@9/(byte) startProcessing::center_x#4 )
  *((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_IO#0
  asm { cli  }
  (word~) startProcessing::$11 ← ((word)) (byte) startProcessing::center_x#2
  (number~) startProcessing::$12 ← (word~) startProcessing::$11 * (number) 8
  (number~) startProcessing::$13 ← (byte) BORDER_XPOS_LEFT#0 + (number~) startProcessing::$12
  (number~) startProcessing::$14 ← (number~) startProcessing::$13 << (number) 4
  (word) startProcessing::spriteX#0 ← (number~) startProcessing::$14
  (word~) startProcessing::$15 ← ((word)) (byte) startProcessing::center_y#2
  (number~) startProcessing::$16 ← (word~) startProcessing::$15 * (number) 8
  (number~) startProcessing::$17 ← (byte) BORDER_YPOS_TOP#0 + (number~) startProcessing::$16
  (number~) startProcessing::$18 ← (number~) startProcessing::$17 << (number) 4
  (word) startProcessing::spriteY#0 ← (number~) startProcessing::$18
  (byte*~) startProcessing::$19 ← (byte*) SPRITE_DATA#0 / (number) $40
  (byte~) startProcessing::$20 ← ((byte)) (byte*~) startProcessing::$19
  (byte~) startProcessing::$21 ← (byte~) startProcessing::$20 + (byte) startProcessing::spriteIdx#1
  (byte) startProcessing::spritePtr#0 ← (byte~) startProcessing::$21
  (number~) startProcessing::$22 ← (byte) startProcessing::spriteIdx#1 * (number) 8
  (word~) startProcessing::$23 ← ((word)) (number~) startProcessing::$22
  (byte~) startProcessing::$31 ← (byte) startProcessing::spriteIdx#1 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  (word*) startProcessing::$32 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  *((word*) startProcessing::$32 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0
  (word*) startProcessing::$33 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  *((word*) startProcessing::$33 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0
  (word*) startProcessing::$34 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  *((word*) startProcessing::$34 + (byte~) startProcessing::$31) ← (word~) startProcessing::$23
  (word*) startProcessing::$35 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  *((word*) startProcessing::$35 + (byte~) startProcessing::$31) ← (number) $3c
  (byte*) startProcessing::$36 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  *((byte*) startProcessing::$36 + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteIdx#1
  (byte*) startProcessing::$37 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
  *((byte*) startProcessing::$37 + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0
  (byte*) startProcessing::$38 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
  *((byte*) startProcessing::$38 + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#1
  (byte*) startProcessing::$39 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  *((byte*) startProcessing::$39 + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW
  (byte**) startProcessing::$40 ← (byte**)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
  *((byte**) startProcessing::$40 + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#1
  to:startProcessing::@return
startProcessing::@return: scope:[startProcessing]  from startProcessing::@10
  return 
  to:@return
@29: scope:[]  from @38
  (byte*) SCREEN_COPY#23 ← phi( @38/(byte*) SCREEN_COPY#25 )
  (byte*) SCREEN_DIST#13 ← phi( @38/(byte*) SCREEN_DIST#0 )
  (number~) $2 ← (byte) BORDER_XPOS_LEFT#0 - (number) 8
  (word~) $3 ← ((word)) (number~) $2
  (word~) $4 ← (word~) $3 << (number) 4
  (word) XPOS_LEFTMOST#0 ← (word~) $4
  (word~) $5 ← ((word)) (word) BORDER_XPOS_RIGHT#0
  (word~) $6 ← (word~) $5 << (number) 4
  (word) XPOS_RIGHTMOST#0 ← (word~) $6
  (number~) $7 ← (byte) BORDER_YPOS_TOP#0 - (number) 8
  (word~) $8 ← ((word)) (number~) $7
  (word~) $9 ← (word~) $8 << (number) 4
  (word) YPOS_TOPMOST#0 ← (word~) $9
  (word~) $10 ← ((word)) (byte) BORDER_YPOS_BOTTOM#0
  (word~) $11 ← (word~) $10 << (number) 4
  (word) YPOS_BOTTOMMOST#0 ← (word~) $11
  to:@34
processChars: scope:[processChars]  from irqBottom::@1
  (byte) processChars::numActive#0 ← (number) 0
  (number~) processChars::$1 ← (byte) NUM_PROCESSING#0 - (number) 1
  (byte) processChars::i#0 ← (byte) 0
  to:processChars::@2
processChars::@2: scope:[processChars]  from processChars processChars::@3
  (byte) processChars::numActive#9 ← phi( processChars/(byte) processChars::numActive#0 processChars::@3/(byte) processChars::numActive#8 )
  (byte) processChars::i#2 ← phi( processChars/(byte) processChars::i#0 processChars::@3/(byte) processChars::i#1 )
  (byte~) processChars::$37 ← (byte) processChars::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  (struct ProcessingSprite*~) processChars::$2 ← (struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37
  (struct ProcessingSprite*) processChars::processing#0 ← (struct ProcessingSprite*~) processChars::$2
  (byte*) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  (number~) processChars::$3 ← (number) 1 << *((byte*) processChars::$40)
  (byte) processChars::bitmask#0 ← (number~) processChars::$3
  (byte*) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  (bool~) processChars::$4 ← *((byte*) processChars::$41) != (const byte) STATUS_FREE
  (bool~) processChars::$5 ← ! (bool~) processChars::$4
  if((bool~) processChars::$5) goto processChars::@3
  to:processChars::@13
processChars::@3: scope:[processChars]  from processChars::@2 processChars::@8
  (byte) processChars::numActive#8 ← phi( processChars::@2/(byte) processChars::numActive#9 processChars::@8/(byte) processChars::numActive#1 )
  (byte) processChars::i#3 ← phi( processChars::@2/(byte) processChars::i#2 processChars::@8/(byte) processChars::i#5 )
  (byte) processChars::i#1 ← (byte) processChars::i#3 + rangenext(0,processChars::$1)
  (bool~) processChars::$34 ← (byte) processChars::i#1 != rangelast(0,processChars::$1)
  if((bool~) processChars::$34) goto processChars::@2
  to:processChars::@15
processChars::@13: scope:[processChars]  from processChars::@2
  (byte) processChars::numActive#13 ← phi( processChars::@2/(byte) processChars::numActive#9 )
  (byte) processChars::i#11 ← phi( processChars::@2/(byte) processChars::i#2 )
  (byte) processChars::bitmask#5 ← phi( processChars::@2/(byte) processChars::bitmask#0 )
  (struct ProcessingSprite*) processChars::processing#1 ← phi( processChars::@2/(struct ProcessingSprite*) processChars::processing#0 )
  (byte*) processChars::$42 ← (byte*)(struct ProcessingSprite*) processChars::processing#1 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  (bool~) processChars::$6 ← *((byte*) processChars::$42) == (const byte) STATUS_NEW
  (bool~) processChars::$7 ← ! (bool~) processChars::$6
  if((bool~) processChars::$7) goto processChars::@4
  to:processChars::@14
processChars::@4: scope:[processChars]  from processChars::@13 processChars::@14
  (byte) processChars::numActive#12 ← phi( processChars::@13/(byte) processChars::numActive#13 processChars::@14/(byte) processChars::numActive#14 )
  (byte) processChars::i#8 ← phi( processChars::@13/(byte) processChars::i#11 processChars::@14/(byte) processChars::i#12 )
  (byte) processChars::bitmask#6 ← phi( processChars::@13/(byte) processChars::bitmask#5 processChars::@14/(byte) processChars::bitmask#1 )
  (struct ProcessingSprite*) processChars::processing#2 ← phi( processChars::@13/(struct ProcessingSprite*) processChars::processing#1 processChars::@14/(struct ProcessingSprite*) processChars::processing#3 )
  (word*) processChars::$43 ← (word*)(struct ProcessingSprite*) processChars::processing#2 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (word~) processChars::$10 ← *((word*) processChars::$43) >> (number) 4
  (word) processChars::xpos#0 ← (word~) processChars::$10
  (byte~) processChars::$11 ← > (word) processChars::xpos#0
  (bool~) processChars::$66 ← (number) 0 != (byte~) processChars::$11
  if((bool~) processChars::$66) goto processChars::@5
  to:processChars::@9
processChars::@14: scope:[processChars]  from processChars::@13
  (byte) processChars::numActive#14 ← phi( processChars::@13/(byte) processChars::numActive#13 )
  (byte) processChars::i#12 ← phi( processChars::@13/(byte) processChars::i#11 )
  (byte) processChars::bitmask#1 ← phi( processChars::@13/(byte) processChars::bitmask#5 )
  (struct ProcessingSprite*) processChars::processing#3 ← phi( processChars::@13/(struct ProcessingSprite*) processChars::processing#1 )
  (byte**) processChars::$44 ← (byte**)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
  *(*((byte**) processChars::$44)) ← (byte) ' '
  *((byte*) SPRITES_ENABLE#0) ← *((byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#1
  (byte*) processChars::$45 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
  (byte*) processChars::$46 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  *((byte*) SPRITES_COLS#0 + *((byte*) processChars::$46)) ← *((byte*) processChars::$45)
  (byte*~) processChars::$8 ← (byte*) SCREEN#0 + (word) SPRITE_PTRS#0
  (byte*) processChars::$47 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  (byte*~) processChars::$9 ← (byte*~) processChars::$8 + *((byte*) processChars::$47)
  (byte*) processChars::$48 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
  *((byte*~) processChars::$9) ← *((byte*) processChars::$48)
  (byte*) processChars::$49 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  *((byte*) processChars::$49) ← (const byte) STATUS_PROCESSING
  to:processChars::@4
processChars::@5: scope:[processChars]  from processChars::@4
  (byte) processChars::numActive#10 ← phi( processChars::@4/(byte) processChars::numActive#12 )
  (struct ProcessingSprite*) processChars::processing#7 ← phi( processChars::@4/(struct ProcessingSprite*) processChars::processing#2 )
  (word) processChars::xpos#3 ← phi( processChars::@4/(word) processChars::xpos#0 )
  (byte) processChars::i#6 ← phi( processChars::@4/(byte) processChars::i#8 )
  (byte) processChars::bitmask#2 ← phi( processChars::@4/(byte) processChars::bitmask#6 )
  *((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#2
  to:processChars::@6
processChars::@9: scope:[processChars]  from processChars::@4
  (byte) processChars::numActive#11 ← phi( processChars::@4/(byte) processChars::numActive#12 )
  (struct ProcessingSprite*) processChars::processing#8 ← phi( processChars::@4/(struct ProcessingSprite*) processChars::processing#2 )
  (word) processChars::xpos#4 ← phi( processChars::@4/(word) processChars::xpos#0 )
  (byte) processChars::i#7 ← phi( processChars::@4/(byte) processChars::i#8 )
  (byte) processChars::bitmask#3 ← phi( processChars::@4/(byte) processChars::bitmask#6 )
  (number~) processChars::$12 ← (number) $ff ^ (byte) processChars::bitmask#3
  *((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) & (number~) processChars::$12
  to:processChars::@6
processChars::@6: scope:[processChars]  from processChars::@5 processChars::@9
  (byte) processChars::numActive#7 ← phi( processChars::@5/(byte) processChars::numActive#10 processChars::@9/(byte) processChars::numActive#11 )
  (byte) processChars::bitmask#7 ← phi( processChars::@5/(byte) processChars::bitmask#2 processChars::@9/(byte) processChars::bitmask#3 )
  (struct ProcessingSprite*) processChars::processing#4 ← phi( processChars::@5/(struct ProcessingSprite*) processChars::processing#7 processChars::@9/(struct ProcessingSprite*) processChars::processing#8 )
  (word) processChars::xpos#1 ← phi( processChars::@5/(word) processChars::xpos#3 processChars::@9/(word) processChars::xpos#4 )
  (byte) processChars::i#4 ← phi( processChars::@5/(byte) processChars::i#6 processChars::@9/(byte) processChars::i#7 )
  (number~) processChars::$13 ← (byte) processChars::i#4 * (number) 2
  (byte~) processChars::$14 ← ((byte)) (word) processChars::xpos#1
  *((byte*) SPRITES_XPOS#0 + (number~) processChars::$13) ← (byte~) processChars::$14
  (word*) processChars::$50 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (word~) processChars::$15 ← *((word*) processChars::$50) >> (number) 4
  (byte~) processChars::$16 ← ((byte)) (word~) processChars::$15
  (byte) processChars::ypos#0 ← (byte~) processChars::$16
  (number~) processChars::$17 ← (byte) processChars::i#4 * (number) 2
  *((byte*) SPRITES_YPOS#0 + (number~) processChars::$17) ← (byte) processChars::ypos#0
  (word*) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (bool~) processChars::$18 ← *((word*) processChars::$51) < (word) XPOS_LEFTMOST#0
  (word*) processChars::$52 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (bool~) processChars::$19 ← *((word*) processChars::$52) > (word) XPOS_RIGHTMOST#0
  (bool~) processChars::$20 ← (bool~) processChars::$18 || (bool~) processChars::$19
  (word*) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (bool~) processChars::$21 ← *((word*) processChars::$53) < (word) YPOS_TOPMOST#0
  (bool~) processChars::$22 ← (bool~) processChars::$20 || (bool~) processChars::$21
  (word*) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (bool~) processChars::$23 ← *((word*) processChars::$54) > (word) YPOS_BOTTOMMOST#0
  (bool~) processChars::$24 ← (bool~) processChars::$22 || (bool~) processChars::$23
  if((bool~) processChars::$24) goto processChars::@7
  to:processChars::@11
processChars::@7: scope:[processChars]  from processChars::@6
  (byte) processChars::i#10 ← phi( processChars::@6/(byte) processChars::i#4 )
  (byte) processChars::numActive#5 ← phi( processChars::@6/(byte) processChars::numActive#7 )
  (byte) processChars::bitmask#4 ← phi( processChars::@6/(byte) processChars::bitmask#7 )
  (struct ProcessingSprite*) processChars::processing#5 ← phi( processChars::@6/(struct ProcessingSprite*) processChars::processing#4 )
  (byte*) processChars::$55 ← (byte*)(struct ProcessingSprite*) processChars::processing#5 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  *((byte*) processChars::$55) ← (const byte) STATUS_FREE
  (number~) processChars::$33 ← (number) $ff ^ (byte) processChars::bitmask#4
  *((byte*) SPRITES_ENABLE#0) ← *((byte*) SPRITES_ENABLE#0) & (number~) processChars::$33
  to:processChars::@8
processChars::@11: scope:[processChars]  from processChars::@6
  (byte) processChars::i#9 ← phi( processChars::@6/(byte) processChars::i#4 )
  (byte) processChars::numActive#4 ← phi( processChars::@6/(byte) processChars::numActive#7 )
  (byte) processChars::ypos#1 ← phi( processChars::@6/(byte) processChars::ypos#0 )
  (struct ProcessingSprite*) processChars::processing#6 ← phi( processChars::@6/(struct ProcessingSprite*) processChars::processing#4 )
  (word) processChars::xpos#2 ← phi( processChars::@6/(word) processChars::xpos#1 )
  (number~) processChars::$25 ← (word) processChars::xpos#2 / (number) 8
  (byte~) processChars::$26 ← ((byte)) (number~) processChars::$25
  (number~) processChars::$27 ← (byte) BORDER_XPOS_LEFT#0 / (number) 8
  (number~) processChars::$28 ← (byte~) processChars::$26 - (number~) processChars::$27
  (byte) processChars::xchar#0 ← (number~) processChars::$28
  (byte~) processChars::$38 ← (byte) processChars::xchar#0 * (const byte) SIZEOF_WORD
  (word*) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  (word*) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  *((word*) processChars::$57) ← *((word*) processChars::$56) + *((word[$28]) VXSIN#0 + (byte~) processChars::$38)
  (word*) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (word*) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  (word*) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  *((word*) processChars::$60) ← *((word*) processChars::$58) + *((word*) processChars::$59)
  (number~) processChars::$29 ← (byte) processChars::ypos#1 / (number) 8
  (byte~) processChars::$30 ← ((byte)) (number~) processChars::$29
  (number~) processChars::$31 ← (byte) BORDER_YPOS_TOP#0 / (number) 8
  (number~) processChars::$32 ← (byte~) processChars::$30 - (number~) processChars::$31
  (byte) processChars::ychar#0 ← (number~) processChars::$32
  (byte~) processChars::$39 ← (byte) processChars::ychar#0 * (const byte) SIZEOF_WORD
  (word*) processChars::$61 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  (word*) processChars::$62 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  *((word*) processChars::$62) ← *((word*) processChars::$61) + *((word[$19]) VYSIN#0 + (byte~) processChars::$39)
  (word*) processChars::$63 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (word*) processChars::$64 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  (word*) processChars::$65 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  *((word*) processChars::$65) ← *((word*) processChars::$63) + *((word*) processChars::$64)
  to:processChars::@8
processChars::@8: scope:[processChars]  from processChars::@11 processChars::@7
  (byte) processChars::i#5 ← phi( processChars::@11/(byte) processChars::i#9 processChars::@7/(byte) processChars::i#10 )
  (byte) processChars::numActive#2 ← phi( processChars::@11/(byte) processChars::numActive#4 processChars::@7/(byte) processChars::numActive#5 )
  (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#2
  to:processChars::@3
processChars::@15: scope:[processChars]  from processChars::@3
  (byte) processChars::numActive#6 ← phi( processChars::@3/(byte) processChars::numActive#8 )
  (bool~) processChars::$0 ← ! (bool) DEBUG#0
  if((bool~) processChars::$0) goto processChars::@return
  to:processChars::@16
processChars::@16: scope:[processChars]  from processChars::@15
  (byte) processChars::numActive#3 ← phi( processChars::@15/(byte) processChars::numActive#6 )
  (byte*~) processChars::$35 ← (byte*) SCREEN#0 + (number) $3e7
  (byte~) processChars::$36 ← (byte) '0' + (byte) processChars::numActive#3
  *((byte*~) processChars::$35) ← (byte~) processChars::$36
  to:processChars::@return
processChars::@return: scope:[processChars]  from processChars::@15 processChars::@16
  return 
  to:@return
init_angle_screen: scope:[init_angle_screen]  from main
  (byte*) init_angle_screen::screen#1 ← phi( main/(byte*) init_angle_screen::screen#0 )
  (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
  (byte*) init_angle_screen::screen_topline#0 ← (byte*~) init_angle_screen::$0
  (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
  (byte*) init_angle_screen::screen_bottomline#0 ← (byte*~) init_angle_screen::$1
  (byte) init_angle_screen::y#0 ← (byte) 0
  to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen]  from init_angle_screen init_angle_screen::@4
  (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 )
  (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 )
  (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@4/(byte) init_angle_screen::y#1 )
  (byte) init_angle_screen::x#0 ← (number) 0
  (byte) init_angle_screen::xb#0 ← (number) $27
  to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@9
  (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(byte) init_angle_screen::xb#1 )
  (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_bottomline#6 init_angle_screen::@9/(byte*) init_angle_screen::screen_bottomline#2 )
  (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_topline#6 init_angle_screen::@9/(byte*) init_angle_screen::screen_topline#2 )
  (byte) init_angle_screen::y#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::y#5 init_angle_screen::@9/(byte) init_angle_screen::y#6 )
  (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) init_angle_screen::x#0 init_angle_screen::@9/(byte) init_angle_screen::x#1 )
  (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
  if((bool~) init_angle_screen::$2) goto init_angle_screen::@3
  to:init_angle_screen::@4
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@2
  (byte*) init_angle_screen::screen_topline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
  (byte) init_angle_screen::xb#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#4 )
  (byte*) init_angle_screen::screen_bottomline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
  (byte) init_angle_screen::y#2 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
  (byte) init_angle_screen::x#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#2 )
  (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
  (number~) init_angle_screen::$4 ← (number) $27 - (number~) init_angle_screen::$3
  (word~) init_angle_screen::$5 ← ((word)) { (number~) init_angle_screen::$4, (number) 0 }
  (signed word~) init_angle_screen::$6 ← ((signed word)) (word~) init_angle_screen::$5
  (signed word) init_angle_screen::xw#0 ← (signed word~) init_angle_screen::$6
  (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (number) 2
  (word~) init_angle_screen::$8 ← ((word)) { (number~) init_angle_screen::$7, (number) 0 }
  (signed word~) init_angle_screen::$9 ← ((signed word)) (word~) init_angle_screen::$8
  (signed word) init_angle_screen::yw#0 ← (signed word~) init_angle_screen::$9
  (signed word) atan2_16::x#0 ← (signed word) init_angle_screen::xw#0
  (signed word) atan2_16::y#0 ← (signed word) init_angle_screen::yw#0
  call atan2_16 
  (word) atan2_16::return#2 ← (word) atan2_16::return#1
  to:init_angle_screen::@9
init_angle_screen::@9: scope:[init_angle_screen]  from init_angle_screen::@3
  (byte) init_angle_screen::y#6 ← phi( init_angle_screen::@3/(byte) init_angle_screen::y#2 )
  (byte) init_angle_screen::x#4 ← phi( init_angle_screen::@3/(byte) init_angle_screen::x#3 )
  (byte*) init_angle_screen::screen_topline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#4 )
  (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@3/(byte) init_angle_screen::xb#3 )
  (byte*) init_angle_screen::screen_bottomline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#4 )
  (word) atan2_16::return#4 ← phi( init_angle_screen::@3/(word) atan2_16::return#2 )
  (word~) init_angle_screen::$10 ← (word) atan2_16::return#4
  (word) init_angle_screen::angle_w#0 ← (word~) init_angle_screen::$10
  (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (number) $80
  (number~) init_angle_screen::$12 ← > (number~) init_angle_screen::$11
  (byte) init_angle_screen::ang_w#0 ← (number~) init_angle_screen::$12
  *((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
  (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13
  (number~) init_angle_screen::$14 ← (number) $80 + (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$14
  (number~) init_angle_screen::$15 ← (number) $80 - (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$15
  (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#4
  (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
  to:init_angle_screen::@2
init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
  (byte) init_angle_screen::y#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
  (byte*) init_angle_screen::screen_bottomline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
  (byte*) init_angle_screen::screen_topline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
  (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
  (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
  (byte) init_angle_screen::y#1 ← (byte) init_angle_screen::y#3 + rangenext(0,$c)
  (bool~) init_angle_screen::$16 ← (byte) init_angle_screen::y#1 != rangelast(0,$c)
  if((bool~) init_angle_screen::$16) goto init_angle_screen::@1
  to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen]  from init_angle_screen::@4
  return 
  to:@return
initSprites: scope:[initSprites]  from main::@8
  (byte*) initSprites::sp#0 ← (byte*) SPRITE_DATA#0
  to:initSprites::@1
initSprites::@1: scope:[initSprites]  from initSprites initSprites::@2
  (byte*) initSprites::sp#2 ← phi( initSprites/(byte*) initSprites::sp#0 initSprites::@2/(byte*) initSprites::sp#1 )
  (number~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (number) $40
  (byte*~) initSprites::$1 ← (byte*) SPRITE_DATA#0 + (number~) initSprites::$0
  (bool~) initSprites::$2 ← (byte*) initSprites::sp#2 < (byte*~) initSprites::$1
  if((bool~) initSprites::$2) goto initSprites::@2
  to:initSprites::@3
initSprites::@2: scope:[initSprites]  from initSprites::@1
  (byte*) initSprites::sp#3 ← phi( initSprites::@1/(byte*) initSprites::sp#2 )
  *((byte*) initSprites::sp#3) ← (number) 0
  (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#3
  to:initSprites::@1
initSprites::@3: scope:[initSprites]  from initSprites::@1
  (byte) initSprites::i#0 ← (byte) 0
  to:initSprites::@7
initSprites::@7: scope:[initSprites]  from initSprites::@3 initSprites::@7
  (byte) initSprites::i#2 ← phi( initSprites::@3/(byte) initSprites::i#0 initSprites::@7/(byte) initSprites::i#1 )
  *((byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (byte) LIGHT_BLUE#0
  (byte) initSprites::i#1 ← (byte) initSprites::i#2 + rangenext(0,7)
  (bool~) initSprites::$3 ← (byte) initSprites::i#1 != rangelast(0,7)
  if((bool~) initSprites::$3) goto initSprites::@7
  to:initSprites::@8
initSprites::@8: scope:[initSprites]  from initSprites::@7
  *((byte*) SPRITES_MC#0) ← (number) 0
  *((byte*) SPRITES_EXPAND_X#0) ← (number) 0
  *((byte*) SPRITES_EXPAND_Y#0) ← (number) 0
  to:initSprites::@return
initSprites::@return: scope:[initSprites]  from initSprites::@8
  return 
  to:@return
setupRasterIrq: scope:[setupRasterIrq]  from main::@18
  (void()*) setupRasterIrq::irqRoutine#4 ← phi( main::@18/(void()*) setupRasterIrq::irqRoutine#0 )
  (word) setupRasterIrq::raster#1 ← phi( main::@18/(word) setupRasterIrq::raster#0 )
  asm { sei  }
  *((byte*) PROCPORT_DDR#0) ← (byte) PROCPORT_DDR_MEMORY_MASK#0
  *((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_IO#0
  *((byte*) CIA1_INTERRUPT#0) ← (byte) CIA_INTERRUPT_CLEAR#0
  (bool~) setupRasterIrq::$0 ← (word) setupRasterIrq::raster#1 < (number) $100
  if((bool~) setupRasterIrq::$0) goto setupRasterIrq::@1
  to:setupRasterIrq::@3
setupRasterIrq::@1: scope:[setupRasterIrq]  from setupRasterIrq
  (void()*) setupRasterIrq::irqRoutine#2 ← phi( setupRasterIrq/(void()*) setupRasterIrq::irqRoutine#4 )
  (word) setupRasterIrq::raster#3 ← phi( setupRasterIrq/(word) setupRasterIrq::raster#1 )
  *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (number) $7f
  to:setupRasterIrq::@2
setupRasterIrq::@3: scope:[setupRasterIrq]  from setupRasterIrq
  (void()*) setupRasterIrq::irqRoutine#3 ← phi( setupRasterIrq/(void()*) setupRasterIrq::irqRoutine#4 )
  (word) setupRasterIrq::raster#4 ← phi( setupRasterIrq/(word) setupRasterIrq::raster#1 )
  *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) | (number) $80
  to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq]  from setupRasterIrq::@1 setupRasterIrq::@3
  (void()*) setupRasterIrq::irqRoutine#1 ← phi( setupRasterIrq::@1/(void()*) setupRasterIrq::irqRoutine#2 setupRasterIrq::@3/(void()*) setupRasterIrq::irqRoutine#3 )
  (word) setupRasterIrq::raster#2 ← phi( setupRasterIrq::@1/(word) setupRasterIrq::raster#3 setupRasterIrq::@3/(word) setupRasterIrq::raster#4 )
  (byte~) setupRasterIrq::$1 ← < (word) setupRasterIrq::raster#2
  *((byte*) RASTER#0) ← (byte~) setupRasterIrq::$1
  *((byte*) IRQ_ENABLE#0) ← (byte) IRQ_RASTER#0
  *((void()**) HARDWARE_IRQ#0) ← (void()*) setupRasterIrq::irqRoutine#1
  asm { cli  }
  to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq]  from setupRasterIrq::@2
  return 
  to:@return
@34: scope:[]  from @29
  (byte*) SCREEN_COPY#20 ← phi( @29/(byte*) SCREEN_COPY#23 )
  (byte*) SCREEN_DIST#10 ← phi( @29/(byte*) SCREEN_DIST#13 )
  (byte) RASTER_IRQ_TOP#0 ← (number) $30
  to:@35
irqTop: scope:[irqTop]  from
  (bool~) irqTop::$0 ← ! (bool) DEBUG#0
  if((bool~) irqTop::$0) goto irqTop::@1
  to:irqTop::@2
irqTop::@1: scope:[irqTop]  from irqTop irqTop::@6
  *((byte*) RASTER#0) ← (byte) RASTER_IRQ_MIDDLE#0
  (void()*~) irqTop::$1 ← & interrupt(HARDWARE_ALL)(void()) irqBottom()
  *((void()**) HARDWARE_IRQ#0) ← (void()*~) irqTop::$1
  *((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
  to:irqTop::@return
irqTop::@2: scope:[irqTop]  from irqTop
  (byte) irqTop::i#0 ← (byte) 0
  to:irqTop::@3
irqTop::@3: scope:[irqTop]  from irqTop::@2 irqTop::@3
  (byte) irqTop::i#2 ← phi( irqTop::@2/(byte) irqTop::i#0 irqTop::@3/(byte) irqTop::i#1 )
  (byte) irqTop::i#1 ← (byte) irqTop::i#2 + rangenext(0,4)
  (bool~) irqTop::$2 ← (byte) irqTop::i#1 != rangelast(0,4)
  if((bool~) irqTop::$2) goto irqTop::@3
  to:irqTop::@4
irqTop::@4: scope:[irqTop]  from irqTop::@3
  *((byte*) BORDERCOL#0) ← (byte) WHITE#0
  *((byte*) BGCOL#0) ← (byte) WHITE#0
  (byte) irqTop::i1#0 ← (byte) 0
  to:irqTop::@5
irqTop::@5: scope:[irqTop]  from irqTop::@4 irqTop::@5
  (byte) irqTop::i1#2 ← phi( irqTop::@4/(byte) irqTop::i1#0 irqTop::@5/(byte) irqTop::i1#1 )
  (byte) irqTop::i1#1 ← (byte) irqTop::i1#2 + rangenext(0,7)
  (bool~) irqTop::$3 ← (byte) irqTop::i1#1 != rangelast(0,7)
  if((bool~) irqTop::$3) goto irqTop::@5
  to:irqTop::@6
irqTop::@6: scope:[irqTop]  from irqTop::@5
  *((byte*) BORDERCOL#0) ← (byte) LIGHT_BLUE#0
  *((byte*) BGCOL#0) ← (byte) BLUE#0
  to:irqTop::@1
irqTop::@return: scope:[irqTop]  from irqTop::@1
  return 
  to:@return
@35: scope:[]  from @34
  (byte*) SCREEN_COPY#14 ← phi( @34/(byte*) SCREEN_COPY#20 )
  (byte*) SCREEN_DIST#7 ← phi( @34/(byte*) SCREEN_DIST#10 )
  (byte) RASTER_IRQ_MIDDLE#0 ← (number) $ff
  to:@36
irqBottom: scope:[irqBottom]  from
  (bool~) irqBottom::$0 ← ! (bool) DEBUG#0
  if((bool~) irqBottom::$0) goto irqBottom::@1
  to:irqBottom::@3
irqBottom::@1: scope:[irqBottom]  from irqBottom irqBottom::@6
  call processChars 
  to:irqBottom::@7
irqBottom::@7: scope:[irqBottom]  from irqBottom::@1
  (bool~) irqBottom::$2 ← ! (bool) DEBUG#0
  if((bool~) irqBottom::$2) goto irqBottom::@2
  to:irqBottom::@4
irqBottom::@3: scope:[irqBottom]  from irqBottom
  (byte) irqBottom::i#0 ← (byte) 0
  to:irqBottom::@5
irqBottom::@5: scope:[irqBottom]  from irqBottom::@3 irqBottom::@5
  (byte) irqBottom::i#2 ← phi( irqBottom::@3/(byte) irqBottom::i#0 irqBottom::@5/(byte) irqBottom::i#1 )
  (byte) irqBottom::i#1 ← (byte) irqBottom::i#2 + rangenext(0,4)
  (bool~) irqBottom::$4 ← (byte) irqBottom::i#1 != rangelast(0,4)
  if((bool~) irqBottom::$4) goto irqBottom::@5
  to:irqBottom::@6
irqBottom::@6: scope:[irqBottom]  from irqBottom::@5
  *((byte*) BORDERCOL#0) ← (byte) WHITE#0
  *((byte*) BGCOL#0) ← (byte) WHITE#0
  to:irqBottom::@1
irqBottom::@2: scope:[irqBottom]  from irqBottom::@4 irqBottom::@7
  *((byte*) RASTER#0) ← (byte) RASTER_IRQ_TOP#0
  (void()*~) irqBottom::$3 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
  *((void()**) HARDWARE_IRQ#0) ← (void()*~) irqBottom::$3
  *((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
  to:irqBottom::@return
irqBottom::@4: scope:[irqBottom]  from irqBottom::@7
  *((byte*) BORDERCOL#0) ← (byte) LIGHT_BLUE#0
  *((byte*) BGCOL#0) ← (byte) BLUE#0
  to:irqBottom::@2
irqBottom::@return: scope:[irqBottom]  from irqBottom::@2
  return 
  to:@return
@36: scope:[]  from @35
  (byte*) SCREEN_COPY#7 ← phi( @35/(byte*) SCREEN_COPY#14 )
  (byte*) SCREEN_DIST#3 ← phi( @35/(byte*) SCREEN_DIST#7 )
  call main 
  to:@39
@39: scope:[]  from @36
  to:@end
@end: scope:[]  from @39

SYMBOL TABLE SSA
(void*~) $0
(void*~) $1
(word~) $10
(word~) $11
(number~) $2
(word~) $3
(word~) $4
(word~) $5
(word~) $6
(number~) $7
(word~) $8
(word~) $9
(label) @15
(label) @22
(label) @26
(label) @29
(label) @34
(label) @35
(label) @36
(label) @37
(label) @38
(label) @39
(label) @4
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BORDER_XPOS_LEFT
(byte) BORDER_XPOS_LEFT#0
(word) BORDER_XPOS_RIGHT
(word) BORDER_XPOS_RIGHT#0
(byte) BORDER_YPOS_BOTTOM
(byte) BORDER_YPOS_BOTTOM#0
(byte) BORDER_YPOS_TOP
(byte) BORDER_YPOS_TOP#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0
(byte) CORDIC_ITERATIONS_16
(byte) CORDIC_ITERATIONS_16#0
(bool) DEBUG
(bool) DEBUG#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte*) HEAP_TOP
(byte*) HEAP_TOP#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) NOT_FOUND
(byte) NOT_FOUND#0
(byte) NUM_PROCESSING
(byte) NUM_PROCESSING#0
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL = (byte) $a
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID = (byte) 8
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR = (byte) 9
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = (byte) $c
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = (byte) $b
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX = (byte) 4
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY = (byte) 6
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X = (byte) 0
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y = (byte) 2
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(const byte) ProcessingSprite::$0::STATUS_FREE = (byte) 0
(const byte) ProcessingSprite::$0::STATUS_NEW = (byte) 1
(const byte) ProcessingSprite::$0::STATUS_PROCESSING = (byte) 2
(byte) ProcessingSprite::col
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(byte*) RASTER
(byte*) RASTER#0
(byte) RASTER_IRQ_MIDDLE
(byte) RASTER_IRQ_MIDDLE#0
(byte) RASTER_IRQ_TOP
(byte) RASTER_IRQ_TOP#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SCREEN_COPY
(byte*) SCREEN_COPY#0
(byte*) SCREEN_COPY#1
(byte*) SCREEN_COPY#10
(byte*) SCREEN_COPY#11
(byte*) SCREEN_COPY#12
(byte*) SCREEN_COPY#13
(byte*) SCREEN_COPY#14
(byte*) SCREEN_COPY#15
(byte*) SCREEN_COPY#16
(byte*) SCREEN_COPY#17
(byte*) SCREEN_COPY#18
(byte*) SCREEN_COPY#19
(byte*) SCREEN_COPY#2
(byte*) SCREEN_COPY#20
(byte*) SCREEN_COPY#21
(byte*) SCREEN_COPY#22
(byte*) SCREEN_COPY#23
(byte*) SCREEN_COPY#24
(byte*) SCREEN_COPY#25
(byte*) SCREEN_COPY#26
(byte*) SCREEN_COPY#27
(byte*) SCREEN_COPY#3
(byte*) SCREEN_COPY#4
(byte*) SCREEN_COPY#5
(byte*) SCREEN_COPY#6
(byte*) SCREEN_COPY#7
(byte*) SCREEN_COPY#8
(byte*) SCREEN_COPY#9
(byte*) SCREEN_DIST
(byte*) SCREEN_DIST#0
(byte*) SCREEN_DIST#1
(byte*) SCREEN_DIST#10
(byte*) SCREEN_DIST#11
(byte*) SCREEN_DIST#12
(byte*) SCREEN_DIST#13
(byte*) SCREEN_DIST#14
(byte*) SCREEN_DIST#15
(byte*) SCREEN_DIST#16
(byte*) SCREEN_DIST#17
(byte*) SCREEN_DIST#18
(byte*) SCREEN_DIST#2
(byte*) SCREEN_DIST#3
(byte*) SCREEN_DIST#4
(byte*) SCREEN_DIST#5
(byte*) SCREEN_DIST#6
(byte*) SCREEN_DIST#7
(byte*) SCREEN_DIST#8
(byte*) SCREEN_DIST#9
(const byte) SIZEOF_STRUCT_PROCESSINGSPRITE = (byte) $e
(const byte) SIZEOF_WORD = (byte) 2
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(byte*) SPRITE_DATA
(byte*) SPRITE_DATA#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(const byte) STATUS_FREE = (byte) 0
(const byte) STATUS_NEW = (byte) 1
(const byte) STATUS_PROCESSING = (byte) 2
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(word[$28]) VXSIN
(word[$28]) VXSIN#0
(word[$19]) VYSIN
(word[$19]) VYSIN#0
(byte) WHITE
(byte) WHITE#0
(word) XPOS_LEFTMOST
(word) XPOS_LEFTMOST#0
(word) XPOS_RIGHTMOST
(word) XPOS_RIGHTMOST#0
(word) YPOS_BOTTOMMOST
(word) YPOS_BOTTOMMOST#0
(word) YPOS_TOPMOST
(word) YPOS_TOPMOST#0
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(bool~) atan2_16::$0
(signed word~) atan2_16::$1
(bool~) atan2_16::$10
(bool~) atan2_16::$11
(number~) atan2_16::$12
(bool~) atan2_16::$13
(bool~) atan2_16::$14
(word~) atan2_16::$15
(number~) atan2_16::$16
(bool~) atan2_16::$17
(bool~) atan2_16::$18
(bool~) atan2_16::$19
(signed word~) atan2_16::$2
(bool~) atan2_16::$20
(bool~) atan2_16::$21
(bool~) atan2_16::$22
(byte~) atan2_16::$23
(byte~) atan2_16::$24
(bool~) atan2_16::$25
(signed word~) atan2_16::$3
(signed word~) atan2_16::$4
(bool~) atan2_16::$5
(signed word~) atan2_16::$6
(signed word~) atan2_16::$7
(signed word~) atan2_16::$8
(signed word~) atan2_16::$9
(label) atan2_16::@1
(label) atan2_16::@13
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@24
(label) atan2_16::@25
(label) atan2_16::@26
(label) atan2_16::@27
(label) atan2_16::@3
(label) atan2_16::@30
(label) atan2_16::@33
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#0
(word) atan2_16::angle#1
(word) atan2_16::angle#10
(word) atan2_16::angle#11
(word) atan2_16::angle#12
(word) atan2_16::angle#13
(word) atan2_16::angle#14
(word) atan2_16::angle#15
(word) atan2_16::angle#16
(word) atan2_16::angle#17
(word) atan2_16::angle#18
(word) atan2_16::angle#19
(word) atan2_16::angle#2
(word) atan2_16::angle#20
(word) atan2_16::angle#3
(word) atan2_16::angle#4
(word) atan2_16::angle#5
(word) atan2_16::angle#6
(word) atan2_16::angle#7
(word) atan2_16::angle#8
(word) atan2_16::angle#9
(byte) atan2_16::i
(byte) atan2_16::i#0
(byte) atan2_16::i#1
(byte) atan2_16::i#10
(byte) atan2_16::i#11
(byte) atan2_16::i#2
(byte) atan2_16::i#3
(byte) atan2_16::i#4
(byte) atan2_16::i#5
(byte) atan2_16::i#6
(byte) atan2_16::i#7
(byte) atan2_16::i#8
(byte) atan2_16::i#9
(word) atan2_16::return
(word) atan2_16::return#0
(word) atan2_16::return#1
(word) atan2_16::return#2
(word) atan2_16::return#3
(word) atan2_16::return#4
(byte) atan2_16::shift
(byte) atan2_16::shift#0
(byte) atan2_16::shift#1
(byte) atan2_16::shift#2
(byte) atan2_16::shift#3
(byte) atan2_16::shift#4
(signed word) atan2_16::x
(signed word) atan2_16::x#0
(signed word) atan2_16::x#1
(signed word) atan2_16::x#10
(signed word) atan2_16::x#11
(signed word) atan2_16::x#12
(signed word) atan2_16::x#13
(signed word) atan2_16::x#14
(signed word) atan2_16::x#15
(signed word) atan2_16::x#16
(signed word) atan2_16::x#17
(signed word) atan2_16::x#18
(signed word) atan2_16::x#2
(signed word) atan2_16::x#3
(signed word) atan2_16::x#4
(signed word) atan2_16::x#5
(signed word) atan2_16::x#6
(signed word) atan2_16::x#7
(signed word) atan2_16::x#8
(signed word) atan2_16::x#9
(signed word) atan2_16::xd
(signed word) atan2_16::xd#0
(signed word) atan2_16::xd#1
(signed word) atan2_16::xd#2
(signed word) atan2_16::xd#3
(signed word) atan2_16::xd#4
(signed word) atan2_16::xd#5
(signed word) atan2_16::xd#6
(signed word) atan2_16::xd#7
(signed word) atan2_16::xd#8
(signed word) atan2_16::xd#9
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0
(signed word) atan2_16::xi#1
(signed word) atan2_16::xi#10
(signed word) atan2_16::xi#11
(signed word) atan2_16::xi#12
(signed word) atan2_16::xi#2
(signed word) atan2_16::xi#3
(signed word) atan2_16::xi#4
(signed word) atan2_16::xi#5
(signed word) atan2_16::xi#6
(signed word) atan2_16::xi#7
(signed word) atan2_16::xi#8
(signed word) atan2_16::xi#9
(signed word) atan2_16::y
(signed word) atan2_16::y#0
(signed word) atan2_16::y#1
(signed word) atan2_16::y#10
(signed word) atan2_16::y#11
(signed word) atan2_16::y#12
(signed word) atan2_16::y#13
(signed word) atan2_16::y#14
(signed word) atan2_16::y#15
(signed word) atan2_16::y#16
(signed word) atan2_16::y#17
(signed word) atan2_16::y#18
(signed word) atan2_16::y#19
(signed word) atan2_16::y#2
(signed word) atan2_16::y#20
(signed word) atan2_16::y#3
(signed word) atan2_16::y#4
(signed word) atan2_16::y#5
(signed word) atan2_16::y#6
(signed word) atan2_16::y#7
(signed word) atan2_16::y#8
(signed word) atan2_16::y#9
(signed word) atan2_16::yd
(signed word) atan2_16::yd#0
(signed word) atan2_16::yd#1
(signed word) atan2_16::yd#2
(signed word) atan2_16::yd#3
(signed word) atan2_16::yd#4
(signed word) atan2_16::yd#5
(signed word) atan2_16::yd#6
(signed word) atan2_16::yd#7
(signed word) atan2_16::yd#8
(signed word) atan2_16::yd#9
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0
(signed word) atan2_16::yi#1
(signed word) atan2_16::yi#10
(signed word) atan2_16::yi#11
(signed word) atan2_16::yi#12
(signed word) atan2_16::yi#13
(signed word) atan2_16::yi#14
(signed word) atan2_16::yi#15
(signed word) atan2_16::yi#2
(signed word) atan2_16::yi#3
(signed word) atan2_16::yi#4
(signed word) atan2_16::yi#5
(signed word) atan2_16::yi#6
(signed word) atan2_16::yi#7
(signed word) atan2_16::yi#8
(signed word) atan2_16::yi#9
(struct ProcessingChar()) getCharToProcess()
(bool~) getCharToProcess::$0
(bool~) getCharToProcess::$1
(byte*~) getCharToProcess::$10
(byte*~) getCharToProcess::$11
(bool~) getCharToProcess::$2
(bool~) getCharToProcess::$3
(bool~) getCharToProcess::$4
(bool~) getCharToProcess::$5
(bool~) getCharToProcess::$6
(bool~) getCharToProcess::$7
(word~) getCharToProcess::$8
(number~) getCharToProcess::$9
(label) getCharToProcess::@1
(label) getCharToProcess::@10
(label) getCharToProcess::@11
(label) getCharToProcess::@3
(label) getCharToProcess::@4
(label) getCharToProcess::@5
(label) getCharToProcess::@7
(label) getCharToProcess::@8
(label) getCharToProcess::@9
(label) getCharToProcess::@return
(byte) getCharToProcess::closest_dist
(byte) getCharToProcess::closest_dist#0
(byte) getCharToProcess::closest_dist#1
(byte) getCharToProcess::closest_dist#2
(byte) getCharToProcess::closest_dist#3
(byte) getCharToProcess::closest_dist#4
(byte) getCharToProcess::closest_dist#5
(byte) getCharToProcess::closest_dist#6
(byte) getCharToProcess::closest_dist#7
(byte) getCharToProcess::closest_dist#8
(byte) getCharToProcess::closest_dist#9
(byte) getCharToProcess::closest_x
(byte) getCharToProcess::closest_x#0
(byte) getCharToProcess::closest_x#1
(byte) getCharToProcess::closest_x#2
(byte) getCharToProcess::closest_x#3
(byte) getCharToProcess::closest_x#4
(byte) getCharToProcess::closest_x#5
(byte) getCharToProcess::closest_x#6
(byte) getCharToProcess::closest_x#7
(byte) getCharToProcess::closest_x#8
(byte) getCharToProcess::closest_x#9
(byte) getCharToProcess::closest_y
(byte) getCharToProcess::closest_y#0
(byte) getCharToProcess::closest_y#1
(byte) getCharToProcess::closest_y#2
(byte) getCharToProcess::closest_y#3
(byte) getCharToProcess::closest_y#4
(byte) getCharToProcess::closest_y#5
(byte) getCharToProcess::closest_y#6
(byte) getCharToProcess::closest_y#7
(byte) getCharToProcess::closest_y#8
(byte) getCharToProcess::closest_y#9
(byte) getCharToProcess::dist
(byte) getCharToProcess::dist#0
(byte) getCharToProcess::dist#1
(byte*) getCharToProcess::dist_line
(byte*) getCharToProcess::dist_line#0
(byte*) getCharToProcess::dist_line#1
(byte*) getCharToProcess::dist_line#2
(byte*) getCharToProcess::dist_line#3
(byte*) getCharToProcess::dist_line#4
(byte*) getCharToProcess::dist_line#5
(byte*) getCharToProcess::dist_line#6
(byte*) getCharToProcess::dist_line#7
(struct ProcessingChar) getCharToProcess::return
(struct ProcessingChar) getCharToProcess::return#0
(struct ProcessingChar) getCharToProcess::return#1
(byte) getCharToProcess::return_dist
(byte) getCharToProcess::return_dist#0
(byte) getCharToProcess::return_dist#1
(byte) getCharToProcess::return_dist#2
(byte) getCharToProcess::return_dist#3
(byte) getCharToProcess::return_dist#4
(byte) getCharToProcess::return_x
(byte) getCharToProcess::return_x#0
(byte) getCharToProcess::return_x#1
(byte) getCharToProcess::return_x#2
(byte) getCharToProcess::return_x#3
(byte) getCharToProcess::return_x#4
(byte) getCharToProcess::return_y
(byte) getCharToProcess::return_y#0
(byte) getCharToProcess::return_y#1
(byte) getCharToProcess::return_y#2
(byte) getCharToProcess::return_y#3
(byte) getCharToProcess::return_y#4
(byte*) getCharToProcess::screen_line
(byte*) getCharToProcess::screen_line#0
(byte*) getCharToProcess::screen_line#1
(byte*) getCharToProcess::screen_line#2
(byte*) getCharToProcess::screen_line#3
(byte*) getCharToProcess::screen_line#4
(byte*) getCharToProcess::screen_line#5
(byte*) getCharToProcess::screen_line#6
(byte*) getCharToProcess::screen_line#7
(byte) getCharToProcess::x
(byte) getCharToProcess::x#0
(byte) getCharToProcess::x#1
(byte) getCharToProcess::x#2
(byte) getCharToProcess::x#3
(byte) getCharToProcess::x#4
(byte) getCharToProcess::x#5
(byte) getCharToProcess::y
(byte) getCharToProcess::y#0
(byte) getCharToProcess::y#1
(byte) getCharToProcess::y#2
(byte) getCharToProcess::y#3
(byte) getCharToProcess::y#4
(byte) getCharToProcess::y#5
(byte) getCharToProcess::y#6
(byte) getCharToProcess::y#7
(byte*) heap_head
(byte*) heap_head#0
(byte*) heap_head#1
(byte*) heap_head#10
(byte*) heap_head#11
(byte*) heap_head#2
(byte*) heap_head#3
(byte*) heap_head#4
(byte*) heap_head#5
(byte*) heap_head#6
(byte*) heap_head#7
(byte*) heap_head#8
(byte*) heap_head#9
(void()) initSprites()
(number~) initSprites::$0
(byte*~) initSprites::$1
(bool~) initSprites::$2
(bool~) initSprites::$3
(label) initSprites::@1
(label) initSprites::@2
(label) initSprites::@3
(label) initSprites::@7
(label) initSprites::@8
(label) initSprites::@return
(byte) initSprites::i
(byte) initSprites::i#0
(byte) initSprites::i#1
(byte) initSprites::i#2
(byte*) initSprites::sp
(byte*) initSprites::sp#0
(byte*) initSprites::sp#1
(byte*) initSprites::sp#2
(byte*) initSprites::sp#3
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(byte*~) init_angle_screen::$0
(byte*~) init_angle_screen::$1
(word~) init_angle_screen::$10
(number~) init_angle_screen::$11
(number~) init_angle_screen::$12
(byte~) init_angle_screen::$13
(number~) init_angle_screen::$14
(number~) init_angle_screen::$15
(bool~) init_angle_screen::$16
(bool~) init_angle_screen::$2
(number~) init_angle_screen::$3
(number~) init_angle_screen::$4
(word~) init_angle_screen::$5
(signed word~) init_angle_screen::$6
(number~) init_angle_screen::$7
(word~) init_angle_screen::$8
(signed word~) init_angle_screen::$9
(label) init_angle_screen::@1
(label) init_angle_screen::@2
(label) init_angle_screen::@3
(label) init_angle_screen::@4
(label) init_angle_screen::@9
(label) init_angle_screen::@return
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0
(byte*) init_angle_screen::screen#1
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0
(byte*) init_angle_screen::screen_bottomline#1
(byte*) init_angle_screen::screen_bottomline#2
(byte*) init_angle_screen::screen_bottomline#3
(byte*) init_angle_screen::screen_bottomline#4
(byte*) init_angle_screen::screen_bottomline#5
(byte*) init_angle_screen::screen_bottomline#6
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0
(byte*) init_angle_screen::screen_topline#1
(byte*) init_angle_screen::screen_topline#2
(byte*) init_angle_screen::screen_topline#3
(byte*) init_angle_screen::screen_topline#4
(byte*) init_angle_screen::screen_topline#5
(byte*) init_angle_screen::screen_topline#6
(byte) init_angle_screen::x
(byte) init_angle_screen::x#0
(byte) init_angle_screen::x#1
(byte) init_angle_screen::x#2
(byte) init_angle_screen::x#3
(byte) init_angle_screen::x#4
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#0
(byte) init_angle_screen::xb#1
(byte) init_angle_screen::xb#2
(byte) init_angle_screen::xb#3
(byte) init_angle_screen::xb#4
(signed word) init_angle_screen::xw
(signed word) init_angle_screen::xw#0
(byte) init_angle_screen::y
(byte) init_angle_screen::y#0
(byte) init_angle_screen::y#1
(byte) init_angle_screen::y#2
(byte) init_angle_screen::y#3
(byte) init_angle_screen::y#4
(byte) init_angle_screen::y#5
(byte) init_angle_screen::y#6
(signed word) init_angle_screen::yw
(signed word) init_angle_screen::yw#0
interrupt(HARDWARE_ALL)(void()) irqBottom()
(bool~) irqBottom::$0
(bool~) irqBottom::$2
(void()*~) irqBottom::$3
(bool~) irqBottom::$4
(label) irqBottom::@1
(label) irqBottom::@2
(label) irqBottom::@3
(label) irqBottom::@4
(label) irqBottom::@5
(label) irqBottom::@6
(label) irqBottom::@7
(label) irqBottom::@return
(byte) irqBottom::i
(byte) irqBottom::i#0
(byte) irqBottom::i#1
(byte) irqBottom::i#2
interrupt(HARDWARE_ALL)(void()) irqTop()
(bool~) irqTop::$0
(void()*~) irqTop::$1
(bool~) irqTop::$2
(bool~) irqTop::$3
(label) irqTop::@1
(label) irqTop::@2
(label) irqTop::@3
(label) irqTop::@4
(label) irqTop::@5
(label) irqTop::@6
(label) irqTop::@return
(byte) irqTop::i
(byte) irqTop::i#0
(byte) irqTop::i#1
(byte) irqTop::i#2
(byte) irqTop::i1
(byte) irqTop::i1#0
(byte) irqTop::i1#1
(byte) irqTop::i1#2
(void()) main()
(bool~) main::$10
(bool~) main::$11
(byte*~) main::$15
(byte~) main::$16
(word*) main::$17
(word*) main::$18
(word*) main::$19
(void()*~) main::$2
(word*) main::$20
(byte*) main::$21
(byte*) main::$22
(byte*) main::$23
(byte*) main::$24
(byte**) main::$25
(byte*~) main::$4
(byte*~) main::$5
(bool~) main::$6
(number~) main::$7
(bool~) main::$8
(struct ProcessingChar~) main::$9
(byte) main::$9_dist
(byte) main::$9_x
(byte) main::$9_y
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@15
(label) main::@17
(label) main::@18
(label) main::@19
(label) main::@2
(label) main::@20
(label) main::@21
(label) main::@3
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte) main::center_dist
(byte) main::center_dist#0
(byte) main::center_dist#1
(byte) main::center_x
(byte) main::center_x#0
(byte) main::center_x#1
(byte) main::center_y
(byte) main::center_y#0
(byte) main::center_y#1
(byte*) main::dst
(byte*) main::dst#0
(byte*) main::dst#1
(byte*) main::dst#2
(byte*) main::dst#3
(byte) main::i
(byte) main::i#0
(byte) main::i#1
(byte) main::i#2
(byte*) main::src
(byte*) main::src#0
(byte*) main::src#1
(byte*) main::src#2
(byte*) main::src#3
(void*()) malloc((word) malloc::size)
(byte*~) malloc::$0
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0
(void*) malloc::return
(void*) malloc::return#0
(void*) malloc::return#1
(void*) malloc::return#2
(void*) malloc::return#3
(void*) malloc::return#4
(void*) malloc::return#5
(void*) malloc::return#6
(word) malloc::size
(word) malloc::size#0
(word) malloc::size#1
(word) malloc::size#2
(void()) processChars()
(bool~) processChars::$0
(number~) processChars::$1
(word~) processChars::$10
(byte~) processChars::$11
(number~) processChars::$12
(number~) processChars::$13
(byte~) processChars::$14
(word~) processChars::$15
(byte~) processChars::$16
(number~) processChars::$17
(bool~) processChars::$18
(bool~) processChars::$19
(struct ProcessingSprite*~) processChars::$2
(bool~) processChars::$20
(bool~) processChars::$21
(bool~) processChars::$22
(bool~) processChars::$23
(bool~) processChars::$24
(number~) processChars::$25
(byte~) processChars::$26
(number~) processChars::$27
(number~) processChars::$28
(number~) processChars::$29
(number~) processChars::$3
(byte~) processChars::$30
(number~) processChars::$31
(number~) processChars::$32
(number~) processChars::$33
(bool~) processChars::$34
(byte*~) processChars::$35
(byte~) processChars::$36
(byte~) processChars::$37
(byte~) processChars::$38
(byte~) processChars::$39
(bool~) processChars::$4
(byte*) processChars::$40
(byte*) processChars::$41
(byte*) processChars::$42
(word*) processChars::$43
(byte**) processChars::$44
(byte*) processChars::$45
(byte*) processChars::$46
(byte*) processChars::$47
(byte*) processChars::$48
(byte*) processChars::$49
(bool~) processChars::$5
(word*) processChars::$50
(word*) processChars::$51
(word*) processChars::$52
(word*) processChars::$53
(word*) processChars::$54
(byte*) processChars::$55
(word*) processChars::$56
(word*) processChars::$57
(word*) processChars::$58
(word*) processChars::$59
(bool~) processChars::$6
(word*) processChars::$60
(word*) processChars::$61
(word*) processChars::$62
(word*) processChars::$63
(word*) processChars::$64
(word*) processChars::$65
(bool~) processChars::$66
(bool~) processChars::$7
(byte*~) processChars::$8
(byte*~) processChars::$9
(label) processChars::@11
(label) processChars::@13
(label) processChars::@14
(label) processChars::@15
(label) processChars::@16
(label) processChars::@2
(label) processChars::@3
(label) processChars::@4
(label) processChars::@5
(label) processChars::@6
(label) processChars::@7
(label) processChars::@8
(label) processChars::@9
(label) processChars::@return
(byte) processChars::bitmask
(byte) processChars::bitmask#0
(byte) processChars::bitmask#1
(byte) processChars::bitmask#2
(byte) processChars::bitmask#3
(byte) processChars::bitmask#4
(byte) processChars::bitmask#5
(byte) processChars::bitmask#6
(byte) processChars::bitmask#7
(byte) processChars::i
(byte) processChars::i#0
(byte) processChars::i#1
(byte) processChars::i#10
(byte) processChars::i#11
(byte) processChars::i#12
(byte) processChars::i#2
(byte) processChars::i#3
(byte) processChars::i#4
(byte) processChars::i#5
(byte) processChars::i#6
(byte) processChars::i#7
(byte) processChars::i#8
(byte) processChars::i#9
(byte) processChars::numActive
(byte) processChars::numActive#0
(byte) processChars::numActive#1
(byte) processChars::numActive#10
(byte) processChars::numActive#11
(byte) processChars::numActive#12
(byte) processChars::numActive#13
(byte) processChars::numActive#14
(byte) processChars::numActive#2
(byte) processChars::numActive#3
(byte) processChars::numActive#4
(byte) processChars::numActive#5
(byte) processChars::numActive#6
(byte) processChars::numActive#7
(byte) processChars::numActive#8
(byte) processChars::numActive#9
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0
(struct ProcessingSprite*) processChars::processing#1
(struct ProcessingSprite*) processChars::processing#2
(struct ProcessingSprite*) processChars::processing#3
(struct ProcessingSprite*) processChars::processing#4
(struct ProcessingSprite*) processChars::processing#5
(struct ProcessingSprite*) processChars::processing#6
(struct ProcessingSprite*) processChars::processing#7
(struct ProcessingSprite*) processChars::processing#8
(byte) processChars::xchar
(byte) processChars::xchar#0
(word) processChars::xpos
(word) processChars::xpos#0
(word) processChars::xpos#1
(word) processChars::xpos#2
(word) processChars::xpos#3
(word) processChars::xpos#4
(byte) processChars::ychar
(byte) processChars::ychar#0
(byte) processChars::ypos
(byte) processChars::ypos#0
(byte) processChars::ypos#1
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(bool~) setupRasterIrq::$0
(byte~) setupRasterIrq::$1
(label) setupRasterIrq::@1
(label) setupRasterIrq::@2
(label) setupRasterIrq::@3
(label) setupRasterIrq::@return
(void()*) setupRasterIrq::irqRoutine
(void()*) setupRasterIrq::irqRoutine#0
(void()*) setupRasterIrq::irqRoutine#1
(void()*) setupRasterIrq::irqRoutine#2
(void()*) setupRasterIrq::irqRoutine#3
(void()*) setupRasterIrq::irqRoutine#4
(word) setupRasterIrq::raster
(word) setupRasterIrq::raster#0
(word) setupRasterIrq::raster#1
(word) setupRasterIrq::raster#2
(word) setupRasterIrq::raster#3
(word) setupRasterIrq::raster#4
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
(word~) startProcessing::$0
(number~) startProcessing::$1
(byte*~) startProcessing::$10
(word~) startProcessing::$11
(number~) startProcessing::$12
(number~) startProcessing::$13
(number~) startProcessing::$14
(word~) startProcessing::$15
(number~) startProcessing::$16
(number~) startProcessing::$17
(number~) startProcessing::$18
(byte*~) startProcessing::$19
(number~) startProcessing::$2
(byte~) startProcessing::$20
(byte~) startProcessing::$21
(number~) startProcessing::$22
(word~) startProcessing::$23
(number~) startProcessing::$24
(bool~) startProcessing::$25
(bool~) startProcessing::$26
(bool~) startProcessing::$27
(bool~) startProcessing::$28
(bool~) startProcessing::$29
(byte*~) startProcessing::$3
(byte~) startProcessing::$30
(byte~) startProcessing::$31
(word*) startProcessing::$32
(word*) startProcessing::$33
(word*) startProcessing::$34
(word*) startProcessing::$35
(byte*) startProcessing::$36
(byte*) startProcessing::$37
(byte*) startProcessing::$38
(byte*) startProcessing::$39
(byte*~) startProcessing::$4
(byte**) startProcessing::$40
(byte*) startProcessing::$41
(word~) startProcessing::$5
(number~) startProcessing::$6
(byte*~) startProcessing::$7
(word~) startProcessing::$8
(number~) startProcessing::$9
(label) startProcessing::@1
(label) startProcessing::@10
(label) startProcessing::@2
(label) startProcessing::@3
(label) startProcessing::@4
(label) startProcessing::@5
(label) startProcessing::@8
(label) startProcessing::@9
(label) startProcessing::@return
(struct ProcessingChar) startProcessing::center
(byte) startProcessing::center_dist
(byte) startProcessing::center_dist#0
(byte) startProcessing::center_x
(byte) startProcessing::center_x#0
(byte) startProcessing::center_x#1
(byte) startProcessing::center_x#2
(byte) startProcessing::center_x#3
(byte) startProcessing::center_x#4
(byte) startProcessing::center_x#5
(byte) startProcessing::center_x#6
(byte) startProcessing::center_x#7
(byte) startProcessing::center_x#8
(byte) startProcessing::center_x#9
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0
(byte) startProcessing::center_y#1
(byte) startProcessing::center_y#2
(byte) startProcessing::center_y#3
(byte) startProcessing::center_y#4
(byte) startProcessing::center_y#5
(byte) startProcessing::center_y#6
(byte) startProcessing::center_y#7
(byte) startProcessing::center_y#8
(byte) startProcessing::center_y#9
(byte) startProcessing::ch
(byte) startProcessing::ch#0
(byte*) startProcessing::chargenData
(byte*) startProcessing::chargenData#0
(byte*) startProcessing::chargenData#1
(byte*) startProcessing::chargenData#2
(byte*) startProcessing::colPtr
(byte*) startProcessing::colPtr#0
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#0
(byte) startProcessing::freeIdx#1
(byte) startProcessing::freeIdx#2
(byte) startProcessing::freeIdx#3
(byte) startProcessing::freeIdx#4
(byte) startProcessing::freeIdx#5
(byte) startProcessing::freeIdx#6
(byte) startProcessing::i
(byte) startProcessing::i#0
(byte) startProcessing::i#1
(byte) startProcessing::i#2
(byte) startProcessing::i#3
(byte) startProcessing::i#4
(byte) startProcessing::i1
(byte) startProcessing::i1#0
(byte) startProcessing::i1#1
(byte) startProcessing::i1#2
(word) startProcessing::offset
(word) startProcessing::offset#0
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0
(byte*) startProcessing::screenPtr#1
(byte*) startProcessing::screenPtr#2
(byte) startProcessing::spriteCol
(byte) startProcessing::spriteCol#0
(byte) startProcessing::spriteCol#1
(byte) startProcessing::spriteCol#2
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0
(byte*) startProcessing::spriteData#1
(byte*) startProcessing::spriteData#2
(byte) startProcessing::spriteIdx
(byte) startProcessing::spriteIdx#0
(byte) startProcessing::spriteIdx#1
(byte) startProcessing::spriteIdx#2
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0
(word) startProcessing::spriteY
(word) startProcessing::spriteY#0

Fixing inline constructor with init_angle_screen::$17 ← (byte)init_angle_screen::$4 w= (byte)0
Fixing inline constructor with init_angle_screen::$18 ← (byte)init_angle_screen::$7 w= (byte)0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) $f in (byte) CORDIC_ITERATIONS_16#0 ← (number) $f
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (number) 1
Adding number conversion cast (unumber) atan2_16::$16 in (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (unumber)(number) 1
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 == (number) 0
Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
Adding number conversion cast (unumber) 2 in (bool~) atan2_16::$19 ← (byte) atan2_16::shift#2 >= (number) 2
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
Adding number conversion cast (unumber) 2 in (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
Adding number conversion cast (unumber) 0 in (bool~) atan2_16::$25 ← (number) 0 != (byte) atan2_16::shift#4
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$21 ← (signed word) atan2_16::yi#5 >= (number) 0
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
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) 7 in (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (number) 7
Adding number conversion cast (unumber) 5 in (byte) PROCPORT_RAM_IO#0 ← (number) 5
Adding number conversion cast (unumber) 1 in (byte) PROCPORT_RAM_CHARROM#0 ← (number) 1
Adding number conversion cast (unumber) $18 in (byte) BORDER_XPOS_LEFT#0 ← (number) $18
Adding number conversion cast (unumber) $158 in (word) BORDER_XPOS_RIGHT#0 ← (number) $158
Adding number conversion cast (unumber) $32 in (byte) BORDER_YPOS_TOP#0 ← (number) $32
Adding number conversion cast (unumber) $fa in (byte) BORDER_YPOS_BOTTOM#0 ← (number) $fa
Adding number conversion cast (unumber) $3f8 in (word) SPRITE_PTRS#0 ← (number) $3f8
Adding number conversion cast (unumber) 1 in (byte) IRQ_RASTER#0 ← (number) 1
Adding number conversion cast (unumber) $7f in (byte) CIA_INTERRUPT_CLEAR#0 ← (number) $7f
Adding number conversion cast (unumber) 1 in (byte) WHITE#0 ← (number) 1
Adding number conversion cast (unumber) 6 in (byte) BLUE#0 ← (number) 6
Adding number conversion cast (unumber) $e in (byte) LIGHT_BLUE#0 ← (number) $e
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#0 ← (number) $3e8
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8
Adding number conversion cast (unumber) 8 in (byte) NUM_PROCESSING#0 ← (number) 8
Adding number conversion cast (unumber) $ff in (byte) NOT_FOUND#0 ← (number) $ff
Adding number conversion cast (unumber) $3e8 in (byte*~) main::$5 ← (byte*) SCREEN#0 + (number) $3e8
Adding number conversion cast (unumber) 1 in (number~) main::$7 ← (byte) NUM_PROCESSING#0 - (number) 1
Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) NUM_PROCESSING#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 0 in *((word*) main::$17 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$18 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$19 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$20 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$21 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$22 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$23 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$4 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$15 ← (byte*) COLS#0 + (number) $3e7
Adding number conversion cast (unumber) 0 in (byte) getCharToProcess::closest_x#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) getCharToProcess::closest_y#0 ← (number) 0
Adding number conversion cast (unumber) $28 in (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#3 + (number) $28
Adding number conversion cast (unumber) $28 in (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#3 + (number) $28
Adding number conversion cast (unumber) $28 in (number~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (number) $28
Adding number conversion cast (unumber) getCharToProcess::$9 in (number~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (unumber)(number) $28
Adding number conversion cast (unumber) $ff in (byte) startProcessing::freeIdx#0 ← (number) $ff
Adding number conversion cast (unumber) 1 in (number~) startProcessing::$24 ← (byte) NUM_PROCESSING#0 - (number) 1
Adding number conversion cast (unumber) startProcessing::$24 in (number~) startProcessing::$24 ← (byte) NUM_PROCESSING#0 - (unumber)(number) 1
Adding number conversion cast (unumber) $ff in (bool~) startProcessing::$28 ← (byte) startProcessing::freeIdx#2 == (number) $ff
Adding number conversion cast (unumber) $28 in (number~) startProcessing::$1 ← (word~) startProcessing::$0 * (number) $28
Adding number conversion cast (unumber) startProcessing::$1 in (number~) startProcessing::$1 ← (word~) startProcessing::$0 * (unumber)(number) $28
Adding number conversion cast (unumber) startProcessing::$2 in (number~) startProcessing::$2 ← (unumber~) startProcessing::$1 + (byte) startProcessing::center_x#1
Adding number conversion cast (unumber) $40 in (number~) startProcessing::$6 ← (word~) startProcessing::$5 * (number) $40
Adding number conversion cast (unumber) startProcessing::$6 in (number~) startProcessing::$6 ← (word~) startProcessing::$5 * (unumber)(number) $40
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$9 ← (word~) startProcessing::$8 * (number) 8
Adding number conversion cast (unumber) startProcessing::$9 in (number~) startProcessing::$9 ← (word~) startProcessing::$8 * (unumber)(number) 8
Adding number conversion cast (unumber) 3 in (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (number) 3
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$12 ← (word~) startProcessing::$11 * (number) 8
Adding number conversion cast (unumber) startProcessing::$12 in (number~) startProcessing::$12 ← (word~) startProcessing::$11 * (unumber)(number) 8
Adding number conversion cast (unumber) startProcessing::$13 in (number~) startProcessing::$13 ← (byte) BORDER_XPOS_LEFT#0 + (unumber~) startProcessing::$12
Adding number conversion cast (unumber) 4 in (number~) startProcessing::$14 ← (unumber~) startProcessing::$13 << (number) 4
Adding number conversion cast (unumber) startProcessing::$14 in (number~) startProcessing::$14 ← (unumber~) startProcessing::$13 << (unumber)(number) 4
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$16 ← (word~) startProcessing::$15 * (number) 8
Adding number conversion cast (unumber) startProcessing::$16 in (number~) startProcessing::$16 ← (word~) startProcessing::$15 * (unumber)(number) 8
Adding number conversion cast (unumber) startProcessing::$17 in (number~) startProcessing::$17 ← (byte) BORDER_YPOS_TOP#0 + (unumber~) startProcessing::$16
Adding number conversion cast (unumber) 4 in (number~) startProcessing::$18 ← (unumber~) startProcessing::$17 << (number) 4
Adding number conversion cast (unumber) startProcessing::$18 in (number~) startProcessing::$18 ← (unumber~) startProcessing::$17 << (unumber)(number) 4
Adding number conversion cast (unumber) $40 in (byte*~) startProcessing::$19 ← (byte*) SPRITE_DATA#0 / (number) $40
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$22 ← (byte) startProcessing::spriteIdx#1 * (number) 8
Adding number conversion cast (unumber) startProcessing::$22 in (number~) startProcessing::$22 ← (byte) startProcessing::spriteIdx#1 * (unumber)(number) 8
Adding number conversion cast (unumber) $3c in *((word*) startProcessing::$35 + (byte~) startProcessing::$31) ← (number) $3c
Adding number conversion cast (unumber) 8 in (number~) $2 ← (byte) BORDER_XPOS_LEFT#0 - (number) 8
Adding number conversion cast (unumber) $2 in (number~) $2 ← (byte) BORDER_XPOS_LEFT#0 - (unumber)(number) 8
Adding number conversion cast (unumber) 4 in (word~) $4 ← (word~) $3 << (number) 4
Adding number conversion cast (unumber) 4 in (word~) $6 ← (word~) $5 << (number) 4
Adding number conversion cast (unumber) 8 in (number~) $7 ← (byte) BORDER_YPOS_TOP#0 - (number) 8
Adding number conversion cast (unumber) $7 in (number~) $7 ← (byte) BORDER_YPOS_TOP#0 - (unumber)(number) 8
Adding number conversion cast (unumber) 4 in (word~) $9 ← (word~) $8 << (number) 4
Adding number conversion cast (unumber) 4 in (word~) $11 ← (word~) $10 << (number) 4
Adding number conversion cast (unumber) 0 in (byte) processChars::numActive#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (number~) processChars::$1 ← (byte) NUM_PROCESSING#0 - (number) 1
Adding number conversion cast (unumber) processChars::$1 in (number~) processChars::$1 ← (byte) NUM_PROCESSING#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 1 in (number~) processChars::$3 ← (number) 1 << *((byte*) processChars::$40)
Adding number conversion cast (unumber) processChars::$3 in (number~) processChars::$3 ← (unumber)(number) 1 << *((byte*) processChars::$40)
Adding number conversion cast (unumber) 4 in (word~) processChars::$10 ← *((word*) processChars::$43) >> (number) 4
Adding number conversion cast (unumber) 0 in (bool~) processChars::$66 ← (number) 0 != (byte~) processChars::$11
Adding number conversion cast (unumber) $ff in (number~) processChars::$12 ← (number) $ff ^ (byte) processChars::bitmask#3
Adding number conversion cast (unumber) processChars::$12 in (number~) processChars::$12 ← (unumber)(number) $ff ^ (byte) processChars::bitmask#3
Adding number conversion cast (unumber) 2 in (number~) processChars::$13 ← (byte) processChars::i#4 * (number) 2
Adding number conversion cast (unumber) processChars::$13 in (number~) processChars::$13 ← (byte) processChars::i#4 * (unumber)(number) 2
Adding number conversion cast (unumber) 4 in (word~) processChars::$15 ← *((word*) processChars::$50) >> (number) 4
Adding number conversion cast (unumber) 2 in (number~) processChars::$17 ← (byte) processChars::i#4 * (number) 2
Adding number conversion cast (unumber) processChars::$17 in (number~) processChars::$17 ← (byte) processChars::i#4 * (unumber)(number) 2
Adding number conversion cast (unumber) $ff in (number~) processChars::$33 ← (number) $ff ^ (byte) processChars::bitmask#4
Adding number conversion cast (unumber) processChars::$33 in (number~) processChars::$33 ← (unumber)(number) $ff ^ (byte) processChars::bitmask#4
Adding number conversion cast (unumber) 8 in (number~) processChars::$25 ← (word) processChars::xpos#2 / (number) 8
Adding number conversion cast (unumber) processChars::$25 in (number~) processChars::$25 ← (word) processChars::xpos#2 / (unumber)(number) 8
Adding number conversion cast (unumber) 8 in (number~) processChars::$27 ← (byte) BORDER_XPOS_LEFT#0 / (number) 8
Adding number conversion cast (unumber) processChars::$27 in (number~) processChars::$27 ← (byte) BORDER_XPOS_LEFT#0 / (unumber)(number) 8
Adding number conversion cast (unumber) processChars::$28 in (number~) processChars::$28 ← (byte~) processChars::$26 - (unumber~) processChars::$27
Adding number conversion cast (unumber) 8 in (number~) processChars::$29 ← (byte) processChars::ypos#1 / (number) 8
Adding number conversion cast (unumber) processChars::$29 in (number~) processChars::$29 ← (byte) processChars::ypos#1 / (unumber)(number) 8
Adding number conversion cast (unumber) 8 in (number~) processChars::$31 ← (byte) BORDER_YPOS_TOP#0 / (number) 8
Adding number conversion cast (unumber) processChars::$31 in (number~) processChars::$31 ← (byte) BORDER_YPOS_TOP#0 / (unumber)(number) 8
Adding number conversion cast (unumber) processChars::$32 in (number~) processChars::$32 ← (byte~) processChars::$30 - (unumber~) processChars::$31
Adding number conversion cast (unumber) $3e7 in (byte*~) processChars::$35 ← (byte*) SCREEN#0 + (number) $3e7
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
Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27
Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $27 in (number~) init_angle_screen::$4 ← (number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) init_angle_screen::$4 in (number~) init_angle_screen::$4 ← (unumber)(number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (number) 2
Adding number conversion cast (unumber) init_angle_screen::$7 in (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (unumber)(number) 2
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (number) $80
Adding number conversion cast (unumber) init_angle_screen::$11 in (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (unumber)(number) $80
Adding number conversion cast (unumber) init_angle_screen::$12 in (number~) init_angle_screen::$12 ← > (unumber~) init_angle_screen::$11
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$14 ← (number) $80 + (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$14 in (number~) init_angle_screen::$14 ← (unumber)(number) $80 + (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$15 ← (number) $80 - (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$15 in (number~) init_angle_screen::$15 ← (unumber)(number) $80 - (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
Adding number conversion cast (unumber) $40 in (number~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (number) $40
Adding number conversion cast (unumber) initSprites::$0 in (number~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (unumber)(number) $40
Adding number conversion cast (unumber) 0 in *((byte*) initSprites::sp#3) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_MC#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_EXPAND_X#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_EXPAND_Y#0) ← (number) 0
Adding number conversion cast (unumber) $100 in (bool~) setupRasterIrq::$0 ← (word) setupRasterIrq::raster#1 < (number) $100
Adding number conversion cast (unumber) $7f in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (number) $7f
Adding number conversion cast (unumber) $80 in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) | (number) $80
Adding number conversion cast (unumber) $30 in (byte) RASTER_IRQ_TOP#0 ← (number) $30
Adding number conversion cast (unumber) $ff in (byte) RASTER_IRQ_MIDDLE#0 ← (number) $ff
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) HEAP_TOP#0 ← (byte*)(number) $a000
Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0
Inlining cast (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f
Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0
Inlining cast (byte*) PROCPORT_DDR#0 ← (byte*)(number) 0
Inlining cast (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (unumber)(number) 7
Inlining cast (byte*) PROCPORT#0 ← (byte*)(number) 1
Inlining cast (byte) PROCPORT_RAM_IO#0 ← (unumber)(number) 5
Inlining cast (byte) PROCPORT_RAM_CHARROM#0 ← (unumber)(number) 1
Inlining cast (byte*) CHARGEN#0 ← (byte*)(number) $d000
Inlining cast (byte) BORDER_XPOS_LEFT#0 ← (unumber)(number) $18
Inlining cast (word) BORDER_XPOS_RIGHT#0 ← (unumber)(number) $158
Inlining cast (byte) BORDER_YPOS_TOP#0 ← (unumber)(number) $32
Inlining cast (byte) BORDER_YPOS_BOTTOM#0 ← (unumber)(number) $fa
Inlining cast (word) SPRITE_PTRS#0 ← (unumber)(number) $3f8
Inlining cast (byte*) SPRITES_XPOS#0 ← (byte*)(number) $d000
Inlining cast (byte*) SPRITES_YPOS#0 ← (byte*)(number) $d001
Inlining cast (byte*) SPRITES_XMSB#0 ← (byte*)(number) $d010
Inlining cast (byte*) RASTER#0 ← (byte*)(number) $d012
Inlining cast (byte*) SPRITES_ENABLE#0 ← (byte*)(number) $d015
Inlining cast (byte*) SPRITES_EXPAND_Y#0 ← (byte*)(number) $d017
Inlining cast (byte*) SPRITES_MC#0 ← (byte*)(number) $d01c
Inlining cast (byte*) SPRITES_EXPAND_X#0 ← (byte*)(number) $d01d
Inlining cast (byte*) BORDERCOL#0 ← (byte*)(number) $d020
Inlining cast (byte*) BGCOL#0 ← (byte*)(number) $d021
Inlining cast (byte*) SPRITES_COLS#0 ← (byte*)(number) $d027
Inlining cast (byte*) VIC_CONTROL#0 ← (byte*)(number) $d011
Inlining cast (byte*) IRQ_STATUS#0 ← (byte*)(number) $d019
Inlining cast (byte*) IRQ_ENABLE#0 ← (byte*)(number) $d01a
Inlining cast (byte) IRQ_RASTER#0 ← (unumber)(number) 1
Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800
Inlining cast (byte*) CIA1_INTERRUPT#0 ← (byte*)(number) $dc0d
Inlining cast (byte) CIA_INTERRUPT_CLEAR#0 ← (unumber)(number) $7f
Inlining cast (void()**) HARDWARE_IRQ#0 ← (void()**)(number) $fffe
Inlining cast (byte) WHITE#0 ← (unumber)(number) 1
Inlining cast (byte) BLUE#0 ← (unumber)(number) 6
Inlining cast (byte) LIGHT_BLUE#0 ← (unumber)(number) $e
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte*) SPRITE_DATA#0 ← (byte*)(number) $2000
Inlining cast (word) malloc::size#0 ← (unumber)(number) $3e8
Inlining cast (byte*) SCREEN_COPY#0 ← (byte*)(void*~) $0
Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8
Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $1
Inlining cast (byte) NUM_PROCESSING#0 ← (unumber)(number) 8
Inlining cast (byte) NOT_FOUND#0 ← (unumber)(number) $ff
Inlining cast *((word*) main::$17 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$18 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$19 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$20 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$21 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$22 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$23 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte**) main::$25 + (byte~) main::$16) ← (byte*)(number) 0
Inlining cast (byte) getCharToProcess::closest_x#0 ← (unumber)(number) 0
Inlining cast (byte) getCharToProcess::closest_y#0 ← (unumber)(number) 0
Inlining cast (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::closest_y#3
Inlining cast (byte) startProcessing::freeIdx#0 ← (unumber)(number) $ff
Inlining cast (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#1
Inlining cast (word~) startProcessing::$5 ← (word)(byte) startProcessing::spriteIdx#0
Inlining cast (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0
Inlining cast (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#2
Inlining cast (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#2
Inlining cast (byte~) startProcessing::$20 ← (byte)(byte*~) startProcessing::$19
Inlining cast (word~) startProcessing::$23 ← (word)(unumber~) startProcessing::$22
Inlining cast *((word*) startProcessing::$35 + (byte~) startProcessing::$31) ← (unumber)(number) $3c
Inlining cast (word~) $3 ← (word)(unumber~) $2
Inlining cast (word~) $5 ← (word)(word) BORDER_XPOS_RIGHT#0
Inlining cast (word~) $8 ← (word)(unumber~) $7
Inlining cast (word~) $10 ← (word)(byte) BORDER_YPOS_BOTTOM#0
Inlining cast (byte) processChars::numActive#0 ← (unumber)(number) 0
Inlining cast (byte~) processChars::$14 ← (byte)(word) processChars::xpos#1
Inlining cast (byte~) processChars::$16 ← (byte)(word~) processChars::$15
Inlining cast (byte~) processChars::$26 ← (byte)(unumber~) processChars::$25
Inlining cast (byte~) processChars::$30 ← (byte)(unumber~) processChars::$29
Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0
Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27
Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5
Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8
Inlining cast *((byte*) initSprites::sp#3) ← (unumber)(number) 0
Inlining cast *((byte*) SPRITES_MC#0) ← (unumber)(number) 0
Inlining cast *((byte*) SPRITES_EXPAND_X#0) ← (unumber)(number) 0
Inlining cast *((byte*) SPRITES_EXPAND_Y#0) ← (unumber)(number) 0
Inlining cast (byte) RASTER_IRQ_TOP#0 ← (unumber)(number) $30
Inlining cast (byte) RASTER_IRQ_MIDDLE#0 ← (unumber)(number) $ff
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 40960
Simplifying constant integer cast $f
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $8000
Simplifying constant pointer cast (byte*) 0
Simplifying constant integer cast 7
Simplifying constant pointer cast (byte*) 1
Simplifying constant integer cast 5
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 53248
Simplifying constant integer cast $18
Simplifying constant integer cast $158
Simplifying constant integer cast $32
Simplifying constant integer cast $fa
Simplifying constant integer cast $3f8
Simplifying constant pointer cast (byte*) 53248
Simplifying constant pointer cast (byte*) 53249
Simplifying constant pointer cast (byte*) 53264
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53269
Simplifying constant pointer cast (byte*) 53271
Simplifying constant pointer cast (byte*) 53276
Simplifying constant pointer cast (byte*) 53277
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 53281
Simplifying constant pointer cast (byte*) 53287
Simplifying constant pointer cast (byte*) 53265
Simplifying constant pointer cast (byte*) 53273
Simplifying constant pointer cast (byte*) 53274
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 55296
Simplifying constant pointer cast (byte*) 56333
Simplifying constant integer cast $7f
Simplifying constant pointer cast (void()**) 65534
Simplifying constant integer cast 1
Simplifying constant integer cast 6
Simplifying constant integer cast $e
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 8192
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant integer cast 8
Simplifying constant integer cast $ff
Simplifying constant integer cast $3e8
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 0
Simplifying constant integer cast $3e7
Simplifying constant integer cast $3e7
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $ff
Simplifying constant integer cast 1
Simplifying constant integer cast $ff
Simplifying constant integer cast $28
Simplifying constant integer cast $40
Simplifying constant integer cast 8
Simplifying constant integer cast 3
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast $40
Simplifying constant integer cast 8
Simplifying constant integer cast $3c
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast (word) BORDER_XPOS_RIGHT#0
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 4
Simplifying constant integer cast 0
Simplifying constant integer cast $ff
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast 2
Simplifying constant integer cast $ff
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast $3e7
Simplifying constant integer cast 0
Simplifying constant integer cast $27
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $40
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $100
Simplifying constant integer cast $7f
Simplifying constant integer cast $80
Simplifying constant integer cast $30
Simplifying constant integer cast $ff
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $f
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) 2
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0
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 (byte) 7
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $18
Finalized unsigned number type (word) $158
Finalized unsigned number type (byte) $32
Finalized unsigned number type (byte) $fa
Finalized unsigned number type (word) $3f8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $7f
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) $e
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $3c
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $100
Finalized unsigned number type (byte) $7f
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) $ff
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (byte) 1
Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9
Inferred type updated to byte in (unumber~) main::$7 ← (byte) NUM_PROCESSING#0 - (byte) 1
Inferred type updated to word in (unumber~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (byte) $28
Inferred type updated to byte in (unumber~) startProcessing::$24 ← (byte) NUM_PROCESSING#0 - (byte) 1
Inferred type updated to word in (unumber~) startProcessing::$1 ← (word~) startProcessing::$0 * (byte) $28
Inferred type updated to word in (unumber~) startProcessing::$2 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#1
Inferred type updated to word in (unumber~) startProcessing::$6 ← (word~) startProcessing::$5 * (byte) $40
Inferred type updated to word in (unumber~) startProcessing::$9 ← (word~) startProcessing::$8 * (byte) 8
Inferred type updated to word in (unumber~) startProcessing::$12 ← (word~) startProcessing::$11 * (byte) 8
Inferred type updated to word in (unumber~) startProcessing::$13 ← (byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12
Inferred type updated to word in (unumber~) startProcessing::$14 ← (word~) startProcessing::$13 << (byte) 4
Inferred type updated to word in (unumber~) startProcessing::$16 ← (word~) startProcessing::$15 * (byte) 8
Inferred type updated to word in (unumber~) startProcessing::$17 ← (byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16
Inferred type updated to word in (unumber~) startProcessing::$18 ← (word~) startProcessing::$17 << (byte) 4
Inferred type updated to byte in (unumber~) startProcessing::$22 ← (byte) startProcessing::spriteIdx#1 * (byte) 8
Inferred type updated to byte in (unumber~) $2 ← (byte) BORDER_XPOS_LEFT#0 - (byte) 8
Inferred type updated to byte in (unumber~) $7 ← (byte) BORDER_YPOS_TOP#0 - (byte) 8
Inferred type updated to byte in (unumber~) processChars::$1 ← (byte) NUM_PROCESSING#0 - (byte) 1
Inferred type updated to byte in (unumber~) processChars::$3 ← (byte) 1 << *((byte*) processChars::$40)
Inferred type updated to byte in (unumber~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#3
Inferred type updated to byte in (unumber~) processChars::$13 ← (byte) processChars::i#4 * (byte) 2
Inferred type updated to byte in (unumber~) processChars::$17 ← (byte) processChars::i#4 * (byte) 2
Inferred type updated to byte in (unumber~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#4
Inferred type updated to word in (unumber~) processChars::$25 ← (word) processChars::xpos#2 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$27 ← (byte) BORDER_XPOS_LEFT#0 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$28 ← (byte~) processChars::$26 - (byte~) processChars::$27
Inferred type updated to byte in (unumber~) processChars::$29 ← (byte) processChars::ypos#1 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$31 ← (byte) BORDER_YPOS_TOP#0 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$32 ← (byte~) processChars::$30 - (byte~) processChars::$31
Inferred type updated to byte in (unumber~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
Inferred type updated to byte in (unumber~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (byte) 2
Inferred type updated to word in (unumber~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
Inferred type updated to byte in (unumber~) init_angle_screen::$12 ← > (word~) init_angle_screen::$11
Inferred type updated to byte in (unumber~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (byte) $40
Inversing boolean not [38] (bool~) atan2_16::$18 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [37] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 == (signed byte) 0
Inversing boolean not [47] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [46] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
Inversing boolean not [58] (bool~) atan2_16::$20 ← (byte) 0 == (byte) atan2_16::shift#4 from [57] (bool~) atan2_16::$25 ← (byte) 0 != (byte) atan2_16::shift#4
Inversing boolean not [82] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [81] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
Inversing boolean not [213] (bool~) main::$11 ← (byte) main::center_dist#0 != (byte) NOT_FOUND#0 from [212] (bool~) main::$10 ← (byte) main::center_dist#0 == (byte) NOT_FOUND#0
Inversing boolean not [239] (bool~) getCharToProcess::$3 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) == (byte) ' ' from [238] (bool~) getCharToProcess::$2 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) != (byte) ' '
Inversing boolean not [248] (bool~) getCharToProcess::$5 ← (byte) getCharToProcess::dist#0 >= (byte) getCharToProcess::closest_dist#2 from [247] (bool~) getCharToProcess::$4 ← (byte) getCharToProcess::dist#0 < (byte) getCharToProcess::closest_dist#2
Inversing boolean not [262] (bool~) getCharToProcess::$1 ← (byte) getCharToProcess::closest_dist#3 == (byte) NOT_FOUND#0 from [261] (bool~) getCharToProcess::$0 ← (byte) getCharToProcess::closest_dist#3 != (byte) NOT_FOUND#0
Inversing boolean not [290] (bool~) startProcessing::$26 ← *((byte*) startProcessing::$41 + (byte~) startProcessing::$30) != (const byte) STATUS_FREE from [289] (bool~) startProcessing::$25 ← *((byte*) startProcessing::$41 + (byte~) startProcessing::$30) == (const byte) STATUS_FREE
Inversing boolean not [397] (bool~) processChars::$5 ← *((byte*) processChars::$41) == (const byte) STATUS_FREE from [396] (bool~) processChars::$4 ← *((byte*) processChars::$41) != (const byte) STATUS_FREE
Inversing boolean not [406] (bool~) processChars::$7 ← *((byte*) processChars::$42) != (const byte) STATUS_NEW from [405] (bool~) processChars::$6 ← *((byte*) processChars::$42) == (const byte) STATUS_NEW
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#11 (byte*) heap_head#10 (byte*) heap_head#9 
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#6 (byte*) heap_head#2 
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 
Alias (signed word) atan2_16::yi#0 = (signed word~) atan2_16::$4 (signed word) atan2_16::yi#12 (signed word) atan2_16::yi#13 
Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#2 (signed word~) atan2_16::$8 (signed word) atan2_16::x#3 
Alias (signed word) atan2_16::y#12 = (signed word) atan2_16::y#15 (signed word) atan2_16::y#13 
Alias (signed word~) atan2_16::$7 = (signed word~) atan2_16::$6 
Alias (signed word) atan2_16::xi#0 = (signed word~) atan2_16::$9 
Alias (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#6 (signed word) atan2_16::xd#0 
Alias (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#4 (signed word) atan2_16::yd#0 
Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#6 (byte) atan2_16::shift#0 
Alias (word) atan2_16::angle#12 = (word) atan2_16::angle#19 
Alias (signed word) atan2_16::x#17 = (signed word) atan2_16::x#7 
Alias (signed word) atan2_16::y#19 = (signed word) atan2_16::y#7 
Alias (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#7 (signed word) atan2_16::xd#8 (signed word) atan2_16::xd#4 
Alias (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#7 (signed word) atan2_16::yd#8 (signed word) atan2_16::yd#4 
Alias (byte) atan2_16::shift#2 = (byte) atan2_16::shift#3 (byte) atan2_16::shift#4 
Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#15 (signed word) atan2_16::yi#14 (signed word) atan2_16::yi#11 
Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#12 (signed word) atan2_16::xi#11 (signed word) atan2_16::xi#9 
Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#11 (byte) atan2_16::i#8 (byte) atan2_16::i#9 
Alias (word) atan2_16::angle#16 = (word) atan2_16::angle#20 (word) atan2_16::angle#18 (word) atan2_16::angle#17 
Alias (signed word) atan2_16::x#14 = (signed word) atan2_16::x#18 (signed word) atan2_16::x#16 (signed word) atan2_16::x#15 
Alias (signed word) atan2_16::y#16 = (signed word) atan2_16::y#20 (signed word) atan2_16::y#18 (signed word) atan2_16::y#17 
Alias (signed word) atan2_16::xi#4 = (signed word) atan2_16::xi#7 (signed word) atan2_16::xi#5 
Alias (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#9 (signed word) atan2_16::yd#6 
Alias (signed word) atan2_16::yi#5 = (signed word) atan2_16::yi#6 (signed word) atan2_16::yi#7 
Alias (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#9 (signed word) atan2_16::xd#6 
Alias (byte) atan2_16::i#3 = (byte) atan2_16::i#7 (byte) atan2_16::i#4 
Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#7 (word) atan2_16::angle#8 
Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#13 (signed word) atan2_16::x#12 
Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#14 (signed word) atan2_16::y#11 
Alias (word) atan2_16::angle#1 = (word) atan2_16::angle#9 
Alias (signed word) atan2_16::y#5 = (signed word) atan2_16::y#6 
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 (void*) malloc::return#2 = (void*) malloc::return#5 
Alias (byte*) heap_head#3 = (byte*) heap_head#7 
Alias (void*) malloc::return#3 = (void*) malloc::return#6 
Alias (byte*) SCREEN_COPY#0 = (byte*) SCREEN_COPY#25 (byte*) SCREEN_COPY#23 (byte*) SCREEN_COPY#20 (byte*) SCREEN_COPY#14 (byte*) SCREEN_COPY#7 
Alias (byte*) heap_head#4 = (byte*) heap_head#8 
Alias (byte*) SCREEN_COPY#1 = (byte*) SCREEN_COPY#4 
Alias (byte*) SCREEN_DIST#1 = (byte*) SCREEN_DIST#17 
Alias (byte*) main::src#2 = (byte*) main::src#3 
Alias (byte*) main::dst#2 = (byte*) main::dst#3 
Alias (byte*) SCREEN_COPY#24 = (byte*) SCREEN_COPY#27 (byte*) SCREEN_COPY#26 
Alias (byte*) SCREEN_DIST#15 = (byte*) SCREEN_DIST#18 (byte*) SCREEN_DIST#16 
Alias (byte*) SCREEN_COPY#11 = (byte*) SCREEN_COPY#15 (byte*) SCREEN_COPY#21 (byte*) SCREEN_COPY#8 
Alias (byte*) SCREEN_DIST#11 = (byte*) SCREEN_DIST#14 (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#5 
Alias (void()*) setupRasterIrq::irqRoutine#0 = (void()*~) main::$2 
Alias (byte) getCharToProcess::return_x#0 = (byte) getCharToProcess::return_x#3 
Alias (byte) getCharToProcess::return_y#0 = (byte) getCharToProcess::return_y#3 
Alias (byte) getCharToProcess::return_dist#0 = (byte) getCharToProcess::return_dist#3 
Alias (byte*) SCREEN_COPY#12 = (byte*) SCREEN_COPY#16 (byte*) SCREEN_COPY#5 (byte*) SCREEN_COPY#9 
Alias (byte*) SCREEN_DIST#12 = (byte*) SCREEN_DIST#4 (byte*) SCREEN_DIST#9 (byte*) SCREEN_DIST#6 
Alias (byte) main::center_x#0 = (byte) main::$9_x (byte) main::center_x#1 
Alias (byte) main::center_y#0 = (byte) main::$9_y (byte) main::center_y#1 
Alias (byte) main::center_dist#0 = (byte) main::$9_dist (byte) main::center_dist#1 
Alias (byte*) getCharToProcess::dist_line#2 = (byte*) getCharToProcess::dist_line#4 (byte*) getCharToProcess::dist_line#7 
Alias (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#4 (byte) getCharToProcess::x#5 (byte) getCharToProcess::closest_x#1 
Alias (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#5 
Alias (byte) getCharToProcess::y#2 = (byte) getCharToProcess::y#4 (byte) getCharToProcess::y#6 (byte) getCharToProcess::closest_y#1 
Alias (byte*) getCharToProcess::screen_line#2 = (byte*) getCharToProcess::screen_line#6 (byte*) getCharToProcess::screen_line#7 
Alias (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#8 
Alias (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#8 
Alias (byte*) SCREEN_COPY#17 = (byte*) SCREEN_COPY#18 (byte*) SCREEN_COPY#19 
Alias (byte) getCharToProcess::dist#0 = (byte) getCharToProcess::dist#1 (byte) getCharToProcess::closest_dist#1 
Alias (byte*) getCharToProcess::screen_line#3 = (byte*) getCharToProcess::screen_line#5 
Alias (byte*) getCharToProcess::dist_line#3 = (byte*) getCharToProcess::dist_line#5 
Alias (byte) getCharToProcess::y#3 = (byte) getCharToProcess::y#5 
Alias (byte) getCharToProcess::closest_dist#3 = (byte) getCharToProcess::closest_dist#6 (byte) getCharToProcess::closest_dist#9 (byte) getCharToProcess::closest_dist#7 
Alias (byte) getCharToProcess::closest_x#3 = (byte) getCharToProcess::closest_x#5 (byte) getCharToProcess::closest_x#6 (byte) getCharToProcess::closest_x#4 
Alias (byte) getCharToProcess::closest_y#3 = (byte) getCharToProcess::closest_y#5 (byte) getCharToProcess::closest_y#6 (byte) getCharToProcess::closest_y#4 
Alias (byte*) SCREEN_COPY#10 = (byte*) SCREEN_COPY#13 (byte*) SCREEN_COPY#6 (byte*) SCREEN_COPY#3 
Alias (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#2 (byte) getCharToProcess::return_x#4 (byte) getCharToProcess::return_x#2 
Alias (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#2 (byte) getCharToProcess::return_y#4 (byte) getCharToProcess::return_y#2 
Alias (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::closest_dist#4 (byte) getCharToProcess::return_dist#4 (byte) getCharToProcess::return_dist#2 
Alias (byte) startProcessing::i#2 = (byte) startProcessing::i#3 (byte) startProcessing::i#4 (byte) startProcessing::freeIdx#1 
Alias (byte) startProcessing::freeIdx#4 = (byte) startProcessing::freeIdx#5 
Alias (byte) startProcessing::center_y#5 = (byte) startProcessing::center_y#7 (byte) startProcessing::center_y#6 
Alias (byte) startProcessing::center_x#5 = (byte) startProcessing::center_x#7 (byte) startProcessing::center_x#6 
Alias (byte) startProcessing::freeIdx#2 = (byte) startProcessing::freeIdx#3 (byte) startProcessing::spriteIdx#0 
Alias (byte) startProcessing::center_y#1 = (byte) startProcessing::center_y#3 
Alias (byte) startProcessing::center_x#1 = (byte) startProcessing::center_x#3 
Alias (word) startProcessing::offset#0 = (word~) startProcessing::$2 
Alias (byte*) startProcessing::colPtr#0 = (byte*~) startProcessing::$3 
Alias (byte*) startProcessing::screenPtr#0 = (byte*~) startProcessing::$4 
Alias (byte*) startProcessing::spriteData#0 = (byte*~) startProcessing::$7 
Alias (byte*) startProcessing::chargenData#0 = (byte*~) startProcessing::$10 
Alias (byte) startProcessing::center_x#2 = (byte) startProcessing::center_x#4 
Alias (byte) startProcessing::center_y#2 = (byte) startProcessing::center_y#4 
Alias (byte) startProcessing::spriteIdx#1 = (byte) startProcessing::spriteIdx#2 
Alias (byte) startProcessing::spriteCol#1 = (byte) startProcessing::spriteCol#2 
Alias (byte*) startProcessing::screenPtr#1 = (byte*) startProcessing::screenPtr#2 
Alias (word) startProcessing::spriteX#0 = (word~) startProcessing::$14 
Alias (word) startProcessing::spriteY#0 = (word~) startProcessing::$18 
Alias (byte) startProcessing::spritePtr#0 = (byte~) startProcessing::$21 
Alias (byte*) SCREEN_DIST#0 = (byte*) SCREEN_DIST#13 (byte*) SCREEN_DIST#10 (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#3 
Alias (word) XPOS_LEFTMOST#0 = (word~) $4 
Alias (word) BORDER_XPOS_RIGHT#0 = (word~) $5 
Alias (word) XPOS_RIGHTMOST#0 = (word~) $6 
Alias (word) YPOS_TOPMOST#0 = (word~) $9 
Alias (word) YPOS_BOTTOMMOST#0 = (word~) $11 
Alias (struct ProcessingSprite*) processChars::processing#0 = (struct ProcessingSprite*~) processChars::$2 (struct ProcessingSprite*) processChars::processing#1 (struct ProcessingSprite*) processChars::processing#3 
Alias (byte) processChars::bitmask#0 = (byte~) processChars::$3 (byte) processChars::bitmask#5 (byte) processChars::bitmask#1 
Alias (byte) processChars::i#11 = (byte) processChars::i#2 (byte) processChars::i#12 
Alias (byte) processChars::numActive#13 = (byte) processChars::numActive#9 (byte) processChars::numActive#14 
Alias (word) processChars::xpos#0 = (word~) processChars::$10 (word) processChars::xpos#3 (word) processChars::xpos#4 
Alias (byte) processChars::bitmask#2 = (byte) processChars::bitmask#6 (byte) processChars::bitmask#3 
Alias (byte) processChars::i#6 = (byte) processChars::i#8 (byte) processChars::i#7 
Alias (struct ProcessingSprite*) processChars::processing#2 = (struct ProcessingSprite*) processChars::processing#7 (struct ProcessingSprite*) processChars::processing#8 
Alias (byte) processChars::numActive#10 = (byte) processChars::numActive#12 (byte) processChars::numActive#11 
Alias (byte) processChars::ypos#0 = (byte~) processChars::$16 (byte) processChars::ypos#1 
Alias (struct ProcessingSprite*) processChars::processing#4 = (struct ProcessingSprite*) processChars::processing#5 (struct ProcessingSprite*) processChars::processing#6 
Alias (byte) processChars::bitmask#4 = (byte) processChars::bitmask#7 
Alias (byte) processChars::numActive#4 = (byte) processChars::numActive#5 (byte) processChars::numActive#7 
Alias (byte) processChars::i#10 = (byte) processChars::i#4 (byte) processChars::i#9 
Alias (word) processChars::xpos#1 = (word) processChars::xpos#2 
Alias (byte) processChars::xchar#0 = (byte~) processChars::$28 
Alias (byte) processChars::ychar#0 = (byte~) processChars::$32 
Alias (byte) processChars::numActive#3 = (byte) processChars::numActive#6 (byte) processChars::numActive#8 
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 (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#3 (byte) init_angle_screen::x#4 
Alias (byte) init_angle_screen::y#2 = (byte) init_angle_screen::y#4 (byte) init_angle_screen::y#6 (byte) init_angle_screen::y#3 
Alias (byte*) init_angle_screen::screen_bottomline#2 = (byte*) init_angle_screen::screen_bottomline#4 (byte*) init_angle_screen::screen_bottomline#5 (byte*) init_angle_screen::screen_bottomline#3 
Alias (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#3 (byte) init_angle_screen::xb#4 
Alias (byte*) init_angle_screen::screen_topline#2 = (byte*) init_angle_screen::screen_topline#4 (byte*) init_angle_screen::screen_topline#5 (byte*) init_angle_screen::screen_topline#3 
Alias (word~) init_angle_screen::$5 = (word~) init_angle_screen::$17 
Alias (signed word) init_angle_screen::xw#0 = (signed word~) init_angle_screen::$6 
Alias (word~) init_angle_screen::$8 = (word~) init_angle_screen::$18 
Alias (signed word) init_angle_screen::yw#0 = (signed word~) init_angle_screen::$9 
Alias (word) atan2_16::return#2 = (word) atan2_16::return#4 
Alias (word) init_angle_screen::angle_w#0 = (word~) init_angle_screen::$10 
Alias (byte) init_angle_screen::ang_w#0 = (byte~) init_angle_screen::$12 
Alias (byte*) initSprites::sp#2 = (byte*) initSprites::sp#3 
Alias (word) setupRasterIrq::raster#1 = (word) setupRasterIrq::raster#3 (word) setupRasterIrq::raster#4 
Alias (void()*) setupRasterIrq::irqRoutine#2 = (void()*) setupRasterIrq::irqRoutine#4 (void()*) setupRasterIrq::irqRoutine#3 
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2
Alias candidate removed (solo) (byte) getCharToProcess::x#3 = 
Alias candidate removed (solo) (byte) getCharToProcess::y#3 = 
Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#5 (signed word) atan2_16::x#10 
Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#12 (signed word) atan2_16::y#9 
Alias (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#9 
Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#5 
Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#4 
Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#3 (byte) atan2_16::i#5 
Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#16 
Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) atan2_16::x#8 
Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 
Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 
Alias (byte*) getCharToProcess::screen_line#2 = (byte*) getCharToProcess::screen_line#3 
Alias (byte*) getCharToProcess::dist_line#2 = (byte*) getCharToProcess::dist_line#3 
Alias (byte*) SCREEN_COPY#10 = (byte*) SCREEN_COPY#17 
Alias (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#3 
Alias (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#3 
Alias (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::closest_dist#3 
Alias (byte) startProcessing::center_y#1 = (byte) startProcessing::center_y#5 
Alias (byte) startProcessing::center_x#1 = (byte) startProcessing::center_x#5 
Alias (struct ProcessingSprite*) processChars::processing#0 = (struct ProcessingSprite*) processChars::processing#2 (struct ProcessingSprite*) processChars::processing#4 
Alias (byte) processChars::bitmask#0 = (byte) processChars::bitmask#2 (byte) processChars::bitmask#4 
Alias (byte) processChars::i#10 = (byte) processChars::i#6 (byte) processChars::i#11 (byte) processChars::i#5 
Alias (byte) processChars::numActive#10 = (byte) processChars::numActive#13 (byte) processChars::numActive#4 (byte) processChars::numActive#2 
Alias (word) processChars::xpos#0 = (word) processChars::xpos#1 
Alias (word) setupRasterIrq::raster#1 = (word) setupRasterIrq::raster#2 
Alias (void()*) setupRasterIrq::irqRoutine#1 = (void()*) setupRasterIrq::irqRoutine#2 
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2
Alias candidate removed (solo) (byte) getCharToProcess::x#3 = 
Alias candidate removed (solo) (byte) getCharToProcess::y#3 = 
Alias (byte) processChars::i#10 = (byte) processChars::i#3 
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2
Alias candidate removed (solo) (byte) getCharToProcess::x#3 = 
Alias candidate removed (solo) (byte) getCharToProcess::y#3 = 
Identical Phi Values (signed word) atan2_16::y#1 (signed word) atan2_16::y#0
Identical Phi Values (signed word) atan2_16::x#1 (signed word) atan2_16::x#0
Identical Phi Values (signed word) atan2_16::yi#10 (signed word) atan2_16::yi#3
Identical Phi Values (signed word) atan2_16::xi#10 (signed word) atan2_16::xi#3
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#3 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#4 (byte*) heap_head#1
Identical Phi Values (byte*) SCREEN_DIST#1 (byte*) SCREEN_DIST#0
Identical Phi Values (byte*) SCREEN_COPY#1 (byte*) SCREEN_COPY#0
Identical Phi Values (byte*) SCREEN_COPY#24 (byte*) SCREEN_COPY#1
Identical Phi Values (byte*) SCREEN_DIST#15 (byte*) SCREEN_DIST#1
Identical Phi Values (byte*) SCREEN_COPY#11 (byte*) SCREEN_COPY#24
Identical Phi Values (byte*) SCREEN_DIST#11 (byte*) SCREEN_DIST#15
Identical Phi Values (byte*) SCREEN_COPY#12 (byte*) SCREEN_COPY#11
Identical Phi Values (byte*) SCREEN_DIST#12 (byte*) SCREEN_DIST#11
Identical Phi Values (byte*) SCREEN_COPY#2 (byte*) SCREEN_COPY#12
Identical Phi Values (byte*) SCREEN_DIST#2 (byte*) SCREEN_DIST#12
Identical Phi Values (byte*) getCharToProcess::screen_line#2 (byte*) getCharToProcess::screen_line#4
Identical Phi Values (byte*) getCharToProcess::dist_line#2 (byte*) getCharToProcess::dist_line#6
Identical Phi Values (byte*) SCREEN_COPY#10 (byte*) SCREEN_COPY#22
Identical Phi Values (byte) getCharToProcess::x#3 (byte) getCharToProcess::x#2
Identical Phi Values (byte) getCharToProcess::y#3 (byte) getCharToProcess::y#2
Identical Phi Values (byte) startProcessing::center_y#9 (byte) startProcessing::center_y#0
Identical Phi Values (byte) startProcessing::center_x#9 (byte) startProcessing::center_x#0
Identical Phi Values (byte) startProcessing::freeIdx#4 (byte) startProcessing::freeIdx#6
Identical Phi Values (byte) startProcessing::center_y#1 (byte) startProcessing::center_y#8
Identical Phi Values (byte) startProcessing::center_x#1 (byte) startProcessing::center_x#8
Identical Phi Values (byte) startProcessing::center_x#2 (byte) startProcessing::center_x#1
Identical Phi Values (byte) startProcessing::center_y#2 (byte) startProcessing::center_y#1
Identical Phi Values (byte) startProcessing::spriteIdx#1 (byte) startProcessing::freeIdx#2
Identical Phi Values (byte) startProcessing::spriteCol#1 (byte) startProcessing::spriteCol#0
Identical Phi Values (byte*) startProcessing::screenPtr#1 (byte*) startProcessing::screenPtr#0
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#5
Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#6
Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#6
Identical Phi Values (word) setupRasterIrq::raster#1 (word) setupRasterIrq::raster#0
Identical Phi Values (void()*) setupRasterIrq::irqRoutine#1 (void()*) setupRasterIrq::irqRoutine#0
Successful SSA optimization Pass2IdenticalPhiElimination
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 (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*) SCREEN_COPY#22 (byte*) SCREEN_COPY#0
Identical Phi Values (byte) getCharToProcess::y#2 (byte) getCharToProcess::y#7
Identical Phi Values (byte) startProcessing::center_y#8 (byte) startProcessing::center_y#0
Identical Phi Values (byte) startProcessing::center_x#8 (byte) startProcessing::center_x#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [442] (byte~) processChars::$17 ← (byte) processChars::i#10 * (byte) 2
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) atan2_16::$0 [16] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
Simple Condition (bool~) atan2_16::$5 [25] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
Simple Condition (bool~) atan2_16::$18 [39] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16
Simple Condition (bool~) atan2_16::$11 [48] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
Simple Condition (bool~) atan2_16::$19 [51] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19
Simple Condition (bool~) atan2_16::$20 [59] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25
Simple Condition (bool~) atan2_16::$21 [62] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26
Simple Condition (bool~) atan2_16::$22 [79] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15
Simple Condition (bool~) atan2_16::$14 [83] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
Simple Condition (bool~) main::$6 [161] if((byte*) main::src#2!=(byte*~) main::$5) goto main::@2
Simple Condition (bool~) main::$8 [191] if((byte) main::i#1!=rangelast(0,main::$7)) goto main::@7
Simple Condition (bool~) main::$11 [214] if((byte) main::center_dist#0!=(byte) NOT_FOUND#0) goto main::@10
Simple Condition (bool~) getCharToProcess::$3 [240] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@5
Simple Condition (bool~) getCharToProcess::$6 [244] if((byte) getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4
Simple Condition (bool~) getCharToProcess::$5 [249] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@5
Simple Condition (bool~) getCharToProcess::$7 [259] if((byte) getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3
Simple Condition (bool~) getCharToProcess::$1 [263] if((byte) getCharToProcess::return_dist#1==(byte) NOT_FOUND#0) goto getCharToProcess::@1
Simple Condition (bool~) startProcessing::$26 [291] if(*((byte*) startProcessing::$41 + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3
Simple Condition (bool~) startProcessing::$27 [295] if((byte) startProcessing::i#1!=rangelast(0,startProcessing::$24)) goto startProcessing::@2
Simple Condition (bool~) startProcessing::$28 [300] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@1
Simple Condition (bool~) startProcessing::$29 [330] if((byte) startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9
Simple Condition (bool~) processChars::$5 [398] if(*((byte*) processChars::$41)==(const byte) STATUS_FREE) goto processChars::@3
Simple Condition (bool~) processChars::$34 [402] if((byte) processChars::i#1!=rangelast(0,processChars::$1)) goto processChars::@2
Simple Condition (bool~) processChars::$7 [407] if(*((byte*) processChars::$42)!=(const byte) STATUS_NEW) goto processChars::@4
Simple Condition (bool~) processChars::$66 [414] if((byte) 0!=(byte~) processChars::$11) goto processChars::@5
Simple Condition (bool~) init_angle_screen::$2 [509] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Simple Condition (bool~) init_angle_screen::$16 [546] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Simple Condition (bool~) initSprites::$2 [553] if((byte*) initSprites::sp#2<(byte*~) initSprites::$1) goto initSprites::@2
Simple Condition (bool~) initSprites::$3 [562] if((byte) initSprites::i#1!=rangelast(0,7)) goto initSprites::@7
Simple Condition (bool~) setupRasterIrq::$0 [573] if((word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1
Simple Condition (bool~) irqTop::$2 [597] if((byte) irqTop::i#1!=rangelast(0,4)) goto irqTop::@3
Simple Condition (bool~) irqTop::$3 [604] if((byte) irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5
Simple Condition (bool~) irqBottom::$4 [619] if((byte) irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting || if()-condition to two if()s [454] (bool~) processChars::$24 ← (bool~) processChars::$22 || (bool~) processChars::$23
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [451] (bool~) processChars::$22 ← (bool~) processChars::$20 || (bool~) processChars::$21
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [448] (bool~) processChars::$20 ← (bool~) processChars::$18 || (bool~) processChars::$19
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting ! if()-condition to reversed if() [491] (bool~) processChars::$0 ← ! (bool) DEBUG#0
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting ! if()-condition to reversed if() [587] (bool~) irqTop::$0 ← ! (bool) DEBUG#0
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting ! if()-condition to reversed if() [610] (bool~) irqBottom::$0 ← ! (bool) DEBUG#0
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting ! if()-condition to reversed if() [613] (bool~) irqBottom::$2 ← ! (bool) DEBUG#0
Successful SSA optimization Pass2ConditionalAndOrRewriting
Negating conditional jump and destination [79] if((byte) atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17
Constant right-side identified [195] (void()*) setupRasterIrq::irqRoutine#0 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
Constant right-side identified [590] (void()*~) irqTop::$1 ← & interrupt(HARDWARE_ALL)(void()) irqBottom()
Constant right-side identified [623] (void()*~) irqBottom::$3 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) HEAP_TOP#0 = (byte*) 40960
Constant (const byte) CORDIC_ITERATIONS_16#0 = $f
Constant (const 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
 }}
Constant (const word) atan2_16::angle#0 = 0
Constant (const byte) atan2_16::i#0 = 0
Constant (const byte*) PROCPORT_DDR#0 = (byte*) 0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = (byte*) 1
Constant (const byte) PROCPORT_RAM_IO#0 = 5
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 1
Constant (const byte*) CHARGEN#0 = (byte*) 53248
Constant (const byte) BORDER_XPOS_LEFT#0 = $18
Constant (const word) BORDER_XPOS_RIGHT#0 = $158
Constant (const byte) BORDER_YPOS_TOP#0 = $32
Constant (const byte) BORDER_YPOS_BOTTOM#0 = $fa
Constant (const word) SPRITE_PTRS#0 = $3f8
Constant (const byte*) SPRITES_XPOS#0 = (byte*) 53248
Constant (const byte*) SPRITES_YPOS#0 = (byte*) 53249
Constant (const byte*) SPRITES_XMSB#0 = (byte*) 53264
Constant (const byte*) RASTER#0 = (byte*) 53266
Constant (const byte*) SPRITES_ENABLE#0 = (byte*) 53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = (byte*) 53271
Constant (const byte*) SPRITES_MC#0 = (byte*) 53276
Constant (const byte*) SPRITES_EXPAND_X#0 = (byte*) 53277
Constant (const byte*) BORDERCOL#0 = (byte*) 53280
Constant (const byte*) BGCOL#0 = (byte*) 53281
Constant (const byte*) SPRITES_COLS#0 = (byte*) 53287
Constant (const byte*) VIC_CONTROL#0 = (byte*) 53265
Constant (const byte*) IRQ_STATUS#0 = (byte*) 53273
Constant (const byte*) IRQ_ENABLE#0 = (byte*) 53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte*) COLS#0 = (byte*) 55296
Constant (const byte*) CIA1_INTERRUPT#0 = (byte*) 56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = $7f
Constant (const void()**) HARDWARE_IRQ#0 = (void()**) 65534
Constant (const byte) WHITE#0 = 1
Constant (const byte) BLUE#0 = 6
Constant (const byte) LIGHT_BLUE#0 = $e
Constant (const bool) DEBUG#0 = false
Constant (const byte*) SCREEN#0 = (byte*) 1024
Constant (const byte*) SPRITE_DATA#0 = (byte*) 8192
Constant (const word[$28]) VXSIN#0 = kickasm {{ .for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }
 }}
Constant (const word[$19]) VYSIN#0 = kickasm {{ .for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }
 }}
Constant (const word) malloc::size#0 = $3e8
Constant (const word) malloc::size#1 = $3e8
Constant (const byte) NUM_PROCESSING#0 = 8
Constant (const byte) NOT_FOUND#0 = $ff
Constant (const byte) main::i#0 = 0
Constant (const void()*) setupRasterIrq::irqRoutine#0 = &irqTop
Constant (const byte) getCharToProcess::closest_x#0 = 0
Constant (const byte) getCharToProcess::closest_y#0 = 0
Constant (const byte) getCharToProcess::y#0 = 0
Constant (const byte) getCharToProcess::x#0 = 0
Constant (const byte) startProcessing::freeIdx#0 = $ff
Constant (const byte) startProcessing::i#0 = 0
Constant (const byte) startProcessing::i1#0 = 0
Constant (const byte) processChars::numActive#0 = 0
Constant (const byte) processChars::i#0 = 0
Constant (const byte) init_angle_screen::y#0 = 0
Constant (const byte) init_angle_screen::x#0 = 0
Constant (const byte) init_angle_screen::xb#0 = $27
Constant (const byte) initSprites::i#0 = 0
Constant (const byte) RASTER_IRQ_TOP#0 = $30
Constant (const void()*) irqTop::$1 = &irqBottom
Constant (const byte) irqTop::i#0 = 0
Constant (const byte) irqTop::i1#0 = 0
Constant (const byte) RASTER_IRQ_MIDDLE#0 = $ff
Constant (const byte) irqBottom::i#0 = 0
Constant (const void()*) irqBottom::$3 = &irqTop
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) main::src#0 = SCREEN#0
Constant (const word) setupRasterIrq::raster#0 = RASTER_IRQ_TOP#0
Constant (const byte) getCharToProcess::closest_dist#0 = NOT_FOUND#0
Constant (const byte*) initSprites::sp#0 = SPRITE_DATA#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified { fill( NUM_PROCESSING#0, 0) } in [151] (struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 ← { fill( NUM_PROCESSING#0, 0) }
Constant value identified (word)BORDER_YPOS_BOTTOM#0 in [382] (word~) $10 ← (word)(const byte) BORDER_YPOS_BOTTOM#0
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [221] if(true) goto main::@9
if() condition always true - replacing block destination [226] if(true) goto main::@15
if() condition always false - eliminating [492] if((const bool) DEBUG#0) goto processChars::@16
if() condition always true - replacing block destination [573] if((const word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1
if() condition always false - eliminating [588] if((const bool) DEBUG#0) goto irqTop::@2
if() condition always false - eliminating [611] if((const bool) DEBUG#0) goto irqBottom::@3
if() condition always false - eliminating [614] if((const bool) DEBUG#0) goto irqBottom::@4
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [242] getCharToProcess::x#1 ← ++ getCharToProcess::x#2 to ++
Resolved ranged comparison value [244] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 to (number) $28
Resolved ranged next value [257] getCharToProcess::y#1 ← ++ getCharToProcess::y#7 to ++
Resolved ranged comparison value [259] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 to (number) $19
Resolved ranged next value [328] startProcessing::i1#1 ← ++ startProcessing::i1#2 to ++
Resolved ranged comparison value [330] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 to (number) 8
Resolved ranged next value [544] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [546] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
Resolved ranged next value [560] initSprites::i#1 ← ++ initSprites::i#2 to ++
Resolved ranged comparison value [562] if(initSprites::i#1!=rangelast(0,7)) goto initSprites::@7 to (number) 8
Resolved ranged next value [595] irqTop::i#1 ← ++ irqTop::i#2 to ++
Resolved ranged comparison value [597] if(irqTop::i#1!=rangelast(0,4)) goto irqTop::@3 to (number) 5
Resolved ranged next value [602] irqTop::i1#1 ← ++ irqTop::i1#2 to ++
Resolved ranged comparison value [604] if(irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5 to (number) 8
Resolved ranged next value [617] irqBottom::i#1 ← ++ irqBottom::i#2 to ++
Resolved ranged comparison value [619] if(irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5 to (number) 5
Rewriting conditional comparison [509] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Converting *(pointer+n) to pointer[n] [274] *((byte*~) getCharToProcess::$11) ← (byte) ' '  -- *(getCharToProcess::$10 + getCharToProcess::return_x#1)
Converting *(pointer+n) to pointer[n] [393] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*) processChars::$40)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Converting *(pointer+n) to pointer[n] [398] if(*((byte*) processChars::$41)==(const byte) STATUS_FREE) goto processChars::@3  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [407] if(*((byte*) processChars::$42)!=(const byte) STATUS_NEW) goto processChars::@4  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [410] (word) processChars::xpos#0 ← *((word*) processChars::$43) >> (byte) 4  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [417] *(*((byte**) processChars::$44)) ← (byte) ' '  -- *((byte**)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)
Converting *(pointer+n) to pointer[n] [421] *((const byte*) SPRITES_COLS#0 + *((byte*) processChars::$46)) ← *((byte*) processChars::$45)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_COL)
Converting *(pointer+n) to pointer[n] [421] *((const byte*) SPRITES_COLS#0 + *((byte*) processChars::$46)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Converting *(pointer+n) to pointer[n] [424] (byte*~) processChars::$9 ← (byte*~) processChars::$8 + *((byte*) processChars::$47)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Converting *(pointer+n) to pointer[n] [426] *((byte*~) processChars::$9) ← *((byte*) processChars::$48)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
Converting *(pointer+n) to pointer[n] [426] *((byte*~) processChars::$9) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)  -- *(processChars::$8 + *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID))
Converting *(pointer+n) to pointer[n] [428] *((byte*) processChars::$49) ← (const byte) STATUS_PROCESSING  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [439] (word~) processChars::$15 ← *((word*) processChars::$50) >> (byte) 4  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [445] (bool~) processChars::$18 ← *((word*) processChars::$51) < (word) XPOS_LEFTMOST#0  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [447] (bool~) processChars::$19 ← *((word*) processChars::$52) > (word) XPOS_RIGHTMOST#0  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [450] (bool~) processChars::$21 ← *((word*) processChars::$53) < (word) YPOS_TOPMOST#0  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [453] (bool~) processChars::$23 ← *((word*) processChars::$54) > (word) YPOS_BOTTOMMOST#0  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [458] *((byte*) processChars::$55) ← (const byte) STATUS_FREE  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [470] *((word*) processChars::$57) ← *((word*) processChars::$56) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [470] *((word*) processChars::$57) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [474] *((word*) processChars::$60) ← *((word*) processChars::$58) + *((word*) processChars::$59)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [474] *((word*) processChars::$60) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*) processChars::$59)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [474] *((word*) processChars::$60) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [483] *((word*) processChars::$62) ← *((word*) processChars::$61) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [483] *((word*) processChars::$62) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [487] *((word*) processChars::$65) ← *((word*) processChars::$63) + *((word*) processChars::$64)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [487] *((word*) processChars::$65) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*) processChars::$64)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [487] *((word*) processChars::$65) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Successful SSA optimization Pass2InlineDerefIdx
Simplifying expression containing zero (word*)PROCESSING#0 in [171] (word*) main::$17 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)PROCESSING#0 in [351] (word*) startProcessing::$32 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [409] (word*) processChars::$43 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [410] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) >> (byte) 4
Simplifying expression containing zero (word*)processChars::processing#0 in [444] (word*) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [445] (bool~) processChars::$18 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) < (word) XPOS_LEFTMOST#0
Simplifying expression containing zero (word*)processChars::processing#0 in [446] (word*) processChars::$52 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [447] (bool~) processChars::$19 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) > (word) XPOS_RIGHTMOST#0
Simplifying expression containing zero (word*)processChars::processing#0 in [471] (word*) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [473] (word*) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [474] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Simplifying expression containing zero (word*)processChars::processing#0 in [474] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (byte) startProcessing::center_dist#0 and assignment [97] (byte) startProcessing::center_dist#0 ← (byte) main::center_dist#0
Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#0 and assignment [119] (struct ProcessingChar) getCharToProcess::return#0 ← struct-unwound {(byte) getCharToProcess::return_x#1, (byte) getCharToProcess::return_y#1, (byte) getCharToProcess::return_dist#1}
Eliminating unused variable (byte*~) getCharToProcess::$11 and assignment [123] (byte*~) getCharToProcess::$11 ← (byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1
Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#1 and assignment [125] (struct ProcessingChar) getCharToProcess::return#1 ← struct-unwound {(byte) getCharToProcess::return_x#1, (byte) getCharToProcess::return_y#1, (byte) getCharToProcess::return_dist#1}
Eliminating unused variable (byte*) processChars::$40 and assignment [206] (byte*) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*) processChars::$41 and assignment [208] (byte*) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (byte*) processChars::$42 and assignment [213] (byte*) processChars::$42 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*) processChars::$43 and assignment [215] (word*) processChars::$43 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (byte**) processChars::$44 and assignment [219] (byte**) processChars::$44 ← (byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Eliminating unused variable (byte*) processChars::$45 and assignment [222] (byte*) processChars::$45 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Eliminating unused variable (byte*) processChars::$46 and assignment [223] (byte*) processChars::$46 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*) processChars::$47 and assignment [226] (byte*) processChars::$47 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*~) processChars::$9 and assignment [227] (byte*~) processChars::$9 ← (byte*~) processChars::$8 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Eliminating unused variable (byte*) processChars::$48 and assignment [228] (byte*) processChars::$48 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Eliminating unused variable (byte*) processChars::$49 and assignment [230] (byte*) processChars::$49 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*) processChars::$50 and assignment [238] (word*) processChars::$50 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*) processChars::$51 and assignment [243] (word*) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$52 and assignment [245] (word*) processChars::$52 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$53 and assignment [247] (word*) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*) processChars::$54 and assignment [249] (word*) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (byte*) processChars::$55 and assignment [252] (byte*) processChars::$55 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*) processChars::$56 and assignment [261] (word*) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*) processChars::$57 and assignment [262] (word*) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*) processChars::$58 and assignment [264] (word*) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$59 and assignment [265] (word*) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*) processChars::$60 and assignment [266] (word*) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$61 and assignment [273] (word*) processChars::$61 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*) processChars::$62 and assignment [274] (word*) processChars::$62 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*) processChars::$63 and assignment [276] (word*) processChars::$63 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*) processChars::$64 and assignment [277] (word*) processChars::$64 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*) processChars::$65 and assignment [278] (word*) processChars::$65 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused constant (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Eliminating unused constant (const bool) DEBUG#0
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte*~) processChars::$35 from unused block processChars::@16
Eliminating variable (byte~) processChars::$36 from unused block processChars::@16
Eliminating variable (byte) irqTop::i#2 from unused block irqTop::@3
Eliminating variable (byte) irqTop::i#1 from unused block irqTop::@3
Eliminating variable (byte) irqTop::i1#2 from unused block irqTop::@5
Eliminating variable (byte) irqTop::i1#1 from unused block irqTop::@5
Eliminating variable (byte) irqBottom::i#2 from unused block irqBottom::@5
Eliminating variable (byte) irqBottom::i#1 from unused block irqBottom::@5
Removing unused block main::@return
Removing unused block processChars::@16
Removing unused block setupRasterIrq::@3
Removing PHI-reference to removed block (irqTop::@2) in block irqTop::@3
Removing unused block irqTop::@2
Removing unused block irqTop::@3
Removing PHI-reference to removed block (irqTop::@4) in block irqTop::@5
Removing unused block irqTop::@4
Removing unused block irqTop::@5
Removing unused block irqTop::@6
Removing PHI-reference to removed block (irqBottom::@3) in block irqBottom::@5
Removing unused block irqBottom::@3
Removing unused block irqBottom::@5
Removing unused block irqBottom::@6
Removing unused block irqBottom::@4
Successful SSA optimization Pass2EliminateUnusedBlocks
Successful SSA optimization Pass2LoopHeadConstantIdentification
Adding number conversion cast (unumber) $28 in if((byte) getCharToProcess::x#1!=(number) $28) goto getCharToProcess::@4
Adding number conversion cast (unumber) $19 in if((byte) getCharToProcess::y#1!=(number) $19) goto getCharToProcess::@3
Adding number conversion cast (unumber) 8 in if((byte) startProcessing::i1#1!=(number) 8) goto startProcessing::@9
Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#2<(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) 1 in if((byte) init_angle_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) $d in if((byte) init_angle_screen::y#1!=(number) $d) goto init_angle_screen::@1
Adding number conversion cast (unumber) 8 in if((byte) initSprites::i#1!=(number) 8) goto initSprites::@7
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $28
Simplifying constant integer cast $19
Simplifying constant integer cast 8
Simplifying constant integer cast (byte~) processChars::$29
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (byte~) init_angle_screen::$4
Simplifying constant integer cast (byte~) init_angle_screen::$7
Simplifying constant integer cast $d
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Finalized unsigned number type (byte) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte~) processChars::$17 = (byte~) processChars::$13 
Alias (byte~) processChars::$30 = (byte~) processChars::$29 
Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 
Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 
Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 
Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0
Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) processChars::$18 [230] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(word) XPOS_LEFTMOST#0) goto processChars::@7
Simple Condition (bool~) processChars::$23 [321] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(word) YPOS_BOTTOMMOST#0) goto processChars::@7
Simple Condition (bool~) processChars::$21 [322] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(word) YPOS_TOPMOST#0) goto processChars::@7
Simple Condition (bool~) processChars::$19 [323] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(word) XPOS_RIGHTMOST#0) goto processChars::@7
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [11] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1
Constant right-side identified [57] (byte*~) main::$5 ← (const byte*) SCREEN#0 + (word) $3e8
Constant right-side identified [62] (byte~) main::$7 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [98] (byte*~) main::$4 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [100] (byte*~) main::$15 ← (const byte*) COLS#0 + (word) $3e7
Constant right-side identified [123] (byte~) startProcessing::$24 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [163] (byte*~) startProcessing::$19 ← (const byte*) SPRITE_DATA#0 / (byte) $40
Constant right-side identified [188] (byte~) $2 ← (const byte) BORDER_XPOS_LEFT#0 - (byte) 8
Constant right-side identified [191] (word) XPOS_RIGHTMOST#0 ← (const word) BORDER_XPOS_RIGHT#0 << (byte) 4
Constant right-side identified [192] (byte~) $7 ← (const byte) BORDER_YPOS_TOP#0 - (byte) 8
Constant right-side identified [197] (byte~) processChars::$1 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [213] (byte*~) processChars::$8 ← (const byte*) SCREEN#0 + (const word) SPRITE_PTRS#0
Constant right-side identified [236] (byte~) processChars::$27 ← (const byte) BORDER_XPOS_LEFT#0 / (byte) 8
Constant right-side identified [243] (byte~) processChars::$31 ← (const byte) BORDER_YPOS_TOP#0 / (byte) 8
Constant right-side identified [287] (byte~) initSprites::$0 ← (const byte) NUM_PROCESSING#0 * (byte) $40
Constant right-side identified [305] (byte~) setupRasterIrq::$1 ← < (const word) setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1
Constant (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 = { fill( NUM_PROCESSING#0, 0) }
Constant (const byte*) main::$5 = SCREEN#0+$3e8
Constant (const byte) main::$7 = NUM_PROCESSING#0-1
Constant (const byte*) main::$4 = SCREEN#0+$3e7
Constant (const byte*) main::$15 = COLS#0+$3e7
Constant (const byte) startProcessing::$24 = NUM_PROCESSING#0-1
Constant (const byte*) startProcessing::$19 = SPRITE_DATA#0/$40
Constant (const byte) $2 = BORDER_XPOS_LEFT#0-8
Constant (const word) XPOS_RIGHTMOST#0 = BORDER_XPOS_RIGHT#0<<4
Constant (const byte) $7 = BORDER_YPOS_TOP#0-8
Constant (const word) $10 = (word)BORDER_YPOS_BOTTOM#0
Constant (const byte) processChars::$1 = NUM_PROCESSING#0-1
Constant (const byte*) processChars::$8 = SCREEN#0+SPRITE_PTRS#0
Constant (const byte) processChars::$27 = BORDER_XPOS_LEFT#0/8
Constant (const byte) processChars::$31 = BORDER_YPOS_TOP#0/8
Constant (const byte) initSprites::$0 = NUM_PROCESSING#0*$40
Constant (const byte) setupRasterIrq::$1 = <setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (word*)PROCESSING#0 in [65] (word*) main::$17 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant value identified (word*)PROCESSING#0 in [67] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant value identified (word*)PROCESSING#0 in [69] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant value identified (word*)PROCESSING#0 in [71] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant value identified (byte*)PROCESSING#0 in [73] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant value identified (byte*)PROCESSING#0 in [75] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant value identified (byte*)PROCESSING#0 in [77] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant value identified (byte*)PROCESSING#0 in [79] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte**)PROCESSING#0 in [81] (byte**) main::$25 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant value identified (byte*)PROCESSING#0 in [126] (byte*) startProcessing::$41 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte)startProcessing::$19 in [164] (byte~) startProcessing::$20 ← (byte)(const byte*) startProcessing::$19
Constant value identified (word*)PROCESSING#0 in [169] (word*) startProcessing::$32 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant value identified (word*)PROCESSING#0 in [171] (word*) startProcessing::$33 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant value identified (word*)PROCESSING#0 in [173] (word*) startProcessing::$34 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant value identified (word*)PROCESSING#0 in [175] (word*) startProcessing::$35 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant value identified (byte*)PROCESSING#0 in [177] (byte*) startProcessing::$36 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant value identified (byte*)PROCESSING#0 in [179] (byte*) startProcessing::$37 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant value identified (byte*)PROCESSING#0 in [181] (byte*) startProcessing::$38 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant value identified (byte*)PROCESSING#0 in [183] (byte*) startProcessing::$39 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte**)PROCESSING#0 in [185] (byte**) startProcessing::$40 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant value identified (word)$2 in [189] (word~) $3 ← (word)(const byte) $2
Constant value identified (word)$7 in [193] (word~) $8 ← (word)(const byte) $7
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [325] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [36] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
Resolved ranged comparison value [37] 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 [83] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [84] if(main::i#1!=rangelast(0,main::$7)) goto main::@7 to (const byte) main::$7+(number) 1
Resolved ranged next value [128] startProcessing::i#1 ← ++ startProcessing::i#2 to ++
Resolved ranged comparison value [129] if(startProcessing::i#1!=rangelast(0,startProcessing::$24)) goto startProcessing::@2 to (const byte) startProcessing::$24+(number) 1
Resolved ranged next value [204] processChars::i#1 ← ++ processChars::i#10 to ++
Resolved ranged comparison value [205] if(processChars::i#1!=rangelast(0,processChars::$1)) goto processChars::@2 to (const byte) processChars::$1+(number) 1
Eliminating unused constant (const byte) irqTop::i#0
Eliminating unused constant (const byte) irqTop::i1#0
Eliminating unused constant (const byte) irqBottom::i#0
Eliminating unused constant (const byte*) BORDERCOL#0
Eliminating unused constant (const byte*) BGCOL#0
Eliminating unused constant (const byte) WHITE#0
Eliminating unused constant (const byte) BLUE#0
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization Pass2LoopHeadConstantIdentification
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
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) main::$7+1 in if((byte) main::i#1!=(const byte) main::$7+(number) 1) goto main::@7
Adding number conversion cast (unumber) 1 in if((byte) main::i#1!=(unumber)(const byte) main::$7+(number) 1) goto main::@7
Adding number conversion cast (unumber) startProcessing::$24+1 in if((byte) startProcessing::i#1!=(const byte) startProcessing::$24+(number) 1) goto startProcessing::@2
Adding number conversion cast (unumber) 1 in if((byte) startProcessing::i#1!=(unumber)(const byte) startProcessing::$24+(number) 1) goto startProcessing::@2
Adding number conversion cast (unumber) processChars::$1+1 in if((byte) processChars::i#1!=(const byte) processChars::$1+(number) 1) goto processChars::@2
Adding number conversion cast (unumber) 1 in if((byte) processChars::i#1!=(unumber)(const byte) processChars::$1+(number) 1) goto processChars::@2
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte) atan2_16::$16+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) main::$7+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) startProcessing::$24+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) processChars::$1+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte*) main::src#1 = (byte*) main::src#2 
Alias (byte*) main::dst#1 = (byte*) main::dst#2 
Alias (byte*) main::dst#0 = (byte*) main::dst#5 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) main::src#5 (const byte*) main::src#0
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [65] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant right-side identified [67] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant right-side identified [69] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant right-side identified [71] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant right-side identified [73] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant right-side identified [75] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant right-side identified [77] (byte*) main::$24 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [79] (byte**) main::$25 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant right-side identified [121] (byte*) startProcessing::$41 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [165] (word*) startProcessing::$33 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant right-side identified [167] (word*) startProcessing::$34 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant right-side identified [169] (word*) startProcessing::$35 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant right-side identified [171] (byte*) startProcessing::$36 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant right-side identified [173] (byte*) startProcessing::$37 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant right-side identified [175] (byte*) startProcessing::$38 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant right-side identified [177] (byte*) startProcessing::$39 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [179] (byte**) startProcessing::$40 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant right-side identified [186] (word) YPOS_BOTTOMMOST#0 ← (const word) $10 << (byte) 4
Constant right-side identified [264] (byte*~) initSprites::$1 ← (const byte*) SPRITE_DATA#0 + (const byte) initSprites::$0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word*) main::$17 = (word*)PROCESSING#0
Constant (const word*) main::$18 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant (const word*) main::$19 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant (const word*) main::$20 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant (const byte*) main::$21 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant (const byte*) main::$22 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant (const byte*) main::$23 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant (const byte*) main::$24 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte**) main::$25 = (byte**)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant (const byte*) startProcessing::$41 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte) startProcessing::$20 = (byte)startProcessing::$19
Constant (const word*) startProcessing::$32 = (word*)PROCESSING#0
Constant (const word*) startProcessing::$33 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant (const word*) startProcessing::$34 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant (const word*) startProcessing::$35 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant (const byte*) startProcessing::$36 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant (const byte*) startProcessing::$37 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant (const byte*) startProcessing::$38 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant (const byte*) startProcessing::$39 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte**) startProcessing::$40 = (byte**)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant (const word) $3 = (word)$2
Constant (const word) $8 = (word)$7
Constant (const word) YPOS_BOTTOMMOST#0 = $10<<4
Constant (const byte*) initSprites::$1 = SPRITE_DATA#0+initSprites::$0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [300] if((const byte*) main::src#0!=(const byte*) main::$5) goto main::@2
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization Pass2LoopHeadConstantIdentification
Alias (byte*) initSprites::sp#1 = (byte*) initSprites::sp#2 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) initSprites::sp#5 (const byte*) initSprites::sp#0
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [160] (word) XPOS_LEFTMOST#0 ← (const word) $3 << (byte) 4
Constant right-side identified [161] (word) YPOS_TOPMOST#0 ← (const word) $8 << (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) XPOS_LEFTMOST#0 = $3<<4
Constant (const word) YPOS_TOPMOST#0 = $8<<4
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [276] if((const byte*) initSprites::sp#0<(const byte*) initSprites::$1) goto initSprites::@2
Successful SSA optimization Pass2ConstantIfs
Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [44] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [48] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [46] (byte*) SCREEN_COPY#0 ← (byte*)(void*~) $0 keeping SCREEN_COPY#0
Inlining Noop Cast [50] (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $1 keeping SCREEN_DIST#0
Inlining Noop Cast [211] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$5 keeping init_angle_screen::xw#0
Inlining Noop Cast [214] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$8 keeping init_angle_screen::yw#0
Successful SSA optimization Pass2NopCastInlining
Rewriting division to use shift [14] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2
Rewriting multiplication to use shift [28] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [32] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift and addition[60] (byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[103] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (byte) $28
Rewriting multiplication to use shift and addition[109] (byte~) startProcessing::$30 ← (byte) startProcessing::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[116] (word~) startProcessing::$1 ← (word~) startProcessing::$0 * (byte) $28
Rewriting multiplication to use shift [122] (word~) startProcessing::$6 ← (word~) startProcessing::$5 * (byte) $40
Rewriting multiplication to use shift [126] (word~) startProcessing::$9 ← (word~) startProcessing::$8 * (byte) 8
Rewriting multiplication to use shift [139] (word~) startProcessing::$12 ← (word~) startProcessing::$11 * (byte) 8
Rewriting multiplication to use shift [143] (word~) startProcessing::$16 ← (word~) startProcessing::$15 * (byte) 8
Rewriting multiplication to use shift [147] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 * (byte) 8
Rewriting multiplication to use shift and addition[149] (byte~) startProcessing::$31 ← (byte) startProcessing::freeIdx#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[161] (byte~) processChars::$37 ← (byte) processChars::i#10 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift [180] (byte~) processChars::$17 ← (byte) processChars::i#10 * (byte) 2
Rewriting division to use shift [190] (word~) processChars::$25 ← (word) processChars::xpos#0 / (byte) 8
Rewriting multiplication to use shift [193] (byte~) processChars::$38 ← (byte) processChars::xchar#0 * (const byte) SIZEOF_WORD
Rewriting division to use shift [196] (byte~) processChars::$30 ← (byte) processChars::ypos#0 / (byte) 8
Rewriting multiplication to use shift [198] (byte~) processChars::$39 ← (byte) processChars::ychar#0 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [208] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2
Rewriting multiplication to use shift [212] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) malloc::size#0
Inlining constant with var siblings (const word) malloc::size#1
Inlining constant with var siblings (const word) atan2_16::angle#0
Inlining constant with var siblings (const byte) atan2_16::i#0
Inlining constant with var siblings (const byte) main::i#0
Inlining constant with var siblings (const byte*) main::src#0
Inlining constant with var siblings (const byte) getCharToProcess::closest_x#0
Inlining constant with var siblings (const byte) getCharToProcess::closest_y#0
Inlining constant with var siblings (const byte) getCharToProcess::y#0
Inlining constant with var siblings (const byte) getCharToProcess::x#0
Inlining constant with var siblings (const byte) getCharToProcess::closest_dist#0
Inlining constant with var siblings (const byte) startProcessing::freeIdx#0
Inlining constant with var siblings (const byte) startProcessing::i#0
Inlining constant with var siblings (const byte) startProcessing::i1#0
Inlining constant with var siblings (const byte) processChars::numActive#0
Inlining constant with var siblings (const byte) processChars::i#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) initSprites::i#0
Inlining constant with var siblings (const byte*) initSprites::sp#0
Constant inlined processChars::$31 = (const byte) BORDER_YPOS_TOP#0/(byte) 8
Constant inlined startProcessing::$19 = (const byte*) SPRITE_DATA#0/(byte) $40
Constant inlined init_angle_screen::y#0 = (byte) 0
Constant inlined main::src#0 = (const byte*) SCREEN#0
Constant inlined main::$15 = (const byte*) COLS#0+(word) $3e7
Constant inlined atan2_16::angle#0 = (byte) 0
Constant inlined $2 = (const byte) BORDER_XPOS_LEFT#0-(byte) 8
Constant inlined $3 = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8
Constant inlined getCharToProcess::y#0 = (byte) 0
Constant inlined setupRasterIrq::raster#0 = (const byte) RASTER_IRQ_TOP#0
Constant inlined $7 = (const byte) BORDER_YPOS_TOP#0-(byte) 8
Constant inlined $8 = (word)(const byte) BORDER_YPOS_TOP#0-(byte) 8
Constant inlined main::$17 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant inlined main::$18 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant inlined main::$19 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant inlined processChars::numActive#0 = (byte) 0
Constant inlined getCharToProcess::closest_x#0 = (byte) 0
Constant inlined atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1
Constant inlined ProcessingSprite::$0::STATUS_FREE = (byte) 0
Constant inlined startProcessing::$24 = (const byte) NUM_PROCESSING#0-(byte) 1
Constant inlined startProcessing::i1#0 = (byte) 0
Constant inlined irqTop::$1 = &interrupt(HARDWARE_ALL)(void()) irqBottom()
Constant inlined init_angle_screen::xb#0 = (byte) $27
Constant inlined initSprites::$0 = (const byte) NUM_PROCESSING#0*(byte) $40
Constant inlined initSprites::$1 = (const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40
Constant inlined ProcessingSprite::$0::STATUS_NEW = (byte) 1
Constant inlined processChars::i#0 = (byte) 0
Constant inlined startProcessing::$20 = (byte)(const byte*) SPRITE_DATA#0/(byte) $40
Constant inlined getCharToProcess::closest_dist#0 = (const byte) NOT_FOUND#0
Constant inlined processChars::$1 = (const byte) NUM_PROCESSING#0-(byte) 1
Constant inlined initSprites::i#0 = (byte) 0
Constant inlined startProcessing::$35 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant inlined startProcessing::$34 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant inlined startProcessing::$37 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant inlined startProcessing::$36 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant inlined $10 = (word)(const byte) BORDER_YPOS_BOTTOM#0
Constant inlined startProcessing::$39 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined startProcessing::freeIdx#0 = (byte) $ff
Constant inlined startProcessing::$38 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant inlined irqBottom::$3 = &interrupt(HARDWARE_ALL)(void()) irqTop()
Constant inlined processChars::$8 = (const byte*) SCREEN#0+(const word) SPRITE_PTRS#0
Constant inlined init_angle_screen::x#0 = (byte) 0
Constant inlined getCharToProcess::x#0 = (byte) 0
Constant inlined initSprites::sp#0 = (const byte*) SPRITE_DATA#0
Constant inlined getCharToProcess::closest_y#0 = (byte) 0
Constant inlined main::i#0 = (byte) 0
Constant inlined startProcessing::$33 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant inlined startProcessing::$32 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant inlined main::$23 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Constant inlined atan2_16::i#0 = (byte) 0
Constant inlined main::$24 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined main::$25 = (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant inlined processChars::$27 = (const byte) BORDER_XPOS_LEFT#0/(byte) 8
Constant inlined malloc::size#1 = (word) $3e8
Constant inlined main::$20 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant inlined malloc::size#0 = (word) $3e8
Constant inlined main::$21 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant inlined main::$22 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant inlined setupRasterIrq::$1 = <(const byte) RASTER_IRQ_TOP#0
Constant inlined startProcessing::i#0 = (byte) 0
Constant inlined ProcessingSprite::$0::STATUS_PROCESSING = (byte) 2
Constant inlined main::$5 = (const byte*) SCREEN#0+(word) $3e8
Constant inlined startProcessing::$40 = (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant inlined main::$4 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined startProcessing::$41 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined main::$7 = (const byte) NUM_PROCESSING#0-(byte) 1
Successful SSA optimization Pass2ConstantInlining
Alias (byte~) main::$16 = (byte) main::$30 
Alias (word~) getCharToProcess::$9 = (word) getCharToProcess::$14 
Alias (byte~) startProcessing::$30 = (byte) startProcessing::$46 
Alias (word~) startProcessing::$1 = (word) startProcessing::$49 
Alias (byte~) startProcessing::$31 = (byte) startProcessing::$54 
Alias (byte~) processChars::$37 = (byte) processChars::$71 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (word) malloc::size#2 (word) $3e8
Successful SSA optimization Pass2IdenticalPhiElimination
Eliminating unused constant (const byte) SIZEOF_WORD
Eliminating unused constant (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Successful SSA optimization PassNEliminateUnusedVars
Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15)
Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17)
Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2_16::@17)
Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25)
Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7)
Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8)
Added new block during phi lifting main::@22(between main::@1 and main::@2)
Added new block during phi lifting main::@23(between main::@7 and main::@7)
Added new block during phi lifting getCharToProcess::@12(between getCharToProcess::@9 and getCharToProcess::@3)
Added new block during phi lifting getCharToProcess::@13(between getCharToProcess::@5 and getCharToProcess::@4)
Added new block during phi lifting getCharToProcess::@14(between getCharToProcess::@4 and getCharToProcess::@5)
Added new block during phi lifting getCharToProcess::@15(between getCharToProcess::@7 and getCharToProcess::@5)
Added new block during phi lifting startProcessing::@11(between startProcessing::@4 and startProcessing::@1)
Added new block during phi lifting startProcessing::@12(between startProcessing::@3 and startProcessing::@2)
Added new block during phi lifting startProcessing::@13(between startProcessing::@3 and startProcessing::@4)
Added new block during phi lifting startProcessing::@14(between startProcessing::@9 and startProcessing::@9)
Added new block during phi lifting processChars::@20(between processChars::@3 and processChars::@2)
Added new block during phi lifting processChars::@21(between processChars::@2 and processChars::@3)
Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1)
Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3)
Added new block during phi lifting initSprites::@9(between initSprites::@1 and initSprites::@2)
Added new block during phi lifting initSprites::@10(between initSprites::@7 and initSprites::@7)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @4
Adding NOP phi() at start of @15
Adding NOP phi() at start of @22
Adding NOP phi() at start of @26
Adding NOP phi() at start of @29
Adding NOP phi() at start of @34
Adding NOP phi() at start of @35
Adding NOP phi() at start of @36
Adding NOP phi() at start of @39
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@18
Adding NOP phi() at start of main::@19
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@21
Adding NOP phi() at start of startProcessing
Adding NOP phi() at start of getCharToProcess::@1
Adding NOP phi() at start of initSprites
Adding NOP phi() at start of initSprites::@1_1
Adding NOP phi() at start of initSprites::@3
Adding NOP phi() at start of init_angle_screen::@2_1
Adding NOP phi() at start of irqBottom
Adding NOP phi() at start of irqBottom::@1
Adding NOP phi() at start of irqBottom::@7
Adding NOP phi() at start of processChars
Adding NOP phi() at start of processChars::@15
Adding NOP phi() at start of irqTop
CALL GRAPH
Calls in [] to malloc:5 malloc:8 main:14 
Calls in [main] to init_angle_screen:18 initSprites:45 setupRasterIrq:47 getCharToProcess:50 startProcessing:62 
Calls in [init_angle_screen] to atan2_16:228 
Calls in [irqBottom] to processChars:329 

Created 50 initial phi equivalence classes
Coalesced [7] heap_head#12 ← heap_head#1
Coalesced [20] main::dst#7 ← main::dst#0
Coalesced [64] main::i#3 ← main::i#1
Coalesced [65] main::src#6 ← main::src#1
Coalesced [66] main::dst#6 ← main::dst#1
Coalesced [76] startProcessing::freeIdx#9 ← startProcessing::i#2
Coalesced [96] startProcessing::chargenData#3 ← startProcessing::chargenData#0
Coalesced [97] startProcessing::spriteData#3 ← startProcessing::spriteData#0
Coalesced [132] startProcessing::chargenData#4 ← startProcessing::chargenData#1
Coalesced [133] startProcessing::spriteData#4 ← startProcessing::spriteData#1
Coalesced [134] startProcessing::i1#3 ← startProcessing::i1#1
Not coalescing [135] startProcessing::freeIdx#7 ← startProcessing::freeIdx#2
Not coalescing [138] startProcessing::freeIdx#8 ← startProcessing::freeIdx#6
Coalesced [139] startProcessing::i#5 ← startProcessing::i#1
Coalesced [142] getCharToProcess::screen_line#8 ← getCharToProcess::screen_line#0
Coalesced [143] getCharToProcess::dist_line#8 ← getCharToProcess::dist_line#0
Coalesced [145] getCharToProcess::closest_dist#11 ← getCharToProcess::closest_dist#8
Coalesced [146] getCharToProcess::closest_x#11 ← getCharToProcess::closest_x#9
Coalesced [147] getCharToProcess::closest_y#11 ← getCharToProcess::closest_y#9
Coalesced [152] getCharToProcess::return_dist#7 ← getCharToProcess::dist#0
Not coalescing [153] getCharToProcess::return_x#7 ← getCharToProcess::x#2
Not coalescing [154] getCharToProcess::return_y#7 ← getCharToProcess::y#7
Coalesced [171] getCharToProcess::screen_line#9 ← getCharToProcess::screen_line#1
Coalesced [172] getCharToProcess::dist_line#9 ← getCharToProcess::dist_line#1
Not coalescing [173] getCharToProcess::closest_dist#10 ← getCharToProcess::return_dist#1
Coalesced [174] getCharToProcess::y#8 ← getCharToProcess::y#1
Coalesced [175] getCharToProcess::closest_x#10 ← getCharToProcess::return_x#1
Coalesced [176] getCharToProcess::closest_y#10 ← getCharToProcess::return_y#1
Coalesced [177] getCharToProcess::x#6 ← getCharToProcess::x#1
Not coalescing [178] getCharToProcess::closest_dist#12 ← getCharToProcess::return_dist#1
Coalesced (already) [179] getCharToProcess::closest_x#12 ← getCharToProcess::return_x#1
Coalesced (already) [180] getCharToProcess::closest_y#12 ← getCharToProcess::return_y#1
Not coalescing [181] getCharToProcess::return_dist#6 ← getCharToProcess::closest_dist#2
Coalesced (already) [182] getCharToProcess::return_x#6 ← getCharToProcess::closest_x#7
Coalesced (already) [183] getCharToProcess::return_y#6 ← getCharToProcess::closest_y#7
Not coalescing [184] getCharToProcess::return_dist#5 ← getCharToProcess::closest_dist#2
Coalesced (already) [185] getCharToProcess::return_x#5 ← getCharToProcess::closest_x#7
Coalesced (already) [186] getCharToProcess::return_y#5 ← getCharToProcess::closest_y#7
Coalesced [212] initSprites::i#3 ← initSprites::i#1
Coalesced [213] initSprites::sp#6 ← initSprites::sp#1
Coalesced [216] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0
Coalesced [217] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0
Coalesced [248] init_angle_screen::y#7 ← init_angle_screen::y#1
Coalesced [249] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1
Coalesced [250] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1
Coalesced [251] init_angle_screen::x#8 ← init_angle_screen::x#1
Coalesced [252] init_angle_screen::xb#8 ← init_angle_screen::xb#1
Coalesced [255] atan2_16::yi#17 ← atan2_16::$2
Coalesced [259] atan2_16::xi#14 ← atan2_16::$7
Coalesced [261] atan2_16::yi#19 ← atan2_16::yi#0
Coalesced [262] atan2_16::xi#16 ← atan2_16::xi#0
Coalesced [265] atan2_16::angle#22 ← atan2_16::angle#12
Coalesced [270] atan2_16::angle#27 ← atan2_16::angle#4
Coalesced [274] atan2_16::return#5 ← atan2_16::angle#5
Coalesced [277] atan2_16::return#6 ← atan2_16::angle#11
Coalesced [278] atan2_16::angle#26 ← atan2_16::angle#1
Not coalescing [279] atan2_16::shift#5 ← atan2_16::i#2
Not coalescing [280] atan2_16::xd#10 ← atan2_16::xi#3
Not coalescing [281] atan2_16::yd#10 ← atan2_16::yi#3
Coalesced [287] atan2_16::yd#13 ← atan2_16::yd#2
Coalesced [288] atan2_16::xd#13 ← atan2_16::xd#2
Coalesced [295] atan2_16::yi#21 ← atan2_16::yi#2
Coalesced [296] atan2_16::angle#25 ← atan2_16::angle#3
Coalesced [297] atan2_16::xi#18 ← atan2_16::xi#2
Coalesced [301] atan2_16::yi#18 ← atan2_16::yi#8
Coalesced [302] atan2_16::xi#15 ← atan2_16::xi#8
Coalesced [303] atan2_16::i#12 ← atan2_16::i#1
Coalesced [304] atan2_16::angle#21 ← atan2_16::angle#13
Coalesced (already) [305] atan2_16::angle#23 ← atan2_16::angle#13
Coalesced [310] atan2_16::yi#20 ← atan2_16::yi#1
Coalesced [311] atan2_16::angle#24 ← atan2_16::angle#2
Coalesced [312] atan2_16::xi#17 ← atan2_16::xi#1
Coalesced [313] atan2_16::yd#12 ← atan2_16::yd#3
Coalesced [314] atan2_16::xd#12 ← atan2_16::xd#3
Coalesced [318] atan2_16::shift#6 ← atan2_16::shift#1
Coalesced [319] atan2_16::xd#11 ← atan2_16::xd#1
Coalesced [320] atan2_16::yd#11 ← atan2_16::yd#1
Not coalescing [321] atan2_16::xi#13 ← atan2_16::x#0
Not coalescing [322] atan2_16::yi#16 ← atan2_16::y#0
Not coalescing [325] heap_head#1 ← malloc::mem#0
Coalesced [378] processChars::numActive#17 ← processChars::numActive#1
Coalesced [384] processChars::i#13 ← processChars::i#1
Coalesced [385] processChars::numActive#15 ← processChars::numActive#3
Coalesced (already) [390] processChars::numActive#16 ← processChars::numActive#10
Coalesced down to 37 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @15
Culled Empty Block (label) @22
Culled Empty Block (label) @29
Culled Empty Block (label) @34
Culled Empty Block (label) @35
Culled Empty Block (label) @39
Culled Empty Block (label) main::@1_1
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@19
Culled Empty Block (label) main::@21
Culled Empty Block (label) main::@23
Culled Empty Block (label) main::@22
Culled Empty Block (label) startProcessing::@5
Culled Empty Block (label) startProcessing::@14
Culled Empty Block (label) startProcessing::@12
Culled Empty Block (label) getCharToProcess::@1
Culled Empty Block (label) initSprites::@1_1
Culled Empty Block (label) initSprites::@3
Culled Empty Block (label) initSprites::@10
Culled Empty Block (label) initSprites::@9
Culled Empty Block (label) init_angle_screen::@2_1
Culled Empty Block (label) init_angle_screen::@10
Culled Empty Block (label) init_angle_screen::@11
Culled Empty Block (label) atan2_16::@35
Culled Empty Block (label) atan2_16::@39
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) irqBottom::@7
Culled Empty Block (label) processChars::@15
Culled Empty Block (label) processChars::@20
Culled Empty Block (label) processChars::@21
Renumbering block @26 to @1
Renumbering block @36 to @2
Renumbering block @37 to @3
Renumbering block @38 to @4
Renumbering block atan2_16::@13 to atan2_16::@9
Renumbering block atan2_16::@15 to atan2_16::@10
Renumbering block atan2_16::@16 to atan2_16::@11
Renumbering block atan2_16::@17 to atan2_16::@12
Renumbering block atan2_16::@18 to atan2_16::@13
Renumbering block atan2_16::@19 to atan2_16::@14
Renumbering block atan2_16::@20 to atan2_16::@15
Renumbering block atan2_16::@24 to atan2_16::@16
Renumbering block atan2_16::@25 to atan2_16::@17
Renumbering block atan2_16::@26 to atan2_16::@18
Renumbering block atan2_16::@27 to atan2_16::@19
Renumbering block atan2_16::@30 to atan2_16::@20
Renumbering block atan2_16::@33 to atan2_16::@21
Renumbering block main::@7 to main::@3
Renumbering block main::@8 to main::@4
Renumbering block main::@9 to main::@5
Renumbering block main::@10 to main::@6
Renumbering block main::@11 to main::@7
Renumbering block main::@15 to main::@8
Renumbering block main::@17 to main::@9
Renumbering block main::@18 to main::@10
Renumbering block main::@20 to main::@11
Renumbering block getCharToProcess::@3 to getCharToProcess::@1
Renumbering block getCharToProcess::@4 to getCharToProcess::@2
Renumbering block getCharToProcess::@5 to getCharToProcess::@3
Renumbering block getCharToProcess::@7 to getCharToProcess::@4
Renumbering block getCharToProcess::@8 to getCharToProcess::@5
Renumbering block getCharToProcess::@9 to getCharToProcess::@6
Renumbering block getCharToProcess::@10 to getCharToProcess::@7
Renumbering block getCharToProcess::@11 to getCharToProcess::@8
Renumbering block getCharToProcess::@12 to getCharToProcess::@9
Renumbering block getCharToProcess::@13 to getCharToProcess::@10
Renumbering block getCharToProcess::@14 to getCharToProcess::@11
Renumbering block getCharToProcess::@15 to getCharToProcess::@12
Renumbering block startProcessing::@8 to startProcessing::@5
Renumbering block startProcessing::@9 to startProcessing::@6
Renumbering block startProcessing::@10 to startProcessing::@7
Renumbering block startProcessing::@11 to startProcessing::@8
Renumbering block startProcessing::@13 to startProcessing::@9
Renumbering block processChars::@2 to processChars::@1
Renumbering block processChars::@3 to processChars::@2
Renumbering block processChars::@4 to processChars::@3
Renumbering block processChars::@5 to processChars::@4
Renumbering block processChars::@6 to processChars::@5
Renumbering block processChars::@7 to processChars::@6
Renumbering block processChars::@8 to processChars::@7
Renumbering block processChars::@9 to processChars::@8
Renumbering block processChars::@11 to processChars::@9
Renumbering block processChars::@13 to processChars::@10
Renumbering block processChars::@14 to processChars::@11
Renumbering block processChars::@17 to processChars::@12
Renumbering block processChars::@18 to processChars::@13
Renumbering block processChars::@19 to processChars::@14
Renumbering block init_angle_screen::@9 to init_angle_screen::@5
Renumbering block initSprites::@7 to initSprites::@3
Renumbering block initSprites::@8 to initSprites::@4
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 @end
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of startProcessing
Adding NOP phi() at start of initSprites
Adding NOP phi() at start of irqBottom
Adding NOP phi() at start of irqBottom::@1
Adding NOP phi() at start of processChars
Adding NOP phi() at start of irqTop

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call malloc 
  to:@3
@3: scope:[]  from @1
  [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0
  [4] call malloc 
  to:@4
@4: scope:[]  from @3
  [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
  to:@2
@2: scope:[]  from @4
  [6] phi()
  [7] call main 
  to:@end
@end: scope:[]  from @2
  [8] phi()
main: scope:[main]  from @2
  [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
  [10] call init_angle_screen 
  to:main::@9
main::@9: scope:[main]  from main
  [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@9
  [12] (byte*) main::dst#4 ← phi( main::@1/(byte*) main::dst#1 main::@9/(byte*) main::dst#0 )
  [12] (byte*) main::src#4 ← phi( main::@1/(byte*) main::src#1 main::@9/(const byte*) SCREEN#0 )
  [13] *((byte*) main::dst#4) ← *((byte*) main::src#4)
  [14] (byte*) main::src#1 ← ++ (byte*) main::src#4
  [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4
  to:main::@1
main::@1: scope:[main]  from main::@2
  [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@1 main::@3
  [17] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 )
  [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1
  [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2
  [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1
  [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2
  [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1
  [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0
  [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0
  [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0
  [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0
  [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0
  [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0
  [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0
  [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE
  [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0
  [32] (byte) main::i#1 ← ++ (byte) main::i#2
  [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3
  to:main::@4
main::@4: scope:[main]  from main::@3
  [34] phi()
  [35] call initSprites 
  to:main::@10
main::@10: scope:[main]  from main::@4
  [36] phi()
  [37] call setupRasterIrq 
  to:main::@5
main::@5: scope:[main]  from main::@10 main::@6
  [38] phi()
  [39] call getCharToProcess 
  [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
  [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
  [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1
  to:main::@11
main::@11: scope:[main]  from main::@5
  [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
  [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
  [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0
  [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6
  to:main::@7
main::@7: scope:[main]  from main::@11
  [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.'
  to:main::@8
main::@8: scope:[main]  from main::@7 main::@8
  [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
  to:main::@8
main::@6: scope:[main]  from main::@11
  [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
  [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
  [51] call startProcessing 
  to:main::@5
startProcessing: scope:[startProcessing]  from main::@6
  [52] phi()
  to:startProcessing::@1
startProcessing::@1: scope:[startProcessing]  from startProcessing startProcessing::@8
  [53] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 )
  to:startProcessing::@2
startProcessing::@2: scope:[startProcessing]  from startProcessing::@1 startProcessing::@3
  [54] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
  [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1
  [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2
  [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1
  [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2
  [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1
  [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3
  to:startProcessing::@4
startProcessing::@4: scope:[startProcessing]  from startProcessing::@2 startProcessing::@9
  [61] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
  [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
  to:startProcessing::@5
startProcessing::@5: scope:[startProcessing]  from startProcessing::@4
  [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0
  [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2
  [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0
  [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3
  [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0
  [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0
  [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0)
  [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0
  [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2
  [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6
  [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6
  [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0)
  [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0
  [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3
  [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9
  asm { sei  }
  [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0
  to:startProcessing::@6
startProcessing::@6: scope:[startProcessing]  from startProcessing::@5 startProcessing::@6
  [80] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
  [80] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
  [80] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 )
  [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
  [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
  [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
  [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
  [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
  to:startProcessing::@7
startProcessing::@7: scope:[startProcessing]  from startProcessing::@6
  [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
  asm { cli  }
  [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0
  [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3
  [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12
  [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4
  [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0
  [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3
  [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16
  [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4
  [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2
  [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3
  [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22
  [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1
  [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2
  [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1
  [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2
  [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1
  [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0
  [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0
  [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23
  [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c
  [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2
  [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0
  [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0
  [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW
  [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0
  to:startProcessing::@return
startProcessing::@return: scope:[startProcessing]  from startProcessing::@7
  [113] return 
  to:@return
startProcessing::@8: scope:[startProcessing]  from startProcessing::@4
  [114] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2
  to:startProcessing::@1
startProcessing::@3: scope:[startProcessing]  from startProcessing::@2
  [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2
  [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2
  to:startProcessing::@9
startProcessing::@9: scope:[startProcessing]  from startProcessing::@3
  [117] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
  to:startProcessing::@4
getCharToProcess: scope:[getCharToProcess]  from main::@5
  [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0
  [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0
  to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess]  from getCharToProcess getCharToProcess::@9
  [120] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 )
  [120] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 )
  [120] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
  [120] (byte) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const byte) NOT_FOUND#0 getCharToProcess::@9/(byte~) getCharToProcess::closest_dist#10 )
  [120] (byte*) getCharToProcess::dist_line#6 ← phi( getCharToProcess/(byte*) getCharToProcess::dist_line#0 getCharToProcess::@9/(byte*) getCharToProcess::dist_line#1 )
  [120] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(byte*) getCharToProcess::screen_line#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
  to:getCharToProcess::@2
getCharToProcess::@2: scope:[getCharToProcess]  from getCharToProcess::@1 getCharToProcess::@10
  [121] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 )
  [121] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 )
  [121] (byte) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_dist#8 getCharToProcess::@10/(byte~) getCharToProcess::closest_dist#12 )
  [121] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 )
  [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11
  to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess]  from getCharToProcess::@2
  [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2)
  [124] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12
  to:getCharToProcess::@5
getCharToProcess::@5: scope:[getCharToProcess]  from getCharToProcess::@4
  [125] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2
  [126] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7
  to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess]  from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5
  [127] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte~) getCharToProcess::return_y#7 )
  [127] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte~) getCharToProcess::return_x#7 )
  [127] (byte) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(byte~) getCharToProcess::return_dist#5 getCharToProcess::@12/(byte~) getCharToProcess::return_dist#6 getCharToProcess::@5/(byte) getCharToProcess::dist#0 )
  [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2
  [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10
  to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess]  from getCharToProcess::@3
  [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28
  [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28
  [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7
  [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9
  to:getCharToProcess::@7
getCharToProcess::@7: scope:[getCharToProcess]  from getCharToProcess::@6
  [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND#0) goto getCharToProcess::@return
  to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess]  from getCharToProcess::@7
  [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1
  [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2
  [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8
  [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3
  [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9
  [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' '
  to:getCharToProcess::@return
getCharToProcess::@return: scope:[getCharToProcess]  from getCharToProcess::@7 getCharToProcess::@8
  [141] return 
  to:@return
getCharToProcess::@9: scope:[getCharToProcess]  from getCharToProcess::@6
  [142] (byte~) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1
  to:getCharToProcess::@1
getCharToProcess::@10: scope:[getCharToProcess]  from getCharToProcess::@3
  [143] (byte~) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1
  to:getCharToProcess::@2
getCharToProcess::@12: scope:[getCharToProcess]  from getCharToProcess::@4
  [144] (byte~) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2
  to:getCharToProcess::@3
getCharToProcess::@11: scope:[getCharToProcess]  from getCharToProcess::@2
  [145] (byte~) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2
  to:getCharToProcess::@3
setupRasterIrq: scope:[setupRasterIrq]  from main::@10
  asm { sei  }
  [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
  [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
  [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
  to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq]  from setupRasterIrq
  [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
  to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq]  from setupRasterIrq::@1
  [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
  [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
  [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
  asm { cli  }
  to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq]  from setupRasterIrq::@2
  [155] return 
  to:@return
initSprites: scope:[initSprites]  from main::@4
  [156] phi()
  to:initSprites::@2
initSprites::@2: scope:[initSprites]  from initSprites initSprites::@1
  [157] (byte*) initSprites::sp#4 ← phi( initSprites::@1/(byte*) initSprites::sp#1 initSprites/(const byte*) SPRITE_DATA#0 )
  [158] *((byte*) initSprites::sp#4) ← (byte) 0
  [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4
  to:initSprites::@1
initSprites::@1: scope:[initSprites]  from initSprites::@2
  [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2
  to:initSprites::@3
initSprites::@3: scope:[initSprites]  from initSprites::@1 initSprites::@3
  [161] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 )
  [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0
  [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2
  [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3
  to:initSprites::@4
initSprites::@4: scope:[initSprites]  from initSprites::@3
  [165] *((const byte*) SPRITES_MC#0) ← (byte) 0
  [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
  [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
  to:initSprites::@return
initSprites::@return: scope:[initSprites]  from initSprites::@4
  [168] return 
  to:@return
init_angle_screen: scope:[init_angle_screen]  from main
  [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
  [170] (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::@4
  [171] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 )
  [171] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 )
  [171] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 )
  to:init_angle_screen::@3
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@2
  [172] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 )
  [172] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 )
  [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1
  [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
  [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0
  [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1
  [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0
  [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
  [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
  [180] call atan2_16 
  [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0
  to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen]  from init_angle_screen::@3
  [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
  [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
  [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11
  [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0
  [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13
  [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
  [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14
  [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
  [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15
  [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5
  [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5
  to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@5
  [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3
  to:init_angle_screen::@4
init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
  [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28
  [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28
  [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5
  [198] 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::@4
  [199] return 
  to:@return
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  [200] 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
  [201] (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
  [202] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
  [203] 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
  [204] (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
  [205] (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
  [206] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
  [206] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
  [206] (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 )
  [206] (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 )
  [207] 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
  [208] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
  [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
  [210] 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
  [211] (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
  [212] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
  [213] 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
  [214] (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
  [215] (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
  [216] return 
  to:@return
atan2_16::@11: scope:[atan2_16]  from atan2_16::@10
  [217] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2
  [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
  [219] (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
  [220] (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 )
  [220] (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 )
  [220] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
  [221] 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
  [222] 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
  [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
  [224] (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
  [225] (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 )
  [225] (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 )
  [226] 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
  [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
  [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
  [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
  [230] (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
  [231] (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 )
  [231] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
  [231] (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 )
  [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
  [233] 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
  [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
  [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
  [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
  [237] (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
  [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
  [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
  [240] (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
  [241] (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
  [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0
  to:atan2_16::@3
malloc: scope:[malloc]  from @1 @3
  [243] (byte*) heap_head#5 ← phi( @1/(const byte*) HEAP_TOP#0 @3/(byte*) heap_head#1 )
  [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8
  [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  [246] return 
  to:@return
irqBottom: scope:[irqBottom]  from
  [247] phi()
  to:irqBottom::@1
irqBottom::@1: scope:[irqBottom]  from irqBottom
  [248] phi()
  [249] call processChars 
  to:irqBottom::@2
irqBottom::@2: scope:[irqBottom]  from irqBottom::@1
  [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
  [251] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
  [252] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
  to:irqBottom::@return
irqBottom::@return: scope:[irqBottom]  from irqBottom::@2
  [253] return 
  to:@return
processChars: scope:[processChars]  from irqBottom::@1
  [254] phi()
  to:processChars::@1
processChars::@1: scope:[processChars]  from processChars processChars::@2
  [255] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 )
  [255] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
  [256] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1
  [257] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10
  [258] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1
  [259] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10
  [260] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1
  [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37
  [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
  [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2
  to:processChars::@10
processChars::@10: scope:[processChars]  from processChars::@1
  [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3
  to:processChars::@11
processChars::@11: scope:[processChars]  from processChars::@10
  [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
  [266] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
  [267] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL)
  [268] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
  [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING
  to:processChars::@3
processChars::@3: scope:[processChars]  from processChars::@10 processChars::@11
  [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4
  [271] (byte~) processChars::$11 ← > (word) processChars::xpos#0
  [272] if((byte) 0!=(byte~) processChars::$11) goto processChars::@4
  to:processChars::@8
processChars::@8: scope:[processChars]  from processChars::@3
  [273] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0
  [274] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12
  to:processChars::@5
processChars::@5: scope:[processChars]  from processChars::@4 processChars::@8
  [275] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1
  [276] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0
  [277] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$17) ← (byte~) processChars::$14
  [278] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4
  [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15
  [280] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$17) ← (byte) processChars::ypos#0
  [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6
  to:processChars::@14
processChars::@14: scope:[processChars]  from processChars::@5
  [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6
  to:processChars::@13
processChars::@13: scope:[processChars]  from processChars::@14
  [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6
  to:processChars::@12
processChars::@12: scope:[processChars]  from processChars::@13
  [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6
  to:processChars::@9
processChars::@9: scope:[processChars]  from processChars::@12
  [285] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3
  [286] (byte~) processChars::$26 ← (byte)(word~) processChars::$25
  [287] (byte) processChars::xchar#0 ← (byte~) processChars::$26 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8
  [288] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1
  [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38)
  [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
  [291] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3
  [292] (byte) processChars::ychar#0 ← (byte~) processChars::$30 - (const byte) BORDER_YPOS_TOP#0/(byte) 8
  [293] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1
  [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39)
  [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY)
  to:processChars::@7
processChars::@7: scope:[processChars]  from processChars::@6 processChars::@9
  [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10
  to:processChars::@2
processChars::@2: scope:[processChars]  from processChars::@1 processChars::@7
  [297] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 )
  [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
  [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
  to:processChars::@return
processChars::@return: scope:[processChars]  from processChars::@2
  [300] return 
  to:@return
processChars::@6: scope:[processChars]  from processChars::@12 processChars::@13 processChars::@14 processChars::@5
  [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE
  [302] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0
  [303] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33
  to:processChars::@7
processChars::@4: scope:[processChars]  from processChars::@3
  [304] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0
  to:processChars::@5
irqTop: scope:[irqTop]  from
  [305] phi()
  to:irqTop::@1
irqTop::@1: scope:[irqTop]  from irqTop
  [306] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
  [307] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
  [308] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
  to:irqTop::@return
irqTop::@return: scope:[irqTop]  from irqTop::@1
  [309] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte) BLUE
(byte*) BORDERCOL
(byte) BORDER_XPOS_LEFT
(word) BORDER_XPOS_RIGHT
(byte) BORDER_YPOS_BOTTOM
(byte) BORDER_YPOS_TOP
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
(byte) CORDIC_ITERATIONS_16
(bool) DEBUG
(void()**) HARDWARE_IRQ
(byte*) HEAP_TOP
(byte*) IRQ_ENABLE
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(byte) LIGHT_BLUE
(byte) NOT_FOUND
(byte) NUM_PROCESSING
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING
(byte*) PROCPORT
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::col
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(byte*) RASTER
(byte) RASTER_IRQ_MIDDLE
(byte) RASTER_IRQ_TOP
(byte*) SCREEN
(byte*) SCREEN_COPY
(void*) SCREEN_COPY#0 0.0273972602739726
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 0.028169014084507043
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(byte*) SPRITE_DATA
(word) SPRITE_PTRS
(byte*) VIC_CONTROL
(word[$28]) VXSIN
(word[$19]) VYSIN
(byte) WHITE
(word) XPOS_LEFTMOST
(word) XPOS_RIGHTMOST
(word) YPOS_BOTTOMMOST
(word) YPOS_TOPMOST
(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
(byte~) atan2_16::$24 2002.0
(signed word~) atan2_16::$7 4.0
(word) atan2_16::angle
(word) atan2_16::angle#1 3.0
(word) atan2_16::angle#11 4.0
(word) atan2_16::angle#12 190.66666666666666
(word) atan2_16::angle#13 1334.6666666666667
(word) atan2_16::angle#2 2002.0
(word) atan2_16::angle#3 2002.0
(word) atan2_16::angle#4 4.0
(word) atan2_16::angle#5 4.0
(word) atan2_16::angle#6 2004.0
(byte) atan2_16::i
(byte) atan2_16::i#1 1501.5
(byte) atan2_16::i#2 208.54166666666669
(word) atan2_16::return
(word) atan2_16::return#0 34.99999999999999
(word) atan2_16::return#2 202.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 20002.0
(byte) atan2_16::shift#2 8001.25
(byte~) atan2_16::shift#5 667.3333333333334
(signed word) atan2_16::x
(signed word) atan2_16::x#0 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 6667.333333333333
(signed word~) atan2_16::xd#10 1001.0
(signed word) atan2_16::xd#2 1001.0
(signed word) atan2_16::xd#3 7668.333333333332
(signed word) atan2_16::xd#5 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 6.0
(signed word) atan2_16::xi#1 500.5
(signed word~) atan2_16::xi#13 4.0
(signed word) atan2_16::xi#2 500.5
(signed word) atan2_16::xi#3 267.0666666666667
(signed word) atan2_16::xi#8 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 10001.0
(signed word~) atan2_16::yd#10 2002.0
(signed word) atan2_16::yd#2 2002.0
(signed word) atan2_16::yd#3 4601.0
(signed word) atan2_16::yd#5 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 1.2000000000000002
(signed word) atan2_16::yi#1 667.3333333333334
(signed word~) atan2_16::yi#16 4.0
(signed word) atan2_16::yi#2 667.3333333333334
(signed word) atan2_16::yi#3 353.4117647058823
(signed word) atan2_16::yi#8 1001.0
(struct ProcessingChar()) getCharToProcess()
(byte*~) getCharToProcess::$10 4.0
(word) getCharToProcess::$12 4.0
(word) getCharToProcess::$13 4.0
(word~) getCharToProcess::$8 3.0
(word~) getCharToProcess::$9 4.0
(byte) getCharToProcess::closest_dist
(byte~) getCharToProcess::closest_dist#10 202.0
(byte~) getCharToProcess::closest_dist#12 2002.0
(byte) getCharToProcess::closest_dist#2 1026.25
(byte) getCharToProcess::closest_dist#8 202.0
(byte) getCharToProcess::closest_x
(byte) getCharToProcess::closest_x#7 517.3333333333334
(byte) getCharToProcess::closest_x#9 202.0
(byte) getCharToProcess::closest_y
(byte) getCharToProcess::closest_y#7 517.3333333333334
(byte) getCharToProcess::closest_y#9 202.0
(byte) getCharToProcess::dist
(byte) getCharToProcess::dist#0 750.75
(byte*) getCharToProcess::dist_line
(byte*) getCharToProcess::dist_line#0 4.0
(byte*) getCharToProcess::dist_line#1 50.5
(byte*) getCharToProcess::dist_line#6 86.07142857142857
(struct ProcessingChar) getCharToProcess::return
(byte) getCharToProcess::return_dist
(byte) getCharToProcess::return_dist#0 7.333333333333333
(byte) getCharToProcess::return_dist#1 228.7777777777778
(byte~) getCharToProcess::return_dist#5 2002.0
(byte~) getCharToProcess::return_dist#6 2002.0
(byte) getCharToProcess::return_x
(byte) getCharToProcess::return_x#0 7.333333333333333
(byte) getCharToProcess::return_x#1 228.7777777777778
(byte~) getCharToProcess::return_x#7 1001.0
(byte) getCharToProcess::return_y
(byte) getCharToProcess::return_y#0 7.333333333333333
(byte) getCharToProcess::return_y#1 216.6315789473684
(byte~) getCharToProcess::return_y#7 2002.0
(byte*) getCharToProcess::screen_line
(byte*) getCharToProcess::screen_line#0 2.0
(byte*) getCharToProcess::screen_line#1 40.4
(byte*) getCharToProcess::screen_line#4 92.6923076923077
(byte) getCharToProcess::x
(byte) getCharToProcess::x#1 1001.0
(byte) getCharToProcess::x#2 556.1111111111111
(byte) getCharToProcess::y
(byte) getCharToProcess::y#1 101.0
(byte) getCharToProcess::y#7 80.2
(byte*) heap_head
(byte*) heap_head#1 1.0
(byte*) heap_head#5 4.0
(void()) initSprites()
(byte) initSprites::i
(byte) initSprites::i#1 16.5
(byte) initSprites::i#2 16.5
(byte*) initSprites::sp
(byte*) initSprites::sp#1 16.5
(byte*) initSprites::sp#4 16.5
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(word~) init_angle_screen::$11 202.0
(byte~) init_angle_screen::$13 202.0
(byte~) init_angle_screen::$14 202.0
(byte~) init_angle_screen::$15 202.0
(byte~) init_angle_screen::$3 202.0
(byte~) init_angle_screen::$4 202.0
(byte~) init_angle_screen::$7 202.0
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0 84.16666666666666
(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#6 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#6 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 101.0
(byte) init_angle_screen::x#5 25.25
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 101.0
(byte) init_angle_screen::xb#5 19.238095238095237
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 16.5
(byte) init_angle_screen::y#5 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 50.5
interrupt(HARDWARE_ALL)(void()) irqBottom()
(byte) irqBottom::i
interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i
(byte) irqTop::i1
(void()) main()
(byte~) main::$16 12.222222222222221
(byte) main::$26 22.0
(byte) main::$27 22.0
(byte) main::$28 22.0
(byte) main::$29 22.0
(struct ProcessingChar~) main::$9
(byte) main::center_dist
(byte) main::center_dist#0 22.0
(byte) main::center_x
(byte) main::center_x#0 5.5
(byte) main::center_y
(byte) main::center_y#0 5.5
(byte*) main::dst
(byte*) main::dst#0 4.0
(byte*) main::dst#1 11.0
(byte*) main::dst#4 11.666666666666666
(byte) main::i
(byte) main::i#1 16.5
(byte) main::i#2 3.6666666666666665
(byte*) main::src
(byte*) main::src#1 11.0
(byte*) main::src#4 16.5
(void*()) malloc((word) malloc::size)
(byte*) malloc::mem
(byte*) malloc::mem#0 0.8
(void*) malloc::return
(word) malloc::size
(void()) processChars()
(byte~) processChars::$11 22.0
(byte~) processChars::$12 22.0
(byte~) processChars::$14 22.0
(word~) processChars::$15 11.0
(byte~) processChars::$17 6.6000000000000005
(word~) processChars::$25 11.0
(byte~) processChars::$26 22.0
(byte~) processChars::$30 22.0
(byte~) processChars::$33 22.0
(byte~) processChars::$37 22.0
(byte~) processChars::$38 22.0
(byte~) processChars::$39 22.0
(byte) processChars::$67 22.0
(byte) processChars::$68 22.0
(byte) processChars::$69 22.0
(byte) processChars::$70 22.0
(byte) processChars::bitmask
(byte) processChars::bitmask#0 2.2
(byte) processChars::i
(byte) processChars::i#1 16.5
(byte) processChars::i#10 1.4042553191489362
(byte) processChars::numActive
(byte) processChars::numActive#1 22.0
(byte) processChars::numActive#10 0.7333333333333333
(byte) processChars::numActive#3 11.0
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 0.3142857142857143
(byte) processChars::xchar
(byte) processChars::xchar#0 22.0
(word) processChars::xpos
(word) processChars::xpos#0 2.0625
(byte) processChars::ychar
(byte) processChars::ychar#0 22.0
(byte) processChars::ypos
(byte) processChars::ypos#0 2.75
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(void()*) setupRasterIrq::irqRoutine
(word) setupRasterIrq::raster
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
(word~) startProcessing::$0 3.0
(word~) startProcessing::$1 4.0
(word~) startProcessing::$11 4.0
(word~) startProcessing::$12 4.0
(word~) startProcessing::$13 4.0
(word~) startProcessing::$15 4.0
(word~) startProcessing::$16 4.0
(word~) startProcessing::$17 4.0
(byte~) startProcessing::$22 2.0
(word~) startProcessing::$23 0.5
(byte~) startProcessing::$30 2002.0
(byte~) startProcessing::$31 2.2222222222222228
(byte) startProcessing::$42 2002.0
(byte) startProcessing::$43 2002.0
(byte) startProcessing::$44 2002.0
(byte) startProcessing::$45 2002.0
(word) startProcessing::$47 4.0
(word) startProcessing::$48 4.0
(word~) startProcessing::$5 4.0
(byte) startProcessing::$50 4.0
(byte) startProcessing::$51 4.0
(byte) startProcessing::$52 4.0
(byte) startProcessing::$53 4.0
(word~) startProcessing::$6 4.0
(word~) startProcessing::$8 4.0
(word~) startProcessing::$9 4.0
(struct ProcessingChar) startProcessing::center
(byte) startProcessing::center_dist
(byte) startProcessing::center_x
(byte) startProcessing::center_x#0 0.30952380952380953
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0 0.24444444444444444
(byte) startProcessing::ch
(byte) startProcessing::ch#0 2.0
(byte*) startProcessing::chargenData
(byte*) startProcessing::chargenData#0 1.3333333333333333
(byte*) startProcessing::chargenData#1 67.33333333333333
(byte*) startProcessing::chargenData#2 101.66666666666666
(byte*) startProcessing::colPtr
(byte*) startProcessing::colPtr#0 4.0
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 28.0
(byte) startProcessing::freeIdx#6 20.2
(byte~) startProcessing::freeIdx#7 202.0
(byte~) startProcessing::freeIdx#8 202.0
(byte) startProcessing::i
(byte) startProcessing::i#1 1501.5
(byte) startProcessing::i#2 858.0
(byte) startProcessing::i1
(byte) startProcessing::i1#1 151.5
(byte) startProcessing::i1#2 50.5
(word) startProcessing::offset
(word) startProcessing::offset#0 2.0
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 0.14285714285714285
(byte) startProcessing::spriteCol
(byte) startProcessing::spriteCol#0 0.0975609756097561
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 0.5714285714285714
(byte*) startProcessing::spriteData#1 50.5
(byte*) startProcessing::spriteData#2 152.5
(byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 0.3076923076923077
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0 0.3076923076923077
(word) startProcessing::spriteY
(word) startProcessing::spriteY#0 0.4

Initial phi equivalence classes
[ main::src#4 main::src#1 ]
[ main::dst#4 main::dst#1 main::dst#0 ]
[ main::i#2 main::i#1 ]
[ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
[ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
[ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ]
[ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ]
[ startProcessing::i1#2 startProcessing::i1#1 ]
[ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ]
[ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ]
[ getCharToProcess::y#7 getCharToProcess::y#1 ]
[ getCharToProcess::x#2 getCharToProcess::x#1 ]
[ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
[ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
[ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
[ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
[ initSprites::sp#4 initSprites::sp#1 ]
[ initSprites::i#2 initSprites::i#1 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#5 init_angle_screen::x#1 ]
[ init_angle_screen::xb#5 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 ]
[ 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 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ 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::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ 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 ]
[ heap_head#5 heap_head#1 ]
[ processChars::i#10 processChars::i#1 ]
[ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Added variable SCREEN_COPY#0 to zero page equivalence class [ SCREEN_COPY#0 ]
Added variable SCREEN_DIST#0 to zero page equivalence class [ SCREEN_DIST#0 ]
Added variable init_angle_screen::screen#0 to zero page equivalence class [ init_angle_screen::screen#0 ]
Added variable main::$26 to zero page equivalence class [ main::$26 ]
Added variable main::$27 to zero page equivalence class [ main::$27 ]
Added variable main::$28 to zero page equivalence class [ main::$28 ]
Added variable main::$29 to zero page equivalence class [ main::$29 ]
Added variable main::$16 to zero page equivalence class [ main::$16 ]
Added variable getCharToProcess::return_x#0 to zero page equivalence class [ getCharToProcess::return_x#0 ]
Added variable getCharToProcess::return_y#0 to zero page equivalence class [ getCharToProcess::return_y#0 ]
Added variable getCharToProcess::return_dist#0 to zero page equivalence class [ getCharToProcess::return_dist#0 ]
Added variable main::center_x#0 to zero page equivalence class [ main::center_x#0 ]
Added variable main::center_y#0 to zero page equivalence class [ main::center_y#0 ]
Added variable main::center_dist#0 to zero page equivalence class [ main::center_dist#0 ]
Added variable startProcessing::center_x#0 to zero page equivalence class [ startProcessing::center_x#0 ]
Added variable startProcessing::center_y#0 to zero page equivalence class [ startProcessing::center_y#0 ]
Added variable startProcessing::$42 to zero page equivalence class [ startProcessing::$42 ]
Added variable startProcessing::$43 to zero page equivalence class [ startProcessing::$43 ]
Added variable startProcessing::$44 to zero page equivalence class [ startProcessing::$44 ]
Added variable startProcessing::$45 to zero page equivalence class [ startProcessing::$45 ]
Added variable startProcessing::$30 to zero page equivalence class [ startProcessing::$30 ]
Added variable startProcessing::$0 to zero page equivalence class [ startProcessing::$0 ]
Added variable startProcessing::$47 to zero page equivalence class [ startProcessing::$47 ]
Added variable startProcessing::$48 to zero page equivalence class [ startProcessing::$48 ]
Added variable startProcessing::$1 to zero page equivalence class [ startProcessing::$1 ]
Added variable startProcessing::offset#0 to zero page equivalence class [ startProcessing::offset#0 ]
Added variable startProcessing::colPtr#0 to zero page equivalence class [ startProcessing::colPtr#0 ]
Added variable startProcessing::spriteCol#0 to zero page equivalence class [ startProcessing::spriteCol#0 ]
Added variable startProcessing::screenPtr#0 to zero page equivalence class [ startProcessing::screenPtr#0 ]
Added variable startProcessing::$5 to zero page equivalence class [ startProcessing::$5 ]
Added variable startProcessing::$6 to zero page equivalence class [ startProcessing::$6 ]
Added variable startProcessing::ch#0 to zero page equivalence class [ startProcessing::ch#0 ]
Added variable startProcessing::$8 to zero page equivalence class [ startProcessing::$8 ]
Added variable startProcessing::$9 to zero page equivalence class [ startProcessing::$9 ]
Added variable startProcessing::$11 to zero page equivalence class [ startProcessing::$11 ]
Added variable startProcessing::$12 to zero page equivalence class [ startProcessing::$12 ]
Added variable startProcessing::$13 to zero page equivalence class [ startProcessing::$13 ]
Added variable startProcessing::spriteX#0 to zero page equivalence class [ startProcessing::spriteX#0 ]
Added variable startProcessing::$15 to zero page equivalence class [ startProcessing::$15 ]
Added variable startProcessing::$16 to zero page equivalence class [ startProcessing::$16 ]
Added variable startProcessing::$17 to zero page equivalence class [ startProcessing::$17 ]
Added variable startProcessing::spriteY#0 to zero page equivalence class [ startProcessing::spriteY#0 ]
Added variable startProcessing::spritePtr#0 to zero page equivalence class [ startProcessing::spritePtr#0 ]
Added variable startProcessing::$22 to zero page equivalence class [ startProcessing::$22 ]
Added variable startProcessing::$23 to zero page equivalence class [ startProcessing::$23 ]
Added variable startProcessing::$50 to zero page equivalence class [ startProcessing::$50 ]
Added variable startProcessing::$51 to zero page equivalence class [ startProcessing::$51 ]
Added variable startProcessing::$52 to zero page equivalence class [ startProcessing::$52 ]
Added variable startProcessing::$53 to zero page equivalence class [ startProcessing::$53 ]
Added variable startProcessing::$31 to zero page equivalence class [ startProcessing::$31 ]
Added variable getCharToProcess::$8 to zero page equivalence class [ getCharToProcess::$8 ]
Added variable getCharToProcess::$12 to zero page equivalence class [ getCharToProcess::$12 ]
Added variable getCharToProcess::$13 to zero page equivalence class [ getCharToProcess::$13 ]
Added variable getCharToProcess::$9 to zero page equivalence class [ getCharToProcess::$9 ]
Added variable getCharToProcess::$10 to zero page equivalence class [ getCharToProcess::$10 ]
Added variable init_angle_screen::$3 to zero page equivalence class [ init_angle_screen::$3 ]
Added variable init_angle_screen::$4 to zero page equivalence class [ init_angle_screen::$4 ]
Added variable init_angle_screen::xw#0 to zero page equivalence class [ init_angle_screen::xw#0 ]
Added variable init_angle_screen::$7 to zero page equivalence class [ init_angle_screen::$7 ]
Added variable init_angle_screen::yw#0 to zero page equivalence class [ init_angle_screen::yw#0 ]
Added variable atan2_16::x#0 to zero page equivalence class [ atan2_16::x#0 ]
Added variable atan2_16::y#0 to zero page equivalence class [ atan2_16::y#0 ]
Added variable atan2_16::return#2 to zero page equivalence class [ atan2_16::return#2 ]
Added variable init_angle_screen::angle_w#0 to zero page equivalence class [ init_angle_screen::angle_w#0 ]
Added variable init_angle_screen::$11 to zero page equivalence class [ init_angle_screen::$11 ]
Added variable init_angle_screen::ang_w#0 to zero page equivalence class [ init_angle_screen::ang_w#0 ]
Added variable init_angle_screen::$13 to zero page equivalence class [ init_angle_screen::$13 ]
Added variable init_angle_screen::$14 to zero page equivalence class [ init_angle_screen::$14 ]
Added variable init_angle_screen::$15 to zero page equivalence class [ init_angle_screen::$15 ]
Added variable atan2_16::$24 to zero page equivalence class [ atan2_16::$24 ]
Added variable atan2_16::$23 to zero page equivalence class [ atan2_16::$23 ]
Added variable malloc::mem#0 to zero page equivalence class [ malloc::mem#0 ]
Added variable processChars::$67 to zero page equivalence class [ processChars::$67 ]
Added variable processChars::$68 to zero page equivalence class [ processChars::$68 ]
Added variable processChars::$69 to zero page equivalence class [ processChars::$69 ]
Added variable processChars::$70 to zero page equivalence class [ processChars::$70 ]
Added variable processChars::$37 to zero page equivalence class [ processChars::$37 ]
Added variable processChars::processing#0 to zero page equivalence class [ processChars::processing#0 ]
Added variable processChars::bitmask#0 to zero page equivalence class [ processChars::bitmask#0 ]
Added variable processChars::xpos#0 to zero page equivalence class [ processChars::xpos#0 ]
Added variable processChars::$11 to zero page equivalence class [ processChars::$11 ]
Added variable processChars::$12 to zero page equivalence class [ processChars::$12 ]
Added variable processChars::$17 to zero page equivalence class [ processChars::$17 ]
Added variable processChars::$14 to zero page equivalence class [ processChars::$14 ]
Added variable processChars::$15 to zero page equivalence class [ processChars::$15 ]
Added variable processChars::ypos#0 to zero page equivalence class [ processChars::ypos#0 ]
Added variable processChars::$25 to zero page equivalence class [ processChars::$25 ]
Added variable processChars::$26 to zero page equivalence class [ processChars::$26 ]
Added variable processChars::xchar#0 to zero page equivalence class [ processChars::xchar#0 ]
Added variable processChars::$38 to zero page equivalence class [ processChars::$38 ]
Added variable processChars::$30 to zero page equivalence class [ processChars::$30 ]
Added variable processChars::ychar#0 to zero page equivalence class [ processChars::ychar#0 ]
Added variable processChars::$39 to zero page equivalence class [ processChars::$39 ]
Added variable processChars::$33 to zero page equivalence class [ processChars::$33 ]
Complete equivalence classes
[ main::src#4 main::src#1 ]
[ main::dst#4 main::dst#1 main::dst#0 ]
[ main::i#2 main::i#1 ]
[ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
[ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
[ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ]
[ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ]
[ startProcessing::i1#2 startProcessing::i1#1 ]
[ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ]
[ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ]
[ getCharToProcess::y#7 getCharToProcess::y#1 ]
[ getCharToProcess::x#2 getCharToProcess::x#1 ]
[ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
[ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
[ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
[ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
[ initSprites::sp#4 initSprites::sp#1 ]
[ initSprites::i#2 initSprites::i#1 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#5 init_angle_screen::x#1 ]
[ init_angle_screen::xb#5 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 ]
[ 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 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ 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::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ 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 ]
[ heap_head#5 heap_head#1 ]
[ processChars::i#10 processChars::i#1 ]
[ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
[ SCREEN_COPY#0 ]
[ SCREEN_DIST#0 ]
[ init_angle_screen::screen#0 ]
[ main::$26 ]
[ main::$27 ]
[ main::$28 ]
[ main::$29 ]
[ main::$16 ]
[ getCharToProcess::return_x#0 ]
[ getCharToProcess::return_y#0 ]
[ getCharToProcess::return_dist#0 ]
[ main::center_x#0 ]
[ main::center_y#0 ]
[ main::center_dist#0 ]
[ startProcessing::center_x#0 ]
[ startProcessing::center_y#0 ]
[ startProcessing::$42 ]
[ startProcessing::$43 ]
[ startProcessing::$44 ]
[ startProcessing::$45 ]
[ startProcessing::$30 ]
[ startProcessing::$0 ]
[ startProcessing::$47 ]
[ startProcessing::$48 ]
[ startProcessing::$1 ]
[ startProcessing::offset#0 ]
[ startProcessing::colPtr#0 ]
[ startProcessing::spriteCol#0 ]
[ startProcessing::screenPtr#0 ]
[ startProcessing::$5 ]
[ startProcessing::$6 ]
[ startProcessing::ch#0 ]
[ startProcessing::$8 ]
[ startProcessing::$9 ]
[ startProcessing::$11 ]
[ startProcessing::$12 ]
[ startProcessing::$13 ]
[ startProcessing::spriteX#0 ]
[ startProcessing::$15 ]
[ startProcessing::$16 ]
[ startProcessing::$17 ]
[ startProcessing::spriteY#0 ]
[ startProcessing::spritePtr#0 ]
[ startProcessing::$22 ]
[ startProcessing::$23 ]
[ startProcessing::$50 ]
[ startProcessing::$51 ]
[ startProcessing::$52 ]
[ startProcessing::$53 ]
[ startProcessing::$31 ]
[ getCharToProcess::$8 ]
[ getCharToProcess::$12 ]
[ getCharToProcess::$13 ]
[ getCharToProcess::$9 ]
[ getCharToProcess::$10 ]
[ init_angle_screen::$3 ]
[ init_angle_screen::$4 ]
[ init_angle_screen::xw#0 ]
[ init_angle_screen::$7 ]
[ init_angle_screen::yw#0 ]
[ atan2_16::x#0 ]
[ atan2_16::y#0 ]
[ atan2_16::return#2 ]
[ init_angle_screen::angle_w#0 ]
[ init_angle_screen::$11 ]
[ init_angle_screen::ang_w#0 ]
[ init_angle_screen::$13 ]
[ init_angle_screen::$14 ]
[ init_angle_screen::$15 ]
[ atan2_16::$24 ]
[ atan2_16::$23 ]
[ malloc::mem#0 ]
[ processChars::$67 ]
[ processChars::$68 ]
[ processChars::$69 ]
[ processChars::$70 ]
[ processChars::$37 ]
[ processChars::processing#0 ]
[ processChars::bitmask#0 ]
[ processChars::xpos#0 ]
[ processChars::$11 ]
[ processChars::$12 ]
[ processChars::$17 ]
[ processChars::$14 ]
[ processChars::$15 ]
[ processChars::ypos#0 ]
[ processChars::$25 ]
[ processChars::$26 ]
[ processChars::xchar#0 ]
[ processChars::$38 ]
[ processChars::$30 ]
[ processChars::ychar#0 ]
[ processChars::$39 ]
[ processChars::$33 ]
Allocated zp ZP_WORD:2 [ main::src#4 main::src#1 ]
Allocated zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ]
Allocated zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Allocated zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Allocated zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Allocated zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ]
Allocated zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ]
Allocated zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Allocated zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ]
Allocated zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ]
Allocated zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Allocated zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Allocated zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Allocated zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Allocated zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Allocated zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
Allocated zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ]
Allocated zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ]
Allocated zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
Allocated zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
Allocated zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Allocated zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Allocated zp ZP_WORD:34 [ 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 ]
Allocated zp ZP_WORD:36 [ 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 ]
Allocated zp ZP_BYTE:38 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp ZP_WORD:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
Allocated zp ZP_BYTE:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp ZP_WORD:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp ZP_WORD:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp ZP_WORD:48 [ heap_head#5 heap_head#1 ]
Allocated zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ]
Allocated zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Allocated zp ZP_WORD:52 [ SCREEN_COPY#0 ]
Allocated zp ZP_WORD:54 [ SCREEN_DIST#0 ]
Allocated zp ZP_WORD:56 [ init_angle_screen::screen#0 ]
Allocated zp ZP_BYTE:58 [ main::$26 ]
Allocated zp ZP_BYTE:59 [ main::$27 ]
Allocated zp ZP_BYTE:60 [ main::$28 ]
Allocated zp ZP_BYTE:61 [ main::$29 ]
Allocated zp ZP_BYTE:62 [ main::$16 ]
Allocated zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ]
Allocated zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ]
Allocated zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ]
Allocated zp ZP_BYTE:66 [ main::center_x#0 ]
Allocated zp ZP_BYTE:67 [ main::center_y#0 ]
Allocated zp ZP_BYTE:68 [ main::center_dist#0 ]
Allocated zp ZP_BYTE:69 [ startProcessing::center_x#0 ]
Allocated zp ZP_BYTE:70 [ startProcessing::center_y#0 ]
Allocated zp ZP_BYTE:71 [ startProcessing::$42 ]
Allocated zp ZP_BYTE:72 [ startProcessing::$43 ]
Allocated zp ZP_BYTE:73 [ startProcessing::$44 ]
Allocated zp ZP_BYTE:74 [ startProcessing::$45 ]
Allocated zp ZP_BYTE:75 [ startProcessing::$30 ]
Allocated zp ZP_WORD:76 [ startProcessing::$0 ]
Allocated zp ZP_WORD:78 [ startProcessing::$47 ]
Allocated zp ZP_WORD:80 [ startProcessing::$48 ]
Allocated zp ZP_WORD:82 [ startProcessing::$1 ]
Allocated zp ZP_WORD:84 [ startProcessing::offset#0 ]
Allocated zp ZP_WORD:86 [ startProcessing::colPtr#0 ]
Allocated zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ]
Allocated zp ZP_WORD:89 [ startProcessing::screenPtr#0 ]
Allocated zp ZP_WORD:91 [ startProcessing::$5 ]
Allocated zp ZP_WORD:93 [ startProcessing::$6 ]
Allocated zp ZP_BYTE:95 [ startProcessing::ch#0 ]
Allocated zp ZP_WORD:96 [ startProcessing::$8 ]
Allocated zp ZP_WORD:98 [ startProcessing::$9 ]
Allocated zp ZP_WORD:100 [ startProcessing::$11 ]
Allocated zp ZP_WORD:102 [ startProcessing::$12 ]
Allocated zp ZP_WORD:104 [ startProcessing::$13 ]
Allocated zp ZP_WORD:106 [ startProcessing::spriteX#0 ]
Allocated zp ZP_WORD:108 [ startProcessing::$15 ]
Allocated zp ZP_WORD:110 [ startProcessing::$16 ]
Allocated zp ZP_WORD:112 [ startProcessing::$17 ]
Allocated zp ZP_WORD:114 [ startProcessing::spriteY#0 ]
Allocated zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ]
Allocated zp ZP_BYTE:117 [ startProcessing::$22 ]
Allocated zp ZP_WORD:118 [ startProcessing::$23 ]
Allocated zp ZP_BYTE:120 [ startProcessing::$50 ]
Allocated zp ZP_BYTE:121 [ startProcessing::$51 ]
Allocated zp ZP_BYTE:122 [ startProcessing::$52 ]
Allocated zp ZP_BYTE:123 [ startProcessing::$53 ]
Allocated zp ZP_BYTE:124 [ startProcessing::$31 ]
Allocated zp ZP_WORD:125 [ getCharToProcess::$8 ]
Allocated zp ZP_WORD:127 [ getCharToProcess::$12 ]
Allocated zp ZP_WORD:129 [ getCharToProcess::$13 ]
Allocated zp ZP_WORD:131 [ getCharToProcess::$9 ]
Allocated zp ZP_WORD:133 [ getCharToProcess::$10 ]
Allocated zp ZP_BYTE:135 [ init_angle_screen::$3 ]
Allocated zp ZP_BYTE:136 [ init_angle_screen::$4 ]
Allocated zp ZP_WORD:137 [ init_angle_screen::xw#0 ]
Allocated zp ZP_BYTE:139 [ init_angle_screen::$7 ]
Allocated zp ZP_WORD:140 [ init_angle_screen::yw#0 ]
Allocated zp ZP_WORD:142 [ atan2_16::x#0 ]
Allocated zp ZP_WORD:144 [ atan2_16::y#0 ]
Allocated zp ZP_WORD:146 [ atan2_16::return#2 ]
Allocated zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ]
Allocated zp ZP_WORD:150 [ init_angle_screen::$11 ]
Allocated zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ]
Allocated zp ZP_BYTE:153 [ init_angle_screen::$13 ]
Allocated zp ZP_BYTE:154 [ init_angle_screen::$14 ]
Allocated zp ZP_BYTE:155 [ init_angle_screen::$15 ]
Allocated zp ZP_BYTE:156 [ atan2_16::$24 ]
Allocated zp ZP_BYTE:157 [ atan2_16::$23 ]
Allocated zp ZP_WORD:158 [ malloc::mem#0 ]
Allocated zp ZP_BYTE:160 [ processChars::$67 ]
Allocated zp ZP_BYTE:161 [ processChars::$68 ]
Allocated zp ZP_BYTE:162 [ processChars::$69 ]
Allocated zp ZP_BYTE:163 [ processChars::$70 ]
Allocated zp ZP_BYTE:164 [ processChars::$37 ]
Allocated zp ZP_WORD:165 [ processChars::processing#0 ]
Allocated zp ZP_BYTE:167 [ processChars::bitmask#0 ]
Allocated zp ZP_WORD:168 [ processChars::xpos#0 ]
Allocated zp ZP_BYTE:170 [ processChars::$11 ]
Allocated zp ZP_BYTE:171 [ processChars::$12 ]
Allocated zp ZP_BYTE:172 [ processChars::$17 ]
Allocated zp ZP_BYTE:173 [ processChars::$14 ]
Allocated zp ZP_WORD:174 [ processChars::$15 ]
Allocated zp ZP_BYTE:176 [ processChars::ypos#0 ]
Allocated zp ZP_WORD:177 [ processChars::$25 ]
Allocated zp ZP_BYTE:179 [ processChars::$26 ]
Allocated zp ZP_BYTE:180 [ processChars::xchar#0 ]
Allocated zp ZP_BYTE:181 [ processChars::$38 ]
Allocated zp ZP_BYTE:182 [ processChars::$30 ]
Allocated zp ZP_BYTE:183 [ processChars::ychar#0 ]
Allocated zp ZP_BYTE:184 [ processChars::$39 ]
Allocated zp ZP_BYTE:185 [ processChars::$33 ]

INITIAL ASM
Target platform is c64basic
  // File Comments
// Clears start screen throwing around the letters (by turning them into sprites)
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const STATUS_FREE = 0
  .const STATUS_NEW = 1
  .const STATUS_PROCESSING = 2
  .const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
  .const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4
  .const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6
  .const OFFSET_STRUCT_PROCESSINGSPRITE_ID = 8
  .const OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 9
  .const OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a
  .const OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b
  .const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // Processor port data direction register
  .label PROCPORT_DDR = 0
  // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  // Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  // RAM in $A000, $E000 I/O in $D000
  .const PROCPORT_RAM_IO = 5
  // RAM in $A000, $E000 CHAR ROM in $D000
  .const PROCPORT_RAM_CHARROM = 1
  // The address of the CHARGEN character set
  .label CHARGEN = $d000
  // Positions of the border (in sprite positions)
  .const BORDER_XPOS_LEFT = $18
  .const BORDER_XPOS_RIGHT = $158
  .const BORDER_YPOS_TOP = $32
  .const BORDER_YPOS_BOTTOM = $fa
  // The offset of the sprite pointers from the screen start address
  .const SPRITE_PTRS = $3f8
  .label SPRITES_XPOS = $d000
  .label SPRITES_YPOS = $d001
  .label SPRITES_XMSB = $d010
  .label RASTER = $d012
  .label SPRITES_ENABLE = $d015
  .label SPRITES_EXPAND_Y = $d017
  .label SPRITES_MC = $d01c
  .label SPRITES_EXPAND_X = $d01d
  .label SPRITES_COLS = $d027
  .label VIC_CONTROL = $d011
  // VIC II IRQ Status Register
  .label IRQ_STATUS = $d019
  // VIC II IRQ Enable Register
  .label IRQ_ENABLE = $d01a
  // Bits for the IRQ Status/Enable Registers
  .const IRQ_RASTER = 1
  // Color Ram
  .label COLS = $d800
  // CIA#1 Interrupt Status & Control Register
  .label CIA1_INTERRUPT = $dc0d
  // Value that disables all CIA interrupts when stored to the CIA Interrupt registers
  .const CIA_INTERRUPT_CLEAR = $7f
  // The vector used when the HARDWARE serves IRQ interrupts
  .label HARDWARE_IRQ = $fffe
  .const LIGHT_BLUE = $e
  // Address of the screen
  .label SCREEN = $400
  // Sprite data for the animating sprites
  .label SPRITE_DATA = $2000
  // Max number of chars processed at once
  .const NUM_PROCESSING = 8
  // Distance value meaning not found
  .const NOT_FOUND = $ff
  .const RASTER_IRQ_TOP = $30
  .const RASTER_IRQ_MIDDLE = $ff
  .const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
  .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
  .const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
  .const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
  .label heap_head = $30
  .label SCREEN_COPY = $34
  .label SCREEN_DIST = $36
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call malloc 
  // [243] phi from @1 to malloc [phi:@1->malloc]
malloc_from_b1:
  // [243] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#0] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp b3
  // @3
b3:
  // [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_COPY
  lda.z malloc.mem+1
  sta.z SCREEN_COPY+1
  // [4] call malloc 
  // [243] phi from @3 to malloc [phi:@3->malloc]
malloc_from_b3:
  // [243] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy 
  jsr malloc
  jmp b4
  // @4
b4:
  // [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_DIST
  lda.z malloc.mem+1
  sta.z SCREEN_DIST+1
  // [6] phi from @4 to @2 [phi:@4->@2]
b2_from_b4:
  jmp b2
  // @2
b2:
  // [7] call main 
  jsr main
  // [8] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
  jmp bend
  // @end
bend:
  // main
main: {
    .label _16 = $3e
    .label dst = 4
    .label src = 2
    .label i = 6
    .label center_x = $42
    .label center_y = $43
    .label center_dist = $44
    .label _26 = $3a
    .label _27 = $3b
    .label _28 = $3c
    .label _29 = $3d
    // [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z init_angle_screen.screen
    lda.z SCREEN_DIST+1
    sta.z init_angle_screen.screen+1
    // [10] call init_angle_screen 
    jsr init_angle_screen
    jmp b9
    // main::@9
  b9:
    // [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 
    lda.z SCREEN_COPY
    sta.z dst
    lda.z SCREEN_COPY+1
    sta.z dst+1
    // [12] phi from main::@9 to main::@2 [phi:main::@9->main::@2]
  b2_from_b9:
    // [12] phi (byte*) main::dst#4 = (byte*) main::dst#0 [phi:main::@9->main::@2#0] -- register_copy 
    // [12] phi (byte*) main::src#4 = (const byte*) SCREEN#0 [phi:main::@9->main::@2#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z src
    lda #>SCREEN
    sta.z src+1
    jmp b2
    // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    // [12] phi (byte*) main::dst#4 = (byte*) main::dst#1 [phi:main::@1->main::@2#0] -- register_copy 
    // [12] phi (byte*) main::src#4 = (byte*) main::src#1 [phi:main::@1->main::@2#1] -- register_copy 
    jmp b2
    // main::@2
  b2:
    // [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (src),y
    ldy #0
    sta (dst),y
    // [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 -- pbuz1=_inc_pbuz1 
    inc.z src
    bne !+
    inc.z src+1
  !:
    // [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp b1
  // Copy screen to screen copy
    // main::@1
  b1:
    // [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z src+1
    cmp #>SCREEN+$3e8
    bne b2_from_b1
    lda.z src
    cmp #<SCREEN+$3e8
    bne b2_from_b1
    // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  b3_from_b1:
    // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b3
  // Init processing array
    // [17] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
  b3_from_b3:
    // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy 
    jmp b3
    // main::@3
  b3:
    // [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _26
    // [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _26
    clc
    adc.z i
    sta.z _27
    // [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _27
    asl
    sta.z _28
    // [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _28
    clc
    adc.z i
    sta.z _29
    // [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _29
    asl
    sta.z _16
    // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 
    lda.z _16
    ldx #0
    tay
    txa
    sta PROCESSING,y
    // [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 
    lda.z _16
    ldx #0
    tay
    txa
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y
    // [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 
    lda.z _16
    ldx #0
    tay
    txa
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y
    // [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 
    lda.z _16
    ldx #0
    tay
    txa
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y
    // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z _16
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y
    // [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z _16
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y
    // [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z _16
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y
    // [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #STATUS_FREE
    ldy.z _16
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
    // [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuz1=pbuc2 
    ldy.z _16
    lda #<0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y
    lda #>0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y
    // [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne b3_from_b3
    // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [35] call initSprites 
    // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites]
  initSprites_from_b4:
    jsr initSprites
    // [36] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
  b10_from_b4:
    jmp b10
    // main::@10
  b10:
    // [37] call setupRasterIrq 
    jsr setupRasterIrq
    // [38] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5]
  b5_from_b10:
  b5_from_b6:
    jmp b5
  // Main loop
    // main::@5
  b5:
    // [39] call getCharToProcess 
    jsr getCharToProcess
    // [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_x_1
    sta.z getCharToProcess.return_x
    // [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_y_1
    sta.z getCharToProcess.return_y
    // [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_dist_1
    sta.z getCharToProcess.return_dist
    jmp b11
    // main::@11
  b11:
    // [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_x
    sta.z center_x
    // [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_y
    sta.z center_y
    // [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_dist
    sta.z center_dist
    // [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 
    lda #NOT_FOUND
    cmp.z center_dist
    bne b6
    jmp b7
    // main::@7
  b7:
    // [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 
    lda #'.'
    sta SCREEN+$3e7
    jmp b8
    // main::@8
  b8:
    // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp b8
    // main::@6
  b6:
    // [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuz2 
    lda.z center_x
    sta.z startProcessing.center_x
    // [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuz2 
    lda.z center_y
    sta.z startProcessing.center_y
    // [51] call startProcessing 
    // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
  startProcessing_from_b6:
    jsr startProcessing
    jmp b5_from_b6
}
  // startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($45) center_x, byte zeropage($46) center_y)
startProcessing: {
    .label _0 = $4c
    .label _1 = $52
    .label _5 = $5b
    .label _6 = $5d
    .label _8 = $60
    .label _9 = $62
    .label _11 = $64
    .label _12 = $66
    .label _13 = $68
    .label _15 = $6c
    .label _16 = $6e
    .label _17 = $70
    .label _22 = $75
    .label _23 = $76
    .label _30 = $4b
    .label _31 = $7c
    .label center_x = $45
    .label center_y = $46
    .label i = 8
    .label offset = $54
    .label colPtr = $56
    .label spriteCol = $58
    .label screenPtr = $59
    .label spriteData = $b
    .label ch = $5f
    .label chargenData = 9
    .label i1 = $d
    .label spriteX = $6a
    .label spriteY = $72
    .label spritePtr = $74
    .label freeIdx = 8
    .label freeIdx_6 = 7
    .label _42 = $47
    .label _43 = $48
    .label _44 = $49
    .label _45 = $4a
    .label _47 = $4e
    .label _48 = $50
    .label _50 = $78
    .label _51 = $79
    .label _52 = $7a
    .label _53 = $7b
    .label freeIdx_7 = 7
    // [53] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
  b1_from_startProcessing:
    // [53] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z freeIdx_6
    jmp b1
    // startProcessing::@1
  b1:
    // [54] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
  b2_from_b1:
    // [54] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b2
    // [54] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
  b2_from_b3:
    // [54] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy 
    jmp b2
    // startProcessing::@2
  b2:
    // [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _42
    // [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _42
    clc
    adc.z i
    sta.z _43
    // [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _43
    asl
    sta.z _44
    // [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _44
    clc
    adc.z i
    sta.z _45
    // [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _45
    asl
    sta.z _30
    // [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 
    lda #STATUS_FREE
    ldy.z _30
    cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
    bne b3
    // [61] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
  b4_from_b2:
  b4_from_b9:
    // [61] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy 
    jmp b4
    // startProcessing::@4
  b4:
    // [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 
    lda #$ff
    cmp.z freeIdx
    beq b8
    jmp b5
    // startProcessing::@5
  b5:
    // [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 
    lda.z center_y
    sta.z _0
    lda #0
    sta.z _0+1
    // [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z _0
    asl
    sta.z _47
    lda.z _0+1
    rol
    sta.z _47+1
    asl.z _47
    rol.z _47+1
    // [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz3 
    lda.z _47
    clc
    adc.z _0
    sta.z _48
    lda.z _47+1
    adc.z _0+1
    sta.z _48+1
    // [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z _48
    asl
    sta.z _1
    lda.z _48+1
    rol
    sta.z _1+1
    asl.z _1
    rol.z _1+1
    asl.z _1
    rol.z _1+1
    // [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz2_plus_vbuz3 
    lda.z center_x
    clc
    adc.z _1
    sta.z offset
    lda #0
    adc.z _1+1
    sta.z offset+1
    // [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z offset
    clc
    adc #<COLS
    sta.z colPtr
    lda.z offset+1
    adc #>COLS
    sta.z colPtr+1
    // [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (colPtr),y
    sta.z spriteCol
    // [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z offset
    clc
    adc #<SCREEN
    sta.z screenPtr
    lda.z offset+1
    adc #>SCREEN
    sta.z screenPtr+1
    // [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 
    lda.z freeIdx
    sta.z _5
    lda #0
    sta.z _5+1
    // [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz2_rol_6 
    lda.z _5
    asl
    sta.z _6
    lda.z _5+1
    rol
    sta.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    // [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z _6
    clc
    adc #<SPRITE_DATA
    sta.z spriteData
    lda.z _6+1
    adc #>SPRITE_DATA
    sta.z spriteData+1
    // [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (screenPtr),y
    sta.z ch
    // [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuz2 
    lda.z ch
    sta.z _8
    lda #0
    sta.z _8+1
    // [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z _8
    asl
    sta.z _9
    lda.z _8+1
    rol
    sta.z _9+1
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    // [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z _9
    clc
    adc #<CHARGEN
    sta.z chargenData
    lda.z _9+1
    adc #>CHARGEN
    sta.z chargenData+1
    // asm { sei  }
    sei
    // [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_CHARROM
    sta PROCPORT
    // [80] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
  b6_from_b5:
    // [80] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i1
    // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy 
    // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy 
    jmp b6
    // [80] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
  b6_from_b6:
    // [80] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy 
    // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy 
    // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy 
    jmp b6
    // startProcessing::@6
  b6:
    // [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (chargenData),y
    ldy #0
    sta (spriteData),y
    // [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 
    lda #3
    clc
    adc.z spriteData
    sta.z spriteData
    bcc !+
    inc.z spriteData+1
  !:
    // [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 
    inc.z chargenData
    bne !+
    inc.z chargenData+1
  !:
    // [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuz1=_inc_vbuz1 
    inc.z i1
    // [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuz1_neq_vbuc1_then_la1 
    lda #8
    cmp.z i1
    bne b6_from_b6
    jmp b7
    // startProcessing::@7
  b7:
    // [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // asm { cli  }
    cli
    // [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 
    lda.z center_x
    sta.z _11
    lda #0
    sta.z _11+1
    // [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z _11
    asl
    sta.z _12
    lda.z _11+1
    rol
    sta.z _12+1
    asl.z _12
    rol.z _12+1
    asl.z _12
    rol.z _12+1
    // [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz2 
    lda #BORDER_XPOS_LEFT
    clc
    adc.z _12
    sta.z _13
    lda #0
    adc.z _12+1
    sta.z _13+1
    // [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz2_rol_4 
    lda.z _13
    asl
    sta.z spriteX
    lda.z _13+1
    rol
    sta.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    // [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 
    lda.z center_y
    sta.z _15
    lda #0
    sta.z _15+1
    // [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z _15
    asl
    sta.z _16
    lda.z _15+1
    rol
    sta.z _16+1
    asl.z _16
    rol.z _16+1
    asl.z _16
    rol.z _16+1
    // [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz2 
    lda #BORDER_YPOS_TOP
    clc
    adc.z _16
    sta.z _17
    lda #0
    adc.z _16+1
    sta.z _17+1
    // [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz2_rol_4 
    lda.z _17
    asl
    sta.z spriteY
    lda.z _17+1
    rol
    sta.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    // [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z freeIdx
    axs #-[SPRITE_DATA/$40]
    stx.z spritePtr
    // [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuz1=vbuz2_rol_3 
    lda.z freeIdx
    asl
    asl
    asl
    sta.z _22
    // [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 -- vwuz1=_word_vbuz2 
    lda.z _22
    sta.z _23
    lda #0
    sta.z _23+1
    // [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z freeIdx
    asl
    sta.z _50
    // [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _50
    clc
    adc.z freeIdx
    sta.z _51
    // [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _51
    asl
    sta.z _52
    // [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _52
    clc
    adc.z freeIdx
    sta.z _53
    // [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _53
    asl
    sta.z _31
    // [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z _31
    lda.z spriteX
    sta PROCESSING,y
    lda.z spriteX+1
    sta PROCESSING+1,y
    // [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z _31
    lda.z spriteY
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y
    lda.z spriteY+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,y
    // [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z _31
    lda.z _23
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y
    lda.z _23+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,y
    // [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c -- pwuc1_derefidx_vbuz1=vbuc2 
    lda.z _31
    ldx #$3c
    tay
    txa
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y
    // [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z freeIdx
    ldy.z _31
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y
    // [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z spritePtr
    ldy.z _31
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y
    // [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z spriteCol
    ldy.z _31
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y
    // [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #STATUS_NEW
    ldy.z _31
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
    // [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuz1=pbuz2 
    ldy.z _31
    lda.z screenPtr
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y
    lda.z screenPtr+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y
    jmp breturn
    // startProcessing::@return
  breturn:
    // [113] return 
    rts
    // startProcessing::@8
  b8:
    // [114] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2 
    lda.z freeIdx
    sta.z freeIdx_7
    // [53] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
  b1_from_b8:
    // [53] phi (byte) startProcessing::freeIdx#6 = (byte~) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy 
    jmp b1
    // startProcessing::@3
  b3:
    // [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne b2_from_b3
    jmp b9
    // startProcessing::@9
  b9:
    // [117] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuz2 
    lda.z freeIdx_6
    sta.z freeIdx
    jmp b4_from_b9
}
  // getCharToProcess
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
getCharToProcess: {
    .label _8 = $7d
    .label _9 = $83
    .label _10 = $85
    .label return_x = $3f
    .label return_y = $40
    .label return_dist = $41
    .label screen_line = $e
    .label dist_line = $10
    .label x = $13
    .label dist = $17
    .label y = $12
    .label return_x_1 = $15
    .label return_y_1 = $16
    .label return_dist_1 = $17
    .label closest_dist = $14
    .label closest_x = $15
    .label closest_y = $16
    .label _12 = $7f
    .label _13 = $81
    .label return_dist_5 = $17
    .label return_dist_6 = $17
    .label return_x_7 = $15
    .label return_y_7 = $16
    // [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 
    lda.z SCREEN_COPY
    sta.z screen_line
    lda.z SCREEN_COPY+1
    sta.z screen_line+1
    // [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z dist_line
    lda.z SCREEN_DIST+1
    sta.z dist_line+1
    // [120] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
  b1_from_getCharToProcess:
    // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_y
    // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_x
    // [120] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [120] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND#0 [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 
    lda #NOT_FOUND
    sta.z closest_dist
    // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy 
    // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy 
    jmp b1
    // getCharToProcess::@1
  b1:
    // [121] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
  b2_from_b1:
    // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy 
    // [121] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp b2
    // getCharToProcess::@2
  b2:
    // [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 
    ldy.z x
    lda (screen_line),y
    cmp #' '
    beq b11
    jmp b4
    // getCharToProcess::@4
  b4:
    // [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuz1=pbuz2_derefidx_vbuz3 
    ldy.z x
    lda (dist_line),y
    sta.z dist
    // [124] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuz1_ge_vbuz2_then_la1 
    lda.z dist
    cmp.z closest_dist
    bcs b12
    jmp b5
    // getCharToProcess::@5
  b5:
    // [125] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuz2 
    lda.z x
    sta.z return_x_7
    // [126] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 
    lda.z y
    sta.z return_y_7
    // [127] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3]
  b3_from_b11:
  b3_from_b12:
  b3_from_b5:
    // [127] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy 
    // [127] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy 
    // [127] phi (byte) getCharToProcess::return_dist#1 = (byte~) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy 
    jmp b3
    // getCharToProcess::@3
  b3:
    // [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z x
    bne b10
    jmp b6
    // getCharToProcess::@6
  b6:
    // [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_line
    sta.z screen_line
    bcc !+
    inc.z screen_line+1
  !:
    // [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z dist_line
    sta.z dist_line
    bcc !+
    inc.z dist_line+1
  !:
    // [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 
    lda #$19
    cmp.z y
    bne b9
    jmp b7
    // getCharToProcess::@7
  b7:
    // [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND#0) goto getCharToProcess::@return -- vbuz1_eq_vbuc1_then_la1 
    lda #NOT_FOUND
    cmp.z return_dist_1
    beq breturn
    jmp b8
    // getCharToProcess::@8
  b8:
    // [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 
    lda.z return_y_1
    sta.z _8
    lda #0
    sta.z _8+1
    // [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z _8
    asl
    sta.z _12
    lda.z _8+1
    rol
    sta.z _12+1
    asl.z _12
    rol.z _12+1
    // [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz3 
    lda.z _12
    clc
    adc.z _8
    sta.z _13
    lda.z _12+1
    adc.z _8+1
    sta.z _13+1
    // [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z _13
    asl
    sta.z _9
    lda.z _13+1
    rol
    sta.z _9+1
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    // [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz3 
    lda.z SCREEN_COPY
    clc
    adc.z _9
    sta.z _10
    lda.z SCREEN_COPY+1
    adc.z _9+1
    sta.z _10+1
    // [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 
    // clear the found char on the screen copy
    lda #' '
    ldy.z return_x_1
    sta (_10),y
    jmp breturn
    // getCharToProcess::@return
  breturn:
    // [141] return 
    rts
    // getCharToProcess::@9
  b9:
    // [142] (byte~) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 
    lda.z return_dist_1
    sta.z closest_dist
    // [120] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
  b1_from_b9:
    // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy 
    // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy 
    // [120] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy 
    // [120] phi (byte) getCharToProcess::closest_dist#8 = (byte~) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy 
    // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy 
    // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy 
    jmp b1
    // getCharToProcess::@10
  b10:
    // [143] (byte~) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 
    lda.z return_dist_1
    sta.z closest_dist
    // [121] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
  b2_from_b10:
    // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte~) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy 
    // [121] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy 
    jmp b2
    // getCharToProcess::@12
  b12:
    // [144] (byte~) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 
    lda.z closest_dist
    sta.z return_dist_6
    jmp b3_from_b12
    // getCharToProcess::@11
  b11:
    // [145] (byte~) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 
    lda.z closest_dist
    sta.z return_dist_5
    jmp b3_from_b11
}
  // setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
    .label irqRoutine = irqTop
    // asm { sei  }
    sei
    // [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 
    // Disable CIA 1 Timer IRQ
    lda #CIA_INTERRUPT_CLEAR
    sta CIA1_INTERRUPT
    jmp b1
    // setupRasterIrq::@1
  b1:
    // [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 
    lda #$7f
    and VIC_CONTROL
    sta VIC_CONTROL
    jmp b2
    // setupRasterIrq::@2
  b2:
    // [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2 
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Enable Raster Interrupt
    lda #IRQ_RASTER
    sta IRQ_ENABLE
    // [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2 
    // Set the IRQ routine
    lda #<irqRoutine
    sta HARDWARE_IRQ
    lda #>irqRoutine
    sta HARDWARE_IRQ+1
    // asm { cli  }
    cli
    jmp breturn
    // setupRasterIrq::@return
  breturn:
    // [155] return 
    rts
}
  // initSprites
// Initialize sprites
initSprites: {
    .label sp = $18
    .label i = $1a
    // [157] phi from initSprites to initSprites::@2 [phi:initSprites->initSprites::@2]
  b2_from_initSprites:
    // [157] phi (byte*) initSprites::sp#4 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@2#0] -- pbuz1=pbuc1 
    lda #<SPRITE_DATA
    sta.z sp
    lda #>SPRITE_DATA
    sta.z sp+1
    jmp b2
    // [157] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2]
  b2_from_b1:
    // [157] phi (byte*) initSprites::sp#4 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@2#0] -- register_copy 
    jmp b2
    // initSprites::@2
  b2:
    // [158] *((byte*) initSprites::sp#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (sp),y
    // [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4 -- pbuz1=_inc_pbuz1 
    inc.z sp
    bne !+
    inc.z sp+1
  !:
    jmp b1
  // Clear sprite data
    // initSprites::@1
  b1:
    // [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 
    lda.z sp+1
    cmp #>SPRITE_DATA+NUM_PROCESSING*$40
    bcc b2_from_b1
    bne !+
    lda.z sp
    cmp #<SPRITE_DATA+NUM_PROCESSING*$40
    bcc b2_from_b1
  !:
    // [161] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
  b3_from_b1:
    // [161] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b3
  // Initialize sprite registers
    // [161] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
  b3_from_b3:
    // [161] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy 
    jmp b3
    // initSprites::@3
  b3:
    // [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #LIGHT_BLUE
    ldy.z i
    sta SPRITES_COLS,y
    // [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #8
    cmp.z i
    bne b3_from_b3
    jmp b4
    // initSprites::@4
  b4:
    // [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_MC
    // [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
    // [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_Y
    jmp breturn
    // initSprites::@return
  breturn:
    // [168] 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($38) screen)
init_angle_screen: {
    .label _3 = $87
    .label _4 = $88
    .label _7 = $8b
    .label _11 = $96
    .label _13 = $99
    .label _14 = $9a
    .label _15 = $9b
    .label screen = $38
    .label screen_topline = $1c
    .label screen_bottomline = $1e
    .label xw = $89
    .label yw = $8c
    .label angle_w = $94
    .label ang_w = $98
    .label x = $20
    .label xb = $21
    .label y = $1b
    // [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_topline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_topline+1
    // [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_bottomline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_bottomline+1
    // [171] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  b1_from_init_angle_screen:
    // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
    // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
    // [171] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    jmp b1
    // [171] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  b1_from_b4:
    // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy 
    // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy 
    // [171] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy 
    jmp b1
    // init_angle_screen::@1
  b1:
    // [172] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3]
  b3_from_b1:
    // [172] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [172] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp b3
    // [172] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3]
  b3_from_b2:
    // [172] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy 
    // [172] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy 
    jmp b3
    // init_angle_screen::@3
  b3:
    // [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z _3
    // [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$27
    sec
    sbc.z _3
    sta.z _4
    // [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
    lda.z _4
    ldy #0
    sta.z xw+1
    sty.z xw
    // [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y
    asl
    sta.z _7
    // [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
    lda.z _7
    ldy #0
    sta.z yw+1
    sty.z yw
    // [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 
    lda.z xw
    sta.z atan2_16.x
    lda.z xw+1
    sta.z atan2_16.x+1
    // [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 
    lda.z yw
    sta.z atan2_16.y
    lda.z yw+1
    sta.z atan2_16.y+1
    // [180] call atan2_16 
    jsr atan2_16
    // [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 
    lda.z atan2_16.return
    sta.z atan2_16.return_2
    lda.z atan2_16.return+1
    sta.z atan2_16.return_2+1
    jmp b5
    // init_angle_screen::@5
  b5:
    // [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 
    lda.z atan2_16.return_2
    sta.z angle_w
    lda.z atan2_16.return_2+1
    sta.z angle_w+1
    // [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 
    lda #$80
    clc
    adc.z angle_w
    sta.z _11
    lda #0
    adc.z angle_w+1
    sta.z _11+1
    // [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z _11+1
    sta.z ang_w
    // [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 
    lda.z ang_w
    eor #$ff
    clc
    adc #1
    sta.z _13
    // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z _13
    ldy.z xb
    sta (screen_topline),y
    // [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z ang_w
    axs #-[$80]
    stx.z _14
    // [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z _14
    ldy.z x
    sta (screen_topline),y
    // [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$80
    sec
    sbc.z ang_w
    sta.z _15
    // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z _15
    ldy.z x
    sta (screen_bottomline),y
    // [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 
    dec.z xb
    jmp b2
    // init_angle_screen::@2
  b2:
    // [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc b3_from_b2
    jmp b4
    // init_angle_screen::@4
  b4:
    // [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_topline
    sec
    sbc #<$28
    sta.z screen_topline
    lda.z screen_topline+1
    sbc #>$28
    sta.z screen_topline+1
    // [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_bottomline
    sta.z screen_bottomline
    bcc !+
    inc.z screen_bottomline+1
  !:
    // [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne b1_from_b4
    jmp breturn
    // init_angle_screen::@return
  breturn:
    // [199] 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($8e) x, signed word zeropage($90) y)
atan2_16: {
    .label _2 = $22
    .label _7 = $24
    .label _23 = $9d
    .label _24 = $9c
    .label yi = $22
    .label xi = $24
    .label angle = $29
    .label xd = $2e
    .label yd = $2c
    .label shift = $2b
    .label angle_2 = $27
    .label angle_3 = $27
    .label i = $26
    .label return = $29
    .label x = $8e
    .label y = $90
    .label return_2 = $92
    .label angle_6 = $27
    .label angle_12 = $27
    .label angle_13 = $27
    // [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
    lda.z y+1
    bpl b1
    jmp b2
    // atan2_16::@2
  b2:
    // [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z y
    sta.z _2
    lda #0
    sbc.z y+1
    sta.z _2+1
    // [202] 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:
    // [202] 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:
    // [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
    lda.z x+1
    bpl b4
    jmp b5
    // atan2_16::@5
  b5:
    // [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z x
    sta.z _7
    lda #0
    sbc.z x+1
    sta.z _7+1
    // [205] 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:
    // [205] 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:
    // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  b10_from_b6:
    // [206] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z angle_12
    lda #>0
    sta.z angle_12+1
    // [206] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [206] 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:
    // [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
    lda.z yi+1
    bne b11
    lda.z yi
    bne b11
    // [208] 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:
    // [208] 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:
    // [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
    lda.z angle_6+1
    lsr
    sta.z angle+1
    lda.z angle_6
    ror
    sta.z angle
    // [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
    lda.z x+1
    bpl b7_from_b12
    jmp b21
    // atan2_16::@21
  b21:
    // [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
    sec
    lda #<$8000
    sbc.z angle
    sta.z angle
    lda #>$8000
    sbc.z angle+1
    sta.z angle+1
    // [212] 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:
    // [212] 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:
    // [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
    lda.z y+1
    bpl b8_from_b7
    jmp b9
    // atan2_16::@9
  b9:
    // [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
    sec
    lda #0
    sbc.z angle
    sta.z angle
    lda #0
    sbc.z angle+1
    sta.z angle+1
    // [215] 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:
    // [215] 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:
    // [216] return 
    rts
    // atan2_16::@11
  b11:
    // [217] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 
    lda.z i
    sta.z shift
    // [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
    lda.z xi
    sta.z xd
    lda.z xi+1
    sta.z xd+1
    // [219] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
    lda.z yi
    sta.z yd
    lda.z yi+1
    sta.z yd+1
    // [220] 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:
    // [220] 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 
    // [220] 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 
    // [220] 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:
    // [221] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 
    lda.z shift
    cmp #2
    bcs b14
    jmp b15
    // atan2_16::@15
  b15:
    // [222] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 
    lda #0
    cmp.z shift
    beq b17_from_b15
    jmp b16
    // atan2_16::@16
  b16:
    // [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    // [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    // [225] 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:
    // [225] 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 
    // [225] 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:
    // [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
    lda.z yi+1
    bpl b18
    jmp b20
    // atan2_16::@20
  b20:
    // [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z xi
    sec
    sbc.z yd
    sta.z xi
    lda.z xi+1
    sbc.z yd+1
    sta.z xi+1
    // [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z yi
    clc
    adc.z xd
    sta.z yi
    lda.z yi+1
    adc.z xd+1
    sta.z yi+1
    // [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _24
    // [230] (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.z _24
    sec
    lda.z angle_3
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_3
    lda.z angle_3+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_3+1
    // [231] 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:
    // [231] 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 
    // [231] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [231] 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:
    // [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [233] 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.z i
    beq b12_from_b19
    // [206] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  b10_from_b19:
    // [206] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [206] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [206] 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:
    // [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z xi
    clc
    adc.z yd
    sta.z xi
    lda.z xi+1
    adc.z yd+1
    sta.z xi+1
    // [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z yi
    sec
    sbc.z xd
    sta.z yi
    lda.z yi+1
    sbc.z xd+1
    sta.z yi+1
    // [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _23
    // [237] (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.z _23
    clc
    lda.z angle_2
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_2
    lda.z angle_2+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_2+1
    jmp b19_from_b18
    // atan2_16::@14
  b14:
    // [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    // [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    // [240] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 
    dec.z shift
    dec.z shift
    jmp b13_from_b14
    // atan2_16::@4
  b4:
    // [241] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
    lda.z x
    sta.z xi
    lda.z x+1
    sta.z xi+1
    jmp b6_from_b4
    // atan2_16::@1
  b1:
    // [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
    lda.z y
    sta.z yi
    lda.z y+1
    sta.z yi+1
    jmp b3_from_b1
}
  // malloc
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
malloc: {
    .label mem = $9e
    // [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 
    lda.z heap_head
    sec
    sbc #<$3e8
    sta.z mem
    lda.z heap_head+1
    sbc #>$3e8
    sta.z mem+1
    // [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
    lda.z mem
    sta.z heap_head
    lda.z mem+1
    sta.z heap_head+1
    jmp breturn
    // malloc::@return
  breturn:
    // [246] return 
    rts
}
  // irqBottom
// Raster Interrupt at the bottom of the screen
irqBottom: {
    // entry interrupt(HARDWARE_ALL)
    sta rega+1
    stx regx+1
    sty regy+1
    // [248] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
  b1_from_irqBottom:
    jmp b1
    // irqBottom::@1
  b1:
    // [249] call processChars 
    // [254] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
  processChars_from_b1:
    jsr processChars
    jmp b2
    // irqBottom::@2
  b2:
    // [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the top of the screen
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [251] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 
    lda #<irqTop
    sta HARDWARE_IRQ
    lda #>irqTop
    sta HARDWARE_IRQ+1
    // [252] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp breturn
    // irqBottom::@return
  breturn:
    // [253] return  - exit interrupt(HARDWARE_ALL)
  rega:
    lda #00
  regx:
    ldx #00
  regy:
    ldy #00
    rti
}
  // processChars
// Process any chars in the PROCESSING array
processChars: {
    .label _11 = $aa
    .label _12 = $ab
    .label _14 = $ad
    .label _15 = $ae
    .label _17 = $ac
    .label _25 = $b1
    .label _26 = $b3
    .label _30 = $b6
    .label _33 = $b9
    .label _37 = $a4
    .label _38 = $b5
    .label _39 = $b8
    .label processing = $a5
    .label bitmask = $a7
    .label i = $32
    .label xpos = $a8
    .label ypos = $b0
    .label xchar = $b4
    .label ychar = $b7
    .label numActive = $33
    .label _67 = $a0
    .label _68 = $a1
    .label _69 = $a2
    .label _70 = $a3
    // [255] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
  b1_from_processChars:
    // [255] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z numActive
    // [255] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b1
    // [255] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
  b1_from_b2:
    // [255] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy 
    // [255] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy 
    jmp b1
    // processChars::@1
  b1:
    // [256] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _67
    // [257] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _67
    clc
    adc.z i
    sta.z _68
    // [258] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _68
    asl
    sta.z _69
    // [259] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z _69
    clc
    adc.z i
    sta.z _70
    // [260] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _70
    asl
    sta.z _37
    // [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37 -- pssz1=pssc1_plus_vbuz2 
    lda.z _37
    clc
    adc #<PROCESSING
    sta.z processing
    lda #>PROCESSING
    adc #0
    sta.z processing+1
    // [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    lda (processing),y
    tax
    lda #1
    cpx #0
    beq !e+
  !:
    asl
    dex
    bne !-
  !e:
    sta.z bitmask
    // [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    lda (processing),y
    cmp #STATUS_FREE
    beq b2_from_b1
    jmp b10
    // processChars::@10
  b10:
    // [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    lda (processing),y
    cmp #STATUS_NEW
    bne b3
    jmp b11
    // processChars::@11
  b11:
    // [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_pptz1_derefidx_vbuc1=vbuc2 
    // Clear the char on the screen
    ldx #' '
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
    lda (processing),y
    sta !++1
    iny
    lda (processing),y
    sta !++2
    txa
  !:
    sta $ffff
    // [266] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    // Enable the sprite
    lda SPRITES_ENABLE
    ora.z bitmask
    sta SPRITES_ENABLE
    // [267] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_pbuz1_derefidx_vbuc2=pbuz1_derefidx_vbuc3 
    // Set the sprite color
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    pha
    lda (processing),y
    tay
    pla
    sta SPRITES_COLS,y
    // [268] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_pbuz1_derefidx_vbuc2=pbuz1_derefidx_vbuc3 
    // Set sprite pointer
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    pha
    lda (processing),y
    tay
    pla
    sta SCREEN+SPRITE_PTRS,y
    // [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 
    // Set status
    lda #STATUS_PROCESSING
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    sta (processing),y
    jmp b3
    // processChars::@3
  b3:
    // [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 
    ldy #0
    lda (processing),y
    sta.z xpos
    iny
    lda (processing),y
    sta.z xpos+1
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    // [271] (byte~) processChars::$11 ← > (word) processChars::xpos#0 -- vbuz1=_hi_vwuz2 
    lda.z xpos+1
    sta.z _11
    // [272] if((byte) 0!=(byte~) processChars::$11) goto processChars::@4 -- vbuc1_neq_vbuz1_then_la1 
    // Set sprite position
    lda #0
    cmp.z _11
    bne b4
    jmp b8
    // processChars::@8
  b8:
    // [273] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 
    lda #$ff
    eor.z bitmask
    sta.z _12
    // [274] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 
    lda SPRITES_XMSB
    and.z _12
    sta SPRITES_XMSB
    jmp b5
    // processChars::@5
  b5:
    // [275] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _17
    // [276] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0 -- vbuz1=_byte_vwuz2 
    lda.z xpos
    sta.z _14
    // [277] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$17) ← (byte~) processChars::$14 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z _14
    ldy.z _17
    sta SPRITES_XPOS,y
    // [278] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    lda (processing),y
    sta.z _15
    iny
    lda (processing),y
    sta.z _15+1
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    // [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15 -- vbuz1=_byte_vwuz2 
    lda.z _15
    sta.z ypos
    // [280] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$17) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z ypos
    ldy.z _17
    sta SPRITES_YPOS,y
    // [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 
    // Move sprite
    ldy #1
    lda (processing),y
    cmp #>XPOS_LEFTMOST
    bcc b6
    bne !+
    dey
    lda (processing),y
    cmp #<XPOS_LEFTMOST
    bcc b6
  !:
    jmp b14
    // processChars::@14
  b14:
    // [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 
    ldy #1
    lda #>XPOS_RIGHTMOST
    cmp (processing),y
    bcc b6
    bne !+
    dey
    lda #<XPOS_RIGHTMOST
    cmp (processing),y
    bcc b6
  !:
    jmp b13
    // processChars::@13
  b13:
    // [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    iny
    lda (processing),y
    cmp #>YPOS_TOPMOST
    bcc b6
    bne !+
    dey
    lda (processing),y
    cmp #<YPOS_TOPMOST
    bcc b6
  !:
    jmp b12
    // processChars::@12
  b12:
    // [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    iny
    lda #>YPOS_BOTTOMMOST
    cmp (processing),y
    bcc b6
    bne !+
    dey
    lda #<YPOS_BOTTOMMOST
    cmp (processing),y
    bcc b6
  !:
    jmp b9
    // processChars::@9
  b9:
    // [285] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz2_ror_3 
    lda.z xpos+1
    lsr
    sta.z _25+1
    lda.z xpos
    ror
    sta.z _25
    lsr.z _25+1
    ror.z _25
    lsr.z _25+1
    ror.z _25
    // [286] (byte~) processChars::$26 ← (byte)(word~) processChars::$25 -- vbuz1=_byte_vwuz2 
    lda.z _25
    sta.z _26
    // [287] (byte) processChars::xchar#0 ← (byte~) processChars::$26 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 
    lax.z _26
    axs #BORDER_XPOS_LEFT/8
    stx.z xchar
    // [288] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z xchar
    asl
    sta.z _38
    // [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 
    ldx.z _38
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
    clc
    lda (processing),y
    adc VXSIN,x
    sta (processing),y
    iny
    lda (processing),y
    adc VXSIN+1,x
    sta (processing),y
    // [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
    sty.z $ff
    clc
    lda (processing),y
    ldy #0
    adc (processing),y
    sta (processing),y
    ldy.z $ff
    iny
    lda (processing),y
    ldy #1
    adc (processing),y
    sta (processing),y
    // [291] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    sta.z _30
    // [292] (byte) processChars::ychar#0 ← (byte~) processChars::$30 - (const byte) BORDER_YPOS_TOP#0/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 
    lax.z _30
    axs #BORDER_YPOS_TOP/8
    stx.z ychar
    // [293] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z ychar
    asl
    sta.z _39
    // [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 
    ldx.z _39
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
    clc
    lda (processing),y
    adc VYSIN,x
    sta (processing),y
    iny
    lda (processing),y
    adc VYSIN+1,x
    sta (processing),y
    // [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
    clc
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    adc (processing),y
    sta (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY+1
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y+1
    adc (processing),y
    sta (processing),y
    jmp b7
    // processChars::@7
  b7:
    // [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 
    inc.z numActive
    // [297] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
  b2_from_b1:
  b2_from_b7:
    // [297] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy 
    jmp b2
    // processChars::@2
  b2:
    // [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne b1_from_b2
    jmp breturn
    // processChars::@return
  breturn:
    // [300] return 
    rts
    // processChars::@6
  b6:
    // [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 
    // Set status to FREE
    lda #STATUS_FREE
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    sta (processing),y
    // [302] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 
    lda #$ff
    eor.z bitmask
    sta.z _33
    // [303] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 
    // Disable the sprite
    lda SPRITES_ENABLE
    and.z _33
    sta SPRITES_ENABLE
    jmp b7
    // processChars::@4
  b4:
    // [304] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    lda SPRITES_XMSB
    ora.z bitmask
    sta SPRITES_XMSB
    jmp b5
}
  // irqTop
// Raster Interrupt at the top of the screen
irqTop: {
    // entry interrupt(HARDWARE_ALL)
    sta rega+1
    stx regx+1
    sty regy+1
    jmp b1
    // irqTop::@1
  b1:
    // [306] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the middle of the screen
    lda #RASTER_IRQ_MIDDLE
    sta RASTER
    // [307] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 
    lda #<irqBottom
    sta HARDWARE_IRQ
    lda #>irqBottom
    sta HARDWARE_IRQ+1
    // [308] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp breturn
    // irqTop::@return
  breturn:
    // [309] return  - exit interrupt(HARDWARE_ALL)
  rega:
    lda #00
  regx:
    ldx #00
  regy:
    ldy #00
    rti
}
  // File Data
  // 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

  // Values added to VX
VXSIN:
.for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }

  // Values added to VY
VYSIN:
.for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }

  // Sprites currently being processed in the interrupt
  PROCESSING: .fill $e*NUM_PROCESSING, 0

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 heap_head#1 ] (  [ SCREEN_COPY#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 SCREEN_DIST#0 ] (  [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a 
Statement [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ) always clobbers reg byte a 
Statement [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ) always clobbers reg byte a reg byte y 
Statement [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ) always clobbers reg byte a 
Statement [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Statement [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a 
Statement [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a 
Statement [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a 
Statement [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:62 [ main::$16 ]
Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a 
Statement [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a 
Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:69 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:70 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Statement [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ) always clobbers reg byte a 
Statement [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ) always clobbers reg byte a 
Statement [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ) always clobbers reg byte a 
Statement [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ) always clobbers reg byte a 
Statement [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a 
Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a 
Statement [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ) always clobbers reg byte a 
Statement [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ) always clobbers reg byte a 
Statement [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a 
Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a 
Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a 
Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:69 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:70 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ]
Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a 
Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a 
Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a 
Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ]
Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a 
Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a 
Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a 
Statement [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a 
Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a 
Statement [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a 
Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a 
Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a 
Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a 
Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a 
Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a 
Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a 
Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a 
Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a 
Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a 
Statement [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ]
Statement [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ) always clobbers reg byte a 
Statement [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ) always clobbers reg byte a 
Statement [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ) always clobbers reg byte a 
Statement [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ) always clobbers reg byte a 
Statement [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ) always clobbers reg byte a 
Statement [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:124 [ startProcessing::$31 ]
Statement [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a 
Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a 
Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a 
Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a 
Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a 
Statement [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a 
Statement [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a 
Statement [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a 
Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a 
Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a 
Statement [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [158] *((byte*) initSprites::sp#4) ← (byte) 0 [ initSprites::sp#4 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#4 ] ) always clobbers reg byte a reg byte y 
Statement [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 [ initSprites::sp#1 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#1 ] ) always clobbers reg byte a 
Statement [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ]
Statement [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [169] (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:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [170] (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:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Statement [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Statement [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ]
Statement [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ]
Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y 
Statement [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [203] 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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [204] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [207] 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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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:38 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [209] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [218] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [219] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [223] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [224] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [226] 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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [227] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [228] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [229] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$24 ] ) always clobbers reg byte a 
Statement [230] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [234] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [235] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [236] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [237] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [238] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [239] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [241] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [242] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a 
Statement [245] (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 ] ) always clobbers reg byte a 
Statement [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [251] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] (  [ ] ) always clobbers reg byte a 
Statement [252] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [253] return  [ ] (  [ ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [256] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$67 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$67 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Statement [257] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$68 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$68 ] ) always clobbers reg byte a 
Statement [258] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$69 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$69 ] ) always clobbers reg byte a 
Statement [259] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$70 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$70 ] ) always clobbers reg byte a 
Statement [260] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$37 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$37 ] ) always clobbers reg byte a 
Statement [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a 
Statement [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Statement [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:167 [ processChars::bitmask#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:167 [ processChars::bitmask#0 ]
Statement [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y 
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:167 [ processChars::bitmask#0 ]
Statement [266] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a 
Statement [267] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [268] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y 
Statement [271] (byte~) processChars::$11 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$11 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$11 ] ) always clobbers reg byte a 
Statement [273] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ) always clobbers reg byte a 
Statement [274] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [275] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 ] ) always clobbers reg byte a 
Statement [276] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$14 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$14 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:172 [ processChars::$17 ]
Statement [278] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$15 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$15 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:172 [ processChars::$17 ]
Statement [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::ypos#0 ] ) always clobbers reg byte a 
Statement [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:176 [ processChars::ypos#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:176 [ processChars::ypos#0 ]
Statement [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [285] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$25 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$25 ] ) always clobbers reg byte a 
Statement [286] (byte~) processChars::$26 ← (byte)(word~) processChars::$25 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ) always clobbers reg byte a 
Statement [288] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$38 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$38 ] ) always clobbers reg byte a 
Statement [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [291] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] ) always clobbers reg byte a 
Statement [293] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$39 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$39 ] ) always clobbers reg byte a 
Statement [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y 
Statement [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y 
Statement [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:249 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a 
Statement [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [302] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$33 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$33 ] ) always clobbers reg byte a 
Statement [303] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33 [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a 
Statement [304] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [306] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [307] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] (  [ ] ) always clobbers reg byte a 
Statement [308] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [309] return  [ ] (  [ ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 heap_head#1 ] (  [ SCREEN_COPY#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_COPY#0 SCREEN_DIST#0 ] (  [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a 
Statement [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ) always clobbers reg byte a 
Statement [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#4 main::dst#4 ] ) always clobbers reg byte a reg byte y 
Statement [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#1 main::dst#1 ] ) always clobbers reg byte a 
Statement [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$26 ] ) always clobbers reg byte a 
Statement [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$27 ] ) always clobbers reg byte a 
Statement [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$28 ] ) always clobbers reg byte a 
Statement [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$29 ] ) always clobbers reg byte a 
Statement [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$16 ] ) always clobbers reg byte a 
Statement [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ) always clobbers reg byte a 
Statement [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a 
Statement [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a 
Statement [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$43 ] ) always clobbers reg byte a 
Statement [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$44 ] ) always clobbers reg byte a 
Statement [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$45 ] ) always clobbers reg byte a 
Statement [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ) always clobbers reg byte a 
Statement [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a 
Statement [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a 
Statement [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$47 ] ) always clobbers reg byte a 
Statement [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$48 ] ) always clobbers reg byte a 
Statement [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a 
Statement [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ) always clobbers reg byte a 
Statement [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ) always clobbers reg byte a 
Statement [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ) always clobbers reg byte a reg byte y 
Statement [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a 
Statement [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a 
Statement [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$6 ] ) always clobbers reg byte a 
Statement [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a 
Statement [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y 
Statement [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a 
Statement [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$9 ] ) always clobbers reg byte a 
Statement [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a 
Statement [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a 
Statement [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y 
Statement [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a 
Statement [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ) always clobbers reg byte a 
Statement [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a 
Statement [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a 
Statement [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ) always clobbers reg byte a 
Statement [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a 
Statement [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a 
Statement [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a 
Statement [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ) always clobbers reg byte a 
Statement [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a 
Statement [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a 
Statement [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a 
Statement [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 ] ) always clobbers reg byte a 
Statement [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$50 ] ) always clobbers reg byte a 
Statement [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$51 ] ) always clobbers reg byte a 
Statement [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$52 ] ) always clobbers reg byte a 
Statement [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$53 ] ) always clobbers reg byte a 
Statement [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$23 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$31 ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:51 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a 
Statement [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a 
Statement [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a 
Statement [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a 
Statement [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a 
Statement [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ) always clobbers reg byte a 
Statement [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ) always clobbers reg byte a 
Statement [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 getCharToProcess::$12 ] ) always clobbers reg byte a 
Statement [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ) always clobbers reg byte a 
Statement [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a 
Statement [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a 
Statement [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:39 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a 
Statement [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:37 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [158] *((byte*) initSprites::sp#4) ← (byte) 0 [ initSprites::sp#4 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#4 ] ) always clobbers reg byte a reg byte y 
Statement [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 [ initSprites::sp#1 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#1 ] ) always clobbers reg byte a 
Statement [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a 
Statement [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:7::initSprites:35 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [169] (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:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [170] (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:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y 
Statement [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:10 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [203] 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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [204] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [207] 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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [209] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [218] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [219] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [223] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [224] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [226] 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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [227] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [228] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [229] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$24 ] ) always clobbers reg byte a 
Statement [230] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [234] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [235] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [236] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [237] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [238] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [239] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [241] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [242] (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:7::init_angle_screen:10::atan2_16:180 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] ) always clobbers reg byte a 
Statement [245] (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 ] ) always clobbers reg byte a 
Statement [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [251] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] (  [ ] ) always clobbers reg byte a 
Statement [252] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [253] return  [ ] (  [ ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [256] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$67 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$67 ] ) always clobbers reg byte a 
Statement [257] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$68 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$68 ] ) always clobbers reg byte a 
Statement [258] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$69 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$69 ] ) always clobbers reg byte a 
Statement [259] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$70 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$70 ] ) always clobbers reg byte a 
Statement [260] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$37 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$37 ] ) always clobbers reg byte a 
Statement [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a 
Statement [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [266] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a 
Statement [267] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [268] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y 
Statement [271] (byte~) processChars::$11 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$11 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$11 ] ) always clobbers reg byte a 
Statement [273] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ) always clobbers reg byte a 
Statement [274] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [275] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 ] ) always clobbers reg byte a 
Statement [276] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$14 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$14 ] ) always clobbers reg byte a 
Statement [278] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$15 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::$15 ] ) always clobbers reg byte a reg byte y 
Statement [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$17 processChars::ypos#0 ] ) always clobbers reg byte a 
Statement [280] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$17) ← (byte) processChars::ypos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a 
Statement [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [285] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$25 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$25 ] ) always clobbers reg byte a 
Statement [286] (byte~) processChars::$26 ← (byte)(word~) processChars::$25 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ) always clobbers reg byte a 
Statement [288] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$38 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$38 ] ) always clobbers reg byte a 
Statement [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [291] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] ) always clobbers reg byte a 
Statement [293] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$39 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$39 ] ) always clobbers reg byte a 
Statement [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y 
Statement [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y 
Statement [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:249 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a 
Statement [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [302] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$33 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::$33 ] ) always clobbers reg byte a 
Statement [303] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33 [ processChars::i#10 processChars::numActive#10 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a 
Statement [304] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:249 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [306] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [307] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] (  [ ] ) always clobbers reg byte a 
Statement [308] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] (  [ ] ) always clobbers reg byte a 
Statement [309] return  [ ] (  [ ] ) always clobbers reg byte a reg byte x reg byte y 
Potential registers zp ZP_WORD:2 [ main::src#4 main::src#1 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] : zp ZP_WORD:4 , 
Potential registers zp ZP_BYTE:6 [ main::i#2 main::i#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] : zp ZP_BYTE:8 , reg byte x , 
Potential registers zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] : zp ZP_WORD:9 , 
Potential registers zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] : zp ZP_WORD:11 , 
Potential registers zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] : zp ZP_BYTE:13 , reg byte x , 
Potential registers zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] : zp ZP_WORD:14 , 
Potential registers zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] : zp ZP_WORD:16 , 
Potential registers zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] : zp ZP_BYTE:18 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] : zp ZP_BYTE:19 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] : zp ZP_WORD:24 , 
Potential registers zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:27 , reg byte x , 
Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:28 , 
Potential registers zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:30 , 
Potential registers zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:32 , reg byte x , 
Potential registers zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:33 , reg byte x , 
Potential registers zp ZP_WORD:34 [ 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 , 
Potential registers zp ZP_WORD:36 [ 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 ] : zp ZP_WORD:36 , 
Potential registers zp ZP_BYTE:38 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp ZP_WORD:39 , 
Potential registers zp ZP_WORD:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp ZP_WORD:41 , 
Potential registers zp ZP_BYTE:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp ZP_BYTE:43 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp ZP_WORD:44 , 
Potential registers zp ZP_WORD:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp ZP_WORD:46 , 
Potential registers zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] : zp ZP_WORD:48 , 
Potential registers zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] : zp ZP_BYTE:50 , 
Potential registers zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] : zp ZP_BYTE:51 , 
Potential registers zp ZP_WORD:52 [ SCREEN_COPY#0 ] : zp ZP_WORD:52 , 
Potential registers zp ZP_WORD:54 [ SCREEN_DIST#0 ] : zp ZP_WORD:54 , 
Potential registers zp ZP_WORD:56 [ init_angle_screen::screen#0 ] : zp ZP_WORD:56 , 
Potential registers zp ZP_BYTE:58 [ main::$26 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:59 [ main::$27 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:60 [ main::$28 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:61 [ main::$29 ] : zp ZP_BYTE:61 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:62 [ main::$16 ] : zp ZP_BYTE:62 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:66 [ main::center_x#0 ] : zp ZP_BYTE:66 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:67 [ main::center_y#0 ] : zp ZP_BYTE:67 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:68 [ main::center_dist#0 ] : zp ZP_BYTE:68 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:69 [ startProcessing::center_x#0 ] : zp ZP_BYTE:69 , reg byte x , 
Potential registers zp ZP_BYTE:70 [ startProcessing::center_y#0 ] : zp ZP_BYTE:70 , reg byte x , 
Potential registers zp ZP_BYTE:71 [ startProcessing::$42 ] : zp ZP_BYTE:71 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:72 [ startProcessing::$43 ] : zp ZP_BYTE:72 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:73 [ startProcessing::$44 ] : zp ZP_BYTE:73 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:74 [ startProcessing::$45 ] : zp ZP_BYTE:74 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:75 [ startProcessing::$30 ] : zp ZP_BYTE:75 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:76 [ startProcessing::$0 ] : zp ZP_WORD:76 , 
Potential registers zp ZP_WORD:78 [ startProcessing::$47 ] : zp ZP_WORD:78 , 
Potential registers zp ZP_WORD:80 [ startProcessing::$48 ] : zp ZP_WORD:80 , 
Potential registers zp ZP_WORD:82 [ startProcessing::$1 ] : zp ZP_WORD:82 , 
Potential registers zp ZP_WORD:84 [ startProcessing::offset#0 ] : zp ZP_WORD:84 , 
Potential registers zp ZP_WORD:86 [ startProcessing::colPtr#0 ] : zp ZP_WORD:86 , 
Potential registers zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] : zp ZP_BYTE:88 , reg byte x , 
Potential registers zp ZP_WORD:89 [ startProcessing::screenPtr#0 ] : zp ZP_WORD:89 , 
Potential registers zp ZP_WORD:91 [ startProcessing::$5 ] : zp ZP_WORD:91 , 
Potential registers zp ZP_WORD:93 [ startProcessing::$6 ] : zp ZP_WORD:93 , 
Potential registers zp ZP_BYTE:95 [ startProcessing::ch#0 ] : zp ZP_BYTE:95 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:96 [ startProcessing::$8 ] : zp ZP_WORD:96 , 
Potential registers zp ZP_WORD:98 [ startProcessing::$9 ] : zp ZP_WORD:98 , 
Potential registers zp ZP_WORD:100 [ startProcessing::$11 ] : zp ZP_WORD:100 , 
Potential registers zp ZP_WORD:102 [ startProcessing::$12 ] : zp ZP_WORD:102 , 
Potential registers zp ZP_WORD:104 [ startProcessing::$13 ] : zp ZP_WORD:104 , 
Potential registers zp ZP_WORD:106 [ startProcessing::spriteX#0 ] : zp ZP_WORD:106 , 
Potential registers zp ZP_WORD:108 [ startProcessing::$15 ] : zp ZP_WORD:108 , 
Potential registers zp ZP_WORD:110 [ startProcessing::$16 ] : zp ZP_WORD:110 , 
Potential registers zp ZP_WORD:112 [ startProcessing::$17 ] : zp ZP_WORD:112 , 
Potential registers zp ZP_WORD:114 [ startProcessing::spriteY#0 ] : zp ZP_WORD:114 , 
Potential registers zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] : zp ZP_BYTE:116 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:117 [ startProcessing::$22 ] : zp ZP_BYTE:117 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:118 [ startProcessing::$23 ] : zp ZP_WORD:118 , 
Potential registers zp ZP_BYTE:120 [ startProcessing::$50 ] : zp ZP_BYTE:120 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:121 [ startProcessing::$51 ] : zp ZP_BYTE:121 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:122 [ startProcessing::$52 ] : zp ZP_BYTE:122 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:123 [ startProcessing::$53 ] : zp ZP_BYTE:123 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:124 [ startProcessing::$31 ] : zp ZP_BYTE:124 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:125 [ getCharToProcess::$8 ] : zp ZP_WORD:125 , 
Potential registers zp ZP_WORD:127 [ getCharToProcess::$12 ] : zp ZP_WORD:127 , 
Potential registers zp ZP_WORD:129 [ getCharToProcess::$13 ] : zp ZP_WORD:129 , 
Potential registers zp ZP_WORD:131 [ getCharToProcess::$9 ] : zp ZP_WORD:131 , 
Potential registers zp ZP_WORD:133 [ getCharToProcess::$10 ] : zp ZP_WORD:133 , 
Potential registers zp ZP_BYTE:135 [ init_angle_screen::$3 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:136 [ init_angle_screen::$4 ] : zp ZP_BYTE:136 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:137 [ init_angle_screen::xw#0 ] : zp ZP_WORD:137 , 
Potential registers zp ZP_BYTE:139 [ init_angle_screen::$7 ] : zp ZP_BYTE:139 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:140 [ init_angle_screen::yw#0 ] : zp ZP_WORD:140 , 
Potential registers zp ZP_WORD:142 [ atan2_16::x#0 ] : zp ZP_WORD:142 , 
Potential registers zp ZP_WORD:144 [ atan2_16::y#0 ] : zp ZP_WORD:144 , 
Potential registers zp ZP_WORD:146 [ atan2_16::return#2 ] : zp ZP_WORD:146 , 
Potential registers zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:148 , 
Potential registers zp ZP_WORD:150 [ init_angle_screen::$11 ] : zp ZP_WORD:150 , 
Potential registers zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:152 , reg byte x , 
Potential registers zp ZP_BYTE:153 [ init_angle_screen::$13 ] : zp ZP_BYTE:153 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:154 [ init_angle_screen::$14 ] : zp ZP_BYTE:154 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:155 [ init_angle_screen::$15 ] : zp ZP_BYTE:155 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:156 [ atan2_16::$24 ] : zp ZP_BYTE:156 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:157 [ atan2_16::$23 ] : zp ZP_BYTE:157 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:158 [ malloc::mem#0 ] : zp ZP_WORD:158 , 
Potential registers zp ZP_BYTE:160 [ processChars::$67 ] : zp ZP_BYTE:160 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:161 [ processChars::$68 ] : zp ZP_BYTE:161 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:162 [ processChars::$69 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:163 [ processChars::$70 ] : zp ZP_BYTE:163 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:164 [ processChars::$37 ] : zp ZP_BYTE:164 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:165 [ processChars::processing#0 ] : zp ZP_WORD:165 , 
Potential registers zp ZP_BYTE:167 [ processChars::bitmask#0 ] : zp ZP_BYTE:167 , 
Potential registers zp ZP_WORD:168 [ processChars::xpos#0 ] : zp ZP_WORD:168 , 
Potential registers zp ZP_BYTE:170 [ processChars::$11 ] : zp ZP_BYTE:170 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:171 [ processChars::$12 ] : zp ZP_BYTE:171 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:172 [ processChars::$17 ] : zp ZP_BYTE:172 , reg byte x , 
Potential registers zp ZP_BYTE:173 [ processChars::$14 ] : zp ZP_BYTE:173 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:174 [ processChars::$15 ] : zp ZP_WORD:174 , 
Potential registers zp ZP_BYTE:176 [ processChars::ypos#0 ] : zp ZP_BYTE:176 , reg byte x , 
Potential registers zp ZP_WORD:177 [ processChars::$25 ] : zp ZP_WORD:177 , 
Potential registers zp ZP_BYTE:179 [ processChars::$26 ] : zp ZP_BYTE:179 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:180 [ processChars::xchar#0 ] : zp ZP_BYTE:180 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:181 [ processChars::$38 ] : zp ZP_BYTE:181 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:182 [ processChars::$30 ] : zp ZP_BYTE:182 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:183 [ processChars::ychar#0 ] : zp ZP_BYTE:183 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:184 [ processChars::$39 ] : zp ZP_BYTE:184 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:185 [ processChars::$33 ] : zp ZP_BYTE:185 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:44 [ 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:46 [ 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:39 [ 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:34 [ 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:36 [ 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:156 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:157 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:38 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:146 [ atan2_16::return#2 ] 50: zp ZP_WORD:41 [ 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:142 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:144 [ atan2_16::y#0 ] 
Uplift Scope [getCharToProcess] 4,983.53: zp ZP_BYTE:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] 3,432.25: zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] 2,937.96: zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] 1,949.11: zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] 1,557.11: zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] 181.2: zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] 140.57: zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] 135.09: zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] 7.33: zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] 7.33: zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] 7.33: zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] 4: zp ZP_WORD:127 [ getCharToProcess::$12 ] 4: zp ZP_WORD:129 [ getCharToProcess::$13 ] 4: zp ZP_WORD:131 [ getCharToProcess::$9 ] 4: zp ZP_WORD:133 [ getCharToProcess::$10 ] 3: zp ZP_WORD:125 [ getCharToProcess::$8 ] 
Uplift Scope [startProcessing] 2,589.5: zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 2,002: zp ZP_BYTE:71 [ startProcessing::$42 ] 2,002: zp ZP_BYTE:72 [ startProcessing::$43 ] 2,002: zp ZP_BYTE:73 [ startProcessing::$44 ] 2,002: zp ZP_BYTE:74 [ startProcessing::$45 ] 2,002: zp ZP_BYTE:75 [ startProcessing::$30 ] 222.2: zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 203.57: zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] 202: zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] 170.33: zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] 4: zp ZP_WORD:78 [ startProcessing::$47 ] 4: zp ZP_WORD:80 [ startProcessing::$48 ] 4: zp ZP_WORD:82 [ startProcessing::$1 ] 4: zp ZP_WORD:86 [ startProcessing::colPtr#0 ] 4: zp ZP_WORD:91 [ startProcessing::$5 ] 4: zp ZP_WORD:93 [ startProcessing::$6 ] 4: zp ZP_WORD:96 [ startProcessing::$8 ] 4: zp ZP_WORD:98 [ startProcessing::$9 ] 4: zp ZP_WORD:100 [ startProcessing::$11 ] 4: zp ZP_WORD:102 [ startProcessing::$12 ] 4: zp ZP_WORD:104 [ startProcessing::$13 ] 4: zp ZP_WORD:108 [ startProcessing::$15 ] 4: zp ZP_WORD:110 [ startProcessing::$16 ] 4: zp ZP_WORD:112 [ startProcessing::$17 ] 4: zp ZP_BYTE:120 [ startProcessing::$50 ] 4: zp ZP_BYTE:121 [ startProcessing::$51 ] 4: zp ZP_BYTE:122 [ startProcessing::$52 ] 4: zp ZP_BYTE:123 [ startProcessing::$53 ] 3: zp ZP_WORD:76 [ startProcessing::$0 ] 2.22: zp ZP_BYTE:124 [ startProcessing::$31 ] 2: zp ZP_WORD:84 [ startProcessing::offset#0 ] 2: zp ZP_BYTE:95 [ startProcessing::ch#0 ] 2: zp ZP_BYTE:117 [ startProcessing::$22 ] 0.5: zp ZP_WORD:118 [ startProcessing::$23 ] 0.4: zp ZP_WORD:114 [ startProcessing::spriteY#0 ] 0.31: zp ZP_BYTE:69 [ startProcessing::center_x#0 ] 0.31: zp ZP_WORD:106 [ startProcessing::spriteX#0 ] 0.31: zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] 0.24: zp ZP_BYTE:70 [ startProcessing::center_y#0 ] 0.14: zp ZP_WORD:89 [ startProcessing::screenPtr#0 ] 0.1: zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] 
Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:135 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:136 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:139 [ init_angle_screen::$7 ] 202: zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:150 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:153 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:154 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:155 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:140 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:137 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:56 [ init_angle_screen::screen#0 ] 
Uplift Scope [processChars] 33.73: zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 22: zp ZP_BYTE:160 [ processChars::$67 ] 22: zp ZP_BYTE:161 [ processChars::$68 ] 22: zp ZP_BYTE:162 [ processChars::$69 ] 22: zp ZP_BYTE:163 [ processChars::$70 ] 22: zp ZP_BYTE:164 [ processChars::$37 ] 22: zp ZP_BYTE:170 [ processChars::$11 ] 22: zp ZP_BYTE:171 [ processChars::$12 ] 22: zp ZP_BYTE:173 [ processChars::$14 ] 22: zp ZP_BYTE:179 [ processChars::$26 ] 22: zp ZP_BYTE:180 [ processChars::xchar#0 ] 22: zp ZP_BYTE:181 [ processChars::$38 ] 22: zp ZP_BYTE:182 [ processChars::$30 ] 22: zp ZP_BYTE:183 [ processChars::ychar#0 ] 22: zp ZP_BYTE:184 [ processChars::$39 ] 22: zp ZP_BYTE:185 [ processChars::$33 ] 17.9: zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] 11: zp ZP_WORD:174 [ processChars::$15 ] 11: zp ZP_WORD:177 [ processChars::$25 ] 6.6: zp ZP_BYTE:172 [ processChars::$17 ] 2.75: zp ZP_BYTE:176 [ processChars::ypos#0 ] 2.2: zp ZP_BYTE:167 [ processChars::bitmask#0 ] 2.06: zp ZP_WORD:168 [ processChars::xpos#0 ] 0.31: zp ZP_WORD:165 [ processChars::processing#0 ] 
Uplift Scope [main] 27.5: zp ZP_WORD:2 [ main::src#4 main::src#1 ] 26.67: zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] 22: zp ZP_BYTE:58 [ main::$26 ] 22: zp ZP_BYTE:59 [ main::$27 ] 22: zp ZP_BYTE:60 [ main::$28 ] 22: zp ZP_BYTE:61 [ main::$29 ] 22: zp ZP_BYTE:68 [ main::center_dist#0 ] 20.17: zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 12.22: zp ZP_BYTE:62 [ main::$16 ] 5.5: zp ZP_BYTE:66 [ main::center_x#0 ] 5.5: zp ZP_BYTE:67 [ main::center_y#0 ] 
Uplift Scope [initSprites] 33: zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] 33: zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] 
Uplift Scope [] 5: zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] 0.03: zp ZP_WORD:54 [ SCREEN_DIST#0 ] 0.03: zp ZP_WORD:52 [ SCREEN_COPY#0 ] 
Uplift Scope [malloc] 0.8: zp ZP_WORD:158 [ malloc::mem#0 ] 
Uplift Scope [RADIX] 
Uplift Scope [ProcessingChar] 
Uplift Scope [ProcessingSprite] 
Uplift Scope [ProcessingSprite::$0] 
Uplift Scope [setupRasterIrq] 
Uplift Scope [irqTop] 
Uplift Scope [irqBottom] 

Uplifting [atan2_16] best 1280389 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:34 [ 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:36 [ 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:146 [ atan2_16::return#2 ] zp ZP_WORD:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:142 [ atan2_16::x#0 ] zp ZP_WORD:144 [ atan2_16::y#0 ] 
Limited combination testing to 100 combinations of 144 possible.
Uplifting [getCharToProcess] best 1267056 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp ZP_BYTE:63 [ getCharToProcess::return_x#0 ] zp ZP_BYTE:64 [ getCharToProcess::return_y#0 ] zp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ] zp ZP_WORD:127 [ getCharToProcess::$12 ] zp ZP_WORD:129 [ getCharToProcess::$13 ] zp ZP_WORD:131 [ getCharToProcess::$9 ] zp ZP_WORD:133 [ getCharToProcess::$10 ] zp ZP_WORD:125 [ getCharToProcess::$8 ] 
Limited combination testing to 100 combinations of 46656 possible.
Uplifting [init_angle_screen] best 1264856 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:150 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:154 [ init_angle_screen::$14 ] zp ZP_BYTE:155 [ init_angle_screen::$15 ] zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:140 [ init_angle_screen::yw#0 ] zp ZP_WORD:137 [ init_angle_screen::xw#0 ] zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:56 [ init_angle_screen::screen#0 ] 
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [main] best 1264616 combination zp ZP_WORD:2 [ main::src#4 main::src#1 ] zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] reg byte a [ main::$26 ] reg byte a [ main::$27 ] reg byte a [ main::$28 ] reg byte a [ main::$29 ] zp ZP_BYTE:68 [ main::center_dist#0 ] zp ZP_BYTE:6 [ main::i#2 main::i#1 ] zp ZP_BYTE:62 [ main::$16 ] zp ZP_BYTE:66 [ main::center_x#0 ] zp ZP_BYTE:67 [ main::center_y#0 ] 
Limited combination testing to 100 combinations of 147456 possible.
Uplifting [initSprites] best 1264496 combination zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] 
Uplifting [] best 1264496 combination zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] zp ZP_WORD:54 [ SCREEN_DIST#0 ] zp ZP_WORD:52 [ SCREEN_COPY#0 ] 
Uplifting [malloc] best 1264496 combination zp ZP_WORD:158 [ malloc::mem#0 ] 
Uplifting [RADIX] best 1264496 combination 
Uplifting [ProcessingChar] best 1264496 combination 
Uplifting [ProcessingSprite] best 1264496 combination 
Uplifting [ProcessingSprite::$0] best 1264496 combination 
Uplifting [setupRasterIrq] best 1264496 combination 
Uplifting [irqTop] best 1264496 combination 
Uplifting [irqBottom] best 1264496 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Uplifting [getCharToProcess] best 1264496 combination zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Uplifting [getCharToProcess] best 1264496 combination zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Uplifting [startProcessing] best 1264496 combination zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:71 [ startProcessing::$42 ]
Uplifting [startProcessing] best 1258496 combination reg byte a [ startProcessing::$42 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:72 [ startProcessing::$43 ]
Uplifting [startProcessing] best 1252496 combination reg byte a [ startProcessing::$43 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:73 [ startProcessing::$44 ]
Uplifting [startProcessing] best 1246496 combination reg byte a [ startProcessing::$44 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:74 [ startProcessing::$45 ]
Uplifting [startProcessing] best 1240496 combination reg byte a [ startProcessing::$45 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:75 [ startProcessing::$30 ]
Uplifting [startProcessing] best 1236496 combination reg byte a [ startProcessing::$30 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Uplifting [getCharToProcess] best 1236496 combination zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Uplifting [getCharToProcess] best 1218496 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Uplifting [startProcessing] best 1217596 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Uplifting [startProcessing] best 1216696 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:154 [ init_angle_screen::$14 ]
Uplifting [init_angle_screen] best 1216296 combination reg byte a [ init_angle_screen::$14 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:155 [ init_angle_screen::$15 ]
Uplifting [init_angle_screen] best 1215696 combination reg byte a [ init_angle_screen::$15 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Uplifting [getCharToProcess] best 1215696 combination zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1215696 combination zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1215696 combination zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1215696 combination zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Uplifting [processChars] best 1215696 combination zp ZP_BYTE:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:68 [ main::center_dist#0 ]
Uplifting [main] best 1215636 combination reg byte a [ main::center_dist#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:160 [ processChars::$67 ]
Uplifting [processChars] best 1215576 combination reg byte a [ processChars::$67 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:161 [ processChars::$68 ]
Uplifting [processChars] best 1215516 combination reg byte a [ processChars::$68 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:162 [ processChars::$69 ]
Uplifting [processChars] best 1215456 combination reg byte a [ processChars::$69 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:163 [ processChars::$70 ]
Uplifting [processChars] best 1215396 combination reg byte a [ processChars::$70 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:164 [ processChars::$37 ]
Uplifting [processChars] best 1215336 combination reg byte a [ processChars::$37 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:170 [ processChars::$11 ]
Uplifting [processChars] best 1215276 combination reg byte a [ processChars::$11 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:171 [ processChars::$12 ]
Uplifting [processChars] best 1215216 combination reg byte a [ processChars::$12 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:173 [ processChars::$14 ]
Uplifting [processChars] best 1215156 combination reg byte a [ processChars::$14 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:179 [ processChars::$26 ]
Uplifting [processChars] best 1215116 combination reg byte a [ processChars::$26 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:180 [ processChars::xchar#0 ]
Uplifting [processChars] best 1215056 combination reg byte a [ processChars::xchar#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:181 [ processChars::$38 ]
Uplifting [processChars] best 1215016 combination reg byte a [ processChars::$38 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:182 [ processChars::$30 ]
Uplifting [processChars] best 1214976 combination reg byte a [ processChars::$30 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:183 [ processChars::ychar#0 ]
Uplifting [processChars] best 1214916 combination reg byte a [ processChars::ychar#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:184 [ processChars::$39 ]
Uplifting [processChars] best 1214876 combination reg byte a [ processChars::$39 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:185 [ processChars::$33 ]
Uplifting [processChars] best 1214816 combination reg byte a [ processChars::$33 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1214816 combination zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Uplifting [main] best 1214816 combination zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ]
Uplifting [processChars] best 1214816 combination zp ZP_BYTE:50 [ processChars::i#10 processChars::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:62 [ main::$16 ]
Uplifting [main] best 1214656 combination reg byte x [ main::$16 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ getCharToProcess::return_x#0 ]
Uplifting [getCharToProcess] best 1214596 combination reg byte y [ getCharToProcess::return_x#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:64 [ getCharToProcess::return_y#0 ]
Uplifting [getCharToProcess] best 1214536 combination reg byte a [ getCharToProcess::return_y#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:65 [ getCharToProcess::return_dist#0 ]
Uplifting [getCharToProcess] best 1214496 combination reg byte x [ getCharToProcess::return_dist#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:172 [ processChars::$17 ]
Uplifting [processChars] best 1214426 combination reg byte x [ processChars::$17 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:66 [ main::center_x#0 ]
Uplifting [main] best 1214366 combination reg byte y [ main::center_x#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:67 [ main::center_y#0 ]
Uplifting [main] best 1214366 combination zp ZP_BYTE:67 [ main::center_y#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:120 [ startProcessing::$50 ]
Uplifting [startProcessing] best 1214360 combination reg byte a [ startProcessing::$50 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:121 [ startProcessing::$51 ]
Uplifting [startProcessing] best 1214354 combination reg byte a [ startProcessing::$51 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:122 [ startProcessing::$52 ]
Uplifting [startProcessing] best 1214348 combination reg byte a [ startProcessing::$52 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:123 [ startProcessing::$53 ]
Uplifting [startProcessing] best 1214342 combination reg byte a [ startProcessing::$53 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:176 [ processChars::ypos#0 ]
Uplifting [processChars] best 1214342 combination zp ZP_BYTE:176 [ processChars::ypos#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:124 [ startProcessing::$31 ]
Uplifting [startProcessing] best 1214317 combination reg byte x [ startProcessing::$31 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:167 [ processChars::bitmask#0 ]
Uplifting [processChars] best 1214317 combination zp ZP_BYTE:167 [ processChars::bitmask#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:95 [ startProcessing::ch#0 ]
Uplifting [startProcessing] best 1214311 combination reg byte a [ startProcessing::ch#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:117 [ startProcessing::$22 ]
Uplifting [startProcessing] best 1214305 combination reg byte a [ startProcessing::$22 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:69 [ startProcessing::center_x#0 ]
Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:69 [ startProcessing::center_x#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:116 [ startProcessing::spritePtr#0 ]
Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:70 [ startProcessing::center_y#0 ]
Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:70 [ startProcessing::center_y#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:88 [ startProcessing::spriteCol#0 ]
Uplifting [startProcessing] best 1214305 combination zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] 
Coalescing zero page register [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] ] with [ zp ZP_WORD:98 [ startProcessing::$9 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] ] with [ zp ZP_WORD:93 [ startProcessing::$6 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:56 [ init_angle_screen::screen#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:41 [ 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 [ zp ZP_WORD:54 [ SCREEN_DIST#0 ] ] with [ zp ZP_WORD:158 [ malloc::mem#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_BYTE:67 [ main::center_y#0 ] ] with [ zp ZP_BYTE:70 [ startProcessing::center_y#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:76 [ startProcessing::$0 ] ] with [ zp ZP_WORD:80 [ startProcessing::$48 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:82 [ startProcessing::$1 ] ] with [ zp ZP_WORD:84 [ startProcessing::offset#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:100 [ startProcessing::$11 ] ] with [ zp ZP_WORD:102 [ startProcessing::$12 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:104 [ startProcessing::$13 ] ] with [ zp ZP_WORD:106 [ startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:108 [ startProcessing::$15 ] ] with [ zp ZP_WORD:110 [ startProcessing::$16 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:112 [ startProcessing::$17 ] ] with [ zp ZP_WORD:114 [ startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:125 [ getCharToProcess::$8 ] ] with [ zp ZP_WORD:129 [ getCharToProcess::$13 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:131 [ getCharToProcess::$9 ] ] with [ zp ZP_WORD:133 [ getCharToProcess::$10 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:137 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:142 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:140 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:144 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:146 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:148 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:168 [ processChars::xpos#0 ] ] with [ zp ZP_WORD:177 [ processChars::$25 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 ] ] with [ zp ZP_WORD:96 [ startProcessing::$8 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 ] ] with [ zp ZP_WORD:91 [ startProcessing::$5 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:39 [ 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:146 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:76 [ startProcessing::$0 startProcessing::$48 ] ] with [ zp ZP_WORD:82 [ startProcessing::$1 startProcessing::offset#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:100 [ startProcessing::$11 startProcessing::$12 ] ] with [ zp ZP_WORD:104 [ startProcessing::$13 startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:108 [ startProcessing::$15 startProcessing::$16 ] ] with [ zp ZP_WORD:112 [ startProcessing::$17 startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:125 [ getCharToProcess::$8 getCharToProcess::$13 ] ] with [ zp ZP_WORD:131 [ getCharToProcess::$9 getCharToProcess::$10 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:39 [ 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:150 [ init_angle_screen::$11 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:76 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 ] ] with [ zp ZP_WORD:89 [ startProcessing::screenPtr#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] ] with [ zp ZP_BYTE:6 [ main::i#2 main::i#1 ] ]
Coalescing zero page register [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 ] ] with [ zp ZP_WORD:2 [ main::src#4 main::src#1 ] ]
Coalescing zero page register [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 ] ] with [ zp ZP_WORD:4 [ main::dst#4 main::dst#1 main::dst#0 ] ]
Coalescing zero page register [ zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 ] ] with [ zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp ZP_BYTE:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] ]
Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp ZP_WORD:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ]
Coalescing zero page register [ zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ] with [ zp ZP_BYTE:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ]
Coalescing zero page register [ zp ZP_WORD:48 [ heap_head#5 heap_head#1 ] ] with [ zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:67 [ main::center_y#0 startProcessing::center_y#0 ] ] with [ zp ZP_BYTE:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] ]
Coalescing zero page register [ zp ZP_WORD:76 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 ] ] with [ zp ZP_WORD:34 [ 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 ] ]
Coalescing zero page register [ zp ZP_WORD:78 [ startProcessing::$47 ] ] with [ zp ZP_WORD:36 [ 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 ] ]
Coalescing zero page register [ zp ZP_WORD:86 [ startProcessing::colPtr#0 ] ] with [ zp ZP_WORD:39 [ 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 init_angle_screen::$11 ] ]
Coalescing zero page register [ zp ZP_WORD:100 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 ] ] with [ zp ZP_WORD:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
Coalescing zero page register [ zp ZP_WORD:108 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 ] ] with [ zp ZP_WORD:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ]
Coalescing zero page register [ zp ZP_WORD:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 ] ] with [ zp ZP_WORD:118 [ startProcessing::$23 ] ]
Coalescing zero page register [ zp ZP_WORD:137 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:127 [ getCharToProcess::$12 ] ]
Coalescing zero page register [ zp ZP_BYTE:152 [ init_angle_screen::ang_w#0 ] ] with [ zp ZP_BYTE:69 [ startProcessing::center_x#0 ] ]
Coalescing zero page register [ zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] with [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:27 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 ] ] with [ zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] ]
Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ] with [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#4 main::dst#1 main::dst#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:88 [ startProcessing::spriteCol#0 ] ] with [ zp ZP_BYTE:32 [ init_angle_screen::x#5 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ]
Coalescing zero page register [ zp ZP_BYTE:116 [ startProcessing::spritePtr#0 ] ] with [ zp ZP_BYTE:33 [ init_angle_screen::xb#5 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ]
Coalescing zero page register [ zp ZP_WORD:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$23 ] ] with [ zp ZP_WORD:48 [ heap_head#5 heap_head#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ]
Coalescing zero page register [ zp ZP_WORD:140 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp ZP_WORD:24 [ initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ] ]
Allocated (was zp ZP_BYTE:27) zp ZP_BYTE:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ]
Allocated (was zp ZP_WORD:28) zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#4 main::dst#1 main::dst#0 ]
Allocated (was zp ZP_BYTE:50) zp ZP_BYTE:5 [ processChars::i#10 processChars::i#1 ]
Allocated (was zp ZP_BYTE:51) zp ZP_BYTE:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Allocated (was zp ZP_WORD:52) zp ZP_WORD:7 [ SCREEN_COPY#0 ]
Allocated (was zp ZP_WORD:54) zp ZP_WORD:9 [ SCREEN_DIST#0 malloc::mem#0 ]
Allocated (was zp ZP_BYTE:67) zp ZP_BYTE:11 [ main::center_y#0 startProcessing::center_y#0 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Allocated (was zp ZP_WORD:76) zp ZP_WORD:12 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 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 ]
Allocated (was zp ZP_WORD:78) zp ZP_WORD:14 [ startProcessing::$47 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 ]
Allocated (was zp ZP_WORD:86) zp ZP_WORD:16 [ startProcessing::colPtr#0 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 init_angle_screen::$11 ]
Allocated (was zp ZP_BYTE:88) zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#5 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Allocated (was zp ZP_WORD:100) zp ZP_WORD:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 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:108) zp ZP_WORD:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 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:116) zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#5 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Allocated (was zp ZP_WORD:125) zp ZP_WORD:24 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$23 heap_head#5 heap_head#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ]
Allocated (was zp ZP_WORD:137) zp ZP_WORD:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ]
Allocated (was zp ZP_WORD:140) zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ]
Allocated (was zp ZP_BYTE:152) zp ZP_BYTE:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ]
Allocated (was zp ZP_WORD:165) zp ZP_WORD:31 [ processChars::processing#0 ]
Allocated (was zp ZP_BYTE:167) zp ZP_BYTE:33 [ processChars::bitmask#0 ]
Allocated (was zp ZP_WORD:168) zp ZP_WORD:34 [ processChars::xpos#0 processChars::$25 ]
Allocated (was zp ZP_WORD:174) zp ZP_WORD:36 [ processChars::$15 ]
Allocated (was zp ZP_BYTE:176) zp ZP_BYTE:38 [ processChars::ypos#0 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Clears start screen throwing around the letters (by turning them into sprites)
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const STATUS_FREE = 0
  .const STATUS_NEW = 1
  .const STATUS_PROCESSING = 2
  .const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
  .const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4
  .const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6
  .const OFFSET_STRUCT_PROCESSINGSPRITE_ID = 8
  .const OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 9
  .const OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a
  .const OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b
  .const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // Processor port data direction register
  .label PROCPORT_DDR = 0
  // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  // Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  // RAM in $A000, $E000 I/O in $D000
  .const PROCPORT_RAM_IO = 5
  // RAM in $A000, $E000 CHAR ROM in $D000
  .const PROCPORT_RAM_CHARROM = 1
  // The address of the CHARGEN character set
  .label CHARGEN = $d000
  // Positions of the border (in sprite positions)
  .const BORDER_XPOS_LEFT = $18
  .const BORDER_XPOS_RIGHT = $158
  .const BORDER_YPOS_TOP = $32
  .const BORDER_YPOS_BOTTOM = $fa
  // The offset of the sprite pointers from the screen start address
  .const SPRITE_PTRS = $3f8
  .label SPRITES_XPOS = $d000
  .label SPRITES_YPOS = $d001
  .label SPRITES_XMSB = $d010
  .label RASTER = $d012
  .label SPRITES_ENABLE = $d015
  .label SPRITES_EXPAND_Y = $d017
  .label SPRITES_MC = $d01c
  .label SPRITES_EXPAND_X = $d01d
  .label SPRITES_COLS = $d027
  .label VIC_CONTROL = $d011
  // VIC II IRQ Status Register
  .label IRQ_STATUS = $d019
  // VIC II IRQ Enable Register
  .label IRQ_ENABLE = $d01a
  // Bits for the IRQ Status/Enable Registers
  .const IRQ_RASTER = 1
  // Color Ram
  .label COLS = $d800
  // CIA#1 Interrupt Status & Control Register
  .label CIA1_INTERRUPT = $dc0d
  // Value that disables all CIA interrupts when stored to the CIA Interrupt registers
  .const CIA_INTERRUPT_CLEAR = $7f
  // The vector used when the HARDWARE serves IRQ interrupts
  .label HARDWARE_IRQ = $fffe
  .const LIGHT_BLUE = $e
  // Address of the screen
  .label SCREEN = $400
  // Sprite data for the animating sprites
  .label SPRITE_DATA = $2000
  // Max number of chars processed at once
  .const NUM_PROCESSING = 8
  // Distance value meaning not found
  .const NOT_FOUND = $ff
  .const RASTER_IRQ_TOP = $30
  .const RASTER_IRQ_MIDDLE = $ff
  .const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
  .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
  .const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
  .const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
  .label heap_head = $18
  .label SCREEN_COPY = 7
  .label SCREEN_DIST = 9
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call malloc 
  // [243] phi from @1 to malloc [phi:@1->malloc]
malloc_from_b1:
  // [243] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#0] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp b3
  // @3
b3:
  // [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_COPY
  lda.z malloc.mem+1
  sta.z SCREEN_COPY+1
  // [4] call malloc 
  // [243] phi from @3 to malloc [phi:@3->malloc]
malloc_from_b3:
  // [243] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy 
  jsr malloc
  jmp b4
  // @4
b4:
  // [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
  // [6] phi from @4 to @2 [phi:@4->@2]
b2_from_b4:
  jmp b2
  // @2
b2:
  // [7] call main 
  jsr main
  // [8] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
  jmp bend
  // @end
bend:
  // main
main: {
    .label dst = 3
    .label src = $1c
    .label i = 2
    .label center_y = $b
    // [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z init_angle_screen.screen
    lda.z SCREEN_DIST+1
    sta.z init_angle_screen.screen+1
    // [10] call init_angle_screen 
    jsr init_angle_screen
    jmp b9
    // main::@9
  b9:
    // [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 
    lda.z SCREEN_COPY
    sta.z dst
    lda.z SCREEN_COPY+1
    sta.z dst+1
    // [12] phi from main::@9 to main::@2 [phi:main::@9->main::@2]
  b2_from_b9:
    // [12] phi (byte*) main::dst#4 = (byte*) main::dst#0 [phi:main::@9->main::@2#0] -- register_copy 
    // [12] phi (byte*) main::src#4 = (const byte*) SCREEN#0 [phi:main::@9->main::@2#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z src
    lda #>SCREEN
    sta.z src+1
    jmp b2
    // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    // [12] phi (byte*) main::dst#4 = (byte*) main::dst#1 [phi:main::@1->main::@2#0] -- register_copy 
    // [12] phi (byte*) main::src#4 = (byte*) main::src#1 [phi:main::@1->main::@2#1] -- register_copy 
    jmp b2
    // main::@2
  b2:
    // [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (src),y
    ldy #0
    sta (dst),y
    // [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 -- pbuz1=_inc_pbuz1 
    inc.z src
    bne !+
    inc.z src+1
  !:
    // [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp b1
  // Copy screen to screen copy
    // main::@1
  b1:
    // [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z src+1
    cmp #>SCREEN+$3e8
    bne b2_from_b1
    lda.z src
    cmp #<SCREEN+$3e8
    bne b2_from_b1
    // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  b3_from_b1:
    // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b3
  // Init processing array
    // [17] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
  b3_from_b3:
    // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy 
    jmp b3
    // main::@3
  b3:
    // [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1 
    asl
    tax
    // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING,x
    lda #0
    sta PROCESSING+1,x
    // [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
    // [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
    // [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
    // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
    // [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
    // [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
    // [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #STATUS_FREE
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
    // [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2 
    lda #<0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
    lda #>0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
    // [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne b3_from_b3
    // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [35] call initSprites 
    // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites]
  initSprites_from_b4:
    jsr initSprites
    // [36] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
  b10_from_b4:
    jmp b10
    // main::@10
  b10:
    // [37] call setupRasterIrq 
    jsr setupRasterIrq
    // [38] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5]
  b5_from_b10:
  b5_from_b6:
    jmp b5
  // Main loop
    // main::@5
  b5:
    // [39] call getCharToProcess 
    jsr getCharToProcess
    // [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 
    ldy.z getCharToProcess.return_x
    // [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 
    lda.z getCharToProcess.return_y
    // [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1
    jmp b11
    // main::@11
  b11:
    // [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
    // [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa 
    sta.z center_y
    // [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx 
    txa
    // [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 
    cmp #NOT_FOUND
    bne b6
    jmp b7
    // main::@7
  b7:
    // [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 
    lda #'.'
    sta SCREEN+$3e7
    jmp b8
    // main::@8
  b8:
    // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp b8
    // main::@6
  b6:
    // [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy 
    sty.z startProcessing.center_x
    // [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
    // [51] call startProcessing 
    // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
  startProcessing_from_b6:
    jsr startProcessing
    jmp b5_from_b6
}
  // startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($1e) center_x, byte zeropage($b) center_y)
startProcessing: {
    .label _0 = $c
    .label _1 = $c
    .label _5 = 3
    .label _6 = 3
    .label _8 = $1c
    .label _9 = $1c
    .label _11 = $13
    .label _12 = $13
    .label _13 = $13
    .label _15 = $15
    .label _16 = $15
    .label _17 = $15
    .label _23 = $18
    .label center_x = $1e
    .label center_y = $b
    .label i = 2
    .label offset = $c
    .label colPtr = $10
    .label spriteCol = $12
    .label screenPtr = $c
    .label spriteData = 3
    .label chargenData = $1c
    .label spriteX = $13
    .label spriteY = $15
    .label spritePtr = $17
    .label freeIdx = 2
    .label _47 = $e
    .label _48 = $c
    // [53] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
  b1_from_startProcessing:
    // [53] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 
    ldx #$ff
    jmp b1
    // startProcessing::@1
  b1:
    // [54] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
  b2_from_b1:
    // [54] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b2
    // [54] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
  b2_from_b3:
    // [54] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy 
    jmp b2
    // startProcessing::@2
  b2:
    // [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 
    tay
    lda #STATUS_FREE
    cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
    bne b3
    // [61] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
  b4_from_b2:
  b4_from_b9:
    // [61] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy 
    jmp b4
    // startProcessing::@4
  b4:
    // [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 
    lda #$ff
    cmp.z freeIdx
    beq b8
    jmp b5
    // startProcessing::@5
  b5:
    // [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 
    lda.z center_y
    sta.z _0
    lda #0
    sta.z _0+1
    // [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z _0
    asl
    sta.z _47
    lda.z _0+1
    rol
    sta.z _47+1
    asl.z _47
    rol.z _47+1
    // [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z _48
    clc
    adc.z _47
    sta.z _48
    lda.z _48+1
    adc.z _47+1
    sta.z _48+1
    // [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _1
    rol.z _1+1
    asl.z _1
    rol.z _1+1
    asl.z _1
    rol.z _1+1
    // [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z center_x
    clc
    adc.z offset
    sta.z offset
    bcc !+
    inc.z offset+1
  !:
    // [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z offset
    clc
    adc #<COLS
    sta.z colPtr
    lda.z offset+1
    adc #>COLS
    sta.z colPtr+1
    // [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (colPtr),y
    sta.z spriteCol
    // [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z screenPtr
    adc #<SCREEN
    sta.z screenPtr
    lda.z screenPtr+1
    adc #>SCREEN
    sta.z screenPtr+1
    // [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 
    lda.z freeIdx
    sta.z _5
    lda #0
    sta.z _5+1
    // [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz1_rol_6 
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    // [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z spriteData
    adc #<SPRITE_DATA
    sta.z spriteData
    lda.z spriteData+1
    adc #>SPRITE_DATA
    sta.z spriteData+1
    // [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 
    ldy #0
    lda (screenPtr),y
    // [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa 
    sta.z _8
    lda #0
    sta.z _8+1
    // [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    // [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z chargenData
    adc #<CHARGEN
    sta.z chargenData
    lda.z chargenData+1
    adc #>CHARGEN
    sta.z chargenData+1
    // asm { sei  }
    sei
    // [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_CHARROM
    sta PROCPORT
    // [80] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
  b6_from_b5:
    // [80] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 
    ldx #0
    // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy 
    // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy 
    jmp b6
    // [80] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
  b6_from_b6:
    // [80] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy 
    // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy 
    // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy 
    jmp b6
    // startProcessing::@6
  b6:
    // [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (chargenData),y
    ldy #0
    sta (spriteData),y
    // [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 
    lda #3
    clc
    adc.z spriteData
    sta.z spriteData
    bcc !+
    inc.z spriteData+1
  !:
    // [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 
    inc.z chargenData
    bne !+
    inc.z chargenData+1
  !:
    // [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx 
    inx
    // [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b6_from_b6
    jmp b7
    // startProcessing::@7
  b7:
    // [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // asm { cli  }
    cli
    // [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 
    lda.z center_x
    sta.z _11
    lda #0
    sta.z _11+1
    // [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _12
    rol.z _12+1
    asl.z _12
    rol.z _12+1
    asl.z _12
    rol.z _12+1
    // [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 
    lda #BORDER_XPOS_LEFT
    clc
    adc.z _13
    sta.z _13
    bcc !+
    inc.z _13+1
  !:
    // [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz1_rol_4 
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    // [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 
    lda.z center_y
    sta.z _15
    lda #0
    sta.z _15+1
    // [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _16
    rol.z _16+1
    asl.z _16
    rol.z _16+1
    asl.z _16
    rol.z _16+1
    // [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 
    lda #BORDER_YPOS_TOP
    clc
    adc.z _17
    sta.z _17
    bcc !+
    inc.z _17+1
  !:
    // [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz1_rol_4 
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    // [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z freeIdx
    axs #-[SPRITE_DATA/$40]
    stx.z spritePtr
    // [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 
    lda.z freeIdx
    asl
    asl
    asl
    // [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 -- vwuz1=_word_vbuaa 
    sta.z _23
    lda #0
    sta.z _23+1
    // [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z freeIdx
    asl
    // [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 -- vbuxx=vbuaa_rol_1 
    asl
    tax
    // [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z spriteX
    sta PROCESSING,x
    lda.z spriteX+1
    sta PROCESSING+1,x
    // [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z spriteY
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
    lda.z spriteY+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
    // [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z _23
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
    lda.z _23+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
    // [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c -- pwuc1_derefidx_vbuxx=vbuc2 
    lda #$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
    // [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z freeIdx
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
    // [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spritePtr
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
    // [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spriteCol
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
    // [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #STATUS_NEW
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
    // [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1 
    lda.z screenPtr
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
    lda.z screenPtr+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
    jmp breturn
    // startProcessing::@return
  breturn:
    // [113] return 
    rts
    // startProcessing::@8
  b8:
    // [114] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 
    ldx.z freeIdx
    // [53] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
  b1_from_b8:
    // [53] phi (byte) startProcessing::freeIdx#6 = (byte~) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy 
    jmp b1
    // startProcessing::@3
  b3:
    // [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne b2_from_b3
    jmp b9
    // startProcessing::@9
  b9:
    // [117] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx 
    stx.z freeIdx
    jmp b4_from_b9
}
  // getCharToProcess
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
getCharToProcess: {
    .label _8 = $18
    .label _9 = $18
    .label _10 = $18
    .label screen_line = $1c
    .label dist_line = 3
    .label y = 2
    .label return_x = $17
    .label return_y = $b
    .label closest_dist = $12
    .label closest_x = $17
    .label closest_y = $b
    .label _12 = $1a
    .label _13 = $18
    // [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 
    lda.z SCREEN_COPY
    sta.z screen_line
    lda.z SCREEN_COPY+1
    sta.z screen_line+1
    // [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z dist_line
    lda.z SCREEN_DIST+1
    sta.z dist_line+1
    // [120] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
  b1_from_getCharToProcess:
    // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_y
    // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_x
    // [120] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [120] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND#0 [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 
    lda #NOT_FOUND
    sta.z closest_dist
    // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy 
    // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy 
    jmp b1
    // getCharToProcess::@1
  b1:
    // [121] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
  b2_from_b1:
    // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy 
    // [121] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 
    ldy #0
    jmp b2
    // getCharToProcess::@2
  b2:
    // [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 
    lda (screen_line),y
    cmp #' '
    beq b11
    jmp b4
    // getCharToProcess::@4
  b4:
    // [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuxx=pbuz1_derefidx_vbuyy 
    lda (dist_line),y
    tax
    // [124] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1 
    cpx.z closest_dist
    bcs b12
    jmp b5
    // getCharToProcess::@5
  b5:
    // [125] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy 
    sty.z return_x
    // [126] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 
    lda.z y
    sta.z return_y
    // [127] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3]
  b3_from_b11:
  b3_from_b12:
  b3_from_b5:
    // [127] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy 
    // [127] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy 
    // [127] phi (byte) getCharToProcess::return_dist#1 = (byte~) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy 
    jmp b3
    // getCharToProcess::@3
  b3:
    // [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy 
    iny
    // [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne b10
    jmp b6
    // getCharToProcess::@6
  b6:
    // [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_line
    sta.z screen_line
    bcc !+
    inc.z screen_line+1
  !:
    // [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z dist_line
    sta.z dist_line
    bcc !+
    inc.z dist_line+1
  !:
    // [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 
    lda #$19
    cmp.z y
    bne b9
    jmp b7
    // getCharToProcess::@7
  b7:
    // [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND#0) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 
    cpx #NOT_FOUND
    beq breturn
    jmp b8
    // getCharToProcess::@8
  b8:
    // [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 
    lda.z return_y
    sta.z _8
    lda #0
    sta.z _8+1
    // [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z _8
    asl
    sta.z _12
    lda.z _8+1
    rol
    sta.z _12+1
    asl.z _12
    rol.z _12+1
    // [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z _13
    clc
    adc.z _12
    sta.z _13
    lda.z _13+1
    adc.z _12+1
    sta.z _13+1
    // [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    // [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz1 
    lda.z _10
    clc
    adc.z SCREEN_COPY
    sta.z _10
    lda.z _10+1
    adc.z SCREEN_COPY+1
    sta.z _10+1
    // [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 
    // clear the found char on the screen copy
    lda #' '
    ldy.z return_x
    sta (_10),y
    jmp breturn
    // getCharToProcess::@return
  breturn:
    // [141] return 
    rts
    // getCharToProcess::@9
  b9:
    // [142] (byte~) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [120] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
  b1_from_b9:
    // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy 
    // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy 
    // [120] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy 
    // [120] phi (byte) getCharToProcess::closest_dist#8 = (byte~) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy 
    // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy 
    // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy 
    jmp b1
    // getCharToProcess::@10
  b10:
    // [143] (byte~) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [121] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
  b2_from_b10:
    // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte~) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy 
    // [121] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy 
    jmp b2
    // getCharToProcess::@12
  b12:
    // [144] (byte~) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 
    ldx.z closest_dist
    jmp b3_from_b12
    // getCharToProcess::@11
  b11:
    // [145] (byte~) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 
    ldx.z closest_dist
    jmp b3_from_b11
}
  // setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
    .label irqRoutine = irqTop
    // asm { sei  }
    sei
    // [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 
    // Disable CIA 1 Timer IRQ
    lda #CIA_INTERRUPT_CLEAR
    sta CIA1_INTERRUPT
    jmp b1
    // setupRasterIrq::@1
  b1:
    // [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 
    lda #$7f
    and VIC_CONTROL
    sta VIC_CONTROL
    jmp b2
    // setupRasterIrq::@2
  b2:
    // [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2 
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Enable Raster Interrupt
    lda #IRQ_RASTER
    sta IRQ_ENABLE
    // [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2 
    // Set the IRQ routine
    lda #<irqRoutine
    sta HARDWARE_IRQ
    lda #>irqRoutine
    sta HARDWARE_IRQ+1
    // asm { cli  }
    cli
    jmp breturn
    // setupRasterIrq::@return
  breturn:
    // [155] return 
    rts
}
  // initSprites
// Initialize sprites
initSprites: {
    .label sp = $1c
    // [157] phi from initSprites to initSprites::@2 [phi:initSprites->initSprites::@2]
  b2_from_initSprites:
    // [157] phi (byte*) initSprites::sp#4 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@2#0] -- pbuz1=pbuc1 
    lda #<SPRITE_DATA
    sta.z sp
    lda #>SPRITE_DATA
    sta.z sp+1
    jmp b2
    // [157] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2]
  b2_from_b1:
    // [157] phi (byte*) initSprites::sp#4 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@2#0] -- register_copy 
    jmp b2
    // initSprites::@2
  b2:
    // [158] *((byte*) initSprites::sp#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (sp),y
    // [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4 -- pbuz1=_inc_pbuz1 
    inc.z sp
    bne !+
    inc.z sp+1
  !:
    jmp b1
  // Clear sprite data
    // initSprites::@1
  b1:
    // [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 
    lda.z sp+1
    cmp #>SPRITE_DATA+NUM_PROCESSING*$40
    bcc b2_from_b1
    bne !+
    lda.z sp
    cmp #<SPRITE_DATA+NUM_PROCESSING*$40
    bcc b2_from_b1
  !:
    // [161] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
  b3_from_b1:
    // [161] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b3
  // Initialize sprite registers
    // [161] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
  b3_from_b3:
    // [161] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy 
    jmp b3
    // initSprites::@3
  b3:
    // [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #LIGHT_BLUE
    sta SPRITES_COLS,x
    // [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b3_from_b3
    jmp b4
    // initSprites::@4
  b4:
    // [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_MC
    // [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
    // [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_Y
    jmp breturn
    // initSprites::@return
  breturn:
    // [168] 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($18) screen)
init_angle_screen: {
    .label _11 = $10
    .label screen = $18
    .label screen_topline = 3
    .label screen_bottomline = $18
    .label xw = $1a
    .label yw = $1c
    .label angle_w = $10
    .label ang_w = $1e
    .label x = $12
    .label xb = $17
    .label y = 2
    // [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_topline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_topline+1
    // [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 
    clc
    lda.z screen_bottomline
    adc #<$28*$c
    sta.z screen_bottomline
    lda.z screen_bottomline+1
    adc #>$28*$c
    sta.z screen_bottomline+1
    // [171] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  b1_from_init_angle_screen:
    // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
    // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
    // [171] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    jmp b1
    // [171] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  b1_from_b4:
    // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy 
    // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy 
    // [171] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy 
    jmp b1
    // init_angle_screen::@1
  b1:
    // [172] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3]
  b3_from_b1:
    // [172] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [172] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp b3
    // [172] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3]
  b3_from_b2:
    // [172] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy 
    // [172] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy 
    jmp b3
    // init_angle_screen::@3
  b3:
    // [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    ldy #0
    sta.z xw+1
    sty.z xw
    // [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    ldy #0
    sta.z yw+1
    sty.z yw
    // [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [180] call atan2_16 
    jsr atan2_16
    // [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    jmp b5
    // init_angle_screen::@5
  b5:
    // [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
    lda #$80
    clc
    adc.z _11
    sta.z _11
    bcc !+
    inc.z _11+1
  !:
    // [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z _11+1
    sta.z ang_w
    // [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
    lda.z ang_w
    eor #$ff
    clc
    adc #1
    // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
    lda #$80
    clc
    adc.z ang_w
    // [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
    lda #$80
    sec
    sbc.z ang_w
    // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 
    dec.z xb
    jmp b2
    // init_angle_screen::@2
  b2:
    // [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc b3_from_b2
    jmp b4
    // init_angle_screen::@4
  b4:
    // [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_topline
    sec
    sbc #<$28
    sta.z screen_topline
    lda.z screen_topline+1
    sbc #>$28
    sta.z screen_topline+1
    // [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_bottomline
    sta.z screen_bottomline
    bcc !+
    inc.z screen_bottomline+1
  !:
    // [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne b1_from_b4
    jmp breturn
    // init_angle_screen::@return
  breturn:
    // [199] 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($1a) x, signed word zeropage($1c) y)
atan2_16: {
    .label _2 = $c
    .label _7 = $e
    .label yi = $c
    .label xi = $e
    .label angle = $10
    .label xd = $15
    .label yd = $13
    .label return = $10
    .label x = $1a
    .label y = $1c
    // [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
    lda.z y+1
    bpl b1
    jmp b2
    // atan2_16::@2
  b2:
    // [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z y
    sta.z _2
    lda #0
    sbc.z y+1
    sta.z _2+1
    // [202] 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:
    // [202] 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:
    // [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
    lda.z x+1
    bpl b4
    jmp b5
    // atan2_16::@5
  b5:
    // [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z x
    sta.z _7
    lda #0
    sbc.z x+1
    sta.z _7+1
    // [205] 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:
    // [205] 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:
    // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  b10_from_b6:
    // [206] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z angle
    lda #>0
    sta.z angle+1
    // [206] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    ldx #0
    // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [206] 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:
    // [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
    lda.z yi+1
    bne b11
    lda.z yi
    bne b11
    // [208] 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:
    // [208] 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:
    // [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z angle+1
    ror.z angle
    // [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
    lda.z x+1
    bpl b7_from_b12
    jmp b21
    // atan2_16::@21
  b21:
    // [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
    sec
    lda #<$8000
    sbc.z angle
    sta.z angle
    lda #>$8000
    sbc.z angle+1
    sta.z angle+1
    // [212] 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:
    // [212] 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:
    // [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
    lda.z y+1
    bpl b8_from_b7
    jmp b9
    // atan2_16::@9
  b9:
    // [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
    sec
    lda #0
    sbc.z angle
    sta.z angle
    lda #0
    sbc.z angle+1
    sta.z angle+1
    // [215] 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:
    // [215] 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:
    // [216] return 
    rts
    // atan2_16::@11
  b11:
    // [217] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
    lda.z xi
    sta.z xd
    lda.z xi+1
    sta.z xd+1
    // [219] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
    lda.z yi
    sta.z yd
    lda.z yi+1
    sta.z yd+1
    // [220] 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:
    // [220] 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 
    // [220] 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 
    // [220] 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:
    // [221] 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:
    // [222] 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:
    // [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    // [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    // [225] 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:
    // [225] 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 
    // [225] 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:
    // [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
    lda.z yi+1
    bpl b18
    jmp b20
    // atan2_16::@20
  b20:
    // [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z xi
    sec
    sbc.z yd
    sta.z xi
    lda.z xi+1
    sbc.z yd+1
    sta.z xi+1
    // [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z yi
    clc
    adc.z xd
    sta.z yi
    lda.z yi+1
    adc.z xd+1
    sta.z yi+1
    // [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [230] (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.z angle
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    // [231] 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:
    // [231] 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 
    // [231] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [231] 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:
    // [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [233] 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
    // [206] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  b10_from_b19:
    // [206] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [206] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [206] 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:
    // [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z xi
    clc
    adc.z yd
    sta.z xi
    lda.z xi+1
    adc.z yd+1
    sta.z xi+1
    // [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z yi
    sec
    sbc.z xd
    sta.z yi
    lda.z yi+1
    sbc.z xd+1
    sta.z yi+1
    // [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [237] (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.z angle
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    jmp b19_from_b18
    // atan2_16::@14
  b14:
    // [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    // [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    // [240] (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:
    // [241] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
    lda.z x
    sta.z xi
    lda.z x+1
    sta.z xi+1
    jmp b6_from_b4
    // atan2_16::@1
  b1:
    // [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
    lda.z y
    sta.z yi
    lda.z y+1
    sta.z yi+1
    jmp b3_from_b1
}
  // malloc
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
malloc: {
    .label mem = 9
    // [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 
    lda.z heap_head
    sec
    sbc #<$3e8
    sta.z mem
    lda.z heap_head+1
    sbc #>$3e8
    sta.z mem+1
    // [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
    lda.z mem
    sta.z heap_head
    lda.z mem+1
    sta.z heap_head+1
    jmp breturn
    // malloc::@return
  breturn:
    // [246] return 
    rts
}
  // irqBottom
// Raster Interrupt at the bottom of the screen
irqBottom: {
    // entry interrupt(HARDWARE_ALL)
    sta rega+1
    stx regx+1
    sty regy+1
    // [248] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
  b1_from_irqBottom:
    jmp b1
    // irqBottom::@1
  b1:
    // [249] call processChars 
    // [254] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
  processChars_from_b1:
    jsr processChars
    jmp b2
    // irqBottom::@2
  b2:
    // [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the top of the screen
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [251] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 
    lda #<irqTop
    sta HARDWARE_IRQ
    lda #>irqTop
    sta HARDWARE_IRQ+1
    // [252] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp breturn
    // irqBottom::@return
  breturn:
    // [253] return  - exit interrupt(HARDWARE_ALL)
  rega:
    lda #00
  regx:
    ldx #00
  regy:
    ldy #00
    rti
}
  // processChars
// Process any chars in the PROCESSING array
processChars: {
    .label _15 = $24
    .label _25 = $22
    .label processing = $1f
    .label bitmask = $21
    .label i = 5
    .label xpos = $22
    .label ypos = $26
    .label numActive = 6
    // [255] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
  b1_from_processChars:
    // [255] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z numActive
    // [255] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b1
    // [255] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
  b1_from_b2:
    // [255] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy 
    // [255] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy 
    jmp b1
    // processChars::@1
  b1:
    // [256] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [257] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [258] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [259] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [260] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37 -- pssz1=pssc1_plus_vbuaa 
    clc
    adc #<PROCESSING
    sta.z processing
    lda #>PROCESSING
    adc #0
    sta.z processing+1
    // [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    lda (processing),y
    tax
    lda #1
    cpx #0
    beq !e+
  !:
    asl
    dex
    bne !-
  !e:
    sta.z bitmask
    // [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    lda (processing),y
    cmp #STATUS_FREE
    beq b2_from_b1
    jmp b10
    // processChars::@10
  b10:
    // [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    lda (processing),y
    cmp #STATUS_NEW
    bne b3
    jmp b11
    // processChars::@11
  b11:
    // [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_pptz1_derefidx_vbuc1=vbuc2 
    // Clear the char on the screen
    ldx #' '
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
    lda (processing),y
    sta !++1
    iny
    lda (processing),y
    sta !++2
    txa
  !:
    sta $ffff
    // [266] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    // Enable the sprite
    lda SPRITES_ENABLE
    ora.z bitmask
    sta SPRITES_ENABLE
    // [267] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_pbuz1_derefidx_vbuc2=pbuz1_derefidx_vbuc3 
    // Set the sprite color
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    pha
    lda (processing),y
    tay
    pla
    sta SPRITES_COLS,y
    // [268] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_pbuz1_derefidx_vbuc2=pbuz1_derefidx_vbuc3 
    // Set sprite pointer
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    pha
    lda (processing),y
    tay
    pla
    sta SCREEN+SPRITE_PTRS,y
    // [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 
    // Set status
    lda #STATUS_PROCESSING
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    sta (processing),y
    jmp b3
    // processChars::@3
  b3:
    // [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 
    ldy #0
    lda (processing),y
    sta.z xpos
    iny
    lda (processing),y
    sta.z xpos+1
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    // [271] (byte~) processChars::$11 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 
    lda.z xpos+1
    // [272] if((byte) 0!=(byte~) processChars::$11) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 
    // Set sprite position
    cmp #0
    bne b4
    jmp b8
    // processChars::@8
  b8:
    // [273] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // [274] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    and SPRITES_XMSB
    sta SPRITES_XMSB
    jmp b5
    // processChars::@5
  b5:
    // [275] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 
    lda.z i
    asl
    tax
    // [276] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 
    lda.z xpos
    // [277] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$17) ← (byte~) processChars::$14 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SPRITES_XPOS,x
    // [278] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    lda (processing),y
    sta.z _15
    iny
    lda (processing),y
    sta.z _15+1
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    // [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15 -- vbuz1=_byte_vwuz2 
    lda.z _15
    sta.z ypos
    // [280] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$17) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z ypos
    sta SPRITES_YPOS,x
    // [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 
    // Move sprite
    ldy #1
    lda (processing),y
    cmp #>XPOS_LEFTMOST
    bcc b6
    bne !+
    dey
    lda (processing),y
    cmp #<XPOS_LEFTMOST
    bcc b6
  !:
    jmp b14
    // processChars::@14
  b14:
    // [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 
    ldy #1
    lda #>XPOS_RIGHTMOST
    cmp (processing),y
    bcc b6
    bne !+
    dey
    lda #<XPOS_RIGHTMOST
    cmp (processing),y
    bcc b6
  !:
    jmp b13
    // processChars::@13
  b13:
    // [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    iny
    lda (processing),y
    cmp #>YPOS_TOPMOST
    bcc b6
    bne !+
    dey
    lda (processing),y
    cmp #<YPOS_TOPMOST
    bcc b6
  !:
    jmp b12
    // processChars::@12
  b12:
    // [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    iny
    lda #>YPOS_BOTTOMMOST
    cmp (processing),y
    bcc b6
    bne !+
    dey
    lda #<YPOS_BOTTOMMOST
    cmp (processing),y
    bcc b6
  !:
    jmp b9
    // processChars::@9
  b9:
    // [285] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 
    lsr.z _25+1
    ror.z _25
    lsr.z _25+1
    ror.z _25
    lsr.z _25+1
    ror.z _25
    // [286] (byte~) processChars::$26 ← (byte)(word~) processChars::$25 -- vbuaa=_byte_vwuz1 
    lda.z _25
    // [287] (byte) processChars::xchar#0 ← (byte~) processChars::$26 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_XPOS_LEFT/8
    // [288] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
    tax
    clc
    lda (processing),y
    adc VXSIN,x
    sta (processing),y
    iny
    lda (processing),y
    adc VXSIN+1,x
    sta (processing),y
    // [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
    sty.z $ff
    clc
    lda (processing),y
    ldy #0
    adc (processing),y
    sta (processing),y
    ldy.z $ff
    iny
    lda (processing),y
    ldy #1
    adc (processing),y
    sta (processing),y
    // [291] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    // [292] (byte) processChars::ychar#0 ← (byte~) processChars::$30 - (const byte) BORDER_YPOS_TOP#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_YPOS_TOP/8
    // [293] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
    tax
    clc
    lda (processing),y
    adc VYSIN,x
    sta (processing),y
    iny
    lda (processing),y
    adc VYSIN+1,x
    sta (processing),y
    // [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
    clc
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    adc (processing),y
    sta (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY+1
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y+1
    adc (processing),y
    sta (processing),y
    jmp b7
    // processChars::@7
  b7:
    // [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 
    inc.z numActive
    // [297] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
  b2_from_b1:
  b2_from_b7:
    // [297] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy 
    jmp b2
    // processChars::@2
  b2:
    // [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne b1_from_b2
    jmp breturn
    // processChars::@return
  breturn:
    // [300] return 
    rts
    // processChars::@6
  b6:
    // [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 
    // Set status to FREE
    lda #STATUS_FREE
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    sta (processing),y
    // [302] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // [303] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    // Disable the sprite
    and SPRITES_ENABLE
    sta SPRITES_ENABLE
    jmp b7
    // processChars::@4
  b4:
    // [304] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    lda SPRITES_XMSB
    ora.z bitmask
    sta SPRITES_XMSB
    jmp b5
}
  // irqTop
// Raster Interrupt at the top of the screen
irqTop: {
    // entry interrupt(HARDWARE_ALL)
    sta rega+1
    stx regx+1
    sty regy+1
    jmp b1
    // irqTop::@1
  b1:
    // [306] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the middle of the screen
    lda #RASTER_IRQ_MIDDLE
    sta RASTER
    // [307] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 
    lda #<irqBottom
    sta HARDWARE_IRQ
    lda #>irqBottom
    sta HARDWARE_IRQ+1
    // [308] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp breturn
    // irqTop::@return
  breturn:
    // [309] return  - exit interrupt(HARDWARE_ALL)
  rega:
    lda #00
  regx:
    ldx #00
  regy:
    ldy #00
    rti
}
  // File Data
  // 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

  // Values added to VX
VXSIN:
.for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }

  // Values added to VY
VYSIN:
.for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }

  // Sprites currently being processed in the interrupt
  PROCESSING: .fill $e*NUM_PROCESSING, 0

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b2
Removing instruction jmp bend
Removing instruction jmp b9
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b10
Removing instruction jmp b5
Removing instruction jmp b11
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp b9
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b3
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b10
Removing instruction jmp b12
Removing instruction jmp b21
Removing instruction jmp b7
Removing instruction jmp b9
Removing instruction jmp b8
Removing instruction jmp breturn
Removing instruction jmp b13
Removing instruction jmp b15
Removing instruction jmp b16
Removing instruction jmp b17
Removing instruction jmp b20
Removing instruction jmp b19
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp b3
Removing instruction jmp b8
Removing instruction jmp b5
Removing instruction jmp b14
Removing instruction jmp b13
Removing instruction jmp b12
Removing instruction jmp b9
Removing instruction jmp b7
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #>0
Replacing instruction lda #0 with TYA
Removing instruction ldy #0
Replacing instruction lda #0 with TYA
Removing instruction ldy #0
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction ldy #0 with TAY
Removing instruction lda #0
Removing instruction lda #0
Removing instruction ldy #0
Removing instruction lda.z ang_w
Removing instruction lda.z ang_w
Removing instruction ldy.z xb
Removing instruction ldy.z x
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Removing instruction lda #0
Removing instruction lda.z ypos
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b3_from_b3 with b3
Replacing label b6_from_b6 with b6
Replacing label b2_from_b3 with b2
Replacing label b4_from_b9 with b4
Replacing label b3_from_b12 with b3
Replacing label b3_from_b11 with b3
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b3_from_b3 with b3
Replacing label b3_from_b2 with b3
Replacing label b1_from_b4 with b1
Replacing label b7_from_b12 with b7
Replacing label b8_from_b7 with b8
Replacing label b17_from_b15 with b17
Replacing label b12_from_b19 with b12
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 b2_from_b1 with b2
Replacing label b1_from_b2 with b1
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction malloc_from_b1:
Removing instruction b4:
Removing instruction b2_from_b4:
Removing instruction bend_from_b2:
Removing instruction b2_from_b1:
Removing instruction b3_from_b3:
Removing instruction b4_from_b3:
Removing instruction initSprites_from_b4:
Removing instruction b10_from_b4:
Removing instruction b5_from_b10:
Removing instruction b2_from_b1:
Removing instruction b2_from_b3:
Removing instruction b4_from_b2:
Removing instruction b4_from_b9:
Removing instruction b6_from_b6:
Removing instruction b2_from_b1:
Removing instruction b3_from_b11:
Removing instruction b3_from_b12:
Removing instruction b3_from_b5:
Removing instruction b2_from_b1:
Removing instruction b3_from_b3:
Removing instruction b1_from_b4:
Removing instruction b3_from_b1:
Removing instruction b3_from_b2:
Removing instruction b3_from_b1:
Removing instruction b3_from_b2:
Removing instruction b6_from_b4:
Removing instruction b6_from_b5:
Removing instruction b10_from_b6:
Removing instruction b12_from_b10:
Removing instruction b12_from_b19:
Removing instruction b7_from_b12:
Removing instruction b7_from_b21:
Removing instruction b8_from_b7:
Removing instruction b8_from_b9:
Removing instruction breturn:
Removing instruction b13_from_b11:
Removing instruction b13_from_b14:
Removing instruction b17_from_b15:
Removing instruction b17_from_b16:
Removing instruction b19_from_b18:
Removing instruction b19_from_b20:
Removing instruction b1_from_irqBottom:
Removing instruction processChars_from_b1:
Removing instruction breturn:
Removing instruction b1_from_b2:
Removing instruction b2_from_b1:
Removing instruction b2_from_b7:
Removing instruction breturn:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b3:
Removing instruction malloc_from_b3:
Removing instruction b2:
Removing instruction bend:
Removing instruction b9:
Removing instruction b2_from_b9:
Removing instruction b1:
Removing instruction b3_from_b1:
Removing instruction b4:
Removing instruction b10:
Removing instruction b5:
Removing instruction b11:
Removing instruction b7:
Removing instruction startProcessing_from_b6:
Removing instruction b1_from_startProcessing:
Removing instruction b5:
Removing instruction b6_from_b5:
Removing instruction b7:
Removing instruction breturn:
Removing instruction b1_from_b8:
Removing instruction b9:
Removing instruction b1_from_getCharToProcess:
Removing instruction b4:
Removing instruction b5:
Removing instruction b6:
Removing instruction b7:
Removing instruction b8:
Removing instruction b1_from_b9:
Removing instruction b2_from_b10:
Removing instruction b1:
Removing instruction b2:
Removing instruction breturn:
Removing instruction b2_from_initSprites:
Removing instruction b1:
Removing instruction b3_from_b1:
Removing instruction b4:
Removing instruction breturn:
Removing instruction b1_from_init_angle_screen:
Removing instruction b5:
Removing instruction b2:
Removing instruction b4:
Removing instruction breturn:
Removing instruction b2:
Removing instruction b5:
Removing instruction b21:
Removing instruction b9:
Removing instruction b15:
Removing instruction b16:
Removing instruction b20:
Removing instruction b10_from_b19:
Removing instruction breturn:
Removing instruction b1:
Removing instruction b2:
Removing instruction b1_from_processChars:
Removing instruction b10:
Removing instruction b11:
Removing instruction b8:
Removing instruction b14:
Removing instruction b13:
Removing instruction b12:
Removing instruction b9:
Removing instruction breturn:
Removing instruction b1:
Succesful ASM optimization Pass5UnusedLabelElimination
Relabelling long label b5_from_b6 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Adding RTS to root block 
Succesful ASM optimization Pass5AddMainRts
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp b6
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Fixing long branch [456] bne b2 to beq
Fixing long branch [867] beq b12 to bne
Fixing long branch [1211] bne b1 to beq
Fixing long branch [232] bne b3 to beq
Fixing long branch [238] beq b8 to bne
Fixing long branch [501] beq b11 to bne
Fixing long branch [767] bpl b1 to bmi
Fixing long branch [779] bpl b4 to bmi
Fixing long branch [1024] beq b2 to bne
Fixing long branch [1085] bne b4 to beq
Fixing long branch [1119] bcc b6 to bcs
Fixing long branch [1126] bcc b6 to bcs
Fixing long branch [1133] bcc b6 to bcs
Fixing long branch [1140] bcc b6 to bcs
Fixing long branch [1148] bcc b6 to bcs
Fixing long branch [1155] bcc b6 to bcs
Fixing long branch [1163] bcc b6 to bcs

FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @3
(label) @4
(label) @begin
(label) @end
(byte*) BGCOL
(byte) BLUE
(byte*) BORDERCOL
(byte) BORDER_XPOS_LEFT
(const byte) BORDER_XPOS_LEFT#0 BORDER_XPOS_LEFT = (byte) $18
(word) BORDER_XPOS_RIGHT
(const word) BORDER_XPOS_RIGHT#0 BORDER_XPOS_RIGHT = (word) $158
(byte) BORDER_YPOS_BOTTOM
(const byte) BORDER_YPOS_BOTTOM#0 BORDER_YPOS_BOTTOM = (byte) $fa
(byte) BORDER_YPOS_TOP
(const byte) BORDER_YPOS_TOP#0 BORDER_YPOS_TOP = (byte) $32
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = (byte*) 53248
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = (byte*) 56333
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte) $7f
(byte*) COLS
(const byte*) COLS#0 COLS = (byte*) 55296
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
(const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 CORDIC_ATAN2_ANGLES_16 = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
(byte) CORDIC_ITERATIONS_16
(const byte) CORDIC_ITERATIONS_16#0 CORDIC_ITERATIONS_16 = (byte) $f
(bool) DEBUG
(void()**) HARDWARE_IRQ
(const void()**) HARDWARE_IRQ#0 HARDWARE_IRQ = (void()**) 65534
(byte*) HEAP_TOP
(const byte*) HEAP_TOP#0 HEAP_TOP = (byte*) 40960
(byte*) IRQ_ENABLE
(const byte*) IRQ_ENABLE#0 IRQ_ENABLE = (byte*) 53274
(byte) IRQ_RASTER
(const byte) IRQ_RASTER#0 IRQ_RASTER = (byte) 1
(byte*) IRQ_STATUS
(const byte*) IRQ_STATUS#0 IRQ_STATUS = (byte*) 53273
(byte) LIGHT_BLUE
(const byte) LIGHT_BLUE#0 LIGHT_BLUE = (byte) $e
(byte) NOT_FOUND
(const byte) NOT_FOUND#0 NOT_FOUND = (byte) $ff
(byte) NUM_PROCESSING
(const byte) NUM_PROCESSING#0 NUM_PROCESSING = (byte) 8
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL OFFSET_STRUCT_PROCESSINGSPRITE_COL = (byte) $a
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID OFFSET_STRUCT_PROCESSINGSPRITE_ID = (byte) 8
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR OFFSET_STRUCT_PROCESSINGSPRITE_PTR = (byte) 9
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = (byte) $c
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = (byte) $b
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX OFFSET_STRUCT_PROCESSINGSPRITE_VX = (byte) 4
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY OFFSET_STRUCT_PROCESSINGSPRITE_VY = (byte) 6
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y OFFSET_STRUCT_PROCESSINGSPRITE_Y = (byte) 2
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING
(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 PROCESSING = { fill( NUM_PROCESSING#0, 0) }
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = (byte*) 1
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = (byte*) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte) 7
(byte) PROCPORT_RAM_CHARROM
(const byte) PROCPORT_RAM_CHARROM#0 PROCPORT_RAM_CHARROM = (byte) 1
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte) 5
(byte) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::col
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(const byte) RADIX::BINARY BINARY = (number) 2
(const byte) RADIX::DECIMAL DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL OCTAL = (number) 8
(byte*) RASTER
(const byte*) RASTER#0 RASTER = (byte*) 53266
(byte) RASTER_IRQ_MIDDLE
(const byte) RASTER_IRQ_MIDDLE#0 RASTER_IRQ_MIDDLE = (byte) $ff
(byte) RASTER_IRQ_TOP
(const byte) RASTER_IRQ_TOP#0 RASTER_IRQ_TOP = (byte) $30
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
(byte*) SCREEN_COPY
(void*) SCREEN_COPY#0 SCREEN_COPY zp ZP_WORD:7 0.0273972602739726
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:9 0.028169014084507043
(byte*) SPRITES_COLS
(const byte*) SPRITES_COLS#0 SPRITES_COLS = (byte*) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = (byte*) 53269
(byte*) SPRITES_EXPAND_X
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = (byte*) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = (byte*) 53271
(byte*) SPRITES_MC
(const byte*) SPRITES_MC#0 SPRITES_MC = (byte*) 53276
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = (byte*) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = (byte*) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = (byte*) 53249
(byte*) SPRITE_DATA
(const byte*) SPRITE_DATA#0 SPRITE_DATA = (byte*) 8192
(word) SPRITE_PTRS
(const word) SPRITE_PTRS#0 SPRITE_PTRS = (word) $3f8
(const byte) STATUS_FREE STATUS_FREE = (byte) 0
(const byte) STATUS_NEW STATUS_NEW = (byte) 1
(const byte) STATUS_PROCESSING STATUS_PROCESSING = (byte) 2
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
(word[$28]) VXSIN
(const word[$28]) VXSIN#0 VXSIN = kickasm {{ .for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }
 }}
(word[$19]) VYSIN
(const word[$19]) VYSIN#0 VYSIN = kickasm {{ .for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }
 }}
(byte) WHITE
(word) XPOS_LEFTMOST
(const word) XPOS_LEFTMOST#0 XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8<<(byte) 4
(word) XPOS_RIGHTMOST
(const word) XPOS_RIGHTMOST#0 XPOS_RIGHTMOST = (const word) BORDER_XPOS_RIGHT#0<<(byte) 4
(word) YPOS_BOTTOMMOST
(const word) YPOS_BOTTOMMOST#0 YPOS_BOTTOMMOST = (word)(const byte) BORDER_YPOS_BOTTOM#0<<(byte) 4
(word) YPOS_TOPMOST
(const word) YPOS_TOPMOST#0 YPOS_TOPMOST = (word)(const byte) BORDER_YPOS_TOP#0-(byte) 8<<(byte) 4
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 $2 zp ZP_WORD:12 4.0
(byte~) atan2_16::$23 reg byte a 2002.0
(byte~) atan2_16::$24 reg byte a 2002.0
(signed word~) atan2_16::$7 $7 zp ZP_WORD:14 4.0
(label) atan2_16::@1
(label) atan2_16::@10
(label) atan2_16::@11
(label) atan2_16::@12
(label) atan2_16::@13
(label) atan2_16::@14
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@21
(label) atan2_16::@3
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@9
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#1 angle zp ZP_WORD:16 3.0
(word) atan2_16::angle#11 angle zp ZP_WORD:16 4.0
(word) atan2_16::angle#12 angle zp ZP_WORD:16 190.66666666666666
(word) atan2_16::angle#13 angle zp ZP_WORD:16 1334.6666666666667
(word) atan2_16::angle#2 angle zp ZP_WORD:16 2002.0
(word) atan2_16::angle#3 angle zp ZP_WORD:16 2002.0
(word) atan2_16::angle#4 angle zp ZP_WORD:16 4.0
(word) atan2_16::angle#5 angle zp ZP_WORD:16 4.0
(word) atan2_16::angle#6 angle zp ZP_WORD:16 2004.0
(byte) atan2_16::i
(byte) atan2_16::i#1 reg byte x 1501.5
(byte) atan2_16::i#2 reg byte x 208.54166666666669
(word) atan2_16::return
(word) atan2_16::return#0 return zp ZP_WORD:16 34.99999999999999
(word) atan2_16::return#2 return zp ZP_WORD:16 202.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 reg byte y 20002.0
(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:26 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 xd zp ZP_WORD:21 6667.333333333333
(signed word~) atan2_16::xd#10 xd zp ZP_WORD:21 1001.0
(signed word) atan2_16::xd#2 xd zp ZP_WORD:21 1001.0
(signed word) atan2_16::xd#3 xd zp ZP_WORD:21 7668.333333333332
(signed word) atan2_16::xd#5 xd zp ZP_WORD:21 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 xi zp ZP_WORD:14 6.0
(signed word) atan2_16::xi#1 xi zp ZP_WORD:14 500.5
(signed word~) atan2_16::xi#13 xi zp ZP_WORD:14 4.0
(signed word) atan2_16::xi#2 xi zp ZP_WORD:14 500.5
(signed word) atan2_16::xi#3 xi zp ZP_WORD:14 267.0666666666667
(signed word) atan2_16::xi#8 xi zp ZP_WORD:14 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 y zp ZP_WORD:28 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 yd zp ZP_WORD:19 10001.0
(signed word~) atan2_16::yd#10 yd zp ZP_WORD:19 2002.0
(signed word) atan2_16::yd#2 yd zp ZP_WORD:19 2002.0
(signed word) atan2_16::yd#3 yd zp ZP_WORD:19 4601.0
(signed word) atan2_16::yd#5 yd zp ZP_WORD:19 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 yi zp ZP_WORD:12 1.2000000000000002
(signed word) atan2_16::yi#1 yi zp ZP_WORD:12 667.3333333333334
(signed word~) atan2_16::yi#16 yi zp ZP_WORD:12 4.0
(signed word) atan2_16::yi#2 yi zp ZP_WORD:12 667.3333333333334
(signed word) atan2_16::yi#3 yi zp ZP_WORD:12 353.4117647058823
(signed word) atan2_16::yi#8 yi zp ZP_WORD:12 1001.0
(struct ProcessingChar()) getCharToProcess()
(byte*~) getCharToProcess::$10 $10 zp ZP_WORD:24 4.0
(word) getCharToProcess::$12 $12 zp ZP_WORD:26 4.0
(word) getCharToProcess::$13 $13 zp ZP_WORD:24 4.0
(word~) getCharToProcess::$8 $8 zp ZP_WORD:24 3.0
(word~) getCharToProcess::$9 $9 zp ZP_WORD:24 4.0
(label) getCharToProcess::@1
(label) getCharToProcess::@10
(label) getCharToProcess::@11
(label) getCharToProcess::@12
(label) getCharToProcess::@2
(label) getCharToProcess::@3
(label) getCharToProcess::@4
(label) getCharToProcess::@5
(label) getCharToProcess::@6
(label) getCharToProcess::@7
(label) getCharToProcess::@8
(label) getCharToProcess::@9
(label) getCharToProcess::@return
(byte) getCharToProcess::closest_dist
(byte~) getCharToProcess::closest_dist#10 closest_dist zp ZP_BYTE:18 202.0
(byte~) getCharToProcess::closest_dist#12 closest_dist zp ZP_BYTE:18 2002.0
(byte) getCharToProcess::closest_dist#2 closest_dist zp ZP_BYTE:18 1026.25
(byte) getCharToProcess::closest_dist#8 closest_dist zp ZP_BYTE:18 202.0
(byte) getCharToProcess::closest_x
(byte) getCharToProcess::closest_x#7 closest_x zp ZP_BYTE:23 517.3333333333334
(byte) getCharToProcess::closest_x#9 closest_x zp ZP_BYTE:23 202.0
(byte) getCharToProcess::closest_y
(byte) getCharToProcess::closest_y#7 closest_y zp ZP_BYTE:11 517.3333333333334
(byte) getCharToProcess::closest_y#9 closest_y zp ZP_BYTE:11 202.0
(byte) getCharToProcess::dist
(byte) getCharToProcess::dist#0 reg byte x 750.75
(byte*) getCharToProcess::dist_line
(byte*) getCharToProcess::dist_line#0 dist_line zp ZP_WORD:3 4.0
(byte*) getCharToProcess::dist_line#1 dist_line zp ZP_WORD:3 50.5
(byte*) getCharToProcess::dist_line#6 dist_line zp ZP_WORD:3 86.07142857142857
(struct ProcessingChar) getCharToProcess::return
(byte) getCharToProcess::return_dist
(byte) getCharToProcess::return_dist#0 reg byte x 7.333333333333333
(byte) getCharToProcess::return_dist#1 reg byte x 228.7777777777778
(byte~) getCharToProcess::return_dist#5 reg byte x 2002.0
(byte~) getCharToProcess::return_dist#6 reg byte x 2002.0
(byte) getCharToProcess::return_x
(byte) getCharToProcess::return_x#0 reg byte y 7.333333333333333
(byte) getCharToProcess::return_x#1 return_x zp ZP_BYTE:23 228.7777777777778
(byte~) getCharToProcess::return_x#7 return_x zp ZP_BYTE:23 1001.0
(byte) getCharToProcess::return_y
(byte) getCharToProcess::return_y#0 reg byte a 7.333333333333333
(byte) getCharToProcess::return_y#1 return_y zp ZP_BYTE:11 216.6315789473684
(byte~) getCharToProcess::return_y#7 return_y zp ZP_BYTE:11 2002.0
(byte*) getCharToProcess::screen_line
(byte*) getCharToProcess::screen_line#0 screen_line zp ZP_WORD:28 2.0
(byte*) getCharToProcess::screen_line#1 screen_line zp ZP_WORD:28 40.4
(byte*) getCharToProcess::screen_line#4 screen_line zp ZP_WORD:28 92.6923076923077
(byte) getCharToProcess::x
(byte) getCharToProcess::x#1 reg byte y 1001.0
(byte) getCharToProcess::x#2 reg byte y 556.1111111111111
(byte) getCharToProcess::y
(byte) getCharToProcess::y#1 y zp ZP_BYTE:2 101.0
(byte) getCharToProcess::y#7 y zp ZP_BYTE:2 80.2
(byte*) heap_head
(byte*) heap_head#1 heap_head zp ZP_WORD:24 1.0
(byte*) heap_head#5 heap_head zp ZP_WORD:24 4.0
(void()) initSprites()
(label) initSprites::@1
(label) initSprites::@2
(label) initSprites::@3
(label) initSprites::@4
(label) initSprites::@return
(byte) initSprites::i
(byte) initSprites::i#1 reg byte x 16.5
(byte) initSprites::i#2 reg byte x 16.5
(byte*) initSprites::sp
(byte*) initSprites::sp#1 sp zp ZP_WORD:28 16.5
(byte*) initSprites::sp#4 sp zp ZP_WORD:28 16.5
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(word~) init_angle_screen::$11 $11 zp ZP_WORD:16 202.0
(byte~) init_angle_screen::$13 reg byte a 202.0
(byte~) init_angle_screen::$14 reg byte a 202.0
(byte~) init_angle_screen::$15 reg byte a 202.0
(byte~) init_angle_screen::$3 reg byte a 202.0
(byte~) init_angle_screen::$4 reg byte a 202.0
(byte~) init_angle_screen::$7 reg byte a 202.0
(label) init_angle_screen::@1
(label) init_angle_screen::@2
(label) init_angle_screen::@3
(label) init_angle_screen::@4
(label) init_angle_screen::@5
(label) init_angle_screen::@return
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:30 84.16666666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:16 202.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:24 3.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:24 4.0
(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:24 7.333333333333333
(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:24 9.040000000000001
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:3 2.0
(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:3 5.5
(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:3 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 x zp ZP_BYTE:18 101.0
(byte) init_angle_screen::x#5 x zp ZP_BYTE:18 25.25
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:23 101.0
(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:23 19.238095238095237
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 xw zp ZP_WORD:26 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 y zp ZP_BYTE:2 16.5
(byte) init_angle_screen::y#5 y zp ZP_BYTE:2 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 yw zp ZP_WORD:28 50.5
interrupt(HARDWARE_ALL)(void()) irqBottom()
(label) irqBottom::@1
(label) irqBottom::@2
(label) irqBottom::@return
(byte) irqBottom::i
interrupt(HARDWARE_ALL)(void()) irqTop()
(label) irqTop::@1
(label) irqTop::@return
(byte) irqTop::i
(byte) irqTop::i1
(void()) main()
(byte~) main::$16 reg byte x 12.222222222222221
(byte) main::$26 reg byte a 22.0
(byte) main::$27 reg byte a 22.0
(byte) main::$28 reg byte a 22.0
(byte) main::$29 reg byte a 22.0
(struct ProcessingChar~) main::$9
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(byte) main::center_dist
(byte) main::center_dist#0 reg byte a 22.0
(byte) main::center_x
(byte) main::center_x#0 reg byte y 5.5
(byte) main::center_y
(byte) main::center_y#0 center_y zp ZP_BYTE:11 5.5
(byte*) main::dst
(byte*) main::dst#0 dst zp ZP_WORD:3 4.0
(byte*) main::dst#1 dst zp ZP_WORD:3 11.0
(byte*) main::dst#4 dst zp ZP_WORD:3 11.666666666666666
(byte) main::i
(byte) main::i#1 i zp ZP_BYTE:2 16.5
(byte) main::i#2 i zp ZP_BYTE:2 3.6666666666666665
(byte*) main::src
(byte*) main::src#1 src zp ZP_WORD:28 11.0
(byte*) main::src#4 src zp ZP_WORD:28 16.5
(void*()) malloc((word) malloc::size)
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0 mem zp ZP_WORD:9 0.8
(void*) malloc::return
(word) malloc::size
(void()) processChars()
(byte~) processChars::$11 reg byte a 22.0
(byte~) processChars::$12 reg byte a 22.0
(byte~) processChars::$14 reg byte a 22.0
(word~) processChars::$15 $15 zp ZP_WORD:36 11.0
(byte~) processChars::$17 reg byte x 6.6000000000000005
(word~) processChars::$25 $25 zp ZP_WORD:34 11.0
(byte~) processChars::$26 reg byte a 22.0
(byte~) processChars::$30 reg byte a 22.0
(byte~) processChars::$33 reg byte a 22.0
(byte~) processChars::$37 reg byte a 22.0
(byte~) processChars::$38 reg byte a 22.0
(byte~) processChars::$39 reg byte a 22.0
(byte) processChars::$67 reg byte a 22.0
(byte) processChars::$68 reg byte a 22.0
(byte) processChars::$69 reg byte a 22.0
(byte) processChars::$70 reg byte a 22.0
(label) processChars::@1
(label) processChars::@10
(label) processChars::@11
(label) processChars::@12
(label) processChars::@13
(label) processChars::@14
(label) processChars::@2
(label) processChars::@3
(label) processChars::@4
(label) processChars::@5
(label) processChars::@6
(label) processChars::@7
(label) processChars::@8
(label) processChars::@9
(label) processChars::@return
(byte) processChars::bitmask
(byte) processChars::bitmask#0 bitmask zp ZP_BYTE:33 2.2
(byte) processChars::i
(byte) processChars::i#1 i zp ZP_BYTE:5 16.5
(byte) processChars::i#10 i zp ZP_BYTE:5 1.4042553191489362
(byte) processChars::numActive
(byte) processChars::numActive#1 numActive zp ZP_BYTE:6 22.0
(byte) processChars::numActive#10 numActive zp ZP_BYTE:6 0.7333333333333333
(byte) processChars::numActive#3 numActive zp ZP_BYTE:6 11.0
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 processing zp ZP_WORD:31 0.3142857142857143
(byte) processChars::xchar
(byte) processChars::xchar#0 reg byte a 22.0
(word) processChars::xpos
(word) processChars::xpos#0 xpos zp ZP_WORD:34 2.0625
(byte) processChars::ychar
(byte) processChars::ychar#0 reg byte a 22.0
(byte) processChars::ypos
(byte) processChars::ypos#0 ypos zp ZP_BYTE:38 2.75
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(label) setupRasterIrq::@1
(label) setupRasterIrq::@2
(label) setupRasterIrq::@return
(void()*) setupRasterIrq::irqRoutine
(const void()*) setupRasterIrq::irqRoutine#0 irqRoutine = &interrupt(HARDWARE_ALL)(void()) irqTop()
(word) setupRasterIrq::raster
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
(word~) startProcessing::$0 $0 zp ZP_WORD:12 3.0
(word~) startProcessing::$1 $1 zp ZP_WORD:12 4.0
(word~) startProcessing::$11 $11 zp ZP_WORD:19 4.0
(word~) startProcessing::$12 $12 zp ZP_WORD:19 4.0
(word~) startProcessing::$13 $13 zp ZP_WORD:19 4.0
(word~) startProcessing::$15 $15 zp ZP_WORD:21 4.0
(word~) startProcessing::$16 $16 zp ZP_WORD:21 4.0
(word~) startProcessing::$17 $17 zp ZP_WORD:21 4.0
(byte~) startProcessing::$22 reg byte a 2.0
(word~) startProcessing::$23 $23 zp ZP_WORD:24 0.5
(byte~) startProcessing::$30 reg byte a 2002.0
(byte~) startProcessing::$31 reg byte x 2.2222222222222228
(byte) startProcessing::$42 reg byte a 2002.0
(byte) startProcessing::$43 reg byte a 2002.0
(byte) startProcessing::$44 reg byte a 2002.0
(byte) startProcessing::$45 reg byte a 2002.0
(word) startProcessing::$47 $47 zp ZP_WORD:14 4.0
(word) startProcessing::$48 $48 zp ZP_WORD:12 4.0
(word~) startProcessing::$5 $5 zp ZP_WORD:3 4.0
(byte) startProcessing::$50 reg byte a 4.0
(byte) startProcessing::$51 reg byte a 4.0
(byte) startProcessing::$52 reg byte a 4.0
(byte) startProcessing::$53 reg byte a 4.0
(word~) startProcessing::$6 $6 zp ZP_WORD:3 4.0
(word~) startProcessing::$8 $8 zp ZP_WORD:28 4.0
(word~) startProcessing::$9 $9 zp ZP_WORD:28 4.0
(label) startProcessing::@1
(label) startProcessing::@2
(label) startProcessing::@3
(label) startProcessing::@4
(label) startProcessing::@5
(label) startProcessing::@6
(label) startProcessing::@7
(label) startProcessing::@8
(label) startProcessing::@9
(label) startProcessing::@return
(struct ProcessingChar) startProcessing::center
(byte) startProcessing::center_dist
(byte) startProcessing::center_x
(byte) startProcessing::center_x#0 center_x zp ZP_BYTE:30 0.30952380952380953
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0 center_y zp ZP_BYTE:11 0.24444444444444444
(byte) startProcessing::ch
(byte) startProcessing::ch#0 reg byte a 2.0
(byte*) startProcessing::chargenData
(byte*) startProcessing::chargenData#0 chargenData zp ZP_WORD:28 1.3333333333333333
(byte*) startProcessing::chargenData#1 chargenData zp ZP_WORD:28 67.33333333333333
(byte*) startProcessing::chargenData#2 chargenData zp ZP_WORD:28 101.66666666666666
(byte*) startProcessing::colPtr
(byte*) startProcessing::colPtr#0 colPtr zp ZP_WORD:16 4.0
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 freeIdx zp ZP_BYTE:2 28.0
(byte) startProcessing::freeIdx#6 reg byte x 20.2
(byte~) startProcessing::freeIdx#7 reg byte x 202.0
(byte~) startProcessing::freeIdx#8 freeIdx zp ZP_BYTE:2 202.0
(byte) startProcessing::i
(byte) startProcessing::i#1 i zp ZP_BYTE:2 1501.5
(byte) startProcessing::i#2 i zp ZP_BYTE:2 858.0
(byte) startProcessing::i1
(byte) startProcessing::i1#1 reg byte x 151.5
(byte) startProcessing::i1#2 reg byte x 50.5
(word) startProcessing::offset
(word) startProcessing::offset#0 offset zp ZP_WORD:12 2.0
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 screenPtr zp ZP_WORD:12 0.14285714285714285
(byte) startProcessing::spriteCol
(byte) startProcessing::spriteCol#0 spriteCol zp ZP_BYTE:18 0.0975609756097561
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 spriteData zp ZP_WORD:3 0.5714285714285714
(byte*) startProcessing::spriteData#1 spriteData zp ZP_WORD:3 50.5
(byte*) startProcessing::spriteData#2 spriteData zp ZP_WORD:3 152.5
(byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 spritePtr zp ZP_BYTE:23 0.3076923076923077
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0 spriteX zp ZP_WORD:19 0.3076923076923077
(word) startProcessing::spriteY
(word) startProcessing::spriteY#0 spriteY zp ZP_WORD:21 0.4

reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ]
reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ]
reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
reg byte x [ initSprites::i#2 initSprites::i#1 ]
zp ZP_BYTE:2 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ]
zp ZP_WORD:3 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#4 main::dst#1 main::dst#0 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp ZP_BYTE:5 [ processChars::i#10 processChars::i#1 ]
zp ZP_BYTE:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
zp ZP_WORD:7 [ SCREEN_COPY#0 ]
zp ZP_WORD:9 [ SCREEN_DIST#0 malloc::mem#0 ]
reg byte a [ main::$26 ]
reg byte a [ main::$27 ]
reg byte a [ main::$28 ]
reg byte a [ main::$29 ]
reg byte x [ main::$16 ]
reg byte y [ getCharToProcess::return_x#0 ]
reg byte a [ getCharToProcess::return_y#0 ]
reg byte x [ getCharToProcess::return_dist#0 ]
reg byte y [ main::center_x#0 ]
zp ZP_BYTE:11 [ main::center_y#0 startProcessing::center_y#0 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
reg byte a [ main::center_dist#0 ]
reg byte a [ startProcessing::$42 ]
reg byte a [ startProcessing::$43 ]
reg byte a [ startProcessing::$44 ]
reg byte a [ startProcessing::$45 ]
reg byte a [ startProcessing::$30 ]
zp ZP_WORD:12 [ startProcessing::$0 startProcessing::$48 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 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:14 [ startProcessing::$47 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 ]
zp ZP_WORD:16 [ startProcessing::colPtr#0 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 init_angle_screen::$11 ]
zp ZP_BYTE:18 [ startProcessing::spriteCol#0 init_angle_screen::x#5 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
reg byte a [ startProcessing::ch#0 ]
zp ZP_WORD:19 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp ZP_WORD:21 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp ZP_BYTE:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#5 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
reg byte a [ startProcessing::$22 ]
reg byte a [ startProcessing::$50 ]
reg byte a [ startProcessing::$51 ]
reg byte a [ startProcessing::$52 ]
reg byte a [ startProcessing::$53 ]
reg byte x [ startProcessing::$31 ]
zp ZP_WORD:24 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$23 heap_head#5 heap_head#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ]
reg byte a [ init_angle_screen::$3 ]
reg byte a [ init_angle_screen::$4 ]
zp ZP_WORD:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ]
reg byte a [ init_angle_screen::$7 ]
zp ZP_WORD:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#4 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#4 main::src#1 ]
zp ZP_BYTE:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ]
reg byte a [ init_angle_screen::$13 ]
reg byte a [ init_angle_screen::$14 ]
reg byte a [ init_angle_screen::$15 ]
reg byte a [ atan2_16::$24 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ processChars::$67 ]
reg byte a [ processChars::$68 ]
reg byte a [ processChars::$69 ]
reg byte a [ processChars::$70 ]
reg byte a [ processChars::$37 ]
zp ZP_WORD:31 [ processChars::processing#0 ]
zp ZP_BYTE:33 [ processChars::bitmask#0 ]
zp ZP_WORD:34 [ processChars::xpos#0 processChars::$25 ]
reg byte a [ processChars::$11 ]
reg byte a [ processChars::$12 ]
reg byte x [ processChars::$17 ]
reg byte a [ processChars::$14 ]
zp ZP_WORD:36 [ processChars::$15 ]
zp ZP_BYTE:38 [ processChars::ypos#0 ]
reg byte a [ processChars::$26 ]
reg byte a [ processChars::xchar#0 ]
reg byte a [ processChars::$38 ]
reg byte a [ processChars::$30 ]
reg byte a [ processChars::ychar#0 ]
reg byte a [ processChars::$39 ]
reg byte a [ processChars::$33 ]


FINAL ASSEMBLER
Score: 1113582

  // File Comments
// Clears start screen throwing around the letters (by turning them into sprites)
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const STATUS_FREE = 0
  .const STATUS_NEW = 1
  .const STATUS_PROCESSING = 2
  .const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
  .const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4
  .const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6
  .const OFFSET_STRUCT_PROCESSINGSPRITE_ID = 8
  .const OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 9
  .const OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a
  .const OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b
  .const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // Processor port data direction register
  .label PROCPORT_DDR = 0
  // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  // Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  // RAM in $A000, $E000 I/O in $D000
  .const PROCPORT_RAM_IO = 5
  // RAM in $A000, $E000 CHAR ROM in $D000
  .const PROCPORT_RAM_CHARROM = 1
  // The address of the CHARGEN character set
  .label CHARGEN = $d000
  // Positions of the border (in sprite positions)
  .const BORDER_XPOS_LEFT = $18
  .const BORDER_XPOS_RIGHT = $158
  .const BORDER_YPOS_TOP = $32
  .const BORDER_YPOS_BOTTOM = $fa
  // The offset of the sprite pointers from the screen start address
  .const SPRITE_PTRS = $3f8
  .label SPRITES_XPOS = $d000
  .label SPRITES_YPOS = $d001
  .label SPRITES_XMSB = $d010
  .label RASTER = $d012
  .label SPRITES_ENABLE = $d015
  .label SPRITES_EXPAND_Y = $d017
  .label SPRITES_MC = $d01c
  .label SPRITES_EXPAND_X = $d01d
  .label SPRITES_COLS = $d027
  .label VIC_CONTROL = $d011
  // VIC II IRQ Status Register
  .label IRQ_STATUS = $d019
  // VIC II IRQ Enable Register
  .label IRQ_ENABLE = $d01a
  // Bits for the IRQ Status/Enable Registers
  .const IRQ_RASTER = 1
  // Color Ram
  .label COLS = $d800
  // CIA#1 Interrupt Status & Control Register
  .label CIA1_INTERRUPT = $dc0d
  // Value that disables all CIA interrupts when stored to the CIA Interrupt registers
  .const CIA_INTERRUPT_CLEAR = $7f
  // The vector used when the HARDWARE serves IRQ interrupts
  .label HARDWARE_IRQ = $fffe
  .const LIGHT_BLUE = $e
  // Address of the screen
  .label SCREEN = $400
  // Sprite data for the animating sprites
  .label SPRITE_DATA = $2000
  // Max number of chars processed at once
  .const NUM_PROCESSING = 8
  // Distance value meaning not found
  .const NOT_FOUND = $ff
  .const RASTER_IRQ_TOP = $30
  .const RASTER_IRQ_MIDDLE = $ff
  .const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
  .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
  .const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
  .const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
  .label heap_head = $18
  .label SCREEN_COPY = 7
  .label SCREEN_DIST = 9
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
  // malloc(1000)
  // [2] call malloc 
  // [243] phi from @1 to malloc [phi:@1->malloc]
  // [243] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#0] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  // @3
  // malloc(1000)
  // [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_COPY
  lda.z malloc.mem+1
  sta.z SCREEN_COPY+1
  // [4] call malloc 
  // [243] phi from @3 to malloc [phi:@3->malloc]
  // [243] phi (byte*) heap_head#5 = (byte*) heap_head#1 [phi:@3->malloc#0] -- register_copy 
  jsr malloc
  // @4
  // malloc(1000)
  // [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
  // [6] phi from @4 to @2 [phi:@4->@2]
  // @2
  // [7] call main 
  jsr main
  rts
  // [8] phi from @2 to @end [phi:@2->@end]
  // @end
  // main
main: {
    .label dst = 3
    .label src = $1c
    .label i = 2
    .label center_y = $b
    // init_angle_screen(SCREEN_DIST)
    // [9] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z init_angle_screen.screen
    lda.z SCREEN_DIST+1
    sta.z init_angle_screen.screen+1
    // [10] call init_angle_screen 
    jsr init_angle_screen
    // main::@9
    // dst=SCREEN_COPY
    // [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 
    lda.z SCREEN_COPY
    sta.z dst
    lda.z SCREEN_COPY+1
    sta.z dst+1
    // [12] phi from main::@9 to main::@2 [phi:main::@9->main::@2]
    // [12] phi (byte*) main::dst#4 = (byte*) main::dst#0 [phi:main::@9->main::@2#0] -- register_copy 
    // [12] phi (byte*) main::src#4 = (const byte*) SCREEN#0 [phi:main::@9->main::@2#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z src
    lda #>SCREEN
    sta.z src+1
    // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
    // [12] phi (byte*) main::dst#4 = (byte*) main::dst#1 [phi:main::@1->main::@2#0] -- register_copy 
    // [12] phi (byte*) main::src#4 = (byte*) main::src#1 [phi:main::@1->main::@2#1] -- register_copy 
    // main::@2
  b2:
    // *dst = *src
    // [13] *((byte*) main::dst#4) ← *((byte*) main::src#4) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (src),y
    sta (dst),y
    // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++)
    // [14] (byte*) main::src#1 ← ++ (byte*) main::src#4 -- pbuz1=_inc_pbuz1 
    inc.z src
    bne !+
    inc.z src+1
  !:
    // [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#4 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
  // Copy screen to screen copy
    // main::@1
    // [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z src+1
    cmp #>SCREEN+$3e8
    bne b2
    lda.z src
    cmp #<SCREEN+$3e8
    bne b2
    // [17] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
    // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
  // Init processing array
    // [17] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
    // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy 
    // main::@3
  b3:
    // PROCESSING[i] = { 0, 0, 0, 0, 0, 0, 0, STATUS_FREE, 0}
    // [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 -- vbuxx=vbuaa_rol_1 
    asl
    tax
    // [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROCESSING,x
    sta PROCESSING+1,x
    // [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
    // [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
    // [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
    // [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
    // [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
    // [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
    // [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #STATUS_FREE
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
    // [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2 
    lda #<0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
    // for( byte i: 0..NUM_PROCESSING-1 )
    // [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne b3
    // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
    // main::@4
    // initSprites()
    // [35] call initSprites 
    // [156] phi from main::@4 to initSprites [phi:main::@4->initSprites]
    jsr initSprites
    // [36] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
    // main::@10
    // setupRasterIrq(RASTER_IRQ_TOP, &irqTop)
    // [37] call setupRasterIrq 
    jsr setupRasterIrq
    // [38] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5]
  b1:
  // Main loop
    // main::@5
    // getCharToProcess()
    // [39] call getCharToProcess 
    jsr getCharToProcess
    // [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 
    ldy.z getCharToProcess.return_x
    // [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 
    lda.z getCharToProcess.return_y
    // [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1
    // main::@11
    // center = getCharToProcess()
    // [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
    // [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa 
    sta.z center_y
    // [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx 
    txa
    // if(center.dist==NOT_FOUND)
    // [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 
    cmp #NOT_FOUND
    bne b6
    // main::@7
    // (*(SCREEN+999)) = '.'
    // [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 
    lda #'.'
    sta SCREEN+$3e7
    // main::@8
  b8:
    // (*(COLS+999))++;
    // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp b8
    // main::@6
  b6:
    // startProcessing(center)
    // [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy 
    sty.z startProcessing.center_x
    // [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
    // [51] call startProcessing 
    // [52] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
    jsr startProcessing
    jmp b1
}
  // startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($1e) center_x, byte zeropage($b) center_y)
startProcessing: {
    .label _0 = $c
    .label _1 = $c
    .label _5 = 3
    .label _6 = 3
    .label _8 = $1c
    .label _9 = $1c
    .label _11 = $13
    .label _12 = $13
    .label _13 = $13
    .label _15 = $15
    .label _16 = $15
    .label _17 = $15
    .label _23 = $18
    .label center_x = $1e
    .label center_y = $b
    .label i = 2
    .label offset = $c
    .label colPtr = $10
    .label spriteCol = $12
    .label screenPtr = $c
    .label spriteData = 3
    .label chargenData = $1c
    .label spriteX = $13
    .label spriteY = $15
    .label spritePtr = $17
    .label freeIdx = 2
    .label _47 = $e
    .label _48 = $c
    // [53] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
    // [53] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 
    ldx #$ff
    // startProcessing::@1
  b1:
    // [54] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
    // [54] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [54] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
    // [54] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy 
    // startProcessing::@2
  b2:
    // PROCESSING[i].status==STATUS_FREE
    // [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // if(PROCESSING[i].status==STATUS_FREE)
    // [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 
    tay
    lda #STATUS_FREE
    cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
    beq !b3+
    jmp b3
  !b3:
    // [61] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
    // [61] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy 
    // startProcessing::@4
  b4:
    // while (freeIdx==0xff)
    // [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1 
    lda #$ff
    cmp.z freeIdx
    bne !b8+
    jmp b8
  !b8:
    // startProcessing::@5
    // (word)center.y
    // [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 
    lda.z center_y
    sta.z _0
    lda #0
    sta.z _0+1
    // (word)center.y*40
    // [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z _0
    asl
    sta.z _47
    lda.z _0+1
    rol
    sta.z _47+1
    asl.z _47
    rol.z _47+1
    // [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z _48
    clc
    adc.z _47
    sta.z _48
    lda.z _48+1
    adc.z _47+1
    sta.z _48+1
    // [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _1
    rol.z _1+1
    asl.z _1
    rol.z _1+1
    asl.z _1
    rol.z _1+1
    // offset = (word)center.y*40+center.x
    // [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z center_x
    clc
    adc.z offset
    sta.z offset
    bcc !+
    inc.z offset+1
  !:
    // colPtr = COLS+offset
    // [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z offset
    clc
    adc #<COLS
    sta.z colPtr
    lda.z offset+1
    adc #>COLS
    sta.z colPtr+1
    // spriteCol = *colPtr
    // [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (colPtr),y
    sta.z spriteCol
    // screenPtr = SCREEN+offset
    // [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z screenPtr
    adc #<SCREEN
    sta.z screenPtr
    lda.z screenPtr+1
    adc #>SCREEN
    sta.z screenPtr+1
    // (word)spriteIdx
    // [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 
    lda.z freeIdx
    sta.z _5
    tya
    sta.z _5+1
    // (word)spriteIdx*64
    // [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz1_rol_6 
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    asl.z _6
    rol.z _6+1
    // spriteData = SPRITE_DATA+(word)spriteIdx*64
    // [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z spriteData
    adc #<SPRITE_DATA
    sta.z spriteData
    lda.z spriteData+1
    adc #>SPRITE_DATA
    sta.z spriteData+1
    // ch = (*screenPtr)
    // [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 
    lda (screenPtr),y
    // (word)ch
    // [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa 
    sta.z _8
    tya
    sta.z _8+1
    // (word)ch*8
    // [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    // chargenData = CHARGEN+(word)ch*8
    // [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z chargenData
    adc #<CHARGEN
    sta.z chargenData
    lda.z chargenData+1
    adc #>CHARGEN
    sta.z chargenData+1
    // asm
    // asm { sei  }
    sei
    // *PROCPORT = PROCPORT_RAM_CHARROM
    // [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_CHARROM
    sta PROCPORT
    // [80] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
    // [80] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 
    ldx #0
    // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy 
    // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy 
    // [80] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
    // [80] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy 
    // [80] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy 
    // [80] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy 
    // startProcessing::@6
  b6:
    // *spriteData = *chargenData
    // [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (chargenData),y
    sta (spriteData),y
    // spriteData += 3
    // [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1 
    lda #3
    clc
    adc.z spriteData
    sta.z spriteData
    bcc !+
    inc.z spriteData+1
  !:
    // chargenData++;
    // [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 
    inc.z chargenData
    bne !+
    inc.z chargenData+1
  !:
    // for( byte i: 0..7)
    // [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx 
    inx
    // [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b6
    // startProcessing::@7
    // *PROCPORT = PROCPORT_RAM_IO
    // [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // asm
    // asm { cli  }
    cli
    // (word)center.x
    // [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 
    lda.z center_x
    sta.z _11
    lda #0
    sta.z _11+1
    // (word)center.x*8
    // [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _12
    rol.z _12+1
    asl.z _12
    rol.z _12+1
    asl.z _12
    rol.z _12+1
    // BORDER_XPOS_LEFT + (word)center.x*8
    // [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 
    lda #BORDER_XPOS_LEFT
    clc
    adc.z _13
    sta.z _13
    bcc !+
    inc.z _13+1
  !:
    // spriteX = (BORDER_XPOS_LEFT + (word)center.x*8) << 4
    // [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz1_rol_4 
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    asl.z spriteX
    rol.z spriteX+1
    // (word)center.y
    // [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 
    lda.z center_y
    sta.z _15
    lda #0
    sta.z _15+1
    // (word)center.y*8
    // [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _16
    rol.z _16+1
    asl.z _16
    rol.z _16+1
    asl.z _16
    rol.z _16+1
    // BORDER_YPOS_TOP + (word)center.y*8
    // [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 
    lda #BORDER_YPOS_TOP
    clc
    adc.z _17
    sta.z _17
    bcc !+
    inc.z _17+1
  !:
    // spriteY = (BORDER_YPOS_TOP + (word)center.y*8) << 4
    // [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz1_rol_4 
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    asl.z spriteY
    rol.z spriteY+1
    // spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx
    // [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z freeIdx
    axs #-[SPRITE_DATA/$40]
    stx.z spritePtr
    // spriteIdx*8
    // [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 
    lda.z freeIdx
    asl
    asl
    asl
    // (word)(spriteIdx*8)
    // [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 -- vwuz1=_word_vbuaa 
    sta.z _23
    lda #0
    sta.z _23+1
    // PROCESSING[spriteIdx] = { spriteX, spriteY, (word)(spriteIdx*8), 60, spriteIdx, spritePtr, spriteCol, STATUS_NEW, screenPtr }
    // [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z freeIdx
    asl
    // [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 -- vbuxx=vbuaa_rol_1 
    asl
    tax
    // [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z spriteX
    sta PROCESSING,x
    lda.z spriteX+1
    sta PROCESSING+1,x
    // [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z spriteY
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
    lda.z spriteY+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
    // [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z _23
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
    lda.z _23+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
    // [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c -- pwuc1_derefidx_vbuxx=vbuc2 
    lda #$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
    lda #0
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
    // [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z freeIdx
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
    // [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spritePtr
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
    // [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spriteCol
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
    // [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #STATUS_NEW
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
    // [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1 
    lda.z screenPtr
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
    lda.z screenPtr+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
    // startProcessing::@return
    // }
    // [113] return 
    rts
    // startProcessing::@8
  b8:
    // [114] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 
    ldx.z freeIdx
    // [53] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
    // [53] phi (byte) startProcessing::freeIdx#6 = (byte~) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy 
    jmp b1
    // startProcessing::@3
  b3:
    // for( byte i: 0..NUM_PROCESSING-1 )
    // [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    beq !b2+
    jmp b2
  !b2:
    // startProcessing::@9
    // [117] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx 
    stx.z freeIdx
    jmp b4
}
  // getCharToProcess
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
getCharToProcess: {
    .label _8 = $18
    .label _9 = $18
    .label _10 = $18
    .label screen_line = $1c
    .label dist_line = 3
    .label y = 2
    .label return_x = $17
    .label return_y = $b
    .label closest_dist = $12
    .label closest_x = $17
    .label closest_y = $b
    .label _12 = $1a
    .label _13 = $18
    // screen_line = SCREEN_COPY
    // [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 -- pbuz1=pbuz2 
    lda.z SCREEN_COPY
    sta.z screen_line
    lda.z SCREEN_COPY+1
    sta.z screen_line+1
    // dist_line = SCREEN_DIST
    // [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z dist_line
    lda.z SCREEN_DIST+1
    sta.z dist_line+1
    // [120] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
    // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_y
    // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 
    sta.z closest_x
    // [120] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 
    sta.z y
    // [120] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND#0 [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 
    lda #NOT_FOUND
    sta.z closest_dist
    // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy 
    // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy 
    // getCharToProcess::@1
  b1:
    // [121] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
    // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy 
    // [121] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 
    ldy #0
    // getCharToProcess::@2
  b2:
    // if(screen_line[x]!=' ')
    // [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 
    lda (screen_line),y
    cmp #' '
    bne !b11+
    jmp b11
  !b11:
    // getCharToProcess::@4
    // dist = dist_line[x]
    // [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuxx=pbuz1_derefidx_vbuyy 
    lda (dist_line),y
    tax
    // if(dist<closest.dist)
    // [124] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1 
    cpx.z closest_dist
    bcs b12
    // getCharToProcess::@5
    // [125] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy 
    sty.z return_x
    // [126] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 
    lda.z y
    sta.z return_y
    // [127] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3]
    // [127] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy 
    // [127] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy 
    // [127] phi (byte) getCharToProcess::return_dist#1 = (byte~) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy 
    // getCharToProcess::@3
  b3:
    // for( byte x: 0..39)
    // [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy 
    iny
    // [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne b10
    // getCharToProcess::@6
    // screen_line += 40
    // [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_line
    sta.z screen_line
    bcc !+
    inc.z screen_line+1
  !:
    // dist_line += 40
    // [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z dist_line
    sta.z dist_line
    bcc !+
    inc.z dist_line+1
  !:
    // for( byte y: 0..24)
    // [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 
    lda #$19
    cmp.z y
    bne b9
    // getCharToProcess::@7
    // if(closest.dist != NOT_FOUND)
    // [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND#0) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 
    cpx #NOT_FOUND
    beq breturn
    // getCharToProcess::@8
    // (word)closest.y
    // [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 
    lda.z return_y
    sta.z _8
    lda #0
    sta.z _8+1
    // (word)closest.y*40
    // [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z _8
    asl
    sta.z _12
    lda.z _8+1
    rol
    sta.z _12+1
    asl.z _12
    rol.z _12+1
    // [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z _13
    clc
    adc.z _12
    sta.z _13
    lda.z _13+1
    adc.z _12+1
    sta.z _13+1
    // [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 -- vwuz1=vwuz1_rol_3 
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    asl.z _9
    rol.z _9+1
    // SCREEN_COPY+(word)closest.y*40
    // [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz1 
    lda.z _10
    clc
    adc.z SCREEN_COPY
    sta.z _10
    lda.z _10+1
    adc.z SCREEN_COPY+1
    sta.z _10+1
    // *(SCREEN_COPY+(word)closest.y*40+closest.x) = ' '
    // [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 
    // clear the found char on the screen copy
    lda #' '
    ldy.z return_x
    sta (_10),y
    // getCharToProcess::@return
  breturn:
    // }
    // [141] return 
    rts
    // getCharToProcess::@9
  b9:
    // [142] (byte~) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [120] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
    // [120] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy 
    // [120] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy 
    // [120] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy 
    // [120] phi (byte) getCharToProcess::closest_dist#8 = (byte~) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy 
    // [120] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy 
    // [120] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy 
    jmp b1
    // getCharToProcess::@10
  b10:
    // [143] (byte~) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [121] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
    // [121] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy 
    // [121] phi (byte) getCharToProcess::closest_dist#2 = (byte~) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy 
    // [121] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy 
    jmp b2
    // getCharToProcess::@12
  b12:
    // [144] (byte~) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 
    ldx.z closest_dist
    jmp b3
    // getCharToProcess::@11
  b11:
    // [145] (byte~) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 
    ldx.z closest_dist
    jmp b3
}
  // setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
    .label irqRoutine = irqTop
    // asm
    // asm { sei  }
    sei
    // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
    // [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // *PROCPORT = PROCPORT_RAM_IO
    // [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR
    // [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2 
    // Disable CIA 1 Timer IRQ
    lda #CIA_INTERRUPT_CLEAR
    sta CIA1_INTERRUPT
    // setupRasterIrq::@1
    // *VIC_CONTROL &=0x7f
    // [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 
    lda #$7f
    and VIC_CONTROL
    sta VIC_CONTROL
    // setupRasterIrq::@2
    // *RASTER = <raster
    // [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2 
    lda #RASTER_IRQ_TOP
    sta RASTER
    // *IRQ_ENABLE = IRQ_RASTER
    // [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Enable Raster Interrupt
    lda #IRQ_RASTER
    sta IRQ_ENABLE
    // *HARDWARE_IRQ = irqRoutine
    // [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2 
    // Set the IRQ routine
    lda #<irqRoutine
    sta HARDWARE_IRQ
    lda #>irqRoutine
    sta HARDWARE_IRQ+1
    // asm
    // asm { cli  }
    cli
    // setupRasterIrq::@return
    // }
    // [155] return 
    rts
}
  // initSprites
// Initialize sprites
initSprites: {
    .label sp = $1c
    // [157] phi from initSprites to initSprites::@2 [phi:initSprites->initSprites::@2]
    // [157] phi (byte*) initSprites::sp#4 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@2#0] -- pbuz1=pbuc1 
    lda #<SPRITE_DATA
    sta.z sp
    lda #>SPRITE_DATA
    sta.z sp+1
    // [157] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2]
    // [157] phi (byte*) initSprites::sp#4 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@2#0] -- register_copy 
    // initSprites::@2
  b2:
    // *sp = 0
    // [158] *((byte*) initSprites::sp#4) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    tay
    sta (sp),y
    // for( byte* sp = SPRITE_DATA; sp<SPRITE_DATA+NUM_PROCESSING*64; sp++)
    // [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#4 -- pbuz1=_inc_pbuz1 
    inc.z sp
    bne !+
    inc.z sp+1
  !:
  // Clear sprite data
    // initSprites::@1
    // [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1 
    lda.z sp+1
    cmp #>SPRITE_DATA+NUM_PROCESSING*$40
    bcc b2
    bne !+
    lda.z sp
    cmp #<SPRITE_DATA+NUM_PROCESSING*$40
    bcc b2
  !:
    // [161] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
    // [161] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 
    ldx #0
  // Initialize sprite registers
    // [161] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
    // [161] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy 
    // initSprites::@3
  b3:
    // SPRITES_COLS[i] = LIGHT_BLUE
    // [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #LIGHT_BLUE
    sta SPRITES_COLS,x
    // for( byte i: 0..7)
    // [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b3
    // initSprites::@4
    // *SPRITES_MC = 0
    // [165] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_MC
    // *SPRITES_EXPAND_X = 0
    // [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta SPRITES_EXPAND_X
    // *SPRITES_EXPAND_Y = 0
    // [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta SPRITES_EXPAND_Y
    // initSprites::@return
    // }
    // [168] 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($18) screen)
init_angle_screen: {
    .label _11 = $10
    .label screen = $18
    .label screen_topline = 3
    .label screen_bottomline = $18
    .label xw = $1a
    .label yw = $1c
    .label angle_w = $10
    .label ang_w = $1e
    .label x = $12
    .label xb = $17
    .label y = 2
    // screen_topline = screen+40*12
    // [169] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_topline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_topline+1
    // screen_bottomline = screen+40*12
    // [170] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 
    clc
    lda.z screen_bottomline
    adc #<$28*$c
    sta.z screen_bottomline
    lda.z screen_bottomline+1
    adc #>$28*$c
    sta.z screen_bottomline+1
    // [171] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
    // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
    // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
    // [171] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [171] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
    // [171] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy 
    // [171] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy 
    // [171] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy 
    // init_angle_screen::@1
  b1:
    // [172] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3]
    // [172] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [172] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // [172] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3]
    // [172] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy 
    // [172] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy 
    // init_angle_screen::@3
  b3:
    // x*2
    // [173] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // 39-x*2
    // [174] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // (word){ 39-x*2, 0 }
    // [175] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    ldy #0
    sta.z xw+1
    sty.z xw
    // y*2
    // [176] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // (word){ y*2, 0 }
    // [177] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    sta.z yw+1
    sty.z yw
    // atan2_16(xw, yw)
    // [178] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [179] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [180] call atan2_16 
    jsr atan2_16
    // [181] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    // init_angle_screen::@5
    // angle_w = atan2_16(xw, yw)
    // [182] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // angle_w+0x0080
    // [183] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
    lda #$80
    clc
    adc.z _11
    sta.z _11
    bcc !+
    inc.z _11+1
  !:
    // ang_w = >(angle_w+0x0080)
    // [184] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z _11+1
    sta.z ang_w
    // screen_bottomline[xb] = ang_w
    // [185] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    ldy.z xb
    sta (screen_bottomline),y
    // -ang_w
    // [186] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
    eor #$ff
    clc
    adc #1
    // screen_topline[xb] = -ang_w
    // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_topline),y
    // 0x80+ang_w
    // [188] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
    lda #$80
    clc
    adc.z ang_w
    // screen_topline[x] = 0x80+ang_w
    // [189] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // 0x80-ang_w
    // [190] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
    lda #$80
    sec
    sbc.z ang_w
    // screen_bottomline[x] = 0x80-ang_w
    // [191] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [192] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [193] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // init_angle_screen::@2
    // [194] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc b3
    // init_angle_screen::@4
    // screen_topline -= 40
    // [195] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_topline
    sec
    sbc #<$28
    sta.z screen_topline
    lda.z screen_topline+1
    sbc #>$28
    sta.z screen_topline+1
    // screen_bottomline += 40
    // [196] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_bottomline
    sta.z screen_bottomline
    bcc !+
    inc.z screen_bottomline+1
  !:
    // for(byte y: 0..12)
    // [197] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [198] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne b1
    // init_angle_screen::@return
    // }
    // [199] 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($1a) x, signed word zeropage($1c) y)
atan2_16: {
    .label _2 = $c
    .label _7 = $e
    .label yi = $c
    .label xi = $e
    .label angle = $10
    .label xd = $15
    .label yd = $13
    .label return = $10
    .label x = $1a
    .label y = $1c
    // (y>=0)?y:-y
    // [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 
    lda.z y+1
    bmi !b1+
    jmp b1
  !b1:
    // atan2_16::@2
    // [201] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z y
    sta.z _2
    lda #0
    sbc.z y+1
    sta.z _2+1
    // [202] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
    // [202] 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
    // [203] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 
    lda.z x+1
    bmi !b4+
    jmp b4
  !b4:
    // atan2_16::@5
    // [204] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z x
    sta.z _7
    lda #0
    sbc.z x+1
    sta.z _7+1
    // [205] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
    // [205] 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:
    // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
    // [206] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z angle
    sta.z angle+1
    // [206] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    tax
    // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [206] 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)
    // [207] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 
    lda.z yi+1
    bne b11
    lda.z yi
    bne b11
    // [208] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
    // [208] 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
    // [209] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z angle+1
    ror.z angle
    // if(x<0)
    // [210] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 
    lda.z x+1
    bpl b7
    // atan2_16::@21
    // angle = 0x8000-angle
    // [211] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 
    sec
    lda #<$8000
    sbc.z angle
    sta.z angle
    lda #>$8000
    sbc.z angle+1
    sta.z angle+1
    // [212] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
    // [212] 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)
    // [213] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 
    lda.z y+1
    bpl b8
    // atan2_16::@9
    // angle = -angle
    // [214] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 
    sec
    lda #0
    sbc.z angle
    sta.z angle
    lda #0
    sbc.z angle+1
    sta.z angle+1
    // [215] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
    // [215] 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
    // }
    // [216] return 
    rts
    // atan2_16::@11
  b11:
    // [217] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [218] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 
    lda.z xi
    sta.z xd
    lda.z xi+1
    sta.z xd+1
    // [219] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 
    lda.z yi
    sta.z yd
    lda.z yi+1
    sta.z yd+1
    // [220] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
    // [220] 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 
    // [220] 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 
    // [220] 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)
    // [221] 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)
    // [222] 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
    // [223] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    // yd >>= 1
    // [224] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    // [225] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
    // [225] 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 
    // [225] 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)
    // [226] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 
    lda.z yi+1
    bpl b18
    // atan2_16::@20
    // xi -= yd
    // [227] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z xi
    sec
    sbc.z yd
    sta.z xi
    lda.z xi+1
    sbc.z yd+1
    sta.z xi+1
    // yi += xd
    // [228] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z yi
    clc
    adc.z xd
    sta.z yi
    lda.z yi+1
    adc.z xd+1
    sta.z yi+1
    // angle -= CORDIC_ATAN2_ANGLES_16[i]
    // [229] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [230] (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.z angle
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    // [231] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
    // [231] 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 
    // [231] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [231] 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)
    // [232] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [233] 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:
    // [206] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
    // [206] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [206] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [206] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [206] 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
    // [234] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z xi
    clc
    adc.z yd
    sta.z xi
    lda.z xi+1
    adc.z yd+1
    sta.z xi+1
    // yi -= xd
    // [235] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z yi
    sec
    sbc.z xd
    sta.z yi
    lda.z yi+1
    sbc.z xd+1
    sta.z yi+1
    // angle += CORDIC_ATAN2_ANGLES_16[i]
    // [236] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [237] (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.z angle
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    jmp b19
    // atan2_16::@14
  b14:
    // xd >>= 2
    // [238] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    lda.z xd+1
    cmp #$80
    ror.z xd+1
    ror.z xd
    // yd >>= 2
    // [239] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    lda.z yd+1
    cmp #$80
    ror.z yd+1
    ror.z yd
    // shift -=2
    // [240] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
    dey
    dey
    jmp b13
    // atan2_16::@4
  b4:
    // [241] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 
    lda.z x
    sta.z xi
    lda.z x+1
    sta.z xi+1
    jmp b6
    // atan2_16::@1
  b1:
    // [242] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 
    lda.z y
    sta.z yi
    lda.z y+1
    sta.z yi+1
    jmp b3
}
  // malloc
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
malloc: {
    .label mem = 9
    // mem = heap_head-size
    // [244] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8 -- pbuz1=pbuz2_minus_vwuc1 
    lda.z heap_head
    sec
    sbc #<$3e8
    sta.z mem
    lda.z heap_head+1
    sbc #>$3e8
    sta.z mem+1
    // heap_head = mem
    // [245] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
    lda.z mem
    sta.z heap_head
    lda.z mem+1
    sta.z heap_head+1
    // malloc::@return
    // }
    // [246] return 
    rts
}
  // irqBottom
// Raster Interrupt at the bottom of the screen
irqBottom: {
    // entry interrupt(HARDWARE_ALL)
    sta rega+1
    stx regx+1
    sty regy+1
    // [248] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
    // irqBottom::@1
    // processChars()
    // [249] call processChars 
    // [254] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
    jsr processChars
    // irqBottom::@2
    // *RASTER = RASTER_IRQ_TOP
    // [250] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the top of the screen
    lda #RASTER_IRQ_TOP
    sta RASTER
    // *HARDWARE_IRQ = &irqTop
    // [251] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 
    lda #<irqTop
    sta HARDWARE_IRQ
    lda #>irqTop
    sta HARDWARE_IRQ+1
    // *IRQ_STATUS = IRQ_RASTER
    // [252] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    // irqBottom::@return
    // }
    // [253] return  - exit interrupt(HARDWARE_ALL)
  rega:
    lda #00
  regx:
    ldx #00
  regy:
    ldy #00
    rti
}
  // processChars
// Process any chars in the PROCESSING array
processChars: {
    .label _15 = $24
    .label _25 = $22
    .label processing = $1f
    .label bitmask = $21
    .label i = 5
    .label xpos = $22
    .label ypos = $26
    .label numActive = 6
    // [255] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
    // [255] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z numActive
    // [255] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 
    sta.z i
    // [255] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
    // [255] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy 
    // [255] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy 
    // processChars::@1
  b1:
    // PROCESSING+i
    // [256] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [257] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [258] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [259] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [260] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // processing = PROCESSING+i
    // [261] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37 -- pssz1=pssc1_plus_vbuaa 
    clc
    adc #<PROCESSING
    sta.z processing
    lda #>PROCESSING
    adc #0
    sta.z processing+1
    // bitmask = 1<<processing->id
    // [262] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    lda (processing),y
    tax
    lda #1
    cpx #0
    beq !e+
  !:
    asl
    dex
    bne !-
  !e:
    sta.z bitmask
    // if(processing->status!=STATUS_FREE)
    // [263] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    lda (processing),y
    cmp #STATUS_FREE
    bne !b2+
    jmp b2
  !b2:
    // processChars::@10
    // if(processing->status==STATUS_NEW)
    // [264] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 
    lda (processing),y
    cmp #STATUS_NEW
    bne b3
    // processChars::@11
    // *(processing->screenPtr) = ' '
    // [265] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_pptz1_derefidx_vbuc1=vbuc2 
    // Clear the char on the screen
    ldx #' '
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
    lda (processing),y
    sta !++1
    iny
    lda (processing),y
    sta !++2
    txa
  !:
    sta $ffff
    // *SPRITES_ENABLE |= bitmask
    // [266] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    // Enable the sprite
    lda SPRITES_ENABLE
    ora.z bitmask
    sta SPRITES_ENABLE
    // SPRITES_COLS[processing->id] = processing->col
    // [267] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) -- pbuc1_derefidx_pbuz1_derefidx_vbuc2=pbuz1_derefidx_vbuc3 
    // Set the sprite color
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    pha
    lda (processing),y
    tay
    pla
    sta SPRITES_COLS,y
    // *(SCREEN+SPRITE_PTRS+processing->id) = processing->ptr
    // [268] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- pbuc1_derefidx_pbuz1_derefidx_vbuc2=pbuz1_derefidx_vbuc3 
    // Set sprite pointer
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
    pha
    lda (processing),y
    tay
    pla
    sta SCREEN+SPRITE_PTRS,y
    // processing->status = STATUS_PROCESSING
    // [269] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2 
    // Set status
    lda #STATUS_PROCESSING
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    sta (processing),y
    // processChars::@3
  b3:
    // xpos = processing->x >> 4
    // [270] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4 
    ldy #0
    lda (processing),y
    sta.z xpos
    iny
    lda (processing),y
    sta.z xpos+1
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    lsr.z xpos+1
    ror.z xpos
    // >xpos
    // [271] (byte~) processChars::$11 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 
    lda.z xpos+1
    // if(>xpos)
    // [272] if((byte) 0!=(byte~) processChars::$11) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 
    // Set sprite position
    cmp #0
    beq !b4+
    jmp b4
  !b4:
    // processChars::@8
    // 0xff ^ bitmask
    // [273] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // *SPRITES_XMSB &= 0xff ^ bitmask
    // [274] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    and SPRITES_XMSB
    sta SPRITES_XMSB
    // processChars::@5
  b5:
    // i*2
    // [275] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 
    lda.z i
    asl
    tax
    // (byte)xpos
    // [276] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 
    lda.z xpos
    // SPRITES_XPOS[i*2] = (byte)xpos
    // [277] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$17) ← (byte~) processChars::$14 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SPRITES_XPOS,x
    // processing->y>>4
    // [278] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    lda (processing),y
    sta.z _15
    iny
    lda (processing),y
    sta.z _15+1
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    lsr.z _15+1
    ror.z _15
    // ypos = (byte)(processing->y>>4)
    // [279] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15 -- vbuz1=_byte_vwuz2 
    lda.z _15
    sta.z ypos
    // SPRITES_YPOS[i*2] = ypos
    // [280] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$17) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    sta SPRITES_YPOS,x
    // if(processing->x < XPOS_LEFTMOST || processing->x > XPOS_RIGHTMOST || processing->y < YPOS_TOPMOST|| processing->y > YPOS_BOTTOMMOST  )
    // [281] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1 
    // Move sprite
    ldy #1
    lda (processing),y
    cmp #>XPOS_LEFTMOST
    bcs !b6+
    jmp b6
  !b6:
    bne !+
    dey
    lda (processing),y
    cmp #<XPOS_LEFTMOST
    bcs !b6+
    jmp b6
  !b6:
  !:
    // processChars::@14
    // [282] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1 
    ldy #1
    lda #>XPOS_RIGHTMOST
    cmp (processing),y
    bcs !b6+
    jmp b6
  !b6:
    bne !+
    dey
    lda #<XPOS_RIGHTMOST
    cmp (processing),y
    bcs !b6+
    jmp b6
  !b6:
  !:
    // processChars::@13
    // [283] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    iny
    lda (processing),y
    cmp #>YPOS_TOPMOST
    bcs !b6+
    jmp b6
  !b6:
    bne !+
    dey
    lda (processing),y
    cmp #<YPOS_TOPMOST
    bcs !b6+
    jmp b6
  !b6:
  !:
    // processChars::@12
    // [284] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    iny
    lda #>YPOS_BOTTOMMOST
    cmp (processing),y
    bcs !b6+
    jmp b6
  !b6:
    bne !+
    dey
    lda #<YPOS_BOTTOMMOST
    cmp (processing),y
    bcc b6
  !:
    // processChars::@9
    // xpos/8
    // [285] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 
    lsr.z _25+1
    ror.z _25
    lsr.z _25+1
    ror.z _25
    lsr.z _25+1
    ror.z _25
    // (byte)(xpos/8)
    // [286] (byte~) processChars::$26 ← (byte)(word~) processChars::$25 -- vbuaa=_byte_vwuz1 
    lda.z _25
    // xchar = (byte)(xpos/8) - BORDER_XPOS_LEFT/8
    // [287] (byte) processChars::xchar#0 ← (byte~) processChars::$26 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_XPOS_LEFT/8
    // processing->vx += VXSIN[xchar]
    // [288] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [289] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
    tax
    clc
    lda (processing),y
    adc VXSIN,x
    sta (processing),y
    iny
    lda (processing),y
    adc VXSIN+1,x
    sta (processing),y
    // processing->x += processing->vx
    // [290] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
    sty.z $ff
    clc
    lda (processing),y
    ldy #0
    adc (processing),y
    sta (processing),y
    ldy.z $ff
    iny
    lda (processing),y
    ldy #1
    adc (processing),y
    sta (processing),y
    // (byte)(ypos/8)
    // [291] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    // ychar = (byte)(ypos/8) - BORDER_YPOS_TOP/8
    // [292] (byte) processChars::ychar#0 ← (byte~) processChars::$30 - (const byte) BORDER_YPOS_TOP#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_YPOS_TOP/8
    // processing->vy +=   VYSIN[ychar]
    // [293] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [294] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
    tax
    clc
    lda (processing),y
    adc VYSIN,x
    sta (processing),y
    iny
    lda (processing),y
    adc VYSIN+1,x
    sta (processing),y
    // processing->y += processing->vy
    // [295] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
    clc
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
    adc (processing),y
    sta (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY+1
    lda (processing),y
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y+1
    adc (processing),y
    sta (processing),y
    // processChars::@7
  b7:
    // numActive++;
    // [296] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 
    inc.z numActive
    // [297] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
    // [297] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy 
    // processChars::@2
  b2:
    // for( byte i: 0..NUM_PROCESSING-1 )
    // [298] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [299] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    beq !b1+
    jmp b1
  !b1:
    // processChars::@return
    // }
    // [300] return 
    rts
    // processChars::@6
  b6:
    // processing->status = STATUS_FREE
    // [301] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2 
    // Set status to FREE
    lda #STATUS_FREE
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    sta (processing),y
    // 0xff ^ bitmask
    // [302] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // *SPRITES_ENABLE &= 0xff ^ bitmask
    // [303] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    // Disable the sprite
    and SPRITES_ENABLE
    sta SPRITES_ENABLE
    jmp b7
    // processChars::@4
  b4:
    // *SPRITES_XMSB |= bitmask
    // [304] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    lda SPRITES_XMSB
    ora.z bitmask
    sta SPRITES_XMSB
    jmp b5
}
  // irqTop
// Raster Interrupt at the top of the screen
irqTop: {
    // entry interrupt(HARDWARE_ALL)
    sta rega+1
    stx regx+1
    sty regy+1
    // irqTop::@1
    // *RASTER = RASTER_IRQ_MIDDLE
    // [306] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the middle of the screen
    lda #RASTER_IRQ_MIDDLE
    sta RASTER
    // *HARDWARE_IRQ = &irqBottom
    // [307] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 
    lda #<irqBottom
    sta HARDWARE_IRQ
    lda #>irqBottom
    sta HARDWARE_IRQ+1
    // *IRQ_STATUS = IRQ_RASTER
    // [308] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    // irqTop::@return
    // }
    // [309] return  - exit interrupt(HARDWARE_ALL)
  rega:
    lda #00
  regx:
    ldx #00
  regy:
    ldy #00
    rti
}
  // File Data
  // 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

  // Values added to VX
VXSIN:
.for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }

  // Values added to VY
VYSIN:
.for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }

  // Sprites currently being processed in the interrupt
  PROCESSING: .fill $e*NUM_PROCESSING, 0

