PARSING src/test/java/dk/camelot64/kickc/test/kc/signed-words.kc
import "c64"

const byte* SCREEN = $0400;
const byte* SPRITES_PTR = SCREEN+$3f8;
const byte* SPRITE = $2000;

void main() {
    init();
    do {
        do { } while (*RASTER!=$ff);
        anim();
    } while(true);
}

// Fill and show a sprite, clear the screen
void init() {
    *SPRITES_ENABLE = %00000001;
    *SPRITES_EXPAND_X = 0;
    *SPRITES_EXPAND_Y = 0;
    SPRITES_XPOS[0] = 100;
    SPRITES_YPOS[0] = 100;
    SPRITES_COLS[0] = WHITE;
    SPRITES_PTR[0] = (byte)(SPRITE/$40);
    for(byte* sc=SCREEN; sc!=SCREEN+1000; sc++ ) {
        *sc = ' ';
    }
    for(byte i : 0..63) {
        SPRITE[i] = $ff;
    }
}

signed word xpos = 0;
signed word ypos = 0;

signed word yvel_init = 100;

signed word xvel = 200;
signed word yvel = yvel_init;

const signed word g = -5;

void anim() {

    // Check if the object has hit the ground
    if(ypos<0) {
        // Reset position
        xpos = 0;
        ypos = 0;
        // Modify initial velocities
        xvel = -xvel;
        yvel_init = yvel_init-10;
        if(yvel_init<-200) {
            // Reset y velocity
            yvel_init = 200;
        }
        yvel = yvel_init;
    }

    // Move object
    yvel = yvel + g;
    xpos = xpos + xvel;
    ypos = ypos + yvel;


   signed word sprite_x = xpos>>7 + 160;
   signed word sprite_y = 230 - ypos>>5;

   SPRITES_XPOS[0] = (byte)sprite_x;
   SPRITES_YPOS[0] = (byte)sprite_y;
   *SPRITES_XMSB = >sprite_x;

}

Importing c64
PARSING src/test/java/dk/camelot64/kickc/test/kc/c64.kc
const byte* PROCPORT = $01;

const byte* CHARGEN = $d000;

const byte* SPRITES_XPOS = $d000;
const byte* SPRITES_YPOS = $d001;
const byte* SPRITES_XMSB = $d010;
const byte* RASTER = $d012;
const byte* SPRITES_ENABLE = $d015;
const byte* SPRITES_EXPAND_Y = $d017;
const byte* SPRITES_PRIORITY = $d01b;
const byte* SPRITES_MC = $d01c;
const byte* SPRITES_EXPAND_X = $d01d;
const byte* BORDERCOL = $d020;
const byte* BGCOL = $d021;
const byte* SPRITES_MC1 = $d025;
const byte* SPRITES_MC2 = $d026;
const byte* SPRITES_COLS = $d027;

const byte* COLS = $d800;


const byte BLACK = $0;
const byte WHITE = $1;
const byte RED = $2;
const byte CYAN = $3;
const byte PURPLE = $4;
const byte GREEN = $5;
const byte BLUE = $6;
const byte YELLOW = $7;
const byte ORANGE = $8;
const byte BROWN = $9;
const byte PINK = $a;
const byte DARK_GREY= $b;
const byte GREY = $c;
const byte LIGHT_GREEN = $d;
const byte LIGHT_BLUE = $e;
const byte LIGHT_GREY = $f;

Adding pre/post-modifier (byte*) init::sc ← ++ (byte*) init::sc

STATEMENTS
  (byte*) PROCPORT ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte*) CHARGEN ← (word/dword/signed dword) 53248
  (byte*) SPRITES_XPOS ← (word/dword/signed dword) 53248
  (byte*) SPRITES_YPOS ← (word/dword/signed dword) 53249
  (byte*) SPRITES_XMSB ← (word/dword/signed dword) 53264
  (byte*) RASTER ← (word/dword/signed dword) 53266
  (byte*) SPRITES_ENABLE ← (word/dword/signed dword) 53269
  (byte*) SPRITES_EXPAND_Y ← (word/dword/signed dword) 53271
  (byte*) SPRITES_PRIORITY ← (word/dword/signed dword) 53275
  (byte*) SPRITES_MC ← (word/dword/signed dword) 53276
  (byte*) SPRITES_EXPAND_X ← (word/dword/signed dword) 53277
  (byte*) BORDERCOL ← (word/dword/signed dword) 53280
  (byte*) BGCOL ← (word/dword/signed dword) 53281
  (byte*) SPRITES_MC1 ← (word/dword/signed dword) 53285
  (byte*) SPRITES_MC2 ← (word/dword/signed dword) 53286
  (byte*) SPRITES_COLS ← (word/dword/signed dword) 53287
  (byte*) COLS ← (word/dword/signed dword) 55296
  (byte) BLACK ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) WHITE ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) CYAN ← (byte/signed byte/word/signed word/dword/signed dword) 3
  (byte) PURPLE ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 5
  (byte) BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte) YELLOW ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte) ORANGE ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) BROWN ← (byte/signed byte/word/signed word/dword/signed dword) 9
  (byte) PINK ← (byte/signed byte/word/signed word/dword/signed dword) 10
  (byte) DARK_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 11
  (byte) GREY ← (byte/signed byte/word/signed word/dword/signed dword) 12
  (byte) LIGHT_GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 13
  (byte) LIGHT_BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 14
  (byte) LIGHT_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 15
  (byte*) SCREEN ← (word/signed word/dword/signed dword) 1024
  (byte*~) $0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1016
  (byte*) SPRITES_PTR ← (byte*~) $0
  (byte*) SPRITE ← (word/signed word/dword/signed dword) 8192
proc (void()) main()
  (void~) main::$0 ← call init 
main::@1:
main::@2:
  (boolean~) main::$1 ← *((byte*) RASTER) != (byte/word/signed word/dword/signed dword) 255
  if((boolean~) main::$1) goto main::@2
  (void~) main::$2 ← call anim 
  if(true) goto main::@1
main::@return:
  return 
endproc // main()
proc (void()) init()
  *((byte*) SPRITES_ENABLE) ← (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte*) SPRITES_EXPAND_X) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) SPRITES_EXPAND_Y) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) SPRITES_XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  *((byte*) SPRITES_YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  *((byte*) SPRITES_COLS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) WHITE
  (byte*~) init::$0 ← (byte*) SPRITE / (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte~) init::$1 ← ((byte)) (byte*~) init::$0
  *((byte*) SPRITES_PTR + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) init::$1
  (byte*) init::sc ← (byte*) SCREEN
init::@1:
  *((byte*) init::sc) ← (byte) ' '
  (byte*) init::sc ← ++ (byte*) init::sc
  (byte*~) init::$2 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000
  (boolean~) init::$3 ← (byte*) init::sc != (byte*~) init::$2
  if((boolean~) init::$3) goto init::@1
  (byte) init::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
init::@2:
  *((byte*) SPRITE + (byte) init::i) ← (byte/word/signed word/dword/signed dword) 255
  (byte) init::i ← ++ (byte) init::i
  (boolean~) init::$4 ← (byte) init::i != (byte/signed byte/word/signed word/dword/signed dword) 64
  if((boolean~) init::$4) goto init::@2
init::@return:
  return 
endproc // init()
  (signed word) xpos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) ypos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) yvel_init ← (byte/signed byte/word/signed word/dword/signed dword) 100
  (signed word) xvel ← (byte/word/signed word/dword/signed dword) 200
  (signed word) yvel ← (signed word) yvel_init
  (signed byte/signed word/signed dword~) $1 ← - (byte/signed byte/word/signed word/dword/signed dword) 5
  (signed word) g ← (signed byte/signed word/signed dword~) $1
