
void main()
main: scope:[main]  from
  asm { sei  }
  [1] call init
  to:main::@1
main::@1: scope:[main]  from main
  [2] phi()
  [3] call anim
  to:main::@return
main::@return: scope:[main]  from main::@1
  [4] return 
  to:@return

void init()
init: scope:[init]  from main
  [5] phi()
  [6] call mulf_init
  to:init::@2
init::@2: scope:[init]  from init
  [7] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_ENABLE) = $ff
  to:init::@1
init::@1: scope:[init]  from init::@1 init::@2
  [8] init::i#2 = phi( init::@1/init::i#1, init::@2/0 )
  [9] init::sprites_ptr#0[init::i#2] = (char)SPRITE/$40
  [10] SPRITES_COLOR[init::i#2] = GREEN
  [11] init::i#1 = ++ init::i#2
  [12] if(init::i#1!=8) goto init::@1
  to:init::@return
init::@return: scope:[init]  from init::@1
  [13] return 
  to:@return

void anim()
anim: scope:[anim]  from main::@1
  [14] phi()
  to:anim::@1
anim::@1: scope:[anim]  from anim anim::@15
  [15] anim::angle#9 = phi( anim/0, anim::@15/anim::angle#1 )
  to:anim::@2
anim::@2: scope:[anim]  from anim::@1 anim::@2
  [16] if(*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)!=$ff) goto anim::@2
  to:anim::@3
anim::@3: scope:[anim]  from anim::@2
  [17] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR)
  [18] call clock_start
  to:anim::@4
anim::@4: scope:[anim]  from anim::@3 anim::@5
  [19] anim::sprite_msb#10 = phi( anim::@3/0, anim::@5/anim::sprite_msb#5 )
  [19] anim::i#10 = phi( anim::@3/0, anim::@5/anim::i#1 )
  [20] anim::x#0 = xs[anim::i#10]
  [21] anim::y#0 = ys[anim::i#10]
  to:anim::mulf8s_prepare1
anim::mulf8s_prepare1: scope:[anim]  from anim::@4
  [22] mulf8u_prepare::a#3 = (char)(signed char)COS[anim::angle#9]
  [23] call mulf8u_prepare
  to:anim::@8
anim::@8: scope:[anim]  from anim::mulf8s_prepare1
  [24] mulf8s_prepared::b#0 = anim::x#0
  [25] call mulf8s_prepared
  to:anim::@10
anim::@10: scope:[anim]  from anim::@8
  [26] anim::$4 = (int)mulf8s_prepared::m#4
  [27] anim::xr#0 = anim::$4 << 1
  [28] mulf8s_prepared::b#1 = anim::y#0
  [29] call mulf8s_prepared
  to:anim::@11
anim::@11: scope:[anim]  from anim::@10
  [30] anim::$6 = (int)mulf8s_prepared::m#4
  [31] anim::yr#0 = anim::$6 << 1
  to:anim::mulf8s_prepare2
anim::mulf8s_prepare2: scope:[anim]  from anim::@11
  [32] mulf8u_prepare::a#4 = (char)(signed char)SIN[anim::angle#9]
  [33] call mulf8u_prepare
  to:anim::@9
anim::@9: scope:[anim]  from anim::mulf8s_prepare2
  [34] mulf8s_prepared::b#2 = anim::y#0
  [35] call mulf8s_prepared
  to:anim::@12
anim::@12: scope:[anim]  from anim::@9
  [36] anim::$9 = (int)mulf8s_prepared::m#4
  [37] anim::$10 = anim::$9 << 1
  [38] anim::xr#1 = anim::xr#0 - anim::$10
  [39] mulf8s_prepared::b#3 = anim::x#0
  [40] call mulf8s_prepared
  to:anim::@13
