Resolved forward reference RASTER_IRQ_TOP to (const byte) RASTER_IRQ_TOP
Resolved forward reference irqTop to interrupt(HARDWARE_ALL)(void()) irqTop()
Resolved forward reference RASTER_IRQ_MIDDLE to (const 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::$1 ← (const struct ProcessingSprite*) 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 *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
Fixing pointer array-indexing *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
Fixing pointer array-indexing *((const struct ProcessingSprite*) PROCESSING + (byte) main::i)
Fixing pointer array-indexing *((const struct ProcessingSprite*) PROCESSING + (byte) startProcessing::i)
Fixing pointer array-indexing *((const struct ProcessingSprite*) PROCESSING + (byte) startProcessing::spriteIdx)
Fixing pointer array-indexing *((const word*) VXSIN + (byte) processChars::xchar)
Fixing pointer array-indexing *((const word*) VYSIN + (byte) processChars::ychar)
Constantified RValue *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← { x: (word) 0, y: (word) 0, vx: (word) 0, vy: (word) 0, id: (byte) 0, ptr: (byte) 0, col: (byte) 0, status: (const byte) STATUS_FREE, screenPtr: (byte*)(number) 0 }
Constantified RValue (struct ProcessingChar) getCharToProcess::closest ← (struct ProcessingChar){ (byte) getCharToProcess::x, (byte) getCharToProcess::y, (byte) getCharToProcess::dist }
Constantified RValue *((const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (struct ProcessingSprite){ (word) startProcessing::spriteX, (word) startProcessing::spriteY, (word~) startProcessing::$21, (word) $3c, (byte) startProcessing::spriteIdx, (byte) startProcessing::spritePtr, (byte) startProcessing::spriteCol, (const byte) STATUS_NEW, (byte*) startProcessing::screenPtr }
Created struct value member variable (byte~) main::$5_x
Created struct value member variable (byte~) main::$5_y
Created struct value member variable (byte~) main::$5_dist
Converted struct value to member variables (struct ProcessingChar~) main::$5
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) 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 value bulk copy *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE)
Converted procedure call LValue to member unwinding { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_dist } ← call getCharToProcess 
Unwinding value copy (struct ProcessingChar) main::center ← (struct ProcessingChar~) main::$5
Adding value simple copy (byte) main::center_x ← (byte~) main::$5_x
Adding value simple copy (byte) main::center_y ← (byte~) main::$5_y
Adding value simple copy (byte) main::center_dist ← (byte~) main::$5_dist
Converted procedure struct value parameter to member unwinding in call (void~) main::$8 ← call startProcessing (byte) main::center_x (byte) main::center_y (byte) main::center_dist 
Unwinding value copy (struct ProcessingChar) getCharToProcess::closest ← { x: (byte) 0, y: (byte) 0, dist: (const byte) NOT_FOUND }
Adding value simple copy (byte) getCharToProcess::closest_x ← (byte) 0
Adding value simple copy (byte) getCharToProcess::closest_y ← (byte) 0
Adding value simple copy (byte) getCharToProcess::closest_dist ← (const byte) NOT_FOUND
Unwinding value copy (struct ProcessingChar) getCharToProcess::closest ← (struct ProcessingChar){ (byte) getCharToProcess::x, (byte) getCharToProcess::y, (byte) getCharToProcess::dist }
Adding value simple copy (byte) getCharToProcess::closest_x ← (byte) getCharToProcess::x
Adding value simple copy (byte) getCharToProcess::closest_y ← (byte) getCharToProcess::y
Adding value simple copy (byte) getCharToProcess::closest_dist ← (byte) getCharToProcess::dist
Unwinding value copy (struct ProcessingChar) getCharToProcess::return ← (struct ProcessingChar) getCharToProcess::closest
Adding value simple copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::closest_x
Adding value simple copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::closest_y
Adding value simple copy (byte) getCharToProcess::return_dist ← (byte) getCharToProcess::closest_dist
Unwinding value copy (struct ProcessingChar) getCharToProcess::return ← (struct ProcessingChar) getCharToProcess::return
Adding value simple copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::return_x
Adding value simple copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::return_y
Adding value simple 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 }
Unwinding value copy *((const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (struct ProcessingSprite){ (word) startProcessing::spriteX, (word) startProcessing::spriteY, (word~) startProcessing::$21, (word) $3c, (byte) startProcessing::spriteIdx, (byte) startProcessing::spritePtr, (byte) startProcessing::spriteCol, (const byte) STATUS_NEW, (byte*) startProcessing::screenPtr }
Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX
Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY
Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21
Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c
Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteIdx
Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr
Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol
Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW
Adding value simple copy *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (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 *((const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$27).status with member unwinding reference *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)
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
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).id with member unwinding reference *((byte*~) processChars::$35)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$36)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$37)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$38)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).screenPtr with member unwinding reference *((byte**~) processChars::$39)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).col with member unwinding reference *((byte*~) processChars::$40)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).id with member unwinding reference *((byte*~) processChars::$41)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).id with member unwinding reference *((byte*~) processChars::$42)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).ptr with member unwinding reference *((byte*~) processChars::$43)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$44)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$45)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$46)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$47)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$48)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$49)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$50)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vx with member unwinding reference *((word*~) processChars::$51)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vx with member unwinding reference *((word*~) processChars::$52)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$53)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vx with member unwinding reference *((word*~) processChars::$54)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$55)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vy with member unwinding reference *((word*~) processChars::$56)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vy with member unwinding reference *((word*~) processChars::$57)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$58)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vy with member unwinding reference *((word*~) processChars::$59)
Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$60)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition (byte~) processChars::$9
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) @4
Culled Empty Block (label) malloc::@1
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) @15
Culled Empty Block (label) @16
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) @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) @22
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) @26
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) @28
Culled Empty Block (label) getCharToProcess::@6
Culled Empty Block (label) getCharToProcess::@2
Culled Empty Block (label) @29
Culled Empty Block (label) startProcessing::@6
Culled Empty Block (label) startProcessing::@7
Culled Empty Block (label) @30
Culled Empty Block (label) processChars::@10
Culled Empty Block (label) processChars::@12
Culled Empty Block (label) processChars::@1
Culled Empty Block (label) @31
Culled Empty Block (label) @32
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) @33
Culled Empty Block (label) initSprites::@4
Culled Empty Block (label) initSprites::@5
Culled Empty Block (label) initSprites::@6
Culled Empty Block (label) @34
Culled Empty Block (label) setupRasterIrq::@4
Culled Empty Block (label) @35
Culled Empty Block (label) @36
Unwinding list assignment { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_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 }

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@5
@5: scope:[]  from @begin
  (byte*) heap_head#0 ← (const byte*) HEAP_TOP
  to:@27

(void*()) malloc((word) malloc::size)
malloc: scope:[malloc]  from @27 @38
  (word) malloc::size#2 ← phi( @27/(word) malloc::size#0 @38/(word) malloc::size#1 )
  (byte*) heap_head#5 ← phi( @27/(byte*) heap_head#9 @38/(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

(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
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 ← (word) 0
  (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::$16 ← (signed word) atan2_16::yi#3 == (number) 0
  (bool~) atan2_16::$17 ← ! (bool~) atan2_16::$16
  if((bool~) atan2_16::$17) 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::$18 ← (byte) atan2_16::shift#2 >= (number) 2
  if((bool~) atan2_16::$18) 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::$24 ← (number) 0 != (byte) atan2_16::shift#4
  (bool~) atan2_16::$19 ← ! (bool~) atan2_16::$24
  if((bool~) atan2_16::$19) 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::$20 ← (signed word) atan2_16::yi#5 >= (number) 0
  if((bool~) atan2_16::$20) 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::$22 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
  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::$23 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
  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,CORDIC_ITERATIONS_16-1)
  (bool~) atan2_16::$21 ← (byte) atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16-1)
  if((bool~) atan2_16::$21) 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
@27: scope:[]  from @5
  (byte*) heap_head#9 ← phi( @5/(byte*) heap_head#0 )
  (word) malloc::size#0 ← (number) $3e8
  call malloc 
  (void*) malloc::return#2 ← (void*) malloc::return#1
  to:@38
@38: scope:[]  from @27
  (byte*) heap_head#7 ← phi( @27/(byte*) heap_head#2 )
  (void*) malloc::return#5 ← phi( @27/(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:@39
@39: scope:[]  from @38
  (byte*) SCREEN_COPY#14 ← phi( @38/(byte*) SCREEN_COPY#0 )
  (byte*) heap_head#8 ← phi( @38/(byte*) heap_head#2 )
  (void*) malloc::return#6 ← phi( @38/(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
  to:@37

(void()) main()
main: scope:[main]  from @37
  (byte*) SCREEN_COPY#4 ← phi( @37/(byte*) SCREEN_COPY#7 )
  (byte*) SCREEN_DIST#1 ← phi( @37/(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#14 ← phi( main/(byte*) SCREEN_DIST#1 )
  (byte*) SCREEN_COPY#1 ← phi( main/(byte*) SCREEN_COPY#4 )
  (byte*) main::src#0 ← (const byte*) SCREEN
  (byte*) main::dst#0 ← (byte*) SCREEN_COPY#1
  to:main::@1
main::@1: scope:[main]  from main::@17 main::@2
  (byte*) SCREEN_DIST#13 ← phi( main::@17/(byte*) SCREEN_DIST#14 main::@2/(byte*) SCREEN_DIST#15 )
  (byte*) SCREEN_COPY#23 ← phi( main::@17/(byte*) SCREEN_COPY#1 main::@2/(byte*) SCREEN_COPY#24 )
  (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 )
  (bool~) main::$3 ← (byte*) main::src#2 != (const byte*) SCREEN+(number) $3e8
  if((bool~) main::$3) goto main::@2
  to:main::@3
