@begin: scope:[]  from
  [0] phi()
  to:@21
@21: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @21
  [3] phi()
main: scope:[main]  from @21
  [4] phi()
  [5] call init 
  to:main::@1
main::@1: scope:[main]  from main main::@4
  [6] (byte) main::x#4 ← phi( main::@4/(byte) main::x#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@8
  [7] (byte) main::y#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@8/(byte) main::y#1 )
  [8] (byte) main::z#0 ← (byte) main::x#4 + (byte) main::y#2
  [9] (byte) main::tile#0 ← *((const byte*) level_address#0 + (byte) main::z#0)
  [10] (byte) draw_block::tileno#0 ← (byte) main::tile#0
  [11] (byte) draw_block::x#0 ← (byte) main::x#4
  [12] (byte) draw_block::y#0 ← (byte) main::y#2
  [13] call draw_block 
  to:main::@8
main::@8: scope:[main]  from main::@2
  [14] (byte) main::y#1 ← ++ (byte) main::y#2
  [15] if((byte) main::y#1<(byte/signed byte/word/signed word/dword/signed dword) 9) goto main::@2
  to:main::@4
main::@4: scope:[main]  from main::@8
  [16] (byte) main::x#1 ← ++ (byte) main::x#4
  [17] if((byte) main::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto main::@1
  to:main::@3
main::@3: scope:[main]  from main::@3 main::@4
  [18] phi()
  to:main::@3
draw_block: scope:[draw_block]  from main::@2
  [19] (byte) draw_block::tileno#1 ← (byte) draw_block::tileno#0 << (byte/signed byte/word/signed word/dword/signed dword) 2
  [20] (byte~) draw_block::$1 ← (byte) draw_block::x#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [21] (word) draw_block::x1#0 ← ((word)) (byte~) draw_block::$1
  [22] (byte) draw_block::y#1 ← (byte) draw_block::y#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [23] (byte) mul8u::a#1 ← (byte) draw_block::y#1
  [24] call mul8u 
  [25] (word) mul8u::return#2 ← (word) mul8u::res#2
  to:draw_block::@1
draw_block::@1: scope:[draw_block]  from draw_block
  [26] (word) draw_block::z#0 ← (word) mul8u::return#2
  [27] (word) draw_block::z#1 ← (word) draw_block::z#0 + (word) draw_block::x1#0
  [28] (byte) draw_block::drawtile#0 ← *((const byte*) tileset#0 + (byte) draw_block::tileno#1)
  [29] *((const byte*) screen#0 + (word) draw_block::z#1) ← (byte) draw_block::drawtile#0
  [30] *((const byte*) colors#0 + (word) draw_block::z#1) ← (const byte) YELLOW#0
  [31] *((const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word) draw_block::z#1) ← (byte/signed byte/word/signed word/dword/signed dword) 1
  [32] *((const byte*) colors#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word) draw_block::z#1) ← (const byte) YELLOW#0
  [33] *((const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word) draw_block::z#1) ← (byte/signed byte/word/signed word/dword/signed dword) 2
  [34] *((const byte*) colors#0+(byte/signed byte/word/signed word/dword/signed dword) 40 + (word) draw_block::z#1) ← (const byte) YELLOW#0
  [35] *((const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 41 + (word) draw_block::z#1) ← (byte/signed byte/word/signed word/dword/signed dword) 3
  [36] *((const byte*) colors#0+(byte/signed byte/word/signed word/dword/signed dword) 41 + (word) draw_block::z#1) ← (const byte) YELLOW#0
  to:draw_block::@return
draw_block::@return: scope:[draw_block]  from draw_block::@1
  [37] return 
  to:@return
mul8u: scope:[mul8u]  from draw_block
  [38] phi()
  to:mul8u::@1
mul8u::@1: scope:[mul8u]  from mul8u mul8u::@4
  [39] (word) mul8u::mb#2 ← phi( mul8u/((word))(const byte) mul8u::b#0 mul8u::@4/(word) mul8u::mb#1 )
  [39] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 )
  [39] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@4/(byte) mul8u::a#0 )
  [40] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2
  to:mul8u::@return
mul8u::@return: scope:[mul8u]  from mul8u::@1
  [41] return 
  to:@return
mul8u::@2: scope:[mul8u]  from mul8u::@1
  [42] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1
  [43] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4
  to:mul8u::@7
mul8u::@7: scope:[mul8u]  from mul8u::@2
  [44] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
  to:mul8u::@4
mul8u::@4: scope:[mul8u]  from mul8u::@2 mul8u::@7
  [45] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 )
  [46] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  [47] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
  to:mul8u::@1
init: scope:[init]  from main
  [48] phi()
  [49] call init_sprites 
  to:init::@2
init::@2: scope:[init]  from init
  [50] phi()
  [51] call fill 
  to:init::@3
init::@3: scope:[init]  from init::@2
  [52] phi()
  [53] call fill 
  to:init::toD0181
init::toD0181: scope:[init]  from init::@3
  [54] phi()
  to:init::@1
init::@1: scope:[init]  from init::toD0181
  [55] *((const byte*) D018#0) ← (const byte) init::toD0181_return#0
  asm { lda#$5b sta$d011  }
  [57] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
  [58] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0
  [59] *((const byte*) BGCOL2#0) ← (const byte) RED#0
  [60] *((const byte*) BGCOL3#0) ← (const byte) BLUE#0
  [61] *((const byte*) BGCOL4#0) ← (const byte) GREEN#0
  to:init::@return
init::@return: scope:[init]  from init::@1
  [62] return 
  to:@return
fill: scope:[fill]  from init::@2 init::@3
  [63] (byte) fill::val#3 ← phi( init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@3/(const byte) BLACK#0 )
  [63] (byte*) fill::addr#0 ← phi( init::@2/(const byte*) screen#0 init::@3/(const byte*) colors#0 )
  [64] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
  to:fill::@1
fill::@1: scope:[fill]  from fill fill::@1
  [65] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
  [66] *((byte*) fill::addr#2) ← (byte) fill::val#3
  [67] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
  [68] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
  to:fill::@return
fill::@return: scope:[fill]  from fill::@1
  [69] return 
  to:@return
init_sprites: scope:[init_sprites]  from init
  [70] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1
  [71] *((const byte*) SPRITES_EXPAND_X#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [72] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [73] *((const byte*) SPRITES_XMSB#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [74] *((const byte*) SPRITES_COLS#0) ← (const byte) WHITE#0
  [75] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:init_sprites::@return
init_sprites::@return: scope:[init_sprites]  from init_sprites
  [76] return 
  to:@return