proc (void()) anim()
  (boolean~) anim::$0 ← (signed word) ypos < (byte/signed byte/word/signed word/dword/signed dword) 0
  (boolean~) anim::$1 ← ! (boolean~) anim::$0
  if((boolean~) anim::$1) goto anim::@1
  (signed word) xpos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) ypos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word~) anim::$2 ← - (signed word) xvel
  (signed word) xvel ← (signed word~) anim::$2
  (signed word~) anim::$3 ← (signed word) yvel_init - (byte/signed byte/word/signed word/dword/signed dword) 10
  (signed word) yvel_init ← (signed word~) anim::$3
  (signed word/signed dword~) anim::$4 ← - (byte/word/signed word/dword/signed dword) 200
  (boolean~) anim::$5 ← (signed word) yvel_init < (signed word/signed dword~) anim::$4
  (boolean~) anim::$6 ← ! (boolean~) anim::$5
  if((boolean~) anim::$6) goto anim::@2
  (signed word) yvel_init ← (byte/word/signed word/dword/signed dword) 200
anim::@2:
  (signed word) yvel ← (signed word) yvel_init
anim::@1:
  (signed word~) anim::$7 ← (signed word) yvel + (signed word) g
  (signed word) yvel ← (signed word~) anim::$7
  (signed word~) anim::$8 ← (signed word) xpos + (signed word) xvel
  (signed word) xpos ← (signed word~) anim::$8
  (signed word~) anim::$9 ← (signed word) ypos + (signed word) yvel
  (signed word) ypos ← (signed word~) anim::$9
  (signed word~) anim::$10 ← (signed word) xpos >> (byte/signed byte/word/signed word/dword/signed dword) 7
  (signed word~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160
  (signed word) anim::sprite_x ← (signed word~) anim::$11
  (signed word~) anim::$12 ← (signed word) ypos >> (byte/signed byte/word/signed word/dword/signed dword) 5
  (signed word~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12
  (signed word) anim::sprite_y ← (signed word~) anim::$13
  (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x
  *((byte*) SPRITES_XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$14
  (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y
  *((byte*) SPRITES_YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$15
  (byte~) anim::$16 ← > (signed word) anim::sprite_x
  *((byte*) SPRITES_XMSB) ← (byte~) anim::$16
anim::@return:
  return 
endproc // anim()
  call main 

SYMBOLS
(byte*~) $0
(signed byte/signed word/signed dword~) $1
(byte*) BGCOL
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) COLS
(byte) CYAN
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(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
(byte) WHITE
(byte) YELLOW
(void()) anim()
(boolean~) anim::$0
(boolean~) anim::$1
(signed word~) anim::$10
(signed word~) anim::$11
(signed word~) anim::$12
(signed word~) anim::$13
(byte~) anim::$14
(byte~) anim::$15
(byte~) anim::$16
(signed word~) anim::$2
(signed word~) anim::$3
(signed word/signed dword~) anim::$4
(boolean~) anim::$5
(boolean~) anim::$6
(signed word~) anim::$7
(signed word~) anim::$8
(signed word~) anim::$9
(label) anim::@1
(label) anim::@2
(label) anim::@return
(signed word) anim::sprite_x
(signed word) anim::sprite_y
(signed word) g
(void()) init()
(byte*~) init::$0
(byte~) init::$1
(byte*~) init::$2
(boolean~) init::$3
(boolean~) init::$4
(label) init::@1
(label) init::@2
(label) init::@return
(byte) init::i
(byte*) init::sc
(void()) main()
(void~) main::$0
(boolean~) main::$1
(void~) main::$2
(label) main::@1
(label) main::@2
(label) main::@return
(signed word) xpos
(signed word) xvel
(signed word) ypos
(signed word) yvel
(signed word) yvel_init

Promoting byte/signed byte/word/signed word/dword/signed dword to byte* in PROCPORT ← ((byte*)) 1
Promoting word/dword/signed dword to byte* in CHARGEN ← ((byte*)) 53248
Promoting word/dword/signed dword to byte* in SPRITES_XPOS ← ((byte*)) 53248
Promoting word/dword/signed dword to byte* in SPRITES_YPOS ← ((byte*)) 53249
Promoting word/dword/signed dword to byte* in SPRITES_XMSB ← ((byte*)) 53264
Promoting word/dword/signed dword to byte* in RASTER ← ((byte*)) 53266
Promoting word/dword/signed dword to byte* in SPRITES_ENABLE ← ((byte*)) 53269
Promoting word/dword/signed dword to byte* in SPRITES_EXPAND_Y ← ((byte*)) 53271
Promoting word/dword/signed dword to byte* in SPRITES_PRIORITY ← ((byte*)) 53275
Promoting word/dword/signed dword to byte* in SPRITES_MC ← ((byte*)) 53276
Promoting word/dword/signed dword to byte* in SPRITES_EXPAND_X ← ((byte*)) 53277
Promoting word/dword/signed dword to byte* in BORDERCOL ← ((byte*)) 53280
Promoting word/dword/signed dword to byte* in BGCOL ← ((byte*)) 53281
Promoting word/dword/signed dword to byte* in SPRITES_MC1 ← ((byte*)) 53285
Promoting word/dword/signed dword to byte* in SPRITES_MC2 ← ((byte*)) 53286
Promoting word/dword/signed dword to byte* in SPRITES_COLS ← ((byte*)) 53287
Promoting word/dword/signed dword to byte* in COLS ← ((byte*)) 55296
Promoting word/signed word/dword/signed dword to byte* in SCREEN ← ((byte*)) 1024
Promoting word/signed word/dword/signed dword to byte* in SPRITE ← ((byte*)) 8192
INITIAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  (byte*) PROCPORT ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte*) CHARGEN ← ((byte*)) (word/dword/signed dword) 53248
  (byte*) SPRITES_XPOS ← ((byte*)) (word/dword/signed dword) 53248
  (byte*) SPRITES_YPOS ← ((byte*)) (word/dword/signed dword) 53249
  (byte*) SPRITES_XMSB ← ((byte*)) (word/dword/signed dword) 53264
  (byte*) RASTER ← ((byte*)) (word/dword/signed dword) 53266
  (byte*) SPRITES_ENABLE ← ((byte*)) (word/dword/signed dword) 53269
  (byte*) SPRITES_EXPAND_Y ← ((byte*)) (word/dword/signed dword) 53271
  (byte*) SPRITES_PRIORITY ← ((byte*)) (word/dword/signed dword) 53275
  (byte*) SPRITES_MC ← ((byte*)) (word/dword/signed dword) 53276
  (byte*) SPRITES_EXPAND_X ← ((byte*)) (word/dword/signed dword) 53277
  (byte*) BORDERCOL ← ((byte*)) (word/dword/signed dword) 53280
  (byte*) BGCOL ← ((byte*)) (word/dword/signed dword) 53281
  (byte*) SPRITES_MC1 ← ((byte*)) (word/dword/signed dword) 53285
  (byte*) SPRITES_MC2 ← ((byte*)) (word/dword/signed dword) 53286
  (byte*) SPRITES_COLS ← ((byte*)) (word/dword/signed dword) 53287
  (byte*) COLS ← ((byte*)) (word/dword/signed dword) 55296
  (byte) BLACK ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) WHITE ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) CYAN ← (byte/signed byte/word/signed word/dword/signed dword) 3
  (byte) PURPLE ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 5
  (byte) BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte) YELLOW ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte) ORANGE ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) BROWN ← (byte/signed byte/word/signed word/dword/signed dword) 9
  (byte) PINK ← (byte/signed byte/word/signed word/dword/signed dword) 10
  (byte) DARK_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 11
  (byte) GREY ← (byte/signed byte/word/signed word/dword/signed dword) 12
  (byte) LIGHT_GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 13
  (byte) LIGHT_BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 14
  (byte) LIGHT_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 15
  (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*~) $0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1016
  (byte*) SPRITES_PTR ← (byte*~) $0
  (byte*) SPRITE ← ((byte*)) (word/signed word/dword/signed dword) 8192
  to:@1
