@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @1
  [3] phi()
main: scope:[main]  from @1
  [4] phi()
  to:main::@1
main::@1: scope:[main]  from main main::@1
  [5] (byte*) main::sc#2 ← phi( main/(const byte*) SCREEN#0 main::@1/(byte*) main::sc#1 )
  [6] *((byte*) main::sc#2) ← (byte) ' '
  [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2
  [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word) $3e8) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  [9] phi()
  [10] call print_str_at 
  to:main::@16
main::@16: scope:[main]  from main::@2
  [11] phi()
  [12] call print_str_at 
  to:main::@17
main::@17: scope:[main]  from main::@16
  [13] phi()
  [14] call print_str_at 
  to:main::@18
main::@18: scope:[main]  from main::@17
  [15] phi()
  [16] call print_str_at 
  to:main::@3
main::@3: scope:[main]  from main::@18 main::@19
  [17] (byte) main::i#2 ← phi( main::@18/(byte) 0 main::@19/(byte) main::i#1 )
  [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2
  [19] call plot_chargen 
  to:main::@19
main::@19: scope:[main]  from main::@3
  [20] (byte) main::i#1 ← ++ (byte) main::i#2
  [21] if((byte) main::i#1!=(byte) 4) goto main::@3
  to:main::@4
main::@4: scope:[main]  from main::@13 main::@19
  [22] (byte) main::cur_pos#24 ← phi( main::@13/(byte) main::cur_pos#11 main::@19/(byte) 0 )
  [23] call keyboard_key_pressed 
  [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0
  to:main::@20
main::@20: scope:[main]  from main::@4
  [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2
  [26] if((byte~) main::$15==(byte) 0) goto main::@27
  to:main::@5
main::@27: scope:[main]  from main::@20
  [27] phi()
  to:main::@5
main::@5: scope:[main]  from main::@20 main::@27
  [28] (byte) main::cur_pos#22 ← phi( main::@20/(byte) 0 main::@27/(byte) main::cur_pos#24 )
  [29] call keyboard_key_pressed 
  [30] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0
  to:main::@21
main::@21: scope:[main]  from main::@5
  [31] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10
  [32] if((byte~) main::$18==(byte) 0) goto main::@28
  to:main::@6
main::@28: scope:[main]  from main::@21
  [33] phi()
  to:main::@6
main::@6: scope:[main]  from main::@21 main::@28
  [34] (byte) main::cur_pos#20 ← phi( main::@21/(byte) 1 main::@28/(byte) main::cur_pos#22 )
  [35] call keyboard_key_pressed 
  [36] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0
  to:main::@22
main::@22: scope:[main]  from main::@6
  [37] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11
  [38] if((byte~) main::$21==(byte) 0) goto main::@29
  to:main::@7
main::@29: scope:[main]  from main::@22
  [39] phi()
  to:main::@7
main::@7: scope:[main]  from main::@22 main::@29
  [40] (byte) main::cur_pos#18 ← phi( main::@22/(byte) 2 main::@29/(byte) main::cur_pos#20 )
  [41] call keyboard_key_pressed 
  [42] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0
  to:main::@23
main::@23: scope:[main]  from main::@7
  [43] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12
  [44] if((byte~) main::$24==(byte) 0) goto main::@30
  to:main::@8
main::@30: scope:[main]  from main::@23
  [45] phi()
  to:main::@8
main::@8: scope:[main]  from main::@23 main::@30
  [46] (byte) main::cur_pos#11 ← phi( main::@23/(byte) 3 main::@30/(byte) main::cur_pos#18 )
  [47] call keyboard_key_pressed 
  [48] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0
  to:main::@24
main::@24: scope:[main]  from main::@8
  [49] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13
  [50] if((byte~) main::$27!=(byte) 0) goto main::@9
  to:main::@10
main::@9: scope:[main]  from main::@24
  [51] phi()
  to:main::@10
main::@10: scope:[main]  from main::@24 main::@9
  [52] (byte) main::shift#9 ← phi( main::@9/(byte) 1 main::@24/(byte) 0 )
  to:main::@11
main::@11: scope:[main]  from main::@10 main::@13
  [53] (byte) main::ch#2 ← phi( main::@10/(byte) 0 main::@13/(byte) main::ch#1 )
  [54] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2
  [55] call keyboard_get_keycode 
  [56] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0
  to:main::@25
main::@25: scope:[main]  from main::@11
  [57] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2
  [58] if((byte) main::key#0==(byte) $3f) goto main::@12
  to:main::@14
main::@14: scope:[main]  from main::@25
  [59] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0
  [60] call keyboard_key_pressed 
  [61] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0
  to:main::@26
main::@26: scope:[main]  from main::@14
  [62] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14
  to:main::@12
main::@12: scope:[main]  from main::@25 main::@26
  [63] (byte) main::pressed#2 ← phi( main::@25/(byte) 0 main::@26/(byte) main::pressed#1 )
  [64] if((byte) main::pressed#2==(byte) 0) goto main::@13
  to:main::@15
main::@15: scope:[main]  from main::@12
  [65] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#11
  [66] (byte) plot_chargen::ch#1 ← (byte) main::ch#2
  [67] (byte) plot_chargen::shift#1 ← (byte) main::shift#9
  [68] call plot_chargen 
  to:main::@13
main::@13: scope:[main]  from main::@12 main::@15
  [69] (byte) main::ch#1 ← ++ (byte) main::ch#2
  [70] if((byte) main::ch#1!=(byte) $40) goto main::@11
  to:main::@4
plot_chargen: scope:[plot_chargen]  from main::@15 main::@3
  [71] (byte) plot_chargen::pos#2 ← phi( main::@15/(byte) plot_chargen::pos#1 main::@3/(byte) plot_chargen::pos#0 )
  [71] (byte) plot_chargen::shift#2 ← phi( main::@15/(byte) plot_chargen::shift#1 main::@3/(byte) 0 )
  [71] (byte) plot_chargen::ch#2 ← phi( main::@15/(byte) plot_chargen::ch#1 main::@3/(byte) $20 )
  asm { sei  }
  [73] (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2
  [74] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte) 3
  [75] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1
  [76] if((byte) plot_chargen::shift#2==(byte) 0) goto plot_chargen::@1
  to:plot_chargen::@2
plot_chargen::@2: scope:[plot_chargen]  from plot_chargen
  [77] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word) $800
  to:plot_chargen::@1
plot_chargen::@1: scope:[plot_chargen]  from plot_chargen plot_chargen::@2
  [78] (byte*) plot_chargen::chargen#5 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@2/(byte*) plot_chargen::chargen#1 )
  [79] *((const byte*) PROCPORT#0) ← (byte) $32
  [80] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2
  [81] call mul8u 
  [82] (word) mul8u::return#2 ← (word) mul8u::res#2
  to:plot_chargen::@9
plot_chargen::@9: scope:[plot_chargen]  from plot_chargen::@1
  [83] (word~) plot_chargen::$7 ← (word) mul8u::return#2
  [84] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte) $28+(byte) 1 + (word~) plot_chargen::$7
  to:plot_chargen::@3
plot_chargen::@3: scope:[plot_chargen]  from plot_chargen::@7 plot_chargen::@9
  [85] (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@7/(byte*) plot_chargen::sc#2 plot_chargen::@9/(byte*) plot_chargen::sc#0 )
  [85] (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte) 0 )
  [86] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2)
  to:plot_chargen::@4
plot_chargen::@4: scope:[plot_chargen]  from plot_chargen::@3 plot_chargen::@5
  [87] (byte) plot_chargen::x#2 ← phi( plot_chargen::@3/(byte) 0 plot_chargen::@5/(byte) plot_chargen::x#1 )
  [87] (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#7 plot_chargen::@5/(byte*) plot_chargen::sc#1 )
  [87] (byte) plot_chargen::bits#2 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#0 plot_chargen::@5/(byte) plot_chargen::bits#1 )
  [88] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte) $80
  [89] if((byte~) plot_chargen::$10==(byte) 0) goto plot_chargen::@5
  to:plot_chargen::@6
plot_chargen::@6: scope:[plot_chargen]  from plot_chargen::@4
  [90] phi()
  to:plot_chargen::@5
plot_chargen::@5: scope:[plot_chargen]  from plot_chargen::@4 plot_chargen::@6
  [91] (byte) plot_chargen::c#2 ← phi( plot_chargen::@4/(byte) '.' plot_chargen::@6/(byte) '*' )
  [92] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2
  [93] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3
  [94] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte) 1
  [95] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2
  [96] if((byte) plot_chargen::x#1!=(byte) 8) goto plot_chargen::@4
  to:plot_chargen::@7
plot_chargen::@7: scope:[plot_chargen]  from plot_chargen::@5
  [97] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20
  [98] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2
  [99] if((byte) plot_chargen::y#1!=(byte) 8) goto plot_chargen::@3
  to:plot_chargen::@8
plot_chargen::@8: scope:[plot_chargen]  from plot_chargen::@7
  [100] *((const byte*) PROCPORT#0) ← (byte) $37
  asm { cli  }
  to:plot_chargen::@return
plot_chargen::@return: scope:[plot_chargen]  from plot_chargen::@8
  [102] return 
  to:@return
mul8u: scope:[mul8u]  from plot_chargen::@1
  [103] phi()
  to:mul8u::@1
mul8u::@1: scope:[mul8u]  from mul8u mul8u::@3
  [104] (word) mul8u::mb#2 ← phi( mul8u/(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 )
  [104] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 )
  [104] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 )
  [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2
  to:mul8u::@return
mul8u::@return: scope:[mul8u]  from mul8u::@1
  [106] return 
  to:@return
mul8u::@2: scope:[mul8u]  from mul8u::@1
  [107] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1
  [108] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
  to:mul8u::@4
mul8u::@4: scope:[mul8u]  from mul8u::@2
  [109] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
  to:mul8u::@3
mul8u::@3: scope:[mul8u]  from mul8u::@2 mul8u::@4
  [110] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
  [111] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte) 1
  [112] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
  to:mul8u::@1
keyboard_key_pressed: scope:[keyboard_key_pressed]  from main::@14 main::@4 main::@5 main::@6 main::@7 main::@8
  [113] (byte) keyboard_key_pressed::key#6 ← phi( main::@14/(byte) keyboard_key_pressed::key#5 main::@4/(const byte) KEY_F1#0 main::@5/(const byte) KEY_F3#0 main::@6/(const byte) KEY_F5#0 main::@7/(const byte) KEY_F7#0 main::@8/(const byte) KEY_LSHIFT#0 )
  [114] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#6 & (byte) 7
  [115] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3
  [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0
  [117] call keyboard_matrix_read 
  [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
  to:keyboard_key_pressed::@1
keyboard_key_pressed::@1: scope:[keyboard_key_pressed]  from keyboard_key_pressed
  [119] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_matrix_read::return#2
  [120] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$2 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_key_pressed::colidx#0)
  to:keyboard_key_pressed::@return
keyboard_key_pressed::@return: scope:[keyboard_key_pressed]  from keyboard_key_pressed::@1
  [121] return 
  to:@return
keyboard_matrix_read: scope:[keyboard_matrix_read]  from keyboard_key_pressed
  [122] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
  [123] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0)
  to:keyboard_matrix_read::@return
keyboard_matrix_read::@return: scope:[keyboard_matrix_read]  from keyboard_matrix_read
  [124] return 
  to:@return
keyboard_get_keycode: scope:[keyboard_get_keycode]  from main::@11
  [125] (byte) keyboard_get_keycode::return#0 ← *((const byte[]) keyboard_char_keycodes#0 + (byte) keyboard_get_keycode::ch#0)
  to:keyboard_get_keycode::@return
keyboard_get_keycode::@return: scope:[keyboard_get_keycode]  from keyboard_get_keycode
  [126] return 
  to:@return
print_str_at: scope:[print_str_at]  from main::@16 main::@17 main::@18 main::@2
  [127] (byte*) print_str_at::at#7 ← phi( main::@2/(const byte*) SCREEN#0+(byte) 1 main::@16/(const byte*) SCREEN#0+(byte) 1+(byte) $a main::@17/(const byte*) SCREEN#0+(byte) 1+(byte) $14 main::@18/(const byte*) SCREEN#0+(byte) 1+(byte) $1e )
  [127] (byte*) print_str_at::str#7 ← phi( main::@2/(const string) main::str main::@16/(const string) main::str1 main::@17/(const string) main::str2 main::@18/(const string) main::str3 )
  to:print_str_at::@1
print_str_at::@1: scope:[print_str_at]  from print_str_at print_str_at::@2
  [128] (byte*) print_str_at::at#5 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 )
  [128] (byte*) print_str_at::str#5 ← phi( print_str_at/(byte*) print_str_at::str#7 print_str_at::@2/(byte*) print_str_at::str#4 )
  [129] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2
  to:print_str_at::@return
print_str_at::@return: scope:[print_str_at]  from print_str_at::@1
  [130] return 
  to:@return
print_str_at::@2: scope:[print_str_at]  from print_str_at::@1
  [131] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5)
  [132] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5
  [133] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5
  to:print_str_at::@1
