
CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*) print_line_cursor#0 ← (byte*) print_screen#0
  (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
  to:@12
print_sbyte_at: scope:[print_sbyte_at]  from main::@1 main::@10 main::@2
  (byte*) print_sbyte_at::at#6 ← phi( main::@1/(byte*) print_sbyte_at::at#0 main::@10/(byte*) print_sbyte_at::at#2 main::@2/(byte*) print_sbyte_at::at#1 )
  (signed byte) print_sbyte_at::b#4 ← phi( main::@1/(signed byte) print_sbyte_at::b#1 main::@10/(signed byte) print_sbyte_at::b#3 main::@2/(signed byte) print_sbyte_at::b#2 )
  (bool~) print_sbyte_at::$0 ← (signed byte) print_sbyte_at::b#4 < (byte/signed byte/word/signed word/dword/signed dword) 0
  if((bool~) print_sbyte_at::$0) goto print_sbyte_at::@1
  to:print_sbyte_at::@3
print_sbyte_at::@1: scope:[print_sbyte_at]  from print_sbyte_at
  (signed byte) print_sbyte_at::b#7 ← phi( print_sbyte_at/(signed byte) print_sbyte_at::b#4 )
  (byte*) print_sbyte_at::at#3 ← phi( print_sbyte_at/(byte*) print_sbyte_at::at#6 )
  (byte) print_char_at::ch#0 ← (byte) '-'
  (byte*) print_char_at::at#0 ← (byte*) print_sbyte_at::at#3
  call print_char_at 
  to:print_sbyte_at::@5
print_sbyte_at::@5: scope:[print_sbyte_at]  from print_sbyte_at::@1
  (byte*) print_sbyte_at::at#7 ← phi( print_sbyte_at::@1/(byte*) print_sbyte_at::at#3 )
  (signed byte) print_sbyte_at::b#5 ← phi( print_sbyte_at::@1/(signed byte) print_sbyte_at::b#7 )
  (signed byte~) print_sbyte_at::$3 ← - (signed byte) print_sbyte_at::b#5
  (signed byte) print_sbyte_at::b#0 ← (signed byte~) print_sbyte_at::$3
  to:print_sbyte_at::@2
print_sbyte_at::@3: scope:[print_sbyte_at]  from print_sbyte_at
  (signed byte) print_sbyte_at::b#9 ← phi( print_sbyte_at/(signed byte) print_sbyte_at::b#4 )
  (byte*) print_sbyte_at::at#4 ← phi( print_sbyte_at/(byte*) print_sbyte_at::at#6 )
  (byte) print_char_at::ch#1 ← (byte) ' '
  (byte*) print_char_at::at#1 ← (byte*) print_sbyte_at::at#4
  call print_char_at 
  to:print_sbyte_at::@6
print_sbyte_at::@6: scope:[print_sbyte_at]  from print_sbyte_at::@3
  (byte*) print_sbyte_at::at#8 ← phi( print_sbyte_at::@3/(byte*) print_sbyte_at::at#4 )
  (signed byte) print_sbyte_at::b#8 ← phi( print_sbyte_at::@3/(signed byte) print_sbyte_at::b#9 )
  to:print_sbyte_at::@2
print_sbyte_at::@2: scope:[print_sbyte_at]  from print_sbyte_at::@5 print_sbyte_at::@6
  (byte*) print_sbyte_at::at#5 ← phi( print_sbyte_at::@5/(byte*) print_sbyte_at::at#7 print_sbyte_at::@6/(byte*) print_sbyte_at::at#8 )
  (signed byte) print_sbyte_at::b#6 ← phi( print_sbyte_at::@5/(signed byte) print_sbyte_at::b#0 print_sbyte_at::@6/(signed byte) print_sbyte_at::b#8 )
  (byte~) print_sbyte_at::$4 ← ((byte)) (signed byte) print_sbyte_at::b#6
  (byte*~) print_sbyte_at::$5 ← (byte*) print_sbyte_at::at#5 + (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) print_byte_at::b#0 ← (byte~) print_sbyte_at::$4
  (byte*) print_byte_at::at#0 ← (byte*~) print_sbyte_at::$5
  call print_byte_at 
  to:print_sbyte_at::@7
print_sbyte_at::@7: scope:[print_sbyte_at]  from print_sbyte_at::@2
  to:print_sbyte_at::@return
print_sbyte_at::@return: scope:[print_sbyte_at]  from print_sbyte_at::@7
  return 
  to:@return
@12: scope:[]  from @begin
  (byte*) print_screen#9 ← phi( @begin/(byte*) print_screen#0 )
  (byte*) print_char_cursor#25 ← phi( @begin/(byte*) print_char_cursor#0 )
  (byte*) print_line_cursor#25 ← phi( @begin/(byte*) print_line_cursor#0 )
  (byte[]) print_hextab#0 ← (const string) $4
  to:@19
print_byte_at: scope:[print_byte_at]  from print_sbyte_at::@2
  (byte*) print_byte_at::at#1 ← phi( print_sbyte_at::@2/(byte*) print_byte_at::at#0 )
  (byte) print_byte_at::b#1 ← phi( print_sbyte_at::@2/(byte) print_byte_at::b#0 )
  (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#1 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) print_char_at::ch#2 ← *((byte[]) print_hextab#0 + (byte~) print_byte_at::$0)
  (byte*) print_char_at::at#2 ← (byte*) print_byte_at::at#1
  call print_char_at 
  to:print_byte_at::@1
print_byte_at::@1: scope:[print_byte_at]  from print_byte_at
  (byte*) print_byte_at::at#2 ← phi( print_byte_at/(byte*) print_byte_at::at#1 )
  (byte) print_byte_at::b#2 ← phi( print_byte_at/(byte) print_byte_at::b#1 )
  (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte/signed byte/word/signed word/dword/signed dword) 15
  (byte*~) print_byte_at::$3 ← (byte*) print_byte_at::at#2 + (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) print_char_at::ch#3 ← *((byte[]) print_hextab#0 + (byte~) print_byte_at::$2)
  (byte*) print_char_at::at#3 ← (byte*~) print_byte_at::$3
  call print_char_at 
  to:print_byte_at::@2
print_byte_at::@2: scope:[print_byte_at]  from print_byte_at::@1
  to:print_byte_at::@return
print_byte_at::@return: scope:[print_byte_at]  from print_byte_at::@2
  return 
  to:@return
print_char_at: scope:[print_char_at]  from print_byte_at print_byte_at::@1 print_sbyte_at::@1 print_sbyte_at::@3
  (byte*) print_char_at::at#4 ← phi( print_byte_at/(byte*) print_char_at::at#2 print_byte_at::@1/(byte*) print_char_at::at#3 print_sbyte_at::@1/(byte*) print_char_at::at#0 print_sbyte_at::@3/(byte*) print_char_at::at#1 )
  (byte) print_char_at::ch#4 ← phi( print_byte_at/(byte) print_char_at::ch#2 print_byte_at::@1/(byte) print_char_at::ch#3 print_sbyte_at::@1/(byte) print_char_at::ch#0 print_sbyte_at::@3/(byte) print_char_at::ch#1 )
  *((byte*) print_char_at::at#4) ← (byte) print_char_at::ch#4
  to:print_char_at::@return
print_char_at::@return: scope:[print_char_at]  from print_char_at
  return 
  to:@return
print_cls: scope:[print_cls]  from init_screen
  (byte*) print_screen#1 ← phi( init_screen/(byte*) print_screen#4 )
  (byte*) print_cls::sc#0 ← (byte*) print_screen#1
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 print_cls::@1/(byte*) print_screen#2 )
  (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 )
  *((byte*) print_cls::sc#2) ← (byte) ' '
  (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (word/signed word/dword/signed dword) 1000
  (bool~) print_cls::$1 ← (byte*) print_cls::sc#1 != (byte*~) print_cls::$0
  if((bool~) print_cls::$1) goto print_cls::@1
  to:print_cls::@2
print_cls::@2: scope:[print_cls]  from print_cls::@1
  (byte*) print_screen#3 ← phi( print_cls::@1/(byte*) print_screen#2 )
  (byte*) print_line_cursor#1 ← (byte*) print_screen#3
  (byte*) print_char_cursor#1 ← (byte*) print_line_cursor#1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@2
  (byte*) print_char_cursor#8 ← phi( print_cls::@2/(byte*) print_char_cursor#1 )
  (byte*) print_line_cursor#8 ← phi( print_cls::@2/(byte*) print_line_cursor#1 )
  (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#8
  (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#8
  return 
  to:@return
@19: scope:[]  from @12
  (byte*) print_screen#8 ← phi( @12/(byte*) print_screen#9 )
  (byte*) print_char_cursor#24 ← phi( @12/(byte*) print_char_cursor#25 )
  (byte*) print_line_cursor#24 ← phi( @12/(byte*) print_line_cursor#25 )
  (signed byte/signed word/signed dword~) $0 ← - (byte/signed byte/word/signed word/dword/signed dword) 95
  (signed byte/signed word/signed dword~) $1 ← - (byte/signed byte/word/signed word/dword/signed dword) 64
  (signed byte/signed word/signed dword~) $2 ← - (byte/signed byte/word/signed word/dword/signed dword) 32
  (signed byte/signed word/signed dword~) $3 ← - (byte/signed byte/word/signed word/dword/signed dword) 16
  (signed byte[]) vals#0 ← { (signed byte/signed word/signed dword~) $0, (signed byte/signed word/signed dword~) $1, (signed byte/signed word/signed dword~) $2, (signed byte/signed word/signed dword~) $3, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/signed byte/word/signed word/dword/signed dword) 95 }
  to:@21
main: scope:[main]  from @22
  (signed byte*) cp#12 ← phi( @22/(signed byte*) cp#13 )
  (signed byte*) bp#12 ← phi( @22/(signed byte*) bp#13 )
  (signed byte*) ap#12 ← phi( @22/(signed byte*) ap#13 )
  (byte*) print_screen#5 ← phi( @22/(byte*) print_screen#6 )
  (byte*) print_char_cursor#14 ← phi( @22/(byte*) print_char_cursor#18 )
  (byte*) print_line_cursor#14 ← phi( @22/(byte*) print_line_cursor#18 )
  call init_screen 
  to:main::@7
main::@7: scope:[main]  from main
  (signed byte*) cp#11 ← phi( main/(signed byte*) cp#12 )
  (signed byte*) bp#11 ← phi( main/(signed byte*) bp#12 )
  (signed byte*) ap#11 ← phi( main/(signed byte*) ap#12 )
  (byte*) print_char_cursor#9 ← phi( main/(byte*) print_char_cursor#6 )
  (byte*) print_line_cursor#9 ← phi( main/(byte*) print_line_cursor#6 )
  (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#9
  (byte*) print_char_cursor#3 ← (byte*) print_char_cursor#9
  (byte*) main::at_line#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*~) main::$1 ← (byte*) main::at_line#0 + (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte*) main::at#0 ← (byte*~) main::$1
  (byte) main::k#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:main::@1
main::@1: scope:[main]  from main::@7 main::@8
  (byte*) print_char_cursor#31 ← phi( main::@7/(byte*) print_char_cursor#3 main::@8/(byte*) print_char_cursor#30 )
  (byte*) print_line_cursor#31 ← phi( main::@7/(byte*) print_line_cursor#3 main::@8/(byte*) print_line_cursor#30 )
  (signed byte*) cp#10 ← phi( main::@7/(signed byte*) cp#11 main::@8/(signed byte*) cp#9 )
  (signed byte*) bp#10 ← phi( main::@7/(signed byte*) bp#11 main::@8/(signed byte*) bp#9 )
  (signed byte*) ap#10 ← phi( main::@7/(signed byte*) ap#11 main::@8/(signed byte*) ap#9 )
  (byte*) main::at_line#7 ← phi( main::@7/(byte*) main::at_line#0 main::@8/(byte*) main::at_line#5 )
  (byte*) main::at#4 ← phi( main::@7/(byte*) main::at#0 main::@8/(byte*) main::at#1 )
  (byte) main::k#2 ← phi( main::@7/(byte) main::k#0 main::@8/(byte) main::k#1 )
  (signed byte) print_sbyte_at::b#1 ← *((signed byte[]) vals#0 + (byte) main::k#2)
  (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4
  call print_sbyte_at 
  to:main::@8
main::@8: scope:[main]  from main::@1
  (byte*) print_char_cursor#30 ← phi( main::@1/(byte*) print_char_cursor#31 )
  (byte*) print_line_cursor#30 ← phi( main::@1/(byte*) print_line_cursor#31 )
  (signed byte*) cp#9 ← phi( main::@1/(signed byte*) cp#10 )
  (signed byte*) bp#9 ← phi( main::@1/(signed byte*) bp#10 )
  (signed byte*) ap#9 ← phi( main::@1/(signed byte*) ap#10 )
  (byte*) main::at_line#5 ← phi( main::@1/(byte*) main::at_line#7 )
  (byte) main::k#3 ← phi( main::@1/(byte) main::k#2 )
  (byte*) main::at#5 ← phi( main::@1/(byte*) main::at#4 )
  (byte*) main::at#1 ← (byte*) main::at#5 + (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) main::k#1 ← (byte) main::k#3 + rangenext(0,8)
  (bool~) main::$3 ← (byte) main::k#1 != rangelast(0,8)
  if((bool~) main::$3) goto main::@1
  to:main::@4
main::@4: scope:[main]  from main::@8
  (byte*) print_char_cursor#29 ← phi( main::@8/(byte*) print_char_cursor#30 )
  (byte*) print_line_cursor#29 ← phi( main::@8/(byte*) print_line_cursor#30 )
  (signed byte*) cp#7 ← phi( main::@8/(signed byte*) cp#9 )
  (signed byte*) bp#7 ← phi( main::@8/(signed byte*) bp#9 )
  (signed byte*) ap#7 ← phi( main::@8/(signed byte*) ap#9 )
  (byte*) main::at_line#3 ← phi( main::@8/(byte*) main::at_line#5 )
  (byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:main::@2
main::@2: scope:[main]  from main::@4 main::@5
  (byte*) print_char_cursor#28 ← phi( main::@4/(byte*) print_char_cursor#29 main::@5/(byte*) print_char_cursor#15 )
  (byte*) print_line_cursor#28 ← phi( main::@4/(byte*) print_line_cursor#29 main::@5/(byte*) print_line_cursor#15 )
  (signed byte*) cp#5 ← phi( main::@4/(signed byte*) cp#7 main::@5/(signed byte*) cp#8 )
  (signed byte*) bp#5 ← phi( main::@4/(signed byte*) bp#7 main::@5/(signed byte*) bp#8 )
  (signed byte*) ap#5 ← phi( main::@4/(signed byte*) ap#7 main::@5/(signed byte*) ap#8 )
  (byte) main::i#2 ← phi( main::@4/(byte) main::i#0 main::@5/(byte) main::i#1 )
  (byte*) main::at_line#2 ← phi( main::@4/(byte*) main::at_line#3 main::@5/(byte*) main::at_line#4 )
  (byte*) main::at_line#1 ← (byte*) main::at_line#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte*) main::at#2 ← (byte*) main::at_line#1
  (signed byte) print_sbyte_at::b#2 ← *((signed byte[]) vals#0 + (byte) main::i#2)
  (byte*) print_sbyte_at::at#1 ← (byte*) main::at#2
  call print_sbyte_at 
  to:main::@9
main::@9: scope:[main]  from main::@2
  (byte*) print_char_cursor#27 ← phi( main::@2/(byte*) print_char_cursor#28 )
  (byte*) print_line_cursor#27 ← phi( main::@2/(byte*) print_line_cursor#28 )
  (byte*) main::at_line#10 ← phi( main::@2/(byte*) main::at_line#1 )
  (signed byte*) cp#4 ← phi( main::@2/(signed byte*) cp#5 )
  (signed byte*) bp#4 ← phi( main::@2/(signed byte*) bp#5 )
  (signed byte*) ap#4 ← phi( main::@2/(signed byte*) ap#5 )
  (byte) main::i#6 ← phi( main::@2/(byte) main::i#2 )
  (byte*) main::at#9 ← phi( main::@2/(byte*) main::at#2 )
  (byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:main::@3
main::@3: scope:[main]  from main::@11 main::@9
  (byte*) print_char_cursor#26 ← phi( main::@11/(byte*) print_char_cursor#19 main::@9/(byte*) print_char_cursor#27 )
  (byte*) print_line_cursor#26 ← phi( main::@11/(byte*) print_line_cursor#19 main::@9/(byte*) print_line_cursor#27 )
  (byte*) main::at_line#9 ← phi( main::@11/(byte*) main::at_line#6 main::@9/(byte*) main::at_line#10 )
  (signed byte*) cp#2 ← phi( main::@11/(signed byte*) cp#3 main::@9/(signed byte*) cp#4 )
  (signed byte*) bp#2 ← phi( main::@11/(signed byte*) bp#3 main::@9/(signed byte*) bp#4 )
  (signed byte*) ap#2 ← phi( main::@11/(signed byte*) ap#3 main::@9/(signed byte*) ap#4 )
  (byte) main::j#2 ← phi( main::@11/(byte) main::j#1 main::@9/(byte) main::j#0 )
  (byte) main::i#3 ← phi( main::@11/(byte) main::i#5 main::@9/(byte) main::i#6 )
  (byte*) main::at#6 ← phi( main::@11/(byte*) main::at#8 main::@9/(byte*) main::at#9 )
  (byte*) main::at#3 ← (byte*) main::at#6 + (byte/signed byte/word/signed word/dword/signed dword) 4
  (signed byte) fmul8::a#0 ← *((signed byte[]) vals#0 + (byte) main::i#3)
  (signed byte) fmul8::b#0 ← *((signed byte[]) vals#0 + (byte) main::j#2)
  call fmul8 
  (signed byte) fmul8::return#0 ← (signed byte) fmul8::return#2
  to:main::@10
main::@10: scope:[main]  from main::@3
  (byte*) print_char_cursor#22 ← phi( main::@3/(byte*) print_char_cursor#26 )
  (byte*) print_line_cursor#22 ← phi( main::@3/(byte*) print_line_cursor#26 )
  (byte*) main::at_line#8 ← phi( main::@3/(byte*) main::at_line#9 )
  (signed byte*) cp#6 ← phi( main::@3/(signed byte*) cp#2 )
  (signed byte*) bp#6 ← phi( main::@3/(signed byte*) bp#2 )
  (signed byte*) ap#6 ← phi( main::@3/(signed byte*) ap#2 )
  (byte) main::i#7 ← phi( main::@3/(byte) main::i#3 )
  (byte) main::j#4 ← phi( main::@3/(byte) main::j#2 )
  (byte*) main::at#7 ← phi( main::@3/(byte*) main::at#3 )
  (signed byte) fmul8::return#3 ← phi( main::@3/(signed byte) fmul8::return#0 )
  (signed byte~) main::$5 ← (signed byte) fmul8::return#3
  (signed byte) main::r#0 ← (signed byte~) main::$5
  (signed byte) print_sbyte_at::b#3 ← (signed byte) main::r#0
  (byte*) print_sbyte_at::at#2 ← (byte*) main::at#7
  call print_sbyte_at 
  to:main::@11
main::@11: scope:[main]  from main::@10
  (byte*) print_char_cursor#19 ← phi( main::@10/(byte*) print_char_cursor#22 )
  (byte*) print_line_cursor#19 ← phi( main::@10/(byte*) print_line_cursor#22 )
  (byte*) main::at_line#6 ← phi( main::@10/(byte*) main::at_line#8 )
  (signed byte*) cp#3 ← phi( main::@10/(signed byte*) cp#6 )
  (signed byte*) bp#3 ← phi( main::@10/(signed byte*) bp#6 )
  (signed byte*) ap#3 ← phi( main::@10/(signed byte*) ap#6 )
  (byte) main::i#5 ← phi( main::@10/(byte) main::i#7 )
  (byte*) main::at#8 ← phi( main::@10/(byte*) main::at#7 )
  (byte) main::j#3 ← phi( main::@10/(byte) main::j#4 )
  (byte) main::j#1 ← (byte) main::j#3 + rangenext(0,8)
  (bool~) main::$7 ← (byte) main::j#1 != rangelast(0,8)
  if((bool~) main::$7) goto main::@3
  to:main::@5
main::@5: scope:[main]  from main::@11
  (signed byte*) cp#8 ← phi( main::@11/(signed byte*) cp#3 )
  (signed byte*) bp#8 ← phi( main::@11/(signed byte*) bp#3 )
  (signed byte*) ap#8 ← phi( main::@11/(signed byte*) ap#3 )
  (byte*) print_char_cursor#15 ← phi( main::@11/(byte*) print_char_cursor#19 )
  (byte*) print_line_cursor#15 ← phi( main::@11/(byte*) print_line_cursor#19 )
  (byte*) main::at_line#4 ← phi( main::@11/(byte*) main::at_line#6 )
  (byte) main::i#4 ← phi( main::@11/(byte) main::i#5 )
  (byte) main::i#1 ← (byte) main::i#4 + rangenext(0,8)
  (bool~) main::$8 ← (byte) main::i#1 != rangelast(0,8)
  if((bool~) main::$8) goto main::@2
  to:main::@return
main::@return: scope:[main]  from main::@5
  (byte*) print_char_cursor#10 ← phi( main::@5/(byte*) print_char_cursor#15 )
  (byte*) print_line_cursor#10 ← phi( main::@5/(byte*) print_line_cursor#15 )
  (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#10
  (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#10
  return 
  to:@return
init_screen: scope:[init_screen]  from main
  (byte*) print_char_cursor#16 ← phi( main/(byte*) print_char_cursor#14 )
  (byte*) print_line_cursor#16 ← phi( main/(byte*) print_line_cursor#14 )
  (byte*) print_screen#4 ← phi( main/(byte*) print_screen#5 )
  call print_cls 
  to:init_screen::@5
init_screen::@5: scope:[init_screen]  from init_screen
  (byte*) print_char_cursor#11 ← phi( init_screen/(byte*) print_char_cursor#2 )
  (byte*) print_line_cursor#11 ← phi( init_screen/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#11
  (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#11
  (byte*) init_screen::COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
  (byte) init_screen::WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) init_screen::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:init_screen::@1
init_screen::@1: scope:[init_screen]  from init_screen::@1 init_screen::@5
  (byte*) print_char_cursor#23 ← phi( init_screen::@1/(byte*) print_char_cursor#23 init_screen::@5/(byte*) print_char_cursor#5 )
  (byte*) print_line_cursor#23 ← phi( init_screen::@1/(byte*) print_line_cursor#23 init_screen::@5/(byte*) print_line_cursor#5 )
  (byte) init_screen::l#2 ← phi( init_screen::@1/(byte) init_screen::l#1 init_screen::@5/(byte) init_screen::l#0 )
  (byte*) init_screen::COLS#2 ← phi( init_screen::@1/(byte*) init_screen::COLS#2 init_screen::@5/(byte*) init_screen::COLS#0 )
  (byte) init_screen::WHITE#1 ← phi( init_screen::@1/(byte) init_screen::WHITE#1 init_screen::@5/(byte) init_screen::WHITE#0 )
  *((byte*) init_screen::COLS#2 + (byte) init_screen::l#2) ← (byte) init_screen::WHITE#1
  (byte) init_screen::l#1 ← (byte) init_screen::l#2 + rangenext(0,39)
  (bool~) init_screen::$1 ← (byte) init_screen::l#1 != rangelast(0,39)
  if((bool~) init_screen::$1) goto init_screen::@1
  to:init_screen::@3
init_screen::@3: scope:[init_screen]  from init_screen::@1
  (byte*) print_char_cursor#20 ← phi( init_screen::@1/(byte*) print_char_cursor#23 )
  (byte*) print_line_cursor#20 ← phi( init_screen::@1/(byte*) print_line_cursor#23 )
  (byte*) init_screen::COLS#4 ← phi( init_screen::@1/(byte*) init_screen::COLS#2 )
  (byte) init_screen::WHITE#3 ← phi( init_screen::@1/(byte) init_screen::WHITE#1 )
  (byte) init_screen::m#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:init_screen::@2
init_screen::@2: scope:[init_screen]  from init_screen::@2 init_screen::@3
  (byte*) print_char_cursor#17 ← phi( init_screen::@2/(byte*) print_char_cursor#17 init_screen::@3/(byte*) print_char_cursor#20 )
  (byte*) print_line_cursor#17 ← phi( init_screen::@2/(byte*) print_line_cursor#17 init_screen::@3/(byte*) print_line_cursor#20 )
  (byte) init_screen::m#2 ← phi( init_screen::@2/(byte) init_screen::m#1 init_screen::@3/(byte) init_screen::m#0 )
  (byte*) init_screen::COLS#3 ← phi( init_screen::@2/(byte*) init_screen::COLS#1 init_screen::@3/(byte*) init_screen::COLS#4 )
  (byte) init_screen::WHITE#2 ← phi( init_screen::@2/(byte) init_screen::WHITE#2 init_screen::@3/(byte) init_screen::WHITE#3 )
  *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) init_screen::WHITE#2
  *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) init_screen::WHITE#2
  *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) init_screen::WHITE#2
  *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) init_screen::WHITE#2
  (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte) init_screen::m#1 ← (byte) init_screen::m#2 + rangenext(0,24)
  (bool~) init_screen::$2 ← (byte) init_screen::m#1 != rangelast(0,24)
  if((bool~) init_screen::$2) goto init_screen::@2
  to:init_screen::@return
init_screen::@return: scope:[init_screen]  from init_screen::@2
  (byte*) print_char_cursor#12 ← phi( init_screen::@2/(byte*) print_char_cursor#17 )
  (byte*) print_line_cursor#12 ← phi( init_screen::@2/(byte*) print_line_cursor#17 )
  (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#12
  (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#12
  return 
  to:@return
@21: scope:[]  from @19
  (byte*) print_screen#7 ← phi( @19/(byte*) print_screen#8 )
  (byte*) print_char_cursor#21 ← phi( @19/(byte*) print_char_cursor#24 )
  (byte*) print_line_cursor#21 ← phi( @19/(byte*) print_line_cursor#24 )
  (signed byte*) ap#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 253
  (signed byte*) bp#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 254
  (signed byte*) cp#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 255
  to:@22
fmul8: scope:[fmul8]  from main::@3
  (signed byte*) cp#1 ← phi( main::@3/(signed byte*) cp#2 )
  (signed byte*) bp#1 ← phi( main::@3/(signed byte*) bp#2 )
  (signed byte) fmul8::b#1 ← phi( main::@3/(signed byte) fmul8::b#0 )
  (signed byte*) ap#1 ← phi( main::@3/(signed byte*) ap#2 )
  (signed byte) fmul8::a#1 ← phi( main::@3/(signed byte) fmul8::a#0 )
  *((signed byte*) ap#1) ← (signed byte) fmul8::a#1
  *((signed byte*) bp#1) ← (signed byte) fmul8::b#1
  asm { ldaap staA1+1 eor#$ff staA2+1 ldxbp sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacp  }
  (signed byte) fmul8::return#1 ← *((signed byte*) cp#1)
  to:fmul8::@return
fmul8::@return: scope:[fmul8]  from fmul8
  (signed byte) fmul8::return#4 ← phi( fmul8/(signed byte) fmul8::return#1 )
  (signed byte) fmul8::return#2 ← (signed byte) fmul8::return#4
  return 
  to:@return
@22: scope:[]  from @21
  (signed byte*) cp#13 ← phi( @21/(signed byte*) cp#0 )
  (signed byte*) bp#13 ← phi( @21/(signed byte*) bp#0 )
  (signed byte*) ap#13 ← phi( @21/(signed byte*) ap#0 )
  (byte*) print_screen#6 ← phi( @21/(byte*) print_screen#7 )
  (byte*) print_char_cursor#18 ← phi( @21/(byte*) print_char_cursor#21 )
  (byte*) print_line_cursor#18 ← phi( @21/(byte*) print_line_cursor#21 )
  (byte*) mulf_sqr1#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
  (byte*) mulf_sqr2#0 ← ((byte*)) (word/signed word/dword/signed dword) 8704
  kickasm(location (byte*) mulf_sqr1#0) {{ .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((i*i)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
    	.if(i>351) { .byte round(((512-i)*(512-i))/256) }
    }
 }}
  kickasm(location (byte*) mulf_sqr2#0) {{ .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
    	.if(i>351) { .byte round(((i-511)*(i-511))/256) }  
    }
 }}
  call main 
  to:@23
@23: scope:[]  from @22
  (byte*) print_char_cursor#13 ← phi( @22/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#13 ← phi( @22/(byte*) print_line_cursor#4 )
  (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#13
  (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#13
  to:@end
@end: scope:[]  from @23

SYMBOL TABLE SSA
(signed byte/signed word/signed dword~) $0
(signed byte/signed word/signed dword~) $1
(signed byte/signed word/signed dword~) $2
(signed byte/signed word/signed dword~) $3
(const string) $4 = (string) "0123456789abcdef"
(label) @12
(label) @19
(label) @21
(label) @22
(label) @23
(label) @begin
(label) @end
(signed byte*) ap
(signed byte*) ap#0
(signed byte*) ap#1
(signed byte*) ap#10
(signed byte*) ap#11
(signed byte*) ap#12
(signed byte*) ap#13
(signed byte*) ap#2
(signed byte*) ap#3
(signed byte*) ap#4
(signed byte*) ap#5
(signed byte*) ap#6
(signed byte*) ap#7
(signed byte*) ap#8
(signed byte*) ap#9
(signed byte*) bp
(signed byte*) bp#0
(signed byte*) bp#1
(signed byte*) bp#10
(signed byte*) bp#11
(signed byte*) bp#12
(signed byte*) bp#13
(signed byte*) bp#2
(signed byte*) bp#3
(signed byte*) bp#4
(signed byte*) bp#5
(signed byte*) bp#6
(signed byte*) bp#7
(signed byte*) bp#8
(signed byte*) bp#9
(signed byte*) cp
(signed byte*) cp#0
(signed byte*) cp#1
(signed byte*) cp#10
(signed byte*) cp#11
(signed byte*) cp#12
(signed byte*) cp#13
(signed byte*) cp#2
(signed byte*) cp#3
(signed byte*) cp#4
(signed byte*) cp#5
(signed byte*) cp#6
(signed byte*) cp#7
(signed byte*) cp#8
(signed byte*) cp#9
(signed byte()) fmul8((signed byte) fmul8::a , (signed byte) fmul8::b)
(label) fmul8::@return
(signed byte) fmul8::a
(signed byte) fmul8::a#0
(signed byte) fmul8::a#1
(signed byte) fmul8::b
(signed byte) fmul8::b#0
(signed byte) fmul8::b#1
(signed byte) fmul8::return
(signed byte) fmul8::return#0
(signed byte) fmul8::return#1
(signed byte) fmul8::return#2
(signed byte) fmul8::return#3
(signed byte) fmul8::return#4
(void()) init_screen()
(bool~) init_screen::$1
(bool~) init_screen::$2
(label) init_screen::@1
(label) init_screen::@2
(label) init_screen::@3
(label) init_screen::@5
(label) init_screen::@return
(byte*) init_screen::COLS
(byte*) init_screen::COLS#0
(byte*) init_screen::COLS#1
(byte*) init_screen::COLS#2
(byte*) init_screen::COLS#3
(byte*) init_screen::COLS#4
(byte) init_screen::WHITE
(byte) init_screen::WHITE#0
(byte) init_screen::WHITE#1
(byte) init_screen::WHITE#2
(byte) init_screen::WHITE#3
(byte) init_screen::l
(byte) init_screen::l#0
(byte) init_screen::l#1
(byte) init_screen::l#2
(byte) init_screen::m
(byte) init_screen::m#0
(byte) init_screen::m#1
(byte) init_screen::m#2
(void()) main()
(byte*~) main::$1
(bool~) main::$3
(signed byte~) main::$5
(bool~) main::$7
(bool~) main::$8
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte*) main::at
(byte*) main::at#0
(byte*) main::at#1
(byte*) main::at#2
(byte*) main::at#3
(byte*) main::at#4
(byte*) main::at#5
(byte*) main::at#6
(byte*) main::at#7
(byte*) main::at#8
(byte*) main::at#9
(byte*) main::at_line
(byte*) main::at_line#0
(byte*) main::at_line#1
(byte*) main::at_line#10
(byte*) main::at_line#2
(byte*) main::at_line#3
(byte*) main::at_line#4
(byte*) main::at_line#5
(byte*) main::at_line#6
(byte*) main::at_line#7
(byte*) main::at_line#8
(byte*) main::at_line#9
(byte) main::i
(byte) main::i#0
(byte) main::i#1
(byte) main::i#2
(byte) main::i#3
(byte) main::i#4
(byte) main::i#5
(byte) main::i#6
(byte) main::i#7
(byte) main::j
(byte) main::j#0
(byte) main::j#1
(byte) main::j#2
(byte) main::j#3
(byte) main::j#4
(byte) main::k
(byte) main::k#0
(byte) main::k#1
(byte) main::k#2
(byte) main::k#3
(signed byte) main::r
(signed byte) main::r#0
(byte*) mulf_sqr1
(byte*) mulf_sqr1#0
(byte*) mulf_sqr2
(byte*) mulf_sqr2#0
(void()) print_byte_at((byte) print_byte_at::b , (byte*) print_byte_at::at)
(byte~) print_byte_at::$0
(byte~) print_byte_at::$2
(byte*~) print_byte_at::$3
(label) print_byte_at::@1
(label) print_byte_at::@2
(label) print_byte_at::@return
(byte*) print_byte_at::at
(byte*) print_byte_at::at#0
(byte*) print_byte_at::at#1
(byte*) print_byte_at::at#2
(byte) print_byte_at::b
(byte) print_byte_at::b#0
(byte) print_byte_at::b#1
(byte) print_byte_at::b#2
(void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at)
(label) print_char_at::@return
(byte*) print_char_at::at
(byte*) print_char_at::at#0
(byte*) print_char_at::at#1
(byte*) print_char_at::at#2
(byte*) print_char_at::at#3
(byte*) print_char_at::at#4
(byte) print_char_at::ch
(byte) print_char_at::ch#0
(byte) print_char_at::ch#1
(byte) print_char_at::ch#2
(byte) print_char_at::ch#3
(byte) print_char_at::ch#4
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#4
(byte*) print_char_cursor#5
(byte*) print_char_cursor#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(void()) print_cls()
(byte*~) print_cls::$0
(bool~) print_cls::$1
(label) print_cls::@1
(label) print_cls::@2
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#0
(byte*) print_cls::sc#1
(byte*) print_cls::sc#2
(byte[]) print_hextab
(byte[]) print_hextab#0
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#31
(byte*) print_line_cursor#4
(byte*) print_line_cursor#5
(byte*) print_line_cursor#6
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(bool~) print_sbyte_at::$0
(signed byte~) print_sbyte_at::$3
(byte~) print_sbyte_at::$4
(byte*~) print_sbyte_at::$5
(label) print_sbyte_at::@1
(label) print_sbyte_at::@2
(label) print_sbyte_at::@3
(label) print_sbyte_at::@5
(label) print_sbyte_at::@6
(label) print_sbyte_at::@7
(label) print_sbyte_at::@return
(byte*) print_sbyte_at::at
(byte*) print_sbyte_at::at#0
(byte*) print_sbyte_at::at#1
(byte*) print_sbyte_at::at#2
(byte*) print_sbyte_at::at#3
(byte*) print_sbyte_at::at#4
(byte*) print_sbyte_at::at#5
(byte*) print_sbyte_at::at#6
(byte*) print_sbyte_at::at#7
(byte*) print_sbyte_at::at#8
(signed byte) print_sbyte_at::b
(signed byte) print_sbyte_at::b#0
(signed byte) print_sbyte_at::b#1
(signed byte) print_sbyte_at::b#2
(signed byte) print_sbyte_at::b#3
(signed byte) print_sbyte_at::b#4
(signed byte) print_sbyte_at::b#5
(signed byte) print_sbyte_at::b#6
(signed byte) print_sbyte_at::b#7
(signed byte) print_sbyte_at::b#8
(signed byte) print_sbyte_at::b#9
(byte*) print_screen
(byte*) print_screen#0
(byte*) print_screen#1
(byte*) print_screen#2
(byte*) print_screen#3
(byte*) print_screen#4
(byte*) print_screen#5
(byte*) print_screen#6
(byte*) print_screen#7
(byte*) print_screen#8
(byte*) print_screen#9
(signed byte[]) vals
(signed byte[]) vals#0

Culled Empty Block (label) print_sbyte_at::@7
Culled Empty Block (label) print_byte_at::@2
Successful SSA optimization Pass2CullEmptyBlocks
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#25 (byte*) print_char_cursor#25 (byte*) print_screen#9 (byte*) print_line_cursor#24 (byte*) print_char_cursor#24 (byte*) print_screen#8 (byte*) print_line_cursor#21 (byte*) print_char_cursor#21 (byte*) print_screen#7 (byte*) print_line_cursor#18 (byte*) print_char_cursor#18 (byte*) print_screen#6 
Alias (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#6 (byte*) print_sbyte_at::at#7 (byte*) print_sbyte_at::at#4 (byte*) print_sbyte_at::at#8 
Alias (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#7 (signed byte) print_sbyte_at::b#5 (signed byte) print_sbyte_at::b#9 (signed byte) print_sbyte_at::b#8 
Alias (signed byte) print_sbyte_at::b#0 = (signed byte~) print_sbyte_at::$3 
Alias (byte) print_byte_at::b#0 = (byte~) print_sbyte_at::$4 
Alias (byte*) print_byte_at::at#0 = (byte*~) print_sbyte_at::$5 
Alias (byte) print_byte_at::b#1 = (byte) print_byte_at::b#2 
Alias (byte*) print_byte_at::at#1 = (byte*) print_byte_at::at#2 
Alias (byte*) print_char_at::at#3 = (byte*~) print_byte_at::$3 
Alias (byte*) print_line_cursor#1 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_char_cursor#1 (byte*) print_line_cursor#8 (byte*) print_char_cursor#8 (byte*) print_line_cursor#2 (byte*) print_char_cursor#2 
Alias (signed byte*) ap#11 = (signed byte*) ap#12 
Alias (signed byte*) bp#11 = (signed byte*) bp#12 
Alias (signed byte*) cp#11 = (signed byte*) cp#12 
Alias (byte*) print_line_cursor#3 = (byte*) print_line_cursor#9 
Alias (byte*) print_char_cursor#3 = (byte*) print_char_cursor#9 
Alias (byte*) main::at#0 = (byte*~) main::$1 
Alias (byte*) main::at#4 = (byte*) main::at#5 
Alias (byte) main::k#2 = (byte) main::k#3 
Alias (byte*) main::at_line#3 = (byte*) main::at_line#5 (byte*) main::at_line#7 
Alias (signed byte*) ap#10 = (signed byte*) ap#9 (signed byte*) ap#7 
Alias (signed byte*) bp#10 = (signed byte*) bp#9 (signed byte*) bp#7 
Alias (signed byte*) cp#10 = (signed byte*) cp#9 (signed byte*) cp#7 
Alias (byte*) print_line_cursor#29 = (byte*) print_line_cursor#30 (byte*) print_line_cursor#31 
Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#30 (byte*) print_char_cursor#31 
Alias (byte*) main::at#2 = (byte*) main::at_line#1 (byte*) main::at#9 (byte*) main::at_line#10 
Alias (byte) main::i#2 = (byte) main::i#6 
Alias (signed byte*) ap#4 = (signed byte*) ap#5 
Alias (signed byte*) bp#4 = (signed byte*) bp#5 
Alias (signed byte*) cp#4 = (signed byte*) cp#5 
Alias (byte*) print_line_cursor#27 = (byte*) print_line_cursor#28 
Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#28 
Alias (signed byte) fmul8::return#0 = (signed byte) fmul8::return#3 
Alias (byte*) main::at#3 = (byte*) main::at#7 (byte*) main::at#8 
Alias (byte) main::j#2 = (byte) main::j#4 (byte) main::j#3 
Alias (byte) main::i#3 = (byte) main::i#7 (byte) main::i#5 (byte) main::i#4 
Alias (signed byte*) ap#2 = (signed byte*) ap#6 (signed byte*) ap#3 (signed byte*) ap#8 
Alias (signed byte*) bp#2 = (signed byte*) bp#6 (signed byte*) bp#3 (signed byte*) bp#8 
Alias (signed byte*) cp#2 = (signed byte*) cp#6 (signed byte*) cp#3 (signed byte*) cp#8 
Alias (byte*) main::at_line#4 = (byte*) main::at_line#8 (byte*) main::at_line#9 (byte*) main::at_line#6 
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#22 (byte*) print_line_cursor#26 (byte*) print_line_cursor#19 (byte*) print_line_cursor#15 (byte*) print_line_cursor#4 
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#22 (byte*) print_char_cursor#26 (byte*) print_char_cursor#19 (byte*) print_char_cursor#15 (byte*) print_char_cursor#4 
Alias (signed byte) main::r#0 = (signed byte~) main::$5 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 
Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#5 
Alias (byte) init_screen::WHITE#1 = (byte) init_screen::WHITE#3 
Alias (byte*) init_screen::COLS#2 = (byte*) init_screen::COLS#4 
Alias (byte*) print_line_cursor#20 = (byte*) print_line_cursor#23 
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#23 
Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#17 (byte*) print_line_cursor#6 
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#17 (byte*) print_char_cursor#6 
Alias (signed byte) fmul8::return#1 = (signed byte) fmul8::return#4 (signed byte) fmul8::return#2 
Alias (signed byte*) ap#0 = (signed byte*) ap#13 
Alias (signed byte*) bp#0 = (signed byte*) bp#13 
Alias (signed byte*) cp#0 = (signed byte*) cp#13 
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#7 
Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#7 
Successful SSA optimization Pass2AliasElimination
Alias (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#5 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) print_line_cursor#1
Self Phi Eliminated (byte*) main::at_line#3
Self Phi Eliminated (signed byte*) ap#10
Self Phi Eliminated (signed byte*) bp#10
Self Phi Eliminated (signed byte*) cp#10
Self Phi Eliminated (byte*) print_line_cursor#29
Self Phi Eliminated (byte*) print_char_cursor#29
Self Phi Eliminated (byte) main::i#3
Self Phi Eliminated (signed byte*) ap#2
Self Phi Eliminated (signed byte*) bp#2
Self Phi Eliminated (signed byte*) cp#2
Self Phi Eliminated (byte*) main::at_line#4
Self Phi Eliminated (byte*) print_line_cursor#10
Self Phi Eliminated (byte*) print_char_cursor#10
Self Phi Eliminated (byte) init_screen::WHITE#1
Self Phi Eliminated (byte*) init_screen::COLS#2
Self Phi Eliminated (byte*) print_line_cursor#20
Self Phi Eliminated (byte*) print_char_cursor#20
Self Phi Eliminated (byte) init_screen::WHITE#2
Self Phi Eliminated (byte*) print_line_cursor#12
Self Phi Eliminated (byte*) print_char_cursor#12
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) print_byte_at::b#1 (byte) print_byte_at::b#0
Redundant Phi (byte*) print_byte_at::at#1 (byte*) print_byte_at::at#0
Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4
Redundant Phi (byte*) print_line_cursor#1 (byte*) print_screen#1
Redundant Phi (byte*) print_line_cursor#14 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_char_cursor#14 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_screen#5 (byte*) print_line_cursor#0
Redundant Phi (signed byte*) ap#11 (signed byte*) ap#0
Redundant Phi (signed byte*) bp#11 (signed byte*) bp#0
Redundant Phi (signed byte*) cp#11 (signed byte*) cp#0
Redundant Phi (byte*) print_line_cursor#3 (byte*) print_line_cursor#12
Redundant Phi (byte*) print_char_cursor#3 (byte*) print_char_cursor#12
Redundant Phi (byte*) main::at_line#3 (byte*) main::at_line#0
Redundant Phi (signed byte*) ap#10 (signed byte*) ap#11
Redundant Phi (signed byte*) bp#10 (signed byte*) bp#11
Redundant Phi (signed byte*) cp#10 (signed byte*) cp#11
Redundant Phi (byte*) print_line_cursor#29 (byte*) print_line_cursor#3
Redundant Phi (byte*) print_char_cursor#29 (byte*) print_char_cursor#3
Redundant Phi (byte) main::i#3 (byte) main::i#2
Redundant Phi (signed byte*) ap#2 (signed byte*) ap#4
Redundant Phi (signed byte*) bp#2 (signed byte*) bp#4
Redundant Phi (signed byte*) cp#2 (signed byte*) cp#4
Redundant Phi (byte*) main::at_line#4 (byte*) main::at#2
Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#27
Redundant Phi (byte*) print_char_cursor#10 (byte*) print_char_cursor#27
Redundant Phi (byte*) print_screen#4 (byte*) print_screen#5
Redundant Phi (byte*) print_line_cursor#16 (byte*) print_line_cursor#14
Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#14
Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_char_cursor#11 (byte*) print_line_cursor#1
Redundant Phi (byte) init_screen::WHITE#1 (byte) init_screen::WHITE#0
Redundant Phi (byte*) init_screen::COLS#2 (byte*) init_screen::COLS#0
Redundant Phi (byte*) print_line_cursor#20 (byte*) print_line_cursor#11
Redundant Phi (byte*) print_char_cursor#20 (byte*) print_char_cursor#11
Redundant Phi (byte) init_screen::WHITE#2 (byte) init_screen::WHITE#1
Redundant Phi (byte*) print_line_cursor#12 (byte*) print_line_cursor#20
Redundant Phi (byte*) print_char_cursor#12 (byte*) print_char_cursor#20
Redundant Phi (signed byte) fmul8::a#1 (signed byte) fmul8::a#0
Redundant Phi (signed byte*) ap#1 (signed byte*) ap#2
Redundant Phi (signed byte) fmul8::b#1 (signed byte) fmul8::b#0
Redundant Phi (signed byte*) bp#1 (signed byte*) bp#2
Redundant Phi (signed byte*) cp#1 (signed byte*) cp#2
Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#10
Redundant Phi (byte*) print_char_cursor#13 (byte*) print_char_cursor#10
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) print_sbyte_at::$0 [5] if((signed byte) print_sbyte_at::b#4<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte_at::@1
Simple Condition (bool~) print_cls::$1 [49] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
Simple Condition (bool~) main::$3 [80] if((byte) main::k#1!=rangelast(0,8)) goto main::@1
Simple Condition (bool~) main::$7 [106] if((byte) main::j#1!=rangelast(0,8)) goto main::@3
Simple Condition (bool~) main::$8 [110] if((byte) main::i#1!=rangelast(0,8)) goto main::@2
Simple Condition (bool~) init_screen::$1 [127] if((byte) init_screen::l#1!=rangelast(0,39)) goto init_screen::@1
Simple Condition (bool~) init_screen::$2 [138] if((byte) init_screen::m#1!=rangelast(0,24)) goto init_screen::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const byte) print_char_at::ch#0 = '-'
Constant (const byte) print_char_at::ch#1 = ' '
Constant (const byte[]) print_hextab#0 = $4
Constant (const signed byte/signed word/signed dword) $0 = -95
Constant (const signed byte/signed word/signed dword) $1 = -64
Constant (const signed byte/signed word/signed dword) $2 = -32
Constant (const signed byte/signed word/signed dword) $3 = -16
Constant (const byte*) main::at_line#0 = ((byte*))1024
Constant (const byte) main::k#0 = 0
Constant (const byte) main::i#0 = 0
Constant (const byte) main::j#0 = 0
Constant (const byte*) init_screen::COLS#0 = ((byte*))55296
Constant (const byte) init_screen::WHITE#0 = 1
Constant (const byte) init_screen::l#0 = 0
Constant (const byte) init_screen::m#0 = 0
Constant (const signed byte*) ap#0 = ((signed byte*))253
Constant (const signed byte*) bp#0 = ((signed byte*))254
Constant (const signed byte*) cp#0 = ((signed byte*))255
Constant (const byte*) mulf_sqr1#0 = ((byte*))8192
Constant (const byte*) mulf_sqr2#0 = ((byte*))8704
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
Constant (const signed byte[]) vals#0 = { $0, $1, $2, $3, 0, 16, 32, 64, 95 }
Constant (const byte*) main::at#0 = main::at_line#0+4
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte) print_byte_at::b#0 ← ((byte)) (signed byte) print_sbyte_at::b#6
Successful SSA optimization Pass2NopCastElimination
Resolved ranged next value main::k#1 ← ++ main::k#2 to ++
Resolved ranged comparison value if(main::k#1!=rangelast(0,8)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 9
Resolved ranged next value main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value if(main::j#1!=rangelast(0,8)) goto main::@3 to (byte/signed byte/word/signed word/dword/signed dword) 9
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,8)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 9
Resolved ranged next value init_screen::l#1 ← ++ init_screen::l#2 to ++
Resolved ranged comparison value if(init_screen::l#1!=rangelast(0,39)) goto init_screen::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40
Resolved ranged next value init_screen::m#1 ← ++ init_screen::m#2 to ++
Resolved ranged comparison value if(init_screen::m#1!=rangelast(0,24)) goto init_screen::@2 to (byte/signed byte/word/signed word/dword/signed dword) 25
Culled Empty Block (label) print_sbyte_at::@6
Culled Empty Block (label) @12
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @19
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@9
Culled Empty Block (label) init_screen::@5
Culled Empty Block (label) init_screen::@3
Culled Empty Block (label) @21
Culled Empty Block (label) @23
Successful SSA optimization Pass2CullEmptyBlocks
Self Phi Eliminated (signed byte*) ap#4
Self Phi Eliminated (signed byte*) bp#4
Self Phi Eliminated (signed byte*) cp#4
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (signed byte*) ap#4 (const signed byte*) ap#0
Redundant Phi (signed byte*) bp#4 (const signed byte*) bp#0
Redundant Phi (signed byte*) cp#4 (const signed byte*) cp#0
Successful SSA optimization Pass2RedundantPhiElimination
Inlining constant with var siblings (const byte) print_char_at::ch#0
Inlining constant with var siblings (const byte) print_char_at::ch#1
Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte*) main::at_line#0
Inlining constant with var siblings (const byte) main::k#0
Inlining constant with var siblings (const byte) main::i#0
Inlining constant with var siblings (const byte) main::j#0
Inlining constant with var siblings (const byte*) main::at#0
Inlining constant with var siblings (const byte*) init_screen::COLS#0
Inlining constant with var siblings (const byte) init_screen::l#0
Inlining constant with var siblings (const byte) init_screen::m#0
Constant inlined print_cls::$0 = (const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000
Constant inlined $0 = -(byte/signed byte/word/signed word/dword/signed dword) 95
Constant inlined print_cls::sc#0 = (const byte*) print_line_cursor#0
Constant inlined $1 = -(byte/signed byte/word/signed word/dword/signed dword) 64
Constant inlined main::at#0 = ((byte*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined $2 = -(byte/signed byte/word/signed word/dword/signed dword) 32
Constant inlined $3 = -(byte/signed byte/word/signed word/dword/signed dword) 16
Constant inlined $4 = (const byte[]) print_hextab#0
Constant inlined print_char_at::ch#0 = (byte) '-'
Constant inlined init_screen::m#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_char_at::ch#1 = (byte) ' '
Constant inlined init_screen::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::k#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::at_line#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined init_screen::COLS#0 = ((byte*))(word/dword/signed dword) 55296
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@12(between main::@8 and main::@1)
Added new block during phi lifting main::@13(between main::@5 and main::@2)
Added new block during phi lifting main::@14(between main::@11 and main::@3)
Added new block during phi lifting init_screen::@6(between init_screen::@1 and init_screen::@1)
Added new block during phi lifting init_screen::@7(between init_screen::@2 and init_screen::@2)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of init_screen
Adding NOP phi() at start of print_cls
CALL GRAPH
Calls in [] to main:3 
Calls in [main] to init_screen:6 print_sbyte_at:12 print_sbyte_at:22 fmul8:28 print_sbyte_at:35 
Calls in [print_sbyte_at] to print_char_at:51 print_byte_at:55 print_char_at:59 
Calls in [print_byte_at] to print_char_at:70 print_char_at:76 
Calls in [init_screen] to print_cls:84 

Created 15 initial phi equivalence classes
Coalesced [10] print_sbyte_at::b#10 ← print_sbyte_at::b#1
Coalesced [11] print_sbyte_at::at#9 ← print_sbyte_at::at#0
Coalesced [20] print_sbyte_at::b#12 ← print_sbyte_at::b#2
Coalesced [21] print_sbyte_at::at#11 ← print_sbyte_at::at#1
Not coalescing [23] main::at#12 ← main::at#2
Coalesced [33] print_sbyte_at::b#11 ← print_sbyte_at::b#3
Coalesced [34] print_sbyte_at::at#10 ← print_sbyte_at::at#2
Coalesced [41] main::at_line#11 ← main::at#2
Coalesced [42] main::i#8 ← main::i#1
Coalesced [43] main::at#11 ← main::at#3
Coalesced [44] main::j#5 ← main::j#1
Coalesced [45] main::k#4 ← main::k#1
Coalesced [46] main::at#10 ← main::at#1
Coalesced [50] print_char_at::at#8 ← print_char_at::at#1
Coalesced [52] print_sbyte_at::b#14 ← print_sbyte_at::b#4
Coalesced [58] print_char_at::at#7 ← print_char_at::at#0
Coalesced [61] print_sbyte_at::b#13 ← print_sbyte_at::b#0
Coalesced [68] print_char_at::ch#5 ← print_char_at::ch#2
Coalesced [69] print_char_at::at#5 ← print_char_at::at#2
Coalesced [74] print_char_at::ch#6 ← print_char_at::ch#3
Coalesced [75] print_char_at::at#6 ← print_char_at::at#3
Coalesced [98] init_screen::COLS#5 ← init_screen::COLS#1
Coalesced [99] init_screen::m#3 ← init_screen::m#1
Coalesced [100] init_screen::l#3 ← init_screen::l#1
Coalesced [107] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 14 phi equivalence classes
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@14
Culled Empty Block (label) main::@12
Culled Empty Block (label) init_screen::@7
Culled Empty Block (label) init_screen::@6
Culled Empty Block (label) print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of init_screen
Adding NOP phi() at start of print_cls

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@22
@22: scope:[]  from @begin
  kickasm(location (const byte*) mulf_sqr1#0) {{ .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((i*i)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
    	.if(i>351) { .byte round(((512-i)*(512-i))/256) }
    }
 }}
  kickasm(location (const byte*) mulf_sqr2#0) {{ .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
    	.if(i>351) { .byte round(((i-511)*(i-511))/256) }  
    }
 }}
  [3] call main 
  to:@end
@end: scope:[]  from @22
  [4] phi()
main: scope:[main]  from @22
  [5] phi()
  [6] call init_screen 
  to:main::@1
main::@1: scope:[main]  from main main::@8
  [7] (byte*) main::at#4 ← phi( main/((byte*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 4 main::@8/(byte*) main::at#1 )
  [7] (byte) main::k#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@8/(byte) main::k#1 )
  [8] (signed byte) print_sbyte_at::b#1 ← *((const signed byte[]) vals#0 + (byte) main::k#2)
  [9] (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4
  [10] call print_sbyte_at 
  to:main::@8
main::@8: scope:[main]  from main::@1
  [11] (byte*) main::at#1 ← (byte*) main::at#4 + (byte/signed byte/word/signed word/dword/signed dword) 4
  [12] (byte) main::k#1 ← ++ (byte) main::k#2
  [13] if((byte) main::k#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@5 main::@8
  [14] (byte) main::i#2 ← phi( main::@8/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@5/(byte) main::i#1 )
  [14] (byte*) main::at_line#2 ← phi( main::@8/((byte*))(word/signed word/dword/signed dword) 1024 main::@5/(byte*) main::at#2 )
  [15] (byte*) main::at#2 ← (byte*) main::at_line#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
  [16] (signed byte) print_sbyte_at::b#2 ← *((const signed byte[]) vals#0 + (byte) main::i#2)
  [17] (byte*) print_sbyte_at::at#1 ← (byte*) main::at#2
  [18] call print_sbyte_at 
  [19] (byte*~) main::at#12 ← (byte*) main::at#2
  to:main::@3
main::@3: scope:[main]  from main::@11 main::@2
  [20] (byte) main::j#2 ← phi( main::@11/(byte) main::j#1 main::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [20] (byte*) main::at#6 ← phi( main::@11/(byte*) main::at#3 main::@2/(byte*~) main::at#12 )
  [21] (byte*) main::at#3 ← (byte*) main::at#6 + (byte/signed byte/word/signed word/dword/signed dword) 4
  [22] (signed byte) fmul8::a#0 ← *((const signed byte[]) vals#0 + (byte) main::i#2)
  [23] (signed byte) fmul8::b#0 ← *((const signed byte[]) vals#0 + (byte) main::j#2)
  [24] call fmul8 
  [25] (signed byte) fmul8::return#0 ← (signed byte) fmul8::return#1
  to:main::@10
main::@10: scope:[main]  from main::@3
  [26] (signed byte) main::r#0 ← (signed byte) fmul8::return#0
  [27] (signed byte) print_sbyte_at::b#3 ← (signed byte) main::r#0
  [28] (byte*) print_sbyte_at::at#2 ← (byte*) main::at#3
  [29] call print_sbyte_at 
  to:main::@11
main::@11: scope:[main]  from main::@10
  [30] (byte) main::j#1 ← ++ (byte) main::j#2
  [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3
  to:main::@5
main::@5: scope:[main]  from main::@11
  [32] (byte) main::i#1 ← ++ (byte) main::i#2
  [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2
  to:main::@return
main::@return: scope:[main]  from main::@5
  [34] return 
  to:@return
print_sbyte_at: scope:[print_sbyte_at]  from main::@1 main::@10 main::@2
  [35] (byte*) print_sbyte_at::at#3 ← phi( main::@1/(byte*) print_sbyte_at::at#0 main::@10/(byte*) print_sbyte_at::at#2 main::@2/(byte*) print_sbyte_at::at#1 )
  [35] (signed byte) print_sbyte_at::b#4 ← phi( main::@1/(signed byte) print_sbyte_at::b#1 main::@10/(signed byte) print_sbyte_at::b#3 main::@2/(signed byte) print_sbyte_at::b#2 )
  [36] if((signed byte) print_sbyte_at::b#4<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte_at::@1
  to:print_sbyte_at::@3
print_sbyte_at::@3: scope:[print_sbyte_at]  from print_sbyte_at
  [37] (byte*) print_char_at::at#1 ← (byte*) print_sbyte_at::at#3
  [38] call print_char_at 
  to:print_sbyte_at::@2
print_sbyte_at::@2: scope:[print_sbyte_at]  from print_sbyte_at::@3 print_sbyte_at::@5
  [39] (signed byte) print_sbyte_at::b#6 ← phi( print_sbyte_at::@5/(signed byte) print_sbyte_at::b#0 print_sbyte_at::@3/(signed byte) print_sbyte_at::b#4 )
  [40] (byte*) print_byte_at::at#0 ← (byte*) print_sbyte_at::at#3 + (byte/signed byte/word/signed word/dword/signed dword) 1
  [41] call print_byte_at 
  to:print_sbyte_at::@return
print_sbyte_at::@return: scope:[print_sbyte_at]  from print_sbyte_at::@2
  [42] return 
  to:@return
print_sbyte_at::@1: scope:[print_sbyte_at]  from print_sbyte_at
  [43] (byte*) print_char_at::at#0 ← (byte*) print_sbyte_at::at#3
  [44] call print_char_at 
  to:print_sbyte_at::@5
print_sbyte_at::@5: scope:[print_sbyte_at]  from print_sbyte_at::@1
  [45] (signed byte) print_sbyte_at::b#0 ← - (signed byte) print_sbyte_at::b#4
  to:print_sbyte_at::@2
print_char_at: scope:[print_char_at]  from print_byte_at print_byte_at::@1 print_sbyte_at::@1 print_sbyte_at::@3
  [46] (byte*) print_char_at::at#4 ← phi( print_byte_at/(byte*) print_char_at::at#2 print_byte_at::@1/(byte*) print_char_at::at#3 print_sbyte_at::@1/(byte*) print_char_at::at#0 print_sbyte_at::@3/(byte*) print_char_at::at#1 )
  [46] (byte) print_char_at::ch#4 ← phi( print_byte_at/(byte) print_char_at::ch#2 print_byte_at::@1/(byte) print_char_at::ch#3 print_sbyte_at::@1/(byte) '-' print_sbyte_at::@3/(byte) ' ' )
  [47] *((byte*) print_char_at::at#4) ← (byte) print_char_at::ch#4
  to:print_char_at::@return
print_char_at::@return: scope:[print_char_at]  from print_char_at
  [48] return 
  to:@return
print_byte_at: scope:[print_byte_at]  from print_sbyte_at::@2
  [49] (byte~) print_byte_at::$0 ← (byte)(signed byte) print_sbyte_at::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  [50] (byte) print_char_at::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0)
  [51] (byte*) print_char_at::at#2 ← (byte*) print_byte_at::at#0
  [52] call print_char_at 
  to:print_byte_at::@1
print_byte_at::@1: scope:[print_byte_at]  from print_byte_at
  [53] (byte~) print_byte_at::$2 ← (byte)(signed byte) print_sbyte_at::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15
  [54] (byte*) print_char_at::at#3 ← (byte*) print_byte_at::at#0 + (byte/signed byte/word/signed word/dword/signed dword) 1
  [55] (byte) print_char_at::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2)
  [56] call print_char_at 
  to:print_byte_at::@return
print_byte_at::@return: scope:[print_byte_at]  from print_byte_at::@1
  [57] return 
  to:@return
fmul8: scope:[fmul8]  from main::@3
  [58] *((const signed byte*) ap#0) ← (signed byte) fmul8::a#0
  [59] *((const signed byte*) bp#0) ← (signed byte) fmul8::b#0
  asm { ldaap staA1+1 eor#$ff staA2+1 ldxbp sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacp  }
  [61] (signed byte) fmul8::return#1 ← *((const signed byte*) cp#0)
  to:fmul8::@return
fmul8::@return: scope:[fmul8]  from fmul8
  [62] return 
  to:@return
init_screen: scope:[init_screen]  from main
  [63] phi()
  [64] call print_cls 
  to:init_screen::@1
init_screen::@1: scope:[init_screen]  from init_screen init_screen::@1
  [65] (byte) init_screen::l#2 ← phi( init_screen::@1/(byte) init_screen::l#1 init_screen/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [66] *(((byte*))(word/dword/signed dword) 55296 + (byte) init_screen::l#2) ← (const byte) init_screen::WHITE#0
  [67] (byte) init_screen::l#1 ← ++ (byte) init_screen::l#2
  [68] if((byte) init_screen::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto init_screen::@1
  to:init_screen::@2
init_screen::@2: scope:[init_screen]  from init_screen::@1 init_screen::@2
  [69] (byte) init_screen::m#2 ← phi( init_screen::@2/(byte) init_screen::m#1 init_screen::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [69] (byte*) init_screen::COLS#3 ← phi( init_screen::@2/(byte*) init_screen::COLS#1 init_screen::@1/((byte*))(word/dword/signed dword) 55296 )
  [70] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) init_screen::WHITE#0
  [71] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) init_screen::WHITE#0
  [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (const byte) init_screen::WHITE#0
  [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0
  [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40
  [75] (byte) init_screen::m#1 ← ++ (byte) init_screen::m#2
  [76] if((byte) init_screen::m#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto init_screen::@2
  to:init_screen::@return
init_screen::@return: scope:[init_screen]  from init_screen::@2
  [77] return 
  to:@return
print_cls: scope:[print_cls]  from init_screen
  [78] phi()
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  [79] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 )
  [80] *((byte*) print_cls::sc#2) ← (byte) ' '
  [81] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  [83] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(signed byte*) ap
(signed byte*) bp
(signed byte*) cp
(signed byte()) fmul8((signed byte) fmul8::a , (signed byte) fmul8::b)
(signed byte) fmul8::a
(signed byte) fmul8::a#0 51.5
(signed byte) fmul8::b
(signed byte) fmul8::b#0 51.5
(signed byte) fmul8::return
(signed byte) fmul8::return#0 202.0
(signed byte) fmul8::return#1 34.33333333333333
(void()) init_screen()
(byte*) init_screen::COLS
(byte*) init_screen::COLS#1 7.333333333333333
(byte*) init_screen::COLS#3 13.2
(byte) init_screen::WHITE
(byte) init_screen::l
(byte) init_screen::l#1 16.5
(byte) init_screen::l#2 16.5
(byte) init_screen::m
(byte) init_screen::m#1 16.5
(byte) init_screen::m#2 3.6666666666666665
(void()) main()
(byte*) main::at
(byte*) main::at#1 7.333333333333333
(byte*~) main::at#12 22.0
(byte*) main::at#2 2.3157894736842106
(byte*) main::at#3 27.545454545454547
(byte*) main::at#4 8.25
(byte*) main::at#6 213.0
(byte*) main::at_line
(byte*) main::at_line#2 22.0
(byte) main::i
(byte) main::i#1 16.5
(byte) main::i#2 7.444444444444445
(byte) main::j
(byte) main::j#1 151.5
(byte) main::j#2 30.299999999999997
(byte) main::k
(byte) main::k#1 16.5
(byte) main::k#2 6.6000000000000005
(signed byte) main::r
(signed byte) main::r#0 202.0
(byte*) mulf_sqr1
(byte*) mulf_sqr2
(void()) print_byte_at((byte) print_byte_at::b , (byte*) print_byte_at::at)
(byte~) print_byte_at::$0 4.0
(byte~) print_byte_at::$2 2.0
(byte*) print_byte_at::at
(byte*) print_byte_at::at#0 1.0
(byte) print_byte_at::b
(void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at)
(byte*) print_char_at::at
(byte*) print_char_at::at#0 4.0
(byte*) print_char_at::at#1 4.0
(byte*) print_char_at::at#2 4.0
(byte*) print_char_at::at#3 2.0
(byte*) print_char_at::at#4 10.0
(byte) print_char_at::ch
(byte) print_char_at::ch#2 2.0
(byte) print_char_at::ch#3 4.0
(byte) print_char_at::ch#4 6.0
(byte*) print_char_cursor
(void()) print_cls()
(byte*) print_cls::sc
(byte*) print_cls::sc#1 16.5
(byte*) print_cls::sc#2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(byte*) print_sbyte_at::at
(byte*) print_sbyte_at::at#0 22.0
(byte*) print_sbyte_at::at#1 22.0
(byte*) print_sbyte_at::at#2 202.0
(byte*) print_sbyte_at::at#3 16.125
(signed byte) print_sbyte_at::b
(signed byte) print_sbyte_at::b#0 4.0
(signed byte) print_sbyte_at::b#1 11.0
(signed byte) print_sbyte_at::b#2 11.0
(signed byte) print_sbyte_at::b#3 101.0
(signed byte) print_sbyte_at::b#4 21.499999999999993
(signed byte) print_sbyte_at::b#6 0.6666666666666666
(byte*) print_screen
(signed byte[]) vals

Initial phi equivalence classes
[ main::k#2 main::k#1 ]
[ main::at#4 main::at#1 ]
[ main::at_line#2 main::at#2 ]
[ main::i#2 main::i#1 ]
[ main::at#6 main::at#3 main::at#12 ]
[ main::j#2 main::j#1 ]
[ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 ]
[ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
[ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
[ print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ]
[ init_screen::l#2 init_screen::l#1 ]
[ init_screen::COLS#3 init_screen::COLS#1 ]
[ init_screen::m#2 init_screen::m#1 ]
[ print_cls::sc#2 print_cls::sc#1 ]
Added variable fmul8::a#0 to zero page equivalence class [ fmul8::a#0 ]
Added variable fmul8::b#0 to zero page equivalence class [ fmul8::b#0 ]
Added variable fmul8::return#0 to zero page equivalence class [ fmul8::return#0 ]
Added variable main::r#0 to zero page equivalence class [ main::r#0 ]
Added variable print_byte_at::at#0 to zero page equivalence class [ print_byte_at::at#0 ]
Added variable print_byte_at::$0 to zero page equivalence class [ print_byte_at::$0 ]
Added variable print_byte_at::$2 to zero page equivalence class [ print_byte_at::$2 ]
Added variable fmul8::return#1 to zero page equivalence class [ fmul8::return#1 ]
Complete equivalence classes
[ main::k#2 main::k#1 ]
[ main::at#4 main::at#1 ]
[ main::at_line#2 main::at#2 ]
[ main::i#2 main::i#1 ]
[ main::at#6 main::at#3 main::at#12 ]
[ main::j#2 main::j#1 ]
[ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 ]
[ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
[ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
[ print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ]
[ init_screen::l#2 init_screen::l#1 ]
[ init_screen::COLS#3 init_screen::COLS#1 ]
[ init_screen::m#2 init_screen::m#1 ]
[ print_cls::sc#2 print_cls::sc#1 ]
[ fmul8::a#0 ]
[ fmul8::b#0 ]
[ fmul8::return#0 ]
[ main::r#0 ]
[ print_byte_at::at#0 ]
[ print_byte_at::$0 ]
[ print_byte_at::$2 ]
[ fmul8::return#1 ]
Allocated zp ZP_BYTE:2 [ main::k#2 main::k#1 ]
Allocated zp ZP_WORD:3 [ main::at#4 main::at#1 ]
Allocated zp ZP_WORD:5 [ main::at_line#2 main::at#2 ]
Allocated zp ZP_BYTE:7 [ main::i#2 main::i#1 ]
Allocated zp ZP_WORD:8 [ main::at#6 main::at#3 main::at#12 ]
Allocated zp ZP_BYTE:10 [ main::j#2 main::j#1 ]
Allocated zp ZP_WORD:11 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 ]
Allocated zp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
Allocated zp ZP_BYTE:14 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
Allocated zp ZP_WORD:15 [ print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ]
Allocated zp ZP_BYTE:17 [ init_screen::l#2 init_screen::l#1 ]
Allocated zp ZP_WORD:18 [ init_screen::COLS#3 init_screen::COLS#1 ]
Allocated zp ZP_BYTE:20 [ init_screen::m#2 init_screen::m#1 ]
Allocated zp ZP_WORD:21 [ print_cls::sc#2 print_cls::sc#1 ]
Allocated zp ZP_BYTE:23 [ fmul8::a#0 ]
Allocated zp ZP_BYTE:24 [ fmul8::b#0 ]
Allocated zp ZP_BYTE:25 [ fmul8::return#0 ]
Allocated zp ZP_BYTE:26 [ main::r#0 ]
Allocated zp ZP_WORD:27 [ print_byte_at::at#0 ]
Allocated zp ZP_BYTE:29 [ print_byte_at::$0 ]
Allocated zp ZP_BYTE:30 [ print_byte_at::$2 ]
Allocated zp ZP_BYTE:31 [ fmul8::return#1 ]

INITIAL ASM
//SEG0 File Comments
// Seriously fast multiply 8-bit version (8bit*8bit=8bit)
// Multiplies two signed 8-bit numbers and results in an 8-bit number
// C=A*B, A in [-64;64], B in [-96;95], C in [-96;95] - 64 acts a 1 (X*64=X)
// Uses the formula a*b = (a+b)^2/4 - (a-b)^2/4
// See the following for information about the method
// - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication 
// - http://codebase64.org/doku.php?id=magazines:chacking16
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label print_line_cursor = $400
  // Pointers to a, b and c=a*b
  .label ap = $fd
  .label bp = $fe
  .label cp = $ff
  // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
  // f(x) = >(( x * x ))
  .label mulf_sqr1 = $2000
  // g(x) =  >((( 1 - x ) * ( 1 - x )))
  .label mulf_sqr2 = $2200
//SEG3 @begin
bbegin:
  jmp b22
//SEG4 @22
b22:
//SEG5 kickasm(location (const byte*) mulf_sqr1#0) {{ .for(var i=0;i<$200;i++) {     	.if(i<=159) { .byte round((i*i)/256) }     	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }     	.if(i>351) { .byte round(((512-i)*(512-i))/256) }     }  }}
//SEG6 kickasm(location (const byte*) mulf_sqr2#0) {{ .for(var i=0;i<$200;i++) {     	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }     	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }     	.if(i>351) { .byte round(((i-511)*(i-511))/256) }       }  }}
//SEG7 [3] call main 
//SEG8 [5] phi from @22 to main [phi:@22->main]
main_from_b22:
  jsr main
//SEG9 [4] phi from @22 to @end [phi:@22->@end]
bend_from_b22:
  jmp bend
//SEG10 @end
bend:
//SEG11 main
main: {
    .label at = 3
    .label k = 2
    .label at_2 = 5
    .label at_3 = 8
    .label r = $1a
    .label j = $a
    .label i = 7
    .label at_line = 5
    .label at_6 = 8
    .label at_12 = 8
  //SEG12 [6] call init_screen 
  //SEG13 [63] phi from main to init_screen [phi:main->init_screen]
  init_screen_from_main:
    jsr init_screen
  //SEG14 [7] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
  //SEG15 [7] phi (byte*) main::at#4 = ((byte*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 4 [phi:main->main::@1#0] -- pbuz1=pbuc1 
    lda #<$400+4
    sta at
    lda #>$400+4
    sta at+1
  //SEG16 [7] phi (byte) main::k#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta k
    jmp b1
  //SEG17 [7] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
  b1_from_b8:
  //SEG18 [7] phi (byte*) main::at#4 = (byte*) main::at#1 [phi:main::@8->main::@1#0] -- register_copy 
  //SEG19 [7] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@8->main::@1#1] -- register_copy 
    jmp b1
  //SEG20 main::@1
  b1:
  //SEG21 [8] (signed byte) print_sbyte_at::b#1 ← *((const signed byte[]) vals#0 + (byte) main::k#2) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy k
    lda vals,y
    sta print_sbyte_at.b
  //SEG22 [9] (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4 -- pbuz1=pbuz2 
    lda at
    sta print_sbyte_at.at
    lda at+1
    sta print_sbyte_at.at+1
  //SEG23 [10] call print_sbyte_at 
  //SEG24 [35] phi from main::@1 to print_sbyte_at [phi:main::@1->print_sbyte_at]
  print_sbyte_at_from_b1:
  //SEG25 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#0 [phi:main::@1->print_sbyte_at#0] -- register_copy 
  //SEG26 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#1 [phi:main::@1->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
    jmp b8
  //SEG27 main::@8
  b8:
  //SEG28 [11] (byte*) main::at#1 ← (byte*) main::at#4 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- pbuz1=pbuz1_plus_vbuc1 
    lda at
    clc
    adc #4
    sta at
    bcc !+
    inc at+1
  !:
  //SEG29 [12] (byte) main::k#1 ← ++ (byte) main::k#2 -- vbuz1=_inc_vbuz1 
    inc k
  //SEG30 [13] if((byte) main::k#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda k
    cmp #9
    bne b1_from_b8
  //SEG31 [14] phi from main::@8 to main::@2 [phi:main::@8->main::@2]
  b2_from_b8:
  //SEG32 [14] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@8->main::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta i
  //SEG33 [14] phi (byte*) main::at_line#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@8->main::@2#1] -- pbuz1=pbuc1 
    lda #<$400
    sta at_line
    lda #>$400
    sta at_line+1
    jmp b2
  //SEG34 [14] phi from main::@5 to main::@2 [phi:main::@5->main::@2]
  b2_from_b5:
  //SEG35 [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@5->main::@2#0] -- register_copy 
  //SEG36 [14] phi (byte*) main::at_line#2 = (byte*) main::at#2 [phi:main::@5->main::@2#1] -- register_copy 
    jmp b2
  //SEG37 main::@2
  b2:
  //SEG38 [15] (byte*) main::at#2 ← (byte*) main::at_line#2 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda at_2
    clc
    adc #$28
    sta at_2
    bcc !+
    inc at_2+1
  !:
  //SEG39 [16] (signed byte) print_sbyte_at::b#2 ← *((const signed byte[]) vals#0 + (byte) main::i#2) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy i
    lda vals,y
    sta print_sbyte_at.b
  //SEG40 [17] (byte*) print_sbyte_at::at#1 ← (byte*) main::at#2 -- pbuz1=pbuz2 
    lda at_2
    sta print_sbyte_at.at
    lda at_2+1
    sta print_sbyte_at.at+1
  //SEG41 [18] call print_sbyte_at 
  //SEG42 [35] phi from main::@2 to print_sbyte_at [phi:main::@2->print_sbyte_at]
  print_sbyte_at_from_b2:
  //SEG43 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#1 [phi:main::@2->print_sbyte_at#0] -- register_copy 
  //SEG44 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#2 [phi:main::@2->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
  //SEG45 [19] (byte*~) main::at#12 ← (byte*) main::at#2 -- pbuz1=pbuz2 
    lda at_2
    sta at_12
    lda at_2+1
    sta at_12+1
  //SEG46 [20] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  b3_from_b2:
  //SEG47 [20] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta j
  //SEG48 [20] phi (byte*) main::at#6 = (byte*~) main::at#12 [phi:main::@2->main::@3#1] -- register_copy 
    jmp b3
  //SEG49 [20] phi from main::@11 to main::@3 [phi:main::@11->main::@3]
  b3_from_b11:
  //SEG50 [20] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@11->main::@3#0] -- register_copy 
  //SEG51 [20] phi (byte*) main::at#6 = (byte*) main::at#3 [phi:main::@11->main::@3#1] -- register_copy 
    jmp b3
  //SEG52 main::@3
  b3:
  //SEG53 [21] (byte*) main::at#3 ← (byte*) main::at#6 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- pbuz1=pbuz1_plus_vbuc1 
    lda at_3
    clc
    adc #4
    sta at_3
    bcc !+
    inc at_3+1
  !:
  //SEG54 [22] (signed byte) fmul8::a#0 ← *((const signed byte[]) vals#0 + (byte) main::i#2) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy i
    lda vals,y
    sta fmul8.a
  //SEG55 [23] (signed byte) fmul8::b#0 ← *((const signed byte[]) vals#0 + (byte) main::j#2) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy j
    lda vals,y
    sta fmul8.b
  //SEG56 [24] call fmul8 
    jsr fmul8
  //SEG57 [25] (signed byte) fmul8::return#0 ← (signed byte) fmul8::return#1 -- vbsz1=vbsz2 
    lda fmul8.return_1
    sta fmul8.return
    jmp b10
  //SEG58 main::@10
  b10:
  //SEG59 [26] (signed byte) main::r#0 ← (signed byte) fmul8::return#0 -- vbsz1=vbsz2 
    lda fmul8.return
    sta r
  //SEG60 [27] (signed byte) print_sbyte_at::b#3 ← (signed byte) main::r#0 -- vbsz1=vbsz2 
    lda r
    sta print_sbyte_at.b
  //SEG61 [28] (byte*) print_sbyte_at::at#2 ← (byte*) main::at#3 -- pbuz1=pbuz2 
    lda at_3
    sta print_sbyte_at.at
    lda at_3+1
    sta print_sbyte_at.at+1
  //SEG62 [29] call print_sbyte_at 
  //SEG63 [35] phi from main::@10 to print_sbyte_at [phi:main::@10->print_sbyte_at]
  print_sbyte_at_from_b10:
  //SEG64 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#2 [phi:main::@10->print_sbyte_at#0] -- register_copy 
  //SEG65 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#3 [phi:main::@10->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
    jmp b11
  //SEG66 main::@11
  b11:
  //SEG67 [30] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1 
    inc j
  //SEG68 [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda j
    cmp #9
    bne b3_from_b11
    jmp b5
  //SEG69 main::@5
  b5:
  //SEG70 [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG71 [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #9
    bne b2_from_b5
    jmp breturn
  //SEG72 main::@return
  breturn:
  //SEG73 [34] return 
    rts
}
//SEG74 print_sbyte_at
// Print a signed byte as hex at a specific screen position
// print_sbyte_at(signed byte zeropage($d) b, byte* zeropage($b) at)
print_sbyte_at: {
    .label b = $d
    .label at = $b
  //SEG75 [36] if((signed byte) print_sbyte_at::b#4<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte_at::@1 -- vbsz1_lt_0_then_la1 
    lda b
    bmi b1
    jmp b3
  //SEG76 print_sbyte_at::@3
  b3:
  //SEG77 [37] (byte*) print_char_at::at#1 ← (byte*) print_sbyte_at::at#3 -- pbuz1=pbuz2 
    lda at
    sta print_char_at.at
    lda at+1
    sta print_char_at.at+1
  //SEG78 [38] call print_char_at 
  //SEG79 [46] phi from print_sbyte_at::@3 to print_char_at [phi:print_sbyte_at::@3->print_char_at]
  print_char_at_from_b3:
  //SEG80 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#1 [phi:print_sbyte_at::@3->print_char_at#0] -- register_copy 
  //SEG81 [46] phi (byte) print_char_at::ch#4 = (byte) ' ' [phi:print_sbyte_at::@3->print_char_at#1] -- vbuz1=vbuc1 
    lda #' '
    sta print_char_at.ch
    jsr print_char_at
  //SEG82 [39] phi from print_sbyte_at::@3 print_sbyte_at::@5 to print_sbyte_at::@2 [phi:print_sbyte_at::@3/print_sbyte_at::@5->print_sbyte_at::@2]
  b2_from_b3:
  b2_from_b5:
  //SEG83 [39] phi (signed byte) print_sbyte_at::b#6 = (signed byte) print_sbyte_at::b#4 [phi:print_sbyte_at::@3/print_sbyte_at::@5->print_sbyte_at::@2#0] -- register_copy 
    jmp b2
  //SEG84 print_sbyte_at::@2
  b2:
  //SEG85 [40] (byte*) print_byte_at::at#0 ← (byte*) print_sbyte_at::at#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuz1=pbuz2_plus_1 
    lda at
    clc
    adc #1
    sta print_byte_at.at
    lda at+1
    adc #0
    sta print_byte_at.at+1
  //SEG86 [41] call print_byte_at 
    jsr print_byte_at
    jmp breturn
  //SEG87 print_sbyte_at::@return
  breturn:
  //SEG88 [42] return 
    rts
  //SEG89 print_sbyte_at::@1
  b1:
  //SEG90 [43] (byte*) print_char_at::at#0 ← (byte*) print_sbyte_at::at#3 -- pbuz1=pbuz2 
    lda at
    sta print_char_at.at
    lda at+1
    sta print_char_at.at+1
  //SEG91 [44] call print_char_at 
  //SEG92 [46] phi from print_sbyte_at::@1 to print_char_at [phi:print_sbyte_at::@1->print_char_at]
  print_char_at_from_b1:
  //SEG93 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#0 [phi:print_sbyte_at::@1->print_char_at#0] -- register_copy 
  //SEG94 [46] phi (byte) print_char_at::ch#4 = (byte) '-' [phi:print_sbyte_at::@1->print_char_at#1] -- vbuz1=vbuc1 
    lda #'-'
    sta print_char_at.ch
    jsr print_char_at
    jmp b5
  //SEG95 print_sbyte_at::@5
  b5:
  //SEG96 [45] (signed byte) print_sbyte_at::b#0 ← - (signed byte) print_sbyte_at::b#4 -- vbsz1=_neg_vbsz1 
    lda b
    eor #$ff
    clc
    adc #1
    sta b
    jmp b2_from_b5
}
//SEG97 print_char_at
// Print a single char
// print_char_at(byte zeropage($e) ch, byte* zeropage($f) at)
print_char_at: {
    .label at = $f
    .label ch = $e
  //SEG98 [47] *((byte*) print_char_at::at#4) ← (byte) print_char_at::ch#4 -- _deref_pbuz1=vbuz2 
    lda ch
    ldy #0
    sta (at),y
    jmp breturn
  //SEG99 print_char_at::@return
  breturn:
  //SEG100 [48] return 
    rts
}
//SEG101 print_byte_at
// Print a byte as HEX at a specific position
// print_byte_at(byte* zeropage($1b) at)
print_byte_at: {
    .label _0 = $1d
    .label _2 = $1e
    .label at = $1b
  //SEG102 [49] (byte~) print_byte_at::$0 ← (byte)(signed byte) print_sbyte_at::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz2_ror_4 
    lda print_sbyte_at.b
    lsr
    lsr
    lsr
    lsr
    sta _0
  //SEG103 [50] (byte) print_char_at::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy _0
    lda print_hextab,y
    sta print_char_at.ch
  //SEG104 [51] (byte*) print_char_at::at#2 ← (byte*) print_byte_at::at#0 -- pbuz1=pbuz2 
    lda at
    sta print_char_at.at
    lda at+1
    sta print_char_at.at+1
  //SEG105 [52] call print_char_at 
  //SEG106 [46] phi from print_byte_at to print_char_at [phi:print_byte_at->print_char_at]
  print_char_at_from_print_byte_at:
  //SEG107 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#2 [phi:print_byte_at->print_char_at#0] -- register_copy 
  //SEG108 [46] phi (byte) print_char_at::ch#4 = (byte) print_char_at::ch#2 [phi:print_byte_at->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp b1
  //SEG109 print_byte_at::@1
  b1:
  //SEG110 [53] (byte~) print_byte_at::$2 ← (byte)(signed byte) print_sbyte_at::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15 -- vbuz1=vbuz2_band_vbuc1 
    lda #$f
    and print_sbyte_at.b
    sta _2
  //SEG111 [54] (byte*) print_char_at::at#3 ← (byte*) print_byte_at::at#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuz1=pbuz2_plus_1 
    lda at
    clc
    adc #1
    sta print_char_at.at
    lda at+1
    adc #0
    sta print_char_at.at+1
  //SEG112 [55] (byte) print_char_at::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy _2
    lda print_hextab,y
    sta print_char_at.ch
  //SEG113 [56] call print_char_at 
  //SEG114 [46] phi from print_byte_at::@1 to print_char_at [phi:print_byte_at::@1->print_char_at]
  print_char_at_from_b1:
  //SEG115 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#3 [phi:print_byte_at::@1->print_char_at#0] -- register_copy 
  //SEG116 [46] phi (byte) print_char_at::ch#4 = (byte) print_char_at::ch#3 [phi:print_byte_at::@1->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp breturn
  //SEG117 print_byte_at::@return
  breturn:
  //SEG118 [57] return 
    rts
}
//SEG119 fmul8
// fmul8(signed byte zeropage($17) a, signed byte zeropage($18) b)
fmul8: {
    .label a = $17
    .label b = $18
    .label return = $19
    .label return_1 = $1f
  //SEG120 [58] *((const signed byte*) ap#0) ← (signed byte) fmul8::a#0 -- _deref_pbsc1=vbsz1 
    lda a
    sta ap
  //SEG121 [59] *((const signed byte*) bp#0) ← (signed byte) fmul8::b#0 -- _deref_pbsc1=vbsz1 
    lda b
    sta bp
  //SEG122 asm { ldaap staA1+1 eor#$ff staA2+1 ldxbp sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacp  }
    lda ap
    sta A1+1
    eor #$ff
    sta A2+1
    ldx bp
    sec
  A1:
    lda mulf_sqr1,x
  A2:
    sbc mulf_sqr2,x
    sta cp
  //SEG123 [61] (signed byte) fmul8::return#1 ← *((const signed byte*) cp#0) -- vbsz1=_deref_pbsc1 
    lda cp
    sta return_1
    jmp breturn
  //SEG124 fmul8::@return
  breturn:
  //SEG125 [62] return 
    rts
}
//SEG126 init_screen
init_screen: {
    .const WHITE = 1
    .label l = $11
    .label COLS = $12
    .label m = $14
  //SEG127 [64] call print_cls 
  //SEG128 [78] phi from init_screen to print_cls [phi:init_screen->print_cls]
  print_cls_from_init_screen:
    jsr print_cls
  //SEG129 [65] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
  b1_from_init_screen:
  //SEG130 [65] phi (byte) init_screen::l#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init_screen->init_screen::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta l
    jmp b1
  //SEG131 [65] phi from init_screen::@1 to init_screen::@1 [phi:init_screen::@1->init_screen::@1]
  b1_from_b1:
  //SEG132 [65] phi (byte) init_screen::l#2 = (byte) init_screen::l#1 [phi:init_screen::@1->init_screen::@1#0] -- register_copy 
    jmp b1
  //SEG133 init_screen::@1
  b1:
  //SEG134 [66] *(((byte*))(word/dword/signed dword) 55296 + (byte) init_screen::l#2) ← (const byte) init_screen::WHITE#0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy l
    lda #WHITE
    sta $d800,y
  //SEG135 [67] (byte) init_screen::l#1 ← ++ (byte) init_screen::l#2 -- vbuz1=_inc_vbuz1 
    inc l
  //SEG136 [68] if((byte) init_screen::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto init_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda l
    cmp #$28
    bne b1_from_b1
  //SEG137 [69] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2]
  b2_from_b1:
  //SEG138 [69] phi (byte) init_screen::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init_screen::@1->init_screen::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta m
  //SEG139 [69] phi (byte*) init_screen::COLS#3 = ((byte*))(word/dword/signed dword) 55296 [phi:init_screen::@1->init_screen::@2#1] -- pbuz1=pbuc1 
    lda #<$d800
    sta COLS
    lda #>$d800
    sta COLS+1
    jmp b2
  //SEG140 [69] phi from init_screen::@2 to init_screen::@2 [phi:init_screen::@2->init_screen::@2]
  b2_from_b2:
  //SEG141 [69] phi (byte) init_screen::m#2 = (byte) init_screen::m#1 [phi:init_screen::@2->init_screen::@2#0] -- register_copy 
  //SEG142 [69] phi (byte*) init_screen::COLS#3 = (byte*) init_screen::COLS#1 [phi:init_screen::@2->init_screen::@2#1] -- register_copy 
    jmp b2
  //SEG143 init_screen::@2
  b2:
  //SEG144 [70] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #0
    sta (COLS),y
  //SEG145 [71] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #1
    sta (COLS),y
  //SEG146 [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #2
    sta (COLS),y
  //SEG147 [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #3
    sta (COLS),y
  //SEG148 [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda COLS
    clc
    adc #$28
    sta COLS
    bcc !+
    inc COLS+1
  !:
  //SEG149 [75] (byte) init_screen::m#1 ← ++ (byte) init_screen::m#2 -- vbuz1=_inc_vbuz1 
    inc m
  //SEG150 [76] if((byte) init_screen::m#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto init_screen::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda m
    cmp #$19
    bne b2_from_b2
    jmp breturn
  //SEG151 init_screen::@return
  breturn:
  //SEG152 [77] return 
    rts
}
//SEG153 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = $15
  //SEG154 [79] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG155 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta sc
    lda #>print_line_cursor
    sta sc+1
    jmp b1
  //SEG156 [79] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG157 [79] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG158 print_cls::@1
  b1:
  //SEG159 [80] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG160 [81] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG161 [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>print_line_cursor+$3e8
    bne b1_from_b1
    lda sc
    cmp #<print_line_cursor+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG162 print_cls::@return
  breturn:
  //SEG163 [83] return 
    rts
}
  print_hextab: .text "0123456789abcdef"
  vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f
.pc = mulf_sqr1 "mulf_sqr1"
  .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((i*i)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
    	.if(i>351) { .byte round(((512-i)*(512-i))/256) }
    }

.pc = mulf_sqr2 "mulf_sqr2"
  .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
    	.if(i>351) { .byte round(((i-511)*(i-511))/256) }  
    }


REGISTER UPLIFT POTENTIAL REGISTERS
Statement [9] (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4 [ main::k#2 main::at#4 print_sbyte_at::b#1 print_sbyte_at::at#0 ] ( main:3 [ main::k#2 main::at#4 print_sbyte_at::b#1 print_sbyte_at::at#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::k#2 main::k#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
Statement [11] (byte*) main::at#1 ← (byte*) main::at#4 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::k#2 main::at#1 ] ( main:3 [ main::k#2 main::at#1 ] ) always clobbers reg byte a 
Statement [15] (byte*) main::at#2 ← (byte*) main::at_line#2 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::i#2 main::at#2 ] ( main:3 [ main::i#2 main::at#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::i#2 main::i#1 ]
Statement [17] (byte*) print_sbyte_at::at#1 ← (byte*) main::at#2 [ main::i#2 main::at#2 print_sbyte_at::b#2 print_sbyte_at::at#1 ] ( main:3 [ main::i#2 main::at#2 print_sbyte_at::b#2 print_sbyte_at::at#1 ] ) always clobbers reg byte a 
Statement [19] (byte*~) main::at#12 ← (byte*) main::at#2 [ main::i#2 main::at#2 main::at#12 ] ( main:3 [ main::i#2 main::at#2 main::at#12 ] ) always clobbers reg byte a 
Statement [21] (byte*) main::at#3 ← (byte*) main::at#6 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ( main:3 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ main::j#2 main::j#1 ]
Statement [28] (byte*) print_sbyte_at::at#2 ← (byte*) main::at#3 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#3 print_sbyte_at::at#2 ] ( main:3 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#3 print_sbyte_at::at#2 ] ) always clobbers reg byte a 
Statement [37] (byte*) print_char_at::at#1 ← (byte*) print_sbyte_at::at#3 [ print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] ) always clobbers reg byte a 
Statement [40] (byte*) print_byte_at::at#0 ← (byte*) print_sbyte_at::at#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ print_sbyte_at::b#6 print_byte_at::at#0 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 ] ) always clobbers reg byte a 
Statement [43] (byte*) print_char_at::at#0 ← (byte*) print_sbyte_at::at#3 [ print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] ) always clobbers reg byte a 
Statement [45] (signed byte) print_sbyte_at::b#0 ← - (signed byte) print_sbyte_at::b#4 [ print_sbyte_at::at#3 print_sbyte_at::b#0 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::at#3 print_sbyte_at::b#0 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::at#3 print_sbyte_at::b#0 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::at#3 print_sbyte_at::b#0 ] ) always clobbers reg byte a 
Statement [47] *((byte*) print_char_at::at#4) ← (byte) print_char_at::ch#4 [ ] ( main:3::print_sbyte_at:10::print_char_at:38 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:18::print_char_at:38 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:29::print_char_at:38 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:10::print_char_at:44 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:18::print_char_at:44 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:29::print_char_at:44 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:10::print_byte_at:41::print_char_at:52 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:18::print_byte_at:41::print_char_at:52 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:29::print_byte_at:41::print_char_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:10::print_byte_at:41::print_char_at:56 [ main::k#2 main::at#4 ] main:3::print_sbyte_at:18::print_byte_at:41::print_char_at:56 [ main::i#2 main::at#2 ] main:3::print_sbyte_at:29::print_byte_at:41::print_char_at:56 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::k#2 main::k#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ main::j#2 main::j#1 ]
Statement [49] (byte~) print_byte_at::$0 ← (byte)(signed byte) print_sbyte_at::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] ) always clobbers reg byte a 
Statement [51] (byte*) print_char_at::at#2 ← (byte*) print_byte_at::at#0 [ print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
Statement [53] (byte~) print_byte_at::$2 ← (byte)(signed byte) print_sbyte_at::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_byte_at::at#0 print_byte_at::$2 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_byte_at::at#0 print_byte_at::$2 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_byte_at::at#0 print_byte_at::$2 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_byte_at::at#0 print_byte_at::$2 ] ) always clobbers reg byte a 
Statement [54] (byte*) print_char_at::at#3 ← (byte*) print_byte_at::at#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ print_char_at::at#3 print_byte_at::$2 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_char_at::at#3 print_byte_at::$2 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_char_at::at#3 print_byte_at::$2 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_char_at::at#3 print_byte_at::$2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ print_byte_at::$2 ]
Statement asm { ldaap staA1+1 eor#$ff staA2+1 ldxbp sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacp  } always clobbers reg byte a reg byte x 
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:7 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:10 [ main::j#2 main::j#1 ]
Statement [66] *(((byte*))(word/dword/signed dword) 55296 + (byte) init_screen::l#2) ← (const byte) init_screen::WHITE#0 [ init_screen::l#2 ] ( main:3::init_screen:6 [ init_screen::l#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ init_screen::l#2 init_screen::l#1 ]
Statement [70] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_screen::m#2 init_screen::m#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ init_screen::m#2 init_screen::m#1 ]
Statement [71] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Statement [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Statement [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Statement [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ init_screen::m#2 init_screen::COLS#1 ] ( main:3::init_screen:6 [ init_screen::m#2 init_screen::COLS#1 ] ) always clobbers reg byte a 
Statement [80] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#1 ] ) always clobbers reg byte a 
Statement [8] (signed byte) print_sbyte_at::b#1 ← *((const signed byte[]) vals#0 + (byte) main::k#2) [ main::k#2 main::at#4 print_sbyte_at::b#1 ] ( main:3 [ main::k#2 main::at#4 print_sbyte_at::b#1 ] ) always clobbers reg byte a 
Statement [9] (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4 [ main::k#2 main::at#4 print_sbyte_at::b#1 print_sbyte_at::at#0 ] ( main:3 [ main::k#2 main::at#4 print_sbyte_at::b#1 print_sbyte_at::at#0 ] ) always clobbers reg byte a 
Statement [11] (byte*) main::at#1 ← (byte*) main::at#4 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::k#2 main::at#1 ] ( main:3 [ main::k#2 main::at#1 ] ) always clobbers reg byte a 
Statement [15] (byte*) main::at#2 ← (byte*) main::at_line#2 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::i#2 main::at#2 ] ( main:3 [ main::i#2 main::at#2 ] ) always clobbers reg byte a 
Statement [16] (signed byte) print_sbyte_at::b#2 ← *((const signed byte[]) vals#0 + (byte) main::i#2) [ main::i#2 main::at#2 print_sbyte_at::b#2 ] ( main:3 [ main::i#2 main::at#2 print_sbyte_at::b#2 ] ) always clobbers reg byte a 
Statement [17] (byte*) print_sbyte_at::at#1 ← (byte*) main::at#2 [ main::i#2 main::at#2 print_sbyte_at::b#2 print_sbyte_at::at#1 ] ( main:3 [ main::i#2 main::at#2 print_sbyte_at::b#2 print_sbyte_at::at#1 ] ) always clobbers reg byte a 
Statement [19] (byte*~) main::at#12 ← (byte*) main::at#2 [ main::i#2 main::at#2 main::at#12 ] ( main:3 [ main::i#2 main::at#2 main::at#12 ] ) always clobbers reg byte a 
Statement [21] (byte*) main::at#3 ← (byte*) main::at#6 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ( main:3 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ) always clobbers reg byte a 
Statement [28] (byte*) print_sbyte_at::at#2 ← (byte*) main::at#3 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#3 print_sbyte_at::at#2 ] ( main:3 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#3 print_sbyte_at::at#2 ] ) always clobbers reg byte a 
Statement [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3 [ main::i#2 main::at#2 main::at#3 main::j#1 ] ( main:3 [ main::i#2 main::at#2 main::at#3 main::j#1 ] ) always clobbers reg byte a 
Statement [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2 [ main::at#2 main::i#1 ] ( main:3 [ main::at#2 main::i#1 ] ) always clobbers reg byte a 
Statement [37] (byte*) print_char_at::at#1 ← (byte*) print_sbyte_at::at#3 [ print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#1 ] ) always clobbers reg byte a 
Statement [40] (byte*) print_byte_at::at#0 ← (byte*) print_sbyte_at::at#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ print_sbyte_at::b#6 print_byte_at::at#0 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 ] ) always clobbers reg byte a 
Statement [43] (byte*) print_char_at::at#0 ← (byte*) print_sbyte_at::at#3 [ print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 print_char_at::at#0 ] ) always clobbers reg byte a 
Statement [45] (signed byte) print_sbyte_at::b#0 ← - (signed byte) print_sbyte_at::b#4 [ print_sbyte_at::at#3 print_sbyte_at::b#0 ] ( main:3::print_sbyte_at:10 [ main::k#2 main::at#4 print_sbyte_at::at#3 print_sbyte_at::b#0 ] main:3::print_sbyte_at:18 [ main::i#2 main::at#2 print_sbyte_at::at#3 print_sbyte_at::b#0 ] main:3::print_sbyte_at:29 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::at#3 print_sbyte_at::b#0 ] ) always clobbers reg byte a 
Statement [47] *((byte*) print_char_at::at#4) ← (byte) print_char_at::ch#4 [ ] ( main:3::print_sbyte_at:10::print_char_at:38 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:18::print_char_at:38 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:29::print_char_at:38 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:10::print_char_at:44 [ main::k#2 main::at#4 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:18::print_char_at:44 [ main::i#2 main::at#2 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:29::print_char_at:44 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#4 print_sbyte_at::at#3 ] main:3::print_sbyte_at:10::print_byte_at:41::print_char_at:52 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:18::print_byte_at:41::print_char_at:52 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:29::print_byte_at:41::print_char_at:52 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 ] main:3::print_sbyte_at:10::print_byte_at:41::print_char_at:56 [ main::k#2 main::at#4 ] main:3::print_sbyte_at:18::print_byte_at:41::print_char_at:56 [ main::i#2 main::at#2 ] main:3::print_sbyte_at:29::print_byte_at:41::print_char_at:56 [ main::i#2 main::at#2 main::j#2 main::at#3 ] ) always clobbers reg byte a reg byte y 
Statement [49] (byte~) print_byte_at::$0 ← (byte)(signed byte) print_sbyte_at::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 print_byte_at::$0 ] ) always clobbers reg byte a 
Statement [51] (byte*) print_char_at::at#2 ← (byte*) print_byte_at::at#0 [ print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_sbyte_at::b#6 print_byte_at::at#0 print_char_at::ch#2 print_char_at::at#2 ] ) always clobbers reg byte a 
Statement [53] (byte~) print_byte_at::$2 ← (byte)(signed byte) print_sbyte_at::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_byte_at::at#0 print_byte_at::$2 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_byte_at::at#0 print_byte_at::$2 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_byte_at::at#0 print_byte_at::$2 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_byte_at::at#0 print_byte_at::$2 ] ) always clobbers reg byte a 
Statement [54] (byte*) print_char_at::at#3 ← (byte*) print_byte_at::at#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ print_char_at::at#3 print_byte_at::$2 ] ( main:3::print_sbyte_at:10::print_byte_at:41 [ main::k#2 main::at#4 print_char_at::at#3 print_byte_at::$2 ] main:3::print_sbyte_at:18::print_byte_at:41 [ main::i#2 main::at#2 print_char_at::at#3 print_byte_at::$2 ] main:3::print_sbyte_at:29::print_byte_at:41 [ main::i#2 main::at#2 main::j#2 main::at#3 print_char_at::at#3 print_byte_at::$2 ] ) always clobbers reg byte a 
Statement asm { ldaap staA1+1 eor#$ff staA2+1 ldxbp sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacp  } always clobbers reg byte a reg byte x 
Statement [66] *(((byte*))(word/dword/signed dword) 55296 + (byte) init_screen::l#2) ← (const byte) init_screen::WHITE#0 [ init_screen::l#2 ] ( main:3::init_screen:6 [ init_screen::l#2 ] ) always clobbers reg byte a 
Statement [70] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Statement [71] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Statement [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Statement [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y 
Statement [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ init_screen::m#2 init_screen::COLS#1 ] ( main:3::init_screen:6 [ init_screen::m#2 init_screen::COLS#1 ] ) always clobbers reg byte a 
Statement [80] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_BYTE:2 [ main::k#2 main::k#1 ] : zp ZP_BYTE:2 , reg byte x , 
Potential registers zp ZP_WORD:3 [ main::at#4 main::at#1 ] : zp ZP_WORD:3 , 
Potential registers zp ZP_WORD:5 [ main::at_line#2 main::at#2 ] : zp ZP_WORD:5 , 
Potential registers zp ZP_BYTE:7 [ main::i#2 main::i#1 ] : zp ZP_BYTE:7 , 
Potential registers zp ZP_WORD:8 [ main::at#6 main::at#3 main::at#12 ] : zp ZP_WORD:8 , 
Potential registers zp ZP_BYTE:10 [ main::j#2 main::j#1 ] : zp ZP_BYTE:10 , 
Potential registers zp ZP_WORD:11 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 ] : zp ZP_WORD:11 , 
Potential registers zp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ] : zp ZP_BYTE:13 , reg byte x , 
Potential registers zp ZP_BYTE:14 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:15 [ print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ] : zp ZP_WORD:15 , 
Potential registers zp ZP_BYTE:17 [ init_screen::l#2 init_screen::l#1 ] : zp ZP_BYTE:17 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:18 [ init_screen::COLS#3 init_screen::COLS#1 ] : zp ZP_WORD:18 , 
Potential registers zp ZP_BYTE:20 [ init_screen::m#2 init_screen::m#1 ] : zp ZP_BYTE:20 , reg byte x , 
Potential registers zp ZP_WORD:21 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:21 , 
Potential registers zp ZP_BYTE:23 [ fmul8::a#0 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:24 [ fmul8::b#0 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:25 [ fmul8::return#0 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:26 [ main::r#0 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:27 [ print_byte_at::at#0 ] : zp ZP_WORD:27 , 
Potential registers zp ZP_BYTE:29 [ print_byte_at::$0 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:30 [ print_byte_at::$2 ] : zp ZP_BYTE:30 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:31 [ fmul8::return#1 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [main] 262.55: zp ZP_WORD:8 [ main::at#6 main::at#3 main::at#12 ] 202: zp ZP_BYTE:26 [ main::r#0 ] 181.8: zp ZP_BYTE:10 [ main::j#2 main::j#1 ] 24.32: zp ZP_WORD:5 [ main::at_line#2 main::at#2 ] 23.94: zp ZP_BYTE:7 [ main::i#2 main::i#1 ] 23.1: zp ZP_BYTE:2 [ main::k#2 main::k#1 ] 15.58: zp ZP_WORD:3 [ main::at#4 main::at#1 ] 
Uplift Scope [print_sbyte_at] 262.12: zp ZP_WORD:11 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 ] 149.17: zp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ] 
Uplift Scope [fmul8] 202: zp ZP_BYTE:25 [ fmul8::return#0 ] 51.5: zp ZP_BYTE:23 [ fmul8::a#0 ] 51.5: zp ZP_BYTE:24 [ fmul8::b#0 ] 34.33: zp ZP_BYTE:31 [ fmul8::return#1 ] 
Uplift Scope [init_screen] 33: zp ZP_BYTE:17 [ init_screen::l#2 init_screen::l#1 ] 20.53: zp ZP_WORD:18 [ init_screen::COLS#3 init_screen::COLS#1 ] 20.17: zp ZP_BYTE:20 [ init_screen::m#2 init_screen::m#1 ] 
Uplift Scope [print_char_at] 24: zp ZP_WORD:15 [ print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ] 12: zp ZP_BYTE:14 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ] 
Uplift Scope [print_cls] 33: zp ZP_WORD:21 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplift Scope [print_byte_at] 4: zp ZP_BYTE:29 [ print_byte_at::$0 ] 2: zp ZP_BYTE:30 [ print_byte_at::$2 ] 1: zp ZP_WORD:27 [ print_byte_at::at#0 ] 
Uplift Scope [] 

Uplifting [main] best 14032 combination zp ZP_WORD:8 [ main::at#6 main::at#3 main::at#12 ] reg byte a [ main::r#0 ] zp ZP_BYTE:10 [ main::j#2 main::j#1 ] zp ZP_WORD:5 [ main::at_line#2 main::at#2 ] zp ZP_BYTE:7 [ main::i#2 main::i#1 ] reg byte x [ main::k#2 main::k#1 ] zp ZP_WORD:3 [ main::at#4 main::at#1 ] 
Uplifting [print_sbyte_at] best 14032 combination zp ZP_WORD:11 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 ] zp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ] 
Uplifting [fmul8] best 12828 combination reg byte a [ fmul8::return#0 ] reg byte a [ fmul8::a#0 ] reg byte y [ fmul8::b#0 ] zp ZP_BYTE:31 [ fmul8::return#1 ] 
Limited combination testing to 100 combinations of 256 possible.
Uplifting [init_screen] best 12618 combination reg byte x [ init_screen::l#2 init_screen::l#1 ] zp ZP_WORD:18 [ init_screen::COLS#3 init_screen::COLS#1 ] reg byte x [ init_screen::m#2 init_screen::m#1 ] 
Uplifting [print_char_at] best 12618 combination zp ZP_WORD:15 [ print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ] zp ZP_BYTE:14 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ] 
Uplifting [print_cls] best 12618 combination zp ZP_WORD:21 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplifting [print_byte_at] best 12610 combination reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] zp ZP_WORD:27 [ print_byte_at::at#0 ] 
Uplifting [] best 12610 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ main::j#2 main::j#1 ]
Uplifting [main] best 12610 combination zp ZP_BYTE:10 [ main::j#2 main::j#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
Uplifting [print_sbyte_at] best 12610 combination zp ZP_BYTE:13 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ fmul8::return#1 ]
Uplifting [fmul8] best 12307 combination reg byte a [ fmul8::return#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ main::i#2 main::i#1 ]
Uplifting [main] best 12307 combination zp ZP_BYTE:7 [ main::i#2 main::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
Uplifting [print_char_at] best 12307 combination zp ZP_BYTE:14 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 ] ] with [ zp ZP_WORD:15 [ print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 ] ] with [ zp ZP_WORD:27 [ print_byte_at::at#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:3 [ main::at#4 main::at#1 ] ] with [ zp ZP_WORD:5 [ main::at_line#2 main::at#2 ] ]
Coalescing zero page register [ zp ZP_WORD:3 [ main::at#4 main::at#1 main::at_line#2 main::at#2 ] ] with [ zp ZP_WORD:18 [ init_screen::COLS#3 init_screen::COLS#1 ] ]
Coalescing zero page register [ zp ZP_WORD:3 [ main::at#4 main::at#1 main::at_line#2 main::at#2 init_screen::COLS#3 init_screen::COLS#1 ] ] with [ zp ZP_WORD:21 [ print_cls::sc#2 print_cls::sc#1 ] ]
Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ main::at#4 main::at#1 main::at_line#2 main::at#2 init_screen::COLS#3 init_screen::COLS#1 print_cls::sc#2 print_cls::sc#1 ]
Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:4 [ main::i#2 main::i#1 ]
Allocated (was zp ZP_WORD:8) zp ZP_WORD:5 [ main::at#6 main::at#3 main::at#12 ]
Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:7 [ main::j#2 main::j#1 ]
Allocated (was zp ZP_WORD:11) zp ZP_WORD:8 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 print_byte_at::at#0 ]
Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:10 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:11 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
// Seriously fast multiply 8-bit version (8bit*8bit=8bit)
// Multiplies two signed 8-bit numbers and results in an 8-bit number
// C=A*B, A in [-64;64], B in [-96;95], C in [-96;95] - 64 acts a 1 (X*64=X)
// Uses the formula a*b = (a+b)^2/4 - (a-b)^2/4
// See the following for information about the method
// - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication 
// - http://codebase64.org/doku.php?id=magazines:chacking16
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label print_line_cursor = $400
  // Pointers to a, b and c=a*b
  .label ap = $fd
  .label bp = $fe
  .label cp = $ff
  // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
  // f(x) = >(( x * x ))
  .label mulf_sqr1 = $2000
  // g(x) =  >((( 1 - x ) * ( 1 - x )))
  .label mulf_sqr2 = $2200
//SEG3 @begin
bbegin:
  jmp b22
//SEG4 @22
b22:
//SEG5 kickasm(location (const byte*) mulf_sqr1#0) {{ .for(var i=0;i<$200;i++) {     	.if(i<=159) { .byte round((i*i)/256) }     	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }     	.if(i>351) { .byte round(((512-i)*(512-i))/256) }     }  }}
//SEG6 kickasm(location (const byte*) mulf_sqr2#0) {{ .for(var i=0;i<$200;i++) {     	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }     	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }     	.if(i>351) { .byte round(((i-511)*(i-511))/256) }       }  }}
//SEG7 [3] call main 
//SEG8 [5] phi from @22 to main [phi:@22->main]
main_from_b22:
  jsr main
//SEG9 [4] phi from @22 to @end [phi:@22->@end]
bend_from_b22:
  jmp bend
//SEG10 @end
bend:
//SEG11 main
main: {
    .label at = 2
    .label at_3 = 5
    .label j = 7
    .label i = 4
    .label at_line = 2
    .label at_6 = 5
    .label at_12 = 5
  //SEG12 [6] call init_screen 
  //SEG13 [63] phi from main to init_screen [phi:main->init_screen]
  init_screen_from_main:
    jsr init_screen
  //SEG14 [7] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
  //SEG15 [7] phi (byte*) main::at#4 = ((byte*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 4 [phi:main->main::@1#0] -- pbuz1=pbuc1 
    lda #<$400+4
    sta at
    lda #>$400+4
    sta at+1
  //SEG16 [7] phi (byte) main::k#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 
    ldx #0
    jmp b1
  //SEG17 [7] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
  b1_from_b8:
  //SEG18 [7] phi (byte*) main::at#4 = (byte*) main::at#1 [phi:main::@8->main::@1#0] -- register_copy 
  //SEG19 [7] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@8->main::@1#1] -- register_copy 
    jmp b1
  //SEG20 main::@1
  b1:
  //SEG21 [8] (signed byte) print_sbyte_at::b#1 ← *((const signed byte[]) vals#0 + (byte) main::k#2) -- vbsz1=pbsc1_derefidx_vbuxx 
    lda vals,x
    sta print_sbyte_at.b
  //SEG22 [9] (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4 -- pbuz1=pbuz2 
    lda at
    sta print_sbyte_at.at
    lda at+1
    sta print_sbyte_at.at+1
  //SEG23 [10] call print_sbyte_at 
  //SEG24 [35] phi from main::@1 to print_sbyte_at [phi:main::@1->print_sbyte_at]
  print_sbyte_at_from_b1:
  //SEG25 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#0 [phi:main::@1->print_sbyte_at#0] -- register_copy 
  //SEG26 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#1 [phi:main::@1->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
    jmp b8
  //SEG27 main::@8
  b8:
  //SEG28 [11] (byte*) main::at#1 ← (byte*) main::at#4 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- pbuz1=pbuz1_plus_vbuc1 
    lda at
    clc
    adc #4
    sta at
    bcc !+
    inc at+1
  !:
  //SEG29 [12] (byte) main::k#1 ← ++ (byte) main::k#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG30 [13] if((byte) main::k#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #9
    bne b1_from_b8
  //SEG31 [14] phi from main::@8 to main::@2 [phi:main::@8->main::@2]
  b2_from_b8:
  //SEG32 [14] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@8->main::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta i
  //SEG33 [14] phi (byte*) main::at_line#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@8->main::@2#1] -- pbuz1=pbuc1 
    lda #<$400
    sta at_line
    lda #>$400
    sta at_line+1
    jmp b2
  //SEG34 [14] phi from main::@5 to main::@2 [phi:main::@5->main::@2]
  b2_from_b5:
  //SEG35 [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@5->main::@2#0] -- register_copy 
  //SEG36 [14] phi (byte*) main::at_line#2 = (byte*) main::at#2 [phi:main::@5->main::@2#1] -- register_copy 
    jmp b2
  //SEG37 main::@2
  b2:
  //SEG38 [15] (byte*) main::at#2 ← (byte*) main::at_line#2 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda at
    clc
    adc #$28
    sta at
    bcc !+
    inc at+1
  !:
  //SEG39 [16] (signed byte) print_sbyte_at::b#2 ← *((const signed byte[]) vals#0 + (byte) main::i#2) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy i
    lda vals,y
    sta print_sbyte_at.b
  //SEG40 [17] (byte*) print_sbyte_at::at#1 ← (byte*) main::at#2 -- pbuz1=pbuz2 
    lda at
    sta print_sbyte_at.at
    lda at+1
    sta print_sbyte_at.at+1
  //SEG41 [18] call print_sbyte_at 
  //SEG42 [35] phi from main::@2 to print_sbyte_at [phi:main::@2->print_sbyte_at]
  print_sbyte_at_from_b2:
  //SEG43 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#1 [phi:main::@2->print_sbyte_at#0] -- register_copy 
  //SEG44 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#2 [phi:main::@2->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
  //SEG45 [19] (byte*~) main::at#12 ← (byte*) main::at#2 -- pbuz1=pbuz2 
    lda at
    sta at_12
    lda at+1
    sta at_12+1
  //SEG46 [20] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  b3_from_b2:
  //SEG47 [20] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta j
  //SEG48 [20] phi (byte*) main::at#6 = (byte*~) main::at#12 [phi:main::@2->main::@3#1] -- register_copy 
    jmp b3
  //SEG49 [20] phi from main::@11 to main::@3 [phi:main::@11->main::@3]
  b3_from_b11:
  //SEG50 [20] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@11->main::@3#0] -- register_copy 
  //SEG51 [20] phi (byte*) main::at#6 = (byte*) main::at#3 [phi:main::@11->main::@3#1] -- register_copy 
    jmp b3
  //SEG52 main::@3
  b3:
  //SEG53 [21] (byte*) main::at#3 ← (byte*) main::at#6 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- pbuz1=pbuz1_plus_vbuc1 
    lda at_3
    clc
    adc #4
    sta at_3
    bcc !+
    inc at_3+1
  !:
  //SEG54 [22] (signed byte) fmul8::a#0 ← *((const signed byte[]) vals#0 + (byte) main::i#2) -- vbsaa=pbsc1_derefidx_vbuz1 
    ldy i
    lda vals,y
  //SEG55 [23] (signed byte) fmul8::b#0 ← *((const signed byte[]) vals#0 + (byte) main::j#2) -- vbsyy=pbsc1_derefidx_vbuz1 
    ldx j
    ldy vals,x
  //SEG56 [24] call fmul8 
    jsr fmul8
  //SEG57 [25] (signed byte) fmul8::return#0 ← (signed byte) fmul8::return#1
    jmp b10
  //SEG58 main::@10
  b10:
  //SEG59 [26] (signed byte) main::r#0 ← (signed byte) fmul8::return#0
  //SEG60 [27] (signed byte) print_sbyte_at::b#3 ← (signed byte) main::r#0 -- vbsz1=vbsaa 
    sta print_sbyte_at.b
  //SEG61 [28] (byte*) print_sbyte_at::at#2 ← (byte*) main::at#3 -- pbuz1=pbuz2 
    lda at_3
    sta print_sbyte_at.at
    lda at_3+1
    sta print_sbyte_at.at+1
  //SEG62 [29] call print_sbyte_at 
  //SEG63 [35] phi from main::@10 to print_sbyte_at [phi:main::@10->print_sbyte_at]
  print_sbyte_at_from_b10:
  //SEG64 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#2 [phi:main::@10->print_sbyte_at#0] -- register_copy 
  //SEG65 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#3 [phi:main::@10->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
    jmp b11
  //SEG66 main::@11
  b11:
  //SEG67 [30] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1 
    inc j
  //SEG68 [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda j
    cmp #9
    bne b3_from_b11
    jmp b5
  //SEG69 main::@5
  b5:
  //SEG70 [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG71 [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #9
    bne b2_from_b5
    jmp breturn
  //SEG72 main::@return
  breturn:
  //SEG73 [34] return 
    rts
}
//SEG74 print_sbyte_at
// Print a signed byte as hex at a specific screen position
// print_sbyte_at(signed byte zeropage($a) b, byte* zeropage(8) at)
print_sbyte_at: {
    .label b = $a
    .label at = 8
  //SEG75 [36] if((signed byte) print_sbyte_at::b#4<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte_at::@1 -- vbsz1_lt_0_then_la1 
    lda b
    bmi b1
    jmp b3
  //SEG76 print_sbyte_at::@3
  b3:
  //SEG77 [37] (byte*) print_char_at::at#1 ← (byte*) print_sbyte_at::at#3
  //SEG78 [38] call print_char_at 
  //SEG79 [46] phi from print_sbyte_at::@3 to print_char_at [phi:print_sbyte_at::@3->print_char_at]
  print_char_at_from_b3:
  //SEG80 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#1 [phi:print_sbyte_at::@3->print_char_at#0] -- register_copy 
  //SEG81 [46] phi (byte) print_char_at::ch#4 = (byte) ' ' [phi:print_sbyte_at::@3->print_char_at#1] -- vbuz1=vbuc1 
    lda #' '
    sta print_char_at.ch
    jsr print_char_at
  //SEG82 [39] phi from print_sbyte_at::@3 print_sbyte_at::@5 to print_sbyte_at::@2 [phi:print_sbyte_at::@3/print_sbyte_at::@5->print_sbyte_at::@2]
  b2_from_b3:
  b2_from_b5:
  //SEG83 [39] phi (signed byte) print_sbyte_at::b#6 = (signed byte) print_sbyte_at::b#4 [phi:print_sbyte_at::@3/print_sbyte_at::@5->print_sbyte_at::@2#0] -- register_copy 
    jmp b2
  //SEG84 print_sbyte_at::@2
  b2:
  //SEG85 [40] (byte*) print_byte_at::at#0 ← (byte*) print_sbyte_at::at#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuz1=pbuz1_plus_1 
    inc print_byte_at.at
    bne !+
    inc print_byte_at.at+1
  !:
  //SEG86 [41] call print_byte_at 
    jsr print_byte_at
    jmp breturn
  //SEG87 print_sbyte_at::@return
  breturn:
  //SEG88 [42] return 
    rts
  //SEG89 print_sbyte_at::@1
  b1:
  //SEG90 [43] (byte*) print_char_at::at#0 ← (byte*) print_sbyte_at::at#3
  //SEG91 [44] call print_char_at 
  //SEG92 [46] phi from print_sbyte_at::@1 to print_char_at [phi:print_sbyte_at::@1->print_char_at]
  print_char_at_from_b1:
  //SEG93 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#0 [phi:print_sbyte_at::@1->print_char_at#0] -- register_copy 
  //SEG94 [46] phi (byte) print_char_at::ch#4 = (byte) '-' [phi:print_sbyte_at::@1->print_char_at#1] -- vbuz1=vbuc1 
    lda #'-'
    sta print_char_at.ch
    jsr print_char_at
    jmp b5
  //SEG95 print_sbyte_at::@5
  b5:
  //SEG96 [45] (signed byte) print_sbyte_at::b#0 ← - (signed byte) print_sbyte_at::b#4 -- vbsz1=_neg_vbsz1 
    lda b
    eor #$ff
    clc
    adc #1
    sta b
    jmp b2_from_b5
}
//SEG97 print_char_at
// Print a single char
// print_char_at(byte zeropage($b) ch, byte* zeropage(8) at)
print_char_at: {
    .label at = 8
    .label ch = $b
  //SEG98 [47] *((byte*) print_char_at::at#4) ← (byte) print_char_at::ch#4 -- _deref_pbuz1=vbuz2 
    lda ch
    ldy #0
    sta (at),y
    jmp breturn
  //SEG99 print_char_at::@return
  breturn:
  //SEG100 [48] return 
    rts
}
//SEG101 print_byte_at
// Print a byte as HEX at a specific position
// print_byte_at(byte* zeropage(8) at)
print_byte_at: {
    .label at = 8
  //SEG102 [49] (byte~) print_byte_at::$0 ← (byte)(signed byte) print_sbyte_at::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuz1_ror_4 
    lda print_sbyte_at.b
    lsr
    lsr
    lsr
    lsr
  //SEG103 [50] (byte) print_char_at::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
    sta print_char_at.ch
  //SEG104 [51] (byte*) print_char_at::at#2 ← (byte*) print_byte_at::at#0
  //SEG105 [52] call print_char_at 
  //SEG106 [46] phi from print_byte_at to print_char_at [phi:print_byte_at->print_char_at]
  print_char_at_from_print_byte_at:
  //SEG107 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#2 [phi:print_byte_at->print_char_at#0] -- register_copy 
  //SEG108 [46] phi (byte) print_char_at::ch#4 = (byte) print_char_at::ch#2 [phi:print_byte_at->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp b1
  //SEG109 print_byte_at::@1
  b1:
  //SEG110 [53] (byte~) print_byte_at::$2 ← (byte)(signed byte) print_sbyte_at::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15 -- vbuyy=vbuz1_band_vbuc1 
    lda #$f
    and print_sbyte_at.b
    tay
  //SEG111 [54] (byte*) print_char_at::at#3 ← (byte*) print_byte_at::at#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuz1=pbuz1_plus_1 
    inc print_char_at.at
    bne !+
    inc print_char_at.at+1
  !:
  //SEG112 [55] (byte) print_char_at::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2) -- vbuz1=pbuc1_derefidx_vbuyy 
    lda print_hextab,y
    sta print_char_at.ch
  //SEG113 [56] call print_char_at 
  //SEG114 [46] phi from print_byte_at::@1 to print_char_at [phi:print_byte_at::@1->print_char_at]
  print_char_at_from_b1:
  //SEG115 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#3 [phi:print_byte_at::@1->print_char_at#0] -- register_copy 
  //SEG116 [46] phi (byte) print_char_at::ch#4 = (byte) print_char_at::ch#3 [phi:print_byte_at::@1->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp breturn
  //SEG117 print_byte_at::@return
  breturn:
  //SEG118 [57] return 
    rts
}
//SEG119 fmul8
// fmul8(signed byte register(A) a, signed byte register(Y) b)
fmul8: {
  //SEG120 [58] *((const signed byte*) ap#0) ← (signed byte) fmul8::a#0 -- _deref_pbsc1=vbsaa 
    sta ap
  //SEG121 [59] *((const signed byte*) bp#0) ← (signed byte) fmul8::b#0 -- _deref_pbsc1=vbsyy 
    tya
    sta bp
  //SEG122 asm { ldaap staA1+1 eor#$ff staA2+1 ldxbp sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacp  }
    lda ap
    sta A1+1
    eor #$ff
    sta A2+1
    ldx bp
    sec
  A1:
    lda mulf_sqr1,x
  A2:
    sbc mulf_sqr2,x
    sta cp
  //SEG123 [61] (signed byte) fmul8::return#1 ← *((const signed byte*) cp#0) -- vbsaa=_deref_pbsc1 
    lda cp
    jmp breturn
  //SEG124 fmul8::@return
  breturn:
  //SEG125 [62] return 
    rts
}
//SEG126 init_screen
init_screen: {
    .const WHITE = 1
    .label COLS = 2
  //SEG127 [64] call print_cls 
  //SEG128 [78] phi from init_screen to print_cls [phi:init_screen->print_cls]
  print_cls_from_init_screen:
    jsr print_cls
  //SEG129 [65] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
  b1_from_init_screen:
  //SEG130 [65] phi (byte) init_screen::l#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b1
  //SEG131 [65] phi from init_screen::@1 to init_screen::@1 [phi:init_screen::@1->init_screen::@1]
  b1_from_b1:
  //SEG132 [65] phi (byte) init_screen::l#2 = (byte) init_screen::l#1 [phi:init_screen::@1->init_screen::@1#0] -- register_copy 
    jmp b1
  //SEG133 init_screen::@1
  b1:
  //SEG134 [66] *(((byte*))(word/dword/signed dword) 55296 + (byte) init_screen::l#2) ← (const byte) init_screen::WHITE#0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #WHITE
    sta $d800,x
  //SEG135 [67] (byte) init_screen::l#1 ← ++ (byte) init_screen::l#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG136 [68] if((byte) init_screen::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto init_screen::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne b1_from_b1
  //SEG137 [69] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2]
  b2_from_b1:
  //SEG138 [69] phi (byte) init_screen::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init_screen::@1->init_screen::@2#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG139 [69] phi (byte*) init_screen::COLS#3 = ((byte*))(word/dword/signed dword) 55296 [phi:init_screen::@1->init_screen::@2#1] -- pbuz1=pbuc1 
    lda #<$d800
    sta COLS
    lda #>$d800
    sta COLS+1
    jmp b2
  //SEG140 [69] phi from init_screen::@2 to init_screen::@2 [phi:init_screen::@2->init_screen::@2]
  b2_from_b2:
  //SEG141 [69] phi (byte) init_screen::m#2 = (byte) init_screen::m#1 [phi:init_screen::@2->init_screen::@2#0] -- register_copy 
  //SEG142 [69] phi (byte*) init_screen::COLS#3 = (byte*) init_screen::COLS#1 [phi:init_screen::@2->init_screen::@2#1] -- register_copy 
    jmp b2
  //SEG143 init_screen::@2
  b2:
  //SEG144 [70] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #0
    sta (COLS),y
  //SEG145 [71] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #1
    sta (COLS),y
  //SEG146 [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #2
    sta (COLS),y
  //SEG147 [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #3
    sta (COLS),y
  //SEG148 [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda COLS
    clc
    adc #$28
    sta COLS
    bcc !+
    inc COLS+1
  !:
  //SEG149 [75] (byte) init_screen::m#1 ← ++ (byte) init_screen::m#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG150 [76] if((byte) init_screen::m#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto init_screen::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$19
    bne b2_from_b2
    jmp breturn
  //SEG151 init_screen::@return
  breturn:
  //SEG152 [77] return 
    rts
}
//SEG153 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = 2
  //SEG154 [79] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG155 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta sc
    lda #>print_line_cursor
    sta sc+1
    jmp b1
  //SEG156 [79] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG157 [79] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG158 print_cls::@1
  b1:
  //SEG159 [80] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG160 [81] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG161 [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>print_line_cursor+$3e8
    bne b1_from_b1
    lda sc
    cmp #<print_line_cursor+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG162 print_cls::@return
  breturn:
  //SEG163 [83] return 
    rts
}
  print_hextab: .text "0123456789abcdef"
  vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f
.pc = mulf_sqr1 "mulf_sqr1"
  .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((i*i)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
    	.if(i>351) { .byte round(((512-i)*(512-i))/256) }
    }

.pc = mulf_sqr2 "mulf_sqr2"
  .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
    	.if(i>351) { .byte round(((i-511)*(i-511))/256) }  
    }


ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b22
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b8
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp b5
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b5
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda cp
Removing instruction lda #WHITE
Removing instruction lda #WHITE
Removing instruction lda #WHITE
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b8 with b1
Replacing label b3_from_b11 with b3
Replacing label b2_from_b5 with b2
Replacing label b2_from_b5 with b2
Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction b22:
Removing instruction main_from_b22:
Removing instruction bend_from_b22:
Removing instruction b1_from_b8:
Removing instruction b2_from_b5:
Removing instruction b3_from_b11:
Removing instruction print_char_at_from_b3:
Removing instruction b2_from_b3:
Removing instruction b2_from_b5:
Removing instruction print_char_at_from_b1:
Removing instruction b1_from_b1:
Removing instruction b2_from_b2:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction init_screen_from_main:
Removing instruction b1_from_main:
Removing instruction print_sbyte_at_from_b1:
Removing instruction b8:
Removing instruction b2_from_b8:
Removing instruction print_sbyte_at_from_b2:
Removing instruction b3_from_b2:
Removing instruction b10:
Removing instruction print_sbyte_at_from_b10:
Removing instruction b11:
Removing instruction b5:
Removing instruction breturn:
Removing instruction b3:
Removing instruction breturn:
Removing instruction b5:
Removing instruction breturn:
Removing instruction print_char_at_from_print_byte_at:
Removing instruction b1:
Removing instruction print_char_at_from_b1:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction print_cls_from_init_screen:
Removing instruction b1_from_init_screen:
Removing instruction b2_from_b1:
Removing instruction breturn:
Removing instruction b1_from_print_cls:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @22
(label) @begin
(label) @end
(signed byte*) ap
(const signed byte*) ap#0 ap = ((signed byte*))(byte/word/signed word/dword/signed dword) 253
(signed byte*) bp
(const signed byte*) bp#0 bp = ((signed byte*))(byte/word/signed word/dword/signed dword) 254
(signed byte*) cp
(const signed byte*) cp#0 cp = ((signed byte*))(byte/word/signed word/dword/signed dword) 255
(signed byte()) fmul8((signed byte) fmul8::a , (signed byte) fmul8::b)
(label) fmul8::@return
(signed byte) fmul8::a
(signed byte) fmul8::a#0 reg byte a 51.5
(signed byte) fmul8::b
(signed byte) fmul8::b#0 reg byte y 51.5
(signed byte) fmul8::return
(signed byte) fmul8::return#0 reg byte a 202.0
(signed byte) fmul8::return#1 reg byte a 34.33333333333333
(void()) init_screen()
(label) init_screen::@1
(label) init_screen::@2
(label) init_screen::@return
(byte*) init_screen::COLS
(byte*) init_screen::COLS#1 COLS zp ZP_WORD:2 7.333333333333333
(byte*) init_screen::COLS#3 COLS zp ZP_WORD:2 13.2
(byte) init_screen::WHITE
(const byte) init_screen::WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) init_screen::l
(byte) init_screen::l#1 reg byte x 16.5
(byte) init_screen::l#2 reg byte x 16.5
(byte) init_screen::m
(byte) init_screen::m#1 reg byte x 16.5
(byte) init_screen::m#2 reg byte x 3.6666666666666665
(void()) main()
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@2
(label) main::@3
(label) main::@5
(label) main::@8
(label) main::@return
(byte*) main::at
(byte*) main::at#1 at zp ZP_WORD:2 7.333333333333333
(byte*~) main::at#12 at#12 zp ZP_WORD:5 22.0
(byte*) main::at#2 at zp ZP_WORD:2 2.3157894736842106
(byte*) main::at#3 at#3 zp ZP_WORD:5 27.545454545454547
(byte*) main::at#4 at zp ZP_WORD:2 8.25
(byte*) main::at#6 at#6 zp ZP_WORD:5 213.0
(byte*) main::at_line
(byte*) main::at_line#2 at_line zp ZP_WORD:2 22.0
(byte) main::i
(byte) main::i#1 i zp ZP_BYTE:4 16.5
(byte) main::i#2 i zp ZP_BYTE:4 7.444444444444445
(byte) main::j
(byte) main::j#1 j zp ZP_BYTE:7 151.5
(byte) main::j#2 j zp ZP_BYTE:7 30.299999999999997
(byte) main::k
(byte) main::k#1 reg byte x 16.5
(byte) main::k#2 reg byte x 6.6000000000000005
(signed byte) main::r
(signed byte) main::r#0 reg byte a 202.0
(byte*) mulf_sqr1
(const byte*) mulf_sqr1#0 mulf_sqr1 = ((byte*))(word/signed word/dword/signed dword) 8192
(byte*) mulf_sqr2
(const byte*) mulf_sqr2#0 mulf_sqr2 = ((byte*))(word/signed word/dword/signed dword) 8704
(void()) print_byte_at((byte) print_byte_at::b , (byte*) print_byte_at::at)
(byte~) print_byte_at::$0 reg byte a 4.0
(byte~) print_byte_at::$2 reg byte y 2.0
(label) print_byte_at::@1
(label) print_byte_at::@return
(byte*) print_byte_at::at
(byte*) print_byte_at::at#0 at zp ZP_WORD:8 1.0
(byte) print_byte_at::b
(void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at)
(label) print_char_at::@return
(byte*) print_char_at::at
(byte*) print_char_at::at#0 at zp ZP_WORD:8 4.0
(byte*) print_char_at::at#1 at zp ZP_WORD:8 4.0
(byte*) print_char_at::at#2 at zp ZP_WORD:8 4.0
(byte*) print_char_at::at#3 at zp ZP_WORD:8 2.0
(byte*) print_char_at::at#4 at zp ZP_WORD:8 10.0
(byte) print_char_at::ch
(byte) print_char_at::ch#2 ch zp ZP_BYTE:11 2.0
(byte) print_char_at::ch#3 ch zp ZP_BYTE:11 4.0
(byte) print_char_at::ch#4 ch zp ZP_BYTE:11 6.0
(byte*) print_char_cursor
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
(byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor
(const byte*) print_line_cursor#0 print_line_cursor = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(label) print_sbyte_at::@1
(label) print_sbyte_at::@2
(label) print_sbyte_at::@3
(label) print_sbyte_at::@5
(label) print_sbyte_at::@return
(byte*) print_sbyte_at::at
(byte*) print_sbyte_at::at#0 at zp ZP_WORD:8 22.0
(byte*) print_sbyte_at::at#1 at zp ZP_WORD:8 22.0
(byte*) print_sbyte_at::at#2 at zp ZP_WORD:8 202.0
(byte*) print_sbyte_at::at#3 at zp ZP_WORD:8 16.125
(signed byte) print_sbyte_at::b
(signed byte) print_sbyte_at::b#0 b zp ZP_BYTE:10 4.0
(signed byte) print_sbyte_at::b#1 b zp ZP_BYTE:10 11.0
(signed byte) print_sbyte_at::b#2 b zp ZP_BYTE:10 11.0
(signed byte) print_sbyte_at::b#3 b zp ZP_BYTE:10 101.0
(signed byte) print_sbyte_at::b#4 b zp ZP_BYTE:10 21.499999999999993
(signed byte) print_sbyte_at::b#6 b zp ZP_BYTE:10 0.6666666666666666
(byte*) print_screen
(signed byte[]) vals
(const signed byte[]) vals#0 vals = { -(byte/signed byte/word/signed word/dword/signed dword) 95, -(byte/signed byte/word/signed word/dword/signed dword) 64, -(byte/signed byte/word/signed word/dword/signed dword) 32, -(byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/signed byte/word/signed word/dword/signed dword) 95 }

reg byte x [ main::k#2 main::k#1 ]
zp ZP_WORD:2 [ main::at#4 main::at#1 main::at_line#2 main::at#2 init_screen::COLS#3 init_screen::COLS#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_BYTE:4 [ main::i#2 main::i#1 ]
zp ZP_WORD:5 [ main::at#6 main::at#3 main::at#12 ]
zp ZP_BYTE:7 [ main::j#2 main::j#1 ]
zp ZP_WORD:8 [ print_sbyte_at::at#3 print_sbyte_at::at#0 print_sbyte_at::at#2 print_sbyte_at::at#1 print_char_at::at#4 print_char_at::at#2 print_char_at::at#3 print_char_at::at#0 print_char_at::at#1 print_byte_at::at#0 ]
zp ZP_BYTE:10 [ print_sbyte_at::b#6 print_sbyte_at::b#0 print_sbyte_at::b#4 print_sbyte_at::b#1 print_sbyte_at::b#3 print_sbyte_at::b#2 ]
zp ZP_BYTE:11 [ print_char_at::ch#4 print_char_at::ch#2 print_char_at::ch#3 ]
reg byte x [ init_screen::l#2 init_screen::l#1 ]
reg byte x [ init_screen::m#2 init_screen::m#1 ]
reg byte a [ fmul8::a#0 ]
reg byte y [ fmul8::b#0 ]
reg byte a [ fmul8::return#0 ]
reg byte a [ main::r#0 ]
reg byte a [ print_byte_at::$0 ]
reg byte y [ print_byte_at::$2 ]
reg byte a [ fmul8::return#1 ]


FINAL ASSEMBLER
Score: 10536

//SEG0 File Comments
// Seriously fast multiply 8-bit version (8bit*8bit=8bit)
// Multiplies two signed 8-bit numbers and results in an 8-bit number
// C=A*B, A in [-64;64], B in [-96;95], C in [-96;95] - 64 acts a 1 (X*64=X)
// Uses the formula a*b = (a+b)^2/4 - (a-b)^2/4
// See the following for information about the method
// - http://codebase64.org/doku.php?id=base:seriously_fast_multiplication 
// - http://codebase64.org/doku.php?id=magazines:chacking16
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label print_line_cursor = $400
  // Pointers to a, b and c=a*b
  .label ap = $fd
  .label bp = $fe
  .label cp = $ff
  // mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
  // f(x) = >(( x * x ))
  .label mulf_sqr1 = $2000
  // g(x) =  >((( 1 - x ) * ( 1 - x )))
  .label mulf_sqr2 = $2200
//SEG3 @begin
//SEG4 @22
//SEG5 kickasm(location (const byte*) mulf_sqr1#0) {{ .for(var i=0;i<$200;i++) {     	.if(i<=159) { .byte round((i*i)/256) }     	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }     	.if(i>351) { .byte round(((512-i)*(512-i))/256) }     }  }}
//SEG6 kickasm(location (const byte*) mulf_sqr2#0) {{ .for(var i=0;i<$200;i++) {     	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }     	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }     	.if(i>351) { .byte round(((i-511)*(i-511))/256) }       }  }}
//SEG7 [3] call main 
//SEG8 [5] phi from @22 to main [phi:@22->main]
//SEG9 [4] phi from @22 to @end [phi:@22->@end]
//SEG10 @end
//SEG11 main
main: {
    .label at = 2
    .label at_3 = 5
    .label j = 7
    .label i = 4
    .label at_line = 2
    .label at_6 = 5
    .label at_12 = 5
  //SEG12 [6] call init_screen 
  //SEG13 [63] phi from main to init_screen [phi:main->init_screen]
    jsr init_screen
  //SEG14 [7] phi from main to main::@1 [phi:main->main::@1]
  //SEG15 [7] phi (byte*) main::at#4 = ((byte*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 4 [phi:main->main::@1#0] -- pbuz1=pbuc1 
    lda #<$400+4
    sta at
    lda #>$400+4
    sta at+1
  //SEG16 [7] phi (byte) main::k#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 
    ldx #0
  //SEG17 [7] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
  //SEG18 [7] phi (byte*) main::at#4 = (byte*) main::at#1 [phi:main::@8->main::@1#0] -- register_copy 
  //SEG19 [7] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@8->main::@1#1] -- register_copy 
  //SEG20 main::@1
  b1:
  //SEG21 [8] (signed byte) print_sbyte_at::b#1 ← *((const signed byte[]) vals#0 + (byte) main::k#2) -- vbsz1=pbsc1_derefidx_vbuxx 
    lda vals,x
    sta print_sbyte_at.b
  //SEG22 [9] (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4 -- pbuz1=pbuz2 
    lda at
    sta print_sbyte_at.at
    lda at+1
    sta print_sbyte_at.at+1
  //SEG23 [10] call print_sbyte_at 
  //SEG24 [35] phi from main::@1 to print_sbyte_at [phi:main::@1->print_sbyte_at]
  //SEG25 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#0 [phi:main::@1->print_sbyte_at#0] -- register_copy 
  //SEG26 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#1 [phi:main::@1->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
  //SEG27 main::@8
  //SEG28 [11] (byte*) main::at#1 ← (byte*) main::at#4 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- pbuz1=pbuz1_plus_vbuc1 
    lda at
    clc
    adc #4
    sta at
    bcc !+
    inc at+1
  !:
  //SEG29 [12] (byte) main::k#1 ← ++ (byte) main::k#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG30 [13] if((byte) main::k#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #9
    bne b1
  //SEG31 [14] phi from main::@8 to main::@2 [phi:main::@8->main::@2]
  //SEG32 [14] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@8->main::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta i
  //SEG33 [14] phi (byte*) main::at_line#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@8->main::@2#1] -- pbuz1=pbuc1 
    lda #<$400
    sta at_line
    lda #>$400
    sta at_line+1
  //SEG34 [14] phi from main::@5 to main::@2 [phi:main::@5->main::@2]
  //SEG35 [14] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@5->main::@2#0] -- register_copy 
  //SEG36 [14] phi (byte*) main::at_line#2 = (byte*) main::at#2 [phi:main::@5->main::@2#1] -- register_copy 
  //SEG37 main::@2
  b2:
  //SEG38 [15] (byte*) main::at#2 ← (byte*) main::at_line#2 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda at
    clc
    adc #$28
    sta at
    bcc !+
    inc at+1
  !:
  //SEG39 [16] (signed byte) print_sbyte_at::b#2 ← *((const signed byte[]) vals#0 + (byte) main::i#2) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy i
    lda vals,y
    sta print_sbyte_at.b
  //SEG40 [17] (byte*) print_sbyte_at::at#1 ← (byte*) main::at#2 -- pbuz1=pbuz2 
    lda at
    sta print_sbyte_at.at
    lda at+1
    sta print_sbyte_at.at+1
  //SEG41 [18] call print_sbyte_at 
  //SEG42 [35] phi from main::@2 to print_sbyte_at [phi:main::@2->print_sbyte_at]
  //SEG43 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#1 [phi:main::@2->print_sbyte_at#0] -- register_copy 
  //SEG44 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#2 [phi:main::@2->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
  //SEG45 [19] (byte*~) main::at#12 ← (byte*) main::at#2 -- pbuz1=pbuz2 
    lda at
    sta at_12
    lda at+1
    sta at_12+1
  //SEG46 [20] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  //SEG47 [20] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta j
  //SEG48 [20] phi (byte*) main::at#6 = (byte*~) main::at#12 [phi:main::@2->main::@3#1] -- register_copy 
  //SEG49 [20] phi from main::@11 to main::@3 [phi:main::@11->main::@3]
  //SEG50 [20] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@11->main::@3#0] -- register_copy 
  //SEG51 [20] phi (byte*) main::at#6 = (byte*) main::at#3 [phi:main::@11->main::@3#1] -- register_copy 
  //SEG52 main::@3
  b3:
  //SEG53 [21] (byte*) main::at#3 ← (byte*) main::at#6 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- pbuz1=pbuz1_plus_vbuc1 
    lda at_3
    clc
    adc #4
    sta at_3
    bcc !+
    inc at_3+1
  !:
  //SEG54 [22] (signed byte) fmul8::a#0 ← *((const signed byte[]) vals#0 + (byte) main::i#2) -- vbsaa=pbsc1_derefidx_vbuz1 
    ldy i
    lda vals,y
  //SEG55 [23] (signed byte) fmul8::b#0 ← *((const signed byte[]) vals#0 + (byte) main::j#2) -- vbsyy=pbsc1_derefidx_vbuz1 
    ldx j
    ldy vals,x
  //SEG56 [24] call fmul8 
    jsr fmul8
  //SEG57 [25] (signed byte) fmul8::return#0 ← (signed byte) fmul8::return#1
  //SEG58 main::@10
  //SEG59 [26] (signed byte) main::r#0 ← (signed byte) fmul8::return#0
  //SEG60 [27] (signed byte) print_sbyte_at::b#3 ← (signed byte) main::r#0 -- vbsz1=vbsaa 
    sta print_sbyte_at.b
  //SEG61 [28] (byte*) print_sbyte_at::at#2 ← (byte*) main::at#3 -- pbuz1=pbuz2 
    lda at_3
    sta print_sbyte_at.at
    lda at_3+1
    sta print_sbyte_at.at+1
  //SEG62 [29] call print_sbyte_at 
  //SEG63 [35] phi from main::@10 to print_sbyte_at [phi:main::@10->print_sbyte_at]
  //SEG64 [35] phi (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#2 [phi:main::@10->print_sbyte_at#0] -- register_copy 
  //SEG65 [35] phi (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#3 [phi:main::@10->print_sbyte_at#1] -- register_copy 
    jsr print_sbyte_at
  //SEG66 main::@11
  //SEG67 [30] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1 
    inc j
  //SEG68 [31] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda j
    cmp #9
    bne b3
  //SEG69 main::@5
  //SEG70 [32] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG71 [33] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #9
    bne b2
  //SEG72 main::@return
  //SEG73 [34] return 
    rts
}
//SEG74 print_sbyte_at
// Print a signed byte as hex at a specific screen position
// print_sbyte_at(signed byte zeropage($a) b, byte* zeropage(8) at)
print_sbyte_at: {
    .label b = $a
    .label at = 8
  //SEG75 [36] if((signed byte) print_sbyte_at::b#4<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte_at::@1 -- vbsz1_lt_0_then_la1 
    lda b
    bmi b1
  //SEG76 print_sbyte_at::@3
  //SEG77 [37] (byte*) print_char_at::at#1 ← (byte*) print_sbyte_at::at#3
  //SEG78 [38] call print_char_at 
  //SEG79 [46] phi from print_sbyte_at::@3 to print_char_at [phi:print_sbyte_at::@3->print_char_at]
  //SEG80 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#1 [phi:print_sbyte_at::@3->print_char_at#0] -- register_copy 
  //SEG81 [46] phi (byte) print_char_at::ch#4 = (byte) ' ' [phi:print_sbyte_at::@3->print_char_at#1] -- vbuz1=vbuc1 
    lda #' '
    sta print_char_at.ch
    jsr print_char_at
  //SEG82 [39] phi from print_sbyte_at::@3 print_sbyte_at::@5 to print_sbyte_at::@2 [phi:print_sbyte_at::@3/print_sbyte_at::@5->print_sbyte_at::@2]
  //SEG83 [39] phi (signed byte) print_sbyte_at::b#6 = (signed byte) print_sbyte_at::b#4 [phi:print_sbyte_at::@3/print_sbyte_at::@5->print_sbyte_at::@2#0] -- register_copy 
  //SEG84 print_sbyte_at::@2
  b2:
  //SEG85 [40] (byte*) print_byte_at::at#0 ← (byte*) print_sbyte_at::at#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuz1=pbuz1_plus_1 
    inc print_byte_at.at
    bne !+
    inc print_byte_at.at+1
  !:
  //SEG86 [41] call print_byte_at 
    jsr print_byte_at
  //SEG87 print_sbyte_at::@return
  //SEG88 [42] return 
    rts
  //SEG89 print_sbyte_at::@1
  b1:
  //SEG90 [43] (byte*) print_char_at::at#0 ← (byte*) print_sbyte_at::at#3
  //SEG91 [44] call print_char_at 
  //SEG92 [46] phi from print_sbyte_at::@1 to print_char_at [phi:print_sbyte_at::@1->print_char_at]
  //SEG93 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#0 [phi:print_sbyte_at::@1->print_char_at#0] -- register_copy 
  //SEG94 [46] phi (byte) print_char_at::ch#4 = (byte) '-' [phi:print_sbyte_at::@1->print_char_at#1] -- vbuz1=vbuc1 
    lda #'-'
    sta print_char_at.ch
    jsr print_char_at
  //SEG95 print_sbyte_at::@5
  //SEG96 [45] (signed byte) print_sbyte_at::b#0 ← - (signed byte) print_sbyte_at::b#4 -- vbsz1=_neg_vbsz1 
    lda b
    eor #$ff
    clc
    adc #1
    sta b
    jmp b2
}
//SEG97 print_char_at
// Print a single char
// print_char_at(byte zeropage($b) ch, byte* zeropage(8) at)
print_char_at: {
    .label at = 8
    .label ch = $b
  //SEG98 [47] *((byte*) print_char_at::at#4) ← (byte) print_char_at::ch#4 -- _deref_pbuz1=vbuz2 
    lda ch
    ldy #0
    sta (at),y
  //SEG99 print_char_at::@return
  //SEG100 [48] return 
    rts
}
//SEG101 print_byte_at
// Print a byte as HEX at a specific position
// print_byte_at(byte* zeropage(8) at)
print_byte_at: {
    .label at = 8
  //SEG102 [49] (byte~) print_byte_at::$0 ← (byte)(signed byte) print_sbyte_at::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuz1_ror_4 
    lda print_sbyte_at.b
    lsr
    lsr
    lsr
    lsr
  //SEG103 [50] (byte) print_char_at::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
    sta print_char_at.ch
  //SEG104 [51] (byte*) print_char_at::at#2 ← (byte*) print_byte_at::at#0
  //SEG105 [52] call print_char_at 
  //SEG106 [46] phi from print_byte_at to print_char_at [phi:print_byte_at->print_char_at]
  //SEG107 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#2 [phi:print_byte_at->print_char_at#0] -- register_copy 
  //SEG108 [46] phi (byte) print_char_at::ch#4 = (byte) print_char_at::ch#2 [phi:print_byte_at->print_char_at#1] -- register_copy 
    jsr print_char_at
  //SEG109 print_byte_at::@1
  //SEG110 [53] (byte~) print_byte_at::$2 ← (byte)(signed byte) print_sbyte_at::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15 -- vbuyy=vbuz1_band_vbuc1 
    lda #$f
    and print_sbyte_at.b
    tay
  //SEG111 [54] (byte*) print_char_at::at#3 ← (byte*) print_byte_at::at#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuz1=pbuz1_plus_1 
    inc print_char_at.at
    bne !+
    inc print_char_at.at+1
  !:
  //SEG112 [55] (byte) print_char_at::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2) -- vbuz1=pbuc1_derefidx_vbuyy 
    lda print_hextab,y
    sta print_char_at.ch
  //SEG113 [56] call print_char_at 
  //SEG114 [46] phi from print_byte_at::@1 to print_char_at [phi:print_byte_at::@1->print_char_at]
  //SEG115 [46] phi (byte*) print_char_at::at#4 = (byte*) print_char_at::at#3 [phi:print_byte_at::@1->print_char_at#0] -- register_copy 
  //SEG116 [46] phi (byte) print_char_at::ch#4 = (byte) print_char_at::ch#3 [phi:print_byte_at::@1->print_char_at#1] -- register_copy 
    jsr print_char_at
  //SEG117 print_byte_at::@return
  //SEG118 [57] return 
    rts
}
//SEG119 fmul8
// fmul8(signed byte register(A) a, signed byte register(Y) b)
fmul8: {
  //SEG120 [58] *((const signed byte*) ap#0) ← (signed byte) fmul8::a#0 -- _deref_pbsc1=vbsaa 
    sta ap
  //SEG121 [59] *((const signed byte*) bp#0) ← (signed byte) fmul8::b#0 -- _deref_pbsc1=vbsyy 
    tya
    sta bp
  //SEG122 asm { ldaap staA1+1 eor#$ff staA2+1 ldxbp sec A1: ldamulf_sqr1,x A2: sbcmulf_sqr2,x stacp  }
    lda ap
    sta A1+1
    eor #$ff
    sta A2+1
    ldx bp
    sec
  A1:
    lda mulf_sqr1,x
  A2:
    sbc mulf_sqr2,x
    sta cp
  //SEG123 [61] (signed byte) fmul8::return#1 ← *((const signed byte*) cp#0) -- vbsaa=_deref_pbsc1 
  //SEG124 fmul8::@return
  //SEG125 [62] return 
    rts
}
//SEG126 init_screen
init_screen: {
    .const WHITE = 1
    .label COLS = 2
  //SEG127 [64] call print_cls 
  //SEG128 [78] phi from init_screen to print_cls [phi:init_screen->print_cls]
    jsr print_cls
  //SEG129 [65] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1]
  //SEG130 [65] phi (byte) init_screen::l#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG131 [65] phi from init_screen::@1 to init_screen::@1 [phi:init_screen::@1->init_screen::@1]
  //SEG132 [65] phi (byte) init_screen::l#2 = (byte) init_screen::l#1 [phi:init_screen::@1->init_screen::@1#0] -- register_copy 
  //SEG133 init_screen::@1
  b1:
  //SEG134 [66] *(((byte*))(word/dword/signed dword) 55296 + (byte) init_screen::l#2) ← (const byte) init_screen::WHITE#0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #WHITE
    sta $d800,x
  //SEG135 [67] (byte) init_screen::l#1 ← ++ (byte) init_screen::l#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG136 [68] if((byte) init_screen::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto init_screen::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne b1
  //SEG137 [69] phi from init_screen::@1 to init_screen::@2 [phi:init_screen::@1->init_screen::@2]
  //SEG138 [69] phi (byte) init_screen::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init_screen::@1->init_screen::@2#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG139 [69] phi (byte*) init_screen::COLS#3 = ((byte*))(word/dword/signed dword) 55296 [phi:init_screen::@1->init_screen::@2#1] -- pbuz1=pbuc1 
    lda #<$d800
    sta COLS
    lda #>$d800
    sta COLS+1
  //SEG140 [69] phi from init_screen::@2 to init_screen::@2 [phi:init_screen::@2->init_screen::@2]
  //SEG141 [69] phi (byte) init_screen::m#2 = (byte) init_screen::m#1 [phi:init_screen::@2->init_screen::@2#0] -- register_copy 
  //SEG142 [69] phi (byte*) init_screen::COLS#3 = (byte*) init_screen::COLS#1 [phi:init_screen::@2->init_screen::@2#1] -- register_copy 
  //SEG143 init_screen::@2
  b2:
  //SEG144 [70] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    lda #WHITE
    ldy #0
    sta (COLS),y
  //SEG145 [71] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #1
    sta (COLS),y
  //SEG146 [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #2
    sta (COLS),y
  //SEG147 [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0 -- pbuz1_derefidx_vbuc1=vbuc2 
    ldy #3
    sta (COLS),y
  //SEG148 [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda COLS
    clc
    adc #$28
    sta COLS
    bcc !+
    inc COLS+1
  !:
  //SEG149 [75] (byte) init_screen::m#1 ← ++ (byte) init_screen::m#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG150 [76] if((byte) init_screen::m#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto init_screen::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$19
    bne b2
  //SEG151 init_screen::@return
  //SEG152 [77] return 
    rts
}
//SEG153 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = 2
  //SEG154 [79] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  //SEG155 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta sc
    lda #>print_line_cursor
    sta sc+1
  //SEG156 [79] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  //SEG157 [79] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
  //SEG158 print_cls::@1
  b1:
  //SEG159 [80] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG160 [81] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG161 [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>print_line_cursor+$3e8
    bne b1
    lda sc
    cmp #<print_line_cursor+$3e8
    bne b1
  //SEG162 print_cls::@return
  //SEG163 [83] return 
    rts
}
  print_hextab: .text "0123456789abcdef"
  vals: .byte -$5f, -$40, -$20, -$10, 0, $10, $20, $40, $5f
.pc = mulf_sqr1 "mulf_sqr1"
  .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((i*i)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
    	.if(i>351) { .byte round(((512-i)*(512-i))/256) }
    }

.pc = mulf_sqr2 "mulf_sqr2"
  .for(var i=0;i<$200;i++) {
    	.if(i<=159) { .byte round((-i-1)*(-i-1)/256) }
    	.if(i>159 && i<=351 ) { .byte round(((255-i)*(255-i))/256) }
    	.if(i>351) { .byte round(((i-511)*(i-511))/256) }  
    }


