Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx)
Inlined call call vicSelectGfxBank(SCREEN)
Inlined call main::$1 = call toD018(SCREEN, BITMAP)
Inlined call point_init::$2 = call abs16s(point_init::x_diff)
Inlined call point_init::$3 = call abs16s(point_init::y_diff)
Inlined call call __init
Eliminating unused variable with no statement divr16s::$4
Eliminating unused variable with no statement point_init::$0
Eliminating unused variable with no statement point_init::$1
Eliminating unused variable with no statement point_init::$8

CONTROL FLOW GRAPH SSA

unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
divr16u: scope:[divr16u]  from divr16s::@4
  divr16u::divisor#5 = phi( divr16s::@4/divr16u::divisor#0 )
  divr16u::dividend#4 = phi( divr16s::@4/divr16u::dividend#1 )
  divr16u::rem#8 = phi( divr16s::@4/divr16u::rem#3 )
  divr16u::quotient#0 = 0
  divr16u::i#0 = 0
  to:divr16u::@1
divr16u::@1: scope:[divr16u]  from divr16u divr16u::@3
  divr16u::i#5 = phi( divr16u/divr16u::i#0, divr16u::@3/divr16u::i#1 )
  divr16u::divisor#3 = phi( divr16u/divr16u::divisor#5, divr16u::@3/divr16u::divisor#6 )
  divr16u::quotient#6 = phi( divr16u/divr16u::quotient#0, divr16u::@3/divr16u::quotient#8 )
  divr16u::dividend#2 = phi( divr16u/divr16u::dividend#4, divr16u::@3/divr16u::dividend#5 )
  divr16u::rem#4 = phi( divr16u/divr16u::rem#8, divr16u::@3/divr16u::rem#9 )
  divr16u::$0 = divr16u::rem#4 << 1
  divr16u::rem#0 = divr16u::$0
  divr16u::$1 = byte1  divr16u::dividend#2
  divr16u::$2 = divr16u::$1 & $80
  divr16u::$3 = divr16u::$2 != 0
  divr16u::$4 = ! divr16u::$3
  if(divr16u::$4) goto divr16u::@2
  to:divr16u::@4
divr16u::@2: scope:[divr16u]  from divr16u::@1 divr16u::@4
  divr16u::i#3 = phi( divr16u::@1/divr16u::i#5, divr16u::@4/divr16u::i#6 )
  divr16u::divisor#1 = phi( divr16u::@1/divr16u::divisor#3, divr16u::@4/divr16u::divisor#4 )
  divr16u::rem#5 = phi( divr16u::@1/divr16u::rem#0, divr16u::@4/divr16u::rem#1 )
  divr16u::quotient#3 = phi( divr16u::@1/divr16u::quotient#6, divr16u::@4/divr16u::quotient#7 )
  divr16u::dividend#3 = phi( divr16u::@1/divr16u::dividend#2, divr16u::@4/divr16u::dividend#6 )
  divr16u::$6 = divr16u::dividend#3 << 1
  divr16u::dividend#0 = divr16u::$6
  divr16u::$7 = divr16u::quotient#3 << 1
  divr16u::quotient#1 = divr16u::$7
  divr16u::$8 = divr16u::rem#5 >= divr16u::divisor#1
  divr16u::$9 = ! divr16u::$8
  if(divr16u::$9) goto divr16u::@3
  to:divr16u::@5
divr16u::@4: scope:[divr16u]  from divr16u::@1
  divr16u::i#6 = phi( divr16u::@1/divr16u::i#5 )
  divr16u::divisor#4 = phi( divr16u::@1/divr16u::divisor#3 )
  divr16u::quotient#7 = phi( divr16u::@1/divr16u::quotient#6 )
  divr16u::dividend#6 = phi( divr16u::@1/divr16u::dividend#2 )
  divr16u::rem#6 = phi( divr16u::@1/divr16u::rem#0 )
  divr16u::$5 = divr16u::rem#6 | 1
  divr16u::rem#1 = divr16u::$5
  to:divr16u::@2
divr16u::@3: scope:[divr16u]  from divr16u::@2 divr16u::@5
  divr16u::divisor#6 = phi( divr16u::@2/divr16u::divisor#1, divr16u::@5/divr16u::divisor#2 )
  divr16u::quotient#8 = phi( divr16u::@2/divr16u::quotient#1, divr16u::@5/divr16u::quotient#2 )
  divr16u::dividend#5 = phi( divr16u::@2/divr16u::dividend#0, divr16u::@5/divr16u::dividend#7 )
  divr16u::rem#9 = phi( divr16u::@2/divr16u::rem#5, divr16u::@5/divr16u::rem#2 )
  divr16u::i#2 = phi( divr16u::@2/divr16u::i#3, divr16u::@5/divr16u::i#4 )
  divr16u::i#1 = divr16u::i#2 + rangenext(0,$f)
  divr16u::$11 = divr16u::i#1 != rangelast(0,$f)
  if(divr16u::$11) goto divr16u::@1
  to:divr16u::@6
divr16u::@5: scope:[divr16u]  from divr16u::@2
  divr16u::dividend#7 = phi( divr16u::@2/divr16u::dividend#0 )
  divr16u::i#4 = phi( divr16u::@2/divr16u::i#3 )
  divr16u::divisor#2 = phi( divr16u::@2/divr16u::divisor#1 )
  divr16u::rem#7 = phi( divr16u::@2/divr16u::rem#5 )
  divr16u::quotient#4 = phi( divr16u::@2/divr16u::quotient#1 )
  divr16u::quotient#2 = ++ divr16u::quotient#4
  divr16u::$10 = divr16u::rem#7 - divr16u::divisor#2
  divr16u::rem#2 = divr16u::$10
  to:divr16u::@3
divr16u::@6: scope:[divr16u]  from divr16u::@3
  divr16u::quotient#5 = phi( divr16u::@3/divr16u::quotient#8 )
  divr16u::return#0 = divr16u::quotient#5
  to:divr16u::@return
divr16u::@return: scope:[divr16u]  from divr16u::@6
  divr16u::return#3 = phi( divr16u::@6/divr16u::return#0 )
  divr16u::return#1 = divr16u::return#3
  return 
  to:@return

int divr16s(int dividend , int divisor , int rem)
divr16s: scope:[divr16s]  from point_init::@5
  divr16s::divisor#6 = phi( point_init::@5/divr16s::divisor#0 )
  divr16s::rem#1 = phi( point_init::@5/divr16s::rem#0 )
  divr16s::dividend#1 = phi( point_init::@5/divr16s::dividend#0 )
  divr16s::neg#0 = 0
  divr16s::dividendu#0 = 0
  divr16s::remu#0 = 0
  divr16s::$0 = divr16s::dividend#1 < 0
  divr16s::$1 = divr16s::rem#1 < 0
  divr16s::$2 = divr16s::$0 || divr16s::$1
  if(divr16s::$2) goto divr16s::@1
  to:divr16s::@6
divr16s::@1: scope:[divr16s]  from divr16s
  divr16s::divisor#4 = phi( divr16s/divr16s::divisor#6 )
  divr16s::rem#2 = phi( divr16s/divr16s::rem#1 )
  divr16s::dividend#2 = phi( divr16s/divr16s::dividend#1 )
  divr16s::$6 = - divr16s::dividend#2
  divr16s::dividendu#1 = (unsigned int)divr16s::$6
  divr16s::$7 = - divr16s::rem#2
  divr16s::remu#1 = (unsigned int)divr16s::$7
  divr16s::neg#1 = 1
  to:divr16s::@2
divr16s::@6: scope:[divr16s]  from divr16s
  divr16s::neg#7 = phi( divr16s/divr16s::neg#0 )
  divr16s::divisor#5 = phi( divr16s/divr16s::divisor#6 )
  divr16s::rem#3 = phi( divr16s/divr16s::rem#1 )
  divr16s::dividend#3 = phi( divr16s/divr16s::dividend#1 )
  divr16s::dividendu#2 = (unsigned int)divr16s::dividend#3
  divr16s::remu#2 = (unsigned int)divr16s::rem#3
  to:divr16s::@2
divr16s::@2: scope:[divr16s]  from divr16s::@1 divr16s::@6
  divr16s::remu#6 = phi( divr16s::@1/divr16s::remu#1, divr16s::@6/divr16s::remu#2 )
  divr16s::dividendu#6 = phi( divr16s::@1/divr16s::dividendu#1, divr16s::@6/divr16s::dividendu#2 )
  divr16s::neg#5 = phi( divr16s::@1/divr16s::neg#1, divr16s::@6/divr16s::neg#7 )
  divr16s::divisor#1 = phi( divr16s::@1/divr16s::divisor#4, divr16s::@6/divr16s::divisor#5 )
  divr16s::divisoru#0 = 0
  divr16s::$3 = divr16s::divisor#1 < 0
  if(divr16s::$3) goto divr16s::@3
  to:divr16s::@7
divr16s::@3: scope:[divr16s]  from divr16s::@2
  divr16s::remu#4 = phi( divr16s::@2/divr16s::remu#6 )
  divr16s::dividendu#4 = phi( divr16s::@2/divr16s::dividendu#6 )
  divr16s::neg#3 = phi( divr16s::@2/divr16s::neg#5 )
  divr16s::divisor#2 = phi( divr16s::@2/divr16s::divisor#1 )
  divr16s::$8 = - divr16s::divisor#2
  divr16s::divisoru#1 = (unsigned int)divr16s::$8
  divr16s::$9 = divr16s::neg#3 ^ 1
  divr16s::neg#2 = divr16s::$9
  to:divr16s::@4
divr16s::@7: scope:[divr16s]  from divr16s::@2
  divr16s::neg#8 = phi( divr16s::@2/divr16s::neg#5 )
  divr16s::remu#5 = phi( divr16s::@2/divr16s::remu#6 )
  divr16s::dividendu#5 = phi( divr16s::@2/divr16s::dividendu#6 )
  divr16s::divisor#3 = phi( divr16s::@2/divr16s::divisor#1 )
  divr16s::divisoru#2 = (unsigned int)divr16s::divisor#3
  to:divr16s::@4
divr16s::@4: scope:[divr16s]  from divr16s::@3 divr16s::@7
  divr16s::neg#6 = phi( divr16s::@3/divr16s::neg#2, divr16s::@7/divr16s::neg#8 )
  divr16s::remu#3 = phi( divr16s::@3/divr16s::remu#4, divr16s::@7/divr16s::remu#5 )
  divr16s::divisoru#3 = phi( divr16s::@3/divr16s::divisoru#1, divr16s::@7/divr16s::divisoru#2 )
  divr16s::dividendu#3 = phi( divr16s::@3/divr16s::dividendu#4, divr16s::@7/divr16s::dividendu#5 )
  divr16u::dividend#1 = divr16s::dividendu#3
  divr16u::divisor#0 = divr16s::divisoru#3
  divr16u::rem#3 = divr16s::remu#3
  call divr16u
  divr16u::return#2 = divr16u::return#1
  to:divr16s::@9
divr16s::@9: scope:[divr16s]  from divr16s::@4
  divr16s::neg#4 = phi( divr16s::@4/divr16s::neg#6 )
  divr16u::return#4 = phi( divr16s::@4/divr16u::return#2 )
  divr16s::resultu#0 = divr16u::return#4
  divr16s::$5 = divr16s::neg#4 == 0
  if(divr16s::$5) goto divr16s::@5
  to:divr16s::@8
divr16s::@5: scope:[divr16s]  from divr16s::@9
  divr16s::resultu#1 = phi( divr16s::@9/divr16s::resultu#0 )
  divr16s::return#0 = (int)divr16s::resultu#1
  to:divr16s::@return
divr16s::@8: scope:[divr16s]  from divr16s::@9
  divr16s::resultu#2 = phi( divr16s::@9/divr16s::resultu#0 )
  divr16s::$11 = - (int)divr16s::resultu#2
  divr16s::return#1 = divr16s::$11
  to:divr16s::@return
divr16s::@return: scope:[divr16s]  from divr16s::@5 divr16s::@8
  divr16s::return#4 = phi( divr16s::@5/divr16s::return#0, divr16s::@8/divr16s::return#1 )
  divr16s::return#2 = divr16s::return#4
  return 
  to:@return

void main()
main: scope:[main]  from __start::@1
  asm { sei  }
  *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
  *PROCPORT = PROCPORT_RAM_IO
  *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3
  main::vicSelectGfxBank1_gfx#0 = SCREEN
  to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main]  from main
  main::vicSelectGfxBank1_gfx#1 = phi( main/main::vicSelectGfxBank1_gfx#0 )
  *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
  main::vicSelectGfxBank1_toDd001_gfx#0 = main::vicSelectGfxBank1_gfx#1
  to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main]  from main::vicSelectGfxBank1
  main::vicSelectGfxBank1_toDd001_gfx#1 = phi( main::vicSelectGfxBank1/main::vicSelectGfxBank1_toDd001_gfx#0 )
  main::vicSelectGfxBank1_toDd001_$0 = byte1  (unsigned int)main::vicSelectGfxBank1_toDd001_gfx#1
  main::vicSelectGfxBank1_toDd001_$1 = main::vicSelectGfxBank1_toDd001_$0 / $40
  main::vicSelectGfxBank1_toDd001_$2 = 3 ^ main::vicSelectGfxBank1_toDd001_$1
  main::vicSelectGfxBank1_toDd001_return#0 = main::vicSelectGfxBank1_toDd001_$2
  to:main::vicSelectGfxBank1_toDd001_@return
main::vicSelectGfxBank1_toDd001_@return: scope:[main]  from main::vicSelectGfxBank1_toDd001
  main::vicSelectGfxBank1_toDd001_return#2 = phi( main::vicSelectGfxBank1_toDd001/main::vicSelectGfxBank1_toDd001_return#0 )
  main::vicSelectGfxBank1_toDd001_return#1 = main::vicSelectGfxBank1_toDd001_return#2
  to:main::vicSelectGfxBank1_@1
main::vicSelectGfxBank1_@1: scope:[main]  from main::vicSelectGfxBank1_toDd001_@return
  main::vicSelectGfxBank1_toDd001_return#3 = phi( main::vicSelectGfxBank1_toDd001_@return/main::vicSelectGfxBank1_toDd001_return#1 )
  main::vicSelectGfxBank1_$0 = main::vicSelectGfxBank1_toDd001_return#3
  *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) = main::vicSelectGfxBank1_$0
  to:main::@5
main::@5: scope:[main]  from main::vicSelectGfxBank1_@1
  main::toD0181_screen#0 = SCREEN
  main::toD0181_gfx#0 = BITMAP
  to:main::toD0181
main::toD0181: scope:[main]  from main::@5
  main::toD0181_gfx#1 = phi( main::@5/main::toD0181_gfx#0 )
  main::toD0181_screen#1 = phi( main::@5/main::toD0181_screen#0 )
  main::toD0181_$7 = (unsigned int)main::toD0181_screen#1
  main::toD0181_$0 = main::toD0181_$7 & $3fff
  main::toD0181_$1 = main::toD0181_$0 * 4
  main::toD0181_$2 = byte1  main::toD0181_$1
  main::toD0181_$3 = byte1  (unsigned int)main::toD0181_gfx#1
  main::toD0181_$4 = main::toD0181_$3 / 4
  main::toD0181_$5 = main::toD0181_$4 & $f
  main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
  main::toD0181_return#0 = main::toD0181_$6
  to:main::toD0181_@return
main::toD0181_@return: scope:[main]  from main::toD0181
  main::toD0181_return#2 = phi( main::toD0181/main::toD0181_return#0 )
  main::toD0181_return#1 = main::toD0181_return#2
  to:main::@6
main::@6: scope:[main]  from main::toD0181_@return
  main::toD0181_return#3 = phi( main::toD0181_@return/main::toD0181_return#1 )
  main::$1 = main::toD0181_return#3
  *D018 = main::$1
  bitmap_init::bitmap#0 = BITMAP
  call bitmap_init
  to:main::@7
main::@7: scope:[main]  from main::@6
  call bitmap_clear
  to:main::@8
main::@8: scope:[main]  from main::@7
  screen_fill::screen#0 = SCREEN
  screen_fill::ch#0 = $10
  call screen_fill
  to:main::@9
main::@9: scope:[main]  from main::@8
  main::i#0 = 0
  to:main::@1
main::@1: scope:[main]  from main::@11 main::@9
  main::i#2 = phi( main::@11/main::i#1, main::@9/main::i#0 )
  point_init::point_idx#0 = main::i#2
  call point_init
  to:main::@10
main::@10: scope:[main]  from main::@1
  main::i#3 = phi( main::@1/main::i#2 )
  main::$10 = main::i#3 * SIZEOF_UNSIGNED_INT
  bitmap_plot::x#0 = x_start[main::$10]
  bitmap_plot::y#0 = y_start[main::i#3]
  call bitmap_plot
  to:main::@11
main::@11: scope:[main]  from main::@10
  main::i#4 = phi( main::@10/main::i#3 )
  main::i#1 = main::i#4 + rangenext(0,SIZE-1)
  main::$7 = main::i#1 != rangelast(0,SIZE-1)
  if(main::$7) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@11 main::@4
  if(true) goto main::@3
  to:main::@return
main::@3: scope:[main]  from main::@2 main::@3
  main::$8 = *RASTER != $ff
  if(main::$8) goto main::@3
  to:main::@4
main::@4: scope:[main]  from main::@3
  *BORDER_COLOR = ++ *BORDER_COLOR
  to:main::@2
main::@return: scope:[main]  from main::@2
  return 
  to:@return

