Resolved forward reference SPRITE to (byte*) SPRITE
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call call mulf8s_prepare (signed byte) mulf8s::a 
Inlined call call mulf8s_prepare (signed byte) anim::cos_a 
Inlined call call mulf8s_prepare (signed byte) anim::sin_a 

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
  (byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
  (byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
  (byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
  (byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
  (byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
  (word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
  (byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
  (byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
  (byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
  (byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
  (byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
  (byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
  (byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
  (byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
  (byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
  (byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
  (byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
  (byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
  (byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
  (byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
  (byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
  (byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
  (byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
  (byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
  (byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
  (byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
  (byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
  (byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
  (byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
  (byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
  (byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
  (byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
  (byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
  (byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
  (byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
  (byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
  (byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
  (byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
  (byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
  (byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
  (byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
  (byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
  (byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
  (byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
  (byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
  (byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
  (byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
  (byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
  (void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
  (void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
  (byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
  (byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
  (byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
  (byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
  (byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
  (byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
  (byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
  (byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
  (byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
  to:@4
@4: scope:[]  from @begin
  (byte[512]) mulf_sqr1_lo#0 ← { fill( 512, 0) }
  (byte[512]) mulf_sqr1_hi#0 ← { fill( 512, 0) }
  (byte[512]) mulf_sqr2_lo#0 ← { fill( 512, 0) }
  (byte[512]) mulf_sqr2_hi#0 ← { fill( 512, 0) }
  to:@13
mulf_init: scope:[mulf_init]  from init
  (word) mulf_init::sqr#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) mulf_init::x_2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) mulf_init::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte*~) mulf_init::$0 ← (byte[512]) mulf_sqr1_hi#0 + (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte*) mulf_init::sqr1_hi#0 ← (byte*~) mulf_init::$0
  (byte*~) mulf_init::$1 ← (byte[512]) mulf_sqr1_lo#0 + (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte*) mulf_init::sqr1_lo#0 ← (byte*~) mulf_init::$1
  to:mulf_init::@1
mulf_init::@1: scope:[mulf_init]  from mulf_init mulf_init::@2
  (byte) mulf_init::x_2#4 ← phi( mulf_init/(byte) mulf_init::x_2#0 mulf_init::@2/(byte) mulf_init::x_2#2 )
  (byte*) mulf_init::sqr1_hi#3 ← phi( mulf_init/(byte*) mulf_init::sqr1_hi#0 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
  (byte*) mulf_init::sqr1_lo#3 ← phi( mulf_init/(byte*) mulf_init::sqr1_lo#0 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
  (word) mulf_init::sqr#5 ← phi( mulf_init/(word) mulf_init::sqr#0 mulf_init::@2/(word) mulf_init::sqr#1 )
  (byte) mulf_init::c#2 ← phi( mulf_init/(byte) mulf_init::c#0 mulf_init::@2/(byte) mulf_init::c#3 )
  (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
  (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
  (bool~) mulf_init::$3 ← (byte~) mulf_init::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) mulf_init::$4 ← ! (bool~) mulf_init::$3
  if((bool~) mulf_init::$4) goto mulf_init::@2
  to:mulf_init::@5
mulf_init::@2: scope:[mulf_init]  from mulf_init::@1 mulf_init::@5
  (byte) mulf_init::c#3 ← phi( mulf_init::@1/(byte) mulf_init::c#1 mulf_init::@5/(byte) mulf_init::c#4 )
  (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#4 mulf_init::@5/(byte) mulf_init::x_2#1 )
  (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_hi#3 mulf_init::@5/(byte*) mulf_init::sqr1_hi#4 )
  (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_lo#3 mulf_init::@5/(byte*) mulf_init::sqr1_lo#4 )
  (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#5 mulf_init::@5/(word) mulf_init::sqr#2 )
  (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
  *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
  (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
  *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
  (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
  (word~) mulf_init::$7 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
  (word) mulf_init::sqr#1 ← (word~) mulf_init::$7
  (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
  (byte*~) mulf_init::$8 ← (byte[512]) mulf_sqr1_lo#0 + (word/signed word/dword/signed dword) 512
  (bool~) mulf_init::$9 ← (byte*) mulf_init::sqr1_lo#1 != (byte*~) mulf_init::$8
  if((bool~) mulf_init::$9) goto mulf_init::@1
  to:mulf_init::@6
mulf_init::@5: scope:[mulf_init]  from mulf_init::@1
  (byte) mulf_init::c#4 ← phi( mulf_init::@1/(byte) mulf_init::c#1 )
  (byte*) mulf_init::sqr1_hi#4 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_hi#3 )
  (byte*) mulf_init::sqr1_lo#4 ← phi( mulf_init::@1/(byte*) mulf_init::sqr1_lo#3 )
  (word) mulf_init::sqr#4 ← phi( mulf_init::@1/(word) mulf_init::sqr#5 )
  (byte) mulf_init::x_2#3 ← phi( mulf_init::@1/(byte) mulf_init::x_2#4 )
  (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
  (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
  to:mulf_init::@2
mulf_init::@6: scope:[mulf_init]  from mulf_init::@2
  (signed byte/signed word/signed dword~) mulf_init::$10 ← - (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte~) mulf_init::$11 ← ((byte)) (signed byte/signed word/signed dword~) mulf_init::$10
  (byte) mulf_init::x_255#0 ← (byte~) mulf_init::$11
  (byte) mulf_init::dir#0 ← (byte/word/signed word/dword/signed dword) 255
  (byte*) mulf_init::sqr2_hi#0 ← (byte[512]) mulf_sqr2_hi#0
  (byte*) mulf_init::sqr2_lo#0 ← (byte[512]) mulf_sqr2_lo#0
  to:mulf_init::@3
mulf_init::@3: scope:[mulf_init]  from mulf_init::@4 mulf_init::@6
  (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@6/(byte) mulf_init::dir#0 )
  (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#3 mulf_init::@6/(byte*) mulf_init::sqr2_hi#0 )
  (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@6/(byte*) mulf_init::sqr2_lo#0 )
  (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#3 mulf_init::@6/(byte) mulf_init::x_255#0 )
  *((byte*) mulf_init::sqr2_lo#2) ← *((byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
  *((byte*) mulf_init::sqr2_hi#2) ← *((byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
  (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
  (byte~) mulf_init::$12 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
  (byte) mulf_init::x_255#1 ← (byte~) mulf_init::$12
  (bool~) mulf_init::$13 ← (byte) mulf_init::x_255#1 == (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) mulf_init::$14 ← ! (bool~) mulf_init::$13
  if((bool~) mulf_init::$14) goto mulf_init::@4
  to:mulf_init::@7
mulf_init::@4: scope:[mulf_init]  from mulf_init::@3 mulf_init::@7
  (byte) mulf_init::dir#3 ← phi( mulf_init::@3/(byte) mulf_init::dir#2 mulf_init::@7/(byte) mulf_init::dir#1 )
  (byte*) mulf_init::sqr2_hi#3 ← phi( mulf_init::@3/(byte*) mulf_init::sqr2_hi#1 mulf_init::@7/(byte*) mulf_init::sqr2_hi#4 )
  (byte) mulf_init::x_255#3 ← phi( mulf_init::@3/(byte) mulf_init::x_255#1 mulf_init::@7/(byte) mulf_init::x_255#4 )
  (byte*) mulf_init::sqr2_lo#3 ← phi( mulf_init::@3/(byte*) mulf_init::sqr2_lo#2 mulf_init::@7/(byte*) mulf_init::sqr2_lo#4 )
  (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#3
  (byte*~) mulf_init::$15 ← (byte[512]) mulf_sqr2_lo#0 + (word/signed word/dword/signed dword) 511
  (bool~) mulf_init::$16 ← (byte*) mulf_init::sqr2_lo#1 != (byte*~) mulf_init::$15
  if((bool~) mulf_init::$16) goto mulf_init::@3
  to:mulf_init::@8
mulf_init::@7: scope:[mulf_init]  from mulf_init::@3
  (byte*) mulf_init::sqr2_hi#4 ← phi( mulf_init::@3/(byte*) mulf_init::sqr2_hi#1 )
  (byte) mulf_init::x_255#4 ← phi( mulf_init::@3/(byte) mulf_init::x_255#1 )
  (byte*) mulf_init::sqr2_lo#4 ← phi( mulf_init::@3/(byte*) mulf_init::sqr2_lo#2 )
  (byte) mulf_init::dir#1 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  to:mulf_init::@4
mulf_init::@8: scope:[mulf_init]  from mulf_init::@4
  (byte*~) mulf_init::$17 ← (byte[512]) mulf_sqr2_lo#0 + (word/signed word/dword/signed dword) 511
  (byte*~) mulf_init::$18 ← (byte[512]) mulf_sqr1_lo#0 + (word/signed word/dword/signed dword) 256
  *((byte*~) mulf_init::$17) ← *((byte*~) mulf_init::$18)
  (byte*~) mulf_init::$19 ← (byte[512]) mulf_sqr2_hi#0 + (word/signed word/dword/signed dword) 511
  (byte*~) mulf_init::$20 ← (byte[512]) mulf_sqr1_hi#0 + (word/signed word/dword/signed dword) 256
  *((byte*~) mulf_init::$19) ← *((byte*~) mulf_init::$20)
  to:mulf_init::@return
mulf_init::@return: scope:[mulf_init]  from mulf_init::@8
  return 
  to:@return
mulf8u_prepare: scope:[mulf8u_prepare]  from anim::mulf8s_prepare1 anim::mulf8s_prepare2
  (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte) mulf8u_prepare::a#0 anim::mulf8s_prepare2/(byte) mulf8u_prepare::a#1 )
  (byte*) mulf8u_prepare::memA#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 253
  *((byte*) mulf8u_prepare::memA#0) ← (byte) 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
  return 
  to:@return
mulf8u_prepared: scope:[mulf8u_prepared]  from mulf8s_prepared
  (byte) mulf8u_prepared::b#1 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#0 )
  (byte*) mulf8u_prepared::resL#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 254
  (byte*) mulf8u_prepared::memB#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 255
  *((byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#1
  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  }
  (word) mulf8u_prepared::return#0 ← { *((byte*) mulf8u_prepared::memB#0), *((byte*) mulf8u_prepared::resL#0) }
  to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared]  from mulf8u_prepared
  (word) mulf8u_prepared::return#3 ← phi( mulf8u_prepared/(word) mulf8u_prepared::return#0 )
  (word) mulf8u_prepared::return#1 ← (word) mulf8u_prepared::return#3
  return 
  to:@return
mulf8s_prepared: scope:[mulf8s_prepared]  from anim::@17 anim::@18 anim::@20 anim::@23
  (signed byte) mulf8s_prepared::b#4 ← phi( anim::@17/(signed byte) mulf8s_prepared::b#0 anim::@18/(signed byte) mulf8s_prepared::b#2 anim::@20/(signed byte) mulf8s_prepared::b#1 anim::@23/(signed byte) mulf8s_prepared::b#3 )
  (signed byte*) mulf8s_prepared::memA#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 253
  (byte~) mulf8s_prepared::$0 ← ((byte)) (signed byte) mulf8s_prepared::b#4
  (byte) mulf8u_prepared::b#0 ← (byte~) mulf8s_prepared::$0
  call mulf8u_prepared 
  (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#1
  to:mulf8s_prepared::@6
mulf8s_prepared::@6: scope:[mulf8s_prepared]  from mulf8s_prepared
  (signed byte) mulf8s_prepared::b#7 ← phi( mulf8s_prepared/(signed byte) mulf8s_prepared::b#4 )
  (word) mulf8u_prepared::return#4 ← phi( mulf8s_prepared/(word) mulf8u_prepared::return#2 )
  (word~) mulf8s_prepared::$1 ← (word) mulf8u_prepared::return#4
  (word) mulf8s_prepared::m#0 ← (word~) mulf8s_prepared::$1
  (bool~) mulf8s_prepared::$2 ← *((signed byte*) mulf8s_prepared::memA#0) < (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) mulf8s_prepared::$3 ← ! (bool~) mulf8s_prepared::$2
  if((bool~) mulf8s_prepared::$3) goto mulf8s_prepared::@1
  to:mulf8s_prepared::@3
mulf8s_prepared::@1: scope:[mulf8s_prepared]  from mulf8s_prepared::@3 mulf8s_prepared::@6
  (word) mulf8s_prepared::m#6 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
  (signed byte) mulf8s_prepared::b#5 ← phi( mulf8s_prepared::@3/(signed byte) mulf8s_prepared::b#6 mulf8s_prepared::@6/(signed byte) mulf8s_prepared::b#7 )
  (bool~) mulf8s_prepared::$8 ← (signed byte) mulf8s_prepared::b#5 < (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) mulf8s_prepared::$9 ← ! (bool~) mulf8s_prepared::$8
  if((bool~) mulf8s_prepared::$9) goto mulf8s_prepared::@2
  to:mulf8s_prepared::@4
mulf8s_prepared::@3: scope:[mulf8s_prepared]  from mulf8s_prepared::@6
  (signed byte) mulf8s_prepared::b#6 ← phi( mulf8s_prepared::@6/(signed byte) mulf8s_prepared::b#7 )
  (word) mulf8s_prepared::m#3 ← phi( mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
  (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#3
  (byte~) mulf8s_prepared::$6 ← ((byte)) (signed byte) mulf8s_prepared::b#6
  (byte~) mulf8s_prepared::$7 ← (byte~) mulf8s_prepared::$5 - (byte~) mulf8s_prepared::$6
  (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$7
  (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#3 hi= (byte~) mulf8s_prepared::$15
  to:mulf8s_prepared::@1
mulf8s_prepared::@2: scope:[mulf8s_prepared]  from mulf8s_prepared::@1 mulf8s_prepared::@4
  (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#6 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
  (signed word~) mulf8s_prepared::$14 ← ((signed word)) (word) mulf8s_prepared::m#4
  (signed word) mulf8s_prepared::return#0 ← (signed word~) mulf8s_prepared::$14
  to:mulf8s_prepared::@return
mulf8s_prepared::@4: scope:[mulf8s_prepared]  from mulf8s_prepared::@1
  (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#6 )
  (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
  (byte~) mulf8s_prepared::$12 ← ((byte)) *((signed byte*) mulf8s_prepared::memA#0)
  (byte~) mulf8s_prepared::$13 ← (byte~) mulf8s_prepared::$11 - (byte~) mulf8s_prepared::$12
  (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$13
  (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
  to:mulf8s_prepared::@2
mulf8s_prepared::@return: scope:[mulf8s_prepared]  from mulf8s_prepared::@2
  (signed word) mulf8s_prepared::return#6 ← phi( mulf8s_prepared::@2/(signed word) mulf8s_prepared::return#0 )
  (signed word) mulf8s_prepared::return#1 ← (signed word) mulf8s_prepared::return#6
  return 
  to:@return
@13: scope:[]  from @4
  (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*) COS#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
  (byte*~) $0 ← (byte*) COS#0 + (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte*) SIN#0 ← (byte*~) $0
  kickasm(location (byte*) COS#0) {{ {
    .var min = -$7fff
    .var max = $7fff
    .var ampl = max-min;
    .for(var i=0;i<$140;i++) {
        .var rad = i*2*PI/256;
        .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
    }
    }
 }}
  to:@15
main: scope:[main]  from @16
  (byte*) SIN#10 ← phi( @16/(byte*) SIN#13 )
  (byte*) COS#10 ← phi( @16/(byte*) COS#13 )
  (byte*) SPRITE#4 ← phi( @16/(byte*) SPRITE#0 )
  (byte*) SCREEN#3 ← phi( @16/(byte*) SCREEN#4 )
  asm { sei  }
  call init 
  to:main::@1
main::@1: scope:[main]  from main
  (byte*) SIN#8 ← phi( main/(byte*) SIN#10 )
  (byte*) COS#8 ← phi( main/(byte*) COS#10 )
  call anim 
  to:main::@2
main::@2: scope:[main]  from main::@1
  to:main::@return
main::@return: scope:[main]  from main::@2
  return 
  to:@return
init: scope:[init]  from main
  (byte*) SPRITE#3 ← phi( main/(byte*) SPRITE#4 )
  (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#3 )
  call mulf_init 
  to:init::@3
init::@3: scope:[init]  from init
  (byte*) SPRITE#2 ← phi( init/(byte*) SPRITE#3 )
  (byte*) SCREEN#1 ← phi( init/(byte*) SCREEN#2 )
  *((byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255
  (byte*~) init::$1 ← (byte*) SCREEN#1 + (word/signed word/dword/signed dword) 1016
  (byte*) init::sprites_ptr#0 ← (byte*~) init::$1
  (byte) init::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:init::@1
init::@1: scope:[init]  from init::@1 init::@3
  (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte) init::i#0 )
  (byte*) init::sprites_ptr#1 ← phi( init::@1/(byte*) init::sprites_ptr#1 init::@3/(byte*) init::sprites_ptr#0 )
  (byte*) SPRITE#1 ← phi( init::@1/(byte*) SPRITE#1 init::@3/(byte*) SPRITE#2 )
  (byte*~) init::$2 ← (byte*) SPRITE#1 / (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte~) init::$3 ← ((byte)) (byte*~) init::$2
  *((byte*) init::sprites_ptr#1 + (byte) init::i#2) ← (byte~) init::$3
  *((byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (byte) GREEN#0
  (byte) init::i#1 ← (byte) init::i#2 + rangenext(0,7)
  (bool~) init::$4 ← (byte) init::i#1 != rangelast(0,7)
  if((bool~) init::$4) goto init::@1
  to:init::@return
init::@return: scope:[init]  from init::@1
  return 
  to:@return
@15: scope:[]  from @13
  (byte*) SIN#16 ← phi( @13/(byte*) SIN#0 )
  (byte*) COS#16 ← phi( @13/(byte*) COS#0 )
  (byte*) SCREEN#5 ← phi( @13/(byte*) SCREEN#0 )
  (signed byte/signed word/signed dword~) $1 ← - (byte/signed byte/word/signed word/dword/signed dword) 70
  (signed byte/signed word/signed dword~) $2 ← - (byte/signed byte/word/signed word/dword/signed dword) 70
  (signed byte/signed word/signed dword~) $3 ← - (byte/signed byte/word/signed word/dword/signed dword) 70
  (signed byte[8]) xs#0 ← { (signed byte/signed word/signed dword~) $1, (signed byte/signed word/signed dword~) $2, (signed byte/signed word/signed dword~) $3, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 70 }
  (signed byte/signed word/signed dword~) $4 ← - (byte/signed byte/word/signed word/dword/signed dword) 70
  (signed byte/signed word/signed dword~) $5 ← - (byte/signed byte/word/signed word/dword/signed dword) 70
  (signed byte/signed word/signed dword~) $6 ← - (byte/signed byte/word/signed word/dword/signed dword) 70
  (signed byte[8]) ys#0 ← { (signed byte/signed word/signed dword~) $4, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 70, (signed byte/signed word/signed dword~) $5, (byte/signed byte/word/signed word/dword/signed dword) 70, (signed byte/signed word/signed dword~) $6, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 70 }
  to:@16
anim: scope:[anim]  from main::@1
  (byte*) SIN#6 ← phi( main::@1/(byte*) SIN#8 )
  (byte*) COS#6 ← phi( main::@1/(byte*) COS#8 )
  (byte) anim::angle#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:anim::@1
anim::@1: scope:[anim]  from anim anim::@15
  (byte*) SIN#5 ← phi( anim/(byte*) SIN#6 anim::@15/(byte*) SIN#7 )
  (byte) anim::angle#10 ← phi( anim/(byte) anim::angle#0 anim::@15/(byte) anim::angle#1 )
  (byte*) COS#5 ← phi( anim/(byte*) COS#6 anim::@15/(byte*) COS#7 )
  if(true) goto anim::@2
  to:anim::@return
anim::@2: scope:[anim]  from anim::@1
  (byte*) SIN#3 ← phi( anim::@1/(byte*) SIN#5 )
  (byte) anim::angle#6 ← phi( anim::@1/(byte) anim::angle#10 )
  (byte*) COS#3 ← phi( anim::@1/(byte*) COS#5 )
  to:anim::@4
anim::@4: scope:[anim]  from anim::@2 anim::@5
  (byte*) SIN#2 ← phi( anim::@2/(byte*) SIN#3 anim::@5/(byte*) SIN#4 )
  (byte) anim::angle#4 ← phi( anim::@2/(byte) anim::angle#6 anim::@5/(byte) anim::angle#7 )
  (byte*) COS#2 ← phi( anim::@2/(byte*) COS#3 anim::@5/(byte*) COS#4 )
  (bool~) anim::$0 ← *((byte*) RASTER#0) != (byte/word/signed word/dword/signed dword) 255
  if((bool~) anim::$0) goto anim::@5
  to:anim::@6
anim::@5: scope:[anim]  from anim::@4
  (byte*) SIN#4 ← phi( anim::@4/(byte*) SIN#2 )
  (byte) anim::angle#7 ← phi( anim::@4/(byte) anim::angle#4 )
  (byte*) COS#4 ← phi( anim::@4/(byte*) COS#2 )
  to:anim::@4
anim::@6: scope:[anim]  from anim::@4
  (byte*) SIN#1 ← phi( anim::@4/(byte*) SIN#2 )
  (byte) anim::angle#2 ← phi( anim::@4/(byte) anim::angle#4 )
  (byte*) COS#1 ← phi( anim::@4/(byte*) COS#2 )
  *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
  (signed byte~) anim::$1 ← ((signed byte)) *((byte*) COS#1 + (byte) anim::angle#2)
  (signed byte) anim::cos_a#0 ← (signed byte~) anim::$1
  (signed byte~) anim::$2 ← ((signed byte)) *((byte*) SIN#1 + (byte) anim::angle#2)
  (signed byte) anim::sin_a#0 ← (signed byte~) anim::$2
  (byte) anim::sprite_msb#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) anim::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:anim::@7
anim::@7: scope:[anim]  from anim::@6 anim::@8
  (byte*) SIN#24 ← phi( anim::@6/(byte*) SIN#1 anim::@8/(byte*) SIN#9 )
  (byte*) COS#24 ← phi( anim::@6/(byte*) COS#1 anim::@8/(byte*) COS#9 )
  (byte) anim::angle#20 ← phi( anim::@6/(byte) anim::angle#2 anim::@8/(byte) anim::angle#5 )
  (byte) anim::sprite_msb#16 ← phi( anim::@6/(byte) anim::sprite_msb#0 anim::@8/(byte) anim::sprite_msb#7 )
  (signed byte) anim::sin_a#6 ← phi( anim::@6/(signed byte) anim::sin_a#0 anim::@8/(signed byte) anim::sin_a#7 )
  (signed byte) anim::cos_a#1 ← phi( anim::@6/(signed byte) anim::cos_a#0 anim::@8/(signed byte) anim::cos_a#2 )
  (byte) anim::i#2 ← phi( anim::@6/(byte) anim::i#0 anim::@8/(byte) anim::i#1 )
  (signed byte) anim::x#0 ← *((signed byte[8]) xs#0 + (byte) anim::i#2)
  (signed byte) anim::y#0 ← *((signed byte[8]) ys#0 + (byte) anim::i#2)
  (signed byte) anim::mulf8s_prepare1_a#0 ← (signed byte) anim::cos_a#1
  to:anim::mulf8s_prepare1
anim::mulf8s_prepare1: scope:[anim]  from anim::@7
  (byte*) SIN#23 ← phi( anim::@7/(byte*) SIN#24 )
  (byte*) COS#23 ← phi( anim::@7/(byte*) COS#24 )
  (byte) anim::angle#19 ← phi( anim::@7/(byte) anim::angle#20 )
  (signed byte) anim::cos_a#13 ← phi( anim::@7/(signed byte) anim::cos_a#1 )
  (byte) anim::i#14 ← phi( anim::@7/(byte) anim::i#2 )
  (byte) anim::sprite_msb#15 ← phi( anim::@7/(byte) anim::sprite_msb#16 )
  (signed byte) anim::sin_a#5 ← phi( anim::@7/(signed byte) anim::sin_a#6 )
  (signed byte) anim::y#7 ← phi( anim::@7/(signed byte) anim::y#0 )
  (signed byte) anim::x#5 ← phi( anim::@7/(signed byte) anim::x#0 )
  (signed byte) anim::mulf8s_prepare1_a#1 ← phi( anim::@7/(signed byte) anim::mulf8s_prepare1_a#0 )
  (byte) anim::mulf8s_prepare1_$0#0 ← ((byte)) (signed byte) anim::mulf8s_prepare1_a#1
  (byte) mulf8u_prepare::a#0 ← (byte) anim::mulf8s_prepare1_$0#0
  call mulf8u_prepare 
  to:anim::@19
anim::@19: scope:[anim]  from anim::mulf8s_prepare1
  (byte*) SIN#22 ← phi( anim::mulf8s_prepare1/(byte*) SIN#23 )
  (byte*) COS#22 ← phi( anim::mulf8s_prepare1/(byte*) COS#23 )
  (byte) anim::angle#18 ← phi( anim::mulf8s_prepare1/(byte) anim::angle#19 )
  (signed byte) anim::cos_a#12 ← phi( anim::mulf8s_prepare1/(signed byte) anim::cos_a#13 )
  (byte) anim::i#13 ← phi( anim::mulf8s_prepare1/(byte) anim::i#14 )
  (byte) anim::sprite_msb#14 ← phi( anim::mulf8s_prepare1/(byte) anim::sprite_msb#15 )
  (signed byte) anim::sin_a#4 ← phi( anim::mulf8s_prepare1/(signed byte) anim::sin_a#5 )
  (signed byte) anim::y#5 ← phi( anim::mulf8s_prepare1/(signed byte) anim::y#7 )
  (signed byte) anim::x#3 ← phi( anim::mulf8s_prepare1/(signed byte) anim::x#5 )
  to:anim::@17
anim::@17: scope:[anim]  from anim::@19
  (byte*) SIN#21 ← phi( anim::@19/(byte*) SIN#22 )
  (byte*) COS#21 ← phi( anim::@19/(byte*) COS#22 )
  (byte) anim::angle#17 ← phi( anim::@19/(byte) anim::angle#18 )
  (signed byte) anim::cos_a#11 ← phi( anim::@19/(signed byte) anim::cos_a#12 )
  (byte) anim::i#12 ← phi( anim::@19/(byte) anim::i#13 )
  (byte) anim::sprite_msb#13 ← phi( anim::@19/(byte) anim::sprite_msb#14 )
  (signed byte) anim::sin_a#3 ← phi( anim::@19/(signed byte) anim::sin_a#4 )
  (signed byte) anim::y#3 ← phi( anim::@19/(signed byte) anim::y#5 )
  (signed byte) anim::x#1 ← phi( anim::@19/(signed byte) anim::x#3 )
  (signed byte) mulf8s_prepared::b#0 ← (signed byte) anim::x#1
  call mulf8s_prepared 
  (signed word) mulf8s_prepared::return#2 ← (signed word) mulf8s_prepared::return#1
  to:anim::@20
anim::@20: scope:[anim]  from anim::@17
  (byte*) SIN#20 ← phi( anim::@17/(byte*) SIN#21 )
  (byte*) COS#20 ← phi( anim::@17/(byte*) COS#21 )
  (byte) anim::angle#16 ← phi( anim::@17/(byte) anim::angle#17 )
  (signed byte) anim::cos_a#10 ← phi( anim::@17/(signed byte) anim::cos_a#11 )
  (byte) anim::i#11 ← phi( anim::@17/(byte) anim::i#12 )
  (byte) anim::sprite_msb#12 ← phi( anim::@17/(byte) anim::sprite_msb#13 )
  (signed byte) anim::x#9 ← phi( anim::@17/(signed byte) anim::x#1 )
  (signed byte) anim::sin_a#2 ← phi( anim::@17/(signed byte) anim::sin_a#3 )
  (signed byte) anim::y#1 ← phi( anim::@17/(signed byte) anim::y#3 )
  (signed word) mulf8s_prepared::return#7 ← phi( anim::@17/(signed word) mulf8s_prepared::return#2 )
  (signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#7
  (signed word~) anim::$5 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (signed word) anim::xr#0 ← (signed word~) anim::$5
  (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#1
  call mulf8s_prepared 
  (signed word) mulf8s_prepared::return#3 ← (signed word) mulf8s_prepared::return#1
  to:anim::@21
anim::@21: scope:[anim]  from anim::@20
  (byte*) SIN#19 ← phi( anim::@20/(byte*) SIN#20 )
  (byte*) COS#19 ← phi( anim::@20/(byte*) COS#20 )
  (byte) anim::angle#15 ← phi( anim::@20/(byte) anim::angle#16 )
  (signed byte) anim::cos_a#9 ← phi( anim::@20/(signed byte) anim::cos_a#10 )
  (byte) anim::i#10 ← phi( anim::@20/(byte) anim::i#11 )
  (byte) anim::sprite_msb#11 ← phi( anim::@20/(byte) anim::sprite_msb#12 )
  (signed byte) anim::x#8 ← phi( anim::@20/(signed byte) anim::x#9 )
  (signed word) anim::xr#7 ← phi( anim::@20/(signed word) anim::xr#0 )
  (signed byte) anim::y#8 ← phi( anim::@20/(signed byte) anim::y#1 )
  (signed byte) anim::sin_a#1 ← phi( anim::@20/(signed byte) anim::sin_a#2 )
  (signed word) mulf8s_prepared::return#8 ← phi( anim::@20/(signed word) mulf8s_prepared::return#3 )
  (signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#8
  (signed word~) anim::$7 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (signed word) anim::yr#0 ← (signed word~) anim::$7
  (signed byte) anim::mulf8s_prepare2_a#0 ← (signed byte) anim::sin_a#1
  to:anim::mulf8s_prepare2
anim::mulf8s_prepare2: scope:[anim]  from anim::@21
  (signed byte) anim::sin_a#13 ← phi( anim::@21/(signed byte) anim::sin_a#1 )
  (byte*) SIN#18 ← phi( anim::@21/(byte*) SIN#19 )
  (byte*) COS#18 ← phi( anim::@21/(byte*) COS#19 )
  (byte) anim::angle#14 ← phi( anim::@21/(byte) anim::angle#15 )
  (signed byte) anim::cos_a#8 ← phi( anim::@21/(signed byte) anim::cos_a#9 )
  (byte) anim::i#9 ← phi( anim::@21/(byte) anim::i#10 )
  (byte) anim::sprite_msb#10 ← phi( anim::@21/(byte) anim::sprite_msb#11 )
  (signed word) anim::yr#8 ← phi( anim::@21/(signed word) anim::yr#0 )
  (signed byte) anim::x#7 ← phi( anim::@21/(signed byte) anim::x#8 )
  (signed word) anim::xr#6 ← phi( anim::@21/(signed word) anim::xr#7 )
  (signed byte) anim::y#6 ← phi( anim::@21/(signed byte) anim::y#8 )
  (signed byte) anim::mulf8s_prepare2_a#1 ← phi( anim::@21/(signed byte) anim::mulf8s_prepare2_a#0 )
  (byte) anim::mulf8s_prepare2_$0#0 ← ((byte)) (signed byte) anim::mulf8s_prepare2_a#1
  (byte) mulf8u_prepare::a#1 ← (byte) anim::mulf8s_prepare2_$0#0
  call mulf8u_prepare 
  to:anim::@22
anim::@22: scope:[anim]  from anim::mulf8s_prepare2
  (signed byte) anim::sin_a#12 ← phi( anim::mulf8s_prepare2/(signed byte) anim::sin_a#13 )
  (byte*) SIN#17 ← phi( anim::mulf8s_prepare2/(byte*) SIN#18 )
  (byte*) COS#17 ← phi( anim::mulf8s_prepare2/(byte*) COS#18 )
  (byte) anim::angle#13 ← phi( anim::mulf8s_prepare2/(byte) anim::angle#14 )
  (signed byte) anim::cos_a#7 ← phi( anim::mulf8s_prepare2/(signed byte) anim::cos_a#8 )
  (byte) anim::i#8 ← phi( anim::mulf8s_prepare2/(byte) anim::i#9 )
  (byte) anim::sprite_msb#9 ← phi( anim::mulf8s_prepare2/(byte) anim::sprite_msb#10 )
  (signed word) anim::yr#7 ← phi( anim::mulf8s_prepare2/(signed word) anim::yr#8 )
  (signed byte) anim::x#6 ← phi( anim::mulf8s_prepare2/(signed byte) anim::x#7 )
  (signed word) anim::xr#5 ← phi( anim::mulf8s_prepare2/(signed word) anim::xr#6 )
  (signed byte) anim::y#4 ← phi( anim::mulf8s_prepare2/(signed byte) anim::y#6 )
  to:anim::@18
anim::@18: scope:[anim]  from anim::@22
  (signed byte) anim::sin_a#11 ← phi( anim::@22/(signed byte) anim::sin_a#12 )
  (byte*) SIN#15 ← phi( anim::@22/(byte*) SIN#17 )
  (byte*) COS#15 ← phi( anim::@22/(byte*) COS#17 )
  (byte) anim::angle#12 ← phi( anim::@22/(byte) anim::angle#13 )
  (signed byte) anim::cos_a#6 ← phi( anim::@22/(signed byte) anim::cos_a#7 )
  (byte) anim::i#7 ← phi( anim::@22/(byte) anim::i#8 )
  (byte) anim::sprite_msb#8 ← phi( anim::@22/(byte) anim::sprite_msb#9 )
  (signed word) anim::yr#6 ← phi( anim::@22/(signed word) anim::yr#7 )
  (signed byte) anim::x#4 ← phi( anim::@22/(signed byte) anim::x#6 )
  (signed word) anim::xr#4 ← phi( anim::@22/(signed word) anim::xr#5 )
  (signed byte) anim::y#2 ← phi( anim::@22/(signed byte) anim::y#4 )
  (signed byte) mulf8s_prepared::b#2 ← (signed byte) anim::y#2
  call mulf8s_prepared 
  (signed word) mulf8s_prepared::return#4 ← (signed word) mulf8s_prepared::return#1
  to:anim::@23
anim::@23: scope:[anim]  from anim::@18
  (signed byte) anim::sin_a#10 ← phi( anim::@18/(signed byte) anim::sin_a#11 )
  (byte*) SIN#14 ← phi( anim::@18/(byte*) SIN#15 )
  (byte*) COS#14 ← phi( anim::@18/(byte*) COS#15 )
  (byte) anim::angle#11 ← phi( anim::@18/(byte) anim::angle#12 )
  (signed byte) anim::cos_a#5 ← phi( anim::@18/(signed byte) anim::cos_a#6 )
  (byte) anim::i#6 ← phi( anim::@18/(byte) anim::i#7 )
  (byte) anim::sprite_msb#6 ← phi( anim::@18/(byte) anim::sprite_msb#8 )
  (signed word) anim::yr#4 ← phi( anim::@18/(signed word) anim::yr#6 )
  (signed byte) anim::x#2 ← phi( anim::@18/(signed byte) anim::x#4 )
  (signed word) anim::xr#2 ← phi( anim::@18/(signed word) anim::xr#4 )
  (signed word) mulf8s_prepared::return#9 ← phi( anim::@18/(signed word) mulf8s_prepared::return#4 )
  (signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#9
  (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (signed word) anim::xr#1 ← (signed word) anim::xr#2 - (signed word~) anim::$10
  (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#2
  call mulf8s_prepared 
  (signed word) mulf8s_prepared::return#5 ← (signed word) mulf8s_prepared::return#1
  to:anim::@24
anim::@24: scope:[anim]  from anim::@23
  (signed byte) anim::sin_a#9 ← phi( anim::@23/(signed byte) anim::sin_a#10 )
  (byte*) SIN#12 ← phi( anim::@23/(byte*) SIN#14 )
  (byte*) COS#12 ← phi( anim::@23/(byte*) COS#14 )
  (byte) anim::angle#9 ← phi( anim::@23/(byte) anim::angle#11 )
  (signed byte) anim::cos_a#4 ← phi( anim::@23/(signed byte) anim::cos_a#5 )
  (byte) anim::i#5 ← phi( anim::@23/(byte) anim::i#6 )
  (byte) anim::sprite_msb#3 ← phi( anim::@23/(byte) anim::sprite_msb#6 )
  (signed word) anim::xr#3 ← phi( anim::@23/(signed word) anim::xr#1 )
  (signed word) anim::yr#2 ← phi( anim::@23/(signed word) anim::yr#4 )
  (signed word) mulf8s_prepared::return#10 ← phi( anim::@23/(signed word) mulf8s_prepared::return#5 )
  (signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10
  (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (signed word) anim::yr#1 ← (signed word) anim::yr#2 + (signed word~) anim::$12
  (byte~) anim::$13 ← > (signed word) anim::xr#3
  (signed byte~) anim::$14 ← ((signed byte)) (byte~) anim::$13
  (signed word/signed byte/signed dword~) anim::$15 ← (signed byte~) anim::$14 + (byte/signed byte/word/signed word/dword/signed dword) 24
  (signed word/signed dword~) anim::$16 ← (signed word/signed byte/signed dword~) anim::$15 + (byte/word/signed word/dword/signed dword) 149
  (signed word) anim::xpos#0 ← (signed word/signed dword~) anim::$16
  (byte~) anim::$17 ← (byte) anim::sprite_msb#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) anim::sprite_msb#1 ← (byte~) anim::$17
  (byte~) anim::$18 ← > (signed word) anim::xpos#0
  (bool~) anim::$19 ← (byte~) anim::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) anim::$20 ← ! (bool~) anim::$19
  if((bool~) anim::$20) goto anim::@8
  to:anim::@14
anim::@8: scope:[anim]  from anim::@14 anim::@24
  (signed byte) anim::sin_a#7 ← phi( anim::@14/(signed byte) anim::sin_a#8 anim::@24/(signed byte) anim::sin_a#9 )
  (byte*) SIN#9 ← phi( anim::@14/(byte*) SIN#11 anim::@24/(byte*) SIN#12 )
  (byte*) COS#9 ← phi( anim::@14/(byte*) COS#11 anim::@24/(byte*) COS#12 )
  (byte) anim::angle#5 ← phi( anim::@14/(byte) anim::angle#8 anim::@24/(byte) anim::angle#9 )
  (byte) anim::sprite_msb#7 ← phi( anim::@14/(byte) anim::sprite_msb#2 anim::@24/(byte) anim::sprite_msb#1 )
  (signed byte) anim::cos_a#2 ← phi( anim::@14/(signed byte) anim::cos_a#3 anim::@24/(signed byte) anim::cos_a#4 )
  (signed word) anim::xpos#1 ← phi( anim::@14/(signed word) anim::xpos#2 anim::@24/(signed word) anim::xpos#0 )
  (byte) anim::i#3 ← phi( anim::@14/(byte) anim::i#4 anim::@24/(byte) anim::i#5 )
  (signed word) anim::yr#3 ← phi( anim::@14/(signed word) anim::yr#5 anim::@24/(signed word) anim::yr#1 )
  (byte~) anim::$21 ← > (signed word) anim::yr#3
  (byte/signed word/word/dword/signed dword~) anim::$22 ← (byte~) anim::$21 + (byte/signed byte/word/signed word/dword/signed dword) 89
  (byte/signed word/word/dword/signed dword~) anim::$23 ← (byte/signed word/word/dword/signed dword~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) 51
  (byte) anim::ypos#0 ← (byte/signed word/word/dword/signed dword~) anim::$23
  (byte~) anim::$24 ← (byte) anim::i#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) anim::i2#0 ← (byte~) anim::$24
  (byte~) anim::$25 ← < (signed word) anim::xpos#1
  *((byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25
  *((byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0
  (byte) anim::i#1 ← (byte) anim::i#3 + rangenext(0,7)
  (bool~) anim::$26 ← (byte) anim::i#1 != rangelast(0,7)
  if((bool~) anim::$26) goto anim::@7
  to:anim::@15
anim::@14: scope:[anim]  from anim::@24
  (signed byte) anim::sin_a#8 ← phi( anim::@24/(signed byte) anim::sin_a#9 )
  (byte*) SIN#11 ← phi( anim::@24/(byte*) SIN#12 )
  (byte*) COS#11 ← phi( anim::@24/(byte*) COS#12 )
  (byte) anim::angle#8 ← phi( anim::@24/(byte) anim::angle#9 )
  (signed byte) anim::cos_a#3 ← phi( anim::@24/(signed byte) anim::cos_a#4 )
  (signed word) anim::xpos#2 ← phi( anim::@24/(signed word) anim::xpos#0 )
  (byte) anim::i#4 ← phi( anim::@24/(byte) anim::i#5 )
  (signed word) anim::yr#5 ← phi( anim::@24/(signed word) anim::yr#1 )
  (byte) anim::sprite_msb#4 ← phi( anim::@24/(byte) anim::sprite_msb#1 )
  (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#4 | (byte/word/signed word/dword/signed dword) 128
  to:anim::@8
anim::@15: scope:[anim]  from anim::@8
  (byte*) SIN#7 ← phi( anim::@8/(byte*) SIN#9 )
  (byte*) COS#7 ← phi( anim::@8/(byte*) COS#9 )
  (byte) anim::angle#3 ← phi( anim::@8/(byte) anim::angle#5 )
  (byte) anim::sprite_msb#5 ← phi( anim::@8/(byte) anim::sprite_msb#7 )
  *((byte*) SPRITES_XMSB#0) ← (byte) anim::sprite_msb#5
  (byte) anim::angle#1 ← ++ (byte) anim::angle#3
  *((byte*) BORDERCOL#0) ← (byte) LIGHT_BLUE#0
  to:anim::@1
anim::@return: scope:[anim]  from anim::@1
  return 
  to:@return
@16: scope:[]  from @15
  (byte*) SIN#13 ← phi( @15/(byte*) SIN#16 )
  (byte*) COS#13 ← phi( @15/(byte*) COS#16 )
  (byte*) SCREEN#4 ← phi( @15/(byte*) SCREEN#5 )
  (byte*) SPRITE#0 ← ((byte*)) (word/signed word/dword/signed dword) 12288
  kickasm(location (byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
    .for (var y=0; y<21; y++)
        .for (var x=0;x<3; x++)
            .byte pic.getSinglecolorByte(x,y)
 }}
  call main 
  to:@17
@17: scope:[]  from @16
  to:@end
@end: scope:[]  from @17

SYMBOL TABLE SSA
(byte*~) $0
(signed byte/signed word/signed dword~) $1
(signed byte/signed word/signed dword~) $2
(signed byte/signed word/signed dword~) $3
(signed byte/signed word/signed dword~) $4
(signed byte/signed word/signed dword~) $5
(signed byte/signed word/signed dword~) $6
(label) @13
(label) @15
(label) @16
(label) @17
(label) @4
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte*) COS
(byte*) COS#0
(byte*) COS#1
(byte*) COS#10
(byte*) COS#11
(byte*) COS#12
(byte*) COS#13
(byte*) COS#14
(byte*) COS#15
(byte*) COS#16
(byte*) COS#17
(byte*) COS#18
(byte*) COS#19
(byte*) COS#2
(byte*) COS#20
(byte*) COS#21
(byte*) COS#22
(byte*) COS#23
(byte*) COS#24
(byte*) COS#3
(byte*) COS#4
(byte*) COS#5
(byte*) COS#6
(byte*) COS#7
(byte*) COS#8
(byte*) COS#9
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SCREEN#1
(byte*) SCREEN#2
(byte*) SCREEN#3
(byte*) SCREEN#4
(byte*) SCREEN#5
(byte*) SIN
(byte*) SIN#0
(byte*) SIN#1
(byte*) SIN#10
(byte*) SIN#11
(byte*) SIN#12
(byte*) SIN#13
(byte*) SIN#14
(byte*) SIN#15
(byte*) SIN#16
(byte*) SIN#17
(byte*) SIN#18
(byte*) SIN#19
(byte*) SIN#2
(byte*) SIN#20
(byte*) SIN#21
(byte*) SIN#22
(byte*) SIN#23
(byte*) SIN#24
(byte*) SIN#3
(byte*) SIN#4
(byte*) SIN#5
(byte*) SIN#6
(byte*) SIN#7
(byte*) SIN#8
(byte*) SIN#9
(byte*) SPRITE
(byte*) SPRITE#0
(byte*) SPRITE#1
(byte*) SPRITE#2
(byte*) SPRITE#3
(byte*) SPRITE#4
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(void()) anim()
(bool~) anim::$0
(signed byte~) anim::$1
(signed word~) anim::$10
(signed word~) anim::$11
(signed word~) anim::$12
(byte~) anim::$13
(signed byte~) anim::$14
(signed word/signed byte/signed dword~) anim::$15
(signed word/signed dword~) anim::$16
(byte~) anim::$17
(byte~) anim::$18
(bool~) anim::$19
(signed byte~) anim::$2
(bool~) anim::$20
(byte~) anim::$21
(byte/signed word/word/dword/signed dword~) anim::$22
(byte/signed word/word/dword/signed dword~) anim::$23
(byte~) anim::$24
(byte~) anim::$25
(bool~) anim::$26
(signed word~) anim::$4
(signed word~) anim::$5
(signed word~) anim::$6
(signed word~) anim::$7
(signed word~) anim::$9
(label) anim::@1
(label) anim::@14
(label) anim::@15
(label) anim::@17
(label) anim::@18
(label) anim::@19
(label) anim::@2
(label) anim::@20
(label) anim::@21
(label) anim::@22
(label) anim::@23
(label) anim::@24
(label) anim::@4
(label) anim::@5
(label) anim::@6
(label) anim::@7
(label) anim::@8
(label) anim::@return
(byte) anim::angle
(byte) anim::angle#0
(byte) anim::angle#1
(byte) anim::angle#10
(byte) anim::angle#11
(byte) anim::angle#12
(byte) anim::angle#13
(byte) anim::angle#14
(byte) anim::angle#15
(byte) anim::angle#16
(byte) anim::angle#17
(byte) anim::angle#18
(byte) anim::angle#19
(byte) anim::angle#2
(byte) anim::angle#20
(byte) anim::angle#3
(byte) anim::angle#4
(byte) anim::angle#5
(byte) anim::angle#6
(byte) anim::angle#7
(byte) anim::angle#8
(byte) anim::angle#9
(signed byte) anim::cos_a
(signed byte) anim::cos_a#0
(signed byte) anim::cos_a#1
(signed byte) anim::cos_a#10
(signed byte) anim::cos_a#11
(signed byte) anim::cos_a#12
(signed byte) anim::cos_a#13
(signed byte) anim::cos_a#2
(signed byte) anim::cos_a#3
(signed byte) anim::cos_a#4
(signed byte) anim::cos_a#5
(signed byte) anim::cos_a#6
(signed byte) anim::cos_a#7
(signed byte) anim::cos_a#8
(signed byte) anim::cos_a#9
(byte) anim::i
(byte) anim::i#0
(byte) anim::i#1
(byte) anim::i#10
(byte) anim::i#11
(byte) anim::i#12
(byte) anim::i#13
(byte) anim::i#14
(byte) anim::i#2
(byte) anim::i#3
(byte) anim::i#4
(byte) anim::i#5
(byte) anim::i#6
(byte) anim::i#7
(byte) anim::i#8
(byte) anim::i#9
(byte) anim::i2
(byte) anim::i2#0
(label) anim::mulf8s_prepare1
(byte~) anim::mulf8s_prepare1_$0
(byte) anim::mulf8s_prepare1_$0#0
(signed byte) anim::mulf8s_prepare1_a
(signed byte) anim::mulf8s_prepare1_a#0
(signed byte) anim::mulf8s_prepare1_a#1
(label) anim::mulf8s_prepare2
(byte~) anim::mulf8s_prepare2_$0
(byte) anim::mulf8s_prepare2_$0#0
(signed byte) anim::mulf8s_prepare2_a
(signed byte) anim::mulf8s_prepare2_a#0
(signed byte) anim::mulf8s_prepare2_a#1
(signed byte) anim::sin_a
(signed byte) anim::sin_a#0
(signed byte) anim::sin_a#1
(signed byte) anim::sin_a#10
(signed byte) anim::sin_a#11
(signed byte) anim::sin_a#12
(signed byte) anim::sin_a#13
(signed byte) anim::sin_a#2
(signed byte) anim::sin_a#3
(signed byte) anim::sin_a#4
(signed byte) anim::sin_a#5
(signed byte) anim::sin_a#6
(signed byte) anim::sin_a#7
(signed byte) anim::sin_a#8
(signed byte) anim::sin_a#9
(byte) anim::sprite_msb
(byte) anim::sprite_msb#0
(byte) anim::sprite_msb#1
(byte) anim::sprite_msb#10
(byte) anim::sprite_msb#11
(byte) anim::sprite_msb#12
(byte) anim::sprite_msb#13
(byte) anim::sprite_msb#14
(byte) anim::sprite_msb#15
(byte) anim::sprite_msb#16
(byte) anim::sprite_msb#2
(byte) anim::sprite_msb#3
(byte) anim::sprite_msb#4
(byte) anim::sprite_msb#5
(byte) anim::sprite_msb#6
(byte) anim::sprite_msb#7
(byte) anim::sprite_msb#8
(byte) anim::sprite_msb#9
(signed byte) anim::x
(signed byte) anim::x#0
(signed byte) anim::x#1
(signed byte) anim::x#2
(signed byte) anim::x#3
(signed byte) anim::x#4
(signed byte) anim::x#5
(signed byte) anim::x#6
(signed byte) anim::x#7
(signed byte) anim::x#8
(signed byte) anim::x#9
(signed word) anim::xpos
(signed word) anim::xpos#0
(signed word) anim::xpos#1
(signed word) anim::xpos#2
(signed word) anim::xr
(signed word) anim::xr#0
(signed word) anim::xr#1
(signed word) anim::xr#2
(signed word) anim::xr#3
(signed word) anim::xr#4
(signed word) anim::xr#5
(signed word) anim::xr#6
(signed word) anim::xr#7
(signed byte) anim::y
(signed byte) anim::y#0
(signed byte) anim::y#1
(signed byte) anim::y#2
(signed byte) anim::y#3
(signed byte) anim::y#4
(signed byte) anim::y#5
(signed byte) anim::y#6
(signed byte) anim::y#7
(signed byte) anim::y#8
(byte) anim::ypos
(byte) anim::ypos#0
(signed word) anim::yr
(signed word) anim::yr#0
(signed word) anim::yr#1
(signed word) anim::yr#2
(signed word) anim::yr#3
(signed word) anim::yr#4
(signed word) anim::yr#5
(signed word) anim::yr#6
(signed word) anim::yr#7
(signed word) anim::yr#8
(void()) init()
(byte*~) init::$1
(byte*~) init::$2
(byte~) init::$3
(bool~) init::$4
(label) init::@1
(label) init::@3
(label) init::@return
(byte) init::i
(byte) init::i#0
(byte) init::i#1
(byte) init::i#2
(byte*) init::sprites_ptr
(byte*) init::sprites_ptr#0
(byte*) init::sprites_ptr#1
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
(byte~) mulf8s_prepared::$0
(word~) mulf8s_prepared::$1
(byte~) mulf8s_prepared::$11
(byte~) mulf8s_prepared::$12
(byte~) mulf8s_prepared::$13
(signed word~) mulf8s_prepared::$14
(byte~) mulf8s_prepared::$15
(byte~) mulf8s_prepared::$16
(bool~) mulf8s_prepared::$2
(bool~) mulf8s_prepared::$3
(byte~) mulf8s_prepared::$5
(byte~) mulf8s_prepared::$6
(byte~) mulf8s_prepared::$7
(bool~) mulf8s_prepared::$8
(bool~) mulf8s_prepared::$9
(label) mulf8s_prepared::@1
(label) mulf8s_prepared::@2
(label) mulf8s_prepared::@3
(label) mulf8s_prepared::@4
(label) mulf8s_prepared::@6
(label) mulf8s_prepared::@return
(signed byte) mulf8s_prepared::b
(signed byte) mulf8s_prepared::b#0
(signed byte) mulf8s_prepared::b#1
(signed byte) mulf8s_prepared::b#2
(signed byte) mulf8s_prepared::b#3
(signed byte) mulf8s_prepared::b#4
(signed byte) mulf8s_prepared::b#5
(signed byte) mulf8s_prepared::b#6
(signed byte) mulf8s_prepared::b#7
(word) mulf8s_prepared::m
(word) mulf8s_prepared::m#0
(word) mulf8s_prepared::m#1
(word) mulf8s_prepared::m#2
(word) mulf8s_prepared::m#3
(word) mulf8s_prepared::m#4
(word) mulf8s_prepared::m#5
(word) mulf8s_prepared::m#6
(signed byte*) mulf8s_prepared::memA
(signed byte*) mulf8s_prepared::memA#0
(signed word) mulf8s_prepared::return
(signed word) mulf8s_prepared::return#0
(signed word) mulf8s_prepared::return#1
(signed word) mulf8s_prepared::return#10
(signed word) mulf8s_prepared::return#2
(signed word) mulf8s_prepared::return#3
(signed word) mulf8s_prepared::return#4
(signed word) mulf8s_prepared::return#5
(signed word) mulf8s_prepared::return#6
(signed word) mulf8s_prepared::return#7
(signed word) mulf8s_prepared::return#8
(signed word) mulf8s_prepared::return#9
(void()) mulf8u_prepare((byte) mulf8u_prepare::a)
(label) mulf8u_prepare::@return
(byte) mulf8u_prepare::a
(byte) mulf8u_prepare::a#0
(byte) mulf8u_prepare::a#1
(byte) mulf8u_prepare::a#2
(byte*) mulf8u_prepare::memA
(byte*) mulf8u_prepare::memA#0
(word()) mulf8u_prepared((byte) mulf8u_prepared::b)
(label) mulf8u_prepared::@return
(byte) mulf8u_prepared::b
(byte) mulf8u_prepared::b#0
(byte) mulf8u_prepared::b#1
(byte*) mulf8u_prepared::memB
(byte*) mulf8u_prepared::memB#0
(byte*) mulf8u_prepared::resL
(byte*) mulf8u_prepared::resL#0
(word) mulf8u_prepared::return
(word) mulf8u_prepared::return#0
(word) mulf8u_prepared::return#1
(word) mulf8u_prepared::return#2
(word) mulf8u_prepared::return#3
(word) mulf8u_prepared::return#4
(void()) mulf_init()
(byte*~) mulf_init::$0
(byte*~) mulf_init::$1
(signed byte/signed word/signed dword~) mulf_init::$10
(byte~) mulf_init::$11
(byte~) mulf_init::$12
(bool~) mulf_init::$13
(bool~) mulf_init::$14
(byte*~) mulf_init::$15
(bool~) mulf_init::$16
(byte*~) mulf_init::$17
(byte*~) mulf_init::$18
(byte*~) mulf_init::$19
(byte~) mulf_init::$2
(byte*~) mulf_init::$20
(bool~) mulf_init::$3
(bool~) mulf_init::$4
(byte~) mulf_init::$5
(byte~) mulf_init::$6
(word~) mulf_init::$7
(byte*~) mulf_init::$8
(bool~) mulf_init::$9
(label) mulf_init::@1
(label) mulf_init::@2
(label) mulf_init::@3
(label) mulf_init::@4
(label) mulf_init::@5
(label) mulf_init::@6
(label) mulf_init::@7
(label) mulf_init::@8
(label) mulf_init::@return
(byte) mulf_init::c
(byte) mulf_init::c#0
(byte) mulf_init::c#1
(byte) mulf_init::c#2
(byte) mulf_init::c#3
(byte) mulf_init::c#4
(byte) mulf_init::dir
(byte) mulf_init::dir#0
(byte) mulf_init::dir#1
(byte) mulf_init::dir#2
(byte) mulf_init::dir#3
(word) mulf_init::sqr
(word) mulf_init::sqr#0
(word) mulf_init::sqr#1
(word) mulf_init::sqr#2
(word) mulf_init::sqr#3
(word) mulf_init::sqr#4
(word) mulf_init::sqr#5
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#0
(byte*) mulf_init::sqr1_hi#1
(byte*) mulf_init::sqr1_hi#2
(byte*) mulf_init::sqr1_hi#3
(byte*) mulf_init::sqr1_hi#4
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#0
(byte*) mulf_init::sqr1_lo#1
(byte*) mulf_init::sqr1_lo#2
(byte*) mulf_init::sqr1_lo#3
(byte*) mulf_init::sqr1_lo#4
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#0
(byte*) mulf_init::sqr2_hi#1
(byte*) mulf_init::sqr2_hi#2
(byte*) mulf_init::sqr2_hi#3
(byte*) mulf_init::sqr2_hi#4
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#0
(byte*) mulf_init::sqr2_lo#1
(byte*) mulf_init::sqr2_lo#2
(byte*) mulf_init::sqr2_lo#3
(byte*) mulf_init::sqr2_lo#4
(byte) mulf_init::x_2
(byte) mulf_init::x_2#0
(byte) mulf_init::x_2#1
(byte) mulf_init::x_2#2
(byte) mulf_init::x_2#3
(byte) mulf_init::x_2#4
(byte) mulf_init::x_255
(byte) mulf_init::x_255#0
(byte) mulf_init::x_255#1
(byte) mulf_init::x_255#2
(byte) mulf_init::x_255#3
(byte) mulf_init::x_255#4
(byte[512]) mulf_sqr1_hi
(byte[512]) mulf_sqr1_hi#0
(byte[512]) mulf_sqr1_lo
(byte[512]) mulf_sqr1_lo#0
(byte[512]) mulf_sqr2_hi
(byte[512]) mulf_sqr2_hi#0
(byte[512]) mulf_sqr2_lo
(byte[512]) mulf_sqr2_lo#0
(signed byte[8]) xs
(signed byte[8]) xs#0
(signed byte[8]) ys
(signed byte[8]) ys#0

Culled Empty Block (label) main::@2
Culled Empty Block (label) @17
Successful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not [94] (bool~) mulf_init::$4 ← (byte~) mulf_init::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 from [93] (bool~) mulf_init::$3 ← (byte~) mulf_init::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [124] (bool~) mulf_init::$14 ← (byte) mulf_init::x_255#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from [123] (bool~) mulf_init::$13 ← (byte) mulf_init::x_255#1 == (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [164] (bool~) mulf8s_prepared::$3 ← *((signed byte*) mulf8s_prepared::memA#0) >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [163] (bool~) mulf8s_prepared::$2 ← *((signed byte*) mulf8s_prepared::memA#0) < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [168] (bool~) mulf8s_prepared::$9 ← (signed byte) mulf8s_prepared::b#5 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [167] (bool~) mulf8s_prepared::$8 ← (signed byte) mulf8s_prepared::b#5 < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [295] (bool~) anim::$20 ← (byte~) anim::$18 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [294] (bool~) anim::$19 ← (byte~) anim::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) mulf_init::sqr1_hi#0 = (byte*~) mulf_init::$0 
Alias (byte*) mulf_init::sqr1_lo#0 = (byte*~) mulf_init::$1 
Alias (word) mulf_init::sqr#1 = (word~) mulf_init::$7 
Alias (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#4 
Alias (word) mulf_init::sqr#4 = (word) mulf_init::sqr#5 
Alias (byte*) mulf_init::sqr1_lo#3 = (byte*) mulf_init::sqr1_lo#4 
Alias (byte*) mulf_init::sqr1_hi#3 = (byte*) mulf_init::sqr1_hi#4 
Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#4 
Alias (byte) mulf_init::x_255#0 = (byte~) mulf_init::$11 
Alias (byte) mulf_init::x_255#1 = (byte~) mulf_init::$12 (byte) mulf_init::x_255#4 
Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#4 
Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#4 
Alias (word) mulf8u_prepared::return#0 = (word) mulf8u_prepared::return#3 (word) mulf8u_prepared::return#1 
Alias (byte) mulf8u_prepared::b#0 = (byte~) mulf8s_prepared::$0 
Alias (word) mulf8u_prepared::return#2 = (word) mulf8u_prepared::return#4 
Alias (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#7 (signed byte) mulf8s_prepared::b#6 
Alias (word) mulf8s_prepared::m#0 = (word~) mulf8s_prepared::$1 (word) mulf8s_prepared::m#3 
Alias (byte~) mulf8s_prepared::$15 = (byte~) mulf8s_prepared::$7 
Alias (signed word) mulf8s_prepared::return#0 = (signed word~) mulf8s_prepared::$14 (signed word) mulf8s_prepared::return#6 (signed word) mulf8s_prepared::return#1 
Alias (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#6 
Alias (byte~) mulf8s_prepared::$16 = (byte~) mulf8s_prepared::$13 
Alias (byte*) SIN#0 = (byte*~) $0 (byte*) SIN#16 (byte*) SIN#13 
Alias (byte*) COS#10 = (byte*) COS#8 
Alias (byte*) SIN#10 = (byte*) SIN#8 
Alias (byte*) SCREEN#1 = (byte*) SCREEN#2 
Alias (byte*) SPRITE#2 = (byte*) SPRITE#3 
Alias (byte*) init::sprites_ptr#0 = (byte*~) init::$1 
Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 (byte*) SCREEN#4 
Alias (byte*) COS#0 = (byte*) COS#16 (byte*) COS#13 
Alias (byte*) COS#3 = (byte*) COS#5 
Alias (byte) anim::angle#10 = (byte) anim::angle#6 
Alias (byte*) SIN#3 = (byte*) SIN#5 
Alias (byte*) COS#1 = (byte*) COS#4 (byte*) COS#2 
Alias (byte) anim::angle#2 = (byte) anim::angle#7 (byte) anim::angle#4 
Alias (byte*) SIN#1 = (byte*) SIN#4 (byte*) SIN#2 
Alias (signed byte) anim::cos_a#0 = (signed byte~) anim::$1 
Alias (signed byte) anim::sin_a#0 = (signed byte~) anim::$2 
Alias (signed byte) anim::cos_a#1 = (signed byte) anim::mulf8s_prepare1_a#0 (signed byte) anim::mulf8s_prepare1_a#1 (signed byte) anim::cos_a#13 (signed byte) anim::cos_a#12 (signed byte) anim::cos_a#11 (signed byte) anim::cos_a#10 (signed byte) anim::cos_a#9 (signed byte) anim::cos_a#8 (signed byte) anim::cos_a#7 (signed byte) anim::cos_a#6 (signed byte) anim::cos_a#5 (signed byte) anim::cos_a#4 (signed byte) anim::cos_a#3 
Alias (signed byte) anim::x#0 = (signed byte) anim::x#5 (signed byte) anim::x#3 (signed byte) anim::x#1 (signed byte) anim::x#9 (signed byte) anim::x#8 (signed byte) anim::x#7 (signed byte) anim::x#6 (signed byte) anim::x#4 (signed byte) anim::x#2 
Alias (signed byte) anim::y#0 = (signed byte) anim::y#7 (signed byte) anim::y#5 (signed byte) anim::y#3 (signed byte) anim::y#1 (signed byte) anim::y#8 (signed byte) anim::y#6 (signed byte) anim::y#4 (signed byte) anim::y#2 
Alias (signed byte) anim::sin_a#1 = (signed byte) anim::sin_a#5 (signed byte) anim::sin_a#6 (signed byte) anim::sin_a#4 (signed byte) anim::sin_a#3 (signed byte) anim::sin_a#2 (signed byte) anim::mulf8s_prepare2_a#0 (signed byte) anim::mulf8s_prepare2_a#1 (signed byte) anim::sin_a#13 (signed byte) anim::sin_a#12 (signed byte) anim::sin_a#11 (signed byte) anim::sin_a#10 (signed byte) anim::sin_a#9 (signed byte) anim::sin_a#8 
Alias (byte) anim::sprite_msb#10 = (byte) anim::sprite_msb#15 (byte) anim::sprite_msb#16 (byte) anim::sprite_msb#14 (byte) anim::sprite_msb#13 (byte) anim::sprite_msb#12 (byte) anim::sprite_msb#11 (byte) anim::sprite_msb#9 (byte) anim::sprite_msb#8 (byte) anim::sprite_msb#6 (byte) anim::sprite_msb#3 
Alias (byte) anim::i#10 = (byte) anim::i#14 (byte) anim::i#2 (byte) anim::i#13 (byte) anim::i#12 (byte) anim::i#11 (byte) anim::i#9 (byte) anim::i#8 (byte) anim::i#7 (byte) anim::i#6 (byte) anim::i#5 (byte) anim::i#4 
Alias (byte) anim::angle#11 = (byte) anim::angle#19 (byte) anim::angle#20 (byte) anim::angle#18 (byte) anim::angle#17 (byte) anim::angle#16 (byte) anim::angle#15 (byte) anim::angle#14 (byte) anim::angle#13 (byte) anim::angle#12 (byte) anim::angle#9 (byte) anim::angle#8 
Alias (byte*) COS#11 = (byte*) COS#23 (byte*) COS#24 (byte*) COS#22 (byte*) COS#21 (byte*) COS#20 (byte*) COS#19 (byte*) COS#18 (byte*) COS#17 (byte*) COS#15 (byte*) COS#14 (byte*) COS#12 
Alias (byte*) SIN#11 = (byte*) SIN#23 (byte*) SIN#24 (byte*) SIN#22 (byte*) SIN#21 (byte*) SIN#20 (byte*) SIN#19 (byte*) SIN#18 (byte*) SIN#17 (byte*) SIN#15 (byte*) SIN#14 (byte*) SIN#12 
Alias (byte) mulf8u_prepare::a#0 = (byte) anim::mulf8s_prepare1_$0#0 
Alias (signed word) mulf8s_prepared::return#2 = (signed word) mulf8s_prepared::return#7 
Alias (signed word) anim::xr#0 = (signed word~) anim::$5 (signed word) anim::xr#7 (signed word) anim::xr#6 (signed word) anim::xr#5 (signed word) anim::xr#4 (signed word) anim::xr#2 
Alias (signed word) mulf8s_prepared::return#3 = (signed word) mulf8s_prepared::return#8 
Alias (signed word) anim::yr#0 = (signed word~) anim::$7 (signed word) anim::yr#8 (signed word) anim::yr#7 (signed word) anim::yr#6 (signed word) anim::yr#4 (signed word) anim::yr#2 
Alias (byte) mulf8u_prepare::a#1 = (byte) anim::mulf8s_prepare2_$0#0 
Alias (signed word) mulf8s_prepared::return#4 = (signed word) mulf8s_prepared::return#9 
Alias (signed word) mulf8s_prepared::return#10 = (signed word) mulf8s_prepared::return#5 
Alias (signed word) anim::xr#1 = (signed word) anim::xr#3 
Alias (signed word) anim::xpos#0 = (signed word/signed dword~) anim::$16 (signed word) anim::xpos#2 
Alias (byte) anim::sprite_msb#1 = (byte~) anim::$17 (byte) anim::sprite_msb#4 
Alias (byte) anim::ypos#0 = (byte/signed word/word/dword/signed dword~) anim::$23 
Alias (byte) anim::i2#0 = (byte~) anim::$24 
Alias (signed word) anim::yr#1 = (signed word) anim::yr#5 
Alias (byte) anim::sprite_msb#5 = (byte) anim::sprite_msb#7 
Alias (byte) anim::angle#3 = (byte) anim::angle#5 
Alias (byte*) COS#7 = (byte*) COS#9 
Alias (byte*) SIN#7 = (byte*) SIN#9 
Successful SSA optimization Pass2AliasElimination
Alias (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#3 
Alias (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#3 
Alias (byte) mulf_init::c#1 = (byte) mulf_init::c#3 
Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#3 
Alias (byte) mulf_init::x_255#1 = (byte) mulf_init::x_255#3 
Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#3 
Alias (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#5 
Alias (signed word) anim::yr#1 = (signed word) anim::yr#3 
Alias (byte) anim::i#10 = (byte) anim::i#3 
Alias (signed word) anim::xpos#0 = (signed word) anim::xpos#1 
Alias (signed byte) anim::cos_a#1 = (signed byte) anim::cos_a#2 
Alias (byte) anim::angle#11 = (byte) anim::angle#3 
Alias (byte*) COS#11 = (byte*) COS#7 
Alias (byte*) SIN#11 = (byte*) SIN#7 
Alias (signed byte) anim::sin_a#1 = (signed byte) anim::sin_a#7 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) SPRITE#1
Self Phi Eliminated (byte*) init::sprites_ptr#1
Self Phi Eliminated (byte*) COS#1
Self Phi Eliminated (byte) anim::angle#2
Self Phi Eliminated (byte*) SIN#1
Self Phi Eliminated (signed byte) anim::cos_a#1
Self Phi Eliminated (signed byte) anim::sin_a#1
Self Phi Eliminated (byte) anim::angle#11
Self Phi Eliminated (byte*) COS#11
Self Phi Eliminated (byte*) SIN#11
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) mulf8u_prepared::b#1 (byte) mulf8u_prepared::b#0
Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#0
Redundant Phi (byte*) SPRITE#4 (byte*) SPRITE#0
Redundant Phi (byte*) COS#10 (byte*) COS#0
Redundant Phi (byte*) SIN#10 (byte*) SIN#0
Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#3
Redundant Phi (byte*) SPRITE#2 (byte*) SPRITE#4
Redundant Phi (byte*) SPRITE#1 (byte*) SPRITE#2
Redundant Phi (byte*) init::sprites_ptr#1 (byte*) init::sprites_ptr#0
Redundant Phi (byte*) COS#6 (byte*) COS#10
Redundant Phi (byte*) SIN#6 (byte*) SIN#10
Redundant Phi (byte*) COS#1 (byte*) COS#3
Redundant Phi (byte) anim::angle#2 (byte) anim::angle#10
Redundant Phi (byte*) SIN#1 (byte*) SIN#3
Redundant Phi (signed byte) anim::cos_a#1 (signed byte) anim::cos_a#0
Redundant Phi (signed byte) anim::sin_a#1 (signed byte) anim::sin_a#0
Redundant Phi (byte) anim::angle#11 (byte) anim::angle#2
Redundant Phi (byte*) COS#11 (byte*) COS#1
Redundant Phi (byte*) SIN#11 (byte*) SIN#1
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) mulf_init::$4 [95] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
Simple Condition (bool~) mulf_init::$9 [107] if((byte*) mulf_init::sqr1_lo#1!=(byte*~) mulf_init::$8) goto mulf_init::@1
Simple Condition (bool~) mulf_init::$14 [125] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@4
Simple Condition (bool~) mulf_init::$16 [130] if((byte*) mulf_init::sqr2_lo#1!=(byte*~) mulf_init::$15) goto mulf_init::@3
Simple Condition (bool~) mulf8s_prepared::$3 [165] if(*((signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1
Simple Condition (bool~) mulf8s_prepared::$9 [169] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
Simple Condition (bool~) init::$4 [213] if((byte) init::i#1!=rangelast(0,7)) goto init::@1
Simple Condition (bool~) anim::$0 [231] if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto anim::@5
Simple Condition (bool~) anim::$20 [296] if((byte~) anim::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@8
Simple Condition (bool~) anim::$26 [309] if((byte) anim::i#1!=rangelast(0,7)) goto anim::@7
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte[512]) mulf_sqr1_lo#0 = { fill( 512, 0) }
Constant (const byte[512]) mulf_sqr1_hi#0 = { fill( 512, 0) }
Constant (const byte[512]) mulf_sqr2_lo#0 = { fill( 512, 0) }
Constant (const byte[512]) mulf_sqr2_hi#0 = { fill( 512, 0) }
Constant (const word) mulf_init::sqr#0 = 0
Constant (const byte) mulf_init::x_2#0 = 0
Constant (const byte) mulf_init::c#0 = 0
Constant (const signed byte/signed word/signed dword) mulf_init::$10 = -1
Constant (const byte) mulf_init::dir#0 = 255
Constant (const byte) mulf_init::dir#1 = 1
Constant (const byte*) mulf8u_prepare::memA#0 = ((byte*))253
Constant (const byte*) mulf8u_prepared::resL#0 = ((byte*))254
Constant (const byte*) mulf8u_prepared::memB#0 = ((byte*))255
Constant (const signed byte*) mulf8s_prepared::memA#0 = ((signed byte*))253
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const byte*) COS#0 = ((byte*))8192
Constant (const byte) init::i#0 = 0
Constant (const signed byte/signed word/signed dword) $1 = -70
Constant (const signed byte/signed word/signed dword) $2 = -70
Constant (const signed byte/signed word/signed dword) $3 = -70
Constant (const signed byte/signed word/signed dword) $4 = -70
Constant (const signed byte/signed word/signed dword) $5 = -70
Constant (const signed byte/signed word/signed dword) $6 = -70
Constant (const byte) anim::angle#0 = 0
Constant (const byte) anim::sprite_msb#0 = 0
Constant (const byte) anim::i#0 = 0
Constant (const byte*) SPRITE#0 = ((byte*))12288
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) mulf_init::sqr1_hi#0 = mulf_sqr1_hi#0+1
Constant (const byte*) mulf_init::sqr1_lo#0 = mulf_sqr1_lo#0+1
Constant (const byte*) mulf_init::$8 = mulf_sqr1_lo#0+512
Constant (const byte) mulf_init::x_255#0 = ((byte))mulf_init::$10
Constant (const byte*) mulf_init::sqr2_hi#0 = mulf_sqr2_hi#0
Constant (const byte*) mulf_init::sqr2_lo#0 = mulf_sqr2_lo#0
Constant (const byte*) mulf_init::$15 = mulf_sqr2_lo#0+511
Constant (const byte*) mulf_init::$17 = mulf_sqr2_lo#0+511
Constant (const byte*) mulf_init::$18 = mulf_sqr1_lo#0+256
Constant (const byte*) mulf_init::$19 = mulf_sqr2_hi#0+511
Constant (const byte*) mulf_init::$20 = mulf_sqr1_hi#0+256
Constant (const byte*) SIN#0 = COS#0+64
Constant (const byte*) init::sprites_ptr#0 = SCREEN#0+1016
Constant (const byte*) init::$2 = SPRITE#0/64
Constant (const signed byte[8]) xs#0 = { $1, $2, $3, 0, 0, 70, 70, 70 }
Constant (const signed byte[8]) ys#0 = { $4, 0, 70, $5, 70, $6, 0, 70 }
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) init::$3 = ((byte))init::$2
Successful SSA optimization Pass2ConstantIdentification
Consolidated constant in assignment anim::xpos#0
Consolidated constant in assignment anim::ypos#0
Successful SSA optimization Pass2ConstantAdditionElimination
if() condition always true - replacing block destination [68] if(true) goto anim::@2
Successful SSA optimization Pass2ConstantIfs
Fixing inline constructor with mulf8u_prepared::$0 ← *(mulf8u_prepared::memB#0) w= *(mulf8u_prepared::resL#0)
Successful SSA optimization Pass2FixInlineConstructors
Inferred type updated to signed byte in [104] (signed word/signed byte/signed dword~) anim::$15 ← (signed byte~) anim::$14
Inferred type updated to byte in [111] (byte/signed word/word/dword/signed dword~) anim::$22 ← (byte~) anim::$21
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte) mulf8u_prepared::b#0 ← ((byte)) (signed byte) mulf8s_prepared::b#4
Eliminating Noop Cast (byte~) mulf8s_prepared::$6 ← ((byte)) (signed byte) mulf8s_prepared::b#4
Eliminating Noop Cast (signed word) mulf8s_prepared::return#0 ← ((signed word)) (word) mulf8s_prepared::m#4
Eliminating Noop Cast (byte~) mulf8s_prepared::$12 ← ((byte)) *((const signed byte*) mulf8s_prepared::memA#0)
Eliminating Noop Cast (signed byte) anim::cos_a#0 ← ((signed byte)) *((byte*) COS#3 + (byte) anim::angle#10)
Eliminating Noop Cast (signed byte) anim::sin_a#0 ← ((signed byte)) *((byte*) SIN#3 + (byte) anim::angle#10)
Eliminating Noop Cast (byte) mulf8u_prepare::a#0 ← ((byte)) (signed byte) anim::cos_a#0
Eliminating Noop Cast (byte) mulf8u_prepare::a#1 ← ((byte)) (signed byte) anim::sin_a#0
Eliminating Noop Cast (signed byte~) anim::$14 ← ((signed byte)) (byte~) anim::$13
Successful SSA optimization Pass2NopCastElimination
Removing unused block anim::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value init::i#1 ← ++ init::i#2 to ++
Resolved ranged comparison value if(init::i#1!=rangelast(0,7)) goto init::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value anim::i#1 ← ++ anim::i#10 to ++
Resolved ranged comparison value if(anim::i#1!=rangelast(0,7)) goto anim::@7 to (byte/signed byte/word/signed word/dword/signed dword) 8
Culled Empty Block (label) @4
Culled Empty Block (label) mulf_init::@6
Culled Empty Block (label) @15
Culled Empty Block (label) anim::@2
Culled Empty Block (label) anim::@5
Culled Empty Block (label) anim::@19
Culled Empty Block (label) anim::@22
Successful SSA optimization Pass2CullEmptyBlocks
Alias (word) mulf8u_prepared::return#0 = (word~) mulf8u_prepared::$0 
Alias (byte~) anim::$22 = (byte~) anim::$21 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) COS#3
Self Phi Eliminated (byte*) SIN#3
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) COS#3 (const byte*) COS#0
Redundant Phi (byte*) SIN#3 (const byte*) SIN#0
Successful SSA optimization Pass2RedundantPhiElimination
Inlining constant with var siblings (const word) mulf_init::sqr#0
Inlining constant with var siblings (const byte) mulf_init::x_2#0
Inlining constant with var siblings (const byte) mulf_init::c#0
Inlining constant with var siblings (const byte) mulf_init::dir#0
Inlining constant with var siblings (const byte) mulf_init::dir#1
Inlining constant with var siblings (const byte*) mulf_init::sqr1_hi#0
Inlining constant with var siblings (const byte*) mulf_init::sqr1_lo#0
Inlining constant with var siblings (const byte) mulf_init::x_255#0
Inlining constant with var siblings (const byte*) mulf_init::sqr2_hi#0
Inlining constant with var siblings (const byte*) mulf_init::sqr2_lo#0
Inlining constant with var siblings (const byte) init::i#0
Inlining constant with var siblings (const byte) anim::angle#0
Inlining constant with var siblings (const byte) anim::sprite_msb#0
Inlining constant with var siblings (const byte) anim::i#0
Constant inlined mulf_init::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulf_init::sqr2_lo#0 = (const byte[512]) mulf_sqr2_lo#0
Constant inlined anim::sprite_msb#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined init::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulf_init::sqr2_hi#0 = (const byte[512]) mulf_sqr2_hi#0
Constant inlined $1 = -(byte/signed byte/word/signed word/dword/signed dword) 70
Constant inlined $2 = -(byte/signed byte/word/signed word/dword/signed dword) 70
Constant inlined anim::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined $3 = -(byte/signed byte/word/signed word/dword/signed dword) 70
Constant inlined $4 = -(byte/signed byte/word/signed word/dword/signed dword) 70
Constant inlined $5 = -(byte/signed byte/word/signed word/dword/signed dword) 70
Constant inlined mulf_init::dir#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined $6 = -(byte/signed byte/word/signed word/dword/signed dword) 70
Constant inlined mulf_init::dir#0 = (byte/word/signed word/dword/signed dword) 255
Constant inlined mulf_init::$20 = (const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256
Constant inlined mulf_init::x_255#0 = ((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulf_init::x_2#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulf_init::sqr#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined init::$3 = ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
Constant inlined init::$2 = (const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
Constant inlined anim::angle#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulf_init::$8 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512
Constant inlined mulf_init::sqr1_hi#0 = (const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulf_init::$10 = -(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulf_init::sqr1_lo#0 = (const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulf_init::$15 = (const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511
Constant inlined mulf_init::$18 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256
Constant inlined mulf_init::$19 = (const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511
Constant inlined mulf_init::$17 = (const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting anim::@25(between anim::@8 and anim::@7)
Added new block during phi lifting anim::@26(between anim::@24 and anim::@8)
Added new block during phi lifting mulf8s_prepared::@7(between mulf8s_prepared::@6 and mulf8s_prepared::@1)
Added new block during phi lifting mulf8s_prepared::@8(between mulf8s_prepared::@1 and mulf8s_prepared::@2)
Added new block during phi lifting init::@4(between init::@1 and init::@1)
Added new block during phi lifting mulf_init::@9(between mulf_init::@2 and mulf_init::@1)
Added new block during phi lifting mulf_init::@10(between mulf_init::@1 and mulf_init::@2)
Added new block during phi lifting mulf_init::@11(between mulf_init::@4 and mulf_init::@3)
Added new block during phi lifting mulf_init::@12(between mulf_init::@3 and mulf_init::@4)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of anim
Adding NOP phi() at start of init
Adding NOP phi() at start of mulf_init
Adding NOP phi() at start of mulf_init::@7
CALL GRAPH
Calls in [] to main:3 
Calls in [main] to init:6 anim:8 
Calls in [anim] to mulf8u_prepare:18 mulf8s_prepared:21 mulf8s_prepared:27 mulf8u_prepare:32 mulf8s_prepared:35 mulf8s_prepared:42 
Calls in [mulf8s_prepared] to mulf8u_prepared:72 
Calls in [init] to mulf_init:99 

Created 21 initial phi equivalence classes
Coalesced [20] mulf8s_prepared::b#8 ← mulf8s_prepared::b#0
Coalesced [26] mulf8s_prepared::b#10 ← mulf8s_prepared::b#1
Coalesced [34] mulf8s_prepared::b#9 ← mulf8s_prepared::b#2
Coalesced [41] mulf8s_prepared::b#11 ← mulf8s_prepared::b#3
Coalesced [54] anim::sprite_msb#18 ← anim::sprite_msb#2
Coalesced [67] anim::angle#21 ← anim::angle#1
Coalesced [68] anim::i#15 ← anim::i#1
Coalesced [69] anim::sprite_msb#17 ← anim::sprite_msb#5
Coalesced [70] anim::sprite_msb#19 ← anim::sprite_msb#1
Coalesced [79] mulf8s_prepared::m#7 ← mulf8s_prepared::m#1
Coalesced [85] mulf8s_prepared::m#10 ← mulf8s_prepared::m#2
Coalesced [88] mulf8s_prepared::m#9 ← mulf8s_prepared::m#5
Coalesced [89] mulf8s_prepared::m#8 ← mulf8s_prepared::m#0
Coalesced [107] init::i#3 ← init::i#1
Coalesced [115] mulf_init::sqr#8 ← mulf_init::sqr#2
Coalesced [116] mulf_init::x_2#7 ← mulf_init::x_2#1
Coalesced [139] mulf_init::x_255#5 ← mulf_init::x_255#1
Coalesced [140] mulf_init::sqr2_lo#5 ← mulf_init::sqr2_lo#1
Coalesced [141] mulf_init::sqr2_hi#5 ← mulf_init::sqr2_hi#1
Coalesced [142] mulf_init::dir#4 ← mulf_init::dir#3
Coalesced (already) [143] mulf_init::dir#5 ← mulf_init::dir#2
Coalesced [144] mulf_init::c#5 ← mulf_init::c#1
Coalesced [145] mulf_init::sqr#6 ← mulf_init::sqr#1
Coalesced [146] mulf_init::sqr1_lo#5 ← mulf_init::sqr1_lo#1
Coalesced [147] mulf_init::sqr1_hi#5 ← mulf_init::sqr1_hi#1
Coalesced [148] mulf_init::x_2#5 ← mulf_init::x_2#2
Coalesced [149] mulf_init::sqr#7 ← mulf_init::sqr#4
Coalesced (already) [150] mulf_init::x_2#6 ← mulf_init::x_2#3
Coalesced down to 16 phi equivalence classes
Culled Empty Block (label) anim::@25
Culled Empty Block (label) anim::@26
Culled Empty Block (label) mulf8s_prepared::@8
Culled Empty Block (label) mulf8s_prepared::@7
Culled Empty Block (label) init::@4
Culled Empty Block (label) mulf_init::@7
Culled Empty Block (label) mulf_init::@11
Culled Empty Block (label) mulf_init::@9
Culled Empty Block (label) mulf_init::@10
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of anim
Adding NOP phi() at start of init
Adding NOP phi() at start of mulf_init
Adding NOP phi() at start of mulf_init::@12

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@13
@13: scope:[]  from @begin
  kickasm(location (const byte*) COS#0) {{ {
    .var min = -$7fff
    .var max = $7fff
    .var ampl = max-min;
    .for(var i=0;i<$140;i++) {
        .var rad = i*2*PI/256;
        .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
    }
    }
 }}
  to:@16
@16: scope:[]  from @13
  kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
    .for (var y=0; y<21; y++)
        .for (var x=0;x<3; x++)
            .byte pic.getSinglecolorByte(x,y)
 }}
  [3] call main 
  to:@end
@end: scope:[]  from @16
  [4] phi()
main: scope:[main]  from @16
  asm { sei  }
  [6] call init 
  to:main::@1
main::@1: scope:[main]  from main
  [7] phi()
  [8] call anim 
  to:main::@return
main::@return: scope:[main]  from main::@1
  [9] return 
  to:@return
anim: scope:[anim]  from main::@1
  [10] phi()
  to:anim::@1
anim::@1: scope:[anim]  from anim anim::@15
  [11] (byte) anim::angle#10 ← phi( anim/(byte/signed byte/word/signed word/dword/signed dword) 0 anim::@15/(byte) anim::angle#1 )
  to:anim::@4
anim::@4: scope:[anim]  from anim::@1 anim::@4
  [12] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto anim::@4
  to:anim::@6
anim::@6: scope:[anim]  from anim::@4
  [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
  to:anim::@7
anim::@7: scope:[anim]  from anim::@6 anim::@8
  [14] (byte) anim::sprite_msb#10 ← phi( anim::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 anim::@8/(byte) anim::sprite_msb#5 )
  [14] (byte) anim::i#10 ← phi( anim::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 anim::@8/(byte) anim::i#1 )
  [15] (signed byte) anim::x#0 ← *((const signed byte[8]) xs#0 + (byte) anim::i#10)
  [16] (signed byte) anim::y#0 ← *((const signed byte[8]) ys#0 + (byte) anim::i#10)
  to:anim::mulf8s_prepare1
anim::mulf8s_prepare1: scope:[anim]  from anim::@7
  [17] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte*) COS#0 + (byte) anim::angle#10)
  [18] call mulf8u_prepare 
  to:anim::@17
anim::@17: scope:[anim]  from anim::mulf8s_prepare1
  [19] (signed byte) mulf8s_prepared::b#0 ← (signed byte) anim::x#0
  [20] call mulf8s_prepared 
  [21] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4
  to:anim::@20
anim::@20: scope:[anim]  from anim::@17
  [22] (signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#2
  [23] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [24] (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#0
  [25] call mulf8s_prepared 
  [26] (signed word) mulf8s_prepared::return#3 ← (signed word)(word) mulf8s_prepared::m#4
  to:anim::@21
anim::@21: scope:[anim]  from anim::@20
  [27] (signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#3
  [28] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1
  to:anim::mulf8s_prepare2
anim::mulf8s_prepare2: scope:[anim]  from anim::@21
  [29] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#10)
  [30] call mulf8u_prepare 
  to:anim::@18
anim::@18: scope:[anim]  from anim::mulf8s_prepare2
  [31] (signed byte) mulf8s_prepared::b#2 ← (signed byte) anim::y#0
  [32] call mulf8s_prepared 
  [33] (signed word) mulf8s_prepared::return#4 ← (signed word)(word) mulf8s_prepared::m#4
  to:anim::@23
anim::@23: scope:[anim]  from anim::@18
  [34] (signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#4
  [35] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [36] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10
  [37] (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#0
  [38] call mulf8s_prepared 
  [39] (signed word) mulf8s_prepared::return#10 ← (signed word)(word) mulf8s_prepared::m#4
  to:anim::@24
anim::@24: scope:[anim]  from anim::@23
  [40] (signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10
  [41] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12
  [43] (byte~) anim::$13 ← > (signed word) anim::xr#1
  [44] (signed byte~) anim::$15 ← (signed byte)(byte~) anim::$13
  [45] (signed word) anim::xpos#0 ← (signed byte~) anim::$15 + (byte/signed byte/word/signed word/dword/signed dword) 24+(byte/word/signed word/dword/signed dword) 149
  [46] (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  [47] (byte~) anim::$18 ← > (signed word) anim::xpos#0
  [48] if((byte~) anim::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@8
  to:anim::@14
anim::@14: scope:[anim]  from anim::@24
  [49] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte/word/signed word/dword/signed dword) 128
  to:anim::@8
anim::@8: scope:[anim]  from anim::@14 anim::@24
  [50] (byte) anim::sprite_msb#5 ← phi( anim::@14/(byte) anim::sprite_msb#2 anim::@24/(byte) anim::sprite_msb#1 )
  [51] (byte~) anim::$22 ← > (signed word) anim::yr#1
  [52] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) 89+(byte/signed byte/word/signed word/dword/signed dword) 51
  [53] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [54] (byte~) anim::$25 ← < (signed word) anim::xpos#0
  [55] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25
  [56] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0
  [57] (byte) anim::i#1 ← ++ (byte) anim::i#10
  [58] if((byte) anim::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto anim::@7
  to:anim::@15
anim::@15: scope:[anim]  from anim::@8
  [59] *((const byte*) SPRITES_XMSB#0) ← (byte) anim::sprite_msb#5
  [60] (byte) anim::angle#1 ← ++ (byte) anim::angle#10
  [61] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
  to:anim::@1
mulf8s_prepared: scope:[mulf8s_prepared]  from anim::@17 anim::@18 anim::@20 anim::@23
  [62] (signed byte) mulf8s_prepared::b#4 ← phi( anim::@17/(signed byte) mulf8s_prepared::b#0 anim::@18/(signed byte) mulf8s_prepared::b#2 anim::@20/(signed byte) mulf8s_prepared::b#1 anim::@23/(signed byte) mulf8s_prepared::b#3 )
  [63] call mulf8u_prepared 
  [64] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0
  to:mulf8s_prepared::@6
mulf8s_prepared::@6: scope:[mulf8s_prepared]  from mulf8s_prepared
  [65] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2
  [66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1
  to:mulf8s_prepared::@3
mulf8s_prepared::@3: scope:[mulf8s_prepared]  from mulf8s_prepared::@6
  [67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0
  [68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4
  [69] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
  to:mulf8s_prepared::@1
mulf8s_prepared::@1: scope:[mulf8s_prepared]  from mulf8s_prepared::@3 mulf8s_prepared::@6
  [70] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
  [71] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
  to:mulf8s_prepared::@4
mulf8s_prepared::@4: scope:[mulf8s_prepared]  from mulf8s_prepared::@1
  [72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
  [73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
  [74] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
  to:mulf8s_prepared::@2
mulf8s_prepared::@2: scope:[mulf8s_prepared]  from mulf8s_prepared::@1 mulf8s_prepared::@4
  [75] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
  to:mulf8s_prepared::@return
mulf8s_prepared::@return: scope:[mulf8s_prepared]  from mulf8s_prepared::@2
  [76] return 
  to:@return
mulf8u_prepared: scope:[mulf8u_prepared]  from mulf8s_prepared
  [77] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4
  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  }
  [79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
  to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared]  from mulf8u_prepared
  [80] return 
  to:@return
mulf8u_prepare: scope:[mulf8u_prepare]  from anim::mulf8s_prepare1 anim::mulf8s_prepare2
  [81] (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 anim::mulf8s_prepare2/(byte~) mulf8u_prepare::a#4 )
  [82] *((const byte*) mulf8u_prepare::memA#0) ← (byte) 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
  [84] return 
  to:@return
init: scope:[init]  from main
  [85] phi()
  [86] call mulf_init 
  to:init::@3
init::@3: scope:[init]  from init
  [87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255
  to:init::@1
init::@1: scope:[init]  from init::@1 init::@3
  [88] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
  [90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0
  [91] (byte) init::i#1 ← ++ (byte) init::i#2
  [92] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1
  to:init::@return
init::@return: scope:[init]  from init::@1
  [93] return 
  to:@return
mulf_init: scope:[mulf_init]  from init
  [94] phi()
  to:mulf_init::@1
mulf_init::@1: scope:[mulf_init]  from mulf_init mulf_init::@2
  [95] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
  [95] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
  [95] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
  [95] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
  [95] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
  [96] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
  [97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
  [98] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
  to:mulf_init::@5
mulf_init::@5: scope:[mulf_init]  from mulf_init::@1
  [99] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
  [100] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
  to:mulf_init::@2
mulf_init::@2: scope:[mulf_init]  from mulf_init::@1 mulf_init::@5
  [101] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
  [101] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
  [102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
  [103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
  [104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
  [105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
  [106] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
  [107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
  [108] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
  [109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
  to:mulf_init::@3
mulf_init::@3: scope:[mulf_init]  from mulf_init::@2 mulf_init::@4
  [110] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
  [110] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
  [110] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
  [110] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
  [111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
  [112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
  [113] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
  [114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
  [115] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
  to:mulf_init::@4
mulf_init::@4: scope:[mulf_init]  from mulf_init::@12 mulf_init::@3
  [116] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
  [117] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
  [118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
  to:mulf_init::@8
mulf_init::@8: scope:[mulf_init]  from mulf_init::@4
  [119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
  [120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
  to:mulf_init::@return
mulf_init::@return: scope:[mulf_init]  from mulf_init::@8
  [121] return 
  to:@return
mulf_init::@12: scope:[mulf_init]  from mulf_init::@3
  [122] phi()
  to:mulf_init::@4


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte*) COS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(byte*) SIN
(byte*) SPRITE
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) anim()
(signed word~) anim::$10 202.0
(signed word~) anim::$11 202.0
(signed word~) anim::$12 202.0
(byte~) anim::$13 101.0
(signed byte~) anim::$15 202.0
(byte~) anim::$18 202.0
(byte~) anim::$22 202.0
(byte~) anim::$25 202.0
(signed word~) anim::$4 202.0
(signed word~) anim::$6 202.0
(signed word~) anim::$9 202.0
(byte) anim::angle
(byte) anim::angle#1 11.0
(byte) anim::angle#10 0.4489795918367347
(signed byte) anim::cos_a
(byte) anim::i
(byte) anim::i#1 151.5
(byte) anim::i#10 11.74418604651163
(byte) anim::i2
(byte) anim::i2#0 101.0
(byte~) anim::mulf8s_prepare1_$0
(signed byte) anim::mulf8s_prepare1_a
(byte~) anim::mulf8s_prepare2_$0
(signed byte) anim::mulf8s_prepare2_a
(signed byte) anim::sin_a
(byte) anim::sprite_msb
(byte) anim::sprite_msb#1 101.0
(byte) anim::sprite_msb#10 6.3125
(byte) anim::sprite_msb#2 202.0
(byte) anim::sprite_msb#5 34.888888888888886
(signed byte) anim::x
(signed byte) anim::x#0 13.772727272727273
(signed word) anim::xpos
(signed word) anim::xpos#0 33.666666666666664
(signed word) anim::xr
(signed word) anim::xr#0 15.538461538461538
(signed word) anim::xr#1 28.857142857142858
(signed byte) anim::y
(signed byte) anim::y#0 20.2
(byte) anim::ypos
(byte) anim::ypos#0 50.5
(signed word) anim::yr
(signed word) anim::yr#0 14.428571428571429
(signed word) anim::yr#1 22.444444444444443
(void()) init()
(byte) init::i
(byte) init::i#1 16.5
(byte) init::i#2 14.666666666666666
(byte*) init::sprites_ptr
(void()) main()
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
(byte~) mulf8s_prepared::$11 4.0
(byte~) mulf8s_prepared::$15 4.0
(byte~) mulf8s_prepared::$16 4.0
(byte~) mulf8s_prepared::$5 4.0
(signed byte) mulf8s_prepared::b
(signed byte) mulf8s_prepared::b#0 202.0
(signed byte) mulf8s_prepared::b#1 202.0
(signed byte) mulf8s_prepared::b#2 202.0
(signed byte) mulf8s_prepared::b#3 202.0
(signed byte) mulf8s_prepared::b#4 31.23076923076923
(word) mulf8s_prepared::m
(word) mulf8s_prepared::m#0 2.0
(word) mulf8s_prepared::m#1 4.0
(word) mulf8s_prepared::m#2 4.0
(word) mulf8s_prepared::m#4 0.6666666666666666
(word) mulf8s_prepared::m#5 2.5
(signed byte*) mulf8s_prepared::memA
(signed word) mulf8s_prepared::return
(signed word) mulf8s_prepared::return#10 202.0
(signed word) mulf8s_prepared::return#2 202.0
(signed word) mulf8s_prepared::return#3 202.0
(signed word) mulf8s_prepared::return#4 202.0
(void()) mulf8u_prepare((byte) mulf8u_prepare::a)
(byte) mulf8u_prepare::a
(byte) mulf8u_prepare::a#2 204.0
(byte~) mulf8u_prepare::a#3 202.0
(byte~) mulf8u_prepare::a#4 202.0
(byte*) mulf8u_prepare::memA
(word()) mulf8u_prepared((byte) mulf8u_prepared::b)
(byte) mulf8u_prepared::b
(byte*) mulf8u_prepared::memB
(byte*) mulf8u_prepared::resL
(word) mulf8u_prepared::return
(word) mulf8u_prepared::return#0 1.3333333333333333
(word) mulf8u_prepared::return#2 4.0
(void()) mulf_init()
(byte~) mulf_init::$2 22.0
(byte~) mulf_init::$5 22.0
(byte~) mulf_init::$6 22.0
(byte) mulf_init::c
(byte) mulf_init::c#1 2.357142857142857
(byte) mulf_init::c#2 22.0
(byte) mulf_init::dir
(byte) mulf_init::dir#2 4.714285714285714
(byte) mulf_init::dir#3 7.333333333333333
(word) mulf_init::sqr
(word) mulf_init::sqr#1 7.333333333333333
(word) mulf_init::sqr#2 22.0
(word) mulf_init::sqr#3 9.166666666666666
(word) mulf_init::sqr#4 6.6000000000000005
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#1 5.5
(byte*) mulf_init::sqr1_hi#2 3.0
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#1 16.5
(byte*) mulf_init::sqr1_lo#2 2.5384615384615383
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#1 3.142857142857143
(byte*) mulf_init::sqr2_hi#2 11.0
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#1 16.5
(byte*) mulf_init::sqr2_lo#2 4.125
(byte) mulf_init::x_2
(byte) mulf_init::x_2#1 11.0
(byte) mulf_init::x_2#2 4.888888888888889
(byte) mulf_init::x_2#3 8.25
(byte) mulf_init::x_255
(byte) mulf_init::x_255#1 5.5
(byte) mulf_init::x_255#2 11.0
(byte[512]) mulf_sqr1_hi
(byte[512]) mulf_sqr1_lo
(byte[512]) mulf_sqr2_hi
(byte[512]) mulf_sqr2_lo
(signed byte[8]) xs
(signed byte[8]) ys

Initial phi equivalence classes
[ anim::angle#10 anim::angle#1 ]
[ anim::i#10 anim::i#1 ]
[ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ]
[ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ]
[ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ]
[ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ]
[ init::i#2 init::i#1 ]
[ mulf_init::c#2 mulf_init::c#1 ]
[ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
[ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
[ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
[ mulf_init::x_255#2 mulf_init::x_255#1 ]
[ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
[ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
[ mulf_init::dir#2 mulf_init::dir#3 ]
Added variable anim::x#0 to zero page equivalence class [ anim::x#0 ]
Added variable anim::y#0 to zero page equivalence class [ anim::y#0 ]
Added variable mulf8s_prepared::return#2 to zero page equivalence class [ mulf8s_prepared::return#2 ]
Added variable anim::$4 to zero page equivalence class [ anim::$4 ]
Added variable anim::xr#0 to zero page equivalence class [ anim::xr#0 ]
Added variable mulf8s_prepared::return#3 to zero page equivalence class [ mulf8s_prepared::return#3 ]
Added variable anim::$6 to zero page equivalence class [ anim::$6 ]
Added variable anim::yr#0 to zero page equivalence class [ anim::yr#0 ]
Added variable mulf8s_prepared::return#4 to zero page equivalence class [ mulf8s_prepared::return#4 ]
Added variable anim::$9 to zero page equivalence class [ anim::$9 ]
Added variable anim::$10 to zero page equivalence class [ anim::$10 ]
Added variable anim::xr#1 to zero page equivalence class [ anim::xr#1 ]
Added variable mulf8s_prepared::return#10 to zero page equivalence class [ mulf8s_prepared::return#10 ]
Added variable anim::$11 to zero page equivalence class [ anim::$11 ]
Added variable anim::$12 to zero page equivalence class [ anim::$12 ]
Added variable anim::yr#1 to zero page equivalence class [ anim::yr#1 ]
Added variable anim::$13 to zero page equivalence class [ anim::$13 ]
Added variable anim::$15 to zero page equivalence class [ anim::$15 ]
Added variable anim::xpos#0 to zero page equivalence class [ anim::xpos#0 ]
Added variable anim::$18 to zero page equivalence class [ anim::$18 ]
Added variable anim::$22 to zero page equivalence class [ anim::$22 ]
Added variable anim::ypos#0 to zero page equivalence class [ anim::ypos#0 ]
Added variable anim::i2#0 to zero page equivalence class [ anim::i2#0 ]
Added variable anim::$25 to zero page equivalence class [ anim::$25 ]
Added variable mulf8u_prepared::return#2 to zero page equivalence class [ mulf8u_prepared::return#2 ]
Added variable mulf8s_prepared::$5 to zero page equivalence class [ mulf8s_prepared::$5 ]
Added variable mulf8s_prepared::$15 to zero page equivalence class [ mulf8s_prepared::$15 ]
Added variable mulf8s_prepared::$11 to zero page equivalence class [ mulf8s_prepared::$11 ]
Added variable mulf8s_prepared::$16 to zero page equivalence class [ mulf8s_prepared::$16 ]
Added variable mulf8u_prepared::return#0 to zero page equivalence class [ mulf8u_prepared::return#0 ]
Added variable mulf_init::$2 to zero page equivalence class [ mulf_init::$2 ]
Added variable mulf_init::$5 to zero page equivalence class [ mulf_init::$5 ]
Added variable mulf_init::$6 to zero page equivalence class [ mulf_init::$6 ]
Complete equivalence classes
[ anim::angle#10 anim::angle#1 ]
[ anim::i#10 anim::i#1 ]
[ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ]
[ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ]
[ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ]
[ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ]
[ init::i#2 init::i#1 ]
[ mulf_init::c#2 mulf_init::c#1 ]
[ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
[ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
[ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
[ mulf_init::x_255#2 mulf_init::x_255#1 ]
[ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
[ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
[ mulf_init::dir#2 mulf_init::dir#3 ]
[ anim::x#0 ]
[ anim::y#0 ]
[ mulf8s_prepared::return#2 ]
[ anim::$4 ]
[ anim::xr#0 ]
[ mulf8s_prepared::return#3 ]
[ anim::$6 ]
[ anim::yr#0 ]
[ mulf8s_prepared::return#4 ]
[ anim::$9 ]
[ anim::$10 ]
[ anim::xr#1 ]
[ mulf8s_prepared::return#10 ]
[ anim::$11 ]
[ anim::$12 ]
[ anim::yr#1 ]
[ anim::$13 ]
[ anim::$15 ]
[ anim::xpos#0 ]
[ anim::$18 ]
[ anim::$22 ]
[ anim::ypos#0 ]
[ anim::i2#0 ]
[ anim::$25 ]
[ mulf8u_prepared::return#2 ]
[ mulf8s_prepared::$5 ]
[ mulf8s_prepared::$15 ]
[ mulf8s_prepared::$11 ]
[ mulf8s_prepared::$16 ]
[ mulf8u_prepared::return#0 ]
[ mulf_init::$2 ]
[ mulf_init::$5 ]
[ mulf_init::$6 ]
Allocated zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ]
Allocated zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ]
Allocated zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ]
Allocated zp ZP_BYTE:5 [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ]
Allocated zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ]
Allocated zp ZP_BYTE:8 [ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ]
Allocated zp ZP_BYTE:9 [ init::i#2 init::i#1 ]
Allocated zp ZP_BYTE:10 [ mulf_init::c#2 mulf_init::c#1 ]
Allocated zp ZP_WORD:11 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
Allocated zp ZP_WORD:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
Allocated zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Allocated zp ZP_WORD:16 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
Allocated zp ZP_BYTE:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Allocated zp ZP_WORD:19 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ]
Allocated zp ZP_WORD:21 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
Allocated zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ]
Allocated zp ZP_BYTE:24 [ anim::x#0 ]
Allocated zp ZP_BYTE:25 [ anim::y#0 ]
Allocated zp ZP_WORD:26 [ mulf8s_prepared::return#2 ]
Allocated zp ZP_WORD:28 [ anim::$4 ]
Allocated zp ZP_WORD:30 [ anim::xr#0 ]
Allocated zp ZP_WORD:32 [ mulf8s_prepared::return#3 ]
Allocated zp ZP_WORD:34 [ anim::$6 ]
Allocated zp ZP_WORD:36 [ anim::yr#0 ]
Allocated zp ZP_WORD:38 [ mulf8s_prepared::return#4 ]
Allocated zp ZP_WORD:40 [ anim::$9 ]
Allocated zp ZP_WORD:42 [ anim::$10 ]
Allocated zp ZP_WORD:44 [ anim::xr#1 ]
Allocated zp ZP_WORD:46 [ mulf8s_prepared::return#10 ]
Allocated zp ZP_WORD:48 [ anim::$11 ]
Allocated zp ZP_WORD:50 [ anim::$12 ]
Allocated zp ZP_WORD:52 [ anim::yr#1 ]
Allocated zp ZP_BYTE:54 [ anim::$13 ]
Allocated zp ZP_BYTE:55 [ anim::$15 ]
Allocated zp ZP_WORD:56 [ anim::xpos#0 ]
Allocated zp ZP_BYTE:58 [ anim::$18 ]
Allocated zp ZP_BYTE:59 [ anim::$22 ]
Allocated zp ZP_BYTE:60 [ anim::ypos#0 ]
Allocated zp ZP_BYTE:61 [ anim::i2#0 ]
Allocated zp ZP_BYTE:62 [ anim::$25 ]
Allocated zp ZP_WORD:63 [ mulf8u_prepared::return#2 ]
Allocated zp ZP_BYTE:65 [ mulf8s_prepared::$5 ]
Allocated zp ZP_BYTE:66 [ mulf8s_prepared::$15 ]
Allocated zp ZP_BYTE:67 [ mulf8s_prepared::$11 ]
Allocated zp ZP_BYTE:68 [ mulf8s_prepared::$16 ]
Allocated zp ZP_WORD:69 [ mulf8u_prepared::return#0 ]
Allocated zp ZP_BYTE:71 [ mulf_init::$2 ]
Allocated zp ZP_BYTE:72 [ mulf_init::$5 ]
Allocated zp ZP_BYTE:73 [ mulf_init::$6 ]

INITIAL ASM
//SEG0 File Comments
// 2D rotattion of 8 sprites 
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label SPRITES_XPOS = $d000
  .label SPRITES_YPOS = $d001
  .label SPRITES_XMSB = $d010
  .label RASTER = $d012
  .label SPRITES_ENABLE = $d015
  .label BORDERCOL = $d020
  .label SPRITES_COLS = $d027
  .const GREEN = 5
  .const LIGHT_BLUE = $e
  .label SCREEN = $400
  // Sine and Cosine tables  
  // Angles: $00=0, $80=PI,$100=2*PI
  // Sine/Cosine: signed fixed [-$7f,$7f]
  .label COS = $2000
  // A single sprite
  .label SPRITE = $3000
  .label SIN = COS+$40
//SEG3 @begin
bbegin:
  jmp b13
//SEG4 @13
b13:
//SEG5 kickasm(location (const byte*) COS#0) {{ {     .var min = -$7fff     .var max = $7fff     .var ampl = max-min;     .for(var i=0;i<$140;i++) {         .var rad = i*2*PI/256;         .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))     }     }  }}
  // sin(x) = cos(x+PI/2)
  jmp b16
//SEG6 @16
b16:
//SEG7 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))     .for (var y=0; y<21; y++)         .for (var x=0;x<3; x++)             .byte pic.getSinglecolorByte(x,y)  }}
//SEG8 [3] call main 
  jsr main
//SEG9 [4] phi from @16 to @end [phi:@16->@end]
bend_from_b16:
  jmp bend
//SEG10 @end
bend:
//SEG11 main
main: {
  //SEG12 asm { sei  }
    sei
  //SEG13 [6] call init 
  //SEG14 [85] phi from main to init [phi:main->init]
  init_from_main:
    jsr init
  //SEG15 [7] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    jmp b1
  //SEG16 main::@1
  b1:
  //SEG17 [8] call anim 
  //SEG18 [10] phi from main::@1 to anim [phi:main::@1->anim]
  anim_from_b1:
    jsr anim
    jmp breturn
  //SEG19 main::@return
  breturn:
  //SEG20 [9] return 
    rts
}
//SEG21 anim
anim: {
    .label _4 = $1c
    .label _6 = $22
    .label _9 = $28
    .label _10 = $2a
    .label _11 = $30
    .label _12 = $32
    .label _13 = $36
    .label _15 = $37
    .label _18 = $3a
    .label _22 = $3b
    .label _25 = $3e
    .label x = $18
    .label y = $19
    .label xr = $1e
    .label yr = $24
    .label xr_1 = $2c
    .label yr_1 = $34
    .label xpos = $38
    .label sprite_msb = 4
    .label ypos = $3c
    .label i2 = $3d
    .label i = 3
    .label angle = 2
  //SEG22 [11] phi from anim to anim::@1 [phi:anim->anim::@1]
  b1_from_anim:
  //SEG23 [11] phi (byte) anim::angle#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim->anim::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta angle
    jmp b1
  //SEG24 anim::@1
  b1:
    jmp b4
  //SEG25 anim::@4
  b4:
  //SEG26 [12] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto anim::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b4
    jmp b6
  //SEG27 anim::@6
  b6:
  //SEG28 [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
  //SEG29 [14] phi from anim::@6 to anim::@7 [phi:anim::@6->anim::@7]
  b7_from_b6:
  //SEG30 [14] phi (byte) anim::sprite_msb#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@6->anim::@7#0] -- vbuz1=vbuc1 
    lda #0
    sta sprite_msb
  //SEG31 [14] phi (byte) anim::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@6->anim::@7#1] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b7
  //SEG32 [14] phi from anim::@8 to anim::@7 [phi:anim::@8->anim::@7]
  b7_from_b8:
  //SEG33 [14] phi (byte) anim::sprite_msb#10 = (byte) anim::sprite_msb#5 [phi:anim::@8->anim::@7#0] -- register_copy 
  //SEG34 [14] phi (byte) anim::i#10 = (byte) anim::i#1 [phi:anim::@8->anim::@7#1] -- register_copy 
    jmp b7
  //SEG35 anim::@7
  b7:
  //SEG36 [15] (signed byte) anim::x#0 ← *((const signed byte[8]) xs#0 + (byte) anim::i#10) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy i
    lda xs,y
    sta x
  //SEG37 [16] (signed byte) anim::y#0 ← *((const signed byte[8]) ys#0 + (byte) anim::i#10) -- vbsz1=pbsc1_derefidx_vbuz2 
    // signed fixed[7.0]
    ldy i
    lda ys,y
    sta y
    jmp mulf8s_prepare1
  //SEG38 anim::mulf8s_prepare1
  mulf8s_prepare1:
  //SEG39 [17] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte*) COS#0 + (byte) anim::angle#10) -- vbuz1=pbsc1_derefidx_vbuz2 
    ldy angle
    lda COS,y
    sta mulf8u_prepare.a
  //SEG40 [18] call mulf8u_prepare 
  //SEG41 [81] phi from anim::mulf8s_prepare1 to mulf8u_prepare [phi:anim::mulf8s_prepare1->mulf8u_prepare]
  mulf8u_prepare_from_mulf8s_prepare1:
  //SEG42 [81] phi (byte) mulf8u_prepare::a#2 = (byte~) mulf8u_prepare::a#3 [phi:anim::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy 
    jsr mulf8u_prepare
    jmp b17
  //SEG43 anim::@17
  b17:
  //SEG44 [19] (signed byte) mulf8s_prepared::b#0 ← (signed byte) anim::x#0 -- vbsz1=vbsz2 
    lda x
    sta mulf8s_prepared.b
  //SEG45 [20] call mulf8s_prepared 
  //SEG46 [62] phi from anim::@17 to mulf8s_prepared [phi:anim::@17->mulf8s_prepared]
  mulf8s_prepared_from_b17:
  //SEG47 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#0 [phi:anim::@17->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG48 [21] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 
    lda mulf8s_prepared.m
    sta mulf8s_prepared.return
    lda mulf8s_prepared.m+1
    sta mulf8s_prepared.return+1
    jmp b20
  //SEG49 anim::@20
  b20:
  //SEG50 [22] (signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#2 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return
    sta _4
    lda mulf8s_prepared.return+1
    sta _4+1
  //SEG51 [23] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz2_rol_1 
    lda _4
    asl
    sta xr
    lda _4+1
    rol
    sta xr+1
  //SEG52 [24] (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#0 -- vbsz1=vbsz2 
    lda y
    sta mulf8s_prepared.b
  //SEG53 [25] call mulf8s_prepared 
  //SEG54 [62] phi from anim::@20 to mulf8s_prepared [phi:anim::@20->mulf8s_prepared]
  mulf8s_prepared_from_b20:
  //SEG55 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#1 [phi:anim::@20->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG56 [26] (signed word) mulf8s_prepared::return#3 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 
    lda mulf8s_prepared.m
    sta mulf8s_prepared.return_3
    lda mulf8s_prepared.m+1
    sta mulf8s_prepared.return_3+1
    jmp b21
  //SEG57 anim::@21
  b21:
  //SEG58 [27] (signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#3 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return_3
    sta _6
    lda mulf8s_prepared.return_3+1
    sta _6+1
  //SEG59 [28] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz2_rol_1 
    lda _6
    asl
    sta yr
    lda _6+1
    rol
    sta yr+1
    jmp mulf8s_prepare2
  //SEG60 anim::mulf8s_prepare2
  mulf8s_prepare2:
  //SEG61 [29] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#10) -- vbuz1=pbsc1_derefidx_vbuz2 
    ldy angle
    lda SIN,y
    sta mulf8u_prepare.a
  //SEG62 [30] call mulf8u_prepare 
  //SEG63 [81] phi from anim::mulf8s_prepare2 to mulf8u_prepare [phi:anim::mulf8s_prepare2->mulf8u_prepare]
  mulf8u_prepare_from_mulf8s_prepare2:
  //SEG64 [81] phi (byte) mulf8u_prepare::a#2 = (byte~) mulf8u_prepare::a#4 [phi:anim::mulf8s_prepare2->mulf8u_prepare#0] -- register_copy 
    jsr mulf8u_prepare
    jmp b18
  //SEG65 anim::@18
  b18:
  //SEG66 [31] (signed byte) mulf8s_prepared::b#2 ← (signed byte) anim::y#0 -- vbsz1=vbsz2 
    lda y
    sta mulf8s_prepared.b
  //SEG67 [32] call mulf8s_prepared 
  //SEG68 [62] phi from anim::@18 to mulf8s_prepared [phi:anim::@18->mulf8s_prepared]
  mulf8s_prepared_from_b18:
  //SEG69 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#2 [phi:anim::@18->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG70 [33] (signed word) mulf8s_prepared::return#4 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 
    lda mulf8s_prepared.m
    sta mulf8s_prepared.return_4
    lda mulf8s_prepared.m+1
    sta mulf8s_prepared.return_4+1
    jmp b23
  //SEG71 anim::@23
  b23:
  //SEG72 [34] (signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#4 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return_4
    sta _9
    lda mulf8s_prepared.return_4+1
    sta _9+1
  //SEG73 [35] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz2_rol_1 
    lda _9
    asl
    sta _10
    lda _9+1
    rol
    sta _10+1
  //SEG74 [36] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10 -- vwsz1=vwsz2_minus_vwsz3 
    lda xr
    sec
    sbc _10
    sta xr_1
    lda xr+1
    sbc _10+1
    sta xr_1+1
  //SEG75 [37] (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#0 -- vbsz1=vbsz2 
    lda x
    sta mulf8s_prepared.b
  //SEG76 [38] call mulf8s_prepared 
  //SEG77 [62] phi from anim::@23 to mulf8s_prepared [phi:anim::@23->mulf8s_prepared]
  mulf8s_prepared_from_b23:
  //SEG78 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#3 [phi:anim::@23->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG79 [39] (signed word) mulf8s_prepared::return#10 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 
    lda mulf8s_prepared.m
    sta mulf8s_prepared.return_10
    lda mulf8s_prepared.m+1
    sta mulf8s_prepared.return_10+1
    jmp b24
  //SEG80 anim::@24
  b24:
  //SEG81 [40] (signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return_10
    sta _11
    lda mulf8s_prepared.return_10+1
    sta _11+1
  //SEG82 [41] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz2_rol_1 
    lda _11
    asl
    sta _12
    lda _11+1
    rol
    sta _12+1
  //SEG83 [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 -- vwsz1=vwsz2_plus_vwsz3 
    // signed fixed[8.8] 
    lda yr
    clc
    adc _12
    sta yr_1
    lda yr+1
    adc _12+1
    sta yr_1+1
  //SEG84 [43] (byte~) anim::$13 ← > (signed word) anim::xr#1 -- vbuz1=_hi_vwsz2 
    lda xr_1+1
    sta _13
  //SEG85 [44] (signed byte~) anim::$15 ← (signed byte)(byte~) anim::$13 -- vbsz1=vbsz2 
    lda _13
    sta _15
  //SEG86 [45] (signed word) anim::xpos#0 ← (signed byte~) anim::$15 + (byte/signed byte/word/signed word/dword/signed dword) 24+(byte/word/signed word/dword/signed dword) 149 -- vwsz1=vbsz2_plus_vbuc1 
    lda _15
    sta xpos
    ora #$7f
    bmi !+
    lda #0
  !:
    sta xpos+1
    lda xpos
    clc
    adc #$18+$95
    sta xpos
    lda xpos+1
    adc #0
    sta xpos+1
  //SEG87 [46] (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_ror_1 
    lsr sprite_msb
  //SEG88 [47] (byte~) anim::$18 ← > (signed word) anim::xpos#0 -- vbuz1=_hi_vwsz2 
    lda xpos+1
    sta _18
  //SEG89 [48] if((byte~) anim::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@8 -- vbuz1_eq_0_then_la1 
    lda _18
    cmp #0
    beq b8_from_b24
    jmp b14
  //SEG90 anim::@14
  b14:
  //SEG91 [49] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte/word/signed word/dword/signed dword) 128 -- vbuz1=vbuz1_bor_vbuc1 
    lda #$80
    ora sprite_msb
    sta sprite_msb
  //SEG92 [50] phi from anim::@14 anim::@24 to anim::@8 [phi:anim::@14/anim::@24->anim::@8]
  b8_from_b14:
  b8_from_b24:
  //SEG93 [50] phi (byte) anim::sprite_msb#5 = (byte) anim::sprite_msb#2 [phi:anim::@14/anim::@24->anim::@8#0] -- register_copy 
    jmp b8
  //SEG94 anim::@8
  b8:
  //SEG95 [51] (byte~) anim::$22 ← > (signed word) anim::yr#1 -- vbuz1=_hi_vwsz2 
    lda yr_1+1
    sta _22
  //SEG96 [52] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) 89+(byte/signed byte/word/signed word/dword/signed dword) 51 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$59+$33
    clc
    adc _22
    sta ypos
  //SEG97 [53] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1 
    lda i
    asl
    sta i2
  //SEG98 [54] (byte~) anim::$25 ← < (signed word) anim::xpos#0 -- vbuz1=_lo_vwsz2 
    lda xpos
    sta _25
  //SEG99 [55] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _25
    ldy i2
    sta SPRITES_XPOS,y
  //SEG100 [56] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda ypos
    ldy i2
    sta SPRITES_YPOS,y
  //SEG101 [57] (byte) anim::i#1 ← ++ (byte) anim::i#10 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG102 [58] if((byte) anim::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto anim::@7 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #8
    bne b7_from_b8
    jmp b15
  //SEG103 anim::@15
  b15:
  //SEG104 [59] *((const byte*) SPRITES_XMSB#0) ← (byte) anim::sprite_msb#5 -- _deref_pbuc1=vbuz1 
    lda sprite_msb
    sta SPRITES_XMSB
  //SEG105 [60] (byte) anim::angle#1 ← ++ (byte) anim::angle#10 -- vbuz1=_inc_vbuz1 
    inc angle
  //SEG106 [61] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #LIGHT_BLUE
    sta BORDERCOL
  //SEG107 [11] phi from anim::@15 to anim::@1 [phi:anim::@15->anim::@1]
  b1_from_b15:
  //SEG108 [11] phi (byte) anim::angle#10 = (byte) anim::angle#1 [phi:anim::@15->anim::@1#0] -- register_copy 
    jmp b1
}
//SEG109 mulf8s_prepared
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8s_prepare(byte a)
// mulf8s_prepared(signed byte zeropage(5) b)
mulf8s_prepared: {
    .label memA = $fd
    .label _5 = $41
    .label _11 = $43
    .label _15 = $42
    .label _16 = $44
    .label m = 6
    .label b = 5
    .label return = $1a
    .label return_3 = $20
    .label return_4 = $26
    .label return_10 = $2e
  //SEG110 [63] call mulf8u_prepared 
    jsr mulf8u_prepared
  //SEG111 [64] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 
    lda mulf8u_prepared.return
    sta mulf8u_prepared.return_2
    lda mulf8u_prepared.return+1
    sta mulf8u_prepared.return_2+1
    jmp b6
  //SEG112 mulf8s_prepared::@6
  b6:
  //SEG113 [65] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 
    lda mulf8u_prepared.return_2
    sta m
    lda mulf8u_prepared.return_2+1
    sta m+1
  //SEG114 [66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 
    lda memA
    cmp #0
    bpl b1_from_b6
    jmp b3
  //SEG115 mulf8s_prepared::@3
  b3:
  //SEG116 [67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0 -- vbuz1=_hi_vwuz2 
    lda m+1
    sta _5
  //SEG117 [68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4 -- vbuz1=vbuz2_minus_vbuz3 
    lda _5
    sec
    sbc b
    sta _15
  //SEG118 [69] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuz2 
    lda _15
    sta m+1
  //SEG119 [70] phi from mulf8s_prepared::@3 mulf8s_prepared::@6 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@6->mulf8s_prepared::@1]
  b1_from_b3:
  b1_from_b6:
  //SEG120 [70] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@6->mulf8s_prepared::@1#0] -- register_copy 
    jmp b1
  //SEG121 mulf8s_prepared::@1
  b1:
  //SEG122 [71] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 
    lda b
    cmp #0
    bpl b2_from_b1
    jmp b4
  //SEG123 mulf8s_prepared::@4
  b4:
  //SEG124 [72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5 -- vbuz1=_hi_vwuz2 
    lda m+1
    sta _11
  //SEG125 [73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) -- vbuz1=vbuz2_minus__deref_pbuc1 
    lda _11
    sec
    sbc memA
    sta _16
  //SEG126 [74] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuz2 
    lda _16
    sta m+1
  //SEG127 [75] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2]
  b2_from_b1:
  b2_from_b4:
  //SEG128 [75] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy 
    jmp b2
  //SEG129 mulf8s_prepared::@2
  b2:
    jmp breturn
  //SEG130 mulf8s_prepared::@return
  breturn:
  //SEG131 [76] return 
    rts
}
//SEG132 mulf8u_prepared
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8u_prepare(byte a)
mulf8u_prepared: {
    .label resL = $fe
    .label memB = $ff
    .label return = $45
    .label return_2 = $3f
  //SEG133 [77] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4 -- _deref_pbuc1=vbuz1 
    lda mulf8s_prepared.b
    sta memB
  //SEG134 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  }
    ldx memB
    sec
  sm1:
    lda mulf_sqr1_lo,x
  sm2:
    sbc mulf_sqr2_lo,x
    sta resL
  sm3:
    lda mulf_sqr1_hi,x
  sm4:
    sbc mulf_sqr2_hi,x
    sta memB
  //SEG135 [79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 
    lda resL
    sta return
    lda memB
    sta return+1
    jmp breturn
  //SEG136 mulf8u_prepared::@return
  breturn:
  //SEG137 [80] return 
    rts
}
//SEG138 mulf8u_prepare
// Prepare for fast multiply with an unsigned byte to a word result
// mulf8u_prepare(byte zeropage(8) a)
mulf8u_prepare: {
    .label memA = $fd
    .label a = 8
  //SEG139 [82] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuz1 
    lda a
    sta memA
  //SEG140 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1  }
    lda memA
    sta mulf8u_prepared.sm1+1
    sta mulf8u_prepared.sm3+1
    eor #$ff
    sta mulf8u_prepared.sm2+1
    sta mulf8u_prepared.sm4+1
    jmp breturn
  //SEG141 mulf8u_prepare::@return
  breturn:
  //SEG142 [84] return 
    rts
}
//SEG143 init
init: {
    .label sprites_ptr = SCREEN+$3f8
    .label i = 9
  //SEG144 [86] call mulf_init 
  //SEG145 [94] phi from init to mulf_init [phi:init->mulf_init]
  mulf_init_from_init:
    jsr mulf_init
    jmp b3
  //SEG146 init::@3
  b3:
  //SEG147 [87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 -- _deref_pbuc1=vbuc2 
    lda #$ff
    sta SPRITES_ENABLE
  //SEG148 [88] phi from init::@3 to init::@1 [phi:init::@3->init::@1]
  b1_from_b3:
  //SEG149 [88] phi (byte) init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@3->init::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b1
  //SEG150 [88] phi from init::@1 to init::@1 [phi:init::@1->init::@1]
  b1_from_b1:
  //SEG151 [88] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@1->init::@1#0] -- register_copy 
    jmp b1
  //SEG152 init::@1
  b1:
  //SEG153 [89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy i
    lda #$ff&SPRITE/$40
    sta sprites_ptr,y
  //SEG154 [90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy i
    lda #GREEN
    sta SPRITES_COLS,y
  //SEG155 [91] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG156 [92] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #8
    bne b1_from_b1
    jmp breturn
  //SEG157 init::@return
  breturn:
  //SEG158 [93] return 
    rts
}
//SEG159 mulf_init
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
mulf_init: {
    .label _2 = $47
    .label _5 = $48
    .label _6 = $49
    .label c = $a
    .label sqr1_hi = $d
    .label sqr = $10
    .label sqr1_lo = $b
    .label x_2 = $f
    .label sqr2_hi = $15
    .label x_255 = $12
    .label sqr2_lo = $13
    .label dir = $17
  //SEG160 [95] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1]
  b1_from_mulf_init:
  //SEG161 [95] phi (byte) mulf_init::x_2#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta x_2
  //SEG162 [95] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_hi+1
    sta sqr1_hi
    lda #>mulf_sqr1_hi+1
    sta sqr1_hi+1
  //SEG163 [95] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init->mulf_init::@1#2] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_lo+1
    sta sqr1_lo
    lda #>mulf_sqr1_lo+1
    sta sqr1_lo+1
  //SEG164 [95] phi (word) mulf_init::sqr#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#3] -- vwuz1=vbuc1 
    lda #<0
    sta sqr
    lda #>0
    sta sqr+1
  //SEG165 [95] phi (byte) mulf_init::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#4] -- vbuz1=vbuc1 
    lda #0
    sta c
    jmp b1
  //SEG166 [95] phi from mulf_init::@2 to mulf_init::@1 [phi:mulf_init::@2->mulf_init::@1]
  b1_from_b2:
  //SEG167 [95] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@2->mulf_init::@1#0] -- register_copy 
  //SEG168 [95] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@2->mulf_init::@1#1] -- register_copy 
  //SEG169 [95] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@2->mulf_init::@1#2] -- register_copy 
  //SEG170 [95] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@2->mulf_init::@1#3] -- register_copy 
  //SEG171 [95] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@2->mulf_init::@1#4] -- register_copy 
    jmp b1
  //SEG172 mulf_init::@1
  b1:
  //SEG173 [96] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 
    inc c
  //SEG174 [97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_band_vbuc1 
    lda #1
    and c
    sta _2
  //SEG175 [98] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2 -- vbuz1_neq_0_then_la1 
    lda _2
    cmp #0
    bne b2_from_b1
    jmp b5
  //SEG176 mulf_init::@5
  b5:
  //SEG177 [99] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 
    inc x_2
  //SEG178 [100] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 
    inc sqr
    bne !+
    inc sqr+1
  !:
  //SEG179 [101] phi from mulf_init::@1 mulf_init::@5 to mulf_init::@2 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2]
  b2_from_b1:
  b2_from_b5:
  //SEG180 [101] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2#0] -- register_copy 
  //SEG181 [101] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2#1] -- register_copy 
    jmp b2
  //SEG182 mulf_init::@2
  b2:
  //SEG183 [102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 
    lda sqr
    sta _5
  //SEG184 [103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 
    lda _5
    ldy #0
    sta (sqr1_lo),y
  //SEG185 [104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 
    lda sqr+1
    sta _6
  //SEG186 [105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6 -- _deref_pbuz1=vbuz2 
    lda _6
    ldy #0
    sta (sqr1_hi),y
  //SEG187 [106] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 
    inc sqr1_hi
    bne !+
    inc sqr1_hi+1
  !:
  //SEG188 [107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 
    lda x_2
    clc
    adc sqr
    sta sqr
    lda #0
    adc sqr+1
    sta sqr+1
  //SEG189 [108] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 
    inc sqr1_lo
    bne !+
    inc sqr1_lo+1
  !:
  //SEG190 [109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sqr1_lo+1
    cmp #>mulf_sqr1_lo+$200
    bne b1_from_b2
    lda sqr1_lo
    cmp #<mulf_sqr1_lo+$200
    bne b1_from_b2
  //SEG191 [110] phi from mulf_init::@2 to mulf_init::@3 [phi:mulf_init::@2->mulf_init::@3]
  b3_from_b2:
  //SEG192 [110] phi (byte) mulf_init::dir#2 = (byte/word/signed word/dword/signed dword) 255 [phi:mulf_init::@2->mulf_init::@3#0] -- vbuz1=vbuc1 
    lda #$ff
    sta dir
  //SEG193 [110] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[512]) mulf_sqr2_hi#0 [phi:mulf_init::@2->mulf_init::@3#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_hi
    sta sqr2_hi
    lda #>mulf_sqr2_hi
    sta sqr2_hi+1
  //SEG194 [110] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[512]) mulf_sqr2_lo#0 [phi:mulf_init::@2->mulf_init::@3#2] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_lo
    sta sqr2_lo
    lda #>mulf_sqr2_lo
    sta sqr2_lo+1
  //SEG195 [110] phi (byte) mulf_init::x_255#2 = ((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init::@2->mulf_init::@3#3] -- vbuz1=vbuc1 
    lda #-1
    sta x_255
    jmp b3
  //SEG196 [110] phi from mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@4->mulf_init::@3]
  b3_from_b4:
  //SEG197 [110] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#3 [phi:mulf_init::@4->mulf_init::@3#0] -- register_copy 
  //SEG198 [110] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@4->mulf_init::@3#1] -- register_copy 
  //SEG199 [110] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@4->mulf_init::@3#2] -- register_copy 
  //SEG200 [110] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@4->mulf_init::@3#3] -- register_copy 
    jmp b3
  //SEG201 mulf_init::@3
  b3:
  //SEG202 [111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy x_255
    lda mulf_sqr1_lo,y
    ldy #0
    sta (sqr2_lo),y
  //SEG203 [112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 
    ldy x_255
    lda mulf_sqr1_hi,y
    ldy #0
    sta (sqr2_hi),y
  //SEG204 [113] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 
    inc sqr2_hi
    bne !+
    inc sqr2_hi+1
  !:
  //SEG205 [114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 
    lda x_255
    clc
    adc dir
    sta x_255
  //SEG206 [115] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12 -- vbuz1_neq_0_then_la1 
    lda x_255
    cmp #0
    bne b12_from_b3
  //SEG207 [116] phi from mulf_init::@3 to mulf_init::@4 [phi:mulf_init::@3->mulf_init::@4]
  b4_from_b3:
  //SEG208 [116] phi (byte) mulf_init::dir#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init::@3->mulf_init::@4#0] -- vbuz1=vbuc1 
    lda #1
    sta dir
    jmp b4
  //SEG209 mulf_init::@4
  b4:
  //SEG210 [117] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 
    inc sqr2_lo
    bne !+
    inc sqr2_lo+1
  !:
  //SEG211 [118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3 -- pbuz1_neq_pbuc1_then_la1 
    lda sqr2_lo+1
    cmp #>mulf_sqr2_lo+$1ff
    bne b3_from_b4
    lda sqr2_lo
    cmp #<mulf_sqr2_lo+$1ff
    bne b3_from_b4
    jmp b8
  //SEG212 mulf_init::@8
  b8:
  //SEG213 [119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256) -- _deref_pbuc1=_deref_pbuc2 
    // Set the very last value g(511) = f(256)
    lda mulf_sqr1_lo+$100
    sta mulf_sqr2_lo+$1ff
  //SEG214 [120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256) -- _deref_pbuc1=_deref_pbuc2 
    lda mulf_sqr1_hi+$100
    sta mulf_sqr2_hi+$1ff
    jmp breturn
  //SEG215 mulf_init::@return
  breturn:
  //SEG216 [121] return 
    rts
  //SEG217 [122] phi from mulf_init::@3 to mulf_init::@12 [phi:mulf_init::@3->mulf_init::@12]
  b12_from_b3:
    jmp b12
  //SEG218 mulf_init::@12
  b12:
  //SEG219 [116] phi from mulf_init::@12 to mulf_init::@4 [phi:mulf_init::@12->mulf_init::@4]
  b4_from_b12:
  //SEG220 [116] phi (byte) mulf_init::dir#3 = (byte) mulf_init::dir#2 [phi:mulf_init::@12->mulf_init::@4#0] -- register_copy 
    jmp b4
}
  // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
  // <f(x) = <(( x * x )/4)
  .align $100
  mulf_sqr1_lo: .fill $200, 0
  // >f(x) = >(( x * x )/4)
  .align $100
  mulf_sqr1_hi: .fill $200, 0
  // <g(x) =  <((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_lo: .fill $200, 0
  // >g(x) = >((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_hi: .fill $200, 0
  // Positions to rotate
  xs: .byte -$46, -$46, -$46, 0, 0, $46, $46, $46
  ys: .byte -$46, 0, $46, -$46, $46, -$46, 0, $46
.pc = COS "COS"
  {
    .var min = -$7fff
    .var max = $7fff
    .var ampl = max-min;
    .for(var i=0;i<$140;i++) {
        .var rad = i*2*PI/256;
        .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
    }
    }

.pc = SPRITE "SPRITE"
  .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
    .for (var y=0; y<21; y++)
        .for (var x=0;x<3; x++)
            .byte pic.getSinglecolorByte(x,y)


REGISTER UPLIFT POTENTIAL REGISTERS
Equivalence Class zp ZP_BYTE:59 [ anim::$22 ] has ALU potential.
Statement [12] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto anim::@4 [ anim::angle#10 ] ( main:3::anim:8 [ anim::angle#10 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ]
Statement [17] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte*) COS#0 + (byte) anim::angle#10) [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8u_prepare::a#3 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8u_prepare::a#3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ anim::x#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ anim::y#0 ]
Statement [21] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::return#2 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::return#2 ] ) always clobbers reg byte a 
Statement [22] (signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#2 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::$4 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::$4 ] ) always clobbers reg byte a 
Statement [23] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 ] ) always clobbers reg byte a 
Statement [26] (signed word) mulf8s_prepared::return#3 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::return#3 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::return#3 ] ) always clobbers reg byte a 
Statement [27] (signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#3 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::$6 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::$6 ] ) always clobbers reg byte a 
Statement [28] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 ] ) always clobbers reg byte a 
Statement [29] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#10) [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 mulf8u_prepare::a#4 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 mulf8u_prepare::a#4 ] ) always clobbers reg byte a 
Statement [33] (signed word) mulf8s_prepared::return#4 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::return#4 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::return#4 ] ) always clobbers reg byte a 
Statement [34] (signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$9 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$9 ] ) always clobbers reg byte a 
Statement [35] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$10 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$10 ] ) always clobbers reg byte a 
Statement [36] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::yr#0 anim::xr#1 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::yr#0 anim::xr#1 ] ) always clobbers reg byte a 
Statement [39] (signed word) mulf8s_prepared::return#10 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::return#10 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::return#10 ] ) always clobbers reg byte a 
Statement [40] (signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$11 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$11 ] ) always clobbers reg byte a 
Statement [41] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$12 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$12 ] ) always clobbers reg byte a 
Statement [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::xr#1 anim::yr#1 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::xr#1 anim::yr#1 ] ) always clobbers reg byte a 
Statement [43] (byte~) anim::$13 ← > (signed word) anim::xr#1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::$13 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::$13 ] ) always clobbers reg byte a 
Statement [45] (signed word) anim::xpos#0 ← (signed byte~) anim::$15 + (byte/signed byte/word/signed word/dword/signed dword) 24+(byte/word/signed word/dword/signed dword) 149 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::xpos#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::xpos#0 ] ) always clobbers reg byte a 
Statement [47] (byte~) anim::$18 ← > (signed word) anim::xpos#0 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#1 anim::$18 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#1 anim::$18 ] ) always clobbers reg byte a 
Statement [49] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte/word/signed word/dword/signed dword) 128 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#2 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#2 ] ) always clobbers reg byte a 
Statement [52] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) 89+(byte/signed byte/word/signed word/dword/signed dword) 51 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 ] ) always clobbers reg byte a 
Statement [53] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 anim::i2#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 anim::i2#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:60 [ anim::ypos#0 ]
Statement [54] (byte~) anim::$25 ← < (signed word) anim::xpos#0 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::ypos#0 anim::i2#0 anim::$25 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::ypos#0 anim::i2#0 anim::$25 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:61 [ anim::i2#0 ]
Statement [56] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 ] ) always clobbers reg byte a 
Statement [61] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 [ anim::angle#1 ] ( main:3::anim:8 [ anim::angle#1 ] ) always clobbers reg byte a 
Statement [64] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ]
Statement [65] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ) always clobbers reg byte a 
Statement [66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ) always clobbers reg byte a 
Statement [67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] ) always clobbers reg byte a 
Statement [68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a 
Statement [72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$11 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] ) always clobbers reg byte a 
Statement [73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a 
Statement 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  } always clobbers reg byte a reg byte x 
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:24 [ anim::x#0 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:25 [ anim::y#0 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:5 [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ]
Statement [79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) [ mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] ( main:3::anim:8::mulf8s_prepared:20::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] main:3::anim:8::mulf8s_prepared:25::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] main:3::anim:8::mulf8s_prepared:32::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] main:3::anim:8::mulf8s_prepared:38::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] ) always clobbers reg byte a 
Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1  } always clobbers reg byte a 
Statement [87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:3::init:6 [ ] ) always clobbers reg byte a 
Statement [89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::i#2 ] ( main:3::init:6 [ init::i#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ init::i#2 init::i#1 ]
Statement [90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0 [ init::i#2 ] ( main:3::init:6 [ init::i#2 ] ) always clobbers reg byte a 
Statement [97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ mulf_init::c#2 mulf_init::c#1 ]
Statement [102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a 
Statement [103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ mulf_init::c#2 mulf_init::c#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Statement [104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$6 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$6 ] ) always clobbers reg byte a 
Statement [105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Statement [107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a 
Statement [109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a 
Statement [111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ]
Statement [112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Statement [114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a 
Statement [118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] ( main:3::init:6::mulf_init:86 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] ) always clobbers reg byte a 
Statement [119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256) [ ] ( main:3::init:6::mulf_init:86 [ ] ) always clobbers reg byte a 
Statement [120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256) [ ] ( main:3::init:6::mulf_init:86 [ ] ) always clobbers reg byte a 
Statement [12] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto anim::@4 [ anim::angle#10 ] ( main:3::anim:8 [ anim::angle#10 ] ) always clobbers reg byte a 
Statement [17] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte*) COS#0 + (byte) anim::angle#10) [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8u_prepare::a#3 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8u_prepare::a#3 ] ) always clobbers reg byte a 
Statement [21] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::return#2 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::return#2 ] ) always clobbers reg byte a 
Statement [22] (signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#2 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::$4 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::$4 ] ) always clobbers reg byte a 
Statement [23] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 ] ) always clobbers reg byte a 
Statement [26] (signed word) mulf8s_prepared::return#3 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::return#3 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::return#3 ] ) always clobbers reg byte a 
Statement [27] (signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#3 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::$6 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::$6 ] ) always clobbers reg byte a 
Statement [28] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 ] ) always clobbers reg byte a 
Statement [29] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#10) [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 mulf8u_prepare::a#4 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 anim::yr#0 mulf8u_prepare::a#4 ] ) always clobbers reg byte a 
Statement [33] (signed word) mulf8s_prepared::return#4 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::return#4 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::return#4 ] ) always clobbers reg byte a 
Statement [34] (signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$9 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$9 ] ) always clobbers reg byte a 
Statement [35] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$10 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 anim::$10 ] ) always clobbers reg byte a 
Statement [36] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::yr#0 anim::xr#1 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::yr#0 anim::xr#1 ] ) always clobbers reg byte a 
Statement [39] (signed word) mulf8s_prepared::return#10 ← (signed word)(word) mulf8s_prepared::m#4 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::return#10 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::return#10 ] ) always clobbers reg byte a 
Statement [40] (signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$11 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$11 ] ) always clobbers reg byte a 
Statement [41] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$12 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 anim::$12 ] ) always clobbers reg byte a 
Statement [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::xr#1 anim::yr#1 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::xr#1 anim::yr#1 ] ) always clobbers reg byte a 
Statement [43] (byte~) anim::$13 ← > (signed word) anim::xr#1 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::$13 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::$13 ] ) always clobbers reg byte a 
Statement [45] (signed word) anim::xpos#0 ← (signed byte~) anim::$15 + (byte/signed byte/word/signed word/dword/signed dword) 24+(byte/word/signed word/dword/signed dword) 149 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::xpos#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#1 anim::xpos#0 ] ) always clobbers reg byte a 
Statement [47] (byte~) anim::$18 ← > (signed word) anim::xpos#0 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#1 anim::$18 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#1 anim::$18 ] ) always clobbers reg byte a 
Statement [49] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte/word/signed word/dword/signed dword) 128 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#2 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::yr#1 anim::xpos#0 anim::sprite_msb#2 ] ) always clobbers reg byte a 
Statement [52] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) 89+(byte/signed byte/word/signed word/dword/signed dword) 51 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 ] ) always clobbers reg byte a 
Statement [53] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 anim::i2#0 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::xpos#0 anim::ypos#0 anim::i2#0 ] ) always clobbers reg byte a 
Statement [54] (byte~) anim::$25 ← < (signed word) anim::xpos#0 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::ypos#0 anim::i2#0 anim::$25 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 anim::ypos#0 anim::i2#0 anim::$25 ] ) always clobbers reg byte a 
Statement [56] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 ] ( main:3::anim:8 [ anim::angle#10 anim::i#10 anim::sprite_msb#5 ] ) always clobbers reg byte a 
Statement [61] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 [ anim::angle#1 ] ( main:3::anim:8 [ anim::angle#1 ] ) always clobbers reg byte a 
Statement [64] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8u_prepared::return#2 ] ) always clobbers reg byte a 
Statement [65] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ) always clobbers reg byte a 
Statement [66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 ] ) always clobbers reg byte a 
Statement [67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$5 ] ) always clobbers reg byte a 
Statement [68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4 [ mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a 
Statement [72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$11 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::m#5 mulf8s_prepared::$11 ] ) always clobbers reg byte a 
Statement [73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:3::anim:8::mulf8s_prepared:20 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::anim:8::mulf8s_prepared:25 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::anim:8::mulf8s_prepared:32 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] main:3::anim:8::mulf8s_prepared:38 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a 
Statement 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  } always clobbers reg byte a reg byte x 
Statement [79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) [ mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] ( main:3::anim:8::mulf8s_prepared:20::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] main:3::anim:8::mulf8s_prepared:25::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] main:3::anim:8::mulf8s_prepared:32::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] main:3::anim:8::mulf8s_prepared:38::mulf8u_prepared:63 [ anim::angle#10 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] ) always clobbers reg byte a 
Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1  } always clobbers reg byte a 
Statement [87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:3::init:6 [ ] ) always clobbers reg byte a 
Statement [89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::i#2 ] ( main:3::init:6 [ init::i#2 ] ) always clobbers reg byte a 
Statement [90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0 [ init::i#2 ] ( main:3::init:6 [ init::i#2 ] ) always clobbers reg byte a 
Statement [97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$2 ] ) always clobbers reg byte a 
Statement [102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a 
Statement [103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Statement [104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$6 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$6 ] ) always clobbers reg byte a 
Statement [105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y 
Statement [107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a 
Statement [109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a 
Statement [111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Statement [112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:3::init:6::mulf_init:86 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y 
Statement [114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:3::init:6::mulf_init:86 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a 
Statement [118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] ( main:3::init:6::mulf_init:86 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] ) always clobbers reg byte a 
Statement [119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256) [ ] ( main:3::init:6::mulf_init:86 [ ] ) always clobbers reg byte a 
Statement [120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256) [ ] ( main:3::init:6::mulf_init:86 [ ] ) always clobbers reg byte a 
Potential registers zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ] : zp ZP_BYTE:2 , reg byte y , 
Potential registers zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ] : zp ZP_BYTE:3 , reg byte y , 
Potential registers zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ] : zp ZP_BYTE:4 , reg byte y , 
Potential registers zp ZP_BYTE:5 [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ] : zp ZP_BYTE:5 , reg byte y , 
Potential registers zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp ZP_WORD:6 , 
Potential registers zp ZP_BYTE:8 [ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:9 [ init::i#2 init::i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:10 [ mulf_init::c#2 mulf_init::c#1 ] : zp ZP_BYTE:10 , reg byte x , 
Potential registers zp ZP_WORD:11 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp ZP_WORD:11 , 
Potential registers zp ZP_WORD:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp ZP_WORD:13 , 
Potential registers zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp ZP_BYTE:15 , reg byte x , 
Potential registers zp ZP_WORD:16 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp ZP_WORD:16 , 
Potential registers zp ZP_BYTE:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp ZP_BYTE:18 , reg byte x , 
Potential registers zp ZP_WORD:19 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp ZP_WORD:19 , 
Potential registers zp ZP_WORD:21 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp ZP_WORD:21 , 
Potential registers zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ] : zp ZP_BYTE:23 , reg byte x , 
Potential registers zp ZP_BYTE:24 [ anim::x#0 ] : zp ZP_BYTE:24 , reg byte y , 
Potential registers zp ZP_BYTE:25 [ anim::y#0 ] : zp ZP_BYTE:25 , reg byte y , 
Potential registers zp ZP_WORD:26 [ mulf8s_prepared::return#2 ] : zp ZP_WORD:26 , 
Potential registers zp ZP_WORD:28 [ anim::$4 ] : zp ZP_WORD:28 , 
Potential registers zp ZP_WORD:30 [ anim::xr#0 ] : zp ZP_WORD:30 , 
Potential registers zp ZP_WORD:32 [ mulf8s_prepared::return#3 ] : zp ZP_WORD:32 , 
Potential registers zp ZP_WORD:34 [ anim::$6 ] : zp ZP_WORD:34 , 
Potential registers zp ZP_WORD:36 [ anim::yr#0 ] : zp ZP_WORD:36 , 
Potential registers zp ZP_WORD:38 [ mulf8s_prepared::return#4 ] : zp ZP_WORD:38 , 
Potential registers zp ZP_WORD:40 [ anim::$9 ] : zp ZP_WORD:40 , 
Potential registers zp ZP_WORD:42 [ anim::$10 ] : zp ZP_WORD:42 , 
Potential registers zp ZP_WORD:44 [ anim::xr#1 ] : zp ZP_WORD:44 , 
Potential registers zp ZP_WORD:46 [ mulf8s_prepared::return#10 ] : zp ZP_WORD:46 , 
Potential registers zp ZP_WORD:48 [ anim::$11 ] : zp ZP_WORD:48 , 
Potential registers zp ZP_WORD:50 [ anim::$12 ] : zp ZP_WORD:50 , 
Potential registers zp ZP_WORD:52 [ anim::yr#1 ] : zp ZP_WORD:52 , 
Potential registers zp ZP_BYTE:54 [ anim::$13 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:55 [ anim::$15 ] : zp ZP_BYTE:55 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:56 [ anim::xpos#0 ] : zp ZP_WORD:56 , 
Potential registers zp ZP_BYTE:58 [ anim::$18 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:59 [ anim::$22 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y , reg byte alu , 
Potential registers zp ZP_BYTE:60 [ anim::ypos#0 ] : zp ZP_BYTE:60 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:61 [ anim::i2#0 ] : zp ZP_BYTE:61 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:62 [ anim::$25 ] : zp ZP_BYTE:62 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:63 [ mulf8u_prepared::return#2 ] : zp ZP_WORD:63 , 
Potential registers zp ZP_BYTE:65 [ mulf8s_prepared::$5 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:66 [ mulf8s_prepared::$15 ] : zp ZP_BYTE:66 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:67 [ mulf8s_prepared::$11 ] : zp ZP_BYTE:67 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:68 [ mulf8s_prepared::$16 ] : zp ZP_BYTE:68 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:69 [ mulf8u_prepared::return#0 ] : zp ZP_WORD:69 , 
Potential registers zp ZP_BYTE:71 [ mulf_init::$2 ] : zp ZP_BYTE:71 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:72 [ mulf_init::$5 ] : zp ZP_BYTE:72 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:73 [ mulf_init::$6 ] : zp ZP_BYTE:73 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [anim] 344.2: zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ] 202: zp ZP_WORD:28 [ anim::$4 ] 202: zp ZP_WORD:34 [ anim::$6 ] 202: zp ZP_WORD:40 [ anim::$9 ] 202: zp ZP_WORD:42 [ anim::$10 ] 202: zp ZP_WORD:48 [ anim::$11 ] 202: zp ZP_WORD:50 [ anim::$12 ] 202: zp ZP_BYTE:55 [ anim::$15 ] 202: zp ZP_BYTE:58 [ anim::$18 ] 202: zp ZP_BYTE:59 [ anim::$22 ] 202: zp ZP_BYTE:62 [ anim::$25 ] 163.24: zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ] 101: zp ZP_BYTE:54 [ anim::$13 ] 101: zp ZP_BYTE:61 [ anim::i2#0 ] 50.5: zp ZP_BYTE:60 [ anim::ypos#0 ] 33.67: zp ZP_WORD:56 [ anim::xpos#0 ] 28.86: zp ZP_WORD:44 [ anim::xr#1 ] 22.44: zp ZP_WORD:52 [ anim::yr#1 ] 20.2: zp ZP_BYTE:25 [ anim::y#0 ] 15.54: zp ZP_WORD:30 [ anim::xr#0 ] 14.43: zp ZP_WORD:36 [ anim::yr#0 ] 13.77: zp ZP_BYTE:24 [ anim::x#0 ] 11.45: zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ] 
Uplift Scope [mulf8s_prepared] 839.23: zp ZP_BYTE:5 [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ] 202: zp ZP_WORD:26 [ mulf8s_prepared::return#2 ] 202: zp ZP_WORD:32 [ mulf8s_prepared::return#3 ] 202: zp ZP_WORD:38 [ mulf8s_prepared::return#4 ] 202: zp ZP_WORD:46 [ mulf8s_prepared::return#10 ] 13.17: zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 4: zp ZP_BYTE:65 [ mulf8s_prepared::$5 ] 4: zp ZP_BYTE:66 [ mulf8s_prepared::$15 ] 4: zp ZP_BYTE:67 [ mulf8s_prepared::$11 ] 4: zp ZP_BYTE:68 [ mulf8s_prepared::$16 ] 
Uplift Scope [mulf8u_prepare] 608: zp ZP_BYTE:8 [ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ] 
Uplift Scope [mulf_init] 45.1: zp ZP_WORD:16 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 24.36: zp ZP_BYTE:10 [ mulf_init::c#2 mulf_init::c#1 ] 24.14: zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp ZP_BYTE:71 [ mulf_init::$2 ] 22: zp ZP_BYTE:72 [ mulf_init::$5 ] 22: zp ZP_BYTE:73 [ mulf_init::$6 ] 20.62: zp ZP_WORD:19 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 19.04: zp ZP_WORD:11 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 16.5: zp ZP_BYTE:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 14.14: zp ZP_WORD:21 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 12.05: zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ] 8.5: zp ZP_WORD:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] 
Uplift Scope [init] 31.17: zp ZP_BYTE:9 [ init::i#2 init::i#1 ] 
Uplift Scope [mulf8u_prepared] 4: zp ZP_WORD:63 [ mulf8u_prepared::return#2 ] 1.33: zp ZP_WORD:69 [ mulf8u_prepared::return#0 ] 
Uplift Scope [main] 
Uplift Scope [] 

Uplifting [anim] best 53519 combination zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ] zp ZP_WORD:28 [ anim::$4 ] zp ZP_WORD:34 [ anim::$6 ] zp ZP_WORD:40 [ anim::$9 ] zp ZP_WORD:42 [ anim::$10 ] zp ZP_WORD:48 [ anim::$11 ] zp ZP_WORD:50 [ anim::$12 ] reg byte a [ anim::$15 ] reg byte a [ anim::$18 ] reg byte a [ anim::$22 ] zp ZP_BYTE:62 [ anim::$25 ] zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ] zp ZP_BYTE:54 [ anim::$13 ] zp ZP_BYTE:61 [ anim::i2#0 ] zp ZP_BYTE:60 [ anim::ypos#0 ] zp ZP_WORD:56 [ anim::xpos#0 ] zp ZP_WORD:44 [ anim::xr#1 ] zp ZP_WORD:52 [ anim::yr#1 ] zp ZP_BYTE:25 [ anim::y#0 ] zp ZP_WORD:30 [ anim::xr#0 ] zp ZP_WORD:36 [ anim::yr#0 ] zp ZP_BYTE:24 [ anim::x#0 ] zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ] 
Limited combination testing to 100 combinations of 368640 possible.
Uplifting [mulf8s_prepared] best 52298 combination reg byte y [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ] zp ZP_WORD:26 [ mulf8s_prepared::return#2 ] zp ZP_WORD:32 [ mulf8s_prepared::return#3 ] zp ZP_WORD:38 [ mulf8s_prepared::return#4 ] zp ZP_WORD:46 [ mulf8s_prepared::return#10 ] zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$5 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$11 ] zp ZP_BYTE:68 [ mulf8s_prepared::$16 ] 
Limited combination testing to 100 combinations of 512 possible.
Uplifting [mulf8u_prepare] best 51695 combination reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ] 
Uplifting [mulf_init] best 51445 combination zp ZP_WORD:16 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] reg byte x [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$2 ] reg byte a [ mulf_init::$5 ] reg byte a [ mulf_init::$6 ] zp ZP_WORD:19 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:11 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] zp ZP_BYTE:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_WORD:21 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ] zp ZP_WORD:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] 
Limited combination testing to 100 combinations of 1024 possible.
Uplifting [init] best 51295 combination reg byte x [ init::i#2 init::i#1 ] 
Uplifting [mulf8u_prepared] best 51295 combination zp ZP_WORD:63 [ mulf8u_prepared::return#2 ] zp ZP_WORD:69 [ mulf8u_prepared::return#0 ] 
Uplifting [main] best 51295 combination 
Uplifting [] best 51295 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ]
Uplifting [anim] best 51295 combination zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:62 [ anim::$25 ]
Uplifting [anim] best 50695 combination reg byte a [ anim::$25 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ anim::i#10 anim::i#1 ]
Uplifting [anim] best 50695 combination zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:54 [ anim::$13 ]
Uplifting [anim] best 50095 combination reg byte a [ anim::$13 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:61 [ anim::i2#0 ]
Uplifting [anim] best 49395 combination reg byte x [ anim::i2#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:60 [ anim::ypos#0 ]
Uplifting [anim] best 49195 combination reg byte y [ anim::ypos#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
Uplifting [mulf_init] best 49195 combination zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ anim::y#0 ]
Uplifting [anim] best 49195 combination zp ZP_BYTE:25 [ anim::y#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ mulf_init::x_255#2 mulf_init::x_255#1 ]
Uplifting [mulf_init] best 49055 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ anim::x#0 ]
Uplifting [anim] best 49055 combination zp ZP_BYTE:24 [ anim::x#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ]
Uplifting [mulf_init] best 49055 combination zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ]
Uplifting [anim] best 49055 combination zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:68 [ mulf8s_prepared::$16 ]
Uplifting [mulf8s_prepared] best 49049 combination reg byte a [ mulf8s_prepared::$16 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp ZP_WORD:26 [ mulf8s_prepared::return#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 ] ] with [ zp ZP_WORD:32 [ mulf8s_prepared::return#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 ] ] with [ zp ZP_WORD:38 [ mulf8s_prepared::return#4 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 ] ] with [ zp ZP_WORD:46 [ mulf8s_prepared::return#10 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 ] ] with [ zp ZP_WORD:63 [ mulf8u_prepared::return#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:28 [ anim::$4 ] ] with [ zp ZP_WORD:30 [ anim::xr#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:34 [ anim::$6 ] ] with [ zp ZP_WORD:36 [ anim::yr#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:40 [ anim::$9 ] ] with [ zp ZP_WORD:42 [ anim::$10 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:48 [ anim::$11 ] ] with [ zp ZP_WORD:50 [ anim::$12 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 ] ] with [ zp ZP_WORD:40 [ anim::$9 anim::$10 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 anim::$9 anim::$10 ] ] with [ zp ZP_WORD:48 [ anim::$11 anim::$12 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 anim::$9 anim::$10 anim::$11 anim::$12 ] ] with [ zp ZP_WORD:69 [ mulf8u_prepared::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:28 [ anim::$4 anim::xr#0 ] ] with [ zp ZP_WORD:44 [ anim::xr#1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:34 [ anim::$6 anim::yr#0 ] ] with [ zp ZP_WORD:52 [ anim::yr#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 ] ] with [ zp ZP_BYTE:15 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] ] with [ zp ZP_BYTE:23 [ mulf_init::dir#2 mulf_init::dir#3 ] ]
Coalescing zero page register [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 anim::$9 anim::$10 anim::$11 anim::$12 mulf8u_prepared::return#0 ] ] with [ zp ZP_WORD:11 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ]
Coalescing zero page register [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 anim::$9 anim::$10 anim::$11 anim::$12 mulf8u_prepared::return#0 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp ZP_WORD:19 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ]
Coalescing zero page register [ zp ZP_WORD:6 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 anim::$9 anim::$10 anim::$11 anim::$12 mulf8u_prepared::return#0 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp ZP_WORD:56 [ anim::xpos#0 ] ]
Coalescing zero page register [ zp ZP_WORD:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp ZP_WORD:21 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ]
Coalescing zero page register [ zp ZP_WORD:13 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp ZP_WORD:28 [ anim::$4 anim::xr#0 anim::xr#1 ] ]
Coalescing zero page register [ zp ZP_WORD:16 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp ZP_WORD:34 [ anim::$6 anim::yr#0 anim::yr#1 ] ]
Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 anim::$9 anim::$10 anim::$11 anim::$12 mulf8u_prepared::return#0 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 anim::xpos#0 ]
Allocated (was zp ZP_WORD:13) zp ZP_WORD:7 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 anim::$4 anim::xr#0 anim::xr#1 ]
Allocated (was zp ZP_WORD:16) zp ZP_WORD:9 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 anim::$6 anim::yr#0 anim::yr#1 ]
Allocated (was zp ZP_BYTE:24) zp ZP_BYTE:11 [ anim::x#0 ]
Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:12 [ anim::y#0 ]

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
// 2D rotattion of 8 sprites 
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label SPRITES_XPOS = $d000
  .label SPRITES_YPOS = $d001
  .label SPRITES_XMSB = $d010
  .label RASTER = $d012
  .label SPRITES_ENABLE = $d015
  .label BORDERCOL = $d020
  .label SPRITES_COLS = $d027
  .const GREEN = 5
  .const LIGHT_BLUE = $e
  .label SCREEN = $400
  // Sine and Cosine tables  
  // Angles: $00=0, $80=PI,$100=2*PI
  // Sine/Cosine: signed fixed [-$7f,$7f]
  .label COS = $2000
  // A single sprite
  .label SPRITE = $3000
  .label SIN = COS+$40
//SEG3 @begin
bbegin:
  jmp b13
//SEG4 @13
b13:
//SEG5 kickasm(location (const byte*) COS#0) {{ {     .var min = -$7fff     .var max = $7fff     .var ampl = max-min;     .for(var i=0;i<$140;i++) {         .var rad = i*2*PI/256;         .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))     }     }  }}
  // sin(x) = cos(x+PI/2)
  jmp b16
//SEG6 @16
b16:
//SEG7 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))     .for (var y=0; y<21; y++)         .for (var x=0;x<3; x++)             .byte pic.getSinglecolorByte(x,y)  }}
//SEG8 [3] call main 
  jsr main
//SEG9 [4] phi from @16 to @end [phi:@16->@end]
bend_from_b16:
  jmp bend
//SEG10 @end
bend:
//SEG11 main
main: {
  //SEG12 asm { sei  }
    sei
  //SEG13 [6] call init 
  //SEG14 [85] phi from main to init [phi:main->init]
  init_from_main:
    jsr init
  //SEG15 [7] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    jmp b1
  //SEG16 main::@1
  b1:
  //SEG17 [8] call anim 
  //SEG18 [10] phi from main::@1 to anim [phi:main::@1->anim]
  anim_from_b1:
    jsr anim
    jmp breturn
  //SEG19 main::@return
  breturn:
  //SEG20 [9] return 
    rts
}
//SEG21 anim
anim: {
    .label _4 = 7
    .label _6 = 9
    .label _9 = 5
    .label _10 = 5
    .label _11 = 5
    .label _12 = 5
    .label x = $b
    .label y = $c
    .label xr = 7
    .label yr = 9
    .label xpos = 5
    .label sprite_msb = 4
    .label i = 3
    .label angle = 2
  //SEG22 [11] phi from anim to anim::@1 [phi:anim->anim::@1]
  b1_from_anim:
  //SEG23 [11] phi (byte) anim::angle#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim->anim::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta angle
    jmp b1
  //SEG24 anim::@1
  b1:
    jmp b4
  //SEG25 anim::@4
  b4:
  //SEG26 [12] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto anim::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b4
    jmp b6
  //SEG27 anim::@6
  b6:
  //SEG28 [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
  //SEG29 [14] phi from anim::@6 to anim::@7 [phi:anim::@6->anim::@7]
  b7_from_b6:
  //SEG30 [14] phi (byte) anim::sprite_msb#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@6->anim::@7#0] -- vbuz1=vbuc1 
    lda #0
    sta sprite_msb
  //SEG31 [14] phi (byte) anim::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@6->anim::@7#1] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b7
  //SEG32 [14] phi from anim::@8 to anim::@7 [phi:anim::@8->anim::@7]
  b7_from_b8:
  //SEG33 [14] phi (byte) anim::sprite_msb#10 = (byte) anim::sprite_msb#5 [phi:anim::@8->anim::@7#0] -- register_copy 
  //SEG34 [14] phi (byte) anim::i#10 = (byte) anim::i#1 [phi:anim::@8->anim::@7#1] -- register_copy 
    jmp b7
  //SEG35 anim::@7
  b7:
  //SEG36 [15] (signed byte) anim::x#0 ← *((const signed byte[8]) xs#0 + (byte) anim::i#10) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy i
    lda xs,y
    sta x
  //SEG37 [16] (signed byte) anim::y#0 ← *((const signed byte[8]) ys#0 + (byte) anim::i#10) -- vbsz1=pbsc1_derefidx_vbuz2 
    // signed fixed[7.0]
    ldy i
    lda ys,y
    sta y
    jmp mulf8s_prepare1
  //SEG38 anim::mulf8s_prepare1
  mulf8s_prepare1:
  //SEG39 [17] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte*) COS#0 + (byte) anim::angle#10) -- vbuaa=pbsc1_derefidx_vbuz1 
    ldy angle
    lda COS,y
  //SEG40 [18] call mulf8u_prepare 
  //SEG41 [81] phi from anim::mulf8s_prepare1 to mulf8u_prepare [phi:anim::mulf8s_prepare1->mulf8u_prepare]
  mulf8u_prepare_from_mulf8s_prepare1:
  //SEG42 [81] phi (byte) mulf8u_prepare::a#2 = (byte~) mulf8u_prepare::a#3 [phi:anim::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy 
    jsr mulf8u_prepare
    jmp b17
  //SEG43 anim::@17
  b17:
  //SEG44 [19] (signed byte) mulf8s_prepared::b#0 ← (signed byte) anim::x#0 -- vbsyy=vbsz1 
    ldy x
  //SEG45 [20] call mulf8s_prepared 
  //SEG46 [62] phi from anim::@17 to mulf8s_prepared [phi:anim::@17->mulf8s_prepared]
  mulf8s_prepared_from_b17:
  //SEG47 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#0 [phi:anim::@17->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG48 [21] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4
    jmp b20
  //SEG49 anim::@20
  b20:
  //SEG50 [22] (signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#2 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return
    sta _4
    lda mulf8s_prepared.return+1
    sta _4+1
  //SEG51 [23] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl xr
    rol xr+1
  //SEG52 [24] (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#0 -- vbsyy=vbsz1 
    ldy y
  //SEG53 [25] call mulf8s_prepared 
  //SEG54 [62] phi from anim::@20 to mulf8s_prepared [phi:anim::@20->mulf8s_prepared]
  mulf8s_prepared_from_b20:
  //SEG55 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#1 [phi:anim::@20->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG56 [26] (signed word) mulf8s_prepared::return#3 ← (signed word)(word) mulf8s_prepared::m#4
    jmp b21
  //SEG57 anim::@21
  b21:
  //SEG58 [27] (signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#3 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return
    sta _6
    lda mulf8s_prepared.return+1
    sta _6+1
  //SEG59 [28] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl yr
    rol yr+1
    jmp mulf8s_prepare2
  //SEG60 anim::mulf8s_prepare2
  mulf8s_prepare2:
  //SEG61 [29] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#10) -- vbuaa=pbsc1_derefidx_vbuz1 
    ldy angle
    lda SIN,y
  //SEG62 [30] call mulf8u_prepare 
  //SEG63 [81] phi from anim::mulf8s_prepare2 to mulf8u_prepare [phi:anim::mulf8s_prepare2->mulf8u_prepare]
  mulf8u_prepare_from_mulf8s_prepare2:
  //SEG64 [81] phi (byte) mulf8u_prepare::a#2 = (byte~) mulf8u_prepare::a#4 [phi:anim::mulf8s_prepare2->mulf8u_prepare#0] -- register_copy 
    jsr mulf8u_prepare
    jmp b18
  //SEG65 anim::@18
  b18:
  //SEG66 [31] (signed byte) mulf8s_prepared::b#2 ← (signed byte) anim::y#0 -- vbsyy=vbsz1 
    ldy y
  //SEG67 [32] call mulf8s_prepared 
  //SEG68 [62] phi from anim::@18 to mulf8s_prepared [phi:anim::@18->mulf8s_prepared]
  mulf8s_prepared_from_b18:
  //SEG69 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#2 [phi:anim::@18->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG70 [33] (signed word) mulf8s_prepared::return#4 ← (signed word)(word) mulf8s_prepared::m#4
    jmp b23
  //SEG71 anim::@23
  b23:
  //SEG72 [34] (signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#4
  //SEG73 [35] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl _10
    rol _10+1
  //SEG74 [36] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10 -- vwsz1=vwsz1_minus_vwsz2 
    lda xr
    sec
    sbc _10
    sta xr
    lda xr+1
    sbc _10+1
    sta xr+1
  //SEG75 [37] (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#0 -- vbsyy=vbsz1 
    ldy x
  //SEG76 [38] call mulf8s_prepared 
  //SEG77 [62] phi from anim::@23 to mulf8s_prepared [phi:anim::@23->mulf8s_prepared]
  mulf8s_prepared_from_b23:
  //SEG78 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#3 [phi:anim::@23->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG79 [39] (signed word) mulf8s_prepared::return#10 ← (signed word)(word) mulf8s_prepared::m#4
    jmp b24
  //SEG80 anim::@24
  b24:
  //SEG81 [40] (signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10
  //SEG82 [41] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl _12
    rol _12+1
  //SEG83 [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 -- vwsz1=vwsz1_plus_vwsz2 
    // signed fixed[8.8] 
    lda yr
    clc
    adc _12
    sta yr
    lda yr+1
    adc _12+1
    sta yr+1
  //SEG84 [43] (byte~) anim::$13 ← > (signed word) anim::xr#1 -- vbuaa=_hi_vwsz1 
    lda xr+1
  //SEG85 [44] (signed byte~) anim::$15 ← (signed byte)(byte~) anim::$13
  //SEG86 [45] (signed word) anim::xpos#0 ← (signed byte~) anim::$15 + (byte/signed byte/word/signed word/dword/signed dword) 24+(byte/word/signed word/dword/signed dword) 149 -- vwsz1=vbsaa_plus_vbuc1 
    sta xpos
    ora #$7f
    bmi !+
    lda #0
  !:
    sta xpos+1
    lda xpos
    clc
    adc #$18+$95
    sta xpos
    lda xpos+1
    adc #0
    sta xpos+1
  //SEG87 [46] (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_ror_1 
    lsr sprite_msb
  //SEG88 [47] (byte~) anim::$18 ← > (signed word) anim::xpos#0 -- vbuaa=_hi_vwsz1 
    lda xpos+1
  //SEG89 [48] if((byte~) anim::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@8 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b8_from_b24
    jmp b14
  //SEG90 anim::@14
  b14:
  //SEG91 [49] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte/word/signed word/dword/signed dword) 128 -- vbuz1=vbuz1_bor_vbuc1 
    lda #$80
    ora sprite_msb
    sta sprite_msb
  //SEG92 [50] phi from anim::@14 anim::@24 to anim::@8 [phi:anim::@14/anim::@24->anim::@8]
  b8_from_b14:
  b8_from_b24:
  //SEG93 [50] phi (byte) anim::sprite_msb#5 = (byte) anim::sprite_msb#2 [phi:anim::@14/anim::@24->anim::@8#0] -- register_copy 
    jmp b8
  //SEG94 anim::@8
  b8:
  //SEG95 [51] (byte~) anim::$22 ← > (signed word) anim::yr#1 -- vbuaa=_hi_vwsz1 
    lda yr+1
  //SEG96 [52] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) 89+(byte/signed byte/word/signed word/dword/signed dword) 51 -- vbuyy=vbuaa_plus_vbuc1 
    clc
    adc #$59+$33
    tay
  //SEG97 [53] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_rol_1 
    lda i
    asl
    tax
  //SEG98 [54] (byte~) anim::$25 ← < (signed word) anim::xpos#0 -- vbuaa=_lo_vwsz1 
    lda xpos
  //SEG99 [55] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SPRITES_XPOS,x
  //SEG100 [56] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0 -- pbuc1_derefidx_vbuxx=vbuyy 
    tya
    sta SPRITES_YPOS,x
  //SEG101 [57] (byte) anim::i#1 ← ++ (byte) anim::i#10 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG102 [58] if((byte) anim::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto anim::@7 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #8
    bne b7_from_b8
    jmp b15
  //SEG103 anim::@15
  b15:
  //SEG104 [59] *((const byte*) SPRITES_XMSB#0) ← (byte) anim::sprite_msb#5 -- _deref_pbuc1=vbuz1 
    lda sprite_msb
    sta SPRITES_XMSB
  //SEG105 [60] (byte) anim::angle#1 ← ++ (byte) anim::angle#10 -- vbuz1=_inc_vbuz1 
    inc angle
  //SEG106 [61] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #LIGHT_BLUE
    sta BORDERCOL
  //SEG107 [11] phi from anim::@15 to anim::@1 [phi:anim::@15->anim::@1]
  b1_from_b15:
  //SEG108 [11] phi (byte) anim::angle#10 = (byte) anim::angle#1 [phi:anim::@15->anim::@1#0] -- register_copy 
    jmp b1
}
//SEG109 mulf8s_prepared
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8s_prepare(byte a)
// mulf8s_prepared(signed byte register(Y) b)
mulf8s_prepared: {
    .label memA = $fd
    .label m = 5
    .label return = 5
  //SEG110 [63] call mulf8u_prepared 
    jsr mulf8u_prepared
  //SEG111 [64] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0
    jmp b6
  //SEG112 mulf8s_prepared::@6
  b6:
  //SEG113 [65] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2
  //SEG114 [66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 
    lda memA
    cmp #0
    bpl b1_from_b6
    jmp b3
  //SEG115 mulf8s_prepared::@3
  b3:
  //SEG116 [67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 
    lda m+1
  //SEG117 [68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4 -- vbuaa=vbuaa_minus_vbuyy 
    sty $ff
    sec
    sbc $ff
  //SEG118 [69] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa 
    sta m+1
  //SEG119 [70] phi from mulf8s_prepared::@3 mulf8s_prepared::@6 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@6->mulf8s_prepared::@1]
  b1_from_b3:
  b1_from_b6:
  //SEG120 [70] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@6->mulf8s_prepared::@1#0] -- register_copy 
    jmp b1
  //SEG121 mulf8s_prepared::@1
  b1:
  //SEG122 [71] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2 -- vbsyy_ge_0_then_la1 
    cpy #0
    bpl b2_from_b1
    jmp b4
  //SEG123 mulf8s_prepared::@4
  b4:
  //SEG124 [72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 
    lda m+1
  //SEG125 [73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) -- vbuaa=vbuaa_minus__deref_pbuc1 
    sec
    sbc memA
  //SEG126 [74] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa 
    sta m+1
  //SEG127 [75] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2]
  b2_from_b1:
  b2_from_b4:
  //SEG128 [75] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy 
    jmp b2
  //SEG129 mulf8s_prepared::@2
  b2:
    jmp breturn
  //SEG130 mulf8s_prepared::@return
  breturn:
  //SEG131 [76] return 
    rts
}
//SEG132 mulf8u_prepared
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8u_prepare(byte a)
mulf8u_prepared: {
    .label resL = $fe
    .label memB = $ff
    .label return = 5
  //SEG133 [77] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4 -- _deref_pbuc1=vbuyy 
    sty memB
  //SEG134 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  }
    ldx memB
    sec
  sm1:
    lda mulf_sqr1_lo,x
  sm2:
    sbc mulf_sqr2_lo,x
    sta resL
  sm3:
    lda mulf_sqr1_hi,x
  sm4:
    sbc mulf_sqr2_hi,x
    sta memB
  //SEG135 [79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 
    lda resL
    sta return
    lda memB
    sta return+1
    jmp breturn
  //SEG136 mulf8u_prepared::@return
  breturn:
  //SEG137 [80] return 
    rts
}
//SEG138 mulf8u_prepare
// Prepare for fast multiply with an unsigned byte to a word result
// mulf8u_prepare(byte register(A) a)
mulf8u_prepare: {
    .label memA = $fd
  //SEG139 [82] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa 
    sta memA
  //SEG140 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1  }
    lda memA
    sta mulf8u_prepared.sm1+1
    sta mulf8u_prepared.sm3+1
    eor #$ff
    sta mulf8u_prepared.sm2+1
    sta mulf8u_prepared.sm4+1
    jmp breturn
  //SEG141 mulf8u_prepare::@return
  breturn:
  //SEG142 [84] return 
    rts
}
//SEG143 init
init: {
    .label sprites_ptr = SCREEN+$3f8
  //SEG144 [86] call mulf_init 
  //SEG145 [94] phi from init to mulf_init [phi:init->mulf_init]
  mulf_init_from_init:
    jsr mulf_init
    jmp b3
  //SEG146 init::@3
  b3:
  //SEG147 [87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 -- _deref_pbuc1=vbuc2 
    lda #$ff
    sta SPRITES_ENABLE
  //SEG148 [88] phi from init::@3 to init::@1 [phi:init::@3->init::@1]
  b1_from_b3:
  //SEG149 [88] phi (byte) init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@3->init::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b1
  //SEG150 [88] phi from init::@1 to init::@1 [phi:init::@1->init::@1]
  b1_from_b1:
  //SEG151 [88] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@1->init::@1#0] -- register_copy 
    jmp b1
  //SEG152 init::@1
  b1:
  //SEG153 [89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #$ff&SPRITE/$40
    sta sprites_ptr,x
  //SEG154 [90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #GREEN
    sta SPRITES_COLS,x
  //SEG155 [91] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG156 [92] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b1_from_b1
    jmp breturn
  //SEG157 init::@return
  breturn:
  //SEG158 [93] return 
    rts
}
//SEG159 mulf_init
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
mulf_init: {
    .label sqr1_hi = 7
    .label sqr = 9
    .label sqr1_lo = 5
    .label x_2 = 2
    .label sqr2_hi = 7
    .label sqr2_lo = 5
    .label dir = 2
  //SEG160 [95] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1]
  b1_from_mulf_init:
  //SEG161 [95] phi (byte) mulf_init::x_2#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta x_2
  //SEG162 [95] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_hi+1
    sta sqr1_hi
    lda #>mulf_sqr1_hi+1
    sta sqr1_hi+1
  //SEG163 [95] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init->mulf_init::@1#2] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_lo+1
    sta sqr1_lo
    lda #>mulf_sqr1_lo+1
    sta sqr1_lo+1
  //SEG164 [95] phi (word) mulf_init::sqr#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#3] -- vwuz1=vbuc1 
    lda #<0
    sta sqr
    lda #>0
    sta sqr+1
  //SEG165 [95] phi (byte) mulf_init::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#4] -- vbuxx=vbuc1 
    ldx #0
    jmp b1
  //SEG166 [95] phi from mulf_init::@2 to mulf_init::@1 [phi:mulf_init::@2->mulf_init::@1]
  b1_from_b2:
  //SEG167 [95] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@2->mulf_init::@1#0] -- register_copy 
  //SEG168 [95] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@2->mulf_init::@1#1] -- register_copy 
  //SEG169 [95] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@2->mulf_init::@1#2] -- register_copy 
  //SEG170 [95] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@2->mulf_init::@1#3] -- register_copy 
  //SEG171 [95] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@2->mulf_init::@1#4] -- register_copy 
    jmp b1
  //SEG172 mulf_init::@1
  b1:
  //SEG173 [96] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG174 [97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_band_vbuc1 
    txa
    and #1
  //SEG175 [98] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b2_from_b1
    jmp b5
  //SEG176 mulf_init::@5
  b5:
  //SEG177 [99] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 
    inc x_2
  //SEG178 [100] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 
    inc sqr
    bne !+
    inc sqr+1
  !:
  //SEG179 [101] phi from mulf_init::@1 mulf_init::@5 to mulf_init::@2 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2]
  b2_from_b1:
  b2_from_b5:
  //SEG180 [101] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2#0] -- register_copy 
  //SEG181 [101] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2#1] -- register_copy 
    jmp b2
  //SEG182 mulf_init::@2
  b2:
  //SEG183 [102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 
    lda sqr
  //SEG184 [103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (sqr1_lo),y
  //SEG185 [104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 
    lda sqr+1
  //SEG186 [105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (sqr1_hi),y
  //SEG187 [106] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 
    inc sqr1_hi
    bne !+
    inc sqr1_hi+1
  !:
  //SEG188 [107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 
    lda x_2
    clc
    adc sqr
    sta sqr
    lda #0
    adc sqr+1
    sta sqr+1
  //SEG189 [108] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 
    inc sqr1_lo
    bne !+
    inc sqr1_lo+1
  !:
  //SEG190 [109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sqr1_lo+1
    cmp #>mulf_sqr1_lo+$200
    bne b1_from_b2
    lda sqr1_lo
    cmp #<mulf_sqr1_lo+$200
    bne b1_from_b2
  //SEG191 [110] phi from mulf_init::@2 to mulf_init::@3 [phi:mulf_init::@2->mulf_init::@3]
  b3_from_b2:
  //SEG192 [110] phi (byte) mulf_init::dir#2 = (byte/word/signed word/dword/signed dword) 255 [phi:mulf_init::@2->mulf_init::@3#0] -- vbuz1=vbuc1 
    lda #$ff
    sta dir
  //SEG193 [110] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[512]) mulf_sqr2_hi#0 [phi:mulf_init::@2->mulf_init::@3#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_hi
    sta sqr2_hi
    lda #>mulf_sqr2_hi
    sta sqr2_hi+1
  //SEG194 [110] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[512]) mulf_sqr2_lo#0 [phi:mulf_init::@2->mulf_init::@3#2] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_lo
    sta sqr2_lo
    lda #>mulf_sqr2_lo
    sta sqr2_lo+1
  //SEG195 [110] phi (byte) mulf_init::x_255#2 = ((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init::@2->mulf_init::@3#3] -- vbuxx=vbuc1 
    ldx #-1
    jmp b3
  //SEG196 [110] phi from mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@4->mulf_init::@3]
  b3_from_b4:
  //SEG197 [110] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#3 [phi:mulf_init::@4->mulf_init::@3#0] -- register_copy 
  //SEG198 [110] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@4->mulf_init::@3#1] -- register_copy 
  //SEG199 [110] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@4->mulf_init::@3#2] -- register_copy 
  //SEG200 [110] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@4->mulf_init::@3#3] -- register_copy 
    jmp b3
  //SEG201 mulf_init::@3
  b3:
  //SEG202 [111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_lo,x
    ldy #0
    sta (sqr2_lo),y
  //SEG203 [112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_hi,x
    ldy #0
    sta (sqr2_hi),y
  //SEG204 [113] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 
    inc sqr2_hi
    bne !+
    inc sqr2_hi+1
  !:
  //SEG205 [114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 
    txa
    clc
    adc dir
    tax
  //SEG206 [115] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne b12_from_b3
  //SEG207 [116] phi from mulf_init::@3 to mulf_init::@4 [phi:mulf_init::@3->mulf_init::@4]
  b4_from_b3:
  //SEG208 [116] phi (byte) mulf_init::dir#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init::@3->mulf_init::@4#0] -- vbuz1=vbuc1 
    lda #1
    sta dir
    jmp b4
  //SEG209 mulf_init::@4
  b4:
  //SEG210 [117] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 
    inc sqr2_lo
    bne !+
    inc sqr2_lo+1
  !:
  //SEG211 [118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3 -- pbuz1_neq_pbuc1_then_la1 
    lda sqr2_lo+1
    cmp #>mulf_sqr2_lo+$1ff
    bne b3_from_b4
    lda sqr2_lo
    cmp #<mulf_sqr2_lo+$1ff
    bne b3_from_b4
    jmp b8
  //SEG212 mulf_init::@8
  b8:
  //SEG213 [119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256) -- _deref_pbuc1=_deref_pbuc2 
    // Set the very last value g(511) = f(256)
    lda mulf_sqr1_lo+$100
    sta mulf_sqr2_lo+$1ff
  //SEG214 [120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256) -- _deref_pbuc1=_deref_pbuc2 
    lda mulf_sqr1_hi+$100
    sta mulf_sqr2_hi+$1ff
    jmp breturn
  //SEG215 mulf_init::@return
  breturn:
  //SEG216 [121] return 
    rts
  //SEG217 [122] phi from mulf_init::@3 to mulf_init::@12 [phi:mulf_init::@3->mulf_init::@12]
  b12_from_b3:
    jmp b12
  //SEG218 mulf_init::@12
  b12:
  //SEG219 [116] phi from mulf_init::@12 to mulf_init::@4 [phi:mulf_init::@12->mulf_init::@4]
  b4_from_b12:
  //SEG220 [116] phi (byte) mulf_init::dir#3 = (byte) mulf_init::dir#2 [phi:mulf_init::@12->mulf_init::@4#0] -- register_copy 
    jmp b4
}
  // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
  // <f(x) = <(( x * x )/4)
  .align $100
  mulf_sqr1_lo: .fill $200, 0
  // >f(x) = >(( x * x )/4)
  .align $100
  mulf_sqr1_hi: .fill $200, 0
  // <g(x) =  <((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_lo: .fill $200, 0
  // >g(x) = >((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_hi: .fill $200, 0
  // Positions to rotate
  xs: .byte -$46, -$46, -$46, 0, 0, $46, $46, $46
  ys: .byte -$46, 0, $46, -$46, $46, -$46, 0, $46
.pc = COS "COS"
  {
    .var min = -$7fff
    .var max = $7fff
    .var ampl = max-min;
    .for(var i=0;i<$140;i++) {
        .var rad = i*2*PI/256;
        .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
    }
    }

.pc = SPRITE "SPRITE"
  .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
    .for (var y=0; y<21; y++)
        .for (var x=0;x<3; x++)
            .byte pic.getSinglecolorByte(x,y)


ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b13
Removing instruction jmp b16
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp mulf8s_prepare1
Removing instruction jmp b17
Removing instruction jmp b20
Removing instruction jmp b21
Removing instruction jmp mulf8s_prepare2
Removing instruction jmp b18
Removing instruction jmp b23
Removing instruction jmp b24
Removing instruction jmp b14
Removing instruction jmp b8
Removing instruction jmp b15
Removing instruction jmp b6
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b5
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b8
Removing instruction jmp breturn
Removing instruction jmp b12
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction ldy i
Removing instruction lda xpos+1
Removing instruction lda memA
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Removing instruction ldy #0
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b8_from_b24 with b8
Replacing label b7_from_b8 with b7
Replacing label b1 with b4
Replacing label b1_from_b6 with b1
Replacing label b2_from_b1 with b2
Replacing label b1_from_b1 with b1
Replacing label b2_from_b1 with b2
Replacing label b1_from_b2 with b1
Replacing label b1_from_b2 with b1
Replacing label b12_from_b3 with b12
Replacing label b3_from_b4 with b3
Replacing label b3_from_b4 with b3
Removing instruction b13:
Removing instruction bend_from_b16:
Removing instruction b1_from_main:
Removing instruction anim_from_b1:
Removing instruction b1:
Removing instruction b7_from_b8:
Removing instruction b8_from_b14:
Removing instruction b8_from_b24:
Removing instruction b1_from_b3:
Removing instruction b1_from_b6:
Removing instruction b2_from_b1:
Removing instruction b2_from_b4:
Removing instruction breturn:
Removing instruction b1_from_b1:
Removing instruction b1_from_b2:
Removing instruction b2_from_b1:
Removing instruction b2_from_b5:
Removing instruction b3_from_b4:
Removing instruction b12_from_b3:
Removing instruction b4_from_b12:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b16:
Removing instruction bend:
Removing instruction init_from_main:
Removing instruction b1:
Removing instruction breturn:
Removing instruction b1_from_anim:
Removing instruction b6:
Removing instruction b7_from_b6:
Removing instruction mulf8s_prepare1:
Removing instruction mulf8u_prepare_from_mulf8s_prepare1:
Removing instruction b17:
Removing instruction mulf8s_prepared_from_b17:
Removing instruction b20:
Removing instruction mulf8s_prepared_from_b20:
Removing instruction b21:
Removing instruction mulf8s_prepare2:
Removing instruction mulf8u_prepare_from_mulf8s_prepare2:
Removing instruction b18:
Removing instruction mulf8s_prepared_from_b18:
Removing instruction b23:
Removing instruction mulf8s_prepared_from_b23:
Removing instruction b24:
Removing instruction b14:
Removing instruction b15:
Removing instruction b1_from_b15:
Removing instruction b6:
Removing instruction b3:
Removing instruction b4:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction mulf_init_from_init:
Removing instruction b3:
Removing instruction b1_from_b3:
Removing instruction breturn:
Removing instruction b1_from_mulf_init:
Removing instruction b5:
Removing instruction b3_from_b2:
Removing instruction b4_from_b3:
Removing instruction b8:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Skipping double jump to b4 in bne b12
Succesful ASM optimization Pass5DoubleJumpElimination
Removing instruction jmp b7
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b3
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Removing instruction b12:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction jmp b4
Succesful ASM optimization Pass5UnreachableCodeElimination
Fixing long branch [140] bne b7 to beq

FINAL SYMBOL TABLE
(label) @13
(label) @16
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte*) COS
(const byte*) COS#0 COS = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(const byte) LIGHT_BLUE#0 LIGHT_BLUE = (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SIN
(const byte*) SIN#0 SIN = (const byte*) COS#0+(byte/signed byte/word/signed word/dword/signed dword) 64
(byte*) SPRITE
(const byte*) SPRITE#0 SPRITE = ((byte*))(word/signed word/dword/signed dword) 12288
(byte*) SPRITES_COLS
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) anim()
(signed word~) anim::$10 $10 zp ZP_WORD:5 202.0
(signed word~) anim::$11 $11 zp ZP_WORD:5 202.0
(signed word~) anim::$12 $12 zp ZP_WORD:5 202.0
(byte~) anim::$13 reg byte a 101.0
(signed byte~) anim::$15 reg byte a 202.0
(byte~) anim::$18 reg byte a 202.0
(byte~) anim::$22 reg byte a 202.0
(byte~) anim::$25 reg byte a 202.0
(signed word~) anim::$4 $4 zp ZP_WORD:7 202.0
(signed word~) anim::$6 $6 zp ZP_WORD:9 202.0
(signed word~) anim::$9 $9 zp ZP_WORD:5 202.0
(label) anim::@1
(label) anim::@14
(label) anim::@15
(label) anim::@17
(label) anim::@18
(label) anim::@20
(label) anim::@21
(label) anim::@23
(label) anim::@24
(label) anim::@4
(label) anim::@6
(label) anim::@7
(label) anim::@8
(byte) anim::angle
(byte) anim::angle#1 angle zp ZP_BYTE:2 11.0
(byte) anim::angle#10 angle zp ZP_BYTE:2 0.4489795918367347
(signed byte) anim::cos_a
(byte) anim::i
(byte) anim::i#1 i zp ZP_BYTE:3 151.5
(byte) anim::i#10 i zp ZP_BYTE:3 11.74418604651163
(byte) anim::i2
(byte) anim::i2#0 reg byte x 101.0
(label) anim::mulf8s_prepare1
(byte~) anim::mulf8s_prepare1_$0
(signed byte) anim::mulf8s_prepare1_a
(label) anim::mulf8s_prepare2
(byte~) anim::mulf8s_prepare2_$0
(signed byte) anim::mulf8s_prepare2_a
(signed byte) anim::sin_a
(byte) anim::sprite_msb
(byte) anim::sprite_msb#1 sprite_msb zp ZP_BYTE:4 101.0
(byte) anim::sprite_msb#10 sprite_msb zp ZP_BYTE:4 6.3125
(byte) anim::sprite_msb#2 sprite_msb zp ZP_BYTE:4 202.0
(byte) anim::sprite_msb#5 sprite_msb zp ZP_BYTE:4 34.888888888888886
(signed byte) anim::x
(signed byte) anim::x#0 x zp ZP_BYTE:11 13.772727272727273
(signed word) anim::xpos
(signed word) anim::xpos#0 xpos zp ZP_WORD:5 33.666666666666664
(signed word) anim::xr
(signed word) anim::xr#0 xr zp ZP_WORD:7 15.538461538461538
(signed word) anim::xr#1 xr zp ZP_WORD:7 28.857142857142858
(signed byte) anim::y
(signed byte) anim::y#0 y zp ZP_BYTE:12 20.2
(byte) anim::ypos
(byte) anim::ypos#0 reg byte y 50.5
(signed word) anim::yr
(signed word) anim::yr#0 yr zp ZP_WORD:9 14.428571428571429
(signed word) anim::yr#1 yr zp ZP_WORD:9 22.444444444444443
(void()) init()
(label) init::@1
(label) init::@3
(label) init::@return
(byte) init::i
(byte) init::i#1 reg byte x 16.5
(byte) init::i#2 reg byte x 14.666666666666666
(byte*) init::sprites_ptr
(const byte*) init::sprites_ptr#0 sprites_ptr = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1016
(void()) main()
(label) main::@1
(label) main::@return
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
(byte~) mulf8s_prepared::$11 reg byte a 4.0
(byte~) mulf8s_prepared::$15 reg byte a 4.0
(byte~) mulf8s_prepared::$16 reg byte a 4.0
(byte~) mulf8s_prepared::$5 reg byte a 4.0
(label) mulf8s_prepared::@1
(label) mulf8s_prepared::@2
(label) mulf8s_prepared::@3
(label) mulf8s_prepared::@4
(label) mulf8s_prepared::@6
(label) mulf8s_prepared::@return
(signed byte) mulf8s_prepared::b
(signed byte) mulf8s_prepared::b#0 reg byte y 202.0
(signed byte) mulf8s_prepared::b#1 reg byte y 202.0
(signed byte) mulf8s_prepared::b#2 reg byte y 202.0
(signed byte) mulf8s_prepared::b#3 reg byte y 202.0
(signed byte) mulf8s_prepared::b#4 reg byte y 31.23076923076923
(word) mulf8s_prepared::m
(word) mulf8s_prepared::m#0 m zp ZP_WORD:5 2.0
(word) mulf8s_prepared::m#1 m zp ZP_WORD:5 4.0
(word) mulf8s_prepared::m#2 m zp ZP_WORD:5 4.0
(word) mulf8s_prepared::m#4 m zp ZP_WORD:5 0.6666666666666666
(word) mulf8s_prepared::m#5 m zp ZP_WORD:5 2.5
(signed byte*) mulf8s_prepared::memA
(const signed byte*) mulf8s_prepared::memA#0 memA = ((signed byte*))(byte/word/signed word/dword/signed dword) 253
(signed word) mulf8s_prepared::return
(signed word) mulf8s_prepared::return#10 return zp ZP_WORD:5 202.0
(signed word) mulf8s_prepared::return#2 return zp ZP_WORD:5 202.0
(signed word) mulf8s_prepared::return#3 return zp ZP_WORD:5 202.0
(signed word) mulf8s_prepared::return#4 return zp ZP_WORD:5 202.0
(void()) mulf8u_prepare((byte) mulf8u_prepare::a)
(label) mulf8u_prepare::@return
(byte) mulf8u_prepare::a
(byte) mulf8u_prepare::a#2 reg byte a 204.0
(byte~) mulf8u_prepare::a#3 reg byte a 202.0
(byte~) mulf8u_prepare::a#4 reg byte a 202.0
(byte*) mulf8u_prepare::memA
(const byte*) mulf8u_prepare::memA#0 memA = ((byte*))(byte/word/signed word/dword/signed dword) 253
(word()) mulf8u_prepared((byte) mulf8u_prepared::b)
(label) mulf8u_prepared::@return
(byte) mulf8u_prepared::b
(byte*) mulf8u_prepared::memB
(const byte*) mulf8u_prepared::memB#0 memB = ((byte*))(byte/word/signed word/dword/signed dword) 255
(byte*) mulf8u_prepared::resL
(const byte*) mulf8u_prepared::resL#0 resL = ((byte*))(byte/word/signed word/dword/signed dword) 254
(word) mulf8u_prepared::return
(word) mulf8u_prepared::return#0 return zp ZP_WORD:5 1.3333333333333333
(word) mulf8u_prepared::return#2 return zp ZP_WORD:5 4.0
(void()) mulf_init()
(byte~) mulf_init::$2 reg byte a 22.0
(byte~) mulf_init::$5 reg byte a 22.0
(byte~) mulf_init::$6 reg byte a 22.0
(label) mulf_init::@1
(label) mulf_init::@12
(label) mulf_init::@2
(label) mulf_init::@3
(label) mulf_init::@4
(label) mulf_init::@5
(label) mulf_init::@8
(label) mulf_init::@return
(byte) mulf_init::c
(byte) mulf_init::c#1 reg byte x 2.357142857142857
(byte) mulf_init::c#2 reg byte x 22.0
(byte) mulf_init::dir
(byte) mulf_init::dir#2 dir zp ZP_BYTE:2 4.714285714285714
(byte) mulf_init::dir#3 dir zp ZP_BYTE:2 7.333333333333333
(word) mulf_init::sqr
(word) mulf_init::sqr#1 sqr zp ZP_WORD:9 7.333333333333333
(word) mulf_init::sqr#2 sqr zp ZP_WORD:9 22.0
(word) mulf_init::sqr#3 sqr zp ZP_WORD:9 9.166666666666666
(word) mulf_init::sqr#4 sqr zp ZP_WORD:9 6.6000000000000005
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:7 5.5
(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:7 3.0
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp ZP_WORD:5 16.5
(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp ZP_WORD:5 2.5384615384615383
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:7 3.142857142857143
(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:7 11.0
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:5 16.5
(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:5 4.125
(byte) mulf_init::x_2
(byte) mulf_init::x_2#1 x_2 zp ZP_BYTE:2 11.0
(byte) mulf_init::x_2#2 x_2 zp ZP_BYTE:2 4.888888888888889
(byte) mulf_init::x_2#3 x_2 zp ZP_BYTE:2 8.25
(byte) mulf_init::x_255
(byte) mulf_init::x_255#1 reg byte x 5.5
(byte) mulf_init::x_255#2 reg byte x 11.0
(byte[512]) mulf_sqr1_hi
(const byte[512]) mulf_sqr1_hi#0 mulf_sqr1_hi = { fill( 512, 0) }
(byte[512]) mulf_sqr1_lo
(const byte[512]) mulf_sqr1_lo#0 mulf_sqr1_lo = { fill( 512, 0) }
(byte[512]) mulf_sqr2_hi
(const byte[512]) mulf_sqr2_hi#0 mulf_sqr2_hi = { fill( 512, 0) }
(byte[512]) mulf_sqr2_lo
(const byte[512]) mulf_sqr2_lo#0 mulf_sqr2_lo = { fill( 512, 0) }
(signed byte[8]) xs
(const signed byte[8]) xs#0 xs = { -(byte/signed byte/word/signed word/dword/signed dword) 70, -(byte/signed byte/word/signed word/dword/signed dword) 70, -(byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 70 }
(signed byte[8]) ys
(const signed byte[8]) ys#0 ys = { -(byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 70, -(byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 70, -(byte/signed byte/word/signed word/dword/signed dword) 70, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 70 }

zp ZP_BYTE:2 [ anim::angle#10 anim::angle#1 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_BYTE:3 [ anim::i#10 anim::i#1 ]
zp ZP_BYTE:4 [ anim::sprite_msb#10 anim::sprite_msb#5 anim::sprite_msb#2 anim::sprite_msb#1 ]
reg byte y [ mulf8s_prepared::b#4 mulf8s_prepared::b#0 mulf8s_prepared::b#2 mulf8s_prepared::b#1 mulf8s_prepared::b#3 ]
zp ZP_WORD:5 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s_prepared::return#2 mulf8s_prepared::return#3 mulf8s_prepared::return#4 mulf8s_prepared::return#10 mulf8u_prepared::return#2 anim::$9 anim::$10 anim::$11 anim::$12 mulf8u_prepared::return#0 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 anim::xpos#0 ]
reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#3 mulf8u_prepare::a#4 ]
reg byte x [ init::i#2 init::i#1 ]
reg byte x [ mulf_init::c#2 mulf_init::c#1 ]
zp ZP_WORD:7 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 anim::$4 anim::xr#0 anim::xr#1 ]
zp ZP_WORD:9 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 anim::$6 anim::yr#0 anim::yr#1 ]
reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
zp ZP_BYTE:11 [ anim::x#0 ]
zp ZP_BYTE:12 [ anim::y#0 ]
reg byte a [ anim::$13 ]
reg byte a [ anim::$15 ]
reg byte a [ anim::$18 ]
reg byte a [ anim::$22 ]
reg byte y [ anim::ypos#0 ]
reg byte x [ anim::i2#0 ]
reg byte a [ anim::$25 ]
reg byte a [ mulf8s_prepared::$5 ]
reg byte a [ mulf8s_prepared::$15 ]
reg byte a [ mulf8s_prepared::$11 ]
reg byte a [ mulf8s_prepared::$16 ]
reg byte a [ mulf_init::$2 ]
reg byte a [ mulf_init::$5 ]
reg byte a [ mulf_init::$6 ]


FINAL ASSEMBLER
Score: 34700

//SEG0 File Comments
// 2D rotattion of 8 sprites 
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label SPRITES_XPOS = $d000
  .label SPRITES_YPOS = $d001
  .label SPRITES_XMSB = $d010
  .label RASTER = $d012
  .label SPRITES_ENABLE = $d015
  .label BORDERCOL = $d020
  .label SPRITES_COLS = $d027
  .const GREEN = 5
  .const LIGHT_BLUE = $e
  .label SCREEN = $400
  // Sine and Cosine tables  
  // Angles: $00=0, $80=PI,$100=2*PI
  // Sine/Cosine: signed fixed [-$7f,$7f]
  .label COS = $2000
  // A single sprite
  .label SPRITE = $3000
  .label SIN = COS+$40
//SEG3 @begin
//SEG4 @13
//SEG5 kickasm(location (const byte*) COS#0) {{ {     .var min = -$7fff     .var max = $7fff     .var ampl = max-min;     .for(var i=0;i<$140;i++) {         .var rad = i*2*PI/256;         .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))     }     }  }}
// sin(x) = cos(x+PI/2)
//SEG6 @16
//SEG7 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))     .for (var y=0; y<21; y++)         .for (var x=0;x<3; x++)             .byte pic.getSinglecolorByte(x,y)  }}
//SEG8 [3] call main 
//SEG9 [4] phi from @16 to @end [phi:@16->@end]
//SEG10 @end
//SEG11 main
main: {
  //SEG12 asm { sei  }
    sei
  //SEG13 [6] call init 
  //SEG14 [85] phi from main to init [phi:main->init]
    jsr init
  //SEG15 [7] phi from main to main::@1 [phi:main->main::@1]
  //SEG16 main::@1
  //SEG17 [8] call anim 
  //SEG18 [10] phi from main::@1 to anim [phi:main::@1->anim]
    jsr anim
  //SEG19 main::@return
  //SEG20 [9] return 
    rts
}
//SEG21 anim
anim: {
    .label _4 = 7
    .label _6 = 9
    .label _9 = 5
    .label _10 = 5
    .label _11 = 5
    .label _12 = 5
    .label x = $b
    .label y = $c
    .label xr = 7
    .label yr = 9
    .label xpos = 5
    .label sprite_msb = 4
    .label i = 3
    .label angle = 2
  //SEG22 [11] phi from anim to anim::@1 [phi:anim->anim::@1]
  //SEG23 [11] phi (byte) anim::angle#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim->anim::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta angle
  //SEG24 anim::@1
  //SEG25 anim::@4
  b4:
  //SEG26 [12] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto anim::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b4
  //SEG27 anim::@6
  //SEG28 [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
  //SEG29 [14] phi from anim::@6 to anim::@7 [phi:anim::@6->anim::@7]
  //SEG30 [14] phi (byte) anim::sprite_msb#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@6->anim::@7#0] -- vbuz1=vbuc1 
    lda #0
    sta sprite_msb
  //SEG31 [14] phi (byte) anim::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@6->anim::@7#1] -- vbuz1=vbuc1 
    sta i
  //SEG32 [14] phi from anim::@8 to anim::@7 [phi:anim::@8->anim::@7]
  //SEG33 [14] phi (byte) anim::sprite_msb#10 = (byte) anim::sprite_msb#5 [phi:anim::@8->anim::@7#0] -- register_copy 
  //SEG34 [14] phi (byte) anim::i#10 = (byte) anim::i#1 [phi:anim::@8->anim::@7#1] -- register_copy 
  //SEG35 anim::@7
  b7:
  //SEG36 [15] (signed byte) anim::x#0 ← *((const signed byte[8]) xs#0 + (byte) anim::i#10) -- vbsz1=pbsc1_derefidx_vbuz2 
    ldy i
    lda xs,y
    sta x
  //SEG37 [16] (signed byte) anim::y#0 ← *((const signed byte[8]) ys#0 + (byte) anim::i#10) -- vbsz1=pbsc1_derefidx_vbuz2 
    // signed fixed[7.0]
    lda ys,y
    sta y
  //SEG38 anim::mulf8s_prepare1
  //SEG39 [17] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte*) COS#0 + (byte) anim::angle#10) -- vbuaa=pbsc1_derefidx_vbuz1 
    ldy angle
    lda COS,y
  //SEG40 [18] call mulf8u_prepare 
  //SEG41 [81] phi from anim::mulf8s_prepare1 to mulf8u_prepare [phi:anim::mulf8s_prepare1->mulf8u_prepare]
  //SEG42 [81] phi (byte) mulf8u_prepare::a#2 = (byte~) mulf8u_prepare::a#3 [phi:anim::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy 
    jsr mulf8u_prepare
  //SEG43 anim::@17
  //SEG44 [19] (signed byte) mulf8s_prepared::b#0 ← (signed byte) anim::x#0 -- vbsyy=vbsz1 
    ldy x
  //SEG45 [20] call mulf8s_prepared 
  //SEG46 [62] phi from anim::@17 to mulf8s_prepared [phi:anim::@17->mulf8s_prepared]
  //SEG47 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#0 [phi:anim::@17->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG48 [21] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4
  //SEG49 anim::@20
  //SEG50 [22] (signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#2 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return
    sta _4
    lda mulf8s_prepared.return+1
    sta _4+1
  //SEG51 [23] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl xr
    rol xr+1
  //SEG52 [24] (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#0 -- vbsyy=vbsz1 
    ldy y
  //SEG53 [25] call mulf8s_prepared 
  //SEG54 [62] phi from anim::@20 to mulf8s_prepared [phi:anim::@20->mulf8s_prepared]
  //SEG55 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#1 [phi:anim::@20->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG56 [26] (signed word) mulf8s_prepared::return#3 ← (signed word)(word) mulf8s_prepared::m#4
  //SEG57 anim::@21
  //SEG58 [27] (signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#3 -- vwsz1=vwsz2 
    lda mulf8s_prepared.return
    sta _6
    lda mulf8s_prepared.return+1
    sta _6+1
  //SEG59 [28] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl yr
    rol yr+1
  //SEG60 anim::mulf8s_prepare2
  //SEG61 [29] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#10) -- vbuaa=pbsc1_derefidx_vbuz1 
    ldy angle
    lda SIN,y
  //SEG62 [30] call mulf8u_prepare 
  //SEG63 [81] phi from anim::mulf8s_prepare2 to mulf8u_prepare [phi:anim::mulf8s_prepare2->mulf8u_prepare]
  //SEG64 [81] phi (byte) mulf8u_prepare::a#2 = (byte~) mulf8u_prepare::a#4 [phi:anim::mulf8s_prepare2->mulf8u_prepare#0] -- register_copy 
    jsr mulf8u_prepare
  //SEG65 anim::@18
  //SEG66 [31] (signed byte) mulf8s_prepared::b#2 ← (signed byte) anim::y#0 -- vbsyy=vbsz1 
    ldy y
  //SEG67 [32] call mulf8s_prepared 
  //SEG68 [62] phi from anim::@18 to mulf8s_prepared [phi:anim::@18->mulf8s_prepared]
  //SEG69 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#2 [phi:anim::@18->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG70 [33] (signed word) mulf8s_prepared::return#4 ← (signed word)(word) mulf8s_prepared::m#4
  //SEG71 anim::@23
  //SEG72 [34] (signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#4
  //SEG73 [35] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl _10
    rol _10+1
  //SEG74 [36] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10 -- vwsz1=vwsz1_minus_vwsz2 
    lda xr
    sec
    sbc _10
    sta xr
    lda xr+1
    sbc _10+1
    sta xr+1
  //SEG75 [37] (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#0 -- vbsyy=vbsz1 
    ldy x
  //SEG76 [38] call mulf8s_prepared 
  //SEG77 [62] phi from anim::@23 to mulf8s_prepared [phi:anim::@23->mulf8s_prepared]
  //SEG78 [62] phi (signed byte) mulf8s_prepared::b#4 = (signed byte) mulf8s_prepared::b#3 [phi:anim::@23->mulf8s_prepared#0] -- register_copy 
    jsr mulf8s_prepared
  //SEG79 [39] (signed word) mulf8s_prepared::return#10 ← (signed word)(word) mulf8s_prepared::m#4
  //SEG80 anim::@24
  //SEG81 [40] (signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10
  //SEG82 [41] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwsz1=vwsz1_rol_1 
    asl _12
    rol _12+1
  //SEG83 [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 -- vwsz1=vwsz1_plus_vwsz2 
    // signed fixed[8.8] 
    lda yr
    clc
    adc _12
    sta yr
    lda yr+1
    adc _12+1
    sta yr+1
  //SEG84 [43] (byte~) anim::$13 ← > (signed word) anim::xr#1 -- vbuaa=_hi_vwsz1 
    lda xr+1
  //SEG85 [44] (signed byte~) anim::$15 ← (signed byte)(byte~) anim::$13
  //SEG86 [45] (signed word) anim::xpos#0 ← (signed byte~) anim::$15 + (byte/signed byte/word/signed word/dword/signed dword) 24+(byte/word/signed word/dword/signed dword) 149 -- vwsz1=vbsaa_plus_vbuc1 
    sta xpos
    ora #$7f
    bmi !+
    lda #0
  !:
    sta xpos+1
    lda xpos
    clc
    adc #$18+$95
    sta xpos
    lda xpos+1
    adc #0
    sta xpos+1
  //SEG87 [46] (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_ror_1 
    lsr sprite_msb
  //SEG88 [47] (byte~) anim::$18 ← > (signed word) anim::xpos#0 -- vbuaa=_hi_vwsz1 
  //SEG89 [48] if((byte~) anim::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@8 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b8
  //SEG90 anim::@14
  //SEG91 [49] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte/word/signed word/dword/signed dword) 128 -- vbuz1=vbuz1_bor_vbuc1 
    lda #$80
    ora sprite_msb
    sta sprite_msb
  //SEG92 [50] phi from anim::@14 anim::@24 to anim::@8 [phi:anim::@14/anim::@24->anim::@8]
  //SEG93 [50] phi (byte) anim::sprite_msb#5 = (byte) anim::sprite_msb#2 [phi:anim::@14/anim::@24->anim::@8#0] -- register_copy 
  //SEG94 anim::@8
  b8:
  //SEG95 [51] (byte~) anim::$22 ← > (signed word) anim::yr#1 -- vbuaa=_hi_vwsz1 
    lda yr+1
  //SEG96 [52] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) 89+(byte/signed byte/word/signed word/dword/signed dword) 51 -- vbuyy=vbuaa_plus_vbuc1 
    clc
    adc #$59+$33
    tay
  //SEG97 [53] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_rol_1 
    lda i
    asl
    tax
  //SEG98 [54] (byte~) anim::$25 ← < (signed word) anim::xpos#0 -- vbuaa=_lo_vwsz1 
    lda xpos
  //SEG99 [55] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SPRITES_XPOS,x
  //SEG100 [56] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0 -- pbuc1_derefidx_vbuxx=vbuyy 
    tya
    sta SPRITES_YPOS,x
  //SEG101 [57] (byte) anim::i#1 ← ++ (byte) anim::i#10 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG102 [58] if((byte) anim::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto anim::@7 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #8
    beq !b7+
    jmp b7
  !b7:
  //SEG103 anim::@15
  //SEG104 [59] *((const byte*) SPRITES_XMSB#0) ← (byte) anim::sprite_msb#5 -- _deref_pbuc1=vbuz1 
    lda sprite_msb
    sta SPRITES_XMSB
  //SEG105 [60] (byte) anim::angle#1 ← ++ (byte) anim::angle#10 -- vbuz1=_inc_vbuz1 
    inc angle
  //SEG106 [61] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #LIGHT_BLUE
    sta BORDERCOL
  //SEG107 [11] phi from anim::@15 to anim::@1 [phi:anim::@15->anim::@1]
  //SEG108 [11] phi (byte) anim::angle#10 = (byte) anim::angle#1 [phi:anim::@15->anim::@1#0] -- register_copy 
    jmp b4
}
//SEG109 mulf8s_prepared
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8s_prepare(byte a)
// mulf8s_prepared(signed byte register(Y) b)
mulf8s_prepared: {
    .label memA = $fd
    .label m = 5
    .label return = 5
  //SEG110 [63] call mulf8u_prepared 
    jsr mulf8u_prepared
  //SEG111 [64] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0
  //SEG112 mulf8s_prepared::@6
  //SEG113 [65] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2
  //SEG114 [66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 
    lda memA
    cmp #0
    bpl b1
  //SEG115 mulf8s_prepared::@3
  //SEG116 [67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 
    lda m+1
  //SEG117 [68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4 -- vbuaa=vbuaa_minus_vbuyy 
    sty $ff
    sec
    sbc $ff
  //SEG118 [69] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa 
    sta m+1
  //SEG119 [70] phi from mulf8s_prepared::@3 mulf8s_prepared::@6 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@6->mulf8s_prepared::@1]
  //SEG120 [70] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@6->mulf8s_prepared::@1#0] -- register_copy 
  //SEG121 mulf8s_prepared::@1
  b1:
  //SEG122 [71] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2 -- vbsyy_ge_0_then_la1 
    cpy #0
    bpl b2
  //SEG123 mulf8s_prepared::@4
  //SEG124 [72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 
    lda m+1
  //SEG125 [73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) -- vbuaa=vbuaa_minus__deref_pbuc1 
    sec
    sbc memA
  //SEG126 [74] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa 
    sta m+1
  //SEG127 [75] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2]
  //SEG128 [75] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy 
  //SEG129 mulf8s_prepared::@2
  b2:
  //SEG130 mulf8s_prepared::@return
  //SEG131 [76] return 
    rts
}
//SEG132 mulf8u_prepared
// Calculate fast multiply with a prepared unsigned byte to a word result
// The prepared number is set by calling mulf8u_prepare(byte a)
mulf8u_prepared: {
    .label resL = $fe
    .label memB = $ff
    .label return = 5
  //SEG133 [77] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4 -- _deref_pbuc1=vbuyy 
    sty memB
  //SEG134 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  }
    ldx memB
    sec
  sm1:
    lda mulf_sqr1_lo,x
  sm2:
    sbc mulf_sqr2_lo,x
    sta resL
  sm3:
    lda mulf_sqr1_hi,x
  sm4:
    sbc mulf_sqr2_hi,x
    sta memB
  //SEG135 [79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 
    lda resL
    sta return
    lda memB
    sta return+1
  //SEG136 mulf8u_prepared::@return
  //SEG137 [80] return 
    rts
}
//SEG138 mulf8u_prepare
// Prepare for fast multiply with an unsigned byte to a word result
// mulf8u_prepare(byte register(A) a)
mulf8u_prepare: {
    .label memA = $fd
  //SEG139 [82] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa 
    sta memA
  //SEG140 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1  }
    sta mulf8u_prepared.sm1+1
    sta mulf8u_prepared.sm3+1
    eor #$ff
    sta mulf8u_prepared.sm2+1
    sta mulf8u_prepared.sm4+1
  //SEG141 mulf8u_prepare::@return
  //SEG142 [84] return 
    rts
}
//SEG143 init
init: {
    .label sprites_ptr = SCREEN+$3f8
  //SEG144 [86] call mulf_init 
  //SEG145 [94] phi from init to mulf_init [phi:init->mulf_init]
    jsr mulf_init
  //SEG146 init::@3
  //SEG147 [87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 -- _deref_pbuc1=vbuc2 
    lda #$ff
    sta SPRITES_ENABLE
  //SEG148 [88] phi from init::@3 to init::@1 [phi:init::@3->init::@1]
  //SEG149 [88] phi (byte) init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@3->init::@1#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG150 [88] phi from init::@1 to init::@1 [phi:init::@1->init::@1]
  //SEG151 [88] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@1->init::@1#0] -- register_copy 
  //SEG152 init::@1
  b1:
  //SEG153 [89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #$ff&SPRITE/$40
    sta sprites_ptr,x
  //SEG154 [90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #GREEN
    sta SPRITES_COLS,x
  //SEG155 [91] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG156 [92] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b1
  //SEG157 init::@return
  //SEG158 [93] return 
    rts
}
//SEG159 mulf_init
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
mulf_init: {
    .label sqr1_hi = 7
    .label sqr = 9
    .label sqr1_lo = 5
    .label x_2 = 2
    .label sqr2_hi = 7
    .label sqr2_lo = 5
    .label dir = 2
  //SEG160 [95] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1]
  //SEG161 [95] phi (byte) mulf_init::x_2#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta x_2
  //SEG162 [95] phi (byte*) mulf_init::sqr1_hi#2 = (const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_hi+1
    sta sqr1_hi
    lda #>mulf_sqr1_hi+1
    sta sqr1_hi+1
  //SEG163 [95] phi (byte*) mulf_init::sqr1_lo#2 = (const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init->mulf_init::@1#2] -- pbuz1=pbuc1 
    lda #<mulf_sqr1_lo+1
    sta sqr1_lo
    lda #>mulf_sqr1_lo+1
    sta sqr1_lo+1
  //SEG164 [95] phi (word) mulf_init::sqr#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#3] -- vwuz1=vbuc1 
    lda #<0
    sta sqr
    sta sqr+1
  //SEG165 [95] phi (byte) mulf_init::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mulf_init->mulf_init::@1#4] -- vbuxx=vbuc1 
    tax
  //SEG166 [95] phi from mulf_init::@2 to mulf_init::@1 [phi:mulf_init::@2->mulf_init::@1]
  //SEG167 [95] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@2->mulf_init::@1#0] -- register_copy 
  //SEG168 [95] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@2->mulf_init::@1#1] -- register_copy 
  //SEG169 [95] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@2->mulf_init::@1#2] -- register_copy 
  //SEG170 [95] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@2->mulf_init::@1#3] -- register_copy 
  //SEG171 [95] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@2->mulf_init::@1#4] -- register_copy 
  //SEG172 mulf_init::@1
  b1:
  //SEG173 [96] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG174 [97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_band_vbuc1 
    txa
    and #1
  //SEG175 [98] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b2
  //SEG176 mulf_init::@5
  //SEG177 [99] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 
    inc x_2
  //SEG178 [100] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 
    inc sqr
    bne !+
    inc sqr+1
  !:
  //SEG179 [101] phi from mulf_init::@1 mulf_init::@5 to mulf_init::@2 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2]
  //SEG180 [101] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2#0] -- register_copy 
  //SEG181 [101] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@1/mulf_init::@5->mulf_init::@2#1] -- register_copy 
  //SEG182 mulf_init::@2
  b2:
  //SEG183 [102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 
    lda sqr
  //SEG184 [103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (sqr1_lo),y
  //SEG185 [104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 
    lda sqr+1
  //SEG186 [105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6 -- _deref_pbuz1=vbuaa 
    sta (sqr1_hi),y
  //SEG187 [106] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 
    inc sqr1_hi
    bne !+
    inc sqr1_hi+1
  !:
  //SEG188 [107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 
    lda x_2
    clc
    adc sqr
    sta sqr
    lda #0
    adc sqr+1
    sta sqr+1
  //SEG189 [108] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 
    inc sqr1_lo
    bne !+
    inc sqr1_lo+1
  !:
  //SEG190 [109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sqr1_lo+1
    cmp #>mulf_sqr1_lo+$200
    bne b1
    lda sqr1_lo
    cmp #<mulf_sqr1_lo+$200
    bne b1
  //SEG191 [110] phi from mulf_init::@2 to mulf_init::@3 [phi:mulf_init::@2->mulf_init::@3]
  //SEG192 [110] phi (byte) mulf_init::dir#2 = (byte/word/signed word/dword/signed dword) 255 [phi:mulf_init::@2->mulf_init::@3#0] -- vbuz1=vbuc1 
    lda #$ff
    sta dir
  //SEG193 [110] phi (byte*) mulf_init::sqr2_hi#2 = (const byte[512]) mulf_sqr2_hi#0 [phi:mulf_init::@2->mulf_init::@3#1] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_hi
    sta sqr2_hi
    lda #>mulf_sqr2_hi
    sta sqr2_hi+1
  //SEG194 [110] phi (byte*) mulf_init::sqr2_lo#2 = (const byte[512]) mulf_sqr2_lo#0 [phi:mulf_init::@2->mulf_init::@3#2] -- pbuz1=pbuc1 
    lda #<mulf_sqr2_lo
    sta sqr2_lo
    lda #>mulf_sqr2_lo
    sta sqr2_lo+1
  //SEG195 [110] phi (byte) mulf_init::x_255#2 = ((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init::@2->mulf_init::@3#3] -- vbuxx=vbuc1 
    ldx #-1
  //SEG196 [110] phi from mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@4->mulf_init::@3]
  //SEG197 [110] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#3 [phi:mulf_init::@4->mulf_init::@3#0] -- register_copy 
  //SEG198 [110] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@4->mulf_init::@3#1] -- register_copy 
  //SEG199 [110] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@4->mulf_init::@3#2] -- register_copy 
  //SEG200 [110] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@4->mulf_init::@3#3] -- register_copy 
  //SEG201 mulf_init::@3
  b3:
  //SEG202 [111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_lo,x
    ldy #0
    sta (sqr2_lo),y
  //SEG203 [112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx 
    lda mulf_sqr1_hi,x
    sta (sqr2_hi),y
  //SEG204 [113] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 
    inc sqr2_hi
    bne !+
    inc sqr2_hi+1
  !:
  //SEG205 [114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 
    txa
    clc
    adc dir
    tax
  //SEG206 [115] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12 -- vbuxx_neq_0_then_la1 
    cpx #0
    bne b4
  //SEG207 [116] phi from mulf_init::@3 to mulf_init::@4 [phi:mulf_init::@3->mulf_init::@4]
  //SEG208 [116] phi (byte) mulf_init::dir#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:mulf_init::@3->mulf_init::@4#0] -- vbuz1=vbuc1 
    lda #1
    sta dir
  //SEG209 mulf_init::@4
  b4:
  //SEG210 [117] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 
    inc sqr2_lo
    bne !+
    inc sqr2_lo+1
  !:
  //SEG211 [118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3 -- pbuz1_neq_pbuc1_then_la1 
    lda sqr2_lo+1
    cmp #>mulf_sqr2_lo+$1ff
    bne b3
    lda sqr2_lo
    cmp #<mulf_sqr2_lo+$1ff
    bne b3
  //SEG212 mulf_init::@8
  //SEG213 [119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256) -- _deref_pbuc1=_deref_pbuc2 
    // Set the very last value g(511) = f(256)
    lda mulf_sqr1_lo+$100
    sta mulf_sqr2_lo+$1ff
  //SEG214 [120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256) -- _deref_pbuc1=_deref_pbuc2 
    lda mulf_sqr1_hi+$100
    sta mulf_sqr2_hi+$1ff
  //SEG215 mulf_init::@return
  //SEG216 [121] return 
    rts
  //SEG217 [122] phi from mulf_init::@3 to mulf_init::@12 [phi:mulf_init::@3->mulf_init::@12]
  //SEG218 mulf_init::@12
  //SEG219 [116] phi from mulf_init::@12 to mulf_init::@4 [phi:mulf_init::@12->mulf_init::@4]
  //SEG220 [116] phi (byte) mulf_init::dir#3 = (byte) mulf_init::dir#2 [phi:mulf_init::@12->mulf_init::@4#0] -- register_copy 
}
  // mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
  // <f(x) = <(( x * x )/4)
  .align $100
  mulf_sqr1_lo: .fill $200, 0
  // >f(x) = >(( x * x )/4)
  .align $100
  mulf_sqr1_hi: .fill $200, 0
  // <g(x) =  <((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_lo: .fill $200, 0
  // >g(x) = >((( x - 255) * ( x - 255 ))/4)
  .align $100
  mulf_sqr2_hi: .fill $200, 0
  // Positions to rotate
  xs: .byte -$46, -$46, -$46, 0, 0, $46, $46, $46
  ys: .byte -$46, 0, $46, -$46, $46, -$46, 0, $46
.pc = COS "COS"
  {
    .var min = -$7fff
    .var max = $7fff
    .var ampl = max-min;
    .for(var i=0;i<$140;i++) {
        .var rad = i*2*PI/256;
        .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
    }
    }

.pc = SPRITE "SPRITE"
  .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
    .for (var y=0; y<21; y++)
        .for (var x=0;x<3; x++)
            .byte pic.getSinglecolorByte(x,y)