main::@2: scope:[main]  from main::@1
  (byte*) SCREEN_DIST#15 ← phi( main::@1/(byte*) SCREEN_DIST#13 )
  (byte*) SCREEN_COPY#24 ← phi( main::@1/(byte*) SCREEN_COPY#23 )
  (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#12 ← phi( main::@1/(byte*) SCREEN_DIST#13 )
  (byte*) SCREEN_COPY#22 ← phi( main::@1/(byte*) SCREEN_COPY#23 )
  (byte) main::i#0 ← (byte) 0
  to:main::@7
main::@7: scope:[main]  from main::@3 main::@7
  (byte*) SCREEN_DIST#11 ← phi( main::@3/(byte*) SCREEN_DIST#12 main::@7/(byte*) SCREEN_DIST#11 )
  (byte*) SCREEN_COPY#20 ← phi( main::@3/(byte*) SCREEN_COPY#22 main::@7/(byte*) SCREEN_COPY#20 )
  (byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@7/(byte) main::i#1 )
  (byte~) main::$10 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE)
  (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,NUM_PROCESSING-1)
  (bool~) main::$4 ← (byte) main::i#1 != rangelast(0,NUM_PROCESSING-1)
  if((bool~) main::$4) goto main::@7
  to:main::@8
main::@8: scope:[main]  from main::@7
  (byte*) SCREEN_DIST#9 ← phi( main::@7/(byte*) SCREEN_DIST#11 )
  (byte*) SCREEN_COPY#15 ← phi( main::@7/(byte*) SCREEN_COPY#20 )
  call initSprites 
  to:main::@18
main::@18: scope:[main]  from main::@8
  (byte*) SCREEN_DIST#7 ← phi( main::@8/(byte*) SCREEN_DIST#9 )
  (byte*) SCREEN_COPY#11 ← phi( main::@8/(byte*) SCREEN_COPY#15 )
  (word) setupRasterIrq::raster#0 ← (const byte) RASTER_IRQ_TOP
  (void()*) setupRasterIrq::irqRoutine#0 ← &interrupt(HARDWARE_ALL)(void()) irqTop()
  call setupRasterIrq 
  to:main::@19
main::@19: scope:[main]  from main::@18
  (byte*) SCREEN_DIST#5 ← phi( main::@18/(byte*) SCREEN_DIST#7 )
  (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#10 ← 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::$5_x ← (byte) getCharToProcess::return_x#3
  (byte~) main::$5_y ← (byte) getCharToProcess::return_y#3
  (byte~) main::$5_dist ← (byte) getCharToProcess::return_dist#3
  (byte) main::center_x#0 ← (byte~) main::$5_x
  (byte) main::center_y#0 ← (byte~) main::$5_y
  (byte) main::center_dist#0 ← (byte~) main::$5_dist
  (bool~) main::$6 ← (byte) main::center_dist#0 == (const byte) NOT_FOUND
  (bool~) main::$7 ← ! (bool~) main::$6
  if((bool~) main::$7) goto main::@10
  to:main::@11
main::@10: scope:[main]  from main::@20
  (byte*) SCREEN_DIST#8 ← phi( main::@20/(byte*) SCREEN_DIST#10 )
  (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#8 )
  (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
  *((const byte*) SCREEN+(number) $3e7) ← (byte) '.'
  to:main::@15
main::@15: scope:[main]  from main::@11 main::@15
  *((const byte*) COLS+(number) $3e7) ← ++ *((const byte*) COLS+(number) $3e7)
  if(true) goto main::@15
  to:main::@return
main::@return: scope:[main]  from main::@15
  return 
  to:@return

(struct ProcessingChar()) getCharToProcess()
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 ← (byte) 0
  (byte) getCharToProcess::closest_y#0 ← (byte) 0
  (byte) getCharToProcess::closest_dist#0 ← (const byte) NOT_FOUND
  (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#21 ← 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#21 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 != (const byte) NOT_FOUND
  (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

(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
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 ← (byte) $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 )
  (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::$27 ← (byte) startProcessing::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  (bool~) startProcessing::$22 ← *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27) == (const byte) STATUS_FREE
  (bool~) startProcessing::$23 ← ! (bool~) startProcessing::$22
  if((bool~) startProcessing::$23) 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,NUM_PROCESSING-1)
  (bool~) startProcessing::$24 ← (byte) startProcessing::i#1 != rangelast(0,NUM_PROCESSING-1)
  if((bool~) startProcessing::$24) 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::$25 ← (byte) startProcessing::freeIdx#2 == (number) $ff
  if((bool~) startProcessing::$25) 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 ← (const byte*) COLS + (word) startProcessing::offset#0
  (byte*) startProcessing::colPtr#0 ← (byte*~) startProcessing::$3
  (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0)
  (byte*~) startProcessing::$4 ← (const byte*) SCREEN + (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 ← (const byte*) SPRITE_DATA + (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 ← (const byte*) CHARGEN + (number~) startProcessing::$9
  (byte*) startProcessing::chargenData#0 ← (byte*~) startProcessing::$10
  asm { sei  }
  *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM
  (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::$26 ← (byte) startProcessing::i1#1 != rangelast(0,7)
  if((bool~) startProcessing::$26) 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 )
  *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO
  asm { cli  }
  (word~) startProcessing::$11 ← ((word)) (byte) startProcessing::center_x#2
  (number~) startProcessing::$12 ← (word~) startProcessing::$11 * (number) 8
  (number~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (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 ← (const byte) BORDER_YPOS_TOP + (number~) startProcessing::$16
  (number~) startProcessing::$18 ← (number~) startProcessing::$17 << (number) 4
  (word) startProcessing::spriteY#0 ← (number~) startProcessing::$18
  (byte~) startProcessing::$19 ← (byte)(const byte*) SPRITE_DATA/(number) $40 + (byte) startProcessing::spriteIdx#1
  (byte) startProcessing::spritePtr#0 ← (byte~) startProcessing::$19
  (number~) startProcessing::$20 ← (byte) startProcessing::spriteIdx#1 * (number) 8
  (word~) startProcessing::$21 ← ((word)) (number~) startProcessing::$20
  (byte~) startProcessing::$28 ← (byte) startProcessing::spriteIdx#1 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0
  *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0
  *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21
  *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c
  *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteIdx#1
  *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0
  *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#1
  *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW
  *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#1
  to:startProcessing::@return
startProcessing::@return: scope:[startProcessing]  from startProcessing::@10
  return 
  to:@return

(void()) processChars()
processChars: scope:[processChars]  from irqBottom::@1
  (byte) processChars::numActive#0 ← (byte) 0
  (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::$32 ← (byte) processChars::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
  (struct ProcessingSprite*~) processChars::$1 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32
  (struct ProcessingSprite*) processChars::processing#0 ← (struct ProcessingSprite*~) processChars::$1
  (byte*~) processChars::$35 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  (number~) processChars::$2 ← (number) 1 << *((byte*~) processChars::$35)
  (byte) processChars::bitmask#0 ← (number~) processChars::$2
  (byte*~) processChars::$36 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  (bool~) processChars::$3 ← *((byte*~) processChars::$36) != (const byte) STATUS_FREE
  (bool~) processChars::$4 ← ! (bool~) processChars::$3
  if((bool~) processChars::$4) 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,NUM_PROCESSING-1)
  (bool~) processChars::$30 ← (byte) processChars::i#1 != rangelast(0,NUM_PROCESSING-1)
  if((bool~) processChars::$30) 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::$37 ← (byte*)(struct ProcessingSprite*) processChars::processing#1 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  (bool~) processChars::$5 ← *((byte*~) processChars::$37) == (const byte) STATUS_NEW
  (bool~) processChars::$6 ← ! (bool~) processChars::$5
  if((bool~) processChars::$6) 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::$38 ← (word*)(struct ProcessingSprite*) processChars::processing#2 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (word~) processChars::$8 ← *((word*~) processChars::$38) >> (number) 4
  (word) processChars::xpos#0 ← (word~) processChars::$8
  (byte~) processChars::$9 ← > (word) processChars::xpos#0
  (bool~) processChars::$61 ← (number) 0 != (byte~) processChars::$9
  if((bool~) processChars::$61) 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::$39 ← (byte**)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
  *(*((byte**~) processChars::$39)) ← (byte) ' '
  *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#1
  (byte*~) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
  (byte*~) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  *((const byte*) SPRITES_COLS + *((byte*~) processChars::$41)) ← *((byte*~) processChars::$40)
  (byte*~) processChars::$42 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
  (byte*~) processChars::$7 ← (const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*~) processChars::$42)
  (byte*~) processChars::$43 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
  *((byte*~) processChars::$7) ← *((byte*~) processChars::$43)
  (byte*~) processChars::$44 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  *((byte*~) processChars::$44) ← (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 )
  *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (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::$10 ← (number) $ff ^ (byte) processChars::bitmask#3
  *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (number~) processChars::$10
  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::$11 ← (byte) processChars::i#4 * (number) 2
  (byte~) processChars::$12 ← ((byte)) (word) processChars::xpos#1
  *((const byte*) SPRITES_XPOS + (number~) processChars::$11) ← (byte~) processChars::$12
  (word*~) processChars::$45 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (word~) processChars::$13 ← *((word*~) processChars::$45) >> (number) 4
  (byte~) processChars::$14 ← ((byte)) (word~) processChars::$13
  (byte) processChars::ypos#0 ← (byte~) processChars::$14
  (number~) processChars::$15 ← (byte) processChars::i#4 * (number) 2
  *((const byte*) SPRITES_YPOS + (number~) processChars::$15) ← (byte) processChars::ypos#0
  (word*~) processChars::$46 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (bool~) processChars::$16 ← *((word*~) processChars::$46) < (const word) XPOS_LEFTMOST
  (word*~) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (bool~) processChars::$17 ← *((word*~) processChars::$47) > (const word) XPOS_RIGHTMOST
  (bool~) processChars::$18 ← (bool~) processChars::$16 || (bool~) processChars::$17
  (word*~) processChars::$48 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (bool~) processChars::$19 ← *((word*~) processChars::$48) < (const word) YPOS_TOPMOST
  (bool~) processChars::$20 ← (bool~) processChars::$18 || (bool~) processChars::$19
  (word*~) processChars::$49 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (bool~) processChars::$21 ← *((word*~) processChars::$49) > (const word) YPOS_BOTTOMMOST
  (bool~) processChars::$22 ← (bool~) processChars::$20 || (bool~) processChars::$21
  if((bool~) processChars::$22) 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::$50 ← (byte*)(struct ProcessingSprite*) processChars::processing#5 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
  *((byte*~) processChars::$50) ← (const byte) STATUS_FREE
  (number~) processChars::$29 ← (number) $ff ^ (byte) processChars::bitmask#4
  *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (number~) processChars::$29
  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::$23 ← (word) processChars::xpos#2 / (number) 8
  (byte~) processChars::$24 ← ((byte)) (number~) processChars::$23
  (number~) processChars::$25 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(number) 8
  (byte) processChars::xchar#0 ← (number~) processChars::$25
  (byte~) processChars::$33 ← (byte) processChars::xchar#0 * (const byte) SIZEOF_WORD
  (word*~) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  (word*~) processChars::$52 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  *((word*~) processChars::$52) ← *((word*~) processChars::$51) + *((const word*) VXSIN + (byte~) processChars::$33)
  (word*~) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  (word*~) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
  (word*~) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
  *((word*~) processChars::$55) ← *((word*~) processChars::$53) + *((word*~) processChars::$54)
  (number~) processChars::$26 ← (byte) processChars::ypos#1 / (number) 8
  (byte~) processChars::$27 ← ((byte)) (number~) processChars::$26
  (number~) processChars::$28 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(number) 8
  (byte) processChars::ychar#0 ← (number~) processChars::$28
  (byte~) processChars::$34 ← (byte) processChars::ychar#0 * (const byte) SIZEOF_WORD
  (word*~) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  (word*~) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  *((word*~) processChars::$57) ← *((word*~) processChars::$56) + *((const word*) VYSIN + (byte~) processChars::$34)
  (word*~) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  (word*~) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
  (word*~) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
  *((word*~) processChars::$60) ← *((word*~) processChars::$58) + *((word*~) processChars::$59)
  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 ← ! (const bool) DEBUG
  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::$31 ← (byte) '0' + (byte) processChars::numActive#3
  *((const byte*) SCREEN+(number) $3e7) ← (byte~) processChars::$31
  to:processChars::@return
processChars::@return: scope:[processChars]  from processChars::@15 processChars::@16
  return 
  to:@return

(void()) init_angle_screen((byte*) init_angle_screen::screen)
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 ← (byte) 0
  (byte) init_angle_screen::xb#0 ← (byte) $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

(void()) initSprites()
initSprites: scope:[initSprites]  from main::@8
  (byte*) initSprites::sp#0 ← (const byte*) SPRITE_DATA
  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 )
  (bool~) initSprites::$0 ← (byte*) initSprites::sp#2 < (const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(number) $40
  if((bool~) initSprites::$0) 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 )
  *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE
  (byte) initSprites::i#1 ← (byte) initSprites::i#2 + rangenext(0,7)
  (bool~) initSprites::$1 ← (byte) initSprites::i#1 != rangelast(0,7)
  if((bool~) initSprites::$1) goto initSprites::@7
  to:initSprites::@8
initSprites::@8: scope:[initSprites]  from initSprites::@7
  *((const byte*) SPRITES_MC) ← (number) 0
  *((const byte*) SPRITES_EXPAND_X) ← (number) 0
  *((const byte*) SPRITES_EXPAND_Y) ← (number) 0
  to:initSprites::@return
initSprites::@return: scope:[initSprites]  from initSprites::@8
  return 
  to:@return

(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
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  }
  *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK
  *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO
  *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR
  (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 )
  *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (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 )
  *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (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
  *((const byte*) RASTER) ← (byte~) setupRasterIrq::$1
  *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER
  *((const void()**) HARDWARE_IRQ) ← (void()*) setupRasterIrq::irqRoutine#1
  asm { cli  }
  to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq]  from setupRasterIrq::@2
  return 
  to:@return

interrupt(HARDWARE_ALL)(void()) irqTop()
irqTop: scope:[irqTop]  from
  (bool~) irqTop::$0 ← ! (const bool) DEBUG
  if((bool~) irqTop::$0) goto irqTop::@1
  to:irqTop::@2
irqTop::@1: scope:[irqTop]  from irqTop irqTop::@6
  *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE
  *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
  *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER
  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::$1 ← (byte) irqTop::i#1 != rangelast(0,4)
  if((bool~) irqTop::$1) goto irqTop::@3
  to:irqTop::@4
irqTop::@4: scope:[irqTop]  from irqTop::@3
  *((const byte*) BORDERCOL) ← (const byte) WHITE
  *((const byte*) BGCOL) ← (const byte) WHITE
  (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::$2 ← (byte) irqTop::i1#1 != rangelast(0,7)
  if((bool~) irqTop::$2) goto irqTop::@5
  to:irqTop::@6
irqTop::@6: scope:[irqTop]  from irqTop::@5
  *((const byte*) BORDERCOL) ← (const byte) LIGHT_BLUE
  *((const byte*) BGCOL) ← (const byte) BLUE
  to:irqTop::@1
irqTop::@return: scope:[irqTop]  from irqTop::@1
  return 
  to:@return

interrupt(HARDWARE_ALL)(void()) irqBottom()
irqBottom: scope:[irqBottom]  from
  (bool~) irqBottom::$0 ← ! (const bool) DEBUG
  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 ← ! (const bool) DEBUG
  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::$3 ← (byte) irqBottom::i#1 != rangelast(0,4)
  if((bool~) irqBottom::$3) goto irqBottom::@5
  to:irqBottom::@6
irqBottom::@6: scope:[irqBottom]  from irqBottom::@5
  *((const byte*) BORDERCOL) ← (const byte) WHITE
  *((const byte*) BGCOL) ← (const byte) WHITE
  to:irqBottom::@1
irqBottom::@2: scope:[irqBottom]  from irqBottom::@4 irqBottom::@7
  *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP
  *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
  *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER
  to:irqBottom::@return
irqBottom::@4: scope:[irqBottom]  from irqBottom::@7
  *((const byte*) BORDERCOL) ← (const byte) LIGHT_BLUE
  *((const byte*) BGCOL) ← (const byte) BLUE
  to:irqBottom::@2
irqBottom::@return: scope:[irqBottom]  from irqBottom::@2
  return 
  to:@return
@37: scope:[]  from @39
  (byte*) SCREEN_COPY#7 ← phi( @39/(byte*) SCREEN_COPY#14 )
  (byte*) SCREEN_DIST#3 ← phi( @39/(byte*) SCREEN_DIST#0 )
  call main 
  to:@40
@40: scope:[]  from @37
  to:@end
@end: scope:[]  from @40

SYMBOL TABLE SSA
(void*~) $0
(void*~) $1
(const struct ProcessingSprite) $2 = { x: (word) 0, y: (word) 0, vx: (word) 0, vy: (word) 0, id: (byte) 0, ptr: (byte) 0, col: (byte) 0, status: (const byte) STATUS_FREE, screenPtr: (byte*)(number) 0 }
(label) @27
(label) @37
(label) @38
(label) @39
(label) @40
(label) @5
(label) @begin
(label) @end
(const byte*) BGCOL = (byte*)(number) $d021
(const byte) BLUE = (byte) 6
(const byte*) BORDERCOL = (byte*)(number) $d020
(const byte) BORDER_XPOS_LEFT = (byte) $18
(const word) BORDER_XPOS_RIGHT = (word) $158
(const byte) BORDER_YPOS_BOTTOM = (byte) $fa
(const byte) BORDER_YPOS_TOP = (byte) $32
(const byte*) CHARGEN = (byte*)(number) $d000
(const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d
(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f
(const byte*) COLS = (byte*)(number) $d800
(const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16]  = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
(const byte) CORDIC_ITERATIONS_16 = (byte) $f
(const bool) DEBUG = false
(const void()**) HARDWARE_IRQ = (void()**)(number) $fffe
(const byte*) HEAP_TOP = (byte*)(number) $a000
(const byte*) IRQ_ENABLE = (byte*)(number) $d01a
(const byte) IRQ_RASTER = (byte) 1
(const byte*) IRQ_STATUS = (byte*)(number) $d019
(const byte) LIGHT_BLUE = (byte) $e
(const byte) NOT_FOUND = (byte) $ff
(const byte) NUM_PROCESSING = (byte) 8
(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
(const struct ProcessingSprite*) PROCESSING[(const byte) NUM_PROCESSING]  = { fill( NUM_PROCESSING, 0) }
(const byte*) PROCPORT = (byte*)(number) 1
(const byte*) PROCPORT_DDR = (byte*)(number) 0
(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7
(const byte) PROCPORT_RAM_CHARROM = (byte) 1
(const byte) PROCPORT_RAM_IO = (byte) 5
(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
(const byte*) RASTER = (byte*)(number) $d012
(const byte) RASTER_IRQ_MIDDLE = (byte) $ff
(const byte) RASTER_IRQ_TOP = (byte) $30
(const byte*) SCREEN = (byte*)(number) $400
(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#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#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
(const byte*) SPRITES_COLS = (byte*)(number) $d027
(const byte*) SPRITES_ENABLE = (byte*)(number) $d015
(const byte*) SPRITES_EXPAND_X = (byte*)(number) $d01d
(const byte*) SPRITES_EXPAND_Y = (byte*)(number) $d017
(const byte*) SPRITES_MC = (byte*)(number) $d01c
(const byte*) SPRITES_XMSB = (byte*)(number) $d010
(const byte*) SPRITES_XPOS = (byte*)(number) $d000
(const byte*) SPRITES_YPOS = (byte*)(number) $d001
(const byte*) SPRITE_DATA = (byte*)(number) $2000
(const word) SPRITE_PTRS = (word) $3f8
(const byte) STATUS_FREE = (byte) 0
(const byte) STATUS_NEW = (byte) 1
(const byte) STATUS_PROCESSING = (byte) 2
(const byte*) VIC_CONTROL = (byte*)(number) $d011
(const word*) VXSIN[(number) $28]  = kickasm {{ .for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }
 }}
(const word*) VYSIN[(number) $19]  = kickasm {{ .for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }
 }}
(const byte) WHITE = (byte) 1
(const word) XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT-(number) 8<<(number) 4
(const word) XPOS_RIGHTMOST = (word)(const word) BORDER_XPOS_RIGHT<<(number) 4
(const word) YPOS_BOTTOMMOST = (word)(const byte) BORDER_YPOS_BOTTOM<<(number) 4
(const word) YPOS_TOPMOST = (word)(const byte) BORDER_YPOS_TOP-(number) 8<<(number) 4
(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
(bool~) 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
(byte~) atan2_16::$22
(byte~) atan2_16::$23
(bool~) atan2_16::$24
(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#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()
(bool~) initSprites::$0
(bool~) initSprites::$1
(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
(bool~) irqBottom::$3
(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
(bool~) irqTop::$1
(bool~) irqTop::$2
(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()
(byte~) main::$10
(bool~) main::$3
(bool~) main::$4
(struct ProcessingChar~) main::$5
(byte~) main::$5_dist
(byte~) main::$5_x
(byte~) main::$5_y
(bool~) main::$6
(bool~) main::$7
(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
(struct ProcessingSprite*~) processChars::$1
(number~) processChars::$10
(number~) processChars::$11
(byte~) processChars::$12
(word~) processChars::$13
(byte~) processChars::$14
(number~) processChars::$15
(bool~) processChars::$16
(bool~) processChars::$17
(bool~) processChars::$18
(bool~) processChars::$19
(number~) processChars::$2
(bool~) processChars::$20
(bool~) processChars::$21
(bool~) processChars::$22
(number~) processChars::$23
(byte~) processChars::$24
(number~) processChars::$25
(number~) processChars::$26
(byte~) processChars::$27
(number~) processChars::$28
(number~) processChars::$29
(bool~) processChars::$3
(bool~) processChars::$30
(byte~) processChars::$31
(byte~) processChars::$32
(byte~) processChars::$33
(byte~) processChars::$34
(byte*~) processChars::$35
(byte*~) processChars::$36
(byte*~) processChars::$37
(word*~) processChars::$38
(byte**~) processChars::$39
(bool~) processChars::$4
(byte*~) processChars::$40
(byte*~) processChars::$41
(byte*~) processChars::$42
(byte*~) processChars::$43
(byte*~) processChars::$44
(word*~) processChars::$45
(word*~) processChars::$46
(word*~) processChars::$47
(word*~) processChars::$48
(word*~) processChars::$49
(bool~) processChars::$5
(byte*~) processChars::$50
(word*~) processChars::$51
(word*~) processChars::$52
(word*~) processChars::$53
(word*~) processChars::$54
(word*~) processChars::$55
(word*~) processChars::$56
(word*~) processChars::$57
(word*~) processChars::$58
(word*~) processChars::$59
(bool~) processChars::$6
(word*~) processChars::$60
(bool~) processChars::$61
(byte*~) processChars::$7
(word~) 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
(number~) startProcessing::$20
(word~) startProcessing::$21
(bool~) startProcessing::$22
(bool~) startProcessing::$23
(bool~) startProcessing::$24
(bool~) startProcessing::$25
(bool~) startProcessing::$26
(byte~) startProcessing::$27
(byte~) startProcessing::$28
(byte*~) startProcessing::$3
(byte*~) startProcessing::$4
(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) 4 in 
Adding number conversion cast (unumber) 8 in 
Adding number conversion cast (unumber) 4 in 
Adding number conversion cast (unumber) 4 in 
Adding number conversion cast (unumber) 8 in 
Adding number conversion cast (unumber) 4 in 
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 (snumber) 0 in (bool~) atan2_16::$16 ← (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::$18 ← (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::$24 ← (number) 0 != (byte) atan2_16::shift#4
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$20 ← (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 (unumber) 1 in (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-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) $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) $3e8 in (bool~) main::$3 ← (byte*) main::src#2 != (const byte*) SCREEN+(number) $3e8
Adding number conversion cast (unumber) 1 in (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,NUM_PROCESSING-1)
Adding number conversion cast (unumber) $3e7 in *((const byte*) SCREEN+(number) $3e7) ← (byte) '.'
Adding number conversion cast (unumber) $3e7 in *((const byte*) COLS+(number) $3e7) ← ++ *((const byte*) COLS+(number) $3e7)
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) 1 in (byte) startProcessing::i#1 ← (byte) startProcessing::i#3 + rangenext(0,NUM_PROCESSING-1)
Adding number conversion cast (unumber) $ff in (bool~) startProcessing::$25 ← (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 ← (const byte) BORDER_XPOS_LEFT + (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 ← (const byte) BORDER_YPOS_TOP + (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)(const byte*) SPRITE_DATA/(number) $40 + (byte) startProcessing::spriteIdx#1
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$20 ← (byte) startProcessing::spriteIdx#1 * (number) 8
Adding number conversion cast (unumber) startProcessing::$20 in (number~) startProcessing::$20 ← (byte) startProcessing::spriteIdx#1 * (unumber)(number) 8
Adding number conversion cast (unumber) 1 in (number~) processChars::$2 ← (number) 1 << *((byte*~) processChars::$35)
Adding number conversion cast (unumber) processChars::$2 in (number~) processChars::$2 ← (unumber)(number) 1 << *((byte*~) processChars::$35)
Adding number conversion cast (unumber) 1 in (byte) processChars::i#1 ← (byte) processChars::i#3 + rangenext(0,NUM_PROCESSING-1)
Adding number conversion cast (unumber) 4 in (word~) processChars::$8 ← *((word*~) processChars::$38) >> (number) 4
Adding number conversion cast (unumber) 0 in (bool~) processChars::$61 ← (number) 0 != (byte~) processChars::$9
Adding number conversion cast (unumber) $ff in (number~) processChars::$10 ← (number) $ff ^ (byte) processChars::bitmask#3
Adding number conversion cast (unumber) processChars::$10 in (number~) processChars::$10 ← (unumber)(number) $ff ^ (byte) processChars::bitmask#3
Adding number conversion cast (unumber) 2 in (number~) processChars::$11 ← (byte) processChars::i#4 * (number) 2
Adding number conversion cast (unumber) processChars::$11 in (number~) processChars::$11 ← (byte) processChars::i#4 * (unumber)(number) 2
Adding number conversion cast (unumber) 4 in (word~) processChars::$13 ← *((word*~) processChars::$45) >> (number) 4
Adding number conversion cast (unumber) 2 in (number~) processChars::$15 ← (byte) processChars::i#4 * (number) 2
Adding number conversion cast (unumber) processChars::$15 in (number~) processChars::$15 ← (byte) processChars::i#4 * (unumber)(number) 2
Adding number conversion cast (unumber) $ff in (number~) processChars::$29 ← (number) $ff ^ (byte) processChars::bitmask#4
Adding number conversion cast (unumber) processChars::$29 in (number~) processChars::$29 ← (unumber)(number) $ff ^ (byte) processChars::bitmask#4
Adding number conversion cast (unumber) 8 in (number~) processChars::$23 ← (word) processChars::xpos#2 / (number) 8
Adding number conversion cast (unumber) processChars::$23 in (number~) processChars::$23 ← (word) processChars::xpos#2 / (unumber)(number) 8
Adding number conversion cast (unumber) BORDER_XPOS_LEFT/8 in (number~) processChars::$25 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(number) 8
Adding number conversion cast (unumber) processChars::$25 in (number~) processChars::$25 ← (byte~) processChars::$24 - (unumber)(const byte) BORDER_XPOS_LEFT/(number) 8
Adding number conversion cast (unumber) 8 in (unumber~) processChars::$25 ← (byte~) processChars::$24 - (unumber)(const byte) BORDER_XPOS_LEFT/(number) 8
Adding number conversion cast (unumber) 8 in (number~) processChars::$26 ← (byte) processChars::ypos#1 / (number) 8
Adding number conversion cast (unumber) processChars::$26 in (number~) processChars::$26 ← (byte) processChars::ypos#1 / (unumber)(number) 8
Adding number conversion cast (unumber) BORDER_YPOS_TOP/8 in (number~) processChars::$28 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(number) 8
Adding number conversion cast (unumber) processChars::$28 in (number~) processChars::$28 ← (byte~) processChars::$27 - (unumber)(const byte) BORDER_YPOS_TOP/(number) 8
Adding number conversion cast (unumber) 8 in (unumber~) processChars::$28 ← (byte~) processChars::$27 - (unumber)(const byte) BORDER_YPOS_TOP/(number) 8
Adding number conversion cast (unumber) $3e7 in *((const byte*) SCREEN+(number) $3e7) ← (byte~) processChars::$31
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) $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) NUM_PROCESSING*$40 in (bool~) initSprites::$0 ← (byte*) initSprites::sp#2 < (const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(number) $40
Adding number conversion cast (unumber) $40 in (bool~) initSprites::$0 ← (byte*) initSprites::sp#2 < (const byte*) SPRITE_DATA+(unumber)(const byte) NUM_PROCESSING*(number) $40
Adding number conversion cast (unumber) 0 in *((byte*) initSprites::sp#3) ← (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_MC) ← (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_EXPAND_X) ← (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_EXPAND_Y) ← (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 *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (number) $7f
Adding number conversion cast (unumber) $80 in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (number) $80
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0
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 (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::closest_y#3
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 (word~) startProcessing::$21 ← (word)(unumber~) startProcessing::$20
Inlining cast (byte~) processChars::$12 ← (byte)(word) processChars::xpos#1
Inlining cast (byte~) processChars::$14 ← (byte)(word~) processChars::$13
Inlining cast (byte~) processChars::$24 ← (byte)(unumber~) processChars::$23
Inlining cast (byte~) processChars::$27 ← (byte)(unumber~) processChars::$26
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 *((const byte*) SPRITES_MC) ← (unumber)(number) 0
Inlining cast *((const byte*) SPRITES_EXPAND_X) ← (unumber)(number) 0
Inlining cast *((const byte*) SPRITES_EXPAND_Y) ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 0
Simplifying constant pointer cast (byte*) 1
Simplifying constant pointer cast (byte*) 53248
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 pointer cast (byte*) 55296
Simplifying constant pointer cast (byte*) 56333
Simplifying constant pointer cast (void()**) 65534
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 8192
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast (const word) BORDER_XPOS_RIGHT
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant pointer cast (byte*) 0
Simplifying constant pointer cast (byte*) 40960
Simplifying constant integer cast 0
Simplifying constant integer cast 0
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 1
Simplifying constant integer cast 0
Simplifying constant integer cast $8000
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant integer cast 1
Simplifying constant integer cast $3e7
Simplifying constant integer cast $3e7
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $28
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 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 (const byte) BORDER_XPOS_LEFT/(unumber)(number) 8
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast (const byte) BORDER_YPOS_TOP/(unumber)(number) 8
Simplifying constant integer cast 8
Simplifying constant integer cast $3e7
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 (const byte) NUM_PROCESSING*(unumber)(number) $40
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
Successful SSA optimization PassNCastSimplification
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 signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
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 unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized unsigned number type (word) $8000
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
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) 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) $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
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9
Inferred type updated to word in (unumber~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (byte) $28
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 ← (const byte) BORDER_XPOS_LEFT + (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 ← (const byte) BORDER_YPOS_TOP + (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::$20 ← (byte) startProcessing::spriteIdx#1 * (byte) 8
Inferred type updated to byte in (unumber~) processChars::$2 ← (byte) 1 << *((byte*~) processChars::$35)
Inferred type updated to byte in (unumber~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#3
Inferred type updated to byte in (unumber~) processChars::$11 ← (byte) processChars::i#4 * (byte) 2
Inferred type updated to byte in (unumber~) processChars::$15 ← (byte) processChars::i#4 * (byte) 2
Inferred type updated to byte in (unumber~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#4
Inferred type updated to word in (unumber~) processChars::$23 ← (word) processChars::xpos#2 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$25 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8
Inferred type updated to byte in (unumber~) processChars::$26 ← (byte) processChars::ypos#1 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$28 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8
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
Inversing boolean not [33] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [32] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0
Inversing boolean not [42] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [41] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
Inversing boolean not [53] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [52] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4
Inversing boolean not [77] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [76] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
Inversing boolean not [146] (bool~) main::$7 ← (byte) main::center_dist#0 != (const byte) NOT_FOUND from [145] (bool~) main::$6 ← (byte) main::center_dist#0 == (const byte) NOT_FOUND
Inversing boolean not [170] (bool~) getCharToProcess::$3 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) == (byte) ' ' from [169] (bool~) getCharToProcess::$2 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) != (byte) ' '
Inversing boolean not [179] (bool~) getCharToProcess::$5 ← (byte) getCharToProcess::dist#0 >= (byte) getCharToProcess::closest_dist#2 from [178] (bool~) getCharToProcess::$4 ← (byte) getCharToProcess::dist#0 < (byte) getCharToProcess::closest_dist#2
Inversing boolean not [193] (bool~) getCharToProcess::$1 ← (byte) getCharToProcess::closest_dist#3 == (const byte) NOT_FOUND from [192] (bool~) getCharToProcess::$0 ← (byte) getCharToProcess::closest_dist#3 != (const byte) NOT_FOUND
Inversing boolean not [219] (bool~) startProcessing::$23 ← *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27) != (const byte) STATUS_FREE from [218] (bool~) startProcessing::$22 ← *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27) == (const byte) STATUS_FREE
Inversing boolean not [299] (bool~) processChars::$4 ← *((byte*~) processChars::$36) == (const byte) STATUS_FREE from [298] (bool~) processChars::$3 ← *((byte*~) processChars::$36) != (const byte) STATUS_FREE
Inversing boolean not [308] (bool~) processChars::$6 ← *((byte*~) processChars::$37) != (const byte) STATUS_NEW from [307] (bool~) processChars::$5 ← *((byte*~) processChars::$37) == (const byte) STATUS_NEW
Successful SSA optimization Pass2UnaryNotSimplification
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 (byte*) heap_head#0 = (byte*) heap_head#9 
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#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#14 
Alias (byte*) main::src#2 = (byte*) main::src#3 
Alias (byte*) main::dst#2 = (byte*) main::dst#3 
Alias (byte*) SCREEN_COPY#22 = (byte*) SCREEN_COPY#24 (byte*) SCREEN_COPY#23 
Alias (byte*) SCREEN_DIST#12 = (byte*) SCREEN_DIST#15 (byte*) SCREEN_DIST#13 
Alias (byte*) SCREEN_COPY#11 = (byte*) SCREEN_COPY#15 (byte*) SCREEN_COPY#20 (byte*) SCREEN_COPY#8 
Alias (byte*) SCREEN_DIST#11 = (byte*) SCREEN_DIST#9 (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#5 
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#10 = (byte*) SCREEN_DIST#4 (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#6 
Alias (byte) main::center_x#0 = (byte~) main::$5_x (byte) main::center_x#1 
Alias (byte) main::center_y#0 = (byte~) main::$5_y (byte) main::center_y#1 
Alias (byte) main::center_dist#0 = (byte~) main::$5_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::$19 
Alias (struct ProcessingSprite*) processChars::processing#0 = (struct ProcessingSprite*~) processChars::$1 (struct ProcessingSprite*) processChars::processing#1 (struct ProcessingSprite*) processChars::processing#3 
Alias (byte) processChars::bitmask#0 = (byte~) processChars::$2 (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::$8 (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::$14 (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::$25 
Alias (byte) processChars::ychar#0 = (byte~) processChars::$28 
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 
Alias (byte*) SCREEN_DIST#0 = (byte*) SCREEN_DIST#3 
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#3 
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2 = (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 = (byte) getCharToProcess::x#3 
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2 = (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 = (byte) getCharToProcess::x#3 
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2 = (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#22 (byte*) SCREEN_COPY#1
Identical Phi Values (byte*) SCREEN_DIST#12 (byte*) SCREEN_DIST#1
Identical Phi Values (byte*) SCREEN_COPY#11 (byte*) SCREEN_COPY#22
Identical Phi Values (byte*) SCREEN_DIST#11 (byte*) SCREEN_DIST#12
Identical Phi Values (byte*) SCREEN_COPY#12 (byte*) SCREEN_COPY#11
Identical Phi Values (byte*) SCREEN_DIST#10 (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#10
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#21
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#21 (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 [343] (byte~) processChars::$15 ← (byte) processChars::i#10 * (byte) 2
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) atan2_16::$0 [12] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
Simple Condition (bool~) atan2_16::$5 [21] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
Simple Condition (bool~) atan2_16::$17 [34] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16
Simple Condition (bool~) atan2_16::$11 [43] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
Simple Condition (bool~) atan2_16::$18 [46] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19
Simple Condition (bool~) atan2_16::$19 [54] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25
Simple Condition (bool~) atan2_16::$20 [57] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26
Simple Condition (bool~) atan2_16::$21 [74] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@15
Simple Condition (bool~) atan2_16::$14 [78] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
Simple Condition (bool~) main::$3 [113] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2
Simple Condition (bool~) main::$4 [125] if((byte) main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@7
Simple Condition (bool~) main::$7 [147] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@10
Simple Condition (bool~) getCharToProcess::$3 [171] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@5
Simple Condition (bool~) getCharToProcess::$6 [175] if((byte) getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4
Simple Condition (bool~) getCharToProcess::$5 [180] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@5
Simple Condition (bool~) getCharToProcess::$7 [190] if((byte) getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3
Simple Condition (bool~) getCharToProcess::$1 [194] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@1
Simple Condition (bool~) startProcessing::$23 [220] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3
Simple Condition (bool~) startProcessing::$24 [224] if((byte) startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2
Simple Condition (bool~) startProcessing::$25 [229] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@1
Simple Condition (bool~) startProcessing::$26 [259] if((byte) startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9
Simple Condition (bool~) processChars::$4 [300] if(*((byte*~) processChars::$36)==(const byte) STATUS_FREE) goto processChars::@3
Simple Condition (bool~) processChars::$30 [304] if((byte) processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@2
Simple Condition (bool~) processChars::$6 [309] if(*((byte*~) processChars::$37)!=(const byte) STATUS_NEW) goto processChars::@4
Simple Condition (bool~) processChars::$61 [316] if((byte) 0!=(byte~) processChars::$9) goto processChars::@5
Simple Condition (bool~) init_angle_screen::$2 [407] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Simple Condition (bool~) init_angle_screen::$16 [444] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Simple Condition (bool~) initSprites::$0 [449] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2
Simple Condition (bool~) initSprites::$1 [458] if((byte) initSprites::i#1!=rangelast(0,7)) goto initSprites::@7
Simple Condition (bool~) setupRasterIrq::$0 [469] if((word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1
Simple Condition (bool~) irqTop::$1 [490] if((byte) irqTop::i#1!=rangelast(0,4)) goto irqTop::@3
Simple Condition (bool~) irqTop::$2 [497] if((byte) irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5
Simple Condition (bool~) irqBottom::$3 [510] if((byte) irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting || if()-condition to two if()s [355] (bool~) processChars::$22 ← (bool~) processChars::$20 || (bool~) processChars::$21
Rewriting || if()-condition to two if()s [352] (bool~) processChars::$20 ← (bool~) processChars::$18 || (bool~) processChars::$19
Rewriting || if()-condition to two if()s [349] (bool~) processChars::$18 ← (bool~) processChars::$16 || (bool~) processChars::$17
Rewriting ! if()-condition to reversed if() [390] (bool~) processChars::$0 ← ! (const bool) DEBUG
Rewriting ! if()-condition to reversed if() [481] (bool~) irqTop::$0 ← ! (const bool) DEBUG
Rewriting ! if()-condition to reversed if() [501] (bool~) irqBottom::$0 ← ! (const bool) DEBUG
Rewriting ! if()-condition to reversed if() [504] (bool~) irqBottom::$2 ← ! (const bool) DEBUG
Successful SSA optimization Pass2ConditionalAndOrRewriting
Negating conditional jump and destination [74] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17
Constant (const byte*) heap_head#0 = HEAP_TOP
Constant (const word) atan2_16::angle#0 = 0
Constant (const byte) atan2_16::i#0 = 0
Constant (const word) malloc::size#0 = $3e8
Constant (const word) malloc::size#1 = $3e8
Constant (const byte*) main::src#0 = SCREEN
Constant (const byte) main::i#0 = 0
Constant (const word) setupRasterIrq::raster#0 = RASTER_IRQ_TOP
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::closest_dist#0 = NOT_FOUND
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::sp#0 = SPRITE_DATA
Constant (const byte) initSprites::i#0 = 0
Constant (const byte) irqTop::i#0 = 0
Constant (const byte) irqTop::i1#0 = 0
Constant (const byte) irqBottom::i#0 = 0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [154] if(true) goto main::@9
if() condition always true - replacing block destination [157] if(true) goto main::@15
if() condition always false - eliminating [391] if((const bool) DEBUG) goto processChars::@16
if() condition always true - replacing block destination [469] if((const word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1
if() condition always false - eliminating [482] if((const bool) DEBUG) goto irqTop::@2
if() condition always false - eliminating [502] if((const bool) DEBUG) goto irqBottom::@3
if() condition always false - eliminating [505] if((const bool) DEBUG) goto irqBottom::@4
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [72] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
Resolved ranged comparison value [74] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1
Resolved ranged next value [123] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [125] if(main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@7 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1
Resolved ranged next value [173] getCharToProcess::x#1 ← ++ getCharToProcess::x#2 to ++
Resolved ranged comparison value [175] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 to (number) $28
Resolved ranged next value [188] getCharToProcess::y#1 ← ++ getCharToProcess::y#7 to ++
Resolved ranged comparison value [190] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 to (number) $19
Resolved ranged next value [222] startProcessing::i#1 ← ++ startProcessing::i#2 to ++
Resolved ranged comparison value [224] if(startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1
Resolved ranged next value [257] startProcessing::i1#1 ← ++ startProcessing::i1#2 to ++
Resolved ranged comparison value [259] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 to (number) 8
Resolved ranged next value [302] processChars::i#1 ← ++ processChars::i#10 to ++
Resolved ranged comparison value [304] if(processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@2 to (const byte) NUM_PROCESSING-(byte) 1+(number) 1
Resolved ranged next value [442] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [444] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
Resolved ranged next value [456] initSprites::i#1 ← ++ initSprites::i#2 to ++
Resolved ranged comparison value [458] if(initSprites::i#1!=rangelast(0,7)) goto initSprites::@7 to (number) 8
Resolved ranged next value [488] irqTop::i#1 ← ++ irqTop::i#2 to ++
Resolved ranged comparison value [490] if(irqTop::i#1!=rangelast(0,4)) goto irqTop::@3 to (number) 5
Resolved ranged next value [495] irqTop::i1#1 ← ++ irqTop::i1#2 to ++
Resolved ranged comparison value [497] if(irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5 to (number) 8
Resolved ranged next value [508] irqBottom::i#1 ← ++ irqBottom::i#2 to ++
Resolved ranged comparison value [510] if(irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5 to (number) 5
Rewriting conditional comparison [407] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Converting *(pointer+n) to pointer[n] [205] *((byte*~) getCharToProcess::$11) ← (byte) ' '  -- *(getCharToProcess::$10 + getCharToProcess::return_x#1)
Converting *(pointer+n) to pointer[n] [295] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*~) processChars::$35)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Converting *(pointer+n) to pointer[n] [300] if(*((byte*~) processChars::$36)==(const byte) STATUS_FREE) goto processChars::@3  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [309] if(*((byte*~) processChars::$37)!=(const byte) STATUS_NEW) goto processChars::@4  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [312] (word) processChars::xpos#0 ← *((word*~) processChars::$38) >> (byte) 4  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [319] *(*((byte**~) processChars::$39)) ← (byte) ' '  -- *((byte**)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)
Converting *(pointer+n) to pointer[n] [323] *((const byte*) SPRITES_COLS + *((byte*~) processChars::$41)) ← *((byte*~) processChars::$40)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_COL)
Converting *(pointer+n) to pointer[n] [323] *((const byte*) SPRITES_COLS + *((byte*~) processChars::$41)) ← *((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] [325] (byte*~) processChars::$7 ← (const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*~) processChars::$42)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Converting *(pointer+n) to pointer[n] [327] *((byte*~) processChars::$7) ← *((byte*~) processChars::$43)  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
Converting *(pointer+n) to pointer[n] [327] *((byte*~) processChars::$7) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)  -- *(SCREEN+SPRITE_PTRS + *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID))
Converting *(pointer+n) to pointer[n] [329] *((byte*~) processChars::$44) ← (const byte) STATUS_PROCESSING  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [340] (word~) processChars::$13 ← *((word*~) processChars::$45) >> (byte) 4  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [346] (bool~) processChars::$16 ← *((word*~) processChars::$46) < (const word) XPOS_LEFTMOST  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [348] (bool~) processChars::$17 ← *((word*~) processChars::$47) > (const word) XPOS_RIGHTMOST  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [351] (bool~) processChars::$19 ← *((word*~) processChars::$48) < (const word) YPOS_TOPMOST  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [354] (bool~) processChars::$21 ← *((word*~) processChars::$49) > (const word) YPOS_BOTTOMMOST  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [359] *((byte*~) processChars::$50) ← (const byte) STATUS_FREE  -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [370] *((word*~) processChars::$52) ← *((word*~) processChars::$51) + *((const word*) VXSIN + (byte~) processChars::$33)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [370] *((word*~) processChars::$52) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN + (byte~) processChars::$33)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [374] *((word*~) processChars::$55) ← *((word*~) processChars::$53) + *((word*~) processChars::$54)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [374] *((word*~) processChars::$55) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*~) processChars::$54)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [374] *((word*~) processChars::$55) ← *((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] [382] *((word*~) processChars::$57) ← *((word*~) processChars::$56) + *((const word*) VYSIN + (byte~) processChars::$34)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [382] *((word*~) processChars::$57) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN + (byte~) processChars::$34)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [386] *((word*~) processChars::$60) ← *((word*~) processChars::$58) + *((word*~) processChars::$59)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [386] *((word*~) processChars::$60) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*~) processChars::$59)  -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [386] *((word*~) processChars::$60) ← *((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 in [278] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0
Simplifying expression containing zero (word*)processChars::processing#0 in [311] (word*~) processChars::$38 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [312] (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 [345] (word*~) processChars::$46 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [346] (bool~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) < (const word) XPOS_LEFTMOST
Simplifying expression containing zero (word*)processChars::processing#0 in [347] (word*~) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [348] (bool~) processChars::$17 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) > (const word) XPOS_RIGHTMOST
Simplifying expression containing zero (word*)processChars::processing#0 in [371] (word*~) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [373] (word*~) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [374] *((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 [374] *((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 [76] (byte) startProcessing::center_dist#0 ← (byte) main::center_dist#0
Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#0 and assignment [96] (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 [100] (byte*~) getCharToProcess::$11 ← (byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1
Eliminating unused variable (struct ProcessingChar) getCharToProcess::return#1 and assignment [102] (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::$35 and assignment [160] (byte*~) processChars::$35 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*~) processChars::$36 and assignment [162] (byte*~) processChars::$36 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (byte*~) processChars::$37 and assignment [167] (byte*~) processChars::$37 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*~) processChars::$38 and assignment [169] (word*~) processChars::$38 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (byte**~) processChars::$39 and assignment [173] (byte**~) processChars::$39 ← (byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Eliminating unused variable (byte*~) processChars::$40 and assignment [176] (byte*~) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL
Eliminating unused variable (byte*~) processChars::$41 and assignment [177] (byte*~) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*~) processChars::$42 and assignment [179] (byte*~) processChars::$42 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*~) processChars::$7 and assignment [180] (byte*~) processChars::$7 ← (const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Eliminating unused variable (byte*~) processChars::$43 and assignment [181] (byte*~) processChars::$43 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Eliminating unused variable (byte*~) processChars::$44 and assignment [183] (byte*~) processChars::$44 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*~) processChars::$45 and assignment [191] (word*~) processChars::$45 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*~) processChars::$46 and assignment [196] (word*~) processChars::$46 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*~) processChars::$47 and assignment [198] (word*~) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*~) processChars::$48 and assignment [200] (word*~) processChars::$48 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*~) processChars::$49 and assignment [202] (word*~) processChars::$49 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (byte*~) processChars::$50 and assignment [205] (byte*~) processChars::$50 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*~) processChars::$51 and assignment [213] (word*~) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*~) processChars::$52 and assignment [214] (word*~) processChars::$52 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*~) processChars::$53 and assignment [216] (word*~) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*~) processChars::$54 and assignment [217] (word*~) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*~) processChars::$55 and assignment [218] (word*~) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*~) processChars::$56 and assignment [224] (word*~) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*~) processChars::$57 and assignment [225] (word*~) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*~) processChars::$58 and assignment [227] (word*~) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*~) processChars::$59 and assignment [228] (word*~) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*~) processChars::$60 and assignment [229] (word*~) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused constant (const bool) DEBUG
Eliminating unused constant (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte~) processChars::$31 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
Adding number conversion cast (unumber) CORDIC_ITERATIONS_16-1+1 in if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) NUM_PROCESSING-1+1 in if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(number) 1) goto main::@7
Adding number conversion cast (unumber) 1 in if((byte) main::i#1!=(unumber)(const byte) NUM_PROCESSING-(byte) 1+(number) 1) goto main::@7
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) NUM_PROCESSING-1+1 in if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(number) 1) goto startProcessing::@2
Adding number conversion cast (unumber) 1 in if((byte) startProcessing::i#1!=(unumber)(const byte) NUM_PROCESSING-(byte) 1+(number) 1) goto startProcessing::@2
Adding number conversion cast (unumber) 8 in if((byte) startProcessing::i1#1!=(number) 8) goto startProcessing::@9
Adding number conversion cast (unumber) NUM_PROCESSING-1+1 in if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(number) 1) goto processChars::@2
Adding number conversion cast (unumber) 1 in if((byte) processChars::i#1!=(unumber)(const byte) NUM_PROCESSING-(byte) 1+(number) 1) goto processChars::@2
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 (const byte) CORDIC_ITERATIONS_16-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) NUM_PROCESSING-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast $28
Simplifying constant integer cast $19
Simplifying constant integer cast (const byte) NUM_PROCESSING-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast 8
Simplifying constant integer cast (const byte) NUM_PROCESSING-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (byte~) processChars::$26
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) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
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::$15 = (byte~) processChars::$11 
Alias (byte~) processChars::$27 = (byte~) processChars::$26 
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) processChars::$16 [183] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@7
Simple Condition (bool~) processChars::$21 [267] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@7
Simple Condition (bool~) processChars::$19 [268] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@7
Simple Condition (bool~) processChars::$17 [269] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@7
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [251] (byte~) setupRasterIrq::$1 ← < (const word) setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) setupRasterIrq::$1 = <setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantIdentification
Eliminating unused constant (const byte*) BORDERCOL
Eliminating unused constant (const byte*) BGCOL
Eliminating unused constant (const byte) WHITE
Eliminating unused constant (const byte) BLUE
Eliminating unused constant (const byte) irqTop::i#0
Eliminating unused constant (const byte) irqTop::i1#0
Eliminating unused constant (const byte) irqBottom::i#0
Successful SSA optimization PassNEliminateUnusedVars
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 [203] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$5 keeping init_angle_screen::xw#0
Inlining Noop Cast [206] (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::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [32] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift and addition[60] (byte~) main::$10 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[95] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (byte) $28
Rewriting multiplication to use shift and addition[101] (byte~) startProcessing::$27 ← (byte) startProcessing::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[108] (word~) startProcessing::$1 ← (word~) startProcessing::$0 * (byte) $28
Rewriting multiplication to use shift [114] (word~) startProcessing::$6 ← (word~) startProcessing::$5 * (byte) $40
Rewriting multiplication to use shift [118] (word~) startProcessing::$9 ← (word~) startProcessing::$8 * (byte) 8
Rewriting multiplication to use shift [131] (word~) startProcessing::$12 ← (word~) startProcessing::$11 * (byte) 8
Rewriting multiplication to use shift [135] (word~) startProcessing::$16 ← (word~) startProcessing::$15 * (byte) 8
Rewriting multiplication to use shift [139] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 * (byte) 8
Rewriting multiplication to use shift and addition[141] (byte~) startProcessing::$28 ← (byte) startProcessing::freeIdx#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[153] (byte~) processChars::$32 ← (byte) processChars::i#10 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift [172] (byte~) processChars::$15 ← (byte) processChars::i#10 * (byte) 2
Rewriting division to use shift [182] (word~) processChars::$23 ← (word) processChars::xpos#0 / (byte) 8
Rewriting multiplication to use shift [185] (byte~) processChars::$33 ← (byte) processChars::xchar#0 * (const byte) SIZEOF_WORD
Rewriting division to use shift [188] (byte~) processChars::$27 ← (byte) processChars::ypos#0 / (byte) 8
Rewriting multiplication to use shift [190] (byte~) processChars::$34 ← (byte) processChars::ychar#0 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [200] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2
Rewriting multiplication to use shift [204] (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::src#0
Inlining constant with var siblings (const byte) main::i#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::closest_dist#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) 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::sp#0
Inlining constant with var siblings (const byte) initSprites::i#0
Inlining constant with var siblings (const byte*) heap_head#0
Constant inlined startProcessing::freeIdx#0 = (byte) $ff
Constant inlined init_angle_screen::y#0 = (byte) 0
Constant inlined init_angle_screen::x#0 = (byte) 0
Constant inlined main::src#0 = (const byte*) SCREEN
Constant inlined atan2_16::angle#0 = (word) 0
Constant inlined getCharToProcess::x#0 = (byte) 0
Constant inlined initSprites::sp#0 = (const byte*) SPRITE_DATA
Constant inlined getCharToProcess::y#0 = (byte) 0
Constant inlined setupRasterIrq::raster#0 = (const byte) RASTER_IRQ_TOP
Constant inlined getCharToProcess::closest_y#0 = (byte) 0
Constant inlined processChars::numActive#0 = (byte) 0
Constant inlined main::i#0 = (byte) 0
Constant inlined getCharToProcess::closest_x#0 = (byte) 0
Constant inlined ProcessingSprite::$0::STATUS_FREE = (byte) 0
Constant inlined startProcessing::i1#0 = (byte) 0
Constant inlined init_angle_screen::xb#0 = (byte) $27
Constant inlined atan2_16::i#0 = (byte) 0
Constant inlined malloc::size#1 = (word) $3e8
Constant inlined malloc::size#0 = (word) $3e8
Constant inlined ProcessingSprite::$0::STATUS_NEW = (byte) 1
Constant inlined setupRasterIrq::$1 = <(const byte) RASTER_IRQ_TOP
Constant inlined startProcessing::i#0 = (byte) 0
Constant inlined heap_head#0 = (const byte*) HEAP_TOP
Constant inlined ProcessingSprite::$0::STATUS_PROCESSING = (byte) 2
Constant inlined processChars::i#0 = (byte) 0
Constant inlined getCharToProcess::closest_dist#0 = (const byte) NOT_FOUND
Constant inlined initSprites::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Alias (byte~) main::$10 = (byte~) main::$15 
Alias (word~) getCharToProcess::$9 = (word~) getCharToProcess::$14 
Alias (byte~) startProcessing::$27 = (byte~) startProcessing::$33 
Alias (word~) startProcessing::$1 = (word~) startProcessing::$36 
Alias (byte~) startProcessing::$28 = (byte~) startProcessing::$41 
Alias (byte~) processChars::$32 = (byte~) processChars::$66 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (word) malloc::size#2 (word) $3e8
Successful SSA optimization Pass2IdenticalPhiElimination
Eliminating unused constant (const byte) SIZEOF_WORD
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::@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 initSprites::@9(between initSprites::@7 and initSprites::@7)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @27
Adding NOP phi() at start of @37
Adding NOP phi() at start of @40
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::@3
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:3 malloc:6 main:9 
Calls in [main] to init_angle_screen:13 initSprites:29 setupRasterIrq:31 getCharToProcess:34 startProcessing:46 
Calls in [init_angle_screen] to atan2_16:222 
Calls in [irqBottom] to processChars:314 

Created 50 initial phi equivalence classes
Coalesced [5] heap_head#10 ← heap_head#1
Coalesced [15] main::dst#4 ← main::dst#0
Coalesced [48] main::i#3 ← main::i#1
Coalesced [52] main::src#4 ← main::src#1
Coalesced [53] main::dst#5 ← main::dst#1
Coalesced [63] startProcessing::freeIdx#9 ← startProcessing::i#2
Coalesced [83] startProcessing::chargenData#3 ← startProcessing::chargenData#0
Coalesced [84] startProcessing::spriteData#3 ← startProcessing::spriteData#0
Coalesced [119] startProcessing::chargenData#4 ← startProcessing::chargenData#1
Coalesced [120] startProcessing::spriteData#4 ← startProcessing::spriteData#1
Coalesced [121] startProcessing::i1#3 ← startProcessing::i1#1
Not coalescing [122] startProcessing::freeIdx#7 ← startProcessing::freeIdx#2
Not coalescing [125] startProcessing::freeIdx#8 ← startProcessing::freeIdx#6
Coalesced [126] startProcessing::i#5 ← startProcessing::i#1
Coalesced [129] getCharToProcess::screen_line#8 ← getCharToProcess::screen_line#0
Coalesced [130] getCharToProcess::dist_line#8 ← getCharToProcess::dist_line#0
Coalesced [132] getCharToProcess::closest_dist#11 ← getCharToProcess::closest_dist#8
Coalesced [133] getCharToProcess::closest_x#11 ← getCharToProcess::closest_x#9
Coalesced [134] getCharToProcess::closest_y#11 ← getCharToProcess::closest_y#9
Coalesced [139] getCharToProcess::return_dist#7 ← getCharToProcess::dist#0
Not coalescing [140] getCharToProcess::return_x#7 ← getCharToProcess::x#2
Not coalescing [141] getCharToProcess::return_y#7 ← getCharToProcess::y#7
Coalesced [158] getCharToProcess::screen_line#9 ← getCharToProcess::screen_line#1
Coalesced [159] getCharToProcess::dist_line#9 ← getCharToProcess::dist_line#1
Not coalescing [160] getCharToProcess::closest_dist#10 ← getCharToProcess::return_dist#1
Coalesced [161] getCharToProcess::y#8 ← getCharToProcess::y#1
Coalesced [162] getCharToProcess::closest_x#10 ← getCharToProcess::return_x#1
Coalesced [163] getCharToProcess::closest_y#10 ← getCharToProcess::return_y#1
Coalesced [164] getCharToProcess::x#6 ← getCharToProcess::x#1
Not coalescing [165] getCharToProcess::closest_dist#12 ← getCharToProcess::return_dist#1
Coalesced (already) [166] getCharToProcess::closest_x#12 ← getCharToProcess::return_x#1
Coalesced (already) [167] getCharToProcess::closest_y#12 ← getCharToProcess::return_y#1
Not coalescing [168] getCharToProcess::return_dist#6 ← getCharToProcess::closest_dist#2
Coalesced (already) [169] getCharToProcess::return_x#6 ← getCharToProcess::closest_x#7
Coalesced (already) [170] getCharToProcess::return_y#6 ← getCharToProcess::closest_y#7
Not coalescing [171] getCharToProcess::return_dist#5 ← getCharToProcess::closest_dist#2
Coalesced (already) [172] getCharToProcess::return_x#5 ← getCharToProcess::closest_x#7
Coalesced (already) [173] getCharToProcess::return_y#5 ← getCharToProcess::closest_y#7
Coalesced [196] initSprites::i#3 ← initSprites::i#1
Coalesced [199] initSprites::sp#4 ← initSprites::sp#1
Coalesced [202] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0
Coalesced [203] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0
Coalesced [212] init_angle_screen::y#7 ← init_angle_screen::y#1
Coalesced [213] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1
Coalesced [214] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1
Coalesced [236] init_angle_screen::x#5 ← init_angle_screen::x#1
Coalesced [237] init_angle_screen::xb#5 ← init_angle_screen::xb#1
Coalesced [240] atan2_16::yi#17 ← atan2_16::$2
Coalesced [244] atan2_16::xi#14 ← atan2_16::$7
Coalesced [246] atan2_16::yi#19 ← atan2_16::yi#0
Coalesced [247] atan2_16::xi#16 ← atan2_16::xi#0
Coalesced [250] atan2_16::angle#22 ← atan2_16::angle#12
Coalesced [255] atan2_16::angle#27 ← atan2_16::angle#4
Coalesced [259] atan2_16::return#5 ← atan2_16::angle#5
Coalesced [262] atan2_16::return#6 ← atan2_16::angle#11
Coalesced [263] atan2_16::angle#26 ← atan2_16::angle#1
Not coalescing [264] atan2_16::shift#5 ← atan2_16::i#2
Not coalescing [265] atan2_16::xd#10 ← atan2_16::xi#3
Not coalescing [266] atan2_16::yd#10 ← atan2_16::yi#3
Coalesced [272] atan2_16::yd#13 ← atan2_16::yd#2
Coalesced [273] atan2_16::xd#13 ← atan2_16::xd#2
Coalesced [280] atan2_16::yi#21 ← atan2_16::yi#2
Coalesced [281] atan2_16::angle#25 ← atan2_16::angle#3
Coalesced [282] atan2_16::xi#18 ← atan2_16::xi#2
Coalesced [286] atan2_16::yi#18 ← atan2_16::yi#8
Coalesced [287] atan2_16::xi#15 ← atan2_16::xi#8
Coalesced [288] atan2_16::i#12 ← atan2_16::i#1
Coalesced [289] atan2_16::angle#21 ← atan2_16::angle#13
Coalesced (already) [290] atan2_16::angle#23 ← atan2_16::angle#13
Coalesced [295] atan2_16::yi#20 ← atan2_16::yi#1
Coalesced [296] atan2_16::angle#24 ← atan2_16::angle#2
Coalesced [297] atan2_16::xi#17 ← atan2_16::xi#1
Coalesced [298] atan2_16::yd#12 ← atan2_16::yd#3
Coalesced [299] atan2_16::xd#12 ← atan2_16::xd#3
Coalesced [303] atan2_16::shift#6 ← atan2_16::shift#1
Coalesced [304] atan2_16::xd#11 ← atan2_16::xd#1
Coalesced [305] atan2_16::yd#11 ← atan2_16::yd#1
Not coalescing [306] atan2_16::xi#13 ← atan2_16::x#0
Not coalescing [307] atan2_16::yi#16 ← atan2_16::y#0
Not coalescing [310] heap_head#1 ← malloc::mem#0
Coalesced [363] processChars::numActive#17 ← processChars::numActive#1
Coalesced [369] processChars::i#13 ← processChars::i#1
Coalesced [370] processChars::numActive#15 ← processChars::numActive#3
Coalesced (already) [375] processChars::numActive#16 ← processChars::numActive#10
Coalesced down to 37 phi equivalence classes
Culled Empty Block (label) @5
Culled Empty Block (label) @40
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@19
Culled Empty Block (label) main::@21
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::@3
Culled Empty Block (label) initSprites::@9
Culled Empty Block (label) init_angle_screen::@10
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 @27 to @1
Renumbering block @37 to @2
Renumbering block @38 to @3
Renumbering block @39 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()

(void()) main()
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::@1
main::@1: scope:[main]  from main::@2 main::@9
  [12] (byte*) main::dst#2 ← phi( main::@9/(byte*) main::dst#0 main::@2/(byte*) main::dst#1 )
  [12] (byte*) main::src#2 ← phi( main::@9/(const byte*) SCREEN main::@2/(byte*) main::src#1 )
  [13] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@1 main::@3
  [14] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::i#1 )
  [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1
  [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2
  [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1
  [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2
  [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1
  [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE)
  [21] (byte) main::i#1 ← ++ (byte) main::i#2
  [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3
  to:main::@4
main::@4: scope:[main]  from main::@3
  [23] phi()
  [24] call initSprites 
  to:main::@10
main::@10: scope:[main]  from main::@4
  [25] phi()
  [26] call setupRasterIrq 
  to:main::@5
main::@5: scope:[main]  from main::@10 main::@6
  [27] phi()
  [28] call getCharToProcess 
  [29] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
  [30] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
  [31] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1
  to:main::@11
main::@11: scope:[main]  from main::@5
  [32] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
  [33] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
  [34] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0
  [35] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6
  to:main::@7
main::@7: scope:[main]  from main::@11
  [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.'
  to:main::@8
main::@8: scope:[main]  from main::@7 main::@8
  [37] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7)
  to:main::@8
main::@6: scope:[main]  from main::@11
  [38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
  [39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
  [40] call startProcessing 
  to:main::@5
main::@2: scope:[main]  from main::@1
  [41] *((byte*) main::dst#2) ← *((byte*) main::src#2)
  [42] (byte*) main::src#1 ← ++ (byte*) main::src#2
  [43] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
  to:main::@1

(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
startProcessing: scope:[startProcessing]  from main::@6
  [44] phi()
  to:startProcessing::@1
startProcessing::@1: scope:[startProcessing]  from startProcessing startProcessing::@8
  [45] (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
  [46] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
  [47] (byte~) startProcessing::$29 ← (byte) startProcessing::i#2 << (byte) 1
  [48] (byte~) startProcessing::$30 ← (byte~) startProcessing::$29 + (byte) startProcessing::i#2
  [49] (byte~) startProcessing::$31 ← (byte~) startProcessing::$30 << (byte) 1
  [50] (byte~) startProcessing::$32 ← (byte~) startProcessing::$31 + (byte) startProcessing::i#2
  [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$32 << (byte) 1
  [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3
  to:startProcessing::@4
startProcessing::@4: scope:[startProcessing]  from startProcessing::@2 startProcessing::@9
  [53] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
  [54] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
  to:startProcessing::@5
startProcessing::@5: scope:[startProcessing]  from startProcessing::@4
  [55] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0
  [56] (word~) startProcessing::$34 ← (word~) startProcessing::$0 << (byte) 2
  [57] (word~) startProcessing::$35 ← (word~) startProcessing::$34 + (word~) startProcessing::$0
  [58] (word~) startProcessing::$1 ← (word~) startProcessing::$35 << (byte) 3
  [59] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0
  [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0
  [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0)
  [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0
  [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2
  [64] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6
  [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6
  [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0)
  [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0
  [68] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3
  [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9
  asm { sei  }
  [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM
  to:startProcessing::@6
startProcessing::@6: scope:[startProcessing]  from startProcessing::@5 startProcessing::@6
  [72] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
  [72] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
  [72] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 )
  [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
  [74] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
  [75] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
  [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
  [77] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
  to:startProcessing::@7
startProcessing::@7: scope:[startProcessing]  from startProcessing::@6
  [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO
  asm { cli  }
  [80] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0
  [81] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3
  [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12
  [83] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4
  [84] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0
  [85] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3
  [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16
  [87] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4
  [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2
  [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3
  [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20
  [91] (byte~) startProcessing::$37 ← (byte) startProcessing::freeIdx#2 << (byte) 1
  [92] (byte~) startProcessing::$38 ← (byte~) startProcessing::$37 + (byte) startProcessing::freeIdx#2
  [93] (byte~) startProcessing::$39 ← (byte~) startProcessing::$38 << (byte) 1
  [94] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::freeIdx#2
  [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$40 << (byte) 1
  [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0
  [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0
  [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21
  [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c
  [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2
  [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0
  [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0
  [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW
  [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0
  to:startProcessing::@return
startProcessing::@return: scope:[startProcessing]  from startProcessing::@7
  [105] return 
  to:@return
startProcessing::@8: scope:[startProcessing]  from startProcessing::@4
  [106] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2
  to:startProcessing::@1
startProcessing::@3: scope:[startProcessing]  from startProcessing::@2
  [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2
  [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2
  to:startProcessing::@9
startProcessing::@9: scope:[startProcessing]  from startProcessing::@3
  [109] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
  to:startProcessing::@4

(struct ProcessingChar()) getCharToProcess()
getCharToProcess: scope:[getCharToProcess]  from main::@5
  [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0
  [111] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0
  to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess]  from getCharToProcess getCharToProcess::@9
  [112] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 )
  [112] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 )
  [112] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
  [112] (byte) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const byte) NOT_FOUND getCharToProcess::@9/(byte) getCharToProcess::closest_dist#10 )
  [112] (byte*) getCharToProcess::dist_line#6 ← phi( getCharToProcess/(byte*) getCharToProcess::dist_line#0 getCharToProcess::@9/(byte*) getCharToProcess::dist_line#1 )
  [112] (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
  [113] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 )
  [113] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 )
  [113] (byte) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_dist#8 getCharToProcess::@10/(byte) getCharToProcess::closest_dist#12 )
  [113] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 )
  [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11
  to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess]  from getCharToProcess::@2
  [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2)
  [116] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12
  to:getCharToProcess::@5
getCharToProcess::@5: scope:[getCharToProcess]  from getCharToProcess::@4
  [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2
  [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7
  to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess]  from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5
  [119] (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 )
  [119] (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 )
  [119] (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 )
  [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2
  [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10
  to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess]  from getCharToProcess::@3
  [122] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28
  [123] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28
  [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7
  [125] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9
  to:getCharToProcess::@7
getCharToProcess::@7: scope:[getCharToProcess]  from getCharToProcess::@6
  [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return
  to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess]  from getCharToProcess::@7
  [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1
  [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2
  [129] (word~) getCharToProcess::$13 ← (word~) getCharToProcess::$12 + (word~) getCharToProcess::$8
  [130] (word~) getCharToProcess::$9 ← (word~) getCharToProcess::$13 << (byte) 3
  [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9
  [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' '
  to:getCharToProcess::@return
getCharToProcess::@return: scope:[getCharToProcess]  from getCharToProcess::@7 getCharToProcess::@8
  [133] return 
  to:@return
getCharToProcess::@9: scope:[getCharToProcess]  from getCharToProcess::@6
  [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1
  to:getCharToProcess::@1
getCharToProcess::@10: scope:[getCharToProcess]  from getCharToProcess::@3
  [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1
  to:getCharToProcess::@2
getCharToProcess::@12: scope:[getCharToProcess]  from getCharToProcess::@4
  [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2
  to:getCharToProcess::@3
getCharToProcess::@11: scope:[getCharToProcess]  from getCharToProcess::@2
  [137] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2
  to:getCharToProcess::@3

(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
setupRasterIrq: scope:[setupRasterIrq]  from main::@10
  asm { sei  }
  [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK
  [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO
  [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR
  to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq]  from setupRasterIrq
  [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f
  to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq]  from setupRasterIrq::@1
  [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP
  [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER
  [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0
  asm { cli  }
  to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq]  from setupRasterIrq::@2
  [147] return 
  to:@return

(void()) initSprites()
initSprites: scope:[initSprites]  from main::@4
  [148] phi()
  to:initSprites::@1
initSprites::@1: scope:[initSprites]  from initSprites initSprites::@2
  [149] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA initSprites::@2/(byte*) initSprites::sp#1 )
  [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2
  to:initSprites::@3
initSprites::@3: scope:[initSprites]  from initSprites::@1 initSprites::@3
  [151] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@3/(byte) initSprites::i#1 )
  [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE
  [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2
  [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3
  to:initSprites::@4
initSprites::@4: scope:[initSprites]  from initSprites::@3
  [155] *((const byte*) SPRITES_MC) ← (byte) 0
  [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0
  [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0
  to:initSprites::@return
initSprites::@return: scope:[initSprites]  from initSprites::@4
  [158] return 
  to:@return
initSprites::@2: scope:[initSprites]  from initSprites::@1
  [159] *((byte*) initSprites::sp#2) ← (byte) 0
  [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2
  to:initSprites::@1

(void()) init_angle_screen((byte*) init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen]  from main
  [161] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
  [162] (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
  [163] (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 )
  [163] (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 )
  [163] (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::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@5
  [164] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 )
  [164] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 )
  [165] if((byte) init_angle_screen::x#2<(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
  [166] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28
  [167] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28
  [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5
  [169] 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
  [170] return 
  to:@return
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@2
  [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1
  [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
  [173] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0
  [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1
  [175] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0
  [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
  [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
  [178] call atan2_16 
  [179] (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
  [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
  [181] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
  [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11
  [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
  [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13
  [186] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
  [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
  [188] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
  [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15
  [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
  [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
  to:init_angle_screen::@2

(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  [192] 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
  [193] (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
  [194] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
  [195] 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
  [196] (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
  [197] (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
  [198] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 )
  [198] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
  [198] (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 )
  [198] (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 )
  [199] 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
  [200] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
  [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
  [202] 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
  [203] (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
  [204] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
  [205] 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
  [206] (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
  [207] (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
  [208] return 
  to:@return
atan2_16::@11: scope:[atan2_16]  from atan2_16::@10
  [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2
  [210] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
  [211] (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
  [212] (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 )
  [212] (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 )
  [212] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
  [213] 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
  [214] 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
  [215] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
  [216] (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
  [217] (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 )
  [217] (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 )
  [218] 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
  [219] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
  [220] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
  [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
  [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
  to:atan2_16::@19
atan2_16::@19: scope:[atan2_16]  from atan2_16::@18 atan2_16::@20
  [223] (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 )
  [223] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
  [223] (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 )
  [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
  [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12
  to:atan2_16::@10
atan2_16::@18: scope:[atan2_16]  from atan2_16::@17
  [226] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
  [227] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
  [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1
  [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
  to:atan2_16::@19
atan2_16::@14: scope:[atan2_16]  from atan2_16::@13
  [230] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
  [231] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
  [232] (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
  [233] (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
  [234] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0
  to:atan2_16::@3

(void*()) malloc((word) malloc::size)
malloc: scope:[malloc]  from @1 @3
  [235] (byte*) heap_head#5 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 )
  [236] (byte*) malloc::mem#0 ← (byte*) heap_head#5 - (word) $3e8
  [237] (byte*) heap_head#1 ← (byte*) malloc::mem#0
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  [238] return 
  to:@return

interrupt(HARDWARE_ALL)(void()) irqBottom()
irqBottom: scope:[irqBottom]  from
  [239] phi()
  to:irqBottom::@1
irqBottom::@1: scope:[irqBottom]  from irqBottom
  [240] phi()
  [241] call processChars 
  to:irqBottom::@2
irqBottom::@2: scope:[irqBottom]  from irqBottom::@1
  [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP
  [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
  [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER
  to:irqBottom::@return
irqBottom::@return: scope:[irqBottom]  from irqBottom::@2
  [245] return 
  to:@return

(void()) processChars()
processChars: scope:[processChars]  from irqBottom::@1
  [246] phi()
  to:processChars::@1
processChars::@1: scope:[processChars]  from processChars processChars::@2
  [247] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 )
  [247] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
  [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1
  [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10
  [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1
  [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10
  [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1
  [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32
  [254] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
  [255] 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
  [256] 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
  [257] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
  [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0
  [259] *((const byte*) SPRITES_COLS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL)
  [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
  [261] *((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
  [262] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4
  [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0
  [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4
  to:processChars::@8
processChars::@8: scope:[processChars]  from processChars::@3
  [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0
  [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10
  to:processChars::@5
processChars::@5: scope:[processChars]  from processChars::@4 processChars::@8
  [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1
  [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0
  [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12
  [270] (word~) processChars::$13 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4
  [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13
  [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0
  [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6
  to:processChars::@14
processChars::@14: scope:[processChars]  from processChars::@5
  [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6
  to:processChars::@13
processChars::@13: scope:[processChars]  from processChars::@14
  [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6
  to:processChars::@12
processChars::@12: scope:[processChars]  from processChars::@13
  [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6
  to:processChars::@9
processChars::@9: scope:[processChars]  from processChars::@12
  [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3
  [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23
  [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8
  [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1
  [281] *((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*) VXSIN + (byte~) processChars::$33)
  [282] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
  [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3
  [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8
  [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1
  [286] *((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*) VYSIN + (byte~) processChars::$34)
  [287] *((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
  [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10
  to:processChars::@2
processChars::@2: scope:[processChars]  from processChars::@1 processChars::@7
  [289] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 )
  [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
  [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1
  to:processChars::@return
processChars::@return: scope:[processChars]  from processChars::@2
  [292] return 
  to:@return
processChars::@6: scope:[processChars]  from processChars::@12 processChars::@13 processChars::@14 processChars::@5
  [293] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE
  [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0
  [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29
  to:processChars::@7
processChars::@4: scope:[processChars]  from processChars::@3
  [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0
  to:processChars::@5

interrupt(HARDWARE_ALL)(void()) irqTop()
irqTop: scope:[irqTop]  from
  [297] phi()
  to:irqTop::@1
irqTop::@1: scope:[irqTop]  from irqTop
  [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE
  [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
  [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER
  to:irqTop::@return
irqTop::@return: scope:[irqTop]  from irqTop::@1
  [301] return 
  to:@return


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

INITIAL ASM
Target platform is c64basic / MOS6502X
  // 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
  // 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 STATUS_FREE = 0
  .const STATUS_NEW = 1
  .const STATUS_PROCESSING = 2
  .const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
  .const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
  .const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
  .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
  .const RASTER_IRQ_TOP = $30
  .const RASTER_IRQ_MIDDLE = $ff
  .const SIZEOF_STRUCT_PROCESSINGSPRITE = $e
  .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
  // Head of the heap. Moved backward each malloc()
  .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 
  // [235] phi from @1 to malloc [phi:@1->malloc]
malloc_from___b1:
  // [235] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [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 
  // [235] phi from @3 to malloc [phi:@3->malloc]
malloc_from___b3:
  // [235] 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 __10 = $3e
    .label dst = 4
    .label src = 2
    .label i = 6
    .label center_x = $42
    .label center_y = $43
    .label center_dist = $44
    .label __11 = $3a
    .label __12 = $3b
    .label __13 = $3c
    .label __14 = $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::@1 [phi:main::@9->main::@1]
  __b1_from___b9:
    // [12] phi (byte*) main::dst#2 = (byte*) main::dst#0 [phi:main::@9->main::@1#0] -- register_copy 
    // [12] phi (byte*) main::src#2 = (const byte*) SCREEN [phi:main::@9->main::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z src
    lda #>SCREEN
    sta.z src+1
    jmp __b1
  // Copy screen to screen copy
    // main::@1
  __b1:
    // [13] if((byte*) main::src#2!=(const byte*) SCREEN+(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
    // [14] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  __b3_from___b1:
    // [14] 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
    // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
  __b3_from___b3:
    // [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy 
    jmp __b3
    // main::@3
  __b3:
    // [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __11
    // [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __11
    clc
    adc.z i
    sta.z __12
    // [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __12
    asl
    sta.z __13
    // [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __13
    clc
    adc.z i
    sta.z __14
    // [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __14
    asl
    sta.z __10
    // [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuz1=_deref_pssc2_memcpy_vbuc3 
    ldx.z __10
    ldy #0
  !:
    lda __2,y
    sta PROCESSING,x
    inx
    iny
    cpy #SIZEOF_STRUCT_PROCESSINGSPRITE
    bne !-
    // [21] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne __b3_from___b3
    // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  __b4_from___b3:
    jmp __b4
    // main::@4
  __b4:
    // [24] call initSprites 
    // [148] phi from main::@4 to initSprites [phi:main::@4->initSprites]
  initSprites_from___b4:
    jsr initSprites
    // [25] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
  __b10_from___b4:
    jmp __b10
    // main::@10
  __b10:
    // [26] call setupRasterIrq 
    jsr setupRasterIrq
    // [27] 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:
    // [28] call getCharToProcess 
    jsr getCharToProcess
    // [29] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_x_1
    sta.z getCharToProcess.return_x
    // [30] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_y_1
    sta.z getCharToProcess.return_y
    // [31] (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:
    // [32] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_x
    sta.z center_x
    // [33] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_y
    sta.z center_y
    // [34] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuz1=vbuz2 
    lda.z getCharToProcess.return_dist
    sta.z center_dist
    // [35] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 
    lda #NOT_FOUND
    cmp.z center_dist
    bne __b6
    jmp __b7
    // main::@7
  __b7:
    // [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 
    lda #'.'
    sta SCREEN+$3e7
    jmp __b8
    // main::@8
  __b8:
    // [37] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp __b8
    // main::@6
  __b6:
    // [38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuz2 
    lda.z center_x
    sta.z startProcessing.center_x
    // [39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuz2 
    lda.z center_y
    sta.z startProcessing.center_y
    // [40] call startProcessing 
    // [44] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
  startProcessing_from___b6:
    jsr startProcessing
    jmp __b5_from___b6
    // main::@2
  __b2:
    // [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (src),y
    ldy #0
    sta (dst),y
    // [42] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 
    inc.z src
    bne !+
    inc.z src+1
  !:
    // [43] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
  __b1_from___b2:
    // [12] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@2->main::@1#0] -- register_copy 
    // [12] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@2->main::@1#1] -- register_copy 
    jmp __b1
}
  // startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zp($45) center_x, byte zp($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 __20 = $75
    .label __21 = $76
    .label __27 = $4b
    .label __28 = $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
    // Busy-wait while finding an empty slot in the PROCESSING array
    .label freeIdx = 8
    // Busy-wait while finding an empty slot in the PROCESSING array
    .label freeIdx_1 = 7
    .label __29 = $47
    .label __30 = $48
    .label __31 = $49
    .label __32 = $4a
    .label __34 = $4e
    .label __35 = $50
    .label __37 = $78
    .label __38 = $79
    .label __39 = $7a
    .label __40 = $7b
    // [45] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
  __b1_from_startProcessing:
    // [45] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z freeIdx_1
    jmp __b1
    // startProcessing::@1
  __b1:
    // [46] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
  __b2_from___b1:
    // [46] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b2
    // [46] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
  __b2_from___b3:
    // [46] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy 
    jmp __b2
    // startProcessing::@2
  __b2:
    // [47] (byte~) startProcessing::$29 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __29
    // [48] (byte~) startProcessing::$30 ← (byte~) startProcessing::$29 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __29
    clc
    adc.z i
    sta.z __30
    // [49] (byte~) startProcessing::$31 ← (byte~) startProcessing::$30 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __30
    asl
    sta.z __31
    // [50] (byte~) startProcessing::$32 ← (byte~) startProcessing::$31 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __31
    clc
    adc.z i
    sta.z __32
    // [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$32 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __32
    asl
    sta.z __27
    // [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 
    lda #STATUS_FREE
    ldy.z __27
    cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
    bne __b3
    // [53] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
  __b4_from___b2:
  __b4_from___b9:
    // [53] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy 
    jmp __b4
    // startProcessing::@4
  __b4:
    // [54] 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:
    // [55] (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
    // [56] (word~) startProcessing::$34 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z __0
    asl
    sta.z __34
    lda.z __0+1
    rol
    sta.z __34+1
    asl.z __34
    rol.z __34+1
    // [57] (word~) startProcessing::$35 ← (word~) startProcessing::$34 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz3 
    lda.z __34
    clc
    adc.z __0
    sta.z __35
    lda.z __34+1
    adc.z __0+1
    sta.z __35+1
    // [58] (word~) startProcessing::$1 ← (word~) startProcessing::$35 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z __35
    asl
    sta.z __1
    lda.z __35+1
    rol
    sta.z __1+1
    asl.z __1
    rol.z __1+1
    asl.z __1
    rol.z __1+1
    // [59] (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
    // [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (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
    // [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (colPtr),y
    sta.z spriteCol
    // [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (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
    // [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 
    lda.z freeIdx
    sta.z __5
    lda #0
    sta.z __5+1
    // [64] (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
    // [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (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
    // [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (screenPtr),y
    sta.z ch
    // [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuz2 
    lda.z ch
    sta.z __8
    lda #0
    sta.z __8+1
    // [68] (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
    // [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (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
    // [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_CHARROM
    sta PROCPORT
    // [72] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
  __b6_from___b5:
    // [72] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i1
    // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy 
    // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy 
    jmp __b6
    // [72] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
  __b6_from___b6:
    // [72] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy 
    // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy 
    // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy 
    jmp __b6
    // startProcessing::@6
  __b6:
    // [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (chargenData),y
    ldy #0
    sta (spriteData),y
    // [74] (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
  !:
    // [75] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 
    inc.z chargenData
    bne !+
    inc.z chargenData+1
  !:
    // [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuz1=_inc_vbuz1 
    inc.z i1
    // [77] 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:
    // [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // asm { cli  }
    cli
    // [80] (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
    // [81] (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
    // [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (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
    // [83] (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
    // [84] (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
    // [85] (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
    // [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (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
    // [87] (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
    // [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z freeIdx
    axs #-[SPRITE_DATA/$40]
    stx.z spritePtr
    // [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuz1=vbuz2_rol_3 
    lda.z freeIdx
    asl
    asl
    asl
    sta.z __20
    // [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuz2 
    lda.z __20
    sta.z __21
    lda #0
    sta.z __21+1
    // [91] (byte~) startProcessing::$37 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z freeIdx
    asl
    sta.z __37
    // [92] (byte~) startProcessing::$38 ← (byte~) startProcessing::$37 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __37
    clc
    adc.z freeIdx
    sta.z __38
    // [93] (byte~) startProcessing::$39 ← (byte~) startProcessing::$38 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __38
    asl
    sta.z __39
    // [94] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __39
    clc
    adc.z freeIdx
    sta.z __40
    // [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __40
    asl
    sta.z __28
    // [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z __28
    lda.z spriteX
    sta PROCESSING,y
    lda.z spriteX+1
    sta PROCESSING+1,y
    // [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z __28
    lda.z spriteY
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y
    lda.z spriteY+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,y
    // [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z __28
    lda.z __21
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y
    lda.z __21+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,y
    // [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuz1=vwuc2 
    ldy.z __28
    lda #<$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y
    lda #>$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,y
    // [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z freeIdx
    ldy.z __28
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y
    // [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z spritePtr
    ldy.z __28
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y
    // [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z spriteCol
    ldy.z __28
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,y
    // [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #STATUS_NEW
    ldy.z __28
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
    // [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuz1=pbuz2 
    ldy.z __28
    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:
    // [105] return 
    rts
    // startProcessing::@8
  __b8:
    // [106] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2 
    lda.z freeIdx
    sta.z freeIdx_1
    // [45] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
  __b1_from___b8:
    // [45] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy 
    jmp __b1
    // startProcessing::@3
  __b3:
    // [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(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:
    // [109] (byte) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuz2 
    lda.z freeIdx_1
    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
    // [110] (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
    // [111] (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
    // [112] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
  __b1_from_getCharToProcess:
    // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_y
    // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_x
    // [112] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [112] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 
    lda #NOT_FOUND
    sta.z closest_dist
    // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy 
    // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy 
    jmp __b1
    // getCharToProcess::@1
  __b1:
    // [113] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
  __b2_from___b1:
    // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy 
    // [113] 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:
    // [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 
    lda #' '
    ldy.z x
    cmp (screen_line),y
    beq __b11
    jmp __b4
    // getCharToProcess::@4
  __b4:
    // [115] (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
    // [116] 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:
    // [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuz2 
    lda.z x
    sta.z return_x_1
    // [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 
    lda.z y
    sta.z return_y_1
    // [119] 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:
    // [119] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy 
    // [119] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy 
    // [119] 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:
    // [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [121] 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:
    // [122] (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
  !:
    // [123] (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
  !:
    // [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [125] 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:
    // [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuz1_eq_vbuc1_then_la1 
    lda #NOT_FOUND
    cmp.z return_dist_1
    beq __breturn
    jmp __b8
    // getCharToProcess::@8
  __b8:
    // [127] (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
    // [128] (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
    // [129] (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
    // [130] (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
    // [131] (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
    // [132] *((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:
    // [133] return 
    rts
    // getCharToProcess::@9
  __b9:
    // [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 
    lda.z return_dist_1
    sta.z closest_dist
    // [112] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
  __b1_from___b9:
    // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy 
    // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy 
    // [112] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy 
    // [112] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy 
    // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy 
    // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy 
    jmp __b1
    // getCharToProcess::@10
  __b10:
    // [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuz2 
    lda.z return_dist_1
    sta.z closest_dist
    // [113] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
  __b2_from___b10:
    // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy 
    // [113] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy 
    jmp __b2
    // getCharToProcess::@12
  __b12:
    // [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 
    lda.z closest_dist
    sta.z return_dist_1
    jmp __b3_from___b12
    // getCharToProcess::@11
  __b11:
    // [137] (byte) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 -- vbuz1=vbuz2 
    lda.z closest_dist
    sta.z return_dist_1
    jmp __b3_from___b11
}
  // setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
    .label irqRoutine = irqTop
    // asm { sei  }
    sei
    // [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 
    // Disable CIA 1 Timer IRQ
    lda #CIA_INTERRUPT_CLEAR
    sta CIA1_INTERRUPT
    jmp __b1
    // setupRasterIrq::@1
  __b1:
    // [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 
    lda #$7f
    and VIC_CONTROL
    sta VIC_CONTROL
    jmp __b2
    // setupRasterIrq::@2
  __b2:
    // [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Enable Raster Interrupt
    lda #IRQ_RASTER
    sta IRQ_ENABLE
    // [145] *((const void()**) HARDWARE_IRQ) ← (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:
    // [147] return 
    rts
}
  // initSprites
// Initialize sprites
initSprites: {
    .label sp = $18
    .label i = $1a
    // [149] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
  __b1_from_initSprites:
    // [149] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 
    lda #<SPRITE_DATA
    sta.z sp
    lda #>SPRITE_DATA
    sta.z sp+1
    jmp __b1
  // Clear sprite data
    // initSprites::@1
  __b1:
    // [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(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
  !:
    // [151] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
  __b3_from___b1:
    // [151] 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
    // [151] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
  __b3_from___b3:
    // [151] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy 
    jmp __b3
    // initSprites::@3
  __b3:
    // [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #LIGHT_BLUE
    ldy.z i
    sta SPRITES_COLS,y
    // [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [154] 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:
    // [155] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_MC
    // [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
    // [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_Y
    jmp __breturn
    // initSprites::@return
  __breturn:
    // [158] return 
    rts
    // initSprites::@2
  __b2:
    // [159] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (sp),y
    // [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 
    inc.z sp
    bne !+
    inc.z sp+1
  !:
    // [149] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1]
  __b1_from___b2:
    // [149] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy 
    jmp __b1
}
  // 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* zp($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
    // [161] (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
    // [162] (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
    // [163] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  __b1_from_init_angle_screen:
    // [163] 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 
    // [163] 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 
    // [163] 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
    // [163] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  __b1_from___b4:
    // [163] 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 
    // [163] 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 
    // [163] 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:
    // [164] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
  __b2_from___b1:
    // [164] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [164] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b2
    // init_angle_screen::@2
  __b2:
    // [165] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    jmp __b4
    // init_angle_screen::@4
  __b4:
    // [166] (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
    // [167] (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
  !:
    // [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [169] 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:
    // [170] return 
    rts
    // init_angle_screen::@3
  __b3:
    // [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z __3
    // [172] (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
    // [173] (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
    // [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y
    asl
    sta.z __7
    // [175] (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
    // [176] (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
    // [177] (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
    // [178] call atan2_16 
    jsr atan2_16
    // [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 
    lda.z atan2_16.return
    sta.z atan2_16.return_1
    lda.z atan2_16.return+1
    sta.z atan2_16.return_1+1
    jmp __b5
    // init_angle_screen::@5
  __b5:
    // [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 
    lda.z atan2_16.return_1
    sta.z angle_w
    lda.z atan2_16.return_1+1
    sta.z angle_w+1
    // [181] (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
    // [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z __11+1
    sta.z ang_w
    // [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [184] (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
    // [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __13
    ldy.z xb
    sta (screen_topline),y
    // [186] (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
    // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __14
    ldy.z x
    sta (screen_topline),y
    // [188] (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
    // [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __15
    ldy.z x
    sta (screen_bottomline),y
    // [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [164] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
  __b2_from___b5:
    // [164] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [164] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // 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 zp($8e) x, signed word zp($90) y)
atan2_16: {
    .label __2 = $22
    .label __7 = $24
    .label __22 = $9d
    .label __23 = $9c
    .label yi = $22
    .label xi = $24
    .label angle = $29
    .label xd = $2e
    .label yd = $2c
    .label shift = $2b
    .label angle_1 = $27
    .label i = $26
    .label return = $29
    .label x = $8e
    .label y = $90
    .label return_1 = $92
    // [192] 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:
    // [193] (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
    // [194] 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:
    // [194] 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:
    // [195] 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:
    // [196] (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
    // [197] 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:
    // [197] 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:
    // [198] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  __b10_from___b6:
    // [198] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z angle_1
    lda #>0
    sta.z angle_1+1
    // [198] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [198] 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:
    // [199] 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
    // [200] 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:
    // [200] 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:
    // [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
    lda.z angle_1+1
    lsr
    sta.z angle+1
    lda.z angle_1
    ror
    sta.z angle
    // [202] 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:
    // [203] (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
    // [204] 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:
    // [204] 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:
    // [205] 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:
    // [206] (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
    // [207] 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:
    // [207] 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:
    // [208] return 
    rts
    // atan2_16::@11
  __b11:
    // [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 
    lda.z i
    sta.z shift
    // [210] (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
    // [211] (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
    // [212] 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:
    // [212] 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 
    // [212] 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 
    // [212] 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:
    // [213] 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:
    // [214] 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:
    // [215] (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
    // [216] (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
    // [217] 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:
    // [217] 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 
    // [217] 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:
    // [218] 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:
    // [219] (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
    // [220] (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
    // [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __23
    // [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 
    ldy.z __23
    sec
    lda.z angle_1
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_1
    lda.z angle_1+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_1+1
    // [223] 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:
    // [223] 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 
    // [223] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [223] 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:
    // [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(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
    // [198] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  __b10_from___b19:
    // [198] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [198] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [198] 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:
    // [226] (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
    // [227] (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
    // [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __22
    // [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 
    ldy.z __22
    clc
    lda.z angle_1
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_1
    lda.z angle_1+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_1+1
    jmp __b19_from___b18
    // atan2_16::@14
  __b14:
    // [230] (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
    // [231] (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
    // [232] (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:
    // [233] (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:
    // [234] (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
    // [236] (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
    // [237] (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:
    // [238] 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
    // [240] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
  __b1_from_irqBottom:
    jmp __b1
    // irqBottom::@1
  __b1:
    // [241] call processChars 
    // [246] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
  processChars_from___b1:
    jsr processChars
    jmp __b2
    // irqBottom::@2
  __b2:
    // [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the top of the screen
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 
    lda #<irqTop
    sta HARDWARE_IRQ
    lda #>irqTop
    sta HARDWARE_IRQ+1
    // [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp __breturn
    // irqBottom::@return
  __breturn:
    // [245] 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 __9 = $aa
    .label __10 = $ab
    .label __12 = $ad
    .label __13 = $ae
    .label __15 = $ac
    .label __23 = $b1
    .label __24 = $b3
    .label __27 = $b6
    .label __29 = $b9
    .label __32 = $a4
    .label __33 = $b5
    .label __34 = $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 __62 = $a0
    .label __63 = $a1
    .label __64 = $a2
    .label __65 = $a3
    // [247] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
  __b1_from_processChars:
    // [247] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z numActive
    // [247] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // [247] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
  __b1_from___b2:
    // [247] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy 
    // [247] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy 
    jmp __b1
    // processChars::@1
  __b1:
    // [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __62
    // [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __62
    clc
    adc.z i
    sta.z __63
    // [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __63
    asl
    sta.z __64
    // [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __64
    clc
    adc.z i
    sta.z __65
    // [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __65
    asl
    sta.z __32
    // [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuz2 
    lda.z __32
    clc
    adc #<PROCESSING
    sta.z processing
    lda #>PROCESSING
    adc #0
    sta.z processing+1
    // [254] (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
    tay
    lda #1
    cpy #0
    beq !e+
  !:
    asl
    dey
    bne !-
  !e:
    sta.z bitmask
    // [255] 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 
    lda #STATUS_FREE
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    cmp (processing),y
    beq __b2_from___b1
    jmp __b10
    // processChars::@10
  __b10:
    // [256] 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:
    // [257] *(*((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
  !:
    stx $ffff
    // [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    // Enable the sprite
    lda SPRITES_ENABLE
    ora.z bitmask
    sta SPRITES_ENABLE
    // [259] *((const byte*) SPRITES_COLS + *((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
    // [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((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
    // [261] *((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:
    // [262] (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
    // [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuz1=_hi_vwuz2 
    lda.z xpos+1
    sta.z __9
    // [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuz1_then_la1 
    // Set sprite position
    lda #0
    cmp.z __9
    bne __b4
    jmp __b8
    // processChars::@8
  __b8:
    // [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 
    lda #$ff
    eor.z bitmask
    sta.z __10
    // [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 
    lda SPRITES_XMSB
    and.z __10
    sta SPRITES_XMSB
    jmp __b5
    // processChars::@5
  __b5:
    // [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __15
    // [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuz1=_byte_vwuz2 
    lda.z xpos
    sta.z __12
    // [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __12
    ldy.z __15
    sta SPRITES_XPOS,y
    // [270] (word~) processChars::$13 ← *((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 __13
    iny
    lda (processing),y
    sta.z __13+1
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    // [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 
    lda.z __13
    sta.z ypos
    // [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z ypos
    ldy.z __15
    sta SPRITES_YPOS,y
    // [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) 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:
    // [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) 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:
    // [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) 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:
    // [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) 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:
    // [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz2_ror_3 
    lda.z xpos+1
    lsr
    sta.z __23+1
    lda.z xpos
    ror
    sta.z __23
    lsr.z __23+1
    ror.z __23
    lsr.z __23+1
    ror.z __23
    // [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuz1=_byte_vwuz2 
    lda.z __23
    sta.z __24
    // [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 
    lax.z __24
    axs #BORDER_XPOS_LEFT/8
    stx.z xchar
    // [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z xchar
    asl
    sta.z __33
    // [281] *((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*) VXSIN + (byte~) processChars::$33) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 
    ldx.z __33
    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
    // [282] *((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
    // [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    sta.z __27
    // [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1 
    lax.z __27
    axs #BORDER_YPOS_TOP/8
    stx.z ychar
    // [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z ychar
    asl
    sta.z __34
    // [286] *((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*) VYSIN + (byte~) processChars::$34) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 
    ldx.z __34
    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
    // [287] *((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:
    // [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 
    inc.z numActive
    // [289] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
  __b2_from___b1:
  __b2_from___b7:
    // [289] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy 
    jmp __b2
    // processChars::@2
  __b2:
    // [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(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:
    // [292] return 
    rts
    // processChars::@6
  __b6:
    // [293] *((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
    // [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2 
    lda #$ff
    eor.z bitmask
    sta.z __29
    // [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 
    // Disable the sprite
    lda SPRITES_ENABLE
    and.z __29
    sta SPRITES_ENABLE
    jmp __b7
    // processChars::@4
  __b4:
    // [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (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:
    // [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the middle of the screen
    lda #RASTER_IRQ_MIDDLE
    sta RASTER
    // [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 
    lda #<irqBottom
    sta HARDWARE_IRQ
    lda #>irqBottom
    sta HARDWARE_IRQ+1
    // [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp __breturn
    // irqTop::@return
  __breturn:
    // [301] 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
  __2: .word 0, 0, 0, 0
  .byte 0, 0, 0, STATUS_FREE
  .word 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] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a 
Statement [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i#2 main::i#1 ]
Statement [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ) always clobbers reg byte a 
Statement [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ) always clobbers reg byte a 
Statement [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ) always clobbers reg byte a 
Statement [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a 
Statement [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) [ 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 reg byte x reg byte y 
Removing always clobbered register reg byte x as potential for zp[1]:6 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::i#2 main::i#1 ]
Statement [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ) always clobbers reg byte a 
Statement [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a 
Statement [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [47] (byte~) startProcessing::$29 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:69 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:70 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Statement [48] (byte~) startProcessing::$30 ← (byte~) startProcessing::$29 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:40 [ 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 [49] (byte~) startProcessing::$31 ← (byte~) startProcessing::$30 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [50] (byte~) startProcessing::$32 ← (byte~) startProcessing::$31 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$32 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$32 ] ) always clobbers reg byte a 
Statement [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$32 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ) always clobbers reg byte a 
Statement [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:40 [ 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 [55] (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:40 [ 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 [56] (word~) startProcessing::$34 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$34 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$34 ] ) always clobbers reg byte a 
Statement [57] (word~) startProcessing::$35 ← (word~) startProcessing::$34 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$35 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$35 ] ) always clobbers reg byte a 
Statement [58] (word~) startProcessing::$1 ← (word~) startProcessing::$35 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:40 [ 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 [59] (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:40 [ 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 [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:40 [ 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 [61] (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:40 [ 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[1]:69 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:70 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Statement [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ 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[1]:88 [ startProcessing::spriteCol#0 ]
Statement [63] (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:40 [ 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 [64] (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:40 [ 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 [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (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:40 [ 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 [66] (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:40 [ 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[1]:88 [ startProcessing::spriteCol#0 ]
Statement [67] (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:40 [ 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 [68] (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:40 [ 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 [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (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:40 [ 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 [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ 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:40 [ 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 [73] *((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:40 [ 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[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Statement [74] (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:40 [ 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 [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ 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 [80] (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:40 [ 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 [81] (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:40 [ 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 [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:40 [ 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 [83] (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:40 [ 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 [84] (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:40 [ 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 [85] (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:40 [ 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 [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:40 [ 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 [87] (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:40 [ 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 [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(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:40 [ 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 [89] (byte~) startProcessing::$20 ← (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::$20 ] ( main:7::startProcessing:40 [ 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::$20 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:116 [ startProcessing::spritePtr#0 ]
Statement [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:7::startProcessing:40 [ 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::$21 ] ) always clobbers reg byte a 
Statement [91] (byte~) startProcessing::$37 ← (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::$21 startProcessing::$37 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$37 ] ) always clobbers reg byte a 
Statement [92] (byte~) startProcessing::$38 ← (byte~) startProcessing::$37 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$38 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$38 ] ) always clobbers reg byte a 
Statement [93] (byte~) startProcessing::$39 ← (byte~) startProcessing::$38 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$39 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$39 ] ) always clobbers reg byte a 
Statement [94] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$40 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$40 ] ) always clobbers reg byte a 
Statement [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$40 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:124 [ startProcessing::$28 ]
Statement [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a 
Statement [111] (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:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a 
Statement [114] 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:28 [ 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[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]: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[1]: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[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Statement [115] (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:28 [ 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 [122] (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: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 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
Statement [123] (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: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 ] ) always clobbers reg byte a 
Statement [127] (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:28 [ 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 [128] (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:28 [ 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 [129] (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:28 [ 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 [130] (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:28 [ 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 [131] (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:28 [ 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 [132] *((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:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a 
Statement [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a 
Statement [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:24 [ 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[1]:26 [ initSprites::i#2 initSprites::i#1 ]
Statement [155] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [159] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y 
Statement [161] (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 [162] (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 [166] (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 
Removing always clobbered register reg byte a as potential for zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Statement [167] (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 [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [172] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [173] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [174] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [175] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [176] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [177] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [179] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [180] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [181] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [182] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:152 [ init_angle_screen::ang_w#0 ]
Statement [184] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 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[1]:152 [ init_angle_screen::ang_w#0 ]
Statement [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [186] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [188] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (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#2 init_angle_screen::xb#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#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [192] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [193] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [195] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [196] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [199] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:38 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [201] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [202] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [203] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [205] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:178 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [210] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [211] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
Statement [215] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [216] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [218] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [219] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [220] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [221] (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::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [226] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [227] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [228] (byte~) atan2_16::$22 ← (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::$22 ] ( main:7::init_angle_screen:10::atan2_16:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [230] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
Statement [231] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
Statement [233] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [234] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [236] (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 [237] (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 [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP [ ] (  [ ] ) always clobbers reg byte a 
Statement [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] (  [ ] ) always clobbers reg byte a 
Statement [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] (  [ ] ) always clobbers reg byte a 
Statement [245] return  [ ] (  [ ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:50 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Statement [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ) always clobbers reg byte a 
Statement [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a 
Statement [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a 
Statement [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ) always clobbers reg byte a 
Statement [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a 
Statement [254] (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:241 [ 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[1]:50 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Statement [255] 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:241 [ 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[1]:167 [ processChars::bitmask#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:167 [ processChars::bitmask#0 ]
Statement [256] 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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [257] *(*((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:241 [ 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[1]:50 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:167 [ processChars::bitmask#0 ]
Statement [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a 
Statement [259] *((const byte*) SPRITES_COLS + *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [261] *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [262] (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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y 
Statement [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ) always clobbers reg byte a 
Statement [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ) always clobbers reg byte a 
Statement [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ) always clobbers reg byte a 
Statement [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:172 [ processChars::$15 ]
Statement [270] (word~) processChars::$13 ← *((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::$15 processChars::$13 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:172 [ processChars::$15 ]
Statement [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ) always clobbers reg byte a 
Statement [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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[1]:176 [ processChars::ypos#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:176 [ processChars::ypos#0 ]
Statement [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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 [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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 [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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 [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ) always clobbers reg byte a 
Statement [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ) always clobbers reg byte a 
Statement [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ) always clobbers reg byte a 
Statement [281] *((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*) VXSIN + (byte~) processChars::$33) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [282] *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ) always clobbers reg byte a 
Statement [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ) always clobbers reg byte a 
Statement [286] *((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*) VYSIN + (byte~) processChars::$34) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y 
Statement [287] *((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:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y 
Statement [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:241 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a 
Statement [293] *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ) always clobbers reg byte a 
Statement [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 [ processChars::i#10 processChars::numActive#10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a 
Statement [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE [ ] (  [ ] ) always clobbers reg byte a 
Statement [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] (  [ ] ) always clobbers reg byte a 
Statement [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] (  [ ] ) always clobbers reg byte a 
Statement [301] 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] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a 
Statement [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ) always clobbers reg byte a 
Statement [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ) always clobbers reg byte a 
Statement [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ) always clobbers reg byte a 
Statement [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ) always clobbers reg byte a 
Statement [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ) always clobbers reg byte a 
Statement [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) [ 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 reg byte x reg byte y 
Statement [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ) always clobbers reg byte a 
Statement [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' [ ] ( main:7 [ ] ) always clobbers reg byte a 
Statement [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [47] (byte~) startProcessing::$29 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ) always clobbers reg byte a 
Statement [48] (byte~) startProcessing::$30 ← (byte~) startProcessing::$29 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:40 [ 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 [49] (byte~) startProcessing::$31 ← (byte~) startProcessing::$30 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] ) always clobbers reg byte a 
Statement [50] (byte~) startProcessing::$32 ← (byte~) startProcessing::$31 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$32 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$32 ] ) always clobbers reg byte a 
Statement [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$32 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$27 ] ) always clobbers reg byte a 
Statement [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(const byte) STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:40 [ 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 [55] (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:40 [ 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 [56] (word~) startProcessing::$34 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$34 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$34 ] ) always clobbers reg byte a 
Statement [57] (word~) startProcessing::$35 ← (word~) startProcessing::$34 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$35 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$35 ] ) always clobbers reg byte a 
Statement [58] (word~) startProcessing::$1 ← (word~) startProcessing::$35 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:7::startProcessing:40 [ 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 [59] (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:40 [ 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 [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:40 [ 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 [61] (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:40 [ 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 [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (word) startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ 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 [63] (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:40 [ 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 [64] (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:40 [ 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 [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (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:40 [ 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 [66] (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:40 [ 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 [67] (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:40 [ 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 [68] (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:40 [ 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 [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (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:40 [ 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 [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM [ 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:40 [ 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 [73] *((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:40 [ 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 [74] (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:40 [ 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 [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:40 [ 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 [80] (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:40 [ 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 [81] (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:40 [ 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 [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$13 ] ( main:7::startProcessing:40 [ 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 [83] (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:40 [ 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 [84] (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:40 [ 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 [85] (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:40 [ 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 [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$17 ] ( main:7::startProcessing:40 [ 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 [87] (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:40 [ 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 [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(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:40 [ 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 [89] (byte~) startProcessing::$20 ← (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::$20 ] ( main:7::startProcessing:40 [ 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::$20 ] ) always clobbers reg byte a 
Statement [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:7::startProcessing:40 [ 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::$21 ] ) always clobbers reg byte a 
Statement [91] (byte~) startProcessing::$37 ← (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::$21 startProcessing::$37 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$37 ] ) always clobbers reg byte a 
Statement [92] (byte~) startProcessing::$38 ← (byte~) startProcessing::$37 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$38 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$38 ] ) always clobbers reg byte a 
Statement [93] (byte~) startProcessing::$39 ← (byte~) startProcessing::$38 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$39 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$39 ] ) always clobbers reg byte a 
Statement [94] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$40 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$40 ] ) always clobbers reg byte a 
Statement [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$40 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ 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::$21 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$21 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$28 ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$28 ] ) always clobbers reg byte a 
Statement [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [110] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ) always clobbers reg byte a 
Statement [111] (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:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ) always clobbers reg byte a 
Statement [114] 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:28 [ 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 [115] (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:28 [ 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 [122] (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: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 ] ) always clobbers reg byte a 
Statement [123] (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: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 ] ) always clobbers reg byte a 
Statement [127] (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:28 [ 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 [128] (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:28 [ 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 [129] (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:28 [ 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 [130] (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:28 [ 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 [131] (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:28 [ 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 [132] *((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:28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a 
Statement [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [145] *((const void()**) HARDWARE_IRQ) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:26 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(byte) $40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a 
Statement [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] ) always clobbers reg byte a 
Statement [155] *((const byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 [ ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ) always clobbers reg byte a 
Statement [159] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:7::initSprites:24 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] ) always clobbers reg byte a reg byte y 
Statement [161] (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 [162] (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 [166] (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 [167] (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 [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [172] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [173] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [174] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [175] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [176] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [177] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [179] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [180] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [181] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [182] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [184] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [186] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [188] (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#2 init_angle_screen::xb#2 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#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (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#2 init_angle_screen::xb#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#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [192] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [193] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [195] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [196] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [199] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Statement [201] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [202] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [203] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [205] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [206] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:10::atan2_16:178 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [210] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Statement [211] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
Statement [215] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [216] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [218] 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [219] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [220] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [221] (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::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:10::atan2_16:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [226] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [227] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [228] (byte~) atan2_16::$22 ← (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::$22 ] ( main:7::init_angle_screen:10::atan2_16:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ 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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [230] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
Statement [231] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
Statement [233] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [234] (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:178 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [236] (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 [237] (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 [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP [ ] (  [ ] ) always clobbers reg byte a 
Statement [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] (  [ ] ) always clobbers reg byte a 
Statement [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] (  [ ] ) always clobbers reg byte a 
Statement [245] return  [ ] (  [ ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$62 ] ) always clobbers reg byte a 
Statement [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$63 ] ) always clobbers reg byte a 
Statement [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a 
Statement [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a 
Statement [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$32 ] ) always clobbers reg byte a 
Statement [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a 
Statement [254] (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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [255] 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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [256] 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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [257] *(*((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y 
Statement [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a 
Statement [259] *((const byte*) SPRITES_COLS + *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [261] *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [262] (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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y 
Statement [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$9 ] ) always clobbers reg byte a 
Statement [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ) always clobbers reg byte a 
Statement [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 ] ) always clobbers reg byte a 
Statement [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$12 ] ) always clobbers reg byte a 
Statement [270] (word~) processChars::$13 ← *((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::$15 processChars::$13 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::$13 ] ) always clobbers reg byte a reg byte y 
Statement [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$15 processChars::ypos#0 ] ) always clobbers reg byte a 
Statement [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a 
Statement [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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 [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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 [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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 [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:241 [ 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 [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$23 ] ) always clobbers reg byte a 
Statement [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$24 ] ) always clobbers reg byte a 
Statement [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$33 ] ) always clobbers reg byte a 
Statement [281] *((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*) VXSIN + (byte~) processChars::$33) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [282] *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y 
Statement [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$27 ] ) always clobbers reg byte a 
Statement [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$34 ] ) always clobbers reg byte a 
Statement [286] *((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*) VYSIN + (byte~) processChars::$34) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y 
Statement [287] *((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:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y 
Statement [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:241 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a 
Statement [293] *((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:241 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y 
Statement [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::$29 ] ) always clobbers reg byte a 
Statement [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 [ processChars::i#10 processChars::numActive#10 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a 
Statement [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:241 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a 
Statement [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE [ ] (  [ ] ) always clobbers reg byte a 
Statement [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] (  [ ] ) always clobbers reg byte a 
Statement [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] (  [ ] ) always clobbers reg byte a 
Statement [301] return  [ ] (  [ ] ) always clobbers reg byte a reg byte x reg byte y 
Potential registers zp[2]:2 [ main::src#2 main::src#1 ] : zp[2]:2 , 
Potential registers zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] : zp[2]:4 , 
Potential registers zp[1]:6 [ main::i#2 main::i#1 ] : zp[1]:6 , 
Potential registers zp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] : zp[1]:7 , reg byte x , reg byte y , 
Potential registers zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] : zp[1]:8 , reg byte x , 
Potential registers zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] : zp[2]:9 , 
Potential registers zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] : zp[2]:11 , 
Potential registers zp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ] : zp[1]:13 , reg byte x , 
Potential registers zp[2]:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] : zp[2]:14 , 
Potential registers zp[2]:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] : zp[2]:16 , 
Potential registers zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] : zp[1]:18 , reg byte x , reg byte y , 
Potential registers zp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] : zp[1]:19 , reg byte x , reg byte y , 
Potential registers zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] : zp[1]:20 , reg byte x , reg byte y , 
Potential registers zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] : zp[1]:21 , reg byte x , reg byte y , 
Potential registers zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] : zp[1]:22 , reg byte x , reg byte y , 
Potential registers zp[1]:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] : zp[1]:23 , reg byte x , reg byte y , 
Potential registers zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] : zp[2]:24 , 
Potential registers zp[1]:26 [ initSprites::i#2 initSprites::i#1 ] : zp[1]:26 , reg byte x , reg byte y , 
Potential registers zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:27 , reg byte x , 
Potential registers zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp[2]:28 , 
Potential registers zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp[2]:30 , 
Potential registers zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:32 , reg byte x , 
Potential registers zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:33 , reg byte x , 
Potential registers zp[2]: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[2]:34 , 
Potential registers zp[2]: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[2]:36 , 
Potential registers zp[1]:38 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:38 , reg byte x , reg byte y , 
Potential registers zp[2]:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:39 , 
Potential registers zp[2]:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp[2]:41 , 
Potential registers zp[1]:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:43 , reg byte x , reg byte y , 
Potential registers zp[2]:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:44 , 
Potential registers zp[2]:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:46 , 
Potential registers zp[2]:48 [ heap_head#5 heap_head#1 ] : zp[2]:48 , 
Potential registers zp[1]:50 [ processChars::i#10 processChars::i#1 ] : zp[1]:50 , 
Potential registers zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] : zp[1]:51 , 
Potential registers zp[2]:52 [ SCREEN_COPY#0 ] : zp[2]:52 , 
Potential registers zp[2]:54 [ SCREEN_DIST#0 ] : zp[2]:54 , 
Potential registers zp[2]:56 [ init_angle_screen::screen#0 ] : zp[2]:56 , 
Potential registers zp[1]:58 [ main::$11 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:59 [ main::$12 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:60 [ main::$13 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:61 [ main::$14 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:62 [ main::$10 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:63 [ getCharToProcess::return_x#0 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:64 [ getCharToProcess::return_y#0 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:65 [ getCharToProcess::return_dist#0 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:66 [ main::center_x#0 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:67 [ main::center_y#0 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:68 [ main::center_dist#0 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:69 [ startProcessing::center_x#0 ] : zp[1]:69 , reg byte x , 
Potential registers zp[1]:70 [ startProcessing::center_y#0 ] : zp[1]:70 , reg byte x , 
Potential registers zp[1]:71 [ startProcessing::$29 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:72 [ startProcessing::$30 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:73 [ startProcessing::$31 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:74 [ startProcessing::$32 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:75 [ startProcessing::$27 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:76 [ startProcessing::$0 ] : zp[2]:76 , 
Potential registers zp[2]:78 [ startProcessing::$34 ] : zp[2]:78 , 
Potential registers zp[2]:80 [ startProcessing::$35 ] : zp[2]:80 , 
Potential registers zp[2]:82 [ startProcessing::$1 ] : zp[2]:82 , 
Potential registers zp[2]:84 [ startProcessing::offset#0 ] : zp[2]:84 , 
Potential registers zp[2]:86 [ startProcessing::colPtr#0 ] : zp[2]:86 , 
Potential registers zp[1]:88 [ startProcessing::spriteCol#0 ] : zp[1]:88 , reg byte x , 
Potential registers zp[2]:89 [ startProcessing::screenPtr#0 ] : zp[2]:89 , 
Potential registers zp[2]:91 [ startProcessing::$5 ] : zp[2]:91 , 
Potential registers zp[2]:93 [ startProcessing::$6 ] : zp[2]:93 , 
Potential registers zp[1]:95 [ startProcessing::ch#0 ] : zp[1]:95 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:96 [ startProcessing::$8 ] : zp[2]:96 , 
Potential registers zp[2]:98 [ startProcessing::$9 ] : zp[2]:98 , 
Potential registers zp[2]:100 [ startProcessing::$11 ] : zp[2]:100 , 
Potential registers zp[2]:102 [ startProcessing::$12 ] : zp[2]:102 , 
Potential registers zp[2]:104 [ startProcessing::$13 ] : zp[2]:104 , 
Potential registers zp[2]:106 [ startProcessing::spriteX#0 ] : zp[2]:106 , 
Potential registers zp[2]:108 [ startProcessing::$15 ] : zp[2]:108 , 
Potential registers zp[2]:110 [ startProcessing::$16 ] : zp[2]:110 , 
Potential registers zp[2]:112 [ startProcessing::$17 ] : zp[2]:112 , 
Potential registers zp[2]:114 [ startProcessing::spriteY#0 ] : zp[2]:114 , 
Potential registers zp[1]:116 [ startProcessing::spritePtr#0 ] : zp[1]:116 , reg byte x , reg byte y , 
Potential registers zp[1]:117 [ startProcessing::$20 ] : zp[1]:117 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:118 [ startProcessing::$21 ] : zp[2]:118 , 
Potential registers zp[1]:120 [ startProcessing::$37 ] : zp[1]:120 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:121 [ startProcessing::$38 ] : zp[1]:121 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:122 [ startProcessing::$39 ] : zp[1]:122 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:123 [ startProcessing::$40 ] : zp[1]:123 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:124 [ startProcessing::$28 ] : zp[1]:124 , reg byte x , reg byte y , 
Potential registers zp[2]:125 [ getCharToProcess::$8 ] : zp[2]:125 , 
Potential registers zp[2]:127 [ getCharToProcess::$12 ] : zp[2]:127 , 
Potential registers zp[2]:129 [ getCharToProcess::$13 ] : zp[2]:129 , 
Potential registers zp[2]:131 [ getCharToProcess::$9 ] : zp[2]:131 , 
Potential registers zp[2]:133 [ getCharToProcess::$10 ] : zp[2]:133 , 
Potential registers zp[1]:135 [ init_angle_screen::$3 ] : zp[1]:135 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:136 [ init_angle_screen::$4 ] : zp[1]:136 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:137 [ init_angle_screen::xw#0 ] : zp[2]:137 , 
Potential registers zp[1]:139 [ init_angle_screen::$7 ] : zp[1]:139 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:140 [ init_angle_screen::yw#0 ] : zp[2]:140 , 
Potential registers zp[2]:142 [ atan2_16::x#0 ] : zp[2]:142 , 
Potential registers zp[2]:144 [ atan2_16::y#0 ] : zp[2]:144 , 
Potential registers zp[2]:146 [ atan2_16::return#2 ] : zp[2]:146 , 
Potential registers zp[2]:148 [ init_angle_screen::angle_w#0 ] : zp[2]:148 , 
Potential registers zp[2]:150 [ init_angle_screen::$11 ] : zp[2]:150 , 
Potential registers zp[1]:152 [ init_angle_screen::ang_w#0 ] : zp[1]:152 , reg byte x , 
Potential registers zp[1]:153 [ init_angle_screen::$13 ] : zp[1]:153 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:154 [ init_angle_screen::$14 ] : zp[1]:154 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:155 [ init_angle_screen::$15 ] : zp[1]:155 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:156 [ atan2_16::$23 ] : zp[1]:156 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:157 [ atan2_16::$22 ] : zp[1]:157 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:158 [ malloc::mem#0 ] : zp[2]:158 , 
Potential registers zp[1]:160 [ processChars::$62 ] : zp[1]:160 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:161 [ processChars::$63 ] : zp[1]:161 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:162 [ processChars::$64 ] : zp[1]:162 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:163 [ processChars::$65 ] : zp[1]:163 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:164 [ processChars::$32 ] : zp[1]:164 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:165 [ processChars::processing#0 ] : zp[2]:165 , 
Potential registers zp[1]:167 [ processChars::bitmask#0 ] : zp[1]:167 , 
Potential registers zp[2]:168 [ processChars::xpos#0 ] : zp[2]:168 , 
Potential registers zp[1]:170 [ processChars::$9 ] : zp[1]:170 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:171 [ processChars::$10 ] : zp[1]:171 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:172 [ processChars::$15 ] : zp[1]:172 , reg byte x , 
Potential registers zp[1]:173 [ processChars::$12 ] : zp[1]:173 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:174 [ processChars::$13 ] : zp[2]:174 , 
Potential registers zp[1]:176 [ processChars::ypos#0 ] : zp[1]:176 , reg byte x , 
Potential registers zp[2]:177 [ processChars::$23 ] : zp[2]:177 , 
Potential registers zp[1]:179 [ processChars::$24 ] : zp[1]:179 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:180 [ processChars::xchar#0 ] : zp[1]:180 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:181 [ processChars::$33 ] : zp[1]:181 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:182 [ processChars::$27 ] : zp[1]:182 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:183 [ processChars::ychar#0 ] : zp[1]:183 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:184 [ processChars::$34 ] : zp[1]:184 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:185 [ processChars::$29 ] : zp[1]:185 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 28,670.58: zp[1]:43 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp[2]: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[2]: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[2]: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[2]: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[2]: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[1]:156 [ atan2_16::$23 ] 2,002: zp[1]:157 [ atan2_16::$22 ] 1,710.04: zp[1]:38 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp[2]:146 [ atan2_16::return#2 ] 50: zp[2]:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp[2]:142 [ atan2_16::x#0 ] 2.72: zp[2]:144 [ atan2_16::y#0 ] 
Uplift Scope [getCharToProcess] 4,983.53: zp[1]:23 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] 3,432.25: zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] 2,937.96: zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] 1,949.11: zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] 1,557.11: zp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] 181.2: zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] 140.57: zp[2]:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] 135.09: zp[2]:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] 7.33: zp[1]:63 [ getCharToProcess::return_x#0 ] 7.33: zp[1]:64 [ getCharToProcess::return_y#0 ] 7.33: zp[1]:65 [ getCharToProcess::return_dist#0 ] 4: zp[2]:127 [ getCharToProcess::$12 ] 4: zp[2]:129 [ getCharToProcess::$13 ] 4: zp[2]:131 [ getCharToProcess::$9 ] 4: zp[2]:133 [ getCharToProcess::$10 ] 3: zp[2]:125 [ getCharToProcess::$8 ] 
Uplift Scope [startProcessing] 2,589.5: zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 2,002: zp[1]:71 [ startProcessing::$29 ] 2,002: zp[1]:72 [ startProcessing::$30 ] 2,002: zp[1]:73 [ startProcessing::$31 ] 2,002: zp[1]:74 [ startProcessing::$32 ] 2,002: zp[1]:75 [ startProcessing::$27 ] 222.2: zp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 203.57: zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] 202: zp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ] 170.33: zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] 4: zp[2]:78 [ startProcessing::$34 ] 4: zp[2]:80 [ startProcessing::$35 ] 4: zp[2]:82 [ startProcessing::$1 ] 4: zp[2]:86 [ startProcessing::colPtr#0 ] 4: zp[2]:91 [ startProcessing::$5 ] 4: zp[2]:93 [ startProcessing::$6 ] 4: zp[2]:96 [ startProcessing::$8 ] 4: zp[2]:98 [ startProcessing::$9 ] 4: zp[2]:100 [ startProcessing::$11 ] 4: zp[2]:102 [ startProcessing::$12 ] 4: zp[2]:104 [ startProcessing::$13 ] 4: zp[2]:108 [ startProcessing::$15 ] 4: zp[2]:110 [ startProcessing::$16 ] 4: zp[2]:112 [ startProcessing::$17 ] 4: zp[1]:120 [ startProcessing::$37 ] 4: zp[1]:121 [ startProcessing::$38 ] 4: zp[1]:122 [ startProcessing::$39 ] 4: zp[1]:123 [ startProcessing::$40 ] 3: zp[2]:76 [ startProcessing::$0 ] 2.22: zp[1]:124 [ startProcessing::$28 ] 2: zp[2]:84 [ startProcessing::offset#0 ] 2: zp[1]:95 [ startProcessing::ch#0 ] 2: zp[1]:117 [ startProcessing::$20 ] 0.5: zp[2]:118 [ startProcessing::$21 ] 0.4: zp[2]:114 [ startProcessing::spriteY#0 ] 0.31: zp[1]:69 [ startProcessing::center_x#0 ] 0.31: zp[2]:106 [ startProcessing::spriteX#0 ] 0.31: zp[1]:116 [ startProcessing::spritePtr#0 ] 0.24: zp[1]:70 [ startProcessing::center_y#0 ] 0.14: zp[2]:89 [ startProcessing::screenPtr#0 ] 0.1: zp[1]:88 [ startProcessing::spriteCol#0 ] 
Uplift Scope [init_angle_screen] 220.36: zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp[1]:135 [ init_angle_screen::$3 ] 202: zp[1]:136 [ init_angle_screen::$4 ] 202: zp[1]:139 [ init_angle_screen::$7 ] 202: zp[2]:148 [ init_angle_screen::angle_w#0 ] 202: zp[2]:150 [ init_angle_screen::$11 ] 202: zp[1]:153 [ init_angle_screen::$13 ] 202: zp[1]:154 [ init_angle_screen::$14 ] 202: zp[1]:155 [ init_angle_screen::$15 ] 129.86: zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp[1]:152 [ init_angle_screen::ang_w#0 ] 50.5: zp[2]:140 [ init_angle_screen::yw#0 ] 33.67: zp[2]:137 [ init_angle_screen::xw#0 ] 21.23: zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp[2]:56 [ init_angle_screen::screen#0 ] 
Uplift Scope [processChars] 33.73: zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 22: zp[1]:160 [ processChars::$62 ] 22: zp[1]:161 [ processChars::$63 ] 22: zp[1]:162 [ processChars::$64 ] 22: zp[1]:163 [ processChars::$65 ] 22: zp[1]:164 [ processChars::$32 ] 22: zp[1]:170 [ processChars::$9 ] 22: zp[1]:171 [ processChars::$10 ] 22: zp[1]:173 [ processChars::$12 ] 22: zp[1]:179 [ processChars::$24 ] 22: zp[1]:180 [ processChars::xchar#0 ] 22: zp[1]:181 [ processChars::$33 ] 22: zp[1]:182 [ processChars::$27 ] 22: zp[1]:183 [ processChars::ychar#0 ] 22: zp[1]:184 [ processChars::$34 ] 22: zp[1]:185 [ processChars::$29 ] 17.9: zp[1]:50 [ processChars::i#10 processChars::i#1 ] 11: zp[2]:174 [ processChars::$13 ] 11: zp[2]:177 [ processChars::$23 ] 6.6: zp[1]:172 [ processChars::$15 ] 2.75: zp[1]:176 [ processChars::ypos#0 ] 2.2: zp[1]:167 [ processChars::bitmask#0 ] 2.06: zp[2]:168 [ processChars::xpos#0 ] 0.31: zp[2]:165 [ processChars::processing#0 ] 
Uplift Scope [main] 34.75: zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] 25.67: zp[2]:2 [ main::src#2 main::src#1 ] 24.36: zp[1]:6 [ main::i#2 main::i#1 ] 22: zp[1]:58 [ main::$11 ] 22: zp[1]:59 [ main::$12 ] 22: zp[1]:60 [ main::$13 ] 22: zp[1]:61 [ main::$14 ] 22: zp[1]:62 [ main::$10 ] 22: zp[1]:68 [ main::center_dist#0 ] 5.5: zp[1]:66 [ main::center_x#0 ] 5.5: zp[1]:67 [ main::center_y#0 ] 
Uplift Scope [initSprites] 36.67: zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] 33: zp[1]:26 [ initSprites::i#2 initSprites::i#1 ] 
Uplift Scope [] 5: zp[2]:48 [ heap_head#5 heap_head#1 ] 0.03: zp[2]:54 [ SCREEN_DIST#0 ] 0.03: zp[2]:52 [ SCREEN_COPY#0 ] 
Uplift Scope [malloc] 0.8: zp[2]: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 1279112 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:44 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:46 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]: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[2]: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::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:146 [ atan2_16::return#2 ] zp[2]:41 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:142 [ atan2_16::x#0 ] zp[2]:144 [ atan2_16::y#0 ] 
Limited combination testing to 100 combinations of 144 possible.
Uplifting [getCharToProcess] best 1265779 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp[2]:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp[2]:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp[1]:63 [ getCharToProcess::return_x#0 ] zp[1]:64 [ getCharToProcess::return_y#0 ] zp[1]:65 [ getCharToProcess::return_dist#0 ] zp[2]:127 [ getCharToProcess::$12 ] zp[2]:129 [ getCharToProcess::$13 ] zp[2]:131 [ getCharToProcess::$9 ] zp[2]:133 [ getCharToProcess::$10 ] zp[2]:125 [ getCharToProcess::$8 ] 
Limited combination testing to 100 combinations of 46656 possible.
Uplifting [init_angle_screen] best 1264179 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp[2]:148 [ init_angle_screen::angle_w#0 ] zp[2]:150 [ init_angle_screen::$11 ] zp[1]:153 [ init_angle_screen::$13 ] zp[1]:154 [ init_angle_screen::$14 ] zp[1]:155 [ init_angle_screen::$15 ] zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:152 [ init_angle_screen::ang_w#0 ] zp[2]:140 [ init_angle_screen::yw#0 ] zp[2]:137 [ init_angle_screen::xw#0 ] zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:56 [ init_angle_screen::screen#0 ] 
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [main] best 1263939 combination zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] zp[2]:2 [ main::src#2 main::src#1 ] zp[1]:6 [ main::i#2 main::i#1 ] reg byte a [ main::$11 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte a [ main::$14 ] zp[1]:62 [ main::$10 ] zp[1]:68 [ main::center_dist#0 ] zp[1]:66 [ main::center_x#0 ] zp[1]:67 [ main::center_y#0 ] 
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [initSprites] best 1263819 combination zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] 
Uplifting [] best 1263819 combination zp[2]:48 [ heap_head#5 heap_head#1 ] zp[2]:54 [ SCREEN_DIST#0 ] zp[2]:52 [ SCREEN_COPY#0 ] 
Uplifting [malloc] best 1263819 combination zp[2]:158 [ malloc::mem#0 ] 
Uplifting [RADIX] best 1263819 combination 
Uplifting [ProcessingChar] best 1263819 combination 
Uplifting [ProcessingSprite] best 1263819 combination 
Uplifting [ProcessingSprite::$0] best 1263819 combination 
Uplifting [setupRasterIrq] best 1263819 combination 
Uplifting [irqTop] best 1263819 combination 
Uplifting [irqBottom] best 1263819 combination 
Attempting to uplift remaining variables inzp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Uplifting [getCharToProcess] best 1263819 combination zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] 
Attempting to uplift remaining variables inzp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Uplifting [getCharToProcess] best 1263819 combination zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] 
Attempting to uplift remaining variables inzp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Uplifting [startProcessing] best 1263819 combination zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 
Attempting to uplift remaining variables inzp[1]:71 [ startProcessing::$29 ]
Uplifting [startProcessing] best 1257819 combination reg byte a [ startProcessing::$29 ] 
Attempting to uplift remaining variables inzp[1]:72 [ startProcessing::$30 ]
Uplifting [startProcessing] best 1251819 combination reg byte a [ startProcessing::$30 ] 
Attempting to uplift remaining variables inzp[1]:73 [ startProcessing::$31 ]
Uplifting [startProcessing] best 1245819 combination reg byte a [ startProcessing::$31 ] 
Attempting to uplift remaining variables inzp[1]:74 [ startProcessing::$32 ]
Uplifting [startProcessing] best 1239819 combination reg byte a [ startProcessing::$32 ] 
Attempting to uplift remaining variables inzp[1]:75 [ startProcessing::$27 ]
Uplifting [startProcessing] best 1235819 combination reg byte a [ startProcessing::$27 ] 
Attempting to uplift remaining variables inzp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Uplifting [getCharToProcess] best 1235819 combination zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] 
Attempting to uplift remaining variables inzp[1]:19 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Uplifting [getCharToProcess] best 1217819 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] 
Attempting to uplift remaining variables inzp[1]:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Uplifting [startProcessing] best 1216919 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 
Attempting to uplift remaining variables inzp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1216919 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 
Attempting to uplift remaining variables inzp[1]:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Uplifting [startProcessing] best 1216019 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] 
Attempting to uplift remaining variables inzp[1]:153 [ init_angle_screen::$13 ]
Uplifting [init_angle_screen] best 1215419 combination reg byte a [ init_angle_screen::$13 ] 
Attempting to uplift remaining variables inzp[1]:154 [ init_angle_screen::$14 ]
Uplifting [init_angle_screen] best 1215019 combination reg byte a [ init_angle_screen::$14 ] 
Attempting to uplift remaining variables inzp[1]:155 [ init_angle_screen::$15 ]
Uplifting [init_angle_screen] best 1214419 combination reg byte a [ init_angle_screen::$15 ] 
Attempting to uplift remaining variables inzp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Uplifting [getCharToProcess] best 1214419 combination zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] 
Attempting to uplift remaining variables inzp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1214419 combination zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 
Attempting to uplift remaining variables inzp[1]:152 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1214419 combination zp[1]:152 [ init_angle_screen::ang_w#0 ] 
Attempting to uplift remaining variables inzp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Uplifting [processChars] best 1214419 combination zp[1]:51 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 
Attempting to uplift remaining variables inzp[1]:6 [ main::i#2 main::i#1 ]
Uplifting [main] best 1214419 combination zp[1]:6 [ main::i#2 main::i#1 ] 
Attempting to uplift remaining variables inzp[1]:62 [ main::$10 ]
Uplifting [main] best 1214379 combination reg byte a [ main::$10 ] 
Attempting to uplift remaining variables inzp[1]:68 [ main::center_dist#0 ]
Uplifting [main] best 1214319 combination reg byte a [ main::center_dist#0 ] 
Attempting to uplift remaining variables inzp[1]:160 [ processChars::$62 ]
Uplifting [processChars] best 1214259 combination reg byte a [ processChars::$62 ] 
Attempting to uplift remaining variables inzp[1]:161 [ processChars::$63 ]
Uplifting [processChars] best 1214199 combination reg byte a [ processChars::$63 ] 
Attempting to uplift remaining variables inzp[1]:162 [ processChars::$64 ]
Uplifting [processChars] best 1214139 combination reg byte a [ processChars::$64 ] 
Attempting to uplift remaining variables inzp[1]:163 [ processChars::$65 ]
Uplifting [processChars] best 1214079 combination reg byte a [ processChars::$65 ] 
Attempting to uplift remaining variables inzp[1]:164 [ processChars::$32 ]
Uplifting [processChars] best 1214019 combination reg byte a [ processChars::$32 ] 
Attempting to uplift remaining variables inzp[1]:170 [ processChars::$9 ]
Uplifting [processChars] best 1213959 combination reg byte a [ processChars::$9 ] 
Attempting to uplift remaining variables inzp[1]:171 [ processChars::$10 ]
Uplifting [processChars] best 1213899 combination reg byte a [ processChars::$10 ] 
Attempting to uplift remaining variables inzp[1]:173 [ processChars::$12 ]
Uplifting [processChars] best 1213839 combination reg byte a [ processChars::$12 ] 
Attempting to uplift remaining variables inzp[1]:179 [ processChars::$24 ]
Uplifting [processChars] best 1213799 combination reg byte a [ processChars::$24 ] 
Attempting to uplift remaining variables inzp[1]:180 [ processChars::xchar#0 ]
Uplifting [processChars] best 1213739 combination reg byte a [ processChars::xchar#0 ] 
Attempting to uplift remaining variables inzp[1]:181 [ processChars::$33 ]
Uplifting [processChars] best 1213699 combination reg byte a [ processChars::$33 ] 
Attempting to uplift remaining variables inzp[1]:182 [ processChars::$27 ]
Uplifting [processChars] best 1213659 combination reg byte a [ processChars::$27 ] 
Attempting to uplift remaining variables inzp[1]:183 [ processChars::ychar#0 ]
Uplifting [processChars] best 1213599 combination reg byte a [ processChars::ychar#0 ] 
Attempting to uplift remaining variables inzp[1]:184 [ processChars::$34 ]
Uplifting [processChars] best 1213559 combination reg byte a [ processChars::$34 ] 
Attempting to uplift remaining variables inzp[1]:185 [ processChars::$29 ]
Uplifting [processChars] best 1213499 combination reg byte a [ processChars::$29 ] 
Attempting to uplift remaining variables inzp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1213499 combination zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 
Attempting to uplift remaining variables inzp[1]:50 [ processChars::i#10 processChars::i#1 ]
Uplifting [processChars] best 1213499 combination zp[1]:50 [ processChars::i#10 processChars::i#1 ] 
Attempting to uplift remaining variables inzp[1]:63 [ getCharToProcess::return_x#0 ]
Uplifting [getCharToProcess] best 1213439 combination reg byte y [ getCharToProcess::return_x#0 ] 
Attempting to uplift remaining variables inzp[1]:64 [ getCharToProcess::return_y#0 ]
Uplifting [getCharToProcess] best 1213379 combination reg byte a [ getCharToProcess::return_y#0 ] 
Attempting to uplift remaining variables inzp[1]:65 [ getCharToProcess::return_dist#0 ]
Uplifting [getCharToProcess] best 1213339 combination reg byte x [ getCharToProcess::return_dist#0 ] 
Attempting to uplift remaining variables inzp[1]:172 [ processChars::$15 ]
Uplifting [processChars] best 1213269 combination reg byte x [ processChars::$15 ] 
Attempting to uplift remaining variables inzp[1]:66 [ main::center_x#0 ]
Uplifting [main] best 1213209 combination reg byte y [ main::center_x#0 ] 
Attempting to uplift remaining variables inzp[1]:67 [ main::center_y#0 ]
Uplifting [main] best 1213209 combination zp[1]:67 [ main::center_y#0 ] 
Attempting to uplift remaining variables inzp[1]:120 [ startProcessing::$37 ]
Uplifting [startProcessing] best 1213203 combination reg byte a [ startProcessing::$37 ] 
Attempting to uplift remaining variables inzp[1]:121 [ startProcessing::$38 ]
Uplifting [startProcessing] best 1213197 combination reg byte a [ startProcessing::$38 ] 
Attempting to uplift remaining variables inzp[1]:122 [ startProcessing::$39 ]
Uplifting [startProcessing] best 1213191 combination reg byte a [ startProcessing::$39 ] 
Attempting to uplift remaining variables inzp[1]:123 [ startProcessing::$40 ]
Uplifting [startProcessing] best 1213185 combination reg byte a [ startProcessing::$40 ] 
Attempting to uplift remaining variables inzp[1]:176 [ processChars::ypos#0 ]
Uplifting [processChars] best 1213185 combination zp[1]:176 [ processChars::ypos#0 ] 
Attempting to uplift remaining variables inzp[1]:124 [ startProcessing::$28 ]
Uplifting [startProcessing] best 1213157 combination reg byte x [ startProcessing::$28 ] 
Attempting to uplift remaining variables inzp[1]:167 [ processChars::bitmask#0 ]
Uplifting [processChars] best 1213157 combination zp[1]:167 [ processChars::bitmask#0 ] 
Attempting to uplift remaining variables inzp[1]:95 [ startProcessing::ch#0 ]
Uplifting [startProcessing] best 1213151 combination reg byte a [ startProcessing::ch#0 ] 
Attempting to uplift remaining variables inzp[1]:117 [ startProcessing::$20 ]
Uplifting [startProcessing] best 1213145 combination reg byte a [ startProcessing::$20 ] 
Attempting to uplift remaining variables inzp[1]:69 [ startProcessing::center_x#0 ]
Uplifting [startProcessing] best 1213145 combination zp[1]:69 [ startProcessing::center_x#0 ] 
Attempting to uplift remaining variables inzp[1]:116 [ startProcessing::spritePtr#0 ]
Uplifting [startProcessing] best 1213145 combination zp[1]:116 [ startProcessing::spritePtr#0 ] 
Attempting to uplift remaining variables inzp[1]:70 [ startProcessing::center_y#0 ]
Uplifting [startProcessing] best 1213145 combination zp[1]:70 [ startProcessing::center_y#0 ] 
Attempting to uplift remaining variables inzp[1]:88 [ startProcessing::spriteCol#0 ]
Uplifting [startProcessing] best 1213145 combination zp[1]:88 [ startProcessing::spriteCol#0 ] 
Coalescing zero page register [ zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] ] with [ zp[2]:98 [ startProcessing::$9 ] ] - score: 1
Coalescing zero page register [ zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] ] with [ zp[2]:93 [ startProcessing::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:56 [ init_angle_screen::screen#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:39 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]: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[2]:54 [ SCREEN_DIST#0 ] ] with [ zp[2]:158 [ malloc::mem#0 ] ] - score: 1
Coalescing zero page register [ zp[1]:67 [ main::center_y#0 ] ] with [ zp[1]:70 [ startProcessing::center_y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:76 [ startProcessing::$0 ] ] with [ zp[2]:80 [ startProcessing::$35 ] ] - score: 1
Coalescing zero page register [ zp[2]:82 [ startProcessing::$1 ] ] with [ zp[2]:84 [ startProcessing::offset#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:100 [ startProcessing::$11 ] ] with [ zp[2]:102 [ startProcessing::$12 ] ] - score: 1
Coalescing zero page register [ zp[2]:104 [ startProcessing::$13 ] ] with [ zp[2]:106 [ startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:108 [ startProcessing::$15 ] ] with [ zp[2]:110 [ startProcessing::$16 ] ] - score: 1
Coalescing zero page register [ zp[2]:112 [ startProcessing::$17 ] ] with [ zp[2]:114 [ startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:125 [ getCharToProcess::$8 ] ] with [ zp[2]:129 [ getCharToProcess::$13 ] ] - score: 1
Coalescing zero page register [ zp[2]:131 [ getCharToProcess::$9 ] ] with [ zp[2]:133 [ getCharToProcess::$10 ] ] - score: 1
Coalescing zero page register [ zp[2]:137 [ init_angle_screen::xw#0 ] ] with [ zp[2]:142 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:140 [ init_angle_screen::yw#0 ] ] with [ zp[2]:144 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:146 [ atan2_16::return#2 ] ] with [ zp[2]:148 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:168 [ processChars::xpos#0 ] ] with [ zp[2]:177 [ processChars::$23 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 ] ] with [ zp[2]:96 [ startProcessing::$8 ] ] - score: 1
Coalescing zero page register [ zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 ] ] with [ zp[2]:91 [ startProcessing::$5 ] ] - score: 1
Coalescing zero page register [ zp[2]: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[2]:146 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:76 [ startProcessing::$0 startProcessing::$35 ] ] with [ zp[2]:82 [ startProcessing::$1 startProcessing::offset#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:100 [ startProcessing::$11 startProcessing::$12 ] ] with [ zp[2]:104 [ startProcessing::$13 startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:108 [ startProcessing::$15 startProcessing::$16 ] ] with [ zp[2]:112 [ startProcessing::$17 startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:125 [ getCharToProcess::$8 getCharToProcess::$13 ] ] with [ zp[2]:131 [ getCharToProcess::$9 getCharToProcess::$10 ] ] - score: 1
Coalescing zero page register [ zp[2]: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[2]:150 [ init_angle_screen::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:76 [ startProcessing::$0 startProcessing::$35 startProcessing::$1 startProcessing::offset#0 ] ] with [ zp[2]:89 [ startProcessing::screenPtr#0 ] ] - score: 1
Coalescing zero page register [ zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] ] with [ zp[1]:6 [ main::i#2 main::i#1 ] ]
Coalescing zero page register [ zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 ] ] with [ zp[2]:2 [ main::src#2 main::src#1 ] ]
Coalescing zero page register [ zp[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 ] ] with [ zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ] ]
Coalescing zero page register [ zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 ] ] with [ zp[2]:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ]
Coalescing zero page register [ zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:18 [ getCharToProcess::y#7 getCharToProcess::y#1 ] ]
Coalescing zero page register [ zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:16 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ]
Coalescing zero page register [ zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:20 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ]
Coalescing zero page register [ zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp[1]:21 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ]
Coalescing zero page register [ zp[2]:48 [ heap_head#5 heap_head#1 ] ] with [ zp[2]: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[1]:67 [ main::center_y#0 startProcessing::center_y#0 ] ] with [ zp[1]:22 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] ]
Coalescing zero page register [ zp[2]:76 [ startProcessing::$0 startProcessing::$35 startProcessing::$1 startProcessing::offset#0 startProcessing::screenPtr#0 ] ] with [ zp[2]: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[2]:78 [ startProcessing::$34 ] ] with [ zp[2]: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[2]:86 [ startProcessing::colPtr#0 ] ] with [ zp[2]: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[2]:100 [ startProcessing::$11 startProcessing::$12 startProcessing::$13 startProcessing::spriteX#0 ] ] with [ zp[2]: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[2]:108 [ startProcessing::$15 startProcessing::$16 startProcessing::$17 startProcessing::spriteY#0 ] ] with [ zp[2]: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[2]:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 ] ] with [ zp[2]:118 [ startProcessing::$21 ] ]
Coalescing zero page register [ zp[2]:137 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp[2]:127 [ getCharToProcess::$12 ] ]
Coalescing zero page register [ zp[1]:152 [ init_angle_screen::ang_w#0 ] ] with [ zp[1]:69 [ startProcessing::center_x#0 ] ]
Coalescing zero page register [ zp[2]:24 [ initSprites::sp#2 initSprites::sp#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] with [ zp[2]:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$9 startProcessing::$8 main::src#2 main::src#1 ] ]
Coalescing zero page register [ zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 getCharToProcess::y#7 getCharToProcess::y#1 ] ] with [ zp[1]:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 main::i#2 main::i#1 ] ]
Coalescing zero page register [ zp[2]: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[2]:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$6 startProcessing::$5 main::dst#2 main::dst#0 main::dst#1 ] ]
Coalescing zero page register [ zp[1]:88 [ startProcessing::spriteCol#0 ] ] with [ zp[1]:32 [ init_angle_screen::x#2 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[1]:116 [ startProcessing::spritePtr#0 ] ] with [ zp[1]:33 [ init_angle_screen::xb#2 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[2]:125 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$21 ] ] with [ zp[2]: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[2]:140 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp[2]:24 [ initSprites::sp#2 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#2 main::src#1 ] ]
Allocated (was zp[1]:27) zp[1]: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[2]:28) zp[2]: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#2 main::dst#0 main::dst#1 ]
Allocated (was zp[1]:50) zp[1]:5 [ processChars::i#10 processChars::i#1 ]
Allocated (was zp[1]:51) zp[1]:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Allocated (was zp[2]:52) zp[2]:7 [ SCREEN_COPY#0 ]
Allocated (was zp[2]:54) zp[2]:9 [ SCREEN_DIST#0 malloc::mem#0 ]
Allocated (was zp[1]:67) zp[1]: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[2]:76) zp[2]:12 [ startProcessing::$0 startProcessing::$35 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[2]:78) zp[2]:14 [ startProcessing::$34 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
Allocated (was zp[2]:86) zp[2]: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[1]:88) zp[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Allocated (was zp[2]:100) zp[2]: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[2]:108) zp[2]: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[1]:116) zp[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Allocated (was zp[2]:125) zp[2]:24 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$21 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[2]:137) zp[2]:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ]
Allocated (was zp[2]:140) zp[2]:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 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#2 main::src#1 ]
Allocated (was zp[1]:152) zp[1]:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ]
Allocated (was zp[2]:165) zp[2]:31 [ processChars::processing#0 ]
Allocated (was zp[1]:167) zp[1]:33 [ processChars::bitmask#0 ]
Allocated (was zp[2]:168) zp[2]:34 [ processChars::xpos#0 processChars::$23 ]
Allocated (was zp[2]:174) zp[2]:36 [ processChars::$13 ]
Allocated (was zp[1]:176) zp[1]: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
  // 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 STATUS_FREE = 0
  .const STATUS_NEW = 1
  .const STATUS_PROCESSING = 2
  .const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
  .const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
  .const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
  .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
  .const RASTER_IRQ_TOP = $30
  .const RASTER_IRQ_MIDDLE = $ff
  .const SIZEOF_STRUCT_PROCESSINGSPRITE = $e
  .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
  // Head of the heap. Moved backward each malloc()
  .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 
  // [235] phi from @1 to malloc [phi:@1->malloc]
malloc_from___b1:
  // [235] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [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 
  // [235] phi from @3 to malloc [phi:@3->malloc]
malloc_from___b3:
  // [235] 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::@1 [phi:main::@9->main::@1]
  __b1_from___b9:
    // [12] phi (byte*) main::dst#2 = (byte*) main::dst#0 [phi:main::@9->main::@1#0] -- register_copy 
    // [12] phi (byte*) main::src#2 = (const byte*) SCREEN [phi:main::@9->main::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z src
    lda #>SCREEN
    sta.z src+1
    jmp __b1
  // Copy screen to screen copy
    // main::@1
  __b1:
    // [13] if((byte*) main::src#2!=(const byte*) SCREEN+(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
    // [14] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  __b3_from___b1:
    // [14] 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
    // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
  __b3_from___b3:
    // [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@3->main::@3#0] -- register_copy 
    jmp __b3
    // main::@3
  __b3:
    // [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3 
    tax
    ldy #0
  !:
    lda __2,y
    sta PROCESSING,x
    inx
    iny
    cpy #SIZEOF_STRUCT_PROCESSINGSPRITE
    bne !-
    // [21] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne __b3_from___b3
    // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  __b4_from___b3:
    jmp __b4
    // main::@4
  __b4:
    // [24] call initSprites 
    // [148] phi from main::@4 to initSprites [phi:main::@4->initSprites]
  initSprites_from___b4:
    jsr initSprites
    // [25] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
  __b10_from___b4:
    jmp __b10
    // main::@10
  __b10:
    // [26] call setupRasterIrq 
    jsr setupRasterIrq
    // [27] 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:
    // [28] call getCharToProcess 
    jsr getCharToProcess
    // [29] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 
    ldy.z getCharToProcess.return_x
    // [30] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 
    lda.z getCharToProcess.return_y
    // [31] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1
    jmp __b11
    // main::@11
  __b11:
    // [32] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
    // [33] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa 
    sta.z center_y
    // [34] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx 
    txa
    // [35] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 
    cmp #NOT_FOUND
    bne __b6
    jmp __b7
    // main::@7
  __b7:
    // [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 
    lda #'.'
    sta SCREEN+$3e7
    jmp __b8
    // main::@8
  __b8:
    // [37] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp __b8
    // main::@6
  __b6:
    // [38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy 
    sty.z startProcessing.center_x
    // [39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
    // [40] call startProcessing 
    // [44] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
  startProcessing_from___b6:
    jsr startProcessing
    jmp __b5_from___b6
    // main::@2
  __b2:
    // [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (src),y
    ldy #0
    sta (dst),y
    // [42] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 
    inc.z src
    bne !+
    inc.z src+1
  !:
    // [43] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
  __b1_from___b2:
    // [12] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@2->main::@1#0] -- register_copy 
    // [12] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@2->main::@1#1] -- register_copy 
    jmp __b1
}
  // startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zp($1e) center_x, byte zp($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 __21 = $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
    // Busy-wait while finding an empty slot in the PROCESSING array
    .label freeIdx = 2
    .label __34 = $e
    .label __35 = $c
    // [45] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
  __b1_from_startProcessing:
    // [45] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 
    ldx #$ff
    jmp __b1
    // startProcessing::@1
  __b1:
    // [46] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
  __b2_from___b1:
    // [46] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b2
    // [46] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
  __b2_from___b3:
    // [46] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy 
    jmp __b2
    // startProcessing::@2
  __b2:
    // [47] (byte~) startProcessing::$29 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [48] (byte~) startProcessing::$30 ← (byte~) startProcessing::$29 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [49] (byte~) startProcessing::$31 ← (byte~) startProcessing::$30 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [50] (byte~) startProcessing::$32 ← (byte~) startProcessing::$31 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$32 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(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
    // [53] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
  __b4_from___b2:
  __b4_from___b9:
    // [53] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy 
    jmp __b4
    // startProcessing::@4
  __b4:
    // [54] 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:
    // [55] (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
    // [56] (word~) startProcessing::$34 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z __0
    asl
    sta.z __34
    lda.z __0+1
    rol
    sta.z __34+1
    asl.z __34
    rol.z __34+1
    // [57] (word~) startProcessing::$35 ← (word~) startProcessing::$34 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z __35
    clc
    adc.z __34
    sta.z __35
    lda.z __35+1
    adc.z __34+1
    sta.z __35+1
    // [58] (word~) startProcessing::$1 ← (word~) startProcessing::$35 << (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
    // [59] (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
  !:
    // [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (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
    // [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (colPtr),y
    sta.z spriteCol
    // [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (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
    // [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 
    lda.z freeIdx
    sta.z __5
    lda #0
    sta.z __5+1
    // [64] (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
    // [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (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
    // [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 
    ldy #0
    lda (screenPtr),y
    // [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa 
    sta.z __8
    lda #0
    sta.z __8+1
    // [68] (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
    // [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (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
    // [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_CHARROM
    sta PROCPORT
    // [72] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
  __b6_from___b5:
    // [72] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 
    ldx #0
    // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy 
    // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy 
    jmp __b6
    // [72] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
  __b6_from___b6:
    // [72] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy 
    // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy 
    // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy 
    jmp __b6
    // startProcessing::@6
  __b6:
    // [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (chargenData),y
    ldy #0
    sta (spriteData),y
    // [74] (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
  !:
    // [75] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 
    inc.z chargenData
    bne !+
    inc.z chargenData+1
  !:
    // [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx 
    inx
    // [77] 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:
    // [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // asm { cli  }
    cli
    // [80] (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
    // [81] (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
    // [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 
    lda #BORDER_XPOS_LEFT
    clc
    adc.z __13
    sta.z __13
    bcc !+
    inc.z __13+1
  !:
    // [83] (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
    // [84] (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
    // [85] (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
    // [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 
    lda #BORDER_YPOS_TOP
    clc
    adc.z __17
    sta.z __17
    bcc !+
    inc.z __17+1
  !:
    // [87] (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
    // [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z freeIdx
    axs #-[SPRITE_DATA/$40]
    stx.z spritePtr
    // [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 
    lda.z freeIdx
    asl
    asl
    asl
    // [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuaa 
    sta.z __21
    lda #0
    sta.z __21+1
    // [91] (byte~) startProcessing::$37 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z freeIdx
    asl
    // [92] (byte~) startProcessing::$38 ← (byte~) startProcessing::$37 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [93] (byte~) startProcessing::$39 ← (byte~) startProcessing::$38 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [94] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuxx=vbuaa_rol_1 
    asl
    tax
    // [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z spriteX
    sta PROCESSING,x
    lda.z spriteX+1
    sta PROCESSING+1,x
    // [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (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
    // [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z __21
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
    lda.z __21+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
    // [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuxx=vwuc2 
    lda #<$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
    lda #>$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
    // [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z freeIdx
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
    // [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spritePtr
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
    // [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spriteCol
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
    // [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #STATUS_NEW
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
    // [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (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:
    // [105] return 
    rts
    // startProcessing::@8
  __b8:
    // [106] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 
    ldx.z freeIdx
    // [45] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
  __b1_from___b8:
    // [45] phi (byte) startProcessing::freeIdx#6 = (byte) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy 
    jmp __b1
    // startProcessing::@3
  __b3:
    // [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(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:
    // [109] (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
    // [110] (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
    // [111] (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
    // [112] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
  __b1_from_getCharToProcess:
    // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_y
    // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_x
    // [112] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [112] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 
    lda #NOT_FOUND
    sta.z closest_dist
    // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy 
    // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy 
    jmp __b1
    // getCharToProcess::@1
  __b1:
    // [113] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
  __b2_from___b1:
    // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy 
    // [113] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 
    ldy #0
    jmp __b2
    // getCharToProcess::@2
  __b2:
    // [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 
    lda #' '
    cmp (screen_line),y
    beq __b11
    jmp __b4
    // getCharToProcess::@4
  __b4:
    // [115] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) -- vbuxx=pbuz1_derefidx_vbuyy 
    lda (dist_line),y
    tax
    // [116] 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:
    // [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy 
    sty.z return_x
    // [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 
    lda.z y
    sta.z return_y
    // [119] 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:
    // [119] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy 
    // [119] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy 
    // [119] 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:
    // [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy 
    iny
    // [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne __b10
    jmp __b6
    // getCharToProcess::@6
  __b6:
    // [122] (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
  !:
    // [123] (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
  !:
    // [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [125] 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:
    // [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 
    cpx #NOT_FOUND
    beq __breturn
    jmp __b8
    // getCharToProcess::@8
  __b8:
    // [127] (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
    // [128] (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
    // [129] (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
    // [130] (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
    // [131] (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
    // [132] *((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:
    // [133] return 
    rts
    // getCharToProcess::@9
  __b9:
    // [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [112] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
  __b1_from___b9:
    // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy 
    // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy 
    // [112] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy 
    // [112] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy 
    // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy 
    // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy 
    jmp __b1
    // getCharToProcess::@10
  __b10:
    // [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [113] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
  __b2_from___b10:
    // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy 
    // [113] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy 
    jmp __b2
    // getCharToProcess::@12
  __b12:
    // [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 
    ldx.z closest_dist
    jmp __b3_from___b12
    // getCharToProcess::@11
  __b11:
    // [137] (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
    // [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 
    // Disable CIA 1 Timer IRQ
    lda #CIA_INTERRUPT_CLEAR
    sta CIA1_INTERRUPT
    jmp __b1
    // setupRasterIrq::@1
  __b1:
    // [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 
    lda #$7f
    and VIC_CONTROL
    sta VIC_CONTROL
    jmp __b2
    // setupRasterIrq::@2
  __b2:
    // [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Enable Raster Interrupt
    lda #IRQ_RASTER
    sta IRQ_ENABLE
    // [145] *((const void()**) HARDWARE_IRQ) ← (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:
    // [147] return 
    rts
}
  // initSprites
// Initialize sprites
initSprites: {
    .label sp = $1c
    // [149] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
  __b1_from_initSprites:
    // [149] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 
    lda #<SPRITE_DATA
    sta.z sp
    lda #>SPRITE_DATA
    sta.z sp+1
    jmp __b1
  // Clear sprite data
    // initSprites::@1
  __b1:
    // [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(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
  !:
    // [151] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
  __b3_from___b1:
    // [151] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 
    ldx #0
    jmp __b3
  // Initialize sprite registers
    // [151] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
  __b3_from___b3:
    // [151] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy 
    jmp __b3
    // initSprites::@3
  __b3:
    // [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #LIGHT_BLUE
    sta SPRITES_COLS,x
    // [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [154] 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:
    // [155] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_MC
    // [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
    // [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_Y
    jmp __breturn
    // initSprites::@return
  __breturn:
    // [158] return 
    rts
    // initSprites::@2
  __b2:
    // [159] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (sp),y
    // [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 
    inc.z sp
    bne !+
    inc.z sp+1
  !:
    // [149] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1]
  __b1_from___b2:
    // [149] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy 
    jmp __b1
}
  // 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* zp($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
    // [161] (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
    // [162] (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
    // [163] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  __b1_from_init_angle_screen:
    // [163] 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 
    // [163] 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 
    // [163] 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
    // [163] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  __b1_from___b4:
    // [163] 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 
    // [163] 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 
    // [163] 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:
    // [164] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
  __b2_from___b1:
    // [164] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [164] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b2
    // init_angle_screen::@2
  __b2:
    // [165] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    jmp __b4
    // init_angle_screen::@4
  __b4:
    // [166] (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
    // [167] (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
  !:
    // [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [169] 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:
    // [170] return 
    rts
    // init_angle_screen::@3
  __b3:
    // [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [172] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [173] (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
    // [174] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [175] (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
    // [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [178] call atan2_16 
    jsr atan2_16
    // [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    jmp __b5
    // init_angle_screen::@5
  __b5:
    // [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // [181] (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
  !:
    // [182] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z __11+1
    sta.z ang_w
    // [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [184] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
    lda.z ang_w
    eor #$ff
    clc
    adc #1
    // [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [186] (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
    // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [188] (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
    // [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [164] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
  __b2_from___b5:
    // [164] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [164] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // 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 zp($1a) x, signed word zp($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
    // [192] 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:
    // [193] (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
    // [194] 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:
    // [194] 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:
    // [195] 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:
    // [196] (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
    // [197] 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:
    // [197] 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:
    // [198] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  __b10_from___b6:
    // [198] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z angle
    lda #>0
    sta.z angle+1
    // [198] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    ldx #0
    // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [198] 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:
    // [199] 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
    // [200] 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:
    // [200] 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:
    // [201] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z angle+1
    ror.z angle
    // [202] 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:
    // [203] (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
    // [204] 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:
    // [204] 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:
    // [205] 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:
    // [206] (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
    // [207] 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:
    // [207] 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:
    // [208] return 
    rts
    // atan2_16::@11
  __b11:
    // [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [210] (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
    // [211] (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
    // [212] 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:
    // [212] 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 
    // [212] 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 
    // [212] 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:
    // [213] 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:
    // [214] 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:
    // [215] (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
    // [216] (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
    // [217] 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:
    // [217] 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 
    // [217] 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:
    // [218] 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:
    // [219] (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
    // [220] (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
    // [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- 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
    // [223] 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:
    // [223] 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 
    // [223] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [223] 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:
    // [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
    cpx #CORDIC_ITERATIONS_16-1+1
    beq __b12_from___b19
    // [198] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  __b10_from___b19:
    // [198] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [198] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [198] 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:
    // [226] (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
    // [227] (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
    // [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- 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:
    // [230] (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
    // [231] (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
    // [232] (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:
    // [233] (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:
    // [234] (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
    // [236] (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
    // [237] (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:
    // [238] 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
    // [240] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
  __b1_from_irqBottom:
    jmp __b1
    // irqBottom::@1
  __b1:
    // [241] call processChars 
    // [246] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
  processChars_from___b1:
    jsr processChars
    jmp __b2
    // irqBottom::@2
  __b2:
    // [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the top of the screen
    lda #RASTER_IRQ_TOP
    sta RASTER
    // [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 
    lda #<irqTop
    sta HARDWARE_IRQ
    lda #>irqTop
    sta HARDWARE_IRQ+1
    // [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp __breturn
    // irqBottom::@return
  __breturn:
    // [245] 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 __13 = $24
    .label __23 = $22
    .label processing = $1f
    .label bitmask = $21
    .label i = 5
    .label xpos = $22
    .label ypos = $26
    .label numActive = 6
    // [247] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
  __b1_from_processChars:
    // [247] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z numActive
    // [247] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // [247] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
  __b1_from___b2:
    // [247] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy 
    // [247] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy 
    jmp __b1
    // processChars::@1
  __b1:
    // [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuaa 
    clc
    adc #<PROCESSING
    sta.z processing
    lda #>PROCESSING
    adc #0
    sta.z processing+1
    // [254] (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
    tay
    lda #1
    cpy #0
    beq !e+
  !:
    asl
    dey
    bne !-
  !e:
    sta.z bitmask
    // [255] 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 
    lda #STATUS_FREE
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    cmp (processing),y
    beq __b2_from___b1
    jmp __b10
    // processChars::@10
  __b10:
    // [256] 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:
    // [257] *(*((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
  !:
    stx $ffff
    // [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 
    // Enable the sprite
    lda SPRITES_ENABLE
    ora.z bitmask
    sta SPRITES_ENABLE
    // [259] *((const byte*) SPRITES_COLS + *((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
    // [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((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
    // [261] *((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:
    // [262] (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
    // [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 
    lda.z xpos+1
    // [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 
    // Set sprite position
    cmp #0
    bne __b4
    jmp __b8
    // processChars::@8
  __b8:
    // [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    and SPRITES_XMSB
    sta SPRITES_XMSB
    jmp __b5
    // processChars::@5
  __b5:
    // [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 
    lda.z i
    asl
    tax
    // [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 
    lda.z xpos
    // [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SPRITES_XPOS,x
    // [270] (word~) processChars::$13 ← *((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 __13
    iny
    lda (processing),y
    sta.z __13+1
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    // [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 
    lda.z __13
    sta.z ypos
    // [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z ypos
    sta SPRITES_YPOS,x
    // [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) 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:
    // [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) 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:
    // [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) 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:
    // [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) 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:
    // [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 
    lsr.z __23+1
    ror.z __23
    lsr.z __23+1
    ror.z __23
    lsr.z __23+1
    ror.z __23
    // [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuaa=_byte_vwuz1 
    lda.z __23
    // [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_XPOS_LEFT/8
    // [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [281] *((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*) VXSIN + (byte~) processChars::$33) -- 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
    // [282] *((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
    // [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    // [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_YPOS_TOP/8
    // [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [286] *((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*) VYSIN + (byte~) processChars::$34) -- 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
    // [287] *((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:
    // [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 
    inc.z numActive
    // [289] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
  __b2_from___b1:
  __b2_from___b7:
    // [289] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy 
    jmp __b2
    // processChars::@2
  __b2:
    // [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(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:
    // [292] return 
    rts
    // processChars::@6
  __b6:
    // [293] *((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
    // [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    // Disable the sprite
    and SPRITES_ENABLE
    sta SPRITES_ENABLE
    jmp __b7
    // processChars::@4
  __b4:
    // [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (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:
    // [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the middle of the screen
    lda #RASTER_IRQ_MIDDLE
    sta RASTER
    // [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 
    lda #<irqBottom
    sta HARDWARE_IRQ
    lda #>irqBottom
    sta HARDWARE_IRQ+1
    // [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    jmp __breturn
    // irqTop::@return
  __breturn:
    // [301] 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
  __2: .word 0, 0, 0, 0
  .byte 0, 0, 0, STATUS_FREE
  .word 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 __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 __b1
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b5
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
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
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction ldy #0 with TAY
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 __bbegin with __b1
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 __b3_from___b3 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 __bbegin:
Removing instruction __b1_from___bbegin:
Removing instruction malloc_from___b1:
Removing instruction __b4:
Removing instruction __b2_from___b4:
Removing instruction __bend_from___b2:
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 __b3_from___b3:
Removing instruction __b1_from___b4:
Removing instruction __b2_from___b1:
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 __b1_from___b9:
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___b2:
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 __b1_from_initSprites:
Removing instruction __b3_from___b1:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __b1_from_init_angle_screen:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b5:
Removing instruction __b2_from___b5:
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 __b3
Removing instruction jmp __b2
Removing instruction jmp __b6
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Fixing long branch [452] bne __b2 to beq
Fixing long branch [867] beq __b12 to bne
Fixing long branch [1210] bne __b1 to beq
Fixing long branch [228] bne __b3 to beq
Fixing long branch [234] beq __b8 to bne
Fixing long branch [497] 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 [1084] bne __b4 to beq
Fixing long branch [1118] bcc __b6 to bcs
Fixing long branch [1125] bcc __b6 to bcs
Fixing long branch [1132] bcc __b6 to bcs
Fixing long branch [1139] bcc __b6 to bcs
Fixing long branch [1147] bcc __b6 to bcs
Fixing long branch [1154] bcc __b6 to bcs
Fixing long branch [1162] bcc __b6 to bcs

FINAL SYMBOL TABLE
(const struct ProcessingSprite) $2 = { x: (word) 0, y: (word) 0, vx: (word) 0, vy: (word) 0, id: (byte) 0, ptr: (byte) 0, col: (byte) 0, status: (const byte) STATUS_FREE, screenPtr: (byte*) 0 }
(label) @1
(label) @2
(label) @3
(label) @4
(label) @begin
(label) @end
(const byte) BORDER_XPOS_LEFT = (byte) $18
(const word) BORDER_XPOS_RIGHT = (word) $158
(const byte) BORDER_YPOS_BOTTOM = (byte) $fa
(const byte) BORDER_YPOS_TOP = (byte) $32
(const byte*) CHARGEN = (byte*) 53248
(const byte*) CIA1_INTERRUPT = (byte*) 56333
(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f
(const byte*) COLS = (byte*) 55296
(const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16]  = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
(const byte) CORDIC_ITERATIONS_16 = (byte) $f
(const void()**) HARDWARE_IRQ = (void()**) 65534
(const byte*) HEAP_TOP = (byte*) 40960
(const byte*) IRQ_ENABLE = (byte*) 53274
(const byte) IRQ_RASTER = (byte) 1
(const byte*) IRQ_STATUS = (byte*) 53273
(const byte) LIGHT_BLUE = (byte) $e
(const byte) NOT_FOUND = (byte) $ff
(const byte) NUM_PROCESSING = (byte) 8
(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_Y = (byte) 2
(const struct ProcessingSprite*) PROCESSING[(const byte) NUM_PROCESSING]  = { fill( NUM_PROCESSING, 0) }
(const byte*) PROCPORT = (byte*) 1
(const byte*) PROCPORT_DDR = (byte*) 0
(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7
(const byte) PROCPORT_RAM_CHARROM = (byte) 1
(const byte) 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 = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const byte*) RASTER = (byte*) 53266
(const byte) RASTER_IRQ_MIDDLE = (byte) $ff
(const byte) RASTER_IRQ_TOP = (byte) $30
(const byte*) SCREEN = (byte*) 1024
(byte*) SCREEN_COPY
(void*) SCREEN_COPY#0 SCREEN_COPY zp[2]:7 0.03076923076923077
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:9 0.031746031746031744
(const byte) SIZEOF_STRUCT_PROCESSINGSPRITE = (byte) $e
(const byte*) SPRITES_COLS = (byte*) 53287
(const byte*) SPRITES_ENABLE = (byte*) 53269
(const byte*) SPRITES_EXPAND_X = (byte*) 53277
(const byte*) SPRITES_EXPAND_Y = (byte*) 53271
(const byte*) SPRITES_MC = (byte*) 53276
(const byte*) SPRITES_XMSB = (byte*) 53264
(const byte*) SPRITES_XPOS = (byte*) 53248
(const byte*) SPRITES_YPOS = (byte*) 53249
(const byte*) SPRITE_DATA = (byte*) 8192
(const word) SPRITE_PTRS = (word) $3f8
(const byte) STATUS_FREE = (byte) 0
(const byte) STATUS_NEW = (byte) 1
(const byte) STATUS_PROCESSING = (byte) 2
(const byte*) VIC_CONTROL = (byte*) 53265
(const word*) VXSIN[(number) $28]  = kickasm {{ .for(var i=0; i<40; i++) {
      .word -sin(toRadians([i*360]/40))*4
    }
 }}
(const word*) VYSIN[(number) $19]  = kickasm {{ .for(var i=0; i<25; i++) {
      .word -sin(toRadians([i*360]/25))*4
    }
 }}
(const word) XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT-(byte) 8<<(byte) 4
(const word) XPOS_RIGHTMOST = (const word) BORDER_XPOS_RIGHT<<(byte) 4
(const word) YPOS_BOTTOMMOST = (word)(const byte) BORDER_YPOS_BOTTOM<<(byte) 4
(const word) YPOS_TOPMOST = (word)(const byte) BORDER_YPOS_TOP-(byte) 8<<(byte) 4
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 zp[2]:12 4.0
(byte~) atan2_16::$22 reg byte a 2002.0
(byte~) atan2_16::$23 reg byte a 2002.0
(signed word~) atan2_16::$7 zp[2]: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[2]:16 3.0
(word) atan2_16::angle#11 angle zp[2]:16 4.0
(word) atan2_16::angle#12 angle zp[2]:16 190.66666666666666
(word) atan2_16::angle#13 angle zp[2]:16 1334.6666666666667
(word) atan2_16::angle#2 angle zp[2]:16 2002.0
(word) atan2_16::angle#3 angle zp[2]:16 2002.0
(word) atan2_16::angle#4 angle zp[2]:16 4.0
(word) atan2_16::angle#5 angle zp[2]:16 4.0
(word) atan2_16::angle#6 angle zp[2]: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[2]:16 34.99999999999999
(word) atan2_16::return#2 return zp[2]: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[2]:26 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 xd zp[2]:21 6667.333333333333
(signed word) atan2_16::xd#10 xd zp[2]:21 1001.0
(signed word) atan2_16::xd#2 xd zp[2]:21 1001.0
(signed word) atan2_16::xd#3 xd zp[2]:21 7668.333333333332
(signed word) atan2_16::xd#5 xd zp[2]:21 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 xi zp[2]:14 6.0
(signed word) atan2_16::xi#1 xi zp[2]:14 500.5
(signed word) atan2_16::xi#13 xi zp[2]:14 4.0
(signed word) atan2_16::xi#2 xi zp[2]:14 500.5
(signed word) atan2_16::xi#3 xi zp[2]:14 267.0666666666667
(signed word) atan2_16::xi#8 xi zp[2]:14 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 y zp[2]:28 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 yd zp[2]:19 10001.0
(signed word) atan2_16::yd#10 yd zp[2]:19 2002.0
(signed word) atan2_16::yd#2 yd zp[2]:19 2002.0
(signed word) atan2_16::yd#3 yd zp[2]:19 4601.0
(signed word) atan2_16::yd#5 yd zp[2]:19 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 yi zp[2]:12 1.2000000000000002
(signed word) atan2_16::yi#1 yi zp[2]:12 667.3333333333334
(signed word) atan2_16::yi#16 yi zp[2]:12 4.0
(signed word) atan2_16::yi#2 yi zp[2]:12 667.3333333333334
(signed word) atan2_16::yi#3 yi zp[2]:12 353.4117647058823
(signed word) atan2_16::yi#8 yi zp[2]:12 1001.0
(struct ProcessingChar()) getCharToProcess()
(byte*~) getCharToProcess::$10 zp[2]:24 4.0
(word~) getCharToProcess::$12 zp[2]:26 4.0
(word~) getCharToProcess::$13 zp[2]:24 4.0
(word~) getCharToProcess::$8 zp[2]:24 3.0
(word~) getCharToProcess::$9 zp[2]: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[1]:18 202.0
(byte) getCharToProcess::closest_dist#12 closest_dist zp[1]:18 2002.0
(byte) getCharToProcess::closest_dist#2 closest_dist zp[1]:18 1026.25
(byte) getCharToProcess::closest_dist#8 closest_dist zp[1]:18 202.0
(byte) getCharToProcess::closest_x
(byte) getCharToProcess::closest_x#7 closest_x zp[1]:23 517.3333333333334
(byte) getCharToProcess::closest_x#9 closest_x zp[1]:23 202.0
(byte) getCharToProcess::closest_y
(byte) getCharToProcess::closest_y#7 closest_y zp[1]:11 517.3333333333334
(byte) getCharToProcess::closest_y#9 closest_y zp[1]: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[2]:3 4.0
(byte*) getCharToProcess::dist_line#1 dist_line zp[2]:3 50.5
(byte*) getCharToProcess::dist_line#6 dist_line zp[2]: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[1]:23 228.7777777777778
(byte) getCharToProcess::return_x#7 return_x zp[1]: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[1]:11 216.6315789473684
(byte) getCharToProcess::return_y#7 return_y zp[1]:11 2002.0
(byte*) getCharToProcess::screen_line
(byte*) getCharToProcess::screen_line#0 screen_line zp[2]:28 2.0
(byte*) getCharToProcess::screen_line#1 screen_line zp[2]:28 40.4
(byte*) getCharToProcess::screen_line#4 screen_line zp[2]: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[1]:2 101.0
(byte) getCharToProcess::y#7 y zp[1]:2 80.2
(byte*) heap_head
(byte*) heap_head#1 heap_head zp[2]:24 1.0
(byte*) heap_head#5 heap_head zp[2]: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[2]:28 22.0
(byte*) initSprites::sp#2 sp zp[2]:28 14.666666666666666
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(word~) init_angle_screen::$11 zp[2]: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[1]:30 84.16666666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 angle_w zp[2]:16 202.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 screen zp[2]:24 3.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp[2]:24 4.0
(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp[2]:24 7.333333333333333
(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp[2]:24 9.04
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0 screen_topline zp[2]:3 2.0
(byte*) init_angle_screen::screen_topline#1 screen_topline zp[2]:3 5.5
(byte*) init_angle_screen::screen_topline#6 screen_topline zp[2]:3 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 x zp[1]:18 101.0
(byte) init_angle_screen::x#2 x zp[1]:18 28.857142857142858
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 xb zp[1]:23 202.0
(byte) init_angle_screen::xb#2 xb zp[1]:23 18.363636363636363
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 xw zp[2]:26 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 y zp[1]:2 16.5
(byte) init_angle_screen::y#5 y zp[1]:2 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 yw zp[2]: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::$10 reg byte a 22.0
(byte~) main::$11 reg byte a 22.0
(byte~) main::$12 reg byte a 22.0
(byte~) main::$13 reg byte a 22.0
(byte~) main::$14 reg byte a 22.0
(struct ProcessingChar~) main::$5
(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[1]:11 5.5
(byte*) main::dst
(byte*) main::dst#0 dst zp[2]:3 4.0
(byte*) main::dst#1 dst zp[2]:3 22.0
(byte*) main::dst#2 dst zp[2]:3 8.75
(byte) main::i
(byte) main::i#1 i zp[1]:2 16.5
(byte) main::i#2 i zp[1]:2 7.857142857142857
(byte*) main::src
(byte*) main::src#1 src zp[2]:28 11.0
(byte*) main::src#2 src zp[2]:28 14.666666666666666
(void*()) malloc((word) malloc::size)
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0 mem zp[2]:9 0.8
(void*) malloc::return
(word) malloc::size
(void()) processChars()
(byte~) processChars::$10 reg byte a 22.0
(byte~) processChars::$12 reg byte a 22.0
(word~) processChars::$13 zp[2]:36 11.0
(byte~) processChars::$15 reg byte x 6.6000000000000005
(word~) processChars::$23 zp[2]:34 11.0
(byte~) processChars::$24 reg byte a 22.0
(byte~) processChars::$27 reg byte a 22.0
(byte~) processChars::$29 reg byte a 22.0
(byte~) processChars::$32 reg byte a 22.0
(byte~) processChars::$33 reg byte a 22.0
(byte~) processChars::$34 reg byte a 22.0
(byte~) processChars::$62 reg byte a 22.0
(byte~) processChars::$63 reg byte a 22.0
(byte~) processChars::$64 reg byte a 22.0
(byte~) processChars::$65 reg byte a 22.0
(byte~) processChars::$9 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[1]:33 2.2
(byte) processChars::i
(byte) processChars::i#1 i zp[1]:5 16.5
(byte) processChars::i#10 i zp[1]:5 1.4042553191489362
(byte) processChars::numActive
(byte) processChars::numActive#1 numActive zp[1]:6 22.0
(byte) processChars::numActive#10 numActive zp[1]:6 0.7333333333333333
(byte) processChars::numActive#3 numActive zp[1]:6 11.0
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 processing zp[2]:31 0.3142857142857143
(byte) processChars::xchar
(byte) processChars::xchar#0 reg byte a 22.0
(word) processChars::xpos
(word) processChars::xpos#0 xpos zp[2]:34 2.0625
(byte) processChars::ychar
(byte) processChars::ychar#0 reg byte a 22.0
(byte) processChars::ypos
(byte) processChars::ypos#0 ypos zp[1]: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 zp[2]:12 3.0
(word~) startProcessing::$1 zp[2]:12 4.0
(word~) startProcessing::$11 zp[2]:19 4.0
(word~) startProcessing::$12 zp[2]:19 4.0
(word~) startProcessing::$13 zp[2]:19 4.0
(word~) startProcessing::$15 zp[2]:21 4.0
(word~) startProcessing::$16 zp[2]:21 4.0
(word~) startProcessing::$17 zp[2]:21 4.0
(byte~) startProcessing::$20 reg byte a 2.0
(word~) startProcessing::$21 zp[2]:24 0.5
(byte~) startProcessing::$27 reg byte a 2002.0
(byte~) startProcessing::$28 reg byte x 2.2222222222222228
(byte~) startProcessing::$29 reg byte a 2002.0
(byte~) startProcessing::$30 reg byte a 2002.0
(byte~) startProcessing::$31 reg byte a 2002.0
(byte~) startProcessing::$32 reg byte a 2002.0
(word~) startProcessing::$34 zp[2]:14 4.0
(word~) startProcessing::$35 zp[2]:12 4.0
(byte~) startProcessing::$37 reg byte a 4.0
(byte~) startProcessing::$38 reg byte a 4.0
(byte~) startProcessing::$39 reg byte a 4.0
(byte~) startProcessing::$40 reg byte a 4.0
(word~) startProcessing::$5 zp[2]:3 4.0
(word~) startProcessing::$6 zp[2]:3 4.0
(word~) startProcessing::$8 zp[2]:28 4.0
(word~) startProcessing::$9 zp[2]: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[1]:30 0.30952380952380953
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0 center_y zp[1]:11 0.24444444444444444
(byte) startProcessing::ch
(byte) startProcessing::ch#0 reg byte a 2.0
(byte*) startProcessing::chargenData
(byte*) startProcessing::chargenData#0 chargenData zp[2]:28 1.3333333333333333
(byte*) startProcessing::chargenData#1 chargenData zp[2]:28 67.33333333333333
(byte*) startProcessing::chargenData#2 chargenData zp[2]:28 101.66666666666666
(byte*) startProcessing::colPtr
(byte*) startProcessing::colPtr#0 colPtr zp[2]:16 4.0
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 freeIdx zp[1]: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[1]:2 202.0
(byte) startProcessing::i
(byte) startProcessing::i#1 i zp[1]:2 1501.5
(byte) startProcessing::i#2 i zp[1]: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[2]:12 2.0
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 screenPtr zp[2]:12 0.14285714285714285
(byte) startProcessing::spriteCol
(byte) startProcessing::spriteCol#0 spriteCol zp[1]:18 0.0975609756097561
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 spriteData zp[2]:3 0.5714285714285714
(byte*) startProcessing::spriteData#1 spriteData zp[2]:3 50.5
(byte*) startProcessing::spriteData#2 spriteData zp[2]:3 152.5
(byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 spritePtr zp[1]:23 0.3076923076923077
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0 spriteX zp[2]:19 0.3076923076923077
(word) startProcessing::spriteY
(word) startProcessing::spriteY#0 spriteY zp[2]: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[1]: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[2]: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#2 main::dst#0 main::dst#1 ]
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[1]:5 [ processChars::i#10 processChars::i#1 ]
zp[1]:6 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
zp[2]:7 [ SCREEN_COPY#0 ]
zp[2]:9 [ SCREEN_DIST#0 malloc::mem#0 ]
reg byte a [ main::$11 ]
reg byte a [ main::$12 ]
reg byte a [ main::$13 ]
reg byte a [ main::$14 ]
reg byte a [ main::$10 ]
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[1]: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::$29 ]
reg byte a [ startProcessing::$30 ]
reg byte a [ startProcessing::$31 ]
reg byte a [ startProcessing::$32 ]
reg byte a [ startProcessing::$27 ]
zp[2]:12 [ startProcessing::$0 startProcessing::$35 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[2]:14 [ startProcessing::$34 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
zp[2]: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[1]:18 [ startProcessing::spriteCol#0 init_angle_screen::x#2 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[2]: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[2]: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[1]:23 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 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::$20 ]
reg byte a [ startProcessing::$37 ]
reg byte a [ startProcessing::$38 ]
reg byte a [ startProcessing::$39 ]
reg byte a [ startProcessing::$40 ]
reg byte x [ startProcessing::$28 ]
zp[2]:24 [ getCharToProcess::$8 getCharToProcess::$13 getCharToProcess::$9 getCharToProcess::$10 startProcessing::$21 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[2]:26 [ init_angle_screen::xw#0 atan2_16::x#0 getCharToProcess::$12 ]
reg byte a [ init_angle_screen::$7 ]
zp[2]:28 [ init_angle_screen::yw#0 atan2_16::y#0 initSprites::sp#2 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#2 main::src#1 ]
zp[1]: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::$23 ]
reg byte a [ atan2_16::$22 ]
reg byte a [ processChars::$62 ]
reg byte a [ processChars::$63 ]
reg byte a [ processChars::$64 ]
reg byte a [ processChars::$65 ]
reg byte a [ processChars::$32 ]
zp[2]:31 [ processChars::processing#0 ]
zp[1]:33 [ processChars::bitmask#0 ]
zp[2]:34 [ processChars::xpos#0 processChars::$23 ]
reg byte a [ processChars::$9 ]
reg byte a [ processChars::$10 ]
reg byte x [ processChars::$15 ]
reg byte a [ processChars::$12 ]
zp[2]:36 [ processChars::$13 ]
zp[1]:38 [ processChars::ypos#0 ]
reg byte a [ processChars::$24 ]
reg byte a [ processChars::xchar#0 ]
reg byte a [ processChars::$33 ]
reg byte a [ processChars::$27 ]
reg byte a [ processChars::ychar#0 ]
reg byte a [ processChars::$34 ]
reg byte a [ processChars::$29 ]


FINAL ASSEMBLER
Score: 1113362

  // File Comments
// Clears start screen throwing around the letters (by turning them into sprites)
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__b1)
.pc = $80d "Program"
  // Global Constants & labels
  // 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 STATUS_FREE = 0
  .const STATUS_NEW = 1
  .const STATUS_PROCESSING = 2
  .const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
  .const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
  .const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
  .const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
  .const RASTER_IRQ_TOP = $30
  .const RASTER_IRQ_MIDDLE = $ff
  .const SIZEOF_STRUCT_PROCESSINGSPRITE = $e
  .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
  // Head of the heap. Moved backward each malloc()
  .label heap_head = $18
  .label SCREEN_COPY = 7
  .label SCREEN_DIST = 9
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
__b1:
  // malloc(1000)
  // [2] call malloc 
  // [235] phi from @1 to malloc [phi:@1->malloc]
  // [235] phi (byte*) heap_head#5 = (const byte*) HEAP_TOP [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 
  // [235] phi from @3 to malloc [phi:@3->malloc]
  // [235] 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::@1 [phi:main::@9->main::@1]
    // [12] phi (byte*) main::dst#2 = (byte*) main::dst#0 [phi:main::@9->main::@1#0] -- register_copy 
    // [12] phi (byte*) main::src#2 = (const byte*) SCREEN [phi:main::@9->main::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z src
    lda #>SCREEN
    sta.z src+1
  // Copy screen to screen copy
    // main::@1
  __b1:
    // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++)
    // [13] if((byte*) main::src#2!=(const byte*) SCREEN+(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
    // [14] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
    // [14] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
  // Init processing array
    // [14] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
    // [14] 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}
    // [15] (byte~) main::$11 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [16] (byte~) main::$12 ← (byte~) main::$11 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [17] (byte~) main::$13 ← (byte~) main::$12 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [18] (byte~) main::$14 ← (byte~) main::$13 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [19] (byte~) main::$10 ← (byte~) main::$14 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [20] *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3 
    tax
    ldy #0
  !:
    lda __2,y
    sta PROCESSING,x
    inx
    iny
    cpy #SIZEOF_STRUCT_PROCESSINGSPRITE
    bne !-
    // for( byte i: 0..NUM_PROCESSING-1 )
    // [21] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_PROCESSING-1+1
    cmp.z i
    bne __b3
    // [23] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
    // main::@4
    // initSprites()
    // [24] call initSprites 
    // [148] phi from main::@4 to initSprites [phi:main::@4->initSprites]
    jsr initSprites
    // [25] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
    // main::@10
    // setupRasterIrq(RASTER_IRQ_TOP, &irqTop)
    // [26] call setupRasterIrq 
    jsr setupRasterIrq
    // [27] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5]
  b1:
  // Main loop
    // main::@5
    // getCharToProcess()
    // [28] call getCharToProcess 
    jsr getCharToProcess
    // [29] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuyy=vbuz1 
    ldy.z getCharToProcess.return_x
    // [30] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuaa=vbuz1 
    lda.z getCharToProcess.return_y
    // [31] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1
    // main::@11
    // center = getCharToProcess()
    // [32] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
    // [33] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuaa 
    sta.z center_y
    // [34] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 -- vbuaa=vbuxx 
    txa
    // if(center.dist==NOT_FOUND)
    // [35] if((byte) main::center_dist#0!=(const byte) NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1 
    cmp #NOT_FOUND
    bne __b6
    // main::@7
    // (*(SCREEN+999)) = '.'
    // [36] *((const byte*) SCREEN+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2 
    lda #'.'
    sta SCREEN+$3e7
    // main::@8
  __b8:
    // (*(COLS+999))++;
    // [37] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp __b8
    // main::@6
  __b6:
    // startProcessing(center)
    // [38] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuyy 
    sty.z startProcessing.center_x
    // [39] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
    // [40] call startProcessing 
    // [44] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
    jsr startProcessing
    jmp b1
    // main::@2
  __b2:
    // *dst = *src
    // [41] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (src),y
    sta (dst),y
    // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++)
    // [42] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 
    inc.z src
    bne !+
    inc.z src+1
  !:
    // [43] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
    // [12] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@2->main::@1#0] -- register_copy 
    // [12] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@2->main::@1#1] -- register_copy 
    jmp __b1
}
  // startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zp($1e) center_x, byte zp($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 __21 = $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
    // Busy-wait while finding an empty slot in the PROCESSING array
    .label freeIdx = 2
    .label __34 = $e
    .label __35 = $c
    // [45] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
    // [45] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1 
    ldx #$ff
    // startProcessing::@1
  __b1:
    // [46] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
    // [46] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [46] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
    // [46] 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
    // [47] (byte~) startProcessing::$29 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [48] (byte~) startProcessing::$30 ← (byte~) startProcessing::$29 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [49] (byte~) startProcessing::$31 ← (byte~) startProcessing::$30 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [50] (byte~) startProcessing::$32 ← (byte~) startProcessing::$31 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [51] (byte~) startProcessing::$27 ← (byte~) startProcessing::$32 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // if(PROCESSING[i].status==STATUS_FREE)
    // [52] if(*((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$27)!=(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:
    // [53] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
    // [53] 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)
    // [54] 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
    // [55] (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
    // [56] (word~) startProcessing::$34 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z __0
    asl
    sta.z __34
    lda.z __0+1
    rol
    sta.z __34+1
    asl.z __34
    rol.z __34+1
    // [57] (word~) startProcessing::$35 ← (word~) startProcessing::$34 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z __35
    clc
    adc.z __34
    sta.z __35
    lda.z __35+1
    adc.z __34+1
    sta.z __35+1
    // [58] (word~) startProcessing::$1 ← (word~) startProcessing::$35 << (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
    // [59] (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
    // [60] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS + (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
    // [61] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (colPtr),y
    sta.z spriteCol
    // screenPtr = SCREEN+offset
    // [62] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN + (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
    // [63] (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
    // [64] (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
    // [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (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)
    // [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 
    lda (screenPtr),y
    // (word)ch
    // [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa 
    sta.z __8
    tya
    sta.z __8+1
    // (word)ch*8
    // [68] (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
    // [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (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
    // [71] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_CHARROM
    sta PROCPORT
    // [72] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
    // [72] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1 
    ldx #0
    // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy 
    // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy 
    // [72] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
    // [72] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy 
    // [72] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy 
    // [72] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy 
    // startProcessing::@6
  __b6:
    // *spriteData = *chargenData
    // [73] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (chargenData),y
    sta (spriteData),y
    // spriteData += 3
    // [74] (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++;
    // [75] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1 
    inc.z chargenData
    bne !+
    inc.z chargenData+1
  !:
    // for( byte i: 0..7)
    // [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx 
    inx
    // [77] 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
    // [78] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // asm
    // asm { cli  }
    cli
    // (word)center.x
    // [80] (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
    // [81] (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
    // [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (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
    // [83] (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
    // [84] (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
    // [85] (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
    // [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (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
    // [87] (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
    // [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z freeIdx
    axs #-[SPRITE_DATA/$40]
    stx.z spritePtr
    // spriteIdx*8
    // [89] (byte~) startProcessing::$20 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3 
    lda.z freeIdx
    asl
    asl
    asl
    // (word)(spriteIdx*8)
    // [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuaa 
    sta.z __21
    lda #0
    sta.z __21+1
    // PROCESSING[spriteIdx] = { spriteX, spriteY, (word)(spriteIdx*8), 60, spriteIdx, spritePtr, spriteCol, STATUS_NEW, screenPtr }
    // [91] (byte~) startProcessing::$37 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z freeIdx
    asl
    // [92] (byte~) startProcessing::$38 ← (byte~) startProcessing::$37 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [93] (byte~) startProcessing::$39 ← (byte~) startProcessing::$38 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [94] (byte~) startProcessing::$40 ← (byte~) startProcessing::$39 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z freeIdx
    // [95] (byte~) startProcessing::$28 ← (byte~) startProcessing::$40 << (byte) 1 -- vbuxx=vbuaa_rol_1 
    asl
    tax
    // [96] *((word*)(const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$28) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z spriteX
    sta PROCESSING,x
    lda.z spriteX+1
    sta PROCESSING+1,x
    // [97] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$28) ← (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
    // [98] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$28) ← (word~) startProcessing::$21 -- pwuc1_derefidx_vbuxx=vwuz1 
    lda.z __21
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
    lda.z __21+1
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
    // [99] *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$28) ← (word) $3c -- pwuc1_derefidx_vbuxx=vwuc2 
    lda #<$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
    lda #>$3c
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
    // [100] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$28) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z freeIdx
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
    // [101] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$28) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spritePtr
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
    // [102] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$28) ← (byte) startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1 
    lda.z spriteCol
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
    // [103] *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$28) ← (const byte) STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #STATUS_NEW
    sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
    // [104] *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$28) ← (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
    // }
    // [105] return 
    rts
    // startProcessing::@8
  __b8:
    // [106] (byte) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1 
    ldx.z freeIdx
    // [45] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
    // [45] 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 )
    // [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(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
    // [109] (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
    // [110] (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
    // [111] (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
    // [112] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
    // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z closest_y
    // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1 
    sta.z closest_x
    // [112] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1 
    sta.z y
    // [112] phi (byte) getCharToProcess::closest_dist#8 = (const byte) NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1 
    lda #NOT_FOUND
    sta.z closest_dist
    // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy 
    // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy 
    // getCharToProcess::@1
  __b1:
    // [113] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
    // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy 
    // [113] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1 
    ldy #0
    // getCharToProcess::@2
  __b2:
    // if(screen_line[x]!=' ')
    // [114] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 
    lda #' '
    cmp (screen_line),y
    bne !__b11+
    jmp __b11
  !__b11:
    // getCharToProcess::@4
    // dist = dist_line[x]
    // [115] (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)
    // [116] 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
    // [117] (byte) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuyy 
    sty.z return_x
    // [118] (byte) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2 
    lda.z y
    sta.z return_y
    // [119] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3]
    // [119] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy 
    // [119] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy 
    // [119] 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)
    // [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy 
    iny
    // [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne __b10
    // getCharToProcess::@6
    // screen_line += 40
    // [122] (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
    // [123] (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)
    // [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [125] 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)
    // [126] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1 
    cpx #NOT_FOUND
    beq __breturn
    // getCharToProcess::@8
    // (word)closest.y
    // [127] (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
    // [128] (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
    // [129] (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
    // [130] (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
    // [131] (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) = ' '
    // [132] *((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:
    // }
    // [133] return 
    rts
    // getCharToProcess::@9
  __b9:
    // [134] (byte) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [112] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
    // [112] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy 
    // [112] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy 
    // [112] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy 
    // [112] phi (byte) getCharToProcess::closest_dist#8 = (byte) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy 
    // [112] phi (byte*) getCharToProcess::dist_line#6 = (byte*) getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy 
    // [112] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy 
    jmp __b1
    // getCharToProcess::@10
  __b10:
    // [135] (byte) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 -- vbuz1=vbuxx 
    stx.z closest_dist
    // [113] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
    // [113] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy 
    // [113] phi (byte) getCharToProcess::closest_dist#2 = (byte) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy 
    // [113] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy 
    jmp __b2
    // getCharToProcess::@12
  __b12:
    // [136] (byte) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 -- vbuxx=vbuz1 
    ldx.z closest_dist
    jmp __b3
    // getCharToProcess::@11
  __b11:
    // [137] (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
    // [139] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // *PROCPORT = PROCPORT_RAM_IO
    // [140] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR
    // [141] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 
    // Disable CIA 1 Timer IRQ
    lda #CIA_INTERRUPT_CLEAR
    sta CIA1_INTERRUPT
    // setupRasterIrq::@1
    // *VIC_CONTROL &=0x7f
    // [142] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 
    lda #$7f
    and VIC_CONTROL
    sta VIC_CONTROL
    // setupRasterIrq::@2
    // *RASTER = <raster
    // [143] *((const byte*) RASTER) ← <(const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 
    lda #RASTER_IRQ_TOP
    sta RASTER
    // *IRQ_ENABLE = IRQ_RASTER
    // [144] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Enable Raster Interrupt
    lda #IRQ_RASTER
    sta IRQ_ENABLE
    // *HARDWARE_IRQ = irqRoutine
    // [145] *((const void()**) HARDWARE_IRQ) ← (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
    // }
    // [147] return 
    rts
}
  // initSprites
// Initialize sprites
initSprites: {
    .label sp = $1c
    // [149] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
    // [149] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1 
    lda #<SPRITE_DATA
    sta.z sp
    lda #>SPRITE_DATA
    sta.z sp+1
  // Clear sprite data
    // initSprites::@1
  __b1:
    // for( byte* sp = SPRITE_DATA; sp<SPRITE_DATA+NUM_PROCESSING*64; sp++)
    // [150] if((byte*) initSprites::sp#2<(const byte*) SPRITE_DATA+(const byte) NUM_PROCESSING*(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
  !:
    // [151] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
    // [151] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1 
    ldx #0
  // Initialize sprite registers
    // [151] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
    // [151] 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
    // [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #LIGHT_BLUE
    sta SPRITES_COLS,x
    // for( byte i: 0..7)
    // [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne __b3
    // initSprites::@4
    // *SPRITES_MC = 0
    // [155] *((const byte*) SPRITES_MC) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_MC
    // *SPRITES_EXPAND_X = 0
    // [156] *((const byte*) SPRITES_EXPAND_X) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta SPRITES_EXPAND_X
    // *SPRITES_EXPAND_Y = 0
    // [157] *((const byte*) SPRITES_EXPAND_Y) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta SPRITES_EXPAND_Y
    // initSprites::@return
    // }
    // [158] return 
    rts
    // initSprites::@2
  __b2:
    // *sp = 0
    // [159] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    tay
    sta (sp),y
    // for( byte* sp = SPRITE_DATA; sp<SPRITE_DATA+NUM_PROCESSING*64; sp++)
    // [160] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1 
    inc.z sp
    bne !+
    inc.z sp+1
  !:
    // [149] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1]
    // [149] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy 
    jmp __b1
}
  // 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* zp($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
    // [161] (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
    // [162] (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
    // [163] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
    // [163] 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 
    // [163] 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 
    // [163] 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
    // [163] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
    // [163] 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 
    // [163] 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 
    // [163] 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:
    // [164] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
    // [164] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [164] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // init_angle_screen::@2
  __b2:
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [165] if((byte) init_angle_screen::x#2<(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
    // [166] (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
    // [167] (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)
    // [168] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [169] 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
    // }
    // [170] return 
    rts
    // init_angle_screen::@3
  __b3:
    // x*2
    // [171] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // 39-x*2
    // [172] (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 }
    // [173] (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
    // [174] (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 }
    // [175] (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)
    // [176] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [177] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [178] call atan2_16 
    jsr atan2_16
    // [179] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    // init_angle_screen::@5
    // angle_w = atan2_16(xw, yw)
    // [180] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // angle_w+0x0080
    // [181] (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)
    // [182] (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
    // [183] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    ldy.z xb
    sta (screen_bottomline),y
    // -ang_w
    // [184] (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
    // [185] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_topline),y
    // 0x80+ang_w
    // [186] (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
    // [187] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // 0x80-ang_w
    // [188] (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
    // [189] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [190] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [191] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [164] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
    // [164] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [164] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // 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 zp($1a) x, signed word zp($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
    // [192] 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
    // [193] (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
    // [194] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
    // [194] 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
    // [195] 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
    // [196] (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
    // [197] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
    // [197] 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:
    // [198] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
    // [198] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z angle
    sta.z angle+1
    // [198] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    tax
    // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [198] 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)
    // [199] 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
    // [200] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
    // [200] 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
    // [201] (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)
    // [202] 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
    // [203] (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
    // [204] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
    // [204] 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)
    // [205] 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
    // [206] (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
    // [207] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
    // [207] 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
    // }
    // [208] return 
    rts
    // atan2_16::@11
  __b11:
    // [209] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [210] (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
    // [211] (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
    // [212] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
    // [212] 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 
    // [212] 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 
    // [212] 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)
    // [213] 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)
    // [214] 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
    // [215] (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
    // [216] (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
    // [217] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
    // [217] 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 
    // [217] 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)
    // [218] 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
    // [219] (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
    // [220] (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]
    // [221] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [222] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- 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
    // [223] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
    // [223] 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 
    // [223] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [223] 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)
    // [224] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [225] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
    cpx #CORDIC_ITERATIONS_16-1+1
    bne !__b12+
    jmp __b12
  !__b12:
    // [198] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
    // [198] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [198] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [198] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [198] 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
    // [226] (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
    // [227] (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]
    // [228] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [229] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- 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
    // [230] (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
    // [231] (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
    // [232] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
    dey
    dey
    jmp __b13
    // atan2_16::@4
  __b4:
    // [233] (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:
    // [234] (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
    // [236] (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
    // [237] (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
    // }
    // [238] 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
    // [240] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
    // irqBottom::@1
    // processChars()
    // [241] call processChars 
    // [246] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
    jsr processChars
    // irqBottom::@2
    // *RASTER = RASTER_IRQ_TOP
    // [242] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the top of the screen
    lda #RASTER_IRQ_TOP
    sta RASTER
    // *HARDWARE_IRQ = &irqTop
    // [243] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2 
    lda #<irqTop
    sta HARDWARE_IRQ
    lda #>irqTop
    sta HARDWARE_IRQ+1
    // *IRQ_STATUS = IRQ_RASTER
    // [244] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    // irqBottom::@return
    // }
    // [245] 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 __13 = $24
    .label __23 = $22
    .label processing = $1f
    .label bitmask = $21
    .label i = 5
    .label xpos = $22
    .label ypos = $26
    .label numActive = 6
    // [247] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
    // [247] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z numActive
    // [247] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1 
    sta.z i
    // [247] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
    // [247] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy 
    // [247] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy 
    // processChars::@1
  __b1:
    // PROCESSING+i
    // [248] (byte~) processChars::$62 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [249] (byte~) processChars::$63 ← (byte~) processChars::$62 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [250] (byte~) processChars::$64 ← (byte~) processChars::$63 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [251] (byte~) processChars::$65 ← (byte~) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1 
    clc
    adc.z i
    // [252] (byte~) processChars::$32 ← (byte~) processChars::$65 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // processing = PROCESSING+i
    // [253] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite*) PROCESSING + (byte~) processChars::$32 -- pssz1=pssc1_plus_vbuaa 
    clc
    adc #<PROCESSING
    sta.z processing
    lda #>PROCESSING
    adc #0
    sta.z processing+1
    // bitmask = 1<<processing->id
    // [254] (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
    tay
    lda #1
    cpy #0
    beq !e+
  !:
    asl
    dey
    bne !-
  !e:
    sta.z bitmask
    // if(processing->status!=STATUS_FREE)
    // [255] 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 
    lda #STATUS_FREE
    ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
    cmp (processing),y
    bne !__b2+
    jmp __b2
  !__b2:
    // processChars::@10
    // if(processing->status==STATUS_NEW)
    // [256] 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) = ' '
    // [257] *(*((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
  !:
    stx $ffff
    // *SPRITES_ENABLE |= bitmask
    // [258] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) | (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
    // [259] *((const byte*) SPRITES_COLS + *((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
    // [260] *((const byte*) SCREEN+(const word) SPRITE_PTRS + *((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
    // [261] *((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
    // [262] (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
    // [263] (byte~) processChars::$9 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1 
    lda.z xpos+1
    // if(>xpos)
    // [264] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1 
    // Set sprite position
    cmp #0
    beq !__b4+
    jmp __b4
  !__b4:
    // processChars::@8
    // 0xff ^ bitmask
    // [265] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // *SPRITES_XMSB &= 0xff ^ bitmask
    // [266] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) & (byte~) processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    and SPRITES_XMSB
    sta SPRITES_XMSB
    // processChars::@5
  __b5:
    // i*2
    // [267] (byte~) processChars::$15 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1 
    lda.z i
    asl
    tax
    // (byte)xpos
    // [268] (byte~) processChars::$12 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1 
    lda.z xpos
    // SPRITES_XPOS[i*2] = (byte)xpos
    // [269] *((const byte*) SPRITES_XPOS + (byte~) processChars::$15) ← (byte~) processChars::$12 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SPRITES_XPOS,x
    // processing->y>>4
    // [270] (word~) processChars::$13 ← *((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 __13
    iny
    lda (processing),y
    sta.z __13+1
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    lsr.z __13+1
    ror.z __13
    // ypos = (byte)(processing->y>>4)
    // [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 
    lda.z __13
    sta.z ypos
    // SPRITES_YPOS[i*2] = ypos
    // [272] *((const byte*) SPRITES_YPOS + (byte~) processChars::$15) ← (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  )
    // [273] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST) 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
    // [274] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST) 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
    // [275] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST) 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
    // [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST) 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
    // [277] (word~) processChars::$23 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3 
    lsr.z __23+1
    ror.z __23
    lsr.z __23+1
    ror.z __23
    lsr.z __23+1
    ror.z __23
    // (byte)(xpos/8)
    // [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuaa=_byte_vwuz1 
    lda.z __23
    // xchar = (byte)(xpos/8) - BORDER_XPOS_LEFT/8
    // [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_XPOS_LEFT/8
    // processing->vx += VXSIN[xchar]
    // [280] (byte~) processChars::$33 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [281] *((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*) VXSIN + (byte~) processChars::$33) -- 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
    // [282] *((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)
    // [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    // ychar = (byte)(ypos/8) - BORDER_YPOS_TOP/8
    // [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #BORDER_YPOS_TOP/8
    // processing->vy +=   VYSIN[ychar]
    // [285] (byte~) processChars::$34 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [286] *((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*) VYSIN + (byte~) processChars::$34) -- 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
    // [287] *((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++;
    // [288] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1 
    inc.z numActive
    // [289] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
    // [289] 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 )
    // [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(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
    // }
    // [292] return 
    rts
    // processChars::@6
  __b6:
    // processing->status = STATUS_FREE
    // [293] *((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
    // [294] (byte~) processChars::$29 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1 
    lda #$ff
    eor.z bitmask
    // *SPRITES_ENABLE &= 0xff ^ bitmask
    // [295] *((const byte*) SPRITES_ENABLE) ← *((const byte*) SPRITES_ENABLE) & (byte~) processChars::$29 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa 
    // Disable the sprite
    and SPRITES_ENABLE
    sta SPRITES_ENABLE
    jmp __b7
    // processChars::@4
  __b4:
    // *SPRITES_XMSB |= bitmask
    // [296] *((const byte*) SPRITES_XMSB) ← *((const byte*) SPRITES_XMSB) | (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
    // [298] *((const byte*) RASTER) ← (const byte) RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 
    // Trigger IRQ at the middle of the screen
    lda #RASTER_IRQ_MIDDLE
    sta RASTER
    // *HARDWARE_IRQ = &irqBottom
    // [299] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2 
    lda #<irqBottom
    sta HARDWARE_IRQ
    lda #>irqBottom
    sta HARDWARE_IRQ+1
    // *IRQ_STATUS = IRQ_RASTER
    // [300] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 
    // Acknowledge the IRQ
    lda #IRQ_RASTER
    sta IRQ_STATUS
    // irqTop::@return
    // }
    // [301] 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
  __2: .word 0, 0, 0, 0
  .byte 0, 0, 0, STATUS_FREE
  .word 0