main: scope:[main]  from
  (void~) main::$0 ← call init 
  to:main::@1
main::@1: scope:[main]  from main main::@3
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@2
  (boolean~) main::$1 ← *((byte*) RASTER) != (byte/word/signed word/dword/signed dword) 255
  if((boolean~) main::$1) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  (void~) main::$2 ← call anim 
  if(true) goto main::@1
  to:main::@4
main::@4: scope:[main]  from main::@3
  to:main::@return
main::@return: scope:[main]  from main::@4
  return 
  to:@return
@1: scope:[]  from @begin
  to:@2
init: scope:[init]  from
  *((byte*) SPRITES_ENABLE) ← (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte*) SPRITES_EXPAND_X) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) SPRITES_EXPAND_Y) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) SPRITES_XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  *((byte*) SPRITES_YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100
  *((byte*) SPRITES_COLS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) WHITE
  (byte*~) init::$0 ← (byte*) SPRITE / (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte~) init::$1 ← ((byte)) (byte*~) init::$0
  *((byte*) SPRITES_PTR + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) init::$1
  (byte*) init::sc ← (byte*) SCREEN
  to:init::@1
init::@1: scope:[init]  from init init::@1
  *((byte*) init::sc) ← (byte) ' '
  (byte*) init::sc ← ++ (byte*) init::sc
  (byte*~) init::$2 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000
  (boolean~) init::$3 ← (byte*) init::sc != (byte*~) init::$2
  if((boolean~) init::$3) goto init::@1
  to:init::@3
init::@3: scope:[init]  from init::@1
  (byte) init::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:init::@2
init::@2: scope:[init]  from init::@2 init::@3
  *((byte*) SPRITE + (byte) init::i) ← (byte/word/signed word/dword/signed dword) 255
  (byte) init::i ← ++ (byte) init::i
  (boolean~) init::$4 ← (byte) init::i != (byte/signed byte/word/signed word/dword/signed dword) 64
  if((boolean~) init::$4) goto init::@2
  to:init::@4
init::@4: scope:[init]  from init::@2
  to:init::@return
init::@return: scope:[init]  from init::@4
  return 
  to:@return
@2: scope:[]  from @1
  (signed word) xpos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) ypos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) yvel_init ← (byte/signed byte/word/signed word/dword/signed dword) 100
  (signed word) xvel ← (byte/word/signed word/dword/signed dword) 200
  (signed word) yvel ← (signed word) yvel_init
  (signed byte/signed word/signed dword~) $1 ← - (byte/signed byte/word/signed word/dword/signed dword) 5
  (signed word) g ← (signed byte/signed word/signed dword~) $1
  to:@3
anim: scope:[anim]  from
  (boolean~) anim::$0 ← (signed word) ypos < (byte/signed byte/word/signed word/dword/signed dword) 0
  (boolean~) anim::$1 ← ! (boolean~) anim::$0
  if((boolean~) anim::$1) goto anim::@1
  to:anim::@3
