Resolved forward reference bob_charset_next_id to (byte) bob_charset_next_id
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 (byte**) renderBobCleanupNext ← ++ (byte**) renderBobCleanupNext
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 *((const word*) MUL40 + (byte) renderBobInit::y)
Fixing pointer array-indexing *((const byte**) RENDERBOB_CLEANUP + (byte) renderBobInit::i)
Fixing pointer array-indexing *((const word*) MUL40 + (byte) renderBob::y_char_offset)
Fixing pointer array-indexing *((const byte**) RENDERBOB_CLEANUP + (byte) renderBobCleanup::i)
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*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean condition (byte~) main::$17
Warning! Adding boolean cast to non-boolean condition (number~) protoBobShiftRight::$1
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean sub-expression (byte~) main::$15
Warning! Adding boolean cast to non-boolean sub-expression (byte) charsetFindOrAddGlyph::found
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (signed byte*) COS
Identified constant variable (signed word) main::origY
Identified constant variable (signed word) main::rowOffsetX
Identified constant variable (signed word) main::colOffsetX
Identified constant variable (signed word) main::colOffsetY
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call call mulf8s_prepare (signed byte) mulf8s::a 
Inlined call call vicSelectGfxBank (const byte*) BOB_SCREEN 
Inlined call (byte~) main::$4 ← call toD018 (const byte*) BOB_SCREEN (const byte*) BOB_CHARSET 
Inlined call call vicSelectGfxBank (const byte*) BASIC_SCREEN 
Inlined call (byte~) main::$7 ← call toD018 (const byte*) BASIC_SCREEN (const byte*) BASIC_CHARSET 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) memset::@7
Culled Empty Block (label) memset::@6
Culled Empty Block (label) memset::@8
Culled Empty Block (label) memset::@9
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) keyboard_matrix_read::@1
Culled Empty Block (label) @11
Culled Empty Block (label) keyboard_key_pressed::@1
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) @21
Culled Empty Block (label) @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) @27
Culled Empty Block (label) @28
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Culled Empty Block (label) @35
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Culled Empty Block (label) @40
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @43
Culled Empty Block (label) @44
Culled Empty Block (label) @45
Culled Empty Block (label) @46
Culled Empty Block (label) @47
Culled Empty Block (label) @48
Culled Empty Block (label) @49
Culled Empty Block (label) @50
Culled Empty Block (label) mulf_init::@5
Culled Empty Block (label) mulf_init::@6
Culled Empty Block (label) mulf_init::@8
Culled Empty Block (label) mulf_init::@13
Culled Empty Block (label) mulf_init::@14
Culled Empty Block (label) mulf_init::@16
Culled Empty Block (label) @51
Culled Empty Block (label) @52
Culled Empty Block (label) @53
Culled Empty Block (label) @54
Culled Empty Block (label) @55
Culled Empty Block (label) @56
Culled Empty Block (label) @57
Culled Empty Block (label) @58
Culled Empty Block (label) @59
Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@1
Culled Empty Block (label) main::vicSelectGfxBank1_@return
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@14
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@16
Culled Empty Block (label) main::@18
Culled Empty Block (label) main::@20
Culled Empty Block (label) main::vicSelectGfxBank2_toDd001_@1
Culled Empty Block (label) main::vicSelectGfxBank2_@return
Culled Empty Block (label) main::toD0182_@1
Culled Empty Block (label) main::@21
Culled Empty Block (label) main::@22
Culled Empty Block (label) renderBobInit::@4
Culled Empty Block (label) @61
Culled Empty Block (label) @62
Culled Empty Block (label) @63
Culled Empty Block (label) prepareBobs::@17
Culled Empty Block (label) prepareBobs::@3
Culled Empty Block (label) prepareBobs::@18
Culled Empty Block (label) prepareBobs::@14
Culled Empty Block (label) prepareBobs::@15
Culled Empty Block (label) prepareBobs::@10
Culled Empty Block (label) prepareBobs::@11
Culled Empty Block (label) prepareBobs::@12
Culled Empty Block (label) prepareBobs::@13
Culled Empty Block (label) prepareBobs::@16
Culled Empty Block (label) @64
Culled Empty Block (label) protoBobShiftRight::@9
Culled Empty Block (label) protoBobShiftRight::@3
Culled Empty Block (label) protoBobShiftRight::@10
Culled Empty Block (label) protoBobShiftRight::@11
Culled Empty Block (label) protoBobShiftRight::@12
Culled Empty Block (label) protoBobShiftRight::@14
Culled Empty Block (label) protoBobShiftRight::@15
Culled Empty Block (label) @65
Culled Empty Block (label) protoBobShiftDown::@4
Culled Empty Block (label) protoBobShiftDown::@5
Culled Empty Block (label) protoBobShiftDown::@6
Culled Empty Block (label) charsetFindOrAddGlyph::@17
Culled Empty Block (label) charsetFindOrAddGlyph::@18
Culled Empty Block (label) charsetFindOrAddGlyph::@9
Culled Empty Block (label) charsetFindOrAddGlyph::@6
Culled Empty Block (label) charsetFindOrAddGlyph::@10
Culled Empty Block (label) charsetFindOrAddGlyph::@12
Culled Empty Block (label) charsetFindOrAddGlyph::@13
Culled Empty Block (label) charsetFindOrAddGlyph::@15
Culled Empty Block (label) charsetFindOrAddGlyph::@19
Culled Empty Block (label) charsetFindOrAddGlyph::@23
Culled Empty Block (label) charsetFindOrAddGlyph::@24
Culled Empty Block (label) charsetFindOrAddGlyph::@25
Culled Empty Block (label) charsetFindOrAddGlyph::@26
Culled Empty Block (label) @68

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@60

(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset]  from main::@24
  (byte) memset::c#4 ← phi( main::@24/(byte) memset::c#0 )
  (void*) memset::str#3 ← phi( main::@24/(void*) memset::str#0 )
  (word) memset::num#1 ← phi( main::@24/(word) memset::num#0 )
  (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
  (bool~) memset::$1 ← ! (bool~) memset::$0
  if((bool~) memset::$1) goto memset::@1
  to:memset::@2
memset::@1: scope:[memset]  from memset memset::@4
  (void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@4/(void*) memset::str#4 )
  (void*) memset::return#0 ← (void*) memset::str#1
  to:memset::@return
memset::@2: scope:[memset]  from memset
  (byte) memset::c#3 ← phi( memset/(byte) memset::c#4 )
  (word) memset::num#2 ← phi( memset/(word) memset::num#1 )
  (void*) memset::str#2 ← phi( memset/(void*) memset::str#3 )
  (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#2
  (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#2
  (byte*) memset::end#0 ← (byte*~) memset::$3
  (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2
  to:memset::@4
memset::@4: scope:[memset]  from memset::@2 memset::@5
  (byte) memset::c#2 ← phi( memset::@2/(byte) memset::c#3 memset::@5/(byte) memset::c#1 )
  (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@5/(void*) memset::str#5 )
  (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 )
  (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 )
  (bool~) memset::$4 ← (byte*) memset::dst#2 != (byte*) memset::end#1
  if((bool~) memset::$4) goto memset::@5
  to:memset::@1
memset::@5: scope:[memset]  from memset::@4
  (void*) memset::str#5 ← phi( memset::@4/(void*) memset::str#4 )
  (byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 )
  (byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 )
  (byte) memset::c#1 ← phi( memset::@4/(byte) memset::c#2 )
  *((byte*) memset::dst#3) ← (byte) memset::c#1
  (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
  to:memset::@4
memset::@return: scope:[memset]  from memset::@1
  (void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 )
  (void*) memset::return#1 ← (void*) memset::return#3
  return 
  to:@return

(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
keyboard_matrix_read: scope:[keyboard_matrix_read]  from keyboard_key_pressed
  (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 )
  *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1)
  (byte~) keyboard_matrix_read::$0 ← ~ *((const byte*) CIA1_PORT_B)
  (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0
  (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0
  to:keyboard_matrix_read::@return
keyboard_matrix_read::@return: scope:[keyboard_matrix_read]  from keyboard_matrix_read
  (byte) keyboard_matrix_read::return#3 ← phi( keyboard_matrix_read/(byte) keyboard_matrix_read::return#0 )
  (byte) keyboard_matrix_read::return#1 ← (byte) keyboard_matrix_read::return#3
  return 
  to:@return

(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
keyboard_key_pressed: scope:[keyboard_key_pressed]  from main::@17 main::@9
  (byte) keyboard_key_pressed::key#2 ← phi( main::@17/(byte) keyboard_key_pressed::key#1 main::@9/(byte) keyboard_key_pressed::key#0 )
  (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (number) 7
  (byte) keyboard_key_pressed::colidx#0 ← (number~) keyboard_key_pressed::$0
  (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#2 >> (number) 3
  (byte) keyboard_key_pressed::rowidx#0 ← (byte~) keyboard_key_pressed::$1
  (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0
  call keyboard_matrix_read 
  (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#1
  to:keyboard_key_pressed::@2
keyboard_key_pressed::@2: scope:[keyboard_key_pressed]  from keyboard_key_pressed
  (byte) keyboard_key_pressed::colidx#1 ← phi( keyboard_key_pressed/(byte) keyboard_key_pressed::colidx#0 )
  (byte) keyboard_matrix_read::return#4 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::return#2 )
  (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#4
  (byte~) keyboard_key_pressed::$3 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_key_pressed::colidx#1)
  (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$3
  to:keyboard_key_pressed::@return
keyboard_key_pressed::@return: scope:[keyboard_key_pressed]  from keyboard_key_pressed::@2
  (byte) keyboard_key_pressed::return#4 ← phi( keyboard_key_pressed::@2/(byte) keyboard_key_pressed::return#0 )
  (byte) keyboard_key_pressed::return#1 ← (byte) keyboard_key_pressed::return#4
  return 
  to:@return

(void()) mulf_init()
mulf_init: scope:[mulf_init]  from main
  (word) mulf_init::sqr#0 ← (word) 0
  (byte) mulf_init::x_2#0 ← (byte) 0
  (byte) mulf_init::c#0 ← (byte) 0
  (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1
  (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1
  to:mulf_init::@1
mulf_init::@1: scope:[mulf_init]  from mulf_init mulf_init::@4
  (byte) mulf_init::x_2#5 ← phi( mulf_init/(byte) mulf_init::x_2#0 mulf_init::@4/(byte) mulf_init::x_2#2 )
  (byte*) mulf_init::sqr1_hi#5 ← phi( mulf_init/(byte*) mulf_init::sqr1_hi#0 mulf_init::@4/(byte*) mulf_init::sqr1_hi#1 )
  (word) mulf_init::sqr#6 ← phi( mulf_init/(word) mulf_init::sqr#0 mulf_init::@4/(word) mulf_init::sqr#1 )
  (byte) mulf_init::c#3 ← phi( mulf_init/(byte) mulf_init::c#0 mulf_init::@4/(byte) mulf_init::c#4 )
  (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(byte*) mulf_init::sqr1_lo#0 mulf_init::@4/(byte*) mulf_init::sqr1_lo#1 )
  (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200
  if((bool~) mulf_init::$0) goto mulf_init::@2
  to:mulf_init::@3
mulf_init::@2: scope:[mulf_init]  from mulf_init::@1
  (byte) mulf_init::x_2#4 ← phi( mulf_init::@1/(byte) mulf_init::x_2#5 )
  (byte*) mulf_init::sqr1_hi#3 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_hi#5 )
  (byte*) mulf_init::sqr1_lo#4 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_lo#2 )
  (word) mulf_init::sqr#5 ← phi( mulf_init::@1/(word) mulf_init::sqr#6 )
  (byte) mulf_init::c#2 ← phi( mulf_init::@1/(byte) mulf_init::c#3 )
  (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
  (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1
  (bool~) mulf_init::$2 ← (number~) mulf_init::$1 == (number) 0
  (bool~) mulf_init::$3 ← ! (bool~) mulf_init::$2
  if((bool~) mulf_init::$3) goto mulf_init::@4
  to:mulf_init::@7
mulf_init::@3: scope:[mulf_init]  from mulf_init::@1
  (byte) mulf_init::x_255#0 ← (byte)(number) -1
  (byte) mulf_init::dir#0 ← (byte) $ff
  (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi
  (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo
  to:mulf_init::@9
mulf_init::@4: scope:[mulf_init]  from mulf_init::@2 mulf_init::@7
  (byte) mulf_init::c#4 ← phi( mulf_init::@2/(byte) mulf_init::c#1 mulf_init::@7/(byte) mulf_init::c#5 )
  (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#4 mulf_init::@7/(byte) mulf_init::x_2#1 )
  (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_hi#3 mulf_init::@7/(byte*) mulf_init::sqr1_hi#4 )
  (byte*) mulf_init::sqr1_lo#3 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_lo#4 mulf_init::@7/(byte*) mulf_init::sqr1_lo#5 )
  (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#5 mulf_init::@7/(word) mulf_init::sqr#2 )
  (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3
  *((byte*) mulf_init::sqr1_lo#3) ← (byte~) mulf_init::$4
  (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3
  *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5
  (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
  (word~) mulf_init::$6 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
  (word) mulf_init::sqr#1 ← (word~) mulf_init::$6
  (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#3
  to:mulf_init::@1
mulf_init::@7: scope:[mulf_init]  from mulf_init::@2
  (byte) mulf_init::c#5 ← phi( mulf_init::@2/(byte) mulf_init::c#1 )
  (byte*) mulf_init::sqr1_hi#4 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_hi#3 )
  (byte*) mulf_init::sqr1_lo#5 ← phi( mulf_init::@2/(byte*) mulf_init::sqr1_lo#4 )
  (word) mulf_init::sqr#4 ← phi( mulf_init::@2/(word) mulf_init::sqr#5 )
  (byte) mulf_init::x_2#3 ← phi( mulf_init::@2/(byte) mulf_init::x_2#4 )
  (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
  (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
  to:mulf_init::@4
mulf_init::@9: scope:[mulf_init]  from mulf_init::@12 mulf_init::@3
  (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#4 mulf_init::@3/(byte) mulf_init::dir#0 )
  (byte*) mulf_init::sqr2_hi#3 ← phi( mulf_init::@12/(byte*) mulf_init::sqr2_hi#4 mulf_init::@3/(byte*) mulf_init::sqr2_hi#0 )
  (byte) mulf_init::x_255#3 ← phi( mulf_init::@12/(byte) mulf_init::x_255#4 mulf_init::@3/(byte) mulf_init::x_255#0 )
  (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@12/(byte*) mulf_init::sqr2_lo#1 mulf_init::@3/(byte*) mulf_init::sqr2_lo#0 )
  (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff
  if((bool~) mulf_init::$7) goto mulf_init::@10
  to:mulf_init::@11
mulf_init::@10: scope:[mulf_init]  from mulf_init::@9
  (byte) mulf_init::dir#2 ← phi( mulf_init::@9/(byte) mulf_init::dir#3 )
  (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@9/(byte*) mulf_init::sqr2_hi#3 )
  (byte*) mulf_init::sqr2_lo#3 ← phi( mulf_init::@9/(byte*) mulf_init::sqr2_lo#2 )
  (byte) mulf_init::x_255#2 ← phi( mulf_init::@9/(byte) mulf_init::x_255#3 )
  *((byte*) mulf_init::sqr2_lo#3) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2)
  *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2)
  (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
  (byte~) mulf_init::$8 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
  (byte) mulf_init::x_255#1 ← (byte~) mulf_init::$8
  (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0
  (bool~) mulf_init::$10 ← ! (bool~) mulf_init::$9
  if((bool~) mulf_init::$10) goto mulf_init::@12
  to:mulf_init::@15
mulf_init::@11: scope:[mulf_init]  from mulf_init::@9
  *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100)
  *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(number) $100)
  to:mulf_init::@return
mulf_init::@12: scope:[mulf_init]  from mulf_init::@10 mulf_init::@15
  (byte) mulf_init::dir#4 ← phi( mulf_init::@10/(byte) mulf_init::dir#2 mulf_init::@15/(byte) mulf_init::dir#1 )
  (byte*) mulf_init::sqr2_hi#4 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_hi#1 mulf_init::@15/(byte*) mulf_init::sqr2_hi#5 )
  (byte) mulf_init::x_255#4 ← phi( mulf_init::@10/(byte) mulf_init::x_255#1 mulf_init::@15/(byte) mulf_init::x_255#5 )
  (byte*) mulf_init::sqr2_lo#4 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_lo#3 mulf_init::@15/(byte*) mulf_init::sqr2_lo#5 )
  (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#4
  to:mulf_init::@9
mulf_init::@15: scope:[mulf_init]  from mulf_init::@10
  (byte*) mulf_init::sqr2_hi#5 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_hi#1 )
  (byte) mulf_init::x_255#5 ← phi( mulf_init::@10/(byte) mulf_init::x_255#1 )
  (byte*) mulf_init::sqr2_lo#5 ← phi( mulf_init::@10/(byte*) mulf_init::sqr2_lo#3 )
  (byte) mulf_init::dir#1 ← (number) 1
  to:mulf_init::@12
mulf_init::@return: scope:[mulf_init]  from mulf_init::@11
  return 
  to:@return

(void()) main()
main: scope:[main]  from @69
  (byte**) renderBobCleanupNext#50 ← phi( @69/(byte**) renderBobCleanupNext#19 )
  (byte) bob_charset_next_id#28 ← phi( @69/(byte) bob_charset_next_id#27 )
  (byte) progress_idx#28 ← phi( @69/(byte) progress_idx#27 )
  (byte*) progress_cursor#28 ← phi( @69/(byte*) progress_cursor#27 )
  call mulf_init 
  to:main::@27
main::@27: scope:[main]  from main
  (byte**) renderBobCleanupNext#49 ← phi( main/(byte**) renderBobCleanupNext#50 )
  (byte) bob_charset_next_id#19 ← phi( main/(byte) bob_charset_next_id#28 )
  (byte) progress_idx#22 ← phi( main/(byte) progress_idx#28 )
  (byte*) progress_cursor#21 ← phi( main/(byte*) progress_cursor#28 )
  call prepareBobs 
  to:main::@28
main::@28: scope:[main]  from main::@27
  (byte**) renderBobCleanupNext#48 ← phi( main::@27/(byte**) renderBobCleanupNext#49 )
  (byte) bob_charset_next_id#10 ← phi( main::@27/(byte) bob_charset_next_id#5 )
  (byte) progress_idx#12 ← phi( main::@27/(byte) progress_idx#4 )
  (byte*) progress_cursor#11 ← phi( main::@27/(byte*) progress_cursor#4 )
  (byte*) progress_cursor#0 ← (byte*) progress_cursor#11
  (byte) progress_idx#0 ← (byte) progress_idx#12
  (byte) bob_charset_next_id#0 ← (byte) bob_charset_next_id#10
  call renderBobInit 
  to:main::@29
main::@29: scope:[main]  from main::@28
  (byte) bob_charset_next_id#77 ← phi( main::@28/(byte) bob_charset_next_id#0 )
  (byte) progress_idx#69 ← phi( main::@28/(byte) progress_idx#0 )
  (byte*) progress_cursor#69 ← phi( main::@28/(byte*) progress_cursor#0 )
  (byte**) renderBobCleanupNext#47 ← phi( main::@28/(byte**) renderBobCleanupNext#48 )
  (byte*) main::vicSelectGfxBank1_gfx#0 ← (const byte*) BOB_SCREEN
  to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main]  from main::@29
  (byte) bob_charset_next_id#76 ← phi( main::@29/(byte) bob_charset_next_id#77 )
  (byte) progress_idx#68 ← phi( main::@29/(byte) progress_idx#69 )
  (byte*) progress_cursor#68 ← phi( main::@29/(byte*) progress_cursor#69 )
  (byte**) renderBobCleanupNext#46 ← phi( main::@29/(byte**) renderBobCleanupNext#47 )
  (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main::@29/(byte*) main::vicSelectGfxBank1_gfx#0 )
  *((const byte*) CIA2_PORT_A_DDR) ← (number) 3
  (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1
  to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main]  from main::vicSelectGfxBank1
  (byte) bob_charset_next_id#74 ← phi( main::vicSelectGfxBank1/(byte) bob_charset_next_id#76 )
  (byte) progress_idx#66 ← phi( main::vicSelectGfxBank1/(byte) progress_idx#68 )
  (byte*) progress_cursor#66 ← phi( main::vicSelectGfxBank1/(byte*) progress_cursor#68 )
  (byte**) renderBobCleanupNext#44 ← phi( main::vicSelectGfxBank1/(byte**) renderBobCleanupNext#46 )
  (byte*) main::vicSelectGfxBank1_toDd001_gfx#1 ← phi( main::vicSelectGfxBank1/(byte*) main::vicSelectGfxBank1_toDd001_gfx#0 )
  (word~) main::vicSelectGfxBank1_toDd001_$0 ← ((word)) (byte*) main::vicSelectGfxBank1_toDd001_gfx#1
  (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (word~) main::vicSelectGfxBank1_toDd001_$0
  (number~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (number) $40
  (number~) main::vicSelectGfxBank1_toDd001_$3 ← (number) 3 ^ (number~) main::vicSelectGfxBank1_toDd001_$2
  (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (number~) main::vicSelectGfxBank1_toDd001_$3
  to:main::vicSelectGfxBank1_toDd001_@return
main::vicSelectGfxBank1_toDd001_@return: scope:[main]  from main::vicSelectGfxBank1_toDd001
  (byte) bob_charset_next_id#72 ← phi( main::vicSelectGfxBank1_toDd001/(byte) bob_charset_next_id#74 )
  (byte) progress_idx#64 ← phi( main::vicSelectGfxBank1_toDd001/(byte) progress_idx#66 )
  (byte*) progress_cursor#64 ← phi( main::vicSelectGfxBank1_toDd001/(byte*) progress_cursor#66 )
  (byte**) renderBobCleanupNext#42 ← phi( main::vicSelectGfxBank1_toDd001/(byte**) renderBobCleanupNext#44 )
  (byte) main::vicSelectGfxBank1_toDd001_return#2 ← phi( main::vicSelectGfxBank1_toDd001/(byte) main::vicSelectGfxBank1_toDd001_return#0 )
  (byte) main::vicSelectGfxBank1_toDd001_return#1 ← (byte) main::vicSelectGfxBank1_toDd001_return#2
  to:main::vicSelectGfxBank1_@1
main::vicSelectGfxBank1_@1: scope:[main]  from main::vicSelectGfxBank1_toDd001_@return
  (byte) bob_charset_next_id#70 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) bob_charset_next_id#72 )
  (byte) progress_idx#62 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) progress_idx#64 )
  (byte*) progress_cursor#62 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte*) progress_cursor#64 )
  (byte**) renderBobCleanupNext#40 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte**) renderBobCleanupNext#42 )
  (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 )
  (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3
  *((const byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0
  to:main::@23
main::@23: scope:[main]  from main::vicSelectGfxBank1_@1
  (byte) bob_charset_next_id#68 ← phi( main::vicSelectGfxBank1_@1/(byte) bob_charset_next_id#70 )
  (byte) progress_idx#60 ← phi( main::vicSelectGfxBank1_@1/(byte) progress_idx#62 )
  (byte*) progress_cursor#60 ← phi( main::vicSelectGfxBank1_@1/(byte*) progress_cursor#62 )
  (byte**) renderBobCleanupNext#38 ← phi( main::vicSelectGfxBank1_@1/(byte**) renderBobCleanupNext#40 )
  (byte*) main::toD0181_screen#0 ← (const byte*) BOB_SCREEN
  (byte*) main::toD0181_gfx#0 ← (const byte*) BOB_CHARSET
  to:main::toD0181
main::toD0181: scope:[main]  from main::@23
  (byte) bob_charset_next_id#66 ← phi( main::@23/(byte) bob_charset_next_id#68 )
  (byte) progress_idx#58 ← phi( main::@23/(byte) progress_idx#60 )
  (byte*) progress_cursor#58 ← phi( main::@23/(byte*) progress_cursor#60 )
  (byte**) renderBobCleanupNext#36 ← phi( main::@23/(byte**) renderBobCleanupNext#38 )
  (byte*) main::toD0181_gfx#1 ← phi( main::@23/(byte*) main::toD0181_gfx#0 )
  (byte*) main::toD0181_screen#1 ← phi( main::@23/(byte*) main::toD0181_screen#0 )
  (word~) main::toD0181_$0 ← ((word)) (byte*) main::toD0181_screen#1
  (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
  (number~) main::toD0181_$2 ← (number~) main::toD0181_$1 * (number) 4
  (number~) main::toD0181_$3 ← > (number~) main::toD0181_$2
  (word~) main::toD0181_$4 ← ((word)) (byte*) main::toD0181_gfx#1
  (byte~) main::toD0181_$5 ← > (word~) main::toD0181_$4
  (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
  (number~) main::toD0181_$7 ← (number~) main::toD0181_$6 & (number) $f
  (number~) main::toD0181_$8 ← (number~) main::toD0181_$3 | (number~) main::toD0181_$7
  (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8
  to:main::toD0181_@return
main::toD0181_@return: scope:[main]  from main::toD0181
  (byte) bob_charset_next_id#64 ← phi( main::toD0181/(byte) bob_charset_next_id#66 )
  (byte) progress_idx#56 ← phi( main::toD0181/(byte) progress_idx#58 )
  (byte*) progress_cursor#56 ← phi( main::toD0181/(byte*) progress_cursor#58 )
  (byte**) renderBobCleanupNext#34 ← phi( main::toD0181/(byte**) renderBobCleanupNext#36 )
  (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 )
  (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2
  to:main::@24
main::@24: scope:[main]  from main::toD0181_@return
  (byte) bob_charset_next_id#62 ← phi( main::toD0181_@return/(byte) bob_charset_next_id#64 )
  (byte) progress_idx#54 ← phi( main::toD0181_@return/(byte) progress_idx#56 )
  (byte*) progress_cursor#54 ← phi( main::toD0181_@return/(byte*) progress_cursor#56 )
  (byte**) renderBobCleanupNext#31 ← phi( main::toD0181_@return/(byte**) renderBobCleanupNext#34 )
  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
  (byte~) main::$4 ← (byte) main::toD0181_return#3
  *((const byte*) D018) ← (byte~) main::$4
  (void*) memset::str#0 ← (void*)(const byte*) BOB_SCREEN
  (byte) memset::c#0 ← (number) 0
  (word) memset::num#0 ← (number) $3e8
  call memset 
  (void*) memset::return#2 ← (void*) memset::return#1
  to:main::@30
main::@30: scope:[main]  from main::@24
  (byte) bob_charset_next_id#60 ← phi( main::@24/(byte) bob_charset_next_id#62 )
  (byte) progress_idx#52 ← phi( main::@24/(byte) progress_idx#54 )
  (byte*) progress_cursor#52 ← phi( main::@24/(byte*) progress_cursor#54 )
  (byte**) renderBobCleanupNext#28 ← phi( main::@24/(byte**) renderBobCleanupNext#31 )
  (signed word) main::origX#0 ← (signed word) $a00
  (signed word) main::rowOffsetY#0 ← (signed word) $100
  to:main::@1
main::@1: scope:[main]  from main::@30 main::@33
  (byte) bob_charset_next_id#58 ← phi( main::@30/(byte) bob_charset_next_id#60 main::@33/(byte) bob_charset_next_id#59 )
  (byte) progress_idx#50 ← phi( main::@30/(byte) progress_idx#52 main::@33/(byte) progress_idx#51 )
  (byte*) progress_cursor#50 ← phi( main::@30/(byte*) progress_cursor#52 main::@33/(byte*) progress_cursor#51 )
  (signed word) main::rowOffsetY#10 ← phi( main::@30/(signed word) main::rowOffsetY#0 main::@33/(signed word) main::rowOffsetY#11 )
  (signed word) main::origX#8 ← phi( main::@30/(signed word) main::origX#0 main::@33/(signed word) main::origX#10 )
  (byte**) renderBobCleanupNext#24 ← phi( main::@30/(byte**) renderBobCleanupNext#28 main::@33/(byte**) renderBobCleanupNext#29 )
  if(true) goto main::@4
  to:main::@17
main::@4: scope:[main]  from main::@1 main::@4
  (byte) bob_charset_next_id#75 ← phi( main::@1/(byte) bob_charset_next_id#58 main::@4/(byte) bob_charset_next_id#75 )
  (byte) progress_idx#67 ← phi( main::@1/(byte) progress_idx#50 main::@4/(byte) progress_idx#67 )
  (byte*) progress_cursor#67 ← phi( main::@1/(byte*) progress_cursor#50 main::@4/(byte*) progress_cursor#67 )
  (signed word) main::rowOffsetY#9 ← phi( main::@1/(signed word) main::rowOffsetY#10 main::@4/(signed word) main::rowOffsetY#9 )
  (signed word) main::origX#6 ← phi( main::@1/(signed word) main::origX#8 main::@4/(signed word) main::origX#6 )
  (byte**) renderBobCleanupNext#20 ← phi( main::@1/(byte**) renderBobCleanupNext#24 main::@4/(byte**) renderBobCleanupNext#20 )
  (bool~) main::$8 ← *((const byte*) RASTER) < (number) $f8
  if((bool~) main::$8) goto main::@4
  to:main::@5
main::@5: scope:[main]  from main::@4
  (byte) bob_charset_next_id#73 ← phi( main::@4/(byte) bob_charset_next_id#75 )
  (byte) progress_idx#65 ← phi( main::@4/(byte) progress_idx#67 )
  (byte*) progress_cursor#65 ← phi( main::@4/(byte*) progress_cursor#67 )
  (signed word) main::rowOffsetY#8 ← phi( main::@4/(signed word) main::rowOffsetY#9 )
  (signed word) main::origX#4 ← phi( main::@4/(signed word) main::origX#6 )
  (byte**) renderBobCleanupNext#16 ← phi( main::@4/(byte**) renderBobCleanupNext#20 )
  *((const byte*) BORDERCOL) ← (number) $f
  call renderBobCleanup 
  to:main::@31
main::@31: scope:[main]  from main::@5
  (byte) bob_charset_next_id#71 ← phi( main::@5/(byte) bob_charset_next_id#73 )
  (byte) progress_idx#63 ← phi( main::@5/(byte) progress_idx#65 )
  (byte*) progress_cursor#63 ← phi( main::@5/(byte*) progress_cursor#65 )
  (signed word) main::rowOffsetY#7 ← phi( main::@5/(signed word) main::rowOffsetY#8 )
  (signed word) main::origX#2 ← phi( main::@5/(signed word) main::origX#4 )
  (byte**) renderBobCleanupNext#9 ← phi( main::@5/(byte**) renderBobCleanupNext#7 )
  (byte**) renderBobCleanupNext#0 ← (byte**) renderBobCleanupNext#9
  (signed word) main::rowX#0 ← (signed word) main::origX#2
  (signed word) main::rowY#0 ← (const signed word) main::origY
  (byte) main::col#0 ← (byte) 0
  to:main::@6
main::@6: scope:[main]  from main::@31 main::@8
  (byte) bob_charset_next_id#69 ← phi( main::@31/(byte) bob_charset_next_id#71 main::@8/(byte) bob_charset_next_id#63 )
  (byte) progress_idx#61 ← phi( main::@31/(byte) progress_idx#63 main::@8/(byte) progress_idx#55 )
  (byte*) progress_cursor#61 ← phi( main::@31/(byte*) progress_cursor#63 main::@8/(byte*) progress_cursor#55 )
  (signed word) main::origX#11 ← phi( main::@31/(signed word) main::origX#2 main::@8/(signed word) main::origX#5 )
  (byte) main::col#5 ← phi( main::@31/(byte) main::col#0 main::@8/(byte) main::col#1 )
  (signed word) main::rowOffsetY#6 ← phi( main::@31/(signed word) main::rowOffsetY#7 main::@8/(signed word) main::rowOffsetY#5 )
  (byte**) renderBobCleanupNext#21 ← phi( main::@31/(byte**) renderBobCleanupNext#0 main::@8/(byte**) renderBobCleanupNext#25 )
  (signed word) main::rowY#2 ← phi( main::@31/(signed word) main::rowY#0 main::@8/(signed word) main::rowY#1 )
  (signed word) main::rowX#2 ← phi( main::@31/(signed word) main::rowX#0 main::@8/(signed word) main::rowX#1 )
  (signed word) main::x#0 ← (signed word) main::rowX#2
  (signed word) main::y#0 ← (signed word) main::rowY#2
  (byte) main::row#0 ← (byte) 0
  to:main::@7
main::@7: scope:[main]  from main::@32 main::@6
  (byte) bob_charset_next_id#67 ← phi( main::@32/(byte) bob_charset_next_id#65 main::@6/(byte) bob_charset_next_id#69 )
  (byte) progress_idx#59 ← phi( main::@32/(byte) progress_idx#57 main::@6/(byte) progress_idx#61 )
  (byte*) progress_cursor#59 ← phi( main::@32/(byte*) progress_cursor#57 main::@6/(byte*) progress_cursor#61 )
  (signed word) main::origX#9 ← phi( main::@32/(signed word) main::origX#7 main::@6/(signed word) main::origX#11 )
  (byte) main::col#4 ← phi( main::@32/(byte) main::col#3 main::@6/(byte) main::col#5 )
  (signed word) main::rowY#5 ← phi( main::@32/(signed word) main::rowY#4 main::@6/(signed word) main::rowY#2 )
  (signed word) main::rowX#5 ← phi( main::@32/(signed word) main::rowX#4 main::@6/(signed word) main::rowX#2 )
  (byte) main::row#3 ← phi( main::@32/(byte) main::row#1 main::@6/(byte) main::row#0 )
  (signed word) main::rowOffsetY#4 ← phi( main::@32/(signed word) main::rowOffsetY#2 main::@6/(signed word) main::rowOffsetY#6 )
  (byte**) renderBobCleanupNext#17 ← phi( main::@32/(byte**) renderBobCleanupNext#1 main::@6/(byte**) renderBobCleanupNext#21 )
  (signed word) main::y#2 ← phi( main::@32/(signed word) main::y#1 main::@6/(signed word) main::y#0 )
  (signed word) main::x#2 ← phi( main::@32/(signed word) main::x#1 main::@6/(signed word) main::x#0 )
  *((const byte*) BORDERCOL) ← (number) 1
  (byte~) main::$10 ← > (signed word) main::x#2
  (byte~) main::$11 ← > (signed word) main::y#2
  (byte) renderBob::xpos#0 ← (byte~) main::$10
  (byte) renderBob::ypos#0 ← (byte~) main::$11
  call renderBob 
  to:main::@32
main::@32: scope:[main]  from main::@7
  (byte) bob_charset_next_id#65 ← phi( main::@7/(byte) bob_charset_next_id#67 )
  (byte) progress_idx#57 ← phi( main::@7/(byte) progress_idx#59 )
  (byte*) progress_cursor#57 ← phi( main::@7/(byte*) progress_cursor#59 )
  (signed word) main::origX#7 ← phi( main::@7/(signed word) main::origX#9 )
  (byte) main::col#3 ← phi( main::@7/(byte) main::col#4 )
  (signed word) main::rowY#4 ← phi( main::@7/(signed word) main::rowY#5 )
  (signed word) main::rowX#4 ← phi( main::@7/(signed word) main::rowX#5 )
  (byte) main::row#2 ← phi( main::@7/(byte) main::row#3 )
  (signed word) main::rowOffsetY#2 ← phi( main::@7/(signed word) main::rowOffsetY#4 )
  (signed word) main::y#3 ← phi( main::@7/(signed word) main::y#2 )
  (signed word) main::x#3 ← phi( main::@7/(signed word) main::x#2 )
  (byte**) renderBobCleanupNext#10 ← phi( main::@7/(byte**) renderBobCleanupNext#5 )
  (byte**) renderBobCleanupNext#1 ← (byte**) renderBobCleanupNext#10
  (signed word) main::x#1 ← (signed word) main::x#3 + (const signed word) main::rowOffsetX
  (signed word) main::y#1 ← (signed word) main::y#3 + (signed word) main::rowOffsetY#2
  *((const byte*) BORDERCOL) ← (number) 2
  (byte) main::row#1 ← (byte) main::row#2 + rangenext(0,4)
  (bool~) main::$13 ← (byte) main::row#1 != rangelast(0,4)
  if((bool~) main::$13) goto main::@7
  to:main::@8
main::@8: scope:[main]  from main::@32
  (byte) bob_charset_next_id#63 ← phi( main::@32/(byte) bob_charset_next_id#65 )
  (byte) progress_idx#55 ← phi( main::@32/(byte) progress_idx#57 )
  (byte*) progress_cursor#55 ← phi( main::@32/(byte*) progress_cursor#57 )
  (byte**) renderBobCleanupNext#25 ← phi( main::@32/(byte**) renderBobCleanupNext#1 )
  (signed word) main::rowOffsetY#5 ← phi( main::@32/(signed word) main::rowOffsetY#2 )
  (signed word) main::origX#5 ← phi( main::@32/(signed word) main::origX#7 )
  (byte) main::col#2 ← phi( main::@32/(byte) main::col#3 )
  (signed word) main::rowY#3 ← phi( main::@32/(signed word) main::rowY#4 )
  (signed word) main::rowX#3 ← phi( main::@32/(signed word) main::rowX#4 )
  (signed word) main::rowX#1 ← (signed word) main::rowX#3 + (const signed word) main::colOffsetX
  (signed word) main::rowY#1 ← (signed word) main::rowY#3 + (const signed word) main::colOffsetY
  (byte) main::col#1 ← (byte) main::col#2 + rangenext(0,4)
  (bool~) main::$14 ← (byte) main::col#1 != rangelast(0,4)
  if((bool~) main::$14) goto main::@6
  to:main::@9
main::@9: scope:[main]  from main::@8
  (byte) bob_charset_next_id#61 ← phi( main::@8/(byte) bob_charset_next_id#63 )
  (byte) progress_idx#53 ← phi( main::@8/(byte) progress_idx#55 )
  (byte*) progress_cursor#53 ← phi( main::@8/(byte*) progress_cursor#55 )
  (byte**) renderBobCleanupNext#32 ← phi( main::@8/(byte**) renderBobCleanupNext#25 )
  (signed word) main::rowOffsetY#3 ← phi( main::@8/(signed word) main::rowOffsetY#5 )
  (signed word) main::origX#3 ← phi( main::@8/(signed word) main::origX#5 )
  (signed word) main::origX#1 ← (signed word) main::origX#3 + (number) $100
  (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#3 + (number) $80
  *((const byte*) BORDERCOL) ← (number) 0
  (byte) keyboard_key_pressed::key#0 ← (const byte) KEY_SPACE
  call keyboard_key_pressed 
  (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#1
  to:main::@33
main::@33: scope:[main]  from main::@9
  (byte) bob_charset_next_id#59 ← phi( main::@9/(byte) bob_charset_next_id#61 )
  (byte) progress_idx#51 ← phi( main::@9/(byte) progress_idx#53 )
  (byte*) progress_cursor#51 ← phi( main::@9/(byte*) progress_cursor#53 )
  (signed word) main::rowOffsetY#11 ← phi( main::@9/(signed word) main::rowOffsetY#1 )
  (signed word) main::origX#10 ← phi( main::@9/(signed word) main::origX#1 )
  (byte**) renderBobCleanupNext#29 ← phi( main::@9/(byte**) renderBobCleanupNext#32 )
  (byte) keyboard_key_pressed::return#5 ← phi( main::@9/(byte) keyboard_key_pressed::return#2 )
  (byte~) main::$15 ← (byte) keyboard_key_pressed::return#5
  (bool~) main::$19 ← (number) 0 != (byte~) main::$15
  (bool~) main::$16 ← ! (bool~) main::$19
  if((bool~) main::$16) goto main::@1
  to:main::@17
main::@17: scope:[main]  from main::@1 main::@33 main::@34
  (byte**) renderBobCleanupNext#45 ← phi( main::@1/(byte**) renderBobCleanupNext#24 main::@33/(byte**) renderBobCleanupNext#29 main::@34/(byte**) renderBobCleanupNext#43 )
  (byte) bob_charset_next_id#57 ← phi( main::@1/(byte) bob_charset_next_id#58 main::@33/(byte) bob_charset_next_id#59 main::@34/(byte) bob_charset_next_id#56 )
  (byte) progress_idx#49 ← phi( main::@1/(byte) progress_idx#50 main::@33/(byte) progress_idx#51 main::@34/(byte) progress_idx#48 )
  (byte*) progress_cursor#49 ← phi( main::@1/(byte*) progress_cursor#50 main::@33/(byte*) progress_cursor#51 main::@34/(byte*) progress_cursor#48 )
  (byte) keyboard_key_pressed::key#1 ← (const byte) KEY_SPACE
  call keyboard_key_pressed 
  (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#1
  to:main::@34
main::@34: scope:[main]  from main::@17
  (byte**) renderBobCleanupNext#43 ← phi( main::@17/(byte**) renderBobCleanupNext#45 )
  (byte) bob_charset_next_id#56 ← phi( main::@17/(byte) bob_charset_next_id#57 )
  (byte) progress_idx#48 ← phi( main::@17/(byte) progress_idx#49 )
  (byte*) progress_cursor#48 ← phi( main::@17/(byte*) progress_cursor#49 )
  (byte) keyboard_key_pressed::return#6 ← phi( main::@17/(byte) keyboard_key_pressed::return#3 )
  (byte~) main::$17 ← (byte) keyboard_key_pressed::return#6
  (bool~) main::$18 ← (number) 0 != (byte~) main::$17
  if((bool~) main::$18) goto main::@17
  to:main::@19
main::@19: scope:[main]  from main::@34
  (byte**) renderBobCleanupNext#41 ← phi( main::@34/(byte**) renderBobCleanupNext#43 )
  (byte) bob_charset_next_id#55 ← phi( main::@34/(byte) bob_charset_next_id#56 )
  (byte) progress_idx#47 ← phi( main::@34/(byte) progress_idx#48 )
  (byte*) progress_cursor#47 ← phi( main::@34/(byte*) progress_cursor#48 )
  (byte*) main::vicSelectGfxBank2_gfx#0 ← (const byte*) BASIC_SCREEN
  to:main::vicSelectGfxBank2
main::vicSelectGfxBank2: scope:[main]  from main::@19
  (byte**) renderBobCleanupNext#39 ← phi( main::@19/(byte**) renderBobCleanupNext#41 )
  (byte) bob_charset_next_id#54 ← phi( main::@19/(byte) bob_charset_next_id#55 )
  (byte) progress_idx#46 ← phi( main::@19/(byte) progress_idx#47 )
  (byte*) progress_cursor#46 ← phi( main::@19/(byte*) progress_cursor#47 )
  (byte*) main::vicSelectGfxBank2_gfx#1 ← phi( main::@19/(byte*) main::vicSelectGfxBank2_gfx#0 )
  *((const byte*) CIA2_PORT_A_DDR) ← (number) 3
  (byte*) main::vicSelectGfxBank2_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank2_gfx#1
  to:main::vicSelectGfxBank2_toDd001
main::vicSelectGfxBank2_toDd001: scope:[main]  from main::vicSelectGfxBank2
  (byte**) renderBobCleanupNext#37 ← phi( main::vicSelectGfxBank2/(byte**) renderBobCleanupNext#39 )
  (byte) bob_charset_next_id#52 ← phi( main::vicSelectGfxBank2/(byte) bob_charset_next_id#54 )
  (byte) progress_idx#44 ← phi( main::vicSelectGfxBank2/(byte) progress_idx#46 )
  (byte*) progress_cursor#44 ← phi( main::vicSelectGfxBank2/(byte*) progress_cursor#46 )
  (byte*) main::vicSelectGfxBank2_toDd001_gfx#1 ← phi( main::vicSelectGfxBank2/(byte*) main::vicSelectGfxBank2_toDd001_gfx#0 )
  (word~) main::vicSelectGfxBank2_toDd001_$0 ← ((word)) (byte*) main::vicSelectGfxBank2_toDd001_gfx#1
  (byte~) main::vicSelectGfxBank2_toDd001_$1 ← > (word~) main::vicSelectGfxBank2_toDd001_$0
  (number~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (number) $40
  (number~) main::vicSelectGfxBank2_toDd001_$3 ← (number) 3 ^ (number~) main::vicSelectGfxBank2_toDd001_$2
  (byte) main::vicSelectGfxBank2_toDd001_return#0 ← (number~) main::vicSelectGfxBank2_toDd001_$3
  to:main::vicSelectGfxBank2_toDd001_@return
main::vicSelectGfxBank2_toDd001_@return: scope:[main]  from main::vicSelectGfxBank2_toDd001
  (byte**) renderBobCleanupNext#35 ← phi( main::vicSelectGfxBank2_toDd001/(byte**) renderBobCleanupNext#37 )
  (byte) bob_charset_next_id#50 ← phi( main::vicSelectGfxBank2_toDd001/(byte) bob_charset_next_id#52 )
  (byte) progress_idx#42 ← phi( main::vicSelectGfxBank2_toDd001/(byte) progress_idx#44 )
  (byte*) progress_cursor#42 ← phi( main::vicSelectGfxBank2_toDd001/(byte*) progress_cursor#44 )
  (byte) main::vicSelectGfxBank2_toDd001_return#2 ← phi( main::vicSelectGfxBank2_toDd001/(byte) main::vicSelectGfxBank2_toDd001_return#0 )
  (byte) main::vicSelectGfxBank2_toDd001_return#1 ← (byte) main::vicSelectGfxBank2_toDd001_return#2
  to:main::vicSelectGfxBank2_@1
main::vicSelectGfxBank2_@1: scope:[main]  from main::vicSelectGfxBank2_toDd001_@return
  (byte**) renderBobCleanupNext#33 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte**) renderBobCleanupNext#35 )
  (byte) bob_charset_next_id#47 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) bob_charset_next_id#50 )
  (byte) progress_idx#39 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) progress_idx#42 )
  (byte*) progress_cursor#39 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte*) progress_cursor#42 )
  (byte) main::vicSelectGfxBank2_toDd001_return#3 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) main::vicSelectGfxBank2_toDd001_return#1 )
  (byte~) main::vicSelectGfxBank2_$0 ← (byte) main::vicSelectGfxBank2_toDd001_return#3
  *((const byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank2_$0
  to:main::@25
main::@25: scope:[main]  from main::vicSelectGfxBank2_@1
  (byte**) renderBobCleanupNext#30 ← phi( main::vicSelectGfxBank2_@1/(byte**) renderBobCleanupNext#33 )
  (byte) bob_charset_next_id#42 ← phi( main::vicSelectGfxBank2_@1/(byte) bob_charset_next_id#47 )
  (byte) progress_idx#36 ← phi( main::vicSelectGfxBank2_@1/(byte) progress_idx#39 )
  (byte*) progress_cursor#36 ← phi( main::vicSelectGfxBank2_@1/(byte*) progress_cursor#39 )
  (byte*) main::toD0182_screen#0 ← (const byte*) BASIC_SCREEN
  (byte*) main::toD0182_gfx#0 ← (const byte*) BASIC_CHARSET
  to:main::toD0182
main::toD0182: scope:[main]  from main::@25
  (byte**) renderBobCleanupNext#26 ← phi( main::@25/(byte**) renderBobCleanupNext#30 )
  (byte) bob_charset_next_id#36 ← phi( main::@25/(byte) bob_charset_next_id#42 )
  (byte) progress_idx#33 ← phi( main::@25/(byte) progress_idx#36 )
  (byte*) progress_cursor#33 ← phi( main::@25/(byte*) progress_cursor#36 )
  (byte*) main::toD0182_gfx#1 ← phi( main::@25/(byte*) main::toD0182_gfx#0 )
  (byte*) main::toD0182_screen#1 ← phi( main::@25/(byte*) main::toD0182_screen#0 )
  (word~) main::toD0182_$0 ← ((word)) (byte*) main::toD0182_screen#1
  (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (number) $3fff
  (number~) main::toD0182_$2 ← (number~) main::toD0182_$1 * (number) 4
  (number~) main::toD0182_$3 ← > (number~) main::toD0182_$2
  (word~) main::toD0182_$4 ← ((word)) (byte*) main::toD0182_gfx#1
  (byte~) main::toD0182_$5 ← > (word~) main::toD0182_$4
  (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (number) 4
  (number~) main::toD0182_$7 ← (number~) main::toD0182_$6 & (number) $f
  (number~) main::toD0182_$8 ← (number~) main::toD0182_$3 | (number~) main::toD0182_$7
  (byte) main::toD0182_return#0 ← (number~) main::toD0182_$8
  to:main::toD0182_@return
main::toD0182_@return: scope:[main]  from main::toD0182
  (byte**) renderBobCleanupNext#22 ← phi( main::toD0182/(byte**) renderBobCleanupNext#26 )
  (byte) bob_charset_next_id#29 ← phi( main::toD0182/(byte) bob_charset_next_id#36 )
  (byte) progress_idx#29 ← phi( main::toD0182/(byte) progress_idx#33 )
  (byte*) progress_cursor#29 ← phi( main::toD0182/(byte*) progress_cursor#33 )
  (byte) main::toD0182_return#2 ← phi( main::toD0182/(byte) main::toD0182_return#0 )
  (byte) main::toD0182_return#1 ← (byte) main::toD0182_return#2
  to:main::@26
main::@26: scope:[main]  from main::toD0182_@return
  (byte**) renderBobCleanupNext#18 ← phi( main::toD0182_@return/(byte**) renderBobCleanupNext#22 )
  (byte) bob_charset_next_id#20 ← phi( main::toD0182_@return/(byte) bob_charset_next_id#29 )
  (byte) progress_idx#23 ← phi( main::toD0182_@return/(byte) progress_idx#29 )
  (byte*) progress_cursor#22 ← phi( main::toD0182_@return/(byte*) progress_cursor#29 )
  (byte) main::toD0182_return#3 ← phi( main::toD0182_@return/(byte) main::toD0182_return#1 )
  (byte~) main::$7 ← (byte) main::toD0182_return#3
  *((const byte*) D018) ← (byte~) main::$7
  to:main::@return
main::@return: scope:[main]  from main::@26
  (byte**) renderBobCleanupNext#11 ← phi( main::@26/(byte**) renderBobCleanupNext#18 )
  (byte) bob_charset_next_id#11 ← phi( main::@26/(byte) bob_charset_next_id#20 )
  (byte) progress_idx#13 ← phi( main::@26/(byte) progress_idx#23 )
  (byte*) progress_cursor#12 ← phi( main::@26/(byte*) progress_cursor#22 )
  (byte*) progress_cursor#1 ← (byte*) progress_cursor#12
  (byte) progress_idx#1 ← (byte) progress_idx#13
  (byte) bob_charset_next_id#1 ← (byte) bob_charset_next_id#11
  (byte**) renderBobCleanupNext#2 ← (byte**) renderBobCleanupNext#11
  return 
  to:@return
@60: scope:[]  from @begin
  (byte**) renderBobCleanupNext#3 ← (byte**) 0
  to:@66

(void()) renderBobInit()
renderBobInit: scope:[renderBobInit]  from main::@28
  (byte) renderBobInit::y#0 ← (byte) 0
  to:renderBobInit::@1
renderBobInit::@1: scope:[renderBobInit]  from renderBobInit renderBobInit::@1
  (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) renderBobInit::y#0 renderBobInit::@1/(byte) renderBobInit::y#1 )
  (word~) renderBobInit::$0 ← ((word)) (byte) renderBobInit::y#2
  (number~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (number) $28
  (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 * (const byte) SIZEOF_WORD
  *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (number~) renderBobInit::$1
  (byte) renderBobInit::y#1 ← (byte) renderBobInit::y#2 + rangenext(0,$1f)
  (bool~) renderBobInit::$2 ← (byte) renderBobInit::y#1 != rangelast(0,$1f)
  if((bool~) renderBobInit::$2) goto renderBobInit::@1
  to:renderBobInit::@2
renderBobInit::@2: scope:[renderBobInit]  from renderBobInit::@1
  (byte) renderBobInit::i#0 ← (byte) 0
  to:renderBobInit::@3
renderBobInit::@3: scope:[renderBobInit]  from renderBobInit::@2 renderBobInit::@3
  (byte) renderBobInit::i#2 ← phi( renderBobInit::@2/(byte) renderBobInit::i#0 renderBobInit::@3/(byte) renderBobInit::i#1 )
  (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 * (const byte) SIZEOF_POINTER
  *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN
  (byte) renderBobInit::i#1 ← (byte) renderBobInit::i#2 + rangenext(0,NUM_BOBS-1)
  (bool~) renderBobInit::$3 ← (byte) renderBobInit::i#1 != rangelast(0,NUM_BOBS-1)
  if((bool~) renderBobInit::$3) goto renderBobInit::@3
  to:renderBobInit::@return
renderBobInit::@return: scope:[renderBobInit]  from renderBobInit::@3
  return 
  to:@return

(void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos)
renderBob: scope:[renderBob]  from main::@7
  (byte**) renderBobCleanupNext#12 ← phi( main::@7/(byte**) renderBobCleanupNext#17 )
  (byte) renderBob::ypos#1 ← phi( main::@7/(byte) renderBob::ypos#0 )
  (byte) renderBob::xpos#1 ← phi( main::@7/(byte) renderBob::xpos#0 )
  (byte~) renderBob::$0 ← (byte) renderBob::xpos#1 / (const byte) BOB_SHIFTS_X
  (byte) renderBob::x_char_offset#0 ← (byte~) renderBob::$0
  (byte~) renderBob::$1 ← (byte) renderBob::ypos#1 / (const byte) BOB_SHIFTS_Y
  (byte) renderBob::y_char_offset#0 ← (byte~) renderBob::$1
  (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 * (const byte) SIZEOF_WORD
  (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8)
  (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0
  (byte*~) renderBob::$3 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0
  (byte*) renderBob::screen#0 ← (byte*~) renderBob::$3
  (number~) renderBob::$4 ← (byte) renderBob::ypos#1 & (number) 7
  (number~) renderBob::$5 ← (number~) renderBob::$4 * (const byte) BOB_SHIFTS_X
  (number~) renderBob::$6 ← (byte) renderBob::xpos#1 & (number) 3
  (number~) renderBob::$7 ← (number~) renderBob::$5 + (number~) renderBob::$6
  (byte) renderBob::bob_table_idx#0 ← (number~) renderBob::$7
  *((byte**) renderBobCleanupNext#12) ← (byte*) renderBob::screen#0
  (byte**) renderBobCleanupNext#4 ← (byte**) renderBobCleanupNext#12 + (const byte) SIZEOF_POINTER
  *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) $28) ← *((const byte*) BOB_TABLES+(number) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) $50) ← *((const byte*) BOB_TABLES+(number) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) 1) ← *((const byte*) BOB_TABLES+(number) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) $29) ← *((const byte*) BOB_TABLES+(number) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) $51) ← *((const byte*) BOB_TABLES+(number) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) 2) ← *((const byte*) BOB_TABLES+(number) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) $2a) ← *((const byte*) BOB_TABLES+(number) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  to:renderBob::@return
renderBob::@return: scope:[renderBob]  from renderBob
  (byte**) renderBobCleanupNext#13 ← phi( renderBob/(byte**) renderBobCleanupNext#4 )
  (byte**) renderBobCleanupNext#5 ← (byte**) renderBobCleanupNext#13
  return 
  to:@return

(void()) renderBobCleanup()
renderBobCleanup: scope:[renderBobCleanup]  from main::@5
  (byte) renderBobCleanup::i#0 ← (byte) 0
  to:renderBobCleanup::@1
renderBobCleanup::@1: scope:[renderBobCleanup]  from renderBobCleanup renderBobCleanup::@1
  (byte) renderBobCleanup::i#2 ← phi( renderBobCleanup/(byte) renderBobCleanup::i#0 renderBobCleanup::@1/(byte) renderBobCleanup::i#1 )
  (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 * (const byte) SIZEOF_POINTER
  (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1)
  *((byte*) renderBobCleanup::screen#0 + (number) 0) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) $28) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) $50) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) 1) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) $29) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) $51) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) 2) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) $2a) ← (number) 0
  *((byte*) renderBobCleanup::screen#0 + (number) $52) ← (number) 0
  (byte) renderBobCleanup::i#1 ← (byte) renderBobCleanup::i#2 + rangenext(0,NUM_BOBS-1)
  (bool~) renderBobCleanup::$0 ← (byte) renderBobCleanup::i#1 != rangelast(0,NUM_BOBS-1)
  if((bool~) renderBobCleanup::$0) goto renderBobCleanup::@1
  to:renderBobCleanup::@2
renderBobCleanup::@2: scope:[renderBobCleanup]  from renderBobCleanup::@1
  (byte**) renderBobCleanupNext#6 ← (const byte**) RENDERBOB_CLEANUP
  to:renderBobCleanup::@return
renderBobCleanup::@return: scope:[renderBobCleanup]  from renderBobCleanup::@2
  (byte**) renderBobCleanupNext#14 ← phi( renderBobCleanup::@2/(byte**) renderBobCleanupNext#6 )
  (byte**) renderBobCleanupNext#7 ← (byte**) renderBobCleanupNext#14
  return 
  to:@return

(void()) prepareBobs()
prepareBobs: scope:[prepareBobs]  from main::@27
  (byte) progress_idx#24 ← phi( main::@27/(byte) progress_idx#22 )
  (byte*) progress_cursor#23 ← phi( main::@27/(byte*) progress_cursor#21 )
  (byte*) progress_init::line#0 ← (const byte*) BASIC_SCREEN
  call progress_init 
  to:prepareBobs::@19
prepareBobs::@19: scope:[prepareBobs]  from prepareBobs
  (byte) progress_idx#14 ← phi( prepareBobs/(byte) progress_idx#7 )
  (byte*) progress_cursor#13 ← phi( prepareBobs/(byte*) progress_cursor#7 )
  (byte*) progress_cursor#2 ← (byte*) progress_cursor#13
  (byte) progress_idx#2 ← (byte) progress_idx#14
  (byte) bob_charset_next_id#2 ← (number) 0
  (byte*) charsetFindOrAddGlyph::glyph#0 ← (const byte*) PROTO_BOB+(number) $30
  (byte*) charsetFindOrAddGlyph::charset#0 ← (const byte*) BOB_CHARSET
  call charsetFindOrAddGlyph 
  (byte) charsetFindOrAddGlyph::return#0 ← (byte) charsetFindOrAddGlyph::return#3
  to:prepareBobs::@20
prepareBobs::@20: scope:[prepareBobs]  from prepareBobs::@19
  (byte) progress_idx#30 ← phi( prepareBobs::@19/(byte) progress_idx#2 )
  (byte*) progress_cursor#30 ← phi( prepareBobs::@19/(byte*) progress_cursor#2 )
  (byte) bob_charset_next_id#12 ← phi( prepareBobs::@19/(byte) bob_charset_next_id#7 )
  (byte) bob_charset_next_id#3 ← (byte) bob_charset_next_id#12
  (byte) prepareBobs::bob_table_idx#0 ← (byte) 0
  (byte) prepareBobs::shift_y#0 ← (byte) 0
  to:prepareBobs::@1
prepareBobs::@1: scope:[prepareBobs]  from prepareBobs::@20 prepareBobs::@21
  (byte) prepareBobs::bob_table_idx#9 ← phi( prepareBobs::@20/(byte) prepareBobs::bob_table_idx#0 prepareBobs::@21/(byte) prepareBobs::bob_table_idx#12 )
  (byte) bob_charset_next_id#22 ← phi( prepareBobs::@20/(byte) bob_charset_next_id#3 prepareBobs::@21/(byte) bob_charset_next_id#30 )
  (byte) progress_idx#26 ← phi( prepareBobs::@20/(byte) progress_idx#30 prepareBobs::@21/(byte) progress_idx#31 )
  (byte*) progress_cursor#25 ← phi( prepareBobs::@20/(byte*) progress_cursor#30 prepareBobs::@21/(byte*) progress_cursor#31 )
  (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@20/(byte) prepareBobs::shift_y#0 prepareBobs::@21/(byte) prepareBobs::shift_y#1 )
  (bool~) prepareBobs::$2 ← (byte) prepareBobs::shift_y#2 < (const byte) BOB_SHIFTS_Y
  if((bool~) prepareBobs::$2) goto prepareBobs::@2
  to:prepareBobs::@return
prepareBobs::@2: scope:[prepareBobs]  from prepareBobs::@1
  (byte) progress_idx#40 ← phi( prepareBobs::@1/(byte) progress_idx#26 )
  (byte*) progress_cursor#40 ← phi( prepareBobs::@1/(byte*) progress_cursor#25 )
  (byte) bob_charset_next_id#48 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#22 )
  (byte) prepareBobs::shift_y#6 ← phi( prepareBobs::@1/(byte) prepareBobs::shift_y#2 )
  (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#9 )
  (byte) prepareBobs::shift_x#0 ← (byte) 0
  to:prepareBobs::@4
prepareBobs::@4: scope:[prepareBobs]  from prepareBobs::@2 prepareBobs::@25
  (byte) progress_idx#37 ← phi( prepareBobs::@2/(byte) progress_idx#40 prepareBobs::@25/(byte) progress_idx#41 )
  (byte*) progress_cursor#37 ← phi( prepareBobs::@2/(byte*) progress_cursor#40 prepareBobs::@25/(byte*) progress_cursor#41 )
  (byte) bob_charset_next_id#43 ← phi( prepareBobs::@2/(byte) bob_charset_next_id#48 prepareBobs::@25/(byte) bob_charset_next_id#49 )
  (byte) prepareBobs::shift_y#5 ← phi( prepareBobs::@2/(byte) prepareBobs::shift_y#6 prepareBobs::@25/(byte) prepareBobs::shift_y#7 )
  (byte) prepareBobs::bob_table_idx#4 ← phi( prepareBobs::@2/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@25/(byte) prepareBobs::bob_table_idx#7 )
  (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@2/(byte) prepareBobs::shift_x#0 prepareBobs::@25/(byte) prepareBobs::shift_x#1 )
  (bool~) prepareBobs::$3 ← (byte) prepareBobs::shift_x#2 < (const byte) BOB_SHIFTS_X
  if((bool~) prepareBobs::$3) goto prepareBobs::@5
  to:prepareBobs::@6
prepareBobs::@5: scope:[prepareBobs]  from prepareBobs::@4
  (byte) prepareBobs::shift_y#12 ← phi( prepareBobs::@4/(byte) prepareBobs::shift_y#5 )
  (byte) prepareBobs::shift_x#8 ← phi( prepareBobs::@4/(byte) prepareBobs::shift_x#2 )
  (byte*) progress_cursor#38 ← phi( prepareBobs::@4/(byte*) progress_cursor#37 )
  (byte) progress_idx#38 ← phi( prepareBobs::@4/(byte) progress_idx#37 )
  (byte) bob_charset_next_id#39 ← phi( prepareBobs::@4/(byte) bob_charset_next_id#43 )
  (byte) prepareBobs::bob_table_idx#2 ← phi( prepareBobs::@4/(byte) prepareBobs::bob_table_idx#4 )
  (byte*) prepareBobs::bob_glyph#0 ← (const byte*) PROTO_BOB
  (byte*~) prepareBobs::$4 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#2
  (byte*) prepareBobs::bob_table#0 ← (byte*~) prepareBobs::$4
  (byte) prepareBobs::cell#0 ← (byte) 0
  to:prepareBobs::@7
prepareBobs::@6: scope:[prepareBobs]  from prepareBobs::@4
  (byte) prepareBobs::bob_table_idx#14 ← phi( prepareBobs::@4/(byte) prepareBobs::bob_table_idx#4 )
  (byte) bob_charset_next_id#37 ← phi( prepareBobs::@4/(byte) bob_charset_next_id#43 )
  (byte) progress_idx#34 ← phi( prepareBobs::@4/(byte) progress_idx#37 )
  (byte*) progress_cursor#34 ← phi( prepareBobs::@4/(byte*) progress_cursor#37 )
  (byte) prepareBobs::shift_y#4 ← phi( prepareBobs::@4/(byte) prepareBobs::shift_y#5 )
  call protoBobShiftDown 
  to:prepareBobs::@21
prepareBobs::@21: scope:[prepareBobs]  from prepareBobs::@6
  (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@6/(byte) prepareBobs::bob_table_idx#14 )
  (byte) bob_charset_next_id#30 ← phi( prepareBobs::@6/(byte) bob_charset_next_id#37 )
  (byte) progress_idx#31 ← phi( prepareBobs::@6/(byte) progress_idx#34 )
  (byte*) progress_cursor#31 ← phi( prepareBobs::@6/(byte*) progress_cursor#34 )
  (byte) prepareBobs::shift_y#3 ← phi( prepareBobs::@6/(byte) prepareBobs::shift_y#4 )
  (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#3
  to:prepareBobs::@1
prepareBobs::@7: scope:[prepareBobs]  from prepareBobs::@23 prepareBobs::@5
  (byte) prepareBobs::shift_y#10 ← phi( prepareBobs::@23/(byte) prepareBobs::shift_y#11 prepareBobs::@5/(byte) prepareBobs::shift_y#12 )
  (byte) prepareBobs::shift_x#6 ← phi( prepareBobs::@23/(byte) prepareBobs::shift_x#7 prepareBobs::@5/(byte) prepareBobs::shift_x#8 )
  (byte*) progress_cursor#35 ← phi( prepareBobs::@23/(byte*) progress_cursor#3 prepareBobs::@5/(byte*) progress_cursor#38 )
  (byte) progress_idx#35 ← phi( prepareBobs::@23/(byte) progress_idx#3 prepareBobs::@5/(byte) progress_idx#38 )
  (byte*) prepareBobs::bob_table#4 ← phi( prepareBobs::@23/(byte*) prepareBobs::bob_table#5 prepareBobs::@5/(byte*) prepareBobs::bob_table#0 )
  (byte) bob_charset_next_id#31 ← phi( prepareBobs::@23/(byte) bob_charset_next_id#38 prepareBobs::@5/(byte) bob_charset_next_id#39 )
  (byte) prepareBobs::bob_table_idx#5 ← phi( prepareBobs::@23/(byte) prepareBobs::bob_table_idx#8 prepareBobs::@5/(byte) prepareBobs::bob_table_idx#2 )
  (byte*) prepareBobs::bob_glyph#4 ← phi( prepareBobs::@23/(byte*) prepareBobs::bob_glyph#5 prepareBobs::@5/(byte*) prepareBobs::bob_glyph#0 )
  (byte) prepareBobs::cell#2 ← phi( prepareBobs::@23/(byte) prepareBobs::cell#1 prepareBobs::@5/(byte) prepareBobs::cell#0 )
  (bool~) prepareBobs::$5 ← (byte) prepareBobs::cell#2 < (number) 9
  if((bool~) prepareBobs::$5) goto prepareBobs::@8
  to:prepareBobs::@9
prepareBobs::@8: scope:[prepareBobs]  from prepareBobs::@7
  (byte) prepareBobs::shift_y#14 ← phi( prepareBobs::@7/(byte) prepareBobs::shift_y#10 )
  (byte) prepareBobs::shift_x#10 ← phi( prepareBobs::@7/(byte) prepareBobs::shift_x#6 )
  (byte) prepareBobs::bob_table_idx#13 ← phi( prepareBobs::@7/(byte) prepareBobs::bob_table_idx#5 )
  (byte) prepareBobs::cell#5 ← phi( prepareBobs::@7/(byte) prepareBobs::cell#2 )
  (byte*) progress_cursor#32 ← phi( prepareBobs::@7/(byte*) progress_cursor#35 )
  (byte) progress_idx#32 ← phi( prepareBobs::@7/(byte) progress_idx#35 )
  (byte*) prepareBobs::bob_table#3 ← phi( prepareBobs::@7/(byte*) prepareBobs::bob_table#4 )
  (byte) bob_charset_next_id#21 ← phi( prepareBobs::@7/(byte) bob_charset_next_id#31 )
  (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@7/(byte*) prepareBobs::bob_glyph#4 )
  (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2
  (byte*) charsetFindOrAddGlyph::charset#1 ← (const byte*) BOB_CHARSET
  call charsetFindOrAddGlyph 
  (byte) charsetFindOrAddGlyph::return#1 ← (byte) charsetFindOrAddGlyph::return#3
  to:prepareBobs::@22
prepareBobs::@22: scope:[prepareBobs]  from prepareBobs::@8
  (byte) prepareBobs::shift_y#13 ← phi( prepareBobs::@8/(byte) prepareBobs::shift_y#14 )
  (byte) prepareBobs::shift_x#9 ← phi( prepareBobs::@8/(byte) prepareBobs::shift_x#10 )
  (byte) prepareBobs::bob_table_idx#10 ← phi( prepareBobs::@8/(byte) prepareBobs::bob_table_idx#13 )
  (byte) prepareBobs::cell#4 ← phi( prepareBobs::@8/(byte) prepareBobs::cell#5 )
  (byte*) progress_cursor#24 ← phi( prepareBobs::@8/(byte*) progress_cursor#32 )
  (byte) progress_idx#25 ← phi( prepareBobs::@8/(byte) progress_idx#32 )
  (byte*) prepareBobs::bob_glyph#3 ← phi( prepareBobs::@8/(byte*) prepareBobs::bob_glyph#2 )
  (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@8/(byte*) prepareBobs::bob_table#3 )
  (byte) bob_charset_next_id#13 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#7 )
  (byte) charsetFindOrAddGlyph::return#5 ← phi( prepareBobs::@8/(byte) charsetFindOrAddGlyph::return#1 )
  (byte~) prepareBobs::$6 ← (byte) charsetFindOrAddGlyph::return#5
  (byte) bob_charset_next_id#4 ← (byte) bob_charset_next_id#13
  *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6
  (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#3 + (number) 8
  (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y
  call progress_inc 
  to:prepareBobs::@23
prepareBobs::@23: scope:[prepareBobs]  from prepareBobs::@22
  (byte) prepareBobs::shift_y#11 ← phi( prepareBobs::@22/(byte) prepareBobs::shift_y#13 )
  (byte) prepareBobs::shift_x#7 ← phi( prepareBobs::@22/(byte) prepareBobs::shift_x#9 )
  (byte*) prepareBobs::bob_table#5 ← phi( prepareBobs::@22/(byte*) prepareBobs::bob_table#1 )
  (byte) bob_charset_next_id#38 ← phi( prepareBobs::@22/(byte) bob_charset_next_id#4 )
  (byte) prepareBobs::bob_table_idx#8 ← phi( prepareBobs::@22/(byte) prepareBobs::bob_table_idx#10 )
  (byte*) prepareBobs::bob_glyph#5 ← phi( prepareBobs::@22/(byte*) prepareBobs::bob_glyph#1 )
  (byte) prepareBobs::cell#3 ← phi( prepareBobs::@22/(byte) prepareBobs::cell#4 )
  (byte*) progress_cursor#14 ← phi( prepareBobs::@22/(byte*) progress_cursor#9 )
  (byte) progress_idx#15 ← phi( prepareBobs::@22/(byte) progress_idx#10 )
  (byte) progress_idx#3 ← (byte) progress_idx#15
  (byte*) progress_cursor#3 ← (byte*) progress_cursor#14
  (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#3
  to:prepareBobs::@7
prepareBobs::@9: scope:[prepareBobs]  from prepareBobs::@7
  (byte) progress_idx#45 ← phi( prepareBobs::@7/(byte) progress_idx#35 )
  (byte*) progress_cursor#45 ← phi( prepareBobs::@7/(byte*) progress_cursor#35 )
  (byte) bob_charset_next_id#53 ← phi( prepareBobs::@7/(byte) bob_charset_next_id#31 )
  (byte) prepareBobs::shift_y#9 ← phi( prepareBobs::@7/(byte) prepareBobs::shift_y#10 )
  (byte) prepareBobs::shift_x#5 ← phi( prepareBobs::@7/(byte) prepareBobs::shift_x#6 )
  (byte) prepareBobs::bob_table_idx#3 ← phi( prepareBobs::@7/(byte) prepareBobs::bob_table_idx#5 )
  (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#3
  call protoBobShiftRight 
  to:prepareBobs::@24
prepareBobs::@24: scope:[prepareBobs]  from prepareBobs::@9
  (byte) progress_idx#43 ← phi( prepareBobs::@9/(byte) progress_idx#45 )
  (byte*) progress_cursor#43 ← phi( prepareBobs::@9/(byte*) progress_cursor#45 )
  (byte) bob_charset_next_id#51 ← phi( prepareBobs::@9/(byte) bob_charset_next_id#53 )
  (byte) prepareBobs::shift_y#8 ← phi( prepareBobs::@9/(byte) prepareBobs::shift_y#9 )
  (byte) prepareBobs::bob_table_idx#11 ← phi( prepareBobs::@9/(byte) prepareBobs::bob_table_idx#1 )
  (byte) prepareBobs::shift_x#4 ← phi( prepareBobs::@9/(byte) prepareBobs::shift_x#5 )
  call protoBobShiftRight 
  to:prepareBobs::@25
prepareBobs::@25: scope:[prepareBobs]  from prepareBobs::@24
  (byte) progress_idx#41 ← phi( prepareBobs::@24/(byte) progress_idx#43 )
  (byte*) progress_cursor#41 ← phi( prepareBobs::@24/(byte*) progress_cursor#43 )
  (byte) bob_charset_next_id#49 ← phi( prepareBobs::@24/(byte) bob_charset_next_id#51 )
  (byte) prepareBobs::shift_y#7 ← phi( prepareBobs::@24/(byte) prepareBobs::shift_y#8 )
  (byte) prepareBobs::bob_table_idx#7 ← phi( prepareBobs::@24/(byte) prepareBobs::bob_table_idx#11 )
  (byte) prepareBobs::shift_x#3 ← phi( prepareBobs::@24/(byte) prepareBobs::shift_x#4 )
  (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#3
  to:prepareBobs::@4
prepareBobs::@return: scope:[prepareBobs]  from prepareBobs::@1
  (byte) bob_charset_next_id#14 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#22 )
  (byte) progress_idx#16 ← phi( prepareBobs::@1/(byte) progress_idx#26 )
  (byte*) progress_cursor#15 ← phi( prepareBobs::@1/(byte*) progress_cursor#25 )
  (byte*) progress_cursor#4 ← (byte*) progress_cursor#15
  (byte) progress_idx#4 ← (byte) progress_idx#16
  (byte) bob_charset_next_id#5 ← (byte) bob_charset_next_id#14
  return 
  to:@return

(void()) protoBobShiftRight()
protoBobShiftRight: scope:[protoBobShiftRight]  from prepareBobs::@24 prepareBobs::@9
  (byte) protoBobShiftRight::carry#0 ← (byte) 0
  (byte) protoBobShiftRight::j#0 ← (byte) 0
  (byte) protoBobShiftRight::i#0 ← (byte) 0
  to:protoBobShiftRight::@1
protoBobShiftRight::@1: scope:[protoBobShiftRight]  from protoBobShiftRight protoBobShiftRight::@8
  (byte) protoBobShiftRight::carry#6 ← phi( protoBobShiftRight/(byte) protoBobShiftRight::carry#0 protoBobShiftRight::@8/(byte) protoBobShiftRight::carry#7 )
  (byte) protoBobShiftRight::j#7 ← phi( protoBobShiftRight/(byte) protoBobShiftRight::j#0 protoBobShiftRight::@8/(byte) protoBobShiftRight::j#10 )
  (byte) protoBobShiftRight::i#2 ← phi( protoBobShiftRight/(byte) protoBobShiftRight::i#0 protoBobShiftRight::@8/(byte) protoBobShiftRight::i#1 )
  (bool~) protoBobShiftRight::$0 ← (byte) protoBobShiftRight::i#2 < (number) 3*(number) 3*(number) 8
  if((bool~) protoBobShiftRight::$0) goto protoBobShiftRight::@2
  to:protoBobShiftRight::@return
protoBobShiftRight::@2: scope:[protoBobShiftRight]  from protoBobShiftRight::@1
  (byte) protoBobShiftRight::i#9 ← phi( protoBobShiftRight::@1/(byte) protoBobShiftRight::i#2 )
  (byte) protoBobShiftRight::carry#5 ← phi( protoBobShiftRight::@1/(byte) protoBobShiftRight::carry#6 )
  (byte) protoBobShiftRight::j#3 ← phi( protoBobShiftRight::@1/(byte) protoBobShiftRight::j#7 )
  (number~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (number) 1
  (bool~) protoBobShiftRight::$8 ← (number) 0 != (number~) protoBobShiftRight::$1
  if((bool~) protoBobShiftRight::$8) goto protoBobShiftRight::@4
  to:protoBobShiftRight::@5
protoBobShiftRight::@4: scope:[protoBobShiftRight]  from protoBobShiftRight::@2
  (byte) protoBobShiftRight::i#7 ← phi( protoBobShiftRight::@2/(byte) protoBobShiftRight::i#9 )
  (byte) protoBobShiftRight::carry#3 ← phi( protoBobShiftRight::@2/(byte) protoBobShiftRight::carry#5 )
  (byte) protoBobShiftRight::j#8 ← phi( protoBobShiftRight::@2/(byte) protoBobShiftRight::j#3 )
  (byte~) protoBobShiftRight::$3 ← (byte) $80
  to:protoBobShiftRight::@6
protoBobShiftRight::@5: scope:[protoBobShiftRight]  from protoBobShiftRight::@2
  (byte) protoBobShiftRight::i#8 ← phi( protoBobShiftRight::@2/(byte) protoBobShiftRight::i#9 )
  (byte) protoBobShiftRight::carry#4 ← phi( protoBobShiftRight::@2/(byte) protoBobShiftRight::carry#5 )
  (byte) protoBobShiftRight::j#9 ← phi( protoBobShiftRight::@2/(byte) protoBobShiftRight::j#3 )
  (byte~) protoBobShiftRight::$2 ← (byte) 0
  to:protoBobShiftRight::@6
protoBobShiftRight::@6: scope:[protoBobShiftRight]  from protoBobShiftRight::@4 protoBobShiftRight::@5
  (byte) protoBobShiftRight::i#6 ← phi( protoBobShiftRight::@4/(byte) protoBobShiftRight::i#7 protoBobShiftRight::@5/(byte) protoBobShiftRight::i#8 )
  (byte) protoBobShiftRight::carry#2 ← phi( protoBobShiftRight::@4/(byte) protoBobShiftRight::carry#3 protoBobShiftRight::@5/(byte) protoBobShiftRight::carry#4 )
  (byte) protoBobShiftRight::j#4 ← phi( protoBobShiftRight::@4/(byte) protoBobShiftRight::j#8 protoBobShiftRight::@5/(byte) protoBobShiftRight::j#9 )
  (byte~) protoBobShiftRight::$4 ← phi( protoBobShiftRight::@4/(byte~) protoBobShiftRight::$3 protoBobShiftRight::@5/(byte~) protoBobShiftRight::$2 )
  (byte) protoBobShiftRight::new_carry#0 ← (byte~) protoBobShiftRight::$4
  (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#4) >> (number) 1
  (byte~) protoBobShiftRight::$6 ← (byte) protoBobShiftRight::carry#2 | (byte~) protoBobShiftRight::$5
  *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#4) ← (byte~) protoBobShiftRight::$6
  (byte) protoBobShiftRight::carry#1 ← (byte) protoBobShiftRight::new_carry#0
  (bool~) protoBobShiftRight::$7 ← (byte) protoBobShiftRight::j#4 >= (number) $30
  if((bool~) protoBobShiftRight::$7) goto protoBobShiftRight::@7
  to:protoBobShiftRight::@13
protoBobShiftRight::@7: scope:[protoBobShiftRight]  from protoBobShiftRight::@6
  (byte) protoBobShiftRight::carry#9 ← phi( protoBobShiftRight::@6/(byte) protoBobShiftRight::carry#1 )
  (byte) protoBobShiftRight::i#5 ← phi( protoBobShiftRight::@6/(byte) protoBobShiftRight::i#6 )
  (byte) protoBobShiftRight::j#5 ← phi( protoBobShiftRight::@6/(byte) protoBobShiftRight::j#4 )
  (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#5 - (number) $2f
  to:protoBobShiftRight::@8
protoBobShiftRight::@13: scope:[protoBobShiftRight]  from protoBobShiftRight::@6
  (byte) protoBobShiftRight::carry#8 ← phi( protoBobShiftRight::@6/(byte) protoBobShiftRight::carry#1 )
  (byte) protoBobShiftRight::i#4 ← phi( protoBobShiftRight::@6/(byte) protoBobShiftRight::i#6 )
  (byte) protoBobShiftRight::j#6 ← phi( protoBobShiftRight::@6/(byte) protoBobShiftRight::j#4 )
  (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#6 + (number) $18
  to:protoBobShiftRight::@8
protoBobShiftRight::@8: scope:[protoBobShiftRight]  from protoBobShiftRight::@13 protoBobShiftRight::@7
  (byte) protoBobShiftRight::carry#7 ← phi( protoBobShiftRight::@13/(byte) protoBobShiftRight::carry#8 protoBobShiftRight::@7/(byte) protoBobShiftRight::carry#9 )
  (byte) protoBobShiftRight::j#10 ← phi( protoBobShiftRight::@13/(byte) protoBobShiftRight::j#2 protoBobShiftRight::@7/(byte) protoBobShiftRight::j#1 )
  (byte) protoBobShiftRight::i#3 ← phi( protoBobShiftRight::@13/(byte) protoBobShiftRight::i#4 protoBobShiftRight::@7/(byte) protoBobShiftRight::i#5 )
  (byte) protoBobShiftRight::i#1 ← ++ (byte) protoBobShiftRight::i#3
  to:protoBobShiftRight::@1
protoBobShiftRight::@return: scope:[protoBobShiftRight]  from protoBobShiftRight::@1
  return 
  to:@return

(void()) protoBobShiftDown()
protoBobShiftDown: scope:[protoBobShiftDown]  from prepareBobs::@6
  (byte) protoBobShiftDown::i#0 ← (byte) $17
  to:protoBobShiftDown::@1
protoBobShiftDown::@1: scope:[protoBobShiftDown]  from protoBobShiftDown protoBobShiftDown::@2
  (byte) protoBobShiftDown::i#2 ← phi( protoBobShiftDown/(byte) protoBobShiftDown::i#0 protoBobShiftDown::@2/(byte) protoBobShiftDown::i#1 )
  (bool~) protoBobShiftDown::$0 ← (byte) protoBobShiftDown::i#2 > (number) 0
  if((bool~) protoBobShiftDown::$0) goto protoBobShiftDown::@2
  to:protoBobShiftDown::@3
protoBobShiftDown::@2: scope:[protoBobShiftDown]  from protoBobShiftDown::@1
  (byte) protoBobShiftDown::i#3 ← phi( protoBobShiftDown::@1/(byte) protoBobShiftDown::i#2 )
  *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#3) ← *((const byte*) PROTO_BOB+(number) $17 + (byte) protoBobShiftDown::i#3)
  *((const byte*) PROTO_BOB+(number) $18 + (byte) protoBobShiftDown::i#3) ← *((const byte*) PROTO_BOB+(number) $2f + (byte) protoBobShiftDown::i#3)
  *((const byte*) PROTO_BOB+(number) $30 + (byte) protoBobShiftDown::i#3) ← (number) 0
  (byte) protoBobShiftDown::i#1 ← -- (byte) protoBobShiftDown::i#3
  to:protoBobShiftDown::@1
protoBobShiftDown::@3: scope:[protoBobShiftDown]  from protoBobShiftDown::@1
  *((const byte*) PROTO_BOB + (number) 0) ← (number) 0
  *((const byte*) PROTO_BOB + (number) $18) ← (number) 0
  *((const byte*) PROTO_BOB + (number) $30) ← (number) 0
  to:protoBobShiftDown::@return
protoBobShiftDown::@return: scope:[protoBobShiftDown]  from protoBobShiftDown::@3
  return 
  to:@return
@66: scope:[]  from @60
  (byte**) renderBobCleanupNext#27 ← phi( @60/(byte**) renderBobCleanupNext#3 )
  (byte) bob_charset_next_id#6 ← (byte) 0
  to:@67

(byte()) charsetFindOrAddGlyph((byte*) charsetFindOrAddGlyph::glyph , (byte*) charsetFindOrAddGlyph::charset)
charsetFindOrAddGlyph: scope:[charsetFindOrAddGlyph]  from prepareBobs::@19 prepareBobs::@8
  (byte*) charsetFindOrAddGlyph::glyph#10 ← phi( prepareBobs::@19/(byte*) charsetFindOrAddGlyph::glyph#0 prepareBobs::@8/(byte*) charsetFindOrAddGlyph::glyph#1 )
  (byte) bob_charset_next_id#23 ← phi( prepareBobs::@19/(byte) bob_charset_next_id#2 prepareBobs::@8/(byte) bob_charset_next_id#21 )
  (byte*) charsetFindOrAddGlyph::charset#2 ← phi( prepareBobs::@19/(byte*) charsetFindOrAddGlyph::charset#0 prepareBobs::@8/(byte*) charsetFindOrAddGlyph::charset#1 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#0 ← (byte*) charsetFindOrAddGlyph::charset#2
  (byte) charsetFindOrAddGlyph::glyph_id#0 ← (byte) 0
  to:charsetFindOrAddGlyph::@1
charsetFindOrAddGlyph::@1: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph charsetFindOrAddGlyph::@16
  (byte*) charsetFindOrAddGlyph::glyph#9 ← phi( charsetFindOrAddGlyph/(byte*) charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::@16/(byte*) charsetFindOrAddGlyph::glyph#11 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#12 ← phi( charsetFindOrAddGlyph/(byte*) charsetFindOrAddGlyph::glyph_cursor#0 charsetFindOrAddGlyph::@16/(byte*) charsetFindOrAddGlyph::glyph_cursor#1 )
  (byte) bob_charset_next_id#15 ← phi( charsetFindOrAddGlyph/(byte) bob_charset_next_id#23 charsetFindOrAddGlyph::@16/(byte) bob_charset_next_id#24 )
  (byte) charsetFindOrAddGlyph::glyph_id#2 ← phi( charsetFindOrAddGlyph/(byte) charsetFindOrAddGlyph::glyph_id#0 charsetFindOrAddGlyph::@16/(byte) charsetFindOrAddGlyph::glyph_id#1 )
  (bool~) charsetFindOrAddGlyph::$0 ← (byte) charsetFindOrAddGlyph::glyph_id#2 != (byte) bob_charset_next_id#15
  if((bool~) charsetFindOrAddGlyph::$0) goto charsetFindOrAddGlyph::@2
  to:charsetFindOrAddGlyph::@3
charsetFindOrAddGlyph::@2: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@1
  (byte) bob_charset_next_id#44 ← phi( charsetFindOrAddGlyph::@1/(byte) bob_charset_next_id#15 )
  (byte) charsetFindOrAddGlyph::glyph_id#12 ← phi( charsetFindOrAddGlyph::@1/(byte) charsetFindOrAddGlyph::glyph_id#2 )
  (byte*) charsetFindOrAddGlyph::glyph#6 ← phi( charsetFindOrAddGlyph::@1/(byte*) charsetFindOrAddGlyph::glyph#9 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#8 ← phi( charsetFindOrAddGlyph::@1/(byte*) charsetFindOrAddGlyph::glyph_cursor#12 )
  (byte) charsetFindOrAddGlyph::found#0 ← (byte) 1
  (byte) charsetFindOrAddGlyph::i#0 ← (byte) 0
  to:charsetFindOrAddGlyph::@4
charsetFindOrAddGlyph::@3: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@1
  (byte) charsetFindOrAddGlyph::glyph_id#11 ← phi( charsetFindOrAddGlyph::@1/(byte) charsetFindOrAddGlyph::glyph_id#2 )
  (byte) bob_charset_next_id#34 ← phi( charsetFindOrAddGlyph::@1/(byte) bob_charset_next_id#15 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#11 ← phi( charsetFindOrAddGlyph::@1/(byte*) charsetFindOrAddGlyph::glyph_cursor#12 )
  (byte*) charsetFindOrAddGlyph::glyph#8 ← phi( charsetFindOrAddGlyph::@1/(byte*) charsetFindOrAddGlyph::glyph#9 )
  (byte) charsetFindOrAddGlyph::i1#0 ← (byte) 0
  to:charsetFindOrAddGlyph::@20
charsetFindOrAddGlyph::@4: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@2 charsetFindOrAddGlyph::@7
  (byte) bob_charset_next_id#41 ← phi( charsetFindOrAddGlyph::@2/(byte) bob_charset_next_id#44 charsetFindOrAddGlyph::@7/(byte) bob_charset_next_id#45 )
  (byte) charsetFindOrAddGlyph::glyph_id#9 ← phi( charsetFindOrAddGlyph::@2/(byte) charsetFindOrAddGlyph::glyph_id#12 charsetFindOrAddGlyph::@7/(byte) charsetFindOrAddGlyph::glyph_id#13 )
  (byte) charsetFindOrAddGlyph::found#3 ← phi( charsetFindOrAddGlyph::@2/(byte) charsetFindOrAddGlyph::found#0 charsetFindOrAddGlyph::@7/(byte) charsetFindOrAddGlyph::found#4 )
  (byte*) charsetFindOrAddGlyph::glyph#4 ← phi( charsetFindOrAddGlyph::@2/(byte*) charsetFindOrAddGlyph::glyph#6 charsetFindOrAddGlyph::@7/(byte*) charsetFindOrAddGlyph::glyph#7 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#5 ← phi( charsetFindOrAddGlyph::@2/(byte*) charsetFindOrAddGlyph::glyph_cursor#8 charsetFindOrAddGlyph::@7/(byte*) charsetFindOrAddGlyph::glyph_cursor#9 )
  (byte) charsetFindOrAddGlyph::i#2 ← phi( charsetFindOrAddGlyph::@2/(byte) charsetFindOrAddGlyph::i#0 charsetFindOrAddGlyph::@7/(byte) charsetFindOrAddGlyph::i#1 )
  (bool~) charsetFindOrAddGlyph::$1 ← (byte) charsetFindOrAddGlyph::i#2 < (number) 8
  if((bool~) charsetFindOrAddGlyph::$1) goto charsetFindOrAddGlyph::@5
  to:charsetFindOrAddGlyph::@8
charsetFindOrAddGlyph::@5: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@4
  (byte) bob_charset_next_id#46 ← phi( charsetFindOrAddGlyph::@4/(byte) bob_charset_next_id#41 )
  (byte) charsetFindOrAddGlyph::glyph_id#14 ← phi( charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::glyph_id#9 )
  (byte) charsetFindOrAddGlyph::found#5 ← phi( charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::found#3 )
  (byte*) charsetFindOrAddGlyph::glyph#2 ← phi( charsetFindOrAddGlyph::@4/(byte*) charsetFindOrAddGlyph::glyph#4 )
  (byte) charsetFindOrAddGlyph::i#3 ← phi( charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::i#2 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#2 ← phi( charsetFindOrAddGlyph::@4/(byte*) charsetFindOrAddGlyph::glyph_cursor#5 )
  (bool~) charsetFindOrAddGlyph::$2 ← *((byte*) charsetFindOrAddGlyph::glyph_cursor#2 + (byte) charsetFindOrAddGlyph::i#3) != *((byte*) charsetFindOrAddGlyph::glyph#2 + (byte) charsetFindOrAddGlyph::i#3)
  (bool~) charsetFindOrAddGlyph::$3 ← ! (bool~) charsetFindOrAddGlyph::$2
  if((bool~) charsetFindOrAddGlyph::$3) goto charsetFindOrAddGlyph::@7
  to:charsetFindOrAddGlyph::@11
charsetFindOrAddGlyph::@7: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@5
  (byte) bob_charset_next_id#45 ← phi( charsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#46 )
  (byte) charsetFindOrAddGlyph::glyph_id#13 ← phi( charsetFindOrAddGlyph::@5/(byte) charsetFindOrAddGlyph::glyph_id#14 )
  (byte) charsetFindOrAddGlyph::found#4 ← phi( charsetFindOrAddGlyph::@5/(byte) charsetFindOrAddGlyph::found#5 )
  (byte*) charsetFindOrAddGlyph::glyph#7 ← phi( charsetFindOrAddGlyph::@5/(byte*) charsetFindOrAddGlyph::glyph#2 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#9 ← phi( charsetFindOrAddGlyph::@5/(byte*) charsetFindOrAddGlyph::glyph_cursor#2 )
  (byte) charsetFindOrAddGlyph::i#4 ← phi( charsetFindOrAddGlyph::@5/(byte) charsetFindOrAddGlyph::i#3 )
  (byte) charsetFindOrAddGlyph::i#1 ← ++ (byte) charsetFindOrAddGlyph::i#4
  to:charsetFindOrAddGlyph::@4
charsetFindOrAddGlyph::@11: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@5
  (byte*) charsetFindOrAddGlyph::glyph#13 ← phi( charsetFindOrAddGlyph::@5/(byte*) charsetFindOrAddGlyph::glyph#2 )
  (byte) bob_charset_next_id#40 ← phi( charsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#46 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#10 ← phi( charsetFindOrAddGlyph::@5/(byte*) charsetFindOrAddGlyph::glyph_cursor#2 )
  (byte) charsetFindOrAddGlyph::glyph_id#8 ← phi( charsetFindOrAddGlyph::@5/(byte) charsetFindOrAddGlyph::glyph_id#14 )
  (byte) charsetFindOrAddGlyph::found#1 ← (number) 0
  to:charsetFindOrAddGlyph::@8
charsetFindOrAddGlyph::@8: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@11 charsetFindOrAddGlyph::@4
  (byte*) charsetFindOrAddGlyph::glyph#12 ← phi( charsetFindOrAddGlyph::@11/(byte*) charsetFindOrAddGlyph::glyph#13 charsetFindOrAddGlyph::@4/(byte*) charsetFindOrAddGlyph::glyph#4 )
  (byte) bob_charset_next_id#32 ← phi( charsetFindOrAddGlyph::@11/(byte) bob_charset_next_id#40 charsetFindOrAddGlyph::@4/(byte) bob_charset_next_id#41 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#6 ← phi( charsetFindOrAddGlyph::@11/(byte*) charsetFindOrAddGlyph::glyph_cursor#10 charsetFindOrAddGlyph::@4/(byte*) charsetFindOrAddGlyph::glyph_cursor#5 )
  (byte) charsetFindOrAddGlyph::glyph_id#6 ← phi( charsetFindOrAddGlyph::@11/(byte) charsetFindOrAddGlyph::glyph_id#8 charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::glyph_id#9 )
  (byte) charsetFindOrAddGlyph::found#2 ← phi( charsetFindOrAddGlyph::@11/(byte) charsetFindOrAddGlyph::found#1 charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::found#3 )
  (bool~) charsetFindOrAddGlyph::$6 ← (number) 0 != (byte) charsetFindOrAddGlyph::found#2
  (bool~) charsetFindOrAddGlyph::$4 ← ! (bool~) charsetFindOrAddGlyph::$6
  if((bool~) charsetFindOrAddGlyph::$4) goto charsetFindOrAddGlyph::@16
  to:charsetFindOrAddGlyph::@14
charsetFindOrAddGlyph::@16: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@8
  (byte*) charsetFindOrAddGlyph::glyph#11 ← phi( charsetFindOrAddGlyph::@8/(byte*) charsetFindOrAddGlyph::glyph#12 )
  (byte) bob_charset_next_id#24 ← phi( charsetFindOrAddGlyph::@8/(byte) bob_charset_next_id#32 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#3 ← phi( charsetFindOrAddGlyph::@8/(byte*) charsetFindOrAddGlyph::glyph_cursor#6 )
  (byte) charsetFindOrAddGlyph::glyph_id#3 ← phi( charsetFindOrAddGlyph::@8/(byte) charsetFindOrAddGlyph::glyph_id#6 )
  (byte) charsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) charsetFindOrAddGlyph::glyph_id#3
  (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#3 + (number) 8
  to:charsetFindOrAddGlyph::@1
charsetFindOrAddGlyph::@14: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@8
  (byte) bob_charset_next_id#25 ← phi( charsetFindOrAddGlyph::@8/(byte) bob_charset_next_id#32 )
  (byte) charsetFindOrAddGlyph::glyph_id#4 ← phi( charsetFindOrAddGlyph::@8/(byte) charsetFindOrAddGlyph::glyph_id#6 )
  (byte) charsetFindOrAddGlyph::return#2 ← (byte) charsetFindOrAddGlyph::glyph_id#4
  to:charsetFindOrAddGlyph::@return
charsetFindOrAddGlyph::@return: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@14 charsetFindOrAddGlyph::@22
  (byte) bob_charset_next_id#16 ← phi( charsetFindOrAddGlyph::@14/(byte) bob_charset_next_id#25 charsetFindOrAddGlyph::@22/(byte) bob_charset_next_id#8 )
  (byte) charsetFindOrAddGlyph::return#6 ← phi( charsetFindOrAddGlyph::@14/(byte) charsetFindOrAddGlyph::return#2 charsetFindOrAddGlyph::@22/(byte) charsetFindOrAddGlyph::return#4 )
  (byte) charsetFindOrAddGlyph::return#3 ← (byte) charsetFindOrAddGlyph::return#6
  (byte) bob_charset_next_id#7 ← (byte) bob_charset_next_id#16
  return 
  to:@return
charsetFindOrAddGlyph::@20: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@21 charsetFindOrAddGlyph::@3
  (byte) charsetFindOrAddGlyph::glyph_id#7 ← phi( charsetFindOrAddGlyph::@21/(byte) charsetFindOrAddGlyph::glyph_id#10 charsetFindOrAddGlyph::@3/(byte) charsetFindOrAddGlyph::glyph_id#11 )
  (byte) bob_charset_next_id#26 ← phi( charsetFindOrAddGlyph::@21/(byte) bob_charset_next_id#33 charsetFindOrAddGlyph::@3/(byte) bob_charset_next_id#34 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#7 ← phi( charsetFindOrAddGlyph::@21/(byte*) charsetFindOrAddGlyph::glyph_cursor#4 charsetFindOrAddGlyph::@3/(byte*) charsetFindOrAddGlyph::glyph_cursor#11 )
  (byte*) charsetFindOrAddGlyph::glyph#5 ← phi( charsetFindOrAddGlyph::@21/(byte*) charsetFindOrAddGlyph::glyph#3 charsetFindOrAddGlyph::@3/(byte*) charsetFindOrAddGlyph::glyph#8 )
  (byte) charsetFindOrAddGlyph::i1#2 ← phi( charsetFindOrAddGlyph::@21/(byte) charsetFindOrAddGlyph::i1#1 charsetFindOrAddGlyph::@3/(byte) charsetFindOrAddGlyph::i1#0 )
  (bool~) charsetFindOrAddGlyph::$5 ← (byte) charsetFindOrAddGlyph::i1#2 < (number) 8
  if((bool~) charsetFindOrAddGlyph::$5) goto charsetFindOrAddGlyph::@21
  to:charsetFindOrAddGlyph::@22
charsetFindOrAddGlyph::@21: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@20
  (byte) charsetFindOrAddGlyph::glyph_id#10 ← phi( charsetFindOrAddGlyph::@20/(byte) charsetFindOrAddGlyph::glyph_id#7 )
  (byte) bob_charset_next_id#33 ← phi( charsetFindOrAddGlyph::@20/(byte) bob_charset_next_id#26 )
  (byte*) charsetFindOrAddGlyph::glyph_cursor#4 ← phi( charsetFindOrAddGlyph::@20/(byte*) charsetFindOrAddGlyph::glyph_cursor#7 )
  (byte) charsetFindOrAddGlyph::i1#3 ← phi( charsetFindOrAddGlyph::@20/(byte) charsetFindOrAddGlyph::i1#2 )
  (byte*) charsetFindOrAddGlyph::glyph#3 ← phi( charsetFindOrAddGlyph::@20/(byte*) charsetFindOrAddGlyph::glyph#5 )
  *((byte*) charsetFindOrAddGlyph::glyph_cursor#4 + (byte) charsetFindOrAddGlyph::i1#3) ← *((byte*) charsetFindOrAddGlyph::glyph#3 + (byte) charsetFindOrAddGlyph::i1#3)
  (byte) charsetFindOrAddGlyph::i1#1 ← ++ (byte) charsetFindOrAddGlyph::i1#3
  to:charsetFindOrAddGlyph::@20
charsetFindOrAddGlyph::@22: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@20
  (byte) charsetFindOrAddGlyph::glyph_id#5 ← phi( charsetFindOrAddGlyph::@20/(byte) charsetFindOrAddGlyph::glyph_id#7 )
  (byte) bob_charset_next_id#17 ← phi( charsetFindOrAddGlyph::@20/(byte) bob_charset_next_id#26 )
  (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#17
  (byte) charsetFindOrAddGlyph::return#4 ← (byte) charsetFindOrAddGlyph::glyph_id#5
  to:charsetFindOrAddGlyph::@return
@67: scope:[]  from @66
  (byte**) renderBobCleanupNext#23 ← phi( @66/(byte**) renderBobCleanupNext#27 )
  (byte) bob_charset_next_id#35 ← phi( @66/(byte) bob_charset_next_id#6 )
  (byte*) progress_cursor#5 ← (byte*) 0
  (byte) progress_idx#5 ← (byte) 0
  to:@69

(void()) progress_init((byte*) progress_init::line)
progress_init: scope:[progress_init]  from prepareBobs
  (byte*) progress_init::line#1 ← phi( prepareBobs/(byte*) progress_init::line#0 )
  (byte*) progress_cursor#6 ← (byte*) progress_init::line#1
  (byte) progress_idx#6 ← (number) 0
  to:progress_init::@return
progress_init::@return: scope:[progress_init]  from progress_init
  (byte) progress_idx#17 ← phi( progress_init/(byte) progress_idx#6 )
  (byte*) progress_cursor#16 ← phi( progress_init/(byte*) progress_cursor#6 )
  (byte*) progress_cursor#7 ← (byte*) progress_cursor#16
  (byte) progress_idx#7 ← (byte) progress_idx#17
  return 
  to:@return

(void()) progress_inc()
progress_inc: scope:[progress_inc]  from prepareBobs::@22
  (byte*) progress_cursor#26 ← phi( prepareBobs::@22/(byte*) progress_cursor#24 )
  (byte) progress_idx#18 ← phi( prepareBobs::@22/(byte) progress_idx#25 )
  (byte) progress_idx#8 ← ++ (byte) progress_idx#18
  (bool~) progress_inc::$0 ← (byte) progress_idx#8 == (number) 8
  (bool~) progress_inc::$1 ← ! (bool~) progress_inc::$0
  if((bool~) progress_inc::$1) goto progress_inc::@1
  to:progress_inc::@2
progress_inc::@1: scope:[progress_inc]  from progress_inc progress_inc::@2
  (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#26 progress_inc::@2/(byte*) progress_cursor#8 )
  (byte) progress_idx#19 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) progress_idx#9 )
  *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#19)
  to:progress_inc::@return
progress_inc::@2: scope:[progress_inc]  from progress_inc
  (byte*) progress_cursor#18 ← phi( progress_inc/(byte*) progress_cursor#26 )
  *((byte*) progress_cursor#18) ← *((const byte*) progress_inc::progress_chars + (number) 8)
  (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#18
  (byte) progress_idx#9 ← (number) 0
  to:progress_inc::@1
progress_inc::@return: scope:[progress_inc]  from progress_inc::@1
  (byte*) progress_cursor#19 ← phi( progress_inc::@1/(byte*) progress_cursor#17 )
  (byte) progress_idx#20 ← phi( progress_inc::@1/(byte) progress_idx#19 )
  (byte) progress_idx#10 ← (byte) progress_idx#20
  (byte*) progress_cursor#9 ← (byte*) progress_cursor#19
  return 
  to:@return
@69: scope:[]  from @67
  (byte**) renderBobCleanupNext#19 ← phi( @67/(byte**) renderBobCleanupNext#23 )
  (byte) bob_charset_next_id#27 ← phi( @67/(byte) bob_charset_next_id#35 )
  (byte) progress_idx#27 ← phi( @67/(byte) progress_idx#5 )
  (byte*) progress_cursor#27 ← phi( @67/(byte*) progress_cursor#5 )
  call main 
  to:@70
@70: scope:[]  from @69
  (byte**) renderBobCleanupNext#15 ← phi( @69/(byte**) renderBobCleanupNext#2 )
  (byte) bob_charset_next_id#18 ← phi( @69/(byte) bob_charset_next_id#1 )
  (byte) progress_idx#21 ← phi( @69/(byte) progress_idx#1 )
  (byte*) progress_cursor#20 ← phi( @69/(byte*) progress_cursor#1 )
  (byte*) progress_cursor#10 ← (byte*) progress_cursor#20
  (byte) progress_idx#11 ← (byte) progress_idx#21
  (byte) bob_charset_next_id#9 ← (byte) bob_charset_next_id#18
  (byte**) renderBobCleanupNext#8 ← (byte**) renderBobCleanupNext#15
  to:@end
@end: scope:[]  from @70

SYMBOL TABLE SSA
(label) @60
(label) @66
(label) @67
(label) @69
(label) @70
(label) @begin
(label) @end
(const byte*) BASIC_CHARSET = (byte*)(number) $1000
(const byte*) BASIC_SCREEN = (byte*)(number) $400
(const byte*) BOB_CHARSET = (byte*)(number) $2000
(const byte*) BOB_SCREEN = (byte*)(number) $2800
(const byte) BOB_SHIFTS_X = (byte) 4
(const byte) BOB_SHIFTS_Y = (byte) 8
(const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y
(const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4]  = { fill( 9*8*4, 0) }
(const byte*) BORDERCOL = (byte*)(number) $d020
(const byte*) CIA1_PORT_A = (byte*)(number) $dc00
(const byte*) CIA1_PORT_B = (byte*)(number) $dc01
(const byte*) CIA2_PORT_A = (byte*)(number) $dd00
(const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02
(const byte*) D018 = (byte*)(number) $d018
(const byte) KEY_SPACE = (byte) $3c
(const word*) MUL40[(number) $20]  = { fill( $20, 0) }
(const byte) NUM_BOBS = (byte) $19
(const byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8]  = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff))
	.for (var x=0;x<3; x++)
    	.for (var y=0; y<24; y++)
            .byte pic.getSinglecolorByte(x,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**) RENDERBOB_CLEANUP[(const byte) NUM_BOBS]  = { fill( NUM_BOBS, 0) }
(const byte) SIZEOF_POINTER = (byte) 2
(const byte) SIZEOF_WORD = (byte) 2
(byte) bob_charset_next_id
(byte) bob_charset_next_id#0
(byte) bob_charset_next_id#1
(byte) bob_charset_next_id#10
(byte) bob_charset_next_id#11
(byte) bob_charset_next_id#12
(byte) bob_charset_next_id#13
(byte) bob_charset_next_id#14
(byte) bob_charset_next_id#15
(byte) bob_charset_next_id#16
(byte) bob_charset_next_id#17
(byte) bob_charset_next_id#18
(byte) bob_charset_next_id#19
(byte) bob_charset_next_id#2
(byte) bob_charset_next_id#20
(byte) bob_charset_next_id#21
(byte) bob_charset_next_id#22
(byte) bob_charset_next_id#23
(byte) bob_charset_next_id#24
(byte) bob_charset_next_id#25
(byte) bob_charset_next_id#26
(byte) bob_charset_next_id#27
(byte) bob_charset_next_id#28
(byte) bob_charset_next_id#29
(byte) bob_charset_next_id#3
(byte) bob_charset_next_id#30
(byte) bob_charset_next_id#31
(byte) bob_charset_next_id#32
(byte) bob_charset_next_id#33
(byte) bob_charset_next_id#34
(byte) bob_charset_next_id#35
(byte) bob_charset_next_id#36
(byte) bob_charset_next_id#37
(byte) bob_charset_next_id#38
(byte) bob_charset_next_id#39
(byte) bob_charset_next_id#4
(byte) bob_charset_next_id#40
(byte) bob_charset_next_id#41
(byte) bob_charset_next_id#42
(byte) bob_charset_next_id#43
(byte) bob_charset_next_id#44
(byte) bob_charset_next_id#45
(byte) bob_charset_next_id#46
(byte) bob_charset_next_id#47
(byte) bob_charset_next_id#48
(byte) bob_charset_next_id#49
(byte) bob_charset_next_id#5
(byte) bob_charset_next_id#50
(byte) bob_charset_next_id#51
(byte) bob_charset_next_id#52
(byte) bob_charset_next_id#53
(byte) bob_charset_next_id#54
(byte) bob_charset_next_id#55
(byte) bob_charset_next_id#56
(byte) bob_charset_next_id#57
(byte) bob_charset_next_id#58
(byte) bob_charset_next_id#59
(byte) bob_charset_next_id#6
(byte) bob_charset_next_id#60
(byte) bob_charset_next_id#61
(byte) bob_charset_next_id#62
(byte) bob_charset_next_id#63
(byte) bob_charset_next_id#64
(byte) bob_charset_next_id#65
(byte) bob_charset_next_id#66
(byte) bob_charset_next_id#67
(byte) bob_charset_next_id#68
(byte) bob_charset_next_id#69
(byte) bob_charset_next_id#7
(byte) bob_charset_next_id#70
(byte) bob_charset_next_id#71
(byte) bob_charset_next_id#72
(byte) bob_charset_next_id#73
(byte) bob_charset_next_id#74
(byte) bob_charset_next_id#75
(byte) bob_charset_next_id#76
(byte) bob_charset_next_id#77
(byte) bob_charset_next_id#8
(byte) bob_charset_next_id#9
(byte()) charsetFindOrAddGlyph((byte*) charsetFindOrAddGlyph::glyph , (byte*) charsetFindOrAddGlyph::charset)
(bool~) charsetFindOrAddGlyph::$0
(bool~) charsetFindOrAddGlyph::$1
(bool~) charsetFindOrAddGlyph::$2
(bool~) charsetFindOrAddGlyph::$3
(bool~) charsetFindOrAddGlyph::$4
(bool~) charsetFindOrAddGlyph::$5
(bool~) charsetFindOrAddGlyph::$6
(label) charsetFindOrAddGlyph::@1
(label) charsetFindOrAddGlyph::@11
(label) charsetFindOrAddGlyph::@14
(label) charsetFindOrAddGlyph::@16
(label) charsetFindOrAddGlyph::@2
(label) charsetFindOrAddGlyph::@20
(label) charsetFindOrAddGlyph::@21
(label) charsetFindOrAddGlyph::@22
(label) charsetFindOrAddGlyph::@3
(label) charsetFindOrAddGlyph::@4
(label) charsetFindOrAddGlyph::@5
(label) charsetFindOrAddGlyph::@7
(label) charsetFindOrAddGlyph::@8
(label) charsetFindOrAddGlyph::@return
(byte*) charsetFindOrAddGlyph::charset
(byte*) charsetFindOrAddGlyph::charset#0
(byte*) charsetFindOrAddGlyph::charset#1
(byte*) charsetFindOrAddGlyph::charset#2
(byte) charsetFindOrAddGlyph::found
(byte) charsetFindOrAddGlyph::found#0
(byte) charsetFindOrAddGlyph::found#1
(byte) charsetFindOrAddGlyph::found#2
(byte) charsetFindOrAddGlyph::found#3
(byte) charsetFindOrAddGlyph::found#4
(byte) charsetFindOrAddGlyph::found#5
(byte*) charsetFindOrAddGlyph::glyph
(byte*) charsetFindOrAddGlyph::glyph#0
(byte*) charsetFindOrAddGlyph::glyph#1
(byte*) charsetFindOrAddGlyph::glyph#10
(byte*) charsetFindOrAddGlyph::glyph#11
(byte*) charsetFindOrAddGlyph::glyph#12
(byte*) charsetFindOrAddGlyph::glyph#13
(byte*) charsetFindOrAddGlyph::glyph#2
(byte*) charsetFindOrAddGlyph::glyph#3
(byte*) charsetFindOrAddGlyph::glyph#4
(byte*) charsetFindOrAddGlyph::glyph#5
(byte*) charsetFindOrAddGlyph::glyph#6
(byte*) charsetFindOrAddGlyph::glyph#7
(byte*) charsetFindOrAddGlyph::glyph#8
(byte*) charsetFindOrAddGlyph::glyph#9
(byte*) charsetFindOrAddGlyph::glyph_cursor
(byte*) charsetFindOrAddGlyph::glyph_cursor#0
(byte*) charsetFindOrAddGlyph::glyph_cursor#1
(byte*) charsetFindOrAddGlyph::glyph_cursor#10
(byte*) charsetFindOrAddGlyph::glyph_cursor#11
(byte*) charsetFindOrAddGlyph::glyph_cursor#12
(byte*) charsetFindOrAddGlyph::glyph_cursor#2
(byte*) charsetFindOrAddGlyph::glyph_cursor#3
(byte*) charsetFindOrAddGlyph::glyph_cursor#4
(byte*) charsetFindOrAddGlyph::glyph_cursor#5
(byte*) charsetFindOrAddGlyph::glyph_cursor#6
(byte*) charsetFindOrAddGlyph::glyph_cursor#7
(byte*) charsetFindOrAddGlyph::glyph_cursor#8
(byte*) charsetFindOrAddGlyph::glyph_cursor#9
(byte) charsetFindOrAddGlyph::glyph_id
(byte) charsetFindOrAddGlyph::glyph_id#0
(byte) charsetFindOrAddGlyph::glyph_id#1
(byte) charsetFindOrAddGlyph::glyph_id#10
(byte) charsetFindOrAddGlyph::glyph_id#11
(byte) charsetFindOrAddGlyph::glyph_id#12
(byte) charsetFindOrAddGlyph::glyph_id#13
(byte) charsetFindOrAddGlyph::glyph_id#14
(byte) charsetFindOrAddGlyph::glyph_id#2
(byte) charsetFindOrAddGlyph::glyph_id#3
(byte) charsetFindOrAddGlyph::glyph_id#4
(byte) charsetFindOrAddGlyph::glyph_id#5
(byte) charsetFindOrAddGlyph::glyph_id#6
(byte) charsetFindOrAddGlyph::glyph_id#7
(byte) charsetFindOrAddGlyph::glyph_id#8
(byte) charsetFindOrAddGlyph::glyph_id#9
(byte) charsetFindOrAddGlyph::i
(byte) charsetFindOrAddGlyph::i#0
(byte) charsetFindOrAddGlyph::i#1
(byte) charsetFindOrAddGlyph::i#2
(byte) charsetFindOrAddGlyph::i#3
(byte) charsetFindOrAddGlyph::i#4
(byte) charsetFindOrAddGlyph::i1
(byte) charsetFindOrAddGlyph::i1#0
(byte) charsetFindOrAddGlyph::i1#1
(byte) charsetFindOrAddGlyph::i1#2
(byte) charsetFindOrAddGlyph::i1#3
(byte) charsetFindOrAddGlyph::return
(byte) charsetFindOrAddGlyph::return#0
(byte) charsetFindOrAddGlyph::return#1
(byte) charsetFindOrAddGlyph::return#2
(byte) charsetFindOrAddGlyph::return#3
(byte) charsetFindOrAddGlyph::return#4
(byte) charsetFindOrAddGlyph::return#5
(byte) charsetFindOrAddGlyph::return#6
(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
(number~) keyboard_key_pressed::$0
(byte~) keyboard_key_pressed::$1
(byte~) keyboard_key_pressed::$2
(byte~) keyboard_key_pressed::$3
(label) keyboard_key_pressed::@2
(label) keyboard_key_pressed::@return
(byte) keyboard_key_pressed::colidx
(byte) keyboard_key_pressed::colidx#0
(byte) keyboard_key_pressed::colidx#1
(byte) keyboard_key_pressed::key
(byte) keyboard_key_pressed::key#0
(byte) keyboard_key_pressed::key#1
(byte) keyboard_key_pressed::key#2
(byte) keyboard_key_pressed::return
(byte) keyboard_key_pressed::return#0
(byte) keyboard_key_pressed::return#1
(byte) keyboard_key_pressed::return#2
(byte) keyboard_key_pressed::return#3
(byte) keyboard_key_pressed::return#4
(byte) keyboard_key_pressed::return#5
(byte) keyboard_key_pressed::return#6
(byte) keyboard_key_pressed::rowidx
(byte) keyboard_key_pressed::rowidx#0
(const byte*) keyboard_matrix_col_bitmask[(number) 8]  = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
(byte~) keyboard_matrix_read::$0
(label) keyboard_matrix_read::@return
(byte) keyboard_matrix_read::return
(byte) keyboard_matrix_read::return#0
(byte) keyboard_matrix_read::return#1
(byte) keyboard_matrix_read::return#2
(byte) keyboard_matrix_read::return#3
(byte) keyboard_matrix_read::return#4
(byte) keyboard_matrix_read::row_pressed_bits
(byte) keyboard_matrix_read::row_pressed_bits#0
(byte) keyboard_matrix_read::rowid
(byte) keyboard_matrix_read::rowid#0
(byte) keyboard_matrix_read::rowid#1
(const byte*) keyboard_matrix_row_bitmask[(number) 8]  = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f }
(void()) main()
(byte~) main::$10
(byte~) main::$11
(bool~) main::$13
(bool~) main::$14
(byte~) main::$15
(bool~) main::$16
(byte~) main::$17
(bool~) main::$18
(bool~) main::$19
(byte~) main::$4
(byte~) main::$7
(bool~) main::$8
(label) main::@1
(label) main::@17
(label) main::@19
(label) main::@23
(label) main::@24
(label) main::@25
(label) main::@26
(label) main::@27
(label) main::@28
(label) main::@29
(label) main::@30
(label) main::@31
(label) main::@32
(label) main::@33
(label) main::@34
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte) main::col
(byte) main::col#0
(byte) main::col#1
(byte) main::col#2
(byte) main::col#3
(byte) main::col#4
(byte) main::col#5
(const signed word) main::colOffsetX = (signed word) $100
(const signed word) main::colOffsetY = (signed word) $1800
(signed word) main::origX
(signed word) main::origX#0
(signed word) main::origX#1
(signed word) main::origX#10
(signed word) main::origX#11
(signed word) main::origX#2
(signed word) main::origX#3
(signed word) main::origX#4
(signed word) main::origX#5
(signed word) main::origX#6
(signed word) main::origX#7
(signed word) main::origX#8
(signed word) main::origX#9
(const signed word) main::origY = (signed word) $a00
(byte) main::row
(byte) main::row#0
(byte) main::row#1
(byte) main::row#2
(byte) main::row#3
(const signed word) main::rowOffsetX = (signed word) $c00
(signed word) main::rowOffsetY
(signed word) main::rowOffsetY#0
(signed word) main::rowOffsetY#1
(signed word) main::rowOffsetY#10
(signed word) main::rowOffsetY#11
(signed word) main::rowOffsetY#2
(signed word) main::rowOffsetY#3
(signed word) main::rowOffsetY#4
(signed word) main::rowOffsetY#5
(signed word) main::rowOffsetY#6
(signed word) main::rowOffsetY#7
(signed word) main::rowOffsetY#8
(signed word) main::rowOffsetY#9
(signed word) main::rowX
(signed word) main::rowX#0
(signed word) main::rowX#1
(signed word) main::rowX#2
(signed word) main::rowX#3
(signed word) main::rowX#4
(signed word) main::rowX#5
(signed word) main::rowY
(signed word) main::rowY#0
(signed word) main::rowY#1
(signed word) main::rowY#2
(signed word) main::rowY#3
(signed word) main::rowY#4
(signed word) main::rowY#5
(label) main::toD0181
(word~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(number~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(number~) main::toD0181_$6
(number~) main::toD0181_$7
(number~) main::toD0181_$8
(label) main::toD0181_@return
(byte*) main::toD0181_gfx
(byte*) main::toD0181_gfx#0
(byte*) main::toD0181_gfx#1
(byte) main::toD0181_return
(byte) main::toD0181_return#0
(byte) main::toD0181_return#1
(byte) main::toD0181_return#2
(byte) main::toD0181_return#3
(byte*) main::toD0181_screen
(byte*) main::toD0181_screen#0
(byte*) main::toD0181_screen#1
(label) main::toD0182
(word~) main::toD0182_$0
(number~) main::toD0182_$1
(number~) main::toD0182_$2
(number~) main::toD0182_$3
(word~) main::toD0182_$4
(byte~) main::toD0182_$5
(number~) main::toD0182_$6
(number~) main::toD0182_$7
(number~) main::toD0182_$8
(label) main::toD0182_@return
(byte*) main::toD0182_gfx
(byte*) main::toD0182_gfx#0
(byte*) main::toD0182_gfx#1
(byte) main::toD0182_return
(byte) main::toD0182_return#0
(byte) main::toD0182_return#1
(byte) main::toD0182_return#2
(byte) main::toD0182_return#3
(byte*) main::toD0182_screen
(byte*) main::toD0182_screen#0
(byte*) main::toD0182_screen#1
(label) main::vicSelectGfxBank1
(byte~) main::vicSelectGfxBank1_$0
(label) main::vicSelectGfxBank1_@1
(byte*) main::vicSelectGfxBank1_gfx
(byte*) main::vicSelectGfxBank1_gfx#0
(byte*) main::vicSelectGfxBank1_gfx#1
(label) main::vicSelectGfxBank1_toDd001
(word~) main::vicSelectGfxBank1_toDd001_$0
(byte~) main::vicSelectGfxBank1_toDd001_$1
(number~) main::vicSelectGfxBank1_toDd001_$2
(number~) main::vicSelectGfxBank1_toDd001_$3
(label) main::vicSelectGfxBank1_toDd001_@return
(byte*) main::vicSelectGfxBank1_toDd001_gfx
(byte*) main::vicSelectGfxBank1_toDd001_gfx#0
(byte*) main::vicSelectGfxBank1_toDd001_gfx#1
(byte) main::vicSelectGfxBank1_toDd001_return
(byte) main::vicSelectGfxBank1_toDd001_return#0
(byte) main::vicSelectGfxBank1_toDd001_return#1
(byte) main::vicSelectGfxBank1_toDd001_return#2
(byte) main::vicSelectGfxBank1_toDd001_return#3
(label) main::vicSelectGfxBank2
(byte~) main::vicSelectGfxBank2_$0
(label) main::vicSelectGfxBank2_@1
(byte*) main::vicSelectGfxBank2_gfx
(byte*) main::vicSelectGfxBank2_gfx#0
(byte*) main::vicSelectGfxBank2_gfx#1
(label) main::vicSelectGfxBank2_toDd001
(word~) main::vicSelectGfxBank2_toDd001_$0
(byte~) main::vicSelectGfxBank2_toDd001_$1
(number~) main::vicSelectGfxBank2_toDd001_$2
(number~) main::vicSelectGfxBank2_toDd001_$3
(label) main::vicSelectGfxBank2_toDd001_@return
(byte*) main::vicSelectGfxBank2_toDd001_gfx
(byte*) main::vicSelectGfxBank2_toDd001_gfx#0
(byte*) main::vicSelectGfxBank2_toDd001_gfx#1
(byte) main::vicSelectGfxBank2_toDd001_return
(byte) main::vicSelectGfxBank2_toDd001_return#0
(byte) main::vicSelectGfxBank2_toDd001_return#1
(byte) main::vicSelectGfxBank2_toDd001_return#2
(byte) main::vicSelectGfxBank2_toDd001_return#3
(signed word) main::x
(signed word) main::x#0
(signed word) main::x#1
(signed word) main::x#2
(signed word) main::x#3
(signed word) main::y
(signed word) main::y#0
(signed word) main::y#1
(signed word) main::y#2
(signed word) main::y#3
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(bool~) memset::$0
(bool~) memset::$1
(byte*~) memset::$2
(byte*~) memset::$3
(bool~) memset::$4
(label) memset::@1
(label) memset::@2
(label) memset::@4
(label) memset::@5
(label) memset::@return
(byte) memset::c
(byte) memset::c#0
(byte) memset::c#1
(byte) memset::c#2
(byte) memset::c#3
(byte) memset::c#4
(byte*) memset::dst
(byte*) memset::dst#0
(byte*) memset::dst#1
(byte*) memset::dst#2
(byte*) memset::dst#3
(byte*) memset::end
(byte*) memset::end#0
(byte*) memset::end#1
(byte*) memset::end#2
(word) memset::num
(word) memset::num#0
(word) memset::num#1
(word) memset::num#2
(void*) memset::return
(void*) memset::return#0
(void*) memset::return#1
(void*) memset::return#2
(void*) memset::return#3
(void*) memset::str
(void*) memset::str#0
(void*) memset::str#1
(void*) memset::str#2
(void*) memset::str#3
(void*) memset::str#4
(void*) memset::str#5
(void()) mulf_init()
(bool~) mulf_init::$0
(number~) mulf_init::$1
(bool~) mulf_init::$10
(bool~) mulf_init::$2
(bool~) mulf_init::$3
(byte~) mulf_init::$4
(byte~) mulf_init::$5
(word~) mulf_init::$6
(bool~) mulf_init::$7
(byte~) mulf_init::$8
(bool~) mulf_init::$9
(label) mulf_init::@1
(label) mulf_init::@10
(label) mulf_init::@11
(label) mulf_init::@12
(label) mulf_init::@15
(label) mulf_init::@2
(label) mulf_init::@3
(label) mulf_init::@4
(label) mulf_init::@7
(label) mulf_init::@9
(label) mulf_init::@return
(byte) mulf_init::c
(byte) mulf_init::c#0
(byte) mulf_init::c#1
(byte) mulf_init::c#2
(byte) mulf_init::c#3
(byte) mulf_init::c#4
(byte) mulf_init::c#5
(byte) mulf_init::dir
(byte) mulf_init::dir#0
(byte) mulf_init::dir#1
(byte) mulf_init::dir#2
(byte) mulf_init::dir#3
(byte) mulf_init::dir#4
(word) mulf_init::sqr
(word) mulf_init::sqr#0
(word) mulf_init::sqr#1
(word) mulf_init::sqr#2
(word) mulf_init::sqr#3
(word) mulf_init::sqr#4
(word) mulf_init::sqr#5
(word) mulf_init::sqr#6
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#0
(byte*) mulf_init::sqr1_hi#1
(byte*) mulf_init::sqr1_hi#2
(byte*) mulf_init::sqr1_hi#3
(byte*) mulf_init::sqr1_hi#4
(byte*) mulf_init::sqr1_hi#5
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#0
(byte*) mulf_init::sqr1_lo#1
(byte*) mulf_init::sqr1_lo#2
(byte*) mulf_init::sqr1_lo#3
(byte*) mulf_init::sqr1_lo#4
(byte*) mulf_init::sqr1_lo#5
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#0
(byte*) mulf_init::sqr2_hi#1
(byte*) mulf_init::sqr2_hi#2
(byte*) mulf_init::sqr2_hi#3
(byte*) mulf_init::sqr2_hi#4
(byte*) mulf_init::sqr2_hi#5
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#0
(byte*) mulf_init::sqr2_lo#1
(byte*) mulf_init::sqr2_lo#2
(byte*) mulf_init::sqr2_lo#3
(byte*) mulf_init::sqr2_lo#4
(byte*) mulf_init::sqr2_lo#5
(byte) mulf_init::x_2
(byte) mulf_init::x_2#0
(byte) mulf_init::x_2#1
(byte) mulf_init::x_2#2
(byte) mulf_init::x_2#3
(byte) mulf_init::x_2#4
(byte) mulf_init::x_2#5
(byte) mulf_init::x_255
(byte) mulf_init::x_255#0
(byte) mulf_init::x_255#1
(byte) mulf_init::x_255#2
(byte) mulf_init::x_255#3
(byte) mulf_init::x_255#4
(byte) mulf_init::x_255#5
(const byte*) mulf_sqr1_hi[(number) $200]  = { fill( $200, 0) }
(const byte*) mulf_sqr1_lo[(number) $200]  = { fill( $200, 0) }
(const byte*) mulf_sqr2_hi[(number) $200]  = { fill( $200, 0) }
(const byte*) mulf_sqr2_lo[(number) $200]  = { fill( $200, 0) }
(void()) prepareBobs()
(bool~) prepareBobs::$2
(bool~) prepareBobs::$3
(byte*~) prepareBobs::$4
(bool~) prepareBobs::$5
(byte~) prepareBobs::$6
(label) prepareBobs::@1
(label) prepareBobs::@19
(label) prepareBobs::@2
(label) prepareBobs::@20
(label) prepareBobs::@21
(label) prepareBobs::@22
(label) prepareBobs::@23
(label) prepareBobs::@24
(label) prepareBobs::@25
(label) prepareBobs::@4
(label) prepareBobs::@5
(label) prepareBobs::@6
(label) prepareBobs::@7
(label) prepareBobs::@8
(label) prepareBobs::@9
(label) prepareBobs::@return
(byte*) prepareBobs::bob_glyph
(byte*) prepareBobs::bob_glyph#0
(byte*) prepareBobs::bob_glyph#1
(byte*) prepareBobs::bob_glyph#2
(byte*) prepareBobs::bob_glyph#3
(byte*) prepareBobs::bob_glyph#4
(byte*) prepareBobs::bob_glyph#5
(byte*) prepareBobs::bob_table
(byte*) prepareBobs::bob_table#0
(byte*) prepareBobs::bob_table#1
(byte*) prepareBobs::bob_table#2
(byte*) prepareBobs::bob_table#3
(byte*) prepareBobs::bob_table#4
(byte*) prepareBobs::bob_table#5
(byte) prepareBobs::bob_table_idx
(byte) prepareBobs::bob_table_idx#0
(byte) prepareBobs::bob_table_idx#1
(byte) prepareBobs::bob_table_idx#10
(byte) prepareBobs::bob_table_idx#11
(byte) prepareBobs::bob_table_idx#12
(byte) prepareBobs::bob_table_idx#13
(byte) prepareBobs::bob_table_idx#14
(byte) prepareBobs::bob_table_idx#2
(byte) prepareBobs::bob_table_idx#3
(byte) prepareBobs::bob_table_idx#4
(byte) prepareBobs::bob_table_idx#5
(byte) prepareBobs::bob_table_idx#6
(byte) prepareBobs::bob_table_idx#7
(byte) prepareBobs::bob_table_idx#8
(byte) prepareBobs::bob_table_idx#9
(byte) prepareBobs::cell
(byte) prepareBobs::cell#0
(byte) prepareBobs::cell#1
(byte) prepareBobs::cell#2
(byte) prepareBobs::cell#3
(byte) prepareBobs::cell#4
(byte) prepareBobs::cell#5
(byte) prepareBobs::shift_x
(byte) prepareBobs::shift_x#0
(byte) prepareBobs::shift_x#1
(byte) prepareBobs::shift_x#10
(byte) prepareBobs::shift_x#2
(byte) prepareBobs::shift_x#3
(byte) prepareBobs::shift_x#4
(byte) prepareBobs::shift_x#5
(byte) prepareBobs::shift_x#6
(byte) prepareBobs::shift_x#7
(byte) prepareBobs::shift_x#8
(byte) prepareBobs::shift_x#9
(byte) prepareBobs::shift_y
(byte) prepareBobs::shift_y#0
(byte) prepareBobs::shift_y#1
(byte) prepareBobs::shift_y#10
(byte) prepareBobs::shift_y#11
(byte) prepareBobs::shift_y#12
(byte) prepareBobs::shift_y#13
(byte) prepareBobs::shift_y#14
(byte) prepareBobs::shift_y#2
(byte) prepareBobs::shift_y#3
(byte) prepareBobs::shift_y#4
(byte) prepareBobs::shift_y#5
(byte) prepareBobs::shift_y#6
(byte) prepareBobs::shift_y#7
(byte) prepareBobs::shift_y#8
(byte) prepareBobs::shift_y#9
(byte*) progress_cursor
(byte*) progress_cursor#0
(byte*) progress_cursor#1
(byte*) progress_cursor#10
(byte*) progress_cursor#11
(byte*) progress_cursor#12
(byte*) progress_cursor#13
(byte*) progress_cursor#14
(byte*) progress_cursor#15
(byte*) progress_cursor#16
(byte*) progress_cursor#17
(byte*) progress_cursor#18
(byte*) progress_cursor#19
(byte*) progress_cursor#2
(byte*) progress_cursor#20
(byte*) progress_cursor#21
(byte*) progress_cursor#22
(byte*) progress_cursor#23
(byte*) progress_cursor#24
(byte*) progress_cursor#25
(byte*) progress_cursor#26
(byte*) progress_cursor#27
(byte*) progress_cursor#28
(byte*) progress_cursor#29
(byte*) progress_cursor#3
(byte*) progress_cursor#30
(byte*) progress_cursor#31
(byte*) progress_cursor#32
(byte*) progress_cursor#33
(byte*) progress_cursor#34
(byte*) progress_cursor#35
(byte*) progress_cursor#36
(byte*) progress_cursor#37
(byte*) progress_cursor#38
(byte*) progress_cursor#39
(byte*) progress_cursor#4
(byte*) progress_cursor#40
(byte*) progress_cursor#41
(byte*) progress_cursor#42
(byte*) progress_cursor#43
(byte*) progress_cursor#44
(byte*) progress_cursor#45
(byte*) progress_cursor#46
(byte*) progress_cursor#47
(byte*) progress_cursor#48
(byte*) progress_cursor#49
(byte*) progress_cursor#5
(byte*) progress_cursor#50
(byte*) progress_cursor#51
(byte*) progress_cursor#52
(byte*) progress_cursor#53
(byte*) progress_cursor#54
(byte*) progress_cursor#55
(byte*) progress_cursor#56
(byte*) progress_cursor#57
(byte*) progress_cursor#58
(byte*) progress_cursor#59
(byte*) progress_cursor#6
(byte*) progress_cursor#60
(byte*) progress_cursor#61
(byte*) progress_cursor#62
(byte*) progress_cursor#63
(byte*) progress_cursor#64
(byte*) progress_cursor#65
(byte*) progress_cursor#66
(byte*) progress_cursor#67
(byte*) progress_cursor#68
(byte*) progress_cursor#69
(byte*) progress_cursor#7
(byte*) progress_cursor#8
(byte*) progress_cursor#9
(byte) progress_idx
(byte) progress_idx#0
(byte) progress_idx#1
(byte) progress_idx#10
(byte) progress_idx#11
(byte) progress_idx#12
(byte) progress_idx#13
(byte) progress_idx#14
(byte) progress_idx#15
(byte) progress_idx#16
(byte) progress_idx#17
(byte) progress_idx#18
(byte) progress_idx#19
(byte) progress_idx#2
(byte) progress_idx#20
(byte) progress_idx#21
(byte) progress_idx#22
(byte) progress_idx#23
(byte) progress_idx#24
(byte) progress_idx#25
(byte) progress_idx#26
(byte) progress_idx#27
(byte) progress_idx#28
(byte) progress_idx#29
(byte) progress_idx#3
(byte) progress_idx#30
(byte) progress_idx#31
(byte) progress_idx#32
(byte) progress_idx#33
(byte) progress_idx#34
(byte) progress_idx#35
(byte) progress_idx#36
(byte) progress_idx#37
(byte) progress_idx#38
(byte) progress_idx#39
(byte) progress_idx#4
(byte) progress_idx#40
(byte) progress_idx#41
(byte) progress_idx#42
(byte) progress_idx#43
(byte) progress_idx#44
(byte) progress_idx#45
(byte) progress_idx#46
(byte) progress_idx#47
(byte) progress_idx#48
(byte) progress_idx#49
(byte) progress_idx#5
(byte) progress_idx#50
(byte) progress_idx#51
(byte) progress_idx#52
(byte) progress_idx#53
(byte) progress_idx#54
(byte) progress_idx#55
(byte) progress_idx#56
(byte) progress_idx#57
(byte) progress_idx#58
(byte) progress_idx#59
(byte) progress_idx#6
(byte) progress_idx#60
(byte) progress_idx#61
(byte) progress_idx#62
(byte) progress_idx#63
(byte) progress_idx#64
(byte) progress_idx#65
(byte) progress_idx#66
(byte) progress_idx#67
(byte) progress_idx#68
(byte) progress_idx#69
(byte) progress_idx#7
(byte) progress_idx#8
(byte) progress_idx#9
(void()) progress_inc()
(bool~) progress_inc::$0
(bool~) progress_inc::$1
(label) progress_inc::@1
(label) progress_inc::@2
(label) progress_inc::@return
(const byte*) progress_inc::progress_chars[]  = { (byte) $20, (byte) $65, (byte) $74, (byte) $75, (byte) $61, (byte) $f6, (byte) $e7, (byte) $ea, (byte) $e0 }
(void()) progress_init((byte*) progress_init::line)
(label) progress_init::@return
(byte*) progress_init::line
(byte*) progress_init::line#0
(byte*) progress_init::line#1
(void()) protoBobShiftDown()
(bool~) protoBobShiftDown::$0
(label) protoBobShiftDown::@1
(label) protoBobShiftDown::@2
(label) protoBobShiftDown::@3
(label) protoBobShiftDown::@return
(byte) protoBobShiftDown::i
(byte) protoBobShiftDown::i#0
(byte) protoBobShiftDown::i#1
(byte) protoBobShiftDown::i#2
(byte) protoBobShiftDown::i#3
(void()) protoBobShiftRight()
(bool~) protoBobShiftRight::$0
(number~) protoBobShiftRight::$1
(byte~) protoBobShiftRight::$2
(byte~) protoBobShiftRight::$3
(byte~) protoBobShiftRight::$4
(byte~) protoBobShiftRight::$5
(byte~) protoBobShiftRight::$6
(bool~) protoBobShiftRight::$7
(bool~) protoBobShiftRight::$8
(label) protoBobShiftRight::@1
(label) protoBobShiftRight::@13
(label) protoBobShiftRight::@2
(label) protoBobShiftRight::@4
(label) protoBobShiftRight::@5
(label) protoBobShiftRight::@6
(label) protoBobShiftRight::@7
(label) protoBobShiftRight::@8
(label) protoBobShiftRight::@return
(byte) protoBobShiftRight::carry
(byte) protoBobShiftRight::carry#0
(byte) protoBobShiftRight::carry#1
(byte) protoBobShiftRight::carry#2
(byte) protoBobShiftRight::carry#3
(byte) protoBobShiftRight::carry#4
(byte) protoBobShiftRight::carry#5
(byte) protoBobShiftRight::carry#6
(byte) protoBobShiftRight::carry#7
(byte) protoBobShiftRight::carry#8
(byte) protoBobShiftRight::carry#9
(byte) protoBobShiftRight::i
(byte) protoBobShiftRight::i#0
(byte) protoBobShiftRight::i#1
(byte) protoBobShiftRight::i#2
(byte) protoBobShiftRight::i#3
(byte) protoBobShiftRight::i#4
(byte) protoBobShiftRight::i#5
(byte) protoBobShiftRight::i#6
(byte) protoBobShiftRight::i#7
(byte) protoBobShiftRight::i#8
(byte) protoBobShiftRight::i#9
(byte) protoBobShiftRight::j
(byte) protoBobShiftRight::j#0
(byte) protoBobShiftRight::j#1
(byte) protoBobShiftRight::j#10
(byte) protoBobShiftRight::j#2
(byte) protoBobShiftRight::j#3
(byte) protoBobShiftRight::j#4
(byte) protoBobShiftRight::j#5
(byte) protoBobShiftRight::j#6
(byte) protoBobShiftRight::j#7
(byte) protoBobShiftRight::j#8
(byte) protoBobShiftRight::j#9
(byte) protoBobShiftRight::new_carry
(byte) protoBobShiftRight::new_carry#0
(void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos)
(byte~) renderBob::$0
(byte~) renderBob::$1
(byte*~) renderBob::$2
(byte*~) renderBob::$3
(number~) renderBob::$4
(number~) renderBob::$5
(number~) renderBob::$6
(number~) renderBob::$7
(byte~) renderBob::$8
(label) renderBob::@return
(byte) renderBob::bob_table_idx
(byte) renderBob::bob_table_idx#0
(byte*) renderBob::screen
(byte*) renderBob::screen#0
(byte) renderBob::x_char_offset
(byte) renderBob::x_char_offset#0
(byte) renderBob::xpos
(byte) renderBob::xpos#0
(byte) renderBob::xpos#1
(byte) renderBob::y_char_offset
(byte) renderBob::y_char_offset#0
(word) renderBob::y_offset
(word) renderBob::y_offset#0
(byte) renderBob::ypos
(byte) renderBob::ypos#0
(byte) renderBob::ypos#1
(void()) renderBobCleanup()
(bool~) renderBobCleanup::$0
(byte~) renderBobCleanup::$1
(label) renderBobCleanup::@1
(label) renderBobCleanup::@2
(label) renderBobCleanup::@return
(byte) renderBobCleanup::i
(byte) renderBobCleanup::i#0
(byte) renderBobCleanup::i#1
(byte) renderBobCleanup::i#2
(byte*) renderBobCleanup::screen
(byte*) renderBobCleanup::screen#0
(byte**) renderBobCleanupNext
(byte**) renderBobCleanupNext#0
(byte**) renderBobCleanupNext#1
(byte**) renderBobCleanupNext#10
(byte**) renderBobCleanupNext#11
(byte**) renderBobCleanupNext#12
(byte**) renderBobCleanupNext#13
(byte**) renderBobCleanupNext#14
(byte**) renderBobCleanupNext#15
(byte**) renderBobCleanupNext#16
(byte**) renderBobCleanupNext#17
(byte**) renderBobCleanupNext#18
(byte**) renderBobCleanupNext#19
(byte**) renderBobCleanupNext#2
(byte**) renderBobCleanupNext#20
(byte**) renderBobCleanupNext#21
(byte**) renderBobCleanupNext#22
(byte**) renderBobCleanupNext#23
(byte**) renderBobCleanupNext#24
(byte**) renderBobCleanupNext#25
(byte**) renderBobCleanupNext#26
(byte**) renderBobCleanupNext#27
(byte**) renderBobCleanupNext#28
(byte**) renderBobCleanupNext#29
(byte**) renderBobCleanupNext#3
(byte**) renderBobCleanupNext#30
(byte**) renderBobCleanupNext#31
(byte**) renderBobCleanupNext#32
(byte**) renderBobCleanupNext#33
(byte**) renderBobCleanupNext#34
(byte**) renderBobCleanupNext#35
(byte**) renderBobCleanupNext#36
(byte**) renderBobCleanupNext#37
(byte**) renderBobCleanupNext#38
(byte**) renderBobCleanupNext#39
(byte**) renderBobCleanupNext#4
(byte**) renderBobCleanupNext#40
(byte**) renderBobCleanupNext#41
(byte**) renderBobCleanupNext#42
(byte**) renderBobCleanupNext#43
(byte**) renderBobCleanupNext#44
(byte**) renderBobCleanupNext#45
(byte**) renderBobCleanupNext#46
(byte**) renderBobCleanupNext#47
(byte**) renderBobCleanupNext#48
(byte**) renderBobCleanupNext#49
(byte**) renderBobCleanupNext#5
(byte**) renderBobCleanupNext#50
(byte**) renderBobCleanupNext#6
(byte**) renderBobCleanupNext#7
(byte**) renderBobCleanupNext#8
(byte**) renderBobCleanupNext#9
(void()) renderBobInit()
(word~) renderBobInit::$0
(number~) renderBobInit::$1
(bool~) renderBobInit::$2
(bool~) renderBobInit::$3
(byte~) renderBobInit::$4
(byte~) renderBobInit::$5
(label) renderBobInit::@1
(label) renderBobInit::@2
(label) renderBobInit::@3
(label) renderBobInit::@return
(byte) renderBobInit::i
(byte) renderBobInit::i#0
(byte) renderBobInit::i#1
(byte) renderBobInit::i#2
(byte) renderBobInit::y
(byte) renderBobInit::y#0
(byte) renderBobInit::y#1
(byte) renderBobInit::y#2

Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (number) 7
Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (unumber)(number) 7
Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#2 >> (number) 3
Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1
Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1
Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200
Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1
Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0
Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff
Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0
Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100)
Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(unumber)(number) $100)
Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(number) $100)
Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(unumber)(number) $100)
Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number) 1
Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A_DDR) ← (number) 3
Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (number) $40
Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$2 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (unumber)(number) $40
Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$3 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$2
Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$3 in (number~) main::vicSelectGfxBank1_toDd001_$3 ← (unumber)(number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$2
Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (number) 4
Adding number conversion cast (unumber) main::toD0181_$2 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0181_$3 in (number~) main::toD0181_$3 ← > (unumber~) main::toD0181_$2
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f
Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7
Adding number conversion cast (unumber) 0 in (byte) memset::c#0 ← (number) 0
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) $f8 in (bool~) main::$8 ← *((const byte*) RASTER) < (number) $f8
Adding number conversion cast (unumber) $f in *((const byte*) BORDERCOL) ← (number) $f
Adding number conversion cast (unumber) 1 in *((const byte*) BORDERCOL) ← (number) 1
Adding number conversion cast (unumber) 2 in *((const byte*) BORDERCOL) ← (number) 2
Adding number conversion cast (snumber) $100 in (signed word) main::origX#1 ← (signed word) main::origX#3 + (number) $100
Adding number conversion cast (snumber) $80 in (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#3 + (number) $80
Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$19 ← (number) 0 != (byte~) main::$15
Adding number conversion cast (unumber) 0 in (bool~) main::$18 ← (number) 0 != (byte~) main::$17
Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A_DDR) ← (number) 3
Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (number) $40
Adding number conversion cast (unumber) main::vicSelectGfxBank2_toDd001_$2 in (number~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (unumber)(number) $40
Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank2_toDd001_$3 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank2_toDd001_$2
Adding number conversion cast (unumber) main::vicSelectGfxBank2_toDd001_$3 in (number~) main::vicSelectGfxBank2_toDd001_$3 ← (unumber)(number) 3 ^ (unumber~) main::vicSelectGfxBank2_toDd001_$2
Adding number conversion cast (unumber) $3fff in (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0182_$1 in (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$2 ← (unumber~) main::toD0182_$1 * (number) 4
Adding number conversion cast (unumber) main::toD0182_$2 in (number~) main::toD0182_$2 ← (unumber~) main::toD0182_$1 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0182_$3 in (number~) main::toD0182_$3 ← > (unumber~) main::toD0182_$2
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (number) 4
Adding number conversion cast (unumber) main::toD0182_$6 in (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (number) $f
Adding number conversion cast (unumber) main::toD0182_$7 in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0182_$8 in (number~) main::toD0182_$8 ← (unumber~) main::toD0182_$3 | (unumber~) main::toD0182_$7
Adding number conversion cast (unumber) $28 in (number~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (number) $28
Adding number conversion cast (unumber) renderBobInit::$1 in (number~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (unumber)(number) $28
Adding number conversion cast (unumber) 1 in (byte) renderBobInit::i#1 ← (byte) renderBobInit::i#2 + rangenext(0,NUM_BOBS-1)
Adding number conversion cast (unumber) 7 in (number~) renderBob::$4 ← (byte) renderBob::ypos#1 & (number) 7
Adding number conversion cast (unumber) renderBob::$4 in (number~) renderBob::$4 ← (byte) renderBob::ypos#1 & (unumber)(number) 7
Adding number conversion cast (unumber) renderBob::$5 in (number~) renderBob::$5 ← (unumber~) renderBob::$4 * (const byte) BOB_SHIFTS_X
Adding number conversion cast (unumber) 3 in (number~) renderBob::$6 ← (byte) renderBob::xpos#1 & (number) 3
Adding number conversion cast (unumber) renderBob::$6 in (number~) renderBob::$6 ← (byte) renderBob::xpos#1 & (unumber)(number) 3
Adding number conversion cast (unumber) renderBob::$7 in (number~) renderBob::$7 ← (unumber~) renderBob::$5 + (unumber~) renderBob::$6
Adding number conversion cast (unumber) 0*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 0 in *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(unumber)(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 0 in *((byte*) renderBob::screen#0 + (number) 0) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 1*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) $28) ← *((const byte*) BOB_TABLES+(number) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 1 in *((byte*) renderBob::screen#0 + (number) $28) ← *((const byte*) BOB_TABLES+(unumber)(number) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) $28 in *((byte*) renderBob::screen#0 + (number) $28) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 2*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) $50) ← *((const byte*) BOB_TABLES+(number) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 2 in *((byte*) renderBob::screen#0 + (number) $50) ← *((const byte*) BOB_TABLES+(unumber)(number) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) $50 in *((byte*) renderBob::screen#0 + (number) $50) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 3*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) 1) ← *((const byte*) BOB_TABLES+(number) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 3 in *((byte*) renderBob::screen#0 + (number) 1) ← *((const byte*) BOB_TABLES+(unumber)(number) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 1 in *((byte*) renderBob::screen#0 + (number) 1) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 4*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) $29) ← *((const byte*) BOB_TABLES+(number) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 4 in *((byte*) renderBob::screen#0 + (number) $29) ← *((const byte*) BOB_TABLES+(unumber)(number) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) $29 in *((byte*) renderBob::screen#0 + (number) $29) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 5*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) $51) ← *((const byte*) BOB_TABLES+(number) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 5 in *((byte*) renderBob::screen#0 + (number) $51) ← *((const byte*) BOB_TABLES+(unumber)(number) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) $51 in *((byte*) renderBob::screen#0 + (number) $51) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 6*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) 2) ← *((const byte*) BOB_TABLES+(number) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 6 in *((byte*) renderBob::screen#0 + (number) 2) ← *((const byte*) BOB_TABLES+(unumber)(number) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 2 in *((byte*) renderBob::screen#0 + (number) 2) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 7*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) $2a) ← *((const byte*) BOB_TABLES+(number) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 7 in *((byte*) renderBob::screen#0 + (number) $2a) ← *((const byte*) BOB_TABLES+(unumber)(number) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) $2a in *((byte*) renderBob::screen#0 + (number) $2a) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 8*BOB_SUBTABLE_SIZE in *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 8 in *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(unumber)(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) $52 in *((byte*) renderBob::screen#0 + (number) $52) ← *((const byte*) BOB_TABLES+(unumber)(unumber)(number) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 0) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $28) ← (number) 0
Adding number conversion cast (unumber) $28 in *((byte*) renderBobCleanup::screen#0 + (number) $28) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $50) ← (number) 0
Adding number conversion cast (unumber) $50 in *((byte*) renderBobCleanup::screen#0 + (number) $50) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 1) ← (number) 0
Adding number conversion cast (unumber) 1 in *((byte*) renderBobCleanup::screen#0 + (number) 1) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $29) ← (number) 0
Adding number conversion cast (unumber) $29 in *((byte*) renderBobCleanup::screen#0 + (number) $29) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $51) ← (number) 0
Adding number conversion cast (unumber) $51 in *((byte*) renderBobCleanup::screen#0 + (number) $51) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) 2) ← (number) 0
Adding number conversion cast (unumber) 2 in *((byte*) renderBobCleanup::screen#0 + (number) 2) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $2a) ← (number) 0
Adding number conversion cast (unumber) $2a in *((byte*) renderBobCleanup::screen#0 + (number) $2a) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) renderBobCleanup::screen#0 + (number) $52) ← (number) 0
Adding number conversion cast (unumber) $52 in *((byte*) renderBobCleanup::screen#0 + (number) $52) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 1 in (byte) renderBobCleanup::i#1 ← (byte) renderBobCleanup::i#2 + rangenext(0,NUM_BOBS-1)
Adding number conversion cast (unumber) 0 in (byte) bob_charset_next_id#2 ← (number) 0
Adding number conversion cast (unumber) $30 in (byte*) charsetFindOrAddGlyph::glyph#0 ← (const byte*) PROTO_BOB+(number) $30
Adding number conversion cast (unumber) 9 in (bool~) prepareBobs::$5 ← (byte) prepareBobs::cell#2 < (number) 9
Adding number conversion cast (unumber) 8 in (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#3 + (number) 8
Adding number conversion cast (unumber) 3*3*8 in (bool~) protoBobShiftRight::$0 ← (byte) protoBobShiftRight::i#2 < (number) 3*(number) 3*(number) 8
Adding number conversion cast (unumber) 1 in (number~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (number) 1
Adding number conversion cast (unumber) protoBobShiftRight::$1 in (number~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) protoBobShiftRight::$8 ← (number) 0 != (unumber~) protoBobShiftRight::$1
Adding number conversion cast (unumber) 1 in (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#4) >> (number) 1
Adding number conversion cast (unumber) $30 in (bool~) protoBobShiftRight::$7 ← (byte) protoBobShiftRight::j#4 >= (number) $30
Adding number conversion cast (unumber) $2f in (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#5 - (number) $2f
Adding number conversion cast (unumber) $18 in (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#6 + (number) $18
Adding number conversion cast (unumber) 0 in (bool~) protoBobShiftDown::$0 ← (byte) protoBobShiftDown::i#2 > (number) 0
Adding number conversion cast (unumber) $17 in *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#3) ← *((const byte*) PROTO_BOB+(number) $17 + (byte) protoBobShiftDown::i#3)
Adding number conversion cast (unumber) $2f in *((const byte*) PROTO_BOB+(number) $18 + (byte) protoBobShiftDown::i#3) ← *((const byte*) PROTO_BOB+(number) $2f + (byte) protoBobShiftDown::i#3)
Adding number conversion cast (unumber) $18 in *((const byte*) PROTO_BOB+(number) $18 + (byte) protoBobShiftDown::i#3) ← *((const byte*) PROTO_BOB+(unumber)(number) $2f + (byte) protoBobShiftDown::i#3)
Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB+(number) $30 + (byte) protoBobShiftDown::i#3) ← (number) 0
Adding number conversion cast (unumber) $30 in *((const byte*) PROTO_BOB+(number) $30 + (byte) protoBobShiftDown::i#3) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number) 0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number) 0) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number) $18) ← (number) 0
Adding number conversion cast (unumber) $18 in *((const byte*) PROTO_BOB + (number) $18) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number) $30) ← (number) 0
Adding number conversion cast (unumber) $30 in *((const byte*) PROTO_BOB + (number) $30) ← ((unumber)) (number) 0
Adding number conversion cast (unumber) 8 in (bool~) charsetFindOrAddGlyph::$1 ← (byte) charsetFindOrAddGlyph::i#2 < (number) 8
Adding number conversion cast (unumber) 0 in (byte) charsetFindOrAddGlyph::found#1 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) charsetFindOrAddGlyph::$6 ← (number) 0 != (byte) charsetFindOrAddGlyph::found#2
Adding number conversion cast (unumber) 8 in (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#3 + (number) 8
Adding number conversion cast (unumber) 8 in (bool~) charsetFindOrAddGlyph::$5 ← (byte) charsetFindOrAddGlyph::i1#2 < (number) 8
Adding number conversion cast (unumber) 0 in (byte) progress_idx#6 ← (number) 0
Adding number conversion cast (unumber) 8 in (bool~) progress_inc::$0 ← (byte) progress_idx#8 == (number) 8
Adding number conversion cast (unumber) 8 in *((byte*) progress_cursor#18) ← *((const byte*) progress_inc::progress_chars + (number) 8)
Adding number conversion cast (unumber) 0 in (byte) progress_idx#9 ← (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2
Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1
Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3
Inlining cast (word~) main::vicSelectGfxBank1_toDd001_$0 ← (word)(byte*) main::vicSelectGfxBank1_toDd001_gfx#1
Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1
Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1
Inlining cast (byte) memset::c#0 ← (unumber)(number) 0
Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8
Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) $f
Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 1
Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 2
Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0
Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3
Inlining cast (word~) main::vicSelectGfxBank2_toDd001_$0 ← (word)(byte*) main::vicSelectGfxBank2_toDd001_gfx#1
Inlining cast (word~) main::toD0182_$0 ← (word)(byte*) main::toD0182_screen#1
Inlining cast (word~) main::toD0182_$4 ← (word)(byte*) main::toD0182_gfx#1
Inlining cast (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 0) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $28) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $50) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 1) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $29) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $51) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 2) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $2a) ← (unumber)(number) 0
Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $52) ← (unumber)(number) 0
Inlining cast (byte) bob_charset_next_id#2 ← (unumber)(number) 0
Inlining cast *((const byte*) PROTO_BOB+(unumber)(number) $30 + (byte) protoBobShiftDown::i#3) ← (unumber)(number) 0
Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) 0) ← (unumber)(number) 0
Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) $18) ← (unumber)(number) 0
Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) $30) ← (unumber)(number) 0
Inlining cast (byte) charsetFindOrAddGlyph::found#1 ← (unumber)(number) 0
Inlining cast (byte) progress_idx#6 ← (unumber)(number) 0
Inlining cast (byte) progress_idx#9 ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 56320
Simplifying constant pointer cast (byte*) 56321
Simplifying constant pointer cast (byte*) 56576
Simplifying constant pointer cast (byte*) 56578
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 4096
Simplifying constant pointer cast (byte*) 10240
Simplifying constant pointer cast (byte*) 8192
Simplifying constant integer cast 0
Simplifying constant integer cast 7
Simplifying constant integer cast 3
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast $200
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast -1
Simplifying constant integer cast $1ff
Simplifying constant integer cast 0
Simplifying constant integer cast $100
Simplifying constant integer cast $1ff
Simplifying constant integer cast $100
Simplifying constant integer cast $1ff
Simplifying constant integer cast 1
Simplifying constant integer cast 3
Simplifying constant integer cast $40
Simplifying constant integer cast 3
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast 0
Simplifying constant integer cast $3e8
Simplifying constant integer cast $f8
Simplifying constant integer cast $f
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast $100
Simplifying constant integer cast $80
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 3
Simplifying constant integer cast $40
Simplifying constant integer cast 3
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $28
Simplifying constant integer cast 1
Simplifying constant integer cast 7
Simplifying constant integer cast 3
Simplifying constant integer cast (unumber)(number) 0*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast (unumber)(number) 1*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 1
Simplifying constant integer cast $28
Simplifying constant integer cast (unumber)(number) 2*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 2
Simplifying constant integer cast $50
Simplifying constant integer cast (unumber)(number) 3*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 3
Simplifying constant integer cast 1
Simplifying constant integer cast (unumber)(number) 4*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 4
Simplifying constant integer cast $29
Simplifying constant integer cast (unumber)(number) 5*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 5
Simplifying constant integer cast $51
Simplifying constant integer cast (unumber)(number) 6*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 6
Simplifying constant integer cast 2
Simplifying constant integer cast (unumber)(number) 7*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 7
Simplifying constant integer cast $2a
Simplifying constant integer cast (unumber)(number) 8*(const byte) BOB_SUBTABLE_SIZE
Simplifying constant integer cast 8
Simplifying constant integer cast $52
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $50
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $29
Simplifying constant integer cast 0
Simplifying constant integer cast $51
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast $2a
Simplifying constant integer cast 0
Simplifying constant integer cast $52
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $30
Simplifying constant integer cast 9
Simplifying constant integer cast 8
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast $30
Simplifying constant integer cast $2f
Simplifying constant integer cast $18
Simplifying constant integer cast 0
Simplifying constant integer cast $17
Simplifying constant integer cast $2f
Simplifying constant integer cast $18
Simplifying constant integer cast 0
Simplifying constant integer cast $30
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $18
Simplifying constant integer cast 0
Simplifying constant integer cast $30
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (word) $200
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $1ff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $100
Finalized unsigned number type (word) $1ff
Finalized unsigned number type (word) $100
Finalized unsigned number type (word) $1ff
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 3
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) $f8
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized signed number type (signed word) $100
Finalized signed number type (signed word) $80
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 3
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $50
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $29
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) $51
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) $2a
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $52
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $50
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $29
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $51
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $2a
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $52
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 9
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) $2f
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $17
Finalized unsigned number type (byte) $2f
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (byte) 7
Inferred type updated to byte in (unumber~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1
Inferred type updated to byte in (unumber~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40
Inferred type updated to byte in (unumber~) main::vicSelectGfxBank1_toDd001_$3 ← (byte) 3 ^ (byte~) main::vicSelectGfxBank1_toDd001_$2
Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0181_$2 ← (word~) main::toD0181_$1 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$3 ← > (word~) main::toD0181_$2
Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$7 ← (byte~) main::toD0181_$6 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0181_$8 ← (byte~) main::toD0181_$3 | (byte~) main::toD0181_$7
Inferred type updated to byte in (unumber~) main::vicSelectGfxBank2_toDd001_$2 ← (byte~) main::vicSelectGfxBank2_toDd001_$1 / (byte) $40
Inferred type updated to byte in (unumber~) main::vicSelectGfxBank2_toDd001_$3 ← (byte) 3 ^ (byte~) main::vicSelectGfxBank2_toDd001_$2
Inferred type updated to word in (unumber~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0182_$2 ← (word~) main::toD0182_$1 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$3 ← > (word~) main::toD0182_$2
Inferred type updated to byte in (unumber~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$7 ← (byte~) main::toD0182_$6 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0182_$8 ← (byte~) main::toD0182_$3 | (byte~) main::toD0182_$7
Inferred type updated to word in (unumber~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (byte) $28
Inferred type updated to byte in (unumber~) renderBob::$4 ← (byte) renderBob::ypos#1 & (byte) 7
Inferred type updated to byte in (unumber~) renderBob::$5 ← (byte~) renderBob::$4 * (const byte) BOB_SHIFTS_X
Inferred type updated to byte in (unumber~) renderBob::$6 ← (byte) renderBob::xpos#1 & (byte) 3
Inferred type updated to byte in (unumber~) renderBob::$7 ← (byte~) renderBob::$5 + (byte~) renderBob::$6
Inferred type updated to byte in (unumber~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1
Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0
Inversing boolean not [55] (bool~) mulf_init::$3 ← (byte~) mulf_init::$1 != (byte) 0 from [54] (bool~) mulf_init::$2 ← (byte~) mulf_init::$1 == (byte) 0
Inversing boolean not [83] (bool~) mulf_init::$10 ← (byte) mulf_init::x_255#1 != (byte) 0 from [82] (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (byte) 0
Inversing boolean not [192] (bool~) main::$16 ← (byte) 0 == (byte~) main::$15 from [191] (bool~) main::$19 ← (byte) 0 != (byte~) main::$15
Inversing boolean not [433] (bool~) charsetFindOrAddGlyph::$3 ← *((byte*) charsetFindOrAddGlyph::glyph_cursor#2 + (byte) charsetFindOrAddGlyph::i#3) == *((byte*) charsetFindOrAddGlyph::glyph#2 + (byte) charsetFindOrAddGlyph::i#3) from [432] (bool~) charsetFindOrAddGlyph::$2 ← *((byte*) charsetFindOrAddGlyph::glyph_cursor#2 + (byte) charsetFindOrAddGlyph::i#3) != *((byte*) charsetFindOrAddGlyph::glyph#2 + (byte) charsetFindOrAddGlyph::i#3)
Inversing boolean not [441] (bool~) charsetFindOrAddGlyph::$4 ← (byte) 0 == (byte) charsetFindOrAddGlyph::found#2 from [440] (bool~) charsetFindOrAddGlyph::$6 ← (byte) 0 != (byte) charsetFindOrAddGlyph::found#2
Inversing boolean not [474] (bool~) progress_inc::$1 ← (byte) progress_idx#8 != (byte) 8 from [473] (bool~) progress_inc::$0 ← (byte) progress_idx#8 == (byte) 8
Successful SSA optimization Pass2UnaryNotSimplification
Alias (void*) memset::return#0 = (void*) memset::str#1 (void*) memset::return#3 (void*) memset::return#1 
Alias (void*) memset::str#2 = (void*) memset::str#3 
Alias (word) memset::num#1 = (word) memset::num#2 
Alias (byte) memset::c#3 = (byte) memset::c#4 
Alias (byte*) memset::end#0 = (byte*~) memset::$3 
Alias (byte) memset::c#1 = (byte) memset::c#2 
Alias (byte*) memset::dst#2 = (byte*) memset::dst#3 
Alias (byte*) memset::end#1 = (byte*) memset::end#2 
Alias (void*) memset::str#4 = (void*) memset::str#5 
Alias (byte) keyboard_matrix_read::return#0 = (byte) keyboard_matrix_read::row_pressed_bits#0 (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#3 (byte) keyboard_matrix_read::return#1 
Alias (byte) keyboard_key_pressed::colidx#0 = (byte~) keyboard_key_pressed::$0 (byte) keyboard_key_pressed::colidx#1 
Alias (byte) keyboard_key_pressed::rowidx#0 = (byte~) keyboard_key_pressed::$1 
Alias (byte) keyboard_matrix_read::return#2 = (byte) keyboard_matrix_read::return#4 
Alias (byte) keyboard_key_pressed::return#0 = (byte~) keyboard_key_pressed::$3 (byte) keyboard_key_pressed::return#4 (byte) keyboard_key_pressed::return#1 
Alias (byte) mulf_init::c#2 = (byte) mulf_init::c#3 
Alias (word) mulf_init::sqr#4 = (word) mulf_init::sqr#5 (word) mulf_init::sqr#6 
Alias (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#4 (byte*) mulf_init::sqr1_lo#5 
Alias (byte*) mulf_init::sqr1_hi#3 = (byte*) mulf_init::sqr1_hi#5 (byte*) mulf_init::sqr1_hi#4 
Alias (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#4 (byte) mulf_init::x_2#5 
Alias (word) mulf_init::sqr#1 = (word~) mulf_init::$6 
Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#5 
Alias (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#3 
Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#3 (byte*) mulf_init::sqr2_lo#5 
Alias (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#3 
Alias (byte) mulf_init::dir#2 = (byte) mulf_init::dir#3 
Alias (byte) mulf_init::x_255#1 = (byte~) mulf_init::$8 (byte) mulf_init::x_255#5 
Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#5 
Alias (byte*) progress_cursor#21 = (byte*) progress_cursor#28 
Alias (byte) progress_idx#22 = (byte) progress_idx#28 
Alias (byte) bob_charset_next_id#19 = (byte) bob_charset_next_id#28 
Alias (byte**) renderBobCleanupNext#28 = (byte**) renderBobCleanupNext#49 (byte**) renderBobCleanupNext#50 (byte**) renderBobCleanupNext#48 (byte**) renderBobCleanupNext#47 (byte**) renderBobCleanupNext#46 (byte**) renderBobCleanupNext#44 (byte**) renderBobCleanupNext#42 (byte**) renderBobCleanupNext#40 (byte**) renderBobCleanupNext#38 (byte**) renderBobCleanupNext#36 (byte**) renderBobCleanupNext#34 (byte**) renderBobCleanupNext#31 
Alias (byte*) progress_cursor#0 = (byte*) progress_cursor#11 (byte*) progress_cursor#69 (byte*) progress_cursor#68 (byte*) progress_cursor#66 (byte*) progress_cursor#64 (byte*) progress_cursor#62 (byte*) progress_cursor#60 (byte*) progress_cursor#58 (byte*) progress_cursor#56 (byte*) progress_cursor#54 (byte*) progress_cursor#52 
Alias (byte) progress_idx#0 = (byte) progress_idx#12 (byte) progress_idx#69 (byte) progress_idx#68 (byte) progress_idx#66 (byte) progress_idx#64 (byte) progress_idx#62 (byte) progress_idx#60 (byte) progress_idx#58 (byte) progress_idx#56 (byte) progress_idx#54 (byte) progress_idx#52 
Alias (byte) bob_charset_next_id#0 = (byte) bob_charset_next_id#10 (byte) bob_charset_next_id#77 (byte) bob_charset_next_id#76 (byte) bob_charset_next_id#74 (byte) bob_charset_next_id#72 (byte) bob_charset_next_id#70 (byte) bob_charset_next_id#68 (byte) bob_charset_next_id#66 (byte) bob_charset_next_id#64 (byte) bob_charset_next_id#62 (byte) bob_charset_next_id#60 
Alias (byte*) main::vicSelectGfxBank1_gfx#0 = (byte*) main::vicSelectGfxBank1_gfx#1 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 (byte*) main::vicSelectGfxBank1_toDd001_gfx#1 
Alias (byte) main::vicSelectGfxBank1_toDd001_return#0 = (byte~) main::vicSelectGfxBank1_toDd001_$3 (byte) main::vicSelectGfxBank1_toDd001_return#2 (byte) main::vicSelectGfxBank1_toDd001_return#1 (byte) main::vicSelectGfxBank1_toDd001_return#3 (byte~) main::vicSelectGfxBank1_$0 
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 
Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$4 
Alias (byte**) renderBobCleanupNext#16 = (byte**) renderBobCleanupNext#20 
Alias (signed word) main::origX#2 = (signed word) main::origX#4 (signed word) main::origX#6 (signed word) main::rowX#0 
Alias (signed word) main::rowOffsetY#7 = (signed word) main::rowOffsetY#8 (signed word) main::rowOffsetY#9 
Alias (byte*) progress_cursor#63 = (byte*) progress_cursor#65 (byte*) progress_cursor#67 
Alias (byte) progress_idx#63 = (byte) progress_idx#65 (byte) progress_idx#67 
Alias (byte) bob_charset_next_id#71 = (byte) bob_charset_next_id#73 (byte) bob_charset_next_id#75 
Alias (byte**) renderBobCleanupNext#0 = (byte**) renderBobCleanupNext#9 
Alias (signed word) main::x#0 = (signed word) main::rowX#2 
Alias (signed word) main::y#0 = (signed word) main::rowY#2 
Alias (byte) renderBob::xpos#0 = (byte~) main::$10 
Alias (byte) renderBob::ypos#0 = (byte~) main::$11 
Alias (signed word) main::x#2 = (signed word) main::x#3 
Alias (signed word) main::y#2 = (signed word) main::y#3 
Alias (signed word) main::rowOffsetY#2 = (signed word) main::rowOffsetY#4 (signed word) main::rowOffsetY#5 (signed word) main::rowOffsetY#3 
Alias (byte) main::row#2 = (byte) main::row#3 
Alias (signed word) main::rowX#3 = (signed word) main::rowX#4 (signed word) main::rowX#5 
Alias (signed word) main::rowY#3 = (signed word) main::rowY#4 (signed word) main::rowY#5 
Alias (byte) main::col#2 = (byte) main::col#3 (byte) main::col#4 
Alias (signed word) main::origX#3 = (signed word) main::origX#7 (signed word) main::origX#9 (signed word) main::origX#5 
Alias (byte*) progress_cursor#51 = (byte*) progress_cursor#57 (byte*) progress_cursor#59 (byte*) progress_cursor#55 (byte*) progress_cursor#53 
Alias (byte) progress_idx#51 = (byte) progress_idx#57 (byte) progress_idx#59 (byte) progress_idx#55 (byte) progress_idx#53 
Alias (byte) bob_charset_next_id#59 = (byte) bob_charset_next_id#65 (byte) bob_charset_next_id#67 (byte) bob_charset_next_id#63 (byte) bob_charset_next_id#61 
Alias (byte**) renderBobCleanupNext#1 = (byte**) renderBobCleanupNext#10 (byte**) renderBobCleanupNext#25 (byte**) renderBobCleanupNext#32 (byte**) renderBobCleanupNext#29 
Alias (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#5 
Alias (signed word) main::origX#1 = (signed word) main::origX#10 
Alias (signed word) main::rowOffsetY#1 = (signed word) main::rowOffsetY#11 
Alias (byte) keyboard_key_pressed::return#3 = (byte) keyboard_key_pressed::return#6 
Alias (byte*) progress_cursor#1 = (byte*) progress_cursor#48 (byte*) progress_cursor#49 (byte*) progress_cursor#47 (byte*) progress_cursor#46 (byte*) progress_cursor#44 (byte*) progress_cursor#42 (byte*) progress_cursor#39 (byte*) progress_cursor#36 (byte*) progress_cursor#33 (byte*) progress_cursor#29 (byte*) progress_cursor#22 (byte*) progress_cursor#12 
Alias (byte) progress_idx#1 = (byte) progress_idx#48 (byte) progress_idx#49 (byte) progress_idx#47 (byte) progress_idx#46 (byte) progress_idx#44 (byte) progress_idx#42 (byte) progress_idx#39 (byte) progress_idx#36 (byte) progress_idx#33 (byte) progress_idx#29 (byte) progress_idx#23 (byte) progress_idx#13 
Alias (byte) bob_charset_next_id#1 = (byte) bob_charset_next_id#56 (byte) bob_charset_next_id#57 (byte) bob_charset_next_id#55 (byte) bob_charset_next_id#54 (byte) bob_charset_next_id#52 (byte) bob_charset_next_id#50 (byte) bob_charset_next_id#47 (byte) bob_charset_next_id#42 (byte) bob_charset_next_id#36 (byte) bob_charset_next_id#29 (byte) bob_charset_next_id#20 (byte) bob_charset_next_id#11 
Alias (byte**) renderBobCleanupNext#11 = (byte**) renderBobCleanupNext#43 (byte**) renderBobCleanupNext#45 (byte**) renderBobCleanupNext#41 (byte**) renderBobCleanupNext#39 (byte**) renderBobCleanupNext#37 (byte**) renderBobCleanupNext#35 (byte**) renderBobCleanupNext#33 (byte**) renderBobCleanupNext#30 (byte**) renderBobCleanupNext#26 (byte**) renderBobCleanupNext#22 (byte**) renderBobCleanupNext#18 (byte**) renderBobCleanupNext#2 
Alias (byte*) main::vicSelectGfxBank2_gfx#0 = (byte*) main::vicSelectGfxBank2_gfx#1 (byte*) main::vicSelectGfxBank2_toDd001_gfx#0 (byte*) main::vicSelectGfxBank2_toDd001_gfx#1 
Alias (byte) main::vicSelectGfxBank2_toDd001_return#0 = (byte~) main::vicSelectGfxBank2_toDd001_$3 (byte) main::vicSelectGfxBank2_toDd001_return#2 (byte) main::vicSelectGfxBank2_toDd001_return#1 (byte) main::vicSelectGfxBank2_toDd001_return#3 (byte~) main::vicSelectGfxBank2_$0 
Alias (byte*) main::toD0182_screen#0 = (byte*) main::toD0182_screen#1 
Alias (byte*) main::toD0182_gfx#0 = (byte*) main::toD0182_gfx#1 
Alias (byte) main::toD0182_return#0 = (byte~) main::toD0182_$8 (byte) main::toD0182_return#2 (byte) main::toD0182_return#1 (byte) main::toD0182_return#3 (byte~) main::$7 
Alias (byte) renderBob::x_char_offset#0 = (byte~) renderBob::$0 
Alias (byte) renderBob::y_char_offset#0 = (byte~) renderBob::$1 
Alias (byte*) renderBob::screen#0 = (byte*~) renderBob::$3 
Alias (byte) renderBob::bob_table_idx#0 = (byte~) renderBob::$7 
Alias (byte**) renderBobCleanupNext#13 = (byte**) renderBobCleanupNext#4 (byte**) renderBobCleanupNext#5 
Alias (byte**) renderBobCleanupNext#14 = (byte**) renderBobCleanupNext#6 (byte**) renderBobCleanupNext#7 
Alias (byte*) progress_cursor#13 = (byte*) progress_cursor#2 (byte*) progress_cursor#30 
Alias (byte) progress_idx#14 = (byte) progress_idx#2 (byte) progress_idx#30 
Alias (byte) bob_charset_next_id#12 = (byte) bob_charset_next_id#3 
Alias (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#9 
Alias (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#6 
Alias (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#48 (byte) bob_charset_next_id#22 (byte) bob_charset_next_id#5 
Alias (byte*) progress_cursor#15 = (byte*) progress_cursor#40 (byte*) progress_cursor#25 (byte*) progress_cursor#4 
Alias (byte) progress_idx#16 = (byte) progress_idx#40 (byte) progress_idx#26 (byte) progress_idx#4 
Alias (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#2 (byte) prepareBobs::bob_table_idx#4 (byte) prepareBobs::bob_table_idx#14 
Alias (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#39 (byte) bob_charset_next_id#43 (byte) bob_charset_next_id#37 
Alias (byte) progress_idx#31 = (byte) progress_idx#38 (byte) progress_idx#37 (byte) progress_idx#34 
Alias (byte*) progress_cursor#31 = (byte*) progress_cursor#38 (byte*) progress_cursor#37 (byte*) progress_cursor#34 
Alias (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#8 
Alias (byte) prepareBobs::shift_y#12 = (byte) prepareBobs::shift_y#5 (byte) prepareBobs::shift_y#4 (byte) prepareBobs::shift_y#3 
Alias (byte*) prepareBobs::bob_table#0 = (byte*~) prepareBobs::$4 
Alias (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#4 (byte*) prepareBobs::bob_glyph#3 
Alias (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#31 (byte) bob_charset_next_id#53 (byte) bob_charset_next_id#51 (byte) bob_charset_next_id#49 
Alias (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#3 (byte*) prepareBobs::bob_table#4 
Alias (byte) progress_idx#25 = (byte) progress_idx#32 (byte) progress_idx#35 (byte) progress_idx#45 (byte) progress_idx#43 (byte) progress_idx#41 
Alias (byte*) progress_cursor#24 = (byte*) progress_cursor#32 (byte*) progress_cursor#35 (byte*) progress_cursor#45 (byte*) progress_cursor#43 (byte*) progress_cursor#41 
Alias (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#5 (byte) prepareBobs::cell#4 (byte) prepareBobs::cell#3 
Alias (byte) prepareBobs::bob_table_idx#10 = (byte) prepareBobs::bob_table_idx#13 (byte) prepareBobs::bob_table_idx#5 (byte) prepareBobs::bob_table_idx#8 (byte) prepareBobs::bob_table_idx#3 
Alias (byte) prepareBobs::shift_x#10 = (byte) prepareBobs::shift_x#6 (byte) prepareBobs::shift_x#9 (byte) prepareBobs::shift_x#7 (byte) prepareBobs::shift_x#5 (byte) prepareBobs::shift_x#4 (byte) prepareBobs::shift_x#3 
Alias (byte) prepareBobs::shift_y#10 = (byte) prepareBobs::shift_y#14 (byte) prepareBobs::shift_y#13 (byte) prepareBobs::shift_y#11 (byte) prepareBobs::shift_y#9 (byte) prepareBobs::shift_y#8 (byte) prepareBobs::shift_y#7 
Alias (byte) charsetFindOrAddGlyph::return#1 = (byte) charsetFindOrAddGlyph::return#5 
Alias (byte) bob_charset_next_id#13 = (byte) bob_charset_next_id#4 (byte) bob_charset_next_id#38 
Alias (byte*) prepareBobs::bob_glyph#1 = (byte*) prepareBobs::bob_glyph#5 
Alias (byte*) prepareBobs::bob_table#1 = (byte*) prepareBobs::bob_table#5 
Alias (byte) progress_idx#15 = (byte) progress_idx#3 
Alias (byte*) progress_cursor#14 = (byte*) progress_cursor#3 
Alias (byte) prepareBobs::bob_table_idx#1 = (byte) prepareBobs::bob_table_idx#11 (byte) prepareBobs::bob_table_idx#7 
Alias (byte) protoBobShiftRight::j#3 = (byte) protoBobShiftRight::j#7 (byte) protoBobShiftRight::j#8 (byte) protoBobShiftRight::j#9 
Alias (byte) protoBobShiftRight::carry#3 = (byte) protoBobShiftRight::carry#5 (byte) protoBobShiftRight::carry#6 (byte) protoBobShiftRight::carry#4 
Alias (byte) protoBobShiftRight::i#2 = (byte) protoBobShiftRight::i#9 (byte) protoBobShiftRight::i#7 (byte) protoBobShiftRight::i#8 
Alias (byte) protoBobShiftRight::carry#1 = (byte) protoBobShiftRight::new_carry#0 (byte~) protoBobShiftRight::$4 (byte) protoBobShiftRight::carry#9 (byte) protoBobShiftRight::carry#8 
Alias (byte) protoBobShiftRight::j#4 = (byte) protoBobShiftRight::j#5 (byte) protoBobShiftRight::j#6 
Alias (byte) protoBobShiftRight::i#4 = (byte) protoBobShiftRight::i#5 (byte) protoBobShiftRight::i#6 
Alias (byte) protoBobShiftDown::i#2 = (byte) protoBobShiftDown::i#3 
Alias (byte**) renderBobCleanupNext#19 = (byte**) renderBobCleanupNext#27 (byte**) renderBobCleanupNext#3 (byte**) renderBobCleanupNext#23 
Alias (byte*) charsetFindOrAddGlyph::glyph_cursor#0 = (byte*) charsetFindOrAddGlyph::charset#2 
Alias (byte*) charsetFindOrAddGlyph::glyph_cursor#11 = (byte*) charsetFindOrAddGlyph::glyph_cursor#8 (byte*) charsetFindOrAddGlyph::glyph_cursor#12 
Alias (byte*) charsetFindOrAddGlyph::glyph#6 = (byte*) charsetFindOrAddGlyph::glyph#9 (byte*) charsetFindOrAddGlyph::glyph#8 
Alias (byte) charsetFindOrAddGlyph::glyph_id#11 = (byte) charsetFindOrAddGlyph::glyph_id#12 (byte) charsetFindOrAddGlyph::glyph_id#2 
Alias (byte) bob_charset_next_id#15 = (byte) bob_charset_next_id#44 (byte) bob_charset_next_id#34 
Alias (byte*) charsetFindOrAddGlyph::glyph_cursor#10 = (byte*) charsetFindOrAddGlyph::glyph_cursor#2 (byte*) charsetFindOrAddGlyph::glyph_cursor#5 (byte*) charsetFindOrAddGlyph::glyph_cursor#9 
Alias (byte) charsetFindOrAddGlyph::i#2 = (byte) charsetFindOrAddGlyph::i#3 (byte) charsetFindOrAddGlyph::i#4 
Alias (byte*) charsetFindOrAddGlyph::glyph#13 = (byte*) charsetFindOrAddGlyph::glyph#2 (byte*) charsetFindOrAddGlyph::glyph#4 (byte*) charsetFindOrAddGlyph::glyph#7 
Alias (byte) charsetFindOrAddGlyph::found#3 = (byte) charsetFindOrAddGlyph::found#5 (byte) charsetFindOrAddGlyph::found#4 
Alias (byte) charsetFindOrAddGlyph::glyph_id#13 = (byte) charsetFindOrAddGlyph::glyph_id#14 (byte) charsetFindOrAddGlyph::glyph_id#9 (byte) charsetFindOrAddGlyph::glyph_id#8 
Alias (byte) bob_charset_next_id#40 = (byte) bob_charset_next_id#46 (byte) bob_charset_next_id#41 (byte) bob_charset_next_id#45 
Alias (byte) charsetFindOrAddGlyph::glyph_id#3 = (byte) charsetFindOrAddGlyph::glyph_id#6 (byte) charsetFindOrAddGlyph::glyph_id#4 (byte) charsetFindOrAddGlyph::return#2 
Alias (byte*) charsetFindOrAddGlyph::glyph_cursor#3 = (byte*) charsetFindOrAddGlyph::glyph_cursor#6 
Alias (byte) bob_charset_next_id#24 = (byte) bob_charset_next_id#32 (byte) bob_charset_next_id#25 
Alias (byte*) charsetFindOrAddGlyph::glyph#11 = (byte*) charsetFindOrAddGlyph::glyph#12 
Alias (byte) charsetFindOrAddGlyph::return#3 = (byte) charsetFindOrAddGlyph::return#6 
Alias (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#7 
Alias (byte*) charsetFindOrAddGlyph::glyph#3 = (byte*) charsetFindOrAddGlyph::glyph#5 
Alias (byte) charsetFindOrAddGlyph::i1#2 = (byte) charsetFindOrAddGlyph::i1#3 
Alias (byte*) charsetFindOrAddGlyph::glyph_cursor#4 = (byte*) charsetFindOrAddGlyph::glyph_cursor#7 
Alias (byte) bob_charset_next_id#17 = (byte) bob_charset_next_id#33 (byte) bob_charset_next_id#26 
Alias (byte) charsetFindOrAddGlyph::glyph_id#10 = (byte) charsetFindOrAddGlyph::glyph_id#7 (byte) charsetFindOrAddGlyph::glyph_id#5 (byte) charsetFindOrAddGlyph::return#4 
Alias (byte) bob_charset_next_id#27 = (byte) bob_charset_next_id#35 (byte) bob_charset_next_id#6 
Alias (byte*) progress_cursor#16 = (byte*) progress_cursor#6 (byte*) progress_cursor#7 
Alias (byte) progress_idx#17 = (byte) progress_idx#6 (byte) progress_idx#7 
Alias (byte*) progress_cursor#18 = (byte*) progress_cursor#26 
Alias (byte) progress_idx#10 = (byte) progress_idx#20 (byte) progress_idx#19 
Alias (byte*) progress_cursor#17 = (byte*) progress_cursor#19 (byte*) progress_cursor#9 
Alias (byte*) progress_cursor#27 = (byte*) progress_cursor#5 
Alias (byte) progress_idx#27 = (byte) progress_idx#5 
Alias (byte*) progress_cursor#10 = (byte*) progress_cursor#20 
Alias (byte) progress_idx#11 = (byte) progress_idx#21 
Alias (byte) bob_charset_next_id#18 = (byte) bob_charset_next_id#9 
Alias (byte**) renderBobCleanupNext#15 = (byte**) renderBobCleanupNext#8 
Successful SSA optimization Pass2AliasElimination
Alias (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#3 
Alias (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#3 
Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#4 
Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#4 
Alias (byte) mulf_init::x_255#1 = (byte) mulf_init::x_255#4 
Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#4 
Alias (byte) protoBobShiftRight::j#3 = (byte) protoBobShiftRight::j#4 
Alias (byte) protoBobShiftRight::carry#2 = (byte) protoBobShiftRight::carry#3 
Alias (byte) protoBobShiftRight::i#2 = (byte) protoBobShiftRight::i#4 (byte) protoBobShiftRight::i#3 
Alias (byte) protoBobShiftRight::carry#1 = (byte) protoBobShiftRight::carry#7 
Alias (byte) charsetFindOrAddGlyph::glyph_id#13 = (byte) charsetFindOrAddGlyph::glyph_id#3 
Alias (byte*) charsetFindOrAddGlyph::glyph_cursor#10 = (byte*) charsetFindOrAddGlyph::glyph_cursor#3 
Alias (byte) bob_charset_next_id#24 = (byte) bob_charset_next_id#40 
Alias (byte*) charsetFindOrAddGlyph::glyph#11 = (byte*) charsetFindOrAddGlyph::glyph#13 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (word) memset::num#1 (word) memset::num#0
Identical Phi Values (void*) memset::str#2 (void*) memset::str#0
Identical Phi Values (byte) memset::c#3 (byte) memset::c#0
Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0
Identical Phi Values (void*) memset::str#4 (void*) memset::str#2
Identical Phi Values (byte) memset::c#1 (byte) memset::c#3
Identical Phi Values (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0
Identical Phi Values (byte*) progress_cursor#21 (byte*) progress_cursor#27
Identical Phi Values (byte) progress_idx#22 (byte) progress_idx#27
Identical Phi Values (byte) bob_charset_next_id#19 (byte) bob_charset_next_id#27
Identical Phi Values (byte**) renderBobCleanupNext#28 (byte**) renderBobCleanupNext#19
Identical Phi Values (byte*) progress_cursor#0 (byte*) progress_cursor#15
Identical Phi Values (byte) progress_idx#0 (byte) progress_idx#16
Identical Phi Values (byte) bob_charset_next_id#0 (byte) bob_charset_next_id#14
Identical Phi Values (byte**) renderBobCleanupNext#16 (byte**) renderBobCleanupNext#24
Identical Phi Values (signed word) main::origX#2 (signed word) main::origX#8
Identical Phi Values (signed word) main::rowOffsetY#7 (signed word) main::rowOffsetY#10
Identical Phi Values (byte*) progress_cursor#63 (byte*) progress_cursor#50
Identical Phi Values (byte) progress_idx#63 (byte) progress_idx#50
Identical Phi Values (byte) bob_charset_next_id#71 (byte) bob_charset_next_id#58
Identical Phi Values (byte**) renderBobCleanupNext#0 (byte**) renderBobCleanupNext#14
Identical Phi Values (signed word) main::rowOffsetY#2 (signed word) main::rowOffsetY#6
Identical Phi Values (signed word) main::rowX#3 (signed word) main::x#0
Identical Phi Values (signed word) main::rowY#3 (signed word) main::y#0
Identical Phi Values (byte) main::col#2 (byte) main::col#5
Identical Phi Values (signed word) main::origX#3 (signed word) main::origX#11
Identical Phi Values (byte*) progress_cursor#51 (byte*) progress_cursor#61
Identical Phi Values (byte) progress_idx#51 (byte) progress_idx#61
Identical Phi Values (byte) bob_charset_next_id#59 (byte) bob_charset_next_id#69
Identical Phi Values (byte**) renderBobCleanupNext#1 (byte**) renderBobCleanupNext#13
Identical Phi Values (byte) renderBob::xpos#1 (byte) renderBob::xpos#0
Identical Phi Values (byte) renderBob::ypos#1 (byte) renderBob::ypos#0
Identical Phi Values (byte**) renderBobCleanupNext#12 (byte**) renderBobCleanupNext#17
Identical Phi Values (byte*) progress_cursor#23 (byte*) progress_cursor#21
Identical Phi Values (byte) progress_idx#24 (byte) progress_idx#22
Identical Phi Values (byte*) progress_cursor#13 (byte*) progress_cursor#16
Identical Phi Values (byte) progress_idx#14 (byte) progress_idx#17
Identical Phi Values (byte) bob_charset_next_id#12 (byte) bob_charset_next_id#16
Identical Phi Values (byte) prepareBobs::bob_table_idx#10 (byte) prepareBobs::bob_table_idx#12
Identical Phi Values (byte) prepareBobs::shift_x#10 (byte) prepareBobs::shift_x#2
Identical Phi Values (byte) prepareBobs::shift_y#10 (byte) prepareBobs::shift_y#12
Identical Phi Values (byte) bob_charset_next_id#13 (byte) bob_charset_next_id#16
Identical Phi Values (byte) progress_idx#15 (byte) progress_idx#10
Identical Phi Values (byte*) progress_cursor#14 (byte*) progress_cursor#17
Identical Phi Values (byte*) charsetFindOrAddGlyph::glyph_cursor#10 (byte*) charsetFindOrAddGlyph::glyph_cursor#11
Identical Phi Values (byte*) charsetFindOrAddGlyph::glyph#11 (byte*) charsetFindOrAddGlyph::glyph#6
Identical Phi Values (byte) charsetFindOrAddGlyph::found#3 (byte) charsetFindOrAddGlyph::found#0
Identical Phi Values (byte) charsetFindOrAddGlyph::glyph_id#13 (byte) charsetFindOrAddGlyph::glyph_id#11
Identical Phi Values (byte) bob_charset_next_id#24 (byte) bob_charset_next_id#15
Identical Phi Values (byte*) charsetFindOrAddGlyph::glyph#3 (byte*) charsetFindOrAddGlyph::glyph#6
Identical Phi Values (byte*) charsetFindOrAddGlyph::glyph_cursor#4 (byte*) charsetFindOrAddGlyph::glyph_cursor#11
Identical Phi Values (byte) bob_charset_next_id#17 (byte) bob_charset_next_id#15
Identical Phi Values (byte) charsetFindOrAddGlyph::glyph_id#10 (byte) charsetFindOrAddGlyph::glyph_id#11
Identical Phi Values (byte*) progress_init::line#1 (byte*) progress_init::line#0
Identical Phi Values (byte) progress_idx#18 (byte) progress_idx#25
Identical Phi Values (byte*) progress_cursor#18 (byte*) progress_cursor#24
Identical Phi Values (byte*) progress_cursor#10 (byte*) progress_cursor#1
Identical Phi Values (byte) progress_idx#11 (byte) progress_idx#1
Identical Phi Values (byte) bob_charset_next_id#18 (byte) bob_charset_next_id#1
Identical Phi Values (byte**) renderBobCleanupNext#15 (byte**) renderBobCleanupNext#11
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (void*) memset::return#0 (void*) memset::str#0
Identical Phi Values (signed word) main::rowOffsetY#6 (signed word) main::rowOffsetY#10
Identical Phi Values (signed word) main::origX#11 (signed word) main::origX#8
Identical Phi Values (byte*) progress_cursor#61 (byte*) progress_cursor#50
Identical Phi Values (byte) progress_idx#61 (byte) progress_idx#50
Identical Phi Values (byte) bob_charset_next_id#69 (byte) bob_charset_next_id#58
Identical Phi Values (byte) prepareBobs::shift_y#12 (byte) prepareBobs::shift_y#2
Identical Phi Values (byte) bob_charset_next_id#15 (byte) bob_charset_next_id#23
Identical Phi Values (byte*) charsetFindOrAddGlyph::glyph#6 (byte*) charsetFindOrAddGlyph::glyph#10
Identical Phi Values (byte) charsetFindOrAddGlyph::return#3 (byte) charsetFindOrAddGlyph::glyph_id#11
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte*) progress_cursor#50 (byte*) progress_cursor#15
Identical Phi Values (byte) progress_idx#50 (byte) progress_idx#16
Identical Phi Values (byte) bob_charset_next_id#58 (byte) bob_charset_next_id#14
Identical Phi Values (byte*) progress_cursor#1 (byte*) progress_cursor#50
Identical Phi Values (byte) progress_idx#1 (byte) progress_idx#50
Identical Phi Values (byte) bob_charset_next_id#1 (byte) bob_charset_next_id#58
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [2] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) mulf_init::$0 [33] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2
Simple Condition (bool~) mulf_init::$3 [37] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@4
Simple Condition (bool~) mulf_init::$7 [54] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@10
Simple Condition (bool~) mulf_init::$10 [60] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@12
Simple Condition (bool~) main::$8 [102] if(*((const byte*) RASTER)<(byte) $f8) goto main::@4
Simple Condition (bool~) main::$13 [121] if((byte) main::row#1!=rangelast(0,4)) goto main::@7
Simple Condition (bool~) main::$14 [126] if((byte) main::col#1!=rangelast(0,4)) goto main::@6
Simple Condition (bool~) main::$16 [135] if((byte) 0==(byte~) main::$15) goto main::@1
Simple Condition (bool~) main::$18 [142] if((byte) 0!=(byte~) main::$17) goto main::@17
Simple Condition (bool~) renderBobInit::$2 [172] if((byte) renderBobInit::y#1!=rangelast(0,$1f)) goto renderBobInit::@1
Simple Condition (bool~) renderBobInit::$3 [179] if((byte) renderBobInit::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobInit::@3
Simple Condition (bool~) renderBobCleanup::$0 [219] if((byte) renderBobCleanup::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobCleanup::@1
Simple Condition (bool~) prepareBobs::$2 [236] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2
Simple Condition (bool~) prepareBobs::$3 [240] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@5
Simple Condition (bool~) prepareBobs::$5 [248] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@8
Simple Condition (bool~) protoBobShiftRight::$0 [271] if((byte) protoBobShiftRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto protoBobShiftRight::@2
Simple Condition (bool~) protoBobShiftRight::$8 [274] if((byte) 0!=(byte~) protoBobShiftRight::$1) goto protoBobShiftRight::@4
Simple Condition (bool~) protoBobShiftRight::$7 [282] if((byte) protoBobShiftRight::j#3>=(byte) $30) goto protoBobShiftRight::@7
Simple Condition (bool~) protoBobShiftDown::$0 [291] if((byte) protoBobShiftDown::i#2>(byte) 0) goto protoBobShiftDown::@2
Simple Condition (bool~) charsetFindOrAddGlyph::$0 [305] if((byte) charsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto charsetFindOrAddGlyph::@2
Simple Condition (bool~) charsetFindOrAddGlyph::$1 [311] if((byte) charsetFindOrAddGlyph::i#2<(byte) 8) goto charsetFindOrAddGlyph::@5
Simple Condition (bool~) charsetFindOrAddGlyph::$3 [313] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@7
Simple Condition (bool~) charsetFindOrAddGlyph::$4 [318] if((byte) 0==(byte) charsetFindOrAddGlyph::found#2) goto charsetFindOrAddGlyph::@16
Simple Condition (bool~) charsetFindOrAddGlyph::$5 [325] if((byte) charsetFindOrAddGlyph::i1#2<(byte) 8) goto charsetFindOrAddGlyph::@21
Simple Condition (bool~) progress_inc::$1 [338] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [135] if((byte) 0!=(byte~) main::$15) goto main::@17
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant (const word) mulf_init::sqr#0 = 0
Constant (const byte) mulf_init::x_2#0 = 0
Constant (const byte) mulf_init::c#0 = 0
Constant (const byte*) mulf_init::sqr1_hi#0 = mulf_sqr1_hi+1
Constant (const byte*) mulf_init::sqr1_lo#0 = mulf_sqr1_lo+1
Constant (const byte) mulf_init::x_255#0 = -1
Constant (const byte) mulf_init::dir#0 = $ff
Constant (const byte*) mulf_init::sqr2_hi#0 = mulf_sqr2_hi
Constant (const byte*) mulf_init::sqr2_lo#0 = mulf_sqr2_lo
Constant (const byte) mulf_init::dir#1 = 1
Constant (const byte*) main::vicSelectGfxBank1_gfx#0 = BOB_SCREEN
Constant (const byte*) main::toD0181_screen#0 = BOB_SCREEN
Constant (const byte*) main::toD0181_gfx#0 = BOB_CHARSET
Constant (const void*) memset::str#0 = (void*)BOB_SCREEN
Constant (const byte) memset::c#0 = 0
Constant (const word) memset::num#0 = $3e8
Constant (const signed word) main::origX#0 = $a00
Constant (const signed word) main::rowOffsetY#0 = $100
Constant (const signed word) main::rowY#0 = main::origY
Constant (const byte) main::col#0 = 0
Constant (const byte) main::row#0 = 0
Constant (const byte) keyboard_key_pressed::key#0 = KEY_SPACE
Constant (const byte) keyboard_key_pressed::key#1 = KEY_SPACE
Constant (const byte*) main::vicSelectGfxBank2_gfx#0 = BASIC_SCREEN
Constant (const byte*) main::toD0182_screen#0 = BASIC_SCREEN
Constant (const byte*) main::toD0182_gfx#0 = BASIC_CHARSET
Constant (const byte**) renderBobCleanupNext#19 = (byte**) 0
Constant (const byte) renderBobInit::y#0 = 0
Constant (const byte) renderBobInit::i#0 = 0
Constant (const byte) renderBobCleanup::i#0 = 0
Constant (const byte**) renderBobCleanupNext#14 = RENDERBOB_CLEANUP
Constant (const byte*) progress_init::line#0 = BASIC_SCREEN
Constant (const byte) bob_charset_next_id#2 = 0
Constant (const byte*) charsetFindOrAddGlyph::glyph#0 = PROTO_BOB+$30
Constant (const byte*) charsetFindOrAddGlyph::charset#0 = BOB_CHARSET
Constant (const byte) prepareBobs::bob_table_idx#0 = 0
Constant (const byte) prepareBobs::shift_y#0 = 0
Constant (const byte) prepareBobs::shift_x#0 = 0
Constant (const byte*) prepareBobs::bob_glyph#0 = PROTO_BOB
Constant (const byte) prepareBobs::cell#0 = 0
Constant (const byte*) charsetFindOrAddGlyph::charset#1 = BOB_CHARSET
Constant (const byte) protoBobShiftRight::carry#0 = 0
Constant (const byte) protoBobShiftRight::j#0 = 0
Constant (const byte) protoBobShiftRight::i#0 = 0
Constant (const byte) protoBobShiftRight::$3 = $80
Constant (const byte) protoBobShiftRight::$2 = 0
Constant (const byte) protoBobShiftDown::i#0 = $17
Constant (const byte) bob_charset_next_id#27 = 0
Constant (const byte) charsetFindOrAddGlyph::glyph_id#0 = 0
Constant (const byte) charsetFindOrAddGlyph::found#0 = 1
Constant (const byte) charsetFindOrAddGlyph::i#0 = 0
Constant (const byte) charsetFindOrAddGlyph::i1#0 = 0
Constant (const byte) charsetFindOrAddGlyph::found#1 = 0
Constant (const byte*) progress_cursor#27 = (byte*) 0
Constant (const byte) progress_idx#27 = 0
Constant (const byte) progress_idx#17 = 0
Constant (const byte) progress_idx#9 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) memset::$2 = (byte*)memset::str#0
Constant (const byte*) memset::dst#0 = (byte*)memset::str#0
Constant (const word) main::vicSelectGfxBank1_toDd001_$0 = (word)main::vicSelectGfxBank1_gfx#0
Constant (const word) main::toD0181_$0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4 = (word)main::toD0181_gfx#0
Constant (const void*) memset::return#2 = memset::str#0
Constant (const word) main::vicSelectGfxBank2_toDd001_$0 = (word)main::vicSelectGfxBank2_gfx#0
Constant (const word) main::toD0182_$0 = (word)main::toD0182_screen#0
Constant (const word) main::toD0182_$4 = (word)main::toD0182_gfx#0
Constant (const byte*) progress_cursor#16 = progress_init::line#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [2] if((const word) memset::num#0<=(byte) 0) goto memset::@1
Removing PHI-reference to removed block (main::@1) in block main::@17
if() condition always true - replacing block destination [99] if(true) goto main::@4
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [119] main::row#1 ← ++ main::row#2 to ++
Resolved ranged comparison value [121] if(main::row#1!=rangelast(0,4)) goto main::@7 to (number) 5
Resolved ranged next value [124] main::col#1 ← ++ main::col#5 to ++
Resolved ranged comparison value [126] if(main::col#1!=rangelast(0,4)) goto main::@6 to (number) 5
Resolved ranged next value [170] renderBobInit::y#1 ← ++ renderBobInit::y#2 to ++
Resolved ranged comparison value [172] if(renderBobInit::y#1!=rangelast(0,$1f)) goto renderBobInit::@1 to (number) $20
Resolved ranged next value [177] renderBobInit::i#1 ← ++ renderBobInit::i#2 to ++
Resolved ranged comparison value [179] if(renderBobInit::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobInit::@3 to (const byte) NUM_BOBS-(byte) 1+(number) 1
Resolved ranged next value [217] renderBobCleanup::i#1 ← ++ renderBobCleanup::i#2 to ++
Resolved ranged comparison value [219] if(renderBobCleanup::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobCleanup::@1 to (const byte) NUM_BOBS-(byte) 1+(number) 1
Simplifying constant evaluating to zero (byte) 0*(const byte) BOB_SUBTABLE_SIZE in [194] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero BOB_TABLES in [194] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0 + (byte) renderBob::bob_table_idx#0)
Simplifying expression containing zero renderBob::screen#0 in [194] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0)
Simplifying expression containing zero renderBobCleanup::screen#0 in [208] *((byte*) renderBobCleanup::screen#0 + (byte) 0) ← (byte) 0
Simplifying expression containing zero PROTO_BOB in [296] *((const byte*) PROTO_BOB + (byte) 0) ← (byte) 0
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#24
Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#11
Eliminating unused variable (byte) charsetFindOrAddGlyph::return#0 and assignment [159] (byte) charsetFindOrAddGlyph::return#0 ← (byte) charsetFindOrAddGlyph::glyph_id#11
Eliminating unused constant (const void*) memset::return#2
Eliminating unused constant (const byte) bob_charset_next_id#27
Eliminating unused constant (const byte*) progress_cursor#27
Eliminating unused constant (const byte) progress_idx#27
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused constant (const byte**) renderBobCleanupNext#19
Successful SSA optimization PassNEliminateUnusedVars
Adding number conversion cast (unumber) 5 in if((byte) main::row#1!=(number) 5) goto main::@7
Adding number conversion cast (unumber) 5 in if((byte) main::col#1!=(number) 5) goto main::@6
Adding number conversion cast (unumber) $20 in if((byte) renderBobInit::y#1!=(number) $20) goto renderBobInit::@1
Adding number conversion cast (unumber) NUM_BOBS-1+1 in if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobInit::@3
Adding number conversion cast (unumber) 1 in if((byte) renderBobInit::i#1!=(unumber)(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobInit::@3
Adding number conversion cast (unumber) NUM_BOBS-1+1 in if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobCleanup::@1
Adding number conversion cast (unumber) 1 in if((byte) renderBobCleanup::i#1!=(unumber)(const byte) NUM_BOBS-(byte) 1+(number) 1) goto renderBobCleanup::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast 5
Simplifying constant integer cast 5
Simplifying constant integer cast $20
Simplifying constant integer cast (const byte) NUM_BOBS-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) NUM_BOBS-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) $20
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0
Constant right-side identified [49] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0
Constant right-side identified [53] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff
Constant right-side identified [56] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4
Constant right-side identified [93] (byte~) main::vicSelectGfxBank2_toDd001_$1 ← > (const word) main::vicSelectGfxBank2_toDd001_$0
Constant right-side identified [97] (word~) main::toD0182_$1 ← (const word) main::toD0182_$0 & (word) $3fff
Constant right-side identified [100] (byte~) main::toD0182_$5 ← > (const word) main::toD0182_$4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) memset::end#0 = memset::$2+memset::num#0
Constant (const byte) main::vicSelectGfxBank1_toDd001_$1 = >main::vicSelectGfxBank1_toDd001_$0
Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff
Constant (const byte) main::toD0181_$5 = >main::toD0181_$4
Constant (const byte) main::vicSelectGfxBank2_toDd001_$1 = >main::vicSelectGfxBank2_toDd001_$0
Constant (const word) main::toD0182_$1 = main::toD0182_$0&$3fff
Constant (const byte) main::toD0182_$5 = >main::toD0182_$4
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [48] (byte~) main::vicSelectGfxBank1_toDd001_$2 ← (const byte) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40
Constant right-side identified [51] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4
Constant right-side identified [53] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4
Constant right-side identified [89] (byte~) main::vicSelectGfxBank2_toDd001_$2 ← (const byte) main::vicSelectGfxBank2_toDd001_$1 / (byte) $40
Constant right-side identified [92] (word~) main::toD0182_$2 ← (const word) main::toD0182_$1 * (byte) 4
Constant right-side identified [94] (byte~) main::toD0182_$6 ← (const byte) main::toD0182_$5 / (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::vicSelectGfxBank1_toDd001_$2 = main::vicSelectGfxBank1_toDd001_$1/$40
Constant (const word) main::toD0181_$2 = main::toD0181_$1*4
Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4
Constant (const byte) main::vicSelectGfxBank2_toDd001_$2 = main::vicSelectGfxBank2_toDd001_$1/$40
Constant (const word) main::toD0182_$2 = main::toD0182_$1*4
Constant (const byte) main::toD0182_$6 = main::toD0182_$5/4
Successful SSA optimization Pass2ConstantIdentification
Simplifying constant evaluating to zero (const byte) main::vicSelectGfxBank1_toDd001_$1/(byte) $40 in 
Simplifying constant evaluating to zero (const byte) main::vicSelectGfxBank2_toDd001_$1/(byte) $40 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero 3 in [49] (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank1_toDd001_$2
Simplifying expression containing zero 3 in [90] (byte) main::vicSelectGfxBank2_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank2_toDd001_$2
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) main::vicSelectGfxBank1_toDd001_$1
Eliminating unused constant (const byte) main::vicSelectGfxBank2_toDd001_$1
Eliminating unused constant (const byte) main::vicSelectGfxBank1_toDd001_$2
Eliminating unused constant (const byte) main::vicSelectGfxBank2_toDd001_$2
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused constant (const word) main::vicSelectGfxBank1_toDd001_$0
Eliminating unused constant (const word) main::vicSelectGfxBank2_toDd001_$0
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused constant (const byte*) main::vicSelectGfxBank1_gfx#0
Eliminating unused constant (const byte*) main::vicSelectGfxBank2_gfx#0
Successful SSA optimization PassNEliminateUnusedVars
Constant right-side identified [50] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2
Constant right-side identified [51] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f
Constant right-side identified [88] (byte~) main::toD0182_$3 ← > (const word) main::toD0182_$2
Constant right-side identified [89] (byte~) main::toD0182_$7 ← (const byte) main::toD0182_$6 & (byte) $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::vicSelectGfxBank1_toDd001_return#0 = 3
Constant (const byte) main::toD0181_$3 = >main::toD0181_$2
Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f
Constant (const byte) main::vicSelectGfxBank2_toDd001_return#0 = 3
Constant (const byte) main::toD0182_$3 = >main::toD0182_$2
Constant (const byte) main::toD0182_$7 = main::toD0182_$6&$f
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [49] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7
Constant right-side identified [84] (byte) main::toD0182_return#0 ← (const byte) main::toD0182_$3 | (const byte) main::toD0182_$7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7
Constant (const byte) main::toD0182_return#0 = main::toD0182_$3|main::toD0182_$7
Successful SSA optimization Pass2ConstantIdentification
Rewriting multiplication to use shift and addition[87] (word~) renderBobInit::$1 ← (word~) renderBobInit::$0 * (byte) $28
Rewriting multiplication to use shift [88] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [93] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 * (const byte) SIZEOF_POINTER
Rewriting division to use shift [98] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 / (const byte) BOB_SHIFTS_X
Rewriting division to use shift [99] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 / (const byte) BOB_SHIFTS_Y
Rewriting multiplication to use shift [100] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [105] (byte~) renderBob::$5 ← (byte~) renderBob::$4 * (const byte) BOB_SHIFTS_X
Rewriting multiplication to use shift [121] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 * (const byte) SIZEOF_POINTER
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const byte*) memset::dst#0
Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0
Inlining constant with var siblings (const byte) keyboard_key_pressed::key#1
Inlining constant with var siblings (const word) mulf_init::sqr#0
Inlining constant with var siblings (const byte) mulf_init::x_2#0
Inlining constant with var siblings (const byte) mulf_init::c#0
Inlining constant with var siblings (const byte*) mulf_init::sqr1_hi#0
Inlining constant with var siblings (const byte*) mulf_init::sqr1_lo#0
Inlining constant with var siblings (const byte) mulf_init::x_255#0
Inlining constant with var siblings (const byte) mulf_init::dir#0
Inlining constant with var siblings (const byte*) mulf_init::sqr2_hi#0
Inlining constant with var siblings (const byte*) mulf_init::sqr2_lo#0
Inlining constant with var siblings (const byte) mulf_init::dir#1
Inlining constant with var siblings (const signed word) main::origX#0
Inlining constant with var siblings (const signed word) main::rowOffsetY#0
Inlining constant with var siblings (const signed word) main::rowY#0
Inlining constant with var siblings (const byte) main::col#0
Inlining constant with var siblings (const byte) main::row#0
Inlining constant with var siblings (const byte) renderBobInit::y#0
Inlining constant with var siblings (const byte) renderBobInit::i#0
Inlining constant with var siblings (const byte) renderBobCleanup::i#0
Inlining constant with var siblings (const byte) prepareBobs::bob_table_idx#0
Inlining constant with var siblings (const byte) prepareBobs::shift_y#0
Inlining constant with var siblings (const byte) prepareBobs::shift_x#0
Inlining constant with var siblings (const byte*) prepareBobs::bob_glyph#0
Inlining constant with var siblings (const byte) prepareBobs::cell#0
Inlining constant with var siblings (const byte) protoBobShiftRight::carry#0
Inlining constant with var siblings (const byte) protoBobShiftRight::j#0
Inlining constant with var siblings (const byte) protoBobShiftRight::i#0
Inlining constant with var siblings (const byte) protoBobShiftDown::i#0
Inlining constant with var siblings (const byte*) charsetFindOrAddGlyph::glyph#0
Inlining constant with var siblings (const byte) charsetFindOrAddGlyph::glyph_id#0
Inlining constant with var siblings (const byte) charsetFindOrAddGlyph::found#0
Inlining constant with var siblings (const byte) charsetFindOrAddGlyph::i#0
Inlining constant with var siblings (const byte) charsetFindOrAddGlyph::i1#0
Inlining constant with var siblings (const byte) charsetFindOrAddGlyph::found#1
Inlining constant with var siblings (const byte**) renderBobCleanupNext#14
Inlining constant with var siblings (const byte) bob_charset_next_id#2
Inlining constant with var siblings (const byte) progress_idx#17
Inlining constant with var siblings (const byte) progress_idx#9
Inlining constant with var siblings (const byte*) progress_cursor#16
Constant inlined mulf_init::sqr2_lo#0 = (const byte*) mulf_sqr2_lo
Constant inlined charsetFindOrAddGlyph::i#0 = (byte) 0
Constant inlined main::col#0 = (byte) 0
Constant inlined prepareBobs::bob_table_idx#0 = (byte) 0
Constant inlined charsetFindOrAddGlyph::i1#0 = (byte) 0
Constant inlined mulf_init::sqr2_hi#0 = (const byte*) mulf_sqr2_hi
Constant inlined main::toD0182_$4 = (word)(const byte*) BASIC_CHARSET
Constant inlined main::toD0182_$5 = >(word)(const byte*) BASIC_CHARSET
Constant inlined main::toD0182_$6 = >(word)(const byte*) BASIC_CHARSET/(byte) 4
Constant inlined main::toD0182_$7 = >(word)(const byte*) BASIC_CHARSET/(byte) 4&(byte) $f
Constant inlined main::toD0182_$0 = (word)(const byte*) BASIC_SCREEN
Constant inlined main::toD0182_$1 = (word)(const byte*) BASIC_SCREEN&(word) $3fff
Constant inlined main::row#0 = (byte) 0
Constant inlined main::toD0182_$2 = (word)(const byte*) BASIC_SCREEN&(word) $3fff*(byte) 4
Constant inlined protoBobShiftRight::j#0 = (byte) 0
Constant inlined main::toD0182_$3 = >(word)(const byte*) BASIC_SCREEN&(word) $3fff*(byte) 4
Constant inlined main::rowOffsetY#0 = (signed word) $100
Constant inlined mulf_init::dir#1 = (byte) 1
Constant inlined mulf_init::dir#0 = (byte) $ff
Constant inlined bob_charset_next_id#2 = (byte) 0
Constant inlined protoBobShiftRight::$3 = (byte) $80
Constant inlined protoBobShiftDown::i#0 = (byte) $17
Constant inlined mulf_init::x_255#0 = (byte) -1
Constant inlined protoBobShiftRight::$2 = (byte) 0
Constant inlined mulf_init::x_2#0 = (byte) 0
Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_SPACE
Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_SPACE
Constant inlined main::toD0181_$7 = >(word)(const byte*) BOB_CHARSET/(byte) 4&(byte) $f
Constant inlined main::toD0182_gfx#0 = (const byte*) BASIC_CHARSET
Constant inlined prepareBobs::shift_x#0 = (byte) 0
Constant inlined progress_idx#9 = (byte) 0
Constant inlined main::toD0181_$2 = (word)(const byte*) BOB_SCREEN&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$1 = (word)(const byte*) BOB_SCREEN&(word) $3fff
Constant inlined main::toD0181_$0 = (word)(const byte*) BOB_SCREEN
Constant inlined main::toD0181_$6 = >(word)(const byte*) BOB_CHARSET/(byte) 4
Constant inlined main::toD0181_$5 = >(word)(const byte*) BOB_CHARSET
Constant inlined main::toD0181_$4 = (word)(const byte*) BOB_CHARSET
Constant inlined main::toD0181_$3 = >(word)(const byte*) BOB_SCREEN&(word) $3fff*(byte) 4
Constant inlined mulf_init::sqr1_hi#0 = (const byte*) mulf_sqr1_hi+(byte) 1
Constant inlined prepareBobs::cell#0 = (byte) 0
Constant inlined renderBobCleanupNext#14 = (const byte**) RENDERBOB_CLEANUP
Constant inlined mulf_init::sqr1_lo#0 = (const byte*) mulf_sqr1_lo+(byte) 1
Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0
Constant inlined main::rowY#0 = (const signed word) main::origY
Constant inlined charsetFindOrAddGlyph::glyph#0 = (const byte*) PROTO_BOB+(byte) $30
Constant inlined mulf_init::c#0 = (byte) 0
Constant inlined main::toD0181_screen#0 = (const byte*) BOB_SCREEN
Constant inlined main::toD0181_gfx#0 = (const byte*) BOB_CHARSET
Constant inlined protoBobShiftRight::carry#0 = (byte) 0
Constant inlined main::origX#0 = (signed word) $a00
Constant inlined progress_init::line#0 = (const byte*) BASIC_SCREEN
Constant inlined protoBobShiftRight::i#0 = (byte) 0
Constant inlined memset::$2 = (byte*)(const void*) memset::str#0
Constant inlined progress_cursor#16 = (const byte*) BASIC_SCREEN
Constant inlined prepareBobs::bob_glyph#0 = (const byte*) PROTO_BOB
Constant inlined renderBobCleanup::i#0 = (byte) 0
Constant inlined prepareBobs::shift_y#0 = (byte) 0
Constant inlined mulf_init::sqr#0 = (word) 0
Constant inlined charsetFindOrAddGlyph::charset#0 = (const byte*) BOB_CHARSET
Constant inlined charsetFindOrAddGlyph::glyph_id#0 = (byte) 0
Constant inlined charsetFindOrAddGlyph::charset#1 = (const byte*) BOB_CHARSET
Constant inlined progress_idx#17 = (byte) 0
Constant inlined renderBobInit::y#0 = (byte) 0
Constant inlined charsetFindOrAddGlyph::found#1 = (byte) 0
Constant inlined charsetFindOrAddGlyph::found#0 = (byte) 1
Constant inlined main::toD0182_screen#0 = (const byte*) BASIC_SCREEN
Constant inlined renderBobInit::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *(PROTO_BOB+$18)
Consolidated array index constant in *(PROTO_BOB+$30)
Consolidated array index constant in *(progress_inc::progress_chars+8)
Successful SSA optimization Pass2ConstantAdditionElimination
Alias (word~) renderBobInit::$1 = (word~) renderBobInit::$8 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) keyboard_key_pressed::key#2 (const byte) KEY_SPACE
Identical Phi Values (byte*) charsetFindOrAddGlyph::glyph_cursor#0 (const byte*) BOB_CHARSET
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [9] (byte) keyboard_key_pressed::colidx#0 ← (const byte) KEY_SPACE & (byte) 7
Constant right-side identified [10] (byte) keyboard_key_pressed::rowidx#0 ← (const byte) KEY_SPACE >> (byte) 3
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) keyboard_key_pressed::colidx#0 = KEY_SPACE&7
Constant (const byte) keyboard_key_pressed::rowidx#0 = KEY_SPACE>>3
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0
Successful SSA optimization Pass2ConstantIdentification
Eliminating unused constant (const byte) SIZEOF_WORD
Successful SSA optimization PassNEliminateUnusedVars
Constant inlined keyboard_matrix_read::rowid#0 = (const byte) keyboard_key_pressed::rowidx#0
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0)
Consolidated array index constant in *(keyboard_matrix_col_bitmask+keyboard_key_pressed::colidx#0)
Successful SSA optimization Pass2ConstantAdditionElimination
Added new block during phi lifting mulf_init::@17(between mulf_init::@2 and mulf_init::@4)
Added new block during phi lifting mulf_init::@18(between mulf_init::@10 and mulf_init::@12)
Added new block during phi lifting main::@35(between main::@33 and main::@1)
Added new block during phi lifting main::@36(between main::@8 and main::@6)
Added new block during phi lifting main::@37(between main::@32 and main::@7)
Added new block during phi lifting renderBobInit::@5(between renderBobInit::@1 and renderBobInit::@1)
Added new block during phi lifting renderBobInit::@6(between renderBobInit::@3 and renderBobInit::@3)
Added new block during phi lifting renderBobCleanup::@3(between renderBobCleanup::@1 and renderBobCleanup::@1)
Added new block during phi lifting progress_inc::@3(between progress_inc and progress_inc::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @60
Adding NOP phi() at start of @66
Adding NOP phi() at start of @67
Adding NOP phi() at start of @69
Adding NOP phi() at start of @70
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@27
Adding NOP phi() at start of main::@28
Adding NOP phi() at start of main::@29
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001_@return
Adding NOP phi() at start of main::@23
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@30
Adding NOP phi() at start of main::@17
Adding NOP phi() at start of main::@19
Adding NOP phi() at start of main::vicSelectGfxBank2_toDd001
Adding NOP phi() at start of main::vicSelectGfxBank2_toDd001_@return
Adding NOP phi() at start of main::@25
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of main::toD0182_@return
Adding NOP phi() at start of keyboard_key_pressed
Adding NOP phi() at start of renderBobCleanup
Adding NOP phi() at start of renderBobCleanup::@2
Adding NOP phi() at start of memset
Adding NOP phi() at start of memset::@2
Adding NOP phi() at start of memset::@1
Adding NOP phi() at start of renderBobInit
Adding NOP phi() at start of renderBobInit::@2
Adding NOP phi() at start of prepareBobs
Adding NOP phi() at start of prepareBobs::@19
Adding NOP phi() at start of prepareBobs::@6
Adding NOP phi() at start of prepareBobs::@24
Adding NOP phi() at start of charsetFindOrAddGlyph::@3
Adding NOP phi() at start of charsetFindOrAddGlyph::@2
Adding NOP phi() at start of charsetFindOrAddGlyph::@11
Adding NOP phi() at start of protoBobShiftRight
Adding NOP phi() at start of protoBobShiftRight::@5
Adding NOP phi() at start of protoBobShiftRight::@4
Adding NOP phi() at start of protoBobShiftDown
Adding NOP phi() at start of progress_init
Adding NOP phi() at start of mulf_init
Adding NOP phi() at start of mulf_init::@3
Adding NOP phi() at start of mulf_init::@15
CALL GRAPH
Calls in [] to main:5 
Calls in [main] to mulf_init:9 prepareBobs:11 renderBobInit:13 memset:23 renderBobCleanup:28 renderBob:38 keyboard_key_pressed:51 keyboard_key_pressed:58 
Calls in [keyboard_key_pressed] to keyboard_matrix_read:81 
Calls in [prepareBobs] to progress_init:158 charsetFindOrAddGlyph:160 protoBobShiftDown:172 protoBobShiftRight:187 protoBobShiftRight:189 charsetFindOrAddGlyph:199 progress_inc:205 

Created 58 initial phi equivalence classes
Not coalescing [29] main::x#4 ← main::origX#8
Not coalescing [31] main::x#7 ← main::x#0
Not coalescing [32] main::y#6 ← main::y#0
Coalesced [33] renderBobCleanupNext#53 ← renderBobCleanupNext#21
Coalesced [55] main::origX#12 ← main::origX#1
Coalesced [56] main::rowOffsetY#12 ← main::rowOffsetY#1
Coalesced [72] main::x#5 ← main::rowX#1
Coalesced [73] main::y#4 ← main::rowY#1
Coalesced [74] renderBobCleanupNext#51 ← renderBobCleanupNext#13
Coalesced [75] main::col#6 ← main::col#1
Coalesced [76] main::x#6 ← main::x#1
Coalesced [77] main::y#5 ← main::y#1
Coalesced (already) [78] renderBobCleanupNext#52 ← renderBobCleanupNext#13
Coalesced [79] main::row#4 ← main::row#1
Coalesced [128] renderBobCleanup::i#3 ← renderBobCleanup::i#1
Coalesced [137] memset::dst#4 ← memset::dst#1
Coalesced [155] renderBobInit::i#3 ← renderBobInit::i#1
Coalesced [156] renderBobInit::y#3 ← renderBobInit::y#1
Coalesced [161] bob_charset_next_id#78 ← bob_charset_next_id#16
Coalesced [165] prepareBobs::bob_table_idx#16 ← prepareBobs::bob_table_idx#6
Coalesced [166] bob_charset_next_id#80 ← bob_charset_next_id#14
Coalesced [167] progress_cursor#71 ← progress_cursor#15
Coalesced [168] progress_idx#71 ← progress_idx#16
Coalesced [174] prepareBobs::shift_y#15 ← prepareBobs::shift_y#1
Coalesced (already) [175] progress_cursor#70 ← progress_cursor#31
Coalesced (already) [176] progress_idx#70 ← progress_idx#31
Coalesced (already) [177] bob_charset_next_id#79 ← bob_charset_next_id#30
Coalesced (already) [178] prepareBobs::bob_table_idx#15 ← prepareBobs::bob_table_idx#12
Coalesced [180] bob_charset_next_id#83 ← bob_charset_next_id#30
Coalesced [181] prepareBobs::bob_table#7 ← prepareBobs::bob_table#0
Coalesced [182] progress_idx#74 ← progress_idx#31
Coalesced [183] progress_cursor#74 ← progress_cursor#31
Coalesced [191] prepareBobs::shift_x#11 ← prepareBobs::shift_x#1
Coalesced [192] prepareBobs::bob_table_idx#17 ← prepareBobs::bob_table_idx#1
Coalesced (already) [193] bob_charset_next_id#81 ← bob_charset_next_id#21
Coalesced (already) [194] progress_cursor#72 ← progress_cursor#24
Coalesced (already) [195] progress_idx#72 ← progress_idx#25
Coalesced [197] bob_charset_next_id#84 ← bob_charset_next_id#21
Coalesced [198] charsetFindOrAddGlyph::glyph#14 ← charsetFindOrAddGlyph::glyph#1
Coalesced [207] prepareBobs::cell#6 ← prepareBobs::cell#1
Coalesced [208] prepareBobs::bob_glyph#6 ← prepareBobs::bob_glyph#1
Coalesced (already) [209] bob_charset_next_id#82 ← bob_charset_next_id#16
Coalesced [210] prepareBobs::bob_table#6 ← prepareBobs::bob_table#1
Coalesced [211] progress_idx#73 ← progress_idx#10
Coalesced [212] progress_cursor#73 ← progress_cursor#17
Coalesced [217] progress_cursor#76 ← progress_cursor#8
Coalesced [221] progress_idx#75 ← progress_idx#8
Coalesced (already) [222] progress_cursor#75 ← progress_cursor#24
Coalesced [230] bob_charset_next_id#86 ← bob_charset_next_id#8
Coalesced [235] charsetFindOrAddGlyph::i1#4 ← charsetFindOrAddGlyph::i1#1
Coalesced (already) [241] bob_charset_next_id#85 ← bob_charset_next_id#23
Coalesced [244] charsetFindOrAddGlyph::glyph_id#15 ← charsetFindOrAddGlyph::glyph_id#1
Coalesced [245] charsetFindOrAddGlyph::glyph_cursor#13 ← charsetFindOrAddGlyph::glyph_cursor#1
Coalesced [249] charsetFindOrAddGlyph::i#5 ← charsetFindOrAddGlyph::i#1
Coalesced [263] protoBobShiftRight::j#12 ← protoBobShiftRight::j#2
Coalesced [266] protoBobShiftRight::i#10 ← protoBobShiftRight::i#1
Coalesced [267] protoBobShiftRight::j#11 ← protoBobShiftRight::j#10
Not coalescing [268] protoBobShiftRight::carry#10 ← protoBobShiftRight::carry#1
Coalesced [270] protoBobShiftRight::j#13 ← protoBobShiftRight::j#1
Coalesced [283] protoBobShiftDown::i#4 ← protoBobShiftDown::i#1
Coalesced [303] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1
Coalesced [304] mulf_init::x_255#6 ← mulf_init::x_255#1
Coalesced [305] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1
Coalesced [306] mulf_init::dir#5 ← mulf_init::dir#4
Coalesced (already) [307] mulf_init::dir#6 ← mulf_init::dir#2
Coalesced [313] mulf_init::sqr#9 ← mulf_init::sqr#2
Coalesced [314] mulf_init::x_2#8 ← mulf_init::x_2#1
Coalesced [323] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1
Coalesced [324] mulf_init::c#6 ← mulf_init::c#1
Coalesced [325] mulf_init::sqr#7 ← mulf_init::sqr#1
Coalesced [326] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1
Coalesced [327] mulf_init::x_2#6 ← mulf_init::x_2#2
Coalesced [328] mulf_init::sqr#8 ← mulf_init::sqr#4
Coalesced (already) [329] mulf_init::x_2#7 ← mulf_init::x_2#3
Coalesced down to 42 phi equivalence classes
Culled Empty Block (label) @60
Culled Empty Block (label) @66
Culled Empty Block (label) @67
Culled Empty Block (label) @70
Culled Empty Block (label) main::@29
Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return
Culled Empty Block (label) main::@23
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@30
Culled Empty Block (label) main::@35
Culled Empty Block (label) main::@19
Culled Empty Block (label) main::vicSelectGfxBank2_toDd001_@return
Culled Empty Block (label) main::@25
Culled Empty Block (label) main::toD0182_@return
Culled Empty Block (label) main::@36
Culled Empty Block (label) main::@37
Culled Empty Block (label) renderBobCleanup::@2
Culled Empty Block (label) renderBobCleanup::@3
Culled Empty Block (label) memset::@2
Culled Empty Block (label) memset::@1
Culled Empty Block (label) renderBobInit::@2
Culled Empty Block (label) renderBobInit::@6
Culled Empty Block (label) renderBobInit::@5
Culled Empty Block (label) prepareBobs::@20
Culled Empty Block (label) prepareBobs::@2
Culled Empty Block (label) progress_inc::@3
Culled Empty Block (label) charsetFindOrAddGlyph::@3
Culled Empty Block (label) charsetFindOrAddGlyph::@2
Culled Empty Block (label) charsetFindOrAddGlyph::@14
Culled Empty Block (label) charsetFindOrAddGlyph::@11
Culled Empty Block (label) protoBobShiftRight::@5
Culled Empty Block (label) mulf_init::@3
Culled Empty Block (label) mulf_init::@15
Culled Empty Block (label) mulf_init::@17
Renumbering block @69 to @1
Renumbering block memset::@4 to memset::@1
Renumbering block memset::@5 to memset::@2
Renumbering block keyboard_key_pressed::@2 to keyboard_key_pressed::@1
Renumbering block mulf_init::@4 to mulf_init::@3
Renumbering block mulf_init::@7 to mulf_init::@4
Renumbering block mulf_init::@9 to mulf_init::@5
Renumbering block mulf_init::@10 to mulf_init::@6
Renumbering block mulf_init::@11 to mulf_init::@7
Renumbering block mulf_init::@12 to mulf_init::@8
Renumbering block mulf_init::@18 to mulf_init::@9
Renumbering block main::@4 to main::@2
Renumbering block main::@5 to main::@3
Renumbering block main::@6 to main::@4
Renumbering block main::@7 to main::@5
Renumbering block main::@8 to main::@6
Renumbering block main::@9 to main::@7
Renumbering block main::@17 to main::@8
Renumbering block main::@24 to main::@9
Renumbering block main::@26 to main::@10
Renumbering block main::@27 to main::@11
Renumbering block main::@28 to main::@12
Renumbering block main::@31 to main::@13
Renumbering block main::@32 to main::@14
Renumbering block main::@33 to main::@15
Renumbering block main::@34 to main::@16
Renumbering block renderBobInit::@3 to renderBobInit::@2
Renumbering block prepareBobs::@4 to prepareBobs::@2
Renumbering block prepareBobs::@5 to prepareBobs::@3
Renumbering block prepareBobs::@6 to prepareBobs::@4
Renumbering block prepareBobs::@7 to prepareBobs::@5
Renumbering block prepareBobs::@8 to prepareBobs::@6
Renumbering block prepareBobs::@9 to prepareBobs::@7
Renumbering block prepareBobs::@19 to prepareBobs::@8
Renumbering block prepareBobs::@21 to prepareBobs::@9
Renumbering block prepareBobs::@22 to prepareBobs::@10
Renumbering block prepareBobs::@23 to prepareBobs::@11
Renumbering block prepareBobs::@24 to prepareBobs::@12
Renumbering block prepareBobs::@25 to prepareBobs::@13
Renumbering block protoBobShiftRight::@4 to protoBobShiftRight::@3
Renumbering block protoBobShiftRight::@6 to protoBobShiftRight::@4
Renumbering block protoBobShiftRight::@7 to protoBobShiftRight::@5
Renumbering block protoBobShiftRight::@8 to protoBobShiftRight::@6
Renumbering block protoBobShiftRight::@13 to protoBobShiftRight::@7
Renumbering block charsetFindOrAddGlyph::@4 to charsetFindOrAddGlyph::@2
Renumbering block charsetFindOrAddGlyph::@5 to charsetFindOrAddGlyph::@3
Renumbering block charsetFindOrAddGlyph::@7 to charsetFindOrAddGlyph::@4
Renumbering block charsetFindOrAddGlyph::@8 to charsetFindOrAddGlyph::@5
Renumbering block charsetFindOrAddGlyph::@16 to charsetFindOrAddGlyph::@6
Renumbering block charsetFindOrAddGlyph::@20 to charsetFindOrAddGlyph::@7
Renumbering block charsetFindOrAddGlyph::@21 to charsetFindOrAddGlyph::@8
Renumbering block charsetFindOrAddGlyph::@22 to charsetFindOrAddGlyph::@9
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::vicSelectGfxBank2_toDd001
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of keyboard_key_pressed
Adding NOP phi() at start of renderBobCleanup
Adding NOP phi() at start of memset
Adding NOP phi() at start of renderBobInit
Adding NOP phi() at start of prepareBobs
Adding NOP phi() at start of prepareBobs::@8
Adding NOP phi() at start of prepareBobs::@4
Adding NOP phi() at start of prepareBobs::@12
Adding NOP phi() at start of protoBobShiftRight
Adding NOP phi() at start of protoBobShiftRight::@3
Adding NOP phi() at start of protoBobShiftDown
Adding NOP phi() at start of progress_init
Adding NOP phi() at start of mulf_init
Adding NOP phi() at start of mulf_init::@9

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @1
  [3] phi()

(void()) main()
main: scope:[main]  from @1
  [4] phi()
  [5] call mulf_init 
  to:main::@11
main::@11: scope:[main]  from main
  [6] phi()
  [7] call prepareBobs 
  to:main::@12
main::@12: scope:[main]  from main::@11
  [8] phi()
  [9] call renderBobInit 
  to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main]  from main::@12
  [10] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3
  to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main]  from main::vicSelectGfxBank1
  [11] phi()
  to:main::vicSelectGfxBank1_@1
main::vicSelectGfxBank1_@1: scope:[main]  from main::vicSelectGfxBank1_toDd001
  [12] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0
  to:main::toD0181
main::toD0181: scope:[main]  from main::vicSelectGfxBank1_@1
  [13] phi()
  to:main::@9
main::@9: scope:[main]  from main::toD0181
  [14] *((const byte*) D018) ← (const byte) main::toD0181_return#0
  [15] call memset 
  to:main::@1
main::@1: scope:[main]  from main::@15 main::@9
  [16] (signed word) main::rowOffsetY#10 ← phi( main::@9/(signed word) $100 main::@15/(signed word) main::rowOffsetY#1 )
  [16] (signed word) main::origX#8 ← phi( main::@9/(signed word) $a00 main::@15/(signed word) main::origX#1 )
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@2
  [17] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  [18] *((const byte*) BORDERCOL) ← (byte) $f
  [19] call renderBobCleanup 
  to:main::@13
main::@13: scope:[main]  from main::@3
  [20] (signed word) main::x#4 ← (signed word) main::origX#8
  to:main::@4
main::@4: scope:[main]  from main::@13 main::@6
  [21] (byte) main::col#5 ← phi( main::@13/(byte) 0 main::@6/(byte) main::col#1 )
  [21] (byte**) renderBobCleanupNext#21 ← phi( main::@13/(const byte**) RENDERBOB_CLEANUP main::@6/(byte**) renderBobCleanupNext#13 )
  [21] (signed word) main::y#0 ← phi( main::@13/(const signed word) main::origY main::@6/(signed word) main::rowY#1 )
  [21] (signed word) main::x#0 ← phi( main::@13/(signed word) main::x#4 main::@6/(signed word) main::rowX#1 )
  [22] (signed word) main::x#7 ← (signed word) main::x#0
  [23] (signed word) main::y#6 ← (signed word) main::y#0
  to:main::@5
main::@5: scope:[main]  from main::@14 main::@4
  [24] (byte) main::row#2 ← phi( main::@14/(byte) main::row#1 main::@4/(byte) 0 )
  [24] (byte**) renderBobCleanupNext#17 ← phi( main::@14/(byte**) renderBobCleanupNext#13 main::@4/(byte**) renderBobCleanupNext#21 )
  [24] (signed word) main::y#2 ← phi( main::@14/(signed word) main::y#1 main::@4/(signed word) main::y#6 )
  [24] (signed word) main::x#2 ← phi( main::@14/(signed word) main::x#1 main::@4/(signed word) main::x#7 )
  [25] *((const byte*) BORDERCOL) ← (byte) 1
  [26] (byte) renderBob::xpos#0 ← > (signed word) main::x#2
  [27] (byte) renderBob::ypos#0 ← > (signed word) main::y#2
  [28] call renderBob 
  to:main::@14
main::@14: scope:[main]  from main::@5
  [29] (signed word) main::x#1 ← (signed word) main::x#2 + (const signed word) main::rowOffsetX
  [30] (signed word) main::y#1 ← (signed word) main::y#2 + (signed word) main::rowOffsetY#10
  [31] *((const byte*) BORDERCOL) ← (byte) 2
  [32] (byte) main::row#1 ← ++ (byte) main::row#2
  [33] if((byte) main::row#1!=(byte) 5) goto main::@5
  to:main::@6
main::@6: scope:[main]  from main::@14
  [34] (signed word) main::rowX#1 ← (signed word) main::x#0 + (const signed word) main::colOffsetX
  [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const signed word) main::colOffsetY
  [36] (byte) main::col#1 ← ++ (byte) main::col#5
  [37] if((byte) main::col#1!=(byte) 5) goto main::@4
  to:main::@7
main::@7: scope:[main]  from main::@6
  [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100
  [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80
  [40] *((const byte*) BORDERCOL) ← (byte) 0
  [41] call keyboard_key_pressed 
  [42] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0
  to:main::@15
main::@15: scope:[main]  from main::@7
  [43] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2
  [44] if((byte) 0!=(byte~) main::$15) goto main::@8
  to:main::@1
main::@8: scope:[main]  from main::@15 main::@16
  [45] phi()
  [46] call keyboard_key_pressed 
  [47] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0
  to:main::@16
main::@16: scope:[main]  from main::@8
  [48] (byte~) main::$17 ← (byte) keyboard_key_pressed::return#3
  [49] if((byte) 0!=(byte~) main::$17) goto main::@8
  to:main::vicSelectGfxBank2
main::vicSelectGfxBank2: scope:[main]  from main::@16
  [50] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3
  to:main::vicSelectGfxBank2_toDd001
main::vicSelectGfxBank2_toDd001: scope:[main]  from main::vicSelectGfxBank2
  [51] phi()
  to:main::vicSelectGfxBank2_@1
main::vicSelectGfxBank2_@1: scope:[main]  from main::vicSelectGfxBank2_toDd001
  [52] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0
  to:main::toD0182
main::toD0182: scope:[main]  from main::vicSelectGfxBank2_@1
  [53] phi()
  to:main::@10
main::@10: scope:[main]  from main::toD0182
  [54] *((const byte*) D018) ← (const byte) main::toD0182_return#0
  to:main::@return
main::@return: scope:[main]  from main::@10
  [55] return 
  to:@return

(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
keyboard_key_pressed: scope:[keyboard_key_pressed]  from main::@7 main::@8
  [56] phi()
  [57] call keyboard_matrix_read 
  [58] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
  to:keyboard_key_pressed::@1
keyboard_key_pressed::@1: scope:[keyboard_key_pressed]  from keyboard_key_pressed
  [59] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
  [60] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0)
  to:keyboard_key_pressed::@return
keyboard_key_pressed::@return: scope:[keyboard_key_pressed]  from keyboard_key_pressed::@1
  [61] return 
  to:@return

(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
keyboard_matrix_read: scope:[keyboard_matrix_read]  from keyboard_key_pressed
  [62] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0)
  [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B)
  to:keyboard_matrix_read::@return
keyboard_matrix_read::@return: scope:[keyboard_matrix_read]  from keyboard_matrix_read
  [64] return 
  to:@return

(void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos)
renderBob: scope:[renderBob]  from main::@5
  [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2
  [66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3
  [67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1
  [68] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8)
  [69] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0
  [70] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0
  [71] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7
  [72] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2
  [73] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3
  [74] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6
  [75] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0
  [76] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER
  [77] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0)
  [78] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  [79] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  [80] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  [81] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  [82] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  [83] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  [84] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  [85] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0)
  to:renderBob::@return
renderBob::@return: scope:[renderBob]  from renderBob
  [86] return 
  to:@return

(void()) renderBobCleanup()
renderBobCleanup: scope:[renderBobCleanup]  from main::@3
  [87] phi()
  to:renderBobCleanup::@1
renderBobCleanup::@1: scope:[renderBobCleanup]  from renderBobCleanup renderBobCleanup::@1
  [88] (byte) renderBobCleanup::i#2 ← phi( renderBobCleanup/(byte) 0 renderBobCleanup::@1/(byte) renderBobCleanup::i#1 )
  [89] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1
  [90] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1)
  [91] *((byte*) renderBobCleanup::screen#0) ← (byte) 0
  [92] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0
  [93] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0
  [94] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0
  [95] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0
  [96] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0
  [97] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0
  [98] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0
  [99] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0
  [100] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2
  [101] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1
  to:renderBobCleanup::@return
renderBobCleanup::@return: scope:[renderBobCleanup]  from renderBobCleanup::@1
  [102] return 
  to:@return

(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset]  from main::@9
  [103] phi()
  to:memset::@1
memset::@1: scope:[memset]  from memset memset::@2
  [104] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 )
  [105] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2
  to:memset::@return
memset::@return: scope:[memset]  from memset::@1
  [106] return 
  to:@return
memset::@2: scope:[memset]  from memset::@1
  [107] *((byte*) memset::dst#2) ← (const byte) memset::c#0
  [108] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  to:memset::@1

(void()) renderBobInit()
renderBobInit: scope:[renderBobInit]  from main::@12
  [109] phi()
  to:renderBobInit::@1
renderBobInit::@1: scope:[renderBobInit]  from renderBobInit renderBobInit::@1
  [110] (byte) renderBobInit::y#2 ← phi( renderBobInit/(byte) 0 renderBobInit::@1/(byte) renderBobInit::y#1 )
  [111] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2
  [112] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2
  [113] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0
  [114] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3
  [115] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1
  [116] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1
  [117] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2
  [118] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1
  to:renderBobInit::@2
renderBobInit::@2: scope:[renderBobInit]  from renderBobInit::@1 renderBobInit::@2
  [119] (byte) renderBobInit::i#2 ← phi( renderBobInit::@1/(byte) 0 renderBobInit::@2/(byte) renderBobInit::i#1 )
  [120] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1
  [121] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN
  [122] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2
  [123] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2
  to:renderBobInit::@return
renderBobInit::@return: scope:[renderBobInit]  from renderBobInit::@2
  [124] return 
  to:@return

(void()) prepareBobs()
prepareBobs: scope:[prepareBobs]  from main::@11
  [125] phi()
  [126] call progress_init 
  to:prepareBobs::@8
prepareBobs::@8: scope:[prepareBobs]  from prepareBobs
  [127] phi()
  [128] call charsetFindOrAddGlyph 
  to:prepareBobs::@1
prepareBobs::@1: scope:[prepareBobs]  from prepareBobs::@8 prepareBobs::@9
  [129] (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::bob_table_idx#12 )
  [129] (byte) bob_charset_next_id#14 ← phi( prepareBobs::@8/(byte) bob_charset_next_id#16 prepareBobs::@9/(byte) bob_charset_next_id#30 )
  [129] (byte) progress_idx#16 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) progress_idx#31 )
  [129] (byte*) progress_cursor#15 ← phi( prepareBobs::@8/(const byte*) BASIC_SCREEN prepareBobs::@9/(byte*) progress_cursor#31 )
  [129] (byte) prepareBobs::shift_y#2 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@9/(byte) prepareBobs::shift_y#1 )
  [130] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2
  to:prepareBobs::@return
prepareBobs::@return: scope:[prepareBobs]  from prepareBobs::@1
  [131] return 
  to:@return
prepareBobs::@2: scope:[prepareBobs]  from prepareBobs::@1 prepareBobs::@13
  [132] (byte) progress_idx#31 ← phi( prepareBobs::@1/(byte) progress_idx#16 prepareBobs::@13/(byte) progress_idx#25 )
  [132] (byte*) progress_cursor#31 ← phi( prepareBobs::@1/(byte*) progress_cursor#15 prepareBobs::@13/(byte*) progress_cursor#24 )
  [132] (byte) bob_charset_next_id#30 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#14 prepareBobs::@13/(byte) bob_charset_next_id#21 )
  [132] (byte) prepareBobs::bob_table_idx#12 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#6 prepareBobs::@13/(byte) prepareBobs::bob_table_idx#1 )
  [132] (byte) prepareBobs::shift_x#2 ← phi( prepareBobs::@1/(byte) 0 prepareBobs::@13/(byte) prepareBobs::shift_x#1 )
  [133] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3
  to:prepareBobs::@4
prepareBobs::@4: scope:[prepareBobs]  from prepareBobs::@2
  [134] phi()
  [135] call protoBobShiftDown 
  to:prepareBobs::@9
prepareBobs::@9: scope:[prepareBobs]  from prepareBobs::@4
  [136] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2
  to:prepareBobs::@1
prepareBobs::@3: scope:[prepareBobs]  from prepareBobs::@2
  [137] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12
  to:prepareBobs::@5
prepareBobs::@5: scope:[prepareBobs]  from prepareBobs::@11 prepareBobs::@3
  [138] (byte*) progress_cursor#24 ← phi( prepareBobs::@11/(byte*) progress_cursor#17 prepareBobs::@3/(byte*) progress_cursor#31 )
  [138] (byte) progress_idx#25 ← phi( prepareBobs::@11/(byte) progress_idx#10 prepareBobs::@3/(byte) progress_idx#31 )
  [138] (byte*) prepareBobs::bob_table#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_table#1 prepareBobs::@3/(byte*) prepareBobs::bob_table#0 )
  [138] (byte) bob_charset_next_id#21 ← phi( prepareBobs::@11/(byte) bob_charset_next_id#16 prepareBobs::@3/(byte) bob_charset_next_id#30 )
  [138] (byte*) prepareBobs::bob_glyph#2 ← phi( prepareBobs::@11/(byte*) prepareBobs::bob_glyph#1 prepareBobs::@3/(const byte*) PROTO_BOB )
  [138] (byte) prepareBobs::cell#2 ← phi( prepareBobs::@11/(byte) prepareBobs::cell#1 prepareBobs::@3/(byte) 0 )
  [139] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6
  to:prepareBobs::@7
prepareBobs::@7: scope:[prepareBobs]  from prepareBobs::@5
  [140] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12
  [141] call protoBobShiftRight 
  to:prepareBobs::@12
prepareBobs::@12: scope:[prepareBobs]  from prepareBobs::@7
  [142] phi()
  [143] call protoBobShiftRight 
  to:prepareBobs::@13
prepareBobs::@13: scope:[prepareBobs]  from prepareBobs::@12
  [144] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2
  to:prepareBobs::@2
prepareBobs::@6: scope:[prepareBobs]  from prepareBobs::@5
  [145] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2
  [146] call charsetFindOrAddGlyph 
  [147] (byte) charsetFindOrAddGlyph::return#1 ← (byte) charsetFindOrAddGlyph::glyph_id#11
  to:prepareBobs::@10
prepareBobs::@10: scope:[prepareBobs]  from prepareBobs::@6
  [148] (byte~) prepareBobs::$6 ← (byte) charsetFindOrAddGlyph::return#1
  [149] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6
  [150] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8
  [151] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y
  [152] call progress_inc 
  to:prepareBobs::@11
prepareBobs::@11: scope:[prepareBobs]  from prepareBobs::@10
  [153] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2
  to:prepareBobs::@5

(void()) progress_inc()
progress_inc: scope:[progress_inc]  from prepareBobs::@10
  [154] (byte) progress_idx#8 ← ++ (byte) progress_idx#25
  [155] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1
  to:progress_inc::@2
progress_inc::@2: scope:[progress_inc]  from progress_inc
  [156] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8)
  [157] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24
  to:progress_inc::@1
progress_inc::@1: scope:[progress_inc]  from progress_inc progress_inc::@2
  [158] (byte*) progress_cursor#17 ← phi( progress_inc/(byte*) progress_cursor#24 progress_inc::@2/(byte*) progress_cursor#8 )
  [158] (byte) progress_idx#10 ← phi( progress_inc/(byte) progress_idx#8 progress_inc::@2/(byte) 0 )
  [159] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10)
  to:progress_inc::@return
progress_inc::@return: scope:[progress_inc]  from progress_inc::@1
  [160] return 
  to:@return

(byte()) charsetFindOrAddGlyph((byte*) charsetFindOrAddGlyph::glyph , (byte*) charsetFindOrAddGlyph::charset)
charsetFindOrAddGlyph: scope:[charsetFindOrAddGlyph]  from prepareBobs::@6 prepareBobs::@8
  [161] (byte*) charsetFindOrAddGlyph::glyph#10 ← phi( prepareBobs::@8/(const byte*) PROTO_BOB+(byte) $30 prepareBobs::@6/(byte*) charsetFindOrAddGlyph::glyph#1 )
  [161] (byte) bob_charset_next_id#23 ← phi( prepareBobs::@8/(byte) 0 prepareBobs::@6/(byte) bob_charset_next_id#21 )
  to:charsetFindOrAddGlyph::@1
charsetFindOrAddGlyph::@1: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph charsetFindOrAddGlyph::@6
  [162] (byte*) charsetFindOrAddGlyph::glyph_cursor#11 ← phi( charsetFindOrAddGlyph/(const byte*) BOB_CHARSET charsetFindOrAddGlyph::@6/(byte*) charsetFindOrAddGlyph::glyph_cursor#1 )
  [162] (byte) charsetFindOrAddGlyph::glyph_id#11 ← phi( charsetFindOrAddGlyph/(byte) 0 charsetFindOrAddGlyph::@6/(byte) charsetFindOrAddGlyph::glyph_id#1 )
  [163] if((byte) charsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto charsetFindOrAddGlyph::@2
  to:charsetFindOrAddGlyph::@7
charsetFindOrAddGlyph::@7: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@1 charsetFindOrAddGlyph::@8
  [164] (byte) charsetFindOrAddGlyph::i1#2 ← phi( charsetFindOrAddGlyph::@8/(byte) charsetFindOrAddGlyph::i1#1 charsetFindOrAddGlyph::@1/(byte) 0 )
  [165] if((byte) charsetFindOrAddGlyph::i1#2<(byte) 8) goto charsetFindOrAddGlyph::@8
  to:charsetFindOrAddGlyph::@9
charsetFindOrAddGlyph::@9: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@7
  [166] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23
  to:charsetFindOrAddGlyph::@return
charsetFindOrAddGlyph::@return: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@5 charsetFindOrAddGlyph::@9
  [167] (byte) bob_charset_next_id#16 ← phi( charsetFindOrAddGlyph::@5/(byte) bob_charset_next_id#23 charsetFindOrAddGlyph::@9/(byte) bob_charset_next_id#8 )
  [168] return 
  to:@return
charsetFindOrAddGlyph::@8: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@7
  [169] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2)
  [170] (byte) charsetFindOrAddGlyph::i1#1 ← ++ (byte) charsetFindOrAddGlyph::i1#2
  to:charsetFindOrAddGlyph::@7
charsetFindOrAddGlyph::@2: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@1 charsetFindOrAddGlyph::@4
  [171] (byte) charsetFindOrAddGlyph::i#2 ← phi( charsetFindOrAddGlyph::@1/(byte) 0 charsetFindOrAddGlyph::@4/(byte) charsetFindOrAddGlyph::i#1 )
  [172] if((byte) charsetFindOrAddGlyph::i#2<(byte) 8) goto charsetFindOrAddGlyph::@3
  to:charsetFindOrAddGlyph::@5
charsetFindOrAddGlyph::@3: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@2
  [173] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4
  to:charsetFindOrAddGlyph::@5
charsetFindOrAddGlyph::@5: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@2 charsetFindOrAddGlyph::@3
  [174] (byte) charsetFindOrAddGlyph::found#2 ← phi( charsetFindOrAddGlyph::@3/(byte) 0 charsetFindOrAddGlyph::@2/(byte) 1 )
  [175] if((byte) 0==(byte) charsetFindOrAddGlyph::found#2) goto charsetFindOrAddGlyph::@6
  to:charsetFindOrAddGlyph::@return
charsetFindOrAddGlyph::@6: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@5
  [176] (byte) charsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) charsetFindOrAddGlyph::glyph_id#11
  [177] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8
  to:charsetFindOrAddGlyph::@1
charsetFindOrAddGlyph::@4: scope:[charsetFindOrAddGlyph]  from charsetFindOrAddGlyph::@3
  [178] (byte) charsetFindOrAddGlyph::i#1 ← ++ (byte) charsetFindOrAddGlyph::i#2
  to:charsetFindOrAddGlyph::@2

(void()) protoBobShiftRight()
protoBobShiftRight: scope:[protoBobShiftRight]  from prepareBobs::@12 prepareBobs::@7
  [179] phi()
  to:protoBobShiftRight::@1
protoBobShiftRight::@1: scope:[protoBobShiftRight]  from protoBobShiftRight protoBobShiftRight::@6
  [180] (byte) protoBobShiftRight::carry#2 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::carry#10 )
  [180] (byte) protoBobShiftRight::j#3 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::j#10 )
  [180] (byte) protoBobShiftRight::i#2 ← phi( protoBobShiftRight/(byte) 0 protoBobShiftRight::@6/(byte) protoBobShiftRight::i#1 )
  [181] if((byte) protoBobShiftRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto protoBobShiftRight::@2
  to:protoBobShiftRight::@return
protoBobShiftRight::@return: scope:[protoBobShiftRight]  from protoBobShiftRight::@1
  [182] return 
  to:@return
protoBobShiftRight::@2: scope:[protoBobShiftRight]  from protoBobShiftRight::@1
  [183] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1
  [184] if((byte) 0!=(byte~) protoBobShiftRight::$1) goto protoBobShiftRight::@3
  to:protoBobShiftRight::@4
protoBobShiftRight::@3: scope:[protoBobShiftRight]  from protoBobShiftRight::@2
  [185] phi()
  to:protoBobShiftRight::@4
protoBobShiftRight::@4: scope:[protoBobShiftRight]  from protoBobShiftRight::@2 protoBobShiftRight::@3
  [186] (byte) protoBobShiftRight::carry#1 ← phi( protoBobShiftRight::@3/(byte) $80 protoBobShiftRight::@2/(byte) 0 )
  [187] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1
  [188] (byte~) protoBobShiftRight::$6 ← (byte) protoBobShiftRight::carry#2 | (byte~) protoBobShiftRight::$5
  [189] *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) ← (byte~) protoBobShiftRight::$6
  [190] if((byte) protoBobShiftRight::j#3>=(byte) $30) goto protoBobShiftRight::@5
  to:protoBobShiftRight::@7
protoBobShiftRight::@7: scope:[protoBobShiftRight]  from protoBobShiftRight::@4
  [191] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18
  to:protoBobShiftRight::@6
protoBobShiftRight::@6: scope:[protoBobShiftRight]  from protoBobShiftRight::@5 protoBobShiftRight::@7
  [192] (byte) protoBobShiftRight::j#10 ← phi( protoBobShiftRight::@7/(byte) protoBobShiftRight::j#2 protoBobShiftRight::@5/(byte) protoBobShiftRight::j#1 )
  [193] (byte) protoBobShiftRight::i#1 ← ++ (byte) protoBobShiftRight::i#2
  [194] (byte) protoBobShiftRight::carry#10 ← (byte) protoBobShiftRight::carry#1
  to:protoBobShiftRight::@1
protoBobShiftRight::@5: scope:[protoBobShiftRight]  from protoBobShiftRight::@4
  [195] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f
  to:protoBobShiftRight::@6

(void()) protoBobShiftDown()
protoBobShiftDown: scope:[protoBobShiftDown]  from prepareBobs::@4
  [196] phi()
  to:protoBobShiftDown::@1
protoBobShiftDown::@1: scope:[protoBobShiftDown]  from protoBobShiftDown protoBobShiftDown::@2
  [197] (byte) protoBobShiftDown::i#2 ← phi( protoBobShiftDown/(byte) $17 protoBobShiftDown::@2/(byte) protoBobShiftDown::i#1 )
  [198] if((byte) protoBobShiftDown::i#2>(byte) 0) goto protoBobShiftDown::@2
  to:protoBobShiftDown::@3
protoBobShiftDown::@3: scope:[protoBobShiftDown]  from protoBobShiftDown::@1
  [199] *((const byte*) PROTO_BOB) ← (byte) 0
  [200] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0
  [201] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0
  to:protoBobShiftDown::@return
protoBobShiftDown::@return: scope:[protoBobShiftDown]  from protoBobShiftDown::@3
  [202] return 
  to:@return
protoBobShiftDown::@2: scope:[protoBobShiftDown]  from protoBobShiftDown::@1
  [203] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2)
  [204] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2)
  [205] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0
  [206] (byte) protoBobShiftDown::i#1 ← -- (byte) protoBobShiftDown::i#2
  to:protoBobShiftDown::@1

(void()) progress_init((byte*) progress_init::line)
progress_init: scope:[progress_init]  from prepareBobs
  [207] phi()
  to:progress_init::@return
progress_init::@return: scope:[progress_init]  from progress_init
  [208] return 
  to:@return

(void()) mulf_init()
mulf_init: scope:[mulf_init]  from main
  [209] phi()
  to:mulf_init::@1
mulf_init::@1: scope:[mulf_init]  from mulf_init mulf_init::@3
  [210] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 )
  [210] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 )
  [210] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 )
  [210] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 )
  [210] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 )
  [211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2
  to:mulf_init::@5
mulf_init::@5: scope:[mulf_init]  from mulf_init::@1 mulf_init::@8
  [212] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff )
  [212] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi )
  [212] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 )
  [212] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo )
  [213] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6
  to:mulf_init::@7
mulf_init::@7: scope:[mulf_init]  from mulf_init::@5
  [214] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100)
  [215] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100)
  to:mulf_init::@return
mulf_init::@return: scope:[mulf_init]  from mulf_init::@7
  [216] return 
  to:@return
mulf_init::@6: scope:[mulf_init]  from mulf_init::@5
  [217] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2)
  [218] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2)
  [219] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
  [220] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
  [221] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9
  to:mulf_init::@8
mulf_init::@9: scope:[mulf_init]  from mulf_init::@6
  [222] phi()
  to:mulf_init::@8
mulf_init::@8: scope:[mulf_init]  from mulf_init::@6 mulf_init::@9
  [223] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 )
  [224] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
  to:mulf_init::@5
mulf_init::@2: scope:[mulf_init]  from mulf_init::@1
  [225] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
  [226] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1
  [227] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3
  to:mulf_init::@4
mulf_init::@4: scope:[mulf_init]  from mulf_init::@2
  [228] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
  [229] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
  to:mulf_init::@3
mulf_init::@3: scope:[mulf_init]  from mulf_init::@2 mulf_init::@4
  [230] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 )
  [230] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 )
  [231] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3
  [232] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4
  [233] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3
  [234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5
  [235] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
  [236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
  [237] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
  to:mulf_init::@1


VARIABLE REGISTER WEIGHTS
(byte) bob_charset_next_id
(byte) bob_charset_next_id#14 12.0
(byte) bob_charset_next_id#16 1000.5454545454544
(byte) bob_charset_next_id#21 275.5
(byte) bob_charset_next_id#23 1400.3333333333335
(byte) bob_charset_next_id#30 37.33333333333333
(byte) bob_charset_next_id#8 4.0
(byte()) charsetFindOrAddGlyph((byte*) charsetFindOrAddGlyph::glyph , (byte*) charsetFindOrAddGlyph::charset)
(byte*) charsetFindOrAddGlyph::charset
(byte) charsetFindOrAddGlyph::found
(byte) charsetFindOrAddGlyph::found#2 10001.0
(byte*) charsetFindOrAddGlyph::glyph
(byte*) charsetFindOrAddGlyph::glyph#1 2002.0
(byte*) charsetFindOrAddGlyph::glyph#10 7400.200000000001
(byte*) charsetFindOrAddGlyph::glyph_cursor
(byte*) charsetFindOrAddGlyph::glyph_cursor#1 20002.0
(byte*) charsetFindOrAddGlyph::glyph_cursor#11 10000.307692307691
(byte) charsetFindOrAddGlyph::glyph_id
(byte) charsetFindOrAddGlyph::glyph_id#1 10001.0
(byte) charsetFindOrAddGlyph::glyph_id#11 1937.75
(byte) charsetFindOrAddGlyph::i
(byte) charsetFindOrAddGlyph::i#1 200002.0
(byte) charsetFindOrAddGlyph::i#2 166668.3333333333
(byte) charsetFindOrAddGlyph::i1
(byte) charsetFindOrAddGlyph::i1#1 20002.0
(byte) charsetFindOrAddGlyph::i1#2 16668.333333333332
(byte) charsetFindOrAddGlyph::return
(byte) charsetFindOrAddGlyph::return#1 2002.0
(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
(byte~) keyboard_key_pressed::$2 4.0
(byte) keyboard_key_pressed::colidx
(byte) keyboard_key_pressed::key
(byte) keyboard_key_pressed::return
(byte) keyboard_key_pressed::return#0 6.0
(byte) keyboard_key_pressed::return#2 22.0
(byte) keyboard_key_pressed::return#3 22.0
(byte) keyboard_key_pressed::rowidx
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
(byte) keyboard_matrix_read::return
(byte) keyboard_matrix_read::return#0 1.3333333333333333
(byte) keyboard_matrix_read::return#2 4.0
(byte) keyboard_matrix_read::row_pressed_bits
(byte) keyboard_matrix_read::rowid
(void()) main()
(byte~) main::$15 22.0
(byte~) main::$17 22.0
(byte) main::col
(byte) main::col#1 151.5
(byte) main::col#5 13.466666666666667
(signed word) main::origX
(signed word) main::origX#1 3.142857142857143
(signed word) main::origX#8 1.5
(byte) main::row
(byte) main::row#1 1501.5
(byte) main::row#2 250.25
(signed word) main::rowOffsetY
(signed word) main::rowOffsetY#1 3.6666666666666665
(signed word) main::rowOffsetY#10 44.47826086956522
(signed word) main::rowX
(signed word) main::rowX#1 50.5
(signed word) main::rowY
(signed word) main::rowY#1 67.33333333333333
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(byte*) main::toD0181_screen
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(byte*) main::toD0182_screen
(byte*) main::vicSelectGfxBank1_gfx
(byte*) main::vicSelectGfxBank1_toDd001_gfx
(byte) main::vicSelectGfxBank1_toDd001_return
(byte*) main::vicSelectGfxBank2_gfx
(byte*) main::vicSelectGfxBank2_toDd001_gfx
(byte) main::vicSelectGfxBank2_toDd001_return
(signed word) main::x
(signed word) main::x#0 24.153846153846153
(signed word) main::x#1 400.4
(signed word) main::x#2 620.8
(signed word) main::x#4 22.0
(signed word) main::x#7 101.0
(signed word) main::y
(signed word) main::y#0 21.642857142857142
(signed word) main::y#1 500.5
(signed word) main::y#2 517.3333333333334
(signed word) main::y#6 202.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(byte) memset::c
(byte*) memset::dst
(byte*) memset::dst#1 22.0
(byte*) memset::dst#2 14.666666666666666
(byte*) memset::end
(word) memset::num
(void*) memset::return
(void*) memset::str
(void()) mulf_init()
(byte~) mulf_init::$1 22.0
(byte~) mulf_init::$4 22.0
(byte~) mulf_init::$5 22.0
(byte) mulf_init::c
(byte) mulf_init::c#1 2.5384615384615383
(byte) mulf_init::c#2 11.0
(byte) mulf_init::dir
(byte) mulf_init::dir#2 4.125
(byte) mulf_init::dir#4 11.0
(word) mulf_init::sqr
(word) mulf_init::sqr#1 11.0
(word) mulf_init::sqr#2 22.0
(word) mulf_init::sqr#3 9.166666666666666
(word) mulf_init::sqr#4 5.5
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#1 7.333333333333333
(byte*) mulf_init::sqr1_hi#2 2.75
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#1 22.0
(byte*) mulf_init::sqr1_lo#2 3.142857142857143
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#1 3.6666666666666665
(byte*) mulf_init::sqr2_hi#2 8.25
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#1 22.0
(byte*) mulf_init::sqr2_lo#2 4.888888888888889
(byte) mulf_init::x_2
(byte) mulf_init::x_2#1 11.0
(byte) mulf_init::x_2#2 5.5
(byte) mulf_init::x_2#3 6.6000000000000005
(byte) mulf_init::x_255
(byte) mulf_init::x_255#1 6.6000000000000005
(byte) mulf_init::x_255#2 8.8
(void()) prepareBobs()
(byte~) prepareBobs::$6 2002.0
(byte*) prepareBobs::bob_glyph
(byte*) prepareBobs::bob_glyph#1 500.5
(byte*) prepareBobs::bob_glyph#2 429.0
(byte*) prepareBobs::bob_table
(byte*) prepareBobs::bob_table#0 202.0
(byte*) prepareBobs::bob_table#1 667.3333333333334
(byte*) prepareBobs::bob_table#2 388.0
(byte) prepareBobs::bob_table_idx
(byte) prepareBobs::bob_table_idx#1 40.4
(byte) prepareBobs::bob_table_idx#12 19.11764705882353
(byte) prepareBobs::bob_table_idx#6 11.0
(byte) prepareBobs::cell
(byte) prepareBobs::cell#1 2002.0
(byte) prepareBobs::cell#2 300.29999999999995
(byte) prepareBobs::shift_x
(byte) prepareBobs::shift_x#1 202.0
(byte) prepareBobs::shift_x#2 16.833333333333332
(byte) prepareBobs::shift_y
(byte) prepareBobs::shift_y#1 22.0
(byte) prepareBobs::shift_y#2 1.4347826086956523
(byte*) progress_cursor
(byte*) progress_cursor#15 11.0
(byte*) progress_cursor#17 201.4
(byte*) progress_cursor#24 71.11764705882355
(byte*) progress_cursor#31 37.33333333333333
(byte*) progress_cursor#8 4.0
(byte) progress_idx
(byte) progress_idx#10 201.0
(byte) progress_idx#16 11.0
(byte) progress_idx#25 86.07142857142856
(byte) progress_idx#31 37.33333333333333
(byte) progress_idx#8 3.0
(void()) progress_inc()
(void()) progress_init((byte*) progress_init::line)
(byte*) progress_init::line
(void()) protoBobShiftDown()
(byte) protoBobShiftDown::i
(byte) protoBobShiftDown::i#1 202.0
(byte) protoBobShiftDown::i#2 161.6
(void()) protoBobShiftRight()
(byte~) protoBobShiftRight::$1 2002.0
(byte~) protoBobShiftRight::$5 2002.0
(byte~) protoBobShiftRight::$6 2002.0
(byte) protoBobShiftRight::carry
(byte) protoBobShiftRight::carry#1 111.22222222222223
(byte) protoBobShiftRight::carry#10 2002.0
(byte) protoBobShiftRight::carry#2 286.0
(byte) protoBobShiftRight::i
(byte) protoBobShiftRight::i#1 1001.0
(byte) protoBobShiftRight::i#2 231.0
(byte) protoBobShiftRight::j
(byte) protoBobShiftRight::j#1 2002.0
(byte) protoBobShiftRight::j#10 1001.0
(byte) protoBobShiftRight::j#2 2002.0
(byte) protoBobShiftRight::j#3 700.7
(byte) protoBobShiftRight::new_carry
(void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos)
(byte*~) renderBob::$2 4.0
(byte~) renderBob::$4 4.0
(byte~) renderBob::$5 2.0
(byte~) renderBob::$6 4.0
(byte~) renderBob::$8 4.0
(byte) renderBob::bob_table_idx
(byte) renderBob::bob_table_idx#0 1.8181818181818186
(byte*) renderBob::screen
(byte*) renderBob::screen#0 1.4666666666666666
(byte) renderBob::x_char_offset
(byte) renderBob::x_char_offset#0 0.8
(byte) renderBob::xpos
(byte) renderBob::xpos#0 100.5
(byte) renderBob::y_char_offset
(byte) renderBob::y_char_offset#0 4.0
(word) renderBob::y_offset
(word) renderBob::y_offset#0 4.0
(byte) renderBob::ypos
(byte) renderBob::ypos#0 143.57142857142856
(void()) renderBobCleanup()
(byte~) renderBobCleanup::$1 202.0
(byte) renderBobCleanup::i
(byte) renderBobCleanup::i#1 151.5
(byte) renderBobCleanup::i#2 25.25
(byte*) renderBobCleanup::screen
(byte*) renderBobCleanup::screen#0 112.22222222222223
(byte**) renderBobCleanupNext
(byte**) renderBobCleanupNext#13 52.57142857142857
(byte**) renderBobCleanupNext#17 73.73333333333335
(byte**) renderBobCleanupNext#21 67.33333333333333
(void()) renderBobInit()
(word~) renderBobInit::$0 16.5
(word~) renderBobInit::$1 11.0
(byte~) renderBobInit::$4 22.0
(byte~) renderBobInit::$5 22.0
(word~) renderBobInit::$6 22.0
(word~) renderBobInit::$7 22.0
(byte) renderBobInit::i
(byte) renderBobInit::i#1 16.5
(byte) renderBobInit::i#2 11.0
(byte) renderBobInit::y
(byte) renderBobInit::y#1 16.5
(byte) renderBobInit::y#2 4.714285714285714

Initial phi equivalence classes
[ main::origX#8 main::origX#1 ]
[ main::rowOffsetY#10 main::rowOffsetY#1 ]
[ main::x#0 main::x#4 main::rowX#1 ]
[ main::y#0 main::rowY#1 ]
[ main::col#5 main::col#1 ]
[ main::x#2 main::x#1 main::x#7 ]
[ main::y#2 main::y#1 main::y#6 ]
[ renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ]
[ main::row#2 main::row#1 ]
[ renderBobCleanup::i#2 renderBobCleanup::i#1 ]
[ memset::dst#2 memset::dst#1 ]
[ renderBobInit::y#2 renderBobInit::y#1 ]
[ renderBobInit::i#2 renderBobInit::i#1 ]
[ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ]
[ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ]
[ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
[ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
[ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
[ prepareBobs::cell#2 prepareBobs::cell#1 ]
[ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ]
[ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ]
[ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
[ charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ]
[ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ]
[ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ]
[ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ]
[ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ]
[ charsetFindOrAddGlyph::found#2 ]
[ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ]
[ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ]
[ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ]
[ protoBobShiftRight::carry#1 ]
[ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ]
[ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
[ mulf_init::c#2 mulf_init::c#1 ]
[ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
[ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
[ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
[ mulf_init::x_255#2 mulf_init::x_255#1 ]
[ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
[ mulf_init::dir#2 mulf_init::dir#4 ]
[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
Added variable renderBob::xpos#0 to live range equivalence class [ renderBob::xpos#0 ]
Added variable renderBob::ypos#0 to live range equivalence class [ renderBob::ypos#0 ]
Added variable keyboard_key_pressed::return#2 to live range equivalence class [ keyboard_key_pressed::return#2 ]
Added variable main::$15 to live range equivalence class [ main::$15 ]
Added variable keyboard_key_pressed::return#3 to live range equivalence class [ keyboard_key_pressed::return#3 ]
Added variable main::$17 to live range equivalence class [ main::$17 ]
Added variable keyboard_matrix_read::return#2 to live range equivalence class [ keyboard_matrix_read::return#2 ]
Added variable keyboard_key_pressed::$2 to live range equivalence class [ keyboard_key_pressed::$2 ]
Added variable keyboard_key_pressed::return#0 to live range equivalence class [ keyboard_key_pressed::return#0 ]
Added variable keyboard_matrix_read::return#0 to live range equivalence class [ keyboard_matrix_read::return#0 ]
Added variable renderBob::x_char_offset#0 to live range equivalence class [ renderBob::x_char_offset#0 ]
Added variable renderBob::y_char_offset#0 to live range equivalence class [ renderBob::y_char_offset#0 ]
Added variable renderBob::$8 to live range equivalence class [ renderBob::$8 ]
Added variable renderBob::y_offset#0 to live range equivalence class [ renderBob::y_offset#0 ]
Added variable renderBob::$2 to live range equivalence class [ renderBob::$2 ]
Added variable renderBob::screen#0 to live range equivalence class [ renderBob::screen#0 ]
Added variable renderBob::$4 to live range equivalence class [ renderBob::$4 ]
Added variable renderBob::$5 to live range equivalence class [ renderBob::$5 ]
Added variable renderBob::$6 to live range equivalence class [ renderBob::$6 ]
Added variable renderBob::bob_table_idx#0 to live range equivalence class [ renderBob::bob_table_idx#0 ]
Added variable renderBobCleanup::$1 to live range equivalence class [ renderBobCleanup::$1 ]
Added variable renderBobCleanup::screen#0 to live range equivalence class [ renderBobCleanup::screen#0 ]
Added variable renderBobInit::$0 to live range equivalence class [ renderBobInit::$0 ]
Added variable renderBobInit::$6 to live range equivalence class [ renderBobInit::$6 ]
Added variable renderBobInit::$7 to live range equivalence class [ renderBobInit::$7 ]
Added variable renderBobInit::$1 to live range equivalence class [ renderBobInit::$1 ]
Added variable renderBobInit::$4 to live range equivalence class [ renderBobInit::$4 ]
Added variable renderBobInit::$5 to live range equivalence class [ renderBobInit::$5 ]
Added variable charsetFindOrAddGlyph::return#1 to live range equivalence class [ charsetFindOrAddGlyph::return#1 ]
Added variable prepareBobs::$6 to live range equivalence class [ prepareBobs::$6 ]
Added variable protoBobShiftRight::$1 to live range equivalence class [ protoBobShiftRight::$1 ]
Added variable protoBobShiftRight::$5 to live range equivalence class [ protoBobShiftRight::$5 ]
Added variable protoBobShiftRight::$6 to live range equivalence class [ protoBobShiftRight::$6 ]
Added variable mulf_init::$1 to live range equivalence class [ mulf_init::$1 ]
Added variable mulf_init::$4 to live range equivalence class [ mulf_init::$4 ]
Added variable mulf_init::$5 to live range equivalence class [ mulf_init::$5 ]
Complete equivalence classes
[ main::origX#8 main::origX#1 ]
[ main::rowOffsetY#10 main::rowOffsetY#1 ]
[ main::x#0 main::x#4 main::rowX#1 ]
[ main::y#0 main::rowY#1 ]
[ main::col#5 main::col#1 ]
[ main::x#2 main::x#1 main::x#7 ]
[ main::y#2 main::y#1 main::y#6 ]
[ renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ]
[ main::row#2 main::row#1 ]
[ renderBobCleanup::i#2 renderBobCleanup::i#1 ]
[ memset::dst#2 memset::dst#1 ]
[ renderBobInit::y#2 renderBobInit::y#1 ]
[ renderBobInit::i#2 renderBobInit::i#1 ]
[ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ]
[ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ]
[ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
[ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
[ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
[ prepareBobs::cell#2 prepareBobs::cell#1 ]
[ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ]
[ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ]
[ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
[ charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ]
[ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ]
[ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ]
[ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ]
[ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ]
[ charsetFindOrAddGlyph::found#2 ]
[ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ]
[ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ]
[ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ]
[ protoBobShiftRight::carry#1 ]
[ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ]
[ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
[ mulf_init::c#2 mulf_init::c#1 ]
[ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
[ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
[ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
[ mulf_init::x_255#2 mulf_init::x_255#1 ]
[ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
[ mulf_init::dir#2 mulf_init::dir#4 ]
[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
[ renderBob::xpos#0 ]
[ renderBob::ypos#0 ]
[ keyboard_key_pressed::return#2 ]
[ main::$15 ]
[ keyboard_key_pressed::return#3 ]
[ main::$17 ]
[ keyboard_matrix_read::return#2 ]
[ keyboard_key_pressed::$2 ]
[ keyboard_key_pressed::return#0 ]
[ keyboard_matrix_read::return#0 ]
[ renderBob::x_char_offset#0 ]
[ renderBob::y_char_offset#0 ]
[ renderBob::$8 ]
[ renderBob::y_offset#0 ]
[ renderBob::$2 ]
[ renderBob::screen#0 ]
[ renderBob::$4 ]
[ renderBob::$5 ]
[ renderBob::$6 ]
[ renderBob::bob_table_idx#0 ]
[ renderBobCleanup::$1 ]
[ renderBobCleanup::screen#0 ]
[ renderBobInit::$0 ]
[ renderBobInit::$6 ]
[ renderBobInit::$7 ]
[ renderBobInit::$1 ]
[ renderBobInit::$4 ]
[ renderBobInit::$5 ]
[ charsetFindOrAddGlyph::return#1 ]
[ prepareBobs::$6 ]
[ protoBobShiftRight::$1 ]
[ protoBobShiftRight::$5 ]
[ protoBobShiftRight::$6 ]
[ mulf_init::$1 ]
[ mulf_init::$4 ]
[ mulf_init::$5 ]
Allocated zp[2]:2 [ main::origX#8 main::origX#1 ]
Allocated zp[2]:4 [ main::rowOffsetY#10 main::rowOffsetY#1 ]
Allocated zp[2]:6 [ main::x#0 main::x#4 main::rowX#1 ]
Allocated zp[2]:8 [ main::y#0 main::rowY#1 ]
Allocated zp[1]:10 [ main::col#5 main::col#1 ]
Allocated zp[2]:11 [ main::x#2 main::x#1 main::x#7 ]
Allocated zp[2]:13 [ main::y#2 main::y#1 main::y#6 ]
Allocated zp[2]:15 [ renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ]
Allocated zp[1]:17 [ main::row#2 main::row#1 ]
Allocated zp[1]:18 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ]
Allocated zp[2]:19 [ memset::dst#2 memset::dst#1 ]
Allocated zp[1]:21 [ renderBobInit::y#2 renderBobInit::y#1 ]
Allocated zp[1]:22 [ renderBobInit::i#2 renderBobInit::i#1 ]
Allocated zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ]
Allocated zp[2]:24 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ]
Allocated zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
Allocated zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
Allocated zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
Allocated zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ]
Allocated zp[2]:30 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ]
Allocated zp[2]:32 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ]
Allocated zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
Allocated zp[2]:35 [ charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ]
Allocated zp[1]:37 [ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ]
Allocated zp[2]:38 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ]
Allocated zp[1]:40 [ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ]
Allocated zp[1]:41 [ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ]
Allocated zp[1]:42 [ charsetFindOrAddGlyph::found#2 ]
Allocated zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ]
Allocated zp[1]:44 [ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ]
Allocated zp[1]:45 [ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ]
Allocated zp[1]:46 [ protoBobShiftRight::carry#1 ]
Allocated zp[1]:47 [ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ]
Allocated zp[2]:48 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
Allocated zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ]
Allocated zp[2]:51 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
Allocated zp[1]:53 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Allocated zp[2]:54 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
Allocated zp[1]:56 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Allocated zp[2]:57 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
Allocated zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ]
Allocated zp[2]:60 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
Allocated zp[1]:62 [ renderBob::xpos#0 ]
Allocated zp[1]:63 [ renderBob::ypos#0 ]
Allocated zp[1]:64 [ keyboard_key_pressed::return#2 ]
Allocated zp[1]:65 [ main::$15 ]
Allocated zp[1]:66 [ keyboard_key_pressed::return#3 ]
Allocated zp[1]:67 [ main::$17 ]
Allocated zp[1]:68 [ keyboard_matrix_read::return#2 ]
Allocated zp[1]:69 [ keyboard_key_pressed::$2 ]
Allocated zp[1]:70 [ keyboard_key_pressed::return#0 ]
Allocated zp[1]:71 [ keyboard_matrix_read::return#0 ]
Allocated zp[1]:72 [ renderBob::x_char_offset#0 ]
Allocated zp[1]:73 [ renderBob::y_char_offset#0 ]
Allocated zp[1]:74 [ renderBob::$8 ]
Allocated zp[2]:75 [ renderBob::y_offset#0 ]
Allocated zp[2]:77 [ renderBob::$2 ]
Allocated zp[2]:79 [ renderBob::screen#0 ]
Allocated zp[1]:81 [ renderBob::$4 ]
Allocated zp[1]:82 [ renderBob::$5 ]
Allocated zp[1]:83 [ renderBob::$6 ]
Allocated zp[1]:84 [ renderBob::bob_table_idx#0 ]
Allocated zp[1]:85 [ renderBobCleanup::$1 ]
Allocated zp[2]:86 [ renderBobCleanup::screen#0 ]
Allocated zp[2]:88 [ renderBobInit::$0 ]
Allocated zp[2]:90 [ renderBobInit::$6 ]
Allocated zp[2]:92 [ renderBobInit::$7 ]
Allocated zp[2]:94 [ renderBobInit::$1 ]
Allocated zp[1]:96 [ renderBobInit::$4 ]
Allocated zp[1]:97 [ renderBobInit::$5 ]
Allocated zp[1]:98 [ charsetFindOrAddGlyph::return#1 ]
Allocated zp[1]:99 [ prepareBobs::$6 ]
Allocated zp[1]:100 [ protoBobShiftRight::$1 ]
Allocated zp[1]:101 [ protoBobShiftRight::$5 ]
Allocated zp[1]:102 [ protoBobShiftRight::$6 ]
Allocated zp[1]:103 [ mulf_init::$1 ]
Allocated zp[1]:104 [ mulf_init::$4 ]
Allocated zp[1]:105 [ mulf_init::$5 ]

INITIAL ASM
Target platform is c64basic / MOS6502X
  // File Comments
// Pre-calculated bobs inside a charset (pre-moved to all x/y-combinations)
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label D018 = $d018
  // CIA#1 Port A: keyboard matrix columns and joystick #2
  .label CIA1_PORT_A = $dc00
  // CIA#1 Port B: keyboard matrix rows and joystick #1.
  .label CIA1_PORT_B = $dc01
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  // CIA #2 Port A data direction register.
  .label CIA2_PORT_A_DDR = $dd02
  .const KEY_SPACE = $3c
  // The BASIC screen
  .label BASIC_SCREEN = $400
  // The BASIC charset
  .label BASIC_CHARSET = $1000
  // The BOB screen
  .label BOB_SCREEN = $2800
  // The BOB charset
  .label BOB_CHARSET = $2000
  // The number of different X-shifts
  .const BOB_SHIFTS_X = 4
  // The number of different Y-shifts
  .const BOB_SHIFTS_Y = 8
  // The size of a sub-table of BOB_TABLES
  .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y
  // The number of BOBs to render
  .const NUM_BOBS = $19
  .const SIZEOF_POINTER = 2
  // BOB charset ID of the next glyph to be added
  .label bob_charset_next_id = $22
  // Current index within the progress cursor (0-7)
  .label progress_idx = $1a
  // Current position of the progress cursor
  .label progress_cursor = $18
  // Pointer to the next clean-up to add
  // Prepare for next clean-up
  .label renderBobCleanupNext = $f
  // @begin
__bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
__b1_from___bbegin:
  jmp __b1
  // @1
__b1:
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
main_from___b1:
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
__bend_from___b1:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .const origY = $a00
    // Row and column offset vectors
    .const rowOffsetX = $c00
    .const colOffsetX = $100
    .const colOffsetY = $1800
    .const vicSelectGfxBank1_toDd001_return = 3
    .const vicSelectGfxBank2_toDd001_return = 3
    .const toD0181_return = (>(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f
    .const toD0182_return = (>(BASIC_SCREEN&$3fff)*4)|(>BASIC_CHARSET)/4&$f
    .label __15 = $41
    .label __17 = $43
    .label x = 6
    .label y = 8
    .label x_1 = $b
    .label y_1 = $d
    .label row = $11
    .label rowX = 6
    .label rowY = 8
    .label col = $a
    // Origin point
    .label origX = 2
    .label rowOffsetY = 4
    // [5] call mulf_init 
    // [209] phi from main to mulf_init [phi:main->mulf_init]
  mulf_init_from_main:
    jsr mulf_init
    // [6] phi from main to main::@11 [phi:main->main::@11]
  __b11_from_main:
    jmp __b11
    // main::@11
  __b11:
    // [7] call prepareBobs 
    // [125] phi from main::@11 to prepareBobs [phi:main::@11->prepareBobs]
  prepareBobs_from___b11:
    jsr prepareBobs
    // [8] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
  __b12_from___b11:
    jmp __b12
    // main::@12
  __b12:
    // [9] call renderBobInit 
    // [109] phi from main::@12 to renderBobInit [phi:main::@12->renderBobInit]
  renderBobInit_from___b12:
    jsr renderBobInit
    jmp vicSelectGfxBank1
    // main::vicSelectGfxBank1
  vicSelectGfxBank1:
    // [10] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2_PORT_A_DDR
    // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001]
  vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
    jmp vicSelectGfxBank1_toDd001
    // main::vicSelectGfxBank1_toDd001
  vicSelectGfxBank1_toDd001:
    jmp vicSelectGfxBank1___b1
    // main::vicSelectGfxBank1_@1
  vicSelectGfxBank1___b1:
    // [12] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank1_toDd001_return
    sta CIA2_PORT_A
    // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181]
  toD0181_from_vicSelectGfxBank1___b1:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp __b9
    // main::@9
  __b9:
    // [14] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [15] call memset 
    // [103] phi from main::@9 to memset [phi:main::@9->memset]
  memset_from___b9:
    jsr memset
    // [16] phi from main::@9 to main::@1 [phi:main::@9->main::@1]
  __b1_from___b9:
    // [16] phi (signed word) main::rowOffsetY#10 = (signed word) $100 [phi:main::@9->main::@1#0] -- vwsz1=vwsc1 
    lda #<$100
    sta.z rowOffsetY
    lda #>$100
    sta.z rowOffsetY+1
    // [16] phi (signed word) main::origX#8 = (signed word) $a00 [phi:main::@9->main::@1#1] -- vwsz1=vwsc1 
    lda #<$a00
    sta.z origX
    lda #>$a00
    sta.z origX+1
    jmp __b1
  // Render Grid of BOBs
    // main::@1
  __b1:
    jmp __b2
    // main::@2
  __b2:
    // [17] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 
    lda RASTER
    cmp #$f8
    bcc __b2
    jmp __b3
    // main::@3
  __b3:
    // [18] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 
    lda #$f
    sta BORDERCOL
    // [19] call renderBobCleanup 
    // [87] phi from main::@3 to renderBobCleanup [phi:main::@3->renderBobCleanup]
  renderBobCleanup_from___b3:
    jsr renderBobCleanup
    jmp __b13
    // main::@13
  __b13:
    // [20] (signed word) main::x#4 ← (signed word) main::origX#8 -- vwsz1=vwsz2 
    lda.z origX
    sta.z x
    lda.z origX+1
    sta.z x+1
    // [21] phi from main::@13 to main::@4 [phi:main::@13->main::@4]
  __b4_from___b13:
    // [21] phi (byte) main::col#5 = (byte) 0 [phi:main::@13->main::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z col
    // [21] phi (byte**) renderBobCleanupNext#21 = (const byte**) RENDERBOB_CLEANUP [phi:main::@13->main::@4#1] -- pptz1=pptc1 
    lda #<RENDERBOB_CLEANUP
    sta.z renderBobCleanupNext
    lda #>RENDERBOB_CLEANUP
    sta.z renderBobCleanupNext+1
    // [21] phi (signed word) main::y#0 = (const signed word) main::origY [phi:main::@13->main::@4#2] -- vwsz1=vwsc1 
    lda #<origY
    sta.z y
    lda #>origY
    sta.z y+1
    // [21] phi (signed word) main::x#0 = (signed word) main::x#4 [phi:main::@13->main::@4#3] -- register_copy 
    jmp __b4
    // [21] phi from main::@6 to main::@4 [phi:main::@6->main::@4]
  __b4_from___b6:
    // [21] phi (byte) main::col#5 = (byte) main::col#1 [phi:main::@6->main::@4#0] -- register_copy 
    // [21] phi (byte**) renderBobCleanupNext#21 = (byte**) renderBobCleanupNext#13 [phi:main::@6->main::@4#1] -- register_copy 
    // [21] phi (signed word) main::y#0 = (signed word) main::rowY#1 [phi:main::@6->main::@4#2] -- register_copy 
    // [21] phi (signed word) main::x#0 = (signed word) main::rowX#1 [phi:main::@6->main::@4#3] -- register_copy 
    jmp __b4
    // main::@4
  __b4:
    // [22] (signed word) main::x#7 ← (signed word) main::x#0 -- vwsz1=vwsz2 
    lda.z x
    sta.z x_1
    lda.z x+1
    sta.z x_1+1
    // [23] (signed word) main::y#6 ← (signed word) main::y#0 -- vwsz1=vwsz2 
    lda.z y
    sta.z y_1
    lda.z y+1
    sta.z y_1+1
    // [24] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
  __b5_from___b4:
    // [24] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z row
    // [24] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#21 [phi:main::@4->main::@5#1] -- register_copy 
    // [24] phi (signed word) main::y#2 = (signed word) main::y#6 [phi:main::@4->main::@5#2] -- register_copy 
    // [24] phi (signed word) main::x#2 = (signed word) main::x#7 [phi:main::@4->main::@5#3] -- register_copy 
    jmp __b5
    // [24] phi from main::@14 to main::@5 [phi:main::@14->main::@5]
  __b5_from___b14:
    // [24] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@14->main::@5#0] -- register_copy 
    // [24] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#13 [phi:main::@14->main::@5#1] -- register_copy 
    // [24] phi (signed word) main::y#2 = (signed word) main::y#1 [phi:main::@14->main::@5#2] -- register_copy 
    // [24] phi (signed word) main::x#2 = (signed word) main::x#1 [phi:main::@14->main::@5#3] -- register_copy 
    jmp __b5
    // main::@5
  __b5:
    // [25] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 
    //kickasm {{ .break }}
    lda #1
    sta BORDERCOL
    // [26] (byte) renderBob::xpos#0 ← > (signed word) main::x#2 -- vbuz1=_hi_vwsz2 
    lda.z x_1+1
    sta.z renderBob.xpos
    // [27] (byte) renderBob::ypos#0 ← > (signed word) main::y#2 -- vbuz1=_hi_vwsz2 
    lda.z y_1+1
    sta.z renderBob.ypos
    // [28] call renderBob 
    jsr renderBob
    jmp __b14
    // main::@14
  __b14:
    // [29] (signed word) main::x#1 ← (signed word) main::x#2 + (const signed word) main::rowOffsetX -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z x_1
    adc #<rowOffsetX
    sta.z x_1
    lda.z x_1+1
    adc #>rowOffsetX
    sta.z x_1+1
    // [30] (signed word) main::y#1 ← (signed word) main::y#2 + (signed word) main::rowOffsetY#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z y_1
    clc
    adc.z rowOffsetY
    sta.z y_1
    lda.z y_1+1
    adc.z rowOffsetY+1
    sta.z y_1+1
    // [31] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 
    lda #2
    sta BORDERCOL
    // [32] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuz1=_inc_vbuz1 
    inc.z row
    // [33] if((byte) main::row#1!=(byte) 5) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 
    lda #5
    cmp.z row
    bne __b5_from___b14
    jmp __b6
    // main::@6
  __b6:
    // [34] (signed word) main::rowX#1 ← (signed word) main::x#0 + (const signed word) main::colOffsetX -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowX
    adc #<colOffsetX
    sta.z rowX
    lda.z rowX+1
    adc #>colOffsetX
    sta.z rowX+1
    // [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const signed word) main::colOffsetY -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowY
    adc #<colOffsetY
    sta.z rowY
    lda.z rowY+1
    adc #>colOffsetY
    sta.z rowY+1
    // [36] (byte) main::col#1 ← ++ (byte) main::col#5 -- vbuz1=_inc_vbuz1 
    inc.z col
    // [37] if((byte) main::col#1!=(byte) 5) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 
    lda #5
    cmp.z col
    bne __b4_from___b6
    jmp __b7
    // main::@7
  __b7:
    // [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z origX
    adc #<$100
    sta.z origX
    lda.z origX+1
    adc #>$100
    sta.z origX+1
    // [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowOffsetY
    adc #<$80
    sta.z rowOffsetY
    lda.z rowOffsetY+1
    adc #>$80
    sta.z rowOffsetY+1
    // [40] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta BORDERCOL
    // [41] call keyboard_key_pressed 
    // [56] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
  keyboard_key_pressed_from___b7:
    jsr keyboard_key_pressed
    // [42] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 
    lda.z keyboard_key_pressed.return
    sta.z keyboard_key_pressed.return_1
    jmp __b15
    // main::@15
  __b15:
    // [43] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 -- vbuz1=vbuz2 
    lda.z keyboard_key_pressed.return_1
    sta.z __15
    // [44] if((byte) 0!=(byte~) main::$15) goto main::@8 -- vbuc1_neq_vbuz1_then_la1 
    lda #0
    cmp.z __15
    bne __b8_from___b15
    // [16] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
  __b1_from___b15:
    // [16] phi (signed word) main::rowOffsetY#10 = (signed word) main::rowOffsetY#1 [phi:main::@15->main::@1#0] -- register_copy 
    // [16] phi (signed word) main::origX#8 = (signed word) main::origX#1 [phi:main::@15->main::@1#1] -- register_copy 
    jmp __b1
  // Wait for space release
    // [45] phi from main::@15 main::@16 to main::@8 [phi:main::@15/main::@16->main::@8]
  __b8_from___b15:
  __b8_from___b16:
    jmp __b8
    // main::@8
  __b8:
    // [46] call keyboard_key_pressed 
    // [56] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
  keyboard_key_pressed_from___b8:
    jsr keyboard_key_pressed
    // [47] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0 -- vbuz1=vbuz2 
    lda.z keyboard_key_pressed.return
    sta.z keyboard_key_pressed.return_2
    jmp __b16
    // main::@16
  __b16:
    // [48] (byte~) main::$17 ← (byte) keyboard_key_pressed::return#3 -- vbuz1=vbuz2 
    lda.z keyboard_key_pressed.return_2
    sta.z __17
    // [49] if((byte) 0!=(byte~) main::$17) goto main::@8 -- vbuc1_neq_vbuz1_then_la1 
    lda #0
    cmp.z __17
    bne __b8_from___b16
    jmp vicSelectGfxBank2
    // main::vicSelectGfxBank2
  vicSelectGfxBank2:
    // [50] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2_PORT_A_DDR
    // [51] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001]
  vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2:
    jmp vicSelectGfxBank2_toDd001
    // main::vicSelectGfxBank2_toDd001
  vicSelectGfxBank2_toDd001:
    jmp vicSelectGfxBank2___b1
    // main::vicSelectGfxBank2_@1
  vicSelectGfxBank2___b1:
    // [52] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank2_toDd001_return
    sta CIA2_PORT_A
    // [53] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182]
  toD0182_from_vicSelectGfxBank2___b1:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp __b10
    // main::@10
  __b10:
    // [54] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    jmp __breturn
    // main::@return
  __breturn:
    // [55] return 
    rts
}
  // keyboard_key_pressed
// Determines whether a specific key is currently pressed by accessing the matrix directly
// The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7)
// All keys exist as as KEY_XXX constants.
// Returns zero if the key is not pressed and a non-zero value if the key is currently pressed
keyboard_key_pressed: {
    .const colidx = KEY_SPACE&7
    .label rowidx = KEY_SPACE>>3
    .label __2 = $45
    .label return = $46
    .label return_1 = $40
    .label return_2 = $42
    // [57] call keyboard_matrix_read 
    jsr keyboard_matrix_read
    // [58] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 
    lda.z keyboard_matrix_read.return
    sta.z keyboard_matrix_read.return_1
    jmp __b1
    // keyboard_key_pressed::@1
  __b1:
    // [59] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 
    lda.z keyboard_matrix_read.return_1
    sta.z __2
    // [60] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) -- vbuz1=vbuz2_band__deref_pbuc1 
    lda keyboard_matrix_col_bitmask+colidx
    and.z __2
    sta.z return
    jmp __breturn
    // keyboard_key_pressed::@return
  __breturn:
    // [61] return 
    rts
}
  // keyboard_matrix_read
// Read a single row of the keyboard matrix
// The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs.
// Returns the keys pressed on the row as bits according to the C64 key matrix.
// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write
// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
keyboard_matrix_read: {
    .label return = $47
    .label return_1 = $44
    // [62] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 
    lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx
    sta CIA1_PORT_A
    // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 
    lda CIA1_PORT_B
    eor #$ff
    sta.z return
    jmp __breturn
    // keyboard_matrix_read::@return
  __breturn:
    // [64] return 
    rts
}
  // renderBob
// Render a single BOB at a given x/y-position
// X-position is 0-151. Each x-position is 2 pixels wide.
// Y-position is 0-183. Each y-position is 1 pixel high.
// renderBob(byte zp($3e) xpos, byte zp($3f) ypos)
renderBob: {
    .label __2 = $4d
    .label __4 = $51
    .label __5 = $52
    .label __6 = $53
    .label __8 = $4a
    .label xpos = $3e
    .label ypos = $3f
    .label x_char_offset = $48
    .label y_char_offset = $49
    .label y_offset = $4b
    .label screen = $4f
    .label bob_table_idx = $54
    // [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 
    lda.z xpos
    lsr
    lsr
    sta.z x_char_offset
    // [66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    sta.z y_char_offset
    // [67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y_char_offset
    asl
    sta.z __8
    // [68] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuz2 
    ldy.z __8
    lda MUL40,y
    sta.z y_offset
    lda MUL40+1,y
    sta.z y_offset+1
    // [69] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z y_offset
    clc
    adc #<BOB_SCREEN
    sta.z __2
    lda.z y_offset+1
    adc #>BOB_SCREEN
    sta.z __2+1
    // [70] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz2_plus_vbuz3 
    lda.z x_char_offset
    clc
    adc.z __2
    sta.z screen
    lda #0
    adc.z __2+1
    sta.z screen+1
    // [71] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 
    lda #7
    and.z ypos
    sta.z __4
    // [72] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuz2_rol_2 
    lda.z __4
    asl
    asl
    sta.z __5
    // [73] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuz1=vbuz2_band_vbuc1 
    lda #3
    and.z xpos
    sta.z __6
    // [74] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuz1=vbuz2_plus_vbuz3 
    lda.z __5
    clc
    adc.z __6
    sta.z bob_table_idx
    // [75] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 -- _deref_pptz1=pbuz2 
    ldy #0
    lda.z screen
    sta (renderBobCleanupNext),y
    iny
    lda.z screen+1
    sta (renderBobCleanupNext),y
    // [76] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER -- pptz1=pptz1_plus_vbuc1 
    lda #SIZEOF_POINTER
    clc
    adc.z renderBobCleanupNext
    sta.z renderBobCleanupNext
    bcc !+
    inc.z renderBobCleanupNext+1
  !:
    // [77] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES,y
    ldy #0
    sta (screen),y
    // [78] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y
    ldy #$28
    sta (screen),y
    // [79] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y
    ldy #$50
    sta (screen),y
    // [80] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y
    ldy #1
    sta (screen),y
    // [81] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y
    ldy #$29
    sta (screen),y
    // [82] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y
    ldy #$51
    sta (screen),y
    // [83] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y
    ldy #2
    sta (screen),y
    // [84] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y
    ldy #$2a
    sta (screen),y
    // [85] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y
    ldy #$52
    sta (screen),y
    jmp __breturn
    // renderBob::@return
  __breturn:
    // [86] return 
    rts
}
  // renderBobCleanup
// Clean Up the rendered BOB's
renderBobCleanup: {
    .label __1 = $55
    .label screen = $56
    .label i = $12
    // [88] phi from renderBobCleanup to renderBobCleanup::@1 [phi:renderBobCleanup->renderBobCleanup::@1]
  __b1_from_renderBobCleanup:
    // [88] phi (byte) renderBobCleanup::i#2 = (byte) 0 [phi:renderBobCleanup->renderBobCleanup::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // [88] phi from renderBobCleanup::@1 to renderBobCleanup::@1 [phi:renderBobCleanup::@1->renderBobCleanup::@1]
  __b1_from___b1:
    // [88] phi (byte) renderBobCleanup::i#2 = (byte) renderBobCleanup::i#1 [phi:renderBobCleanup::@1->renderBobCleanup::@1#0] -- register_copy 
    jmp __b1
    // renderBobCleanup::@1
  __b1:
    // [89] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __1
    // [90] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) -- pbuz1=pptc1_derefidx_vbuz2 
    ldy.z __1
    lda RENDERBOB_CLEANUP,y
    sta.z screen
    lda RENDERBOB_CLEANUP+1,y
    sta.z screen+1
    // [91] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (screen),y
    // [92] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$28
    sta (screen),y
    // [93] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$50
    sta (screen),y
    // [94] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #1
    sta (screen),y
    // [95] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$29
    sta (screen),y
    // [96] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$51
    sta (screen),y
    // [97] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #2
    sta (screen),y
    // [98] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$2a
    sta (screen),y
    // [99] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$52
    sta (screen),y
    // [100] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [101] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BOBS-1+1
    cmp.z i
    bne __b1_from___b1
    jmp __breturn
    // renderBobCleanup::@return
  __breturn:
    // [102] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .label str = BOB_SCREEN
    .const c = 0
    .const num = $3e8
    .label end = str+num
    .label dst = $13
    // [104] phi from memset to memset::@1 [phi:memset->memset::@1]
  __b1_from_memset:
    // [104] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta.z dst
    lda #>str
    sta.z dst+1
    jmp __b1
    // memset::@1
  __b1:
    // [105] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z dst+1
    cmp #>end
    bne __b2
    lda.z dst
    cmp #<end
    bne __b2
    jmp __breturn
    // memset::@return
  __breturn:
    // [106] return 
    rts
    // memset::@2
  __b2:
    // [107] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [108] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    // [104] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
  __b1_from___b2:
    // [104] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy 
    jmp __b1
}
  // renderBobInit
// Initialize the tables used by renderBob()
renderBobInit: {
    .label __0 = $58
    .label __1 = $5e
    .label __4 = $60
    .label __5 = $61
    .label y = $15
    .label i = $16
    .label __6 = $5a
    .label __7 = $5c
    // [110] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1]
  __b1_from_renderBobInit:
    // [110] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    jmp __b1
    // [110] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1]
  __b1_from___b1:
    // [110] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy 
    jmp __b1
    // renderBobInit::@1
  __b1:
    // [111] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuz2 
    lda.z y
    sta.z __0
    lda #0
    sta.z __0+1
    // [112] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z __0
    asl
    sta.z __6
    lda.z __0+1
    rol
    sta.z __6+1
    asl.z __6
    rol.z __6+1
    // [113] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz3 
    lda.z __6
    clc
    adc.z __0
    sta.z __7
    lda.z __6+1
    adc.z __0+1
    sta.z __7+1
    // [114] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z __7
    asl
    sta.z __1
    lda.z __7+1
    rol
    sta.z __1+1
    asl.z __1
    rol.z __1+1
    asl.z __1
    rol.z __1+1
    // [115] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y
    asl
    sta.z __4
    // [116] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z __4
    lda.z __1
    sta MUL40,y
    lda.z __1+1
    sta MUL40+1,y
    // [117] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [118] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$20
    cmp.z y
    bne __b1_from___b1
    // [119] phi from renderBobInit::@1 to renderBobInit::@2 [phi:renderBobInit::@1->renderBobInit::@2]
  __b2_from___b1:
    // [119] phi (byte) renderBobInit::i#2 = (byte) 0 [phi:renderBobInit::@1->renderBobInit::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b2
    // [119] phi from renderBobInit::@2 to renderBobInit::@2 [phi:renderBobInit::@2->renderBobInit::@2]
  __b2_from___b2:
    // [119] phi (byte) renderBobInit::i#2 = (byte) renderBobInit::i#1 [phi:renderBobInit::@2->renderBobInit::@2#0] -- register_copy 
    jmp __b2
    // renderBobInit::@2
  __b2:
    // [120] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __5
    // [121] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN -- pptc1_derefidx_vbuz1=pbuc2 
    ldy.z __5
    lda #<BOB_SCREEN
    sta RENDERBOB_CLEANUP,y
    lda #>BOB_SCREEN
    sta RENDERBOB_CLEANUP+1,y
    // [122] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [123] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BOBS-1+1
    cmp.z i
    bne __b2_from___b2
    jmp __breturn
    // renderBobInit::@return
  __breturn:
    // [124] return 
    rts
}
  // prepareBobs
// Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES
// Modifies PROTO_BOB by shifting it around
prepareBobs: {
    .label __6 = $63
    .label bob_table = $20
    .label shift_y = $17
    // Populate charset and tables
    .label bob_glyph = $1e
    .label cell = $1d
    .label bob_table_idx = $1b
    .label shift_x = $1c
    // [126] call progress_init 
    // [207] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init]
  progress_init_from_prepareBobs:
    jsr progress_init
    // [127] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8]
  __b8_from_prepareBobs:
    jmp __b8
    // prepareBobs::@8
  __b8:
    // [128] call charsetFindOrAddGlyph 
    // [161] phi from prepareBobs::@8 to charsetFindOrAddGlyph [phi:prepareBobs::@8->charsetFindOrAddGlyph]
  charsetFindOrAddGlyph_from___b8:
    // [161] phi (byte*) charsetFindOrAddGlyph::glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->charsetFindOrAddGlyph#0] -- pbuz1=pbuc1 
    lda #<PROTO_BOB+$30
    sta.z charsetFindOrAddGlyph.glyph
    lda #>PROTO_BOB+$30
    sta.z charsetFindOrAddGlyph.glyph+1
    // [161] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->charsetFindOrAddGlyph#1] -- vbuz1=vbuc1 
    lda #0
    sta.z bob_charset_next_id
    jsr charsetFindOrAddGlyph
    // [129] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1]
  __b1_from___b8:
    // [129] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z bob_table_idx
    // [129] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy 
    // [129] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z progress_idx
    // [129] phi (byte*) progress_cursor#15 = (const byte*) BASIC_SCREEN [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 
    lda #<BASIC_SCREEN
    sta.z progress_cursor
    lda #>BASIC_SCREEN
    sta.z progress_cursor+1
    // [129] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 
    lda #0
    sta.z shift_y
    jmp __b1
    // prepareBobs::@1
  __b1:
    // [130] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z shift_y
    cmp #BOB_SHIFTS_Y
    bcc __b2_from___b1
    jmp __breturn
    // prepareBobs::@return
  __breturn:
    // [131] return 
    rts
    // [132] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2]
  __b2_from___b1:
    // [132] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy 
    // [132] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy 
    // [132] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy 
    // [132] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy 
    // [132] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 
    lda #0
    sta.z shift_x
    jmp __b2
    // prepareBobs::@2
  __b2:
    // [133] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z shift_x
    cmp #BOB_SHIFTS_X
    bcc __b3
    // [134] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4]
  __b4_from___b2:
    jmp __b4
    // prepareBobs::@4
  __b4:
    // [135] call protoBobShiftDown 
    // [196] phi from prepareBobs::@4 to protoBobShiftDown [phi:prepareBobs::@4->protoBobShiftDown]
  protoBobShiftDown_from___b4:
    jsr protoBobShiftDown
    jmp __b9
    // prepareBobs::@9
  __b9:
    // [136] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 
    inc.z shift_y
    // [129] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1]
  __b1_from___b9:
    // [129] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy 
    // [129] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy 
    // [129] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy 
    // [129] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy 
    // [129] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy 
    jmp __b1
    // prepareBobs::@3
  __b3:
    // [137] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z bob_table_idx
    clc
    adc #<BOB_TABLES
    sta.z bob_table
    lda #>BOB_TABLES
    adc #0
    sta.z bob_table+1
    // [138] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5]
  __b5_from___b3:
    // [138] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy 
    // [138] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy 
    // [138] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 
    lda #<PROTO_BOB
    sta.z bob_glyph
    lda #>PROTO_BOB
    sta.z bob_glyph+1
    // [138] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 
    lda #0
    sta.z cell
    jmp __b5
    // prepareBobs::@5
  __b5:
    // [139] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z cell
    cmp #9
    bcc __b6
    jmp __b7
    // prepareBobs::@7
  __b7:
    // [140] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 
    inc.z bob_table_idx
    // [141] call protoBobShiftRight 
    // [179] phi from prepareBobs::@7 to protoBobShiftRight [phi:prepareBobs::@7->protoBobShiftRight]
  protoBobShiftRight_from___b7:
    jsr protoBobShiftRight
    // [142] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12]
  __b12_from___b7:
    jmp __b12
    // prepareBobs::@12
  __b12:
    // [143] call protoBobShiftRight 
    // [179] phi from prepareBobs::@12 to protoBobShiftRight [phi:prepareBobs::@12->protoBobShiftRight]
  protoBobShiftRight_from___b12:
    jsr protoBobShiftRight
    jmp __b13
    // prepareBobs::@13
  __b13:
    // [144] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 
    inc.z shift_x
    // [132] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2]
  __b2_from___b13:
    // [132] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy 
    // [132] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy 
    // [132] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy 
    // [132] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy 
    // [132] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy 
    jmp __b2
    // prepareBobs::@6
  __b6:
    // [145] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2 -- pbuz1=pbuz2 
    lda.z bob_glyph
    sta.z charsetFindOrAddGlyph.glyph
    lda.z bob_glyph+1
    sta.z charsetFindOrAddGlyph.glyph+1
    // [146] call charsetFindOrAddGlyph 
    // [161] phi from prepareBobs::@6 to charsetFindOrAddGlyph [phi:prepareBobs::@6->charsetFindOrAddGlyph]
  charsetFindOrAddGlyph_from___b6:
    // [161] phi (byte*) charsetFindOrAddGlyph::glyph#10 = (byte*) charsetFindOrAddGlyph::glyph#1 [phi:prepareBobs::@6->charsetFindOrAddGlyph#0] -- register_copy 
    // [161] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->charsetFindOrAddGlyph#1] -- register_copy 
    jsr charsetFindOrAddGlyph
    // [147] (byte) charsetFindOrAddGlyph::return#1 ← (byte) charsetFindOrAddGlyph::glyph_id#11 -- vbuz1=vbuz2 
    lda.z charsetFindOrAddGlyph.glyph_id
    sta.z charsetFindOrAddGlyph.return
    jmp __b10
    // prepareBobs::@10
  __b10:
    // [148] (byte~) prepareBobs::$6 ← (byte) charsetFindOrAddGlyph::return#1 -- vbuz1=vbuz2 
    lda.z charsetFindOrAddGlyph.return
    sta.z __6
    // [149] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuz2 
    // Look for an existing char in BOB_CHARSET 
    lda.z __6
    ldy #0
    sta (bob_table),y
    // [150] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    // Move to the next glyph
    lda #8
    clc
    adc.z bob_glyph
    sta.z bob_glyph
    bcc !+
    inc.z bob_glyph+1
  !:
    // [151] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 
    // Move to the next sub-table
    lda #BOB_SHIFTS_X*BOB_SHIFTS_Y
    clc
    adc.z bob_table
    sta.z bob_table
    bcc !+
    inc.z bob_table+1
  !:
    // [152] call progress_inc 
    jsr progress_inc
    jmp __b11
    // prepareBobs::@11
  __b11:
    // [153] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 
    inc.z cell
    // [138] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5]
  __b5_from___b11:
    // [138] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy 
    // [138] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy 
    // [138] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy 
    // [138] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy 
    jmp __b5
}
  // progress_inc
// Increase PETSCII progress one bit
// Done by increasing the character until the idx is 8 and then moving to the next char
progress_inc: {
    // [154] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 
    inc.z progress_idx
    // [155] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #8
    cmp.z progress_idx
    bne __b1_from_progress_inc
    jmp __b2
    // progress_inc::@2
  __b2:
    // [156] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 
    lda progress_chars+8
    ldy #0
    sta (progress_cursor),y
    // [157] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 
    inc.z progress_cursor
    bne !+
    inc.z progress_cursor+1
  !:
    // [158] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1]
  __b1_from___b2:
    // [158] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy 
    // [158] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z progress_idx
    jmp __b1
    // [158] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1]
  __b1_from_progress_inc:
    // [158] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy 
    // [158] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy 
    jmp __b1
    // progress_inc::@1
  __b1:
    // [159] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z progress_idx
    lda progress_chars,y
    ldy #0
    sta (progress_cursor),y
    jmp __breturn
    // progress_inc::@return
  __breturn:
    // [160] return 
    rts
    // Progress characters
    progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0
}
  // charsetFindOrAddGlyph
// Looks through a charset to find a glyph if present. If not present it is added.
// Returns the glyph ID
// charsetFindOrAddGlyph(byte* zp($23) glyph)
charsetFindOrAddGlyph: {
    .label glyph = $23
    .label return = $62
    .label i = $29
    .label glyph_id = $25
    .label glyph_cursor = $26
    .label i1 = $28
    .label found = $2a
    // [162] phi from charsetFindOrAddGlyph to charsetFindOrAddGlyph::@1 [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1]
  __b1_from_charsetFindOrAddGlyph:
    // [162] phi (byte*) charsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 
    lda #<BOB_CHARSET
    sta.z glyph_cursor
    lda #>BOB_CHARSET
    sta.z glyph_cursor+1
    // [162] phi (byte) charsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z glyph_id
    jmp __b1
    // charsetFindOrAddGlyph::@1
  __b1:
    // [163] if((byte) charsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto charsetFindOrAddGlyph::@2 -- vbuz1_neq_vbuz2_then_la1 
    lda.z glyph_id
    cmp.z bob_charset_next_id
    bne __b2_from___b1
    // [164] phi from charsetFindOrAddGlyph::@1 to charsetFindOrAddGlyph::@7 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@7]
  __b7_from___b1:
    // [164] phi (byte) charsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@7#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i1
    jmp __b7
  // Not found - add it
    // charsetFindOrAddGlyph::@7
  __b7:
    // [165] if((byte) charsetFindOrAddGlyph::i1#2<(byte) 8) goto charsetFindOrAddGlyph::@8 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i1
    cmp #8
    bcc __b8
    jmp __b9
    // charsetFindOrAddGlyph::@9
  __b9:
    // [166] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 
    inc.z bob_charset_next_id
    // [167] phi from charsetFindOrAddGlyph::@5 charsetFindOrAddGlyph::@9 to charsetFindOrAddGlyph::@return [phi:charsetFindOrAddGlyph::@5/charsetFindOrAddGlyph::@9->charsetFindOrAddGlyph::@return]
  __breturn_from___b5:
  __breturn_from___b9:
    // [167] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:charsetFindOrAddGlyph::@5/charsetFindOrAddGlyph::@9->charsetFindOrAddGlyph::@return#0] -- register_copy 
    jmp __breturn
    // charsetFindOrAddGlyph::@return
  __breturn:
    // [168] return 
    rts
    // charsetFindOrAddGlyph::@8
  __b8:
    // [169] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 
    ldy.z i1
    lda (glyph),y
    sta (glyph_cursor),y
    // [170] (byte) charsetFindOrAddGlyph::i1#1 ← ++ (byte) charsetFindOrAddGlyph::i1#2 -- vbuz1=_inc_vbuz1 
    inc.z i1
    // [164] phi from charsetFindOrAddGlyph::@8 to charsetFindOrAddGlyph::@7 [phi:charsetFindOrAddGlyph::@8->charsetFindOrAddGlyph::@7]
  __b7_from___b8:
    // [164] phi (byte) charsetFindOrAddGlyph::i1#2 = (byte) charsetFindOrAddGlyph::i1#1 [phi:charsetFindOrAddGlyph::@8->charsetFindOrAddGlyph::@7#0] -- register_copy 
    jmp __b7
    // [171] phi from charsetFindOrAddGlyph::@1 to charsetFindOrAddGlyph::@2 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@2]
  __b2_from___b1:
    // [171] phi (byte) charsetFindOrAddGlyph::i#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b2
    // charsetFindOrAddGlyph::@2
  __b2:
    // [172] if((byte) charsetFindOrAddGlyph::i#2<(byte) 8) goto charsetFindOrAddGlyph::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc __b3
    // [174] phi from charsetFindOrAddGlyph::@2 to charsetFindOrAddGlyph::@5 [phi:charsetFindOrAddGlyph::@2->charsetFindOrAddGlyph::@5]
  __b5_from___b2:
    // [174] phi (byte) charsetFindOrAddGlyph::found#2 = (byte) 1 [phi:charsetFindOrAddGlyph::@2->charsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 
    lda #1
    sta.z found
    jmp __b5
    // charsetFindOrAddGlyph::@3
  __b3:
    // [173] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 
    ldy.z i
    lda (glyph_cursor),y
    cmp (glyph),y
    beq __b4
    // [174] phi from charsetFindOrAddGlyph::@3 to charsetFindOrAddGlyph::@5 [phi:charsetFindOrAddGlyph::@3->charsetFindOrAddGlyph::@5]
  __b5_from___b3:
    // [174] phi (byte) charsetFindOrAddGlyph::found#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@3->charsetFindOrAddGlyph::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z found
    jmp __b5
    // charsetFindOrAddGlyph::@5
  __b5:
    // [175] if((byte) 0==(byte) charsetFindOrAddGlyph::found#2) goto charsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuz1_then_la1 
    lda #0
    cmp.z found
    beq __b6
    jmp __breturn_from___b5
    // charsetFindOrAddGlyph::@6
  __b6:
    // [176] (byte) charsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) charsetFindOrAddGlyph::glyph_id#11 -- vbuz1=_inc_vbuz1 
    inc.z glyph_id
    // [177] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    lda #8
    clc
    adc.z glyph_cursor
    sta.z glyph_cursor
    bcc !+
    inc.z glyph_cursor+1
  !:
    // [162] phi from charsetFindOrAddGlyph::@6 to charsetFindOrAddGlyph::@1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1]
  __b1_from___b6:
    // [162] phi (byte*) charsetFindOrAddGlyph::glyph_cursor#11 = (byte*) charsetFindOrAddGlyph::glyph_cursor#1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1#0] -- register_copy 
    // [162] phi (byte) charsetFindOrAddGlyph::glyph_id#11 = (byte) charsetFindOrAddGlyph::glyph_id#1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1#1] -- register_copy 
    jmp __b1
    // charsetFindOrAddGlyph::@4
  __b4:
    // [178] (byte) charsetFindOrAddGlyph::i#1 ← ++ (byte) charsetFindOrAddGlyph::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [171] phi from charsetFindOrAddGlyph::@4 to charsetFindOrAddGlyph::@2 [phi:charsetFindOrAddGlyph::@4->charsetFindOrAddGlyph::@2]
  __b2_from___b4:
    // [171] phi (byte) charsetFindOrAddGlyph::i#2 = (byte) charsetFindOrAddGlyph::i#1 [phi:charsetFindOrAddGlyph::@4->charsetFindOrAddGlyph::@2#0] -- register_copy 
    jmp __b2
}
  // protoBobShiftRight
// Shift PROTO_BOB right one X pixel
protoBobShiftRight: {
    .label __1 = $64
    .label __5 = $65
    .label __6 = $66
    .label carry = $2e
    .label j = $2c
    .label i = $2b
    .label carry_1 = $2d
    // [180] phi from protoBobShiftRight to protoBobShiftRight::@1 [phi:protoBobShiftRight->protoBobShiftRight::@1]
  __b1_from_protoBobShiftRight:
    // [180] phi (byte) protoBobShiftRight::carry#2 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z carry_1
    // [180] phi (byte) protoBobShiftRight::j#3 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z j
    // [180] phi (byte) protoBobShiftRight::i#2 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // protoBobShiftRight::@1
  __b1:
    // [181] if((byte) protoBobShiftRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto protoBobShiftRight::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #3*3*8
    bcc __b2
    jmp __breturn
    // protoBobShiftRight::@return
  __breturn:
    // [182] return 
    rts
    // protoBobShiftRight::@2
  __b2:
    // [183] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 
    lda #1
    ldy.z j
    and PROTO_BOB,y
    sta.z __1
    // [184] if((byte) 0!=(byte~) protoBobShiftRight::$1) goto protoBobShiftRight::@3 -- vbuc1_neq_vbuz1_then_la1 
    lda #0
    cmp.z __1
    bne __b3_from___b2
    // [186] phi from protoBobShiftRight::@2 to protoBobShiftRight::@4 [phi:protoBobShiftRight::@2->protoBobShiftRight::@4]
  __b4_from___b2:
    // [186] phi (byte) protoBobShiftRight::carry#1 = (byte) 0 [phi:protoBobShiftRight::@2->protoBobShiftRight::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z carry
    jmp __b4
    // [185] phi from protoBobShiftRight::@2 to protoBobShiftRight::@3 [phi:protoBobShiftRight::@2->protoBobShiftRight::@3]
  __b3_from___b2:
    jmp __b3
    // protoBobShiftRight::@3
  __b3:
    // [186] phi from protoBobShiftRight::@3 to protoBobShiftRight::@4 [phi:protoBobShiftRight::@3->protoBobShiftRight::@4]
  __b4_from___b3:
    // [186] phi (byte) protoBobShiftRight::carry#1 = (byte) $80 [phi:protoBobShiftRight::@3->protoBobShiftRight::@4#0] -- vbuz1=vbuc1 
    lda #$80
    sta.z carry
    jmp __b4
    // protoBobShiftRight::@4
  __b4:
    // [187] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_ror_1 
    ldy.z j
    lda PROTO_BOB,y
    lsr
    sta.z __5
    // [188] (byte~) protoBobShiftRight::$6 ← (byte) protoBobShiftRight::carry#2 | (byte~) protoBobShiftRight::$5 -- vbuz1=vbuz2_bor_vbuz3 
    lda.z carry_1
    ora.z __5
    sta.z __6
    // [189] *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) ← (byte~) protoBobShiftRight::$6 -- pbuc1_derefidx_vbuz1=vbuz2 
    // Shift value and add old carry
    lda.z __6
    ldy.z j
    sta PROTO_BOB,y
    // [190] if((byte) protoBobShiftRight::j#3>=(byte) $30) goto protoBobShiftRight::@5 -- vbuz1_ge_vbuc1_then_la1 
    // Increment j to iterate over the PROTO_BOB left-to-right, top-to-bottom (0, 24, 48, 1, 25, 49, ...)
    lda.z j
    cmp #$30
    bcs __b5
    jmp __b7
    // protoBobShiftRight::@7
  __b7:
    // [191] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z j
    axs #-[$18]
    stx.z j
    // [192] phi from protoBobShiftRight::@5 protoBobShiftRight::@7 to protoBobShiftRight::@6 [phi:protoBobShiftRight::@5/protoBobShiftRight::@7->protoBobShiftRight::@6]
  __b6_from___b5:
  __b6_from___b7:
    // [192] phi (byte) protoBobShiftRight::j#10 = (byte) protoBobShiftRight::j#1 [phi:protoBobShiftRight::@5/protoBobShiftRight::@7->protoBobShiftRight::@6#0] -- register_copy 
    jmp __b6
    // protoBobShiftRight::@6
  __b6:
    // [193] (byte) protoBobShiftRight::i#1 ← ++ (byte) protoBobShiftRight::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [194] (byte) protoBobShiftRight::carry#10 ← (byte) protoBobShiftRight::carry#1 -- vbuz1=vbuz2 
    lda.z carry
    sta.z carry_1
    // [180] phi from protoBobShiftRight::@6 to protoBobShiftRight::@1 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1]
  __b1_from___b6:
    // [180] phi (byte) protoBobShiftRight::carry#2 = (byte) protoBobShiftRight::carry#10 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#0] -- register_copy 
    // [180] phi (byte) protoBobShiftRight::j#3 = (byte) protoBobShiftRight::j#10 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#1] -- register_copy 
    // [180] phi (byte) protoBobShiftRight::i#2 = (byte) protoBobShiftRight::i#1 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#2] -- register_copy 
    jmp __b1
    // protoBobShiftRight::@5
  __b5:
    // [195] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f -- vbuz1=vbuz1_minus_vbuc1 
    lax.z j
    axs #$2f
    stx.z j
    jmp __b6_from___b5
}
  // protoBobShiftDown
// Shift PROTO_BOB down one Y pixel
// At the same time restore PROTO_BOB X by shifting 8 pixels left
protoBobShiftDown: {
    .label i = $2f
    // [197] phi from protoBobShiftDown to protoBobShiftDown::@1 [phi:protoBobShiftDown->protoBobShiftDown::@1]
  __b1_from_protoBobShiftDown:
    // [197] phi (byte) protoBobShiftDown::i#2 = (byte) $17 [phi:protoBobShiftDown->protoBobShiftDown::@1#0] -- vbuz1=vbuc1 
    lda #$17
    sta.z i
    jmp __b1
    // protoBobShiftDown::@1
  __b1:
    // [198] if((byte) protoBobShiftDown::i#2>(byte) 0) goto protoBobShiftDown::@2 -- vbuz1_gt_0_then_la1 
    lda.z i
    bne __b2
    jmp __b3
    // protoBobShiftDown::@3
  __b3:
    // [199] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta PROTO_BOB
    // [200] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta PROTO_BOB+$18
    // [201] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta PROTO_BOB+$30
    jmp __breturn
    // protoBobShiftDown::@return
  __breturn:
    // [202] return 
    rts
    // protoBobShiftDown::@2
  __b2:
    // [203] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 
    ldy.z i
    lda PROTO_BOB+$17,y
    sta PROTO_BOB,y
    // [204] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 
    ldy.z i
    lda PROTO_BOB+$2f,y
    sta PROTO_BOB+$18,y
    // [205] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z i
    sta PROTO_BOB+$30,y
    // [206] (byte) protoBobShiftDown::i#1 ← -- (byte) protoBobShiftDown::i#2 -- vbuz1=_dec_vbuz1 
    dec.z i
    // [197] phi from protoBobShiftDown::@2 to protoBobShiftDown::@1 [phi:protoBobShiftDown::@2->protoBobShiftDown::@1]
  __b1_from___b2:
    // [197] phi (byte) protoBobShiftDown::i#2 = (byte) protoBobShiftDown::i#1 [phi:protoBobShiftDown::@2->protoBobShiftDown::@1#0] -- register_copy 
    jmp __b1
}
  // progress_init
// Initialize the PETSCII progress bar
progress_init: {
    jmp __breturn
    // progress_init::@return
  __breturn:
    // [208] return 
    rts
}
  // mulf_init
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
mulf_init: {
    .label __1 = $67
    .label __4 = $68
    .label __5 = $69
    // x/2
    .label c = $32
    // Counter used for determining x%2==0
    .label sqr1_hi = $33
    // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4
    .label sqr = $3c
    .label sqr1_lo = $30
    // sqr = (x*x)/4
    .label x_2 = $35
    // Decrease or increase x_255 - initially we decrease
    .label sqr2_hi = $39
    // Fill mulf_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x)
    // g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256)
    .label x_255 = $38
    .label sqr2_lo = $36
    //Start with g(0)=f(255)
    .label dir = $3b
    // [210] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1]
  __b1_from_mulf_init:
    // [210] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z x_2
    // [210] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_hi+1
    sta.z sqr1_hi
    lda #>mulf_sqr1_hi+1
    sta.z sqr1_hi+1
    // [210] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    lda #>0
    sta.z sqr+1
    // [210] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 
    lda #0
    sta.z c
    // [210] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_lo+1
    sta.z sqr1_lo
    lda #>mulf_sqr1_lo+1
    sta.z sqr1_lo+1
    jmp __b1
    // mulf_init::@1
  __b1:
    // [211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z sqr1_lo+1
    cmp #>mulf_sqr1_lo+$200
    bne __b2
    lda.z sqr1_lo
    cmp #<mulf_sqr1_lo+$200
    bne __b2
    // [212] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5]
  __b5_from___b1:
    // [212] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z dir
    // [212] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_hi
    sta.z sqr2_hi
    lda #>mulf_sqr2_hi
    sta.z sqr2_hi+1
    // [212] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 
    lda #-1
    sta.z x_255
    // [212] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_lo
    sta.z sqr2_lo
    lda #>mulf_sqr2_lo
    sta.z sqr2_lo+1
    jmp __b5
    // mulf_init::@5
  __b5:
    // [213] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 
    lda.z sqr2_lo+1
    cmp #>mulf_sqr2_lo+$1ff
    bne __b6
    lda.z sqr2_lo
    cmp #<mulf_sqr2_lo+$1ff
    bne __b6
    jmp __b7
    // mulf_init::@7
  __b7:
    // [214] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 
    // Set the very last value g(511) = f(256)
    lda mulf_sqr1_lo+$100
    sta mulf_sqr2_lo+$1ff
    // [215] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 
    lda mulf_sqr1_hi+$100
    sta mulf_sqr2_hi+$1ff
    jmp __breturn
    // mulf_init::@return
  __breturn:
    // [216] return 
    rts
    // mulf_init::@6
  __b6:
    // [217] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z x_255
    lda mulf_sqr1_lo,y
    ldy #0
    sta (sqr2_lo),y
    // [218] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z x_255
    lda mulf_sqr1_hi,y
    ldy #0
    sta (sqr2_hi),y
    // [219] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr2_hi
    bne !+
    inc.z sqr2_hi+1
  !:
    // [220] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 
    lda.z x_255
    clc
    adc.z dir
    sta.z x_255
    // [221] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 
    lda.z x_255
    cmp #0
    bne __b9_from___b6
    // [223] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8]
  __b8_from___b6:
    // [223] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 
    lda #1
    sta.z dir
    jmp __b8
    // [222] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9]
  __b9_from___b6:
    jmp __b9
    // mulf_init::@9
  __b9:
    // [223] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8]
  __b8_from___b9:
    // [223] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy 
    jmp __b8
    // mulf_init::@8
  __b8:
    // [224] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr2_lo
    bne !+
    inc.z sqr2_lo+1
  !:
    // [212] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5]
  __b5_from___b8:
    // [212] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy 
    // [212] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy 
    // [212] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy 
    // [212] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy 
    jmp __b5
    // mulf_init::@2
  __b2:
    // [225] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 
    inc.z c
    // [226] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 
    lda #1
    and.z c
    sta.z __1
    // [227] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 
    lda.z __1
    cmp #0
    bne __b3_from___b2
    jmp __b4
    // mulf_init::@4
  __b4:
    // [228] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 
    inc.z x_2
    // [229] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 
    inc.z sqr
    bne !+
    inc.z sqr+1
  !:
    // [230] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3]
  __b3_from___b2:
  __b3_from___b4:
    // [230] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy 
    // [230] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy 
    jmp __b3
    // mulf_init::@3
  __b3:
    // [231] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 
    lda.z sqr
    sta.z __4
    // [232] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 
    lda.z __4
    ldy #0
    sta (sqr1_lo),y
    // [233] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 
    lda.z sqr+1
    sta.z __5
    // [234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 
    lda.z __5
    ldy #0
    sta (sqr1_hi),y
    // [235] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr1_hi
    bne !+
    inc.z sqr1_hi+1
  !:
    // [236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z x_2
    clc
    adc.z sqr
    sta.z sqr
    bcc !+
    inc.z sqr+1
  !:
    // [237] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr1_lo
    bne !+
    inc.z sqr1_lo+1
  !:
    // [210] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1]
  __b1_from___b3:
    // [210] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy 
    // [210] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy 
    // [210] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy 
    // [210] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy 
    // [210] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy 
    jmp __b1
}
  // File Data
  // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7)
  keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f
  // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7)
  keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80
  // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
  // <f(x) = <(( x * x )/4)
  .align $100
  mulf_sqr1_lo: .fill $200, 0
  // >f(x) = >(( x * x )/4)
  .align $100
  mulf_sqr1_hi: .fill $200, 0
  // <g(x) =  <((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_lo: .fill $200, 0
  // >g(x) = >((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_hi: .fill $200, 0
  // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars)
  // The chars are layout as follows with data in chars 0, 1, 3, 4 initially
  //   0 3 6
  //   1 4 7
  //   2 5 8
PROTO_BOB:
.var pic = LoadPicture("smiley.png", List().add($000000, $ffffff))
	.for (var x=0;x<3; x++)
    	.for (var y=0; y<24; y++)
            .byte pic.getSinglecolorByte(x,y)

  // Tables containing the char to use for a specific cell of a shifted BOB.
  // char_id = BOB_TABLES[cell*BOB_SUBTABLE_SIZE + shift_y*BOB_SHIFTS_X + shift_x];
  BOB_TABLES: .fill 9*8*4, 0
  // Table used for deleting rendered BOB's. Contains pointers to first char of each BOB.
  RENDERBOB_CLEANUP: .fill 2*NUM_BOBS, 0
  // *40 Table unsigned int[0x20] MUL40 = { ((unsigned int)i)*40 };
  MUL40: .fill 2*$20, 0

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [10] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [14] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] ) always clobbers reg byte a 
Statement [18] *((const byte*) BORDERCOL) ← (byte) $f [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] ) always clobbers reg byte a 
Statement [20] (signed word) main::x#4 ← (signed word) main::origX#8 [ main::origX#8 main::rowOffsetY#10 main::x#4 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#4 ] ) always clobbers reg byte a 
Statement [22] (signed word) main::x#7 ← (signed word) main::x#0 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:10 [ main::col#5 main::col#1 ]
Statement [23] (signed word) main::y#6 ← (signed word) main::y#0 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 main::y#6 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 main::y#6 ] ) always clobbers reg byte a 
Statement [25] *((const byte*) BORDERCOL) ← (byte) 1 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:17 [ main::row#2 main::row#1 ]
Statement [26] (byte) renderBob::xpos#0 ← > (signed word) main::x#2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 ] ) always clobbers reg byte a 
Statement [27] (byte) renderBob::ypos#0 ← > (signed word) main::y#2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 renderBob::ypos#0 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:62 [ renderBob::xpos#0 ]
Statement [29] (signed word) main::x#1 ← (signed word) main::x#2 + (const signed word) main::rowOffsetX [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::y#2 main::row#2 main::x#1 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::y#2 main::row#2 main::x#1 ] ) always clobbers reg byte a 
Statement [30] (signed word) main::y#1 ← (signed word) main::y#2 + (signed word) main::rowOffsetY#10 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ) always clobbers reg byte a 
Statement [31] *((const byte*) BORDERCOL) ← (byte) 2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ) always clobbers reg byte a 
Statement [34] (signed word) main::rowX#1 ← (signed word) main::x#0 + (const signed word) main::colOffsetX [ main::origX#8 main::rowOffsetY#10 main::y#0 main::col#5 main::rowX#1 renderBobCleanupNext#13 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::y#0 main::col#5 main::rowX#1 renderBobCleanupNext#13 ] ) always clobbers reg byte a 
Statement [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const signed word) main::colOffsetY [ main::origX#8 main::rowOffsetY#10 main::col#5 main::rowX#1 main::rowY#1 renderBobCleanupNext#13 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::col#5 main::rowX#1 main::rowY#1 renderBobCleanupNext#13 ] ) always clobbers reg byte a 
Statement [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100 [ main::rowOffsetY#10 main::origX#1 ] ( main:2 [ main::rowOffsetY#10 main::origX#1 ] ) always clobbers reg byte a 
Statement [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] ) always clobbers reg byte a 
Statement [40] *((const byte*) BORDERCOL) ← (byte) 0 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] ) always clobbers reg byte a 
Statement [50] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [52] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [54] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [62] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 ] main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ ] ) always clobbers reg byte a 
Statement [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a 
Statement [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:63 [ renderBob::ypos#0 ]
Statement [66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:72 [ renderBob::x_char_offset#0 ]
Statement [67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a 
Statement [68] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a 
Statement [69] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a 
Statement [70] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a 
Statement [71] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a 
Statement [72] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a 
Statement [73] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:82 [ renderBob::$5 ]
Statement [74] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a 
Statement [75] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:10 [ main::col#5 main::col#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:17 [ main::row#2 main::row#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:84 [ renderBob::bob_table_idx#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:84 [ renderBob::bob_table_idx#0 ]
Statement [76] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a 
Statement [77] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [78] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [79] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [80] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [81] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [82] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [83] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [84] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [85] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 ] ) always clobbers reg byte a reg byte y 
Statement [89] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 [ renderBobCleanup::i#2 renderBobCleanup::$1 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::$1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:18 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ]
Statement [90] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a 
Statement [91] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:18 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ]
Statement [92] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [93] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [94] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [95] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [96] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [97] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [98] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [99] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 [ renderBobCleanup::i#2 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [105] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::memset:15 [ memset::dst#2 ] ) always clobbers reg byte a 
Statement [107] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::memset:15 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [111] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:21 [ renderBobInit::y#2 renderBobInit::y#1 ]
Statement [112] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ) always clobbers reg byte a 
Statement [113] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$7 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$7 ] ) always clobbers reg byte a 
Statement [114] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a 
Statement [115] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ) always clobbers reg byte a 
Statement [116] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 ] ) always clobbers reg byte a 
Statement [120] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 [ renderBobInit::i#2 renderBobInit::$5 ] ( main:2::renderBobInit:9 [ renderBobInit::i#2 renderBobInit::$5 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:22 [ renderBobInit::i#2 renderBobInit::i#1 ]
Statement [121] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN [ renderBobInit::i#2 ] ( main:2::renderBobInit:9 [ renderBobInit::i#2 ] ) always clobbers reg byte a 
Statement [137] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
Removing always clobbered register reg byte a as potential for zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
Removing always clobbered register reg byte a as potential for zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
Statement [145] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph#1 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ]
Statement [149] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
Removing always clobbered register reg byte y as potential for zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
Removing always clobbered register reg byte y as potential for zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ]
Statement [150] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a 
Statement [151] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a 
Statement [156] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:2::prepareBobs:7::progress_inc:152 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 progress_cursor#24 ] ) always clobbers reg byte a reg byte y 
Statement [159] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:2::prepareBobs:7::progress_inc:152 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y 
Statement [169] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2) [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i1#2 ] ( main:2::prepareBobs:7::charsetFindOrAddGlyph:128 [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i1#2 ] main:2::prepareBobs:7::charsetFindOrAddGlyph:146 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i1#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:37 [ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:40 [ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ]
Statement [173] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4 [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:7::charsetFindOrAddGlyph:128 [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:7::charsetFindOrAddGlyph:146 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:41 [ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ]
Statement [177] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 [ bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_id#1 charsetFindOrAddGlyph::glyph_cursor#1 ] ( main:2::prepareBobs:7::charsetFindOrAddGlyph:128 [ bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_id#1 charsetFindOrAddGlyph::glyph_cursor#1 ] main:2::prepareBobs:7::charsetFindOrAddGlyph:146 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_id#1 charsetFindOrAddGlyph::glyph_cursor#1 ] ) always clobbers reg byte a 
Statement [183] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1 [ protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::$1 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::$1 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::$1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:44 [ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:45 [ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ]
Statement [187] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1 [ protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::carry#1 protoBobShiftRight::$5 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::carry#1 protoBobShiftRight::$5 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::carry#1 protoBobShiftRight::$5 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:46 [ protoBobShiftRight::carry#1 ]
Statement [191] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18 [ protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#2 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#2 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#2 ] ) always clobbers reg byte a 
Statement [195] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f [ protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#1 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#1 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#1 ] ) always clobbers reg byte a 
Statement [199] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a 
Statement [200] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a 
Statement [201] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a 
Statement [203] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2) [ protoBobShiftDown::i#2 ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 protoBobShiftDown::i#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:47 [ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ]
Statement [204] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2) [ protoBobShiftDown::i#2 ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 protoBobShiftDown::i#2 ] ) always clobbers reg byte a 
Statement [205] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0 [ protoBobShiftDown::i#2 ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 protoBobShiftDown::i#2 ] ) always clobbers reg byte a 
Statement [211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:53 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Statement [213] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:56 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ]
Statement [214] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:5 [ ] ) always clobbers reg byte a 
Statement [215] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:5 [ ] ) always clobbers reg byte a 
Statement [217] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:56 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ]
Statement [218] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Statement [220] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a 
Statement [226] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a 
Statement [231] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a 
Statement [232] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:53 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Statement [233] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a 
Statement [234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Statement [236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a 
Statement [10] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [14] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] ) always clobbers reg byte a 
Statement [18] *((const byte*) BORDERCOL) ← (byte) $f [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] ) always clobbers reg byte a 
Statement [20] (signed word) main::x#4 ← (signed word) main::origX#8 [ main::origX#8 main::rowOffsetY#10 main::x#4 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#4 ] ) always clobbers reg byte a 
Statement [22] (signed word) main::x#7 ← (signed word) main::x#0 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 ] ) always clobbers reg byte a 
Statement [23] (signed word) main::y#6 ← (signed word) main::y#0 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 main::y#6 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 renderBobCleanupNext#21 main::col#5 main::x#7 main::y#6 ] ) always clobbers reg byte a 
Statement [25] *((const byte*) BORDERCOL) ← (byte) 1 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 ] ) always clobbers reg byte a 
Statement [26] (byte) renderBob::xpos#0 ← > (signed word) main::x#2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 ] ) always clobbers reg byte a 
Statement [27] (byte) renderBob::ypos#0 ← > (signed word) main::y#2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 renderBob::ypos#0 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 renderBobCleanupNext#17 main::row#2 renderBob::xpos#0 renderBob::ypos#0 ] ) always clobbers reg byte a 
Statement [29] (signed word) main::x#1 ← (signed word) main::x#2 + (const signed word) main::rowOffsetX [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::y#2 main::row#2 main::x#1 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::y#2 main::row#2 main::x#1 ] ) always clobbers reg byte a 
Statement [30] (signed word) main::y#1 ← (signed word) main::y#2 + (signed word) main::rowOffsetY#10 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ) always clobbers reg byte a 
Statement [31] *((const byte*) BORDERCOL) ← (byte) 2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 renderBobCleanupNext#13 main::row#2 main::x#1 main::y#1 ] ) always clobbers reg byte a 
Statement [34] (signed word) main::rowX#1 ← (signed word) main::x#0 + (const signed word) main::colOffsetX [ main::origX#8 main::rowOffsetY#10 main::y#0 main::col#5 main::rowX#1 renderBobCleanupNext#13 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::y#0 main::col#5 main::rowX#1 renderBobCleanupNext#13 ] ) always clobbers reg byte a 
Statement [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const signed word) main::colOffsetY [ main::origX#8 main::rowOffsetY#10 main::col#5 main::rowX#1 main::rowY#1 renderBobCleanupNext#13 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 main::col#5 main::rowX#1 main::rowY#1 renderBobCleanupNext#13 ] ) always clobbers reg byte a 
Statement [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100 [ main::rowOffsetY#10 main::origX#1 ] ( main:2 [ main::rowOffsetY#10 main::origX#1 ] ) always clobbers reg byte a 
Statement [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] ) always clobbers reg byte a 
Statement [40] *((const byte*) BORDERCOL) ← (byte) 0 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] ) always clobbers reg byte a 
Statement [50] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [52] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [54] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [62] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 ] main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ ] ) always clobbers reg byte a 
Statement [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ keyboard_matrix_read::return#0 ] ) always clobbers reg byte a 
Statement [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ) always clobbers reg byte a 
Statement [66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ) always clobbers reg byte a 
Statement [67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ) always clobbers reg byte a 
Statement [68] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_offset#0 ] ) always clobbers reg byte a 
Statement [69] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$2 ] ) always clobbers reg byte a 
Statement [70] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::screen#0 ] ) always clobbers reg byte a 
Statement [71] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$4 ] ) always clobbers reg byte a 
Statement [72] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::screen#0 renderBob::$5 ] ) always clobbers reg byte a 
Statement [73] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::screen#0 renderBob::$5 renderBob::$6 ] ) always clobbers reg byte a 
Statement [74] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a 
Statement [75] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 [ renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [76] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a 
Statement [77] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [78] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [79] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [80] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [81] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [82] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [83] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [84] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 renderBob::screen#0 renderBob::bob_table_idx#0 ] ) always clobbers reg byte a reg byte y 
Statement [85] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) [ renderBobCleanupNext#13 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#13 ] ) always clobbers reg byte a reg byte y 
Statement [89] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 [ renderBobCleanup::i#2 renderBobCleanup::$1 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::$1 ] ) always clobbers reg byte a 
Statement [90] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a 
Statement [91] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [92] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [93] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [94] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [95] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [96] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [97] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [98] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 [ renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 renderBobCleanup::screen#0 ] ) always clobbers reg byte a reg byte y 
Statement [99] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 [ renderBobCleanup::i#2 ] ( main:2::renderBobCleanup:19 [ main::origX#8 main::rowOffsetY#10 renderBobCleanup::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [105] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::memset:15 [ memset::dst#2 ] ) always clobbers reg byte a 
Statement [107] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::memset:15 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [111] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 [ renderBobInit::y#2 renderBobInit::$0 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$0 ] ) always clobbers reg byte a 
Statement [112] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$0 renderBobInit::$6 ] ) always clobbers reg byte a 
Statement [113] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 [ renderBobInit::y#2 renderBobInit::$7 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$7 ] ) always clobbers reg byte a 
Statement [114] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (byte) 3 [ renderBobInit::y#2 renderBobInit::$1 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$1 ] ) always clobbers reg byte a 
Statement [115] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 renderBobInit::$1 renderBobInit::$4 ] ) always clobbers reg byte a 
Statement [116] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 [ renderBobInit::y#2 ] ( main:2::renderBobInit:9 [ renderBobInit::y#2 ] ) always clobbers reg byte a 
Statement [120] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 [ renderBobInit::i#2 renderBobInit::$5 ] ( main:2::renderBobInit:9 [ renderBobInit::i#2 renderBobInit::$5 ] ) always clobbers reg byte a 
Statement [121] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN [ renderBobInit::i#2 ] ( main:2::renderBobInit:9 [ renderBobInit::i#2 ] ) always clobbers reg byte a 
Statement [137] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::bob_table#0 ] ) always clobbers reg byte a 
Statement [145] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph#1 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph#1 ] ) always clobbers reg byte a 
Statement [149] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 ] ) always clobbers reg byte y 
Statement [150] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_table#2 prepareBobs::bob_glyph#1 ] ) always clobbers reg byte a 
Statement [151] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ( main:2::prepareBobs:7 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 ] ) always clobbers reg byte a 
Statement [156] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) [ progress_cursor#24 ] ( main:2::prepareBobs:7::progress_inc:152 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 progress_cursor#24 ] ) always clobbers reg byte a reg byte y 
Statement [159] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) [ progress_idx#10 progress_cursor#17 ] ( main:2::prepareBobs:7::progress_inc:152 [ prepareBobs::shift_y#2 bob_charset_next_id#16 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 prepareBobs::cell#2 prepareBobs::bob_glyph#1 prepareBobs::bob_table#1 progress_idx#10 progress_cursor#17 ] ) always clobbers reg byte a reg byte y 
Statement [169] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2) [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i1#2 ] ( main:2::prepareBobs:7::charsetFindOrAddGlyph:128 [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i1#2 ] main:2::prepareBobs:7::charsetFindOrAddGlyph:146 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i1#2 ] ) always clobbers reg byte a 
Statement [173] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4 [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i#2 ] ( main:2::prepareBobs:7::charsetFindOrAddGlyph:128 [ charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i#2 ] main:2::prepareBobs:7::charsetFindOrAddGlyph:146 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 charsetFindOrAddGlyph::glyph_id#11 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::i#2 ] ) always clobbers reg byte a 
Statement [177] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 [ bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_id#1 charsetFindOrAddGlyph::glyph_cursor#1 ] ( main:2::prepareBobs:7::charsetFindOrAddGlyph:128 [ bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_id#1 charsetFindOrAddGlyph::glyph_cursor#1 ] main:2::prepareBobs:7::charsetFindOrAddGlyph:146 [ prepareBobs::shift_y#2 prepareBobs::bob_table_idx#12 prepareBobs::shift_x#2 progress_cursor#24 progress_idx#25 prepareBobs::cell#2 prepareBobs::bob_glyph#2 prepareBobs::bob_table#2 bob_charset_next_id#23 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph_id#1 charsetFindOrAddGlyph::glyph_cursor#1 ] ) always clobbers reg byte a 
Statement [183] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1 [ protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::$1 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::$1 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::$1 ] ) always clobbers reg byte a 
Statement [187] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1 [ protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::carry#1 protoBobShiftRight::$5 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::carry#1 protoBobShiftRight::$5 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::j#3 protoBobShiftRight::carry#2 protoBobShiftRight::carry#1 protoBobShiftRight::$5 ] ) always clobbers reg byte a 
Statement [191] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18 [ protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#2 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#2 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#2 ] ) always clobbers reg byte a 
Statement [195] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f [ protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#1 ] ( main:2::prepareBobs:7::protoBobShiftRight:141 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#1 ] main:2::prepareBobs:7::protoBobShiftRight:143 [ prepareBobs::shift_y#2 prepareBobs::shift_x#2 prepareBobs::bob_table_idx#1 bob_charset_next_id#21 progress_cursor#24 progress_idx#25 protoBobShiftRight::i#2 protoBobShiftRight::carry#1 protoBobShiftRight::j#1 ] ) always clobbers reg byte a 
Statement [199] *((const byte*) PROTO_BOB) ← (byte) 0 [ ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a 
Statement [200] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 [ ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a 
Statement [201] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 [ ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 ] ) always clobbers reg byte a 
Statement [203] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2) [ protoBobShiftDown::i#2 ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 protoBobShiftDown::i#2 ] ) always clobbers reg byte a 
Statement [204] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2) [ protoBobShiftDown::i#2 ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 protoBobShiftDown::i#2 ] ) always clobbers reg byte a 
Statement [205] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0 [ protoBobShiftDown::i#2 ] ( main:2::prepareBobs:7::protoBobShiftDown:135 [ prepareBobs::shift_y#2 progress_cursor#31 progress_idx#31 bob_charset_next_id#30 prepareBobs::bob_table_idx#12 protoBobShiftDown::i#2 ] ) always clobbers reg byte a 
Statement [211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a 
Statement [213] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a 
Statement [214] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:5 [ ] ) always clobbers reg byte a 
Statement [215] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:5 [ ] ) always clobbers reg byte a 
Statement [217] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Statement [218] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Statement [220] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:5 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a 
Statement [226] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a 
Statement [231] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a 
Statement [232] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Statement [233] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a 
Statement [234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Statement [236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a 
Potential registers zp[2]:2 [ main::origX#8 main::origX#1 ] : zp[2]:2 , 
Potential registers zp[2]:4 [ main::rowOffsetY#10 main::rowOffsetY#1 ] : zp[2]:4 , 
Potential registers zp[2]:6 [ main::x#0 main::x#4 main::rowX#1 ] : zp[2]:6 , 
Potential registers zp[2]:8 [ main::y#0 main::rowY#1 ] : zp[2]:8 , 
Potential registers zp[1]:10 [ main::col#5 main::col#1 ] : zp[1]:10 , reg byte x , 
Potential registers zp[2]:11 [ main::x#2 main::x#1 main::x#7 ] : zp[2]:11 , 
Potential registers zp[2]:13 [ main::y#2 main::y#1 main::y#6 ] : zp[2]:13 , 
Potential registers zp[2]:15 [ renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ] : zp[2]:15 , 
Potential registers zp[1]:17 [ main::row#2 main::row#1 ] : zp[1]:17 , reg byte x , 
Potential registers zp[1]:18 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] : zp[1]:18 , reg byte x , 
Potential registers zp[2]:19 [ memset::dst#2 memset::dst#1 ] : zp[2]:19 , 
Potential registers zp[1]:21 [ renderBobInit::y#2 renderBobInit::y#1 ] : zp[1]:21 , reg byte x , reg byte y , 
Potential registers zp[1]:22 [ renderBobInit::i#2 renderBobInit::i#1 ] : zp[1]:22 , reg byte x , reg byte y , 
Potential registers zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] : zp[1]:23 , reg byte x , 
Potential registers zp[2]:24 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] : zp[2]:24 , 
Potential registers zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] : zp[1]:26 , reg byte x , 
Potential registers zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] : zp[1]:27 , reg byte x , 
Potential registers zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] : zp[1]:28 , reg byte x , 
Potential registers zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ] : zp[1]:29 , reg byte x , 
Potential registers zp[2]:30 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] : zp[2]:30 , 
Potential registers zp[2]:32 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] : zp[2]:32 , 
Potential registers zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] : zp[1]:34 , reg byte x , 
Potential registers zp[2]:35 [ charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ] : zp[2]:35 , 
Potential registers zp[1]:37 [ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ] : zp[1]:37 , reg byte x , reg byte y , 
Potential registers zp[2]:38 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ] : zp[2]:38 , 
Potential registers zp[1]:40 [ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ] : zp[1]:40 , reg byte x , reg byte y , 
Potential registers zp[1]:41 [ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ] : zp[1]:41 , reg byte x , reg byte y , 
Potential registers zp[1]:42 [ charsetFindOrAddGlyph::found#2 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ] : zp[1]:43 , reg byte x , reg byte y , 
Potential registers zp[1]:44 [ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ] : zp[1]:44 , reg byte x , reg byte y , 
Potential registers zp[1]:45 [ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ] : zp[1]:45 , reg byte x , reg byte y , 
Potential registers zp[1]:46 [ protoBobShiftRight::carry#1 ] : zp[1]:46 , reg byte x , reg byte y , 
Potential registers zp[1]:47 [ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ] : zp[1]:47 , reg byte x , reg byte y , 
Potential registers zp[2]:48 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:48 , 
Potential registers zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:50 , reg byte x , 
Potential registers zp[2]:51 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:51 , 
Potential registers zp[1]:53 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:53 , reg byte x , 
Potential registers zp[2]:54 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:54 , 
Potential registers zp[1]:56 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:56 , reg byte x , 
Potential registers zp[2]:57 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:57 , 
Potential registers zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:59 , reg byte x , 
Potential registers zp[2]:60 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:60 , 
Potential registers zp[1]:62 [ renderBob::xpos#0 ] : zp[1]:62 , reg byte x , reg byte y , 
Potential registers zp[1]:63 [ renderBob::ypos#0 ] : zp[1]:63 , reg byte x , reg byte y , 
Potential registers zp[1]:64 [ keyboard_key_pressed::return#2 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:65 [ main::$15 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:66 [ keyboard_key_pressed::return#3 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:67 [ main::$17 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:68 [ keyboard_matrix_read::return#2 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:69 [ keyboard_key_pressed::$2 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:70 [ keyboard_key_pressed::return#0 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:71 [ keyboard_matrix_read::return#0 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:72 [ renderBob::x_char_offset#0 ] : zp[1]:72 , reg byte x , reg byte y , 
Potential registers zp[1]:73 [ renderBob::y_char_offset#0 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:74 [ renderBob::$8 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:75 [ renderBob::y_offset#0 ] : zp[2]:75 , 
Potential registers zp[2]:77 [ renderBob::$2 ] : zp[2]:77 , 
Potential registers zp[2]:79 [ renderBob::screen#0 ] : zp[2]:79 , 
Potential registers zp[1]:81 [ renderBob::$4 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:82 [ renderBob::$5 ] : zp[1]:82 , reg byte x , reg byte y , 
Potential registers zp[1]:83 [ renderBob::$6 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:84 [ renderBob::bob_table_idx#0 ] : zp[1]:84 , reg byte x , 
Potential registers zp[1]:85 [ renderBobCleanup::$1 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:86 [ renderBobCleanup::screen#0 ] : zp[2]:86 , 
Potential registers zp[2]:88 [ renderBobInit::$0 ] : zp[2]:88 , 
Potential registers zp[2]:90 [ renderBobInit::$6 ] : zp[2]:90 , 
Potential registers zp[2]:92 [ renderBobInit::$7 ] : zp[2]:92 , 
Potential registers zp[2]:94 [ renderBobInit::$1 ] : zp[2]:94 , 
Potential registers zp[1]:96 [ renderBobInit::$4 ] : zp[1]:96 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:97 [ renderBobInit::$5 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:98 [ charsetFindOrAddGlyph::return#1 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:99 [ prepareBobs::$6 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:100 [ protoBobShiftRight::$1 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:101 [ protoBobShiftRight::$5 ] : zp[1]:101 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:102 [ protoBobShiftRight::$6 ] : zp[1]:102 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:103 [ mulf_init::$1 ] : zp[1]:103 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:104 [ mulf_init::$4 ] : zp[1]:104 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:105 [ mulf_init::$5 ] : zp[1]:105 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [charsetFindOrAddGlyph] 366,670.33: zp[1]:41 [ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ] 36,670.33: zp[1]:40 [ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ] 30,002.31: zp[2]:38 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ] 11,938.75: zp[1]:37 [ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ] 10,001: zp[1]:42 [ charsetFindOrAddGlyph::found#2 ] 9,402.2: zp[2]:35 [ charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ] 2,002: zp[1]:98 [ charsetFindOrAddGlyph::return#1 ] 
Uplift Scope [protoBobShiftRight] 5,705.7: zp[1]:44 [ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ] 2,288: zp[1]:45 [ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ] 2,002: zp[1]:100 [ protoBobShiftRight::$1 ] 2,002: zp[1]:101 [ protoBobShiftRight::$5 ] 2,002: zp[1]:102 [ protoBobShiftRight::$6 ] 1,232: zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ] 111.22: zp[1]:46 [ protoBobShiftRight::carry#1 ] 
Uplift Scope [prepareBobs] 2,302.3: zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ] 2,002: zp[1]:99 [ prepareBobs::$6 ] 1,257.33: zp[2]:32 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] 929.5: zp[2]:30 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] 218.83: zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] 70.52: zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] 23.43: zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] 
Uplift Scope [main] 1,751.75: zp[1]:17 [ main::row#2 main::row#1 ] 1,219.83: zp[2]:13 [ main::y#2 main::y#1 main::y#6 ] 1,122.2: zp[2]:11 [ main::x#2 main::x#1 main::x#7 ] 164.97: zp[1]:10 [ main::col#5 main::col#1 ] 96.65: zp[2]:6 [ main::x#0 main::x#4 main::rowX#1 ] 88.98: zp[2]:8 [ main::y#0 main::rowY#1 ] 48.14: zp[2]:4 [ main::rowOffsetY#10 main::rowOffsetY#1 ] 22: zp[1]:65 [ main::$15 ] 22: zp[1]:67 [ main::$17 ] 4.64: zp[2]:2 [ main::origX#8 main::origX#1 ] 
Uplift Scope [] 2,729.71: zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] 338.4: zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] 324.85: zp[2]:24 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] 193.64: zp[2]:15 [ renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ] 
Uplift Scope [renderBobCleanup] 202: zp[1]:85 [ renderBobCleanup::$1 ] 176.75: zp[1]:18 [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] 112.22: zp[2]:86 [ renderBobCleanup::screen#0 ] 
Uplift Scope [protoBobShiftDown] 363.6: zp[1]:47 [ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ] 
Uplift Scope [renderBob] 143.57: zp[1]:63 [ renderBob::ypos#0 ] 100.5: zp[1]:62 [ renderBob::xpos#0 ] 4: zp[1]:73 [ renderBob::y_char_offset#0 ] 4: zp[1]:74 [ renderBob::$8 ] 4: zp[2]:75 [ renderBob::y_offset#0 ] 4: zp[2]:77 [ renderBob::$2 ] 4: zp[1]:81 [ renderBob::$4 ] 4: zp[1]:83 [ renderBob::$6 ] 2: zp[1]:82 [ renderBob::$5 ] 1.82: zp[1]:84 [ renderBob::bob_table_idx#0 ] 1.47: zp[2]:79 [ renderBob::screen#0 ] 0.8: zp[1]:72 [ renderBob::x_char_offset#0 ] 
Uplift Scope [mulf_init] 47.67: zp[2]:60 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:54 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:48 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:53 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:103 [ mulf_init::$1 ] 22: zp[1]:104 [ mulf_init::$4 ] 22: zp[1]:105 [ mulf_init::$5 ] 15.4: zp[1]:56 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:57 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:51 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] 
Uplift Scope [renderBobInit] 27.5: zp[1]:22 [ renderBobInit::i#2 renderBobInit::i#1 ] 22: zp[2]:90 [ renderBobInit::$6 ] 22: zp[2]:92 [ renderBobInit::$7 ] 22: zp[1]:96 [ renderBobInit::$4 ] 22: zp[1]:97 [ renderBobInit::$5 ] 21.21: zp[1]:21 [ renderBobInit::y#2 renderBobInit::y#1 ] 16.5: zp[2]:88 [ renderBobInit::$0 ] 11: zp[2]:94 [ renderBobInit::$1 ] 
Uplift Scope [keyboard_key_pressed] 22: zp[1]:64 [ keyboard_key_pressed::return#2 ] 22: zp[1]:66 [ keyboard_key_pressed::return#3 ] 6: zp[1]:70 [ keyboard_key_pressed::return#0 ] 4: zp[1]:69 [ keyboard_key_pressed::$2 ] 
Uplift Scope [memset] 36.67: zp[2]:19 [ memset::dst#2 memset::dst#1 ] 
Uplift Scope [keyboard_matrix_read] 4: zp[1]:68 [ keyboard_matrix_read::return#2 ] 1.33: zp[1]:71 [ keyboard_matrix_read::return#0 ] 
Uplift Scope [RADIX] 
Uplift Scope [progress_init] 
Uplift Scope [progress_inc] 

Uplifting [charsetFindOrAddGlyph] best 4099890 combination reg byte y [ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ] reg byte y [ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ] zp[2]:38 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ] reg byte x [ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ] reg byte a [ charsetFindOrAddGlyph::found#2 ] zp[2]:35 [ charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ] zp[1]:98 [ charsetFindOrAddGlyph::return#1 ] 
Limited combination testing to 100 combinations of 432 possible.
Uplifting [protoBobShiftRight] best 4061890 combination reg byte x [ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ] reg byte y [ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ] reg byte a [ protoBobShiftRight::$1 ] reg byte a [ protoBobShiftRight::$5 ] zp[1]:102 [ protoBobShiftRight::$6 ] zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ] zp[1]:46 [ protoBobShiftRight::carry#1 ] 
Limited combination testing to 100 combinations of 5184 possible.
Uplifting [prepareBobs] best 4055890 combination zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ] reg byte a [ prepareBobs::$6 ] zp[2]:32 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] zp[2]:30 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] 
Uplifting [main] best 4046770 combination reg byte x [ main::row#2 main::row#1 ] zp[2]:13 [ main::y#2 main::y#1 main::y#6 ] zp[2]:11 [ main::x#2 main::x#1 main::x#7 ] zp[1]:10 [ main::col#5 main::col#1 ] zp[2]:6 [ main::x#0 main::x#4 main::rowX#1 ] zp[2]:8 [ main::y#0 main::rowY#1 ] zp[2]:4 [ main::rowOffsetY#10 main::rowOffsetY#1 ] reg byte a [ main::$15 ] reg byte a [ main::$17 ] zp[2]:2 [ main::origX#8 main::origX#1 ] 
Uplifting [] best 4046770 combination zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] zp[2]:24 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] zp[2]:15 [ renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ] 
Uplifting [renderBobCleanup] best 4045370 combination reg byte a [ renderBobCleanup::$1 ] reg byte x [ renderBobCleanup::i#2 renderBobCleanup::i#1 ] zp[2]:86 [ renderBobCleanup::screen#0 ] 
Uplifting [protoBobShiftDown] best 4043770 combination reg byte x [ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ] 
Uplifting [renderBob] best 4043760 combination zp[1]:63 [ renderBob::ypos#0 ] zp[1]:62 [ renderBob::xpos#0 ] reg byte a [ renderBob::y_char_offset#0 ] reg byte a [ renderBob::$8 ] zp[2]:75 [ renderBob::y_offset#0 ] zp[2]:77 [ renderBob::$2 ] zp[1]:81 [ renderBob::$4 ] zp[1]:83 [ renderBob::$6 ] zp[1]:82 [ renderBob::$5 ] zp[1]:84 [ renderBob::bob_table_idx#0 ] zp[2]:79 [ renderBob::screen#0 ] zp[1]:72 [ renderBob::x_char_offset#0 ] 
Limited combination testing to 100 combinations of 41472 possible.
Uplifting [mulf_init] best 4043510 combination zp[2]:60 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:54 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:48 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:56 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:57 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:51 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] 
Limited combination testing to 100 combinations of 1024 possible.
Uplifting [renderBobInit] best 4043220 combination reg byte x [ renderBobInit::i#2 renderBobInit::i#1 ] zp[2]:90 [ renderBobInit::$6 ] zp[2]:92 [ renderBobInit::$7 ] reg byte a [ renderBobInit::$4 ] reg byte a [ renderBobInit::$5 ] reg byte x [ renderBobInit::y#2 renderBobInit::y#1 ] zp[2]:88 [ renderBobInit::$0 ] zp[2]:94 [ renderBobInit::$1 ] 
Limited combination testing to 100 combinations of 144 possible.
Uplifting [keyboard_key_pressed] best 4043031 combination reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::$2 ] 
Limited combination testing to 100 combinations of 256 possible.
Uplifting [memset] best 4043031 combination zp[2]:19 [ memset::dst#2 memset::dst#1 ] 
Uplifting [keyboard_matrix_read] best 4043019 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] 
Uplifting [RADIX] best 4043019 combination 
Uplifting [progress_init] best 4043019 combination 
Uplifting [progress_inc] best 4043019 combination 
Attempting to uplift remaining variables inzp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
Uplifting [] best 4043019 combination zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] 
Attempting to uplift remaining variables inzp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ]
Uplifting [prepareBobs] best 4043019 combination zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ] 
Attempting to uplift remaining variables inzp[1]:98 [ charsetFindOrAddGlyph::return#1 ]
Uplifting [charsetFindOrAddGlyph] best 4039019 combination reg byte a [ charsetFindOrAddGlyph::return#1 ] 
Attempting to uplift remaining variables inzp[1]:102 [ protoBobShiftRight::$6 ]
Uplifting [protoBobShiftRight] best 4033019 combination reg byte a [ protoBobShiftRight::$6 ] 
Attempting to uplift remaining variables inzp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ]
Uplifting [protoBobShiftRight] best 4033019 combination zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ] 
Attempting to uplift remaining variables inzp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
Uplifting [] best 4033019 combination zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] 
Attempting to uplift remaining variables inzp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
Uplifting [prepareBobs] best 4033019 combination zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] 
Attempting to uplift remaining variables inzp[1]:10 [ main::col#5 main::col#1 ]
Uplifting [main] best 4033019 combination zp[1]:10 [ main::col#5 main::col#1 ] 
Attempting to uplift remaining variables inzp[1]:63 [ renderBob::ypos#0 ]
Uplifting [renderBob] best 4033019 combination zp[1]:63 [ renderBob::ypos#0 ] 
Attempting to uplift remaining variables inzp[1]:46 [ protoBobShiftRight::carry#1 ]
Uplifting [protoBobShiftRight] best 4033019 combination zp[1]:46 [ protoBobShiftRight::carry#1 ] 
Attempting to uplift remaining variables inzp[1]:62 [ renderBob::xpos#0 ]
Uplifting [renderBob] best 4033019 combination zp[1]:62 [ renderBob::xpos#0 ] 
Attempting to uplift remaining variables inzp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
Uplifting [prepareBobs] best 4033019 combination zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] 
Attempting to uplift remaining variables inzp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ]
Uplifting [prepareBobs] best 4033019 combination zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] 
Attempting to uplift remaining variables inzp[1]:56 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Uplifting [mulf_init] best 4032879 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] 
Attempting to uplift remaining variables inzp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ]
Uplifting [mulf_init] best 4032879 combination zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ] 
Attempting to uplift remaining variables inzp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ]
Uplifting [mulf_init] best 4032879 combination zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ] 
Attempting to uplift remaining variables inzp[1]:81 [ renderBob::$4 ]
Uplifting [renderBob] best 4032873 combination reg byte a [ renderBob::$4 ] 
Attempting to uplift remaining variables inzp[1]:83 [ renderBob::$6 ]
Uplifting [renderBob] best 4032867 combination reg byte a [ renderBob::$6 ] 
Attempting to uplift remaining variables inzp[1]:82 [ renderBob::$5 ]
Uplifting [renderBob] best 4032867 combination zp[1]:82 [ renderBob::$5 ] 
Attempting to uplift remaining variables inzp[1]:84 [ renderBob::bob_table_idx#0 ]
Uplifting [renderBob] best 4032867 combination zp[1]:84 [ renderBob::bob_table_idx#0 ] 
Attempting to uplift remaining variables inzp[1]:72 [ renderBob::x_char_offset#0 ]
Uplifting [renderBob] best 4032867 combination zp[1]:72 [ renderBob::x_char_offset#0 ] 
Coalescing zero page register [ zp[2]:30 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 ] ] with [ zp[2]:35 [ charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:75 [ renderBob::y_offset#0 ] ] with [ zp[2]:77 [ renderBob::$2 ] ] - score: 1
Coalescing zero page register [ zp[1]:82 [ renderBob::$5 ] ] with [ zp[1]:84 [ renderBob::bob_table_idx#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:88 [ renderBobInit::$0 ] ] with [ zp[2]:92 [ renderBobInit::$7 ] ] - score: 1
Coalescing zero page register [ zp[2]:75 [ renderBob::y_offset#0 renderBob::$2 ] ] with [ zp[2]:79 [ renderBob::screen#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:88 [ renderBobInit::$0 renderBobInit::$7 ] ] with [ zp[2]:94 [ renderBobInit::$1 ] ] - score: 1
Coalescing zero page register [ zp[2]:19 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:2 [ main::origX#8 main::origX#1 ] ]
Coalescing zero page register [ zp[1]:23 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 ] ] with [ zp[1]:10 [ main::col#5 main::col#1 ] ]
Coalescing zero page register [ zp[2]:24 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 ] ] with [ zp[2]:4 [ main::rowOffsetY#10 main::rowOffsetY#1 ] ]
Coalescing zero page register [ zp[2]:30 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 ] ] with [ zp[2]:6 [ main::x#0 main::x#4 main::rowX#1 ] ]
Coalescing zero page register [ zp[2]:32 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 ] ] with [ zp[2]:8 [ main::y#0 main::rowY#1 ] ]
Coalescing zero page register [ zp[2]:38 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 ] ] with [ zp[2]:11 [ main::x#2 main::x#1 main::x#7 ] ]
Coalescing zero page register [ zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 ] ] with [ zp[1]:29 [ prepareBobs::cell#2 prepareBobs::cell#1 ] ]
Coalescing zero page register [ zp[2]:48 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:13 [ main::y#2 main::y#1 main::y#6 ] ]
Coalescing zero page register [ zp[1]:50 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:26 [ progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ] ]
Coalescing zero page register [ zp[2]:51 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp[2]:15 [ renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ] ]
Coalescing zero page register [ zp[1]:59 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp[1]:27 [ prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ] ]
Coalescing zero page register [ zp[1]:62 [ renderBob::xpos#0 ] ] with [ zp[1]:28 [ prepareBobs::shift_x#2 prepareBobs::shift_x#1 ] ]
Coalescing zero page register [ zp[1]:63 [ renderBob::ypos#0 ] ] with [ zp[1]:34 [ bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ] ]
Coalescing zero page register [ zp[1]:72 [ renderBob::x_char_offset#0 ] ] with [ zp[1]:46 [ protoBobShiftRight::carry#1 ] ]
Coalescing zero page register [ zp[2]:75 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 ] ] with [ zp[2]:54 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ]
Coalescing zero page register [ zp[2]:86 [ renderBobCleanup::screen#0 ] ] with [ zp[2]:57 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ]
Coalescing zero page register [ zp[2]:88 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 ] ] with [ zp[2]:60 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ]
Coalescing zero page register [ zp[1]:82 [ renderBob::$5 renderBob::bob_table_idx#0 ] ] with [ zp[1]:43 [ protoBobShiftRight::i#2 protoBobShiftRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ] ]
Coalescing zero page register [ zp[2]:86 [ renderBobCleanup::screen#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp[2]:30 [ prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 main::x#0 main::x#4 main::rowX#1 ] ]
Coalescing zero page register [ zp[2]:88 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp[2]:19 [ memset::dst#2 memset::dst#1 main::origX#8 main::origX#1 ] ]
Coalescing zero page register [ zp[2]:90 [ renderBobInit::$6 ] ] with [ zp[2]:24 [ progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 main::rowOffsetY#10 main::rowOffsetY#1 ] ]
Allocated (was zp[1]:23) zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::col#5 main::col#1 ]
Allocated (was zp[2]:32) zp[2]:3 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 main::y#0 main::rowY#1 ]
Allocated (was zp[2]:38) zp[2]:5 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 main::x#2 main::x#1 main::x#7 ]
Allocated (was zp[2]:48) zp[2]:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 main::y#2 main::y#1 main::y#6 ]
Allocated (was zp[1]:50) zp[1]:9 [ mulf_init::c#2 mulf_init::c#1 progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
Allocated (was zp[2]:51) zp[2]:10 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ]
Allocated (was zp[1]:59) zp[1]:12 [ mulf_init::dir#2 mulf_init::dir#4 prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
Allocated (was zp[1]:62) zp[1]:13 [ renderBob::xpos#0 prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
Allocated (was zp[1]:63) zp[1]:14 [ renderBob::ypos#0 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
Allocated (was zp[1]:72) zp[1]:15 [ renderBob::x_char_offset#0 protoBobShiftRight::carry#1 ]
Allocated (was zp[2]:75) zp[2]:16 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
Allocated (was zp[1]:82) zp[1]:18 [ renderBob::$5 renderBob::bob_table_idx#0 protoBobShiftRight::i#2 protoBobShiftRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ]
Allocated (was zp[2]:86) zp[2]:19 [ renderBobCleanup::screen#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 main::x#0 main::x#4 main::rowX#1 ]
Allocated (was zp[2]:88) zp[2]:21 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 memset::dst#2 memset::dst#1 main::origX#8 main::origX#1 ]
Allocated (was zp[2]:90) zp[2]:23 [ renderBobInit::$6 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 main::rowOffsetY#10 main::rowOffsetY#1 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Pre-calculated bobs inside a charset (pre-moved to all x/y-combinations)
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label D018 = $d018
  // CIA#1 Port A: keyboard matrix columns and joystick #2
  .label CIA1_PORT_A = $dc00
  // CIA#1 Port B: keyboard matrix rows and joystick #1.
  .label CIA1_PORT_B = $dc01
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  // CIA #2 Port A data direction register.
  .label CIA2_PORT_A_DDR = $dd02
  .const KEY_SPACE = $3c
  // The BASIC screen
  .label BASIC_SCREEN = $400
  // The BASIC charset
  .label BASIC_CHARSET = $1000
  // The BOB screen
  .label BOB_SCREEN = $2800
  // The BOB charset
  .label BOB_CHARSET = $2000
  // The number of different X-shifts
  .const BOB_SHIFTS_X = 4
  // The number of different Y-shifts
  .const BOB_SHIFTS_Y = 8
  // The size of a sub-table of BOB_TABLES
  .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y
  // The number of BOBs to render
  .const NUM_BOBS = $19
  .const SIZEOF_POINTER = 2
  // BOB charset ID of the next glyph to be added
  .label bob_charset_next_id = $e
  // Current index within the progress cursor (0-7)
  .label progress_idx = 9
  // Current position of the progress cursor
  .label progress_cursor = $17
  // Pointer to the next clean-up to add
  // Prepare for next clean-up
  .label renderBobCleanupNext = $a
  // @begin
__bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
__b1_from___bbegin:
  jmp __b1
  // @1
__b1:
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
main_from___b1:
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
__bend_from___b1:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .const origY = $a00
    // Row and column offset vectors
    .const rowOffsetX = $c00
    .const colOffsetX = $100
    .const colOffsetY = $1800
    .const vicSelectGfxBank1_toDd001_return = 3
    .const vicSelectGfxBank2_toDd001_return = 3
    .const toD0181_return = (>(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f
    .const toD0182_return = (>(BASIC_SCREEN&$3fff)*4)|(>BASIC_CHARSET)/4&$f
    .label x = $13
    .label y = 3
    .label x_1 = 5
    .label y_1 = 7
    .label rowX = $13
    .label rowY = 3
    .label col = 2
    // Origin point
    .label origX = $15
    .label rowOffsetY = $17
    // [5] call mulf_init 
    // [209] phi from main to mulf_init [phi:main->mulf_init]
  mulf_init_from_main:
    jsr mulf_init
    // [6] phi from main to main::@11 [phi:main->main::@11]
  __b11_from_main:
    jmp __b11
    // main::@11
  __b11:
    // [7] call prepareBobs 
    // [125] phi from main::@11 to prepareBobs [phi:main::@11->prepareBobs]
  prepareBobs_from___b11:
    jsr prepareBobs
    // [8] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
  __b12_from___b11:
    jmp __b12
    // main::@12
  __b12:
    // [9] call renderBobInit 
    // [109] phi from main::@12 to renderBobInit [phi:main::@12->renderBobInit]
  renderBobInit_from___b12:
    jsr renderBobInit
    jmp vicSelectGfxBank1
    // main::vicSelectGfxBank1
  vicSelectGfxBank1:
    // [10] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2_PORT_A_DDR
    // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001]
  vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
    jmp vicSelectGfxBank1_toDd001
    // main::vicSelectGfxBank1_toDd001
  vicSelectGfxBank1_toDd001:
    jmp vicSelectGfxBank1___b1
    // main::vicSelectGfxBank1_@1
  vicSelectGfxBank1___b1:
    // [12] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank1_toDd001_return
    sta CIA2_PORT_A
    // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181]
  toD0181_from_vicSelectGfxBank1___b1:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp __b9
    // main::@9
  __b9:
    // [14] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [15] call memset 
    // [103] phi from main::@9 to memset [phi:main::@9->memset]
  memset_from___b9:
    jsr memset
    // [16] phi from main::@9 to main::@1 [phi:main::@9->main::@1]
  __b1_from___b9:
    // [16] phi (signed word) main::rowOffsetY#10 = (signed word) $100 [phi:main::@9->main::@1#0] -- vwsz1=vwsc1 
    lda #<$100
    sta.z rowOffsetY
    lda #>$100
    sta.z rowOffsetY+1
    // [16] phi (signed word) main::origX#8 = (signed word) $a00 [phi:main::@9->main::@1#1] -- vwsz1=vwsc1 
    lda #<$a00
    sta.z origX
    lda #>$a00
    sta.z origX+1
    jmp __b1
  // Render Grid of BOBs
    // main::@1
  __b1:
    jmp __b2
    // main::@2
  __b2:
    // [17] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 
    lda RASTER
    cmp #$f8
    bcc __b2
    jmp __b3
    // main::@3
  __b3:
    // [18] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 
    lda #$f
    sta BORDERCOL
    // [19] call renderBobCleanup 
    // [87] phi from main::@3 to renderBobCleanup [phi:main::@3->renderBobCleanup]
  renderBobCleanup_from___b3:
    jsr renderBobCleanup
    jmp __b13
    // main::@13
  __b13:
    // [20] (signed word) main::x#4 ← (signed word) main::origX#8 -- vwsz1=vwsz2 
    lda.z origX
    sta.z x
    lda.z origX+1
    sta.z x+1
    // [21] phi from main::@13 to main::@4 [phi:main::@13->main::@4]
  __b4_from___b13:
    // [21] phi (byte) main::col#5 = (byte) 0 [phi:main::@13->main::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z col
    // [21] phi (byte**) renderBobCleanupNext#21 = (const byte**) RENDERBOB_CLEANUP [phi:main::@13->main::@4#1] -- pptz1=pptc1 
    lda #<RENDERBOB_CLEANUP
    sta.z renderBobCleanupNext
    lda #>RENDERBOB_CLEANUP
    sta.z renderBobCleanupNext+1
    // [21] phi (signed word) main::y#0 = (const signed word) main::origY [phi:main::@13->main::@4#2] -- vwsz1=vwsc1 
    lda #<origY
    sta.z y
    lda #>origY
    sta.z y+1
    // [21] phi (signed word) main::x#0 = (signed word) main::x#4 [phi:main::@13->main::@4#3] -- register_copy 
    jmp __b4
    // [21] phi from main::@6 to main::@4 [phi:main::@6->main::@4]
  __b4_from___b6:
    // [21] phi (byte) main::col#5 = (byte) main::col#1 [phi:main::@6->main::@4#0] -- register_copy 
    // [21] phi (byte**) renderBobCleanupNext#21 = (byte**) renderBobCleanupNext#13 [phi:main::@6->main::@4#1] -- register_copy 
    // [21] phi (signed word) main::y#0 = (signed word) main::rowY#1 [phi:main::@6->main::@4#2] -- register_copy 
    // [21] phi (signed word) main::x#0 = (signed word) main::rowX#1 [phi:main::@6->main::@4#3] -- register_copy 
    jmp __b4
    // main::@4
  __b4:
    // [22] (signed word) main::x#7 ← (signed word) main::x#0 -- vwsz1=vwsz2 
    lda.z x
    sta.z x_1
    lda.z x+1
    sta.z x_1+1
    // [23] (signed word) main::y#6 ← (signed word) main::y#0 -- vwsz1=vwsz2 
    lda.z y
    sta.z y_1
    lda.z y+1
    sta.z y_1+1
    // [24] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
  __b5_from___b4:
    // [24] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#0] -- vbuxx=vbuc1 
    ldx #0
    // [24] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#21 [phi:main::@4->main::@5#1] -- register_copy 
    // [24] phi (signed word) main::y#2 = (signed word) main::y#6 [phi:main::@4->main::@5#2] -- register_copy 
    // [24] phi (signed word) main::x#2 = (signed word) main::x#7 [phi:main::@4->main::@5#3] -- register_copy 
    jmp __b5
    // [24] phi from main::@14 to main::@5 [phi:main::@14->main::@5]
  __b5_from___b14:
    // [24] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@14->main::@5#0] -- register_copy 
    // [24] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#13 [phi:main::@14->main::@5#1] -- register_copy 
    // [24] phi (signed word) main::y#2 = (signed word) main::y#1 [phi:main::@14->main::@5#2] -- register_copy 
    // [24] phi (signed word) main::x#2 = (signed word) main::x#1 [phi:main::@14->main::@5#3] -- register_copy 
    jmp __b5
    // main::@5
  __b5:
    // [25] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 
    //kickasm {{ .break }}
    lda #1
    sta BORDERCOL
    // [26] (byte) renderBob::xpos#0 ← > (signed word) main::x#2 -- vbuz1=_hi_vwsz2 
    lda.z x_1+1
    sta.z renderBob.xpos
    // [27] (byte) renderBob::ypos#0 ← > (signed word) main::y#2 -- vbuz1=_hi_vwsz2 
    lda.z y_1+1
    sta.z renderBob.ypos
    // [28] call renderBob 
    jsr renderBob
    jmp __b14
    // main::@14
  __b14:
    // [29] (signed word) main::x#1 ← (signed word) main::x#2 + (const signed word) main::rowOffsetX -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z x_1
    adc #<rowOffsetX
    sta.z x_1
    lda.z x_1+1
    adc #>rowOffsetX
    sta.z x_1+1
    // [30] (signed word) main::y#1 ← (signed word) main::y#2 + (signed word) main::rowOffsetY#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z y_1
    clc
    adc.z rowOffsetY
    sta.z y_1
    lda.z y_1+1
    adc.z rowOffsetY+1
    sta.z y_1+1
    // [31] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 
    lda #2
    sta BORDERCOL
    // [32] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuxx=_inc_vbuxx 
    inx
    // [33] if((byte) main::row#1!=(byte) 5) goto main::@5 -- vbuxx_neq_vbuc1_then_la1 
    cpx #5
    bne __b5_from___b14
    jmp __b6
    // main::@6
  __b6:
    // [34] (signed word) main::rowX#1 ← (signed word) main::x#0 + (const signed word) main::colOffsetX -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowX
    adc #<colOffsetX
    sta.z rowX
    lda.z rowX+1
    adc #>colOffsetX
    sta.z rowX+1
    // [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const signed word) main::colOffsetY -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowY
    adc #<colOffsetY
    sta.z rowY
    lda.z rowY+1
    adc #>colOffsetY
    sta.z rowY+1
    // [36] (byte) main::col#1 ← ++ (byte) main::col#5 -- vbuz1=_inc_vbuz1 
    inc.z col
    // [37] if((byte) main::col#1!=(byte) 5) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 
    lda #5
    cmp.z col
    bne __b4_from___b6
    jmp __b7
    // main::@7
  __b7:
    // [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z origX
    adc #<$100
    sta.z origX
    lda.z origX+1
    adc #>$100
    sta.z origX+1
    // [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowOffsetY
    adc #<$80
    sta.z rowOffsetY
    lda.z rowOffsetY+1
    adc #>$80
    sta.z rowOffsetY+1
    // [40] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta BORDERCOL
    // [41] call keyboard_key_pressed 
    // [56] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
  keyboard_key_pressed_from___b7:
    jsr keyboard_key_pressed
    // [42] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0
    jmp __b15
    // main::@15
  __b15:
    // [43] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2
    // [44] if((byte) 0!=(byte~) main::$15) goto main::@8 -- vbuc1_neq_vbuaa_then_la1 
    cmp #0
    bne __b8_from___b15
    // [16] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
  __b1_from___b15:
    // [16] phi (signed word) main::rowOffsetY#10 = (signed word) main::rowOffsetY#1 [phi:main::@15->main::@1#0] -- register_copy 
    // [16] phi (signed word) main::origX#8 = (signed word) main::origX#1 [phi:main::@15->main::@1#1] -- register_copy 
    jmp __b1
  // Wait for space release
    // [45] phi from main::@15 main::@16 to main::@8 [phi:main::@15/main::@16->main::@8]
  __b8_from___b15:
  __b8_from___b16:
    jmp __b8
    // main::@8
  __b8:
    // [46] call keyboard_key_pressed 
    // [56] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
  keyboard_key_pressed_from___b8:
    jsr keyboard_key_pressed
    // [47] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0
    jmp __b16
    // main::@16
  __b16:
    // [48] (byte~) main::$17 ← (byte) keyboard_key_pressed::return#3
    // [49] if((byte) 0!=(byte~) main::$17) goto main::@8 -- vbuc1_neq_vbuaa_then_la1 
    cmp #0
    bne __b8_from___b16
    jmp vicSelectGfxBank2
    // main::vicSelectGfxBank2
  vicSelectGfxBank2:
    // [50] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2_PORT_A_DDR
    // [51] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001]
  vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2:
    jmp vicSelectGfxBank2_toDd001
    // main::vicSelectGfxBank2_toDd001
  vicSelectGfxBank2_toDd001:
    jmp vicSelectGfxBank2___b1
    // main::vicSelectGfxBank2_@1
  vicSelectGfxBank2___b1:
    // [52] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank2_toDd001_return
    sta CIA2_PORT_A
    // [53] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182]
  toD0182_from_vicSelectGfxBank2___b1:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp __b10
    // main::@10
  __b10:
    // [54] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    jmp __breturn
    // main::@return
  __breturn:
    // [55] return 
    rts
}
  // keyboard_key_pressed
// Determines whether a specific key is currently pressed by accessing the matrix directly
// The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7)
// All keys exist as as KEY_XXX constants.
// Returns zero if the key is not pressed and a non-zero value if the key is currently pressed
keyboard_key_pressed: {
    .const colidx = KEY_SPACE&7
    .label rowidx = KEY_SPACE>>3
    // [57] call keyboard_matrix_read 
    jsr keyboard_matrix_read
    // [58] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
    jmp __b1
    // keyboard_key_pressed::@1
  __b1:
    // [59] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
    // [60] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 
    and keyboard_matrix_col_bitmask+colidx
    jmp __breturn
    // keyboard_key_pressed::@return
  __breturn:
    // [61] return 
    rts
}
  // keyboard_matrix_read
// Read a single row of the keyboard matrix
// The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs.
// Returns the keys pressed on the row as bits according to the C64 key matrix.
// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write
// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
keyboard_matrix_read: {
    // [62] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 
    lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx
    sta CIA1_PORT_A
    // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 
    lda CIA1_PORT_B
    eor #$ff
    jmp __breturn
    // keyboard_matrix_read::@return
  __breturn:
    // [64] return 
    rts
}
  // renderBob
// Render a single BOB at a given x/y-position
// X-position is 0-151. Each x-position is 2 pixels wide.
// Y-position is 0-183. Each y-position is 1 pixel high.
// renderBob(byte zp($d) xpos, byte zp($e) ypos)
renderBob: {
    .label __2 = $10
    .label __5 = $12
    .label xpos = $d
    .label ypos = $e
    .label x_char_offset = $f
    .label y_offset = $10
    .label screen = $10
    .label bob_table_idx = $12
    // [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 
    lda.z xpos
    lsr
    lsr
    sta.z x_char_offset
    // [66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    // [67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [68] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuaa 
    tay
    lda MUL40,y
    sta.z y_offset
    lda MUL40+1,y
    sta.z y_offset+1
    // [69] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z __2
    adc #<BOB_SCREEN
    sta.z __2
    lda.z __2+1
    adc #>BOB_SCREEN
    sta.z __2+1
    // [70] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 
    lda.z x_char_offset
    clc
    adc.z screen
    sta.z screen
    bcc !+
    inc.z screen+1
  !:
    // [71] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuaa=vbuz1_band_vbuc1 
    lda #7
    and.z ypos
    // [72] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuaa_rol_2 
    asl
    asl
    sta.z __5
    // [73] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 
    lda #3
    and.z xpos
    // [74] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuz1=vbuz1_plus_vbuaa 
    clc
    adc.z bob_table_idx
    sta.z bob_table_idx
    // [75] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 -- _deref_pptz1=pbuz2 
    ldy #0
    lda.z screen
    sta (renderBobCleanupNext),y
    iny
    lda.z screen+1
    sta (renderBobCleanupNext),y
    // [76] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER -- pptz1=pptz1_plus_vbuc1 
    lda #SIZEOF_POINTER
    clc
    adc.z renderBobCleanupNext
    sta.z renderBobCleanupNext
    bcc !+
    inc.z renderBobCleanupNext+1
  !:
    // [77] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES,y
    ldy #0
    sta (screen),y
    // [78] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y
    ldy #$28
    sta (screen),y
    // [79] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y
    ldy #$50
    sta (screen),y
    // [80] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y
    ldy #1
    sta (screen),y
    // [81] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y
    ldy #$29
    sta (screen),y
    // [82] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y
    ldy #$51
    sta (screen),y
    // [83] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y
    ldy #2
    sta (screen),y
    // [84] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y
    ldy #$2a
    sta (screen),y
    // [85] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y
    ldy #$52
    sta (screen),y
    jmp __breturn
    // renderBob::@return
  __breturn:
    // [86] return 
    rts
}
  // renderBobCleanup
// Clean Up the rendered BOB's
renderBobCleanup: {
    .label screen = $13
    // [88] phi from renderBobCleanup to renderBobCleanup::@1 [phi:renderBobCleanup->renderBobCleanup::@1]
  __b1_from_renderBobCleanup:
    // [88] phi (byte) renderBobCleanup::i#2 = (byte) 0 [phi:renderBobCleanup->renderBobCleanup::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp __b1
    // [88] phi from renderBobCleanup::@1 to renderBobCleanup::@1 [phi:renderBobCleanup::@1->renderBobCleanup::@1]
  __b1_from___b1:
    // [88] phi (byte) renderBobCleanup::i#2 = (byte) renderBobCleanup::i#1 [phi:renderBobCleanup::@1->renderBobCleanup::@1#0] -- register_copy 
    jmp __b1
    // renderBobCleanup::@1
  __b1:
    // [89] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [90] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) -- pbuz1=pptc1_derefidx_vbuaa 
    tay
    lda RENDERBOB_CLEANUP,y
    sta.z screen
    lda RENDERBOB_CLEANUP+1,y
    sta.z screen+1
    // [91] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (screen),y
    // [92] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$28
    sta (screen),y
    // [93] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$50
    sta (screen),y
    // [94] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #1
    sta (screen),y
    // [95] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$29
    sta (screen),y
    // [96] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$51
    sta (screen),y
    // [97] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #2
    sta (screen),y
    // [98] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$2a
    sta (screen),y
    // [99] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #0
    ldy #$52
    sta (screen),y
    // [100] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [101] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #NUM_BOBS-1+1
    bne __b1_from___b1
    jmp __breturn
    // renderBobCleanup::@return
  __breturn:
    // [102] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .label str = BOB_SCREEN
    .const c = 0
    .const num = $3e8
    .label end = str+num
    .label dst = $15
    // [104] phi from memset to memset::@1 [phi:memset->memset::@1]
  __b1_from_memset:
    // [104] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta.z dst
    lda #>str
    sta.z dst+1
    jmp __b1
    // memset::@1
  __b1:
    // [105] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z dst+1
    cmp #>end
    bne __b2
    lda.z dst
    cmp #<end
    bne __b2
    jmp __breturn
    // memset::@return
  __breturn:
    // [106] return 
    rts
    // memset::@2
  __b2:
    // [107] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [108] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    // [104] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
  __b1_from___b2:
    // [104] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy 
    jmp __b1
}
  // renderBobInit
// Initialize the tables used by renderBob()
renderBobInit: {
    .label __0 = $15
    .label __1 = $15
    .label __6 = $17
    .label __7 = $15
    // [110] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1]
  __b1_from_renderBobInit:
    // [110] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp __b1
    // [110] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1]
  __b1_from___b1:
    // [110] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy 
    jmp __b1
    // renderBobInit::@1
  __b1:
    // [111] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuxx 
    txa
    sta.z __0
    lda #0
    sta.z __0+1
    // [112] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z __0
    asl
    sta.z __6
    lda.z __0+1
    rol
    sta.z __6+1
    asl.z __6
    rol.z __6+1
    // [113] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z __7
    clc
    adc.z __6
    sta.z __7
    lda.z __7+1
    adc.z __6+1
    sta.z __7+1
    // [114] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (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
    // [115] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [116] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuaa=vwuz1 
    tay
    lda.z __1
    sta MUL40,y
    lda.z __1+1
    sta MUL40+1,y
    // [117] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuxx=_inc_vbuxx 
    inx
    // [118] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$20
    bne __b1_from___b1
    // [119] phi from renderBobInit::@1 to renderBobInit::@2 [phi:renderBobInit::@1->renderBobInit::@2]
  __b2_from___b1:
    // [119] phi (byte) renderBobInit::i#2 = (byte) 0 [phi:renderBobInit::@1->renderBobInit::@2#0] -- vbuxx=vbuc1 
    ldx #0
    jmp __b2
    // [119] phi from renderBobInit::@2 to renderBobInit::@2 [phi:renderBobInit::@2->renderBobInit::@2]
  __b2_from___b2:
    // [119] phi (byte) renderBobInit::i#2 = (byte) renderBobInit::i#1 [phi:renderBobInit::@2->renderBobInit::@2#0] -- register_copy 
    jmp __b2
    // renderBobInit::@2
  __b2:
    // [120] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [121] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN -- pptc1_derefidx_vbuaa=pbuc2 
    tay
    lda #<BOB_SCREEN
    sta RENDERBOB_CLEANUP,y
    lda #>BOB_SCREEN
    sta RENDERBOB_CLEANUP+1,y
    // [122] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [123] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #NUM_BOBS-1+1
    bne __b2_from___b2
    jmp __breturn
    // renderBobInit::@return
  __breturn:
    // [124] return 
    rts
}
  // prepareBobs
// Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES
// Modifies PROTO_BOB by shifting it around
prepareBobs: {
    .label bob_table = 3
    .label shift_y = 2
    // Populate charset and tables
    .label bob_glyph = $13
    .label cell = $12
    .label bob_table_idx = $c
    .label shift_x = $d
    // [126] call progress_init 
    // [207] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init]
  progress_init_from_prepareBobs:
    jsr progress_init
    // [127] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8]
  __b8_from_prepareBobs:
    jmp __b8
    // prepareBobs::@8
  __b8:
    // [128] call charsetFindOrAddGlyph 
    // [161] phi from prepareBobs::@8 to charsetFindOrAddGlyph [phi:prepareBobs::@8->charsetFindOrAddGlyph]
  charsetFindOrAddGlyph_from___b8:
    // [161] phi (byte*) charsetFindOrAddGlyph::glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->charsetFindOrAddGlyph#0] -- pbuz1=pbuc1 
    lda #<PROTO_BOB+$30
    sta.z charsetFindOrAddGlyph.glyph
    lda #>PROTO_BOB+$30
    sta.z charsetFindOrAddGlyph.glyph+1
    // [161] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->charsetFindOrAddGlyph#1] -- vbuz1=vbuc1 
    lda #0
    sta.z bob_charset_next_id
    jsr charsetFindOrAddGlyph
    // [129] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1]
  __b1_from___b8:
    // [129] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z bob_table_idx
    // [129] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy 
    // [129] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z progress_idx
    // [129] phi (byte*) progress_cursor#15 = (const byte*) BASIC_SCREEN [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 
    lda #<BASIC_SCREEN
    sta.z progress_cursor
    lda #>BASIC_SCREEN
    sta.z progress_cursor+1
    // [129] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 
    lda #0
    sta.z shift_y
    jmp __b1
    // prepareBobs::@1
  __b1:
    // [130] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z shift_y
    cmp #BOB_SHIFTS_Y
    bcc __b2_from___b1
    jmp __breturn
    // prepareBobs::@return
  __breturn:
    // [131] return 
    rts
    // [132] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2]
  __b2_from___b1:
    // [132] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy 
    // [132] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy 
    // [132] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy 
    // [132] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy 
    // [132] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 
    lda #0
    sta.z shift_x
    jmp __b2
    // prepareBobs::@2
  __b2:
    // [133] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z shift_x
    cmp #BOB_SHIFTS_X
    bcc __b3
    // [134] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4]
  __b4_from___b2:
    jmp __b4
    // prepareBobs::@4
  __b4:
    // [135] call protoBobShiftDown 
    // [196] phi from prepareBobs::@4 to protoBobShiftDown [phi:prepareBobs::@4->protoBobShiftDown]
  protoBobShiftDown_from___b4:
    jsr protoBobShiftDown
    jmp __b9
    // prepareBobs::@9
  __b9:
    // [136] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 
    inc.z shift_y
    // [129] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1]
  __b1_from___b9:
    // [129] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy 
    // [129] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy 
    // [129] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy 
    // [129] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy 
    // [129] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy 
    jmp __b1
    // prepareBobs::@3
  __b3:
    // [137] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z bob_table_idx
    clc
    adc #<BOB_TABLES
    sta.z bob_table
    lda #>BOB_TABLES
    adc #0
    sta.z bob_table+1
    // [138] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5]
  __b5_from___b3:
    // [138] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy 
    // [138] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy 
    // [138] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 
    lda #<PROTO_BOB
    sta.z bob_glyph
    lda #>PROTO_BOB
    sta.z bob_glyph+1
    // [138] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 
    lda #0
    sta.z cell
    jmp __b5
    // prepareBobs::@5
  __b5:
    // [139] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z cell
    cmp #9
    bcc __b6
    jmp __b7
    // prepareBobs::@7
  __b7:
    // [140] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 
    inc.z bob_table_idx
    // [141] call protoBobShiftRight 
    // [179] phi from prepareBobs::@7 to protoBobShiftRight [phi:prepareBobs::@7->protoBobShiftRight]
  protoBobShiftRight_from___b7:
    jsr protoBobShiftRight
    // [142] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12]
  __b12_from___b7:
    jmp __b12
    // prepareBobs::@12
  __b12:
    // [143] call protoBobShiftRight 
    // [179] phi from prepareBobs::@12 to protoBobShiftRight [phi:prepareBobs::@12->protoBobShiftRight]
  protoBobShiftRight_from___b12:
    jsr protoBobShiftRight
    jmp __b13
    // prepareBobs::@13
  __b13:
    // [144] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 
    inc.z shift_x
    // [132] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2]
  __b2_from___b13:
    // [132] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy 
    // [132] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy 
    // [132] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy 
    // [132] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy 
    // [132] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy 
    jmp __b2
    // prepareBobs::@6
  __b6:
    // [145] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2
    // [146] call charsetFindOrAddGlyph 
    // [161] phi from prepareBobs::@6 to charsetFindOrAddGlyph [phi:prepareBobs::@6->charsetFindOrAddGlyph]
  charsetFindOrAddGlyph_from___b6:
    // [161] phi (byte*) charsetFindOrAddGlyph::glyph#10 = (byte*) charsetFindOrAddGlyph::glyph#1 [phi:prepareBobs::@6->charsetFindOrAddGlyph#0] -- register_copy 
    // [161] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->charsetFindOrAddGlyph#1] -- register_copy 
    jsr charsetFindOrAddGlyph
    // [147] (byte) charsetFindOrAddGlyph::return#1 ← (byte) charsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuxx 
    txa
    jmp __b10
    // prepareBobs::@10
  __b10:
    // [148] (byte~) prepareBobs::$6 ← (byte) charsetFindOrAddGlyph::return#1
    // [149] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuaa 
    // Look for an existing char in BOB_CHARSET 
    ldy #0
    sta (bob_table),y
    // [150] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    // Move to the next glyph
    lda #8
    clc
    adc.z bob_glyph
    sta.z bob_glyph
    bcc !+
    inc.z bob_glyph+1
  !:
    // [151] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 
    // Move to the next sub-table
    lda #BOB_SHIFTS_X*BOB_SHIFTS_Y
    clc
    adc.z bob_table
    sta.z bob_table
    bcc !+
    inc.z bob_table+1
  !:
    // [152] call progress_inc 
    jsr progress_inc
    jmp __b11
    // prepareBobs::@11
  __b11:
    // [153] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 
    inc.z cell
    // [138] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5]
  __b5_from___b11:
    // [138] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy 
    // [138] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy 
    // [138] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy 
    // [138] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy 
    jmp __b5
}
  // progress_inc
// Increase PETSCII progress one bit
// Done by increasing the character until the idx is 8 and then moving to the next char
progress_inc: {
    // [154] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 
    inc.z progress_idx
    // [155] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #8
    cmp.z progress_idx
    bne __b1_from_progress_inc
    jmp __b2
    // progress_inc::@2
  __b2:
    // [156] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 
    lda progress_chars+8
    ldy #0
    sta (progress_cursor),y
    // [157] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 
    inc.z progress_cursor
    bne !+
    inc.z progress_cursor+1
  !:
    // [158] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1]
  __b1_from___b2:
    // [158] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy 
    // [158] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z progress_idx
    jmp __b1
    // [158] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1]
  __b1_from_progress_inc:
    // [158] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy 
    // [158] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy 
    jmp __b1
    // progress_inc::@1
  __b1:
    // [159] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z progress_idx
    lda progress_chars,y
    ldy #0
    sta (progress_cursor),y
    jmp __breturn
    // progress_inc::@return
  __breturn:
    // [160] return 
    rts
    // Progress characters
    progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0
}
  // charsetFindOrAddGlyph
// Looks through a charset to find a glyph if present. If not present it is added.
// Returns the glyph ID
// charsetFindOrAddGlyph(byte* zp($13) glyph)
charsetFindOrAddGlyph: {
    .label glyph = $13
    .label glyph_cursor = 5
    // [162] phi from charsetFindOrAddGlyph to charsetFindOrAddGlyph::@1 [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1]
  __b1_from_charsetFindOrAddGlyph:
    // [162] phi (byte*) charsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 
    lda #<BOB_CHARSET
    sta.z glyph_cursor
    lda #>BOB_CHARSET
    sta.z glyph_cursor+1
    // [162] phi (byte) charsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1#1] -- vbuxx=vbuc1 
    ldx #0
    jmp __b1
    // charsetFindOrAddGlyph::@1
  __b1:
    // [163] if((byte) charsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto charsetFindOrAddGlyph::@2 -- vbuxx_neq_vbuz1_then_la1 
    cpx.z bob_charset_next_id
    bne __b2_from___b1
    // [164] phi from charsetFindOrAddGlyph::@1 to charsetFindOrAddGlyph::@7 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@7]
  __b7_from___b1:
    // [164] phi (byte) charsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 
    ldy #0
    jmp __b7
  // Not found - add it
    // charsetFindOrAddGlyph::@7
  __b7:
    // [165] if((byte) charsetFindOrAddGlyph::i1#2<(byte) 8) goto charsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 
    cpy #8
    bcc __b8
    jmp __b9
    // charsetFindOrAddGlyph::@9
  __b9:
    // [166] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 
    inc.z bob_charset_next_id
    // [167] phi from charsetFindOrAddGlyph::@5 charsetFindOrAddGlyph::@9 to charsetFindOrAddGlyph::@return [phi:charsetFindOrAddGlyph::@5/charsetFindOrAddGlyph::@9->charsetFindOrAddGlyph::@return]
  __breturn_from___b5:
  __breturn_from___b9:
    // [167] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:charsetFindOrAddGlyph::@5/charsetFindOrAddGlyph::@9->charsetFindOrAddGlyph::@return#0] -- register_copy 
    jmp __breturn
    // charsetFindOrAddGlyph::@return
  __breturn:
    // [168] return 
    rts
    // charsetFindOrAddGlyph::@8
  __b8:
    // [169] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy 
    lda (glyph),y
    sta (glyph_cursor),y
    // [170] (byte) charsetFindOrAddGlyph::i1#1 ← ++ (byte) charsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy 
    iny
    // [164] phi from charsetFindOrAddGlyph::@8 to charsetFindOrAddGlyph::@7 [phi:charsetFindOrAddGlyph::@8->charsetFindOrAddGlyph::@7]
  __b7_from___b8:
    // [164] phi (byte) charsetFindOrAddGlyph::i1#2 = (byte) charsetFindOrAddGlyph::i1#1 [phi:charsetFindOrAddGlyph::@8->charsetFindOrAddGlyph::@7#0] -- register_copy 
    jmp __b7
    // [171] phi from charsetFindOrAddGlyph::@1 to charsetFindOrAddGlyph::@2 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@2]
  __b2_from___b1:
    // [171] phi (byte) charsetFindOrAddGlyph::i#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@2#0] -- vbuyy=vbuc1 
    ldy #0
    jmp __b2
    // charsetFindOrAddGlyph::@2
  __b2:
    // [172] if((byte) charsetFindOrAddGlyph::i#2<(byte) 8) goto charsetFindOrAddGlyph::@3 -- vbuyy_lt_vbuc1_then_la1 
    cpy #8
    bcc __b3
    // [174] phi from charsetFindOrAddGlyph::@2 to charsetFindOrAddGlyph::@5 [phi:charsetFindOrAddGlyph::@2->charsetFindOrAddGlyph::@5]
  __b5_from___b2:
    // [174] phi (byte) charsetFindOrAddGlyph::found#2 = (byte) 1 [phi:charsetFindOrAddGlyph::@2->charsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 
    lda #1
    jmp __b5
    // charsetFindOrAddGlyph::@3
  __b3:
    // [173] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuyy_eq_pbuz2_derefidx_vbuyy_then_la1 
    lda (glyph_cursor),y
    cmp (glyph),y
    beq __b4
    // [174] phi from charsetFindOrAddGlyph::@3 to charsetFindOrAddGlyph::@5 [phi:charsetFindOrAddGlyph::@3->charsetFindOrAddGlyph::@5]
  __b5_from___b3:
    // [174] phi (byte) charsetFindOrAddGlyph::found#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@3->charsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 
    lda #0
    jmp __b5
    // charsetFindOrAddGlyph::@5
  __b5:
    // [175] if((byte) 0==(byte) charsetFindOrAddGlyph::found#2) goto charsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 
    cmp #0
    beq __b6
    jmp __breturn_from___b5
    // charsetFindOrAddGlyph::@6
  __b6:
    // [176] (byte) charsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) charsetFindOrAddGlyph::glyph_id#11 -- vbuxx=_inc_vbuxx 
    inx
    // [177] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    lda #8
    clc
    adc.z glyph_cursor
    sta.z glyph_cursor
    bcc !+
    inc.z glyph_cursor+1
  !:
    // [162] phi from charsetFindOrAddGlyph::@6 to charsetFindOrAddGlyph::@1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1]
  __b1_from___b6:
    // [162] phi (byte*) charsetFindOrAddGlyph::glyph_cursor#11 = (byte*) charsetFindOrAddGlyph::glyph_cursor#1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1#0] -- register_copy 
    // [162] phi (byte) charsetFindOrAddGlyph::glyph_id#11 = (byte) charsetFindOrAddGlyph::glyph_id#1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1#1] -- register_copy 
    jmp __b1
    // charsetFindOrAddGlyph::@4
  __b4:
    // [178] (byte) charsetFindOrAddGlyph::i#1 ← ++ (byte) charsetFindOrAddGlyph::i#2 -- vbuyy=_inc_vbuyy 
    iny
    // [171] phi from charsetFindOrAddGlyph::@4 to charsetFindOrAddGlyph::@2 [phi:charsetFindOrAddGlyph::@4->charsetFindOrAddGlyph::@2]
  __b2_from___b4:
    // [171] phi (byte) charsetFindOrAddGlyph::i#2 = (byte) charsetFindOrAddGlyph::i#1 [phi:charsetFindOrAddGlyph::@4->charsetFindOrAddGlyph::@2#0] -- register_copy 
    jmp __b2
}
  // protoBobShiftRight
// Shift PROTO_BOB right one X pixel
protoBobShiftRight: {
    .label carry = $f
    .label i = $12
    // [180] phi from protoBobShiftRight to protoBobShiftRight::@1 [phi:protoBobShiftRight->protoBobShiftRight::@1]
  __b1_from_protoBobShiftRight:
    // [180] phi (byte) protoBobShiftRight::carry#2 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#0] -- vbuyy=vbuc1 
    ldy #0
    // [180] phi (byte) protoBobShiftRight::j#3 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#1] -- vbuxx=vbuc1 
    ldx #0
    // [180] phi (byte) protoBobShiftRight::i#2 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // protoBobShiftRight::@1
  __b1:
    // [181] if((byte) protoBobShiftRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto protoBobShiftRight::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #3*3*8
    bcc __b2
    jmp __breturn
    // protoBobShiftRight::@return
  __breturn:
    // [182] return 
    rts
    // protoBobShiftRight::@2
  __b2:
    // [183] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 
    lda #1
    and PROTO_BOB,x
    // [184] if((byte) 0!=(byte~) protoBobShiftRight::$1) goto protoBobShiftRight::@3 -- vbuc1_neq_vbuaa_then_la1 
    cmp #0
    bne __b3_from___b2
    // [186] phi from protoBobShiftRight::@2 to protoBobShiftRight::@4 [phi:protoBobShiftRight::@2->protoBobShiftRight::@4]
  __b4_from___b2:
    // [186] phi (byte) protoBobShiftRight::carry#1 = (byte) 0 [phi:protoBobShiftRight::@2->protoBobShiftRight::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z carry
    jmp __b4
    // [185] phi from protoBobShiftRight::@2 to protoBobShiftRight::@3 [phi:protoBobShiftRight::@2->protoBobShiftRight::@3]
  __b3_from___b2:
    jmp __b3
    // protoBobShiftRight::@3
  __b3:
    // [186] phi from protoBobShiftRight::@3 to protoBobShiftRight::@4 [phi:protoBobShiftRight::@3->protoBobShiftRight::@4]
  __b4_from___b3:
    // [186] phi (byte) protoBobShiftRight::carry#1 = (byte) $80 [phi:protoBobShiftRight::@3->protoBobShiftRight::@4#0] -- vbuz1=vbuc1 
    lda #$80
    sta.z carry
    jmp __b4
    // protoBobShiftRight::@4
  __b4:
    // [187] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 
    lda PROTO_BOB,x
    lsr
    // [188] (byte~) protoBobShiftRight::$6 ← (byte) protoBobShiftRight::carry#2 | (byte~) protoBobShiftRight::$5 -- vbuaa=vbuyy_bor_vbuaa 
    sty.z $ff
    ora.z $ff
    // [189] *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) ← (byte~) protoBobShiftRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa 
    // Shift value and add old carry
    sta PROTO_BOB,x
    // [190] if((byte) protoBobShiftRight::j#3>=(byte) $30) goto protoBobShiftRight::@5 -- vbuxx_ge_vbuc1_then_la1 
    // Increment j to iterate over the PROTO_BOB left-to-right, top-to-bottom (0, 24, 48, 1, 25, 49, ...)
    cpx #$30
    bcs __b5
    jmp __b7
    // protoBobShiftRight::@7
  __b7:
    // [191] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 
    txa
    axs #-[$18]
    // [192] phi from protoBobShiftRight::@5 protoBobShiftRight::@7 to protoBobShiftRight::@6 [phi:protoBobShiftRight::@5/protoBobShiftRight::@7->protoBobShiftRight::@6]
  __b6_from___b5:
  __b6_from___b7:
    // [192] phi (byte) protoBobShiftRight::j#10 = (byte) protoBobShiftRight::j#1 [phi:protoBobShiftRight::@5/protoBobShiftRight::@7->protoBobShiftRight::@6#0] -- register_copy 
    jmp __b6
    // protoBobShiftRight::@6
  __b6:
    // [193] (byte) protoBobShiftRight::i#1 ← ++ (byte) protoBobShiftRight::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [194] (byte) protoBobShiftRight::carry#10 ← (byte) protoBobShiftRight::carry#1 -- vbuyy=vbuz1 
    ldy.z carry
    // [180] phi from protoBobShiftRight::@6 to protoBobShiftRight::@1 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1]
  __b1_from___b6:
    // [180] phi (byte) protoBobShiftRight::carry#2 = (byte) protoBobShiftRight::carry#10 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#0] -- register_copy 
    // [180] phi (byte) protoBobShiftRight::j#3 = (byte) protoBobShiftRight::j#10 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#1] -- register_copy 
    // [180] phi (byte) protoBobShiftRight::i#2 = (byte) protoBobShiftRight::i#1 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#2] -- register_copy 
    jmp __b1
    // protoBobShiftRight::@5
  __b5:
    // [195] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 
    txa
    axs #$2f
    jmp __b6_from___b5
}
  // protoBobShiftDown
// Shift PROTO_BOB down one Y pixel
// At the same time restore PROTO_BOB X by shifting 8 pixels left
protoBobShiftDown: {
    // [197] phi from protoBobShiftDown to protoBobShiftDown::@1 [phi:protoBobShiftDown->protoBobShiftDown::@1]
  __b1_from_protoBobShiftDown:
    // [197] phi (byte) protoBobShiftDown::i#2 = (byte) $17 [phi:protoBobShiftDown->protoBobShiftDown::@1#0] -- vbuxx=vbuc1 
    ldx #$17
    jmp __b1
    // protoBobShiftDown::@1
  __b1:
    // [198] if((byte) protoBobShiftDown::i#2>(byte) 0) goto protoBobShiftDown::@2 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne __b2
    jmp __b3
    // protoBobShiftDown::@3
  __b3:
    // [199] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta PROTO_BOB
    // [200] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta PROTO_BOB+$18
    // [201] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta PROTO_BOB+$30
    jmp __breturn
    // protoBobShiftDown::@return
  __breturn:
    // [202] return 
    rts
    // protoBobShiftDown::@2
  __b2:
    // [203] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx 
    lda PROTO_BOB+$17,x
    sta PROTO_BOB,x
    // [204] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx 
    lda PROTO_BOB+$2f,x
    sta PROTO_BOB+$18,x
    // [205] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROTO_BOB+$30,x
    // [206] (byte) protoBobShiftDown::i#1 ← -- (byte) protoBobShiftDown::i#2 -- vbuxx=_dec_vbuxx 
    dex
    // [197] phi from protoBobShiftDown::@2 to protoBobShiftDown::@1 [phi:protoBobShiftDown::@2->protoBobShiftDown::@1]
  __b1_from___b2:
    // [197] phi (byte) protoBobShiftDown::i#2 = (byte) protoBobShiftDown::i#1 [phi:protoBobShiftDown::@2->protoBobShiftDown::@1#0] -- register_copy 
    jmp __b1
}
  // progress_init
// Initialize the PETSCII progress bar
progress_init: {
    jmp __breturn
    // progress_init::@return
  __breturn:
    // [208] return 
    rts
}
  // mulf_init
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
mulf_init: {
    // x/2
    .label c = 9
    // Counter used for determining x%2==0
    .label sqr1_hi = $a
    // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4
    .label sqr = $15
    .label sqr1_lo = 7
    // Decrease or increase x_255 - initially we decrease
    .label sqr2_hi = $13
    .label sqr2_lo = $10
    //Start with g(0)=f(255)
    .label dir = $c
    // [210] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1]
  __b1_from_mulf_init:
    // [210] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [210] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_hi+1
    sta.z sqr1_hi
    lda #>mulf_sqr1_hi+1
    sta.z sqr1_hi+1
    // [210] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    lda #>0
    sta.z sqr+1
    // [210] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 
    lda #0
    sta.z c
    // [210] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_lo+1
    sta.z sqr1_lo
    lda #>mulf_sqr1_lo+1
    sta.z sqr1_lo+1
    jmp __b1
    // mulf_init::@1
  __b1:
    // [211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z sqr1_lo+1
    cmp #>mulf_sqr1_lo+$200
    bne __b2
    lda.z sqr1_lo
    cmp #<mulf_sqr1_lo+$200
    bne __b2
    // [212] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5]
  __b5_from___b1:
    // [212] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z dir
    // [212] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_hi
    sta.z sqr2_hi
    lda #>mulf_sqr2_hi
    sta.z sqr2_hi+1
    // [212] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 
    ldx #-1
    // [212] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_lo
    sta.z sqr2_lo
    lda #>mulf_sqr2_lo
    sta.z sqr2_lo+1
    jmp __b5
    // mulf_init::@5
  __b5:
    // [213] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 
    lda.z sqr2_lo+1
    cmp #>mulf_sqr2_lo+$1ff
    bne __b6
    lda.z sqr2_lo
    cmp #<mulf_sqr2_lo+$1ff
    bne __b6
    jmp __b7
    // mulf_init::@7
  __b7:
    // [214] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 
    // Set the very last value g(511) = f(256)
    lda mulf_sqr1_lo+$100
    sta mulf_sqr2_lo+$1ff
    // [215] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 
    lda mulf_sqr1_hi+$100
    sta mulf_sqr2_hi+$1ff
    jmp __breturn
    // mulf_init::@return
  __breturn:
    // [216] return 
    rts
    // mulf_init::@6
  __b6:
    // [217] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_lo,x
    ldy #0
    sta (sqr2_lo),y
    // [218] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_hi,x
    ldy #0
    sta (sqr2_hi),y
    // [219] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr2_hi
    bne !+
    inc.z sqr2_hi+1
  !:
    // [220] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 
    txa
    clc
    adc.z dir
    tax
    // [221] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne __b9_from___b6
    // [223] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8]
  __b8_from___b6:
    // [223] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 
    lda #1
    sta.z dir
    jmp __b8
    // [222] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9]
  __b9_from___b6:
    jmp __b9
    // mulf_init::@9
  __b9:
    // [223] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8]
  __b8_from___b9:
    // [223] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy 
    jmp __b8
    // mulf_init::@8
  __b8:
    // [224] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr2_lo
    bne !+
    inc.z sqr2_lo+1
  !:
    // [212] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5]
  __b5_from___b8:
    // [212] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy 
    // [212] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy 
    // [212] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy 
    // [212] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy 
    jmp __b5
    // mulf_init::@2
  __b2:
    // [225] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 
    inc.z c
    // [226] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 
    lda #1
    and.z c
    // [227] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne __b3_from___b2
    jmp __b4
    // mulf_init::@4
  __b4:
    // [228] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx 
    inx
    // [229] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 
    inc.z sqr
    bne !+
    inc.z sqr+1
  !:
    // [230] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3]
  __b3_from___b2:
  __b3_from___b4:
    // [230] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy 
    // [230] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy 
    jmp __b3
    // mulf_init::@3
  __b3:
    // [231] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 
    lda.z sqr
    // [232] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (sqr1_lo),y
    // [233] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 
    lda.z sqr+1
    // [234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (sqr1_hi),y
    // [235] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr1_hi
    bne !+
    inc.z sqr1_hi+1
  !:
    // [236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx 
    txa
    clc
    adc.z sqr
    sta.z sqr
    bcc !+
    inc.z sqr+1
  !:
    // [237] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr1_lo
    bne !+
    inc.z sqr1_lo+1
  !:
    // [210] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1]
  __b1_from___b3:
    // [210] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy 
    // [210] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy 
    // [210] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy 
    // [210] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy 
    // [210] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy 
    jmp __b1
}
  // File Data
  // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7)
  keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f
  // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7)
  keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80
  // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
  // <f(x) = <(( x * x )/4)
  .align $100
  mulf_sqr1_lo: .fill $200, 0
  // >f(x) = >(( x * x )/4)
  .align $100
  mulf_sqr1_hi: .fill $200, 0
  // <g(x) =  <((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_lo: .fill $200, 0
  // >g(x) = >((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_hi: .fill $200, 0
  // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars)
  // The chars are layout as follows with data in chars 0, 1, 3, 4 initially
  //   0 3 6
  //   1 4 7
  //   2 5 8
PROTO_BOB:
.var pic = LoadPicture("smiley.png", List().add($000000, $ffffff))
	.for (var x=0;x<3; x++)
    	.for (var y=0; y<24; y++)
            .byte pic.getSinglecolorByte(x,y)

  // Tables containing the char to use for a specific cell of a shifted BOB.
  // char_id = BOB_TABLES[cell*BOB_SUBTABLE_SIZE + shift_y*BOB_SHIFTS_X + shift_x];
  BOB_TABLES: .fill 9*8*4, 0
  // Table used for deleting rendered BOB's. Contains pointers to first char of each BOB.
  RENDERBOB_CLEANUP: .fill 2*NUM_BOBS, 0
  // *40 Table unsigned int[0x20] MUL40 = { ((unsigned int)i)*40 };
  MUL40: .fill 2*$20, 0

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __bend
Removing instruction jmp __b11
Removing instruction jmp __b12
Removing instruction jmp vicSelectGfxBank1
Removing instruction jmp vicSelectGfxBank1_toDd001
Removing instruction jmp vicSelectGfxBank1___b1
Removing instruction jmp toD0181
Removing instruction jmp __b9
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b13
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b14
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b15
Removing instruction jmp __b8
Removing instruction jmp __b16
Removing instruction jmp vicSelectGfxBank2
Removing instruction jmp vicSelectGfxBank2_toDd001
Removing instruction jmp vicSelectGfxBank2___b1
Removing instruction jmp toD0182
Removing instruction jmp __b10
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b8
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __b9
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __b12
Removing instruction jmp __b13
Removing instruction jmp __b10
Removing instruction jmp __b11
Removing instruction jmp __b2
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b7
Removing instruction jmp __b9
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b7
Removing instruction jmp __b6
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __b4
Removing instruction jmp __b3
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldy #0 with TAY
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction lda #0 with TXA
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction lda #<0 with TXA
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction ldy #0
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __bbegin with __b1
Replacing label __b5_from___b14 with __b5
Replacing label __b4_from___b6 with __b4
Replacing label __b8_from___b15 with __b8
Replacing label __b1 with __b2
Replacing label __b8_from___b16 with __b8
Replacing label __b1_from___b1 with __b1
Replacing label __b1_from___b1 with __b1
Replacing label __b2_from___b2 with __b2
Replacing label __b1_from_progress_inc with __b1
Replacing label __breturn_from___b5 with __breturn
Replacing label __b3_from___b2 with __b3
Replacing label __b6_from___b5 with __b6
Replacing label __b9_from___b6 with __b8
Replacing label __b3_from___b2 with __b3
Removing instruction __bbegin:
Removing instruction __b1_from___bbegin:
Removing instruction main_from___b1:
Removing instruction __bend_from___b1:
Removing instruction __b11_from_main:
Removing instruction prepareBobs_from___b11:
Removing instruction __b12_from___b11:
Removing instruction renderBobInit_from___b12:
Removing instruction vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
Removing instruction vicSelectGfxBank1_toDd001:
Removing instruction toD0181_from_vicSelectGfxBank1___b1:
Removing instruction toD0181:
Removing instruction __b1:
Removing instruction __b4_from___b6:
Removing instruction __b5_from___b14:
Removing instruction __b8_from___b15:
Removing instruction __b8_from___b16:
Removing instruction keyboard_key_pressed_from___b8:
Removing instruction vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2:
Removing instruction vicSelectGfxBank2_toDd001:
Removing instruction toD0182_from_vicSelectGfxBank2___b1:
Removing instruction toD0182:
Removing instruction __b1_from___b1:
Removing instruction __b1_from___b1:
Removing instruction __b2_from___b2:
Removing instruction __b8_from_prepareBobs:
Removing instruction charsetFindOrAddGlyph_from___b8:
Removing instruction __b4_from___b2:
Removing instruction protoBobShiftDown_from___b4:
Removing instruction __b12_from___b7:
Removing instruction protoBobShiftRight_from___b12:
Removing instruction charsetFindOrAddGlyph_from___b6:
Removing instruction __b1_from_progress_inc:
Removing instruction __breturn_from___b5:
Removing instruction __breturn_from___b9:
Removing instruction __b3_from___b2:
Removing instruction __b4_from___b3:
Removing instruction __b6_from___b5:
Removing instruction __b6_from___b7:
Removing instruction __b9_from___b6:
Removing instruction __b9:
Removing instruction __b8_from___b9:
Removing instruction __b3_from___b2:
Removing instruction __b3_from___b4:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __bend:
Removing instruction mulf_init_from_main:
Removing instruction __b11:
Removing instruction __b12:
Removing instruction vicSelectGfxBank1:
Removing instruction vicSelectGfxBank1___b1:
Removing instruction __b9:
Removing instruction memset_from___b9:
Removing instruction __b1_from___b9:
Removing instruction __b3:
Removing instruction renderBobCleanup_from___b3:
Removing instruction __b13:
Removing instruction __b4_from___b13:
Removing instruction __b5_from___b4:
Removing instruction __b14:
Removing instruction __b6:
Removing instruction __b7:
Removing instruction keyboard_key_pressed_from___b7:
Removing instruction __b15:
Removing instruction __b1_from___b15:
Removing instruction __b16:
Removing instruction vicSelectGfxBank2:
Removing instruction vicSelectGfxBank2___b1:
Removing instruction __b10:
Removing instruction __breturn:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __b1_from_renderBobCleanup:
Removing instruction __breturn:
Removing instruction __b1_from_memset:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __b1_from_renderBobInit:
Removing instruction __b2_from___b1:
Removing instruction __breturn:
Removing instruction progress_init_from_prepareBobs:
Removing instruction __b8:
Removing instruction __b1_from___b8:
Removing instruction __breturn:
Removing instruction __b4:
Removing instruction __b9:
Removing instruction __b1_from___b9:
Removing instruction __b5_from___b3:
Removing instruction __b7:
Removing instruction protoBobShiftRight_from___b7:
Removing instruction __b12:
Removing instruction __b13:
Removing instruction __b2_from___b13:
Removing instruction __b10:
Removing instruction __b11:
Removing instruction __b5_from___b11:
Removing instruction __b2:
Removing instruction __b1_from___b2:
Removing instruction __breturn:
Removing instruction __b1_from_charsetFindOrAddGlyph:
Removing instruction __b7_from___b1:
Removing instruction __b9:
Removing instruction __b7_from___b8:
Removing instruction __b5_from___b2:
Removing instruction __b5_from___b3:
Removing instruction __b1_from___b6:
Removing instruction __b2_from___b4:
Removing instruction __b1_from_protoBobShiftRight:
Removing instruction __breturn:
Removing instruction __b4_from___b2:
Removing instruction __b7:
Removing instruction __b1_from___b6:
Removing instruction __b1_from_protoBobShiftDown:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __breturn:
Removing instruction __b1_from_mulf_init:
Removing instruction __b5_from___b1:
Removing instruction __b7:
Removing instruction __breturn:
Removing instruction __b8_from___b6:
Removing instruction __b5_from___b8:
Removing instruction __b4:
Removing instruction __b1_from___b3:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Replacing jump to rts with rts in jmp __breturn
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label __b2_from___b1 to b1
Relabelling long label __b2_from___b1 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b1
Removing instruction jmp __b8
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction __b1:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(const byte*) BASIC_CHARSET = (byte*) 4096
(const byte*) BASIC_SCREEN = (byte*) 1024
(const byte*) BOB_CHARSET = (byte*) 8192
(const byte*) BOB_SCREEN = (byte*) 10240
(const byte) BOB_SHIFTS_X = (byte) 4
(const byte) BOB_SHIFTS_Y = (byte) 8
(const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y
(const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4]  = { fill( 9*8*4, 0) }
(const byte*) BORDERCOL = (byte*) 53280
(const byte*) CIA1_PORT_A = (byte*) 56320
(const byte*) CIA1_PORT_B = (byte*) 56321
(const byte*) CIA2_PORT_A = (byte*) 56576
(const byte*) CIA2_PORT_A_DDR = (byte*) 56578
(const byte*) D018 = (byte*) 53272
(const byte) KEY_SPACE = (byte) $3c
(const word*) MUL40[(number) $20]  = { fill( $20, 0) }
(const byte) NUM_BOBS = (byte) $19
(const byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8]  = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff))
	.for (var x=0;x<3; x++)
    	.for (var y=0; y<24; y++)
            .byte pic.getSinglecolorByte(x,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**) RENDERBOB_CLEANUP[(const byte) NUM_BOBS]  = { fill( NUM_BOBS, 0) }
(const byte) SIZEOF_POINTER = (byte) 2
(byte) bob_charset_next_id
(byte) bob_charset_next_id#14 bob_charset_next_id zp[1]:14 12.0
(byte) bob_charset_next_id#16 bob_charset_next_id zp[1]:14 1000.5454545454544
(byte) bob_charset_next_id#21 bob_charset_next_id zp[1]:14 275.5
(byte) bob_charset_next_id#23 bob_charset_next_id zp[1]:14 1400.3333333333335
(byte) bob_charset_next_id#30 bob_charset_next_id zp[1]:14 37.33333333333333
(byte) bob_charset_next_id#8 bob_charset_next_id zp[1]:14 4.0
(byte()) charsetFindOrAddGlyph((byte*) charsetFindOrAddGlyph::glyph , (byte*) charsetFindOrAddGlyph::charset)
(label) charsetFindOrAddGlyph::@1
(label) charsetFindOrAddGlyph::@2
(label) charsetFindOrAddGlyph::@3
(label) charsetFindOrAddGlyph::@4
(label) charsetFindOrAddGlyph::@5
(label) charsetFindOrAddGlyph::@6
(label) charsetFindOrAddGlyph::@7
(label) charsetFindOrAddGlyph::@8
(label) charsetFindOrAddGlyph::@9
(label) charsetFindOrAddGlyph::@return
(byte*) charsetFindOrAddGlyph::charset
(byte) charsetFindOrAddGlyph::found
(byte) charsetFindOrAddGlyph::found#2 reg byte a 10001.0
(byte*) charsetFindOrAddGlyph::glyph
(byte*) charsetFindOrAddGlyph::glyph#1 glyph zp[2]:19 2002.0
(byte*) charsetFindOrAddGlyph::glyph#10 glyph zp[2]:19 7400.200000000001
(byte*) charsetFindOrAddGlyph::glyph_cursor
(byte*) charsetFindOrAddGlyph::glyph_cursor#1 glyph_cursor zp[2]:5 20002.0
(byte*) charsetFindOrAddGlyph::glyph_cursor#11 glyph_cursor zp[2]:5 10000.307692307691
(byte) charsetFindOrAddGlyph::glyph_id
(byte) charsetFindOrAddGlyph::glyph_id#1 reg byte x 10001.0
(byte) charsetFindOrAddGlyph::glyph_id#11 reg byte x 1937.75
(byte) charsetFindOrAddGlyph::i
(byte) charsetFindOrAddGlyph::i#1 reg byte y 200002.0
(byte) charsetFindOrAddGlyph::i#2 reg byte y 166668.3333333333
(byte) charsetFindOrAddGlyph::i1
(byte) charsetFindOrAddGlyph::i1#1 reg byte y 20002.0
(byte) charsetFindOrAddGlyph::i1#2 reg byte y 16668.333333333332
(byte) charsetFindOrAddGlyph::return
(byte) charsetFindOrAddGlyph::return#1 reg byte a 2002.0
(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
(byte~) keyboard_key_pressed::$2 reg byte a 4.0
(label) keyboard_key_pressed::@1
(label) keyboard_key_pressed::@return
(byte) keyboard_key_pressed::colidx
(const byte) keyboard_key_pressed::colidx#0 colidx = (const byte) KEY_SPACE&(byte) 7
(byte) keyboard_key_pressed::key
(byte) keyboard_key_pressed::return
(byte) keyboard_key_pressed::return#0 reg byte a 6.0
(byte) keyboard_key_pressed::return#2 reg byte a 22.0
(byte) keyboard_key_pressed::return#3 reg byte a 22.0
(byte) keyboard_key_pressed::rowidx
(const byte) keyboard_key_pressed::rowidx#0 rowidx = (const byte) KEY_SPACE>>(byte) 3
(const byte*) keyboard_matrix_col_bitmask[(number) 8]  = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
(label) keyboard_matrix_read::@return
(byte) keyboard_matrix_read::return
(byte) keyboard_matrix_read::return#0 reg byte a 1.3333333333333333
(byte) keyboard_matrix_read::return#2 reg byte a 4.0
(byte) keyboard_matrix_read::row_pressed_bits
(byte) keyboard_matrix_read::rowid
(const byte*) keyboard_matrix_row_bitmask[(number) 8]  = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f }
(void()) main()
(byte~) main::$15 reg byte a 22.0
(byte~) main::$17 reg byte a 22.0
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte) main::col
(byte) main::col#1 col zp[1]:2 151.5
(byte) main::col#5 col zp[1]:2 13.466666666666667
(const signed word) main::colOffsetX = (signed word) $100
(const signed word) main::colOffsetY = (signed word) $1800
(signed word) main::origX
(signed word) main::origX#1 origX zp[2]:21 3.142857142857143
(signed word) main::origX#8 origX zp[2]:21 1.5
(const signed word) main::origY = (signed word) $a00
(byte) main::row
(byte) main::row#1 reg byte x 1501.5
(byte) main::row#2 reg byte x 250.25
(const signed word) main::rowOffsetX = (signed word) $c00
(signed word) main::rowOffsetY
(signed word) main::rowOffsetY#1 rowOffsetY zp[2]:23 3.6666666666666665
(signed word) main::rowOffsetY#10 rowOffsetY zp[2]:23 44.47826086956522
(signed word) main::rowX
(signed word) main::rowX#1 rowX zp[2]:19 50.5
(signed word) main::rowY
(signed word) main::rowY#1 rowY zp[2]:3 67.33333333333333
(label) main::toD0181
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) BOB_SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BOB_CHARSET/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(label) main::toD0182
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) BASIC_SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BASIC_CHARSET/(byte) 4&(byte) $f
(byte*) main::toD0182_screen
(label) main::vicSelectGfxBank1
(label) main::vicSelectGfxBank1_@1
(byte*) main::vicSelectGfxBank1_gfx
(label) main::vicSelectGfxBank1_toDd001
(byte*) main::vicSelectGfxBank1_toDd001_gfx
(byte) main::vicSelectGfxBank1_toDd001_return
(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3
(label) main::vicSelectGfxBank2
(label) main::vicSelectGfxBank2_@1
(byte*) main::vicSelectGfxBank2_gfx
(label) main::vicSelectGfxBank2_toDd001
(byte*) main::vicSelectGfxBank2_toDd001_gfx
(byte) main::vicSelectGfxBank2_toDd001_return
(const byte) main::vicSelectGfxBank2_toDd001_return#0 vicSelectGfxBank2_toDd001_return = (byte) 3
(signed word) main::x
(signed word) main::x#0 x zp[2]:19 24.153846153846153
(signed word) main::x#1 x_1 zp[2]:5 400.4
(signed word) main::x#2 x_1 zp[2]:5 620.8
(signed word) main::x#4 x zp[2]:19 22.0
(signed word) main::x#7 x_1 zp[2]:5 101.0
(signed word) main::y
(signed word) main::y#0 y zp[2]:3 21.642857142857142
(signed word) main::y#1 y_1 zp[2]:7 500.5
(signed word) main::y#2 y_1 zp[2]:7 517.3333333333334
(signed word) main::y#6 y_1 zp[2]:7 202.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
(label) memset::@return
(byte) memset::c
(const byte) memset::c#0 c = (byte) 0
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:21 22.0
(byte*) memset::dst#2 dst zp[2]:21 14.666666666666666
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
(const word) memset::num#0 num = (word) $3e8
(void*) memset::return
(void*) memset::str
(const void*) memset::str#0 str = (void*)(const byte*) BOB_SCREEN
(void()) mulf_init()
(byte~) mulf_init::$1 reg byte a 22.0
(byte~) mulf_init::$4 reg byte a 22.0
(byte~) mulf_init::$5 reg byte a 22.0
(label) mulf_init::@1
(label) mulf_init::@2
(label) mulf_init::@3
(label) mulf_init::@4
(label) mulf_init::@5
(label) mulf_init::@6
(label) mulf_init::@7
(label) mulf_init::@8
(label) mulf_init::@9
(label) mulf_init::@return
(byte) mulf_init::c
(byte) mulf_init::c#1 c zp[1]:9 2.5384615384615383
(byte) mulf_init::c#2 c zp[1]:9 11.0
(byte) mulf_init::dir
(byte) mulf_init::dir#2 dir zp[1]:12 4.125
(byte) mulf_init::dir#4 dir zp[1]:12 11.0
(word) mulf_init::sqr
(word) mulf_init::sqr#1 sqr zp[2]:21 11.0
(word) mulf_init::sqr#2 sqr zp[2]:21 22.0
(word) mulf_init::sqr#3 sqr zp[2]:21 9.166666666666666
(word) mulf_init::sqr#4 sqr zp[2]:21 5.5
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:10 7.333333333333333
(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:10 2.75
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:7 22.0
(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:7 3.142857142857143
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:19 3.6666666666666665
(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:19 8.25
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:16 22.0
(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:16 4.888888888888889
(byte) mulf_init::x_2
(byte) mulf_init::x_2#1 reg byte x 11.0
(byte) mulf_init::x_2#2 reg byte x 5.5
(byte) mulf_init::x_2#3 reg byte x 6.6000000000000005
(byte) mulf_init::x_255
(byte) mulf_init::x_255#1 reg byte x 6.6000000000000005
(byte) mulf_init::x_255#2 reg byte x 8.8
(const byte*) mulf_sqr1_hi[(number) $200]  = { fill( $200, 0) }
(const byte*) mulf_sqr1_lo[(number) $200]  = { fill( $200, 0) }
(const byte*) mulf_sqr2_hi[(number) $200]  = { fill( $200, 0) }
(const byte*) mulf_sqr2_lo[(number) $200]  = { fill( $200, 0) }
(void()) prepareBobs()
(byte~) prepareBobs::$6 reg byte a 2002.0
(label) prepareBobs::@1
(label) prepareBobs::@10
(label) prepareBobs::@11
(label) prepareBobs::@12
(label) prepareBobs::@13
(label) prepareBobs::@2
(label) prepareBobs::@3
(label) prepareBobs::@4
(label) prepareBobs::@5
(label) prepareBobs::@6
(label) prepareBobs::@7
(label) prepareBobs::@8
(label) prepareBobs::@9
(label) prepareBobs::@return
(byte*) prepareBobs::bob_glyph
(byte*) prepareBobs::bob_glyph#1 bob_glyph zp[2]:19 500.5
(byte*) prepareBobs::bob_glyph#2 bob_glyph zp[2]:19 429.0
(byte*) prepareBobs::bob_table
(byte*) prepareBobs::bob_table#0 bob_table zp[2]:3 202.0
(byte*) prepareBobs::bob_table#1 bob_table zp[2]:3 667.3333333333334
(byte*) prepareBobs::bob_table#2 bob_table zp[2]:3 388.0
(byte) prepareBobs::bob_table_idx
(byte) prepareBobs::bob_table_idx#1 bob_table_idx zp[1]:12 40.4
(byte) prepareBobs::bob_table_idx#12 bob_table_idx zp[1]:12 19.11764705882353
(byte) prepareBobs::bob_table_idx#6 bob_table_idx zp[1]:12 11.0
(byte) prepareBobs::cell
(byte) prepareBobs::cell#1 cell zp[1]:18 2002.0
(byte) prepareBobs::cell#2 cell zp[1]:18 300.29999999999995
(byte) prepareBobs::shift_x
(byte) prepareBobs::shift_x#1 shift_x zp[1]:13 202.0
(byte) prepareBobs::shift_x#2 shift_x zp[1]:13 16.833333333333332
(byte) prepareBobs::shift_y
(byte) prepareBobs::shift_y#1 shift_y zp[1]:2 22.0
(byte) prepareBobs::shift_y#2 shift_y zp[1]:2 1.4347826086956523
(byte*) progress_cursor
(byte*) progress_cursor#15 progress_cursor zp[2]:23 11.0
(byte*) progress_cursor#17 progress_cursor zp[2]:23 201.4
(byte*) progress_cursor#24 progress_cursor zp[2]:23 71.11764705882355
(byte*) progress_cursor#31 progress_cursor zp[2]:23 37.33333333333333
(byte*) progress_cursor#8 progress_cursor zp[2]:23 4.0
(byte) progress_idx
(byte) progress_idx#10 progress_idx zp[1]:9 201.0
(byte) progress_idx#16 progress_idx zp[1]:9 11.0
(byte) progress_idx#25 progress_idx zp[1]:9 86.07142857142856
(byte) progress_idx#31 progress_idx zp[1]:9 37.33333333333333
(byte) progress_idx#8 progress_idx zp[1]:9 3.0
(void()) progress_inc()
(label) progress_inc::@1
(label) progress_inc::@2
(label) progress_inc::@return
(const byte*) progress_inc::progress_chars[]  = { (byte) $20, (byte) $65, (byte) $74, (byte) $75, (byte) $61, (byte) $f6, (byte) $e7, (byte) $ea, (byte) $e0 }
(void()) progress_init((byte*) progress_init::line)
(label) progress_init::@return
(byte*) progress_init::line
(void()) protoBobShiftDown()
(label) protoBobShiftDown::@1
(label) protoBobShiftDown::@2
(label) protoBobShiftDown::@3
(label) protoBobShiftDown::@return
(byte) protoBobShiftDown::i
(byte) protoBobShiftDown::i#1 reg byte x 202.0
(byte) protoBobShiftDown::i#2 reg byte x 161.6
(void()) protoBobShiftRight()
(byte~) protoBobShiftRight::$1 reg byte a 2002.0
(byte~) protoBobShiftRight::$5 reg byte a 2002.0
(byte~) protoBobShiftRight::$6 reg byte a 2002.0
(label) protoBobShiftRight::@1
(label) protoBobShiftRight::@2
(label) protoBobShiftRight::@3
(label) protoBobShiftRight::@4
(label) protoBobShiftRight::@5
(label) protoBobShiftRight::@6
(label) protoBobShiftRight::@7
(label) protoBobShiftRight::@return
(byte) protoBobShiftRight::carry
(byte) protoBobShiftRight::carry#1 carry zp[1]:15 111.22222222222223
(byte) protoBobShiftRight::carry#10 reg byte y 2002.0
(byte) protoBobShiftRight::carry#2 reg byte y 286.0
(byte) protoBobShiftRight::i
(byte) protoBobShiftRight::i#1 i zp[1]:18 1001.0
(byte) protoBobShiftRight::i#2 i zp[1]:18 231.0
(byte) protoBobShiftRight::j
(byte) protoBobShiftRight::j#1 reg byte x 2002.0
(byte) protoBobShiftRight::j#10 reg byte x 1001.0
(byte) protoBobShiftRight::j#2 reg byte x 2002.0
(byte) protoBobShiftRight::j#3 reg byte x 700.7
(byte) protoBobShiftRight::new_carry
(void()) renderBob((byte) renderBob::xpos , (byte) renderBob::ypos)
(byte*~) renderBob::$2 zp[2]:16 4.0
(byte~) renderBob::$4 reg byte a 4.0
(byte~) renderBob::$5 zp[1]:18 2.0
(byte~) renderBob::$6 reg byte a 4.0
(byte~) renderBob::$8 reg byte a 4.0
(label) renderBob::@return
(byte) renderBob::bob_table_idx
(byte) renderBob::bob_table_idx#0 bob_table_idx zp[1]:18 1.8181818181818186
(byte*) renderBob::screen
(byte*) renderBob::screen#0 screen zp[2]:16 1.4666666666666666
(byte) renderBob::x_char_offset
(byte) renderBob::x_char_offset#0 x_char_offset zp[1]:15 0.8
(byte) renderBob::xpos
(byte) renderBob::xpos#0 xpos zp[1]:13 100.5
(byte) renderBob::y_char_offset
(byte) renderBob::y_char_offset#0 reg byte a 4.0
(word) renderBob::y_offset
(word) renderBob::y_offset#0 y_offset zp[2]:16 4.0
(byte) renderBob::ypos
(byte) renderBob::ypos#0 ypos zp[1]:14 143.57142857142856
(void()) renderBobCleanup()
(byte~) renderBobCleanup::$1 reg byte a 202.0
(label) renderBobCleanup::@1
(label) renderBobCleanup::@return
(byte) renderBobCleanup::i
(byte) renderBobCleanup::i#1 reg byte x 151.5
(byte) renderBobCleanup::i#2 reg byte x 25.25
(byte*) renderBobCleanup::screen
(byte*) renderBobCleanup::screen#0 screen zp[2]:19 112.22222222222223
(byte**) renderBobCleanupNext
(byte**) renderBobCleanupNext#13 renderBobCleanupNext zp[2]:10 52.57142857142857
(byte**) renderBobCleanupNext#17 renderBobCleanupNext zp[2]:10 73.73333333333335
(byte**) renderBobCleanupNext#21 renderBobCleanupNext zp[2]:10 67.33333333333333
(void()) renderBobInit()
(word~) renderBobInit::$0 zp[2]:21 16.5
(word~) renderBobInit::$1 zp[2]:21 11.0
(byte~) renderBobInit::$4 reg byte a 22.0
(byte~) renderBobInit::$5 reg byte a 22.0
(word~) renderBobInit::$6 zp[2]:23 22.0
(word~) renderBobInit::$7 zp[2]:21 22.0
(label) renderBobInit::@1
(label) renderBobInit::@2
(label) renderBobInit::@return
(byte) renderBobInit::i
(byte) renderBobInit::i#1 reg byte x 16.5
(byte) renderBobInit::i#2 reg byte x 11.0
(byte) renderBobInit::y
(byte) renderBobInit::y#1 reg byte x 16.5
(byte) renderBobInit::y#2 reg byte x 4.714285714285714

reg byte x [ main::row#2 main::row#1 ]
reg byte x [ renderBobCleanup::i#2 renderBobCleanup::i#1 ]
reg byte x [ renderBobInit::y#2 renderBobInit::y#1 ]
reg byte x [ renderBobInit::i#2 renderBobInit::i#1 ]
zp[1]:2 [ prepareBobs::shift_y#2 prepareBobs::shift_y#1 main::col#5 main::col#1 ]
zp[2]:3 [ prepareBobs::bob_table#2 prepareBobs::bob_table#1 prepareBobs::bob_table#0 main::y#0 main::rowY#1 ]
reg byte x [ charsetFindOrAddGlyph::glyph_id#11 charsetFindOrAddGlyph::glyph_id#1 ]
zp[2]:5 [ charsetFindOrAddGlyph::glyph_cursor#11 charsetFindOrAddGlyph::glyph_cursor#1 main::x#2 main::x#1 main::x#7 ]
reg byte y [ charsetFindOrAddGlyph::i1#2 charsetFindOrAddGlyph::i1#1 ]
reg byte y [ charsetFindOrAddGlyph::i#2 charsetFindOrAddGlyph::i#1 ]
reg byte a [ charsetFindOrAddGlyph::found#2 ]
reg byte x [ protoBobShiftRight::j#3 protoBobShiftRight::j#10 protoBobShiftRight::j#2 protoBobShiftRight::j#1 ]
reg byte y [ protoBobShiftRight::carry#2 protoBobShiftRight::carry#10 ]
reg byte x [ protoBobShiftDown::i#2 protoBobShiftDown::i#1 ]
zp[2]:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 main::y#2 main::y#1 main::y#6 ]
zp[1]:9 [ mulf_init::c#2 mulf_init::c#1 progress_idx#16 progress_idx#31 progress_idx#25 progress_idx#10 progress_idx#8 ]
zp[2]:10 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 renderBobCleanupNext#17 renderBobCleanupNext#21 renderBobCleanupNext#13 ]
reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
zp[1]:12 [ mulf_init::dir#2 mulf_init::dir#4 prepareBobs::bob_table_idx#6 prepareBobs::bob_table_idx#12 prepareBobs::bob_table_idx#1 ]
zp[1]:13 [ renderBob::xpos#0 prepareBobs::shift_x#2 prepareBobs::shift_x#1 ]
zp[1]:14 [ renderBob::ypos#0 bob_charset_next_id#23 bob_charset_next_id#14 bob_charset_next_id#16 bob_charset_next_id#30 bob_charset_next_id#21 bob_charset_next_id#8 ]
reg byte a [ keyboard_key_pressed::return#2 ]
reg byte a [ main::$15 ]
reg byte a [ keyboard_key_pressed::return#3 ]
reg byte a [ main::$17 ]
reg byte a [ keyboard_matrix_read::return#2 ]
reg byte a [ keyboard_key_pressed::$2 ]
reg byte a [ keyboard_key_pressed::return#0 ]
reg byte a [ keyboard_matrix_read::return#0 ]
zp[1]:15 [ renderBob::x_char_offset#0 protoBobShiftRight::carry#1 ]
reg byte a [ renderBob::y_char_offset#0 ]
reg byte a [ renderBob::$8 ]
zp[2]:16 [ renderBob::y_offset#0 renderBob::$2 renderBob::screen#0 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
reg byte a [ renderBob::$4 ]
zp[1]:18 [ renderBob::$5 renderBob::bob_table_idx#0 protoBobShiftRight::i#2 protoBobShiftRight::i#1 prepareBobs::cell#2 prepareBobs::cell#1 ]
reg byte a [ renderBob::$6 ]
reg byte a [ renderBobCleanup::$1 ]
zp[2]:19 [ renderBobCleanup::screen#0 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 prepareBobs::bob_glyph#2 prepareBobs::bob_glyph#1 charsetFindOrAddGlyph::glyph#10 charsetFindOrAddGlyph::glyph#1 main::x#0 main::x#4 main::rowX#1 ]
zp[2]:21 [ renderBobInit::$0 renderBobInit::$7 renderBobInit::$1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 memset::dst#2 memset::dst#1 main::origX#8 main::origX#1 ]
zp[2]:23 [ renderBobInit::$6 progress_cursor#15 progress_cursor#31 progress_cursor#24 progress_cursor#17 progress_cursor#8 main::rowOffsetY#10 main::rowOffsetY#1 ]
reg byte a [ renderBobInit::$4 ]
reg byte a [ renderBobInit::$5 ]
reg byte a [ charsetFindOrAddGlyph::return#1 ]
reg byte a [ prepareBobs::$6 ]
reg byte a [ protoBobShiftRight::$1 ]
reg byte a [ protoBobShiftRight::$5 ]
reg byte a [ protoBobShiftRight::$6 ]
reg byte a [ mulf_init::$1 ]
reg byte a [ mulf_init::$4 ]
reg byte a [ mulf_init::$5 ]


FINAL ASSEMBLER
Score: 3582851

  // File Comments
// Pre-calculated bobs inside a charset (pre-moved to all x/y-combinations)
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
  // Global Constants & labels
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label D018 = $d018
  // CIA#1 Port A: keyboard matrix columns and joystick #2
  .label CIA1_PORT_A = $dc00
  // CIA#1 Port B: keyboard matrix rows and joystick #1.
  .label CIA1_PORT_B = $dc01
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  // CIA #2 Port A data direction register.
  .label CIA2_PORT_A_DDR = $dd02
  .const KEY_SPACE = $3c
  // The BASIC screen
  .label BASIC_SCREEN = $400
  // The BASIC charset
  .label BASIC_CHARSET = $1000
  // The BOB screen
  .label BOB_SCREEN = $2800
  // The BOB charset
  .label BOB_CHARSET = $2000
  // The number of different X-shifts
  .const BOB_SHIFTS_X = 4
  // The number of different Y-shifts
  .const BOB_SHIFTS_Y = 8
  // The size of a sub-table of BOB_TABLES
  .const BOB_SUBTABLE_SIZE = BOB_SHIFTS_X*BOB_SHIFTS_Y
  // The number of BOBs to render
  .const NUM_BOBS = $19
  .const SIZEOF_POINTER = 2
  // BOB charset ID of the next glyph to be added
  .label bob_charset_next_id = $e
  // Current index within the progress cursor (0-7)
  .label progress_idx = 9
  // Current position of the progress cursor
  .label progress_cursor = $17
  // Pointer to the next clean-up to add
  // Prepare for next clean-up
  .label renderBobCleanupNext = $a
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
  // [3] phi from @1 to @end [phi:@1->@end]
  // @end
  // main
main: {
    .const origY = $a00
    // Row and column offset vectors
    .const rowOffsetX = $c00
    .const colOffsetX = $100
    .const colOffsetY = $1800
    .const vicSelectGfxBank1_toDd001_return = 3
    .const vicSelectGfxBank2_toDd001_return = 3
    .const toD0181_return = (>(BOB_SCREEN&$3fff)*4)|(>BOB_CHARSET)/4&$f
    .const toD0182_return = (>(BASIC_SCREEN&$3fff)*4)|(>BASIC_CHARSET)/4&$f
    .label x = $13
    .label y = 3
    .label x_1 = 5
    .label y_1 = 7
    .label rowX = $13
    .label rowY = 3
    .label col = 2
    // Origin point
    .label origX = $15
    .label rowOffsetY = $17
    // mulf_init()
    // [5] call mulf_init 
    // [209] phi from main to mulf_init [phi:main->mulf_init]
    jsr mulf_init
    // [6] phi from main to main::@11 [phi:main->main::@11]
    // main::@11
    // prepareBobs()
    // [7] call prepareBobs 
    // [125] phi from main::@11 to prepareBobs [phi:main::@11->prepareBobs]
    jsr prepareBobs
    // [8] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
    // main::@12
    // renderBobInit()
    // [9] call renderBobInit 
    // [109] phi from main::@12 to renderBobInit [phi:main::@12->renderBobInit]
    jsr renderBobInit
    // main::vicSelectGfxBank1
    // *CIA2_PORT_A_DDR = %00000011
    // [10] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2_PORT_A_DDR
    // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001]
    // main::vicSelectGfxBank1_toDd001
    // main::vicSelectGfxBank1_@1
    // *CIA2_PORT_A = toDd00(gfx)
    // [12] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank1_toDd001_return
    sta CIA2_PORT_A
    // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181]
    // main::toD0181
    // main::@9
    // *D018 = toD018(BOB_SCREEN, BOB_CHARSET)
    // [14] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // memset(BOB_SCREEN, 0x00, 1000)
    // [15] call memset 
    // [103] phi from main::@9 to memset [phi:main::@9->memset]
    jsr memset
    // [16] phi from main::@9 to main::@1 [phi:main::@9->main::@1]
    // [16] phi (signed word) main::rowOffsetY#10 = (signed word) $100 [phi:main::@9->main::@1#0] -- vwsz1=vwsc1 
    lda #<$100
    sta.z rowOffsetY
    lda #>$100
    sta.z rowOffsetY+1
    // [16] phi (signed word) main::origX#8 = (signed word) $a00 [phi:main::@9->main::@1#1] -- vwsz1=vwsc1 
    lda #<$a00
    sta.z origX
    lda #>$a00
    sta.z origX+1
  // Render Grid of BOBs
    // main::@1
    // main::@2
  __b2:
    // while (*RASTER<$f8)
    // [17] if(*((const byte*) RASTER)<(byte) $f8) goto main::@2 -- _deref_pbuc1_lt_vbuc2_then_la1 
    lda RASTER
    cmp #$f8
    bcc __b2
    // main::@3
    // *BORDERCOL = 0xf
    // [18] *((const byte*) BORDERCOL) ← (byte) $f -- _deref_pbuc1=vbuc2 
    lda #$f
    sta BORDERCOL
    // renderBobCleanup()
    // [19] call renderBobCleanup 
    // [87] phi from main::@3 to renderBobCleanup [phi:main::@3->renderBobCleanup]
    jsr renderBobCleanup
    // main::@13
    // [20] (signed word) main::x#4 ← (signed word) main::origX#8 -- vwsz1=vwsz2 
    lda.z origX
    sta.z x
    lda.z origX+1
    sta.z x+1
    // [21] phi from main::@13 to main::@4 [phi:main::@13->main::@4]
    // [21] phi (byte) main::col#5 = (byte) 0 [phi:main::@13->main::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z col
    // [21] phi (byte**) renderBobCleanupNext#21 = (const byte**) RENDERBOB_CLEANUP [phi:main::@13->main::@4#1] -- pptz1=pptc1 
    lda #<RENDERBOB_CLEANUP
    sta.z renderBobCleanupNext
    lda #>RENDERBOB_CLEANUP
    sta.z renderBobCleanupNext+1
    // [21] phi (signed word) main::y#0 = (const signed word) main::origY [phi:main::@13->main::@4#2] -- vwsz1=vwsc1 
    lda #<origY
    sta.z y
    lda #>origY
    sta.z y+1
    // [21] phi (signed word) main::x#0 = (signed word) main::x#4 [phi:main::@13->main::@4#3] -- register_copy 
    // [21] phi from main::@6 to main::@4 [phi:main::@6->main::@4]
    // [21] phi (byte) main::col#5 = (byte) main::col#1 [phi:main::@6->main::@4#0] -- register_copy 
    // [21] phi (byte**) renderBobCleanupNext#21 = (byte**) renderBobCleanupNext#13 [phi:main::@6->main::@4#1] -- register_copy 
    // [21] phi (signed word) main::y#0 = (signed word) main::rowY#1 [phi:main::@6->main::@4#2] -- register_copy 
    // [21] phi (signed word) main::x#0 = (signed word) main::rowX#1 [phi:main::@6->main::@4#3] -- register_copy 
    // main::@4
  __b4:
    // [22] (signed word) main::x#7 ← (signed word) main::x#0 -- vwsz1=vwsz2 
    lda.z x
    sta.z x_1
    lda.z x+1
    sta.z x_1+1
    // [23] (signed word) main::y#6 ← (signed word) main::y#0 -- vwsz1=vwsz2 
    lda.z y
    sta.z y_1
    lda.z y+1
    sta.z y_1+1
    // [24] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
    // [24] phi (byte) main::row#2 = (byte) 0 [phi:main::@4->main::@5#0] -- vbuxx=vbuc1 
    ldx #0
    // [24] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#21 [phi:main::@4->main::@5#1] -- register_copy 
    // [24] phi (signed word) main::y#2 = (signed word) main::y#6 [phi:main::@4->main::@5#2] -- register_copy 
    // [24] phi (signed word) main::x#2 = (signed word) main::x#7 [phi:main::@4->main::@5#3] -- register_copy 
    // [24] phi from main::@14 to main::@5 [phi:main::@14->main::@5]
    // [24] phi (byte) main::row#2 = (byte) main::row#1 [phi:main::@14->main::@5#0] -- register_copy 
    // [24] phi (byte**) renderBobCleanupNext#17 = (byte**) renderBobCleanupNext#13 [phi:main::@14->main::@5#1] -- register_copy 
    // [24] phi (signed word) main::y#2 = (signed word) main::y#1 [phi:main::@14->main::@5#2] -- register_copy 
    // [24] phi (signed word) main::x#2 = (signed word) main::x#1 [phi:main::@14->main::@5#3] -- register_copy 
    // main::@5
  __b5:
    // *BORDERCOL = 1
    // [25] *((const byte*) BORDERCOL) ← (byte) 1 -- _deref_pbuc1=vbuc2 
    //kickasm {{ .break }}
    lda #1
    sta BORDERCOL
    // renderBob(>x, >y)
    // [26] (byte) renderBob::xpos#0 ← > (signed word) main::x#2 -- vbuz1=_hi_vwsz2 
    lda.z x_1+1
    sta.z renderBob.xpos
    // [27] (byte) renderBob::ypos#0 ← > (signed word) main::y#2 -- vbuz1=_hi_vwsz2 
    lda.z y_1+1
    sta.z renderBob.ypos
    // [28] call renderBob 
    jsr renderBob
    // main::@14
    // x += rowOffsetX
    // [29] (signed word) main::x#1 ← (signed word) main::x#2 + (const signed word) main::rowOffsetX -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z x_1
    adc #<rowOffsetX
    sta.z x_1
    lda.z x_1+1
    adc #>rowOffsetX
    sta.z x_1+1
    // y += rowOffsetY
    // [30] (signed word) main::y#1 ← (signed word) main::y#2 + (signed word) main::rowOffsetY#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda.z y_1
    clc
    adc.z rowOffsetY
    sta.z y_1
    lda.z y_1+1
    adc.z rowOffsetY+1
    sta.z y_1+1
    // *BORDERCOL = 2
    // [31] *((const byte*) BORDERCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 
    lda #2
    sta BORDERCOL
    // for(char row: 0..4)
    // [32] (byte) main::row#1 ← ++ (byte) main::row#2 -- vbuxx=_inc_vbuxx 
    inx
    // [33] if((byte) main::row#1!=(byte) 5) goto main::@5 -- vbuxx_neq_vbuc1_then_la1 
    cpx #5
    bne __b5
    // main::@6
    // rowX += colOffsetX
    // [34] (signed word) main::rowX#1 ← (signed word) main::x#0 + (const signed word) main::colOffsetX -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowX
    adc #<colOffsetX
    sta.z rowX
    lda.z rowX+1
    adc #>colOffsetX
    sta.z rowX+1
    // rowY += colOffsetY
    // [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const signed word) main::colOffsetY -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowY
    adc #<colOffsetY
    sta.z rowY
    lda.z rowY+1
    adc #>colOffsetY
    sta.z rowY+1
    // for(char col: 0..4)
    // [36] (byte) main::col#1 ← ++ (byte) main::col#5 -- vbuz1=_inc_vbuz1 
    inc.z col
    // [37] if((byte) main::col#1!=(byte) 5) goto main::@4 -- vbuz1_neq_vbuc1_then_la1 
    lda #5
    cmp.z col
    bne __b4
    // main::@7
    // origX += 0x0100
    // [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z origX
    adc #<$100
    sta.z origX
    lda.z origX+1
    adc #>$100
    sta.z origX+1
    // rowOffsetY += 0x0080
    // [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda.z rowOffsetY
    adc #<$80
    sta.z rowOffsetY
    lda.z rowOffsetY+1
    adc #>$80
    sta.z rowOffsetY+1
    // *BORDERCOL = 0
    // [40] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta BORDERCOL
    // keyboard_key_pressed(KEY_SPACE)
    // [41] call keyboard_key_pressed 
    // [56] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed]
    jsr keyboard_key_pressed
    // keyboard_key_pressed(KEY_SPACE)
    // [42] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0
    // main::@15
    // [43] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2
    // if(keyboard_key_pressed(KEY_SPACE))
    // [44] if((byte) 0!=(byte~) main::$15) goto main::@8 -- vbuc1_neq_vbuaa_then_la1 
    cmp #0
    bne __b8
    // [16] phi from main::@15 to main::@1 [phi:main::@15->main::@1]
    // [16] phi (signed word) main::rowOffsetY#10 = (signed word) main::rowOffsetY#1 [phi:main::@15->main::@1#0] -- register_copy 
    // [16] phi (signed word) main::origX#8 = (signed word) main::origX#1 [phi:main::@15->main::@1#1] -- register_copy 
    jmp __b2
  // Wait for space release
    // [45] phi from main::@15 main::@16 to main::@8 [phi:main::@15/main::@16->main::@8]
    // main::@8
  __b8:
    // keyboard_key_pressed(KEY_SPACE)
    // [46] call keyboard_key_pressed 
    // [56] phi from main::@8 to keyboard_key_pressed [phi:main::@8->keyboard_key_pressed]
    jsr keyboard_key_pressed
    // keyboard_key_pressed(KEY_SPACE)
    // [47] (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#0
    // main::@16
    // [48] (byte~) main::$17 ← (byte) keyboard_key_pressed::return#3
    // while(keyboard_key_pressed(KEY_SPACE))
    // [49] if((byte) 0!=(byte~) main::$17) goto main::@8 -- vbuc1_neq_vbuaa_then_la1 
    cmp #0
    bne __b8
    // main::vicSelectGfxBank2
    // *CIA2_PORT_A_DDR = %00000011
    // [50] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2_PORT_A_DDR
    // [51] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001]
    // main::vicSelectGfxBank2_toDd001
    // main::vicSelectGfxBank2_@1
    // *CIA2_PORT_A = toDd00(gfx)
    // [52] *((const byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank2_toDd001_return
    sta CIA2_PORT_A
    // [53] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182]
    // main::toD0182
    // main::@10
    // *D018 = toD018(BASIC_SCREEN, BASIC_CHARSET)
    // [54] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // main::@return
    // }
    // [55] return 
    rts
}
  // keyboard_key_pressed
// Determines whether a specific key is currently pressed by accessing the matrix directly
// The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7)
// All keys exist as as KEY_XXX constants.
// Returns zero if the key is not pressed and a non-zero value if the key is currently pressed
keyboard_key_pressed: {
    .const colidx = KEY_SPACE&7
    .label rowidx = KEY_SPACE>>3
    // keyboard_matrix_read(rowidx)
    // [57] call keyboard_matrix_read 
    jsr keyboard_matrix_read
    // [58] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
    // keyboard_key_pressed::@1
    // [59] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
    // keyboard_matrix_read(rowidx) & keyboard_matrix_col_bitmask[colidx]
    // [60] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte*) keyboard_matrix_col_bitmask+(const byte) keyboard_key_pressed::colidx#0) -- vbuaa=vbuaa_band__deref_pbuc1 
    and keyboard_matrix_col_bitmask+colidx
    // keyboard_key_pressed::@return
    // }
    // [61] return 
    rts
}
  // keyboard_matrix_read
// Read a single row of the keyboard matrix
// The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs.
// Returns the keys pressed on the row as bits according to the C64 key matrix.
// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write
// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
keyboard_matrix_read: {
    // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid]
    // [62] *((const byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 
    lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx
    sta CIA1_PORT_A
    // ~*CIA1_PORT_B
    // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 
    lda CIA1_PORT_B
    eor #$ff
    // keyboard_matrix_read::@return
    // }
    // [64] return 
    rts
}
  // renderBob
// Render a single BOB at a given x/y-position
// X-position is 0-151. Each x-position is 2 pixels wide.
// Y-position is 0-183. Each y-position is 1 pixel high.
// renderBob(byte zp($d) xpos, byte zp($e) ypos)
renderBob: {
    .label __2 = $10
    .label __5 = $12
    .label xpos = $d
    .label ypos = $e
    .label x_char_offset = $f
    .label y_offset = $10
    .label screen = $10
    .label bob_table_idx = $12
    // x_char_offset = xpos/BOB_SHIFTS_X
    // [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 -- vbuz1=vbuz2_ror_2 
    lda.z xpos
    lsr
    lsr
    sta.z x_char_offset
    // y_char_offset = ypos/BOB_SHIFTS_Y
    // [66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 
    lda.z ypos
    lsr
    lsr
    lsr
    // y_offset = MUL40[y_char_offset]
    // [67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [68] (word) renderBob::y_offset#0 ← *((const word*) MUL40 + (byte~) renderBob::$8) -- vwuz1=pwuc1_derefidx_vbuaa 
    tay
    lda MUL40,y
    sta.z y_offset
    lda MUL40+1,y
    sta.z y_offset+1
    // BOB_SCREEN+y_offset
    // [69] (byte*~) renderBob::$2 ← (const byte*) BOB_SCREEN + (word) renderBob::y_offset#0 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z __2
    adc #<BOB_SCREEN
    sta.z __2
    lda.z __2+1
    adc #>BOB_SCREEN
    sta.z __2+1
    // screen = BOB_SCREEN+y_offset+x_char_offset
    // [70] (byte*) renderBob::screen#0 ← (byte*~) renderBob::$2 + (byte) renderBob::x_char_offset#0 -- pbuz1=pbuz1_plus_vbuz2 
    lda.z x_char_offset
    clc
    adc.z screen
    sta.z screen
    bcc !+
    inc.z screen+1
  !:
    // ypos&7
    // [71] (byte~) renderBob::$4 ← (byte) renderBob::ypos#0 & (byte) 7 -- vbuaa=vbuz1_band_vbuc1 
    lda #7
    and.z ypos
    // (ypos&7)*BOB_SHIFTS_X
    // [72] (byte~) renderBob::$5 ← (byte~) renderBob::$4 << (byte) 2 -- vbuz1=vbuaa_rol_2 
    asl
    asl
    sta.z __5
    // xpos&3
    // [73] (byte~) renderBob::$6 ← (byte) renderBob::xpos#0 & (byte) 3 -- vbuaa=vbuz1_band_vbuc1 
    lda #3
    and.z xpos
    // bob_table_idx = (ypos&7)*BOB_SHIFTS_X+(xpos&3)
    // [74] (byte) renderBob::bob_table_idx#0 ← (byte~) renderBob::$5 + (byte~) renderBob::$6 -- vbuz1=vbuz1_plus_vbuaa 
    clc
    adc.z bob_table_idx
    sta.z bob_table_idx
    // *renderBobCleanupNext++ = screen
    // [75] *((byte**) renderBobCleanupNext#17) ← (byte*) renderBob::screen#0 -- _deref_pptz1=pbuz2 
    ldy #0
    lda.z screen
    sta (renderBobCleanupNext),y
    iny
    lda.z screen+1
    sta (renderBobCleanupNext),y
    // *renderBobCleanupNext++ = screen;
    // [76] (byte**) renderBobCleanupNext#13 ← (byte**) renderBobCleanupNext#17 + (const byte) SIZEOF_POINTER -- pptz1=pptz1_plus_vbuc1 
    lda #SIZEOF_POINTER
    clc
    adc.z renderBobCleanupNext
    sta.z renderBobCleanupNext
    bcc !+
    inc.z renderBobCleanupNext+1
  !:
    // screen[0]  = (BOB_TABLES+0*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [77] *((byte*) renderBob::screen#0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES,y
    ldy #0
    sta (screen),y
    // screen[40] = (BOB_TABLES+1*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [78] *((byte*) renderBob::screen#0 + (byte) $28) ← *((const byte*) BOB_TABLES+(byte) 1*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+1*BOB_SUBTABLE_SIZE,y
    ldy #$28
    sta (screen),y
    // screen[80] = (BOB_TABLES+2*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [79] *((byte*) renderBob::screen#0 + (byte) $50) ← *((const byte*) BOB_TABLES+(byte) 2*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+2*BOB_SUBTABLE_SIZE,y
    ldy #$50
    sta (screen),y
    // screen[1]  = (BOB_TABLES+3*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [80] *((byte*) renderBob::screen#0 + (byte) 1) ← *((const byte*) BOB_TABLES+(byte) 3*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+3*BOB_SUBTABLE_SIZE,y
    ldy #1
    sta (screen),y
    // screen[41] = (BOB_TABLES+4*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [81] *((byte*) renderBob::screen#0 + (byte) $29) ← *((const byte*) BOB_TABLES+(byte) 4*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+4*BOB_SUBTABLE_SIZE,y
    ldy #$29
    sta (screen),y
    // screen[81] = (BOB_TABLES+5*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [82] *((byte*) renderBob::screen#0 + (byte) $51) ← *((const byte*) BOB_TABLES+(byte) 5*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+5*BOB_SUBTABLE_SIZE,y
    ldy #$51
    sta (screen),y
    // screen[2]  = (BOB_TABLES+6*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [83] *((byte*) renderBob::screen#0 + (byte) 2) ← *((const byte*) BOB_TABLES+(byte) 6*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+6*BOB_SUBTABLE_SIZE,y
    ldy #2
    sta (screen),y
    // screen[42] = (BOB_TABLES+7*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [84] *((byte*) renderBob::screen#0 + (byte) $2a) ← *((const byte*) BOB_TABLES+(byte) 7*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+7*BOB_SUBTABLE_SIZE,y
    ldy #$2a
    sta (screen),y
    // screen[82] = (BOB_TABLES+8*BOB_SUBTABLE_SIZE)[bob_table_idx]
    // [85] *((byte*) renderBob::screen#0 + (byte) $52) ← *((const byte*) BOB_TABLES+(byte) 8*(const byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 
    ldy.z bob_table_idx
    lda BOB_TABLES+8*BOB_SUBTABLE_SIZE,y
    ldy #$52
    sta (screen),y
    // renderBob::@return
    // }
    // [86] return 
    rts
}
  // renderBobCleanup
// Clean Up the rendered BOB's
renderBobCleanup: {
    .label screen = $13
    // [88] phi from renderBobCleanup to renderBobCleanup::@1 [phi:renderBobCleanup->renderBobCleanup::@1]
    // [88] phi (byte) renderBobCleanup::i#2 = (byte) 0 [phi:renderBobCleanup->renderBobCleanup::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [88] phi from renderBobCleanup::@1 to renderBobCleanup::@1 [phi:renderBobCleanup::@1->renderBobCleanup::@1]
    // [88] phi (byte) renderBobCleanup::i#2 = (byte) renderBobCleanup::i#1 [phi:renderBobCleanup::@1->renderBobCleanup::@1#0] -- register_copy 
    // renderBobCleanup::@1
  __b1:
    // screen = RENDERBOB_CLEANUP[i]
    // [89] (byte~) renderBobCleanup::$1 ← (byte) renderBobCleanup::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [90] (byte*) renderBobCleanup::screen#0 ← *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobCleanup::$1) -- pbuz1=pptc1_derefidx_vbuaa 
    tay
    lda RENDERBOB_CLEANUP,y
    sta.z screen
    lda RENDERBOB_CLEANUP+1,y
    sta.z screen+1
    // screen[0]  = 0
    // [91] *((byte*) renderBobCleanup::screen#0) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    tay
    sta (screen),y
    // screen[40]  = 0
    // [92] *((byte*) renderBobCleanup::screen#0 + (byte) $28) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #$28
    sta (screen),y
    // screen[80]  = 0
    // [93] *((byte*) renderBobCleanup::screen#0 + (byte) $50) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #$50
    sta (screen),y
    // screen[1]  = 0
    // [94] *((byte*) renderBobCleanup::screen#0 + (byte) 1) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #1
    sta (screen),y
    // screen[41]  = 0
    // [95] *((byte*) renderBobCleanup::screen#0 + (byte) $29) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #$29
    sta (screen),y
    // screen[81]  = 0
    // [96] *((byte*) renderBobCleanup::screen#0 + (byte) $51) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #$51
    sta (screen),y
    // screen[2]  = 0
    // [97] *((byte*) renderBobCleanup::screen#0 + (byte) 2) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #2
    sta (screen),y
    // screen[42]  = 0
    // [98] *((byte*) renderBobCleanup::screen#0 + (byte) $2a) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #$2a
    sta (screen),y
    // screen[82]  = 0
    // [99] *((byte*) renderBobCleanup::screen#0 + (byte) $52) ← (byte) 0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #$52
    sta (screen),y
    // for(char i: 0..NUM_BOBS-1)
    // [100] (byte) renderBobCleanup::i#1 ← ++ (byte) renderBobCleanup::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [101] if((byte) renderBobCleanup::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobCleanup::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #NUM_BOBS-1+1
    bne __b1
    // renderBobCleanup::@return
    // }
    // [102] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .label str = BOB_SCREEN
    .const c = 0
    .const num = $3e8
    .label end = str+num
    .label dst = $15
    // [104] phi from memset to memset::@1 [phi:memset->memset::@1]
    // [104] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta.z dst
    lda #>str
    sta.z dst+1
    // memset::@1
  __b1:
    // for(char* dst = str; dst!=end; dst++)
    // [105] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z dst+1
    cmp #>end
    bne __b2
    lda.z dst
    cmp #<end
    bne __b2
    // memset::@return
    // }
    // [106] return 
    rts
    // memset::@2
  __b2:
    // *dst = c
    // [107] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // for(char* dst = str; dst!=end; dst++)
    // [108] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    // [104] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
    // [104] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy 
    jmp __b1
}
  // renderBobInit
// Initialize the tables used by renderBob()
renderBobInit: {
    .label __0 = $15
    .label __1 = $15
    .label __6 = $17
    .label __7 = $15
    // [110] phi from renderBobInit to renderBobInit::@1 [phi:renderBobInit->renderBobInit::@1]
    // [110] phi (byte) renderBobInit::y#2 = (byte) 0 [phi:renderBobInit->renderBobInit::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [110] phi from renderBobInit::@1 to renderBobInit::@1 [phi:renderBobInit::@1->renderBobInit::@1]
    // [110] phi (byte) renderBobInit::y#2 = (byte) renderBobInit::y#1 [phi:renderBobInit::@1->renderBobInit::@1#0] -- register_copy 
    // renderBobInit::@1
  __b1:
    // (unsigned int)y
    // [111] (word~) renderBobInit::$0 ← (word)(byte) renderBobInit::y#2 -- vwuz1=_word_vbuxx 
    txa
    sta.z __0
    lda #0
    sta.z __0+1
    // ((unsigned int)y)*40
    // [112] (word~) renderBobInit::$6 ← (word~) renderBobInit::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 
    lda.z __0
    asl
    sta.z __6
    lda.z __0+1
    rol
    sta.z __6+1
    asl.z __6
    rol.z __6+1
    // [113] (word~) renderBobInit::$7 ← (word~) renderBobInit::$6 + (word~) renderBobInit::$0 -- vwuz1=vwuz2_plus_vwuz1 
    lda.z __7
    clc
    adc.z __6
    sta.z __7
    lda.z __7+1
    adc.z __6+1
    sta.z __7+1
    // [114] (word~) renderBobInit::$1 ← (word~) renderBobInit::$7 << (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
    // MUL40[y] = ((unsigned int)y)*40
    // [115] (byte~) renderBobInit::$4 ← (byte) renderBobInit::y#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [116] *((const word*) MUL40 + (byte~) renderBobInit::$4) ← (word~) renderBobInit::$1 -- pwuc1_derefidx_vbuaa=vwuz1 
    tay
    lda.z __1
    sta MUL40,y
    lda.z __1+1
    sta MUL40+1,y
    // for(char y: 0..0x1f)
    // [117] (byte) renderBobInit::y#1 ← ++ (byte) renderBobInit::y#2 -- vbuxx=_inc_vbuxx 
    inx
    // [118] if((byte) renderBobInit::y#1!=(byte) $20) goto renderBobInit::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$20
    bne __b1
    // [119] phi from renderBobInit::@1 to renderBobInit::@2 [phi:renderBobInit::@1->renderBobInit::@2]
    // [119] phi (byte) renderBobInit::i#2 = (byte) 0 [phi:renderBobInit::@1->renderBobInit::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [119] phi from renderBobInit::@2 to renderBobInit::@2 [phi:renderBobInit::@2->renderBobInit::@2]
    // [119] phi (byte) renderBobInit::i#2 = (byte) renderBobInit::i#1 [phi:renderBobInit::@2->renderBobInit::@2#0] -- register_copy 
    // renderBobInit::@2
  __b2:
    // RENDERBOB_CLEANUP[i] = BOB_SCREEN
    // [120] (byte~) renderBobInit::$5 ← (byte) renderBobInit::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [121] *((const byte**) RENDERBOB_CLEANUP + (byte~) renderBobInit::$5) ← (const byte*) BOB_SCREEN -- pptc1_derefidx_vbuaa=pbuc2 
    tay
    lda #<BOB_SCREEN
    sta RENDERBOB_CLEANUP,y
    lda #>BOB_SCREEN
    sta RENDERBOB_CLEANUP+1,y
    // for(char i: 0..NUM_BOBS-1)
    // [122] (byte) renderBobInit::i#1 ← ++ (byte) renderBobInit::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [123] if((byte) renderBobInit::i#1!=(const byte) NUM_BOBS-(byte) 1+(byte) 1) goto renderBobInit::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #NUM_BOBS-1+1
    bne __b2
    // renderBobInit::@return
    // }
    // [124] return 
    rts
}
  // prepareBobs
// Creates the pre-shifted bobs into BOB_CHARSET and populates the BOB_TABLES
// Modifies PROTO_BOB by shifting it around
prepareBobs: {
    .label bob_table = 3
    .label shift_y = 2
    // Populate charset and tables
    .label bob_glyph = $13
    .label cell = $12
    .label bob_table_idx = $c
    .label shift_x = $d
    // progress_init(BASIC_SCREEN)
    // [126] call progress_init 
    // [207] phi from prepareBobs to progress_init [phi:prepareBobs->progress_init]
    jsr progress_init
    // [127] phi from prepareBobs to prepareBobs::@8 [phi:prepareBobs->prepareBobs::@8]
    // prepareBobs::@8
    // charsetFindOrAddGlyph(PROTO_BOB+48, BOB_CHARSET)
    // [128] call charsetFindOrAddGlyph 
    // [161] phi from prepareBobs::@8 to charsetFindOrAddGlyph [phi:prepareBobs::@8->charsetFindOrAddGlyph]
    // [161] phi (byte*) charsetFindOrAddGlyph::glyph#10 = (const byte*) PROTO_BOB+(byte) $30 [phi:prepareBobs::@8->charsetFindOrAddGlyph#0] -- pbuz1=pbuc1 
    lda #<PROTO_BOB+$30
    sta.z charsetFindOrAddGlyph.glyph
    lda #>PROTO_BOB+$30
    sta.z charsetFindOrAddGlyph.glyph+1
    // [161] phi (byte) bob_charset_next_id#23 = (byte) 0 [phi:prepareBobs::@8->charsetFindOrAddGlyph#1] -- vbuz1=vbuc1 
    lda #0
    sta.z bob_charset_next_id
    jsr charsetFindOrAddGlyph
    // [129] phi from prepareBobs::@8 to prepareBobs::@1 [phi:prepareBobs::@8->prepareBobs::@1]
    // [129] phi (byte) prepareBobs::bob_table_idx#6 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z bob_table_idx
    // [129] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@8->prepareBobs::@1#1] -- register_copy 
    // [129] phi (byte) progress_idx#16 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#2] -- vbuz1=vbuc1 
    sta.z progress_idx
    // [129] phi (byte*) progress_cursor#15 = (const byte*) BASIC_SCREEN [phi:prepareBobs::@8->prepareBobs::@1#3] -- pbuz1=pbuc1 
    lda #<BASIC_SCREEN
    sta.z progress_cursor
    lda #>BASIC_SCREEN
    sta.z progress_cursor+1
    // [129] phi (byte) prepareBobs::shift_y#2 = (byte) 0 [phi:prepareBobs::@8->prepareBobs::@1#4] -- vbuz1=vbuc1 
    lda #0
    sta.z shift_y
    // prepareBobs::@1
  __b1:
    // for(char shift_y=0;shift_y<BOB_SHIFTS_Y;shift_y++)
    // [130] if((byte) prepareBobs::shift_y#2<(const byte) BOB_SHIFTS_Y) goto prepareBobs::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z shift_y
    cmp #BOB_SHIFTS_Y
    bcc b1
    // prepareBobs::@return
    // }
    // [131] return 
    rts
    // [132] phi from prepareBobs::@1 to prepareBobs::@2 [phi:prepareBobs::@1->prepareBobs::@2]
  b1:
    // [132] phi (byte) progress_idx#31 = (byte) progress_idx#16 [phi:prepareBobs::@1->prepareBobs::@2#0] -- register_copy 
    // [132] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#15 [phi:prepareBobs::@1->prepareBobs::@2#1] -- register_copy 
    // [132] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#14 [phi:prepareBobs::@1->prepareBobs::@2#2] -- register_copy 
    // [132] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#6 [phi:prepareBobs::@1->prepareBobs::@2#3] -- register_copy 
    // [132] phi (byte) prepareBobs::shift_x#2 = (byte) 0 [phi:prepareBobs::@1->prepareBobs::@2#4] -- vbuz1=vbuc1 
    lda #0
    sta.z shift_x
    // prepareBobs::@2
  __b2:
    // for(char shift_x=0;shift_x<BOB_SHIFTS_X;shift_x++)
    // [133] if((byte) prepareBobs::shift_x#2<(const byte) BOB_SHIFTS_X) goto prepareBobs::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z shift_x
    cmp #BOB_SHIFTS_X
    bcc __b3
    // [134] phi from prepareBobs::@2 to prepareBobs::@4 [phi:prepareBobs::@2->prepareBobs::@4]
    // prepareBobs::@4
    // protoBobShiftDown()
    // [135] call protoBobShiftDown 
    // [196] phi from prepareBobs::@4 to protoBobShiftDown [phi:prepareBobs::@4->protoBobShiftDown]
    jsr protoBobShiftDown
    // prepareBobs::@9
    // for(char shift_y=0;shift_y<BOB_SHIFTS_Y;shift_y++)
    // [136] (byte) prepareBobs::shift_y#1 ← ++ (byte) prepareBobs::shift_y#2 -- vbuz1=_inc_vbuz1 
    inc.z shift_y
    // [129] phi from prepareBobs::@9 to prepareBobs::@1 [phi:prepareBobs::@9->prepareBobs::@1]
    // [129] phi (byte) prepareBobs::bob_table_idx#6 = (byte) prepareBobs::bob_table_idx#12 [phi:prepareBobs::@9->prepareBobs::@1#0] -- register_copy 
    // [129] phi (byte) bob_charset_next_id#14 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@9->prepareBobs::@1#1] -- register_copy 
    // [129] phi (byte) progress_idx#16 = (byte) progress_idx#31 [phi:prepareBobs::@9->prepareBobs::@1#2] -- register_copy 
    // [129] phi (byte*) progress_cursor#15 = (byte*) progress_cursor#31 [phi:prepareBobs::@9->prepareBobs::@1#3] -- register_copy 
    // [129] phi (byte) prepareBobs::shift_y#2 = (byte) prepareBobs::shift_y#1 [phi:prepareBobs::@9->prepareBobs::@1#4] -- register_copy 
    jmp __b1
    // prepareBobs::@3
  __b3:
    // bob_table = BOB_TABLES + bob_table_idx
    // [137] (byte*) prepareBobs::bob_table#0 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#12 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z bob_table_idx
    clc
    adc #<BOB_TABLES
    sta.z bob_table
    lda #>BOB_TABLES
    adc #0
    sta.z bob_table+1
    // [138] phi from prepareBobs::@3 to prepareBobs::@5 [phi:prepareBobs::@3->prepareBobs::@5]
    // [138] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#31 [phi:prepareBobs::@3->prepareBobs::@5#0] -- register_copy 
    // [138] phi (byte) progress_idx#25 = (byte) progress_idx#31 [phi:prepareBobs::@3->prepareBobs::@5#1] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#0 [phi:prepareBobs::@3->prepareBobs::@5#2] -- register_copy 
    // [138] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#30 [phi:prepareBobs::@3->prepareBobs::@5#3] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_glyph#2 = (const byte*) PROTO_BOB [phi:prepareBobs::@3->prepareBobs::@5#4] -- pbuz1=pbuc1 
    lda #<PROTO_BOB
    sta.z bob_glyph
    lda #>PROTO_BOB
    sta.z bob_glyph+1
    // [138] phi (byte) prepareBobs::cell#2 = (byte) 0 [phi:prepareBobs::@3->prepareBobs::@5#5] -- vbuz1=vbuc1 
    lda #0
    sta.z cell
    // prepareBobs::@5
  __b5:
    // for(char cell = 0; cell<9; cell++)
    // [139] if((byte) prepareBobs::cell#2<(byte) 9) goto prepareBobs::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z cell
    cmp #9
    bcc __b6
    // prepareBobs::@7
    // bob_table_idx++;
    // [140] (byte) prepareBobs::bob_table_idx#1 ← ++ (byte) prepareBobs::bob_table_idx#12 -- vbuz1=_inc_vbuz1 
    inc.z bob_table_idx
    // protoBobShiftRight()
    // [141] call protoBobShiftRight 
    // [179] phi from prepareBobs::@7 to protoBobShiftRight [phi:prepareBobs::@7->protoBobShiftRight]
    jsr protoBobShiftRight
    // [142] phi from prepareBobs::@7 to prepareBobs::@12 [phi:prepareBobs::@7->prepareBobs::@12]
    // prepareBobs::@12
    // protoBobShiftRight()
    // [143] call protoBobShiftRight 
    // [179] phi from prepareBobs::@12 to protoBobShiftRight [phi:prepareBobs::@12->protoBobShiftRight]
    jsr protoBobShiftRight
    // prepareBobs::@13
    // for(char shift_x=0;shift_x<BOB_SHIFTS_X;shift_x++)
    // [144] (byte) prepareBobs::shift_x#1 ← ++ (byte) prepareBobs::shift_x#2 -- vbuz1=_inc_vbuz1 
    inc.z shift_x
    // [132] phi from prepareBobs::@13 to prepareBobs::@2 [phi:prepareBobs::@13->prepareBobs::@2]
    // [132] phi (byte) progress_idx#31 = (byte) progress_idx#25 [phi:prepareBobs::@13->prepareBobs::@2#0] -- register_copy 
    // [132] phi (byte*) progress_cursor#31 = (byte*) progress_cursor#24 [phi:prepareBobs::@13->prepareBobs::@2#1] -- register_copy 
    // [132] phi (byte) bob_charset_next_id#30 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@13->prepareBobs::@2#2] -- register_copy 
    // [132] phi (byte) prepareBobs::bob_table_idx#12 = (byte) prepareBobs::bob_table_idx#1 [phi:prepareBobs::@13->prepareBobs::@2#3] -- register_copy 
    // [132] phi (byte) prepareBobs::shift_x#2 = (byte) prepareBobs::shift_x#1 [phi:prepareBobs::@13->prepareBobs::@2#4] -- register_copy 
    jmp __b2
    // prepareBobs::@6
  __b6:
    // charsetFindOrAddGlyph(bob_glyph, BOB_CHARSET)
    // [145] (byte*) charsetFindOrAddGlyph::glyph#1 ← (byte*) prepareBobs::bob_glyph#2
    // [146] call charsetFindOrAddGlyph 
    // [161] phi from prepareBobs::@6 to charsetFindOrAddGlyph [phi:prepareBobs::@6->charsetFindOrAddGlyph]
    // [161] phi (byte*) charsetFindOrAddGlyph::glyph#10 = (byte*) charsetFindOrAddGlyph::glyph#1 [phi:prepareBobs::@6->charsetFindOrAddGlyph#0] -- register_copy 
    // [161] phi (byte) bob_charset_next_id#23 = (byte) bob_charset_next_id#21 [phi:prepareBobs::@6->charsetFindOrAddGlyph#1] -- register_copy 
    jsr charsetFindOrAddGlyph
    // charsetFindOrAddGlyph(bob_glyph, BOB_CHARSET)
    // [147] (byte) charsetFindOrAddGlyph::return#1 ← (byte) charsetFindOrAddGlyph::glyph_id#11 -- vbuaa=vbuxx 
    txa
    // prepareBobs::@10
    // [148] (byte~) prepareBobs::$6 ← (byte) charsetFindOrAddGlyph::return#1
    // *bob_table = charsetFindOrAddGlyph(bob_glyph, BOB_CHARSET)
    // [149] *((byte*) prepareBobs::bob_table#2) ← (byte~) prepareBobs::$6 -- _deref_pbuz1=vbuaa 
    // Look for an existing char in BOB_CHARSET 
    ldy #0
    sta (bob_table),y
    // bob_glyph+=8
    // [150] (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    // Move to the next glyph
    lda #8
    clc
    adc.z bob_glyph
    sta.z bob_glyph
    bcc !+
    inc.z bob_glyph+1
  !:
    // bob_table += BOB_SHIFTS_X*BOB_SHIFTS_Y
    // [151] (byte*) prepareBobs::bob_table#1 ← (byte*) prepareBobs::bob_table#2 + (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y -- pbuz1=pbuz1_plus_vbuc1 
    // Move to the next sub-table
    lda #BOB_SHIFTS_X*BOB_SHIFTS_Y
    clc
    adc.z bob_table
    sta.z bob_table
    bcc !+
    inc.z bob_table+1
  !:
    // progress_inc()
    // [152] call progress_inc 
    jsr progress_inc
    // prepareBobs::@11
    // for(char cell = 0; cell<9; cell++)
    // [153] (byte) prepareBobs::cell#1 ← ++ (byte) prepareBobs::cell#2 -- vbuz1=_inc_vbuz1 
    inc.z cell
    // [138] phi from prepareBobs::@11 to prepareBobs::@5 [phi:prepareBobs::@11->prepareBobs::@5]
    // [138] phi (byte*) progress_cursor#24 = (byte*) progress_cursor#17 [phi:prepareBobs::@11->prepareBobs::@5#0] -- register_copy 
    // [138] phi (byte) progress_idx#25 = (byte) progress_idx#10 [phi:prepareBobs::@11->prepareBobs::@5#1] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_table#2 = (byte*) prepareBobs::bob_table#1 [phi:prepareBobs::@11->prepareBobs::@5#2] -- register_copy 
    // [138] phi (byte) bob_charset_next_id#21 = (byte) bob_charset_next_id#16 [phi:prepareBobs::@11->prepareBobs::@5#3] -- register_copy 
    // [138] phi (byte*) prepareBobs::bob_glyph#2 = (byte*) prepareBobs::bob_glyph#1 [phi:prepareBobs::@11->prepareBobs::@5#4] -- register_copy 
    // [138] phi (byte) prepareBobs::cell#2 = (byte) prepareBobs::cell#1 [phi:prepareBobs::@11->prepareBobs::@5#5] -- register_copy 
    jmp __b5
}
  // progress_inc
// Increase PETSCII progress one bit
// Done by increasing the character until the idx is 8 and then moving to the next char
progress_inc: {
    // if(++progress_idx==8)
    // [154] (byte) progress_idx#8 ← ++ (byte) progress_idx#25 -- vbuz1=_inc_vbuz1 
    inc.z progress_idx
    // [155] if((byte) progress_idx#8!=(byte) 8) goto progress_inc::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #8
    cmp.z progress_idx
    bne __b1
    // progress_inc::@2
    // *progress_cursor = progress_chars[8]
    // [156] *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars+(byte) 8) -- _deref_pbuz1=_deref_pbuc1 
    lda progress_chars+8
    ldy #0
    sta (progress_cursor),y
    // progress_cursor++;
    // [157] (byte*) progress_cursor#8 ← ++ (byte*) progress_cursor#24 -- pbuz1=_inc_pbuz1 
    inc.z progress_cursor
    bne !+
    inc.z progress_cursor+1
  !:
    // [158] phi from progress_inc::@2 to progress_inc::@1 [phi:progress_inc::@2->progress_inc::@1]
    // [158] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#8 [phi:progress_inc::@2->progress_inc::@1#0] -- register_copy 
    // [158] phi (byte) progress_idx#10 = (byte) 0 [phi:progress_inc::@2->progress_inc::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z progress_idx
    // [158] phi from progress_inc to progress_inc::@1 [phi:progress_inc->progress_inc::@1]
    // [158] phi (byte*) progress_cursor#17 = (byte*) progress_cursor#24 [phi:progress_inc->progress_inc::@1#0] -- register_copy 
    // [158] phi (byte) progress_idx#10 = (byte) progress_idx#8 [phi:progress_inc->progress_inc::@1#1] -- register_copy 
    // progress_inc::@1
  __b1:
    // *progress_cursor = progress_chars[progress_idx]
    // [159] *((byte*) progress_cursor#17) ← *((const byte*) progress_inc::progress_chars + (byte) progress_idx#10) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy.z progress_idx
    lda progress_chars,y
    ldy #0
    sta (progress_cursor),y
    // progress_inc::@return
    // }
    // [160] return 
    rts
    // Progress characters
    progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0
}
  // charsetFindOrAddGlyph
// Looks through a charset to find a glyph if present. If not present it is added.
// Returns the glyph ID
// charsetFindOrAddGlyph(byte* zp($13) glyph)
charsetFindOrAddGlyph: {
    .label glyph = $13
    .label glyph_cursor = 5
    // [162] phi from charsetFindOrAddGlyph to charsetFindOrAddGlyph::@1 [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1]
    // [162] phi (byte*) charsetFindOrAddGlyph::glyph_cursor#11 = (const byte*) BOB_CHARSET [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1#0] -- pbuz1=pbuc1 
    lda #<BOB_CHARSET
    sta.z glyph_cursor
    lda #>BOB_CHARSET
    sta.z glyph_cursor+1
    // [162] phi (byte) charsetFindOrAddGlyph::glyph_id#11 = (byte) 0 [phi:charsetFindOrAddGlyph->charsetFindOrAddGlyph::@1#1] -- vbuxx=vbuc1 
    ldx #0
    // charsetFindOrAddGlyph::@1
  __b1:
    // while(glyph_id!=bob_charset_next_id)
    // [163] if((byte) charsetFindOrAddGlyph::glyph_id#11!=(byte) bob_charset_next_id#23) goto charsetFindOrAddGlyph::@2 -- vbuxx_neq_vbuz1_then_la1 
    cpx.z bob_charset_next_id
    bne b1
    // [164] phi from charsetFindOrAddGlyph::@1 to charsetFindOrAddGlyph::@7 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@7]
    // [164] phi (byte) charsetFindOrAddGlyph::i1#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@7#0] -- vbuyy=vbuc1 
    ldy #0
  // Not found - add it
    // charsetFindOrAddGlyph::@7
  __b7:
    // for(char i=0;i<8;i++)
    // [165] if((byte) charsetFindOrAddGlyph::i1#2<(byte) 8) goto charsetFindOrAddGlyph::@8 -- vbuyy_lt_vbuc1_then_la1 
    cpy #8
    bcc __b8
    // charsetFindOrAddGlyph::@9
    // bob_charset_next_id++;
    // [166] (byte) bob_charset_next_id#8 ← ++ (byte) bob_charset_next_id#23 -- vbuz1=_inc_vbuz1 
    inc.z bob_charset_next_id
    // [167] phi from charsetFindOrAddGlyph::@5 charsetFindOrAddGlyph::@9 to charsetFindOrAddGlyph::@return [phi:charsetFindOrAddGlyph::@5/charsetFindOrAddGlyph::@9->charsetFindOrAddGlyph::@return]
    // [167] phi (byte) bob_charset_next_id#16 = (byte) bob_charset_next_id#23 [phi:charsetFindOrAddGlyph::@5/charsetFindOrAddGlyph::@9->charsetFindOrAddGlyph::@return#0] -- register_copy 
    // charsetFindOrAddGlyph::@return
    // }
    // [168] return 
    rts
    // charsetFindOrAddGlyph::@8
  __b8:
    // glyph_cursor[i]=glyph[i]
    // [169] *((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i1#2) ← *((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i1#2) -- pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy 
    lda (glyph),y
    sta (glyph_cursor),y
    // for(char i=0;i<8;i++)
    // [170] (byte) charsetFindOrAddGlyph::i1#1 ← ++ (byte) charsetFindOrAddGlyph::i1#2 -- vbuyy=_inc_vbuyy 
    iny
    // [164] phi from charsetFindOrAddGlyph::@8 to charsetFindOrAddGlyph::@7 [phi:charsetFindOrAddGlyph::@8->charsetFindOrAddGlyph::@7]
    // [164] phi (byte) charsetFindOrAddGlyph::i1#2 = (byte) charsetFindOrAddGlyph::i1#1 [phi:charsetFindOrAddGlyph::@8->charsetFindOrAddGlyph::@7#0] -- register_copy 
    jmp __b7
    // [171] phi from charsetFindOrAddGlyph::@1 to charsetFindOrAddGlyph::@2 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@2]
  b1:
    // [171] phi (byte) charsetFindOrAddGlyph::i#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@1->charsetFindOrAddGlyph::@2#0] -- vbuyy=vbuc1 
    ldy #0
    // charsetFindOrAddGlyph::@2
  __b2:
    // for(char i=0;i<8;i++)
    // [172] if((byte) charsetFindOrAddGlyph::i#2<(byte) 8) goto charsetFindOrAddGlyph::@3 -- vbuyy_lt_vbuc1_then_la1 
    cpy #8
    bcc __b3
    // [174] phi from charsetFindOrAddGlyph::@2 to charsetFindOrAddGlyph::@5 [phi:charsetFindOrAddGlyph::@2->charsetFindOrAddGlyph::@5]
    // [174] phi (byte) charsetFindOrAddGlyph::found#2 = (byte) 1 [phi:charsetFindOrAddGlyph::@2->charsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 
    lda #1
    jmp __b5
    // charsetFindOrAddGlyph::@3
  __b3:
    // if(glyph_cursor[i]!=glyph[i])
    // [173] if(*((byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) charsetFindOrAddGlyph::i#2)==*((byte*) charsetFindOrAddGlyph::glyph#10 + (byte) charsetFindOrAddGlyph::i#2)) goto charsetFindOrAddGlyph::@4 -- pbuz1_derefidx_vbuyy_eq_pbuz2_derefidx_vbuyy_then_la1 
    lda (glyph_cursor),y
    cmp (glyph),y
    beq __b4
    // [174] phi from charsetFindOrAddGlyph::@3 to charsetFindOrAddGlyph::@5 [phi:charsetFindOrAddGlyph::@3->charsetFindOrAddGlyph::@5]
    // [174] phi (byte) charsetFindOrAddGlyph::found#2 = (byte) 0 [phi:charsetFindOrAddGlyph::@3->charsetFindOrAddGlyph::@5#0] -- vbuaa=vbuc1 
    lda #0
    // charsetFindOrAddGlyph::@5
  __b5:
    // if(found)
    // [175] if((byte) 0==(byte) charsetFindOrAddGlyph::found#2) goto charsetFindOrAddGlyph::@6 -- vbuc1_eq_vbuaa_then_la1 
    cmp #0
    beq __b6
    rts
    // charsetFindOrAddGlyph::@6
  __b6:
    // glyph_id++;
    // [176] (byte) charsetFindOrAddGlyph::glyph_id#1 ← ++ (byte) charsetFindOrAddGlyph::glyph_id#11 -- vbuxx=_inc_vbuxx 
    inx
    // glyph_cursor +=8
    // [177] (byte*) charsetFindOrAddGlyph::glyph_cursor#1 ← (byte*) charsetFindOrAddGlyph::glyph_cursor#11 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    lda #8
    clc
    adc.z glyph_cursor
    sta.z glyph_cursor
    bcc !+
    inc.z glyph_cursor+1
  !:
    // [162] phi from charsetFindOrAddGlyph::@6 to charsetFindOrAddGlyph::@1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1]
    // [162] phi (byte*) charsetFindOrAddGlyph::glyph_cursor#11 = (byte*) charsetFindOrAddGlyph::glyph_cursor#1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1#0] -- register_copy 
    // [162] phi (byte) charsetFindOrAddGlyph::glyph_id#11 = (byte) charsetFindOrAddGlyph::glyph_id#1 [phi:charsetFindOrAddGlyph::@6->charsetFindOrAddGlyph::@1#1] -- register_copy 
    jmp __b1
    // charsetFindOrAddGlyph::@4
  __b4:
    // for(char i=0;i<8;i++)
    // [178] (byte) charsetFindOrAddGlyph::i#1 ← ++ (byte) charsetFindOrAddGlyph::i#2 -- vbuyy=_inc_vbuyy 
    iny
    // [171] phi from charsetFindOrAddGlyph::@4 to charsetFindOrAddGlyph::@2 [phi:charsetFindOrAddGlyph::@4->charsetFindOrAddGlyph::@2]
    // [171] phi (byte) charsetFindOrAddGlyph::i#2 = (byte) charsetFindOrAddGlyph::i#1 [phi:charsetFindOrAddGlyph::@4->charsetFindOrAddGlyph::@2#0] -- register_copy 
    jmp __b2
}
  // protoBobShiftRight
// Shift PROTO_BOB right one X pixel
protoBobShiftRight: {
    .label carry = $f
    .label i = $12
    // [180] phi from protoBobShiftRight to protoBobShiftRight::@1 [phi:protoBobShiftRight->protoBobShiftRight::@1]
    // [180] phi (byte) protoBobShiftRight::carry#2 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#0] -- vbuyy=vbuc1 
    ldy #0
    // [180] phi (byte) protoBobShiftRight::j#3 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#1] -- vbuxx=vbuc1 
    ldx #0
    // [180] phi (byte) protoBobShiftRight::i#2 = (byte) 0 [phi:protoBobShiftRight->protoBobShiftRight::@1#2] -- vbuz1=vbuc1 
    txa
    sta.z i
    // protoBobShiftRight::@1
  __b1:
    // for(char i=0;i<3*3*8;i++)
    // [181] if((byte) protoBobShiftRight::i#2<(byte)(number) 3*(number) 3*(number) 8) goto protoBobShiftRight::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #3*3*8
    bcc __b2
    // protoBobShiftRight::@return
    // }
    // [182] return 
    rts
    // protoBobShiftRight::@2
  __b2:
    // PROTO_BOB[j]&1
    // [183] (byte~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 
    lda #1
    and PROTO_BOB,x
    // (PROTO_BOB[j]&1)?0x80ub:0ub
    // [184] if((byte) 0!=(byte~) protoBobShiftRight::$1) goto protoBobShiftRight::@3 -- vbuc1_neq_vbuaa_then_la1 
    cmp #0
    bne __b3
    // [186] phi from protoBobShiftRight::@2 to protoBobShiftRight::@4 [phi:protoBobShiftRight::@2->protoBobShiftRight::@4]
    // [186] phi (byte) protoBobShiftRight::carry#1 = (byte) 0 [phi:protoBobShiftRight::@2->protoBobShiftRight::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z carry
    jmp __b4
    // [185] phi from protoBobShiftRight::@2 to protoBobShiftRight::@3 [phi:protoBobShiftRight::@2->protoBobShiftRight::@3]
    // protoBobShiftRight::@3
  __b3:
    // [186] phi from protoBobShiftRight::@3 to protoBobShiftRight::@4 [phi:protoBobShiftRight::@3->protoBobShiftRight::@4]
    // [186] phi (byte) protoBobShiftRight::carry#1 = (byte) $80 [phi:protoBobShiftRight::@3->protoBobShiftRight::@4#0] -- vbuz1=vbuc1 
    lda #$80
    sta.z carry
    // protoBobShiftRight::@4
  __b4:
    // PROTO_BOB[j]>>1
    // [187] (byte~) protoBobShiftRight::$5 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) >> (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1 
    lda PROTO_BOB,x
    lsr
    // carry | PROTO_BOB[j]>>1
    // [188] (byte~) protoBobShiftRight::$6 ← (byte) protoBobShiftRight::carry#2 | (byte~) protoBobShiftRight::$5 -- vbuaa=vbuyy_bor_vbuaa 
    sty.z $ff
    ora.z $ff
    // PROTO_BOB[j] = carry | PROTO_BOB[j]>>1
    // [189] *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) ← (byte~) protoBobShiftRight::$6 -- pbuc1_derefidx_vbuxx=vbuaa 
    // Shift value and add old carry
    sta PROTO_BOB,x
    // if(j>=48)
    // [190] if((byte) protoBobShiftRight::j#3>=(byte) $30) goto protoBobShiftRight::@5 -- vbuxx_ge_vbuc1_then_la1 
    // Increment j to iterate over the PROTO_BOB left-to-right, top-to-bottom (0, 24, 48, 1, 25, 49, ...)
    cpx #$30
    bcs __b5
    // protoBobShiftRight::@7
    // j+=24
    // [191] (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#3 + (byte) $18 -- vbuxx=vbuxx_plus_vbuc1 
    txa
    axs #-[$18]
    // [192] phi from protoBobShiftRight::@5 protoBobShiftRight::@7 to protoBobShiftRight::@6 [phi:protoBobShiftRight::@5/protoBobShiftRight::@7->protoBobShiftRight::@6]
    // [192] phi (byte) protoBobShiftRight::j#10 = (byte) protoBobShiftRight::j#1 [phi:protoBobShiftRight::@5/protoBobShiftRight::@7->protoBobShiftRight::@6#0] -- register_copy 
    // protoBobShiftRight::@6
  __b6:
    // for(char i=0;i<3*3*8;i++)
    // [193] (byte) protoBobShiftRight::i#1 ← ++ (byte) protoBobShiftRight::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [194] (byte) protoBobShiftRight::carry#10 ← (byte) protoBobShiftRight::carry#1 -- vbuyy=vbuz1 
    ldy.z carry
    // [180] phi from protoBobShiftRight::@6 to protoBobShiftRight::@1 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1]
    // [180] phi (byte) protoBobShiftRight::carry#2 = (byte) protoBobShiftRight::carry#10 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#0] -- register_copy 
    // [180] phi (byte) protoBobShiftRight::j#3 = (byte) protoBobShiftRight::j#10 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#1] -- register_copy 
    // [180] phi (byte) protoBobShiftRight::i#2 = (byte) protoBobShiftRight::i#1 [phi:protoBobShiftRight::@6->protoBobShiftRight::@1#2] -- register_copy 
    jmp __b1
    // protoBobShiftRight::@5
  __b5:
    // j-=47
    // [195] (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#3 - (byte) $2f -- vbuxx=vbuxx_minus_vbuc1 
    txa
    axs #$2f
    jmp __b6
}
  // protoBobShiftDown
// Shift PROTO_BOB down one Y pixel
// At the same time restore PROTO_BOB X by shifting 8 pixels left
protoBobShiftDown: {
    // [197] phi from protoBobShiftDown to protoBobShiftDown::@1 [phi:protoBobShiftDown->protoBobShiftDown::@1]
    // [197] phi (byte) protoBobShiftDown::i#2 = (byte) $17 [phi:protoBobShiftDown->protoBobShiftDown::@1#0] -- vbuxx=vbuc1 
    ldx #$17
    // protoBobShiftDown::@1
  __b1:
    // for(char i=23;i>0;i--)
    // [198] if((byte) protoBobShiftDown::i#2>(byte) 0) goto protoBobShiftDown::@2 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne __b2
    // protoBobShiftDown::@3
    // PROTO_BOB[0] = 0
    // [199] *((const byte*) PROTO_BOB) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta PROTO_BOB
    // PROTO_BOB[24] = 0
    // [200] *((const byte*) PROTO_BOB+(byte) $18) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta PROTO_BOB+$18
    // PROTO_BOB[48] = 0
    // [201] *((const byte*) PROTO_BOB+(byte) $30) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta PROTO_BOB+$30
    // protoBobShiftDown::@return
    // }
    // [202] return 
    rts
    // protoBobShiftDown::@2
  __b2:
    // PROTO_BOB[i] = (PROTO_BOB+23)[i]
    // [203] *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $17 + (byte) protoBobShiftDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx 
    lda PROTO_BOB+$17,x
    sta PROTO_BOB,x
    // (PROTO_BOB+24)[i] = (PROTO_BOB+47)[i]
    // [204] *((const byte*) PROTO_BOB+(byte) $18 + (byte) protoBobShiftDown::i#2) ← *((const byte*) PROTO_BOB+(byte) $2f + (byte) protoBobShiftDown::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx 
    lda PROTO_BOB+$2f,x
    sta PROTO_BOB+$18,x
    // (PROTO_BOB+48)[i] = 0x00
    // [205] *((const byte*) PROTO_BOB+(byte) $30 + (byte) protoBobShiftDown::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta PROTO_BOB+$30,x
    // for(char i=23;i>0;i--)
    // [206] (byte) protoBobShiftDown::i#1 ← -- (byte) protoBobShiftDown::i#2 -- vbuxx=_dec_vbuxx 
    dex
    // [197] phi from protoBobShiftDown::@2 to protoBobShiftDown::@1 [phi:protoBobShiftDown::@2->protoBobShiftDown::@1]
    // [197] phi (byte) protoBobShiftDown::i#2 = (byte) protoBobShiftDown::i#1 [phi:protoBobShiftDown::@2->protoBobShiftDown::@1#0] -- register_copy 
    jmp __b1
}
  // progress_init
// Initialize the PETSCII progress bar
progress_init: {
    // progress_init::@return
    // }
    // [208] return 
    rts
}
  // mulf_init
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
mulf_init: {
    // x/2
    .label c = 9
    // Counter used for determining x%2==0
    .label sqr1_hi = $a
    // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4
    .label sqr = $15
    .label sqr1_lo = 7
    // Decrease or increase x_255 - initially we decrease
    .label sqr2_hi = $13
    .label sqr2_lo = $10
    //Start with g(0)=f(255)
    .label dir = $c
    // [210] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1]
    // [210] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [210] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_hi+1
    sta.z sqr1_hi
    lda #>mulf_sqr1_hi+1
    sta.z sqr1_hi+1
    // [210] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 
    txa
    sta.z sqr
    sta.z sqr+1
    // [210] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 
    sta.z c
    // [210] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_lo+1
    sta.z sqr1_lo
    lda #>mulf_sqr1_lo+1
    sta.z sqr1_lo+1
    // mulf_init::@1
  __b1:
    // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++)
    // [211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z sqr1_lo+1
    cmp #>mulf_sqr1_lo+$200
    bne __b2
    lda.z sqr1_lo
    cmp #<mulf_sqr1_lo+$200
    bne __b2
    // [212] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5]
    // [212] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z dir
    // [212] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_hi
    sta.z sqr2_hi
    lda #>mulf_sqr2_hi
    sta.z sqr2_hi+1
    // [212] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 
    ldx #-1
    // [212] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_lo
    sta.z sqr2_lo
    lda #>mulf_sqr2_lo
    sta.z sqr2_lo+1
    // mulf_init::@5
  __b5:
    // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++)
    // [213] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 
    lda.z sqr2_lo+1
    cmp #>mulf_sqr2_lo+$1ff
    bne __b6
    lda.z sqr2_lo
    cmp #<mulf_sqr2_lo+$1ff
    bne __b6
    // mulf_init::@7
    // *(mulf_sqr2_lo+511) = *(mulf_sqr1_lo+256)
    // [214] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 
    // Set the very last value g(511) = f(256)
    lda mulf_sqr1_lo+$100
    sta mulf_sqr2_lo+$1ff
    // *(mulf_sqr2_hi+511) = *(mulf_sqr1_hi+256)
    // [215] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 
    lda mulf_sqr1_hi+$100
    sta mulf_sqr2_hi+$1ff
    // mulf_init::@return
    // }
    // [216] return 
    rts
    // mulf_init::@6
  __b6:
    // *sqr2_lo = mulf_sqr1_lo[x_255]
    // [217] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_lo,x
    ldy #0
    sta (sqr2_lo),y
    // *sqr2_hi++ = mulf_sqr1_hi[x_255]
    // [218] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_hi,x
    sta (sqr2_hi),y
    // *sqr2_hi++ = mulf_sqr1_hi[x_255];
    // [219] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr2_hi
    bne !+
    inc.z sqr2_hi+1
  !:
    // x_255 = x_255 + dir
    // [220] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 
    txa
    clc
    adc.z dir
    tax
    // if(x_255==0)
    // [221] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne __b8
    // [223] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8]
    // [223] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 
    lda #1
    sta.z dir
    // [222] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9]
    // mulf_init::@9
    // [223] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8]
    // [223] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy 
    // mulf_init::@8
  __b8:
    // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++)
    // [224] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr2_lo
    bne !+
    inc.z sqr2_lo+1
  !:
    // [212] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5]
    // [212] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy 
    // [212] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy 
    // [212] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy 
    // [212] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy 
    jmp __b5
    // mulf_init::@2
  __b2:
    // if((++c&1)==0)
    // [225] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 
    inc.z c
    // ++c&1
    // [226] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 
    lda #1
    and.z c
    // if((++c&1)==0)
    // [227] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne __b3
    // mulf_init::@4
    // x_2++;
    // [228] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx 
    inx
    // sqr++;
    // [229] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 
    inc.z sqr
    bne !+
    inc.z sqr+1
  !:
    // [230] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3]
    // [230] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy 
    // [230] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy 
    // mulf_init::@3
  __b3:
    // <sqr
    // [231] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 
    lda.z sqr
    // *sqr1_lo = <sqr
    // [232] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (sqr1_lo),y
    // >sqr
    // [233] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 
    lda.z sqr+1
    // *sqr1_hi++ = >sqr
    // [234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa 
    sta (sqr1_hi),y
    // *sqr1_hi++ = >sqr;
    // [235] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr1_hi
    bne !+
    inc.z sqr1_hi+1
  !:
    // sqr = sqr + x_2
    // [236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx 
    txa
    clc
    adc.z sqr
    sta.z sqr
    bcc !+
    inc.z sqr+1
  !:
    // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++)
    // [237] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 
    inc.z sqr1_lo
    bne !+
    inc.z sqr1_lo+1
  !:
    // [210] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1]
    // [210] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy 
    // [210] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy 
    // [210] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy 
    // [210] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy 
    // [210] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy 
    jmp __b1
}
  // File Data
  // Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7)
  keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f
  // Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7)
  keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80
  // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
  // <f(x) = <(( x * x )/4)
  .align $100
  mulf_sqr1_lo: .fill $200, 0
  // >f(x) = >(( x * x )/4)
  .align $100
  mulf_sqr1_hi: .fill $200, 0
  // <g(x) =  <((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_lo: .fill $200, 0
  // >g(x) = >((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_hi: .fill $200, 0
  // The prototype BOB (a 3x3 char image with a bob image in the upper 2x2 chars)
  // The chars are layout as follows with data in chars 0, 1, 3, 4 initially
  //   0 3 6
  //   1 4 7
  //   2 5 8
PROTO_BOB:
.var pic = LoadPicture("smiley.png", List().add($000000, $ffffff))
	.for (var x=0;x<3; x++)
    	.for (var y=0; y<24; y++)
            .byte pic.getSinglecolorByte(x,y)

  // Tables containing the char to use for a specific cell of a shifted BOB.
  // char_id = BOB_TABLES[cell*BOB_SUBTABLE_SIZE + shift_y*BOB_SHIFTS_X + shift_x];
  BOB_TABLES: .fill 9*8*4, 0
  // Table used for deleting rendered BOB's. Contains pointers to first char of each BOB.
  RENDERBOB_CLEANUP: .fill 2*NUM_BOBS, 0
  // *40 Table unsigned int[0x20] MUL40 = { ((unsigned int)i)*40 };
  MUL40: .fill 2*$20, 0