anim::@13: scope:[anim]  from anim::@12
  [41] anim::$11 = (int)mulf8s_prepared::m#4
  [42] anim::$12 = anim::$11 << 1
  [43] anim::yr#1 = anim::yr#0 + anim::$12
  [44] anim::$14 = byte1  anim::xr#1
  [45] anim::xpos#0 = (signed char)anim::$14 + $18+$95
  [46] anim::sprite_msb#1 = anim::sprite_msb#10 >> 1
  [47] anim::$17 = byte1  anim::xpos#0
  [48] if(anim::$17==0) goto anim::@5
  to:anim::@6
anim::@6: scope:[anim]  from anim::@13
  [49] anim::sprite_msb#2 = anim::sprite_msb#1 | $80
  to:anim::@5
anim::@5: scope:[anim]  from anim::@13 anim::@6
  [50] anim::sprite_msb#5 = phi( anim::@13/anim::sprite_msb#1, anim::@6/anim::sprite_msb#2 )
  [51] anim::$21 = byte1  anim::yr#1
  [52] anim::ypos#0 = anim::$21 + $59+$33
  [53] anim::i2#0 = anim::i#10 << 1
  [54] anim::$24 = byte0  anim::xpos#0
  [55] SPRITES_XPOS[anim::i2#0] = anim::$24
  [56] SPRITES_YPOS[anim::i2#0] = anim::ypos#0
  [57] anim::i#1 = ++ anim::i#10
  [58] if(anim::i#1!=8) goto anim::@4
  to:anim::@7
anim::@7: scope:[anim]  from anim::@5
  [59] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_SPRITES_XMSB) = anim::sprite_msb#5
  [60] anim::angle#1 = ++ anim::angle#9
  [61] call clock
  [62] clock::return#2 = clock::return#0
  to:anim::@14
anim::@14: scope:[anim]  from anim::@7
  [63] anim::$26 = clock::return#2
  [64] anim::cyclecount#0 = anim::$26 - CLOCKS_PER_INIT
  [65] print_ulong_at::dw#0 = anim::cyclecount#0
  [66] call print_ulong_at
  to:anim::@15
anim::@15: scope:[anim]  from anim::@14
  [67] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = LIGHT_BLUE
  to:anim::@1

void mulf_init()
mulf_init: scope:[mulf_init]  from init
  [68] phi()
  to:mulf_init::@1
mulf_init::@1: scope:[mulf_init]  from mulf_init mulf_init::@3
  [69] mulf_init::x_2#3 = phi( mulf_init/0, mulf_init::@3/mulf_init::x_2#2 )
  [69] mulf_init::sqr1_hi#2 = phi( mulf_init/mulf_sqr1_hi+1, mulf_init::@3/mulf_init::sqr1_hi#1 )
  [69] mulf_init::sqr#4 = phi( mulf_init/0, mulf_init::@3/mulf_init::sqr#1 )
  [69] mulf_init::c#2 = phi( mulf_init/0, mulf_init::@3/mulf_init::c#1 )
  [69] mulf_init::sqr1_lo#2 = phi( mulf_init/mulf_sqr1_lo+1, mulf_init::@3/mulf_init::sqr1_lo#1 )
  [70] if(mulf_init::sqr1_lo#2!=mulf_sqr1_lo+$200) goto mulf_init::@2
  to:mulf_init::@5
mulf_init::@5: scope:[mulf_init]  from mulf_init::@1 mulf_init::@8
  [71] mulf_init::dir#2 = phi( mulf_init::@1/$ff, mulf_init::@8/mulf_init::dir#4 )
  [71] mulf_init::sqr2_hi#2 = phi( mulf_init::@1/mulf_sqr2_hi, mulf_init::@8/mulf_init::sqr2_hi#1 )
  [71] mulf_init::x_255#2 = phi( mulf_init::@1/-1, mulf_init::@8/mulf_init::x_255#1 )
  [71] mulf_init::sqr2_lo#2 = phi( mulf_init::@1/mulf_sqr2_lo, mulf_init::@8/mulf_init::sqr2_lo#1 )
  [72] if(mulf_init::sqr2_lo#2!=mulf_sqr2_lo+$1ff) goto mulf_init::@6
  to:mulf_init::@7
mulf_init::@7: scope:[mulf_init]  from mulf_init::@5
  [73] *(mulf_sqr2_lo+$1ff) = *(mulf_sqr1_lo+$100)
  [74] *(mulf_sqr2_hi+$1ff) = *(mulf_sqr1_hi+$100)
  to:mulf_init::@return
mulf_init::@return: scope:[mulf_init]  from mulf_init::@7
  [75] return 
  to:@return
mulf_init::@6: scope:[mulf_init]  from mulf_init::@5
  [76] *mulf_init::sqr2_lo#2 = mulf_sqr1_lo[mulf_init::x_255#2]
  [77] *mulf_init::sqr2_hi#2 = mulf_sqr1_hi[mulf_init::x_255#2]
  [78] mulf_init::sqr2_hi#1 = ++ mulf_init::sqr2_hi#2
  [79] mulf_init::x_255#1 = mulf_init::x_255#2 + mulf_init::dir#2
  [80] if(mulf_init::x_255#1!=0) goto mulf_init::@9
  to:mulf_init::@8
mulf_init::@9: scope:[mulf_init]  from mulf_init::@6
  [81] phi()
  to:mulf_init::@8
mulf_init::@8: scope:[mulf_init]  from mulf_init::@6 mulf_init::@9
  [82] mulf_init::dir#4 = phi( mulf_init::@6/1, mulf_init::@9/mulf_init::dir#2 )
  [83] mulf_init::sqr2_lo#1 = ++ mulf_init::sqr2_lo#2
  to:mulf_init::@5
mulf_init::@2: scope:[mulf_init]  from mulf_init::@1
  [84] mulf_init::c#1 = ++ mulf_init::c#2
  [85] mulf_init::$1 = mulf_init::c#1 & 1
  [86] if(mulf_init::$1!=0) goto mulf_init::@3
  to:mulf_init::@4
mulf_init::@4: scope:[mulf_init]  from mulf_init::@2
  [87] mulf_init::x_2#1 = ++ mulf_init::x_2#3
  [88] mulf_init::sqr#2 = ++ mulf_init::sqr#4
  to:mulf_init::@3
mulf_init::@3: scope:[mulf_init]  from mulf_init::@2 mulf_init::@4
  [89] mulf_init::x_2#2 = phi( mulf_init::@2/mulf_init::x_2#3, mulf_init::@4/mulf_init::x_2#1 )
  [89] mulf_init::sqr#3 = phi( mulf_init::@2/mulf_init::sqr#4, mulf_init::@4/mulf_init::sqr#2 )
  [90] mulf_init::$4 = byte0  mulf_init::sqr#3
  [91] *mulf_init::sqr1_lo#2 = mulf_init::$4
  [92] mulf_init::$5 = byte1  mulf_init::sqr#3
  [93] *mulf_init::sqr1_hi#2 = mulf_init::$5
  [94] mulf_init::sqr1_hi#1 = ++ mulf_init::sqr1_hi#2
  [95] mulf_init::sqr#1 = mulf_init::sqr#3 + mulf_init::x_2#2
  [96] mulf_init::sqr1_lo#1 = ++ mulf_init::sqr1_lo#2
  to:mulf_init::@1

void clock_start()
clock_start: scope:[clock_start]  from anim::@3
  [97] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0
  [98] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
  [99] *CIA2_TIMER_AB = $ffffffff
  [100] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
  [101] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START
  to:clock_start::@return
clock_start::@return: scope:[clock_start]  from clock_start
  [102] return 
  to:@return

void mulf8u_prepare(char a)
mulf8u_prepare: scope:[mulf8u_prepare]  from anim::mulf8s_prepare1 anim::mulf8s_prepare2
  [103] mulf8u_prepare::a#2 = phi( anim::mulf8s_prepare1/mulf8u_prepare::a#3, anim::mulf8s_prepare2/mulf8u_prepare::a#4 )
  [104] *mulf8u_prepare::memA = mulf8u_prepare::a#2
  asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1  }
  to:mulf8u_prepare::@return
mulf8u_prepare::@return: scope:[mulf8u_prepare]  from mulf8u_prepare
  [106] return 
  to:@return

int mulf8s_prepared(signed char b)
mulf8s_prepared: scope:[mulf8s_prepared]  from anim::@10 anim::@12 anim::@8 anim::@9
  [107] mulf8s_prepared::b#4 = phi( anim::@10/mulf8s_prepared::b#1, anim::@12/mulf8s_prepared::b#3, anim::@8/mulf8s_prepared::b#0, anim::@9/mulf8s_prepared::b#2 )
  [108] mulf8u_prepared::b#0 = (char)mulf8s_prepared::b#4
  [109] call mulf8u_prepared
  [110] mulf8u_prepared::return#2 = mulf8u_prepared::return#0
  to:mulf8s_prepared::@5
mulf8s_prepared::@5: scope:[mulf8s_prepared]  from mulf8s_prepared
  [111] mulf8s_prepared::m#0 = mulf8u_prepared::return#2
  [112] if(*mulf8s_prepared::memA>=0) goto mulf8s_prepared::@1
  to:mulf8s_prepared::@3
mulf8s_prepared::@3: scope:[mulf8s_prepared]  from mulf8s_prepared::@5
  [113] mulf8s_prepared::$6 = byte1  mulf8s_prepared::m#0
  [114] mulf8s_prepared::$11 = mulf8s_prepared::$6 - (char)mulf8s_prepared::b#4
  [115] mulf8s_prepared::m#1 = mulf8s_prepared::m#0 byte1= mulf8s_prepared::$11
  to:mulf8s_prepared::@1
mulf8s_prepared::@1: scope:[mulf8s_prepared]  from mulf8s_prepared::@3 mulf8s_prepared::@5
  [116] mulf8s_prepared::m#5 = phi( mulf8s_prepared::@3/mulf8s_prepared::m#1, mulf8s_prepared::@5/mulf8s_prepared::m#0 )
  [117] if(mulf8s_prepared::b#4>=0) goto mulf8s_prepared::@2
  to:mulf8s_prepared::@4
mulf8s_prepared::@4: scope:[mulf8s_prepared]  from mulf8s_prepared::@1
  [118] mulf8s_prepared::$9 = byte1  mulf8s_prepared::m#5
  [119] mulf8s_prepared::$12 = mulf8s_prepared::$9 - (char)*mulf8s_prepared::memA
  [120] mulf8s_prepared::m#2 = mulf8s_prepared::m#5 byte1= mulf8s_prepared::$12
  to:mulf8s_prepared::@2
mulf8s_prepared::@2: scope:[mulf8s_prepared]  from mulf8s_prepared::@1 mulf8s_prepared::@4
  [121] mulf8s_prepared::m#4 = phi( mulf8s_prepared::@1/mulf8s_prepared::m#5, mulf8s_prepared::@4/mulf8s_prepared::m#2 )
  to:mulf8s_prepared::@return
mulf8s_prepared::@return: scope:[mulf8s_prepared]  from mulf8s_prepared::@2
  [122] return 
  to:@return

unsigned long clock()
clock: scope:[clock]  from anim::@7
  [123] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0
  [124] clock::return#0 = $ffffffff - *CIA2_TIMER_AB
  [125] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START
  to:clock::@return
clock::@return: scope:[clock]  from clock
  [126] return 
  to:@return

void print_ulong_at(unsigned long dw , char *at)
print_ulong_at: scope:[print_ulong_at]  from anim::@14
  [127] print_uint_at::w#0 = word1  print_ulong_at::dw#0
  [128] call print_uint_at
  to:print_ulong_at::@1
print_ulong_at::@1: scope:[print_ulong_at]  from print_ulong_at
  [129] print_uint_at::w#1 = word0  print_ulong_at::dw#0
  [130] call print_uint_at
  to:print_ulong_at::@return
print_ulong_at::@return: scope:[print_ulong_at]  from print_ulong_at::@1
  [131] return 
  to:@return

unsigned int mulf8u_prepared(char b)
mulf8u_prepared: scope:[mulf8u_prepared]  from mulf8s_prepared
  [132] *mulf8u_prepared::memB = mulf8u_prepared::b#0
  asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB  }
  [134] mulf8u_prepared::return#0 = *mulf8u_prepared::memB w= *mulf8u_prepared::resL
  to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared]  from mulf8u_prepared
  [135] return 
  to:@return

void print_uint_at(unsigned int w , char *at)
print_uint_at: scope:[print_uint_at]  from print_ulong_at print_ulong_at::@1
  [136] print_uint_at::at#2 = phi( print_ulong_at/SCREEN, print_ulong_at::@1/SCREEN+4 )
  [136] print_uint_at::w#2 = phi( print_ulong_at/print_uint_at::w#0, print_ulong_at::@1/print_uint_at::w#1 )
  [137] print_uchar_at::b#0 = byte1  print_uint_at::w#2
  [138] print_uchar_at::at#0 = print_uint_at::at#2
  [139] call print_uchar_at
  to:print_uint_at::@1
print_uint_at::@1: scope:[print_uint_at]  from print_uint_at
  [140] print_uchar_at::b#1 = byte0  print_uint_at::w#2
  [141] print_uchar_at::at#1 = print_uint_at::at#2 + 2
  [142] call print_uchar_at
  to:print_uint_at::@return
print_uint_at::@return: scope:[print_uint_at]  from print_uint_at::@1
  [143] return 
  to:@return

void print_uchar_at(char b , char *at)
print_uchar_at: scope:[print_uchar_at]  from print_uint_at print_uint_at::@1
  [144] print_uchar_at::at#2 = phi( print_uint_at/print_uchar_at::at#0, print_uint_at::@1/print_uchar_at::at#1 )
  [144] print_uchar_at::b#2 = phi( print_uint_at/print_uchar_at::b#0, print_uint_at::@1/print_uchar_at::b#1 )
  [145] print_uchar_at::$0 = print_uchar_at::b#2 >> 4
  [146] print_char_at::ch#0 = print_hextab[print_uchar_at::$0]
  [147] print_char_at::at#0 = print_uchar_at::at#2
  [148] call print_char_at
  to:print_uchar_at::@1
print_uchar_at::@1: scope:[print_uchar_at]  from print_uchar_at
  [149] print_uchar_at::$2 = print_uchar_at::b#2 & $f
  [150] print_char_at::at#1 = print_uchar_at::at#2 + 1
  [151] print_char_at::ch#1 = print_hextab[print_uchar_at::$2]
  [152] call print_char_at
  to:print_uchar_at::@return
print_uchar_at::@return: scope:[print_uchar_at]  from print_uchar_at::@1
  [153] return 
  to:@return

void print_char_at(char ch , char *at)
print_char_at: scope:[print_char_at]  from print_uchar_at print_uchar_at::@1
  [154] print_char_at::at#2 = phi( print_uchar_at/print_char_at::at#0, print_uchar_at::@1/print_char_at::at#1 )
  [154] print_char_at::ch#2 = phi( print_uchar_at/print_char_at::ch#0, print_uchar_at::@1/print_char_at::ch#1 )
  [155] *print_char_at::at#2 = print_char_at::ch#2
  to:print_char_at::@return
print_char_at::@return: scope:[print_char_at]  from print_char_at
  [156] return 
  to:@return