anim::@1: scope:[anim]  from anim anim::@2
  (signed word~) anim::$7 ← (signed word) yvel + (signed word) g
  (signed word) yvel ← (signed word~) anim::$7
  (signed word~) anim::$8 ← (signed word) xpos + (signed word) xvel
  (signed word) xpos ← (signed word~) anim::$8
  (signed word~) anim::$9 ← (signed word) ypos + (signed word) yvel
  (signed word) ypos ← (signed word~) anim::$9
  (signed word~) anim::$10 ← (signed word) xpos >> (byte/signed byte/word/signed word/dword/signed dword) 7
  (signed word~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160
  (signed word) anim::sprite_x ← (signed word~) anim::$11
  (signed word~) anim::$12 ← (signed word) ypos >> (byte/signed byte/word/signed word/dword/signed dword) 5
  (signed word~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12
  (signed word) anim::sprite_y ← (signed word~) anim::$13
  (byte~) anim::$14 ← ((byte)) (signed word) anim::sprite_x
  *((byte*) SPRITES_XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$14
  (byte~) anim::$15 ← ((byte)) (signed word) anim::sprite_y
  *((byte*) SPRITES_YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$15
  (byte~) anim::$16 ← > (signed word) anim::sprite_x
  *((byte*) SPRITES_XMSB) ← (byte~) anim::$16
  to:anim::@return
anim::@3: scope:[anim]  from anim
  (signed word) xpos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word) ypos ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (signed word~) anim::$2 ← - (signed word) xvel
  (signed word) xvel ← (signed word~) anim::$2
  (signed word~) anim::$3 ← (signed word) yvel_init - (byte/signed byte/word/signed word/dword/signed dword) 10
  (signed word) yvel_init ← (signed word~) anim::$3
  (signed word/signed dword~) anim::$4 ← - (byte/word/signed word/dword/signed dword) 200
  (boolean~) anim::$5 ← (signed word) yvel_init < (signed word/signed dword~) anim::$4
  (boolean~) anim::$6 ← ! (boolean~) anim::$5
  if((boolean~) anim::$6) goto anim::@2
  to:anim::@4
anim::@2: scope:[anim]  from anim::@3 anim::@4
  (signed word) yvel ← (signed word) yvel_init
  to:anim::@1
anim::@4: scope:[anim]  from anim::@3
  (signed word) yvel_init ← (byte/word/signed word/dword/signed dword) 200
  to:anim::@2
anim::@return: scope:[anim]  from anim::@1
  return 
  to:@return
@3: scope:[]  from @2
  call main 
  to:@end
@end: scope:[]  from @3

Eliminating unused variable (byte*) PROCPORT and assignment [0] (byte*) PROCPORT ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
Eliminating unused variable (byte*) CHARGEN and assignment [1] (byte*) CHARGEN ← ((byte*)) (word/dword/signed dword) 53248
Eliminating unused variable (byte*) SPRITES_PRIORITY and assignment [8] (byte*) SPRITES_PRIORITY ← ((byte*)) (word/dword/signed dword) 53275
Eliminating unused variable (byte*) SPRITES_MC and assignment [9] (byte*) SPRITES_MC ← ((byte*)) (word/dword/signed dword) 53276
Eliminating unused variable (byte*) BORDERCOL and assignment [11] (byte*) BORDERCOL ← ((byte*)) (word/dword/signed dword) 53280
Eliminating unused variable (byte*) BGCOL and assignment [12] (byte*) BGCOL ← ((byte*)) (word/dword/signed dword) 53281
Eliminating unused variable (byte*) SPRITES_MC1 and assignment [13] (byte*) SPRITES_MC1 ← ((byte*)) (word/dword/signed dword) 53285
Eliminating unused variable (byte*) SPRITES_MC2 and assignment [14] (byte*) SPRITES_MC2 ← ((byte*)) (word/dword/signed dword) 53286
Eliminating unused variable (byte*) COLS and assignment [16] (byte*) COLS ← ((byte*)) (word/dword/signed dword) 55296
Eliminating unused variable (byte) BLACK and assignment [17] (byte) BLACK ← (byte/signed byte/word/signed word/dword/signed dword) 0
Eliminating unused variable (byte) RED and assignment [19] (byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2
Eliminating unused variable (byte) CYAN and assignment [20] (byte) CYAN ← (byte/signed byte/word/signed word/dword/signed dword) 3
Eliminating unused variable (byte) PURPLE and assignment [21] (byte) PURPLE ← (byte/signed byte/word/signed word/dword/signed dword) 4
Eliminating unused variable (byte) GREEN and assignment [22] (byte) GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 5
Eliminating unused variable (byte) BLUE and assignment [23] (byte) BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 6
Eliminating unused variable (byte) YELLOW and assignment [24] (byte) YELLOW ← (byte/signed byte/word/signed word/dword/signed dword) 7
Eliminating unused variable (byte) ORANGE and assignment [25] (byte) ORANGE ← (byte/signed byte/word/signed word/dword/signed dword) 8
Eliminating unused variable (byte) BROWN and assignment [26] (byte) BROWN ← (byte/signed byte/word/signed word/dword/signed dword) 9
Eliminating unused variable (byte) PINK and assignment [27] (byte) PINK ← (byte/signed byte/word/signed word/dword/signed dword) 10
Eliminating unused variable (byte) DARK_GREY and assignment [28] (byte) DARK_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 11
Eliminating unused variable (byte) GREY and assignment [29] (byte) GREY ← (byte/signed byte/word/signed word/dword/signed dword) 12
Eliminating unused variable (byte) LIGHT_GREEN and assignment [30] (byte) LIGHT_GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 13
Eliminating unused variable (byte) LIGHT_BLUE and assignment [31] (byte) LIGHT_BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 14
Eliminating unused variable (byte) LIGHT_GREY and assignment [32] (byte) LIGHT_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 15
Eliminating unused variable - keeping the call (void~) main::$0
Eliminating unused variable - keeping the call (void~) main::$2
Removing empty block main::@4
Removing empty block @1
Removing empty block init::@4
PROCEDURE MODIFY VARIABLE ANALYSIS
main modifies yvel
main modifies xpos
main modifies ypos
main modifies xvel
main modifies yvel_init
anim modifies yvel
anim modifies xpos
anim modifies ypos
anim modifies xvel
anim modifies yvel_init

Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...

CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[]  from
  (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_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
  (byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
  (byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (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:@2
main: scope:[main]  from @3
  (signed word) yvel_init#20 ← phi( @3/(signed word) yvel_init#16 )
  (signed word) xvel#20 ← phi( @3/(signed word) xvel#15 )
  (signed word) ypos#20 ← phi( @3/(signed word) ypos#15 )
  (signed word) xpos#20 ← phi( @3/(signed word) xpos#15 )
  (signed word) yvel#18 ← phi( @3/(signed word) yvel#14 )
  call init param-assignment
  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 )
  (boolean~) main::$1 ← *((byte*) RASTER#0) != (byte/word/signed word/dword/signed dword) 255
  if((boolean~) 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 param-assignment
  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
  (boolean~) init::$3 ← (byte*) init::sc#1 != (byte*~) init::$2
  if((boolean~) 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
  (boolean~) init::$4 ← (byte) init::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 64
  if((boolean~) init::$4) goto init::@2
  to:init::@return
init::@return: scope:[init]  from init::@2
  return 
  to:@return
@2: scope:[]  from @begin
  (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:@3
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 )
  (boolean~) anim::$0 ← (signed word) ypos#9 < (byte/signed byte/word/signed word/dword/signed dword) 0
  (boolean~) anim::$1 ← ! (boolean~) anim::$0
  if((boolean~) 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~) anim::$11 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160
  (signed word) anim::sprite_x#0 ← (signed word~) anim::$11
  (signed word~) anim::$12 ← (signed word) ypos#3 >> (byte/signed byte/word/signed word/dword/signed dword) 5
  (signed word~) anim::$13 ← (byte/word/signed word/dword/signed dword) 230 - (signed word~) anim::$12
  (signed word) anim::sprite_y#0 ← (signed word~) 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~) anim::$3 ← (signed word) yvel_init#9 - (byte/signed byte/word/signed word/dword/signed dword) 10
  (signed word) yvel_init#3 ← (signed word~) anim::$3
  (signed word/signed dword~) anim::$4 ← - (byte/word/signed word/dword/signed dword) 200
  (boolean~) anim::$5 ← (signed word) yvel_init#3 < (signed word/signed dword~) anim::$4
  (boolean~) anim::$6 ← ! (boolean~) anim::$5
  if((boolean~) 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
@3: scope:[]  from @2
  (signed word) yvel_init#16 ← phi( @2/(signed word) yvel_init#2 )
  (signed word) xvel#15 ← phi( @2/(signed word) xvel#2 )
  (signed word) ypos#15 ← phi( @2/(signed word) ypos#2 )
  (signed word) xpos#15 ← phi( @2/(signed word) xpos#2 )
  (signed word) yvel#14 ← phi( @2/(signed word) yvel#2 )
  call main param-assignment
  to:@4
@4: scope:[]  from @3
  (signed word) yvel_init#12 ← phi( @3/(signed word) yvel_init#1 )
  (signed word) xvel#11 ← phi( @3/(signed word) xvel#1 )
  (signed word) ypos#12 ← phi( @3/(signed word) ypos#1 )
  (signed word) xpos#11 ← phi( @3/(signed word) xpos#1 )
  (signed word) yvel#11 ← phi( @3/(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 @4

SYMBOL TABLE SSA
(byte*~) $0
(signed byte/signed word/signed dword~) $1
(label) @2
(label) @3
(label) @4
(label) @begin
(label) @end
(byte*) RASTER
(byte*) RASTER#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_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
(byte) WHITE
(byte) WHITE#0
(void()) anim()
(boolean~) anim::$0
(boolean~) anim::$1
(signed word~) anim::$10
(signed word~) anim::$11
(signed word~) anim::$12
(signed word~) anim::$13
(byte~) anim::$14
(byte~) anim::$15
(byte~) anim::$16
(signed word~) anim::$2
(signed word~) anim::$3
(signed word/signed dword~) anim::$4
(boolean~) anim::$5
(boolean~) 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
(boolean~) init::$3
(boolean~) 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()
(boolean~) 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

OPTIMIZING CONTROL FLOW GRAPH
Inversing boolean not (boolean~) anim::$1 ← (signed word) ypos#9 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) anim::$0 ← (signed word) ypos#9 < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not (boolean~) anim::$6 ← (signed word) yvel_init#3 >= (signed word/signed dword~) anim::$4 from (boolean~) anim::$5 ← (signed word) yvel_init#3 < (signed word/signed dword~) anim::$4
Succesful SSA optimization Pass2UnaryNotSimplification
Not aliassing across scopes: yvel#18 yvel#14
Not aliassing across scopes: xpos#20 xpos#15
Not aliassing across scopes: ypos#20 ypos#15
Not aliassing across scopes: xvel#20 xvel#15
Not aliassing across scopes: yvel_init#20 yvel_init#16
Not aliassing across scopes: yvel#7 yvel#5
Not aliassing across scopes: xpos#7 xpos#5
Not aliassing across scopes: ypos#7 ypos#5
Not aliassing across scopes: xvel#6 xvel#4
Not aliassing across scopes: yvel_init#7 yvel_init#5
Not aliassing across scopes: init::sc#0 SCREEN#0
Not aliassing across scopes: ypos#9 ypos#13
Not aliassing across scopes: yvel#13 yvel#12
Not aliassing across scopes: xpos#13 xpos#12
Not aliassing across scopes: xvel#13 xvel#12
Not aliassing across scopes: yvel_init#14 yvel_init#13
Not aliassing across scopes: yvel#11 yvel#1
Not aliassing across scopes: xpos#11 xpos#1
Not aliassing across scopes: ypos#12 ypos#1
Not aliassing across scopes: xvel#11 xvel#1
Not aliassing across scopes: yvel_init#12 yvel_init#1
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~) anim::$11 
Alias (signed word) anim::sprite_y#0 = (signed word~) 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~) 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 
Succesful SSA optimization Pass2AliasElimination
Not aliassing across scopes: yvel#17 yvel#14
Not aliassing across scopes: xpos#19 xpos#15
Not aliassing across scopes: ypos#19 ypos#15
Not aliassing across scopes: xvel#19 xvel#15
Not aliassing across scopes: yvel_init#19 yvel#14
Not aliassing across scopes: yvel#0 yvel#10
Not aliassing across scopes: xpos#0 xpos#10
Not aliassing across scopes: ypos#0 ypos#11
Not aliassing across scopes: xvel#0 xvel#10
Not aliassing across scopes: yvel_init#0 yvel_init#11
Not aliassing across scopes: init::sc#0 SCREEN#0
Not aliassing across scopes: ypos#9 ypos#13
Not aliassing across scopes: yvel#13 yvel#12
Not aliassing across scopes: xpos#13 xpos#12
Not aliassing across scopes: xvel#13 xvel#12
Not aliassing across scopes: yvel_init#14 yvel_init#13
Not aliassing across scopes: yvel#11 yvel#0
Not aliassing across scopes: xpos#11 xpos#0
Not aliassing across scopes: ypos#12 ypos#0
Not aliassing across scopes: xvel#11 xvel#0
Not aliassing across scopes: yvel_init#12 yvel_init#0
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 
Succesful SSA optimization Pass2AliasElimination
Not aliassing across scopes: yvel#17 yvel#14
Not aliassing across scopes: xpos#19 xpos#15
Not aliassing across scopes: ypos#19 ypos#15
Not aliassing across scopes: xvel#19 xvel#15
Not aliassing across scopes: yvel_init#19 yvel#14
Not aliassing across scopes: yvel#0 yvel#10
Not aliassing across scopes: xpos#0 xpos#10
Not aliassing across scopes: ypos#0 ypos#11
Not aliassing across scopes: xvel#0 xvel#10
Not aliassing across scopes: yvel_init#0 yvel_init#11
Not aliassing across scopes: init::sc#0 SCREEN#0
Not aliassing across scopes: ypos#9 ypos#13
Not aliassing across scopes: yvel#13 yvel#12
Not aliassing across scopes: xpos#13 xpos#12
Not aliassing across scopes: xvel#13 xvel#12
Not aliassing across scopes: yvel_init#14 yvel_init#13
Not aliassing across scopes: yvel#11 yvel#0
Not aliassing across scopes: xpos#11 xpos#0
Not aliassing across scopes: ypos#12 ypos#0
Not aliassing across scopes: xvel#11 xvel#0
Not aliassing across scopes: yvel_init#12 yvel_init#0
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
Succesful 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
Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (boolean~) main::$1 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2
Simple Condition (boolean~) init::$3 if((byte*) init::sc#1!=(byte*~) init::$2) goto init::@1
Simple Condition (boolean~) init::$4 if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto init::@2
Simple Condition (boolean~) anim::$1 if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1
Simple Condition (boolean~) anim::$6 if((signed word) yvel_init#3>=(signed word/signed dword~) anim::$4) goto anim::@2
Succesful SSA optimization Pass2ConditionalJumpSimplification
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_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte) WHITE#0 = 1
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
Succesful 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
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte) init::$1 = ((byte))init::$0
Succesful 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)
Succesful SSA optimization Pass2ConstantAdditionElimination
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@1
Culled Empty Block (label) init::@3
Culled Empty Block (label) @2
Not culling empty block because it shares successor with its predecessor. (label) anim::@4
Culled Empty Block (label) @4
Succesful SSA optimization Pass2CullEmptyBlocks
Not culling empty block because it shares successor with its predecessor. (label) anim::@4
Not aliassing across scopes: yvel#12 yvel#10
Not aliassing across scopes: xpos#12 xpos#10
Not aliassing across scopes: ypos#13 ypos#11
Not aliassing across scopes: xvel#12 xvel#10
Not aliassing across scopes: yvel_init#13 yvel_init#11
Not aliassing across scopes: yvel#9 yvel#12
Not aliassing across scopes: xpos#9 xpos#12
Not aliassing across scopes: xvel#10 xvel#12
Not aliassing across scopes: ypos#10 ypos#13
Not aliassing across scopes: yvel_init#11 yvel_init#13
Not culling empty block because it shares successor with its predecessor. (label) anim::@4
Not aliassing across scopes: yvel#12 yvel#10
Not aliassing across scopes: xpos#12 xpos#10
Not aliassing across scopes: ypos#13 ypos#11
Not aliassing across scopes: xvel#12 xvel#10
Not aliassing across scopes: yvel_init#13 yvel_init#11
Not aliassing across scopes: yvel#9 yvel#12
Not aliassing across scopes: xpos#9 xpos#12
Not aliassing across scopes: xvel#10 xvel#12
Not aliassing across scopes: ypos#10 ypos#13
Not aliassing across scopes: yvel_init#11 yvel_init#13
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte) init::i#0
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 byte*) init::sc#0
Inlining constant with var siblings (const signed word) xpos#15
Inlining constant with var siblings (const signed word) xpos#15
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) ypos#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) yvel#14
Inlining constant with var siblings (const signed word) yvel#14
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) xvel#15
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) xpos#14
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) ypos#14
Inlining constant with var siblings (const signed word) ypos#14
Inlining constant with var siblings (const signed word) yvel_init#4
Inlining constant with var siblings (const signed word) yvel_init#4
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
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @3 @end main main::@2 main::@3 main::@6 main::@return anim anim::@3 anim::@4 anim::@2 anim::@1 anim::@return init init::@1 init::@2 init::@return 
Added new block during phi lifting main::@7(between main::@6 and main::@2)
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)
Block Sequence Planned @begin @3 @end main main::@2 main::@3 main::@6 main::@return main::@7 anim anim::@3 anim::@4 anim::@2 anim::@1 anim::@return anim::@5 anim::@6 init init::@1 init::@2 init::@return init::@6 init::@5 
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
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 

Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Created 13 initial phi equivalence classes
Coalesced [12] yvel#19 ← yvel#10
Coalesced [13] xpos#21 ← xpos#10
Coalesced [14] ypos#21 ← ypos#11
Coalesced [15] xvel#21 ← xvel#10
Coalesced [16] yvel_init#21 ← yvel_init#11
Not coalescing [23] yvel#22 ← yvel#4
Coalesced [24] xvel#23 ← xvel#14
Coalesced [25] yvel_init#23 ← yvel#4
Coalesced [41] yvel#20 ← yvel_init#3
Coalesced [42] yvel#21 ← yvel#12
Coalesced [43] xpos#22 ← xpos#12
Coalesced (already) [44] xvel#22 ← xvel#12
Coalesced [45] ypos#22 ← ypos#13
Coalesced (already) [46] yvel_init#22 ← yvel_init#13
Coalesced [63] init::i#3 ← init::i#1
Coalesced [64] init::sc#3 ← init::sc#1
Coalesced down to 7 phi equivalence classes
Culled Empty Block (label) main::@7
Culled Empty Block (label) anim::@4
Not culling empty block because it shares successor with its predecessor. (label) anim::@5
Culled Empty Block (label) anim::@6
Culled Empty Block (label) init::@6
Culled Empty Block (label) init::@5
Block Sequence Planned @begin @3 @end main main::@2 main::@3 main::@6 main::@return anim anim::@3 anim::@2 anim::@1 anim::@return anim::@5 init init::@1 init::@2 init::@return 
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
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
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...

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

DOMINATORS
@begin dominated by  @begin 
@3 dominated by  @begin @3 
@end dominated by  @begin @end @3 
main dominated by  @begin main @3 
main::@2 dominated by  @begin main @3 main::@2 
main::@3 dominated by  @begin main @3 main::@2 main::@3 
main::@6 dominated by  @begin main @3 main::@2 main::@6 main::@3 
main::@return dominated by  main::@return @begin main @3 main::@2 main::@6 main::@3 
anim dominated by  @begin main @3 main::@2 anim main::@3 
anim::@3 dominated by  @begin anim::@3 main @3 main::@2 anim main::@3 
anim::@2 dominated by  @begin anim::@3 anim::@2 main @3 main::@2 anim main::@3 
anim::@1 dominated by  @begin anim::@1 main @3 main::@2 anim main::@3 
anim::@return dominated by  @begin anim::@1 main anim::@return @3 main::@2 anim main::@3 
anim::@5 dominated by  anim::@5 @begin anim::@3 main @3 main::@2 anim main::@3 
init dominated by  init @begin main @3 
init::@1 dominated by  init @begin main init::@1 @3 
init::@2 dominated by  init @begin main init::@2 init::@1 @3 
init::@return dominated by  init @begin init::@return main init::@2 init::@1 @3 

NATURAL LOOPS
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
Found back edge: Loop head: main::@2 tails: main::@6 blocks: null
Found back edge: Loop head: init::@1 tails: init::@1 blocks: null
Found back edge: Loop head: init::@2 tails: init::@2 blocks: null
Populated: Loop head: main::@2 tails: main::@2 blocks: main::@2 
Populated: Loop head: main::@2 tails: main::@6 blocks: main::@6 main::@3 main::@2 
Populated: Loop head: init::@1 tails: init::@1 blocks: init::@1 
Populated: Loop head: init::@2 tails: init::@2 blocks: init::@2 
Loop head: main::@2 tails: main::@2 blocks: main::@2 
Loop head: main::@2 tails: main::@6 blocks: main::@6 main::@3 main::@2 
Loop head: init::@1 tails: init::@1 blocks: init::@1 
Loop head: init::@2 tails: init::@2 blocks: init::@2 

NATURAL LOOPS WITH DEPTH
Found 0 loops in scope []
Found 2 loops in scope [main]
  Loop head: main::@2 tails: main::@2 blocks: main::@2 
  Loop head: main::@2 tails: main::@6 blocks: main::@6 main::@3 main::@2 
Found 2 loops in scope [init]
  Loop head: init::@1 tails: init::@1 blocks: init::@1 
  Loop head: init::@2 tails: init::@2 blocks: init::@2 
Found 0 loops in scope [anim]
Loop head: main::@2 tails: main::@2 blocks: main::@2  depth: 2
Loop head: main::@2 tails: main::@6 blocks: main::@6 main::@3 main::@2  depth: 1
Loop head: init::@1 tails: init::@1 blocks: init::@1  depth: 1
Loop head: init::@2 tails: init::@2 blocks: init::@2  depth: 1


VARIABLE REGISTER WEIGHTS
(byte*) RASTER
(byte*) SCREEN
(byte*) SPRITE
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_PTR
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(byte) WHITE
(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 0.9999999999999999
(signed word) xpos#12 3.25
(signed word) xpos#9 2.0
(signed word) xvel
(signed word) xvel#10 1.0
(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.0714285714285714
(signed word) ypos#13 3.75
(signed word) yvel
(signed word) yvel#10 0.9375
(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.8823529411764707
(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 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 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
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @3 [phi:@begin->@3]
b3_from_bbegin:
  jmp b3
//SEG4 @3
b3:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @3 to main [phi:@3->main]
main_from_b3:
  jsr main
//SEG7 [3] phi from @3 to @end [phi:@3->@end]
bend_from_b3:
  jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
  //SEG10 [5] call init param-assignment [ ] ( main:2 [ ] )
    jsr init
  //SEG11 [6] phi from main to main::@2 [phi:main->main::@2]
  b2_from_main:
  //SEG12 [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 #0
    sta yvel_init+1
  //SEG13 [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 #0
    sta xvel+1
  //SEG14 [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
  //SEG15 [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
  //SEG16 [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 #0
    sta yvel_12+1
    jmp b2
  //SEG17 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
  b2_from_b2:
    jmp b2
  //SEG18 [6] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
  b2_from_b6:
  //SEG19 [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#11 [phi:main::@6->main::@2#0] -- register_copy 
  //SEG20 [6] phi (signed word) xvel#12 = (signed word) xvel#10 [phi:main::@6->main::@2#1] -- register_copy 
  //SEG21 [6] phi (signed word) ypos#13 = (signed word) ypos#11 [phi:main::@6->main::@2#2] -- register_copy 
  //SEG22 [6] phi (signed word) xpos#12 = (signed word) xpos#10 [phi:main::@6->main::@2#3] -- register_copy 
  //SEG23 [6] phi (signed word) yvel#12 = (signed word) yvel#10 [phi:main::@6->main::@2#4] -- register_copy 
    jmp b2
  //SEG24 main::@2
  b2:
  //SEG25 [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 ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b2_from_b2
  //SEG26 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  b3_from_b2:
    jmp b3
  //SEG27 main::@3
  b3:
  //SEG28 [9] call anim param-assignment [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] )
    jsr anim
    jmp b6
  //SEG29 main::@6
  b6:
  //SEG30 [10] if(true) goto main::@2 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) -- true_then_la1 
    jmp b2_from_b6
    jmp breturn
  //SEG31 main::@return
  breturn:
  //SEG32 [11] return  [ ] ( main:2 [ ] )
    rts
}
//SEG33 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
  //SEG34 [12] 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 ] ) -- vwsz1_ge_0_then_la1 
    lda ypos+1
    bpl b1_from_anim
    jmp b3
  //SEG35 anim::@3
  b3:
  //SEG36 [13] (signed word) xvel#14 ← - (signed word) xvel#12 [ yvel_init#13 xvel#14 ] ( main:2::anim:9 [ yvel_init#13 xvel#14 ] ) -- vwsz1=_neg_vwsz1 
    sec
    lda xvel
    eor #$ff
    adc #0
    sta xvel
    lda xvel+1
    eor #$ff
    adc #0
    sta xvel+1
  //SEG37 [14] (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 ] ) -- vwsz1=vwsz1_minus_vbuc1 
    lda yvel_init
    sec
    sbc #<$a
    sta yvel_init
    lda yvel_init+1
    sbc #>$a
    sta yvel_init+1
  //SEG38 [15] 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 ] ) -- vwsz1_ge_vwsc1_then_la1 
    lda yvel_init
    cmp #<-$c8
    lda yvel_init+1
    sbc #>-$c8
    bvc !+
    eor #$80
  !:
    bpl b5_from_b3
  //SEG39 [16] phi from anim::@3 to anim::@2 [phi:anim::@3->anim::@2]
  b2_from_b3:
  //SEG40 [16] 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 #0
    sta yvel+1
    jmp b2
  //SEG41 anim::@2
  b2:
  //SEG42 [17] (signed word~) yvel#22 ← (signed word) yvel#4 [ xvel#14 yvel#4 yvel#22 ] ( main:2::anim:9 [ xvel#14 yvel#4 yvel#22 ] ) -- vwsz1=vwsz2 
    lda yvel
    sta yvel_22
    lda yvel+1
    sta yvel_22+1
  //SEG43 [18] phi from anim::@2 to anim::@1 [phi:anim::@2->anim::@1]
  b1_from_b2:
  //SEG44 [18] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@2->anim::@1#0] -- register_copy 
  //SEG45 [18] 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
  //SEG46 [18] phi (signed word) xvel#10 = (signed word) xvel#14 [phi:anim::@2->anim::@1#2] -- register_copy 
  //SEG47 [18] 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
  //SEG48 [18] phi (signed word) yvel#9 = (signed word~) yvel#22 [phi:anim::@2->anim::@1#4] -- register_copy 
    jmp b1
  //SEG49 [18] phi from anim to anim::@1 [phi:anim->anim::@1]
  b1_from_anim:
  //SEG50 [18] phi (signed word) yvel_init#11 = (signed word) yvel_init#13 [phi:anim->anim::@1#0] -- register_copy 
  //SEG51 [18] phi (signed word) ypos#10 = (signed word) ypos#13 [phi:anim->anim::@1#1] -- register_copy 
  //SEG52 [18] phi (signed word) xvel#10 = (signed word) xvel#12 [phi:anim->anim::@1#2] -- register_copy 
  //SEG53 [18] phi (signed word) xpos#9 = (signed word) xpos#12 [phi:anim->anim::@1#3] -- register_copy 
  //SEG54 [18] phi (signed word) yvel#9 = (signed word) yvel#12 [phi:anim->anim::@1#4] -- register_copy 
    jmp b1
  //SEG55 anim::@1
  b1:
  //SEG56 [19] (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 ] ) -- vwsz1=vwsz1_plus_vwsc1 
    lda yvel_10
    clc
    adc #<g
    sta yvel_10
    lda yvel_10+1
    adc #>g
    sta yvel_10+1
  //SEG57 [20] (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 ] ) -- vwsz1=vwsz1_plus_vwsz2 
    clc
    lda xpos
    adc xvel
    sta xpos
    lda xpos+1
    adc xvel+1
    sta xpos+1
  //SEG58 [21] (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 ] ) -- vwsz1=vwsz1_plus_vwsz2 
    clc
    lda ypos
    adc yvel_10
    sta ypos
    lda ypos+1
    adc yvel_10+1
    sta ypos+1
  //SEG59 [22] (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 ] ) -- 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
  //SEG60 [23] (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 ] ) -- vwsz1=vwsz2_plus_vbuc1 
    lda _10
    clc
    adc #<$a0
    sta sprite_x
    lda _10+1
    adc #>$a0
    sta sprite_x+1
  //SEG61 [24] (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 ] ) -- 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
  //SEG62 [25] (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 ] ) -- vwsz1=vbuc1_minus_vwsz2 
    lda #<$e6
    sec
    sbc _12
    sta sprite_y
    lda #>$e6
    sbc _12+1
    sta sprite_y+1
  //SEG63 [26] (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 ] ) -- vbuz1=_byte_vwsz2 
    lda sprite_x
    sta _14
  //SEG64 [27] *((const byte*) SPRITES_XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$14 [ 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 ] ) -- _deref_pbuc1=vbuz1 
    lda _14
    sta SPRITES_XPOS+0
  //SEG65 [28] (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 ] ) -- vbuz1=_byte_vwsz2 
    lda sprite_y
    sta _15
  //SEG66 [29] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) anim::$15 [ 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 ] ) -- _deref_pbuc1=vbuz1 
    lda _15
    sta SPRITES_YPOS+0
  //SEG67 [30] (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 ] ) -- vbuz1=_hi_vwsz2 
    lda sprite_x+1
    sta _16
  //SEG68 [31] *((const byte*) SPRITES_XMSB#0) ← (byte~) anim::$16 [ 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 ] ) -- _deref_pbuc1=vbuz1 
    lda _16
    sta SPRITES_XMSB
    jmp breturn
  //SEG69 anim::@return
  breturn:
  //SEG70 [32] return  [ 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 ] )
    rts
  //SEG71 [33] phi from anim::@3 to anim::@5 [phi:anim::@3->anim::@5]
  b5_from_b3:
    jmp b5
  //SEG72 anim::@5
  b5:
  //SEG73 [16] phi from anim::@5 to anim::@2 [phi:anim::@5->anim::@2]
  b2_from_b5:
  //SEG74 [16] phi (signed word) yvel#4 = (signed word) yvel_init#3 [phi:anim::@5->anim::@2#0] -- register_copy 
    jmp b2
}
//SEG75 init
init: {
    .label sc = $c
    .label i = $e
  //SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #1
    sta SPRITES_ENABLE
  //SEG77 [35] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_X
  //SEG78 [36] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta SPRITES_EXPAND_Y
  //SEG79 [37] *((const byte*) SPRITES_XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$64
    sta SPRITES_XPOS+0
  //SEG80 [38] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$64
    sta SPRITES_YPOS+0
  //SEG81 [39] *((const byte*) SPRITES_COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) WHITE#0 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta SPRITES_COLS+0
  //SEG82 [40] *((const byte*) SPRITES_PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$ff & SPRITE/$40
    sta SPRITES_PTR+0
  //SEG83 [41] phi from init to init::@1 [phi:init->init::@1]
  b1_from_init:
  //SEG84 [41] 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
  //SEG85 [41] phi from init::@1 to init::@1 [phi:init::@1->init::@1]
  b1_from_b1:
  //SEG86 [41] phi (byte*) init::sc#2 = (byte*) init::sc#1 [phi:init::@1->init::@1#0] -- register_copy 
    jmp b1
  //SEG87 init::@1
  b1:
  //SEG88 [42] *((byte*) init::sc#2) ← (byte) ' ' [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG89 [43] (byte*) init::sc#1 ← ++ (byte*) init::sc#2 [ init::sc#1 ] ( main:2::init:5 [ init::sc#1 ] ) -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG90 [44] 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 ] ) -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>SCREEN+$3e8
    bne b1_from_b1
    lda sc
    cmp #<SCREEN+$3e8
    bne b1_from_b1
  //SEG91 [45] phi from init::@1 to init::@2 [phi:init::@1->init::@2]
  b2_from_b1:
  //SEG92 [45] 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
  //SEG93 [45] phi from init::@2 to init::@2 [phi:init::@2->init::@2]
  b2_from_b2:
  //SEG94 [45] phi (byte) init::i#2 = (byte) init::i#1 [phi:init::@2->init::@2#0] -- register_copy 
    jmp b2
  //SEG95 init::@2
  b2:
  //SEG96 [46] *((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 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy i
    lda #$ff
    sta SPRITE,y
  //SEG97 [47] (byte) init::i#1 ← ++ (byte) init::i#2 [ init::i#1 ] ( main:2::init:5 [ init::i#1 ] ) -- vbuz1=_inc_vbuz1 
    inc i
  //SEG98 [48] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto init::@2 [ init::i#1 ] ( main:2::init:5 [ init::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #$40
    bne b2_from_b2
    jmp breturn
  //SEG99 init::@return
  breturn:
  //SEG100 [49] return  [ ] ( main:2::init:5 [ ] )
    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 [12] 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 [13] (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 [14] (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 [15] 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 [17] (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 [19] (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 [20] (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 [21] (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 [22] (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 [23] (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 [24] (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 [25] (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 [26] (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 [28] (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 [30] (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 [34] *((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 [35] *((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 [36] *((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 [37] *((const byte*) SPRITES_XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [38] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [39] *((const byte*) SPRITES_COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) WHITE#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [40] *((const byte*) SPRITES_PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 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 [42] *((byte*) init::sc#2) ← (byte) ' ' [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [44] 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 [46] *((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 [12] 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 [13] (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 [14] (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 [15] 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 [17] (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 [19] (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 [20] (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 [21] (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 [22] (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 [23] (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 [24] (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 [25] (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 [26] (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 [28] (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 [30] (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 [34] *((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 [35] *((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 [36] *((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 [37] *((const byte*) SPRITES_XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [38] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 100 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [39] *((const byte*) SPRITES_COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (const byte) WHITE#0 [ ] ( main:2::init:5 [ ] ) always clobbers reg byte a 
Statement [40] *((const byte*) SPRITES_PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 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 [42] *((byte*) init::sc#2) ← (byte) ' ' [ init::sc#2 ] ( main:2::init:5 [ init::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [44] 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 [46] *((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.19: zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ] 8.88: zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] 6.25: zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] 6.15: zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] 5.42: 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 8154 combination zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] 
Uplifting [] best 8154 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 8136 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 8136 combination 
Coalescing zero page register [ zp ZP_WORD:15 [ anim::$10 ] ] with [ zp ZP_WORD:17 [ anim::sprite_x#0 ] ]
Coalescing zero page register [ zp ZP_WORD:19 [ anim::$12 ] ] with [ zp ZP_WORD:21 [ anim::sprite_y#0 ] ]
Allocated (was zp ZP_WORD:15) zp ZP_WORD:14 [ anim::$10 anim::sprite_x#0 ]
Allocated (was zp ZP_WORD:19) zp ZP_WORD:16 [ anim::$12 anim::sprite_y#0 ]

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

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b3
Removing instruction jmp bend
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b6
Removing instruction jmp breturn
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 #0
Removing instruction lda #$64
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b2_from_b6 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 bbegin:
Removing instruction b3_from_bbegin:
Removing instruction main_from_b3:
Removing instruction bend_from_b3:
Removing instruction b2_from_b6:
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 b3:
Removing instruction bend:
Removing instruction b2_from_main:
Removing instruction b3:
Removing instruction b6:
Removing instruction breturn:
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
Skipping double jump to b2 in bne b2_from_b2
Skipping double jump to b2 in bpl b5
Succesful ASM optimization Pass5DoubleJumpElimination
Removing unreachable instruction rts
Succesful ASM optimization Pass5UnreachableCodeElimination
Relabelling long label b2_from_b2 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b5:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction jmp b2
Succesful ASM optimization Pass5UnreachableCodeElimination
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination

FINAL SYMBOL TABLE
(label) @3
(label) @begin
(label) @end
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(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_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
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(void()) anim()
(signed word~) anim::$10 $10 zp ZP_WORD:14 4.0
(signed word~) anim::$12 $12 zp ZP_WORD:16 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:14 0.8571428571428571
(signed word) anim::sprite_y
(signed word) anim::sprite_y#0 sprite_y zp ZP_WORD:16 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:12 16.5
(byte*) init::sc#2 sc zp ZP_WORD:12 16.5
(void()) main()
(label) main::@2
(label) main::@3
(label) main::@6
(label) main::@return
(signed word) xpos
(signed word) xpos#10 xpos zp ZP_WORD:8 0.9999999999999999
(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.0
(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.0714285714285714
(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.9375
(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.8823529411764707
(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 ]
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 ]
zp ZP_WORD:12 [ init::sc#2 init::sc#1 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:14 [ anim::$10 anim::sprite_x#0 ]
zp ZP_WORD:16 [ anim::$12 anim::sprite_y#0 ]
reg byte a [ anim::$14 ]
reg byte a [ anim::$15 ]
reg byte a [ anim::$16 ]


FINAL ASSEMBLER
Score: 6153

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

