Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 

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*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*~) $0 ← (byte*) SCREEN#0 + (word/signed word/dword/signed dword) 1016
  (byte*) SPRITES_PTR#0 ← (byte*~) $0
  (byte*) SPRITE#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
  to:@6
main: scope:[main]  from @7
  (signed word) yvel_init#20 ← phi( @7/(signed word) yvel_init#16 )
  (signed word) xvel#20 ← phi( @7/(signed word) xvel#15 )
  (signed word) ypos#20 ← phi( @7/(signed word) ypos#15 )
  (signed word) xpos#20 ← phi( @7/(signed word) xpos#15 )
  (signed word) yvel#18 ← phi( @7/(signed word) yvel#14 )
  call init 
  to:main::@5
main::@5: scope:[main]  from main
  (signed word) yvel_init#19 ← phi( main/(signed word) yvel_init#20 )
  (signed word) xvel#19 ← phi( main/(signed word) xvel#20 )
  (signed word) ypos#19 ← phi( main/(signed word) ypos#20 )
  (signed word) xpos#19 ← phi( main/(signed word) xpos#20 )
  (signed word) yvel#17 ← phi( main/(signed word) yvel#18 )
  to:main::@2
main::@1: scope:[main]  from main::@6
  (signed word) yvel_init#18 ← phi( main::@6/(signed word) yvel_init#0 )
  (signed word) xvel#18 ← phi( main::@6/(signed word) xvel#0 )
  (signed word) ypos#18 ← phi( main::@6/(signed word) ypos#0 )
  (signed word) xpos#18 ← phi( main::@6/(signed word) xpos#0 )
  (signed word) yvel#16 ← phi( main::@6/(signed word) yvel#0 )
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@2 main::@5
  (signed word) yvel_init#17 ← phi( main::@1/(signed word) yvel_init#18 main::@2/(signed word) yvel_init#17 main::@5/(signed word) yvel_init#19 )
  (signed word) xvel#16 ← phi( main::@1/(signed word) xvel#18 main::@2/(signed word) xvel#16 main::@5/(signed word) xvel#19 )
  (signed word) ypos#16 ← phi( main::@1/(signed word) ypos#18 main::@2/(signed word) ypos#16 main::@5/(signed word) ypos#19 )
  (signed word) xpos#16 ← phi( main::@1/(signed word) xpos#18 main::@2/(signed word) xpos#16 main::@5/(signed word) xpos#19 )
  (signed word) yvel#15 ← phi( main::@1/(signed word) yvel#16 main::@2/(signed word) yvel#15 main::@5/(signed word) yvel#17 )
  (bool~) main::$1 ← *((byte*) RASTER#0) != (byte/word/signed word/dword/signed dword) 255
  if((bool~) main::$1) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  (signed word) yvel_init#13 ← phi( main::@2/(signed word) yvel_init#17 )
  (signed word) xvel#12 ← phi( main::@2/(signed word) xvel#16 )
  (signed word) ypos#13 ← phi( main::@2/(signed word) ypos#16 )
  (signed word) xpos#12 ← phi( main::@2/(signed word) xpos#16 )
  (signed word) yvel#12 ← phi( main::@2/(signed word) yvel#15 )
  call anim 
  to:main::@6
main::@6: scope:[main]  from main::@3
  (signed word) yvel_init#7 ← phi( main::@3/(signed word) yvel_init#5 )
  (signed word) xvel#6 ← phi( main::@3/(signed word) xvel#4 )
  (signed word) ypos#7 ← phi( main::@3/(signed word) ypos#5 )
  (signed word) xpos#7 ← phi( main::@3/(signed word) xpos#5 )
  (signed word) yvel#7 ← phi( main::@3/(signed word) yvel#5 )
  (signed word) yvel#0 ← (signed word) yvel#7
  (signed word) xpos#0 ← (signed word) xpos#7
  (signed word) ypos#0 ← (signed word) ypos#7
  (signed word) xvel#0 ← (signed word) xvel#6
  (signed word) yvel_init#0 ← (signed word) yvel_init#7
  if(true) goto main::@1
  to:main::@return
main::@return: scope:[main]  from main::@6
  (signed word) yvel_init#8 ← phi( main::@6/(signed word) yvel_init#0 )
  (signed word) xvel#7 ← phi( main::@6/(signed word) xvel#0 )
  (signed word) ypos#8 ← phi( main::@6/(signed word) ypos#0 )
  (signed word) xpos#8 ← phi( main::@6/(signed word) xpos#0 )
  (signed word) yvel#8 ← phi( main::@6/(signed word) yvel#0 )
  (signed word) yvel#1 ← (signed word) yvel#8
  (signed word) xpos#1 ← (signed word) xpos#8
  (signed word) ypos#1 ← (signed word) ypos#8
  (signed word) xvel#1 ← (signed word) xvel#7
  (signed word) yvel_init#1 ← (signed word) yvel_init#8
  return 
  to:@return
init: scope:[init]  from main
  *((byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) SPRITES_XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  *((byte*) SPRITES_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  *((byte*) SPRITES_COLS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) WHITE#0
  (byte*~) init::$0 ← (byte*) SPRITE#0 / (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte~) init::$1 ← ((byte)) (byte*~) init::$0
  *((byte*) SPRITES_PTR#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) init::$1
  (byte*) init::sc#0 ← (byte*) SCREEN#0
  to:init::@1
init::@1: scope:[init]  from init init::@1
  (byte*) init::sc#2 ← phi( init/(byte*) init::sc#0 init::@1/(byte*) init::sc#1 )
  *((byte*) init::sc#2) ← (byte) ' '
  (byte*) init::sc#1 ← ++ (byte*) init::sc#2
  (byte*~) init::$2 ← (byte*) SCREEN#0 + (word/signed word/dword/signed dword) 1000
  (bool~) init::$3 ← (byte*) init::sc#1 != (byte*~) init::$2
  if((bool~) init::$3) goto init::@1
  to:init::@3
init::@3: scope:[init]  from init::@1
  (byte) init::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:init::@2
init::@2: scope:[init]  from init::@2 init::@3
  (byte) init::i#2 ← phi( init::@2/(byte) init::i#1 init::@3/(byte) init::i#0 )
  *((byte*) SPRITE#0 + (byte) init::i#2) ← (byte/word/signed word/dword/signed dword) 255
  (byte) init::i#1 ← (byte) init::i#2 + rangenext(0,63)
  (bool~) init::$4 ← (byte) init::i#1 != rangelast(0,63)
  if((bool~) init::$4) goto init::@2
  to:init::@return
init::@return: scope:[init]  from init::@2
  return 
  to:@return
@6: scope:[]  from @4
  (signed word) xpos#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) ypos#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) yvel_init#2 ← (byte/signed byte/word/signed word/dword/signed dword) 100
  (signed word) xvel#2 ← (byte/word/signed word/dword/signed dword) 200
  (signed word) yvel#2 ← (signed word) yvel_init#2
  (signed byte/signed word/signed dword~) $1 ← - (byte/signed byte/word/signed word/dword/signed dword) 5
  (signed word) g#0 ← (signed byte/signed word/signed dword~) $1
  to:@7
anim: scope:[anim]  from main::@3
  (signed word) yvel_init#14 ← phi( main::@3/(signed word) yvel_init#13 )
  (signed word) xvel#13 ← phi( main::@3/(signed word) xvel#12 )
  (signed word) xpos#13 ← phi( main::@3/(signed word) xpos#12 )
  (signed word) yvel#13 ← phi( main::@3/(signed word) yvel#12 )
  (signed word) ypos#9 ← phi( main::@3/(signed word) ypos#13 )
  (bool~) anim::$0 ← (signed word) ypos#9 < (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) anim::$1 ← ! (bool~) anim::$0
  if((bool~) anim::$1) goto anim::@1
  to:anim::@3
anim::@1: scope:[anim]  from anim anim::@2
  (signed word) yvel_init#15 ← phi( anim/(signed word) yvel_init#14 anim::@2/(signed word) yvel_init#10 )
  (signed word) ypos#10 ← phi( anim/(signed word) ypos#9 anim::@2/(signed word) ypos#14 )
  (signed word) xvel#8 ← phi( anim/(signed word) xvel#13 anim::@2/(signed word) xvel#14 )
  (signed word) xpos#9 ← phi( anim/(signed word) xpos#13 anim::@2/(signed word) xpos#14 )
  (signed word) yvel#9 ← phi( anim/(signed word) yvel#13 anim::@2/(signed word) yvel#4 )
  (signed word~) anim::$7 ← (signed word) yvel#9 + (signed word) g#0
  (signed word) yvel#3 ← (signed word~) anim::$7
  (signed word~) anim::$8 ← (signed word) xpos#9 + (signed word) xvel#8
  (signed word) xpos#3 ← (signed word~) anim::$8
  (signed word~) anim::$9 ← (signed word) ypos#10 + (signed word) yvel#3
  (signed word) ypos#3 ← (signed word~) anim::$9
  (signed word~) anim::$10 ← (signed word) xpos#3 >> (byte/signed byte/word/signed word/dword/signed dword) 7
  (signed word/signed dword~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160
  (signed word) anim::sprite_x#0 ← (signed word/signed dword~) anim::$11
  (signed word~) anim::$12 ← (signed word) ypos#3 >> (byte/signed byte/word/signed word/dword/signed dword) 5
  (signed word/signed dword~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12
  (signed word) anim::sprite_y#0 ← (signed word/signed dword~) anim::$13
  (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0
  *((byte*) SPRITES_XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$14
  (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0
  *((byte*) SPRITES_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$15
  (byte~) anim::$16 ← > (signed word) anim::sprite_x#0
  *((byte*) SPRITES_XMSB#0) ← (byte~) anim::$16
  to:anim::@return
anim::@3: scope:[anim]  from anim
  (signed word) yvel_init#9 ← phi( anim/(signed word) yvel_init#14 )
  (signed word) xvel#9 ← phi( anim/(signed word) xvel#13 )
  (signed word) xpos#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) ypos#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word~) anim::$2 ← - (signed word) xvel#9
  (signed word) xvel#3 ← (signed word~) anim::$2
  (signed word/signed dword~) anim::$3 ← (signed word) yvel_init#9 - (byte/signed byte/word/signed word/dword/signed dword) 10
  (signed word) yvel_init#3 ← (signed word/signed dword~) anim::$3
  (signed word/signed dword~) anim::$4 ← - (byte/word/signed word/dword/signed dword) 200
  (bool~) anim::$5 ← (signed word) yvel_init#3 < (signed word/signed dword~) anim::$4
  (bool~) anim::$6 ← ! (bool~) anim::$5
  if((bool~) anim::$6) goto anim::@2
  to:anim::@4
anim::@2: scope:[anim]  from anim::@3 anim::@4
  (signed word) ypos#14 ← phi( anim::@3/(signed word) ypos#4 anim::@4/(signed word) ypos#17 )
  (signed word) xvel#14 ← phi( anim::@3/(signed word) xvel#3 anim::@4/(signed word) xvel#17 )
  (signed word) xpos#14 ← phi( anim::@3/(signed word) xpos#4 anim::@4/(signed word) xpos#17 )
  (signed word) yvel_init#10 ← phi( anim::@3/(signed word) yvel_init#3 anim::@4/(signed word) yvel_init#4 )
  (signed word) yvel#4 ← (signed word) yvel_init#10
  to:anim::@1
anim::@4: scope:[anim]  from anim::@3
  (signed word) ypos#17 ← phi( anim::@3/(signed word) ypos#4 )
  (signed word) xvel#17 ← phi( anim::@3/(signed word) xvel#3 )
  (signed word) xpos#17 ← phi( anim::@3/(signed word) xpos#4 )
  (signed word) yvel_init#4 ← (byte/word/signed word/dword/signed dword) 200
  to:anim::@2
anim::@return: scope:[anim]  from anim::@1
  (signed word) yvel_init#11 ← phi( anim::@1/(signed word) yvel_init#15 )
  (signed word) xvel#10 ← phi( anim::@1/(signed word) xvel#8 )
  (signed word) ypos#11 ← phi( anim::@1/(signed word) ypos#3 )
  (signed word) xpos#10 ← phi( anim::@1/(signed word) xpos#3 )
  (signed word) yvel#10 ← phi( anim::@1/(signed word) yvel#3 )
  (signed word) yvel#5 ← (signed word) yvel#10
  (signed word) xpos#5 ← (signed word) xpos#10
  (signed word) ypos#5 ← (signed word) ypos#11
  (signed word) xvel#4 ← (signed word) xvel#10
  (signed word) yvel_init#5 ← (signed word) yvel_init#11
  return 
  to:@return
@7: scope:[]  from @6
  (signed word) yvel_init#16 ← phi( @6/(signed word) yvel_init#2 )
  (signed word) xvel#15 ← phi( @6/(signed word) xvel#2 )
  (signed word) ypos#15 ← phi( @6/(signed word) ypos#2 )
  (signed word) xpos#15 ← phi( @6/(signed word) xpos#2 )
  (signed word) yvel#14 ← phi( @6/(signed word) yvel#2 )
  call main 
  to:@8
@8: scope:[]  from @7
  (signed word) yvel_init#12 ← phi( @7/(signed word) yvel_init#1 )
  (signed word) xvel#11 ← phi( @7/(signed word) xvel#1 )
  (signed word) ypos#12 ← phi( @7/(signed word) ypos#1 )
  (signed word) xpos#11 ← phi( @7/(signed word) xpos#1 )
  (signed word) yvel#11 ← phi( @7/(signed word) yvel#1 )
  (signed word) yvel#6 ← (signed word) yvel#11
  (signed word) xpos#6 ← (signed word) xpos#11
  (signed word) ypos#6 ← (signed word) ypos#12
  (signed word) xvel#5 ← (signed word) xvel#11
  (signed word) yvel_init#6 ← (signed word) yvel_init#12
  to:@end
@end: scope:[]  from @8

SYMBOL TABLE SSA
(byte*~) $0
(signed byte/signed word/signed dword~) $1
(label) @4
(label) @6
(label) @7
(label) @8
(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) 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*) SPRITE
(byte*) SPRITE#0
(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_PTR
(byte*) SPRITES_PTR#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
(bool~) anim::$1
(signed word~) anim::$10
(signed word/signed dword~) anim::$11
(signed word~) anim::$12
(signed word/signed dword~) anim::$13
(byte~) anim::$14
(byte~) anim::$15
(byte~) anim::$16
(signed word~) anim::$2
(signed word/signed dword~) anim::$3
(signed word/signed dword~) anim::$4
(bool~) anim::$5
(bool~) anim::$6
(signed word~) anim::$7
(signed word~) anim::$8
(signed word~) anim::$9
(label) anim::@1
(label) anim::@2
(label) anim::@3
(label) anim::@4
(label) anim::@return
(signed word) anim::sprite_x
(signed word) anim::sprite_x#0
(signed word) anim::sprite_y
(signed word) anim::sprite_y#0
(signed word) g
(signed word) g#0
(void()) init()
(byte*~) init::$0
(byte~) init::$1
(byte*~) init::$2
(bool~) init::$3
(bool~) init::$4
(label) init::@1
(label) init::@2
(label) init::@3
(label) init::@return
(byte) init::i
(byte) init::i#0
(byte) init::i#1
(byte) init::i#2
(byte*) init::sc
(byte*) init::sc#0
(byte*) init::sc#1
(byte*) init::sc#2
(void()) main()
(bool~) main::$1
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@5
(label) main::@6
(label) main::@return
(signed word) xpos
(signed word) xpos#0
(signed word) xpos#1
(signed word) xpos#10
(signed word) xpos#11
(signed word) xpos#12
(signed word) xpos#13
(signed word) xpos#14
(signed word) xpos#15
(signed word) xpos#16
(signed word) xpos#17
(signed word) xpos#18
(signed word) xpos#19
(signed word) xpos#2
(signed word) xpos#20
(signed word) xpos#3
(signed word) xpos#4
(signed word) xpos#5
(signed word) xpos#6
(signed word) xpos#7
(signed word) xpos#8
(signed word) xpos#9
(signed word) xvel
(signed word) xvel#0
(signed word) xvel#1
(signed word) xvel#10
(signed word) xvel#11
(signed word) xvel#12
(signed word) xvel#13
(signed word) xvel#14
(signed word) xvel#15
(signed word) xvel#16
(signed word) xvel#17
(signed word) xvel#18
(signed word) xvel#19
(signed word) xvel#2
(signed word) xvel#20
(signed word) xvel#3
(signed word) xvel#4
(signed word) xvel#5
(signed word) xvel#6
(signed word) xvel#7
(signed word) xvel#8
(signed word) xvel#9
(signed word) ypos
(signed word) ypos#0
(signed word) ypos#1
(signed word) ypos#10
(signed word) ypos#11
(signed word) ypos#12
(signed word) ypos#13
(signed word) ypos#14
(signed word) ypos#15
(signed word) ypos#16
(signed word) ypos#17
(signed word) ypos#18
(signed word) ypos#19
(signed word) ypos#2
(signed word) ypos#20
(signed word) ypos#3
(signed word) ypos#4
(signed word) ypos#5
(signed word) ypos#6
(signed word) ypos#7
(signed word) ypos#8
(signed word) ypos#9
(signed word) yvel
(signed word) yvel#0
(signed word) yvel#1
(signed word) yvel#10
(signed word) yvel#11
(signed word) yvel#12
(signed word) yvel#13
(signed word) yvel#14
(signed word) yvel#15
(signed word) yvel#16
(signed word) yvel#17
(signed word) yvel#18
(signed word) yvel#2
(signed word) yvel#3
(signed word) yvel#4
(signed word) yvel#5
(signed word) yvel#6
(signed word) yvel#7
(signed word) yvel#8
(signed word) yvel#9
(signed word) yvel_init
(signed word) yvel_init#0
(signed word) yvel_init#1
(signed word) yvel_init#10
(signed word) yvel_init#11
(signed word) yvel_init#12
(signed word) yvel_init#13
(signed word) yvel_init#14
(signed word) yvel_init#15
(signed word) yvel_init#16
(signed word) yvel_init#17
(signed word) yvel_init#18
(signed word) yvel_init#19
(signed word) yvel_init#2
(signed word) yvel_init#20
(signed word) yvel_init#3
(signed word) yvel_init#4
(signed word) yvel_init#5
(signed word) yvel_init#6
(signed word) yvel_init#7
(signed word) yvel_init#8
(signed word) yvel_init#9

Inversing boolean not [138] (bool~) anim::$1 ← (signed word) ypos#9 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [137] (bool~) anim::$0 ← (signed word) ypos#9 < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [168] (bool~) anim::$6 ← (signed word) yvel_init#3 >= (signed word/signed dword~) anim::$4 from [167] (bool~) anim::$5 ← (signed word) yvel_init#3 < (signed word/signed dword~) anim::$4
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) SPRITES_PTR#0 = (byte*~) $0 
Alias (signed word) yvel#17 = (signed word) yvel#18 
Alias (signed word) xpos#19 = (signed word) xpos#20 
Alias (signed word) ypos#19 = (signed word) ypos#20 
Alias (signed word) xvel#19 = (signed word) xvel#20 
Alias (signed word) yvel_init#19 = (signed word) yvel_init#20 
Alias (signed word) yvel#0 = (signed word) yvel#16 (signed word) yvel#7 (signed word) yvel#8 (signed word) yvel#1 
Alias (signed word) xpos#0 = (signed word) xpos#18 (signed word) xpos#7 (signed word) xpos#8 (signed word) xpos#1 
Alias (signed word) ypos#0 = (signed word) ypos#18 (signed word) ypos#7 (signed word) ypos#8 (signed word) ypos#1 
Alias (signed word) xvel#0 = (signed word) xvel#18 (signed word) xvel#6 (signed word) xvel#7 (signed word) xvel#1 
Alias (signed word) yvel_init#0 = (signed word) yvel_init#18 (signed word) yvel_init#7 (signed word) yvel_init#8 (signed word) yvel_init#1 
Alias (signed word) yvel#12 = (signed word) yvel#15 
Alias (signed word) xpos#12 = (signed word) xpos#16 
Alias (signed word) ypos#13 = (signed word) ypos#16 
Alias (signed word) xvel#12 = (signed word) xvel#16 
Alias (signed word) yvel_init#13 = (signed word) yvel_init#17 
Alias (signed word) yvel#14 = (signed word) yvel#2 (signed word) yvel_init#2 (signed word) yvel_init#16 
Alias (signed word) g#0 = (signed byte/signed word/signed dword~) $1 
Alias (signed word) yvel#10 = (signed word) yvel#3 (signed word~) anim::$7 (signed word) yvel#5 
Alias (signed word) xpos#10 = (signed word) xpos#3 (signed word~) anim::$8 (signed word) xpos#5 
Alias (signed word) ypos#11 = (signed word) ypos#3 (signed word~) anim::$9 (signed word) ypos#5 
Alias (signed word) anim::sprite_x#0 = (signed word/signed dword~) anim::$11 
Alias (signed word) anim::sprite_y#0 = (signed word/signed dword~) anim::$13 
Alias (signed word) xvel#13 = (signed word) xvel#9 
Alias (signed word) yvel_init#14 = (signed word) yvel_init#9 
Alias (signed word) xvel#17 = (signed word) xvel#3 (signed word~) anim::$2 
Alias (signed word) yvel_init#3 = (signed word/signed dword~) anim::$3 
Alias (signed word) yvel#4 = (signed word) yvel_init#10 
Alias (signed word) xpos#17 = (signed word) xpos#4 
Alias (signed word) ypos#17 = (signed word) ypos#4 
Alias (signed word) xvel#10 = (signed word) xvel#8 (signed word) xvel#4 
Alias (signed word) yvel_init#11 = (signed word) yvel_init#15 (signed word) yvel_init#5 
Alias (signed word) xpos#15 = (signed word) xpos#2 
Alias (signed word) ypos#15 = (signed word) ypos#2 
Alias (signed word) xvel#15 = (signed word) xvel#2 
Alias (signed word) yvel#11 = (signed word) yvel#6 
Alias (signed word) xpos#11 = (signed word) xpos#6 
Alias (signed word) ypos#12 = (signed word) ypos#6 
Alias (signed word) xvel#11 = (signed word) xvel#5 
Alias (signed word) yvel_init#12 = (signed word) yvel_init#6 
Successful SSA optimization Pass2AliasElimination
Alias (signed word) xpos#14 = (signed word) xpos#17 
Alias (signed word) xvel#14 = (signed word) xvel#17 
Alias (signed word) ypos#14 = (signed word) ypos#17 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (signed word) yvel#12
Self Phi Eliminated (signed word) xpos#12
Self Phi Eliminated (signed word) ypos#13
Self Phi Eliminated (signed word) xvel#12
Self Phi Eliminated (signed word) yvel_init#13
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (signed word) yvel#17 (signed word) yvel#14
Redundant Phi (signed word) xpos#19 (signed word) xpos#15
Redundant Phi (signed word) ypos#19 (signed word) ypos#15
Redundant Phi (signed word) xvel#19 (signed word) xvel#15
Redundant Phi (signed word) yvel_init#19 (signed word) yvel#14
Redundant Phi (signed word) yvel#0 (signed word) yvel#10
Redundant Phi (signed word) xpos#0 (signed word) xpos#10
Redundant Phi (signed word) ypos#0 (signed word) ypos#11
Redundant Phi (signed word) xvel#0 (signed word) xvel#10
Redundant Phi (signed word) yvel_init#0 (signed word) yvel_init#11
Redundant Phi (signed word) ypos#9 (signed word) ypos#13
Redundant Phi (signed word) yvel#13 (signed word) yvel#12
Redundant Phi (signed word) xpos#13 (signed word) xpos#12
Redundant Phi (signed word) xvel#13 (signed word) xvel#12
Redundant Phi (signed word) yvel_init#14 (signed word) yvel_init#13
Redundant Phi (signed word) yvel#11 (signed word) yvel#0
Redundant Phi (signed word) xpos#11 (signed word) xpos#0
Redundant Phi (signed word) ypos#12 (signed word) ypos#0
Redundant Phi (signed word) xvel#11 (signed word) xvel#0
Redundant Phi (signed word) yvel_init#12 (signed word) yvel_init#0
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$1 [89] if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2
Simple Condition (bool~) init::$3 [121] if((byte*) init::sc#1!=(byte*~) init::$2) goto init::@1
Simple Condition (bool~) init::$4 [127] if((byte) init::i#1!=rangelast(0,63)) goto init::@2
Simple Condition (bool~) anim::$1 [139] if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1
Simple Condition (bool~) anim::$6 [169] if((signed word) yvel_init#3>=(signed word/signed dword~) anim::$4) goto anim::@2
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*) SCREEN#0 = ((byte*))1024
Constant (const byte*) SPRITE#0 = ((byte*))8192
Constant (const byte) init::i#0 = 0
Constant (const signed word) xpos#15 = 0
Constant (const signed word) ypos#15 = 0
Constant (const signed word) yvel#14 = 100
Constant (const signed word) xvel#15 = 200
Constant (const signed word) g#0 = -5
Constant (const signed word) xpos#14 = 0
Constant (const signed word) ypos#14 = 0
Constant (const signed word/signed dword) anim::$4 = -200
Constant (const signed word) yvel_init#4 = 200
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) SPRITES_PTR#0 = SCREEN#0+1016
Constant (const byte*) init::$0 = SPRITE#0/64
Constant (const byte*) init::sc#0 = SCREEN#0
Constant (const byte*) init::$2 = SCREEN#0+1000
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) init::$1 = ((byte))init::$0
Successful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(SPRITES_XPOS#0+0)
Consolidated array index constant in *(SPRITES_YPOS#0+0)
Consolidated array index constant in *(SPRITES_COLS#0+0)
Consolidated array index constant in *(SPRITES_PTR#0+0)
Consolidated array index constant in *(SPRITES_XPOS#0+0)
Consolidated array index constant in *(SPRITES_YPOS#0+0)
Successful SSA optimization Pass2ConstantAdditionElimination
if() condition always true - replacing block destination [4] if(true) goto main::@1
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@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,63)) goto init::@2 to (byte/signed byte/word/signed word/dword/signed dword) 64
Culled Empty Block (label) @4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@6
Culled Empty Block (label) init::@3
Culled Empty Block (label) @6
Culled Empty Block (label) @8
Successful SSA optimization Pass2CullEmptyBlocks
Inlining constant with var siblings (const byte) init::i#0
Inlining constant with var siblings (const byte*) init::sc#0
Inlining constant with var siblings (const signed word) xpos#15
Inlining constant with var siblings (const signed word) ypos#15
Inlining constant with var siblings (const signed word) yvel#14
Inlining constant with var siblings (const signed word) xvel#15
Inlining constant with var siblings (const signed word) xpos#14
Inlining constant with var siblings (const signed word) ypos#14
Inlining constant with var siblings (const signed word) yvel_init#4
Constant inlined anim::$4 = -(byte/word/signed word/dword/signed dword) 200
Constant inlined init::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined xvel#15 = (byte/word/signed word/dword/signed dword) 200
Constant inlined ypos#14 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined yvel#14 = (byte/signed byte/word/signed word/dword/signed dword) 100
Constant inlined init::$2 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000
Constant inlined ypos#15 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined init::$1 = ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
Constant inlined init::$0 = (const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
Constant inlined xpos#15 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined xpos#14 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined yvel_init#4 = (byte/word/signed word/dword/signed dword) 200
Constant inlined init::sc#0 = (const byte*) SCREEN#0
Successful SSA optimization Pass2ConstantInlining
Simplifying constant plus zero SPRITES_XPOS#0+0
Simplifying constant plus zero SPRITES_YPOS#0+0
Simplifying constant plus zero SPRITES_COLS#0+0
Simplifying constant plus zero SPRITES_PTR#0+0
Simplifying constant plus zero SPRITES_XPOS#0+0
Simplifying constant plus zero SPRITES_YPOS#0+0
Added new block during phi lifting anim::@5(between anim::@3 and anim::@2)
Added new block during phi lifting anim::@6(between anim and anim::@1)
Added new block during phi lifting init::@5(between init::@1 and init::@1)
Added new block during phi lifting init::@6(between init::@2 and init::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @7
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of anim::@4
CALL GRAPH
Calls in [] to main:2 
Calls in [main] to init:5 anim:9 

Created 13 initial phi equivalence classes
Coalesced [10] yvel#19 ← yvel#10
Coalesced [11] xpos#21 ← xpos#10
Coalesced [12] ypos#21 ← ypos#11
Coalesced [13] xvel#21 ← xvel#10
Coalesced [14] yvel_init#21 ← yvel_init#11
Not coalescing [21] yvel#22 ← yvel#4
Coalesced [22] xvel#23 ← xvel#14
Coalesced [23] yvel_init#23 ← yvel#4
Coalesced [39] yvel#20 ← yvel_init#3
Coalesced [40] yvel#21 ← yvel#12
Coalesced [41] xpos#22 ← xpos#12
Coalesced (already) [42] xvel#22 ← xvel#12
Coalesced [43] ypos#22 ← ypos#13
Coalesced (already) [44] yvel_init#22 ← yvel_init#13
Coalesced [61] init::i#3 ← init::i#1
Coalesced [62] init::sc#3 ← init::sc#1
Coalesced down to 7 phi equivalence classes
Culled Empty Block (label) anim::@4
Culled Empty Block (label) anim::@6
Culled Empty Block (label) init::@6
Culled Empty Block (label) init::@5
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @7
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of anim::@5

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@7
@7: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @7
  [3] phi()
main: scope:[main]  from @7
  [4] phi()
  [5] call init 
  to:main::@2
main::@2: scope:[main]  from main main::@2 main::@3
  [6] (signed word) yvel_init#13 ← phi( main::@3/(signed word) yvel_init#11 main/(byte/signed byte/word/signed word/dword/signed dword) 100 )
  [6] (signed word) xvel#12 ← phi( main::@3/(signed word) xvel#10 main/(byte/word/signed word/dword/signed dword) 200 )
  [6] (signed word) ypos#13 ← phi( main::@3/(signed word) ypos#11 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [6] (signed word) xpos#12 ← phi( main::@3/(signed word) xpos#10 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [6] (signed word) yvel#12 ← phi( main::@3/(signed word) yvel#10 main/(byte/signed byte/word/signed word/dword/signed dword) 100 )
  [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  [8] phi()
  [9] call anim 
  to:main::@2
anim: scope:[anim]  from main::@3
  [10] if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1
  to:anim::@3
anim::@3: scope:[anim]  from anim
  [11] (signed word) xvel#14 ← - (signed word) xvel#12
  [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (byte/signed byte/word/signed word/dword/signed dword) 10
  [13] if((signed word) yvel_init#3>=-(byte/word/signed word/dword/signed dword) 200) goto anim::@5
  to:anim::@2
anim::@2: scope:[anim]  from anim::@3 anim::@5
  [14] (signed word) yvel#4 ← phi( anim::@5/(signed word) yvel_init#3 anim::@3/(byte/word/signed word/dword/signed dword) 200 )
  [15] (signed word~) yvel#22 ← (signed word) yvel#4
  to:anim::@1
anim::@1: scope:[anim]  from anim anim::@2
  [16] (signed word) yvel_init#11 ← phi( anim/(signed word) yvel_init#13 anim::@2/(signed word) yvel#4 )
  [16] (signed word) ypos#10 ← phi( anim/(signed word) ypos#13 anim::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [16] (signed word) xvel#10 ← phi( anim/(signed word) xvel#12 anim::@2/(signed word) xvel#14 )
  [16] (signed word) xpos#9 ← phi( anim/(signed word) xpos#12 anim::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [16] (signed word) yvel#9 ← phi( anim/(signed word) yvel#12 anim::@2/(signed word~) yvel#22 )
  [17] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0
  [18] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10
  [19] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10
  [20] (signed word~) anim::$10 ← (signed word) xpos#10 >> (byte/signed byte/word/signed word/dword/signed dword) 7
  [21] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160
  [22] (signed word~) anim::$12 ← (signed word) ypos#11 >> (byte/signed byte/word/signed word/dword/signed dword) 5
  [23] (signed word) anim::sprite_y#0 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12
  [24] (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0
  [25] *((const byte*) SPRITES_XPOS#0) ← (byte~) anim::$14
  [26] (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0
  [27] *((const byte*) SPRITES_YPOS#0) ← (byte~) anim::$15
  [28] (byte~) anim::$16 ← > (signed word) anim::sprite_x#0
  [29] *((const byte*) SPRITES_XMSB#0) ← (byte~) anim::$16
  to:anim::@return
anim::@return: scope:[anim]  from anim::@1
  [30] return 
  to:@return
anim::@5: scope:[anim]  from anim::@3
  [31] phi()
  to:anim::@2
init: scope:[init]  from main
  [32] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1
  [33] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [34] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [35] *((const byte*) SPRITES_XPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  [36] *((const byte*) SPRITES_YPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0
  [38] *((const byte*) SPRITES_PTR#0) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
  to:init::@1
init::@1: scope:[init]  from init init::@1
  [39] (byte*) init::sc#2 ← phi( init/(const byte*) SCREEN#0 init::@1/(byte*) init::sc#1 )
  [40] *((byte*) init::sc#2) ← (byte) ' '
  [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#2
  [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto init::@1
  to:init::@2
init::@2: scope:[init]  from init::@1 init::@2
  [43] (byte) init::i#2 ← phi( init::@2/(byte) init::i#1 init::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte/word/signed word/dword/signed dword) 255
  [45] (byte) init::i#1 ← ++ (byte) init::i#2
  [46] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto init::@2
  to:init::@return
init::@return: scope:[init]  from init::@2
  [47] return 
  to:@return


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) 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*) 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_PTR
(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 4.0
(signed word~) anim::$12 4.0
(byte~) anim::$14 4.0
(byte~) anim::$15 4.0
(byte~) anim::$16 4.0
(signed word) anim::sprite_x
(signed word) anim::sprite_x#0 0.8571428571428571
(signed word) anim::sprite_y
(signed word) anim::sprite_y#0 1.3333333333333333
(signed word) g
(void()) init()
(byte) init::i
(byte) init::i#1 16.5
(byte) init::i#2 16.5
(byte*) init::sc
(byte*) init::sc#1 16.5
(byte*) init::sc#2 16.5
(void()) main()
(signed word) xpos
(signed word) xpos#10 1.0714285714285714
(signed word) xpos#12 3.25
(signed word) xpos#9 2.0
(signed word) xvel
(signed word) xvel#10 1.0625
(signed word) xvel#12 3.75
(signed word) xvel#14 0.6666666666666666
(signed word) ypos
(signed word) ypos#10 1.3333333333333333
(signed word) ypos#11 1.1538461538461537
(signed word) ypos#13 3.75
(signed word) yvel
(signed word) yvel#10 0.9999999999999999
(signed word) yvel#12 3.25
(signed word~) yvel#22 4.0
(signed word) yvel#4 3.0
(signed word) yvel#9 6.0
(signed word) yvel_init
(signed word) yvel_init#11 0.9375
(signed word) yvel_init#13 3.0
(signed word) yvel_init#3 2.0

Initial phi equivalence classes
[ xvel#12 xvel#10 xvel#14 ]
[ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ]
[ yvel#9 yvel#12 yvel#10 yvel#22 ]
[ xpos#9 xpos#12 xpos#10 ]
[ ypos#10 ypos#13 ypos#11 ]
[ init::sc#2 init::sc#1 ]
[ init::i#2 init::i#1 ]
Added variable anim::$10 to zero page equivalence class [ anim::$10 ]
Added variable anim::sprite_x#0 to zero page equivalence class [ anim::sprite_x#0 ]
Added variable anim::$12 to zero page equivalence class [ anim::$12 ]
Added variable anim::sprite_y#0 to zero page equivalence class [ anim::sprite_y#0 ]
Added variable anim::$14 to zero page equivalence class [ anim::$14 ]
Added variable anim::$15 to zero page equivalence class [ anim::$15 ]
Added variable anim::$16 to zero page equivalence class [ anim::$16 ]
Complete equivalence classes
[ xvel#12 xvel#10 xvel#14 ]
[ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ]
[ yvel#9 yvel#12 yvel#10 yvel#22 ]
[ xpos#9 xpos#12 xpos#10 ]
[ ypos#10 ypos#13 ypos#11 ]
[ init::sc#2 init::sc#1 ]
[ init::i#2 init::i#1 ]
[ anim::$10 ]
[ anim::sprite_x#0 ]
[ anim::$12 ]
[ anim::sprite_y#0 ]
[ anim::$14 ]
[ anim::$15 ]
[ anim::$16 ]
Allocated zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ]
Allocated zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ]
Allocated zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ]
Allocated zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ]
Allocated zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ]
Allocated zp ZP_WORD:12 [ init::sc#2 init::sc#1 ]
Allocated zp ZP_BYTE:14 [ init::i#2 init::i#1 ]
Allocated zp ZP_WORD:15 [ anim::$10 ]
Allocated zp ZP_WORD:17 [ anim::sprite_x#0 ]
Allocated zp ZP_WORD:19 [ anim::$12 ]
Allocated zp ZP_WORD:21 [ anim::sprite_y#0 ]
Allocated zp ZP_BYTE:23 [ anim::$14 ]
Allocated zp ZP_BYTE:24 [ anim::$15 ]
Allocated zp ZP_BYTE:25 [ anim::$16 ]

INITIAL ASM
//SEG0 File Comments
//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 SPRITES_EXPAND_Y = $d017
  .label SPRITES_EXPAND_X = $d01d
  .label SPRITES_COLS = $d027
  .const WHITE = 1
  .label SCREEN = $400
  .label SPRITE = $2000
  .const g = -5
  .label SPRITES_PTR = SCREEN+$3f8
  .label yvel_init = 4
  .label yvel = 4
  .label yvel_9 = 6
  .label xpos = 8
  .label ypos = $a
  .label yvel_10 = 6
  .label xvel = 2
  .label yvel_12 = 6
  .label yvel_22 = 6
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @7 [phi:@begin->@7]
b7_from_bbegin:
  jmp b7
//SEG5 @7
b7:
//SEG6 [2] call main 
//SEG7 [4] phi from @7 to main [phi:@7->main]
main_from_b7:
  jsr main
//SEG8 [3] phi from @7 to @end [phi:@7->@end]
bend_from_b7:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call init 
    jsr init
  //SEG12 [6] phi from main to main::@2 [phi:main->main::@2]
  b2_from_main:
  //SEG13 [6] phi (signed word) yvel_init#13 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#0] -- vwsz1=vbuc1 
    lda #<$64
    sta yvel_init
    lda #>$64
    sta yvel_init+1
  //SEG14 [6] phi (signed word) xvel#12 = (byte/word/signed word/dword/signed dword) 200 [phi:main->main::@2#1] -- vwsz1=vbuc1 
    lda #<$c8
    sta xvel
    lda #>$c8
    sta xvel+1
  //SEG15 [6] phi (signed word) ypos#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#2] -- vwsz1=vbuc1 
    lda #<0
    sta ypos
    lda #>0
    sta ypos+1
  //SEG16 [6] phi (signed word) xpos#12 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#3] -- vwsz1=vbuc1 
    lda #<0
    sta xpos
    lda #>0
    sta xpos+1
  //SEG17 [6] phi (signed word) yvel#12 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#4] -- vwsz1=vbuc1 
    lda #<$64
    sta yvel_12
    lda #>$64
    sta yvel_12+1
    jmp b2
  //SEG18 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
  b2_from_b2:
    jmp b2
  //SEG19 main::@2
  b2:
  //SEG20 [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b2_from_b2
  //SEG21 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  b3_from_b2:
    jmp b3
  //SEG22 main::@3
  b3:
  //SEG23 [9] call anim 
    jsr anim
  //SEG24 [6] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
  b2_from_b3:
  //SEG25 [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#11 [phi:main::@3->main::@2#0] -- register_copy 
  //SEG26 [6] phi (signed word) xvel#12 = (signed word) xvel#10 [phi:main::@3->main::@2#1] -- register_copy 
  //SEG27 [6] phi (signed word) ypos#13 = (signed word) ypos#11 [phi:main::@3->main::@2#2] -- register_copy 
  //SEG28 [6] phi (signed word) xpos#12 = (signed word) xpos#10 [phi:main::@3->main::@2#3] -- register_copy 
  //SEG29 [6] phi (signed word) yvel#12 = (signed word) yvel#10 [phi:main::@3->main::@2#4] -- register_copy 
    jmp b2
}
//SEG30 anim
anim: {
    .label _10 = $f
    .label _12 = $13
    .label _14 = $17
    .label _15 = $18
    .label _16 = $19
    .label sprite_x = $11
    .label sprite_y = $15
  //SEG31 [10] if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1 -- vwsz1_ge_0_then_la1 
    lda ypos+1
    bpl b1_from_anim
    jmp b3
  //SEG32 anim::@3
  b3:
  //SEG33 [11] (signed word) xvel#14 ← - (signed word) xvel#12 -- vwsz1=_neg_vwsz1 
    sec
    lda xvel
    eor #$ff
    adc #0
    sta xvel
    lda xvel+1
    eor #$ff
    adc #0
    sta xvel+1
  //SEG34 [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (byte/signed byte/word/signed word/dword/signed dword) 10 -- vwsz1=vwsz1_minus_vbuc1 
    lda yvel_init
    sec
    sbc #<$a
    sta yvel_init
    lda yvel_init+1
    sbc #>$a
    sta yvel_init+1
  //SEG35 [13] if((signed word) yvel_init#3>=-(byte/word/signed word/dword/signed dword) 200) goto anim::@5 -- vwsz1_ge_vwsc1_then_la1 
    lda yvel_init
    cmp #<-$c8
    lda yvel_init+1
    sbc #>-$c8
    bvc !+
    eor #$80
  !:
    bpl b5_from_b3
  //SEG36 [14] phi from anim::@3 to anim::@2 [phi:anim::@3->anim::@2]
  b2_from_b3:
  //SEG37 [14] phi (signed word) yvel#4 = (byte/word/signed word/dword/signed dword) 200 [phi:anim::@3->anim::@2#0] -- vwsz1=vbuc1 
    lda #<$c8
    sta yvel
    lda #>$c8
    sta yvel+1
    jmp b2
  //SEG38 anim::@2
  b2:
  //SEG39 [15] (signed word~) yvel#22 ← (signed word) yvel#4 -- vwsz1=vwsz2 
    lda yvel
    sta yvel_22
    lda yvel+1
    sta yvel_22+1
  //SEG40 [16] phi from anim::@2 to anim::@1 [phi:anim::@2->anim::@1]
  b1_from_b2:
  //SEG41 [16] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@2->anim::@1#0] -- register_copy 
  //SEG42 [16] phi (signed word) ypos#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#1] -- vwsz1=vbuc1 
    lda #<0
    sta ypos
    lda #>0
    sta ypos+1
  //SEG43 [16] phi (signed word) xvel#10 = (signed word) xvel#14 [phi:anim::@2->anim::@1#2] -- register_copy 
  //SEG44 [16] phi (signed word) xpos#9 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#3] -- vwsz1=vbuc1 
    lda #<0
    sta xpos
    lda #>0
    sta xpos+1
  //SEG45 [16] phi (signed word) yvel#9 = (signed word~) yvel#22 [phi:anim::@2->anim::@1#4] -- register_copy 
    jmp b1
  //SEG46 [16] phi from anim to anim::@1 [phi:anim->anim::@1]
  b1_from_anim:
  //SEG47 [16] phi (signed word) yvel_init#11 = (signed word) yvel_init#13 [phi:anim->anim::@1#0] -- register_copy 
  //SEG48 [16] phi (signed word) ypos#10 = (signed word) ypos#13 [phi:anim->anim::@1#1] -- register_copy 
  //SEG49 [16] phi (signed word) xvel#10 = (signed word) xvel#12 [phi:anim->anim::@1#2] -- register_copy 
  //SEG50 [16] phi (signed word) xpos#9 = (signed word) xpos#12 [phi:anim->anim::@1#3] -- register_copy 
  //SEG51 [16] phi (signed word) yvel#9 = (signed word) yvel#12 [phi:anim->anim::@1#4] -- register_copy 
    jmp b1
  //SEG52 anim::@1
  b1:
  //SEG53 [17] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda yvel_10
    adc #<g
    sta yvel_10
    lda yvel_10+1
    adc #>g
    sta yvel_10+1
  //SEG54 [18] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda xpos
    clc
    adc xvel
    sta xpos
    lda xpos+1
    adc xvel+1
    sta xpos+1
  //SEG55 [19] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda ypos
    clc
    adc yvel_10
    sta ypos
    lda ypos+1
    adc yvel_10+1
    sta ypos+1
  //SEG56 [20] (signed word~) anim::$10 ← (signed word) xpos#10 >> (byte/signed byte/word/signed word/dword/signed dword) 7 -- vwsz1=vwsz2_ror_7 
    lda xpos
    sta $ff
    lda xpos+1
    sta _10
    lda #0
    bit xpos+1
    bpl !+
    lda #$ff
  !:
    sta _10+1
    rol $ff
    rol _10
    rol _10+1
  //SEG57 [21] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 -- vwsz1=vwsz2_plus_vbuc1 
    lda _10
    clc
    adc #<$a0
    sta sprite_x
    lda _10+1
    adc #>$a0
    sta sprite_x+1
  //SEG58 [22] (signed word~) anim::$12 ← (signed word) ypos#11 >> (byte/signed byte/word/signed word/dword/signed dword) 5 -- vwsz1=vwsz2_ror_5 
    lda ypos
    sta $ff
    lda ypos+1
    sta _12
    lda #0
    bit ypos+1
    bpl !+
    lda #$ff
  !:
    sta _12+1
    rol $ff
    rol _12
    rol _12+1
    rol $ff
    rol _12
    rol _12+1
    rol $ff
    rol _12
    rol _12+1
  //SEG59 [23] (signed word) anim::sprite_y#0 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 -- vwsz1=vbuc1_minus_vwsz2 
    lda #<$e6
    sec
    sbc _12
    sta sprite_y
    lda #>$e6
    sbc _12+1
    sta sprite_y+1
  //SEG60 [24] (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0 -- vbuz1=_byte_vwsz2 
    lda sprite_x
    sta _14
  //SEG61 [25] *((const byte*) SPRITES_XPOS#0) ← (byte~) anim::$14 -- _deref_pbuc1=vbuz1 
    lda _14
    sta SPRITES_XPOS
  //SEG62 [26] (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0 -- vbuz1=_byte_vwsz2 
    lda sprite_y
    sta _15
  //SEG63 [27] *((const byte*) SPRITES_YPOS#0) ← (byte~) anim::$15 -- _deref_pbuc1=vbuz1 
    lda _15
    sta SPRITES_YPOS
  //SEG64 [28] (byte~) anim::$16 ← > (signed word) anim::sprite_x#0 -- vbuz1=_hi_vwsz2 
    lda sprite_x+1
    sta _16
  //SEG65 [29] *((const byte*) SPRITES_XMSB#0) ← (byte~) anim::$16 -- _deref_pbuc1=vbuz1 
    lda _16
    sta SPRITES_XMSB
    jmp breturn
  //SEG66 anim::@return
  breturn:
  //SEG67 [30] return 
    rts
  //SEG68 [31] phi from anim::@3 to anim::@5 [phi:anim::@3->anim::@5]
  b5_from_b3:
    jmp b5
  //SEG69 anim::@5
  b5:
  //SEG70 [14] phi from anim::@5 to anim::@2 [phi:anim::@5->anim::@2]
  b2_from_b5:
  //SEG71 [14] phi (signed word) yvel#4 = (signed word) yvel_init#3 [phi:anim::@5->anim::@2#0] -- register_copy 
    jmp b2
}
//SEG72 init
// Fill and show a sprite, clear the screen
init: {
    .label sc = $c
    .label i = $e
  //SEG73 [32] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 -- _deref_pbuc1=vbuc2 
    lda #1
    sta SPRITES_ENABLE
  //SEG74 [33] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
  //SEG75 [34] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_Y
  //SEG76 [35] *((const byte*) SPRITES_XPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 -- _deref_pbuc1=vbuc2 
    lda #$64
    sta SPRITES_XPOS
  //SEG77 [36] *((const byte*) SPRITES_YPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 -- _deref_pbuc1=vbuc2 
    lda #$64
    sta SPRITES_YPOS
  //SEG78 [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta SPRITES_COLS
  //SEG79 [38] *((const byte*) SPRITES_PTR#0) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 -- _deref_pbuc1=vbuc2 
    lda #$ff&SPRITE/$40
    sta SPRITES_PTR
  //SEG80 [39] phi from init to init::@1 [phi:init->init::@1]
  b1_from_init:
  //SEG81 [39] phi (byte*) init::sc#2 = (const byte*) SCREEN#0 [phi:init->init::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta sc
    lda #>SCREEN
    sta sc+1
    jmp b1
  //SEG82 [39] phi from init::@1 to init::@1 [phi:init::@1->init::@1]
  b1_from_b1:
  //SEG83 [39] phi (byte*) init::sc#2 = (byte*) init::sc#1 [phi:init::@1->init::@1#0] -- register_copy 
    jmp b1
  //SEG84 init::@1
  b1:
  //SEG85 [40] *((byte*) init::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG86 [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG87 [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto init::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>SCREEN+$3e8
    bne b1_from_b1
    lda sc
    cmp #<SCREEN+$3e8
    bne b1_from_b1
  //SEG88 [43] phi from init::@1 to init::@2 [phi:init::@1->init::@2]
  b2_from_b1:
  //SEG89 [43] phi (byte) init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@1->init::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b2
  //SEG90 [43] phi from init::@2 to init::@2 [phi:init::@2->init::@2]
  b2_from_b2:
  //SEG91 [43] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@2->init::@2#0] -- register_copy 
    jmp b2
  //SEG92 init::@2
  b2:
  //SEG93 [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte/word/signed word/dword/signed dword) 255 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy i
    lda #$ff
    sta SPRITE,y
  //SEG94 [45] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG95 [46] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto init::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #$40
    bne b2_from_b2
    jmp breturn
  //SEG96 init::@return
  breturn:
  //SEG97 [47] return 
    rts
}

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) always clobbers reg byte a 
Statement [10] if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) always clobbers reg byte a 
Statement [11] (signed word) xvel#14 ← - (signed word) xvel#12 [ yvel_init#13 xvel#14 ] ( main:2::anim:9 [ yvel_init#13 xvel#14 ] ) always clobbers reg byte a 
Statement [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (byte/signed byte/word/signed word/dword/signed dword) 10 [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a 
Statement [13] if((signed word) yvel_init#3>=-(byte/word/signed word/dword/signed dword) 200) goto anim::@5 [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a 
Statement [15] (signed word~) yvel#22 ← (signed word) yvel#4 [ xvel#14 yvel#4 yvel#22 ] ( main:2::anim:9 [ xvel#14 yvel#4 yvel#22 ] ) always clobbers reg byte a 
Statement [17] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ( main:2::anim:9 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ) always clobbers reg byte a 
Statement [18] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ( main:2::anim:9 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ) always clobbers reg byte a 
Statement [19] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) always clobbers reg byte a 
Statement [20] (signed word~) anim::$10 ← (signed word) xpos#10 >> (byte/signed byte/word/signed word/dword/signed dword) 7 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$10 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$10 ] ) always clobbers reg byte a 
Statement [21] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ) always clobbers reg byte a 
Statement [22] (signed word~) anim::$12 ← (signed word) ypos#11 >> (byte/signed byte/word/signed word/dword/signed dword) 5 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$12 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$12 ] ) always clobbers reg byte a 
Statement [23] (signed word) anim::sprite_y#0 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 ] ) always clobbers reg byte a 
Statement [24] (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 anim::$14 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 anim::$14 ] ) always clobbers reg byte a 
Statement [26] (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$15 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$15 ] ) always clobbers reg byte a 
Statement [28] (byte~) anim::$16 ← > (signed word) anim::sprite_x#0 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$16 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$16 ] ) always clobbers reg byte a 
Statement [32] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [33] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [34] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [35] *((const byte*) SPRITES_XPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [36] *((const byte*) SPRITES_YPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [38] *((const byte*) SPRITES_PTR#0) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [40] *((byte*) init::sc#2) ← (byte) ' ' [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto init::@1 [ init::sc#1 ] ( main:2::init:5 [ init::sc#1 ] ) always clobbers reg byte a 
Statement [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte/word/signed word/dword/signed dword) 255 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ init::i#2 init::i#1 ]
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) always clobbers reg byte a 
Statement [10] if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) always clobbers reg byte a 
Statement [11] (signed word) xvel#14 ← - (signed word) xvel#12 [ yvel_init#13 xvel#14 ] ( main:2::anim:9 [ yvel_init#13 xvel#14 ] ) always clobbers reg byte a 
Statement [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (byte/signed byte/word/signed word/dword/signed dword) 10 [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a 
Statement [13] if((signed word) yvel_init#3>=-(byte/word/signed word/dword/signed dword) 200) goto anim::@5 [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a 
Statement [15] (signed word~) yvel#22 ← (signed word) yvel#4 [ xvel#14 yvel#4 yvel#22 ] ( main:2::anim:9 [ xvel#14 yvel#4 yvel#22 ] ) always clobbers reg byte a 
Statement [17] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ( main:2::anim:9 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ) always clobbers reg byte a 
Statement [18] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ( main:2::anim:9 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ) always clobbers reg byte a 
Statement [19] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) always clobbers reg byte a 
Statement [20] (signed word~) anim::$10 ← (signed word) xpos#10 >> (byte/signed byte/word/signed word/dword/signed dword) 7 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$10 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$10 ] ) always clobbers reg byte a 
Statement [21] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ) always clobbers reg byte a 
Statement [22] (signed word~) anim::$12 ← (signed word) ypos#11 >> (byte/signed byte/word/signed word/dword/signed dword) 5 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$12 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$12 ] ) always clobbers reg byte a 
Statement [23] (signed word) anim::sprite_y#0 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 ] ) always clobbers reg byte a 
Statement [24] (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 anim::$14 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::sprite_y#0 anim::$14 ] ) always clobbers reg byte a 
Statement [26] (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$15 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 anim::$15 ] ) always clobbers reg byte a 
Statement [28] (byte~) anim::$16 ← > (signed word) anim::sprite_x#0 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$16 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::$16 ] ) always clobbers reg byte a 
Statement [32] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [33] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [34] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [35] *((const byte*) SPRITES_XPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [36] *((const byte*) SPRITES_YPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [38] *((const byte*) SPRITES_PTR#0) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [40] *((byte*) init::sc#2) ← (byte) ' ' [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto init::@1 [ init::sc#1 ] ( main:2::init:5 [ init::sc#1 ] ) always clobbers reg byte a 
Statement [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte/word/signed word/dword/signed dword) 255 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a 
Potential registers zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] : zp ZP_WORD:4 , 
Potential registers zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ] : zp ZP_WORD:6 , 
Potential registers zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] : zp ZP_WORD:8 , 
Potential registers zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] : zp ZP_WORD:10 , 
Potential registers zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] : zp ZP_WORD:12 , 
Potential registers zp ZP_BYTE:14 [ init::i#2 init::i#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:15 [ anim::$10 ] : zp ZP_WORD:15 , 
Potential registers zp ZP_WORD:17 [ anim::sprite_x#0 ] : zp ZP_WORD:17 , 
Potential registers zp ZP_WORD:19 [ anim::$12 ] : zp ZP_WORD:19 , 
Potential registers zp ZP_WORD:21 [ anim::sprite_y#0 ] : zp ZP_WORD:21 , 
Potential registers zp ZP_BYTE:23 [ anim::$14 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:24 [ anim::$15 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:25 [ anim::$16 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [init] 33: zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] 33: zp ZP_BYTE:14 [ init::i#2 init::i#1 ] 
Uplift Scope [] 14.25: zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ] 8.94: zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] 6.32: zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] 6.24: zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] 5.48: zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] 
Uplift Scope [anim] 4: zp ZP_WORD:15 [ anim::$10 ] 4: zp ZP_WORD:19 [ anim::$12 ] 4: zp ZP_BYTE:23 [ anim::$14 ] 4: zp ZP_BYTE:24 [ anim::$15 ] 4: zp ZP_BYTE:25 [ anim::$16 ] 1.33: zp ZP_WORD:21 [ anim::sprite_y#0 ] 0.86: zp ZP_WORD:17 [ anim::sprite_x#0 ] 
Uplift Scope [main] 

Uplifting [init] best 8058 combination zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] 
Uplifting [] best 8058 combination zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] 
Uplifting [anim] best 8040 combination zp ZP_WORD:15 [ anim::$10 ] zp ZP_WORD:19 [ anim::$12 ] reg byte a [ anim::$14 ] reg byte a [ anim::$15 ] reg byte a [ anim::$16 ] zp ZP_WORD:21 [ anim::sprite_y#0 ] zp ZP_WORD:17 [ anim::sprite_x#0 ] 
Uplifting [main] best 8040 combination 
Coalescing zero page register with common assignment [ zp ZP_WORD:15 [ anim::$10 ] ] with [ zp ZP_WORD:17 [ anim::sprite_x#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ anim::$12 ] ] with [ zp ZP_WORD:21 [ anim::sprite_y#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] ] with [ zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] ]
Allocated (was zp ZP_WORD:15) zp ZP_WORD:12 [ anim::$10 anim::sprite_x#0 ]
Allocated (was zp ZP_WORD:19) zp ZP_WORD:14 [ anim::$12 anim::sprite_y#0 ]

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
//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 SPRITES_EXPAND_Y = $d017
  .label SPRITES_EXPAND_X = $d01d
  .label SPRITES_COLS = $d027
  .const WHITE = 1
  .label SCREEN = $400
  .label SPRITE = $2000
  .const g = -5
  .label SPRITES_PTR = SCREEN+$3f8
  .label yvel_init = 4
  .label yvel = 4
  .label yvel_9 = 6
  .label xpos = 8
  .label ypos = $a
  .label yvel_10 = 6
  .label xvel = 2
  .label yvel_12 = 6
  .label yvel_22 = 6
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @7 [phi:@begin->@7]
b7_from_bbegin:
  jmp b7
//SEG5 @7
b7:
//SEG6 [2] call main 
//SEG7 [4] phi from @7 to main [phi:@7->main]
main_from_b7:
  jsr main
//SEG8 [3] phi from @7 to @end [phi:@7->@end]
bend_from_b7:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call init 
    jsr init
  //SEG12 [6] phi from main to main::@2 [phi:main->main::@2]
  b2_from_main:
  //SEG13 [6] phi (signed word) yvel_init#13 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#0] -- vwsz1=vbuc1 
    lda #<$64
    sta yvel_init
    lda #>$64
    sta yvel_init+1
  //SEG14 [6] phi (signed word) xvel#12 = (byte/word/signed word/dword/signed dword) 200 [phi:main->main::@2#1] -- vwsz1=vbuc1 
    lda #<$c8
    sta xvel
    lda #>$c8
    sta xvel+1
  //SEG15 [6] phi (signed word) ypos#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#2] -- vwsz1=vbuc1 
    lda #<0
    sta ypos
    lda #>0
    sta ypos+1
  //SEG16 [6] phi (signed word) xpos#12 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#3] -- vwsz1=vbuc1 
    lda #<0
    sta xpos
    lda #>0
    sta xpos+1
  //SEG17 [6] phi (signed word) yvel#12 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#4] -- vwsz1=vbuc1 
    lda #<$64
    sta yvel_12
    lda #>$64
    sta yvel_12+1
    jmp b2
  //SEG18 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
  b2_from_b2:
    jmp b2
  //SEG19 main::@2
  b2:
  //SEG20 [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b2_from_b2
  //SEG21 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  b3_from_b2:
    jmp b3
  //SEG22 main::@3
  b3:
  //SEG23 [9] call anim 
    jsr anim
  //SEG24 [6] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
  b2_from_b3:
  //SEG25 [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#11 [phi:main::@3->main::@2#0] -- register_copy 
  //SEG26 [6] phi (signed word) xvel#12 = (signed word) xvel#10 [phi:main::@3->main::@2#1] -- register_copy 
  //SEG27 [6] phi (signed word) ypos#13 = (signed word) ypos#11 [phi:main::@3->main::@2#2] -- register_copy 
  //SEG28 [6] phi (signed word) xpos#12 = (signed word) xpos#10 [phi:main::@3->main::@2#3] -- register_copy 
  //SEG29 [6] phi (signed word) yvel#12 = (signed word) yvel#10 [phi:main::@3->main::@2#4] -- register_copy 
    jmp b2
}
//SEG30 anim
anim: {
    .label _10 = $c
    .label _12 = $e
    .label sprite_x = $c
    .label sprite_y = $e
  //SEG31 [10] if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1 -- vwsz1_ge_0_then_la1 
    lda ypos+1
    bpl b1_from_anim
    jmp b3
  //SEG32 anim::@3
  b3:
  //SEG33 [11] (signed word) xvel#14 ← - (signed word) xvel#12 -- vwsz1=_neg_vwsz1 
    sec
    lda xvel
    eor #$ff
    adc #0
    sta xvel
    lda xvel+1
    eor #$ff
    adc #0
    sta xvel+1
  //SEG34 [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (byte/signed byte/word/signed word/dword/signed dword) 10 -- vwsz1=vwsz1_minus_vbuc1 
    lda yvel_init
    sec
    sbc #<$a
    sta yvel_init
    lda yvel_init+1
    sbc #>$a
    sta yvel_init+1
  //SEG35 [13] if((signed word) yvel_init#3>=-(byte/word/signed word/dword/signed dword) 200) goto anim::@5 -- vwsz1_ge_vwsc1_then_la1 
    lda yvel_init
    cmp #<-$c8
    lda yvel_init+1
    sbc #>-$c8
    bvc !+
    eor #$80
  !:
    bpl b5_from_b3
  //SEG36 [14] phi from anim::@3 to anim::@2 [phi:anim::@3->anim::@2]
  b2_from_b3:
  //SEG37 [14] phi (signed word) yvel#4 = (byte/word/signed word/dword/signed dword) 200 [phi:anim::@3->anim::@2#0] -- vwsz1=vbuc1 
    lda #<$c8
    sta yvel
    lda #>$c8
    sta yvel+1
    jmp b2
  //SEG38 anim::@2
  b2:
  //SEG39 [15] (signed word~) yvel#22 ← (signed word) yvel#4 -- vwsz1=vwsz2 
    lda yvel
    sta yvel_22
    lda yvel+1
    sta yvel_22+1
  //SEG40 [16] phi from anim::@2 to anim::@1 [phi:anim::@2->anim::@1]
  b1_from_b2:
  //SEG41 [16] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@2->anim::@1#0] -- register_copy 
  //SEG42 [16] phi (signed word) ypos#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#1] -- vwsz1=vbuc1 
    lda #<0
    sta ypos
    lda #>0
    sta ypos+1
  //SEG43 [16] phi (signed word) xvel#10 = (signed word) xvel#14 [phi:anim::@2->anim::@1#2] -- register_copy 
  //SEG44 [16] phi (signed word) xpos#9 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#3] -- vwsz1=vbuc1 
    lda #<0
    sta xpos
    lda #>0
    sta xpos+1
  //SEG45 [16] phi (signed word) yvel#9 = (signed word~) yvel#22 [phi:anim::@2->anim::@1#4] -- register_copy 
    jmp b1
  //SEG46 [16] phi from anim to anim::@1 [phi:anim->anim::@1]
  b1_from_anim:
  //SEG47 [16] phi (signed word) yvel_init#11 = (signed word) yvel_init#13 [phi:anim->anim::@1#0] -- register_copy 
  //SEG48 [16] phi (signed word) ypos#10 = (signed word) ypos#13 [phi:anim->anim::@1#1] -- register_copy 
  //SEG49 [16] phi (signed word) xvel#10 = (signed word) xvel#12 [phi:anim->anim::@1#2] -- register_copy 
  //SEG50 [16] phi (signed word) xpos#9 = (signed word) xpos#12 [phi:anim->anim::@1#3] -- register_copy 
  //SEG51 [16] phi (signed word) yvel#9 = (signed word) yvel#12 [phi:anim->anim::@1#4] -- register_copy 
    jmp b1
  //SEG52 anim::@1
  b1:
  //SEG53 [17] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda yvel_10
    adc #<g
    sta yvel_10
    lda yvel_10+1
    adc #>g
    sta yvel_10+1
  //SEG54 [18] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda xpos
    clc
    adc xvel
    sta xpos
    lda xpos+1
    adc xvel+1
    sta xpos+1
  //SEG55 [19] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda ypos
    clc
    adc yvel_10
    sta ypos
    lda ypos+1
    adc yvel_10+1
    sta ypos+1
  //SEG56 [20] (signed word~) anim::$10 ← (signed word) xpos#10 >> (byte/signed byte/word/signed word/dword/signed dword) 7 -- vwsz1=vwsz2_ror_7 
    lda xpos
    sta $ff
    lda xpos+1
    sta _10
    lda #0
    bit xpos+1
    bpl !+
    lda #$ff
  !:
    sta _10+1
    rol $ff
    rol _10
    rol _10+1
  //SEG57 [21] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 -- vwsz1=vwsz1_plus_vbuc1 
    clc
    lda sprite_x
    adc #<$a0
    sta sprite_x
    lda sprite_x+1
    adc #>$a0
    sta sprite_x+1
  //SEG58 [22] (signed word~) anim::$12 ← (signed word) ypos#11 >> (byte/signed byte/word/signed word/dword/signed dword) 5 -- vwsz1=vwsz2_ror_5 
    lda ypos
    sta $ff
    lda ypos+1
    sta _12
    lda #0
    bit ypos+1
    bpl !+
    lda #$ff
  !:
    sta _12+1
    rol $ff
    rol _12
    rol _12+1
    rol $ff
    rol _12
    rol _12+1
    rol $ff
    rol _12
    rol _12+1
  //SEG59 [23] (signed word) anim::sprite_y#0 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 -- vwsz1=vbuc1_minus_vwsz1 
    lda #<$e6
    sec
    sbc sprite_y
    sta sprite_y
    lda #>$e6
    sbc sprite_y+1
    sta sprite_y+1
  //SEG60 [24] (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0 -- vbuaa=_byte_vwsz1 
    lda sprite_x
  //SEG61 [25] *((const byte*) SPRITES_XPOS#0) ← (byte~) anim::$14 -- _deref_pbuc1=vbuaa 
    sta SPRITES_XPOS
  //SEG62 [26] (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0 -- vbuaa=_byte_vwsz1 
    lda sprite_y
  //SEG63 [27] *((const byte*) SPRITES_YPOS#0) ← (byte~) anim::$15 -- _deref_pbuc1=vbuaa 
    sta SPRITES_YPOS
  //SEG64 [28] (byte~) anim::$16 ← > (signed word) anim::sprite_x#0 -- vbuaa=_hi_vwsz1 
    lda sprite_x+1
  //SEG65 [29] *((const byte*) SPRITES_XMSB#0) ← (byte~) anim::$16 -- _deref_pbuc1=vbuaa 
    sta SPRITES_XMSB
    jmp breturn
  //SEG66 anim::@return
  breturn:
  //SEG67 [30] return 
    rts
  //SEG68 [31] phi from anim::@3 to anim::@5 [phi:anim::@3->anim::@5]
  b5_from_b3:
    jmp b5
  //SEG69 anim::@5
  b5:
  //SEG70 [14] phi from anim::@5 to anim::@2 [phi:anim::@5->anim::@2]
  b2_from_b5:
  //SEG71 [14] phi (signed word) yvel#4 = (signed word) yvel_init#3 [phi:anim::@5->anim::@2#0] -- register_copy 
    jmp b2
}
//SEG72 init
// Fill and show a sprite, clear the screen
init: {
    .label sc = 2
  //SEG73 [32] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 -- _deref_pbuc1=vbuc2 
    lda #1
    sta SPRITES_ENABLE
  //SEG74 [33] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
  //SEG75 [34] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_Y
  //SEG76 [35] *((const byte*) SPRITES_XPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 -- _deref_pbuc1=vbuc2 
    lda #$64
    sta SPRITES_XPOS
  //SEG77 [36] *((const byte*) SPRITES_YPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 -- _deref_pbuc1=vbuc2 
    lda #$64
    sta SPRITES_YPOS
  //SEG78 [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta SPRITES_COLS
  //SEG79 [38] *((const byte*) SPRITES_PTR#0) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 -- _deref_pbuc1=vbuc2 
    lda #$ff&SPRITE/$40
    sta SPRITES_PTR
  //SEG80 [39] phi from init to init::@1 [phi:init->init::@1]
  b1_from_init:
  //SEG81 [39] phi (byte*) init::sc#2 = (const byte*) SCREEN#0 [phi:init->init::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta sc
    lda #>SCREEN
    sta sc+1
    jmp b1
  //SEG82 [39] phi from init::@1 to init::@1 [phi:init::@1->init::@1]
  b1_from_b1:
  //SEG83 [39] phi (byte*) init::sc#2 = (byte*) init::sc#1 [phi:init::@1->init::@1#0] -- register_copy 
    jmp b1
  //SEG84 init::@1
  b1:
  //SEG85 [40] *((byte*) init::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG86 [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG87 [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto init::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>SCREEN+$3e8
    bne b1_from_b1
    lda sc
    cmp #<SCREEN+$3e8
    bne b1_from_b1
  //SEG88 [43] phi from init::@1 to init::@2 [phi:init::@1->init::@2]
  b2_from_b1:
  //SEG89 [43] phi (byte) init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@1->init::@2#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b2
  //SEG90 [43] phi from init::@2 to init::@2 [phi:init::@2->init::@2]
  b2_from_b2:
  //SEG91 [43] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@2->init::@2#0] -- register_copy 
    jmp b2
  //SEG92 init::@2
  b2:
  //SEG93 [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte/word/signed word/dword/signed dword) 255 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #$ff
    sta SPRITE,x
  //SEG94 [45] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG95 [46] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto init::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$40
    bne b2_from_b2
    jmp breturn
  //SEG96 init::@return
  breturn:
  //SEG97 [47] return 
    rts
}

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b7
Removing instruction jmp bend
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #>0
Removing instruction lda #<0
Removing instruction lda #>0
Removing instruction lda #>0
Removing instruction lda #<0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction lda #$64
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b2_from_b2 with b2
Replacing label b1_from_anim with b1
Replacing label b5_from_b3 with b5
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Removing instruction b7_from_bbegin:
Removing instruction b7:
Removing instruction main_from_b7:
Removing instruction bend_from_b7:
Removing instruction b2_from_b2:
Removing instruction b3_from_b2:
Removing instruction b1_from_anim:
Removing instruction b5_from_b3:
Removing instruction b2_from_b5:
Removing instruction b1_from_b1:
Removing instruction b2_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction b2_from_main:
Removing instruction b3:
Removing instruction b2_from_b3:
Removing instruction b3:
Removing instruction b2_from_b3:
Removing instruction b1_from_b2:
Removing instruction breturn:
Removing instruction b1_from_init:
Removing instruction b2_from_b1:
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 b2 in bpl b5
Succesful ASM optimization Pass5DoubleJumpElimination
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Removing instruction b5:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction jmp b2
Succesful ASM optimization Pass5UnreachableCodeElimination

FINAL SYMBOL TABLE
(label) @7
(label) @begin
(label) @end
(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) 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
(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*) SPRITE
(const byte*) SPRITE#0 SPRITE = ((byte*))(word/signed word/dword/signed dword) 8192
(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
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word/dword/signed dword) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word/dword/signed dword) 53271
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PTR
(const byte*) SPRITES_PTR#0 SPRITES_PTR = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1016
(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
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
(void()) anim()
(signed word~) anim::$10 $10 zp ZP_WORD:12 4.0
(signed word~) anim::$12 $12 zp ZP_WORD:14 4.0
(byte~) anim::$14 reg byte a 4.0
(byte~) anim::$15 reg byte a 4.0
(byte~) anim::$16 reg byte a 4.0
(label) anim::@1
(label) anim::@2
(label) anim::@3
(label) anim::@5
(label) anim::@return
(signed word) anim::sprite_x
(signed word) anim::sprite_x#0 sprite_x zp ZP_WORD:12 0.8571428571428571
(signed word) anim::sprite_y
(signed word) anim::sprite_y#0 sprite_y zp ZP_WORD:14 1.3333333333333333
(signed word) g
(const signed word) g#0 g = -(byte/signed byte/word/signed word/dword/signed dword) 5
(void()) init()
(label) init::@1
(label) init::@2
(label) init::@return
(byte) init::i
(byte) init::i#1 reg byte x 16.5
(byte) init::i#2 reg byte x 16.5
(byte*) init::sc
(byte*) init::sc#1 sc zp ZP_WORD:2 16.5
(byte*) init::sc#2 sc zp ZP_WORD:2 16.5
(void()) main()
(label) main::@2
(label) main::@3
(signed word) xpos
(signed word) xpos#10 xpos zp ZP_WORD:8 1.0714285714285714
(signed word) xpos#12 xpos zp ZP_WORD:8 3.25
(signed word) xpos#9 xpos zp ZP_WORD:8 2.0
(signed word) xvel
(signed word) xvel#10 xvel zp ZP_WORD:2 1.0625
(signed word) xvel#12 xvel zp ZP_WORD:2 3.75
(signed word) xvel#14 xvel zp ZP_WORD:2 0.6666666666666666
(signed word) ypos
(signed word) ypos#10 ypos zp ZP_WORD:10 1.3333333333333333
(signed word) ypos#11 ypos zp ZP_WORD:10 1.1538461538461537
(signed word) ypos#13 ypos zp ZP_WORD:10 3.75
(signed word) yvel
(signed word) yvel#10 yvel#10 zp ZP_WORD:6 0.9999999999999999
(signed word) yvel#12 yvel#12 zp ZP_WORD:6 3.25
(signed word~) yvel#22 yvel#22 zp ZP_WORD:6 4.0
(signed word) yvel#4 yvel zp ZP_WORD:4 3.0
(signed word) yvel#9 yvel#9 zp ZP_WORD:6 6.0
(signed word) yvel_init
(signed word) yvel_init#11 yvel_init zp ZP_WORD:4 0.9375
(signed word) yvel_init#13 yvel_init zp ZP_WORD:4 3.0
(signed word) yvel_init#3 yvel_init zp ZP_WORD:4 2.0

zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 init::sc#2 init::sc#1 ]
zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ]
zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ]
zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ]
zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:12 [ anim::$10 anim::sprite_x#0 ]
zp ZP_WORD:14 [ anim::$12 anim::sprite_y#0 ]
reg byte a [ anim::$14 ]
reg byte a [ anim::$15 ]
reg byte a [ anim::$16 ]


FINAL ASSEMBLER
Score: 6617

//SEG0 File Comments
//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 SPRITES_EXPAND_Y = $d017
  .label SPRITES_EXPAND_X = $d01d
  .label SPRITES_COLS = $d027
  .const WHITE = 1
  .label SCREEN = $400
  .label SPRITE = $2000
  .const g = -5
  .label SPRITES_PTR = SCREEN+$3f8
  .label yvel_init = 4
  .label yvel = 4
  .label yvel_9 = 6
  .label xpos = 8
  .label ypos = $a
  .label yvel_10 = 6
  .label xvel = 2
  .label yvel_12 = 6
  .label yvel_22 = 6
//SEG3 @begin
//SEG4 [1] phi from @begin to @7 [phi:@begin->@7]
//SEG5 @7
//SEG6 [2] call main 
//SEG7 [4] phi from @7 to main [phi:@7->main]
//SEG8 [3] phi from @7 to @end [phi:@7->@end]
//SEG9 @end
//SEG10 main
main: {
  //SEG11 [5] call init 
    jsr init
  //SEG12 [6] phi from main to main::@2 [phi:main->main::@2]
  //SEG13 [6] phi (signed word) yvel_init#13 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#0] -- vwsz1=vbuc1 
    lda #<$64
    sta yvel_init
    lda #>$64
    sta yvel_init+1
  //SEG14 [6] phi (signed word) xvel#12 = (byte/word/signed word/dword/signed dword) 200 [phi:main->main::@2#1] -- vwsz1=vbuc1 
    lda #<$c8
    sta xvel
    lda #>$c8
    sta xvel+1
  //SEG15 [6] phi (signed word) ypos#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#2] -- vwsz1=vbuc1 
    lda #<0
    sta ypos
    sta ypos+1
  //SEG16 [6] phi (signed word) xpos#12 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#3] -- vwsz1=vbuc1 
    sta xpos
    sta xpos+1
  //SEG17 [6] phi (signed word) yvel#12 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#4] -- vwsz1=vbuc1 
    lda #<$64
    sta yvel_12
    lda #>$64
    sta yvel_12+1
  //SEG18 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
  //SEG19 main::@2
  b2:
  //SEG20 [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b2
  //SEG21 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  //SEG22 main::@3
  //SEG23 [9] call anim 
    jsr anim
  //SEG24 [6] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
  //SEG25 [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#11 [phi:main::@3->main::@2#0] -- register_copy 
  //SEG26 [6] phi (signed word) xvel#12 = (signed word) xvel#10 [phi:main::@3->main::@2#1] -- register_copy 
  //SEG27 [6] phi (signed word) ypos#13 = (signed word) ypos#11 [phi:main::@3->main::@2#2] -- register_copy 
  //SEG28 [6] phi (signed word) xpos#12 = (signed word) xpos#10 [phi:main::@3->main::@2#3] -- register_copy 
  //SEG29 [6] phi (signed word) yvel#12 = (signed word) yvel#10 [phi:main::@3->main::@2#4] -- register_copy 
    jmp b2
}
//SEG30 anim
anim: {
    .label _10 = $c
    .label _12 = $e
    .label sprite_x = $c
    .label sprite_y = $e
  //SEG31 [10] if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1 -- vwsz1_ge_0_then_la1 
    lda ypos+1
    bpl b1
  //SEG32 anim::@3
  //SEG33 [11] (signed word) xvel#14 ← - (signed word) xvel#12 -- vwsz1=_neg_vwsz1 
    sec
    lda xvel
    eor #$ff
    adc #0
    sta xvel
    lda xvel+1
    eor #$ff
    adc #0
    sta xvel+1
  //SEG34 [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (byte/signed byte/word/signed word/dword/signed dword) 10 -- vwsz1=vwsz1_minus_vbuc1 
    lda yvel_init
    sec
    sbc #<$a
    sta yvel_init
    lda yvel_init+1
    sbc #>$a
    sta yvel_init+1
  //SEG35 [13] if((signed word) yvel_init#3>=-(byte/word/signed word/dword/signed dword) 200) goto anim::@5 -- vwsz1_ge_vwsc1_then_la1 
    lda yvel_init
    cmp #<-$c8
    lda yvel_init+1
    sbc #>-$c8
    bvc !+
    eor #$80
  !:
    bpl b2
  //SEG36 [14] phi from anim::@3 to anim::@2 [phi:anim::@3->anim::@2]
  //SEG37 [14] phi (signed word) yvel#4 = (byte/word/signed word/dword/signed dword) 200 [phi:anim::@3->anim::@2#0] -- vwsz1=vbuc1 
    lda #<$c8
    sta yvel
    lda #>$c8
    sta yvel+1
  //SEG38 anim::@2
  b2:
  //SEG39 [15] (signed word~) yvel#22 ← (signed word) yvel#4 -- vwsz1=vwsz2 
    lda yvel
    sta yvel_22
    lda yvel+1
    sta yvel_22+1
  //SEG40 [16] phi from anim::@2 to anim::@1 [phi:anim::@2->anim::@1]
  //SEG41 [16] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@2->anim::@1#0] -- register_copy 
  //SEG42 [16] phi (signed word) ypos#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#1] -- vwsz1=vbuc1 
    lda #<0
    sta ypos
    sta ypos+1
  //SEG43 [16] phi (signed word) xvel#10 = (signed word) xvel#14 [phi:anim::@2->anim::@1#2] -- register_copy 
  //SEG44 [16] phi (signed word) xpos#9 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#3] -- vwsz1=vbuc1 
    sta xpos
    sta xpos+1
  //SEG45 [16] phi (signed word) yvel#9 = (signed word~) yvel#22 [phi:anim::@2->anim::@1#4] -- register_copy 
  //SEG46 [16] phi from anim to anim::@1 [phi:anim->anim::@1]
  //SEG47 [16] phi (signed word) yvel_init#11 = (signed word) yvel_init#13 [phi:anim->anim::@1#0] -- register_copy 
  //SEG48 [16] phi (signed word) ypos#10 = (signed word) ypos#13 [phi:anim->anim::@1#1] -- register_copy 
  //SEG49 [16] phi (signed word) xvel#10 = (signed word) xvel#12 [phi:anim->anim::@1#2] -- register_copy 
  //SEG50 [16] phi (signed word) xpos#9 = (signed word) xpos#12 [phi:anim->anim::@1#3] -- register_copy 
  //SEG51 [16] phi (signed word) yvel#9 = (signed word) yvel#12 [phi:anim->anim::@1#4] -- register_copy 
  //SEG52 anim::@1
  b1:
  //SEG53 [17] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 -- vwsz1=vwsz1_plus_vwsc1 
    clc
    lda yvel_10
    adc #<g
    sta yvel_10
    lda yvel_10+1
    adc #>g
    sta yvel_10+1
  //SEG54 [18] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda xpos
    clc
    adc xvel
    sta xpos
    lda xpos+1
    adc xvel+1
    sta xpos+1
  //SEG55 [19] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 -- vwsz1=vwsz1_plus_vwsz2 
    lda ypos
    clc
    adc yvel_10
    sta ypos
    lda ypos+1
    adc yvel_10+1
    sta ypos+1
  //SEG56 [20] (signed word~) anim::$10 ← (signed word) xpos#10 >> (byte/signed byte/word/signed word/dword/signed dword) 7 -- vwsz1=vwsz2_ror_7 
    lda xpos
    sta $ff
    lda xpos+1
    sta _10
    lda #0
    bit xpos+1
    bpl !+
    lda #$ff
  !:
    sta _10+1
    rol $ff
    rol _10
    rol _10+1
  //SEG57 [21] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 -- vwsz1=vwsz1_plus_vbuc1 
    clc
    lda sprite_x
    adc #<$a0
    sta sprite_x
    lda sprite_x+1
    adc #>$a0
    sta sprite_x+1
  //SEG58 [22] (signed word~) anim::$12 ← (signed word) ypos#11 >> (byte/signed byte/word/signed word/dword/signed dword) 5 -- vwsz1=vwsz2_ror_5 
    lda ypos
    sta $ff
    lda ypos+1
    sta _12
    lda #0
    bit ypos+1
    bpl !+
    lda #$ff
  !:
    sta _12+1
    rol $ff
    rol _12
    rol _12+1
    rol $ff
    rol _12
    rol _12+1
    rol $ff
    rol _12
    rol _12+1
  //SEG59 [23] (signed word) anim::sprite_y#0 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12 -- vwsz1=vbuc1_minus_vwsz1 
    lda #<$e6
    sec
    sbc sprite_y
    sta sprite_y
    lda #>$e6
    sbc sprite_y+1
    sta sprite_y+1
  //SEG60 [24] (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x#0 -- vbuaa=_byte_vwsz1 
    lda sprite_x
  //SEG61 [25] *((const byte*) SPRITES_XPOS#0) ← (byte~) anim::$14 -- _deref_pbuc1=vbuaa 
    sta SPRITES_XPOS
  //SEG62 [26] (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y#0 -- vbuaa=_byte_vwsz1 
    lda sprite_y
  //SEG63 [27] *((const byte*) SPRITES_YPOS#0) ← (byte~) anim::$15 -- _deref_pbuc1=vbuaa 
    sta SPRITES_YPOS
  //SEG64 [28] (byte~) anim::$16 ← > (signed word) anim::sprite_x#0 -- vbuaa=_hi_vwsz1 
    lda sprite_x+1
  //SEG65 [29] *((const byte*) SPRITES_XMSB#0) ← (byte~) anim::$16 -- _deref_pbuc1=vbuaa 
    sta SPRITES_XMSB
  //SEG66 anim::@return
  //SEG67 [30] return 
    rts
  //SEG68 [31] phi from anim::@3 to anim::@5 [phi:anim::@3->anim::@5]
  //SEG69 anim::@5
  //SEG70 [14] phi from anim::@5 to anim::@2 [phi:anim::@5->anim::@2]
  //SEG71 [14] phi (signed word) yvel#4 = (signed word) yvel_init#3 [phi:anim::@5->anim::@2#0] -- register_copy 
}
//SEG72 init
// Fill and show a sprite, clear the screen
init: {
    .label sc = 2
  //SEG73 [32] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 -- _deref_pbuc1=vbuc2 
    lda #1
    sta SPRITES_ENABLE
  //SEG74 [33] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
  //SEG75 [34] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    sta SPRITES_EXPAND_Y
  //SEG76 [35] *((const byte*) SPRITES_XPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 -- _deref_pbuc1=vbuc2 
    lda #$64
    sta SPRITES_XPOS
  //SEG77 [36] *((const byte*) SPRITES_YPOS#0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 -- _deref_pbuc1=vbuc2 
    sta SPRITES_YPOS
  //SEG78 [37] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0 -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta SPRITES_COLS
  //SEG79 [38] *((const byte*) SPRITES_PTR#0) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 -- _deref_pbuc1=vbuc2 
    lda #$ff&SPRITE/$40
    sta SPRITES_PTR
  //SEG80 [39] phi from init to init::@1 [phi:init->init::@1]
  //SEG81 [39] phi (byte*) init::sc#2 = (const byte*) SCREEN#0 [phi:init->init::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta sc
    lda #>SCREEN
    sta sc+1
  //SEG82 [39] phi from init::@1 to init::@1 [phi:init::@1->init::@1]
  //SEG83 [39] phi (byte*) init::sc#2 = (byte*) init::sc#1 [phi:init::@1->init::@1#0] -- register_copy 
  //SEG84 init::@1
  b1:
  //SEG85 [40] *((byte*) init::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG86 [41] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG87 [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto init::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>SCREEN+$3e8
    bne b1
    lda sc
    cmp #<SCREEN+$3e8
    bne b1
  //SEG88 [43] phi from init::@1 to init::@2 [phi:init::@1->init::@2]
  //SEG89 [43] phi (byte) init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@1->init::@2#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG90 [43] phi from init::@2 to init::@2 [phi:init::@2->init::@2]
  //SEG91 [43] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@2->init::@2#0] -- register_copy 
  //SEG92 init::@2
  b2:
  //SEG93 [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte/word/signed word/dword/signed dword) 255 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #$ff
    sta SPRITE,x
  //SEG94 [45] (byte) init::i#1 ← ++ (byte) init::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG95 [46] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto init::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$40
    bne b2
  //SEG96 init::@return
  //SEG97 [47] return 
    rts
}

