@begin: scope:[]  from
  [0] phi()
  to:@6
@6: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @6
  [3] phi()
main: scope:[main]  from @6
  [4] phi()
  [5] call fillscreen 
  to:main::@2
main::@2: scope:[main]  from main main::@2 main::@8
  [6] (byte*) current_chargen#27 ← phi( main::@8/(byte*) current_chargen#11 main/(const byte*) CHARGEN#0 )
  [6] (byte*) nxt#31 ← phi( main::@8/(byte*) nxt#14 main/(const byte*) TEXT#0 )
  [6] (byte) current_bit#29 ← phi( main::@8/(byte) current_bit#12 main/(byte/signed byte/word/signed word/dword/signed dword) 1 )
  [6] (byte) scroll#18 ← phi( main::@8/(byte) scroll#10 main/(byte/signed byte/word/signed word/dword/signed dword) 7 )
  [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 254) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2 main::@3
  [8] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@3
  to:main::@5
main::@5: scope:[main]  from main::@3
  [9] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0)
  [10] call scroll_soft 
  to:main::@8
main::@8: scope:[main]  from main::@5
  [11] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0)
  to:main::@2
scroll_soft: scope:[scroll_soft]  from main::@5
  [12] (byte) scroll#3 ← -- (byte) scroll#18
  [13] if((byte) scroll#3!=(byte/word/signed word/dword/signed dword) 255) goto scroll_soft::@1
  to:scroll_soft::@2
scroll_soft::@2: scope:[scroll_soft]  from scroll_soft
  [14] phi()
  [15] call scroll_bit 
  to:scroll_soft::@1
scroll_soft::@1: scope:[scroll_soft]  from scroll_soft scroll_soft::@2
  [16] (byte*) current_chargen#11 ← phi( scroll_soft/(byte*) current_chargen#27 scroll_soft::@2/(byte*) current_chargen#19 )
  [16] (byte*) nxt#14 ← phi( scroll_soft/(byte*) nxt#31 scroll_soft::@2/(byte*) nxt#36 )
  [16] (byte) current_bit#12 ← phi( scroll_soft/(byte) current_bit#29 scroll_soft::@2/(byte) current_bit#21 )
  [16] (byte) scroll#10 ← phi( scroll_soft/(byte) scroll#3 scroll_soft::@2/(byte/signed byte/word/signed word/dword/signed dword) 7 )
  [17] *((const byte*) SCROLL#0) ← (byte) scroll#10
  to:scroll_soft::@return
scroll_soft::@return: scope:[scroll_soft]  from scroll_soft::@1
  [18] return 
  to:@return
scroll_bit: scope:[scroll_bit]  from scroll_soft::@2
  [19] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  [20] if((byte) current_bit#5!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto scroll_bit::@1
  to:scroll_bit::@4
scroll_bit::@4: scope:[scroll_bit]  from scroll_bit
  [21] phi()
  [22] call next_char 
  [23] (byte) next_char::return#0 ← (byte) next_char::return#1
  to:scroll_bit::@8
scroll_bit::@8: scope:[scroll_bit]  from scroll_bit::@4
  [24] (byte~) scroll_bit::$3 ← (byte) next_char::return#0
  [25] (word) scroll_bit::c#0 ← ((word)) (byte~) scroll_bit::$3
  [26] (word~) scroll_bit::$4 ← (word) scroll_bit::c#0 << (byte/signed byte/word/signed word/dword/signed dword) 3
  [27] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4
  to:scroll_bit::@1
scroll_bit::@1: scope:[scroll_bit]  from scroll_bit scroll_bit::@8
  [28] (byte*) nxt#36 ← phi( scroll_bit/(byte*) nxt#31 scroll_bit::@8/(byte*) nxt#19 )
  [28] (byte) current_bit#21 ← phi( scroll_bit/(byte) current_bit#5 scroll_bit::@8/(byte/word/signed word/dword/signed dword) 128 )
  [28] (byte*) current_chargen#19 ← phi( scroll_bit/(byte*) current_chargen#27 scroll_bit::@8/(byte*) current_chargen#5 )
  [29] call scroll_hard 
  to:scroll_bit::@7
scroll_bit::@7: scope:[scroll_bit]  from scroll_bit::@1
  asm { sei  }
  [31] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50
  to:scroll_bit::@2
scroll_bit::@2: scope:[scroll_bit]  from scroll_bit::@3 scroll_bit::@7
  [32] (byte*) scroll_bit::sc#2 ← phi( scroll_bit::@3/(byte*) scroll_bit::sc#1 scroll_bit::@7/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 39 )
  [32] (byte) scroll_bit::r#2 ← phi( scroll_bit::@3/(byte) scroll_bit::r#1 scroll_bit::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [33] (byte) scroll_bit::bits#0 ← *((byte*) current_chargen#19 + (byte) scroll_bit::r#2)
  [34] (byte~) scroll_bit::$9 ← (byte) scroll_bit::bits#0 & (byte) current_bit#21
  [35] if((byte~) scroll_bit::$9==(byte/signed byte/word/signed word/dword/signed dword) 0) goto scroll_bit::@3
  to:scroll_bit::@5
scroll_bit::@5: scope:[scroll_bit]  from scroll_bit::@2
  [36] phi()
  to:scroll_bit::@3
scroll_bit::@3: scope:[scroll_bit]  from scroll_bit::@2 scroll_bit::@5
  [37] (byte) scroll_bit::b#2 ← phi( scroll_bit::@2/(byte) ' ' scroll_bit::@5/(byte/word/signed word/dword/signed dword) 128+(byte) ' ' )
  [38] *((byte*) scroll_bit::sc#2) ← (byte) scroll_bit::b#2
  [39] (byte*) scroll_bit::sc#1 ← (byte*) scroll_bit::sc#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
  [40] (byte) scroll_bit::r#1 ← ++ (byte) scroll_bit::r#2
  [41] if((byte) scroll_bit::r#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto scroll_bit::@2
  to:scroll_bit::@6
scroll_bit::@6: scope:[scroll_bit]  from scroll_bit::@3
  [42] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55
  asm { cli  }
  to:scroll_bit::@return
scroll_bit::@return: scope:[scroll_bit]  from scroll_bit::@6
  [44] return 
  to:@return
scroll_hard: scope:[scroll_hard]  from scroll_bit::@1
  [45] phi()
  to:scroll_hard::@1
scroll_hard::@1: scope:[scroll_hard]  from scroll_hard scroll_hard::@1
  [46] (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte/signed byte/word/signed word/dword/signed dword) 0 scroll_hard::@1/(byte) scroll_hard::i#1 )
  [47] *((const byte*) SCREEN#0 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [48] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [49] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [50] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [51] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [52] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [53] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 6 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 6+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [54] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) scroll_hard::i#2) ← *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 7+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) scroll_hard::i#2)
  [55] (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2
  [56] if((byte) scroll_hard::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 39) goto scroll_hard::@1
  to:scroll_hard::@return
scroll_hard::@return: scope:[scroll_hard]  from scroll_hard::@1
  [57] return 
  to:@return
next_char: scope:[next_char]  from scroll_bit::@4
  [58] (byte) next_char::c#0 ← *((byte*) nxt#31)
  [59] if((byte) next_char::c#0!=(byte) '@') goto next_char::@1
  to:next_char::@2
next_char::@2: scope:[next_char]  from next_char
  [60] (byte) next_char::c#1 ← *((const byte*) TEXT#0)
  to:next_char::@1
next_char::@1: scope:[next_char]  from next_char next_char::@2
  [61] (byte) next_char::return#1 ← phi( next_char/(byte) next_char::c#0 next_char::@2/(byte) next_char::c#1 )
  [61] (byte*) nxt#18 ← phi( next_char/(byte*) nxt#31 next_char::@2/(const byte*) TEXT#0 )
  [62] (byte*) nxt#19 ← ++ (byte*) nxt#18
  to:next_char::@return
next_char::@return: scope:[next_char]  from next_char::@1
  [63] return 
  to:@return
fillscreen: scope:[fillscreen]  from main
  [64] phi()
  to:fillscreen::@1
fillscreen::@1: scope:[fillscreen]  from fillscreen fillscreen::@1
  [65] (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) SCREEN#0 fillscreen::@1/(byte*) fillscreen::cursor#1 )
  [66] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0
  [67] (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2
  [68] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto fillscreen::@1
  to:fillscreen::@return
fillscreen::@return: scope:[fillscreen]  from fillscreen::@1
  [69] return 
  to:@return