void point_init(char point_idx)
point_init: scope:[point_init]  from main::@1
  point_init::point_idx#1 = phi( main::@1/point_init::point_idx#0 )
  point_init::$11 = point_init::point_idx#1 * SIZEOF_UNSIGNED_INT
  point_init::$15 = (int)x_end[point_init::$11]
  point_init::$16 = (int)x_start[point_init::$11]
  point_init::x_diff#0 = point_init::$15 - point_init::$16
  point_init::$17 = (int)y_end[point_init::point_idx#1]
  point_init::$18 = (int)y_start[point_init::point_idx#1]
  point_init::y_diff#0 = point_init::$17 - point_init::$18
  point_init::abs16s1_w#0 = point_init::x_diff#0
  to:point_init::abs16s1
point_init::abs16s1: scope:[point_init]  from point_init
  point_init::point_idx#17 = phi( point_init/point_init::point_idx#1 )
  point_init::x_diff#14 = phi( point_init/point_init::x_diff#0 )
  point_init::y_diff#9 = phi( point_init/point_init::y_diff#0 )
  point_init::abs16s1_w#1 = phi( point_init/point_init::abs16s1_w#0 )
  point_init::abs16s1_$0 = point_init::abs16s1_w#1 < 0
  if(point_init::abs16s1_$0) goto point_init::abs16s1_@1
  to:point_init::abs16s1_@3
point_init::abs16s1_@1: scope:[point_init]  from point_init::abs16s1
  point_init::point_idx#15 = phi( point_init::abs16s1/point_init::point_idx#17 )
  point_init::x_diff#12 = phi( point_init::abs16s1/point_init::x_diff#14 )
  point_init::y_diff#6 = phi( point_init::abs16s1/point_init::y_diff#9 )
  point_init::abs16s1_w#2 = phi( point_init::abs16s1/point_init::abs16s1_w#1 )
  point_init::abs16s1_$1 = - point_init::abs16s1_w#2
  point_init::abs16s1_return#0 = (unsigned int)point_init::abs16s1_$1
  to:point_init::abs16s1_@return
point_init::abs16s1_@3: scope:[point_init]  from point_init::abs16s1
  point_init::point_idx#16 = phi( point_init::abs16s1/point_init::point_idx#17 )
  point_init::x_diff#13 = phi( point_init::abs16s1/point_init::x_diff#14 )
  point_init::y_diff#7 = phi( point_init::abs16s1/point_init::y_diff#9 )
  point_init::abs16s1_w#3 = phi( point_init::abs16s1/point_init::abs16s1_w#1 )
  point_init::abs16s1_return#1 = (unsigned int)point_init::abs16s1_w#3
  to:point_init::abs16s1_@return
point_init::abs16s1_@return: scope:[point_init]  from point_init::abs16s1_@1 point_init::abs16s1_@3
  point_init::point_idx#14 = phi( point_init::abs16s1_@1/point_init::point_idx#15, point_init::abs16s1_@3/point_init::point_idx#16 )
  point_init::x_diff#11 = phi( point_init::abs16s1_@1/point_init::x_diff#12, point_init::abs16s1_@3/point_init::x_diff#13 )
  point_init::y_diff#3 = phi( point_init::abs16s1_@1/point_init::y_diff#6, point_init::abs16s1_@3/point_init::y_diff#7 )
  point_init::abs16s1_return#3 = phi( point_init::abs16s1_@1/point_init::abs16s1_return#0, point_init::abs16s1_@3/point_init::abs16s1_return#1 )
  point_init::abs16s1_return#2 = point_init::abs16s1_return#3
  to:point_init::@6
point_init::@6: scope:[point_init]  from point_init::abs16s1_@return
  point_init::point_idx#13 = phi( point_init::abs16s1_@return/point_init::point_idx#14 )
  point_init::x_diff#10 = phi( point_init::abs16s1_@return/point_init::x_diff#11 )
  point_init::y_diff#1 = phi( point_init::abs16s1_@return/point_init::y_diff#3 )
  point_init::abs16s1_return#4 = phi( point_init::abs16s1_@return/point_init::abs16s1_return#2 )
  point_init::$2 = point_init::abs16s1_return#4
  point_init::abs16s2_w#0 = point_init::y_diff#1
  to:point_init::abs16s2
point_init::abs16s2: scope:[point_init]  from point_init::@6
  point_init::y_diff#14 = phi( point_init::@6/point_init::y_diff#1 )
  point_init::point_idx#12 = phi( point_init::@6/point_init::point_idx#13 )
  point_init::x_diff#9 = phi( point_init::@6/point_init::x_diff#10 )
  point_init::abs16s2_w#1 = phi( point_init::@6/point_init::abs16s2_w#0 )
  point_init::abs16s2_$0 = point_init::abs16s2_w#1 < 0
  if(point_init::abs16s2_$0) goto point_init::abs16s2_@1
  to:point_init::abs16s2_@3
point_init::abs16s2_@1: scope:[point_init]  from point_init::abs16s2
  point_init::y_diff#12 = phi( point_init::abs16s2/point_init::y_diff#14 )
  point_init::point_idx#10 = phi( point_init::abs16s2/point_init::point_idx#12 )
  point_init::x_diff#7 = phi( point_init::abs16s2/point_init::x_diff#9 )
  point_init::abs16s2_w#2 = phi( point_init::abs16s2/point_init::abs16s2_w#1 )
  point_init::abs16s2_$1 = - point_init::abs16s2_w#2
  point_init::abs16s2_return#0 = (unsigned int)point_init::abs16s2_$1
  to:point_init::abs16s2_@return
point_init::abs16s2_@3: scope:[point_init]  from point_init::abs16s2
  point_init::y_diff#13 = phi( point_init::abs16s2/point_init::y_diff#14 )
  point_init::point_idx#11 = phi( point_init::abs16s2/point_init::point_idx#12 )
  point_init::x_diff#8 = phi( point_init::abs16s2/point_init::x_diff#9 )
  point_init::abs16s2_w#3 = phi( point_init::abs16s2/point_init::abs16s2_w#1 )
  point_init::abs16s2_return#1 = (unsigned int)point_init::abs16s2_w#3
  to:point_init::abs16s2_@return
point_init::abs16s2_@return: scope:[point_init]  from point_init::abs16s2_@1 point_init::abs16s2_@3
  point_init::y_diff#11 = phi( point_init::abs16s2_@1/point_init::y_diff#12, point_init::abs16s2_@3/point_init::y_diff#13 )
  point_init::point_idx#9 = phi( point_init::abs16s2_@1/point_init::point_idx#10, point_init::abs16s2_@3/point_init::point_idx#11 )
  point_init::x_diff#6 = phi( point_init::abs16s2_@1/point_init::x_diff#7, point_init::abs16s2_@3/point_init::x_diff#8 )
  point_init::abs16s2_return#3 = phi( point_init::abs16s2_@1/point_init::abs16s2_return#0, point_init::abs16s2_@3/point_init::abs16s2_return#1 )
  point_init::abs16s2_return#2 = point_init::abs16s2_return#3
  to:point_init::@7
point_init::@7: scope:[point_init]  from point_init::abs16s2_@return
  point_init::y_diff#10 = phi( point_init::abs16s2_@return/point_init::y_diff#11 )
  point_init::point_idx#6 = phi( point_init::abs16s2_@return/point_init::point_idx#9 )
  point_init::x_diff#3 = phi( point_init::abs16s2_@return/point_init::x_diff#6 )
  point_init::abs16s2_return#4 = phi( point_init::abs16s2_@return/point_init::abs16s2_return#2 )
  point_init::$3 = point_init::abs16s2_return#4
  point_init::$4 = point_init::$2 > point_init::$3
  if(point_init::$4) goto point_init::@1
  to:point_init::@2
point_init::@1: scope:[point_init]  from point_init::@7
  point_init::y_diff#8 = phi( point_init::@7/point_init::y_diff#10 )
  point_init::point_idx#7 = phi( point_init::@7/point_init::point_idx#6 )
  point_init::x_diff#1 = phi( point_init::@7/point_init::x_diff#3 )
  point_init::$7 = point_init::x_diff#1 < 0
  if(point_init::$7) goto point_init::@4
  to:point_init::@3
point_init::@2: scope:[point_init]  from point_init::@7 point_init::@8
  point_init::point_idx#2 = phi( point_init::@7/point_init::point_idx#6, point_init::@8/point_init::point_idx#5 )
  point_init::$12 = point_init::point_idx#2 * SIZEOF_UNSIGNED_INT
  point_init::$5 = x_start[point_init::$12] * $10
  point_init::$13 = point_init::point_idx#2 * SIZEOF_UNSIGNED_INT
  x_cur[point_init::$13] = point_init::$5
  point_init::$19 = (unsigned int)y_start[point_init::point_idx#2]
  point_init::$6 = point_init::$19 * $10
  point_init::$14 = point_init::point_idx#2 * SIZEOF_UNSIGNED_INT
  y_cur[point_init::$14] = point_init::$6
  delay[point_init::point_idx#2] = DELAY
  to:point_init::@return
point_init::@4: scope:[point_init]  from point_init::@1
  point_init::y_diff#5 = phi( point_init::@1/point_init::y_diff#8 )
  point_init::x_diff#5 = phi( point_init::@1/point_init::x_diff#1 )
  point_init::point_idx#3 = phi( point_init::@1/point_init::point_idx#7 )
  x_add[point_init::point_idx#3] = -$10
  to:point_init::@5
point_init::@3: scope:[point_init]  from point_init::@1
  point_init::y_diff#4 = phi( point_init::@1/point_init::y_diff#8 )
  point_init::x_diff#4 = phi( point_init::@1/point_init::x_diff#1 )
  point_init::point_idx#4 = phi( point_init::@1/point_init::point_idx#7 )
  x_add[point_init::point_idx#4] = $10
  to:point_init::@5
point_init::@5: scope:[point_init]  from point_init::@3 point_init::@4
  point_init::point_idx#8 = phi( point_init::@3/point_init::point_idx#4, point_init::@4/point_init::point_idx#3 )
  point_init::y_diff#2 = phi( point_init::@3/point_init::y_diff#4, point_init::@4/point_init::y_diff#5 )
  point_init::x_diff#2 = phi( point_init::@3/point_init::x_diff#4, point_init::@4/point_init::x_diff#5 )
  divr16s::dividend#0 = 0
  divr16s::divisor#0 = point_init::x_diff#2
  divr16s::rem#0 = point_init::y_diff#2
  call divr16s
  divr16s::return#3 = divr16s::return#2
  to:point_init::@8
point_init::@8: scope:[point_init]  from point_init::@5
  point_init::point_idx#5 = phi( point_init::@5/point_init::point_idx#8 )
  divr16s::return#5 = phi( point_init::@5/divr16s::return#3 )
  point_init::x_stepf#0 = divr16s::return#5
  point_init::$9 = byte1  point_init::x_stepf#0
  point_init::$10 = point_init::$9 / $10
  y_add[point_init::point_idx#5] = (signed char)point_init::$10
  to:point_init::@2
point_init::@return: scope:[point_init]  from point_init::@2
  return 
  to:@return

void screen_fill(char *screen , char ch)
screen_fill: scope:[screen_fill]  from main::@8
  screen_fill::screen#4 = phi( main::@8/screen_fill::screen#0 )
  screen_fill::ch#3 = phi( main::@8/screen_fill::ch#0 )
  screen_fill::y#0 = 0
  to:screen_fill::@1
screen_fill::@1: scope:[screen_fill]  from screen_fill screen_fill::@3
  screen_fill::y#4 = phi( screen_fill/screen_fill::y#0, screen_fill::@3/screen_fill::y#1 )
  screen_fill::screen#3 = phi( screen_fill/screen_fill::screen#4, screen_fill::@3/screen_fill::screen#5 )
  screen_fill::ch#2 = phi( screen_fill/screen_fill::ch#3, screen_fill::@3/screen_fill::ch#4 )
  screen_fill::x#0 = 0
  to:screen_fill::@2
screen_fill::@2: scope:[screen_fill]  from screen_fill::@1 screen_fill::@2
  screen_fill::y#3 = phi( screen_fill::@1/screen_fill::y#4, screen_fill::@2/screen_fill::y#3 )
  screen_fill::x#2 = phi( screen_fill::@1/screen_fill::x#0, screen_fill::@2/screen_fill::x#1 )
  screen_fill::screen#2 = phi( screen_fill::@1/screen_fill::screen#3, screen_fill::@2/screen_fill::screen#1 )
  screen_fill::ch#1 = phi( screen_fill::@1/screen_fill::ch#2, screen_fill::@2/screen_fill::ch#1 )
  *screen_fill::screen#2 = screen_fill::ch#1
  screen_fill::screen#1 = ++ screen_fill::screen#2
  screen_fill::x#1 = screen_fill::x#2 + rangenext(0,$27)
  screen_fill::$0 = screen_fill::x#1 != rangelast(0,$27)
  if(screen_fill::$0) goto screen_fill::@2
  to:screen_fill::@3
screen_fill::@3: scope:[screen_fill]  from screen_fill::@2
  screen_fill::screen#5 = phi( screen_fill::@2/screen_fill::screen#1 )
  screen_fill::ch#4 = phi( screen_fill::@2/screen_fill::ch#1 )
  screen_fill::y#2 = phi( screen_fill::@2/screen_fill::y#3 )
  screen_fill::y#1 = screen_fill::y#2 + rangenext(0,$18)
  screen_fill::$1 = screen_fill::y#1 != rangelast(0,$18)
  if(screen_fill::$1) goto screen_fill::@1
  to:screen_fill::@return
screen_fill::@return: scope:[screen_fill]  from screen_fill::@3
  return 
  to:@return

void bitmap_init(char *bitmap)
bitmap_init: scope:[bitmap_init]  from main::@6
  bitmap_init::bitmap#5 = phi( main::@6/bitmap_init::bitmap#0 )
  bitmap_init::bits#0 = $80
  bitmap_init::x#0 = 0
  to:bitmap_init::@1
bitmap_init::@1: scope:[bitmap_init]  from bitmap_init bitmap_init::@2
  bitmap_init::bitmap#3 = phi( bitmap_init/bitmap_init::bitmap#5, bitmap_init::@2/bitmap_init::bitmap#2 )
  bitmap_init::x#2 = phi( bitmap_init/bitmap_init::x#0, bitmap_init::@2/bitmap_init::x#1 )
  bitmap_init::bits#3 = phi( bitmap_init/bitmap_init::bits#0, bitmap_init::@2/bitmap_init::bits#4 )
  bitmap_plot_bit[bitmap_init::x#2] = bitmap_init::bits#3
  bitmap_init::bits#1 = bitmap_init::bits#3 >> 1
  bitmap_init::$0 = bitmap_init::bits#1 == 0
  bitmap_init::$1 = ! bitmap_init::$0
  if(bitmap_init::$1) goto bitmap_init::@2
  to:bitmap_init::@3
bitmap_init::@2: scope:[bitmap_init]  from bitmap_init::@1 bitmap_init::@3
  bitmap_init::bitmap#2 = phi( bitmap_init::@1/bitmap_init::bitmap#3, bitmap_init::@3/bitmap_init::bitmap#4 )
  bitmap_init::bits#4 = phi( bitmap_init::@1/bitmap_init::bits#1, bitmap_init::@3/bitmap_init::bits#2 )
  bitmap_init::x#3 = phi( bitmap_init::@1/bitmap_init::x#2, bitmap_init::@3/bitmap_init::x#4 )
  bitmap_init::x#1 = bitmap_init::x#3 + rangenext(0,$ff)
  bitmap_init::$2 = bitmap_init::x#1 != rangelast(0,$ff)
  if(bitmap_init::$2) goto bitmap_init::@1
  to:bitmap_init::@4
bitmap_init::@3: scope:[bitmap_init]  from bitmap_init::@1
  bitmap_init::bitmap#4 = phi( bitmap_init::@1/bitmap_init::bitmap#3 )
  bitmap_init::x#4 = phi( bitmap_init::@1/bitmap_init::x#2 )
  bitmap_init::bits#2 = $80
  to:bitmap_init::@2
bitmap_init::@4: scope:[bitmap_init]  from bitmap_init::@2
  bitmap_init::bitmap#1 = phi( bitmap_init::@2/bitmap_init::bitmap#2 )
  bitmap_init::yoffs#0 = bitmap_init::bitmap#1
  bitmap_init::y#0 = 0
  to:bitmap_init::@5
bitmap_init::@5: scope:[bitmap_init]  from bitmap_init::@4 bitmap_init::@6
  bitmap_init::yoffs#2 = phi( bitmap_init::@4/bitmap_init::yoffs#0, bitmap_init::@6/bitmap_init::yoffs#4 )
  bitmap_init::y#2 = phi( bitmap_init::@4/bitmap_init::y#0, bitmap_init::@6/bitmap_init::y#1 )
  bitmap_init::$3 = bitmap_init::y#2 & 7
  bitmap_init::$4 = byte0  bitmap_init::yoffs#2
  bitmap_init::$5 = bitmap_init::$3 | bitmap_init::$4
  bitmap_plot_ylo[bitmap_init::y#2] = bitmap_init::$5
  bitmap_init::$6 = byte1  bitmap_init::yoffs#2
  bitmap_plot_yhi[bitmap_init::y#2] = bitmap_init::$6
  bitmap_init::$7 = bitmap_init::y#2 & 7
  bitmap_init::$8 = bitmap_init::$7 == 7
  bitmap_init::$9 = ! bitmap_init::$8
  if(bitmap_init::$9) goto bitmap_init::@6
  to:bitmap_init::@7
bitmap_init::@6: scope:[bitmap_init]  from bitmap_init::@5 bitmap_init::@7
  bitmap_init::yoffs#4 = phi( bitmap_init::@5/bitmap_init::yoffs#2, bitmap_init::@7/bitmap_init::yoffs#1 )
  bitmap_init::y#3 = phi( bitmap_init::@5/bitmap_init::y#2, bitmap_init::@7/bitmap_init::y#4 )
  bitmap_init::y#1 = bitmap_init::y#3 + rangenext(0,$ff)
  bitmap_init::$11 = bitmap_init::y#1 != rangelast(0,$ff)
  if(bitmap_init::$11) goto bitmap_init::@5
  to:bitmap_init::@return
bitmap_init::@7: scope:[bitmap_init]  from bitmap_init::@5
  bitmap_init::y#4 = phi( bitmap_init::@5/bitmap_init::y#2 )
  bitmap_init::yoffs#3 = phi( bitmap_init::@5/bitmap_init::yoffs#2 )
  bitmap_init::$10 = bitmap_init::yoffs#3 + $28*8
  bitmap_init::yoffs#1 = bitmap_init::$10
  to:bitmap_init::@6
bitmap_init::@return: scope:[bitmap_init]  from bitmap_init::@6
  return 
  to:@return

void bitmap_clear()
bitmap_clear: scope:[bitmap_clear]  from main::@7
  bitmap_clear::$0 = bitmap_plot_yhi[0] w= bitmap_plot_ylo[0]
  bitmap_clear::bitmap#0 = (char *)bitmap_clear::$0
  bitmap_clear::y#0 = 0
  to:bitmap_clear::@1
bitmap_clear::@1: scope:[bitmap_clear]  from bitmap_clear bitmap_clear::@3
  bitmap_clear::y#4 = phi( bitmap_clear/bitmap_clear::y#0, bitmap_clear::@3/bitmap_clear::y#1 )
  bitmap_clear::bitmap#3 = phi( bitmap_clear/bitmap_clear::bitmap#0, bitmap_clear::@3/bitmap_clear::bitmap#4 )
  bitmap_clear::x#0 = 0
  to:bitmap_clear::@2
bitmap_clear::@2: scope:[bitmap_clear]  from bitmap_clear::@1 bitmap_clear::@2
  bitmap_clear::y#3 = phi( bitmap_clear::@1/bitmap_clear::y#4, bitmap_clear::@2/bitmap_clear::y#3 )
  bitmap_clear::x#2 = phi( bitmap_clear::@1/bitmap_clear::x#0, bitmap_clear::@2/bitmap_clear::x#1 )
  bitmap_clear::bitmap#2 = phi( bitmap_clear::@1/bitmap_clear::bitmap#3, bitmap_clear::@2/bitmap_clear::bitmap#1 )
  *bitmap_clear::bitmap#2 = 0
  bitmap_clear::bitmap#1 = ++ bitmap_clear::bitmap#2
  bitmap_clear::x#1 = bitmap_clear::x#2 + rangenext(0,$c7)
  bitmap_clear::$1 = bitmap_clear::x#1 != rangelast(0,$c7)
  if(bitmap_clear::$1) goto bitmap_clear::@2
  to:bitmap_clear::@3
bitmap_clear::@3: scope:[bitmap_clear]  from bitmap_clear::@2
  bitmap_clear::bitmap#4 = phi( bitmap_clear::@2/bitmap_clear::bitmap#1 )
  bitmap_clear::y#2 = phi( bitmap_clear::@2/bitmap_clear::y#3 )
  bitmap_clear::y#1 = bitmap_clear::y#2 + rangenext(0,$27)
  bitmap_clear::$2 = bitmap_clear::y#1 != rangelast(0,$27)
  if(bitmap_clear::$2) goto bitmap_clear::@1
  to:bitmap_clear::@return
bitmap_clear::@return: scope:[bitmap_clear]  from bitmap_clear::@3
  return 
  to:@return

void bitmap_plot(unsigned int x , char y)
bitmap_plot: scope:[bitmap_plot]  from main::@10
  bitmap_plot::x#1 = phi( main::@10/bitmap_plot::x#0 )
  bitmap_plot::y#1 = phi( main::@10/bitmap_plot::y#0 )
  bitmap_plot::$0 = bitmap_plot_yhi[bitmap_plot::y#1] w= bitmap_plot_ylo[bitmap_plot::y#1]
  bitmap_plot::plotter#0 = (char *)bitmap_plot::$0
  bitmap_plot::$1 = bitmap_plot::x#1 & $fff8
  bitmap_plot::plotter#1 = bitmap_plot::plotter#0 + bitmap_plot::$1
  bitmap_plot::$2 = byte0  bitmap_plot::x#1
  *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2]
  to:bitmap_plot::@return
bitmap_plot::@return: scope:[bitmap_plot]  from bitmap_plot
  return 
  to:@return

void __start()
__start: scope:[__start]  from
  to:__start::__init1
__start::__init1: scope:[__start]  from __start
  to:__start::@1
__start::@1: scope:[__start]  from __start::__init1
  call main
  to:__start::@2
__start::@2: scope:[__start]  from __start::@1
  to:__start::@return
__start::@return: scope:[__start]  from __start::@2
  return 
  to:@return

SYMBOL TABLE SSA
__constant char *BITMAP = (char *)$a000
__constant char * const BORDER_COLOR = (char *)$d020
__constant struct MOS6526_CIA * const CIA2 = (struct MOS6526_CIA *)$dd00
__constant char * const D011 = (char *)$d011
__constant char * const D018 = (char *)$d018
__constant const char DELAY = 8
__constant char OFFSET_STRUCT_MOS6526_CIA_PORT_A = 0
__constant char OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2
__constant char * const PROCPORT = (char *)1
__constant char * const PROCPORT_DDR = (char *)0
__constant const char PROCPORT_DDR_MEMORY_MASK = 7
__constant const char PROCPORT_RAM_IO = 5
__constant char * const RASTER = (char *)$d012
__constant char *SCREEN = (char *)$8800
__constant const char SIZE = 4
__constant char SIZEOF_UNSIGNED_INT = 2
__constant const char VICII_BMM = $20
__constant const char VICII_DEN = $10
__constant const char VICII_RSEL = 8
void __start()
void bitmap_clear()
unsigned int bitmap_clear::$0
bool bitmap_clear::$1
bool bitmap_clear::$2
char *bitmap_clear::bitmap
char *bitmap_clear::bitmap#0
char *bitmap_clear::bitmap#1
char *bitmap_clear::bitmap#2
char *bitmap_clear::bitmap#3
char *bitmap_clear::bitmap#4
char bitmap_clear::x
char bitmap_clear::x#0
char bitmap_clear::x#1
char bitmap_clear::x#2
char bitmap_clear::y
char bitmap_clear::y#0
char bitmap_clear::y#1
char bitmap_clear::y#2
char bitmap_clear::y#3
char bitmap_clear::y#4
void bitmap_init(char *bitmap)
bool bitmap_init::$0
bool bitmap_init::$1
char *bitmap_init::$10
bool bitmap_init::$11
bool bitmap_init::$2
number bitmap_init::$3
char bitmap_init::$4
number bitmap_init::$5
char bitmap_init::$6
number bitmap_init::$7
bool bitmap_init::$8
bool bitmap_init::$9
char *bitmap_init::bitmap
char *bitmap_init::bitmap#0
char *bitmap_init::bitmap#1
char *bitmap_init::bitmap#2
char *bitmap_init::bitmap#3
char *bitmap_init::bitmap#4
char *bitmap_init::bitmap#5
char bitmap_init::bits
char bitmap_init::bits#0
char bitmap_init::bits#1
char bitmap_init::bits#2
char bitmap_init::bits#3
char bitmap_init::bits#4
char bitmap_init::x
char bitmap_init::x#0
char bitmap_init::x#1
char bitmap_init::x#2
char bitmap_init::x#3
char bitmap_init::x#4
char bitmap_init::y
char bitmap_init::y#0
char bitmap_init::y#1
char bitmap_init::y#2
char bitmap_init::y#3
char bitmap_init::y#4
char *bitmap_init::yoffs
char *bitmap_init::yoffs#0
char *bitmap_init::yoffs#1
char *bitmap_init::yoffs#2
char *bitmap_init::yoffs#3
char *bitmap_init::yoffs#4
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$0
number bitmap_plot::$1
char bitmap_plot::$2
char *bitmap_plot::plotter
char *bitmap_plot::plotter#0
char *bitmap_plot::plotter#1
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#0
unsigned int bitmap_plot::x#1
char bitmap_plot::y
char bitmap_plot::y#0
char bitmap_plot::y#1
__constant const char bitmap_plot_bit[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_yhi[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
__constant char delay[SIZE] = { fill( SIZE, 0) }
int divr16s(int dividend , int divisor , int rem)
bool divr16s::$0
bool divr16s::$1
int divr16s::$11
bool divr16s::$2
bool divr16s::$3
bool divr16s::$5
int divr16s::$6
int divr16s::$7
int divr16s::$8
number divr16s::$9
int divr16s::dividend
int divr16s::dividend#0
int divr16s::dividend#1
int divr16s::dividend#2
int divr16s::dividend#3
unsigned int divr16s::dividendu
unsigned int divr16s::dividendu#0
unsigned int divr16s::dividendu#1
unsigned int divr16s::dividendu#2
unsigned int divr16s::dividendu#3
unsigned int divr16s::dividendu#4
unsigned int divr16s::dividendu#5
unsigned int divr16s::dividendu#6
int divr16s::divisor
int divr16s::divisor#0
int divr16s::divisor#1
int divr16s::divisor#2
int divr16s::divisor#3
int divr16s::divisor#4
int divr16s::divisor#5
int divr16s::divisor#6
unsigned int divr16s::divisoru
unsigned int divr16s::divisoru#0
unsigned int divr16s::divisoru#1
unsigned int divr16s::divisoru#2
unsigned int divr16s::divisoru#3
char divr16s::neg
char divr16s::neg#0
char divr16s::neg#1
char divr16s::neg#2
char divr16s::neg#3
char divr16s::neg#4
char divr16s::neg#5
char divr16s::neg#6
char divr16s::neg#7
char divr16s::neg#8
int divr16s::rem
int divr16s::rem#0
int divr16s::rem#1
int divr16s::rem#2
int divr16s::rem#3
unsigned int divr16s::remu
unsigned int divr16s::remu#0
unsigned int divr16s::remu#1
unsigned int divr16s::remu#2
unsigned int divr16s::remu#3
unsigned int divr16s::remu#4
unsigned int divr16s::remu#5
unsigned int divr16s::remu#6
unsigned int divr16s::resultu
unsigned int divr16s::resultu#0
unsigned int divr16s::resultu#1
unsigned int divr16s::resultu#2
int divr16s::return
int divr16s::return#0
int divr16s::return#1
int divr16s::return#2
int divr16s::return#3
int divr16s::return#4
int divr16s::return#5
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
unsigned int divr16u::$0
char divr16u::$1
unsigned int divr16u::$10
bool divr16u::$11
number divr16u::$2
bool divr16u::$3
bool divr16u::$4
number divr16u::$5
unsigned int divr16u::$6
unsigned int divr16u::$7
bool divr16u::$8
bool divr16u::$9
unsigned int divr16u::dividend
unsigned int divr16u::dividend#0
unsigned int divr16u::dividend#1
unsigned int divr16u::dividend#2
unsigned int divr16u::dividend#3
unsigned int divr16u::dividend#4
unsigned int divr16u::dividend#5
unsigned int divr16u::dividend#6
unsigned int divr16u::dividend#7
unsigned int divr16u::divisor
unsigned int divr16u::divisor#0
unsigned int divr16u::divisor#1
unsigned int divr16u::divisor#2
unsigned int divr16u::divisor#3
unsigned int divr16u::divisor#4
unsigned int divr16u::divisor#5
unsigned int divr16u::divisor#6
char divr16u::i
char divr16u::i#0
char divr16u::i#1
char divr16u::i#2
char divr16u::i#3
char divr16u::i#4
char divr16u::i#5
char divr16u::i#6
unsigned int divr16u::quotient
unsigned int divr16u::quotient#0
unsigned int divr16u::quotient#1
unsigned int divr16u::quotient#2
unsigned int divr16u::quotient#3
unsigned int divr16u::quotient#4
unsigned int divr16u::quotient#5
unsigned int divr16u::quotient#6
unsigned int divr16u::quotient#7
unsigned int divr16u::quotient#8
unsigned int divr16u::rem
unsigned int divr16u::rem#0
unsigned int divr16u::rem#1
unsigned int divr16u::rem#2
unsigned int divr16u::rem#3
unsigned int divr16u::rem#4
unsigned int divr16u::rem#5
unsigned int divr16u::rem#6
unsigned int divr16u::rem#7
unsigned int divr16u::rem#8
unsigned int divr16u::rem#9
unsigned int divr16u::return
unsigned int divr16u::return#0
unsigned int divr16u::return#1
unsigned int divr16u::return#2
unsigned int divr16u::return#3
unsigned int divr16u::return#4
void main()
char main::$1
char main::$10
bool main::$7
bool main::$8
char main::i
char main::i#0
char main::i#1
char main::i#2
char main::i#3
char main::i#4
number main::toD0181_$0
number main::toD0181_$1
char main::toD0181_$2
char main::toD0181_$3
number main::toD0181_$4
number main::toD0181_$5
number main::toD0181_$6
unsigned int main::toD0181_$7
char *main::toD0181_gfx
char *main::toD0181_gfx#0
char *main::toD0181_gfx#1
char main::toD0181_return
char main::toD0181_return#0
char main::toD0181_return#1
char main::toD0181_return#2
char main::toD0181_return#3
char *main::toD0181_screen
char *main::toD0181_screen#0
char *main::toD0181_screen#1
char main::vicSelectGfxBank1_$0
char *main::vicSelectGfxBank1_gfx
char *main::vicSelectGfxBank1_gfx#0
char *main::vicSelectGfxBank1_gfx#1
char main::vicSelectGfxBank1_toDd001_$0
number main::vicSelectGfxBank1_toDd001_$1
number main::vicSelectGfxBank1_toDd001_$2
char *main::vicSelectGfxBank1_toDd001_gfx
char *main::vicSelectGfxBank1_toDd001_gfx#0
char *main::vicSelectGfxBank1_toDd001_gfx#1
char main::vicSelectGfxBank1_toDd001_return
char main::vicSelectGfxBank1_toDd001_return#0
char main::vicSelectGfxBank1_toDd001_return#1
char main::vicSelectGfxBank1_toDd001_return#2
char main::vicSelectGfxBank1_toDd001_return#3
void point_init(char point_idx)
number point_init::$10
char point_init::$11
char point_init::$12
char point_init::$13
char point_init::$14
int point_init::$15
int point_init::$16
int point_init::$17
int point_init::$18
unsigned int point_init::$19
unsigned int point_init::$2
unsigned int point_init::$3
bool point_init::$4
number point_init::$5
number point_init::$6
bool point_init::$7
char point_init::$9
bool point_init::abs16s1_$0
int point_init::abs16s1_$1
unsigned int point_init::abs16s1_return
unsigned int point_init::abs16s1_return#0
unsigned int point_init::abs16s1_return#1
unsigned int point_init::abs16s1_return#2
unsigned int point_init::abs16s1_return#3
unsigned int point_init::abs16s1_return#4
int point_init::abs16s1_w
int point_init::abs16s1_w#0
int point_init::abs16s1_w#1
int point_init::abs16s1_w#2
int point_init::abs16s1_w#3
bool point_init::abs16s2_$0
int point_init::abs16s2_$1
unsigned int point_init::abs16s2_return
unsigned int point_init::abs16s2_return#0
unsigned int point_init::abs16s2_return#1
unsigned int point_init::abs16s2_return#2
unsigned int point_init::abs16s2_return#3
unsigned int point_init::abs16s2_return#4
int point_init::abs16s2_w
int point_init::abs16s2_w#0
int point_init::abs16s2_w#1
int point_init::abs16s2_w#2
int point_init::abs16s2_w#3
char point_init::point_idx
char point_init::point_idx#0
char point_init::point_idx#1
char point_init::point_idx#10
char point_init::point_idx#11
char point_init::point_idx#12
char point_init::point_idx#13
char point_init::point_idx#14
char point_init::point_idx#15
char point_init::point_idx#16
char point_init::point_idx#17
char point_init::point_idx#2
char point_init::point_idx#3
char point_init::point_idx#4
char point_init::point_idx#5
char point_init::point_idx#6
char point_init::point_idx#7
char point_init::point_idx#8
char point_init::point_idx#9
int point_init::x_diff
int point_init::x_diff#0
int point_init::x_diff#1
int point_init::x_diff#10
int point_init::x_diff#11
int point_init::x_diff#12
int point_init::x_diff#13
int point_init::x_diff#14
int point_init::x_diff#2
int point_init::x_diff#3
int point_init::x_diff#4
int point_init::x_diff#5
int point_init::x_diff#6
int point_init::x_diff#7
int point_init::x_diff#8
int point_init::x_diff#9
int point_init::x_stepf
int point_init::x_stepf#0
int point_init::y_diff
int point_init::y_diff#0
int point_init::y_diff#1
int point_init::y_diff#10
int point_init::y_diff#11
int point_init::y_diff#12
int point_init::y_diff#13
int point_init::y_diff#14
int point_init::y_diff#2
int point_init::y_diff#3
int point_init::y_diff#4
int point_init::y_diff#5
int point_init::y_diff#6
int point_init::y_diff#7
int point_init::y_diff#8
int point_init::y_diff#9
void screen_fill(char *screen , char ch)
bool screen_fill::$0
bool screen_fill::$1
char screen_fill::ch
char screen_fill::ch#0
char screen_fill::ch#1
char screen_fill::ch#2
char screen_fill::ch#3
char screen_fill::ch#4
char *screen_fill::screen
char *screen_fill::screen#0
char *screen_fill::screen#1
char *screen_fill::screen#2
char *screen_fill::screen#3
char *screen_fill::screen#4
char *screen_fill::screen#5
char screen_fill::x
char screen_fill::x#0
char screen_fill::x#1
char screen_fill::x#2
char screen_fill::y
char screen_fill::y#0
char screen_fill::y#1
char screen_fill::y#2
char screen_fill::y#3
char screen_fill::y#4
__constant signed char x_add[SIZE] = { fill( SIZE, 0) }
__constant unsigned int x_cur[SIZE] = { fill( SIZE, 0) }
__constant unsigned int x_end[SIZE] = { $14, $a, $14, $14 }
__constant unsigned int x_start[SIZE] = { $a, $14, $1e, $1e }
__constant signed char y_add[SIZE] = { fill( SIZE, 0) }
__constant unsigned int y_cur[SIZE] = { fill( SIZE, 0) }
__constant char y_end[SIZE] = { $14, $14, $a, $14 }
__constant char y_start[SIZE] = { $a, $a, $a, $14 }

Adding number conversion cast (unumber) 1 in divr16u::$0 = divr16u::rem#4 << 1
Adding number conversion cast (unumber) $80 in divr16u::$2 = divr16u::$1 & $80
Adding number conversion cast (unumber) divr16u::$2 in divr16u::$2 = divr16u::$1 & (unumber)$80
Adding number conversion cast (unumber) 0 in divr16u::$3 = divr16u::$2 != 0
Adding number conversion cast (unumber) 1 in divr16u::$6 = divr16u::dividend#3 << 1
Adding number conversion cast (unumber) 1 in divr16u::$7 = divr16u::quotient#3 << 1
Adding number conversion cast (unumber) 1 in divr16u::$5 = divr16u::rem#6 | 1
Adding number conversion cast (unumber) divr16u::$5 in divr16u::$5 = divr16u::rem#6 | (unumber)1
Adding number conversion cast (snumber) 0 in divr16s::$0 = divr16s::dividend#1 < 0
Adding number conversion cast (snumber) 0 in divr16s::$1 = divr16s::rem#1 < 0
Adding number conversion cast (unumber) 1 in divr16s::neg#1 = 1
Adding number conversion cast (snumber) 0 in divr16s::$3 = divr16s::divisor#1 < 0
Adding number conversion cast (unumber) 1 in divr16s::$9 = divr16s::neg#3 ^ 1
Adding number conversion cast (unumber) divr16s::$9 in divr16s::$9 = divr16s::neg#3 ^ (unumber)1
Adding number conversion cast (unumber) 0 in divr16s::$5 = divr16s::neg#4 == 0
Adding number conversion cast (unumber) VICII_BMM|VICII_DEN|VICII_RSEL|3 in *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3
Adding number conversion cast (unumber) 3 in *D011 = ((unumber)) VICII_BMM|VICII_DEN|VICII_RSEL|3
Adding number conversion cast (unumber) 3 in *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
Adding number conversion cast (unumber) $40 in main::vicSelectGfxBank1_toDd001_$1 = main::vicSelectGfxBank1_toDd001_$0 / $40
Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in main::vicSelectGfxBank1_toDd001_$1 = main::vicSelectGfxBank1_toDd001_$0 / (unumber)$40
Adding number conversion cast (unumber) 3 in main::vicSelectGfxBank1_toDd001_$2 = 3 ^ main::vicSelectGfxBank1_toDd001_$1
Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$2 in main::vicSelectGfxBank1_toDd001_$2 = (unumber)3 ^ main::vicSelectGfxBank1_toDd001_$1
Adding number conversion cast (unumber) $3fff in main::toD0181_$0 = main::toD0181_$7 & $3fff
Adding number conversion cast (unumber) main::toD0181_$0 in main::toD0181_$0 = main::toD0181_$7 & (unumber)$3fff
Adding number conversion cast (unumber) 4 in main::toD0181_$1 = main::toD0181_$0 * 4
Adding number conversion cast (unumber) main::toD0181_$1 in main::toD0181_$1 = main::toD0181_$0 * (unumber)4
Adding number conversion cast (unumber) 4 in main::toD0181_$4 = main::toD0181_$3 / 4
Adding number conversion cast (unumber) main::toD0181_$4 in main::toD0181_$4 = main::toD0181_$3 / (unumber)4
Adding number conversion cast (unumber) $f in main::toD0181_$5 = main::toD0181_$4 & $f
Adding number conversion cast (unumber) main::toD0181_$5 in main::toD0181_$5 = main::toD0181_$4 & (unumber)$f
Adding number conversion cast (unumber) main::toD0181_$6 in main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
Adding number conversion cast (unumber) $10 in screen_fill::ch#0 = $10
Adding number conversion cast (unumber) 1 in main::i#1 = main::i#4 + rangenext(0,SIZE-1)
Adding number conversion cast (unumber) $ff in main::$8 = *RASTER != $ff
Adding number conversion cast (snumber) 0 in point_init::abs16s1_$0 = point_init::abs16s1_w#1 < 0
Adding number conversion cast (snumber) 0 in point_init::abs16s2_$0 = point_init::abs16s2_w#1 < 0
Adding number conversion cast (snumber) 0 in point_init::$7 = point_init::x_diff#1 < 0
Adding number conversion cast (unumber) $10 in point_init::$5 = x_start[point_init::$12] * $10
Adding number conversion cast (unumber) point_init::$5 in point_init::$5 = x_start[point_init::$12] * (unumber)$10
Adding number conversion cast (unumber) $10 in point_init::$6 = point_init::$19 * $10
Adding number conversion cast (unumber) point_init::$6 in point_init::$6 = point_init::$19 * (unumber)$10
Adding number conversion cast (snumber) -$10 in x_add[point_init::point_idx#3] = -$10
Adding number conversion cast (snumber) $10 in x_add[point_init::point_idx#4] = $10
Adding number conversion cast (snumber) 0 in divr16s::dividend#0 = 0
Adding number conversion cast (unumber) $10 in point_init::$10 = point_init::$9 / $10
Adding number conversion cast (unumber) point_init::$10 in point_init::$10 = point_init::$9 / (unumber)$10
Adding number conversion cast (unumber) 1 in bitmap_init::bits#1 = bitmap_init::bits#3 >> 1
Adding number conversion cast (unumber) 0 in bitmap_init::$0 = bitmap_init::bits#1 == 0
Adding number conversion cast (unumber) $80 in bitmap_init::bits#2 = $80
Adding number conversion cast (unumber) 7 in bitmap_init::$3 = bitmap_init::y#2 & 7
Adding number conversion cast (unumber) bitmap_init::$3 in bitmap_init::$3 = bitmap_init::y#2 & (unumber)7
Adding number conversion cast (unumber) bitmap_init::$5 in bitmap_init::$5 = bitmap_init::$3 | bitmap_init::$4
Adding number conversion cast (unumber) 7 in bitmap_init::$7 = bitmap_init::y#2 & 7
Adding number conversion cast (unumber) bitmap_init::$7 in bitmap_init::$7 = bitmap_init::y#2 & (unumber)7
Adding number conversion cast (unumber) 7 in bitmap_init::$8 = bitmap_init::$7 == 7
Adding number conversion cast (unumber) $28*8 in bitmap_init::$10 = bitmap_init::yoffs#3 + $28*8
Adding number conversion cast (unumber) 0 in bitmap_clear::$0 = bitmap_plot_yhi[0] w= bitmap_plot_ylo[0]
Adding number conversion cast (unumber) 0 in bitmap_clear::$0 = bitmap_plot_yhi[(unumber)0] w= bitmap_plot_ylo[0]
Adding number conversion cast (unumber) 0 in *bitmap_clear::bitmap#2 = 0
Adding number conversion cast (unumber) $fff8 in bitmap_plot::$1 = bitmap_plot::x#1 & $fff8
Adding number conversion cast (unumber) bitmap_plot::$1 in bitmap_plot::$1 = bitmap_plot::x#1 & (unumber)$fff8
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast divr16s::neg#1 = (unumber)1
Inlining cast *D011 = (unumber)VICII_BMM|VICII_DEN|VICII_RSEL|(unumber)3
Inlining cast *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = (unumber)3
Inlining cast screen_fill::ch#0 = (unumber)$10
Inlining cast x_add[point_init::point_idx#3] = (snumber)-$10
Inlining cast x_add[point_init::point_idx#4] = (snumber)$10
Inlining cast divr16s::dividend#0 = (snumber)0
Inlining cast bitmap_init::bits#2 = (unumber)$80
Inlining cast *bitmap_clear::bitmap#2 = (unumber)0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (char *) 53266
Simplifying constant pointer cast (char *) 53280
Simplifying constant pointer cast (char *) 53265
Simplifying constant pointer cast (char *) 53272
Simplifying constant pointer cast (char *) 0
Simplifying constant pointer cast (char *) 1
Simplifying constant pointer cast (struct MOS6526_CIA *) 56576
Simplifying constant pointer cast (char *) 40960
Simplifying constant pointer cast (char *) 34816
Simplifying constant integer cast 1
Simplifying constant integer cast $80
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast VICII_BMM|VICII_DEN|VICII_RSEL|(unumber)3
Simplifying constant integer cast 3
Simplifying constant integer cast 3
Simplifying constant integer cast $40
Simplifying constant integer cast 3
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $10
Simplifying constant integer cast 1
Simplifying constant integer cast $ff
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $10
Simplifying constant integer cast $10
Simplifying constant integer cast -$10
Simplifying constant integer cast $10
Simplifying constant integer cast 0
Simplifying constant integer cast $10
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $80
Simplifying constant integer cast 7
Simplifying constant integer cast 7
Simplifying constant integer cast 7
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $fff8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $80
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 1
Finalized signed number type (signed char) 0
Finalized signed number type (signed char) 0
Finalized unsigned number type (char) 1
Finalized signed number type (signed char) 0
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 3
Finalized unsigned number type (char) 3
Finalized unsigned number type (char) $40
Finalized unsigned number type (char) 3
Finalized unsigned number type (unsigned int) $3fff
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) $f
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $ff
Finalized signed number type (signed char) 0
Finalized signed number type (signed char) 0
Finalized signed number type (signed char) 0
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $10
Finalized signed number type (signed char) -$10
Finalized signed number type (signed char) $10
Finalized signed number type (signed char) 0
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $80
Finalized unsigned number type (char) 7
Finalized unsigned number type (char) 7
Finalized unsigned number type (char) 7
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 0
Finalized unsigned number type (unsigned int) $fff8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to char in divr16u::$2 = divr16u::$1 & $80
Inferred type updated to unsigned int in divr16u::$5 = divr16u::rem#6 | 1
Inferred type updated to char in divr16s::$9 = divr16s::neg#3 ^ 1
Inferred type updated to char in main::vicSelectGfxBank1_toDd001_$1 = main::vicSelectGfxBank1_toDd001_$0 / $40
Inferred type updated to char in main::vicSelectGfxBank1_toDd001_$2 = 3 ^ main::vicSelectGfxBank1_toDd001_$1
Inferred type updated to unsigned int in main::toD0181_$0 = main::toD0181_$7 & $3fff
Inferred type updated to unsigned int in main::toD0181_$1 = main::toD0181_$0 * 4
Inferred type updated to char in main::toD0181_$4 = main::toD0181_$3 / 4
Inferred type updated to char in main::toD0181_$5 = main::toD0181_$4 & $f
Inferred type updated to char in main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
Inferred type updated to unsigned int in point_init::$5 = x_start[point_init::$12] * $10
Inferred type updated to unsigned int in point_init::$6 = point_init::$19 * $10
Inferred type updated to char in point_init::$10 = point_init::$9 / $10
Inferred type updated to char in bitmap_init::$3 = bitmap_init::y#2 & 7
Inferred type updated to char in bitmap_init::$5 = bitmap_init::$3 | bitmap_init::$4
Inferred type updated to char in bitmap_init::$7 = bitmap_init::y#2 & 7
Inferred type updated to unsigned int in bitmap_plot::$1 = bitmap_plot::x#1 & $fff8
Inversing boolean not [9] divr16u::$4 = divr16u::$2 == 0 from [8] divr16u::$3 = divr16u::$2 != 0
Inversing boolean not [17] divr16u::$9 = divr16u::rem#5 < divr16u::divisor#1 from [16] divr16u::$8 = divr16u::rem#5 >= divr16u::divisor#1
Inversing boolean not [227] bitmap_init::$1 = bitmap_init::bits#1 != 0 from [226] bitmap_init::$0 = bitmap_init::bits#1 == 0
Inversing boolean not [247] bitmap_init::$9 = bitmap_init::$7 != 7 from [246] bitmap_init::$8 = bitmap_init::$7 == 7
Successful SSA optimization Pass2UnaryNotSimplification
Alias divr16u::rem#0 = divr16u::$0 divr16u::rem#6 
Alias divr16u::dividend#0 = divr16u::$6 divr16u::dividend#7 
Alias divr16u::quotient#1 = divr16u::$7 divr16u::quotient#4 
Alias divr16u::dividend#2 = divr16u::dividend#6 
Alias divr16u::quotient#6 = divr16u::quotient#7 
Alias divr16u::divisor#3 = divr16u::divisor#4 
Alias divr16u::i#5 = divr16u::i#6 
Alias divr16u::rem#1 = divr16u::$5 
Alias divr16u::rem#5 = divr16u::rem#7 
Alias divr16u::divisor#1 = divr16u::divisor#2 
Alias divr16u::i#3 = divr16u::i#4 
Alias divr16u::rem#2 = divr16u::$10 
Alias divr16u::return#0 = divr16u::quotient#5 divr16u::quotient#8 divr16u::return#3 divr16u::return#1 
Alias divr16s::dividend#1 = divr16s::dividend#2 divr16s::dividend#3 
Alias divr16s::rem#1 = divr16s::rem#2 divr16s::rem#3 
Alias divr16s::divisor#4 = divr16s::divisor#6 divr16s::divisor#5 
Alias divr16s::neg#0 = divr16s::neg#7 
Alias divr16s::divisor#1 = divr16s::divisor#2 divr16s::divisor#3 
Alias divr16s::neg#3 = divr16s::neg#5 divr16s::neg#8 
Alias divr16s::dividendu#4 = divr16s::dividendu#6 divr16s::dividendu#5 
Alias divr16s::remu#4 = divr16s::remu#6 divr16s::remu#5 
Alias divr16s::neg#2 = divr16s::$9 
Alias divr16u::return#2 = divr16u::return#4 
Alias divr16s::neg#4 = divr16s::neg#6 
Alias divr16s::resultu#0 = divr16s::resultu#1 divr16s::resultu#2 
Alias divr16s::return#1 = divr16s::$11 
Alias divr16s::return#2 = divr16s::return#4 
Alias main::vicSelectGfxBank1_gfx#0 = main::vicSelectGfxBank1_gfx#1 main::vicSelectGfxBank1_toDd001_gfx#0 main::vicSelectGfxBank1_toDd001_gfx#1 
Alias main::vicSelectGfxBank1_toDd001_return#0 = main::vicSelectGfxBank1_toDd001_$2 main::vicSelectGfxBank1_toDd001_return#2 main::vicSelectGfxBank1_toDd001_return#1 main::vicSelectGfxBank1_toDd001_return#3 main::vicSelectGfxBank1_$0 
Alias main::toD0181_screen#0 = main::toD0181_screen#1 
Alias main::toD0181_gfx#0 = main::toD0181_gfx#1 
Alias main::toD0181_return#0 = main::toD0181_$6 main::toD0181_return#2 main::toD0181_return#1 main::toD0181_return#3 main::$1 
Alias main::i#2 = main::i#3 main::i#4 
Alias point_init::abs16s1_w#0 = point_init::x_diff#0 point_init::abs16s1_w#1 point_init::x_diff#14 point_init::abs16s1_w#2 point_init::x_diff#12 point_init::abs16s1_w#3 point_init::x_diff#13 
Alias point_init::y_diff#0 = point_init::y_diff#9 point_init::y_diff#6 point_init::y_diff#7 
Alias point_init::point_idx#1 = point_init::point_idx#17 point_init::point_idx#15 point_init::point_idx#16 
Alias point_init::abs16s1_return#2 = point_init::abs16s1_return#3 point_init::abs16s1_return#4 point_init::$2 
Alias point_init::y_diff#1 = point_init::y_diff#3 point_init::abs16s2_w#0 point_init::abs16s2_w#1 point_init::y_diff#14 point_init::abs16s2_w#2 point_init::y_diff#12 point_init::abs16s2_w#3 point_init::y_diff#13 
Alias point_init::x_diff#10 = point_init::x_diff#11 point_init::x_diff#9 point_init::x_diff#7 point_init::x_diff#8 
Alias point_init::point_idx#10 = point_init::point_idx#13 point_init::point_idx#14 point_init::point_idx#12 point_init::point_idx#11 
Alias point_init::abs16s2_return#2 = point_init::abs16s2_return#3 point_init::abs16s2_return#4 point_init::$3 
Alias point_init::x_diff#1 = point_init::x_diff#3 point_init::x_diff#6 point_init::x_diff#5 point_init::x_diff#4 
Alias point_init::point_idx#3 = point_init::point_idx#6 point_init::point_idx#9 point_init::point_idx#7 point_init::point_idx#4 
Alias point_init::y_diff#10 = point_init::y_diff#11 point_init::y_diff#8 point_init::y_diff#5 point_init::y_diff#4 
Alias divr16s::return#3 = divr16s::return#5 
Alias point_init::point_idx#5 = point_init::point_idx#8 
Alias screen_fill::y#2 = screen_fill::y#3 
Alias screen_fill::ch#1 = screen_fill::ch#4 
Alias screen_fill::screen#1 = screen_fill::screen#5 
Alias bitmap_init::x#2 = bitmap_init::x#4 
Alias bitmap_init::bitmap#3 = bitmap_init::bitmap#4 
Alias bitmap_init::bitmap#1 = bitmap_init::bitmap#2 bitmap_init::yoffs#0 
Alias bitmap_init::yoffs#2 = bitmap_init::yoffs#3 
Alias bitmap_init::y#2 = bitmap_init::y#4 
Alias bitmap_init::yoffs#1 = bitmap_init::$10 
Alias bitmap_clear::y#2 = bitmap_clear::y#3 
Alias bitmap_clear::bitmap#1 = bitmap_clear::bitmap#4 
Successful SSA optimization Pass2AliasElimination
Alias divr16u::dividend#2 = divr16u::dividend#3 
Alias divr16u::quotient#3 = divr16u::quotient#6 
Alias divr16u::divisor#1 = divr16u::divisor#3 divr16u::divisor#6 
Alias divr16u::i#2 = divr16u::i#3 divr16u::i#5 
Alias divr16u::dividend#0 = divr16u::dividend#5 
Alias divr16s::divisor#1 = divr16s::divisor#4 
Alias divr16s::dividendu#3 = divr16s::dividendu#4 
Alias divr16s::remu#3 = divr16s::remu#4 
Alias point_init::y_diff#0 = point_init::y_diff#1 point_init::y_diff#10 point_init::y_diff#2 
Alias point_init::x_diff#1 = point_init::x_diff#10 point_init::abs16s1_w#0 point_init::x_diff#2 
Alias point_init::point_idx#1 = point_init::point_idx#10 point_init::point_idx#3 point_init::point_idx#5 
Alias bitmap_init::x#2 = bitmap_init::x#3 
Alias bitmap_init::bitmap#1 = bitmap_init::bitmap#3 
Alias bitmap_init::y#2 = bitmap_init::y#3 
Successful SSA optimization Pass2AliasElimination
Alias point_init::point_idx#1 = point_init::point_idx#2 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values divr16u::rem#8 divr16u::rem#3
Identical Phi Values divr16u::dividend#4 divr16u::dividend#1
Identical Phi Values divr16u::divisor#5 divr16u::divisor#0
Identical Phi Values divr16u::divisor#1 divr16u::divisor#5
Identical Phi Values divr16s::dividend#1 divr16s::dividend#0
Identical Phi Values divr16s::rem#1 divr16s::rem#0
Identical Phi Values divr16s::divisor#1 divr16s::divisor#0
Identical Phi Values point_init::point_idx#1 point_init::point_idx#0
Identical Phi Values screen_fill::ch#3 screen_fill::ch#0
Identical Phi Values screen_fill::screen#4 screen_fill::screen#0
Identical Phi Values screen_fill::ch#1 screen_fill::ch#2
Identical Phi Values screen_fill::y#2 screen_fill::y#4
Identical Phi Values bitmap_init::bitmap#5 bitmap_init::bitmap#0
Identical Phi Values bitmap_init::bitmap#1 bitmap_init::bitmap#5
Identical Phi Values bitmap_clear::y#2 bitmap_clear::y#4
Identical Phi Values bitmap_plot::y#1 bitmap_plot::y#0
Identical Phi Values bitmap_plot::x#1 bitmap_plot::x#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values screen_fill::ch#2 screen_fill::ch#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [182] point_init::$13 = point_init::point_idx#0 * SIZEOF_UNSIGNED_INT
Identified duplicate assignment right side [186] point_init::$14 = point_init::point_idx#0 * SIZEOF_UNSIGNED_INT
Identified duplicate assignment right side [245] bitmap_init::$7 = bitmap_init::y#2 & 7
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition divr16u::$4 [8] if(divr16u::$2==0) goto divr16u::@2
Simple Condition divr16u::$9 [13] if(divr16u::rem#5<divr16u::divisor#0) goto divr16u::@3
Simple Condition divr16u::$11 [18] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1
Simple Condition divr16s::$3 [40] if(divr16s::divisor#0<0) goto divr16s::@3
Simple Condition divr16s::$5 [53] if(divr16s::neg#4==0) goto divr16s::@5
Simple Condition main::$7 [95] if(main::i#1!=rangelast(0,SIZE-1)) goto main::@1
Simple Condition main::$8 [98] if(*RASTER!=$ff) goto main::@3
Simple Condition point_init::abs16s1_$0 [110] if(point_init::x_diff#1<0) goto point_init::abs16s1_@1
Simple Condition point_init::abs16s2_$0 [116] if(point_init::y_diff#0<0) goto point_init::abs16s2_@1
Simple Condition point_init::$4 [122] if(point_init::abs16s1_return#2>point_init::abs16s2_return#2) goto point_init::@1
Simple Condition point_init::$7 [124] if(point_init::x_diff#1<0) goto point_init::@4
Simple Condition screen_fill::$0 [155] if(screen_fill::x#1!=rangelast(0,$27)) goto screen_fill::@2
Simple Condition screen_fill::$1 [158] if(screen_fill::y#1!=rangelast(0,$18)) goto screen_fill::@1
Simple Condition bitmap_init::$1 [167] if(bitmap_init::bits#1!=0) goto bitmap_init::@2
Simple Condition bitmap_init::$2 [171] if(bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1
Simple Condition bitmap_init::$9 [183] if(bitmap_init::$7!=7) goto bitmap_init::@6
Simple Condition bitmap_init::$11 [187] if(bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5
Simple Condition bitmap_clear::$1 [200] if(bitmap_clear::x#1!=rangelast(0,$c7)) goto bitmap_clear::@2
Simple Condition bitmap_clear::$2 [203] if(bitmap_clear::y#1!=rangelast(0,$27)) goto bitmap_clear::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting || if()-condition to two if()s [28] divr16s::$2 = divr16s::$0 || divr16s::$1
Successful SSA optimization Pass2ConditionalAndOrRewriting
Constant divr16u::quotient#0 = 0
Constant divr16u::i#0 = 0
Constant divr16s::neg#0 = 0
Constant divr16s::dividendu#0 = 0
Constant divr16s::remu#0 = 0
Constant divr16s::neg#1 = 1
Constant divr16s::divisoru#0 = 0
Constant main::vicSelectGfxBank1_gfx#0 = SCREEN
Constant main::toD0181_screen#0 = SCREEN
Constant main::toD0181_gfx#0 = BITMAP
Constant bitmap_init::bitmap#0 = BITMAP
Constant screen_fill::screen#0 = SCREEN
Constant screen_fill::ch#0 = $10
Constant main::i#0 = 0
Constant divr16s::dividend#0 = 0
Constant screen_fill::y#0 = 0
Constant screen_fill::x#0 = 0
Constant bitmap_init::bits#0 = $80
Constant bitmap_init::x#0 = 0
Constant bitmap_init::bits#2 = $80
Constant bitmap_init::y#0 = 0
Constant bitmap_clear::y#0 = 0
Constant bitmap_clear::x#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant divr16s::dividendu#2 = (unsigned int)divr16s::dividend#0
Constant main::toD0181_$7 = (unsigned int)main::toD0181_screen#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (unsigned int)main::vicSelectGfxBank1_gfx#0 in [64] main::vicSelectGfxBank1_toDd001_$0 = byte1  (unsigned int)main::vicSelectGfxBank1_gfx#0
Constant value identified (unsigned int)main::toD0181_gfx#0 in [74] main::toD0181_$3 = byte1  (unsigned int)main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [96] if(true) goto main::@3
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [16] divr16u::i#1 = ++ divr16u::i#2 to ++
Resolved ranged comparison value [18] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to $10
Resolved ranged next value [93] main::i#1 = ++ main::i#2 to ++
Resolved ranged comparison value [95] if(main::i#1!=rangelast(0,SIZE-1)) goto main::@1 to SIZE-1+1
Resolved ranged next value [153] screen_fill::x#1 = ++ screen_fill::x#2 to ++
Resolved ranged comparison value [155] if(screen_fill::x#1!=rangelast(0,$27)) goto screen_fill::@2 to $28
Resolved ranged next value [156] screen_fill::y#1 = ++ screen_fill::y#4 to ++
Resolved ranged comparison value [158] if(screen_fill::y#1!=rangelast(0,$18)) goto screen_fill::@1 to $19
Resolved ranged next value [169] bitmap_init::x#1 = ++ bitmap_init::x#2 to ++
Resolved ranged comparison value [171] if(bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1 to 0
Resolved ranged next value [185] bitmap_init::y#1 = ++ bitmap_init::y#2 to ++
Resolved ranged comparison value [187] if(bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5 to 0
Resolved ranged next value [198] bitmap_clear::x#1 = ++ bitmap_clear::x#2 to ++
Resolved ranged comparison value [200] if(bitmap_clear::x#1!=rangelast(0,$c7)) goto bitmap_clear::@2 to $c8
Resolved ranged next value [201] bitmap_clear::y#1 = ++ bitmap_clear::y#4 to ++
Resolved ranged comparison value [203] if(bitmap_clear::y#1!=rangelast(0,$27)) goto bitmap_clear::@1 to $28
Simplifying constant evaluating to zero (unsigned int)divr16s::dividend#0 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero (char *)CIA2 in [67] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) = main::vicSelectGfxBank1_toDd001_return#0
Simplifying expression containing zero bitmap_plot_yhi in [190] bitmap_clear::$0 = bitmap_plot_yhi[0] w= bitmap_plot_ylo[0]
Simplifying expression containing zero bitmap_plot_ylo in [190] bitmap_clear::$0 = *bitmap_plot_yhi w= bitmap_plot_ylo[0]
Successful SSA optimization PassNSimplifyExpressionWithZero
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Eliminating unused constant divr16s::dividendu#0
Eliminating unused constant divr16s::remu#0
Eliminating unused constant divr16s::divisoru#0
Eliminating unused constant OFFSET_STRUCT_MOS6526_CIA_PORT_A
Successful SSA optimization PassNEliminateUnusedVars
Removing unused procedure __start
Removing unused procedure block __start
Removing unused procedure block __start::__init1
Removing unused procedure block __start::@1
Removing unused procedure block __start::@2
Removing unused procedure block __start::@return
Successful SSA optimization PassNEliminateEmptyStart
Adding number conversion cast (unumber) $10 in [12] if(divr16u::i#1!=$10) goto divr16u::@1
Adding number conversion cast (unumber) SIZE-1+1 in [70] if(main::i#1!=SIZE-1+1) goto main::@1
Adding number conversion cast (unumber) 1 in [70] if(main::i#1!=(unumber)SIZE-1+1) goto main::@1
Adding number conversion cast (unumber) $28 in [117] if(screen_fill::x#1!=$28) goto screen_fill::@2
Adding number conversion cast (unumber) $19 in [119] if(screen_fill::y#1!=$19) goto screen_fill::@1
Adding number conversion cast (unumber) 0 in [127] if(bitmap_init::x#1!=0) goto bitmap_init::@1
Adding number conversion cast (unumber) 0 in [139] if(bitmap_init::y#1!=0) goto bitmap_init::@5
Adding number conversion cast (unumber) $c8 in [149] if(bitmap_clear::x#1!=$c8) goto bitmap_clear::@2
Adding number conversion cast (unumber) $28 in [151] if(bitmap_clear::y#1!=$28) goto bitmap_clear::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $10
Simplifying constant integer cast SIZE-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast $28
Simplifying constant integer cast $19
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $c8
Simplifying constant integer cast $28
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $19
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $c8
Finalized unsigned number type (char) $28
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias point_init::$13 = point_init::$12 point_init::$14 
Alias bitmap_init::$7 = bitmap_init::$3 
Successful SSA optimization Pass2AliasElimination
Simple Condition divr16s::$0 [18] if(divr16s::dividend#0<0) goto divr16s::@1
Simple Condition divr16s::$1 [157] if(divr16s::rem#0<0) goto divr16s::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [19] divr16s::$6 = - divr16s::dividend#0
Constant right-side identified [47] main::vicSelectGfxBank1_toDd001_$0 = byte1  (unsigned int)main::vicSelectGfxBank1_gfx#0
Constant right-side identified [51] main::toD0181_$0 = main::toD0181_$7 & $3fff
Constant right-side identified [54] main::toD0181_$3 = byte1  (unsigned int)main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant divr16s::$6 = -divr16s::dividend#0
Constant main::vicSelectGfxBank1_toDd001_$0 = byte1 (unsigned int)main::vicSelectGfxBank1_gfx#0
Constant main::toD0181_$0 = main::toD0181_$7&$3fff
Constant main::toD0181_$3 = byte1 (unsigned int)main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantIdentification
Constant divr16s::dividendu#1 = (unsigned int)divr16s::$6
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [18] if(divr16s::dividend#0<0) goto divr16s::@1
Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero -divr16s::dividend#0 in 
Simplifying constant evaluating to zero (unsigned int)divr16s::$6 in 
Successful SSA optimization PassNSimplifyConstantZero
Eliminating unused constant divr16s::dividend#0
Eliminating unused constant divr16s::$6
Successful SSA optimization PassNEliminateUnusedVars
Constant right-side identified [42] main::vicSelectGfxBank1_toDd001_$1 = main::vicSelectGfxBank1_toDd001_$0 / $40
Constant right-side identified [45] main::toD0181_$1 = main::toD0181_$0 * 4
Constant right-side identified [47] main::toD0181_$4 = main::toD0181_$3 / 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::vicSelectGfxBank1_toDd001_$1 = main::vicSelectGfxBank1_toDd001_$0/$40
Constant main::toD0181_$1 = main::toD0181_$0*4
Constant main::toD0181_$4 = main::toD0181_$3/4
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [42] main::vicSelectGfxBank1_toDd001_return#0 = 3 ^ main::vicSelectGfxBank1_toDd001_$1
Constant right-side identified [44] main::toD0181_$2 = byte1  main::toD0181_$1
Constant right-side identified [45] main::toD0181_$5 = main::toD0181_$4 & $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::vicSelectGfxBank1_toDd001_return#0 = 3^main::vicSelectGfxBank1_toDd001_$1
Constant main::toD0181_$2 = byte1 main::toD0181_$1
Constant main::toD0181_$5 = main::toD0181_$4&$f
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [43] main::toD0181_return#0 = main::toD0181_$2 | main::toD0181_$5
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [17] divr16s::remu#1 = (unsigned int)divr16s::$7 keeping divr16s::remu#1
Inlining Noop Cast [22] divr16s::divisoru#1 = (unsigned int)divr16s::$8 keeping divr16s::divisoru#1
Inlining Noop Cast [67] point_init::abs16s1_return#0 = (unsigned int)point_init::abs16s1_$1 keeping point_init::abs16s1_return#0
Inlining Noop Cast [72] point_init::abs16s2_return#0 = (unsigned int)point_init::abs16s2_$1 keeping point_init::abs16s2_return#0
Inlining Noop Cast [125] bitmap_clear::bitmap#0 = (char *)bitmap_clear::$0 keeping bitmap_clear::bitmap#0
Inlining Noop Cast [136] bitmap_plot::plotter#0 = (char *)bitmap_plot::$0 keeping bitmap_plot::plotter#0
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [18] divr16s::remu#2 = (unsigned int)divr16s::rem#0 keeping divr16s::rem#0
Inlining Noop Cast [24] divr16s::divisoru#2 = (unsigned int)divr16s::divisor#0 keeping divr16s::divisor#0
Inlining Noop Cast [33] divr16s::return#0 = (int)divr16s::resultu#0 keeping divr16s::resultu#0
Inlining Noop Cast [59] point_init::$15 = (int)x_end[point_init::$11] keeping x_end[point_init::$11]
Inlining Noop Cast [60] point_init::$16 = (int)x_start[point_init::$11] keeping x_start[point_init::$11]
Inlining Noop Cast [68] point_init::abs16s1_return#1 = (unsigned int)point_init::x_diff#1 keeping point_init::x_diff#1
Inlining Noop Cast [73] point_init::abs16s2_return#1 = (unsigned int)point_init::y_diff#0 keeping point_init::y_diff#0
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [50] main::$10 = main::i#2 * SIZEOF_UNSIGNED_INT
Rewriting multiplication to use shift [58] point_init::$11 = point_init::point_idx#0 * SIZEOF_UNSIGNED_INT
Rewriting multiplication to use shift [77] point_init::$13 = point_init::point_idx#0 * SIZEOF_UNSIGNED_INT
Rewriting multiplication to use shift [78] point_init::$5 = x_start[point_init::$13] * $10
Rewriting multiplication to use shift [81] point_init::$6 = point_init::$19 * $10
Rewriting division to use shift [92] point_init::$10 = point_init::$9 / $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings divr16u::quotient#0
Inlining constant with var siblings divr16u::i#0
Inlining constant with var siblings divr16s::neg#0
Inlining constant with var siblings divr16s::neg#1
Inlining constant with var siblings divr16s::dividendu#2
Inlining constant with var siblings divr16s::dividendu#1
Inlining constant with var siblings main::i#0
Inlining constant with var siblings screen_fill::screen#0
Inlining constant with var siblings screen_fill::y#0
Inlining constant with var siblings screen_fill::x#0
Inlining constant with var siblings bitmap_init::bits#0
Inlining constant with var siblings bitmap_init::x#0
Inlining constant with var siblings bitmap_init::bits#2
Inlining constant with var siblings bitmap_init::y#0
Inlining constant with var siblings bitmap_clear::y#0
Inlining constant with var siblings bitmap_clear::x#0
Constant inlined main::toD0181_screen#0 = SCREEN
Constant inlined main::toD0181_gfx#0 = BITMAP
Constant inlined divr16u::i#0 = 0
Constant inlined divr16s::dividendu#1 = 0
Constant inlined divr16s::dividendu#2 = 0
Constant inlined bitmap_init::bits#0 = $80
Constant inlined bitmap_init::bits#2 = $80
Constant inlined divr16s::neg#1 = 1
Constant inlined divr16s::neg#0 = 0
Constant inlined divr16u::quotient#0 = 0
Constant inlined main::i#0 = 0
Constant inlined main::toD0181_$7 = (unsigned int)SCREEN
Constant inlined screen_fill::x#0 = 0
Constant inlined main::toD0181_$2 = byte1 (unsigned int)SCREEN&$3fff*4
Constant inlined bitmap_clear::x#0 = 0
Constant inlined main::toD0181_$1 = (unsigned int)SCREEN&$3fff*4
Constant inlined bitmap_clear::y#0 = 0
Constant inlined main::toD0181_$0 = (unsigned int)SCREEN&$3fff
Constant inlined main::vicSelectGfxBank1_toDd001_$0 = byte1 (unsigned int)SCREEN
Constant inlined main::toD0181_$5 = byte1 (unsigned int)BITMAP/4&$f
Constant inlined main::toD0181_$4 = byte1 (unsigned int)BITMAP/4
Constant inlined main::toD0181_$3 = byte1 (unsigned int)BITMAP
Constant inlined main::vicSelectGfxBank1_toDd001_$1 = byte1 (unsigned int)SCREEN/$40
Constant inlined screen_fill::screen#0 = SCREEN
Constant inlined main::vicSelectGfxBank1_gfx#0 = SCREEN
Constant inlined bitmap_init::y#0 = 0
Constant inlined screen_fill::y#0 = 0
Constant inlined bitmap_init::x#0 = 0
Constant inlined bitmap_init::bitmap#0 = BITMAP
Successful SSA optimization Pass2ConstantInlining
Identical Phi Values divr16s::dividendu#3 0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [66] point_init::$13 = point_init::point_idx#0 << 1
Successful SSA optimization Pass2DuplicateRValueIdentification
Constant divr16u::dividend#1 = 0
Successful SSA optimization Pass2ConstantIdentification
Eliminating unused constant SIZEOF_UNSIGNED_INT
Successful SSA optimization PassNEliminateUnusedVars
Inlining constant with var siblings divr16u::dividend#1
Constant inlined divr16u::dividend#1 = 0
Successful SSA optimization Pass2ConstantInlining
Alias point_init::$13 = point_init::$11 
Successful SSA optimization Pass2AliasElimination
Finalized unsigned number type (unsigned int) $100
Finalized unsigned number type (unsigned int) $100
Finalized unsigned number type (unsigned int) $100
Finalized unsigned number type (unsigned int) $100
Finalized unsigned number type (unsigned int) $100
Finalized unsigned number type (unsigned int) $100
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Added new block during phi lifting divr16u::@7(between divr16u::@3 and divr16u::@1)
Added new block during phi lifting divr16u::@8(between divr16u::@1 and divr16u::@2)
Added new block during phi lifting divr16u::@9(between divr16u::@2 and divr16u::@3)
Added new block during phi lifting main::@12(between main::@11 and main::@1)
Added new block during phi lifting screen_fill::@4(between screen_fill::@3 and screen_fill::@1)
Added new block during phi lifting screen_fill::@5(between screen_fill::@2 and screen_fill::@2)
Added new block during phi lifting bitmap_init::@8(between bitmap_init::@2 and bitmap_init::@1)
Added new block during phi lifting bitmap_init::@9(between bitmap_init::@1 and bitmap_init::@2)
Added new block during phi lifting bitmap_init::@10(between bitmap_init::@6 and bitmap_init::@5)
Added new block during phi lifting bitmap_init::@11(between bitmap_init::@5 and bitmap_init::@6)
Added new block during phi lifting bitmap_clear::@4(between bitmap_clear::@3 and bitmap_clear::@1)
Added new block during phi lifting bitmap_clear::@5(between bitmap_clear::@2 and bitmap_clear::@2)
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001_@return
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of bitmap_init
Adding NOP phi() at start of bitmap_init::@3
Adding NOP phi() at start of bitmap_init::@4
Adding NOP phi() at start of screen_fill
Adding NOP phi() at start of point_init::@6
Adding NOP phi() at start of divr16s
Adding NOP phi() at start of divr16u::@6
CALL GRAPH
Calls in [main] to bitmap_init:12 bitmap_clear:14 screen_fill:16 point_init:20 bitmap_plot:24 
Calls in [point_init] to divr16s:116 
Calls in [divr16s] to divr16u:143 

Created 29 initial phi equivalence classes
Coalesced [30] main::i#5 = main::i#1
Coalesced [50] bitmap_init::yoffs#7 = bitmap_init::yoffs#1
Coalesced [55] bitmap_init::y#5 = bitmap_init::y#1
Coalesced [56] bitmap_init::yoffs#5 = bitmap_init::yoffs#4
Coalesced (already) [57] bitmap_init::yoffs#6 = bitmap_init::yoffs#2
Coalesced [58] bitmap_init::bits#5 = bitmap_init::bits#4
Coalesced [59] bitmap_init::x#5 = bitmap_init::x#1
Coalesced [60] bitmap_init::bits#6 = bitmap_init::bits#1
Coalesced [64] bitmap_clear::bitmap#7 = bitmap_clear::bitmap#3
Coalesced [73] bitmap_clear::bitmap#6 = bitmap_clear::bitmap#1
Coalesced [74] bitmap_clear::y#5 = bitmap_clear::y#1
Coalesced (already) [75] bitmap_clear::bitmap#8 = bitmap_clear::bitmap#1
Coalesced [76] bitmap_clear::x#3 = bitmap_clear::x#1
Coalesced [79] screen_fill::screen#7 = screen_fill::screen#3
Coalesced [88] screen_fill::screen#6 = screen_fill::screen#1
Coalesced [89] screen_fill::y#5 = screen_fill::y#1
Coalesced (already) [90] screen_fill::screen#8 = screen_fill::screen#1
Coalesced [91] screen_fill::x#3 = screen_fill::x#1
Coalesced [139] divr16s::neg#10 = divr16s::neg#3
Coalesced [148] divr16s::return#7 = divr16s::return#1
Coalesced [155] divr16s::neg#9 = divr16s::neg#2
Coalesced [158] divr16u::rem#10 = divr16u::rem#3
Coalesced [165] divr16u::rem#13 = divr16u::rem#1
Coalesced [172] divr16u::rem#15 = divr16u::rem#2
Coalesced [173] divr16u::return#6 = divr16u::quotient#2
Coalesced [179] divr16u::rem#11 = divr16u::rem#9
Coalesced [180] divr16u::dividend#8 = divr16u::dividend#0
Coalesced [181] divr16u::quotient#9 = divr16u::return#0
Coalesced [182] divr16u::i#7 = divr16u::i#1
Coalesced [183] divr16u::rem#14 = divr16u::rem#5
Coalesced [184] divr16u::return#5 = divr16u::quotient#1
Coalesced [185] divr16u::rem#12 = divr16u::rem#0
Coalesced down to 21 phi equivalence classes
Culled Empty Block label main::vicSelectGfxBank1_toDd001_@return
Culled Empty Block label main::@5
Culled Empty Block label main::toD0181_@return
Culled Empty Block label main::@9
Culled Empty Block label main::@2
Culled Empty Block label main::@12
Culled Empty Block label bitmap_init::@3
Culled Empty Block label bitmap_init::@4
Culled Empty Block label bitmap_init::@10
Culled Empty Block label bitmap_init::@11
Culled Empty Block label bitmap_init::@8
Culled Empty Block label bitmap_clear::@4
Culled Empty Block label bitmap_clear::@5
Culled Empty Block label screen_fill::@4
Culled Empty Block label screen_fill::@5
Culled Empty Block label point_init::@6
Culled Empty Block label divr16u::@6
Culled Empty Block label divr16u::@7
Culled Empty Block label divr16u::@9
Culled Empty Block label divr16u::@8
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Renumbering block main::@6 to main::@4
Renumbering block main::@7 to main::@5
Renumbering block main::@8 to main::@6
Renumbering block main::@10 to main::@7
Renumbering block main::@11 to main::@8
Renumbering block point_init::@7 to point_init::@6
Renumbering block point_init::@8 to point_init::@7
Renumbering block bitmap_init::@5 to bitmap_init::@3
Renumbering block bitmap_init::@6 to bitmap_init::@4
Renumbering block bitmap_init::@7 to bitmap_init::@5
Renumbering block bitmap_init::@9 to bitmap_init::@6
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of bitmap_init
Adding NOP phi() at start of bitmap_init::@6
Adding NOP phi() at start of screen_fill
Adding NOP phi() at start of divr16s
Adding NOP phi() at start of divr16u

FINAL CONTROL FLOW GRAPH

void main()
main: scope:[main]  from
  asm { sei  }
  [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
  [2] *PROCPORT = PROCPORT_RAM_IO
  [3] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3
  to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main]  from main
  [4] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
  to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main]  from main::vicSelectGfxBank1
  [5] phi()
  to:main::vicSelectGfxBank1_@1
main::vicSelectGfxBank1_@1: scope:[main]  from main::vicSelectGfxBank1_toDd001
  [6] *((char *)CIA2) = main::vicSelectGfxBank1_toDd001_return#0
  to:main::toD0181
main::toD0181: scope:[main]  from main::vicSelectGfxBank1_@1
  [7] phi()
  to:main::@4
main::@4: scope:[main]  from main::toD0181
  [8] *D018 = main::toD0181_return#0
  [9] call bitmap_init
  to:main::@5
main::@5: scope:[main]  from main::@4
  [10] phi()
  [11] call bitmap_clear
  to:main::@6
main::@6: scope:[main]  from main::@5
  [12] phi()
  [13] call screen_fill
  to:main::@1
main::@1: scope:[main]  from main::@6 main::@8
  [14] main::i#2 = phi( main::@8/main::i#1, main::@6/0 )
  [15] point_init::point_idx#0 = main::i#2
  [16] call point_init
  to:main::@7
main::@7: scope:[main]  from main::@1
  [17] main::$10 = main::i#2 << 1
  [18] bitmap_plot::x#0 = x_start[main::$10]
  [19] bitmap_plot::y#0 = y_start[main::i#2]
  [20] call bitmap_plot
  to:main::@8
main::@8: scope:[main]  from main::@7
  [21] main::i#1 = ++ main::i#2
  [22] if(main::i#1!=SIZE-1+1) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@2 main::@3 main::@8
  [23] if(*RASTER!=$ff) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  [24] *BORDER_COLOR = ++ *BORDER_COLOR
  to:main::@2

void bitmap_init(char *bitmap)
bitmap_init: scope:[bitmap_init]  from main::@4
  [25] phi()
  to:bitmap_init::@1
bitmap_init::@1: scope:[bitmap_init]  from bitmap_init bitmap_init::@2
  [26] bitmap_init::x#2 = phi( bitmap_init/0, bitmap_init::@2/bitmap_init::x#1 )
  [26] bitmap_init::bits#3 = phi( bitmap_init/$80, bitmap_init::@2/bitmap_init::bits#4 )
  [27] bitmap_plot_bit[bitmap_init::x#2] = bitmap_init::bits#3
  [28] bitmap_init::bits#1 = bitmap_init::bits#3 >> 1
  [29] if(bitmap_init::bits#1!=0) goto bitmap_init::@6
  to:bitmap_init::@2
bitmap_init::@6: scope:[bitmap_init]  from bitmap_init::@1
  [30] phi()
  to:bitmap_init::@2
bitmap_init::@2: scope:[bitmap_init]  from bitmap_init::@1 bitmap_init::@6
  [31] bitmap_init::bits#4 = phi( bitmap_init::@6/bitmap_init::bits#1, bitmap_init::@1/$80 )
  [32] bitmap_init::x#1 = ++ bitmap_init::x#2
  [33] if(bitmap_init::x#1!=0) goto bitmap_init::@1
  to:bitmap_init::@3
bitmap_init::@3: scope:[bitmap_init]  from bitmap_init::@2 bitmap_init::@4
  [34] bitmap_init::yoffs#2 = phi( bitmap_init::@2/BITMAP, bitmap_init::@4/bitmap_init::yoffs#4 )
  [34] bitmap_init::y#2 = phi( bitmap_init::@2/0, bitmap_init::@4/bitmap_init::y#1 )
  [35] bitmap_init::$7 = bitmap_init::y#2 & 7
  [36] bitmap_init::$4 = byte0  bitmap_init::yoffs#2
  [37] bitmap_init::$5 = bitmap_init::$7 | bitmap_init::$4
  [38] bitmap_plot_ylo[bitmap_init::y#2] = bitmap_init::$5
  [39] bitmap_init::$6 = byte1  bitmap_init::yoffs#2
  [40] bitmap_plot_yhi[bitmap_init::y#2] = bitmap_init::$6
  [41] if(bitmap_init::$7!=7) goto bitmap_init::@4
  to:bitmap_init::@5
bitmap_init::@5: scope:[bitmap_init]  from bitmap_init::@3
  [42] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8
  to:bitmap_init::@4
bitmap_init::@4: scope:[bitmap_init]  from bitmap_init::@3 bitmap_init::@5
  [43] bitmap_init::yoffs#4 = phi( bitmap_init::@3/bitmap_init::yoffs#2, bitmap_init::@5/bitmap_init::yoffs#1 )
  [44] bitmap_init::y#1 = ++ bitmap_init::y#2
  [45] if(bitmap_init::y#1!=0) goto bitmap_init::@3
  to:bitmap_init::@return
bitmap_init::@return: scope:[bitmap_init]  from bitmap_init::@4
  [46] return 
  to:@return

void bitmap_clear()
bitmap_clear: scope:[bitmap_clear]  from main::@5
  [47] bitmap_clear::bitmap#0 = *bitmap_plot_yhi w= *bitmap_plot_ylo
  [48] bitmap_clear::bitmap#5 = (char *)bitmap_clear::bitmap#0
  to:bitmap_clear::@1
bitmap_clear::@1: scope:[bitmap_clear]  from bitmap_clear bitmap_clear::@3
  [49] bitmap_clear::y#4 = phi( bitmap_clear/0, bitmap_clear::@3/bitmap_clear::y#1 )
  [49] bitmap_clear::bitmap#3 = phi( bitmap_clear/bitmap_clear::bitmap#5, bitmap_clear::@3/bitmap_clear::bitmap#1 )
  to:bitmap_clear::@2
bitmap_clear::@2: scope:[bitmap_clear]  from bitmap_clear::@1 bitmap_clear::@2
  [50] bitmap_clear::x#2 = phi( bitmap_clear::@1/0, bitmap_clear::@2/bitmap_clear::x#1 )
  [50] bitmap_clear::bitmap#2 = phi( bitmap_clear::@1/bitmap_clear::bitmap#3, bitmap_clear::@2/bitmap_clear::bitmap#1 )
  [51] *bitmap_clear::bitmap#2 = 0
  [52] bitmap_clear::bitmap#1 = ++ bitmap_clear::bitmap#2
  [53] bitmap_clear::x#1 = ++ bitmap_clear::x#2
  [54] if(bitmap_clear::x#1!=$c8) goto bitmap_clear::@2
  to:bitmap_clear::@3
bitmap_clear::@3: scope:[bitmap_clear]  from bitmap_clear::@2
  [55] bitmap_clear::y#1 = ++ bitmap_clear::y#4
  [56] if(bitmap_clear::y#1!=$28) goto bitmap_clear::@1
  to:bitmap_clear::@return
bitmap_clear::@return: scope:[bitmap_clear]  from bitmap_clear::@3
  [57] return 
  to:@return

void screen_fill(char *screen , char ch)
screen_fill: scope:[screen_fill]  from main::@6
  [58] phi()
  to:screen_fill::@1
screen_fill::@1: scope:[screen_fill]  from screen_fill screen_fill::@3
  [59] screen_fill::y#4 = phi( screen_fill/0, screen_fill::@3/screen_fill::y#1 )
  [59] screen_fill::screen#3 = phi( screen_fill/SCREEN, screen_fill::@3/screen_fill::screen#1 )
  to:screen_fill::@2
screen_fill::@2: scope:[screen_fill]  from screen_fill::@1 screen_fill::@2
  [60] screen_fill::x#2 = phi( screen_fill::@1/0, screen_fill::@2/screen_fill::x#1 )
  [60] screen_fill::screen#2 = phi( screen_fill::@1/screen_fill::screen#3, screen_fill::@2/screen_fill::screen#1 )
  [61] *screen_fill::screen#2 = screen_fill::ch#0
  [62] screen_fill::screen#1 = ++ screen_fill::screen#2
  [63] screen_fill::x#1 = ++ screen_fill::x#2
  [64] if(screen_fill::x#1!=$28) goto screen_fill::@2
  to:screen_fill::@3
screen_fill::@3: scope:[screen_fill]  from screen_fill::@2
  [65] screen_fill::y#1 = ++ screen_fill::y#4
  [66] if(screen_fill::y#1!=$19) goto screen_fill::@1
  to:screen_fill::@return
screen_fill::@return: scope:[screen_fill]  from screen_fill::@3
  [67] return 
  to:@return

void point_init(char point_idx)
point_init: scope:[point_init]  from main::@1
  [68] point_init::$13 = point_init::point_idx#0 << 1
  [69] point_init::x_diff#1 = (int)x_end[point_init::$13] - (int)x_start[point_init::$13]
  [70] point_init::$17 = (int)y_end[point_init::point_idx#0]
  [71] point_init::$18 = (int)y_start[point_init::point_idx#0]
  [72] point_init::y_diff#0 = point_init::$17 - point_init::$18
  to:point_init::abs16s1
point_init::abs16s1: scope:[point_init]  from point_init
  [73] if(point_init::x_diff#1<0) goto point_init::abs16s1_@1
  to:point_init::abs16s1_@3
point_init::abs16s1_@3: scope:[point_init]  from point_init::abs16s1
  [74] point_init::abs16s1_return#6 = (unsigned int)point_init::x_diff#1
  to:point_init::abs16s1_@return
point_init::abs16s1_@return: scope:[point_init]  from point_init::abs16s1_@1 point_init::abs16s1_@3
  [75] point_init::abs16s1_return#2 = phi( point_init::abs16s1_@1/point_init::abs16s1_return#5, point_init::abs16s1_@3/point_init::abs16s1_return#6 )
  to:point_init::abs16s2
point_init::abs16s2: scope:[point_init]  from point_init::abs16s1_@return
  [76] if(point_init::y_diff#0<0) goto point_init::abs16s2_@1
  to:point_init::abs16s2_@3
point_init::abs16s2_@3: scope:[point_init]  from point_init::abs16s2
  [77] point_init::abs16s2_return#6 = (unsigned int)point_init::y_diff#0
  to:point_init::abs16s2_@return
point_init::abs16s2_@return: scope:[point_init]  from point_init::abs16s2_@1 point_init::abs16s2_@3
  [78] point_init::abs16s2_return#2 = phi( point_init::abs16s2_@1/point_init::abs16s2_return#5, point_init::abs16s2_@3/point_init::abs16s2_return#6 )
  to:point_init::@6
point_init::@6: scope:[point_init]  from point_init::abs16s2_@return
  [79] if(point_init::abs16s1_return#2>point_init::abs16s2_return#2) goto point_init::@1
  to:point_init::@2
point_init::@2: scope:[point_init]  from point_init::@6 point_init::@7
  [80] point_init::$5 = x_start[point_init::$13] << 4
  [81] x_cur[point_init::$13] = point_init::$5
  [82] point_init::$19 = (unsigned int)y_start[point_init::point_idx#0]
  [83] point_init::$6 = point_init::$19 << 4
  [84] y_cur[point_init::$13] = point_init::$6
  [85] delay[point_init::point_idx#0] = DELAY
  to:point_init::@return
point_init::@return: scope:[point_init]  from point_init::@2
  [86] return 
  to:@return
point_init::@1: scope:[point_init]  from point_init::@6
  [87] if(point_init::x_diff#1<0) goto point_init::@4
  to:point_init::@3
point_init::@3: scope:[point_init]  from point_init::@1
  [88] x_add[point_init::point_idx#0] = $10
  to:point_init::@5
point_init::@5: scope:[point_init]  from point_init::@3 point_init::@4
  [89] divr16s::divisor#0 = point_init::x_diff#1
  [90] divr16s::rem#0 = point_init::y_diff#0
  [91] call divr16s
  [92] divr16s::return#3 = divr16s::return#2
  to:point_init::@7
point_init::@7: scope:[point_init]  from point_init::@5
  [93] point_init::x_stepf#0 = divr16s::return#3
  [94] point_init::$9 = byte1  point_init::x_stepf#0
  [95] point_init::$10 = point_init::$9 >> 4
  [96] y_add[point_init::point_idx#0] = (signed char)point_init::$10
  to:point_init::@2
point_init::@4: scope:[point_init]  from point_init::@1
  [97] x_add[point_init::point_idx#0] = -$10
  to:point_init::@5
point_init::abs16s2_@1: scope:[point_init]  from point_init::abs16s2
  [98] point_init::abs16s2_return#0 = - point_init::y_diff#0
  [99] point_init::abs16s2_return#5 = (unsigned int)point_init::abs16s2_return#0
  to:point_init::abs16s2_@return
point_init::abs16s1_@1: scope:[point_init]  from point_init::abs16s1
  [100] point_init::abs16s1_return#0 = - point_init::x_diff#1
  [101] point_init::abs16s1_return#5 = (unsigned int)point_init::abs16s1_return#0
  to:point_init::abs16s1_@return

void bitmap_plot(unsigned int x , char y)
bitmap_plot: scope:[bitmap_plot]  from main::@7
  [102] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bitmap_plot_ylo[bitmap_plot::y#0]
  [103] bitmap_plot::$1 = bitmap_plot::x#0 & $fff8
  [104] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1
  [105] bitmap_plot::$2 = byte0  bitmap_plot::x#0
  [106] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2]
  to:bitmap_plot::@return
bitmap_plot::@return: scope:[bitmap_plot]  from bitmap_plot
  [107] return 
  to:@return

int divr16s(int dividend , int divisor , int rem)
divr16s: scope:[divr16s]  from point_init::@5
  [108] phi()
  to:divr16s::@10
divr16s::@10: scope:[divr16s]  from divr16s
  [109] if(divr16s::rem#0<0) goto divr16s::@1
  to:divr16s::@6
divr16s::@6: scope:[divr16s]  from divr16s::@10
  [110] divr16s::remu#8 = (unsigned int)divr16s::rem#0
  to:divr16s::@2
divr16s::@2: scope:[divr16s]  from divr16s::@1 divr16s::@6
  [111] divr16s::remu#3 = phi( divr16s::@1/divr16s::remu#7, divr16s::@6/divr16s::remu#8 )
  [111] divr16s::neg#3 = phi( divr16s::@1/1, divr16s::@6/0 )
  [112] if(divr16s::divisor#0<0) goto divr16s::@3
  to:divr16s::@7
divr16s::@7: scope:[divr16s]  from divr16s::@2
  [113] divr16s::divisoru#5 = (unsigned int)divr16s::divisor#0
  to:divr16s::@4
divr16s::@4: scope:[divr16s]  from divr16s::@3 divr16s::@7
  [114] divr16s::neg#4 = phi( divr16s::@3/divr16s::neg#2, divr16s::@7/divr16s::neg#3 )
  [114] divr16s::divisoru#3 = phi( divr16s::@3/divr16s::divisoru#4, divr16s::@7/divr16s::divisoru#5 )
  [115] divr16u::divisor#0 = divr16s::divisoru#3
  [116] divr16u::rem#3 = divr16s::remu#3
  [117] call divr16u
  [118] divr16u::return#2 = divr16u::return#0
  to:divr16s::@9
divr16s::@9: scope:[divr16s]  from divr16s::@4
  [119] divr16s::resultu#0 = divr16u::return#2
  [120] if(divr16s::neg#4==0) goto divr16s::@5
  to:divr16s::@8
divr16s::@8: scope:[divr16s]  from divr16s::@9
  [121] divr16s::return#1 = - (int)divr16s::resultu#0
  to:divr16s::@return
divr16s::@return: scope:[divr16s]  from divr16s::@5 divr16s::@8
  [122] divr16s::return#2 = phi( divr16s::@5/divr16s::return#6, divr16s::@8/divr16s::return#1 )
  [123] return 
  to:@return
divr16s::@5: scope:[divr16s]  from divr16s::@9
  [124] divr16s::return#6 = (int)divr16s::resultu#0
  to:divr16s::@return
divr16s::@3: scope:[divr16s]  from divr16s::@2
  [125] divr16s::divisoru#1 = - divr16s::divisor#0
  [126] divr16s::neg#2 = divr16s::neg#3 ^ 1
  [127] divr16s::divisoru#4 = (unsigned int)divr16s::divisoru#1
  to:divr16s::@4
divr16s::@1: scope:[divr16s]  from divr16s::@10
  [128] divr16s::remu#1 = - divr16s::rem#0
  [129] divr16s::remu#7 = (unsigned int)divr16s::remu#1
  to:divr16s::@2

unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
divr16u: scope:[divr16u]  from divr16s::@4
  [130] phi()
  to:divr16u::@1
divr16u::@1: scope:[divr16u]  from divr16u divr16u::@3
  [131] divr16u::i#2 = phi( divr16u/0, divr16u::@3/divr16u::i#1 )
  [131] divr16u::quotient#3 = phi( divr16u/0, divr16u::@3/divr16u::return#0 )
  [131] divr16u::dividend#2 = phi( divr16u/0, divr16u::@3/divr16u::dividend#0 )
  [131] divr16u::rem#4 = phi( divr16u/divr16u::rem#3, divr16u::@3/divr16u::rem#9 )
  [132] divr16u::rem#0 = divr16u::rem#4 << 1
  [133] divr16u::$1 = byte1  divr16u::dividend#2
  [134] divr16u::$2 = divr16u::$1 & $80
  [135] if(divr16u::$2==0) goto divr16u::@2
  to:divr16u::@4
divr16u::@4: scope:[divr16u]  from divr16u::@1
  [136] divr16u::rem#1 = divr16u::rem#0 | 1
  to:divr16u::@2
divr16u::@2: scope:[divr16u]  from divr16u::@1 divr16u::@4
  [137] divr16u::rem#5 = phi( divr16u::@1/divr16u::rem#0, divr16u::@4/divr16u::rem#1 )
  [138] divr16u::dividend#0 = divr16u::dividend#2 << 1
  [139] divr16u::quotient#1 = divr16u::quotient#3 << 1
  [140] if(divr16u::rem#5<divr16u::divisor#0) goto divr16u::@3
  to:divr16u::@5
divr16u::@5: scope:[divr16u]  from divr16u::@2
  [141] divr16u::quotient#2 = ++ divr16u::quotient#1
  [142] divr16u::rem#2 = divr16u::rem#5 - divr16u::divisor#0
  to:divr16u::@3
divr16u::@3: scope:[divr16u]  from divr16u::@2 divr16u::@5
  [143] divr16u::return#0 = phi( divr16u::@2/divr16u::quotient#1, divr16u::@5/divr16u::quotient#2 )
  [143] divr16u::rem#9 = phi( divr16u::@2/divr16u::rem#5, divr16u::@5/divr16u::rem#2 )
  [144] divr16u::i#1 = ++ divr16u::i#2
  [145] if(divr16u::i#1!=$10) goto divr16u::@1
  to:divr16u::@return
divr16u::@return: scope:[divr16u]  from divr16u::@3
  [146] return 
  to:@return


VARIABLE REGISTER WEIGHTS
void bitmap_clear()
char *bitmap_clear::bitmap
unsigned int bitmap_clear::bitmap#0 // 11.0
char *bitmap_clear::bitmap#1 // 420.59999999999997
char *bitmap_clear::bitmap#2 // 1552.0
char *bitmap_clear::bitmap#3 // 213.0
char *bitmap_clear::bitmap#5 // 22.0
char bitmap_clear::x
char bitmap_clear::x#1 // 1501.5
char bitmap_clear::x#2 // 667.3333333333334
char bitmap_clear::y
char bitmap_clear::y#1 // 151.5
char bitmap_clear::y#4 // 33.666666666666664
void bitmap_init(char *bitmap)
char bitmap_init::$4 // 202.0
char bitmap_init::$5 // 202.0
char bitmap_init::$6 // 202.0
char bitmap_init::$7 // 50.5
char *bitmap_init::bitmap
char bitmap_init::bits
char bitmap_init::bits#1 // 101.0
char bitmap_init::bits#3 // 151.5
char bitmap_init::bits#4 // 67.33333333333333
char bitmap_init::x
char bitmap_init::x#1 // 151.5
char bitmap_init::x#2 // 50.5
char bitmap_init::y
char bitmap_init::y#1 // 151.5
char bitmap_init::y#2 // 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // 202.0
char *bitmap_init::yoffs#2 // 63.125
char *bitmap_init::yoffs#4 // 101.0
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // 202.0
char bitmap_plot::$2 // 202.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // 50.5
char *bitmap_plot::plotter#1 // 151.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#0 // 42.599999999999994
char bitmap_plot::y
char bitmap_plot::y#0 // 213.0
int divr16s(int dividend , int divisor , int rem)
int divr16s::dividend
unsigned int divr16s::dividendu
int divr16s::divisor
int divr16s::divisor#0 // 233.66666666666669
unsigned int divr16s::divisoru
int divr16s::divisoru#1 // 500.5
unsigned int divr16s::divisoru#3 // 3003.0
unsigned int divr16s::divisoru#4 // 2002.0
unsigned int divr16s::divisoru#5 // 2002.0
char divr16s::neg
char divr16s::neg#2 // 1001.0
char divr16s::neg#3 // 500.5
char divr16s::neg#4 // 500.5
int divr16s::rem
int divr16s::rem#0 // 701.0
unsigned int divr16s::remu
int divr16s::remu#1 // 1001.0
unsigned int divr16s::remu#3 // 375.375
unsigned int divr16s::remu#7 // 2002.0
unsigned int divr16s::remu#8 // 2002.0
unsigned int divr16s::resultu
unsigned int divr16s::resultu#0 // 500.5
int divr16s::return
int divr16s::return#1 // 2002.0
int divr16s::return#2 // 701.0
int divr16s::return#3 // 202.0
int divr16s::return#6 // 2002.0
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
char divr16u::$1 // 2000002.0
char divr16u::$2 // 2000002.0
unsigned int divr16u::dividend
unsigned int divr16u::dividend#0 // 250000.25
unsigned int divr16u::dividend#2 // 428571.85714285716
unsigned int divr16u::divisor
unsigned int divr16u::divisor#0 // 111166.83333333333
char divr16u::i
char divr16u::i#1 // 1500001.5
char divr16u::i#2 // 153846.3076923077
unsigned int divr16u::quotient
unsigned int divr16u::quotient#1 // 1500001.5
unsigned int divr16u::quotient#2 // 1000001.0
unsigned int divr16u::quotient#3 // 250000.25
unsigned int divr16u::rem
unsigned int divr16u::rem#0 // 750000.75
unsigned int divr16u::rem#1 // 2000002.0
unsigned int divr16u::rem#2 // 2000002.0
unsigned int divr16u::rem#3 // 5501.0
unsigned int divr16u::rem#4 // 2010003.0
unsigned int divr16u::rem#5 // 1000001.0
unsigned int divr16u::rem#9 // 1000001.0
unsigned int divr16u::return
unsigned int divr16u::return#0 // 600200.8
unsigned int divr16u::return#2 // 2002.0
void main()
char main::$10 // 22.0
char main::i
char main::i#1 // 16.5
char main::i#2 // 7.857142857142857
char *main::toD0181_gfx
char main::toD0181_return
char *main::toD0181_screen
char *main::vicSelectGfxBank1_gfx
char *main::vicSelectGfxBank1_toDd001_gfx
char main::vicSelectGfxBank1_toDd001_return
void point_init(char point_idx)
char point_init::$10 // 101.0
char point_init::$13 // 13.03225806451613
int point_init::$17 // 101.0
int point_init::$18 // 202.0
unsigned int point_init::$19 // 202.0
unsigned int point_init::$5 // 202.0
unsigned int point_init::$6 // 202.0
char point_init::$9 // 202.0
unsigned int point_init::abs16s1_return
int point_init::abs16s1_return#0 // 101.0
unsigned int point_init::abs16s1_return#2 // 50.5
unsigned int point_init::abs16s1_return#5 // 202.0
unsigned int point_init::abs16s1_return#6 // 202.0
int point_init::abs16s1_w
unsigned int point_init::abs16s2_return
int point_init::abs16s2_return#0 // 101.0
unsigned int point_init::abs16s2_return#2 // 303.0
unsigned int point_init::abs16s2_return#5 // 202.0
unsigned int point_init::abs16s2_return#6 // 202.0
int point_init::abs16s2_w
char point_init::point_idx
char point_init::point_idx#0 // 15.636363636363637
int point_init::x_diff
int point_init::x_diff#1 // 28.055555555555554
int point_init::x_stepf
int point_init::x_stepf#0 // 202.0
int point_init::y_diff
int point_init::y_diff#0 // 25.25
void screen_fill(char *screen , char ch)
char screen_fill::ch
char *screen_fill::screen
char *screen_fill::screen#1 // 420.59999999999997
char *screen_fill::screen#2 // 1552.0
char *screen_fill::screen#3 // 202.0
char screen_fill::x
char screen_fill::x#1 // 1501.5
char screen_fill::x#2 // 667.3333333333334
char screen_fill::y
char screen_fill::y#1 // 151.5
char screen_fill::y#4 // 33.666666666666664

Initial phi equivalence classes
[ main::i#2 main::i#1 ]
[ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
[ bitmap_init::x#2 bitmap_init::x#1 ]
[ bitmap_init::y#2 bitmap_init::y#1 ]
[ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
[ bitmap_clear::y#4 bitmap_clear::y#1 ]
[ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ]
[ bitmap_clear::x#2 bitmap_clear::x#1 ]
[ screen_fill::y#4 screen_fill::y#1 ]
[ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ]
[ screen_fill::x#2 screen_fill::x#1 ]
[ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ]
[ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ]
[ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ]
[ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ]
[ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ]
[ divr16s::return#2 divr16s::return#6 divr16s::return#1 ]
[ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
[ divr16u::dividend#2 divr16u::dividend#0 ]
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
Added variable point_init::point_idx#0 to live range equivalence class [ point_init::point_idx#0 ]
Added variable main::$10 to live range equivalence class [ main::$10 ]
Added variable bitmap_plot::x#0 to live range equivalence class [ bitmap_plot::x#0 ]
Added variable bitmap_plot::y#0 to live range equivalence class [ bitmap_plot::y#0 ]
Added variable bitmap_init::$7 to live range equivalence class [ bitmap_init::$7 ]
Added variable bitmap_init::$4 to live range equivalence class [ bitmap_init::$4 ]
Added variable bitmap_init::$5 to live range equivalence class [ bitmap_init::$5 ]
Added variable bitmap_init::$6 to live range equivalence class [ bitmap_init::$6 ]
Added variable bitmap_clear::bitmap#0 to live range equivalence class [ bitmap_clear::bitmap#0 ]
Added variable point_init::$13 to live range equivalence class [ point_init::$13 ]
Added variable point_init::x_diff#1 to live range equivalence class [ point_init::x_diff#1 ]
Added variable point_init::$17 to live range equivalence class [ point_init::$17 ]
Added variable point_init::$18 to live range equivalence class [ point_init::$18 ]
Added variable point_init::y_diff#0 to live range equivalence class [ point_init::y_diff#0 ]
Added variable point_init::$5 to live range equivalence class [ point_init::$5 ]
Added variable point_init::$19 to live range equivalence class [ point_init::$19 ]
Added variable point_init::$6 to live range equivalence class [ point_init::$6 ]
Added variable divr16s::divisor#0 to live range equivalence class [ divr16s::divisor#0 ]
Added variable divr16s::rem#0 to live range equivalence class [ divr16s::rem#0 ]
Added variable divr16s::return#3 to live range equivalence class [ divr16s::return#3 ]
Added variable point_init::x_stepf#0 to live range equivalence class [ point_init::x_stepf#0 ]
Added variable point_init::$9 to live range equivalence class [ point_init::$9 ]
Added variable point_init::$10 to live range equivalence class [ point_init::$10 ]
Added variable point_init::abs16s2_return#0 to live range equivalence class [ point_init::abs16s2_return#0 ]
Added variable point_init::abs16s1_return#0 to live range equivalence class [ point_init::abs16s1_return#0 ]
Added variable bitmap_plot::plotter#0 to live range equivalence class [ bitmap_plot::plotter#0 ]
Added variable bitmap_plot::$1 to live range equivalence class [ bitmap_plot::$1 ]
Added variable bitmap_plot::plotter#1 to live range equivalence class [ bitmap_plot::plotter#1 ]
Added variable bitmap_plot::$2 to live range equivalence class [ bitmap_plot::$2 ]
Added variable divr16u::divisor#0 to live range equivalence class [ divr16u::divisor#0 ]
Added variable divr16u::return#2 to live range equivalence class [ divr16u::return#2 ]
Added variable divr16s::resultu#0 to live range equivalence class [ divr16s::resultu#0 ]
Added variable divr16s::divisoru#1 to live range equivalence class [ divr16s::divisoru#1 ]
Added variable divr16s::remu#1 to live range equivalence class [ divr16s::remu#1 ]
Added variable divr16u::$1 to live range equivalence class [ divr16u::$1 ]
Added variable divr16u::$2 to live range equivalence class [ divr16u::$2 ]
Complete equivalence classes
[ main::i#2 main::i#1 ]
[ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
[ bitmap_init::x#2 bitmap_init::x#1 ]
[ bitmap_init::y#2 bitmap_init::y#1 ]
[ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
[ bitmap_clear::y#4 bitmap_clear::y#1 ]
[ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ]
[ bitmap_clear::x#2 bitmap_clear::x#1 ]
[ screen_fill::y#4 screen_fill::y#1 ]
[ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ]
[ screen_fill::x#2 screen_fill::x#1 ]
[ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ]
[ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ]
[ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ]
[ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ]
[ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ]
[ divr16s::return#2 divr16s::return#6 divr16s::return#1 ]
[ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
[ divr16u::dividend#2 divr16u::dividend#0 ]
[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
[ divr16u::i#2 divr16u::i#1 ]
[ point_init::point_idx#0 ]
[ main::$10 ]
[ bitmap_plot::x#0 ]
[ bitmap_plot::y#0 ]
[ bitmap_init::$7 ]
[ bitmap_init::$4 ]
[ bitmap_init::$5 ]
[ bitmap_init::$6 ]
[ bitmap_clear::bitmap#0 ]
[ point_init::$13 ]
[ point_init::x_diff#1 ]
[ point_init::$17 ]
[ point_init::$18 ]
[ point_init::y_diff#0 ]
[ point_init::$5 ]
[ point_init::$19 ]
[ point_init::$6 ]
[ divr16s::divisor#0 ]
[ divr16s::rem#0 ]
[ divr16s::return#3 ]
[ point_init::x_stepf#0 ]
[ point_init::$9 ]
[ point_init::$10 ]
[ point_init::abs16s2_return#0 ]
[ point_init::abs16s1_return#0 ]
[ bitmap_plot::plotter#0 ]
[ bitmap_plot::$1 ]
[ bitmap_plot::plotter#1 ]
[ bitmap_plot::$2 ]
[ divr16u::divisor#0 ]
[ divr16u::return#2 ]
[ divr16s::resultu#0 ]
[ divr16s::divisoru#1 ]
[ divr16s::remu#1 ]
[ divr16u::$1 ]
[ divr16u::$2 ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
Allocated zp[1]:4 [ bitmap_init::x#2 bitmap_init::x#1 ]
Allocated zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ]
Allocated zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Allocated zp[2]:9 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ]
Allocated zp[1]:11 [ bitmap_clear::x#2 bitmap_clear::x#1 ]
Allocated zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ]
Allocated zp[2]:13 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ]
Allocated zp[1]:15 [ screen_fill::x#2 screen_fill::x#1 ]
Allocated zp[2]:16 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ]
Allocated zp[2]:18 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ]
Allocated zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ]
Allocated zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ]
Allocated zp[1]:24 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ]
Allocated zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 ]
Allocated zp[2]:27 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
Allocated zp[2]:29 [ divr16u::dividend#2 divr16u::dividend#0 ]
Allocated zp[2]:31 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
Allocated zp[1]:33 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp[1]:34 [ point_init::point_idx#0 ]
Allocated zp[1]:35 [ main::$10 ]
Allocated zp[2]:36 [ bitmap_plot::x#0 ]
Allocated zp[1]:38 [ bitmap_plot::y#0 ]
Allocated zp[1]:39 [ bitmap_init::$7 ]
Allocated zp[1]:40 [ bitmap_init::$4 ]
Allocated zp[1]:41 [ bitmap_init::$5 ]
Allocated zp[1]:42 [ bitmap_init::$6 ]
Allocated zp[2]:43 [ bitmap_clear::bitmap#0 ]
Allocated zp[1]:45 [ point_init::$13 ]
Allocated zp[2]:46 [ point_init::x_diff#1 ]
Allocated zp[2]:48 [ point_init::$17 ]
Allocated zp[2]:50 [ point_init::$18 ]
Allocated zp[2]:52 [ point_init::y_diff#0 ]
Allocated zp[2]:54 [ point_init::$5 ]
Allocated zp[2]:56 [ point_init::$19 ]
Allocated zp[2]:58 [ point_init::$6 ]
Allocated zp[2]:60 [ divr16s::divisor#0 ]
Allocated zp[2]:62 [ divr16s::rem#0 ]
Allocated zp[2]:64 [ divr16s::return#3 ]
Allocated zp[2]:66 [ point_init::x_stepf#0 ]
Allocated zp[1]:68 [ point_init::$9 ]
Allocated zp[1]:69 [ point_init::$10 ]
Allocated zp[2]:70 [ point_init::abs16s2_return#0 ]
Allocated zp[2]:72 [ point_init::abs16s1_return#0 ]
Allocated zp[2]:74 [ bitmap_plot::plotter#0 ]
Allocated zp[2]:76 [ bitmap_plot::$1 ]
Allocated zp[2]:78 [ bitmap_plot::plotter#1 ]
Allocated zp[1]:80 [ bitmap_plot::$2 ]
Allocated zp[2]:81 [ divr16u::divisor#0 ]
Allocated zp[2]:83 [ divr16u::return#2 ]
Allocated zp[2]:85 [ divr16s::resultu#0 ]
Allocated zp[2]:87 [ divr16s::divisoru#1 ]
Allocated zp[2]:89 [ divr16s::remu#1 ]
Allocated zp[1]:91 [ divr16u::$1 ]
Allocated zp[1]:92 [ divr16u::$2 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp[1]:40 [ bitmap_init::$4 ] has ALU potential.
Statement [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [2] *PROCPORT = PROCPORT_RAM_IO [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [3] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [4] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [6] *((char *)CIA2) = main::vicSelectGfxBank1_toDd001_return#0 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [8] *D018 = main::toD0181_return#0 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [17] main::$10 = main::i#2 << 1 [ main::i#2 main::$10 ] (  [ main::i#2 main::$10 ] { }  ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Statement [18] bitmap_plot::x#0 = x_start[main::$10] [ main::i#2 bitmap_plot::x#0 ] (  [ main::i#2 bitmap_plot::x#0 ] { }  ) always clobbers reg byte a 
Statement [23] if(*RASTER!=$ff) goto main::@2 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [42] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( bitmap_init:9 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] { }  ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ]
Statement [47] bitmap_clear::bitmap#0 = *bitmap_plot_yhi w= *bitmap_plot_ylo [ bitmap_clear::bitmap#0 ] ( bitmap_clear:11 [ bitmap_clear::bitmap#0 ] { }  ) always clobbers reg byte a 
Statement [48] bitmap_clear::bitmap#5 = (char *)bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( bitmap_clear:11 [ bitmap_clear::bitmap#5 ] { }  ) always clobbers reg byte a 
Statement [51] *bitmap_clear::bitmap#2 = 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( bitmap_clear:11 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] { }  ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:11 [ bitmap_clear::x#2 bitmap_clear::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:11 [ bitmap_clear::x#2 bitmap_clear::x#1 ]
Statement [61] *screen_fill::screen#2 = screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( screen_fill:13 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] { }  ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:15 [ screen_fill::x#2 screen_fill::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:15 [ screen_fill::x#2 screen_fill::x#1 ]
Statement [68] point_init::$13 = point_init::point_idx#0 << 1 [ point_init::point_idx#0 point_init::$13 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:34 [ point_init::point_idx#0 ]
Statement [69] point_init::x_diff#1 = (int)x_end[point_init::$13] - (int)x_start[point_init::$13] [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:45 [ point_init::$13 ]
Statement [70] point_init::$17 = (int)y_end[point_init::point_idx#0] [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [71] point_init::$18 = (int)y_start[point_init::point_idx#0] [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 point_init::$18 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 point_init::$18 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [72] point_init::y_diff#0 = point_init::$17 - point_init::$18 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [73] if(point_init::x_diff#1<0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [74] point_init::abs16s1_return#6 = (unsigned int)point_init::x_diff#1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [76] if(point_init::y_diff#0<0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [77] point_init::abs16s2_return#6 = (unsigned int)point_init::y_diff#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [79] if(point_init::abs16s1_return#2>point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [80] point_init::$5 = x_start[point_init::$13] << 4 [ point_init::point_idx#0 point_init::$13 point_init::$5 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$5 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [81] x_cur[point_init::$13] = point_init::$5 [ point_init::point_idx#0 point_init::$13 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [82] point_init::$19 = (unsigned int)y_start[point_init::point_idx#0] [ point_init::point_idx#0 point_init::$13 point_init::$19 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$19 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [83] point_init::$6 = point_init::$19 << 4 [ point_init::point_idx#0 point_init::$13 point_init::$6 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$6 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [84] y_cur[point_init::$13] = point_init::$6 [ point_init::point_idx#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [85] delay[point_init::point_idx#0] = DELAY [ ] ( point_init:16 [ main::i#2 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [87] if(point_init::x_diff#1<0) goto point_init::@4 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [88] x_add[point_init::point_idx#0] = $10 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [89] divr16s::divisor#0 = point_init::x_diff#1 [ point_init::point_idx#0 point_init::$13 point_init::y_diff#0 divr16s::divisor#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::y_diff#0 divr16s::divisor#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [90] divr16s::rem#0 = point_init::y_diff#0 [ point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::rem#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::rem#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [92] divr16s::return#3 = divr16s::return#2 [ point_init::point_idx#0 point_init::$13 divr16s::return#3 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::return#3 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [93] point_init::x_stepf#0 = divr16s::return#3 [ point_init::point_idx#0 point_init::$13 point_init::x_stepf#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_stepf#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [95] point_init::$10 = point_init::$9 >> 4 [ point_init::point_idx#0 point_init::$13 point_init::$10 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$10 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [97] x_add[point_init::point_idx#0] = -$10 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [98] point_init::abs16s2_return#0 = - point_init::y_diff#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [99] point_init::abs16s2_return#5 = (unsigned int)point_init::abs16s2_return#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [100] point_init::abs16s1_return#0 = - point_init::x_diff#1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [101] point_init::abs16s1_return#5 = (unsigned int)point_init::abs16s1_return#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [102] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bitmap_plot_ylo[bitmap_plot::y#0] [ bitmap_plot::x#0 bitmap_plot::plotter#0 ] ( bitmap_plot:20 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 ] { }  ) always clobbers reg byte a 
Statement [103] bitmap_plot::$1 = bitmap_plot::x#0 & $fff8 [ bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_plot:20 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] { }  ) always clobbers reg byte a 
Statement [104] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( bitmap_plot:20 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] { }  ) always clobbers reg byte a 
Statement [106] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( bitmap_plot:20 [ main::i#2 ] { }  ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Statement [109] if(divr16s::rem#0<0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::rem#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [110] divr16s::remu#8 = (unsigned int)divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::remu#8 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [112] if(divr16s::divisor#0<0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::remu#3 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::neg#3 divr16s::remu#3 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:24 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ]
Statement [113] divr16s::divisoru#5 = (unsigned int)divr16s::divisor#0 [ divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#5 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#5 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [115] divr16u::divisor#0 = divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::divisor#0 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::remu#3 divr16s::neg#4 divr16u::divisor#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [116] divr16u::rem#3 = divr16s::remu#3 [ divr16s::neg#4 divr16u::divisor#0 divr16u::rem#3 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#3 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [118] divr16u::return#2 = divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::return#2 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [119] divr16s::resultu#0 = divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16s::resultu#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [121] divr16s::return#1 = - (int)divr16s::resultu#0 [ divr16s::return#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::return#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [124] divr16s::return#6 = (int)divr16s::resultu#0 [ divr16s::return#6 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::return#6 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [125] divr16s::divisoru#1 = - divr16s::divisor#0 [ divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [126] divr16s::neg#2 = divr16s::neg#3 ^ 1 [ divr16s::remu#3 divr16s::neg#2 divr16s::divisoru#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::remu#3 divr16s::neg#2 divr16s::divisoru#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [127] divr16s::divisoru#4 = (unsigned int)divr16s::divisoru#1 [ divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [128] divr16s::remu#1 = - divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::remu#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [129] divr16s::remu#7 = (unsigned int)divr16s::remu#1 [ divr16s::divisor#0 divr16s::remu#7 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::remu#7 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [136] divr16u::rem#1 = divr16u::rem#0 | 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( point_init:16::divr16s:91::divr16u:117 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:33 [ divr16u::i#2 divr16u::i#1 ]
Statement [140] if(divr16u::rem#5<divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( point_init:16::divr16s:91::divr16u:117 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [142] divr16u::rem#2 = divr16u::rem#5 - divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( point_init:16::divr16s:91::divr16u:117 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [2] *PROCPORT = PROCPORT_RAM_IO [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [3] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [4] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [6] *((char *)CIA2) = main::vicSelectGfxBank1_toDd001_return#0 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [8] *D018 = main::toD0181_return#0 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [17] main::$10 = main::i#2 << 1 [ main::i#2 main::$10 ] (  [ main::i#2 main::$10 ] { }  ) always clobbers reg byte a 
Statement [18] bitmap_plot::x#0 = x_start[main::$10] [ main::i#2 bitmap_plot::x#0 ] (  [ main::i#2 bitmap_plot::x#0 ] { }  ) always clobbers reg byte a 
Statement [23] if(*RASTER!=$ff) goto main::@2 [ ] (  [ ] { }  ) always clobbers reg byte a 
Statement [35] bitmap_init::$7 = bitmap_init::y#2 & 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( bitmap_init:9 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] { }  ) always clobbers reg byte a 
Statement [42] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( bitmap_init:9 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] { }  ) always clobbers reg byte a 
Statement [47] bitmap_clear::bitmap#0 = *bitmap_plot_yhi w= *bitmap_plot_ylo [ bitmap_clear::bitmap#0 ] ( bitmap_clear:11 [ bitmap_clear::bitmap#0 ] { }  ) always clobbers reg byte a 
Statement [48] bitmap_clear::bitmap#5 = (char *)bitmap_clear::bitmap#0 [ bitmap_clear::bitmap#5 ] ( bitmap_clear:11 [ bitmap_clear::bitmap#5 ] { }  ) always clobbers reg byte a 
Statement [51] *bitmap_clear::bitmap#2 = 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( bitmap_clear:11 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] { }  ) always clobbers reg byte a reg byte y 
Statement [61] *screen_fill::screen#2 = screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( screen_fill:13 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] { }  ) always clobbers reg byte a reg byte y 
Statement [68] point_init::$13 = point_init::point_idx#0 << 1 [ point_init::point_idx#0 point_init::$13 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [69] point_init::x_diff#1 = (int)x_end[point_init::$13] - (int)x_start[point_init::$13] [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [70] point_init::$17 = (int)y_end[point_init::point_idx#0] [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [71] point_init::$18 = (int)y_start[point_init::point_idx#0] [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 point_init::$18 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::$17 point_init::$18 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [72] point_init::y_diff#0 = point_init::$17 - point_init::$18 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [73] if(point_init::x_diff#1<0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [74] point_init::abs16s1_return#6 = (unsigned int)point_init::x_diff#1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [76] if(point_init::y_diff#0<0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [77] point_init::abs16s2_return#6 = (unsigned int)point_init::y_diff#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [79] if(point_init::abs16s1_return#2>point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [80] point_init::$5 = x_start[point_init::$13] << 4 [ point_init::point_idx#0 point_init::$13 point_init::$5 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$5 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [81] x_cur[point_init::$13] = point_init::$5 [ point_init::point_idx#0 point_init::$13 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [82] point_init::$19 = (unsigned int)y_start[point_init::point_idx#0] [ point_init::point_idx#0 point_init::$13 point_init::$19 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$19 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [83] point_init::$6 = point_init::$19 << 4 [ point_init::point_idx#0 point_init::$13 point_init::$6 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$6 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [84] y_cur[point_init::$13] = point_init::$6 [ point_init::point_idx#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [85] delay[point_init::point_idx#0] = DELAY [ ] ( point_init:16 [ main::i#2 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [87] if(point_init::x_diff#1<0) goto point_init::@4 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [88] x_add[point_init::point_idx#0] = $10 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [89] divr16s::divisor#0 = point_init::x_diff#1 [ point_init::point_idx#0 point_init::$13 point_init::y_diff#0 divr16s::divisor#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::y_diff#0 divr16s::divisor#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [90] divr16s::rem#0 = point_init::y_diff#0 [ point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::rem#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::rem#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [92] divr16s::return#3 = divr16s::return#2 [ point_init::point_idx#0 point_init::$13 divr16s::return#3 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::return#3 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [93] point_init::x_stepf#0 = divr16s::return#3 [ point_init::point_idx#0 point_init::$13 point_init::x_stepf#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_stepf#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [95] point_init::$10 = point_init::$9 >> 4 [ point_init::point_idx#0 point_init::$13 point_init::$10 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::$10 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [97] x_add[point_init::point_idx#0] = -$10 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [98] point_init::abs16s2_return#0 = - point_init::y_diff#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [99] point_init::abs16s2_return#5 = (unsigned int)point_init::abs16s2_return#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [100] point_init::abs16s1_return#0 = - point_init::x_diff#1 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#0 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#0 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [101] point_init::abs16s1_return#5 = (unsigned int)point_init::abs16s1_return#0 [ point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( point_init:16 [ main::i#2 point_init::point_idx#0 point_init::$13 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] { { point_init::point_idx#0 = main::i#2 } }  ) always clobbers reg byte a 
Statement [102] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bitmap_plot_ylo[bitmap_plot::y#0] [ bitmap_plot::x#0 bitmap_plot::plotter#0 ] ( bitmap_plot:20 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 ] { }  ) always clobbers reg byte a 
Statement [103] bitmap_plot::$1 = bitmap_plot::x#0 & $fff8 [ bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] ( bitmap_plot:20 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#0 bitmap_plot::$1 ] { }  ) always clobbers reg byte a 
Statement [104] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( bitmap_plot:20 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] { }  ) always clobbers reg byte a 
Statement [106] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] [ ] ( bitmap_plot:20 [ main::i#2 ] { }  ) always clobbers reg byte a reg byte y 
Statement [109] if(divr16s::rem#0<0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::rem#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [110] divr16s::remu#8 = (unsigned int)divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::remu#8 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [112] if(divr16s::divisor#0<0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::remu#3 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::neg#3 divr16s::remu#3 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [113] divr16s::divisoru#5 = (unsigned int)divr16s::divisor#0 [ divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#5 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#5 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [115] divr16u::divisor#0 = divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::divisor#0 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::remu#3 divr16s::neg#4 divr16u::divisor#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [116] divr16u::rem#3 = divr16s::remu#3 [ divr16s::neg#4 divr16u::divisor#0 divr16u::rem#3 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#3 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [118] divr16u::return#2 = divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::return#2 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [119] divr16s::resultu#0 = divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16s::resultu#0 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [121] divr16s::return#1 = - (int)divr16s::resultu#0 [ divr16s::return#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::return#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [124] divr16s::return#6 = (int)divr16s::resultu#0 [ divr16s::return#6 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::return#6 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [125] divr16s::divisoru#1 = - divr16s::divisor#0 [ divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#3 divr16s::remu#3 divr16s::divisoru#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [126] divr16s::neg#2 = divr16s::neg#3 ^ 1 [ divr16s::remu#3 divr16s::neg#2 divr16s::divisoru#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::remu#3 divr16s::neg#2 divr16s::divisoru#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [127] divr16s::divisoru#4 = (unsigned int)divr16s::divisoru#1 [ divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [128] divr16s::remu#1 = - divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#1 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::remu#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [129] divr16s::remu#7 = (unsigned int)divr16s::remu#1 [ divr16s::divisor#0 divr16s::remu#7 ] ( point_init:16::divr16s:91 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::divisor#0 divr16s::remu#7 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } }  ) always clobbers reg byte a 
Statement [136] divr16u::rem#1 = divr16u::rem#0 | 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( point_init:16::divr16s:91::divr16u:117 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [140] if(divr16u::rem#5<divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( point_init:16::divr16s:91::divr16u:117 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Statement [142] divr16u::rem#2 = divr16u::rem#5 - divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( point_init:16::divr16s:91::divr16u:117 [ main::i#2 point_init::point_idx#0 point_init::$13 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { point_init::point_idx#0 = main::i#2 } { divr16s::divisor#0 = point_init::x_diff#1 } { divr16s::rem#0 = point_init::y_diff#0 } { divr16s::return#2 = divr16s::return#3 } { divr16u::divisor#0 = divr16s::divisoru#3 } { divr16u::rem#3 = divr16s::remu#3 } { divr16u::return#0 = divr16u::return#2 } }  ) always clobbers reg byte a 
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , 
Potential registers zp[1]:3 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:4 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:5 , reg byte x , reg byte y , 
Potential registers zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:6 , 
Potential registers zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ] : zp[1]:8 , reg byte x , 
Potential registers zp[2]:9 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] : zp[2]:9 , 
Potential registers zp[1]:11 [ bitmap_clear::x#2 bitmap_clear::x#1 ] : zp[1]:11 , reg byte x , 
Potential registers zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ] : zp[1]:12 , reg byte x , 
Potential registers zp[2]:13 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] : zp[2]:13 , 
Potential registers zp[1]:15 [ screen_fill::x#2 screen_fill::x#1 ] : zp[1]:15 , reg byte x , 
Potential registers zp[2]:16 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] : zp[2]:16 , 
Potential registers zp[2]:18 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] : zp[2]:18 , 
Potential registers zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] : zp[2]:20 , 
Potential registers zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] : zp[2]:22 , 
Potential registers zp[1]:24 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] : zp[1]:24 , reg byte x , reg byte y , 
Potential registers zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 ] : zp[2]:25 , 
Potential registers zp[2]:27 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:27 , 
Potential registers zp[2]:29 [ divr16u::dividend#2 divr16u::dividend#0 ] : zp[2]:29 , 
Potential registers zp[2]:31 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:31 , 
Potential registers zp[1]:33 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:33 , reg byte x , reg byte y , 
Potential registers zp[1]:34 [ point_init::point_idx#0 ] : zp[1]:34 , reg byte x , reg byte y , 
Potential registers zp[1]:35 [ main::$10 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:36 [ bitmap_plot::x#0 ] : zp[2]:36 , 
Potential registers zp[1]:38 [ bitmap_plot::y#0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:39 [ bitmap_init::$7 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:40 [ bitmap_init::$4 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , reg byte alu , 
Potential registers zp[1]:41 [ bitmap_init::$5 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:42 [ bitmap_init::$6 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:43 [ bitmap_clear::bitmap#0 ] : zp[2]:43 , 
Potential registers zp[1]:45 [ point_init::$13 ] : zp[1]:45 , reg byte x , reg byte y , 
Potential registers zp[2]:46 [ point_init::x_diff#1 ] : zp[2]:46 , 
Potential registers zp[2]:48 [ point_init::$17 ] : zp[2]:48 , 
Potential registers zp[2]:50 [ point_init::$18 ] : zp[2]:50 , 
Potential registers zp[2]:52 [ point_init::y_diff#0 ] : zp[2]:52 , 
Potential registers zp[2]:54 [ point_init::$5 ] : zp[2]:54 , 
Potential registers zp[2]:56 [ point_init::$19 ] : zp[2]:56 , 
Potential registers zp[2]:58 [ point_init::$6 ] : zp[2]:58 , 
Potential registers zp[2]:60 [ divr16s::divisor#0 ] : zp[2]:60 , 
Potential registers zp[2]:62 [ divr16s::rem#0 ] : zp[2]:62 , 
Potential registers zp[2]:64 [ divr16s::return#3 ] : zp[2]:64 , 
Potential registers zp[2]:66 [ point_init::x_stepf#0 ] : zp[2]:66 , 
Potential registers zp[1]:68 [ point_init::$9 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:69 [ point_init::$10 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:70 [ point_init::abs16s2_return#0 ] : zp[2]:70 , 
Potential registers zp[2]:72 [ point_init::abs16s1_return#0 ] : zp[2]:72 , 
Potential registers zp[2]:74 [ bitmap_plot::plotter#0 ] : zp[2]:74 , 
Potential registers zp[2]:76 [ bitmap_plot::$1 ] : zp[2]:76 , 
Potential registers zp[2]:78 [ bitmap_plot::plotter#1 ] : zp[2]:78 , 
Potential registers zp[1]:80 [ bitmap_plot::$2 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:81 [ divr16u::divisor#0 ] : zp[2]:81 , 
Potential registers zp[2]:83 [ divr16u::return#2 ] : zp[2]:83 , 
Potential registers zp[2]:85 [ divr16s::resultu#0 ] : zp[2]:85 , 
Potential registers zp[2]:87 [ divr16s::divisoru#1 ] : zp[2]:87 , 
Potential registers zp[2]:89 [ divr16s::remu#1 ] : zp[2]:89 , 
Potential registers zp[1]:91 [ divr16u::$1 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:92 [ divr16u::$2 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [divr16u] 8,765,510.75: zp[2]:27 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 3,350,203.55: zp[2]:31 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 2,000,002: zp[1]:91 [ divr16u::$1 ] 2,000,002: zp[1]:92 [ divr16u::$2 ] 1,653,847.81: zp[1]:33 [ divr16u::i#2 divr16u::i#1 ] 678,572.11: zp[2]:29 [ divr16u::dividend#2 divr16u::dividend#0 ] 111,166.83: zp[2]:81 [ divr16u::divisor#0 ] 2,002: zp[2]:83 [ divr16u::return#2 ] 
Uplift Scope [divr16s] 7,007: zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] 4,705: zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 ] 4,379.38: zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] 2,002: zp[1]:24 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] 1,001: zp[2]:89 [ divr16s::remu#1 ] 701: zp[2]:62 [ divr16s::rem#0 ] 500.5: zp[2]:85 [ divr16s::resultu#0 ] 500.5: zp[2]:87 [ divr16s::divisoru#1 ] 233.67: zp[2]:60 [ divr16s::divisor#0 ] 202: zp[2]:64 [ divr16s::return#3 ] 
Uplift Scope [bitmap_clear] 2,207.6: zp[2]:9 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] 2,168.83: zp[1]:11 [ bitmap_clear::x#2 bitmap_clear::x#1 ] 185.17: zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 11: zp[2]:43 [ bitmap_clear::bitmap#0 ] 
Uplift Scope [screen_fill] 2,174.6: zp[2]:13 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] 2,168.83: zp[1]:15 [ screen_fill::x#2 screen_fill::x#1 ] 185.17: zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ] 
Uplift Scope [point_init] 707: zp[2]:18 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] 454.5: zp[2]:16 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] 202: zp[2]:50 [ point_init::$18 ] 202: zp[2]:54 [ point_init::$5 ] 202: zp[2]:56 [ point_init::$19 ] 202: zp[2]:58 [ point_init::$6 ] 202: zp[2]:66 [ point_init::x_stepf#0 ] 202: zp[1]:68 [ point_init::$9 ] 101: zp[2]:48 [ point_init::$17 ] 101: zp[1]:69 [ point_init::$10 ] 101: zp[2]:70 [ point_init::abs16s2_return#0 ] 101: zp[2]:72 [ point_init::abs16s1_return#0 ] 28.06: zp[2]:46 [ point_init::x_diff#1 ] 25.25: zp[2]:52 [ point_init::y_diff#0 ] 15.64: zp[1]:34 [ point_init::point_idx#0 ] 13.03: zp[1]:45 [ point_init::$13 ] 
Uplift Scope [bitmap_init] 366.12: zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 319.83: zp[1]:3 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 202: zp[1]:4 [ bitmap_init::x#2 bitmap_init::x#1 ] 202: zp[1]:5 [ bitmap_init::y#2 bitmap_init::y#1 ] 202: zp[1]:40 [ bitmap_init::$4 ] 202: zp[1]:41 [ bitmap_init::$5 ] 202: zp[1]:42 [ bitmap_init::$6 ] 50.5: zp[1]:39 [ bitmap_init::$7 ] 
Uplift Scope [bitmap_plot] 213: zp[1]:38 [ bitmap_plot::y#0 ] 202: zp[2]:76 [ bitmap_plot::$1 ] 202: zp[1]:80 [ bitmap_plot::$2 ] 151.5: zp[2]:78 [ bitmap_plot::plotter#1 ] 50.5: zp[2]:74 [ bitmap_plot::plotter#0 ] 42.6: zp[2]:36 [ bitmap_plot::x#0 ] 
Uplift Scope [main] 24.36: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:35 [ main::$10 ] 
Uplift Scope [MOS6526_CIA] 
Uplift Scope [MOS6569_VICII] 
Uplift Scope [MOS6581_SID] 
Uplift Scope [] 

Uplifting [divr16u] best 30347 combination zp[2]:27 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:31 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:29 [ divr16u::dividend#2 divr16u::dividend#0 ] zp[2]:81 [ divr16u::divisor#0 ] zp[2]:83 [ divr16u::return#2 ] 
Uplifting [divr16s] best 30338 combination zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 ] zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] reg byte y [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] zp[2]:89 [ divr16s::remu#1 ] zp[2]:62 [ divr16s::rem#0 ] zp[2]:85 [ divr16s::resultu#0 ] zp[2]:87 [ divr16s::divisoru#1 ] zp[2]:60 [ divr16s::divisor#0 ] zp[2]:64 [ divr16s::return#3 ] 
Uplifting [bitmap_clear] best 29438 combination zp[2]:9 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp[2]:43 [ bitmap_clear::bitmap#0 ] 
Uplifting [screen_fill] best 28538 combination zp[2]:13 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] reg byte x [ screen_fill::x#2 screen_fill::x#1 ] zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ] 
Uplifting [point_init] best 28526 combination zp[2]:18 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] zp[2]:16 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] zp[2]:50 [ point_init::$18 ] zp[2]:54 [ point_init::$5 ] zp[2]:56 [ point_init::$19 ] zp[2]:58 [ point_init::$6 ] zp[2]:66 [ point_init::x_stepf#0 ] reg byte a [ point_init::$9 ] zp[2]:48 [ point_init::$17 ] reg byte a [ point_init::$10 ] zp[2]:70 [ point_init::abs16s2_return#0 ] zp[2]:72 [ point_init::abs16s1_return#0 ] zp[2]:46 [ point_init::x_diff#1 ] zp[2]:52 [ point_init::y_diff#0 ] zp[1]:34 [ point_init::point_idx#0 ] zp[1]:45 [ point_init::$13 ] 
Limited combination testing to 100 combinations of 144 possible.
Uplifting [bitmap_init] best 28076 combination zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:41 [ bitmap_init::$5 ] zp[1]:42 [ bitmap_init::$6 ] zp[1]:39 [ bitmap_init::$7 ] 
Limited combination testing to 100 combinations of 15360 possible.
Uplifting [bitmap_plot] best 28037 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:76 [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::$2 ] zp[2]:78 [ bitmap_plot::plotter#1 ] zp[2]:74 [ bitmap_plot::plotter#0 ] zp[2]:36 [ bitmap_plot::x#0 ] 
Uplifting [main] best 27997 combination zp[1]:2 [ main::i#2 main::i#1 ] reg byte a [ main::$10 ] 
Uplifting [MOS6526_CIA] best 27997 combination 
Uplifting [MOS6569_VICII] best 27997 combination 
Uplifting [MOS6581_SID] best 27997 combination 
Uplifting [] best 27997 combination 
Attempting to uplift remaining variables inzp[1]:41 [ bitmap_init::$5 ]
Uplifting [bitmap_init] best 27937 combination reg byte a [ bitmap_init::$5 ] 
Attempting to uplift remaining variables inzp[1]:42 [ bitmap_init::$6 ]
Uplifting [bitmap_init] best 27877 combination reg byte a [ bitmap_init::$6 ] 
Attempting to uplift remaining variables inzp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Uplifting [bitmap_clear] best 27877 combination zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 
Attempting to uplift remaining variables inzp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ]
Uplifting [screen_fill] best 27877 combination zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ] 
Attempting to uplift remaining variables inzp[1]:39 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 27877 combination zp[1]:39 [ bitmap_init::$7 ] 
Attempting to uplift remaining variables inzp[1]:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 27877 combination zp[1]:2 [ main::i#2 main::i#1 ] 
Attempting to uplift remaining variables inzp[1]:34 [ point_init::point_idx#0 ]
Uplifting [point_init] best 27877 combination zp[1]:34 [ point_init::point_idx#0 ] 
Attempting to uplift remaining variables inzp[1]:45 [ point_init::$13 ]
Uplifting [point_init] best 27877 combination zp[1]:45 [ point_init::$13 ] 
Coalescing zero page register [ zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 ] ] with [ zp[2]:85 [ divr16s::resultu#0 ] ] - score: 2
Coalescing zero page register [ zp[1]:2 [ main::i#2 main::i#1 ] ] with [ zp[1]:34 [ point_init::point_idx#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] ] with [ zp[2]:43 [ bitmap_clear::bitmap#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:16 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] ] with [ zp[2]:72 [ point_init::abs16s1_return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:18 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] ] with [ zp[2]:70 [ point_init::abs16s2_return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] ] with [ zp[2]:27 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:62 [ divr16s::rem#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 ] ] with [ zp[2]:89 [ divr16s::remu#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] ] with [ zp[2]:60 [ divr16s::divisor#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 ] ] with [ zp[2]:81 [ divr16u::divisor#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 ] ] with [ zp[2]:87 [ divr16s::divisoru#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 divr16s::resultu#0 ] ] with [ zp[2]:64 [ divr16s::return#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:31 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:83 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:48 [ point_init::$17 ] ] with [ zp[2]:52 [ point_init::y_diff#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:56 [ point_init::$19 ] ] with [ zp[2]:58 [ point_init::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:74 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:78 [ bitmap_plot::plotter#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::remu#1 ] ] with [ zp[2]:48 [ point_init::$17 point_init::y_diff#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::divisoru#1 ] ] with [ zp[2]:46 [ point_init::x_diff#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 divr16s::resultu#0 divr16s::return#3 ] ] with [ zp[2]:31 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:25 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:66 [ point_init::x_stepf#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 ] ] with [ zp[2]:6 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 ] ] with [ zp[1]:8 [ bitmap_clear::y#4 bitmap_clear::y#1 ] ]
Coalescing zero page register [ zp[2]:16 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_return#0 ] ] with [ zp[2]:13 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] ]
Coalescing zero page register [ zp[2]:36 [ bitmap_plot::x#0 ] ] with [ zp[2]:18 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_return#0 ] ]
Coalescing zero page register [ zp[1]:45 [ point_init::$13 ] ] with [ zp[1]:39 [ bitmap_init::$7 ] ]
Coalescing zero page register [ zp[2]:50 [ point_init::$18 ] ] with [ zp[2]:29 [ divr16u::dividend#2 divr16u::dividend#0 ] ]
Coalescing zero page register [ zp[2]:74 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:20 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::remu#1 point_init::$17 point_init::y_diff#0 ] ]
Coalescing zero page register [ zp[2]:76 [ bitmap_plot::$1 ] ] with [ zp[2]:22 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::divisoru#1 point_init::x_diff#1 ] ]
Coalescing zero page register [ zp[2]:16 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_return#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] ] with [ zp[2]:9 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ]
Coalescing zero page register [ zp[1]:45 [ point_init::$13 bitmap_init::$7 ] ] with [ zp[1]:12 [ screen_fill::y#4 screen_fill::y#1 bitmap_clear::y#4 bitmap_clear::y#1 ] ]
Allocated (was zp[2]:16) zp[2]:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_return#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
Allocated (was zp[2]:25) zp[2]:5 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ]
Allocated (was zp[2]:36) zp[2]:7 [ bitmap_plot::x#0 point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_return#0 ]
Allocated (was zp[1]:45) zp[1]:9 [ point_init::$13 bitmap_init::$7 screen_fill::y#4 screen_fill::y#1 bitmap_clear::y#4 bitmap_clear::y#1 ]
Allocated (was zp[2]:50) zp[2]:10 [ point_init::$18 divr16u::dividend#2 divr16u::dividend#0 ]
Allocated (was zp[2]:54) zp[2]:12 [ point_init::$5 ]
Allocated (was zp[2]:56) zp[2]:14 [ point_init::$19 point_init::$6 ]
Allocated (was zp[2]:74) zp[2]:16 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::remu#1 point_init::$17 point_init::y_diff#0 ]
Allocated (was zp[2]:76) zp[2]:18 [ bitmap_plot::$1 divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::divisoru#1 point_init::x_diff#1 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Animated lines drawn on a single color bitmap
/// @file
/// Commodore 64 Registers and Constants
/// @file
/// The MOS 6526 Complex Interface Adapter (CIA)
///
/// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
  // Upstart
  // Commodore 64 PRG executable file
.file [name="line-anim.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(main)
  // Global Constants & labels
  /// $D011 Control Register #1  Bit#5: BMM Turn Bitmap Mode on/off
  .const VICII_BMM = $20
  /// $D011 Control Register #1  Bit#4: DEN Switch VIC-II output on/off
  .const VICII_DEN = $10
  /// $D011 Control Register #1  Bit#3: RSEL Switch betweem 25 or 24 visible rows
  ///          RSEL|  Display window height   | First line  | Last line
  ///          ----+--------------------------+-------------+----------
  ///            0 | 24 text lines/192 pixels |   55 ($37)  | 246 ($f6)
  ///            1 | 25 text lines/200 pixels |   51 ($33)  | 250 ($fa)
  .const VICII_RSEL = 8
  /// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  /// RAM in 0xA000, 0xE000 I/O in 0xD000
  .const PROCPORT_RAM_IO = 5
  // The number of points
  .const SIZE = 4
  // The delay between pixels
  .const DELAY = 8
  .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2
  /// $D012 RASTER Raster counter
  .label RASTER = $d012
  /// $D020 Border Color
  .label BORDER_COLOR = $d020
  /// $D011 Control Register #1
  /// @see #VICII_CONTROL1
  .label D011 = $d011
  /// $D018 VIC-II base addresses
  // @see #VICII_MEMORY
  .label D018 = $d018
  /// Processor port data direction register
  .label PROCPORT_DDR = 0
  /// Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  /// The CIA#2: Serial bus, RS-232, VIC memory bank
  .label CIA2 = $dd00
  .label BITMAP = $a000
  .label SCREEN = $8800
.segment Code
  // main
main: {
    .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
    .label i = 2
    // asm { sei  }
    // Disable normal interrupt
    sei
    // [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // [2] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // [3] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 -- _deref_pbuc1=vbuc2 
    lda #VICII_BMM|VICII_DEN|VICII_RSEL|3
    sta D011
    jmp vicSelectGfxBank1
    // main::vicSelectGfxBank1
  vicSelectGfxBank1:
    // [4] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR
    // [5] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001]
  vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
    jmp vicSelectGfxBank1_toDd001
    // main::vicSelectGfxBank1_toDd001
  vicSelectGfxBank1_toDd001:
    jmp vicSelectGfxBank1___b1
    // main::vicSelectGfxBank1_@1
  vicSelectGfxBank1___b1:
    // [6] *((char *)CIA2) = main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank1_toDd001_return
    sta CIA2
    // [7] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181]
  toD0181_from_vicSelectGfxBank1___b1:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp __b4
    // main::@4
  __b4:
    // [8] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [9] call bitmap_init
    // [25] phi from main::@4 to bitmap_init [phi:main::@4->bitmap_init]
  bitmap_init_from___b4:
    jsr bitmap_init
    // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
  __b5_from___b4:
    jmp __b5
    // main::@5
  __b5:
    // [11] call bitmap_clear
    jsr bitmap_clear
    // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
  __b6_from___b5:
    jmp __b6
    // main::@6
  __b6:
    // [13] call screen_fill
    // [58] phi from main::@6 to screen_fill [phi:main::@6->screen_fill]
  screen_fill_from___b6:
    jsr screen_fill
    // [14] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
  __b1_from___b6:
    // [14] phi main::i#2 = 0 [phi:main::@6->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // [14] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
  __b1_from___b8:
    // [14] phi main::i#2 = main::i#1 [phi:main::@8->main::@1#0] -- register_copy 
    jmp __b1
    // main::@1
  __b1:
    // [15] point_init::point_idx#0 = main::i#2
    // [16] call point_init
    jsr point_init
    jmp __b7
    // main::@7
  __b7:
    // [17] main::$10 = main::i#2 << 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [18] bitmap_plot::x#0 = x_start[main::$10] -- vwuz1=pwuc1_derefidx_vbuaa 
    tay
    lda x_start,y
    sta.z bitmap_plot.x
    lda x_start+1,y
    sta.z bitmap_plot.x+1
    // [19] bitmap_plot::y#0 = y_start[main::i#2] -- vbuxx=pbuc1_derefidx_vbuz1 
    ldy.z i
    ldx y_start,y
    // [20] call bitmap_plot
    jsr bitmap_plot
    jmp __b8
    // main::@8
  __b8:
    // [21] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [22] if(main::i#1!=SIZE-1+1) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #SIZE-1+1
    cmp.z i
    bne __b1_from___b8
    jmp __b2
    // main::@2
  __b2:
    // [23] if(*RASTER!=$ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    jmp __b3
    // main::@3
  __b3:
    // [24] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDER_COLOR
    jmp __b2
}
  // bitmap_init
// void bitmap_init(char *bitmap)
bitmap_init: {
    .label __7 = 9
    .label yoffs = 3
    // [26] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
  __b1_from_bitmap_init:
    // [26] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [26] phi bitmap_init::bits#3 = $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 
    lda #$80
    jmp __b1
    // [26] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1]
  __b1_from___b2:
    // [26] phi bitmap_init::x#2 = bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy 
    // [26] phi bitmap_init::bits#3 = bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy 
    jmp __b1
    // bitmap_init::@1
  __b1:
    // [27] bitmap_plot_bit[bitmap_init::x#2] = bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta bitmap_plot_bit,x
    // [28] bitmap_init::bits#1 = bitmap_init::bits#3 >> 1 -- vbuaa=vbuaa_ror_1 
    lsr
    // [29] if(bitmap_init::bits#1!=0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne __b6_from___b1
    // [31] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2]
  __b2_from___b1:
    // [31] phi bitmap_init::bits#4 = $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 
    lda #$80
    jmp __b2
    // [30] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6]
  __b6_from___b1:
    jmp __b6
    // bitmap_init::@6
  __b6:
    // [31] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2]
  __b2_from___b6:
    // [31] phi bitmap_init::bits#4 = bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy 
    jmp __b2
    // bitmap_init::@2
  __b2:
    // [32] bitmap_init::x#1 = ++ bitmap_init::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [33] if(bitmap_init::x#1!=0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne __b1_from___b2
    // [34] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3]
  __b3_from___b2:
    // [34] phi bitmap_init::yoffs#2 = BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 
    lda #<BITMAP
    sta.z yoffs
    lda #>BITMAP
    sta.z yoffs+1
    // [34] phi bitmap_init::y#2 = 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 
    ldx #0
    jmp __b3
    // [34] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3]
  __b3_from___b4:
    // [34] phi bitmap_init::yoffs#2 = bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy 
    // [34] phi bitmap_init::y#2 = bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy 
    jmp __b3
    // bitmap_init::@3
  __b3:
    // [35] bitmap_init::$7 = bitmap_init::y#2 & 7 -- vbuz1=vbuxx_band_vbuc1 
    lda #7
    sax.z __7
    // [36] bitmap_init::$4 = byte0  bitmap_init::yoffs#2 -- vbuaa=_byte0_pbuz1 
    lda.z yoffs
    // [37] bitmap_init::$5 = bitmap_init::$7 | bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa 
    ora.z __7
    // [38] bitmap_plot_ylo[bitmap_init::y#2] = bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta bitmap_plot_ylo,x
    // [39] bitmap_init::$6 = byte1  bitmap_init::yoffs#2 -- vbuaa=_byte1_pbuz1 
    lda.z yoffs+1
    // [40] bitmap_plot_yhi[bitmap_init::y#2] = bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta bitmap_plot_yhi,x
    // [41] if(bitmap_init::$7!=7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 
    lda #7
    cmp.z __7
    bne __b4_from___b3
    jmp __b5
    // bitmap_init::@5
  __b5:
    // [42] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 -- pbuz1=pbuz1_plus_vwuc1 
    lda.z yoffs
    clc
    adc #<$28*8
    sta.z yoffs
    lda.z yoffs+1
    adc #>$28*8
    sta.z yoffs+1
    // [43] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4]
  __b4_from___b3:
  __b4_from___b5:
    // [43] phi bitmap_init::yoffs#4 = bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy 
    jmp __b4
    // bitmap_init::@4
  __b4:
    // [44] bitmap_init::y#1 = ++ bitmap_init::y#2 -- vbuxx=_inc_vbuxx 
    inx
    // [45] if(bitmap_init::y#1!=0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne __b3_from___b4
    jmp __breturn
    // bitmap_init::@return
  __breturn:
    // [46] return 
    rts
}
  // bitmap_clear
// Clear all graphics on the bitmap
bitmap_clear: {
    .label bitmap = 3
    .label y = 9
    // [47] bitmap_clear::bitmap#0 = *bitmap_plot_yhi w= *bitmap_plot_ylo -- vwuz1=_deref_pbuc1_word__deref_pbuc2 
    lda bitmap_plot_yhi
    sta.z bitmap+1
    lda bitmap_plot_ylo
    sta.z bitmap
    // [48] bitmap_clear::bitmap#5 = (char *)bitmap_clear::bitmap#0
    // [49] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1]
  __b1_from_bitmap_clear:
    // [49] phi bitmap_clear::y#4 = 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [49] phi bitmap_clear::bitmap#3 = bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy 
    jmp __b1
    // [49] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1]
  __b1_from___b3:
    // [49] phi bitmap_clear::y#4 = bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy 
    // [49] phi bitmap_clear::bitmap#3 = bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy 
    jmp __b1
    // bitmap_clear::@1
  __b1:
    // [50] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2]
  __b2_from___b1:
    // [50] phi bitmap_clear::x#2 = 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [50] phi bitmap_clear::bitmap#2 = bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy 
    jmp __b2
    // [50] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2]
  __b2_from___b2:
    // [50] phi bitmap_clear::x#2 = bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy 
    // [50] phi bitmap_clear::bitmap#2 = bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy 
    jmp __b2
    // bitmap_clear::@2
  __b2:
    // [51] *bitmap_clear::bitmap#2 = 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (bitmap),y
    // [52] bitmap_clear::bitmap#1 = ++ bitmap_clear::bitmap#2 -- pbuz1=_inc_pbuz1 
    inc.z bitmap
    bne !+
    inc.z bitmap+1
  !:
    // [53] bitmap_clear::x#1 = ++ bitmap_clear::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [54] if(bitmap_clear::x#1!=$c8) goto bitmap_clear::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$c8
    bne __b2_from___b2
    jmp __b3
    // bitmap_clear::@3
  __b3:
    // [55] bitmap_clear::y#1 = ++ bitmap_clear::y#4 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [56] if(bitmap_clear::y#1!=$28) goto bitmap_clear::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z y
    bne __b1_from___b3
    jmp __breturn
    // bitmap_clear::@return
  __breturn:
    // [57] return 
    rts
}
  // screen_fill
// Fill the screen with a specific char
// void screen_fill(__zp(3) char *screen, char ch)
screen_fill: {
    .const ch = $10
    .label screen = 3
    .label y = 9
    // [59] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1]
  __b1_from_screen_fill:
    // [59] phi screen_fill::y#4 = 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [59] phi screen_fill::screen#3 = SCREEN [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z screen
    lda #>SCREEN
    sta.z screen+1
    jmp __b1
    // [59] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1]
  __b1_from___b3:
    // [59] phi screen_fill::y#4 = screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy 
    // [59] phi screen_fill::screen#3 = screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy 
    jmp __b1
    // screen_fill::@1
  __b1:
    // [60] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2]
  __b2_from___b1:
    // [60] phi screen_fill::x#2 = 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [60] phi screen_fill::screen#2 = screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy 
    jmp __b2
    // [60] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2]
  __b2_from___b2:
    // [60] phi screen_fill::x#2 = screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy 
    // [60] phi screen_fill::screen#2 = screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy 
    jmp __b2
    // screen_fill::@2
  __b2:
    // [61] *screen_fill::screen#2 = screen_fill::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (screen),y
    // [62] screen_fill::screen#1 = ++ screen_fill::screen#2 -- pbuz1=_inc_pbuz1 
    inc.z screen
    bne !+
    inc.z screen+1
  !:
    // [63] screen_fill::x#1 = ++ screen_fill::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [64] if(screen_fill::x#1!=$28) goto screen_fill::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne __b2_from___b2
    jmp __b3
    // screen_fill::@3
  __b3:
    // [65] screen_fill::y#1 = ++ screen_fill::y#4 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [66] if(screen_fill::y#1!=$19) goto screen_fill::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$19
    cmp.z y
    bne __b1_from___b3
    jmp __breturn
    // screen_fill::@return
  __breturn:
    // [67] return 
    rts
}
  // point_init
// Initialize the points to be animated
// void point_init(__zp(2) char point_idx)
point_init: {
    .label __5 = $c
    .label __6 = $e
    .label __13 = 9
    .label __17 = $10
    .label __18 = $a
    .label __19 = $e
    .label point_idx = 2
    .label y_diff = $10
    .label abs16s1_return = 3
    .label abs16s2_return = 7
    .label x_stepf = 5
    .label x_diff = $12
    // [68] point_init::$13 = point_init::point_idx#0 << 1 -- vbuz1=vbuz2_rol_1 
    lda.z point_idx
    asl
    sta.z __13
    // [69] point_init::x_diff#1 = (int)x_end[point_init::$13] - (int)x_start[point_init::$13] -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 
    ldy.z __13
    sec
    lda x_end,y
    sbc x_start,y
    sta.z x_diff
    lda x_end+1,y
    sbc x_start+1,y
    sta.z x_diff+1
    // [70] point_init::$17 = (int)y_end[point_init::point_idx#0] -- vwsz1=_sword_pbuc1_derefidx_vbuz2 
    ldy.z point_idx
    lda y_end,y
    sta.z __17
    lda #0
    sta.z __17+1
    // [71] point_init::$18 = (int)y_start[point_init::point_idx#0] -- vwsz1=_sword_pbuc1_derefidx_vbuz2 
    ldy.z point_idx
    lda y_start,y
    sta.z __18
    lda #0
    sta.z __18+1
    // [72] point_init::y_diff#0 = point_init::$17 - point_init::$18 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z y_diff
    sec
    sbc.z __18
    sta.z y_diff
    lda.z y_diff+1
    sbc.z __18+1
    sta.z y_diff+1
    jmp abs16s1
    // point_init::abs16s1
  abs16s1:
    // [73] if(point_init::x_diff#1<0) goto point_init::abs16s1_@1 -- vwsz1_lt_0_then_la1 
    lda.z x_diff+1
    bmi abs16s1___b1
    jmp abs16s1___b3
    // point_init::abs16s1_@3
  abs16s1___b3:
    // [74] point_init::abs16s1_return#6 = (unsigned int)point_init::x_diff#1 -- vwuz1=vwuz2 
    lda.z x_diff
    sta.z abs16s1_return
    lda.z x_diff+1
    sta.z abs16s1_return+1
    // [75] phi from point_init::abs16s1_@1 point_init::abs16s1_@3 to point_init::abs16s1_@return [phi:point_init::abs16s1_@1/point_init::abs16s1_@3->point_init::abs16s1_@return]
  abs16s1___breturn_from_abs16s1___b1:
  abs16s1___breturn_from_abs16s1___b3:
    // [75] phi point_init::abs16s1_return#2 = point_init::abs16s1_return#5 [phi:point_init::abs16s1_@1/point_init::abs16s1_@3->point_init::abs16s1_@return#0] -- register_copy 
    jmp abs16s1___breturn
    // point_init::abs16s1_@return
  abs16s1___breturn:
    jmp abs16s2
    // point_init::abs16s2
  abs16s2:
    // [76] if(point_init::y_diff#0<0) goto point_init::abs16s2_@1 -- vwsz1_lt_0_then_la1 
    lda.z y_diff+1
    bmi abs16s2___b1
    jmp abs16s2___b3
    // point_init::abs16s2_@3
  abs16s2___b3:
    // [77] point_init::abs16s2_return#6 = (unsigned int)point_init::y_diff#0 -- vwuz1=vwuz2 
    lda.z y_diff
    sta.z abs16s2_return
    lda.z y_diff+1
    sta.z abs16s2_return+1
    // [78] phi from point_init::abs16s2_@1 point_init::abs16s2_@3 to point_init::abs16s2_@return [phi:point_init::abs16s2_@1/point_init::abs16s2_@3->point_init::abs16s2_@return]
  abs16s2___breturn_from_abs16s2___b1:
  abs16s2___breturn_from_abs16s2___b3:
    // [78] phi point_init::abs16s2_return#2 = point_init::abs16s2_return#5 [phi:point_init::abs16s2_@1/point_init::abs16s2_@3->point_init::abs16s2_@return#0] -- register_copy 
    jmp abs16s2___breturn
    // point_init::abs16s2_@return
  abs16s2___breturn:
    jmp __b6
    // point_init::@6
  __b6:
    // [79] if(point_init::abs16s1_return#2>point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1 
    lda.z abs16s2_return+1
    cmp.z abs16s1_return+1
    bcc __b1
    bne !+
    lda.z abs16s2_return
    cmp.z abs16s1_return
    bcc __b1
  !:
    jmp __b2
    // point_init::@2
  __b2:
    // [80] point_init::$5 = x_start[point_init::$13] << 4 -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 
    ldy.z __13
    lda x_start,y
    asl
    sta.z __5
    lda x_start+1,y
    rol
    sta.z __5+1
    asl.z __5
    rol.z __5+1
    asl.z __5
    rol.z __5+1
    asl.z __5
    rol.z __5+1
    // [81] x_cur[point_init::$13] = point_init::$5 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z __13
    lda.z __5
    sta x_cur,y
    lda.z __5+1
    sta x_cur+1,y
    // [82] point_init::$19 = (unsigned int)y_start[point_init::point_idx#0] -- vwuz1=_word_pbuc1_derefidx_vbuz2 
    ldy.z point_idx
    lda y_start,y
    sta.z __19
    lda #0
    sta.z __19+1
    // [83] point_init::$6 = point_init::$19 << 4 -- vwuz1=vwuz1_rol_4 
    asl.z __6
    rol.z __6+1
    asl.z __6
    rol.z __6+1
    asl.z __6
    rol.z __6+1
    asl.z __6
    rol.z __6+1
    // [84] y_cur[point_init::$13] = point_init::$6 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z __13
    lda.z __6
    sta y_cur,y
    lda.z __6+1
    sta y_cur+1,y
    // [85] delay[point_init::point_idx#0] = DELAY -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #DELAY
    ldy.z point_idx
    sta delay,y
    jmp __breturn
    // point_init::@return
  __breturn:
    // [86] return 
    rts
    // point_init::@1
  __b1:
    // [87] if(point_init::x_diff#1<0) goto point_init::@4 -- vwsz1_lt_0_then_la1 
    // X is driver - abs(y/x) is < 1
    lda.z x_diff+1
    bmi __b4
    jmp __b3
    // point_init::@3
  __b3:
    // [88] x_add[point_init::point_idx#0] = $10 -- pbsc1_derefidx_vbuz1=vbsc2 
    // x add = 1.0
    lda #$10
    ldy.z point_idx
    sta x_add,y
    jmp __b5
    // point_init::@5
  __b5:
    // [89] divr16s::divisor#0 = point_init::x_diff#1
    // [90] divr16s::rem#0 = point_init::y_diff#0
    // [91] call divr16s
    // [108] phi from point_init::@5 to divr16s [phi:point_init::@5->divr16s]
  divr16s_from___b5:
    jsr divr16s
    // [92] divr16s::return#3 = divr16s::return#2
    jmp __b7
    // point_init::@7
  __b7:
    // [93] point_init::x_stepf#0 = divr16s::return#3
    // [94] point_init::$9 = byte1  point_init::x_stepf#0 -- vbuaa=_byte1_vwsz1 
    lda.z x_stepf+1
    // [95] point_init::$10 = point_init::$9 >> 4 -- vbuaa=vbuaa_ror_4 
    lsr
    lsr
    lsr
    lsr
    // [96] y_add[point_init::point_idx#0] = (signed char)point_init::$10 -- pbsc1_derefidx_vbuz1=vbsaa 
    ldy.z point_idx
    sta y_add,y
    jmp __b2
    // point_init::@4
  __b4:
    // [97] x_add[point_init::point_idx#0] = -$10 -- pbsc1_derefidx_vbuz1=vbsc2 
    // x add = -1.0
    lda #-$10
    ldy.z point_idx
    sta x_add,y
    jmp __b5
    // point_init::abs16s2_@1
  abs16s2___b1:
    // [98] point_init::abs16s2_return#0 = - point_init::y_diff#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z y_diff
    sta.z abs16s2_return
    lda #0
    sbc.z y_diff+1
    sta.z abs16s2_return+1
    // [99] point_init::abs16s2_return#5 = (unsigned int)point_init::abs16s2_return#0
    jmp abs16s2___breturn_from_abs16s2___b1
    // point_init::abs16s1_@1
  abs16s1___b1:
    // [100] point_init::abs16s1_return#0 = - point_init::x_diff#1 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z x_diff
    sta.z abs16s1_return
    lda #0
    sbc.z x_diff+1
    sta.z abs16s1_return+1
    // [101] point_init::abs16s1_return#5 = (unsigned int)point_init::abs16s1_return#0
    jmp abs16s1___breturn_from_abs16s1___b1
}
  // bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(7) unsigned int x, __register(X) char y)
bitmap_plot: {
    .label __1 = $12
    .label x = 7
    .label plotter = $10
    // [102] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bitmap_plot_ylo[bitmap_plot::y#0] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx 
    lda bitmap_plot_yhi,x
    sta.z plotter+1
    lda bitmap_plot_ylo,x
    sta.z plotter
    // [103] bitmap_plot::$1 = bitmap_plot::x#0 & $fff8 -- vwuz1=vwuz2_band_vwuc1 
    lda.z x
    and #<$fff8
    sta.z __1
    lda.z x+1
    and #>$fff8
    sta.z __1+1
    // [104] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 -- pbuz1=pbuz1_plus_vwuz2 
    clc
    lda.z plotter
    adc.z __1
    sta.z plotter
    lda.z plotter+1
    adc.z __1+1
    sta.z plotter+1
    // [105] bitmap_plot::$2 = byte0  bitmap_plot::x#0 -- vbuxx=_byte0_vwuz1 
    ldx.z x
    // [106] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx 
    lda bitmap_plot_bit,x
    ldy #0
    ora (plotter),y
    sta (plotter),y
    jmp __breturn
    // bitmap_plot::@return
  __breturn:
    // [107] return 
    rts
}
  // divr16s
// Perform division on two signed 16-bit numbers with an initial remainder.
// Returns dividend/divisor. The remainder will be set into the global variable rem16s.
// Implemented using simple binary division
// Follows the C99 standard by truncating toward zero on negative results.
// See http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf section 6.5.5
// __zp(5) int divr16s(int dividend, __zp($12) int divisor, __zp($10) int rem)
divr16s: {
    .label remu = $10
    .label divisoru = $12
    .label resultu = 5
    .label return = 5
    .label divisor = $12
    .label rem = $10
    jmp __b10
    // divr16s::@10
  __b10:
    // [109] if(divr16s::rem#0<0) goto divr16s::@1 -- vwsz1_lt_0_then_la1 
    lda.z rem+1
    bmi __b1
    jmp __b6
    // divr16s::@6
  __b6:
    // [110] divr16s::remu#8 = (unsigned int)divr16s::rem#0
    // [111] phi from divr16s::@6 to divr16s::@2 [phi:divr16s::@6->divr16s::@2]
  __b2_from___b6:
    // [111] phi divr16s::remu#3 = divr16s::remu#8 [phi:divr16s::@6->divr16s::@2#0] -- register_copy 
    // [111] phi divr16s::neg#3 = 0 [phi:divr16s::@6->divr16s::@2#1] -- vbuyy=vbuc1 
    ldy #0
    jmp __b2
    // divr16s::@2
  __b2:
    // [112] if(divr16s::divisor#0<0) goto divr16s::@3 -- vwsz1_lt_0_then_la1 
    lda.z divisor+1
    bmi __b3
    jmp __b7
    // divr16s::@7
  __b7:
    // [113] divr16s::divisoru#5 = (unsigned int)divr16s::divisor#0
    // [114] phi from divr16s::@3 divr16s::@7 to divr16s::@4 [phi:divr16s::@3/divr16s::@7->divr16s::@4]
  __b4_from___b3:
  __b4_from___b7:
    // [114] phi divr16s::neg#4 = divr16s::neg#2 [phi:divr16s::@3/divr16s::@7->divr16s::@4#0] -- register_copy 
    // [114] phi divr16s::divisoru#3 = divr16s::divisoru#4 [phi:divr16s::@3/divr16s::@7->divr16s::@4#1] -- register_copy 
    jmp __b4
    // divr16s::@4
  __b4:
    // [115] divr16u::divisor#0 = divr16s::divisoru#3
    // [116] divr16u::rem#3 = divr16s::remu#3
    // [117] call divr16u
    // [130] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u]
  divr16u_from___b4:
    jsr divr16u
    // [118] divr16u::return#2 = divr16u::return#0
    jmp __b9
    // divr16s::@9
  __b9:
    // [119] divr16s::resultu#0 = divr16u::return#2
    // [120] if(divr16s::neg#4==0) goto divr16s::@5 -- vbuyy_eq_0_then_la1 
    cpy #0
    beq __b5
    jmp __b8
    // divr16s::@8
  __b8:
    // [121] divr16s::return#1 = - (int)divr16s::resultu#0 -- vwsz1=_neg_vwsz1 
    lda #0
    sec
    sbc.z return
    sta.z return
    lda #0
    sbc.z return+1
    sta.z return+1
    // [122] phi from divr16s::@5 divr16s::@8 to divr16s::@return [phi:divr16s::@5/divr16s::@8->divr16s::@return]
  __breturn_from___b5:
  __breturn_from___b8:
    // [122] phi divr16s::return#2 = divr16s::return#6 [phi:divr16s::@5/divr16s::@8->divr16s::@return#0] -- register_copy 
    jmp __breturn
    // divr16s::@return
  __breturn:
    // [123] return 
    rts
    // divr16s::@5
  __b5:
    // [124] divr16s::return#6 = (int)divr16s::resultu#0
    jmp __breturn_from___b5
    // divr16s::@3
  __b3:
    // [125] divr16s::divisoru#1 = - divr16s::divisor#0 -- vwsz1=_neg_vwsz1 
    lda #0
    sec
    sbc.z divisoru
    sta.z divisoru
    lda #0
    sbc.z divisoru+1
    sta.z divisoru+1
    // [126] divr16s::neg#2 = divr16s::neg#3 ^ 1 -- vbuyy=vbuyy_bxor_vbuc1 
    tya
    eor #1
    tay
    // [127] divr16s::divisoru#4 = (unsigned int)divr16s::divisoru#1
    jmp __b4_from___b3
    // divr16s::@1
  __b1:
    // [128] divr16s::remu#1 = - divr16s::rem#0 -- vwsz1=_neg_vwsz1 
    lda #0
    sec
    sbc.z remu
    sta.z remu
    lda #0
    sbc.z remu+1
    sta.z remu+1
    // [129] divr16s::remu#7 = (unsigned int)divr16s::remu#1
    // [111] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2]
  __b2_from___b1:
    // [111] phi divr16s::remu#3 = divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy 
    // [111] phi divr16s::neg#3 = 1 [phi:divr16s::@1->divr16s::@2#1] -- vbuyy=vbuc1 
    ldy #1
    jmp __b2
}
  // divr16u
// Performs division on two 16 bit unsigned ints and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// __zp(5) unsigned int divr16u(__zp($a) unsigned int dividend, __zp($12) unsigned int divisor, __zp($10) unsigned int rem)
divr16u: {
    .label rem = $10
    .label dividend = $a
    .label quotient = 5
    .label return = 5
    .label divisor = $12
    // [131] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  __b1_from_divr16u:
    // [131] phi divr16u::i#2 = 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [131] phi divr16u::quotient#3 = 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z quotient
    lda #>0
    sta.z quotient+1
    // [131] phi divr16u::dividend#2 = 0 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 
    lda #<0
    sta.z dividend
    lda #>0
    sta.z dividend+1
    // [131] phi divr16u::rem#4 = divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy 
    jmp __b1
    // [131] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  __b1_from___b3:
    // [131] phi divr16u::i#2 = divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
    // [131] phi divr16u::quotient#3 = divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
    // [131] phi divr16u::dividend#2 = divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
    // [131] phi divr16u::rem#4 = divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    jmp __b1
    // divr16u::@1
  __b1:
    // [132] divr16u::rem#0 = divr16u::rem#4 << 1 -- vwuz1=vwuz1_rol_1 
    asl.z rem
    rol.z rem+1
    // [133] divr16u::$1 = byte1  divr16u::dividend#2 -- vbuaa=_byte1_vwuz1 
    lda.z dividend+1
    // [134] divr16u::$2 = divr16u::$1 & $80 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
    // [135] if(divr16u::$2==0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq __b2_from___b1
    jmp __b4
    // divr16u::@4
  __b4:
    // [136] divr16u::rem#1 = divr16u::rem#0 | 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora.z rem
    sta.z rem
    // [137] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  __b2_from___b1:
  __b2_from___b4:
    // [137] phi divr16u::rem#5 = divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    jmp __b2
    // divr16u::@2
  __b2:
    // [138] divr16u::dividend#0 = divr16u::dividend#2 << 1 -- vwuz1=vwuz1_rol_1 
    asl.z dividend
    rol.z dividend+1
    // [139] divr16u::quotient#1 = divr16u::quotient#3 << 1 -- vwuz1=vwuz1_rol_1 
    asl.z quotient
    rol.z quotient+1
    // [140] if(divr16u::rem#5<divr16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuz2_then_la1 
    lda.z rem+1
    cmp.z divisor+1
    bcc __b3_from___b2
    bne !+
    lda.z rem
    cmp.z divisor
    bcc __b3_from___b2
  !:
    jmp __b5
    // divr16u::@5
  __b5:
    // [141] divr16u::quotient#2 = ++ divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc.z quotient
    bne !+
    inc.z quotient+1
  !:
    // [142] divr16u::rem#2 = divr16u::rem#5 - divr16u::divisor#0 -- vwuz1=vwuz1_minus_vwuz2 
    lda.z rem
    sec
    sbc.z divisor
    sta.z rem
    lda.z rem+1
    sbc.z divisor+1
    sta.z rem+1
    // [143] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  __b3_from___b2:
  __b3_from___b5:
    // [143] phi divr16u::return#0 = divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
    // [143] phi divr16u::rem#9 = divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    jmp __b3
    // divr16u::@3
  __b3:
    // [144] divr16u::i#1 = ++ divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [145] if(divr16u::i#1!=$10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne __b1_from___b3
    jmp __breturn
    // divr16u::@return
  __breturn:
    // [146] return 
    rts
}
  // File Data
.segment Data
  // The coordinates of the lines to animate
  x_start: .word $a, $14, $1e, $1e
  y_start: .byte $a, $a, $a, $14
  x_end: .word $14, $a, $14, $14
  y_end: .byte $14, $14, $a, $14
  // Current x position fixed point [12.4]
  x_cur: .fill 2*SIZE, 0
  // Current y position fixed point [12.4]
  y_cur: .fill 2*SIZE, 0
  // X position addition per frame s[3.4]
  x_add: .fill SIZE, 0
  // Y position addition per frame s[3.4]
  y_add: .fill SIZE, 0
  // Frame delay (counted down to 0)
  delay: .fill SIZE, 0
  // Tables for the plotter - initialized by calling bitmap_init();
  bitmap_plot_ylo: .fill $100, 0
  bitmap_plot_yhi: .fill $100, 0
  bitmap_plot_bit: .fill $100, 0

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp vicSelectGfxBank1
Removing instruction jmp vicSelectGfxBank1_toDd001
Removing instruction jmp vicSelectGfxBank1___b1
Removing instruction jmp toD0181
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b1
Removing instruction jmp __b7
Removing instruction jmp __b8
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __b6
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp abs16s1
Removing instruction jmp abs16s1___b3
Removing instruction jmp abs16s1___breturn
Removing instruction jmp abs16s2
Removing instruction jmp abs16s2___b3
Removing instruction jmp abs16s2___breturn
Removing instruction jmp __b6
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b10
Removing instruction jmp __b6
Removing instruction jmp __b2
Removing instruction jmp __b7
Removing instruction jmp __b4
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b4
Removing instruction jmp __b2
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldy #0 with TAY
Replacing instruction ldy.z __13 with TAY
Removing instruction ldy.z point_idx
Removing instruction ldy.z __13
Replacing instruction lda #<0 with TXA
Removing instruction lda #>0
Removing instruction lda #<0
Removing instruction lda #>0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __b1_from___b8 with __b1
Replacing label __b6_from___b1 with __b2
Replacing label __b1_from___b2 with __b1
Replacing label __b4_from___b3 with __b4
Replacing label __b3_from___b4 with __b3
Replacing label __b2_from___b2 with __b2
Replacing label __b1_from___b3 with __b1
Replacing label __b2_from___b2 with __b2
Replacing label __b1_from___b3 with __b1
Replacing label abs16s2___breturn_from_abs16s2___b1 with __b6
Replacing label abs16s1___breturn_from_abs16s1___b1 with abs16s2
Replacing label __breturn_from___b5 with __breturn
Replacing label __b4_from___b3 with __b4
Replacing label __b2_from___b1 with __b2
Replacing label __b3_from___b2 with __b3
Replacing label __b3_from___b2 with __b3
Replacing label __b1_from___b3 with __b1
Removing instruction vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
Removing instruction vicSelectGfxBank1_toDd001:
Removing instruction toD0181_from_vicSelectGfxBank1___b1:
Removing instruction toD0181:
Removing instruction __b5_from___b4:
Removing instruction __b6_from___b5:
Removing instruction screen_fill_from___b6:
Removing instruction __b1_from___b8:
Removing instruction __b1_from___b2:
Removing instruction __b6_from___b1:
Removing instruction __b6:
Removing instruction __b2_from___b6:
Removing instruction __b3_from___b4:
Removing instruction __b4_from___b3:
Removing instruction __b4_from___b5:
Removing instruction __b1_from___b3:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b2:
Removing instruction __b1_from___b3:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b2:
Removing instruction abs16s1___breturn_from_abs16s1___b1:
Removing instruction abs16s1___breturn_from_abs16s1___b3:
Removing instruction abs16s1___breturn:
Removing instruction abs16s2___breturn_from_abs16s2___b1:
Removing instruction abs16s2___breturn_from_abs16s2___b3:
Removing instruction abs16s2___breturn:
Removing instruction divr16s_from___b5:
Removing instruction __b2_from___b6:
Removing instruction __b7:
Removing instruction __b4_from___b3:
Removing instruction __b4_from___b7:
Removing instruction divr16u_from___b4:
Removing instruction __breturn_from___b5:
Removing instruction __breturn_from___b8:
Removing instruction __b1_from___b3:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b4:
Removing instruction __b3_from___b2:
Removing instruction __b3_from___b5:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction vicSelectGfxBank1:
Removing instruction vicSelectGfxBank1___b1:
Removing instruction __b4:
Removing instruction bitmap_init_from___b4:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __b1_from___b6:
Removing instruction __b7:
Removing instruction __b8:
Removing instruction __b3:
Removing instruction __b1_from_bitmap_init:
Removing instruction __b2_from___b1:
Removing instruction __b3_from___b2:
Removing instruction __b5:
Removing instruction __breturn:
Removing instruction __b1_from_bitmap_clear:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b1_from_screen_fill:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction abs16s1:
Removing instruction abs16s1___b3:
Removing instruction abs16s2___b3:
Removing instruction __breturn:
Removing instruction __b3:
Removing instruction __b7:
Removing instruction __breturn:
Removing instruction __b10:
Removing instruction __b6:
Removing instruction __b9:
Removing instruction __b8:
Removing instruction __b2_from___b1:
Removing instruction __b1_from_divr16u:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Skipping double jump to __breturn in beq __b5
Replacing jump to rts with rts in jmp __breturn
Succesful ASM optimization Pass5DoubleJumpElimination
Removing instruction jmp __b1
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction __b5:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction rts
Succesful ASM optimization Pass5UnreachableCodeElimination
Fixing long branch [248] bmi abs16s1___b1 to bpl
Fixing long branch [257] bmi abs16s2___b1 to bpl

FINAL SYMBOL TABLE
__constant char *BITMAP = (char *) 40960
__constant char * const BORDER_COLOR = (char *) 53280
__constant struct MOS6526_CIA * const CIA2 = (struct MOS6526_CIA *) 56576
__constant char * const D011 = (char *) 53265
__constant char * const D018 = (char *) 53272
__constant const char DELAY = 8
__constant char OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2
__constant char * const PROCPORT = (char *) 1
__constant char * const PROCPORT_DDR = (char *) 0
__constant const char PROCPORT_DDR_MEMORY_MASK = 7
__constant const char PROCPORT_RAM_IO = 5
__constant char * const RASTER = (char *) 53266
__constant char *SCREEN = (char *) 34816
__constant const char SIZE = 4
__constant const char VICII_BMM = $20
__constant const char VICII_DEN = $10
__constant const char VICII_RSEL = 8
void bitmap_clear()
char *bitmap_clear::bitmap
unsigned int bitmap_clear::bitmap#0 // bitmap zp[2]:3 11.0
char *bitmap_clear::bitmap#1 // bitmap zp[2]:3 420.59999999999997
char *bitmap_clear::bitmap#2 // bitmap zp[2]:3 1552.0
char *bitmap_clear::bitmap#3 // bitmap zp[2]:3 213.0
char *bitmap_clear::bitmap#5 // bitmap zp[2]:3 22.0
char bitmap_clear::x
char bitmap_clear::x#1 // reg byte x 1501.5
char bitmap_clear::x#2 // reg byte x 667.3333333333334
char bitmap_clear::y
char bitmap_clear::y#1 // y zp[1]:9 151.5
char bitmap_clear::y#4 // y zp[1]:9 33.666666666666664
void bitmap_init(char *bitmap)
char bitmap_init::$4 // reg byte a 202.0
char bitmap_init::$5 // reg byte a 202.0
char bitmap_init::$6 // reg byte a 202.0
char bitmap_init::$7 // zp[1]:9 50.5
char *bitmap_init::bitmap
char bitmap_init::bits
char bitmap_init::bits#1 // reg byte a 101.0
char bitmap_init::bits#3 // reg byte a 151.5
char bitmap_init::bits#4 // reg byte a 67.33333333333333
char bitmap_init::x
char bitmap_init::x#1 // reg byte x 151.5
char bitmap_init::x#2 // reg byte x 50.5
char bitmap_init::y
char bitmap_init::y#1 // reg byte x 151.5
char bitmap_init::y#2 // reg byte x 50.5
char *bitmap_init::yoffs
char *bitmap_init::yoffs#1 // yoffs zp[2]:3 202.0
char *bitmap_init::yoffs#2 // yoffs zp[2]:3 63.125
char *bitmap_init::yoffs#4 // yoffs zp[2]:3 101.0
void bitmap_plot(unsigned int x , char y)
unsigned int bitmap_plot::$1 // zp[2]:18 202.0
char bitmap_plot::$2 // reg byte x 202.0
char *bitmap_plot::plotter
unsigned int bitmap_plot::plotter#0 // plotter zp[2]:16 50.5
char *bitmap_plot::plotter#1 // plotter zp[2]:16 151.5
unsigned int bitmap_plot::x
unsigned int bitmap_plot::x#0 // x zp[2]:7 42.599999999999994
char bitmap_plot::y
char bitmap_plot::y#0 // reg byte x 213.0
__constant const char bitmap_plot_bit[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_yhi[$100] = { fill( $100, 0) }
__constant const char bitmap_plot_ylo[$100] = { fill( $100, 0) }
__constant char delay[SIZE] = { fill( SIZE, 0) }
int divr16s(int dividend , int divisor , int rem)
int divr16s::dividend
unsigned int divr16s::dividendu
int divr16s::divisor
int divr16s::divisor#0 // divisor zp[2]:18 233.66666666666669
unsigned int divr16s::divisoru
int divr16s::divisoru#1 // divisoru zp[2]:18 500.5
unsigned int divr16s::divisoru#3 // divisoru zp[2]:18 3003.0
unsigned int divr16s::divisoru#4 // divisoru zp[2]:18 2002.0
unsigned int divr16s::divisoru#5 // divisoru zp[2]:18 2002.0
char divr16s::neg
char divr16s::neg#2 // reg byte y 1001.0
char divr16s::neg#3 // reg byte y 500.5
char divr16s::neg#4 // reg byte y 500.5
int divr16s::rem
int divr16s::rem#0 // rem zp[2]:16 701.0
unsigned int divr16s::remu
int divr16s::remu#1 // remu zp[2]:16 1001.0
unsigned int divr16s::remu#3 // remu zp[2]:16 375.375
unsigned int divr16s::remu#7 // remu zp[2]:16 2002.0
unsigned int divr16s::remu#8 // remu zp[2]:16 2002.0
unsigned int divr16s::resultu
unsigned int divr16s::resultu#0 // resultu zp[2]:5 500.5
int divr16s::return
int divr16s::return#1 // return zp[2]:5 2002.0
int divr16s::return#2 // return zp[2]:5 701.0
int divr16s::return#3 // return zp[2]:5 202.0
int divr16s::return#6 // return zp[2]:5 2002.0
unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem)
char divr16u::$1 // reg byte a 2000002.0
char divr16u::$2 // reg byte a 2000002.0
unsigned int divr16u::dividend
unsigned int divr16u::dividend#0 // dividend zp[2]:10 250000.25
unsigned int divr16u::dividend#2 // dividend zp[2]:10 428571.85714285716
unsigned int divr16u::divisor
unsigned int divr16u::divisor#0 // divisor zp[2]:18 111166.83333333333
char divr16u::i
char divr16u::i#1 // reg byte x 1500001.5
char divr16u::i#2 // reg byte x 153846.3076923077
unsigned int divr16u::quotient
unsigned int divr16u::quotient#1 // quotient zp[2]:5 1500001.5
unsigned int divr16u::quotient#2 // quotient zp[2]:5 1000001.0
unsigned int divr16u::quotient#3 // quotient zp[2]:5 250000.25
unsigned int divr16u::rem
unsigned int divr16u::rem#0 // rem zp[2]:16 750000.75
unsigned int divr16u::rem#1 // rem zp[2]:16 2000002.0
unsigned int divr16u::rem#2 // rem zp[2]:16 2000002.0
unsigned int divr16u::rem#3 // rem zp[2]:16 5501.0
unsigned int divr16u::rem#4 // rem zp[2]:16 2010003.0
unsigned int divr16u::rem#5 // rem zp[2]:16 1000001.0
unsigned int divr16u::rem#9 // rem zp[2]:16 1000001.0
unsigned int divr16u::return
unsigned int divr16u::return#0 // return zp[2]:5 600200.8
unsigned int divr16u::return#2 // return zp[2]:5 2002.0
void main()
char main::$10 // reg byte a 22.0
char main::i
char main::i#1 // i zp[1]:2 16.5
char main::i#2 // i zp[1]:2 7.857142857142857
char *main::toD0181_gfx
char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)BITMAP/4&$f // toD0181_return
char *main::toD0181_screen
char *main::vicSelectGfxBank1_gfx
char *main::vicSelectGfxBank1_toDd001_gfx
char main::vicSelectGfxBank1_toDd001_return
__constant char main::vicSelectGfxBank1_toDd001_return#0 = 3^byte1 (unsigned int)SCREEN/$40 // vicSelectGfxBank1_toDd001_return
void point_init(char point_idx)
char point_init::$10 // reg byte a 101.0
char point_init::$13 // zp[1]:9 13.03225806451613
int point_init::$17 // zp[2]:16 101.0
int point_init::$18 // zp[2]:10 202.0
unsigned int point_init::$19 // zp[2]:14 202.0
unsigned int point_init::$5 // zp[2]:12 202.0
unsigned int point_init::$6 // zp[2]:14 202.0
char point_init::$9 // reg byte a 202.0
unsigned int point_init::abs16s1_return
int point_init::abs16s1_return#0 // abs16s1_return zp[2]:3 101.0
unsigned int point_init::abs16s1_return#2 // abs16s1_return zp[2]:3 50.5
unsigned int point_init::abs16s1_return#5 // abs16s1_return zp[2]:3 202.0
unsigned int point_init::abs16s1_return#6 // abs16s1_return zp[2]:3 202.0
int point_init::abs16s1_w
unsigned int point_init::abs16s2_return
int point_init::abs16s2_return#0 // abs16s2_return zp[2]:7 101.0
unsigned int point_init::abs16s2_return#2 // abs16s2_return zp[2]:7 303.0
unsigned int point_init::abs16s2_return#5 // abs16s2_return zp[2]:7 202.0
unsigned int point_init::abs16s2_return#6 // abs16s2_return zp[2]:7 202.0
int point_init::abs16s2_w
char point_init::point_idx
char point_init::point_idx#0 // point_idx zp[1]:2 15.636363636363637
int point_init::x_diff
int point_init::x_diff#1 // x_diff zp[2]:18 28.055555555555554
int point_init::x_stepf
int point_init::x_stepf#0 // x_stepf zp[2]:5 202.0
int point_init::y_diff
int point_init::y_diff#0 // y_diff zp[2]:16 25.25
void screen_fill(char *screen , char ch)
char screen_fill::ch
__constant char screen_fill::ch#0 = $10 // ch
char *screen_fill::screen
char *screen_fill::screen#1 // screen zp[2]:3 420.59999999999997
char *screen_fill::screen#2 // screen zp[2]:3 1552.0
char *screen_fill::screen#3 // screen zp[2]:3 202.0
char screen_fill::x
char screen_fill::x#1 // reg byte x 1501.5
char screen_fill::x#2 // reg byte x 667.3333333333334
char screen_fill::y
char screen_fill::y#1 // y zp[1]:9 151.5
char screen_fill::y#4 // y zp[1]:9 33.666666666666664
__constant signed char x_add[SIZE] = { fill( SIZE, 0) }
__constant unsigned int x_cur[SIZE] = { fill( SIZE, 0) }
__constant unsigned int x_end[SIZE] = { $14, $a, $14, $14 }
__constant unsigned int x_start[SIZE] = { $a, $14, $1e, $1e }
__constant signed char y_add[SIZE] = { fill( SIZE, 0) }
__constant unsigned int y_cur[SIZE] = { fill( SIZE, 0) }
__constant char y_end[SIZE] = { $14, $14, $a, $14 }
__constant char y_start[SIZE] = { $a, $a, $a, $14 }

zp[1]:2 [ main::i#2 main::i#1 point_init::point_idx#0 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ]
reg byte x [ screen_fill::x#2 screen_fill::x#1 ]
zp[2]:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_return#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
reg byte y [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ]
zp[2]:5 [ divr16s::return#2 divr16s::return#6 divr16s::return#1 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
reg byte a [ main::$10 ]
zp[2]:7 [ bitmap_plot::x#0 point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_return#0 ]
reg byte x [ bitmap_plot::y#0 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[1]:9 [ point_init::$13 bitmap_init::$7 screen_fill::y#4 screen_fill::y#1 bitmap_clear::y#4 bitmap_clear::y#1 ]
zp[2]:10 [ point_init::$18 divr16u::dividend#2 divr16u::dividend#0 ]
zp[2]:12 [ point_init::$5 ]
zp[2]:14 [ point_init::$19 point_init::$6 ]
reg byte a [ point_init::$9 ]
reg byte a [ point_init::$10 ]
zp[2]:16 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::remu#1 point_init::$17 point_init::y_diff#0 ]
zp[2]:18 [ bitmap_plot::$1 divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::divisoru#1 point_init::x_diff#1 ]
reg byte x [ bitmap_plot::$2 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]


FINAL ASSEMBLER
Score: 21966

  // File Comments
// Animated lines drawn on a single color bitmap
/// @file
/// Commodore 64 Registers and Constants
/// @file
/// The MOS 6526 Complex Interface Adapter (CIA)
///
/// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
  // Upstart
  // Commodore 64 PRG executable file
.file [name="line-anim.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(main)
  // Global Constants & labels
  /// $D011 Control Register #1  Bit#5: BMM Turn Bitmap Mode on/off
  .const VICII_BMM = $20
  /// $D011 Control Register #1  Bit#4: DEN Switch VIC-II output on/off
  .const VICII_DEN = $10
  /// $D011 Control Register #1  Bit#3: RSEL Switch betweem 25 or 24 visible rows
  ///          RSEL|  Display window height   | First line  | Last line
  ///          ----+--------------------------+-------------+----------
  ///            0 | 24 text lines/192 pixels |   55 ($37)  | 246 ($f6)
  ///            1 | 25 text lines/200 pixels |   51 ($33)  | 250 ($fa)
  .const VICII_RSEL = 8
  /// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  /// RAM in 0xA000, 0xE000 I/O in 0xD000
  .const PROCPORT_RAM_IO = 5
  // The number of points
  .const SIZE = 4
  // The delay between pixels
  .const DELAY = 8
  .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2
  /// $D012 RASTER Raster counter
  .label RASTER = $d012
  /// $D020 Border Color
  .label BORDER_COLOR = $d020
  /// $D011 Control Register #1
  /// @see #VICII_CONTROL1
  .label D011 = $d011
  /// $D018 VIC-II base addresses
  // @see #VICII_MEMORY
  .label D018 = $d018
  /// Processor port data direction register
  .label PROCPORT_DDR = 0
  /// Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  /// The CIA#2: Serial bus, RS-232, VIC memory bank
  .label CIA2 = $dd00
  .label BITMAP = $a000
  .label SCREEN = $8800
.segment Code
  // main
main: {
    .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)/$40
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
    .label i = 2
    // asm
    // asm { sei  }
    // Disable normal interrupt
    sei
    // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
    // [1] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // *PROCPORT = PROCPORT_RAM_IO
    // [2] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3
    // [3] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 -- _deref_pbuc1=vbuc2 
    lda #VICII_BMM|VICII_DEN|VICII_RSEL|3
    sta D011
    // main::vicSelectGfxBank1
    // CIA2->PORT_A_DDR = %00000011
    // [4] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR
    // [5] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001]
    // main::vicSelectGfxBank1_toDd001
    // main::vicSelectGfxBank1_@1
    // CIA2->PORT_A = toDd00(gfx)
    // [6] *((char *)CIA2) = main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 
    lda #vicSelectGfxBank1_toDd001_return
    sta CIA2
    // [7] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181]
    // main::toD0181
    // main::@4
    // *D018 =  toD018(SCREEN, BITMAP)
    // [8] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // bitmap_init(BITMAP)
    // [9] call bitmap_init
    // [25] phi from main::@4 to bitmap_init [phi:main::@4->bitmap_init]
    jsr bitmap_init
    // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
    // main::@5
    // bitmap_clear()
    // [11] call bitmap_clear
    jsr bitmap_clear
    // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
    // main::@6
    // screen_fill(SCREEN, $10)
    // [13] call screen_fill
    // [58] phi from main::@6 to screen_fill [phi:main::@6->screen_fill]
    jsr screen_fill
    // [14] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
    // [14] phi main::i#2 = 0 [phi:main::@6->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [14] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
    // [14] phi main::i#2 = main::i#1 [phi:main::@8->main::@1#0] -- register_copy 
    // main::@1
  __b1:
    // point_init(i)
    // [15] point_init::point_idx#0 = main::i#2
    // [16] call point_init
    jsr point_init
    // main::@7
    // bitmap_plot(x_start[i], y_start[i])
    // [17] main::$10 = main::i#2 << 1 -- vbuaa=vbuz1_rol_1 
    lda.z i
    asl
    // [18] bitmap_plot::x#0 = x_start[main::$10] -- vwuz1=pwuc1_derefidx_vbuaa 
    tay
    lda x_start,y
    sta.z bitmap_plot.x
    lda x_start+1,y
    sta.z bitmap_plot.x+1
    // [19] bitmap_plot::y#0 = y_start[main::i#2] -- vbuxx=pbuc1_derefidx_vbuz1 
    ldy.z i
    ldx y_start,y
    // [20] call bitmap_plot
    jsr bitmap_plot
    // main::@8
    // for( byte i : 0..SIZE-1)
    // [21] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [22] if(main::i#1!=SIZE-1+1) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #SIZE-1+1
    cmp.z i
    bne __b1
    // main::@2
  __b2:
    // while(*RASTER!=$ff)
    // [23] if(*RASTER!=$ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    // main::@3
    // (*BORDER_COLOR)++;
    // [24] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDER_COLOR
    jmp __b2
}
  // bitmap_init
// void bitmap_init(char *bitmap)
bitmap_init: {
    .label __7 = 9
    .label yoffs = 3
    // [26] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1]
    // [26] phi bitmap_init::x#2 = 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [26] phi bitmap_init::bits#3 = $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 
    lda #$80
    // [26] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1]
    // [26] phi bitmap_init::x#2 = bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy 
    // [26] phi bitmap_init::bits#3 = bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy 
    // bitmap_init::@1
  __b1:
    // bitmap_plot_bit[x] = bits
    // [27] bitmap_plot_bit[bitmap_init::x#2] = bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta bitmap_plot_bit,x
    // bits >>= 1
    // [28] bitmap_init::bits#1 = bitmap_init::bits#3 >> 1 -- vbuaa=vbuaa_ror_1 
    lsr
    // if(bits==0)
    // [29] if(bitmap_init::bits#1!=0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne __b2
    // [31] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2]
    // [31] phi bitmap_init::bits#4 = $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 
    lda #$80
    // [30] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6]
    // bitmap_init::@6
    // [31] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2]
    // [31] phi bitmap_init::bits#4 = bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy 
    // bitmap_init::@2
  __b2:
    // for(byte x : 0..255)
    // [32] bitmap_init::x#1 = ++ bitmap_init::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [33] if(bitmap_init::x#1!=0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne __b1
    // [34] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3]
    // [34] phi bitmap_init::yoffs#2 = BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 
    lda #<BITMAP
    sta.z yoffs
    lda #>BITMAP
    sta.z yoffs+1
    // [34] phi bitmap_init::y#2 = 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 
    ldx #0
    // [34] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3]
    // [34] phi bitmap_init::yoffs#2 = bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy 
    // [34] phi bitmap_init::y#2 = bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy 
    // bitmap_init::@3
  __b3:
    // y&$7
    // [35] bitmap_init::$7 = bitmap_init::y#2 & 7 -- vbuz1=vbuxx_band_vbuc1 
    lda #7
    sax.z __7
    // BYTE0(yoffs)
    // [36] bitmap_init::$4 = byte0  bitmap_init::yoffs#2 -- vbuaa=_byte0_pbuz1 
    lda.z yoffs
    // y&$7 | BYTE0(yoffs)
    // [37] bitmap_init::$5 = bitmap_init::$7 | bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa 
    ora.z __7
    // bitmap_plot_ylo[y] = y&$7 | BYTE0(yoffs)
    // [38] bitmap_plot_ylo[bitmap_init::y#2] = bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta bitmap_plot_ylo,x
    // BYTE1(yoffs)
    // [39] bitmap_init::$6 = byte1  bitmap_init::yoffs#2 -- vbuaa=_byte1_pbuz1 
    lda.z yoffs+1
    // bitmap_plot_yhi[y] = BYTE1(yoffs)
    // [40] bitmap_plot_yhi[bitmap_init::y#2] = bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta bitmap_plot_yhi,x
    // if((y&$7)==7)
    // [41] if(bitmap_init::$7!=7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 
    lda #7
    cmp.z __7
    bne __b4
    // bitmap_init::@5
    // yoffs = yoffs + 40*8
    // [42] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + (unsigned int)$28*8 -- pbuz1=pbuz1_plus_vwuc1 
    lda.z yoffs
    clc
    adc #<$28*8
    sta.z yoffs
    lda.z yoffs+1
    adc #>$28*8
    sta.z yoffs+1
    // [43] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4]
    // [43] phi bitmap_init::yoffs#4 = bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy 
    // bitmap_init::@4
  __b4:
    // for(byte y : 0..255)
    // [44] bitmap_init::y#1 = ++ bitmap_init::y#2 -- vbuxx=_inc_vbuxx 
    inx
    // [45] if(bitmap_init::y#1!=0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne __b3
    // bitmap_init::@return
    // }
    // [46] return 
    rts
}
  // bitmap_clear
// Clear all graphics on the bitmap
bitmap_clear: {
    .label bitmap = 3
    .label y = 9
    // MAKEWORD( bitmap_plot_yhi[0], bitmap_plot_ylo[0] )
    // [47] bitmap_clear::bitmap#0 = *bitmap_plot_yhi w= *bitmap_plot_ylo -- vwuz1=_deref_pbuc1_word__deref_pbuc2 
    lda bitmap_plot_yhi
    sta.z bitmap+1
    lda bitmap_plot_ylo
    sta.z bitmap
    // [48] bitmap_clear::bitmap#5 = (char *)bitmap_clear::bitmap#0
    // [49] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1]
    // [49] phi bitmap_clear::y#4 = 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [49] phi bitmap_clear::bitmap#3 = bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy 
    // [49] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1]
    // [49] phi bitmap_clear::y#4 = bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy 
    // [49] phi bitmap_clear::bitmap#3 = bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy 
    // bitmap_clear::@1
  __b1:
    // [50] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2]
    // [50] phi bitmap_clear::x#2 = 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [50] phi bitmap_clear::bitmap#2 = bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy 
    // [50] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2]
    // [50] phi bitmap_clear::x#2 = bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy 
    // [50] phi bitmap_clear::bitmap#2 = bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy 
    // bitmap_clear::@2
  __b2:
    // *bitmap++ = 0
    // [51] *bitmap_clear::bitmap#2 = 0 -- _deref_pbuz1=vbuc1 
    lda #0
    tay
    sta (bitmap),y
    // *bitmap++ = 0;
    // [52] bitmap_clear::bitmap#1 = ++ bitmap_clear::bitmap#2 -- pbuz1=_inc_pbuz1 
    inc.z bitmap
    bne !+
    inc.z bitmap+1
  !:
    // for( byte x: 0..199 )
    // [53] bitmap_clear::x#1 = ++ bitmap_clear::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [54] if(bitmap_clear::x#1!=$c8) goto bitmap_clear::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$c8
    bne __b2
    // bitmap_clear::@3
    // for( byte y: 0..39 )
    // [55] bitmap_clear::y#1 = ++ bitmap_clear::y#4 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [56] if(bitmap_clear::y#1!=$28) goto bitmap_clear::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z y
    bne __b1
    // bitmap_clear::@return
    // }
    // [57] return 
    rts
}
  // screen_fill
// Fill the screen with a specific char
// void screen_fill(__zp(3) char *screen, char ch)
screen_fill: {
    .const ch = $10
    .label screen = 3
    .label y = 9
    // [59] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1]
    // [59] phi screen_fill::y#4 = 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [59] phi screen_fill::screen#3 = SCREEN [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta.z screen
    lda #>SCREEN
    sta.z screen+1
    // [59] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1]
    // [59] phi screen_fill::y#4 = screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy 
    // [59] phi screen_fill::screen#3 = screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy 
    // screen_fill::@1
  __b1:
    // [60] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2]
    // [60] phi screen_fill::x#2 = 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [60] phi screen_fill::screen#2 = screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy 
    // [60] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2]
    // [60] phi screen_fill::x#2 = screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy 
    // [60] phi screen_fill::screen#2 = screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy 
    // screen_fill::@2
  __b2:
    // *screen++ = ch
    // [61] *screen_fill::screen#2 = screen_fill::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (screen),y
    // *screen++ = ch;
    // [62] screen_fill::screen#1 = ++ screen_fill::screen#2 -- pbuz1=_inc_pbuz1 
    inc.z screen
    bne !+
    inc.z screen+1
  !:
    // for(byte x:0..39)
    // [63] screen_fill::x#1 = ++ screen_fill::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [64] if(screen_fill::x#1!=$28) goto screen_fill::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne __b2
    // screen_fill::@3
    // for( byte y: 0..24)
    // [65] screen_fill::y#1 = ++ screen_fill::y#4 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [66] if(screen_fill::y#1!=$19) goto screen_fill::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$19
    cmp.z y
    bne __b1
    // screen_fill::@return
    // }
    // [67] return 
    rts
}
  // point_init
// Initialize the points to be animated
// void point_init(__zp(2) char point_idx)
point_init: {
    .label __5 = $c
    .label __6 = $e
    .label __13 = 9
    .label __17 = $10
    .label __18 = $a
    .label __19 = $e
    .label point_idx = 2
    .label y_diff = $10
    .label abs16s1_return = 3
    .label abs16s2_return = 7
    .label x_stepf = 5
    .label x_diff = $12
    // signed word x_diff = ((signed word)x_end[point_idx])-((signed word)x_start[point_idx])
    // [68] point_init::$13 = point_init::point_idx#0 << 1 -- vbuz1=vbuz2_rol_1 
    lda.z point_idx
    asl
    sta.z __13
    // [69] point_init::x_diff#1 = (int)x_end[point_init::$13] - (int)x_start[point_init::$13] -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 
    tay
    sec
    lda x_end,y
    sbc x_start,y
    sta.z x_diff
    lda x_end+1,y
    sbc x_start+1,y
    sta.z x_diff+1
    // signed word y_diff = ((signed word)y_end[point_idx])-((signed word)y_start[point_idx])
    // [70] point_init::$17 = (int)y_end[point_init::point_idx#0] -- vwsz1=_sword_pbuc1_derefidx_vbuz2 
    ldy.z point_idx
    lda y_end,y
    sta.z __17
    lda #0
    sta.z __17+1
    // [71] point_init::$18 = (int)y_start[point_init::point_idx#0] -- vwsz1=_sword_pbuc1_derefidx_vbuz2 
    lda y_start,y
    sta.z __18
    lda #0
    sta.z __18+1
    // [72] point_init::y_diff#0 = point_init::$17 - point_init::$18 -- vwsz1=vwsz1_minus_vwsz2 
    lda.z y_diff
    sec
    sbc.z __18
    sta.z y_diff
    lda.z y_diff+1
    sbc.z __18+1
    sta.z y_diff+1
    // point_init::abs16s1
    // if(w<0)
    // [73] if(point_init::x_diff#1<0) goto point_init::abs16s1_@1 -- vwsz1_lt_0_then_la1 
    lda.z x_diff+1
    bpl !abs16s1___b1+
    jmp abs16s1___b1
  !abs16s1___b1:
    // point_init::abs16s1_@3
    // [74] point_init::abs16s1_return#6 = (unsigned int)point_init::x_diff#1 -- vwuz1=vwuz2 
    lda.z x_diff
    sta.z abs16s1_return
    lda.z x_diff+1
    sta.z abs16s1_return+1
    // [75] phi from point_init::abs16s1_@1 point_init::abs16s1_@3 to point_init::abs16s1_@return [phi:point_init::abs16s1_@1/point_init::abs16s1_@3->point_init::abs16s1_@return]
    // [75] phi point_init::abs16s1_return#2 = point_init::abs16s1_return#5 [phi:point_init::abs16s1_@1/point_init::abs16s1_@3->point_init::abs16s1_@return#0] -- register_copy 
    // point_init::abs16s1_@return
    // point_init::abs16s2
  abs16s2:
    // if(w<0)
    // [76] if(point_init::y_diff#0<0) goto point_init::abs16s2_@1 -- vwsz1_lt_0_then_la1 
    lda.z y_diff+1
    bpl !abs16s2___b1+
    jmp abs16s2___b1
  !abs16s2___b1:
    // point_init::abs16s2_@3
    // [77] point_init::abs16s2_return#6 = (unsigned int)point_init::y_diff#0 -- vwuz1=vwuz2 
    lda.z y_diff
    sta.z abs16s2_return
    lda.z y_diff+1
    sta.z abs16s2_return+1
    // [78] phi from point_init::abs16s2_@1 point_init::abs16s2_@3 to point_init::abs16s2_@return [phi:point_init::abs16s2_@1/point_init::abs16s2_@3->point_init::abs16s2_@return]
    // [78] phi point_init::abs16s2_return#2 = point_init::abs16s2_return#5 [phi:point_init::abs16s2_@1/point_init::abs16s2_@3->point_init::abs16s2_@return#0] -- register_copy 
    // point_init::abs16s2_@return
    // point_init::@6
  __b6:
    // if(abs16s(x_diff)>abs16s(y_diff))
    // [79] if(point_init::abs16s1_return#2>point_init::abs16s2_return#2) goto point_init::@1 -- vwuz1_gt_vwuz2_then_la1 
    lda.z abs16s2_return+1
    cmp.z abs16s1_return+1
    bcc __b1
    bne !+
    lda.z abs16s2_return
    cmp.z abs16s1_return
    bcc __b1
  !:
    // point_init::@2
  __b2:
    // x_start[point_idx]*$10
    // [80] point_init::$5 = x_start[point_init::$13] << 4 -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 
    ldy.z __13
    lda x_start,y
    asl
    sta.z __5
    lda x_start+1,y
    rol
    sta.z __5+1
    asl.z __5
    rol.z __5+1
    asl.z __5
    rol.z __5+1
    asl.z __5
    rol.z __5+1
    // x_cur[point_idx] = x_start[point_idx]*$10
    // [81] x_cur[point_init::$13] = point_init::$5 -- pwuc1_derefidx_vbuz1=vwuz2 
    lda.z __5
    sta x_cur,y
    lda.z __5+1
    sta x_cur+1,y
    // ((word)y_start[point_idx])*$10
    // [82] point_init::$19 = (unsigned int)y_start[point_init::point_idx#0] -- vwuz1=_word_pbuc1_derefidx_vbuz2 
    ldy.z point_idx
    lda y_start,y
    sta.z __19
    lda #0
    sta.z __19+1
    // [83] point_init::$6 = point_init::$19 << 4 -- vwuz1=vwuz1_rol_4 
    asl.z __6
    rol.z __6+1
    asl.z __6
    rol.z __6+1
    asl.z __6
    rol.z __6+1
    asl.z __6
    rol.z __6+1
    // y_cur[point_idx] = ((word)y_start[point_idx])*$10
    // [84] y_cur[point_init::$13] = point_init::$6 -- pwuc1_derefidx_vbuz1=vwuz2 
    ldy.z __13
    lda.z __6
    sta y_cur,y
    lda.z __6+1
    sta y_cur+1,y
    // delay[point_idx] = DELAY
    // [85] delay[point_init::point_idx#0] = DELAY -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #DELAY
    ldy.z point_idx
    sta delay,y
    // point_init::@return
    // }
    // [86] return 
    rts
    // point_init::@1
  __b1:
    // if(x_diff<0)
    // [87] if(point_init::x_diff#1<0) goto point_init::@4 -- vwsz1_lt_0_then_la1 
    // X is driver - abs(y/x) is < 1
    lda.z x_diff+1
    bmi __b4
    // point_init::@3
    // x_add[point_idx] = $10
    // [88] x_add[point_init::point_idx#0] = $10 -- pbsc1_derefidx_vbuz1=vbsc2 
    // x add = 1.0
    lda #$10
    ldy.z point_idx
    sta x_add,y
    // point_init::@5
  __b5:
    // signed word x_stepf = divr16s(0, x_diff, y_diff)
    // [89] divr16s::divisor#0 = point_init::x_diff#1
    // [90] divr16s::rem#0 = point_init::y_diff#0
    // [91] call divr16s
    // [108] phi from point_init::@5 to divr16s [phi:point_init::@5->divr16s]
    jsr divr16s
    // signed word x_stepf = divr16s(0, x_diff, y_diff)
    // [92] divr16s::return#3 = divr16s::return#2
    // point_init::@7
    // [93] point_init::x_stepf#0 = divr16s::return#3
    // BYTE1(x_stepf)
    // [94] point_init::$9 = byte1  point_init::x_stepf#0 -- vbuaa=_byte1_vwsz1 
    lda.z x_stepf+1
    // BYTE1(x_stepf)/$10
    // [95] point_init::$10 = point_init::$9 >> 4 -- vbuaa=vbuaa_ror_4 
    lsr
    lsr
    lsr
    lsr
    // y_add[point_idx] = (signed byte)(BYTE1(x_stepf)/$10)
    // [96] y_add[point_init::point_idx#0] = (signed char)point_init::$10 -- pbsc1_derefidx_vbuz1=vbsaa 
    ldy.z point_idx
    sta y_add,y
    jmp __b2
    // point_init::@4
  __b4:
    // x_add[point_idx] = -$10
    // [97] x_add[point_init::point_idx#0] = -$10 -- pbsc1_derefidx_vbuz1=vbsc2 
    // x add = -1.0
    lda #-$10
    ldy.z point_idx
    sta x_add,y
    jmp __b5
    // point_init::abs16s2_@1
  abs16s2___b1:
    // -w
    // [98] point_init::abs16s2_return#0 = - point_init::y_diff#0 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z y_diff
    sta.z abs16s2_return
    lda #0
    sbc.z y_diff+1
    sta.z abs16s2_return+1
    // [99] point_init::abs16s2_return#5 = (unsigned int)point_init::abs16s2_return#0
    jmp __b6
    // point_init::abs16s1_@1
  abs16s1___b1:
    // -w
    // [100] point_init::abs16s1_return#0 = - point_init::x_diff#1 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z x_diff
    sta.z abs16s1_return
    lda #0
    sbc.z x_diff+1
    sta.z abs16s1_return+1
    // [101] point_init::abs16s1_return#5 = (unsigned int)point_init::abs16s1_return#0
    jmp abs16s2
}
  // bitmap_plot
// Plot a single dot in the bitmap
// void bitmap_plot(__zp(7) unsigned int x, __register(X) char y)
bitmap_plot: {
    .label __1 = $12
    .label x = 7
    .label plotter = $10
    // MAKEWORD( bitmap_plot_yhi[y], bitmap_plot_ylo[y] )
    // [102] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#0] w= bitmap_plot_ylo[bitmap_plot::y#0] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx 
    lda bitmap_plot_yhi,x
    sta.z plotter+1
    lda bitmap_plot_ylo,x
    sta.z plotter
    // x & $fff8
    // [103] bitmap_plot::$1 = bitmap_plot::x#0 & $fff8 -- vwuz1=vwuz2_band_vwuc1 
    lda.z x
    and #<$fff8
    sta.z __1
    lda.z x+1
    and #>$fff8
    sta.z __1+1
    // plotter += ( x & $fff8 )
    // [104] bitmap_plot::plotter#1 = (char *)bitmap_plot::plotter#0 + bitmap_plot::$1 -- pbuz1=pbuz1_plus_vwuz2 
    clc
    lda.z plotter
    adc.z __1
    sta.z plotter
    lda.z plotter+1
    adc.z __1+1
    sta.z plotter+1
    // BYTE0(x)
    // [105] bitmap_plot::$2 = byte0  bitmap_plot::x#0 -- vbuxx=_byte0_vwuz1 
    ldx.z x
    // *plotter |= bitmap_plot_bit[BYTE0(x)]
    // [106] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$2] -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx 
    lda bitmap_plot_bit,x
    ldy #0
    ora (plotter),y
    sta (plotter),y
    // bitmap_plot::@return
    // }
    // [107] return 
    rts
}
  // divr16s
// Perform division on two signed 16-bit numbers with an initial remainder.
// Returns dividend/divisor. The remainder will be set into the global variable rem16s.
// Implemented using simple binary division
// Follows the C99 standard by truncating toward zero on negative results.
// See http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf section 6.5.5
// __zp(5) int divr16s(int dividend, __zp($12) int divisor, __zp($10) int rem)
divr16s: {
    .label remu = $10
    .label divisoru = $12
    .label resultu = 5
    .label return = 5
    .label divisor = $12
    .label rem = $10
    // divr16s::@10
    // if(dividend<0 || rem<0)
    // [109] if(divr16s::rem#0<0) goto divr16s::@1 -- vwsz1_lt_0_then_la1 
    lda.z rem+1
    bmi __b1
    // divr16s::@6
    // [110] divr16s::remu#8 = (unsigned int)divr16s::rem#0
    // [111] phi from divr16s::@6 to divr16s::@2 [phi:divr16s::@6->divr16s::@2]
    // [111] phi divr16s::remu#3 = divr16s::remu#8 [phi:divr16s::@6->divr16s::@2#0] -- register_copy 
    // [111] phi divr16s::neg#3 = 0 [phi:divr16s::@6->divr16s::@2#1] -- vbuyy=vbuc1 
    ldy #0
    // divr16s::@2
  __b2:
    // if(divisor<0)
    // [112] if(divr16s::divisor#0<0) goto divr16s::@3 -- vwsz1_lt_0_then_la1 
    lda.z divisor+1
    bmi __b3
    // divr16s::@7
    // [113] divr16s::divisoru#5 = (unsigned int)divr16s::divisor#0
    // [114] phi from divr16s::@3 divr16s::@7 to divr16s::@4 [phi:divr16s::@3/divr16s::@7->divr16s::@4]
    // [114] phi divr16s::neg#4 = divr16s::neg#2 [phi:divr16s::@3/divr16s::@7->divr16s::@4#0] -- register_copy 
    // [114] phi divr16s::divisoru#3 = divr16s::divisoru#4 [phi:divr16s::@3/divr16s::@7->divr16s::@4#1] -- register_copy 
    // divr16s::@4
  __b4:
    // unsigned int resultu = divr16u(dividendu, divisoru, remu)
    // [115] divr16u::divisor#0 = divr16s::divisoru#3
    // [116] divr16u::rem#3 = divr16s::remu#3
    // [117] call divr16u
    // [130] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u]
    jsr divr16u
    // unsigned int resultu = divr16u(dividendu, divisoru, remu)
    // [118] divr16u::return#2 = divr16u::return#0
    // divr16s::@9
    // [119] divr16s::resultu#0 = divr16u::return#2
    // if(neg==0)
    // [120] if(divr16s::neg#4==0) goto divr16s::@5 -- vbuyy_eq_0_then_la1 
    cpy #0
    beq __breturn
    // divr16s::@8
    // return -(signed int)resultu;
    // [121] divr16s::return#1 = - (int)divr16s::resultu#0 -- vwsz1=_neg_vwsz1 
    lda #0
    sec
    sbc.z return
    sta.z return
    lda #0
    sbc.z return+1
    sta.z return+1
    // [122] phi from divr16s::@5 divr16s::@8 to divr16s::@return [phi:divr16s::@5/divr16s::@8->divr16s::@return]
    // [122] phi divr16s::return#2 = divr16s::return#6 [phi:divr16s::@5/divr16s::@8->divr16s::@return#0] -- register_copy 
    // divr16s::@return
  __breturn:
    // }
    // [123] return 
    rts
    // divr16s::@5
    // [124] divr16s::return#6 = (int)divr16s::resultu#0
    // divr16s::@3
  __b3:
    // -divisor
    // [125] divr16s::divisoru#1 = - divr16s::divisor#0 -- vwsz1=_neg_vwsz1 
    lda #0
    sec
    sbc.z divisoru
    sta.z divisoru
    lda #0
    sbc.z divisoru+1
    sta.z divisoru+1
    // neg = neg ^ 1
    // [126] divr16s::neg#2 = divr16s::neg#3 ^ 1 -- vbuyy=vbuyy_bxor_vbuc1 
    tya
    eor #1
    tay
    // [127] divr16s::divisoru#4 = (unsigned int)divr16s::divisoru#1
    jmp __b4
    // divr16s::@1
  __b1:
    // -rem
    // [128] divr16s::remu#1 = - divr16s::rem#0 -- vwsz1=_neg_vwsz1 
    lda #0
    sec
    sbc.z remu
    sta.z remu
    lda #0
    sbc.z remu+1
    sta.z remu+1
    // [129] divr16s::remu#7 = (unsigned int)divr16s::remu#1
    // [111] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2]
    // [111] phi divr16s::remu#3 = divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy 
    // [111] phi divr16s::neg#3 = 1 [phi:divr16s::@1->divr16s::@2#1] -- vbuyy=vbuc1 
    ldy #1
    jmp __b2
}
  // divr16u
// Performs division on two 16 bit unsigned ints and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// __zp(5) unsigned int divr16u(__zp($a) unsigned int dividend, __zp($12) unsigned int divisor, __zp($10) unsigned int rem)
divr16u: {
    .label rem = $10
    .label dividend = $a
    .label quotient = 5
    .label return = 5
    .label divisor = $12
    // [131] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
    // [131] phi divr16u::i#2 = 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [131] phi divr16u::quotient#3 = 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 
    txa
    sta.z quotient
    sta.z quotient+1
    // [131] phi divr16u::dividend#2 = 0 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 
    sta.z dividend
    sta.z dividend+1
    // [131] phi divr16u::rem#4 = divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy 
    // [131] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
    // [131] phi divr16u::i#2 = divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
    // [131] phi divr16u::quotient#3 = divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
    // [131] phi divr16u::dividend#2 = divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
    // [131] phi divr16u::rem#4 = divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    // divr16u::@1
  __b1:
    // rem = rem << 1
    // [132] divr16u::rem#0 = divr16u::rem#4 << 1 -- vwuz1=vwuz1_rol_1 
    asl.z rem
    rol.z rem+1
    // BYTE1(dividend)
    // [133] divr16u::$1 = byte1  divr16u::dividend#2 -- vbuaa=_byte1_vwuz1 
    lda.z dividend+1
    // BYTE1(dividend) & $80
    // [134] divr16u::$2 = divr16u::$1 & $80 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
    // if( (BYTE1(dividend) & $80) != 0 )
    // [135] if(divr16u::$2==0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq __b2
    // divr16u::@4
    // rem = rem | 1
    // [136] divr16u::rem#1 = divr16u::rem#0 | 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora.z rem
    sta.z rem
    // [137] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
    // [137] phi divr16u::rem#5 = divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    // divr16u::@2
  __b2:
    // dividend = dividend << 1
    // [138] divr16u::dividend#0 = divr16u::dividend#2 << 1 -- vwuz1=vwuz1_rol_1 
    asl.z dividend
    rol.z dividend+1
    // quotient = quotient << 1
    // [139] divr16u::quotient#1 = divr16u::quotient#3 << 1 -- vwuz1=vwuz1_rol_1 
    asl.z quotient
    rol.z quotient+1
    // if(rem>=divisor)
    // [140] if(divr16u::rem#5<divr16u::divisor#0) goto divr16u::@3 -- vwuz1_lt_vwuz2_then_la1 
    lda.z rem+1
    cmp.z divisor+1
    bcc __b3
    bne !+
    lda.z rem
    cmp.z divisor
    bcc __b3
  !:
    // divr16u::@5
    // quotient++;
    // [141] divr16u::quotient#2 = ++ divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc.z quotient
    bne !+
    inc.z quotient+1
  !:
    // rem = rem - divisor
    // [142] divr16u::rem#2 = divr16u::rem#5 - divr16u::divisor#0 -- vwuz1=vwuz1_minus_vwuz2 
    lda.z rem
    sec
    sbc.z divisor
    sta.z rem
    lda.z rem+1
    sbc.z divisor+1
    sta.z rem+1
    // [143] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
    // [143] phi divr16u::return#0 = divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
    // [143] phi divr16u::rem#9 = divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    // divr16u::@3
  __b3:
    // for( char i : 0..15)
    // [144] divr16u::i#1 = ++ divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [145] if(divr16u::i#1!=$10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne __b1
    // divr16u::@return
    // }
    // [146] return 
    rts
}
  // File Data
.segment Data
  // The coordinates of the lines to animate
  x_start: .word $a, $14, $1e, $1e
  y_start: .byte $a, $a, $a, $14
  x_end: .word $14, $a, $14, $14
  y_end: .byte $14, $14, $a, $14
  // Current x position fixed point [12.4]
  x_cur: .fill 2*SIZE, 0
  // Current y position fixed point [12.4]
  y_cur: .fill 2*SIZE, 0
  // X position addition per frame s[3.4]
  x_add: .fill SIZE, 0
  // Y position addition per frame s[3.4]
  y_add: .fill SIZE, 0
  // Frame delay (counted down to 0)
  delay: .fill SIZE, 0
  // Tables for the plotter - initialized by calling bitmap_init();
  bitmap_plot_ylo: .fill $100, 0
  bitmap_plot_yhi: .fill $100, 0
  bitmap_plot_bit: .fill $100, 0

