Inlined call call __init CONTROL FLOW GRAPH SSA void print_str_ln(char *str) print_str_ln: scope:[print_str_ln] from game_ready::@1 main::@3 print_line_cursor#31 = phi( game_ready::@1/print_line_cursor#29, main::@3/print_line_cursor#27 ) print_char_cursor#33 = phi( game_ready::@1/print_char_cursor#40, main::@3/print_char_cursor#38 ) print_str_ln::str#2 = phi( game_ready::@1/print_str_ln::str#1, main::@3/print_str_ln::str#0 ) print_str::str#0 = print_str_ln::str#2 call print_str to:print_str_ln::@1 print_str_ln::@1: scope:[print_str_ln] from print_str_ln print_line_cursor#24 = phi( print_str_ln/print_line_cursor#31 ) print_char_cursor#17 = phi( print_str_ln/print_char_cursor#4 ) print_char_cursor#0 = print_char_cursor#17 call print_ln to:print_str_ln::@2 print_str_ln::@2: scope:[print_str_ln] from print_str_ln::@1 print_char_cursor#18 = phi( print_str_ln::@1/print_char_cursor#6 ) print_line_cursor#12 = phi( print_str_ln::@1/print_line_cursor#3 ) print_line_cursor#0 = print_line_cursor#12 print_char_cursor#1 = print_char_cursor#18 to:print_str_ln::@return print_str_ln::@return: scope:[print_str_ln] from print_str_ln::@2 print_line_cursor#13 = phi( print_str_ln::@2/print_line_cursor#0 ) print_char_cursor#19 = phi( print_str_ln::@2/print_char_cursor#1 ) print_char_cursor#2 = print_char_cursor#19 print_line_cursor#1 = print_line_cursor#13 return to:@return void print_str(char *str) print_str: scope:[print_str] from print_str_ln print_char_cursor#42 = phi( print_str_ln/print_char_cursor#33 ) print_str::str#5 = phi( print_str_ln/print_str::str#0 ) to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@3 print_char_cursor#35 = phi( print_str/print_char_cursor#42, print_str::@3/print_char_cursor#3 ) print_str::str#2 = phi( print_str/print_str::str#5, print_str::@3/print_str::str#1 ) print_str::$1 = 0 != *print_str::str#2 if(print_str::$1) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 print_char_cursor#34 = phi( print_str::@1/print_char_cursor#35 ) print_str::str#3 = phi( print_str::@1/print_str::str#2 ) print_char::ch#0 = *print_str::str#3 call print_char to:print_str::@3 print_str::@3: scope:[print_str] from print_str::@2 print_str::str#4 = phi( print_str::@2/print_str::str#3 ) print_char_cursor#20 = phi( print_str::@2/print_char_cursor#8 ) print_char_cursor#3 = print_char_cursor#20 print_str::str#1 = ++ print_str::str#4 to:print_str::@1 print_str::@return: scope:[print_str] from print_str::@1 print_char_cursor#21 = phi( print_str::@1/print_char_cursor#35 ) print_char_cursor#4 = print_char_cursor#21 return to:@return void print_ln() print_ln: scope:[print_ln] from print_str_ln::@1 print_char_cursor#36 = phi( print_str_ln::@1/print_char_cursor#0 ) print_line_cursor#25 = phi( print_str_ln::@1/print_line_cursor#24 ) to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 print_char_cursor#22 = phi( print_ln/print_char_cursor#36, print_ln::@1/print_char_cursor#22 ) print_line_cursor#14 = phi( print_ln/print_line_cursor#25, print_ln::@1/print_line_cursor#2 ) print_ln::$0 = print_line_cursor#14 + $28 print_line_cursor#2 = print_ln::$0 print_ln::$1 = print_line_cursor#2 < print_char_cursor#22 if(print_ln::$1) goto print_ln::@1 to:print_ln::@2 print_ln::@2: scope:[print_ln] from print_ln::@1 print_line_cursor#15 = phi( print_ln::@1/print_line_cursor#2 ) print_char_cursor#5 = print_line_cursor#15 to:print_ln::@return print_ln::@return: scope:[print_ln] from print_ln::@2 print_char_cursor#23 = phi( print_ln::@2/print_char_cursor#5 ) print_line_cursor#16 = phi( print_ln::@2/print_line_cursor#15 ) print_line_cursor#3 = print_line_cursor#16 print_char_cursor#6 = print_char_cursor#23 return to:@return void print_char(char ch) print_char: scope:[print_char] from print_str::@2 print_char_cursor#24 = phi( print_str::@2/print_char_cursor#34 ) print_char::ch#1 = phi( print_str::@2/print_char::ch#0 ) *print_char_cursor#24 = print_char::ch#1 print_char_cursor#7 = ++ print_char_cursor#24 to:print_char::@return print_char::@return: scope:[print_char] from print_char print_char_cursor#25 = phi( print_char/print_char_cursor#7 ) print_char_cursor#8 = print_char_cursor#25 return to:@return void main() main: scope:[main] from __start::@1 action_count#19 = phi( __start::@1/action_count#18 ) print_line_cursor#32 = phi( __start::@1/print_line_cursor#30 ) print_char_cursor#43 = phi( __start::@1/print_char_cursor#41 ) main::i#0 = 0 to:main::@1 main::@1: scope:[main] from main main::@2 main::i#5 = phi( main/main::i#0, main::@2/main::i#1 ) action_count#15 = phi( main/action_count#19, main::@2/action_count#16 ) print_line_cursor#26 = phi( main/print_line_cursor#32, main::@2/print_line_cursor#28 ) print_char_cursor#37 = phi( main/print_char_cursor#43, main::@2/print_char_cursor#39 ) call game_ready game_ready::return#0 = game_ready::return#2 to:main::@4 main::@4: scope:[main] from main::@1 main::i#3 = phi( main::@1/main::i#5 ) action_count#8 = phi( main::@1/action_count#4 ) print_line_cursor#17 = phi( main::@1/print_line_cursor#8 ) print_char_cursor#26 = phi( main::@1/print_char_cursor#13 ) game_ready::return#3 = phi( main::@1/game_ready::return#0 ) main::$0 = game_ready::return#3 print_char_cursor#9 = print_char_cursor#26 print_line_cursor#4 = print_line_cursor#17 action_count#0 = action_count#8 main::$1 = ! main::$0 if(main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@4 main::@5 action_count#16 = phi( main::@4/action_count#0, main::@5/action_count#20 ) print_line_cursor#28 = phi( main::@4/print_line_cursor#4, main::@5/print_line_cursor#5 ) print_char_cursor#39 = phi( main::@4/print_char_cursor#9, main::@5/print_char_cursor#10 ) main::i#2 = phi( main::@4/main::i#3, main::@5/main::i#4 ) main::i#1 = main::i#2 + rangenext(0,5) main::$3 = main::i#1 != rangelast(0,5) if(main::$3) goto main::@1 to:main::@return main::@3: scope:[main] from main::@4 action_count#21 = phi( main::@4/action_count#0 ) main::i#6 = phi( main::@4/main::i#3 ) print_line_cursor#27 = phi( main::@4/print_line_cursor#4 ) print_char_cursor#38 = phi( main::@4/print_char_cursor#9 ) print_str_ln::str#0 = main::str call print_str_ln to:main::@5 main::@5: scope:[main] from main::@3 action_count#20 = phi( main::@3/action_count#21 ) main::i#4 = phi( main::@3/main::i#6 ) print_line_cursor#18 = phi( main::@3/print_line_cursor#1 ) print_char_cursor#27 = phi( main::@3/print_char_cursor#2 ) print_char_cursor#10 = print_char_cursor#27 print_line_cursor#5 = print_line_cursor#18 to:main::@2 main::@return: scope:[main] from main::@2 action_count#9 = phi( main::@2/action_count#16 ) print_line_cursor#19 = phi( main::@2/print_line_cursor#28 ) print_char_cursor#28 = phi( main::@2/print_char_cursor#39 ) print_char_cursor#11 = print_char_cursor#28 print_line_cursor#6 = print_line_cursor#19 action_count#1 = action_count#9 return to:@return bool game_ready() game_ready: scope:[game_ready] from main::@1 print_line_cursor#33 = phi( main::@1/print_line_cursor#26 ) print_char_cursor#44 = phi( main::@1/print_char_cursor#37 ) action_count#10 = phi( main::@1/action_count#15 ) game_ready::$0 = action_count#10 == 0 game_ready::$1 = ! game_ready::$0 if(game_ready::$1) goto game_ready::@1 to:game_ready::@2 game_ready::@1: scope:[game_ready] from game_ready game_ready::@2 action_count#17 = phi( game_ready/action_count#10, game_ready::@2/action_count#3 ) print_line_cursor#29 = phi( game_ready/print_line_cursor#33, game_ready::@2/print_line_cursor#34 ) print_char_cursor#40 = phi( game_ready/print_char_cursor#44, game_ready::@2/print_char_cursor#45 ) print_str_ln::str#1 = game_ready::str call print_str_ln to:game_ready::@3 game_ready::@3: scope:[game_ready] from game_ready::@1 action_count#11 = phi( game_ready::@1/action_count#17 ) print_line_cursor#20 = phi( game_ready::@1/print_line_cursor#1 ) print_char_cursor#29 = phi( game_ready::@1/print_char_cursor#2 ) print_char_cursor#12 = print_char_cursor#29 print_line_cursor#7 = print_line_cursor#20 action_count#2 = -- action_count#11 game_ready::$3 = action_count#2 == 0 game_ready::return#1 = game_ready::$3 to:game_ready::@return game_ready::@2: scope:[game_ready] from game_ready print_line_cursor#34 = phi( game_ready/print_line_cursor#33 ) print_char_cursor#45 = phi( game_ready/print_char_cursor#44 ) action_count#3 = READY_FRAMES to:game_ready::@1 game_ready::@return: scope:[game_ready] from game_ready::@3 action_count#12 = phi( game_ready::@3/action_count#2 ) print_line_cursor#21 = phi( game_ready::@3/print_line_cursor#7 ) print_char_cursor#30 = phi( game_ready::@3/print_char_cursor#12 ) game_ready::return#4 = phi( game_ready::@3/game_ready::return#1 ) game_ready::return#2 = game_ready::return#4 print_char_cursor#13 = print_char_cursor#30 print_line_cursor#8 = print_line_cursor#21 action_count#4 = action_count#12 return to:@return void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start print_screen#0 = (char *)$400 print_line_cursor#9 = print_screen#0 print_char_cursor#14 = print_line_cursor#9 action_count#5 = 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 print_screen#4 = phi( __start::__init1/print_screen#0 ) action_count#18 = phi( __start::__init1/action_count#5 ) print_line_cursor#30 = phi( __start::__init1/print_line_cursor#9 ) print_char_cursor#41 = phi( __start::__init1/print_char_cursor#14 ) call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 print_screen#3 = phi( __start::@1/print_screen#4 ) action_count#13 = phi( __start::@1/action_count#1 ) print_line_cursor#22 = phi( __start::@1/print_line_cursor#6 ) print_char_cursor#31 = phi( __start::@1/print_char_cursor#11 ) print_char_cursor#15 = print_char_cursor#31 print_line_cursor#10 = print_line_cursor#22 action_count#6 = action_count#13 to:__start::@return __start::@return: scope:[__start] from __start::@2 action_count#14 = phi( __start::@2/action_count#6 ) print_char_cursor#32 = phi( __start::@2/print_char_cursor#15 ) print_line_cursor#23 = phi( __start::@2/print_line_cursor#10 ) print_screen#2 = phi( __start::@2/print_screen#3 ) print_screen#1 = print_screen#2 print_line_cursor#11 = print_line_cursor#23 print_char_cursor#16 = print_char_cursor#32 action_count#7 = action_count#14 return to:@return SYMBOL TABLE SSA __constant char RADIX::BINARY = 2 __constant char RADIX::DECIMAL = $a __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 __constant const char READY_FRAMES = 5 void __start() char action_count char action_count#0 char action_count#1 char action_count#10 char action_count#11 char action_count#12 char action_count#13 char action_count#14 char action_count#15 char action_count#16 char action_count#17 char action_count#18 char action_count#19 char action_count#2 char action_count#20 char action_count#21 char action_count#3 char action_count#4 char action_count#5 char action_count#6 char action_count#7 char action_count#8 char action_count#9 bool game_ready() bool game_ready::$0 bool game_ready::$1 bool game_ready::$3 bool game_ready::return bool game_ready::return#0 bool game_ready::return#1 bool game_ready::return#2 bool game_ready::return#3 bool game_ready::return#4 __constant char game_ready::str[6] = "ready" void main() bool main::$0 bool main::$1 bool main::$3 char main::i char main::i#0 char main::i#1 char main::i#2 char main::i#3 char main::i#4 char main::i#5 char main::i#6 __constant char main::str[7] = "ready!" void print_char(char ch) char print_char::ch char print_char::ch#0 char print_char::ch#1 char *print_char_cursor char *print_char_cursor#0 char *print_char_cursor#1 char *print_char_cursor#10 char *print_char_cursor#11 char *print_char_cursor#12 char *print_char_cursor#13 char *print_char_cursor#14 char *print_char_cursor#15 char *print_char_cursor#16 char *print_char_cursor#17 char *print_char_cursor#18 char *print_char_cursor#19 char *print_char_cursor#2 char *print_char_cursor#20 char *print_char_cursor#21 char *print_char_cursor#22 char *print_char_cursor#23 char *print_char_cursor#24 char *print_char_cursor#25 char *print_char_cursor#26 char *print_char_cursor#27 char *print_char_cursor#28 char *print_char_cursor#29 char *print_char_cursor#3 char *print_char_cursor#30 char *print_char_cursor#31 char *print_char_cursor#32 char *print_char_cursor#33 char *print_char_cursor#34 char *print_char_cursor#35 char *print_char_cursor#36 char *print_char_cursor#37 char *print_char_cursor#38 char *print_char_cursor#39 char *print_char_cursor#4 char *print_char_cursor#40 char *print_char_cursor#41 char *print_char_cursor#42 char *print_char_cursor#43 char *print_char_cursor#44 char *print_char_cursor#45 char *print_char_cursor#5 char *print_char_cursor#6 char *print_char_cursor#7 char *print_char_cursor#8 char *print_char_cursor#9 char *print_line_cursor char *print_line_cursor#0 char *print_line_cursor#1 char *print_line_cursor#10 char *print_line_cursor#11 char *print_line_cursor#12 char *print_line_cursor#13 char *print_line_cursor#14 char *print_line_cursor#15 char *print_line_cursor#16 char *print_line_cursor#17 char *print_line_cursor#18 char *print_line_cursor#19 char *print_line_cursor#2 char *print_line_cursor#20 char *print_line_cursor#21 char *print_line_cursor#22 char *print_line_cursor#23 char *print_line_cursor#24 char *print_line_cursor#25 char *print_line_cursor#26 char *print_line_cursor#27 char *print_line_cursor#28 char *print_line_cursor#29 char *print_line_cursor#3 char *print_line_cursor#30 char *print_line_cursor#31 char *print_line_cursor#32 char *print_line_cursor#33 char *print_line_cursor#34 char *print_line_cursor#4 char *print_line_cursor#5 char *print_line_cursor#6 char *print_line_cursor#7 char *print_line_cursor#8 char *print_line_cursor#9 void print_ln() char *print_ln::$0 bool print_ln::$1 char *print_screen char *print_screen#0 char *print_screen#1 char *print_screen#2 char *print_screen#3 char *print_screen#4 void print_str(char *str) bool print_str::$1 char *print_str::str char *print_str::str#0 char *print_str::str#1 char *print_str::str#2 char *print_str::str#3 char *print_str::str#4 char *print_str::str#5 void print_str_ln(char *str) char *print_str_ln::str char *print_str_ln::str#0 char *print_str_ln::str#1 char *print_str_ln::str#2 Adding number conversion cast (unumber) 0 in print_str::$1 = 0 != *print_str::str#2 Adding number conversion cast (unumber) $28 in print_ln::$0 = print_line_cursor#14 + $28 Adding number conversion cast (unumber) 0 in game_ready::$0 = action_count#10 == 0 Adding number conversion cast (unumber) 0 in game_ready::$3 = action_count#2 == 0 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (char *) 1024 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 0 Finalized unsigned number type (char) $28 Finalized unsigned number type (char) 0 Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [73] game_ready::$1 = action_count#10 != 0 from [72] game_ready::$0 = action_count#10 == 0 Successful SSA optimization Pass2UnaryNotSimplification Alias print_line_cursor#24 = print_line_cursor#31 Alias print_char_cursor#0 = print_char_cursor#17 Alias print_line_cursor#0 = print_line_cursor#12 print_line_cursor#13 print_line_cursor#1 Alias print_char_cursor#1 = print_char_cursor#18 print_char_cursor#19 print_char_cursor#2 Alias print_str::str#2 = print_str::str#3 print_str::str#4 Alias print_char_cursor#21 = print_char_cursor#34 print_char_cursor#35 print_char_cursor#4 Alias print_char_cursor#20 = print_char_cursor#3 Alias print_line_cursor#15 = print_line_cursor#2 print_ln::$0 print_char_cursor#5 print_line_cursor#16 print_char_cursor#23 print_line_cursor#3 print_char_cursor#6 Alias print_char_cursor#25 = print_char_cursor#7 print_char_cursor#8 Alias game_ready::return#0 = game_ready::return#3 Alias main::i#3 = main::i#5 main::i#6 main::i#4 Alias print_char_cursor#26 = print_char_cursor#9 print_char_cursor#38 Alias print_line_cursor#17 = print_line_cursor#4 print_line_cursor#27 Alias action_count#0 = action_count#8 action_count#21 action_count#20 Alias print_char_cursor#10 = print_char_cursor#27 Alias print_line_cursor#18 = print_line_cursor#5 Alias print_char_cursor#11 = print_char_cursor#28 print_char_cursor#39 Alias print_line_cursor#19 = print_line_cursor#28 print_line_cursor#6 Alias action_count#1 = action_count#9 action_count#16 Alias action_count#11 = action_count#17 Alias print_char_cursor#12 = print_char_cursor#29 print_char_cursor#30 print_char_cursor#13 Alias print_line_cursor#20 = print_line_cursor#7 print_line_cursor#21 print_line_cursor#8 Alias game_ready::return#1 = game_ready::$3 game_ready::return#4 game_ready::return#2 Alias print_char_cursor#44 = print_char_cursor#45 Alias print_line_cursor#33 = print_line_cursor#34 Alias action_count#12 = action_count#2 action_count#4 Alias print_screen#0 = print_line_cursor#9 print_char_cursor#14 print_char_cursor#41 print_line_cursor#30 print_screen#4 print_screen#3 print_screen#2 print_screen#1 Alias action_count#18 = action_count#5 Alias print_char_cursor#15 = print_char_cursor#31 print_char_cursor#32 print_char_cursor#16 Alias print_line_cursor#10 = print_line_cursor#22 print_line_cursor#23 print_line_cursor#11 Alias action_count#13 = action_count#6 action_count#14 action_count#7 Successful SSA optimization Pass2AliasElimination Alias main::i#2 = main::i#3 Alias action_count#0 = action_count#1 Alias print_char_cursor#40 = print_char_cursor#44 Alias print_line_cursor#29 = print_line_cursor#33 Successful SSA optimization Pass2AliasElimination Identical Phi Values print_char_cursor#0 print_char_cursor#21 Identical Phi Values print_line_cursor#0 print_line_cursor#15 Identical Phi Values print_char_cursor#1 print_line_cursor#15 Identical Phi Values print_str::str#5 print_str::str#0 Identical Phi Values print_char_cursor#42 print_char_cursor#33 Identical Phi Values print_char_cursor#20 print_char_cursor#25 Identical Phi Values print_line_cursor#25 print_line_cursor#24 Identical Phi Values print_char_cursor#36 print_char_cursor#0 Identical Phi Values print_char_cursor#22 print_char_cursor#36 Identical Phi Values print_char::ch#1 print_char::ch#0 Identical Phi Values print_char_cursor#24 print_char_cursor#21 Identical Phi Values print_char_cursor#43 print_screen#0 Identical Phi Values print_line_cursor#32 print_screen#0 Identical Phi Values action_count#19 action_count#18 Identical Phi Values print_char_cursor#26 print_char_cursor#12 Identical Phi Values print_line_cursor#17 print_line_cursor#20 Identical Phi Values action_count#0 action_count#12 Identical Phi Values print_char_cursor#10 print_char_cursor#1 Identical Phi Values print_line_cursor#18 print_line_cursor#0 Identical Phi Values action_count#10 action_count#15 Identical Phi Values print_char_cursor#40 print_char_cursor#37 Identical Phi Values print_line_cursor#29 print_line_cursor#26 Identical Phi Values print_char_cursor#12 print_char_cursor#1 Identical Phi Values print_line_cursor#20 print_line_cursor#0 Identical Phi Values print_char_cursor#15 print_char_cursor#11 Identical Phi Values print_line_cursor#10 print_line_cursor#19 Identical Phi Values action_count#13 action_count#0 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values print_char_cursor#11 print_line_cursor#15 Identical Phi Values print_line_cursor#19 print_line_cursor#15 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition print_str::$1 [10] if(0!=*print_str::str#2) goto print_str::@2 Simple Condition print_ln::$1 [20] if(print_line_cursor#15main::@1] __b1_from_main: // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // [1] phi action_count#15 = 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 ldx #0 // [1] phi print_line_cursor#26 = print_screen#0 [phi:main->main::@1#2] -- pbuz1=pbuc1 lda #print_screen sta.z print_line_cursor+1 // [1] phi print_char_cursor#37 = print_screen#0 [phi:main->main::@1#3] -- pbuz1=pbuc1 lda #print_screen sta.z print_char_cursor+1 jmp __b1 // main::@1 __b1: // [2] call game_ready jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 jmp __b4 // main::@4 __b4: // [4] main::$0 = game_ready::return#0 // [5] if(main::$0) goto main::@3 -- vboaa_then_la1 cmp #0 bne __b3 jmp __b2 // main::@3 __b3: // [6] print_char_cursor#47 = print_line_cursor#15 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 // [7] call print_str_ln // [19] phi from main::@3 to print_str_ln [phi:main::@3->print_str_ln] print_str_ln_from___b3: // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 lda #str sta.z print_str_ln.str+1 jsr print_str_ln jmp __b2 // main::@2 __b2: // [8] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [9] if(main::i#1!=6) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 lda #6 cmp.z i bne __b5 jmp __breturn // main::@return __breturn: // [10] return rts // main::@5 __b5: // [11] print_char_cursor#50 = print_line_cursor#15 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 // [1] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: // [1] phi main::i#2 = main::i#1 [phi:main::@5->main::@1#0] -- register_copy // [1] phi action_count#15 = action_count#12 [phi:main::@5->main::@1#1] -- register_copy // [1] phi print_line_cursor#26 = print_line_cursor#15 [phi:main::@5->main::@1#2] -- register_copy // [1] phi print_char_cursor#37 = print_char_cursor#50 [phi:main::@5->main::@1#3] -- register_copy jmp __b1 .segment Data str: .text "ready!" .byte 0 } .segment Code // game_ready game_ready: { // [12] if(action_count#15!=0) goto game_ready::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3_from_game_ready // [14] phi from game_ready to game_ready::@1 [phi:game_ready->game_ready::@1] __b1_from_game_ready: // [14] phi action_count#11 = READY_FRAMES [phi:game_ready->game_ready::@1#0] -- vbuxx=vbuc1 ldx #READY_FRAMES jmp __b1 // [13] phi from game_ready to game_ready::@3 [phi:game_ready->game_ready::@3] __b3_from_game_ready: jmp __b3 // game_ready::@3 __b3: // [14] phi from game_ready::@3 to game_ready::@1 [phi:game_ready::@3->game_ready::@1] __b1_from___b3: // [14] phi action_count#11 = action_count#15 [phi:game_ready::@3->game_ready::@1#0] -- register_copy jmp __b1 // game_ready::@1 __b1: // [15] call print_str_ln // [19] phi from game_ready::@1 to print_str_ln [phi:game_ready::@1->print_str_ln] print_str_ln_from___b1: // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 lda #str sta.z print_str_ln.str+1 jsr print_str_ln jmp __b2 // game_ready::@2 __b2: // [16] action_count#12 = -- action_count#11 -- vbuxx=_dec_vbuxx dex // [17] game_ready::return#1 = action_count#12 == 0 -- vboaa=vbuxx_eq_vbuc1 lda #1 cpx #0 beq !+ lda #0 !: jmp __breturn // game_ready::@return __breturn: // [18] return rts .segment Data str: .text "ready" .byte 0 } .segment Code // print_str_ln // Print a zero-terminated string followed by a newline // void print_str_ln(__zp(4) char *str) print_str_ln: { .label str = 4 // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] print_str_from_print_str_ln: jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] __b1_from_print_str_ln: jmp __b1 // print_str_ln::@1 __b1: // [23] call print_ln // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] print_ln_from___b1: jsr print_ln jmp __breturn // print_str_ln::@return __breturn: // [24] return rts } // print_str // Print a zero-terminated string // void print_str(__zp(4) char *str) print_str: { .label str = 4 // [26] phi from print_str print_str::@3 to print_str::@1 [phi:print_str/print_str::@3->print_str::@1] __b1_from_print_str: __b1_from___b3: // [26] phi print_char_cursor#21 = print_char_cursor#33 [phi:print_str/print_str::@3->print_str::@1#0] -- register_copy // [26] phi print_str::str#2 = print_str::str#0 [phi:print_str/print_str::@3->print_str::@1#1] -- register_copy jmp __b1 // print_str::@1 __b1: // [27] if(0!=*print_str::str#2) goto print_str::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 jmp __breturn // print_str::@return __breturn: // [28] return rts // print_str::@2 __b2: // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y // [30] call print_char jsr print_char jmp __b3 // print_str::@3 __b3: // [31] print_str::str#1 = ++ print_str::str#2 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: jmp __b1_from___b3 } // print_ln // Print a newline print_ln: { // [33] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] __b1_from_print_ln: __b1_from___b1: // [33] phi print_line_cursor#14 = print_line_cursor#24 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy jmp __b1 // print_ln::@1 __b1: // [34] print_line_cursor#15 = print_line_cursor#14 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z print_line_cursor sta.z print_line_cursor bcc !+ inc.z print_line_cursor+1 !: // [35] if(print_line_cursor#15main::@1] // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // [1] phi action_count#15 = 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 tax // [1] phi print_line_cursor#26 = print_screen#0 [phi:main->main::@1#2] -- pbuz1=pbuc1 lda #print_screen sta.z print_line_cursor+1 // [1] phi print_char_cursor#37 = print_screen#0 [phi:main->main::@1#3] -- pbuz1=pbuc1 lda #print_screen sta.z print_char_cursor+1 // main::@1 __b1: // game_ready() // [2] call game_ready jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 // main::@4 // [4] main::$0 = game_ready::return#0 // if(game_ready()) // [5] if(main::$0) goto main::@3 -- vboaa_then_la1 cmp #0 bne __b3 jmp __b2 // main::@3 __b3: // [6] print_char_cursor#47 = print_line_cursor#15 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 // print_str_ln("ready!") // [7] call print_str_ln // [19] phi from main::@3 to print_str_ln [phi:main::@3->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 lda #str sta.z print_str_ln.str+1 jsr print_str_ln // main::@2 __b2: // for(byte i:0..5) // [8] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [9] if(main::i#1!=6) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 lda #6 cmp.z i bne __b5 // main::@return // } // [10] return rts // main::@5 __b5: // [11] print_char_cursor#50 = print_line_cursor#15 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 // [1] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [1] phi main::i#2 = main::i#1 [phi:main::@5->main::@1#0] -- register_copy // [1] phi action_count#15 = action_count#12 [phi:main::@5->main::@1#1] -- register_copy // [1] phi print_line_cursor#26 = print_line_cursor#15 [phi:main::@5->main::@1#2] -- register_copy // [1] phi print_char_cursor#37 = print_char_cursor#50 [phi:main::@5->main::@1#3] -- register_copy jmp __b1 .segment Data str: .text "ready!" .byte 0 } .segment Code // game_ready game_ready: { // if (action_count == 0) // [12] if(action_count#15!=0) goto game_ready::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1 // [14] phi from game_ready to game_ready::@1 [phi:game_ready->game_ready::@1] // [14] phi action_count#11 = READY_FRAMES [phi:game_ready->game_ready::@1#0] -- vbuxx=vbuc1 ldx #READY_FRAMES // [13] phi from game_ready to game_ready::@3 [phi:game_ready->game_ready::@3] // game_ready::@3 // [14] phi from game_ready::@3 to game_ready::@1 [phi:game_ready::@3->game_ready::@1] // [14] phi action_count#11 = action_count#15 [phi:game_ready::@3->game_ready::@1#0] -- register_copy // game_ready::@1 __b1: // print_str_ln("ready") // [15] call print_str_ln // [19] phi from game_ready::@1 to print_str_ln [phi:game_ready::@1->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 lda #str sta.z print_str_ln.str+1 jsr print_str_ln // game_ready::@2 // action_count--; // [16] action_count#12 = -- action_count#11 -- vbuxx=_dec_vbuxx dex // action_count==0 // [17] game_ready::return#1 = action_count#12 == 0 -- vboaa=vbuxx_eq_vbuc1 lda #1 cpx #0 beq !+ lda #0 !: // game_ready::@return // } // [18] return rts .segment Data str: .text "ready" .byte 0 } .segment Code // print_str_ln // Print a zero-terminated string followed by a newline // void print_str_ln(__zp(4) char *str) print_str_ln: { .label str = 4 // print_str(str) // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] // print_str_ln::@1 // print_ln() // [23] call print_ln // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] jsr print_ln // print_str_ln::@return // } // [24] return rts } // print_str // Print a zero-terminated string // void print_str(__zp(4) char *str) print_str: { .label str = 4 // [26] phi from print_str print_str::@3 to print_str::@1 [phi:print_str/print_str::@3->print_str::@1] // [26] phi print_char_cursor#21 = print_char_cursor#33 [phi:print_str/print_str::@3->print_str::@1#0] -- register_copy // [26] phi print_str::str#2 = print_str::str#0 [phi:print_str/print_str::@3->print_str::@1#1] -- register_copy // print_str::@1 __b1: // while(*str) // [27] if(0!=*print_str::str#2) goto print_str::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 // print_str::@return // } // [28] return rts // print_str::@2 __b2: // print_char(*(str++)) // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y // [30] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); // [31] print_str::str#1 = ++ print_str::str#2 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: jmp __b1 } // print_ln // Print a newline print_ln: { // [33] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] // [33] phi print_line_cursor#14 = print_line_cursor#24 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy // print_ln::@1 __b1: // print_line_cursor + 0x28 // [34] print_line_cursor#15 = print_line_cursor#14 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z print_line_cursor sta.z print_line_cursor bcc !+ inc.z print_line_cursor+1 !: // while (print_line_cursor