From 71e4e5d22d81a940d238bdaf8cc5d8a09df3fbbe Mon Sep 17 00:00:00 2001 From: Jesper Gravgaard Date: Thu, 22 Mar 2018 21:50:25 +0100 Subject: [PATCH] Added shift support to CHARGEN tester --- .../kickc/test/kc/chargen-analysis.kc | 35 +- .../kickc/test/ref/chargen-analysis.asm | 385 + .../kickc/test/ref/chargen-analysis.cfg | 271 + .../kickc/test/ref/chargen-analysis.log | 7576 +++++++++++++++++ .../kickc/test/ref/chargen-analysis.sym | 345 + 5 files changed, 8601 insertions(+), 11 deletions(-) create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.asm create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.cfg create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.sym diff --git a/src/test/java/dk/camelot64/kickc/test/kc/chargen-analysis.kc b/src/test/java/dk/camelot64/kickc/test/kc/chargen-analysis.kc index c7667e447..8ea6f8a8a 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/chargen-analysis.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/chargen-analysis.kc @@ -15,27 +15,37 @@ void main() { print_str_at("f5@", SCREEN+1+20); print_str_at("f7@", SCREEN+1+30); for(byte i : 0..3 ) { - plot_chargen(i, $20); + plot_chargen(i, $20, 0); } - byte cur_idx = 0; + // Which char canvas to use + byte cur_pos = 0; + + // Is shift pressed + byte shift = 0; do{ - // Set current index based on F-keys pressed + // Set current char canvas #pos based on F-keys pressed if(keyboard_key_pressed(KEY_F1)!=0) { - cur_idx = 0; + cur_pos = 0; } if(keyboard_key_pressed(KEY_F3)!=0) { - cur_idx = 1; + cur_pos = 1; } if(keyboard_key_pressed(KEY_F5)!=0) { - cur_idx = 2; + cur_pos = 2; } if(keyboard_key_pressed(KEY_F7)!=0) { - cur_idx = 3; + cur_pos = 3; } - // Check for key presses + if(keyboard_key_pressed(KEY_LSHIFT)!=0) { + shift = 1; + } else { + shift = 0; + } + + // Check for key presses - and plot char if found for( byte ch : 0..$3f) { byte pressed = 0; byte key = keyboard_get_keycode(ch); @@ -43,7 +53,7 @@ void main() { pressed = keyboard_key_pressed(key); } if(pressed!=0) { - plot_chargen(cur_idx, ch); + plot_chargen(cur_pos, ch, shift); } } } while(true); @@ -56,10 +66,13 @@ void print_str_at(byte* str, byte* at) { } } -// Plot 8x8 -void plot_chargen(byte pos, byte ch) { +// Render 8x8 char (ch) as pixels on char canvas #pos +void plot_chargen(byte pos, byte ch, byte shift) { asm { sei } byte* chargen = CHARGEN+(word)ch<<3; + if(shift!=0) { + chargen = chargen + $1000; + } *PROCPORT = $32; byte* sc = SCREEN+40+1+mul8u(pos, 10); for(byte y:0..7) { diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.asm b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.asm new file mode 100644 index 000000000..b9750ac5b --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.asm @@ -0,0 +1,385 @@ +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label CIA1_PORT_A = $dc00 + .label CIA1_PORT_B = $dc01 + .const KEY_F7 = 3 + .const KEY_F1 = 4 + .const KEY_F3 = 5 + .const KEY_F5 = 6 + .const KEY_3 = 8 + .const KEY_W = 9 + .const KEY_A = $a + .const KEY_4 = $b + .const KEY_Z = $c + .const KEY_S = $d + .const KEY_E = $e + .const KEY_LSHIFT = $f + .const KEY_5 = $10 + .const KEY_R = $11 + .const KEY_D = $12 + .const KEY_6 = $13 + .const KEY_C = $14 + .const KEY_F = $15 + .const KEY_T = $16 + .const KEY_X = $17 + .const KEY_7 = $18 + .const KEY_Y = $19 + .const KEY_G = $1a + .const KEY_8 = $1b + .const KEY_B = $1c + .const KEY_H = $1d + .const KEY_U = $1e + .const KEY_V = $1f + .const KEY_9 = $20 + .const KEY_I = $21 + .const KEY_J = $22 + .const KEY_0 = $23 + .const KEY_M = $24 + .const KEY_K = $25 + .const KEY_O = $26 + .const KEY_N = $27 + .const KEY_PLUS = $28 + .const KEY_P = $29 + .const KEY_L = $2a + .const KEY_MINUS = $2b + .const KEY_DOT = $2c + .const KEY_COLON = $2d + .const KEY_AT = $2e + .const KEY_COMMA = $2f + .const KEY_POUND = $30 + .const KEY_ASTERISK = $31 + .const KEY_SEMICOLON = $32 + .const KEY_EQUALS = $35 + .const KEY_ARROW_UP = $36 + .const KEY_SLASH = $37 + .const KEY_1 = $38 + .const KEY_ARROW_LEFT = $39 + .const KEY_2 = $3b + .const KEY_SPACE = $3c + .const KEY_Q = $3e + .label SCREEN = $400 + jsr main +main: { + .label sc = 2 + .label i = 4 + .label ch = 6 + .label cur_pos = 4 + .label shift = 5 + lda #SCREEN + sta sc+1 + b1: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: + lda sc+1 + cmp #>SCREEN+$3e8 + bcc b1 + bne !+ + lda sc + cmp #SCREEN+1 + sta print_str_at.at+1 + lda #str + sta print_str_at.str+1 + jsr print_str_at + lda #SCREEN+1+$a + sta print_str_at.at+1 + lda #str1 + sta print_str_at.str+1 + jsr print_str_at + lda #SCREEN+1+$14 + sta print_str_at.at+1 + lda #str2 + sta print_str_at.str+1 + jsr print_str_at + lda #SCREEN+1+$1e + sta print_str_at.at+1 + lda #str3 + sta print_str_at.str+1 + jsr print_str_at + lda #0 + sta i + b2: + ldx i + ldy #0 + lda #$20 + jsr plot_chargen + inc i + lda i + cmp #4 + bne b2 + lda #0 + sta cur_pos + b3: + ldx #KEY_F1 + jsr keyboard_key_pressed + cmp #0 + beq b4 + lda #0 + sta cur_pos + b4: + ldx #KEY_F3 + jsr keyboard_key_pressed + cmp #0 + beq b5 + lda #1 + sta cur_pos + b5: + ldx #KEY_F5 + jsr keyboard_key_pressed + cmp #0 + beq b6 + lda #2 + sta cur_pos + b6: + ldx #KEY_F7 + jsr keyboard_key_pressed + cmp #0 + beq b7 + lda #3 + sta cur_pos + b7: + ldx #KEY_LSHIFT + jsr keyboard_key_pressed + cmp #0 + beq b8 + lda #1 + sta shift + jmp b9 + b8: + lda #0 + sta shift + b9: + lda #0 + sta ch + b10: + ldx ch + jsr keyboard_get_keycode + cmp #$3f + beq b13 + tax + jsr keyboard_key_pressed + jmp b11 + b13: + lda #0 + b11: + cmp #0 + beq b12 + ldx cur_pos + lda ch + ldy shift + jsr plot_chargen + b12: + inc ch + lda ch + cmp #$40 + bne b10 + jmp b3 + str: .text "f1@" + str1: .text "f3@" + str2: .text "f5@" + str3: .text "f7@" +} +plot_chargen: { + .label _0 = 2 + .label _1 = 2 + .label _8 = 9 + .label chargen = 2 + .label sc = 9 + .label bits = 8 + .label y = 7 + sei + sta _0 + lda #0 + sta _0+1 + asl _1 + rol _1+1 + asl _1 + rol _1+1 + asl _1 + rol _1+1 + clc + lda chargen + adc #CHARGEN + sta chargen+1 + cpy #0 + beq b1 + clc + lda chargen + adc #<$1000 + sta chargen + lda chargen+1 + adc #>$1000 + sta chargen+1 + b1: + lda #$32 + sta PROCPORT + jsr mul8u + clc + lda sc + adc #SCREEN+$28+1 + sta sc+1 + lda #0 + sta y + b2: + ldy y + lda (chargen),y + sta bits + ldx #0 + b3: + lda #$80 + and bits + cmp #0 + beq b5 + lda #'*' + jmp b4 + b5: + lda #'.' + b4: + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: + asl bits + inx + cpx #8 + bne b3 + lda sc + clc + adc #$20 + sta sc + bcc !+ + inc sc+1 + !: + inc y + lda y + cmp #8 + bne b2 + lda #$37 + sta PROCPORT + cli + rts +} +mul8u: { + .const b = $a + .label mb = $b + .label res = 9 + .label return = 9 + lda #b + sta mb+1 + lda #<0 + sta res + sta res+1 + b1: + cpx #0 + bne b2 + rts + b2: + txa + and #1 + cmp #0 + beq b4 + lda res + clc + adc mb + sta res + lda res+1 + adc mb+1 + sta res+1 + b4: + txa + lsr + tax + asl mb + rol mb+1 + jmp b1 +} +keyboard_key_pressed: { + txa + lsr + lsr + lsr + jsr keyboard_matrix_read + tay + txa + and #7 + tax + tya + and keyboard_matrix_col_bitmask,x + rts +} +keyboard_matrix_read: { + tay + lda keyboard_matrix_row_bitmask,y + sta CIA1_PORT_A + lda CIA1_PORT_B + eor #$ff + rts +} +keyboard_get_keycode: { + lda keyboard_char_keycodes,x + rts +} +print_str_at: { + .label at = 9 + .label str = 2 + b1: + ldy #0 + lda (str),y + cmp #'@' + bne b2 + rts + b2: + ldy #0 + lda (str),y + sta (at),y + inc at + bne !+ + inc at+1 + !: + inc str + bne !+ + inc str+1 + !: + jmp b1 +} + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 + keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.cfg b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.cfg new file mode 100644 index 000000000..55471fc7f --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.cfg @@ -0,0 +1,271 @@ +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@12 +@12: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @12 + [3] phi() [ ] ( ) +main: scope:[main] from @12 + [4] phi() [ ] ( main:2 [ ] ) + 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 ) [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) + [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) + [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) + [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) + to:main::@13 +main::@13: scope:[main] from main::@1 + [9] phi() [ ] ( main:2 [ ] ) + [10] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@25 +main::@25: scope:[main] from main::@13 + [11] phi() [ ] ( main:2 [ ] ) + [12] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@26 +main::@26: scope:[main] from main::@25 + [13] phi() [ ] ( main:2 [ ] ) + [14] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@27 +main::@27: scope:[main] from main::@26 + [15] phi() [ ] ( main:2 [ ] ) + [16] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@2 +main::@2: scope:[main] from main::@27 main::@29 + [17] (byte) main::i#2 ← phi( main::@27/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@29/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 [ main::i#2 plot_chargen::pos#0 ] ( main:2 [ main::i#2 plot_chargen::pos#0 ] ) + [19] call plot_chargen param-assignment [ main::i#2 ] ( main:2 [ main::i#2 ] ) + to:main::@29 +main::@29: scope:[main] from main::@2 + [20] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + to:main::@3 +main::@3: scope:[main] from main::@23 main::@29 + [22] (byte) main::cur_pos#24 ← phi( main::@29/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@23/(byte) main::cur_pos#12 ) [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) + [23] call keyboard_key_pressed param-assignment [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ) + [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ) + to:main::@30 +main::@30: scope:[main] from main::@3 + [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 [ main::cur_pos#24 main::$15 ] ( main:2 [ main::cur_pos#24 main::$15 ] ) + [26] if((byte~) main::$15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@41 [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) + to:main::@4 +main::@4: scope:[main] from main::@30 main::@41 + [27] (byte) main::cur_pos#22 ← phi( main::@30/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@41/(byte) main::cur_pos#24 ) [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) + [28] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ) + [29] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ( main:2 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ) + to:main::@31 +main::@31: scope:[main] from main::@4 + [30] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 [ main::cur_pos#22 main::$18 ] ( main:2 [ main::cur_pos#22 main::$18 ] ) + [31] if((byte~) main::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@42 [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) + to:main::@5 +main::@5: scope:[main] from main::@31 main::@42 + [32] (byte) main::cur_pos#20 ← phi( main::@31/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@42/(byte) main::cur_pos#22 ) [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) + [33] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ) + [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ( main:2 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ) + to:main::@32 +main::@32: scope:[main] from main::@5 + [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 [ main::cur_pos#20 main::$21 ] ( main:2 [ main::cur_pos#20 main::$21 ] ) + [36] if((byte~) main::$21==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@43 [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) + to:main::@6 +main::@6: scope:[main] from main::@32 main::@43 + [37] (byte) main::cur_pos#18 ← phi( main::@32/(byte/signed byte/word/signed word/dword/signed dword) 2 main::@43/(byte) main::cur_pos#20 ) [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) + [38] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ) + [39] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ( main:2 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ) + to:main::@33 +main::@33: scope:[main] from main::@6 + [40] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 [ main::cur_pos#18 main::$24 ] ( main:2 [ main::cur_pos#18 main::$24 ] ) + [41] if((byte~) main::$24==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@44 [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) + to:main::@7 +main::@7: scope:[main] from main::@33 main::@44 + [42] (byte) main::cur_pos#12 ← phi( main::@33/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@44/(byte) main::cur_pos#18 ) [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + [43] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ) + [44] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ) + to:main::@34 +main::@34: scope:[main] from main::@7 + [45] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 [ main::cur_pos#12 main::$27 ] ( main:2 [ main::cur_pos#12 main::$27 ] ) + [46] if((byte~) main::$27==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@9 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + to:main::@19 +main::@19: scope:[main] from main::@34 + [47] phi() [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + to:main::@9 +main::@9: scope:[main] from main::@19 main::@34 + [48] (byte) main::shift#10 ← phi( main::@19/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@34/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ main::cur_pos#12 main::shift#10 ] ( main:2 [ main::cur_pos#12 main::shift#10 ] ) + to:main::@10 +main::@10: scope:[main] from main::@12 main::@9 + [49] (byte) main::ch#2 ← phi( main::@12/(byte) main::ch#1 main::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + [50] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ) + [51] call keyboard_get_keycode param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + [52] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ) + to:main::@35 +main::@35: scope:[main] from main::@10 + [53] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) + [54] if((byte) main::key#0==(byte/signed byte/word/signed word/dword/signed dword) 63) goto main::@11 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) + to:main::@21 +main::@21: scope:[main] from main::@35 + [55] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ) + [56] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ) + [57] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ) + to:main::@36 +main::@36: scope:[main] from main::@21 + [58] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ) + to:main::@11 +main::@11: scope:[main] from main::@35 main::@36 + [59] (byte) main::pressed#2 ← phi( main::@35/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@36/(byte) main::pressed#1 ) [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#2 ] ) + [60] if((byte) main::pressed#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@12 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + to:main::@22 +main::@22: scope:[main] from main::@11 + [61] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#12 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ) + [62] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ) + [63] (byte) plot_chargen::shift#1 ← (byte) main::shift#10 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ) + [64] call plot_chargen param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + to:main::@12 +main::@12: scope:[main] from main::@11 main::@22 + [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) + [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto main::@10 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) + to:main::@23 +main::@23: scope:[main] from main::@12 + [67] if(true) goto main::@3 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + to:main::@return +main::@return: scope:[main] from main::@23 + [68] return [ ] ( main:2 [ ] ) + to:@return +main::@44: scope:[main] from main::@33 + [69] phi() [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) + to:main::@7 +main::@43: scope:[main] from main::@32 + [70] phi() [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) + to:main::@6 +main::@42: scope:[main] from main::@31 + [71] phi() [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) + to:main::@5 +main::@41: scope:[main] from main::@30 + [72] phi() [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) + to:main::@4 +plot_chargen: scope:[plot_chargen] from main::@2 main::@22 + [73] (byte) plot_chargen::pos#2 ← phi( main::@2/(byte) plot_chargen::pos#0 main::@22/(byte) plot_chargen::pos#1 ) [ plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ) + [73] (byte) plot_chargen::shift#2 ← phi( main::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@22/(byte) plot_chargen::shift#1 ) [ plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ) + [73] (byte) plot_chargen::ch#2 ← phi( main::@2/(byte/signed byte/word/signed word/dword/signed dword) 32 main::@22/(byte) plot_chargen::ch#1 ) [ plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ) + asm { sei } + [75] (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) + [76] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) + [77] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) + [78] if((byte) plot_chargen::shift#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@1 [ plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) + to:plot_chargen::@5 +plot_chargen::@5: scope:[plot_chargen] from plot_chargen + [79] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word/signed word/dword/signed dword) 4096 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) + to:plot_chargen::@1 +plot_chargen::@1: scope:[plot_chargen] from plot_chargen plot_chargen::@5 + [80] (byte*) plot_chargen::chargen#5 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@5/(byte*) plot_chargen::chargen#1 ) [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) + [81] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) + [82] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 [ plot_chargen::chargen#5 mul8u::a#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::a#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#1 ] ) + [83] call mul8u param-assignment [ plot_chargen::chargen#5 mul8u::res#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + [84] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) + to:plot_chargen::@9 +plot_chargen::@9: scope:[plot_chargen] from plot_chargen::@1 + [85] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) + [86] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) + to:plot_chargen::@2 +plot_chargen::@2: scope:[plot_chargen] from plot_chargen::@7 plot_chargen::@9 + [87] (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@7/(byte*) plot_chargen::sc#2 plot_chargen::@9/(byte*) plot_chargen::sc#0 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ) + [87] (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ) + [88] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) + to:plot_chargen::@3 +plot_chargen::@3: scope:[plot_chargen] from plot_chargen::@2 plot_chargen::@4 + [89] (byte) plot_chargen::x#2 ← phi( plot_chargen::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 plot_chargen::@4/(byte) plot_chargen::x#1 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [89] (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@2/(byte*) plot_chargen::sc#7 plot_chargen::@4/(byte*) plot_chargen::sc#1 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [89] (byte) plot_chargen::bits#2 ← phi( plot_chargen::@2/(byte) plot_chargen::bits#0 plot_chargen::@4/(byte) plot_chargen::bits#1 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [90] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) + [91] if((byte~) plot_chargen::$10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@4 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + to:plot_chargen::@6 +plot_chargen::@6: scope:[plot_chargen] from plot_chargen::@3 + [92] phi() [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + to:plot_chargen::@4 +plot_chargen::@4: scope:[plot_chargen] from plot_chargen::@3 plot_chargen::@6 + [93] (byte) plot_chargen::c#2 ← phi( plot_chargen::@3/(byte) '.' plot_chargen::@6/(byte) '*' ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::c#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::c#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::c#2 ] ) + [94] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [95] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ) + [96] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ) + [97] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) + [98] if((byte) plot_chargen::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) + to:plot_chargen::@7 +plot_chargen::@7: scope:[plot_chargen] from plot_chargen::@4 + [99] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) 32 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) + [100] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) + [101] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) + to:plot_chargen::@8 +plot_chargen::@8: scope:[plot_chargen] from plot_chargen::@7 + [102] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + asm { cli } + to:plot_chargen::@return +plot_chargen::@return: scope:[plot_chargen] from plot_chargen::@8 + [104] return [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + to:@return +mul8u: scope:[mul8u] from plot_chargen::@1 + [105] phi() [ mul8u::a#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#1 ] ) + to:mul8u::@1 +mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 + [106] (word) mul8u::mb#2 ← phi( mul8u/((word))(const byte) mul8u::b#0 mul8u::@4/(word) mul8u::mb#1 ) [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + [106] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 ) [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + [106] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@4/(byte) mul8u::a#0 ) [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + [107] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + to:mul8u::@return +mul8u::@return: scope:[mul8u] from mul8u::@1 + [108] return [ mul8u::res#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + to:@return +mul8u::@2: scope:[mul8u] from mul8u::@1 + [109] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) + [110] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + to:mul8u::@7 +mul8u::@7: scope:[mul8u] from mul8u::@2 + [111] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) + to:mul8u::@4 +mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7 + [112] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 ) [ mul8u::a#2 mul8u::mb#2 mul8u::res#6 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#6 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#6 ] ) + [113] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ) + [114] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ) + to:mul8u::@1 +keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@21 main::@3 main::@4 main::@5 main::@6 main::@7 + [115] (byte) keyboard_key_pressed::key#6 ← phi( main::@21/(byte) keyboard_key_pressed::key#5 main::@3/(const byte) KEY_F1#0 main::@4/(const byte) KEY_F3#0 main::@5/(const byte) KEY_F5#0 main::@6/(const byte) KEY_F7#0 main::@7/(const byte) KEY_LSHIFT#0 ) [ keyboard_key_pressed::key#6 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) + [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ) + [117] call keyboard_matrix_read param-assignment [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ) + to:keyboard_key_pressed::@2 +keyboard_key_pressed::@2: scope:[keyboard_key_pressed] from keyboard_key_pressed + [119] (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_matrix_read::return#2 [ keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ) + [120] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ) + [121] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$1 & *((const byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) + to:keyboard_key_pressed::@return +keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@2 + [122] return [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) + to:@return +keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed + [123] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) + [124] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + to:keyboard_matrix_read::@return +keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read + [125] return [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + to:@return +keyboard_get_keycode: scope:[keyboard_get_keycode] from main::@10 + [126] (byte) keyboard_get_keycode::return#0 ← *((const byte[]) keyboard_char_keycodes#0 + (byte) keyboard_get_keycode::ch#0) [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + to:keyboard_get_keycode::@return +keyboard_get_keycode::@return: scope:[keyboard_get_keycode] from keyboard_get_keycode + [127] return [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + to:@return +print_str_at: scope:[print_str_at] from main::@13 main::@25 main::@26 main::@27 + [128] (byte*) print_str_at::at#7 ← phi( main::@13/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 main::@25/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 10 main::@26/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 20 main::@27/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 30 ) [ print_str_at::str#7 print_str_at::at#7 ] ( main:2::print_str_at:10 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:12 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:14 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:16 [ print_str_at::str#7 print_str_at::at#7 ] ) + [128] (byte*) print_str_at::str#7 ← phi( main::@13/(const string) main::str main::@25/(const string) main::str1 main::@26/(const string) main::str2 main::@27/(const string) main::str3 ) [ print_str_at::str#7 print_str_at::at#7 ] ( main:2::print_str_at:10 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:12 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:14 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:16 [ print_str_at::str#7 print_str_at::at#7 ] ) + to:print_str_at::@1 +print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 + [129] (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 ) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + [129] (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 ) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + [130] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + to:print_str_at::@return +print_str_at::@return: scope:[print_str_at] from print_str_at::@1 + [131] return [ ] ( main:2::print_str_at:10 [ ] main:2::print_str_at:12 [ ] main:2::print_str_at:14 [ ] main:2::print_str_at:16 [ ] ) + to:@return +print_str_at::@2: scope:[print_str_at] from print_str_at::@1 + [132] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + [133] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 [ print_str_at::str#5 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#4 ] ) + [134] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 [ print_str_at::str#4 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#4 print_str_at::at#4 ] ) + to:print_str_at::@1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log new file mode 100644 index 000000000..61fc1212f --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log @@ -0,0 +1,7576 @@ +PARSING src/test/java/dk/camelot64/kickc/test/kc/chargen-analysis.kc +// Allows analysis of the CHARGEN ROM font +import "c64.kc" +import "multiply.kc" +import "keyboard.kc" + +byte* SCREEN = $400; + +void main() { + // Clear screen + for( byte* sc=SCREEN;sc>1; + mb = mb<<1; + } + return res; +} + +// Multiply of two signed bytes to a signed word +// Fixes offsets introduced by using unsigned multiplication +signed word mul8s(signed byte a, signed byte b) { + word m = mul8u((byte)a, (byte) b); + if(a<0) { + >m = (>m)-(byte)b; + } + if(b<0) { + >m = (>m)-(byte)a; + } + return (signed word)m; +} + +// Multiply a signed byte and an unsigned byte (into a signed word) +// Fixes offsets introduced by using unsigned multiplication +signed word mul8su(signed byte a, byte b) { + word m = mul8u((byte)a, (byte) b); + if(a<0) { + >m = (>m)-(byte)b; + } + return (signed word)m; +} + +// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word +dword mul16u(word a, word b) { + dword res = 0; + dword mb = b; + while(a!=0) { + if( (a&1) != 0) { + res = res + mb; + } + a = a>>1; + mb = mb<<1; + } + return res; +} + +// Multiply of two signed words to a signed double word +// Fixes offsets introduced by using unsigned multiplication +signed dword mul16s(signed word a, signed word b) { + dword m = mul16u((word)a, (word) b); + if(a<0) { + >m = (>m)-(word)b; + } + if(b<0) { + >m = (>m)-(word)a; + } + return (signed dword)m; +} + +Importing keyboard.kc +PARSING src/test/java/dk/camelot64/kickc/test/kc/keyboard.kc +// Simple Keyboard Input Library +// C64 Keyboard Matrix Reference - from http://codebase64.org/doku.php?id=base:reading_the_keyboard +// Keyboard Codes are %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7) +// +----+----------------------+-------------------------------------------------------------------------------------------------------+ +// | | Write | Read $dc01 (C64 screen code in parenthesis): | +// |row:| $dc00: row bits +------------+------------+------------+------------+------------+------------+------------+------------+ +// | | | BIT 7 | BIT 6 | BIT 5 | BIT 4 | BIT 3 | BIT 2 | BIT 1 | BIT 0 | +// +----+----------------------+------------+------------+------------+------------+------------+------------+------------+------------+ +// |0. | #%11111110 (254/$fe) | DOWN ($ )| F5 ($ )| F3 ($ )| F1 ($ )| F7 ($ )| RIGHT ($ )| RETURN($ )|DELETE ($ )| +// |1. | #%11111101 (253/$fd) |LEFT-SH($ )| e ($05)| s ($13)| z ($1a)| 4 ($34)| a ($01)| w ($17)| 3 ($33)| +// |2. | #%11111011 (251/$fb) | x ($18)| t ($14)| f ($06)| c ($03)| 6 ($36)| d ($04)| r ($12)| 5 ($35)| +// |3. | #%11110111 (247/$f7) | v ($16)| u ($15)| h ($08)| b ($02)| 8 ($38)| g ($07)| y ($19)| 7 ($37)| +// |4. | #%11101111 (239/$ef) | n ($0e)| o ($0f)| k ($0b)| m ($0d)| 0 ($30)| j ($0a)| i ($09)| 9 ($39)| +// |5. | #%11011111 (223/$df) | , ($2c)| @ ($00)| : ($3a)| . ($2e)| - ($2d)| l ($0c)| p ($10)| + ($2b)| +// |6. | #%10111111 (191/$bf) | / ($2f)| ^ ($1e)| = ($3d)|RGHT-SH($ )| HOME ($ )| ; ($3b)| * ($2a)| £ ($1c)| +// |7. | #%01111111 (127/$7f) | STOP ($ )| q ($11)|COMMODR($ )| SPACE ($20)| 2 ($32)|CONTROL($ )| <- ($1f)| 1 ($31)| +// +----+----------------------+------------+------------+------------+------------+------------+------------+------------+------------+ + +import "c64.kc" + +// Keyboard Codes for all 63 keys. +// Keyboard Codes are %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7). +// See C64 Keyboard Matrix Reference http://codebase64.org/doku.php?id=base:reading_the_keyboard +const byte KEY_DEL = $00; +const byte KEY_RETURN = $01; +const byte KEY_CRSR_RIGHT = $02; +const byte KEY_F7 = $03; +const byte KEY_F1 = $04; +const byte KEY_F3 = $05; +const byte KEY_F5 = $06; +const byte KEY_CRSR_DOWN = $07; +const byte KEY_3 = $08; +const byte KEY_W = $09; +const byte KEY_A = $0a; +const byte KEY_4 = $0b; +const byte KEY_Z = $0c; +const byte KEY_S = $0d; +const byte KEY_E = $0e; +const byte KEY_LSHIFT = $0f; +const byte KEY_5 = $10; +const byte KEY_R = $11; +const byte KEY_D = $12; +const byte KEY_6 = $13; +const byte KEY_C = $14; +const byte KEY_F = $15; +const byte KEY_T = $16; +const byte KEY_X = $17; +const byte KEY_7 = $18; +const byte KEY_Y = $19; +const byte KEY_G = $1a; +const byte KEY_8 = $1b; +const byte KEY_B = $1c; +const byte KEY_H = $1d; +const byte KEY_U = $1e; +const byte KEY_V = $1f; +const byte KEY_9 = $20; +const byte KEY_I = $21; +const byte KEY_J = $22; +const byte KEY_0 = $23; +const byte KEY_M = $24; +const byte KEY_K = $25; +const byte KEY_O = $26; +const byte KEY_N = $27; +const byte KEY_PLUS = $28; +const byte KEY_P = $29; +const byte KEY_L = $2a; +const byte KEY_MINUS = $2b; +const byte KEY_DOT = $2c; +const byte KEY_COLON = $2d; +const byte KEY_AT = $2e; +const byte KEY_COMMA = $2f; +const byte KEY_POUND = $30; +const byte KEY_ASTERISK = $31; +const byte KEY_SEMICOLON = $32; +const byte KEY_HOME = $33; +const byte KEY_RSHIFT = $34; +const byte KEY_EQUALS = $35; +const byte KEY_ARROW_UP = $36; +const byte KEY_SLASH = $37; +const byte KEY_1 = $38; +const byte KEY_ARROW_LEFT = $39; +const byte KEY_CTRL = $3a; +const byte KEY_2 = $3b; +const byte KEY_SPACE = $3c; +const byte KEY_COMMODORE = $3d; +const byte KEY_Q = $3e; +const byte KEY_RUNSTOP = $3f; + +// Keycodes for each screen code character from $00-$3f. +// Chars that do not have an unmodified keycode return $3f (representing RUN/STOP). +const byte[] keyboard_char_keycodes = { + /*@*/KEY_AT, /*a*/KEY_A, /*b*/KEY_B, /*c*/KEY_C, /*d*/KEY_D, /*e*/KEY_E, /*f*/KEY_F, /*g*/KEY_G, + /*h*/KEY_H, /*i*/KEY_I, /*j*/KEY_J, /*k*/KEY_K, /*l*/KEY_L, /*m*/KEY_M, /*n*/KEY_N, /*o*/KEY_O, + /*p*/KEY_P, /*q*/KEY_Q, /*r*/KEY_R, /*s*/KEY_S, /*t*/KEY_T, /*u*/KEY_U, /*v*/KEY_V, /*w*/KEY_W, + /*x*/KEY_X, /*y*/KEY_Y, /*z*/KEY_Z, /*[*/$3f, /*£*/KEY_POUND, /*]*/$3f, /*^*/KEY_ARROW_UP, /*<-*/KEY_ARROW_LEFT, + /* */KEY_SPACE, /*!*/$3f, /*"*/$3f, /*#*/$3f, /*$*/$3f, /*%*/$3f, /*&*/$3f, /*´*/$3f, + /*(*/$3f, /*)*/$3f, /***/KEY_ASTERISK, /*+*/KEY_PLUS, /*,*/KEY_COMMA, /*-*/KEY_MINUS, /*.*/KEY_DOT, /*/*/KEY_SLASH, + /*0*/KEY_0, /*1*/KEY_1, /*2*/KEY_2, /*3*/KEY_3, /*4*/KEY_4, /*5*/KEY_5, /*6*/KEY_6, /*7*/KEY_7, + /*8*/KEY_8, /*9*/KEY_9, /*:*/KEY_COLON, /*;*/KEY_SEMICOLON, /*<*/$3f, /*=*/KEY_EQUALS, /*>*/$3f, /*?*/$3f +}; + +// Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7) +byte[8] keyboard_matrix_row_bitmask = { %11111110, %11111101, %11111011, %11110111, %11101111, %11011111, %10111111, %01111111 }; + +// Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7) +byte[] keyboard_matrix_col_bitmask = { %00000001, %00000010, %00000100, %00001000, %00010000, %00100000, %01000000, %10000000 }; + +// Initialize keyboard reading by setting CIA#$ Data Direction Registers +void keyboard_init() { + // Keyboard Matrix Columns Write Mode + *CIA1_PORT_A_DDR = $ff; + // Keyboard Matrix Columns Read Mode + *CIA1_PORT_B_DDR = $00; +} +// Read a single row of the keyboard matrix +// The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs. +// Returns the keys pressed on the row as bits according to the C64 key matrix. +byte keyboard_matrix_read(byte rowid) { + *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid]; + byte row_pressed_bits = ~*CIA1_PORT_B; + return row_pressed_bits; +} + +// Determines whether a specific key is currently pressed +// The key is a keyboard code defined from the keyboard matrix by %00rrrccc, where rrr is the row ID (0-7) and ccc is the column ID (0-7) +// All keys exist as as KEY_XXX constants. +// Returns zero if the key is not pressed and a non-zero value if the key is currently pressed +byte keyboard_key_pressed(byte key) { + return keyboard_matrix_read(key>>3)&keyboard_matrix_col_bitmask[key&7]; +} + +// Get the keycode corresponding to a specific screen code character +// ch is the character to get the key code for ($00-$3f) +// Returns the key code corresponding to the passed character. Only characters with a non-shifted key are handled. +// If there is no non-shifted key representing the char $3f is returned (representing RUN/STOP) . +byte keyboard_get_keycode(byte ch) { + return keyboard_char_keycodes[ch]; +} +Importing c64.kc +Adding pre/post-modifier (byte*) main::sc ← ++ (byte*) main::sc +Adding pre/post-modifier (byte*) print_str_at::at ← ++ (byte*) print_str_at::at +Adding pre/post-modifier (byte*) print_str_at::str ← ++ (byte*) print_str_at::str +Adding pre/post-modifier (byte*) plot_chargen::sc ← ++ (byte*) plot_chargen::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*) CIA1_PORT_A ← (word/dword/signed dword) 56320 + (byte*) CIA1_PORT_B ← (word/dword/signed dword) 56321 + (byte*) CIA1_PORT_A_DDR ← (word/dword/signed dword) 56322 + (byte*) CIA1_PORT_B_DDR ← (word/dword/signed dword) 56323 + (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 +proc (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) + (word) mul8u::res ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) mul8u::mb ← (byte) mul8u::b +mul8u::@1: + (boolean~) mul8u::$0 ← (byte) mul8u::a != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((boolean~) mul8u::$0) goto mul8u::@2 + goto mul8u::@3 +mul8u::@2: + (byte~) mul8u::$1 ← (byte) mul8u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul8u::$2 ← (byte~) mul8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8u::$3 ← ! (boolean~) mul8u::$2 + if((boolean~) mul8u::$3) goto mul8u::@4 + (word~) mul8u::$4 ← (word) mul8u::res + (word) mul8u::mb + (word) mul8u::res ← (word~) mul8u::$4 +mul8u::@4: + (byte~) mul8u::$5 ← (byte) mul8u::a >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) mul8u::a ← (byte~) mul8u::$5 + (word~) mul8u::$6 ← (word) mul8u::mb << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) mul8u::mb ← (word~) mul8u::$6 + goto mul8u::@1 +mul8u::@3: + (word) mul8u::return ← (word) mul8u::res + goto mul8u::@return +mul8u::@return: + (word) mul8u::return ← (word) mul8u::return + return (word) mul8u::return +endproc // mul8u() +proc (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) + (byte~) mul8s::$0 ← ((byte)) (signed byte) mul8s::a + (byte~) mul8s::$1 ← ((byte)) (signed byte) mul8s::b + (word~) mul8s::$2 ← call mul8u (byte~) mul8s::$0 (byte~) mul8s::$1 + (word) mul8s::m ← (word~) mul8s::$2 + (boolean~) mul8s::$3 ← (signed byte) mul8s::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8s::$4 ← ! (boolean~) mul8s::$3 + if((boolean~) mul8s::$4) goto mul8s::@1 + (byte~) mul8s::$5 ← > (word) mul8s::m + (byte~) mul8s::$6 ← > (word) mul8s::m + (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + lval((byte~) mul8s::$5) ← (byte~) mul8s::$8 +mul8s::@1: + (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 + if((boolean~) mul8s::$10) goto mul8s::@2 + (byte~) mul8s::$11 ← > (word) mul8s::m + (byte~) mul8s::$12 ← > (word) mul8s::m + (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + lval((byte~) mul8s::$11) ← (byte~) mul8s::$14 +mul8s::@2: + (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m + (signed word) mul8s::return ← (signed word~) mul8s::$15 + goto mul8s::@return +mul8s::@return: + (signed word) mul8s::return ← (signed word) mul8s::return + return (signed word) mul8s::return +endproc // mul8s() +proc (signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) + (byte~) mul8su::$0 ← ((byte)) (signed byte) mul8su::a + (byte~) mul8su::$1 ← ((byte)) (byte) mul8su::b + (word~) mul8su::$2 ← call mul8u (byte~) mul8su::$0 (byte~) mul8su::$1 + (word) mul8su::m ← (word~) mul8su::$2 + (boolean~) mul8su::$3 ← (signed byte) mul8su::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8su::$4 ← ! (boolean~) mul8su::$3 + if((boolean~) mul8su::$4) goto mul8su::@1 + (byte~) mul8su::$5 ← > (word) mul8su::m + (byte~) mul8su::$6 ← > (word) mul8su::m + (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + lval((byte~) mul8su::$5) ← (byte~) mul8su::$8 +mul8su::@1: + (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m + (signed word) mul8su::return ← (signed word~) mul8su::$9 + goto mul8su::@return +mul8su::@return: + (signed word) mul8su::return ← (signed word) mul8su::return + return (signed word) mul8su::return +endproc // mul8su() +proc (dword()) mul16u((word) mul16u::a , (word) mul16u::b) + (dword) mul16u::res ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (dword) mul16u::mb ← (word) mul16u::b +mul16u::@1: + (boolean~) mul16u::$0 ← (word) mul16u::a != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((boolean~) mul16u::$0) goto mul16u::@2 + goto mul16u::@3 +mul16u::@2: + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 + if((boolean~) mul16u::$3) goto mul16u::@4 + (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb + (dword) mul16u::res ← (dword~) mul16u::$4 +mul16u::@4: + (word~) mul16u::$5 ← (word) mul16u::a >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) mul16u::a ← (word~) mul16u::$5 + (dword~) mul16u::$6 ← (dword) mul16u::mb << (byte/signed byte/word/signed word/dword/signed dword) 1 + (dword) mul16u::mb ← (dword~) mul16u::$6 + goto mul16u::@1 +mul16u::@3: + (dword) mul16u::return ← (dword) mul16u::res + goto mul16u::@return +mul16u::@return: + (dword) mul16u::return ← (dword) mul16u::return + return (dword) mul16u::return +endproc // mul16u() +proc (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) + (word~) mul16s::$0 ← ((word)) (signed word) mul16s::a + (word~) mul16s::$1 ← ((word)) (signed word) mul16s::b + (dword~) mul16s::$2 ← call mul16u (word~) mul16s::$0 (word~) mul16s::$1 + (dword) mul16s::m ← (dword~) mul16s::$2 + (boolean~) mul16s::$3 ← (signed word) mul16s::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul16s::$4 ← ! (boolean~) mul16s::$3 + if((boolean~) mul16s::$4) goto mul16s::@1 + (word~) mul16s::$5 ← > (dword) mul16s::m + (word~) mul16s::$6 ← > (dword) mul16s::m + (word~) mul16s::$7 ← ((word)) (signed word) mul16s::b + (word~) mul16s::$8 ← (word~) mul16s::$6 - (word~) mul16s::$7 + lval((word~) mul16s::$5) ← (word~) mul16s::$8 +mul16s::@1: + (boolean~) mul16s::$9 ← (signed word) mul16s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul16s::$10 ← ! (boolean~) mul16s::$9 + if((boolean~) mul16s::$10) goto mul16s::@2 + (word~) mul16s::$11 ← > (dword) mul16s::m + (word~) mul16s::$12 ← > (dword) mul16s::m + (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a + (word~) mul16s::$14 ← (word~) mul16s::$12 - (word~) mul16s::$13 + lval((word~) mul16s::$11) ← (word~) mul16s::$14 +mul16s::@2: + (signed dword~) mul16s::$15 ← ((signed dword)) (dword) mul16s::m + (signed dword) mul16s::return ← (signed dword~) mul16s::$15 + goto mul16s::@return +mul16s::@return: + (signed dword) mul16s::return ← (signed dword) mul16s::return + return (signed dword) mul16s::return +endproc // mul16s() + (byte) KEY_DEL ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) KEY_RETURN ← (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) KEY_CRSR_RIGHT ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) KEY_F7 ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) KEY_F1 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) KEY_F3 ← (byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) KEY_F5 ← (byte/signed byte/word/signed word/dword/signed dword) 6 + (byte) KEY_CRSR_DOWN ← (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) KEY_3 ← (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) KEY_W ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) KEY_A ← (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) KEY_4 ← (byte/signed byte/word/signed word/dword/signed dword) 11 + (byte) KEY_Z ← (byte/signed byte/word/signed word/dword/signed dword) 12 + (byte) KEY_S ← (byte/signed byte/word/signed word/dword/signed dword) 13 + (byte) KEY_E ← (byte/signed byte/word/signed word/dword/signed dword) 14 + (byte) KEY_LSHIFT ← (byte/signed byte/word/signed word/dword/signed dword) 15 + (byte) KEY_5 ← (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) KEY_R ← (byte/signed byte/word/signed word/dword/signed dword) 17 + (byte) KEY_D ← (byte/signed byte/word/signed word/dword/signed dword) 18 + (byte) KEY_6 ← (byte/signed byte/word/signed word/dword/signed dword) 19 + (byte) KEY_C ← (byte/signed byte/word/signed word/dword/signed dword) 20 + (byte) KEY_F ← (byte/signed byte/word/signed word/dword/signed dword) 21 + (byte) KEY_T ← (byte/signed byte/word/signed word/dword/signed dword) 22 + (byte) KEY_X ← (byte/signed byte/word/signed word/dword/signed dword) 23 + (byte) KEY_7 ← (byte/signed byte/word/signed word/dword/signed dword) 24 + (byte) KEY_Y ← (byte/signed byte/word/signed word/dword/signed dword) 25 + (byte) KEY_G ← (byte/signed byte/word/signed word/dword/signed dword) 26 + (byte) KEY_8 ← (byte/signed byte/word/signed word/dword/signed dword) 27 + (byte) KEY_B ← (byte/signed byte/word/signed word/dword/signed dword) 28 + (byte) KEY_H ← (byte/signed byte/word/signed word/dword/signed dword) 29 + (byte) KEY_U ← (byte/signed byte/word/signed word/dword/signed dword) 30 + (byte) KEY_V ← (byte/signed byte/word/signed word/dword/signed dword) 31 + (byte) KEY_9 ← (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) KEY_I ← (byte/signed byte/word/signed word/dword/signed dword) 33 + (byte) KEY_J ← (byte/signed byte/word/signed word/dword/signed dword) 34 + (byte) KEY_0 ← (byte/signed byte/word/signed word/dword/signed dword) 35 + (byte) KEY_M ← (byte/signed byte/word/signed word/dword/signed dword) 36 + (byte) KEY_K ← (byte/signed byte/word/signed word/dword/signed dword) 37 + (byte) KEY_O ← (byte/signed byte/word/signed word/dword/signed dword) 38 + (byte) KEY_N ← (byte/signed byte/word/signed word/dword/signed dword) 39 + (byte) KEY_PLUS ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) KEY_P ← (byte/signed byte/word/signed word/dword/signed dword) 41 + (byte) KEY_L ← (byte/signed byte/word/signed word/dword/signed dword) 42 + (byte) KEY_MINUS ← (byte/signed byte/word/signed word/dword/signed dword) 43 + (byte) KEY_DOT ← (byte/signed byte/word/signed word/dword/signed dword) 44 + (byte) KEY_COLON ← (byte/signed byte/word/signed word/dword/signed dword) 45 + (byte) KEY_AT ← (byte/signed byte/word/signed word/dword/signed dword) 46 + (byte) KEY_COMMA ← (byte/signed byte/word/signed word/dword/signed dword) 47 + (byte) KEY_POUND ← (byte/signed byte/word/signed word/dword/signed dword) 48 + (byte) KEY_ASTERISK ← (byte/signed byte/word/signed word/dword/signed dword) 49 + (byte) KEY_SEMICOLON ← (byte/signed byte/word/signed word/dword/signed dword) 50 + (byte) KEY_HOME ← (byte/signed byte/word/signed word/dword/signed dword) 51 + (byte) KEY_RSHIFT ← (byte/signed byte/word/signed word/dword/signed dword) 52 + (byte) KEY_EQUALS ← (byte/signed byte/word/signed word/dword/signed dword) 53 + (byte) KEY_ARROW_UP ← (byte/signed byte/word/signed word/dword/signed dword) 54 + (byte) KEY_SLASH ← (byte/signed byte/word/signed word/dword/signed dword) 55 + (byte) KEY_1 ← (byte/signed byte/word/signed word/dword/signed dword) 56 + (byte) KEY_ARROW_LEFT ← (byte/signed byte/word/signed word/dword/signed dword) 57 + (byte) KEY_CTRL ← (byte/signed byte/word/signed word/dword/signed dword) 58 + (byte) KEY_2 ← (byte/signed byte/word/signed word/dword/signed dword) 59 + (byte) KEY_SPACE ← (byte/signed byte/word/signed word/dword/signed dword) 60 + (byte) KEY_COMMODORE ← (byte/signed byte/word/signed word/dword/signed dword) 61 + (byte) KEY_Q ← (byte/signed byte/word/signed word/dword/signed dword) 62 + (byte) KEY_RUNSTOP ← (byte/signed byte/word/signed word/dword/signed dword) 63 + (byte[]) keyboard_char_keycodes ← { (byte) KEY_AT, (byte) KEY_A, (byte) KEY_B, (byte) KEY_C, (byte) KEY_D, (byte) KEY_E, (byte) KEY_F, (byte) KEY_G, (byte) KEY_H, (byte) KEY_I, (byte) KEY_J, (byte) KEY_K, (byte) KEY_L, (byte) KEY_M, (byte) KEY_N, (byte) KEY_O, (byte) KEY_P, (byte) KEY_Q, (byte) KEY_R, (byte) KEY_S, (byte) KEY_T, (byte) KEY_U, (byte) KEY_V, (byte) KEY_W, (byte) KEY_X, (byte) KEY_Y, (byte) KEY_Z, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_POUND, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_ARROW_UP, (byte) KEY_ARROW_LEFT, (byte) KEY_SPACE, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_ASTERISK, (byte) KEY_PLUS, (byte) KEY_COMMA, (byte) KEY_MINUS, (byte) KEY_DOT, (byte) KEY_SLASH, (byte) KEY_0, (byte) KEY_1, (byte) KEY_2, (byte) KEY_3, (byte) KEY_4, (byte) KEY_5, (byte) KEY_6, (byte) KEY_7, (byte) KEY_8, (byte) KEY_9, (byte) KEY_COLON, (byte) KEY_SEMICOLON, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_EQUALS, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63 } + (byte[8]) keyboard_matrix_row_bitmask ← { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 } + (byte[]) keyboard_matrix_col_bitmask ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/word/signed word/dword/signed dword) 128 } +proc (void()) keyboard_init() + *((byte*) CIA1_PORT_A_DDR) ← (byte/word/signed word/dword/signed dword) 255 + *((byte*) CIA1_PORT_B_DDR) ← (byte/signed byte/word/signed word/dword/signed dword) 0 +keyboard_init::@return: + return +endproc // keyboard_init() +proc (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) + *((byte*) CIA1_PORT_A) ← *((byte[8]) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*) CIA1_PORT_B) + (byte) keyboard_matrix_read::row_pressed_bits ← (byte~) keyboard_matrix_read::$0 + (byte) keyboard_matrix_read::return ← (byte) keyboard_matrix_read::row_pressed_bits + goto keyboard_matrix_read::@return +keyboard_matrix_read::@return: + (byte) keyboard_matrix_read::return ← (byte) keyboard_matrix_read::return + return (byte) keyboard_matrix_read::return +endproc // keyboard_matrix_read() +proc (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) + (byte~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key >> (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte~) keyboard_key_pressed::$1 ← call keyboard_matrix_read (byte~) keyboard_key_pressed::$0 + (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key & (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte~) keyboard_key_pressed::$3 ← (byte~) keyboard_key_pressed::$1 & *((byte[]) keyboard_matrix_col_bitmask + (byte~) keyboard_key_pressed::$2) + (byte) keyboard_key_pressed::return ← (byte~) keyboard_key_pressed::$3 + goto keyboard_key_pressed::@return +keyboard_key_pressed::@return: + (byte) keyboard_key_pressed::return ← (byte) keyboard_key_pressed::return + return (byte) keyboard_key_pressed::return +endproc // keyboard_key_pressed() +proc (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) + (byte) keyboard_get_keycode::return ← *((byte[]) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch) + goto keyboard_get_keycode::@return +keyboard_get_keycode::@return: + (byte) keyboard_get_keycode::return ← (byte) keyboard_get_keycode::return + return (byte) keyboard_get_keycode::return +endproc // keyboard_get_keycode() + (byte*) SCREEN ← (word/signed word/dword/signed dword) 1024 +proc (void()) main() + (byte*) main::sc ← (byte*) SCREEN +main::@1: + *((byte*) main::sc) ← (byte) ' ' + (byte*) main::sc ← ++ (byte*) main::sc + (byte*~) main::$0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000 + (boolean~) main::$1 ← (byte*) main::sc < (byte*~) main::$0 + if((boolean~) main::$1) goto main::@1 + (byte*~) main::$2 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (void~) main::$3 ← call print_str_at (string) "f1@" (byte*~) main::$2 + (byte*~) main::$4 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$5 ← (byte*~) main::$4 + (byte/signed byte/word/signed word/dword/signed dword) 10 + (void~) main::$6 ← call print_str_at (string) "f3@" (byte*~) main::$5 + (byte*~) main::$7 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$8 ← (byte*~) main::$7 + (byte/signed byte/word/signed word/dword/signed dword) 20 + (void~) main::$9 ← call print_str_at (string) "f5@" (byte*~) main::$8 + (byte*~) main::$10 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$11 ← (byte*~) main::$10 + (byte/signed byte/word/signed word/dword/signed dword) 30 + (void~) main::$12 ← call print_str_at (string) "f7@" (byte*~) main::$11 + (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 +main::@2: + (void~) main::$13 ← call plot_chargen (byte) main::i (byte/signed byte/word/signed word/dword/signed dword) 32 (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$14 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 4 + if((boolean~) main::$14) goto main::@2 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) main::shift ← (byte/signed byte/word/signed word/dword/signed dword) 0 +main::@3: + (byte~) main::$15 ← call keyboard_key_pressed (byte) KEY_F1 + (boolean~) main::$16 ← (byte~) main::$15 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$17 ← ! (boolean~) main::$16 + if((boolean~) main::$17) goto main::@4 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 0 +main::@4: + (byte~) main::$18 ← call keyboard_key_pressed (byte) KEY_F3 + (boolean~) main::$19 ← (byte~) main::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$20 ← ! (boolean~) main::$19 + if((boolean~) main::$20) goto main::@5 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 1 +main::@5: + (byte~) main::$21 ← call keyboard_key_pressed (byte) KEY_F5 + (boolean~) main::$22 ← (byte~) main::$21 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$23 ← ! (boolean~) main::$22 + if((boolean~) main::$23) goto main::@6 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 2 +main::@6: + (byte~) main::$24 ← call keyboard_key_pressed (byte) KEY_F7 + (boolean~) main::$25 ← (byte~) main::$24 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$26 ← ! (boolean~) main::$25 + if((boolean~) main::$26) goto main::@7 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 3 +main::@7: + (byte~) main::$27 ← call keyboard_key_pressed (byte) KEY_LSHIFT + (boolean~) main::$28 ← (byte~) main::$27 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$29 ← ! (boolean~) main::$28 + if((boolean~) main::$29) goto main::@8 + (byte) main::shift ← (byte/signed byte/word/signed word/dword/signed dword) 1 + goto main::@9 +main::@8: + (byte) main::shift ← (byte/signed byte/word/signed word/dword/signed dword) 0 +main::@9: + (byte) main::ch ← (byte/signed byte/word/signed word/dword/signed dword) 0 +main::@10: + (byte) main::pressed ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte~) main::$30 ← call keyboard_get_keycode (byte) main::ch + (byte) main::key ← (byte~) main::$30 + (boolean~) main::$31 ← (byte) main::key != (byte/signed byte/word/signed word/dword/signed dword) 63 + (boolean~) main::$32 ← ! (boolean~) main::$31 + if((boolean~) main::$32) goto main::@11 + (byte~) main::$33 ← call keyboard_key_pressed (byte) main::key + (byte) main::pressed ← (byte~) main::$33 +main::@11: + (boolean~) main::$34 ← (byte) main::pressed != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$35 ← ! (boolean~) main::$34 + if((boolean~) main::$35) goto main::@12 + (void~) main::$36 ← call plot_chargen (byte) main::cur_pos (byte) main::ch (byte) main::shift +main::@12: + (byte) main::ch ← ++ (byte) main::ch + (boolean~) main::$37 ← (byte) main::ch != (byte/signed byte/word/signed word/dword/signed dword) 64 + if((boolean~) main::$37) goto main::@10 + if(true) goto main::@3 +main::@return: + return +endproc // main() +proc (void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at) +print_str_at::@1: + (boolean~) print_str_at::$0 ← *((byte*) print_str_at::str) != (byte) '@' + if((boolean~) print_str_at::$0) goto print_str_at::@2 + goto print_str_at::@3 +print_str_at::@2: + *((byte*) print_str_at::at) ← *((byte*) print_str_at::str) + (byte*) print_str_at::at ← ++ (byte*) print_str_at::at + (byte*) print_str_at::str ← ++ (byte*) print_str_at::str + goto print_str_at::@1 +print_str_at::@3: +print_str_at::@return: + return +endproc // print_str_at() +proc (void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift) + asm { sei } + (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch + (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte*~) plot_chargen::$2 ← (byte*) CHARGEN + (word~) plot_chargen::$1 + (byte*) plot_chargen::chargen ← (byte*~) plot_chargen::$2 + (boolean~) plot_chargen::$3 ← (byte) plot_chargen::shift != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) plot_chargen::$4 ← ! (boolean~) plot_chargen::$3 + if((boolean~) plot_chargen::$4) goto plot_chargen::@1 + (byte*~) plot_chargen::$5 ← (byte*) plot_chargen::chargen + (word/signed word/dword/signed dword) 4096 + (byte*) plot_chargen::chargen ← (byte*~) plot_chargen::$5 +plot_chargen::@1: + *((byte*) PROCPORT) ← (byte/signed byte/word/signed word/dword/signed dword) 50 + (byte*~) plot_chargen::$6 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*~) plot_chargen::$7 ← (byte*~) plot_chargen::$6 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 ← call mul8u (byte) plot_chargen::pos (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte*~) plot_chargen::$9 ← (byte*~) plot_chargen::$7 + (word~) plot_chargen::$8 + (byte*) plot_chargen::sc ← (byte*~) plot_chargen::$9 + (byte) plot_chargen::y ← (byte/signed byte/word/signed word/dword/signed dword) 0 +plot_chargen::@2: + (byte) plot_chargen::bits ← *((byte*) plot_chargen::chargen + (byte) plot_chargen::y) + (byte) plot_chargen::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 +plot_chargen::@3: + (byte) plot_chargen::c ← (byte) '.' + (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits & (byte/word/signed word/dword/signed dword) 128 + (boolean~) plot_chargen::$11 ← (byte~) plot_chargen::$10 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) plot_chargen::$12 ← ! (boolean~) plot_chargen::$11 + if((boolean~) plot_chargen::$12) goto plot_chargen::@4 + (byte) plot_chargen::c ← (byte) '*' +plot_chargen::@4: + *((byte*) plot_chargen::sc) ← (byte) plot_chargen::c + (byte*) plot_chargen::sc ← ++ (byte*) plot_chargen::sc + (byte~) plot_chargen::$13 ← (byte) plot_chargen::bits << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plot_chargen::bits ← (byte~) plot_chargen::$13 + (byte) plot_chargen::x ← ++ (byte) plot_chargen::x + (boolean~) plot_chargen::$14 ← (byte) plot_chargen::x != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) plot_chargen::$14) goto plot_chargen::@3 + (byte*~) plot_chargen::$15 ← (byte*) plot_chargen::sc + (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte*) plot_chargen::sc ← (byte*~) plot_chargen::$15 + (byte) plot_chargen::y ← ++ (byte) plot_chargen::y + (boolean~) plot_chargen::$16 ← (byte) plot_chargen::y != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) plot_chargen::$16) goto plot_chargen::@2 + *((byte*) PROCPORT) ← (byte/signed byte/word/signed word/dword/signed dword) 55 + asm { cli } +plot_chargen::@return: + return +endproc // plot_chargen() + call main + +SYMBOLS +(byte*) BGCOL +(byte) BLACK +(byte) BLUE +(byte*) BORDERCOL +(byte) BROWN +(byte*) CHARGEN +(byte*) CIA1_PORT_A +(byte*) CIA1_PORT_A_DDR +(byte*) CIA1_PORT_B +(byte*) CIA1_PORT_B_DDR +(byte*) COLS +(byte) CYAN +(byte) DARK_GREY +(byte) GREEN +(byte) GREY +(byte) KEY_0 +(byte) KEY_1 +(byte) KEY_2 +(byte) KEY_3 +(byte) KEY_4 +(byte) KEY_5 +(byte) KEY_6 +(byte) KEY_7 +(byte) KEY_8 +(byte) KEY_9 +(byte) KEY_A +(byte) KEY_ARROW_LEFT +(byte) KEY_ARROW_UP +(byte) KEY_ASTERISK +(byte) KEY_AT +(byte) KEY_B +(byte) KEY_C +(byte) KEY_COLON +(byte) KEY_COMMA +(byte) KEY_COMMODORE +(byte) KEY_CRSR_DOWN +(byte) KEY_CRSR_RIGHT +(byte) KEY_CTRL +(byte) KEY_D +(byte) KEY_DEL +(byte) KEY_DOT +(byte) KEY_E +(byte) KEY_EQUALS +(byte) KEY_F +(byte) KEY_F1 +(byte) KEY_F3 +(byte) KEY_F5 +(byte) KEY_F7 +(byte) KEY_G +(byte) KEY_H +(byte) KEY_HOME +(byte) KEY_I +(byte) KEY_J +(byte) KEY_K +(byte) KEY_L +(byte) KEY_LSHIFT +(byte) KEY_M +(byte) KEY_MINUS +(byte) KEY_N +(byte) KEY_O +(byte) KEY_P +(byte) KEY_PLUS +(byte) KEY_POUND +(byte) KEY_Q +(byte) KEY_R +(byte) KEY_RETURN +(byte) KEY_RSHIFT +(byte) KEY_RUNSTOP +(byte) KEY_S +(byte) KEY_SEMICOLON +(byte) KEY_SLASH +(byte) KEY_SPACE +(byte) KEY_T +(byte) KEY_U +(byte) KEY_V +(byte) KEY_W +(byte) KEY_X +(byte) KEY_Y +(byte) KEY_Z +(byte) LIGHT_BLUE +(byte) LIGHT_GREEN +(byte) LIGHT_GREY +(byte) ORANGE +(byte) PINK +(byte*) PROCPORT +(byte) PURPLE +(byte*) RASTER +(byte) RED +(byte*) SCREEN +(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_XMSB +(byte*) SPRITES_XPOS +(byte*) SPRITES_YPOS +(byte) WHITE +(byte) YELLOW +(byte[]) keyboard_char_keycodes +(byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) +(label) keyboard_get_keycode::@return +(byte) keyboard_get_keycode::ch +(byte) keyboard_get_keycode::return +(void()) keyboard_init() +(label) keyboard_init::@return +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$0 +(byte~) keyboard_key_pressed::$1 +(byte~) keyboard_key_pressed::$2 +(byte~) keyboard_key_pressed::$3 +(label) keyboard_key_pressed::@return +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::return +(byte[]) keyboard_matrix_col_bitmask +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +(byte~) keyboard_matrix_read::$0 +(label) keyboard_matrix_read::@return +(byte) keyboard_matrix_read::return +(byte) keyboard_matrix_read::row_pressed_bits +(byte) keyboard_matrix_read::rowid +(byte[8]) keyboard_matrix_row_bitmask +(void()) main() +(byte*~) main::$0 +(boolean~) main::$1 +(byte*~) main::$10 +(byte*~) main::$11 +(void~) main::$12 +(void~) main::$13 +(boolean~) main::$14 +(byte~) main::$15 +(boolean~) main::$16 +(boolean~) main::$17 +(byte~) main::$18 +(boolean~) main::$19 +(byte*~) main::$2 +(boolean~) main::$20 +(byte~) main::$21 +(boolean~) main::$22 +(boolean~) main::$23 +(byte~) main::$24 +(boolean~) main::$25 +(boolean~) main::$26 +(byte~) main::$27 +(boolean~) main::$28 +(boolean~) main::$29 +(void~) main::$3 +(byte~) main::$30 +(boolean~) main::$31 +(boolean~) main::$32 +(byte~) main::$33 +(boolean~) main::$34 +(boolean~) main::$35 +(void~) main::$36 +(boolean~) main::$37 +(byte*~) main::$4 +(byte*~) main::$5 +(void~) main::$6 +(byte*~) main::$7 +(byte*~) main::$8 +(void~) main::$9 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(byte) main::ch +(byte) main::cur_pos +(byte) main::i +(byte) main::key +(byte) main::pressed +(byte*) main::sc +(byte) main::shift +(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) +(word~) mul16s::$0 +(word~) mul16s::$1 +(boolean~) mul16s::$10 +(word~) mul16s::$11 +(word~) mul16s::$12 +(word~) mul16s::$13 +(word~) mul16s::$14 +(signed dword~) mul16s::$15 +(dword~) mul16s::$2 +(boolean~) mul16s::$3 +(boolean~) mul16s::$4 +(word~) mul16s::$5 +(word~) mul16s::$6 +(word~) mul16s::$7 +(word~) mul16s::$8 +(boolean~) mul16s::$9 +(label) mul16s::@1 +(label) mul16s::@2 +(label) mul16s::@return +(signed word) mul16s::a +(signed word) mul16s::b +(dword) mul16s::m +(signed dword) mul16s::return +(dword()) mul16u((word) mul16u::a , (word) mul16u::b) +(boolean~) mul16u::$0 +(byte/word~) mul16u::$1 +(boolean~) mul16u::$2 +(boolean~) mul16u::$3 +(dword~) mul16u::$4 +(word~) mul16u::$5 +(dword~) mul16u::$6 +(label) mul16u::@1 +(label) mul16u::@2 +(label) mul16u::@3 +(label) mul16u::@4 +(label) mul16u::@return +(word) mul16u::a +(word) mul16u::b +(dword) mul16u::mb +(dword) mul16u::res +(dword) mul16u::return +(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) +(byte~) mul8s::$0 +(byte~) mul8s::$1 +(boolean~) mul8s::$10 +(byte~) mul8s::$11 +(byte~) mul8s::$12 +(byte~) mul8s::$13 +(byte~) mul8s::$14 +(signed word~) mul8s::$15 +(word~) mul8s::$2 +(boolean~) mul8s::$3 +(boolean~) mul8s::$4 +(byte~) mul8s::$5 +(byte~) mul8s::$6 +(byte~) mul8s::$7 +(byte~) mul8s::$8 +(boolean~) mul8s::$9 +(label) mul8s::@1 +(label) mul8s::@2 +(label) mul8s::@return +(signed byte) mul8s::a +(signed byte) mul8s::b +(word) mul8s::m +(signed word) mul8s::return +(signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) +(byte~) mul8su::$0 +(byte~) mul8su::$1 +(word~) mul8su::$2 +(boolean~) mul8su::$3 +(boolean~) mul8su::$4 +(byte~) mul8su::$5 +(byte~) mul8su::$6 +(byte~) mul8su::$7 +(byte~) mul8su::$8 +(signed word~) mul8su::$9 +(label) mul8su::@1 +(label) mul8su::@return +(signed byte) mul8su::a +(byte) mul8su::b +(word) mul8su::m +(signed word) mul8su::return +(word()) mul8u((byte) mul8u::a , (byte) mul8u::b) +(boolean~) mul8u::$0 +(byte~) mul8u::$1 +(boolean~) mul8u::$2 +(boolean~) mul8u::$3 +(word~) mul8u::$4 +(byte~) mul8u::$5 +(word~) mul8u::$6 +(label) mul8u::@1 +(label) mul8u::@2 +(label) mul8u::@3 +(label) mul8u::@4 +(label) mul8u::@return +(byte) mul8u::a +(byte) mul8u::b +(word) mul8u::mb +(word) mul8u::res +(word) mul8u::return +(void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift) +(word~) plot_chargen::$0 +(word~) plot_chargen::$1 +(byte~) plot_chargen::$10 +(boolean~) plot_chargen::$11 +(boolean~) plot_chargen::$12 +(byte~) plot_chargen::$13 +(boolean~) plot_chargen::$14 +(byte*~) plot_chargen::$15 +(boolean~) plot_chargen::$16 +(byte*~) plot_chargen::$2 +(boolean~) plot_chargen::$3 +(boolean~) plot_chargen::$4 +(byte*~) plot_chargen::$5 +(byte*~) plot_chargen::$6 +(byte*~) plot_chargen::$7 +(word~) plot_chargen::$8 +(byte*~) plot_chargen::$9 +(label) plot_chargen::@1 +(label) plot_chargen::@2 +(label) plot_chargen::@3 +(label) plot_chargen::@4 +(label) plot_chargen::@return +(byte) plot_chargen::bits +(byte) plot_chargen::c +(byte) plot_chargen::ch +(byte*) plot_chargen::chargen +(byte) plot_chargen::pos +(byte*) plot_chargen::sc +(byte) plot_chargen::shift +(byte) plot_chargen::x +(byte) plot_chargen::y +(void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at) +(boolean~) print_str_at::$0 +(label) print_str_at::@1 +(label) print_str_at::@2 +(label) print_str_at::@3 +(label) print_str_at::@return +(byte*) print_str_at::at +(byte*) print_str_at::str + +Fixing lo/hi-lvalue with new tmpVar mul8s::$16 mul8s::$16 ← mul8s::$8 +Fixing lo/hi-lvalue with new tmpVar mul8s::$17 mul8s::$17 ← mul8s::$14 +Fixing lo/hi-lvalue with new tmpVar mul8su::$10 mul8su::$10 ← mul8su::$8 +Fixing lo/hi-lvalue with new tmpVar mul16s::$16 mul16s::$16 ← mul16s::$8 +Fixing lo/hi-lvalue with new tmpVar mul16s::$17 mul16s::$17 ← mul16s::$14 +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/dword/signed dword to byte* in CIA1_PORT_A ← ((byte*)) 56320 +Promoting word/dword/signed dword to byte* in CIA1_PORT_B ← ((byte*)) 56321 +Promoting word/dword/signed dword to byte* in CIA1_PORT_A_DDR ← ((byte*)) 56322 +Promoting word/dword/signed dword to byte* in CIA1_PORT_B_DDR ← ((byte*)) 56323 +Promoting byte to word in mul8u::mb ← ((word)) mul8u::b +Promoting word to dword in mul16u::mb ← ((dword)) mul16u::b +Promoting word/signed word/dword/signed dword to byte* in SCREEN ← ((byte*)) 1024 +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*) CIA1_PORT_A ← ((byte*)) (word/dword/signed dword) 56320 + (byte*) CIA1_PORT_B ← ((byte*)) (word/dword/signed dword) 56321 + (byte*) CIA1_PORT_A_DDR ← ((byte*)) (word/dword/signed dword) 56322 + (byte*) CIA1_PORT_B_DDR ← ((byte*)) (word/dword/signed dword) 56323 + (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 + to:@1 +mul8u: scope:[mul8u] from + (word) mul8u::res ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) mul8u::mb ← ((word)) (byte) mul8u::b + to:mul8u::@1 +mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 + (boolean~) mul8u::$0 ← (byte) mul8u::a != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((boolean~) mul8u::$0) goto mul8u::@2 + to:mul8u::@5 +mul8u::@2: scope:[mul8u] from mul8u::@1 mul8u::@6 + (byte~) mul8u::$1 ← (byte) mul8u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul8u::$2 ← (byte~) mul8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8u::$3 ← ! (boolean~) mul8u::$2 + if((boolean~) mul8u::$3) goto mul8u::@4 + to:mul8u::@7 +mul8u::@5: scope:[mul8u] from mul8u::@1 + to:mul8u::@3 +mul8u::@3: scope:[mul8u] from mul8u::@5 mul8u::@8 + (word) mul8u::return ← (word) mul8u::res + to:mul8u::@return +mul8u::@6: scope:[mul8u] from + to:mul8u::@2 +mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7 + (byte~) mul8u::$5 ← (byte) mul8u::a >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) mul8u::a ← (byte~) mul8u::$5 + (word~) mul8u::$6 ← (word) mul8u::mb << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) mul8u::mb ← (word~) mul8u::$6 + to:mul8u::@1 +mul8u::@7: scope:[mul8u] from mul8u::@2 + (word~) mul8u::$4 ← (word) mul8u::res + (word) mul8u::mb + (word) mul8u::res ← (word~) mul8u::$4 + to:mul8u::@4 +mul8u::@8: scope:[mul8u] from + to:mul8u::@3 +mul8u::@return: scope:[mul8u] from mul8u::@3 mul8u::@9 + (word) mul8u::return ← (word) mul8u::return + return (word) mul8u::return + to:@return +mul8u::@9: scope:[mul8u] from + to:mul8u::@return +@1: scope:[] from @begin + to:@2 +mul8s: scope:[mul8s] from + (byte~) mul8s::$0 ← ((byte)) (signed byte) mul8s::a + (byte~) mul8s::$1 ← ((byte)) (signed byte) mul8s::b + (word~) mul8s::$2 ← call mul8u (byte~) mul8s::$0 (byte~) mul8s::$1 + (word) mul8s::m ← (word~) mul8s::$2 + (boolean~) mul8s::$3 ← (signed byte) mul8s::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8s::$4 ← ! (boolean~) mul8s::$3 + if((boolean~) mul8s::$4) goto mul8s::@1 + to:mul8s::@3 +mul8s::@1: scope:[mul8s] from mul8s mul8s::@3 + (boolean~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8s::$10 ← ! (boolean~) mul8s::$9 + if((boolean~) mul8s::$10) goto mul8s::@2 + to:mul8s::@4 +mul8s::@3: scope:[mul8s] from mul8s + (byte~) mul8s::$5 ← > (word) mul8s::m + (byte~) mul8s::$6 ← > (word) mul8s::m + (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 + to:mul8s::@1 +mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 + (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m + (signed word) mul8s::return ← (signed word~) mul8s::$15 + to:mul8s::@return +mul8s::@4: scope:[mul8s] from mul8s::@1 + (byte~) mul8s::$11 ← > (word) mul8s::m + (byte~) mul8s::$12 ← > (word) mul8s::m + (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 + to:mul8s::@2 +mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 + (signed word) mul8s::return ← (signed word) mul8s::return + return (signed word) mul8s::return + to:@return +mul8s::@5: scope:[mul8s] from + to:mul8s::@return +@2: scope:[] from @1 + to:@3 +mul8su: scope:[mul8su] from + (byte~) mul8su::$0 ← ((byte)) (signed byte) mul8su::a + (byte~) mul8su::$1 ← ((byte)) (byte) mul8su::b + (word~) mul8su::$2 ← call mul8u (byte~) mul8su::$0 (byte~) mul8su::$1 + (word) mul8su::m ← (word~) mul8su::$2 + (boolean~) mul8su::$3 ← (signed byte) mul8su::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8su::$4 ← ! (boolean~) mul8su::$3 + if((boolean~) mul8su::$4) goto mul8su::@1 + to:mul8su::@2 +mul8su::@1: scope:[mul8su] from mul8su mul8su::@2 + (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m + (signed word) mul8su::return ← (signed word~) mul8su::$9 + to:mul8su::@return +mul8su::@2: scope:[mul8su] from mul8su + (byte~) mul8su::$5 ← > (word) mul8su::m + (byte~) mul8su::$6 ← > (word) mul8su::m + (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 + to:mul8su::@1 +mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 + (signed word) mul8su::return ← (signed word) mul8su::return + return (signed word) mul8su::return + to:@return +mul8su::@3: scope:[mul8su] from + to:mul8su::@return +@3: scope:[] from @2 + to:@4 +mul16u: scope:[mul16u] from + (dword) mul16u::res ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (dword) mul16u::mb ← ((dword)) (word) mul16u::b + to:mul16u::@1 +mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 + (boolean~) mul16u::$0 ← (word) mul16u::a != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((boolean~) mul16u::$0) goto mul16u::@2 + to:mul16u::@5 +mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul16u::$3 ← ! (boolean~) mul16u::$2 + if((boolean~) mul16u::$3) goto mul16u::@4 + to:mul16u::@7 +mul16u::@5: scope:[mul16u] from mul16u::@1 + to:mul16u::@3 +mul16u::@3: scope:[mul16u] from mul16u::@5 mul16u::@8 + (dword) mul16u::return ← (dword) mul16u::res + to:mul16u::@return +mul16u::@6: scope:[mul16u] from + to:mul16u::@2 +mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7 + (word~) mul16u::$5 ← (word) mul16u::a >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) mul16u::a ← (word~) mul16u::$5 + (dword~) mul16u::$6 ← (dword) mul16u::mb << (byte/signed byte/word/signed word/dword/signed dword) 1 + (dword) mul16u::mb ← (dword~) mul16u::$6 + to:mul16u::@1 +mul16u::@7: scope:[mul16u] from mul16u::@2 + (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb + (dword) mul16u::res ← (dword~) mul16u::$4 + to:mul16u::@4 +mul16u::@8: scope:[mul16u] from + to:mul16u::@3 +mul16u::@return: scope:[mul16u] from mul16u::@3 mul16u::@9 + (dword) mul16u::return ← (dword) mul16u::return + return (dword) mul16u::return + to:@return +mul16u::@9: scope:[mul16u] from + to:mul16u::@return +@4: scope:[] from @3 + to:@5 +mul16s: scope:[mul16s] from + (word~) mul16s::$0 ← ((word)) (signed word) mul16s::a + (word~) mul16s::$1 ← ((word)) (signed word) mul16s::b + (dword~) mul16s::$2 ← call mul16u (word~) mul16s::$0 (word~) mul16s::$1 + (dword) mul16s::m ← (dword~) mul16s::$2 + (boolean~) mul16s::$3 ← (signed word) mul16s::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul16s::$4 ← ! (boolean~) mul16s::$3 + if((boolean~) mul16s::$4) goto mul16s::@1 + to:mul16s::@3 +mul16s::@1: scope:[mul16s] from mul16s mul16s::@3 + (boolean~) mul16s::$9 ← (signed word) mul16s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul16s::$10 ← ! (boolean~) mul16s::$9 + if((boolean~) mul16s::$10) goto mul16s::@2 + to:mul16s::@4 +mul16s::@3: scope:[mul16s] from mul16s + (word~) mul16s::$5 ← > (dword) mul16s::m + (word~) mul16s::$6 ← > (dword) mul16s::m + (word~) mul16s::$7 ← ((word)) (signed word) mul16s::b + (word~) mul16s::$8 ← (word~) mul16s::$6 - (word~) mul16s::$7 + (word~) mul16s::$16 ← (word~) mul16s::$8 + (dword) mul16s::m ← (dword) mul16s::m hi= (word~) mul16s::$16 + to:mul16s::@1 +mul16s::@2: scope:[mul16s] from mul16s::@1 mul16s::@4 + (signed dword~) mul16s::$15 ← ((signed dword)) (dword) mul16s::m + (signed dword) mul16s::return ← (signed dword~) mul16s::$15 + to:mul16s::@return +mul16s::@4: scope:[mul16s] from mul16s::@1 + (word~) mul16s::$11 ← > (dword) mul16s::m + (word~) mul16s::$12 ← > (dword) mul16s::m + (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a + (word~) mul16s::$14 ← (word~) mul16s::$12 - (word~) mul16s::$13 + (word~) mul16s::$17 ← (word~) mul16s::$14 + (dword) mul16s::m ← (dword) mul16s::m hi= (word~) mul16s::$17 + to:mul16s::@2 +mul16s::@return: scope:[mul16s] from mul16s::@2 mul16s::@5 + (signed dword) mul16s::return ← (signed dword) mul16s::return + return (signed dword) mul16s::return + to:@return +mul16s::@5: scope:[mul16s] from + to:mul16s::@return +@5: scope:[] from @4 + (byte) KEY_DEL ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) KEY_RETURN ← (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) KEY_CRSR_RIGHT ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) KEY_F7 ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) KEY_F1 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) KEY_F3 ← (byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) KEY_F5 ← (byte/signed byte/word/signed word/dword/signed dword) 6 + (byte) KEY_CRSR_DOWN ← (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) KEY_3 ← (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) KEY_W ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) KEY_A ← (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) KEY_4 ← (byte/signed byte/word/signed word/dword/signed dword) 11 + (byte) KEY_Z ← (byte/signed byte/word/signed word/dword/signed dword) 12 + (byte) KEY_S ← (byte/signed byte/word/signed word/dword/signed dword) 13 + (byte) KEY_E ← (byte/signed byte/word/signed word/dword/signed dword) 14 + (byte) KEY_LSHIFT ← (byte/signed byte/word/signed word/dword/signed dword) 15 + (byte) KEY_5 ← (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) KEY_R ← (byte/signed byte/word/signed word/dword/signed dword) 17 + (byte) KEY_D ← (byte/signed byte/word/signed word/dword/signed dword) 18 + (byte) KEY_6 ← (byte/signed byte/word/signed word/dword/signed dword) 19 + (byte) KEY_C ← (byte/signed byte/word/signed word/dword/signed dword) 20 + (byte) KEY_F ← (byte/signed byte/word/signed word/dword/signed dword) 21 + (byte) KEY_T ← (byte/signed byte/word/signed word/dword/signed dword) 22 + (byte) KEY_X ← (byte/signed byte/word/signed word/dword/signed dword) 23 + (byte) KEY_7 ← (byte/signed byte/word/signed word/dword/signed dword) 24 + (byte) KEY_Y ← (byte/signed byte/word/signed word/dword/signed dword) 25 + (byte) KEY_G ← (byte/signed byte/word/signed word/dword/signed dword) 26 + (byte) KEY_8 ← (byte/signed byte/word/signed word/dword/signed dword) 27 + (byte) KEY_B ← (byte/signed byte/word/signed word/dword/signed dword) 28 + (byte) KEY_H ← (byte/signed byte/word/signed word/dword/signed dword) 29 + (byte) KEY_U ← (byte/signed byte/word/signed word/dword/signed dword) 30 + (byte) KEY_V ← (byte/signed byte/word/signed word/dword/signed dword) 31 + (byte) KEY_9 ← (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) KEY_I ← (byte/signed byte/word/signed word/dword/signed dword) 33 + (byte) KEY_J ← (byte/signed byte/word/signed word/dword/signed dword) 34 + (byte) KEY_0 ← (byte/signed byte/word/signed word/dword/signed dword) 35 + (byte) KEY_M ← (byte/signed byte/word/signed word/dword/signed dword) 36 + (byte) KEY_K ← (byte/signed byte/word/signed word/dword/signed dword) 37 + (byte) KEY_O ← (byte/signed byte/word/signed word/dword/signed dword) 38 + (byte) KEY_N ← (byte/signed byte/word/signed word/dword/signed dword) 39 + (byte) KEY_PLUS ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) KEY_P ← (byte/signed byte/word/signed word/dword/signed dword) 41 + (byte) KEY_L ← (byte/signed byte/word/signed word/dword/signed dword) 42 + (byte) KEY_MINUS ← (byte/signed byte/word/signed word/dword/signed dword) 43 + (byte) KEY_DOT ← (byte/signed byte/word/signed word/dword/signed dword) 44 + (byte) KEY_COLON ← (byte/signed byte/word/signed word/dword/signed dword) 45 + (byte) KEY_AT ← (byte/signed byte/word/signed word/dword/signed dword) 46 + (byte) KEY_COMMA ← (byte/signed byte/word/signed word/dword/signed dword) 47 + (byte) KEY_POUND ← (byte/signed byte/word/signed word/dword/signed dword) 48 + (byte) KEY_ASTERISK ← (byte/signed byte/word/signed word/dword/signed dword) 49 + (byte) KEY_SEMICOLON ← (byte/signed byte/word/signed word/dword/signed dword) 50 + (byte) KEY_HOME ← (byte/signed byte/word/signed word/dword/signed dword) 51 + (byte) KEY_RSHIFT ← (byte/signed byte/word/signed word/dword/signed dword) 52 + (byte) KEY_EQUALS ← (byte/signed byte/word/signed word/dword/signed dword) 53 + (byte) KEY_ARROW_UP ← (byte/signed byte/word/signed word/dword/signed dword) 54 + (byte) KEY_SLASH ← (byte/signed byte/word/signed word/dword/signed dword) 55 + (byte) KEY_1 ← (byte/signed byte/word/signed word/dword/signed dword) 56 + (byte) KEY_ARROW_LEFT ← (byte/signed byte/word/signed word/dword/signed dword) 57 + (byte) KEY_CTRL ← (byte/signed byte/word/signed word/dword/signed dword) 58 + (byte) KEY_2 ← (byte/signed byte/word/signed word/dword/signed dword) 59 + (byte) KEY_SPACE ← (byte/signed byte/word/signed word/dword/signed dword) 60 + (byte) KEY_COMMODORE ← (byte/signed byte/word/signed word/dword/signed dword) 61 + (byte) KEY_Q ← (byte/signed byte/word/signed word/dword/signed dword) 62 + (byte) KEY_RUNSTOP ← (byte/signed byte/word/signed word/dword/signed dword) 63 + (byte[]) keyboard_char_keycodes ← { (byte) KEY_AT, (byte) KEY_A, (byte) KEY_B, (byte) KEY_C, (byte) KEY_D, (byte) KEY_E, (byte) KEY_F, (byte) KEY_G, (byte) KEY_H, (byte) KEY_I, (byte) KEY_J, (byte) KEY_K, (byte) KEY_L, (byte) KEY_M, (byte) KEY_N, (byte) KEY_O, (byte) KEY_P, (byte) KEY_Q, (byte) KEY_R, (byte) KEY_S, (byte) KEY_T, (byte) KEY_U, (byte) KEY_V, (byte) KEY_W, (byte) KEY_X, (byte) KEY_Y, (byte) KEY_Z, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_POUND, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_ARROW_UP, (byte) KEY_ARROW_LEFT, (byte) KEY_SPACE, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_ASTERISK, (byte) KEY_PLUS, (byte) KEY_COMMA, (byte) KEY_MINUS, (byte) KEY_DOT, (byte) KEY_SLASH, (byte) KEY_0, (byte) KEY_1, (byte) KEY_2, (byte) KEY_3, (byte) KEY_4, (byte) KEY_5, (byte) KEY_6, (byte) KEY_7, (byte) KEY_8, (byte) KEY_9, (byte) KEY_COLON, (byte) KEY_SEMICOLON, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_EQUALS, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63 } + (byte[8]) keyboard_matrix_row_bitmask ← { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 } + (byte[]) keyboard_matrix_col_bitmask ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/word/signed word/dword/signed dword) 128 } + to:@6 +keyboard_init: scope:[keyboard_init] from + *((byte*) CIA1_PORT_A_DDR) ← (byte/word/signed word/dword/signed dword) 255 + *((byte*) CIA1_PORT_B_DDR) ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:keyboard_init::@return +keyboard_init::@return: scope:[keyboard_init] from keyboard_init + return + to:@return +@6: scope:[] from @5 + to:@7 +keyboard_matrix_read: scope:[keyboard_matrix_read] from + *((byte*) CIA1_PORT_A) ← *((byte[8]) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*) CIA1_PORT_B) + (byte) keyboard_matrix_read::row_pressed_bits ← (byte~) keyboard_matrix_read::$0 + (byte) keyboard_matrix_read::return ← (byte) keyboard_matrix_read::row_pressed_bits + to:keyboard_matrix_read::@return +keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read keyboard_matrix_read::@1 + (byte) keyboard_matrix_read::return ← (byte) keyboard_matrix_read::return + return (byte) keyboard_matrix_read::return + to:@return +keyboard_matrix_read::@1: scope:[keyboard_matrix_read] from + to:keyboard_matrix_read::@return +@7: scope:[] from @6 + to:@8 +keyboard_key_pressed: scope:[keyboard_key_pressed] from + (byte~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key >> (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte~) keyboard_key_pressed::$1 ← call keyboard_matrix_read (byte~) keyboard_key_pressed::$0 + (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key & (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte~) keyboard_key_pressed::$3 ← (byte~) keyboard_key_pressed::$1 & *((byte[]) keyboard_matrix_col_bitmask + (byte~) keyboard_key_pressed::$2) + (byte) keyboard_key_pressed::return ← (byte~) keyboard_key_pressed::$3 + to:keyboard_key_pressed::@return +keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed keyboard_key_pressed::@1 + (byte) keyboard_key_pressed::return ← (byte) keyboard_key_pressed::return + return (byte) keyboard_key_pressed::return + to:@return +keyboard_key_pressed::@1: scope:[keyboard_key_pressed] from + to:keyboard_key_pressed::@return +@8: scope:[] from @7 + to:@9 +keyboard_get_keycode: scope:[keyboard_get_keycode] from + (byte) keyboard_get_keycode::return ← *((byte[]) keyboard_char_keycodes + (byte) keyboard_get_keycode::ch) + to:keyboard_get_keycode::@return +keyboard_get_keycode::@return: scope:[keyboard_get_keycode] from keyboard_get_keycode keyboard_get_keycode::@1 + (byte) keyboard_get_keycode::return ← (byte) keyboard_get_keycode::return + return (byte) keyboard_get_keycode::return + to:@return +keyboard_get_keycode::@1: scope:[keyboard_get_keycode] from + to:keyboard_get_keycode::@return +@9: scope:[] from @8 + (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 + to:@10 +main: scope:[main] from + (byte*) main::sc ← (byte*) SCREEN + to:main::@1 +main::@1: scope:[main] from main main::@1 + *((byte*) main::sc) ← (byte) ' ' + (byte*) main::sc ← ++ (byte*) main::sc + (byte*~) main::$0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000 + (boolean~) main::$1 ← (byte*) main::sc < (byte*~) main::$0 + if((boolean~) main::$1) goto main::@1 + to:main::@13 +main::@13: scope:[main] from main::@1 + (byte*~) main::$2 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (void~) main::$3 ← call print_str_at (string) "f1@" (byte*~) main::$2 + (byte*~) main::$4 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$5 ← (byte*~) main::$4 + (byte/signed byte/word/signed word/dword/signed dword) 10 + (void~) main::$6 ← call print_str_at (string) "f3@" (byte*~) main::$5 + (byte*~) main::$7 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$8 ← (byte*~) main::$7 + (byte/signed byte/word/signed word/dword/signed dword) 20 + (void~) main::$9 ← call print_str_at (string) "f5@" (byte*~) main::$8 + (byte*~) main::$10 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$11 ← (byte*~) main::$10 + (byte/signed byte/word/signed word/dword/signed dword) 30 + (void~) main::$12 ← call print_str_at (string) "f7@" (byte*~) main::$11 + (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@2 +main::@2: scope:[main] from main::@13 main::@2 + (void~) main::$13 ← call plot_chargen (byte) main::i (byte/signed byte/word/signed word/dword/signed dword) 32 (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$14 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 4 + if((boolean~) main::$14) goto main::@2 + to:main::@14 +main::@14: scope:[main] from main::@2 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) main::shift ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@3 +main::@3: scope:[main] from main::@14 main::@23 + (byte~) main::$15 ← call keyboard_key_pressed (byte) KEY_F1 + (boolean~) main::$16 ← (byte~) main::$15 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$17 ← ! (boolean~) main::$16 + if((boolean~) main::$17) goto main::@4 + to:main::@15 +main::@4: scope:[main] from main::@15 main::@3 + (byte~) main::$18 ← call keyboard_key_pressed (byte) KEY_F3 + (boolean~) main::$19 ← (byte~) main::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$20 ← ! (boolean~) main::$19 + if((boolean~) main::$20) goto main::@5 + to:main::@16 +main::@15: scope:[main] from main::@3 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@4 +main::@5: scope:[main] from main::@16 main::@4 + (byte~) main::$21 ← call keyboard_key_pressed (byte) KEY_F5 + (boolean~) main::$22 ← (byte~) main::$21 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$23 ← ! (boolean~) main::$22 + if((boolean~) main::$23) goto main::@6 + to:main::@17 +main::@16: scope:[main] from main::@4 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:main::@5 +main::@6: scope:[main] from main::@17 main::@5 + (byte~) main::$24 ← call keyboard_key_pressed (byte) KEY_F7 + (boolean~) main::$25 ← (byte~) main::$24 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$26 ← ! (boolean~) main::$25 + if((boolean~) main::$26) goto main::@7 + to:main::@18 +main::@17: scope:[main] from main::@5 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 2 + to:main::@6 +main::@7: scope:[main] from main::@18 main::@6 + (byte~) main::$27 ← call keyboard_key_pressed (byte) KEY_LSHIFT + (boolean~) main::$28 ← (byte~) main::$27 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$29 ← ! (boolean~) main::$28 + if((boolean~) main::$29) goto main::@8 + to:main::@19 +main::@18: scope:[main] from main::@6 + (byte) main::cur_pos ← (byte/signed byte/word/signed word/dword/signed dword) 3 + to:main::@7 +main::@8: scope:[main] from main::@20 main::@7 + (byte) main::shift ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@9 +main::@19: scope:[main] from main::@7 + (byte) main::shift ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:main::@9 +main::@9: scope:[main] from main::@19 main::@8 + (byte) main::ch ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@10 +main::@20: scope:[main] from + to:main::@8 +main::@10: scope:[main] from main::@12 main::@9 + (byte) main::pressed ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte~) main::$30 ← call keyboard_get_keycode (byte) main::ch + (byte) main::key ← (byte~) main::$30 + (boolean~) main::$31 ← (byte) main::key != (byte/signed byte/word/signed word/dword/signed dword) 63 + (boolean~) main::$32 ← ! (boolean~) main::$31 + if((boolean~) main::$32) goto main::@11 + to:main::@21 +main::@11: scope:[main] from main::@10 main::@21 + (boolean~) main::$34 ← (byte) main::pressed != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$35 ← ! (boolean~) main::$34 + if((boolean~) main::$35) goto main::@12 + to:main::@22 +main::@21: scope:[main] from main::@10 + (byte~) main::$33 ← call keyboard_key_pressed (byte) main::key + (byte) main::pressed ← (byte~) main::$33 + to:main::@11 +main::@12: scope:[main] from main::@11 main::@22 + (byte) main::ch ← ++ (byte) main::ch + (boolean~) main::$37 ← (byte) main::ch != (byte/signed byte/word/signed word/dword/signed dword) 64 + if((boolean~) main::$37) goto main::@10 + to:main::@23 +main::@22: scope:[main] from main::@11 + (void~) main::$36 ← call plot_chargen (byte) main::cur_pos (byte) main::ch (byte) main::shift + to:main::@12 +main::@23: scope:[main] from main::@12 + if(true) goto main::@3 + to:main::@24 +main::@24: scope:[main] from main::@23 + to:main::@return +main::@return: scope:[main] from main::@24 + return + to:@return +@10: scope:[] from @9 + to:@11 +print_str_at: scope:[print_str_at] from + to:print_str_at::@1 +print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 + (boolean~) print_str_at::$0 ← *((byte*) print_str_at::str) != (byte) '@' + if((boolean~) print_str_at::$0) goto print_str_at::@2 + to:print_str_at::@4 +print_str_at::@2: scope:[print_str_at] from print_str_at::@1 print_str_at::@5 + *((byte*) print_str_at::at) ← *((byte*) print_str_at::str) + (byte*) print_str_at::at ← ++ (byte*) print_str_at::at + (byte*) print_str_at::str ← ++ (byte*) print_str_at::str + to:print_str_at::@1 +print_str_at::@4: scope:[print_str_at] from print_str_at::@1 + to:print_str_at::@3 +print_str_at::@3: scope:[print_str_at] from print_str_at::@4 print_str_at::@6 + to:print_str_at::@return +print_str_at::@5: scope:[print_str_at] from + to:print_str_at::@2 +print_str_at::@6: scope:[print_str_at] from + to:print_str_at::@3 +print_str_at::@return: scope:[print_str_at] from print_str_at::@3 + return + to:@return +@11: scope:[] from @10 + to:@12 +plot_chargen: scope:[plot_chargen] from + asm { sei } + (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch + (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte*~) plot_chargen::$2 ← (byte*) CHARGEN + (word~) plot_chargen::$1 + (byte*) plot_chargen::chargen ← (byte*~) plot_chargen::$2 + (boolean~) plot_chargen::$3 ← (byte) plot_chargen::shift != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) plot_chargen::$4 ← ! (boolean~) plot_chargen::$3 + if((boolean~) plot_chargen::$4) goto plot_chargen::@1 + to:plot_chargen::@5 +plot_chargen::@1: scope:[plot_chargen] from plot_chargen plot_chargen::@5 + *((byte*) PROCPORT) ← (byte/signed byte/word/signed word/dword/signed dword) 50 + (byte*~) plot_chargen::$6 ← (byte*) SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*~) plot_chargen::$7 ← (byte*~) plot_chargen::$6 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 ← call mul8u (byte) plot_chargen::pos (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte*~) plot_chargen::$9 ← (byte*~) plot_chargen::$7 + (word~) plot_chargen::$8 + (byte*) plot_chargen::sc ← (byte*~) plot_chargen::$9 + (byte) plot_chargen::y ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plot_chargen::@2 +plot_chargen::@5: scope:[plot_chargen] from plot_chargen + (byte*~) plot_chargen::$5 ← (byte*) plot_chargen::chargen + (word/signed word/dword/signed dword) 4096 + (byte*) plot_chargen::chargen ← (byte*~) plot_chargen::$5 + to:plot_chargen::@1 +plot_chargen::@2: scope:[plot_chargen] from plot_chargen::@1 plot_chargen::@7 + (byte) plot_chargen::bits ← *((byte*) plot_chargen::chargen + (byte) plot_chargen::y) + (byte) plot_chargen::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plot_chargen::@3 +plot_chargen::@3: scope:[plot_chargen] from plot_chargen::@2 plot_chargen::@4 + (byte) plot_chargen::c ← (byte) '.' + (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits & (byte/word/signed word/dword/signed dword) 128 + (boolean~) plot_chargen::$11 ← (byte~) plot_chargen::$10 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) plot_chargen::$12 ← ! (boolean~) plot_chargen::$11 + if((boolean~) plot_chargen::$12) goto plot_chargen::@4 + to:plot_chargen::@6 +plot_chargen::@4: scope:[plot_chargen] from plot_chargen::@3 plot_chargen::@6 + *((byte*) plot_chargen::sc) ← (byte) plot_chargen::c + (byte*) plot_chargen::sc ← ++ (byte*) plot_chargen::sc + (byte~) plot_chargen::$13 ← (byte) plot_chargen::bits << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plot_chargen::bits ← (byte~) plot_chargen::$13 + (byte) plot_chargen::x ← ++ (byte) plot_chargen::x + (boolean~) plot_chargen::$14 ← (byte) plot_chargen::x != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) plot_chargen::$14) goto plot_chargen::@3 + to:plot_chargen::@7 +plot_chargen::@6: scope:[plot_chargen] from plot_chargen::@3 + (byte) plot_chargen::c ← (byte) '*' + to:plot_chargen::@4 +plot_chargen::@7: scope:[plot_chargen] from plot_chargen::@4 + (byte*~) plot_chargen::$15 ← (byte*) plot_chargen::sc + (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte*) plot_chargen::sc ← (byte*~) plot_chargen::$15 + (byte) plot_chargen::y ← ++ (byte) plot_chargen::y + (boolean~) plot_chargen::$16 ← (byte) plot_chargen::y != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) plot_chargen::$16) goto plot_chargen::@2 + to:plot_chargen::@8 +plot_chargen::@8: scope:[plot_chargen] from plot_chargen::@7 + *((byte*) PROCPORT) ← (byte/signed byte/word/signed word/dword/signed dword) 55 + asm { cli } + to:plot_chargen::@return +plot_chargen::@return: scope:[plot_chargen] from plot_chargen::@8 + return + to:@return +@12: scope:[] from @11 + call main + to:@end +@end: scope:[] from @12 + +Removing unused procedure mul8s +Removing unused procedure mul8su +Removing unused procedure mul16s +Removing unused procedure keyboard_init +Removing unused procedure mul16u +Eliminating unused variable (byte*) SPRITES_XPOS and assignment [2] (byte*) SPRITES_XPOS ← ((byte*)) (word/dword/signed dword) 53248 +Eliminating unused variable (byte*) SPRITES_YPOS and assignment [3] (byte*) SPRITES_YPOS ← ((byte*)) (word/dword/signed dword) 53249 +Eliminating unused variable (byte*) SPRITES_XMSB and assignment [4] (byte*) SPRITES_XMSB ← ((byte*)) (word/dword/signed dword) 53264 +Eliminating unused variable (byte*) RASTER and assignment [5] (byte*) RASTER ← ((byte*)) (word/dword/signed dword) 53266 +Eliminating unused variable (byte*) SPRITES_ENABLE and assignment [6] (byte*) SPRITES_ENABLE ← ((byte*)) (word/dword/signed dword) 53269 +Eliminating unused variable (byte*) SPRITES_EXPAND_Y and assignment [7] (byte*) SPRITES_EXPAND_Y ← ((byte*)) (word/dword/signed dword) 53271 +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*) SPRITES_EXPAND_X and assignment [10] (byte*) SPRITES_EXPAND_X ← ((byte*)) (word/dword/signed dword) 53277 +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*) SPRITES_COLS and assignment [15] (byte*) SPRITES_COLS ← ((byte*)) (word/dword/signed dword) 53287 +Eliminating unused variable (byte*) COLS and assignment [16] (byte*) COLS ← ((byte*)) (word/dword/signed dword) 55296 +Eliminating unused variable (byte*) CIA1_PORT_A_DDR and assignment [19] (byte*) CIA1_PORT_A_DDR ← ((byte*)) (word/dword/signed dword) 56322 +Eliminating unused variable (byte*) CIA1_PORT_B_DDR and assignment [20] (byte*) CIA1_PORT_B_DDR ← ((byte*)) (word/dword/signed dword) 56323 +Eliminating unused variable (byte) BLACK and assignment [21] (byte) BLACK ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (byte) WHITE and assignment [22] (byte) WHITE ← (byte/signed byte/word/signed word/dword/signed dword) 1 +Eliminating unused variable (byte) RED and assignment [23] (byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2 +Eliminating unused variable (byte) CYAN and assignment [24] (byte) CYAN ← (byte/signed byte/word/signed word/dword/signed dword) 3 +Eliminating unused variable (byte) PURPLE and assignment [25] (byte) PURPLE ← (byte/signed byte/word/signed word/dword/signed dword) 4 +Eliminating unused variable (byte) GREEN and assignment [26] (byte) GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 5 +Eliminating unused variable (byte) BLUE and assignment [27] (byte) BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 6 +Eliminating unused variable (byte) YELLOW and assignment [28] (byte) YELLOW ← (byte/signed byte/word/signed word/dword/signed dword) 7 +Eliminating unused variable (byte) ORANGE and assignment [29] (byte) ORANGE ← (byte/signed byte/word/signed word/dword/signed dword) 8 +Eliminating unused variable (byte) BROWN and assignment [30] (byte) BROWN ← (byte/signed byte/word/signed word/dword/signed dword) 9 +Eliminating unused variable (byte) PINK and assignment [31] (byte) PINK ← (byte/signed byte/word/signed word/dword/signed dword) 10 +Eliminating unused variable (byte) DARK_GREY and assignment [32] (byte) DARK_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 11 +Eliminating unused variable (byte) GREY and assignment [33] (byte) GREY ← (byte/signed byte/word/signed word/dword/signed dword) 12 +Eliminating unused variable (byte) LIGHT_GREEN and assignment [34] (byte) LIGHT_GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 13 +Eliminating unused variable (byte) LIGHT_BLUE and assignment [35] (byte) LIGHT_BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 14 +Eliminating unused variable (byte) LIGHT_GREY and assignment [36] (byte) LIGHT_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 15 +Eliminating unused variable (byte) KEY_DEL and assignment [54] (byte) KEY_DEL ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (byte) KEY_RETURN and assignment [55] (byte) KEY_RETURN ← (byte/signed byte/word/signed word/dword/signed dword) 1 +Eliminating unused variable (byte) KEY_CRSR_RIGHT and assignment [56] (byte) KEY_CRSR_RIGHT ← (byte/signed byte/word/signed word/dword/signed dword) 2 +Eliminating unused variable (byte) KEY_CRSR_DOWN and assignment [61] (byte) KEY_CRSR_DOWN ← (byte/signed byte/word/signed word/dword/signed dword) 7 +Eliminating unused variable (byte) KEY_HOME and assignment [105] (byte) KEY_HOME ← (byte/signed byte/word/signed word/dword/signed dword) 51 +Eliminating unused variable (byte) KEY_RSHIFT and assignment [106] (byte) KEY_RSHIFT ← (byte/signed byte/word/signed word/dword/signed dword) 52 +Eliminating unused variable (byte) KEY_CTRL and assignment [112] (byte) KEY_CTRL ← (byte/signed byte/word/signed word/dword/signed dword) 58 +Eliminating unused variable (byte) KEY_COMMODORE and assignment [115] (byte) KEY_COMMODORE ← (byte/signed byte/word/signed word/dword/signed dword) 61 +Eliminating unused variable (byte) KEY_RUNSTOP and assignment [117] (byte) KEY_RUNSTOP ← (byte/signed byte/word/signed word/dword/signed dword) 63 +Eliminating unused variable - keeping the call (void~) main::$3 +Eliminating unused variable - keeping the call (void~) main::$6 +Eliminating unused variable - keeping the call (void~) main::$9 +Eliminating unused variable - keeping the call (void~) main::$12 +Eliminating unused variable - keeping the call (void~) main::$13 +Eliminating unused variable - keeping the call (void~) main::$36 +Creating constant string variable for inline (const string) main::str "f1@" +Creating constant string variable for inline (const string) main::str1 "f3@" +Creating constant string variable for inline (const string) main::str2 "f5@" +Creating constant string variable for inline (const string) main::str3 "f7@" +Removing empty block mul8u::@5 +Removing empty block mul8u::@6 +Removing empty block mul8u::@8 +Removing empty block mul8u::@9 +Removing empty block @1 +Removing empty block @2 +Removing empty block @3 +Removing empty block @4 +Removing empty block @6 +Removing empty block keyboard_matrix_read::@1 +Removing empty block @7 +Removing empty block keyboard_key_pressed::@1 +Removing empty block @8 +Removing empty block keyboard_get_keycode::@1 +Removing empty block main::@20 +Removing empty block main::@24 +Removing empty block @10 +Removing empty block print_str_at::@4 +Removing empty block print_str_at::@3 +Removing empty block print_str_at::@5 +Removing empty block print_str_at::@6 +Removing empty block @11 +PROCEDURE MODIFY VARIABLE ANALYSIS + +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +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*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248 + (byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320 + (byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321 + to:@5 +mul8u: scope:[mul8u] from plot_chargen::@1 + (byte) mul8u::a#5 ← phi( plot_chargen::@1/(byte) mul8u::a#1 ) + (byte) mul8u::b#1 ← phi( plot_chargen::@1/(byte) mul8u::b#0 ) + (word) mul8u::res#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#1 + to:mul8u::@1 +mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 + (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) + (word) mul8u::res#4 ← phi( mul8u/(word) mul8u::res#0 mul8u::@4/(word) mul8u::res#6 ) + (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#5 mul8u::@4/(byte) mul8u::a#0 ) + (boolean~) mul8u::$0 ← (byte) mul8u::a#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((boolean~) mul8u::$0) goto mul8u::@2 + to:mul8u::@3 +mul8u::@2: scope:[mul8u] from mul8u::@1 + (word) mul8u::res#5 ← phi( mul8u::@1/(word) mul8u::res#4 ) + (word) mul8u::mb#4 ← phi( mul8u::@1/(word) mul8u::mb#5 ) + (byte) mul8u::a#3 ← phi( mul8u::@1/(byte) mul8u::a#2 ) + (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 + (boolean~) mul8u::$2 ← (byte~) mul8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) mul8u::$3 ← ! (boolean~) mul8u::$2 + if((boolean~) mul8u::$3) goto mul8u::@4 + to:mul8u::@7 +mul8u::@3: scope:[mul8u] from mul8u::@1 + (word) mul8u::res#2 ← phi( mul8u::@1/(word) mul8u::res#4 ) + (word) mul8u::return#0 ← (word) mul8u::res#2 + to:mul8u::@return +mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7 + (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#5 mul8u::@7/(word) mul8u::res#1 ) + (word) mul8u::mb#2 ← phi( mul8u::@2/(word) mul8u::mb#4 mul8u::@7/(word) mul8u::mb#3 ) + (byte) mul8u::a#4 ← phi( mul8u::@2/(byte) mul8u::a#3 mul8u::@7/(byte) mul8u::a#6 ) + (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) mul8u::a#0 ← (byte~) mul8u::$5 + (word~) mul8u::$6 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) mul8u::mb#1 ← (word~) mul8u::$6 + to:mul8u::@1 +mul8u::@7: scope:[mul8u] from mul8u::@2 + (byte) mul8u::a#6 ← phi( mul8u::@2/(byte) mul8u::a#3 ) + (word) mul8u::mb#3 ← phi( mul8u::@2/(word) mul8u::mb#4 ) + (word) mul8u::res#3 ← phi( mul8u::@2/(word) mul8u::res#5 ) + (word~) mul8u::$4 ← (word) mul8u::res#3 + (word) mul8u::mb#3 + (word) mul8u::res#1 ← (word~) mul8u::$4 + to:mul8u::@4 +mul8u::@return: scope:[mul8u] from mul8u::@3 + (word) mul8u::return#3 ← phi( mul8u::@3/(word) mul8u::return#0 ) + (word) mul8u::return#1 ← (word) mul8u::return#3 + return + to:@return +@5: scope:[] from @begin + (byte) KEY_F7#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) KEY_F1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) KEY_F3#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) KEY_F5#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6 + (byte) KEY_3#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) KEY_W#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) KEY_A#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) KEY_4#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11 + (byte) KEY_Z#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12 + (byte) KEY_S#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13 + (byte) KEY_E#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14 + (byte) KEY_LSHIFT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15 + (byte) KEY_5#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) KEY_R#0 ← (byte/signed byte/word/signed word/dword/signed dword) 17 + (byte) KEY_D#0 ← (byte/signed byte/word/signed word/dword/signed dword) 18 + (byte) KEY_6#0 ← (byte/signed byte/word/signed word/dword/signed dword) 19 + (byte) KEY_C#0 ← (byte/signed byte/word/signed word/dword/signed dword) 20 + (byte) KEY_F#0 ← (byte/signed byte/word/signed word/dword/signed dword) 21 + (byte) KEY_T#0 ← (byte/signed byte/word/signed word/dword/signed dword) 22 + (byte) KEY_X#0 ← (byte/signed byte/word/signed word/dword/signed dword) 23 + (byte) KEY_7#0 ← (byte/signed byte/word/signed word/dword/signed dword) 24 + (byte) KEY_Y#0 ← (byte/signed byte/word/signed word/dword/signed dword) 25 + (byte) KEY_G#0 ← (byte/signed byte/word/signed word/dword/signed dword) 26 + (byte) KEY_8#0 ← (byte/signed byte/word/signed word/dword/signed dword) 27 + (byte) KEY_B#0 ← (byte/signed byte/word/signed word/dword/signed dword) 28 + (byte) KEY_H#0 ← (byte/signed byte/word/signed word/dword/signed dword) 29 + (byte) KEY_U#0 ← (byte/signed byte/word/signed word/dword/signed dword) 30 + (byte) KEY_V#0 ← (byte/signed byte/word/signed word/dword/signed dword) 31 + (byte) KEY_9#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) KEY_I#0 ← (byte/signed byte/word/signed word/dword/signed dword) 33 + (byte) KEY_J#0 ← (byte/signed byte/word/signed word/dword/signed dword) 34 + (byte) KEY_0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 35 + (byte) KEY_M#0 ← (byte/signed byte/word/signed word/dword/signed dword) 36 + (byte) KEY_K#0 ← (byte/signed byte/word/signed word/dword/signed dword) 37 + (byte) KEY_O#0 ← (byte/signed byte/word/signed word/dword/signed dword) 38 + (byte) KEY_N#0 ← (byte/signed byte/word/signed word/dword/signed dword) 39 + (byte) KEY_PLUS#0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte) KEY_P#0 ← (byte/signed byte/word/signed word/dword/signed dword) 41 + (byte) KEY_L#0 ← (byte/signed byte/word/signed word/dword/signed dword) 42 + (byte) KEY_MINUS#0 ← (byte/signed byte/word/signed word/dword/signed dword) 43 + (byte) KEY_DOT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 44 + (byte) KEY_COLON#0 ← (byte/signed byte/word/signed word/dword/signed dword) 45 + (byte) KEY_AT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 46 + (byte) KEY_COMMA#0 ← (byte/signed byte/word/signed word/dword/signed dword) 47 + (byte) KEY_POUND#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48 + (byte) KEY_ASTERISK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49 + (byte) KEY_SEMICOLON#0 ← (byte/signed byte/word/signed word/dword/signed dword) 50 + (byte) KEY_EQUALS#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53 + (byte) KEY_ARROW_UP#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54 + (byte) KEY_SLASH#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55 + (byte) KEY_1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 56 + (byte) KEY_ARROW_LEFT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 57 + (byte) KEY_2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 59 + (byte) KEY_SPACE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 60 + (byte) KEY_Q#0 ← (byte/signed byte/word/signed word/dword/signed dword) 62 + (byte[]) keyboard_char_keycodes#0 ← { (byte) KEY_AT#0, (byte) KEY_A#0, (byte) KEY_B#0, (byte) KEY_C#0, (byte) KEY_D#0, (byte) KEY_E#0, (byte) KEY_F#0, (byte) KEY_G#0, (byte) KEY_H#0, (byte) KEY_I#0, (byte) KEY_J#0, (byte) KEY_K#0, (byte) KEY_L#0, (byte) KEY_M#0, (byte) KEY_N#0, (byte) KEY_O#0, (byte) KEY_P#0, (byte) KEY_Q#0, (byte) KEY_R#0, (byte) KEY_S#0, (byte) KEY_T#0, (byte) KEY_U#0, (byte) KEY_V#0, (byte) KEY_W#0, (byte) KEY_X#0, (byte) KEY_Y#0, (byte) KEY_Z#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_POUND#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_ARROW_UP#0, (byte) KEY_ARROW_LEFT#0, (byte) KEY_SPACE#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_ASTERISK#0, (byte) KEY_PLUS#0, (byte) KEY_COMMA#0, (byte) KEY_MINUS#0, (byte) KEY_DOT#0, (byte) KEY_SLASH#0, (byte) KEY_0#0, (byte) KEY_1#0, (byte) KEY_2#0, (byte) KEY_3#0, (byte) KEY_4#0, (byte) KEY_5#0, (byte) KEY_6#0, (byte) KEY_7#0, (byte) KEY_8#0, (byte) KEY_9#0, (byte) KEY_COLON#0, (byte) KEY_SEMICOLON#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte) KEY_EQUALS#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63 } + (byte[8]) keyboard_matrix_row_bitmask#0 ← { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 } + (byte[]) keyboard_matrix_col_bitmask#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/word/signed word/dword/signed dword) 128 } + to:@9 +keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed + (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) + *((byte*) CIA1_PORT_A#0) ← *((byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*) CIA1_PORT_B#0) + (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 + (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 + to:keyboard_matrix_read::@return +keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read + (byte) keyboard_matrix_read::return#3 ← phi( keyboard_matrix_read/(byte) keyboard_matrix_read::return#0 ) + (byte) keyboard_matrix_read::return#1 ← (byte) keyboard_matrix_read::return#3 + return + to:@return +keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@21 main::@3 main::@4 main::@5 main::@6 main::@7 + (byte) keyboard_key_pressed::key#6 ← phi( main::@21/(byte) keyboard_key_pressed::key#5 main::@3/(byte) keyboard_key_pressed::key#0 main::@4/(byte) keyboard_key_pressed::key#1 main::@5/(byte) keyboard_key_pressed::key#2 main::@6/(byte) keyboard_key_pressed::key#3 main::@7/(byte) keyboard_key_pressed::key#4 ) + (byte~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) keyboard_matrix_read::rowid#0 ← (byte~) keyboard_key_pressed::$0 + call keyboard_matrix_read param-assignment + (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#1 + to:keyboard_key_pressed::@2 +keyboard_key_pressed::@2: scope:[keyboard_key_pressed] from keyboard_key_pressed + (byte) keyboard_key_pressed::key#7 ← phi( keyboard_key_pressed/(byte) keyboard_key_pressed::key#6 ) + (byte) keyboard_matrix_read::return#4 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::return#2 ) + (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_matrix_read::return#4 + (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#7 & (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte~) keyboard_key_pressed::$3 ← (byte~) keyboard_key_pressed::$1 & *((byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) + (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$3 + to:keyboard_key_pressed::@return +keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@2 + (byte) keyboard_key_pressed::return#8 ← phi( keyboard_key_pressed::@2/(byte) keyboard_key_pressed::return#0 ) + (byte) keyboard_key_pressed::return#1 ← (byte) keyboard_key_pressed::return#8 + return + to:@return +keyboard_get_keycode: scope:[keyboard_get_keycode] from main::@10 + (byte) keyboard_get_keycode::ch#1 ← phi( main::@10/(byte) keyboard_get_keycode::ch#0 ) + (byte) keyboard_get_keycode::return#0 ← *((byte[]) keyboard_char_keycodes#0 + (byte) keyboard_get_keycode::ch#1) + to:keyboard_get_keycode::@return +keyboard_get_keycode::@return: scope:[keyboard_get_keycode] from keyboard_get_keycode + (byte) keyboard_get_keycode::return#3 ← phi( keyboard_get_keycode/(byte) keyboard_get_keycode::return#0 ) + (byte) keyboard_get_keycode::return#1 ← (byte) keyboard_get_keycode::return#3 + return + to:@return +@9: scope:[] from @5 + (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 + to:@12 +main: scope:[main] from @12 + (byte*) SCREEN#1 ← phi( @12/(byte*) SCREEN#8 ) + (byte*) main::sc#0 ← (byte*) SCREEN#1 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) + (byte*) main::sc#2 ← phi( main/(byte*) main::sc#0 main::@1/(byte*) main::sc#1 ) + *((byte*) main::sc#2) ← (byte) ' ' + (byte*) main::sc#1 ← ++ (byte*) main::sc#2 + (byte*~) main::$0 ← (byte*) SCREEN#2 + (word/signed word/dword/signed dword) 1000 + (boolean~) main::$1 ← (byte*) main::sc#1 < (byte*~) main::$0 + if((boolean~) main::$1) goto main::@1 + to:main::@13 +main::@13: scope:[main] from main::@1 + (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#2 ) + (byte*~) main::$2 ← (byte*) SCREEN#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*) print_str_at::str#0 ← (const string) main::str + (byte*) print_str_at::at#0 ← (byte*~) main::$2 + call print_str_at param-assignment + to:main::@25 +main::@25: scope:[main] from main::@13 + (byte*) SCREEN#4 ← phi( main::@13/(byte*) SCREEN#3 ) + (byte*~) main::$4 ← (byte*) SCREEN#4 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$5 ← (byte*~) main::$4 + (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte*) print_str_at::str#1 ← (const string) main::str1 + (byte*) print_str_at::at#1 ← (byte*~) main::$5 + call print_str_at param-assignment + to:main::@26 +main::@26: scope:[main] from main::@25 + (byte*) SCREEN#5 ← phi( main::@25/(byte*) SCREEN#4 ) + (byte*~) main::$7 ← (byte*) SCREEN#5 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$8 ← (byte*~) main::$7 + (byte/signed byte/word/signed word/dword/signed dword) 20 + (byte*) print_str_at::str#2 ← (const string) main::str2 + (byte*) print_str_at::at#2 ← (byte*~) main::$8 + call print_str_at param-assignment + to:main::@27 +main::@27: scope:[main] from main::@26 + (byte*) SCREEN#6 ← phi( main::@26/(byte*) SCREEN#5 ) + (byte*~) main::$10 ← (byte*) SCREEN#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte*~) main::$11 ← (byte*~) main::$10 + (byte/signed byte/word/signed word/dword/signed dword) 30 + (byte*) print_str_at::str#3 ← (const string) main::str3 + (byte*) print_str_at::at#3 ← (byte*~) main::$11 + call print_str_at param-assignment + to:main::@28 +main::@28: scope:[main] from main::@27 + (byte*) SCREEN#13 ← phi( main::@27/(byte*) SCREEN#6 ) + (byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@2 +main::@2: scope:[main] from main::@28 main::@29 + (byte*) SCREEN#11 ← phi( main::@28/(byte*) SCREEN#13 main::@29/(byte*) SCREEN#14 ) + (byte) main::i#2 ← phi( main::@28/(byte) main::i#0 main::@29/(byte) main::i#1 ) + (byte) plot_chargen::pos#0 ← (byte) main::i#2 + (byte) plot_chargen::ch#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) plot_chargen::shift#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + call plot_chargen param-assignment + to:main::@29 +main::@29: scope:[main] from main::@2 + (byte*) SCREEN#14 ← phi( main::@2/(byte*) SCREEN#11 ) + (byte) main::i#3 ← phi( main::@2/(byte) main::i#2 ) + (byte) main::i#1 ← ++ (byte) main::i#3 + (boolean~) main::$14 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 4 + if((boolean~) main::$14) goto main::@2 + to:main::@14 +main::@14: scope:[main] from main::@29 + (byte*) SCREEN#39 ← phi( main::@29/(byte*) SCREEN#14 ) + (byte) main::cur_pos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) main::shift#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@3 +main::@3: scope:[main] from main::@14 main::@23 + (byte*) SCREEN#38 ← phi( main::@14/(byte*) SCREEN#39 main::@23/(byte*) SCREEN#40 ) + (byte) main::cur_pos#25 ← phi( main::@14/(byte) main::cur_pos#0 main::@23/(byte) main::cur_pos#26 ) + (byte) keyboard_key_pressed::key#0 ← (byte) KEY_F1#0 + call keyboard_key_pressed param-assignment + (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#1 + to:main::@30 +main::@30: scope:[main] from main::@3 + (byte*) SCREEN#37 ← phi( main::@3/(byte*) SCREEN#38 ) + (byte) main::cur_pos#24 ← phi( main::@3/(byte) main::cur_pos#25 ) + (byte) keyboard_key_pressed::return#9 ← phi( main::@3/(byte) keyboard_key_pressed::return#2 ) + (byte~) main::$15 ← (byte) keyboard_key_pressed::return#9 + (boolean~) main::$16 ← (byte~) main::$15 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$17 ← ! (boolean~) main::$16 + if((boolean~) main::$17) goto main::@4 + to:main::@15 +main::@4: scope:[main] from main::@15 main::@30 + (byte*) SCREEN#35 ← phi( main::@15/(byte*) SCREEN#36 main::@30/(byte*) SCREEN#37 ) + (byte) main::cur_pos#23 ← phi( main::@15/(byte) main::cur_pos#1 main::@30/(byte) main::cur_pos#24 ) + (byte) keyboard_key_pressed::key#1 ← (byte) KEY_F3#0 + call keyboard_key_pressed param-assignment + (byte) keyboard_key_pressed::return#3 ← (byte) keyboard_key_pressed::return#1 + to:main::@31 +main::@31: scope:[main] from main::@4 + (byte*) SCREEN#34 ← phi( main::@4/(byte*) SCREEN#35 ) + (byte) main::cur_pos#22 ← phi( main::@4/(byte) main::cur_pos#23 ) + (byte) keyboard_key_pressed::return#10 ← phi( main::@4/(byte) keyboard_key_pressed::return#3 ) + (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 + (boolean~) main::$19 ← (byte~) main::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$20 ← ! (boolean~) main::$19 + if((boolean~) main::$20) goto main::@5 + to:main::@16 +main::@15: scope:[main] from main::@30 + (byte*) SCREEN#36 ← phi( main::@30/(byte*) SCREEN#37 ) + (byte) main::cur_pos#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@4 +main::@5: scope:[main] from main::@16 main::@31 + (byte*) SCREEN#32 ← phi( main::@16/(byte*) SCREEN#33 main::@31/(byte*) SCREEN#34 ) + (byte) main::cur_pos#21 ← phi( main::@16/(byte) main::cur_pos#2 main::@31/(byte) main::cur_pos#22 ) + (byte) keyboard_key_pressed::key#2 ← (byte) KEY_F5#0 + call keyboard_key_pressed param-assignment + (byte) keyboard_key_pressed::return#4 ← (byte) keyboard_key_pressed::return#1 + to:main::@32 +main::@32: scope:[main] from main::@5 + (byte*) SCREEN#31 ← phi( main::@5/(byte*) SCREEN#32 ) + (byte) main::cur_pos#20 ← phi( main::@5/(byte) main::cur_pos#21 ) + (byte) keyboard_key_pressed::return#11 ← phi( main::@5/(byte) keyboard_key_pressed::return#4 ) + (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 + (boolean~) main::$22 ← (byte~) main::$21 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$23 ← ! (boolean~) main::$22 + if((boolean~) main::$23) goto main::@6 + to:main::@17 +main::@16: scope:[main] from main::@31 + (byte*) SCREEN#33 ← phi( main::@31/(byte*) SCREEN#34 ) + (byte) main::cur_pos#2 ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:main::@5 +main::@6: scope:[main] from main::@17 main::@32 + (byte*) SCREEN#29 ← phi( main::@17/(byte*) SCREEN#30 main::@32/(byte*) SCREEN#31 ) + (byte) main::cur_pos#19 ← phi( main::@17/(byte) main::cur_pos#3 main::@32/(byte) main::cur_pos#20 ) + (byte) keyboard_key_pressed::key#3 ← (byte) KEY_F7#0 + call keyboard_key_pressed param-assignment + (byte) keyboard_key_pressed::return#5 ← (byte) keyboard_key_pressed::return#1 + to:main::@33 +main::@33: scope:[main] from main::@6 + (byte*) SCREEN#28 ← phi( main::@6/(byte*) SCREEN#29 ) + (byte) main::cur_pos#18 ← phi( main::@6/(byte) main::cur_pos#19 ) + (byte) keyboard_key_pressed::return#12 ← phi( main::@6/(byte) keyboard_key_pressed::return#5 ) + (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 + (boolean~) main::$25 ← (byte~) main::$24 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$26 ← ! (boolean~) main::$25 + if((boolean~) main::$26) goto main::@7 + to:main::@18 +main::@17: scope:[main] from main::@32 + (byte*) SCREEN#30 ← phi( main::@32/(byte*) SCREEN#31 ) + (byte) main::cur_pos#3 ← (byte/signed byte/word/signed word/dword/signed dword) 2 + to:main::@6 +main::@7: scope:[main] from main::@18 main::@33 + (byte*) SCREEN#26 ← phi( main::@18/(byte*) SCREEN#27 main::@33/(byte*) SCREEN#28 ) + (byte) main::cur_pos#17 ← phi( main::@18/(byte) main::cur_pos#4 main::@33/(byte) main::cur_pos#18 ) + (byte) keyboard_key_pressed::key#4 ← (byte) KEY_LSHIFT#0 + call keyboard_key_pressed param-assignment + (byte) keyboard_key_pressed::return#6 ← (byte) keyboard_key_pressed::return#1 + to:main::@34 +main::@34: scope:[main] from main::@7 + (byte*) SCREEN#25 ← phi( main::@7/(byte*) SCREEN#26 ) + (byte) main::cur_pos#16 ← phi( main::@7/(byte) main::cur_pos#17 ) + (byte) keyboard_key_pressed::return#13 ← phi( main::@7/(byte) keyboard_key_pressed::return#6 ) + (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 + (boolean~) main::$28 ← (byte~) main::$27 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$29 ← ! (boolean~) main::$28 + if((boolean~) main::$29) goto main::@8 + to:main::@19 +main::@18: scope:[main] from main::@33 + (byte*) SCREEN#27 ← phi( main::@33/(byte*) SCREEN#28 ) + (byte) main::cur_pos#4 ← (byte/signed byte/word/signed word/dword/signed dword) 3 + to:main::@7 +main::@8: scope:[main] from main::@34 + (byte*) SCREEN#23 ← phi( main::@34/(byte*) SCREEN#25 ) + (byte) main::cur_pos#14 ← phi( main::@34/(byte) main::cur_pos#16 ) + (byte) main::shift#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@9 +main::@19: scope:[main] from main::@34 + (byte*) SCREEN#22 ← phi( main::@34/(byte*) SCREEN#25 ) + (byte) main::cur_pos#13 ← phi( main::@34/(byte) main::cur_pos#16 ) + (byte) main::shift#2 ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:main::@9 +main::@9: scope:[main] from main::@19 main::@8 + (byte*) SCREEN#21 ← phi( main::@19/(byte*) SCREEN#22 main::@8/(byte*) SCREEN#23 ) + (byte) main::shift#10 ← phi( main::@19/(byte) main::shift#2 main::@8/(byte) main::shift#1 ) + (byte) main::cur_pos#12 ← phi( main::@19/(byte) main::cur_pos#13 main::@8/(byte) main::cur_pos#14 ) + (byte) main::ch#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@10 +main::@10: scope:[main] from main::@12 main::@9 + (byte*) SCREEN#18 ← phi( main::@12/(byte*) SCREEN#20 main::@9/(byte*) SCREEN#21 ) + (byte) main::shift#7 ← phi( main::@12/(byte) main::shift#9 main::@9/(byte) main::shift#10 ) + (byte) main::cur_pos#9 ← phi( main::@12/(byte) main::cur_pos#11 main::@9/(byte) main::cur_pos#12 ) + (byte) main::ch#2 ← phi( main::@12/(byte) main::ch#1 main::@9/(byte) main::ch#0 ) + (byte) main::pressed#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 + call keyboard_get_keycode param-assignment + (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#1 + to:main::@35 +main::@35: scope:[main] from main::@10 + (byte*) SCREEN#16 ← phi( main::@10/(byte*) SCREEN#18 ) + (byte) main::shift#5 ← phi( main::@10/(byte) main::shift#7 ) + (byte) main::cur_pos#7 ← phi( main::@10/(byte) main::cur_pos#9 ) + (byte) main::ch#7 ← phi( main::@10/(byte) main::ch#2 ) + (byte) main::pressed#3 ← phi( main::@10/(byte) main::pressed#0 ) + (byte) keyboard_get_keycode::return#4 ← phi( main::@10/(byte) keyboard_get_keycode::return#2 ) + (byte~) main::$30 ← (byte) keyboard_get_keycode::return#4 + (byte) main::key#0 ← (byte~) main::$30 + (boolean~) main::$31 ← (byte) main::key#0 != (byte/signed byte/word/signed word/dword/signed dword) 63 + (boolean~) main::$32 ← ! (boolean~) main::$31 + if((boolean~) main::$32) goto main::@11 + to:main::@21 +main::@11: scope:[main] from main::@35 main::@36 + (byte*) SCREEN#15 ← phi( main::@35/(byte*) SCREEN#16 main::@36/(byte*) SCREEN#17 ) + (byte) main::shift#4 ← phi( main::@35/(byte) main::shift#5 main::@36/(byte) main::shift#6 ) + (byte) main::cur_pos#6 ← phi( main::@35/(byte) main::cur_pos#7 main::@36/(byte) main::cur_pos#8 ) + (byte) main::ch#5 ← phi( main::@35/(byte) main::ch#7 main::@36/(byte) main::ch#8 ) + (byte) main::pressed#2 ← phi( main::@35/(byte) main::pressed#3 main::@36/(byte) main::pressed#1 ) + (boolean~) main::$34 ← (byte) main::pressed#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) main::$35 ← ! (boolean~) main::$34 + if((boolean~) main::$35) goto main::@12 + to:main::@22 +main::@21: scope:[main] from main::@35 + (byte*) SCREEN#19 ← phi( main::@35/(byte*) SCREEN#16 ) + (byte) main::shift#8 ← phi( main::@35/(byte) main::shift#5 ) + (byte) main::cur_pos#10 ← phi( main::@35/(byte) main::cur_pos#7 ) + (byte) main::ch#9 ← phi( main::@35/(byte) main::ch#7 ) + (byte) main::key#1 ← phi( main::@35/(byte) main::key#0 ) + (byte) keyboard_key_pressed::key#5 ← (byte) main::key#1 + call keyboard_key_pressed param-assignment + (byte) keyboard_key_pressed::return#7 ← (byte) keyboard_key_pressed::return#1 + to:main::@36 +main::@36: scope:[main] from main::@21 + (byte*) SCREEN#17 ← phi( main::@21/(byte*) SCREEN#19 ) + (byte) main::shift#6 ← phi( main::@21/(byte) main::shift#8 ) + (byte) main::cur_pos#8 ← phi( main::@21/(byte) main::cur_pos#10 ) + (byte) main::ch#8 ← phi( main::@21/(byte) main::ch#9 ) + (byte) keyboard_key_pressed::return#14 ← phi( main::@21/(byte) keyboard_key_pressed::return#7 ) + (byte~) main::$33 ← (byte) keyboard_key_pressed::return#14 + (byte) main::pressed#1 ← (byte~) main::$33 + to:main::@11 +main::@12: scope:[main] from main::@11 main::@37 + (byte*) SCREEN#20 ← phi( main::@11/(byte*) SCREEN#15 main::@37/(byte*) SCREEN#24 ) + (byte) main::shift#9 ← phi( main::@11/(byte) main::shift#4 main::@37/(byte) main::shift#11 ) + (byte) main::cur_pos#11 ← phi( main::@11/(byte) main::cur_pos#6 main::@37/(byte) main::cur_pos#15 ) + (byte) main::ch#3 ← phi( main::@11/(byte) main::ch#5 main::@37/(byte) main::ch#6 ) + (byte) main::ch#1 ← ++ (byte) main::ch#3 + (boolean~) main::$37 ← (byte) main::ch#1 != (byte/signed byte/word/signed word/dword/signed dword) 64 + if((boolean~) main::$37) goto main::@10 + to:main::@23 +main::@22: scope:[main] from main::@11 + (byte*) SCREEN#12 ← phi( main::@11/(byte*) SCREEN#15 ) + (byte) main::shift#3 ← phi( main::@11/(byte) main::shift#4 ) + (byte) main::ch#4 ← phi( main::@11/(byte) main::ch#5 ) + (byte) main::cur_pos#5 ← phi( main::@11/(byte) main::cur_pos#6 ) + (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#5 + (byte) plot_chargen::ch#1 ← (byte) main::ch#4 + (byte) plot_chargen::shift#1 ← (byte) main::shift#3 + call plot_chargen param-assignment + to:main::@37 +main::@37: scope:[main] from main::@22 + (byte*) SCREEN#24 ← phi( main::@22/(byte*) SCREEN#12 ) + (byte) main::shift#11 ← phi( main::@22/(byte) main::shift#3 ) + (byte) main::cur_pos#15 ← phi( main::@22/(byte) main::cur_pos#5 ) + (byte) main::ch#6 ← phi( main::@22/(byte) main::ch#4 ) + to:main::@12 +main::@23: scope:[main] from main::@12 + (byte*) SCREEN#40 ← phi( main::@12/(byte*) SCREEN#20 ) + (byte) main::cur_pos#26 ← phi( main::@12/(byte) main::cur_pos#11 ) + if(true) goto main::@3 + to:main::@return +main::@return: scope:[main] from main::@23 + return + to:@return +print_str_at: scope:[print_str_at] from main::@13 main::@25 main::@26 main::@27 + (byte*) print_str_at::at#7 ← phi( main::@13/(byte*) print_str_at::at#0 main::@25/(byte*) print_str_at::at#1 main::@26/(byte*) print_str_at::at#2 main::@27/(byte*) print_str_at::at#3 ) + (byte*) print_str_at::str#7 ← phi( main::@13/(byte*) print_str_at::str#0 main::@25/(byte*) print_str_at::str#1 main::@26/(byte*) print_str_at::str#2 main::@27/(byte*) print_str_at::str#3 ) + to:print_str_at::@1 +print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 + (byte*) print_str_at::at#6 ← phi( print_str_at/(byte*) print_str_at::at#7 print_str_at::@2/(byte*) print_str_at::at#4 ) + (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 ) + (boolean~) print_str_at::$0 ← *((byte*) print_str_at::str#5) != (byte) '@' + if((boolean~) print_str_at::$0) goto print_str_at::@2 + to:print_str_at::@return +print_str_at::@2: scope:[print_str_at] from print_str_at::@1 + (byte*) print_str_at::at#5 ← phi( print_str_at::@1/(byte*) print_str_at::at#6 ) + (byte*) print_str_at::str#6 ← phi( print_str_at::@1/(byte*) print_str_at::str#5 ) + *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#6) + (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 + (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#6 + to:print_str_at::@1 +print_str_at::@return: scope:[print_str_at] from print_str_at::@1 + return + to:@return +plot_chargen: scope:[plot_chargen] from main::@2 main::@22 + (byte) plot_chargen::pos#3 ← phi( main::@2/(byte) plot_chargen::pos#0 main::@22/(byte) plot_chargen::pos#1 ) + (byte*) SCREEN#9 ← phi( main::@2/(byte*) SCREEN#11 main::@22/(byte*) SCREEN#12 ) + (byte) plot_chargen::shift#2 ← phi( main::@2/(byte) plot_chargen::shift#0 main::@22/(byte) plot_chargen::shift#1 ) + (byte) plot_chargen::ch#2 ← phi( main::@2/(byte) plot_chargen::ch#0 main::@22/(byte) plot_chargen::ch#1 ) + asm { sei } + (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 + (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte*~) plot_chargen::$2 ← (byte*) CHARGEN#0 + (word~) plot_chargen::$1 + (byte*) plot_chargen::chargen#0 ← (byte*~) plot_chargen::$2 + (boolean~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) plot_chargen::$4 ← ! (boolean~) plot_chargen::$3 + if((boolean~) plot_chargen::$4) goto plot_chargen::@1 + to:plot_chargen::@5 +plot_chargen::@1: scope:[plot_chargen] from plot_chargen plot_chargen::@5 + (byte*) plot_chargen::chargen#6 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@5/(byte*) plot_chargen::chargen#1 ) + (byte) plot_chargen::pos#2 ← phi( plot_chargen/(byte) plot_chargen::pos#3 plot_chargen::@5/(byte) plot_chargen::pos#4 ) + (byte*) SCREEN#7 ← phi( plot_chargen/(byte*) SCREEN#9 plot_chargen::@5/(byte*) SCREEN#10 ) + *((byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 + (byte*~) plot_chargen::$6 ← (byte*) SCREEN#7 + (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*~) plot_chargen::$7 ← (byte*~) plot_chargen::$6 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 + (byte) mul8u::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10 + call mul8u param-assignment + (word) mul8u::return#2 ← (word) mul8u::return#1 + to:plot_chargen::@9 +plot_chargen::@9: scope:[plot_chargen] from plot_chargen::@1 + (byte*) plot_chargen::chargen#5 ← phi( plot_chargen::@1/(byte*) plot_chargen::chargen#6 ) + (word) mul8u::return#4 ← phi( plot_chargen::@1/(word) mul8u::return#2 ) + (word~) plot_chargen::$8 ← (word) mul8u::return#4 + (byte*~) plot_chargen::$9 ← (byte*~) plot_chargen::$7 + (word~) plot_chargen::$8 + (byte*) plot_chargen::sc#0 ← (byte*~) plot_chargen::$9 + (byte) plot_chargen::y#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plot_chargen::@2 +plot_chargen::@5: scope:[plot_chargen] from plot_chargen + (byte) plot_chargen::pos#4 ← phi( plot_chargen/(byte) plot_chargen::pos#3 ) + (byte*) SCREEN#10 ← phi( plot_chargen/(byte*) SCREEN#9 ) + (byte*) plot_chargen::chargen#2 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 ) + (byte*~) plot_chargen::$5 ← (byte*) plot_chargen::chargen#2 + (word/signed word/dword/signed dword) 4096 + (byte*) plot_chargen::chargen#1 ← (byte*~) plot_chargen::$5 + to:plot_chargen::@1 +plot_chargen::@2: scope:[plot_chargen] from plot_chargen::@7 plot_chargen::@9 + (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@7/(byte*) plot_chargen::sc#2 plot_chargen::@9/(byte*) plot_chargen::sc#0 ) + (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte) plot_chargen::y#0 ) + (byte*) plot_chargen::chargen#3 ← phi( plot_chargen::@7/(byte*) plot_chargen::chargen#4 plot_chargen::@9/(byte*) plot_chargen::chargen#5 ) + (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#3 + (byte) plot_chargen::y#2) + (byte) plot_chargen::x#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plot_chargen::@3 +plot_chargen::@3: scope:[plot_chargen] from plot_chargen::@2 plot_chargen::@4 + (byte*) plot_chargen::chargen#8 ← phi( plot_chargen::@2/(byte*) plot_chargen::chargen#3 plot_chargen::@4/(byte*) plot_chargen::chargen#7 ) + (byte) plot_chargen::y#5 ← phi( plot_chargen::@2/(byte) plot_chargen::y#2 plot_chargen::@4/(byte) plot_chargen::y#4 ) + (byte) plot_chargen::x#3 ← phi( plot_chargen::@2/(byte) plot_chargen::x#0 plot_chargen::@4/(byte) plot_chargen::x#1 ) + (byte*) plot_chargen::sc#5 ← phi( plot_chargen::@2/(byte*) plot_chargen::sc#7 plot_chargen::@4/(byte*) plot_chargen::sc#1 ) + (byte) plot_chargen::bits#2 ← phi( plot_chargen::@2/(byte) plot_chargen::bits#0 plot_chargen::@4/(byte) plot_chargen::bits#1 ) + (byte) plot_chargen::c#0 ← (byte) '.' + (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 + (boolean~) plot_chargen::$11 ← (byte~) plot_chargen::$10 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) plot_chargen::$12 ← ! (boolean~) plot_chargen::$11 + if((boolean~) plot_chargen::$12) goto plot_chargen::@4 + to:plot_chargen::@6 +plot_chargen::@4: scope:[plot_chargen] from plot_chargen::@3 plot_chargen::@6 + (byte*) plot_chargen::chargen#7 ← phi( plot_chargen::@3/(byte*) plot_chargen::chargen#8 plot_chargen::@6/(byte*) plot_chargen::chargen#9 ) + (byte) plot_chargen::y#4 ← phi( plot_chargen::@3/(byte) plot_chargen::y#5 plot_chargen::@6/(byte) plot_chargen::y#6 ) + (byte) plot_chargen::x#2 ← phi( plot_chargen::@3/(byte) plot_chargen::x#3 plot_chargen::@6/(byte) plot_chargen::x#4 ) + (byte) plot_chargen::bits#3 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#2 plot_chargen::@6/(byte) plot_chargen::bits#4 ) + (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#5 plot_chargen::@6/(byte*) plot_chargen::sc#6 ) + (byte) plot_chargen::c#2 ← phi( plot_chargen::@3/(byte) plot_chargen::c#0 plot_chargen::@6/(byte) plot_chargen::c#1 ) + *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 + (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 + (byte~) plot_chargen::$13 ← (byte) plot_chargen::bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plot_chargen::bits#1 ← (byte~) plot_chargen::$13 + (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 + (boolean~) plot_chargen::$14 ← (byte) plot_chargen::x#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) plot_chargen::$14) goto plot_chargen::@3 + to:plot_chargen::@7 +plot_chargen::@6: scope:[plot_chargen] from plot_chargen::@3 + (byte*) plot_chargen::chargen#9 ← phi( plot_chargen::@3/(byte*) plot_chargen::chargen#8 ) + (byte) plot_chargen::y#6 ← phi( plot_chargen::@3/(byte) plot_chargen::y#5 ) + (byte) plot_chargen::x#4 ← phi( plot_chargen::@3/(byte) plot_chargen::x#3 ) + (byte) plot_chargen::bits#4 ← phi( plot_chargen::@3/(byte) plot_chargen::bits#2 ) + (byte*) plot_chargen::sc#6 ← phi( plot_chargen::@3/(byte*) plot_chargen::sc#5 ) + (byte) plot_chargen::c#1 ← (byte) '*' + to:plot_chargen::@4 +plot_chargen::@7: scope:[plot_chargen] from plot_chargen::@4 + (byte*) plot_chargen::chargen#4 ← phi( plot_chargen::@4/(byte*) plot_chargen::chargen#7 ) + (byte) plot_chargen::y#3 ← phi( plot_chargen::@4/(byte) plot_chargen::y#4 ) + (byte*) plot_chargen::sc#4 ← phi( plot_chargen::@4/(byte*) plot_chargen::sc#1 ) + (byte*~) plot_chargen::$15 ← (byte*) plot_chargen::sc#4 + (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte*) plot_chargen::sc#2 ← (byte*~) plot_chargen::$15 + (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#3 + (boolean~) plot_chargen::$16 ← (byte) plot_chargen::y#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) plot_chargen::$16) goto plot_chargen::@2 + to:plot_chargen::@8 +plot_chargen::@8: scope:[plot_chargen] from plot_chargen::@7 + *((byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 + asm { cli } + to:plot_chargen::@return +plot_chargen::@return: scope:[plot_chargen] from plot_chargen::@8 + return + to:@return +@12: scope:[] from @9 + (byte*) SCREEN#8 ← phi( @9/(byte*) SCREEN#0 ) + call main param-assignment + to:@13 +@13: scope:[] from @12 + to:@end +@end: scope:[] from @13 + +SYMBOL TABLE SSA +(label) @12 +(label) @13 +(label) @5 +(label) @9 +(label) @begin +(label) @end +(byte*) CHARGEN +(byte*) CHARGEN#0 +(byte*) CIA1_PORT_A +(byte*) CIA1_PORT_A#0 +(byte*) CIA1_PORT_B +(byte*) CIA1_PORT_B#0 +(byte) KEY_0 +(byte) KEY_0#0 +(byte) KEY_1 +(byte) KEY_1#0 +(byte) KEY_2 +(byte) KEY_2#0 +(byte) KEY_3 +(byte) KEY_3#0 +(byte) KEY_4 +(byte) KEY_4#0 +(byte) KEY_5 +(byte) KEY_5#0 +(byte) KEY_6 +(byte) KEY_6#0 +(byte) KEY_7 +(byte) KEY_7#0 +(byte) KEY_8 +(byte) KEY_8#0 +(byte) KEY_9 +(byte) KEY_9#0 +(byte) KEY_A +(byte) KEY_A#0 +(byte) KEY_ARROW_LEFT +(byte) KEY_ARROW_LEFT#0 +(byte) KEY_ARROW_UP +(byte) KEY_ARROW_UP#0 +(byte) KEY_ASTERISK +(byte) KEY_ASTERISK#0 +(byte) KEY_AT +(byte) KEY_AT#0 +(byte) KEY_B +(byte) KEY_B#0 +(byte) KEY_C +(byte) KEY_C#0 +(byte) KEY_COLON +(byte) KEY_COLON#0 +(byte) KEY_COMMA +(byte) KEY_COMMA#0 +(byte) KEY_D +(byte) KEY_D#0 +(byte) KEY_DOT +(byte) KEY_DOT#0 +(byte) KEY_E +(byte) KEY_E#0 +(byte) KEY_EQUALS +(byte) KEY_EQUALS#0 +(byte) KEY_F +(byte) KEY_F#0 +(byte) KEY_F1 +(byte) KEY_F1#0 +(byte) KEY_F3 +(byte) KEY_F3#0 +(byte) KEY_F5 +(byte) KEY_F5#0 +(byte) KEY_F7 +(byte) KEY_F7#0 +(byte) KEY_G +(byte) KEY_G#0 +(byte) KEY_H +(byte) KEY_H#0 +(byte) KEY_I +(byte) KEY_I#0 +(byte) KEY_J +(byte) KEY_J#0 +(byte) KEY_K +(byte) KEY_K#0 +(byte) KEY_L +(byte) KEY_L#0 +(byte) KEY_LSHIFT +(byte) KEY_LSHIFT#0 +(byte) KEY_M +(byte) KEY_M#0 +(byte) KEY_MINUS +(byte) KEY_MINUS#0 +(byte) KEY_N +(byte) KEY_N#0 +(byte) KEY_O +(byte) KEY_O#0 +(byte) KEY_P +(byte) KEY_P#0 +(byte) KEY_PLUS +(byte) KEY_PLUS#0 +(byte) KEY_POUND +(byte) KEY_POUND#0 +(byte) KEY_Q +(byte) KEY_Q#0 +(byte) KEY_R +(byte) KEY_R#0 +(byte) KEY_S +(byte) KEY_S#0 +(byte) KEY_SEMICOLON +(byte) KEY_SEMICOLON#0 +(byte) KEY_SLASH +(byte) KEY_SLASH#0 +(byte) KEY_SPACE +(byte) KEY_SPACE#0 +(byte) KEY_T +(byte) KEY_T#0 +(byte) KEY_U +(byte) KEY_U#0 +(byte) KEY_V +(byte) KEY_V#0 +(byte) KEY_W +(byte) KEY_W#0 +(byte) KEY_X +(byte) KEY_X#0 +(byte) KEY_Y +(byte) KEY_Y#0 +(byte) KEY_Z +(byte) KEY_Z#0 +(byte*) PROCPORT +(byte*) PROCPORT#0 +(byte*) SCREEN +(byte*) SCREEN#0 +(byte*) SCREEN#1 +(byte*) SCREEN#10 +(byte*) SCREEN#11 +(byte*) SCREEN#12 +(byte*) SCREEN#13 +(byte*) SCREEN#14 +(byte*) SCREEN#15 +(byte*) SCREEN#16 +(byte*) SCREEN#17 +(byte*) SCREEN#18 +(byte*) SCREEN#19 +(byte*) SCREEN#2 +(byte*) SCREEN#20 +(byte*) SCREEN#21 +(byte*) SCREEN#22 +(byte*) SCREEN#23 +(byte*) SCREEN#24 +(byte*) SCREEN#25 +(byte*) SCREEN#26 +(byte*) SCREEN#27 +(byte*) SCREEN#28 +(byte*) SCREEN#29 +(byte*) SCREEN#3 +(byte*) SCREEN#30 +(byte*) SCREEN#31 +(byte*) SCREEN#32 +(byte*) SCREEN#33 +(byte*) SCREEN#34 +(byte*) SCREEN#35 +(byte*) SCREEN#36 +(byte*) SCREEN#37 +(byte*) SCREEN#38 +(byte*) SCREEN#39 +(byte*) SCREEN#4 +(byte*) SCREEN#40 +(byte*) SCREEN#5 +(byte*) SCREEN#6 +(byte*) SCREEN#7 +(byte*) SCREEN#8 +(byte*) SCREEN#9 +(byte[]) keyboard_char_keycodes +(byte[]) keyboard_char_keycodes#0 +(byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) +(label) keyboard_get_keycode::@return +(byte) keyboard_get_keycode::ch +(byte) keyboard_get_keycode::ch#0 +(byte) keyboard_get_keycode::ch#1 +(byte) keyboard_get_keycode::return +(byte) keyboard_get_keycode::return#0 +(byte) keyboard_get_keycode::return#1 +(byte) keyboard_get_keycode::return#2 +(byte) keyboard_get_keycode::return#3 +(byte) keyboard_get_keycode::return#4 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$0 +(byte~) keyboard_key_pressed::$1 +(byte~) keyboard_key_pressed::$2 +(byte~) keyboard_key_pressed::$3 +(label) keyboard_key_pressed::@2 +(label) keyboard_key_pressed::@return +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::key#0 +(byte) keyboard_key_pressed::key#1 +(byte) keyboard_key_pressed::key#2 +(byte) keyboard_key_pressed::key#3 +(byte) keyboard_key_pressed::key#4 +(byte) keyboard_key_pressed::key#5 +(byte) keyboard_key_pressed::key#6 +(byte) keyboard_key_pressed::key#7 +(byte) keyboard_key_pressed::return +(byte) keyboard_key_pressed::return#0 +(byte) keyboard_key_pressed::return#1 +(byte) keyboard_key_pressed::return#10 +(byte) keyboard_key_pressed::return#11 +(byte) keyboard_key_pressed::return#12 +(byte) keyboard_key_pressed::return#13 +(byte) keyboard_key_pressed::return#14 +(byte) keyboard_key_pressed::return#2 +(byte) keyboard_key_pressed::return#3 +(byte) keyboard_key_pressed::return#4 +(byte) keyboard_key_pressed::return#5 +(byte) keyboard_key_pressed::return#6 +(byte) keyboard_key_pressed::return#7 +(byte) keyboard_key_pressed::return#8 +(byte) keyboard_key_pressed::return#9 +(byte[]) keyboard_matrix_col_bitmask +(byte[]) keyboard_matrix_col_bitmask#0 +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +(byte~) keyboard_matrix_read::$0 +(label) keyboard_matrix_read::@return +(byte) keyboard_matrix_read::return +(byte) keyboard_matrix_read::return#0 +(byte) keyboard_matrix_read::return#1 +(byte) keyboard_matrix_read::return#2 +(byte) keyboard_matrix_read::return#3 +(byte) keyboard_matrix_read::return#4 +(byte) keyboard_matrix_read::row_pressed_bits +(byte) keyboard_matrix_read::row_pressed_bits#0 +(byte) keyboard_matrix_read::rowid +(byte) keyboard_matrix_read::rowid#0 +(byte) keyboard_matrix_read::rowid#1 +(byte[8]) keyboard_matrix_row_bitmask +(byte[8]) keyboard_matrix_row_bitmask#0 +(void()) main() +(byte*~) main::$0 +(boolean~) main::$1 +(byte*~) main::$10 +(byte*~) main::$11 +(boolean~) main::$14 +(byte~) main::$15 +(boolean~) main::$16 +(boolean~) main::$17 +(byte~) main::$18 +(boolean~) main::$19 +(byte*~) main::$2 +(boolean~) main::$20 +(byte~) main::$21 +(boolean~) main::$22 +(boolean~) main::$23 +(byte~) main::$24 +(boolean~) main::$25 +(boolean~) main::$26 +(byte~) main::$27 +(boolean~) main::$28 +(boolean~) main::$29 +(byte~) main::$30 +(boolean~) main::$31 +(boolean~) main::$32 +(byte~) main::$33 +(boolean~) main::$34 +(boolean~) main::$35 +(boolean~) main::$37 +(byte*~) main::$4 +(byte*~) main::$5 +(byte*~) main::$7 +(byte*~) main::$8 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@14 +(label) main::@15 +(label) main::@16 +(label) main::@17 +(label) main::@18 +(label) main::@19 +(label) main::@2 +(label) main::@21 +(label) main::@22 +(label) main::@23 +(label) main::@25 +(label) main::@26 +(label) main::@27 +(label) main::@28 +(label) main::@29 +(label) main::@3 +(label) main::@30 +(label) main::@31 +(label) main::@32 +(label) main::@33 +(label) main::@34 +(label) main::@35 +(label) main::@36 +(label) main::@37 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(byte) main::ch +(byte) main::ch#0 +(byte) main::ch#1 +(byte) main::ch#2 +(byte) main::ch#3 +(byte) main::ch#4 +(byte) main::ch#5 +(byte) main::ch#6 +(byte) main::ch#7 +(byte) main::ch#8 +(byte) main::ch#9 +(byte) main::cur_pos +(byte) main::cur_pos#0 +(byte) main::cur_pos#1 +(byte) main::cur_pos#10 +(byte) main::cur_pos#11 +(byte) main::cur_pos#12 +(byte) main::cur_pos#13 +(byte) main::cur_pos#14 +(byte) main::cur_pos#15 +(byte) main::cur_pos#16 +(byte) main::cur_pos#17 +(byte) main::cur_pos#18 +(byte) main::cur_pos#19 +(byte) main::cur_pos#2 +(byte) main::cur_pos#20 +(byte) main::cur_pos#21 +(byte) main::cur_pos#22 +(byte) main::cur_pos#23 +(byte) main::cur_pos#24 +(byte) main::cur_pos#25 +(byte) main::cur_pos#26 +(byte) main::cur_pos#3 +(byte) main::cur_pos#4 +(byte) main::cur_pos#5 +(byte) main::cur_pos#6 +(byte) main::cur_pos#7 +(byte) main::cur_pos#8 +(byte) main::cur_pos#9 +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#2 +(byte) main::i#3 +(byte) main::key +(byte) main::key#0 +(byte) main::key#1 +(byte) main::pressed +(byte) main::pressed#0 +(byte) main::pressed#1 +(byte) main::pressed#2 +(byte) main::pressed#3 +(byte*) main::sc +(byte*) main::sc#0 +(byte*) main::sc#1 +(byte*) main::sc#2 +(byte) main::shift +(byte) main::shift#0 +(byte) main::shift#1 +(byte) main::shift#10 +(byte) main::shift#11 +(byte) main::shift#2 +(byte) main::shift#3 +(byte) main::shift#4 +(byte) main::shift#5 +(byte) main::shift#6 +(byte) main::shift#7 +(byte) main::shift#8 +(byte) main::shift#9 +(const string) main::str = (string) "f1@" +(const string) main::str1 = (string) "f3@" +(const string) main::str2 = (string) "f5@" +(const string) main::str3 = (string) "f7@" +(word()) mul8u((byte) mul8u::a , (byte) mul8u::b) +(boolean~) mul8u::$0 +(byte~) mul8u::$1 +(boolean~) mul8u::$2 +(boolean~) mul8u::$3 +(word~) mul8u::$4 +(byte~) mul8u::$5 +(word~) mul8u::$6 +(label) mul8u::@1 +(label) mul8u::@2 +(label) mul8u::@3 +(label) mul8u::@4 +(label) mul8u::@7 +(label) mul8u::@return +(byte) mul8u::a +(byte) mul8u::a#0 +(byte) mul8u::a#1 +(byte) mul8u::a#2 +(byte) mul8u::a#3 +(byte) mul8u::a#4 +(byte) mul8u::a#5 +(byte) mul8u::a#6 +(byte) mul8u::b +(byte) mul8u::b#0 +(byte) mul8u::b#1 +(word) mul8u::mb +(word) mul8u::mb#0 +(word) mul8u::mb#1 +(word) mul8u::mb#2 +(word) mul8u::mb#3 +(word) mul8u::mb#4 +(word) mul8u::mb#5 +(word) mul8u::res +(word) mul8u::res#0 +(word) mul8u::res#1 +(word) mul8u::res#2 +(word) mul8u::res#3 +(word) mul8u::res#4 +(word) mul8u::res#5 +(word) mul8u::res#6 +(word) mul8u::return +(word) mul8u::return#0 +(word) mul8u::return#1 +(word) mul8u::return#2 +(word) mul8u::return#3 +(word) mul8u::return#4 +(void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift) +(word~) plot_chargen::$0 +(word~) plot_chargen::$1 +(byte~) plot_chargen::$10 +(boolean~) plot_chargen::$11 +(boolean~) plot_chargen::$12 +(byte~) plot_chargen::$13 +(boolean~) plot_chargen::$14 +(byte*~) plot_chargen::$15 +(boolean~) plot_chargen::$16 +(byte*~) plot_chargen::$2 +(boolean~) plot_chargen::$3 +(boolean~) plot_chargen::$4 +(byte*~) plot_chargen::$5 +(byte*~) plot_chargen::$6 +(byte*~) plot_chargen::$7 +(word~) plot_chargen::$8 +(byte*~) plot_chargen::$9 +(label) plot_chargen::@1 +(label) plot_chargen::@2 +(label) plot_chargen::@3 +(label) plot_chargen::@4 +(label) plot_chargen::@5 +(label) plot_chargen::@6 +(label) plot_chargen::@7 +(label) plot_chargen::@8 +(label) plot_chargen::@9 +(label) plot_chargen::@return +(byte) plot_chargen::bits +(byte) plot_chargen::bits#0 +(byte) plot_chargen::bits#1 +(byte) plot_chargen::bits#2 +(byte) plot_chargen::bits#3 +(byte) plot_chargen::bits#4 +(byte) plot_chargen::c +(byte) plot_chargen::c#0 +(byte) plot_chargen::c#1 +(byte) plot_chargen::c#2 +(byte) plot_chargen::ch +(byte) plot_chargen::ch#0 +(byte) plot_chargen::ch#1 +(byte) plot_chargen::ch#2 +(byte*) plot_chargen::chargen +(byte*) plot_chargen::chargen#0 +(byte*) plot_chargen::chargen#1 +(byte*) plot_chargen::chargen#2 +(byte*) plot_chargen::chargen#3 +(byte*) plot_chargen::chargen#4 +(byte*) plot_chargen::chargen#5 +(byte*) plot_chargen::chargen#6 +(byte*) plot_chargen::chargen#7 +(byte*) plot_chargen::chargen#8 +(byte*) plot_chargen::chargen#9 +(byte) plot_chargen::pos +(byte) plot_chargen::pos#0 +(byte) plot_chargen::pos#1 +(byte) plot_chargen::pos#2 +(byte) plot_chargen::pos#3 +(byte) plot_chargen::pos#4 +(byte*) plot_chargen::sc +(byte*) plot_chargen::sc#0 +(byte*) plot_chargen::sc#1 +(byte*) plot_chargen::sc#2 +(byte*) plot_chargen::sc#3 +(byte*) plot_chargen::sc#4 +(byte*) plot_chargen::sc#5 +(byte*) plot_chargen::sc#6 +(byte*) plot_chargen::sc#7 +(byte) plot_chargen::shift +(byte) plot_chargen::shift#0 +(byte) plot_chargen::shift#1 +(byte) plot_chargen::shift#2 +(byte) plot_chargen::x +(byte) plot_chargen::x#0 +(byte) plot_chargen::x#1 +(byte) plot_chargen::x#2 +(byte) plot_chargen::x#3 +(byte) plot_chargen::x#4 +(byte) plot_chargen::y +(byte) plot_chargen::y#0 +(byte) plot_chargen::y#1 +(byte) plot_chargen::y#2 +(byte) plot_chargen::y#3 +(byte) plot_chargen::y#4 +(byte) plot_chargen::y#5 +(byte) plot_chargen::y#6 +(void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at) +(boolean~) print_str_at::$0 +(label) print_str_at::@1 +(label) print_str_at::@2 +(label) print_str_at::@return +(byte*) print_str_at::at +(byte*) print_str_at::at#0 +(byte*) print_str_at::at#1 +(byte*) print_str_at::at#2 +(byte*) print_str_at::at#3 +(byte*) print_str_at::at#4 +(byte*) print_str_at::at#5 +(byte*) print_str_at::at#6 +(byte*) print_str_at::at#7 +(byte*) print_str_at::str +(byte*) print_str_at::str#0 +(byte*) print_str_at::str#1 +(byte*) print_str_at::str#2 +(byte*) print_str_at::str#3 +(byte*) print_str_at::str#4 +(byte*) print_str_at::str#5 +(byte*) print_str_at::str#6 +(byte*) print_str_at::str#7 + +OPTIMIZING CONTROL FLOW GRAPH +Culled Empty Block (label) @13 +Succesful SSA optimization Pass2CullEmptyBlocks +Inversing boolean not (boolean~) mul8u::$3 ← (byte~) mul8u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) mul8u::$2 ← (byte~) mul8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) main::$17 ← (byte~) main::$15 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) main::$16 ← (byte~) main::$15 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) main::$20 ← (byte~) main::$18 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) main::$19 ← (byte~) main::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) main::$23 ← (byte~) main::$21 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) main::$22 ← (byte~) main::$21 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) main::$26 ← (byte~) main::$24 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) main::$25 ← (byte~) main::$24 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) main::$29 ← (byte~) main::$27 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) main::$28 ← (byte~) main::$27 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) main::$32 ← (byte) main::key#0 == (byte/signed byte/word/signed word/dword/signed dword) 63 from (boolean~) main::$31 ← (byte) main::key#0 != (byte/signed byte/word/signed word/dword/signed dword) 63 +Inversing boolean not (boolean~) main::$35 ← (byte) main::pressed#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) main::$34 ← (byte) main::pressed#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) plot_chargen::$4 ← (byte) plot_chargen::shift#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) plot_chargen::$12 ← (byte~) plot_chargen::$10 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) plot_chargen::$11 ← (byte~) plot_chargen::$10 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Succesful SSA optimization Pass2UnaryNotSimplification +Not aliassing across scopes: mul8u::b#1 mul8u::b#0 +Not aliassing across scopes: mul8u::a#5 mul8u::a#1 +Not aliassing across scopes: keyboard_matrix_read::rowid#1 keyboard_matrix_read::rowid#0 +Not aliassing across scopes: keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 +Not aliassing across scopes: keyboard_matrix_read::return#2 keyboard_matrix_read::return#1 +Not aliassing across scopes: keyboard_key_pressed::$1 keyboard_matrix_read::return#4 +Not aliassing across scopes: keyboard_get_keycode::ch#1 keyboard_get_keycode::ch#0 +Not aliassing across scopes: SCREEN#1 SCREEN#8 +Not aliassing across scopes: main::sc#0 SCREEN#1 +Not aliassing across scopes: plot_chargen::pos#0 main::i#2 +Not aliassing across scopes: keyboard_key_pressed::key#0 KEY_F1#0 +Not aliassing across scopes: keyboard_key_pressed::return#2 keyboard_key_pressed::return#1 +Not aliassing across scopes: main::$15 keyboard_key_pressed::return#9 +Not aliassing across scopes: keyboard_key_pressed::key#1 KEY_F3#0 +Not aliassing across scopes: keyboard_key_pressed::return#3 keyboard_key_pressed::return#1 +Not aliassing across scopes: main::$18 keyboard_key_pressed::return#10 +Not aliassing across scopes: keyboard_key_pressed::key#2 KEY_F5#0 +Not aliassing across scopes: keyboard_key_pressed::return#4 keyboard_key_pressed::return#1 +Not aliassing across scopes: main::$21 keyboard_key_pressed::return#11 +Not aliassing across scopes: keyboard_key_pressed::key#3 KEY_F7#0 +Not aliassing across scopes: keyboard_key_pressed::return#5 keyboard_key_pressed::return#1 +Not aliassing across scopes: main::$24 keyboard_key_pressed::return#12 +Not aliassing across scopes: keyboard_key_pressed::key#4 KEY_LSHIFT#0 +Not aliassing across scopes: keyboard_key_pressed::return#6 keyboard_key_pressed::return#1 +Not aliassing across scopes: main::$27 keyboard_key_pressed::return#13 +Not aliassing across scopes: keyboard_get_keycode::ch#0 main::ch#2 +Not aliassing across scopes: keyboard_get_keycode::return#2 keyboard_get_keycode::return#1 +Not aliassing across scopes: main::$30 keyboard_get_keycode::return#4 +Not aliassing across scopes: keyboard_key_pressed::key#5 main::key#1 +Not aliassing across scopes: keyboard_key_pressed::return#7 keyboard_key_pressed::return#1 +Not aliassing across scopes: main::$33 keyboard_key_pressed::return#14 +Not aliassing across scopes: plot_chargen::pos#1 main::cur_pos#5 +Not aliassing across scopes: plot_chargen::ch#1 main::ch#4 +Not aliassing across scopes: plot_chargen::shift#1 main::shift#3 +Not aliassing across scopes: print_str_at::str#7 print_str_at::str#0 +Not aliassing across scopes: print_str_at::at#7 print_str_at::at#0 +Not aliassing across scopes: plot_chargen::ch#2 plot_chargen::ch#0 +Not aliassing across scopes: plot_chargen::shift#2 plot_chargen::shift#0 +Not aliassing across scopes: SCREEN#9 SCREEN#11 +Not aliassing across scopes: plot_chargen::pos#3 plot_chargen::pos#0 +Not aliassing across scopes: mul8u::a#1 plot_chargen::pos#2 +Not aliassing across scopes: mul8u::return#2 mul8u::return#1 +Not aliassing across scopes: plot_chargen::$8 mul8u::return#4 +Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 +Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 +Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#3 (word) mul8u::return#1 +Alias (byte) mul8u::a#0 = (byte~) mul8u::$5 +Alias (word) mul8u::mb#1 = (word~) mul8u::$6 +Alias (word) mul8u::res#1 = (word~) mul8u::$4 +Alias (byte) keyboard_matrix_read::return#0 = (byte) keyboard_matrix_read::row_pressed_bits#0 (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#3 (byte) keyboard_matrix_read::return#1 +Alias (byte) keyboard_matrix_read::rowid#0 = (byte~) keyboard_key_pressed::$0 +Alias (byte) keyboard_matrix_read::return#2 = (byte) keyboard_matrix_read::return#4 +Alias (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#7 +Alias (byte) keyboard_key_pressed::return#0 = (byte~) keyboard_key_pressed::$3 (byte) keyboard_key_pressed::return#8 (byte) keyboard_key_pressed::return#1 +Alias (byte) keyboard_get_keycode::return#0 = (byte) keyboard_get_keycode::return#3 (byte) keyboard_get_keycode::return#1 +Alias (byte*) SCREEN#13 = (byte*) SCREEN#3 (byte*) SCREEN#2 (byte*) SCREEN#4 (byte*) SCREEN#5 (byte*) SCREEN#6 +Alias (byte*) print_str_at::at#0 = (byte*~) main::$2 +Alias (byte*) print_str_at::at#1 = (byte*~) main::$5 +Alias (byte*) print_str_at::at#2 = (byte*~) main::$8 +Alias (byte*) print_str_at::at#3 = (byte*~) main::$11 +Alias (byte) main::i#2 = (byte) main::i#3 +Alias (byte*) SCREEN#11 = (byte*) SCREEN#14 (byte*) SCREEN#39 +Alias (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#9 +Alias (byte) main::cur_pos#24 = (byte) main::cur_pos#25 +Alias (byte*) SCREEN#36 = (byte*) SCREEN#37 (byte*) SCREEN#38 +Alias (byte) keyboard_key_pressed::return#10 = (byte) keyboard_key_pressed::return#3 +Alias (byte) main::cur_pos#22 = (byte) main::cur_pos#23 +Alias (byte*) SCREEN#33 = (byte*) SCREEN#34 (byte*) SCREEN#35 +Alias (byte) keyboard_key_pressed::return#11 = (byte) keyboard_key_pressed::return#4 +Alias (byte) main::cur_pos#20 = (byte) main::cur_pos#21 +Alias (byte*) SCREEN#30 = (byte*) SCREEN#31 (byte*) SCREEN#32 +Alias (byte) keyboard_key_pressed::return#12 = (byte) keyboard_key_pressed::return#5 +Alias (byte) main::cur_pos#18 = (byte) main::cur_pos#19 +Alias (byte*) SCREEN#27 = (byte*) SCREEN#28 (byte*) SCREEN#29 +Alias (byte) keyboard_key_pressed::return#13 = (byte) keyboard_key_pressed::return#6 +Alias (byte) main::cur_pos#13 = (byte) main::cur_pos#16 (byte) main::cur_pos#17 (byte) main::cur_pos#14 +Alias (byte*) SCREEN#22 = (byte*) SCREEN#25 (byte*) SCREEN#26 (byte*) SCREEN#23 +Alias (byte) keyboard_get_keycode::return#2 = (byte) keyboard_get_keycode::return#4 +Alias (byte) main::pressed#0 = (byte) main::pressed#3 +Alias (byte) main::ch#2 = (byte) main::ch#7 (byte) main::ch#9 (byte) main::ch#8 +Alias (byte) main::cur_pos#10 = (byte) main::cur_pos#7 (byte) main::cur_pos#9 (byte) main::cur_pos#8 +Alias (byte) main::shift#5 = (byte) main::shift#7 (byte) main::shift#8 (byte) main::shift#6 +Alias (byte*) SCREEN#16 = (byte*) SCREEN#18 (byte*) SCREEN#19 (byte*) SCREEN#17 +Alias (byte) main::key#0 = (byte~) main::$30 (byte) main::key#1 +Alias (byte) keyboard_key_pressed::return#14 = (byte) keyboard_key_pressed::return#7 +Alias (byte) main::pressed#1 = (byte~) main::$33 +Alias (byte) main::cur_pos#15 = (byte) main::cur_pos#5 (byte) main::cur_pos#6 +Alias (byte) main::ch#4 = (byte) main::ch#5 (byte) main::ch#6 +Alias (byte) main::shift#11 = (byte) main::shift#3 (byte) main::shift#4 +Alias (byte*) SCREEN#12 = (byte*) SCREEN#15 (byte*) SCREEN#24 +Alias (byte) main::cur_pos#11 = (byte) main::cur_pos#26 +Alias (byte*) SCREEN#20 = (byte*) SCREEN#40 +Alias (byte*) print_str_at::str#5 = (byte*) print_str_at::str#6 +Alias (byte*) print_str_at::at#5 = (byte*) print_str_at::at#6 +Alias (byte*) plot_chargen::chargen#0 = (byte*~) plot_chargen::$2 (byte*) plot_chargen::chargen#2 +Alias (word) mul8u::return#2 = (word) mul8u::return#4 +Alias (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#6 +Alias (byte*) plot_chargen::sc#0 = (byte*~) plot_chargen::$9 +Alias (byte*) SCREEN#10 = (byte*) SCREEN#9 +Alias (byte) plot_chargen::pos#3 = (byte) plot_chargen::pos#4 +Alias (byte*) plot_chargen::chargen#1 = (byte*~) plot_chargen::$5 +Alias (byte) plot_chargen::bits#1 = (byte~) plot_chargen::$13 +Alias (byte*) plot_chargen::sc#5 = (byte*) plot_chargen::sc#6 +Alias (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#4 +Alias (byte) plot_chargen::x#3 = (byte) plot_chargen::x#4 +Alias (byte) plot_chargen::y#5 = (byte) plot_chargen::y#6 +Alias (byte*) plot_chargen::chargen#8 = (byte*) plot_chargen::chargen#9 +Alias (byte*) plot_chargen::sc#1 = (byte*) plot_chargen::sc#4 +Alias (byte) plot_chargen::y#3 = (byte) plot_chargen::y#4 +Alias (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#7 +Alias (byte*) plot_chargen::sc#2 = (byte*~) plot_chargen::$15 +Alias (byte*) SCREEN#0 = (byte*) SCREEN#8 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: mul8u::b#1 mul8u::b#0 +Not aliassing across scopes: mul8u::a#5 mul8u::a#1 +Not aliassing across scopes: keyboard_matrix_read::rowid#1 keyboard_matrix_read::rowid#0 +Not aliassing across scopes: keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 +Not aliassing across scopes: keyboard_matrix_read::return#2 keyboard_matrix_read::return#0 +Not aliassing across scopes: keyboard_key_pressed::$1 keyboard_matrix_read::return#2 +Not aliassing across scopes: keyboard_get_keycode::ch#1 keyboard_get_keycode::ch#0 +Not aliassing across scopes: SCREEN#1 SCREEN#0 +Not aliassing across scopes: main::sc#0 SCREEN#1 +Not aliassing across scopes: plot_chargen::pos#0 main::i#2 +Not aliassing across scopes: keyboard_key_pressed::key#0 KEY_F1#0 +Not aliassing across scopes: keyboard_key_pressed::return#2 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$15 keyboard_key_pressed::return#2 +Not aliassing across scopes: keyboard_key_pressed::key#1 KEY_F3#0 +Not aliassing across scopes: keyboard_key_pressed::return#10 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$18 keyboard_key_pressed::return#10 +Not aliassing across scopes: keyboard_key_pressed::key#2 KEY_F5#0 +Not aliassing across scopes: keyboard_key_pressed::return#11 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$21 keyboard_key_pressed::return#11 +Not aliassing across scopes: keyboard_key_pressed::key#3 KEY_F7#0 +Not aliassing across scopes: keyboard_key_pressed::return#12 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$24 keyboard_key_pressed::return#12 +Not aliassing across scopes: keyboard_key_pressed::key#4 KEY_LSHIFT#0 +Not aliassing across scopes: keyboard_key_pressed::return#13 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$27 keyboard_key_pressed::return#13 +Not aliassing across scopes: keyboard_get_keycode::ch#0 main::ch#2 +Not aliassing across scopes: keyboard_get_keycode::return#2 keyboard_get_keycode::return#0 +Not aliassing across scopes: main::key#0 keyboard_get_keycode::return#2 +Not aliassing across scopes: keyboard_key_pressed::key#5 main::key#0 +Not aliassing across scopes: keyboard_key_pressed::return#14 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::pressed#1 keyboard_key_pressed::return#14 +Not aliassing across scopes: plot_chargen::pos#1 main::cur_pos#15 +Not aliassing across scopes: plot_chargen::ch#1 main::ch#4 +Not aliassing across scopes: plot_chargen::shift#1 main::shift#11 +Not aliassing across scopes: print_str_at::str#7 print_str_at::str#0 +Not aliassing across scopes: print_str_at::at#7 print_str_at::at#0 +Not aliassing across scopes: plot_chargen::ch#2 plot_chargen::ch#0 +Not aliassing across scopes: plot_chargen::shift#2 plot_chargen::shift#0 +Not aliassing across scopes: SCREEN#10 SCREEN#11 +Not aliassing across scopes: plot_chargen::pos#3 plot_chargen::pos#0 +Not aliassing across scopes: mul8u::a#1 plot_chargen::pos#2 +Not aliassing across scopes: mul8u::return#2 mul8u::res#2 +Not aliassing across scopes: plot_chargen::$8 mul8u::return#2 +Alias (byte) mul8u::a#2 = (byte) mul8u::a#4 +Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 +Alias (byte*) SCREEN#21 = (byte*) SCREEN#33 (byte*) SCREEN#36 (byte*) SCREEN#30 (byte*) SCREEN#27 (byte*) SCREEN#22 +Alias (byte) main::cur_pos#12 = (byte) main::cur_pos#13 +Alias (byte) main::ch#2 = (byte) main::ch#4 (byte) main::ch#3 +Alias (byte) main::cur_pos#10 = (byte) main::cur_pos#15 (byte) main::cur_pos#11 +Alias (byte) main::shift#11 = (byte) main::shift#5 (byte) main::shift#9 +Alias (byte*) SCREEN#12 = (byte*) SCREEN#16 (byte*) SCREEN#20 +Alias (byte*) SCREEN#10 = (byte*) SCREEN#7 +Alias (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#3 +Alias (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#5 +Alias (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#3 +Alias (byte) plot_chargen::x#2 = (byte) plot_chargen::x#3 +Alias (byte) plot_chargen::y#3 = (byte) plot_chargen::y#5 +Alias (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#8 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: mul8u::b#1 mul8u::b#0 +Not aliassing across scopes: mul8u::a#5 mul8u::a#1 +Not aliassing across scopes: keyboard_matrix_read::rowid#1 keyboard_matrix_read::rowid#0 +Not aliassing across scopes: keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 +Not aliassing across scopes: keyboard_matrix_read::return#2 keyboard_matrix_read::return#0 +Not aliassing across scopes: keyboard_key_pressed::$1 keyboard_matrix_read::return#2 +Not aliassing across scopes: keyboard_get_keycode::ch#1 keyboard_get_keycode::ch#0 +Not aliassing across scopes: SCREEN#1 SCREEN#0 +Not aliassing across scopes: main::sc#0 SCREEN#1 +Not aliassing across scopes: plot_chargen::pos#0 main::i#2 +Not aliassing across scopes: keyboard_key_pressed::key#0 KEY_F1#0 +Not aliassing across scopes: keyboard_key_pressed::return#2 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$15 keyboard_key_pressed::return#2 +Not aliassing across scopes: keyboard_key_pressed::key#1 KEY_F3#0 +Not aliassing across scopes: keyboard_key_pressed::return#10 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$18 keyboard_key_pressed::return#10 +Not aliassing across scopes: keyboard_key_pressed::key#2 KEY_F5#0 +Not aliassing across scopes: keyboard_key_pressed::return#11 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$21 keyboard_key_pressed::return#11 +Not aliassing across scopes: keyboard_key_pressed::key#3 KEY_F7#0 +Not aliassing across scopes: keyboard_key_pressed::return#12 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$24 keyboard_key_pressed::return#12 +Not aliassing across scopes: keyboard_key_pressed::key#4 KEY_LSHIFT#0 +Not aliassing across scopes: keyboard_key_pressed::return#13 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$27 keyboard_key_pressed::return#13 +Not aliassing identity: main::cur_pos#10 main::cur_pos#10 +Not aliassing identity: main::shift#11 main::shift#11 +Not aliassing identity: SCREEN#12 SCREEN#12 +Not aliassing across scopes: keyboard_get_keycode::ch#0 main::ch#2 +Not aliassing across scopes: keyboard_get_keycode::return#2 keyboard_get_keycode::return#0 +Not aliassing across scopes: main::key#0 keyboard_get_keycode::return#2 +Not aliassing across scopes: keyboard_key_pressed::key#5 main::key#0 +Not aliassing across scopes: keyboard_key_pressed::return#14 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::pressed#1 keyboard_key_pressed::return#14 +Not aliassing across scopes: plot_chargen::pos#1 main::cur_pos#10 +Not aliassing across scopes: plot_chargen::ch#1 main::ch#2 +Not aliassing across scopes: plot_chargen::shift#1 main::shift#11 +Not aliassing across scopes: print_str_at::str#7 print_str_at::str#0 +Not aliassing across scopes: print_str_at::at#7 print_str_at::at#0 +Not aliassing across scopes: plot_chargen::ch#2 plot_chargen::ch#0 +Not aliassing across scopes: plot_chargen::shift#2 plot_chargen::shift#0 +Not aliassing across scopes: SCREEN#10 SCREEN#11 +Not aliassing across scopes: plot_chargen::pos#2 plot_chargen::pos#0 +Not aliassing across scopes: mul8u::a#1 plot_chargen::pos#2 +Not aliassing across scopes: mul8u::return#2 mul8u::res#2 +Not aliassing across scopes: plot_chargen::$8 mul8u::return#2 +Self Phi Eliminated (byte*) SCREEN#13 +Self Phi Eliminated (byte*) SCREEN#11 +Self Phi Eliminated (byte) main::cur_pos#10 +Self Phi Eliminated (byte) main::shift#11 +Self Phi Eliminated (byte*) SCREEN#12 +Self Phi Eliminated (byte) plot_chargen::y#3 +Self Phi Eliminated (byte*) plot_chargen::chargen#4 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte) mul8u::b#1 (byte) mul8u::b#0 +Redundant Phi (byte) mul8u::a#5 (byte) mul8u::a#1 +Redundant Phi (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 +Redundant Phi (byte) keyboard_get_keycode::ch#1 (byte) keyboard_get_keycode::ch#0 +Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 +Redundant Phi (byte*) SCREEN#13 (byte*) SCREEN#1 +Redundant Phi (byte*) SCREEN#11 (byte*) SCREEN#13 +Redundant Phi (byte) main::cur_pos#10 (byte) main::cur_pos#12 +Redundant Phi (byte) main::shift#11 (byte) main::shift#10 +Redundant Phi (byte*) SCREEN#12 (byte*) SCREEN#21 +Redundant Phi (byte) plot_chargen::y#3 (byte) plot_chargen::y#2 +Redundant Phi (byte*) plot_chargen::chargen#4 (byte*) plot_chargen::chargen#3 +Succesful SSA optimization Pass2RedundantPhiElimination +Simple Condition (boolean~) mul8u::$0 if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 +Simple Condition (boolean~) mul8u::$3 if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 +Simple Condition (boolean~) main::$1 if((byte*) main::sc#1<(byte*~) main::$0) goto main::@1 +Simple Condition (boolean~) main::$14 if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 +Simple Condition (boolean~) main::$17 if((byte~) main::$15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4 +Simple Condition (boolean~) main::$20 if((byte~) main::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@5 +Simple Condition (boolean~) main::$23 if((byte~) main::$21==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@6 +Simple Condition (boolean~) main::$26 if((byte~) main::$24==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@7 +Simple Condition (boolean~) main::$29 if((byte~) main::$27==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@8 +Simple Condition (boolean~) main::$32 if((byte) main::key#0==(byte/signed byte/word/signed word/dword/signed dword) 63) goto main::@11 +Simple Condition (boolean~) main::$35 if((byte) main::pressed#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@12 +Simple Condition (boolean~) main::$37 if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto main::@10 +Simple Condition (boolean~) print_str_at::$0 if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 +Simple Condition (boolean~) plot_chargen::$4 if((byte) plot_chargen::shift#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@1 +Simple Condition (boolean~) plot_chargen::$12 if((byte~) plot_chargen::$10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@4 +Simple Condition (boolean~) plot_chargen::$14 if((byte) plot_chargen::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@3 +Simple Condition (boolean~) plot_chargen::$16 if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 +Succesful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) PROCPORT#0 = ((byte*))1 +Constant (const byte*) CHARGEN#0 = ((byte*))53248 +Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320 +Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321 +Constant (const word) mul8u::res#0 = 0 +Constant (const byte) KEY_F7#0 = 3 +Constant (const byte) KEY_F1#0 = 4 +Constant (const byte) KEY_F3#0 = 5 +Constant (const byte) KEY_F5#0 = 6 +Constant (const byte) KEY_3#0 = 8 +Constant (const byte) KEY_W#0 = 9 +Constant (const byte) KEY_A#0 = 10 +Constant (const byte) KEY_4#0 = 11 +Constant (const byte) KEY_Z#0 = 12 +Constant (const byte) KEY_S#0 = 13 +Constant (const byte) KEY_E#0 = 14 +Constant (const byte) KEY_LSHIFT#0 = 15 +Constant (const byte) KEY_5#0 = 16 +Constant (const byte) KEY_R#0 = 17 +Constant (const byte) KEY_D#0 = 18 +Constant (const byte) KEY_6#0 = 19 +Constant (const byte) KEY_C#0 = 20 +Constant (const byte) KEY_F#0 = 21 +Constant (const byte) KEY_T#0 = 22 +Constant (const byte) KEY_X#0 = 23 +Constant (const byte) KEY_7#0 = 24 +Constant (const byte) KEY_Y#0 = 25 +Constant (const byte) KEY_G#0 = 26 +Constant (const byte) KEY_8#0 = 27 +Constant (const byte) KEY_B#0 = 28 +Constant (const byte) KEY_H#0 = 29 +Constant (const byte) KEY_U#0 = 30 +Constant (const byte) KEY_V#0 = 31 +Constant (const byte) KEY_9#0 = 32 +Constant (const byte) KEY_I#0 = 33 +Constant (const byte) KEY_J#0 = 34 +Constant (const byte) KEY_0#0 = 35 +Constant (const byte) KEY_M#0 = 36 +Constant (const byte) KEY_K#0 = 37 +Constant (const byte) KEY_O#0 = 38 +Constant (const byte) KEY_N#0 = 39 +Constant (const byte) KEY_PLUS#0 = 40 +Constant (const byte) KEY_P#0 = 41 +Constant (const byte) KEY_L#0 = 42 +Constant (const byte) KEY_MINUS#0 = 43 +Constant (const byte) KEY_DOT#0 = 44 +Constant (const byte) KEY_COLON#0 = 45 +Constant (const byte) KEY_AT#0 = 46 +Constant (const byte) KEY_COMMA#0 = 47 +Constant (const byte) KEY_POUND#0 = 48 +Constant (const byte) KEY_ASTERISK#0 = 49 +Constant (const byte) KEY_SEMICOLON#0 = 50 +Constant (const byte) KEY_EQUALS#0 = 53 +Constant (const byte) KEY_ARROW_UP#0 = 54 +Constant (const byte) KEY_SLASH#0 = 55 +Constant (const byte) KEY_1#0 = 56 +Constant (const byte) KEY_ARROW_LEFT#0 = 57 +Constant (const byte) KEY_2#0 = 59 +Constant (const byte) KEY_SPACE#0 = 60 +Constant (const byte) KEY_Q#0 = 62 +Constant (const byte[8]) keyboard_matrix_row_bitmask#0 = { 254, 253, 251, 247, 239, 223, 191, 127 } +Constant (const byte[]) keyboard_matrix_col_bitmask#0 = { 1, 2, 4, 8, 16, 32, 64, 128 } +Constant (const byte*) SCREEN#0 = ((byte*))1024 +Constant (const string) print_str_at::str#0 = main::str +Constant (const string) print_str_at::str#1 = main::str1 +Constant (const string) print_str_at::str#2 = main::str2 +Constant (const string) print_str_at::str#3 = main::str3 +Constant (const byte) main::i#0 = 0 +Constant (const byte) plot_chargen::ch#0 = 32 +Constant (const byte) plot_chargen::shift#0 = 0 +Constant (const byte) main::cur_pos#0 = 0 +Constant (const byte) main::shift#0 = 0 +Constant (const byte) main::cur_pos#1 = 0 +Constant (const byte) main::cur_pos#2 = 1 +Constant (const byte) main::cur_pos#3 = 2 +Constant (const byte) main::cur_pos#4 = 3 +Constant (const byte) main::shift#1 = 0 +Constant (const byte) main::shift#2 = 1 +Constant (const byte) main::ch#0 = 0 +Constant (const byte) main::pressed#0 = 0 +Constant (const byte) mul8u::b#0 = 10 +Constant (const byte) plot_chargen::y#0 = 0 +Constant (const byte) plot_chargen::x#0 = 0 +Constant (const byte) plot_chargen::c#0 = '.' +Constant (const byte) plot_chargen::c#1 = '*' +Succesful SSA optimization Pass2ConstantIdentification +Constant (const word) mul8u::mb#0 = ((word))mul8u::b#0 +Constant (const byte[]) keyboard_char_keycodes#0 = { KEY_AT#0, KEY_A#0, KEY_B#0, KEY_C#0, KEY_D#0, KEY_E#0, KEY_F#0, KEY_G#0, KEY_H#0, KEY_I#0, KEY_J#0, KEY_K#0, KEY_L#0, KEY_M#0, KEY_N#0, KEY_O#0, KEY_P#0, KEY_Q#0, KEY_R#0, KEY_S#0, KEY_T#0, KEY_U#0, KEY_V#0, KEY_W#0, KEY_X#0, KEY_Y#0, KEY_Z#0, 63, KEY_POUND#0, 63, KEY_ARROW_UP#0, KEY_ARROW_LEFT#0, KEY_SPACE#0, 63, 63, 63, 63, 63, 63, 63, 63, 63, KEY_ASTERISK#0, KEY_PLUS#0, KEY_COMMA#0, KEY_MINUS#0, KEY_DOT#0, KEY_SLASH#0, KEY_0#0, KEY_1#0, KEY_2#0, KEY_3#0, KEY_4#0, KEY_5#0, KEY_6#0, KEY_7#0, KEY_8#0, KEY_9#0, KEY_COLON#0, KEY_SEMICOLON#0, 63, KEY_EQUALS#0, 63, 63 } +Constant (const byte*) main::sc#0 = SCREEN#0 +Constant (const byte*) main::$0 = SCREEN#0+1000 +Constant (const byte*) print_str_at::at#0 = SCREEN#0+1 +Constant (const byte*) main::$4 = SCREEN#0+1 +Constant (const byte*) main::$7 = SCREEN#0+1 +Constant (const byte*) main::$10 = SCREEN#0+1 +Constant (const byte) keyboard_key_pressed::key#0 = KEY_F1#0 +Constant (const byte) keyboard_key_pressed::key#1 = KEY_F3#0 +Constant (const byte) keyboard_key_pressed::key#2 = KEY_F5#0 +Constant (const byte) keyboard_key_pressed::key#3 = KEY_F7#0 +Constant (const byte) keyboard_key_pressed::key#4 = KEY_LSHIFT#0 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte*) print_str_at::at#1 = main::$4+10 +Constant (const byte*) print_str_at::at#2 = main::$7+20 +Constant (const byte*) print_str_at::at#3 = main::$10+30 +Succesful SSA optimization Pass2ConstantIdentification +Consolidated constant in assignment plot_chargen::$7 +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::chargen#0 +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::sc#1 +Succesful SSA optimization Pass2ConstantAdditionElimination +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::chargen#0 +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::sc#1 +Eliminating unused constant (const byte) main::shift#0 +Succesful SSA optimization PassNEliminateUnusedVars +Culled Empty Block (label) mul8u::@3 +Culled Empty Block (label) @5 +Culled Empty Block (label) @9 +Culled Empty Block (label) main::@28 +Culled Empty Block (label) main::@14 +Not culling empty block because it shares successor with its predecessor. (label) main::@15 +Not culling empty block because it shares successor with its predecessor. (label) main::@16 +Not culling empty block because it shares successor with its predecessor. (label) main::@17 +Not culling empty block because it shares successor with its predecessor. (label) main::@18 +Culled Empty Block (label) main::@8 +Not culling empty block because it shares successor with its predecessor. (label) main::@19 +Culled Empty Block (label) main::@37 +Not culling empty block because it shares successor with its predecessor. (label) plot_chargen::@6 +Succesful SSA optimization Pass2CullEmptyBlocks +Not culling empty block because it shares successor with its predecessor. (label) main::@15 +Not culling empty block because it shares successor with its predecessor. (label) main::@16 +Not culling empty block because it shares successor with its predecessor. (label) main::@17 +Not culling empty block because it shares successor with its predecessor. (label) main::@18 +Not culling empty block because it shares successor with its predecessor. (label) main::@19 +Not culling empty block because it shares successor with its predecessor. (label) plot_chargen::@6 +Not aliassing across scopes: mul8u::a#2 mul8u::a#1 +Not aliassing across scopes: keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 +Not aliassing across scopes: keyboard_matrix_read::return#2 keyboard_matrix_read::return#0 +Not aliassing across scopes: keyboard_key_pressed::$1 keyboard_matrix_read::return#2 +Not aliassing across scopes: plot_chargen::pos#0 main::i#2 +Not aliassing across scopes: keyboard_key_pressed::return#2 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$15 keyboard_key_pressed::return#2 +Not aliassing across scopes: keyboard_key_pressed::return#10 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$18 keyboard_key_pressed::return#10 +Not aliassing across scopes: keyboard_key_pressed::return#11 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$21 keyboard_key_pressed::return#11 +Not aliassing across scopes: keyboard_key_pressed::return#12 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$24 keyboard_key_pressed::return#12 +Not aliassing across scopes: keyboard_key_pressed::return#13 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$27 keyboard_key_pressed::return#13 +Not aliassing across scopes: keyboard_get_keycode::ch#0 main::ch#2 +Not aliassing across scopes: keyboard_get_keycode::return#2 keyboard_get_keycode::return#0 +Not aliassing across scopes: main::key#0 keyboard_get_keycode::return#2 +Not aliassing across scopes: keyboard_key_pressed::key#5 main::key#0 +Not aliassing across scopes: keyboard_key_pressed::return#14 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::pressed#1 keyboard_key_pressed::return#14 +Not aliassing across scopes: plot_chargen::pos#1 main::cur_pos#12 +Not aliassing across scopes: plot_chargen::ch#1 main::ch#2 +Not aliassing across scopes: plot_chargen::shift#1 main::shift#10 +Not aliassing across scopes: plot_chargen::pos#2 plot_chargen::pos#0 +Not aliassing across scopes: plot_chargen::$6 SCREEN#10 +Not aliassing across scopes: mul8u::a#1 plot_chargen::pos#2 +Not aliassing across scopes: mul8u::return#2 mul8u::res#2 +Not aliassing across scopes: plot_chargen::$8 mul8u::return#2 +Not aliassing identity: plot_chargen::chargen#3 plot_chargen::chargen#3 +Self Phi Eliminated (byte*) SCREEN#21 +Self Phi Eliminated (byte*) plot_chargen::chargen#3 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) SCREEN#21 (const byte*) SCREEN#0 +Redundant Phi (byte*) plot_chargen::chargen#3 (byte*) plot_chargen::chargen#5 +Succesful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte*) SCREEN#10 (const byte*) SCREEN#0 +Succesful SSA optimization Pass2RedundantPhiElimination +Constant (const byte*) plot_chargen::$6 = SCREEN#0 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte*) plot_chargen::$7 = plot_chargen::$6+40+1 +Succesful SSA optimization Pass2ConstantIdentification +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::chargen#0 +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::sc#1 +Not culling empty block because it shares successor with its predecessor. (label) main::@15 +Not culling empty block because it shares successor with its predecessor. (label) main::@16 +Not culling empty block because it shares successor with its predecessor. (label) main::@17 +Not culling empty block because it shares successor with its predecessor. (label) main::@18 +Not culling empty block because it shares successor with its predecessor. (label) main::@19 +Not culling empty block because it shares successor with its predecessor. (label) plot_chargen::@6 +Not aliassing across scopes: mul8u::a#2 mul8u::a#1 +Not aliassing across scopes: keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 +Not aliassing across scopes: keyboard_matrix_read::return#2 keyboard_matrix_read::return#0 +Not aliassing across scopes: keyboard_key_pressed::$1 keyboard_matrix_read::return#2 +Not aliassing across scopes: plot_chargen::pos#0 main::i#2 +Not aliassing across scopes: keyboard_key_pressed::return#2 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$15 keyboard_key_pressed::return#2 +Not aliassing across scopes: keyboard_key_pressed::return#10 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$18 keyboard_key_pressed::return#10 +Not aliassing across scopes: keyboard_key_pressed::return#11 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$21 keyboard_key_pressed::return#11 +Not aliassing across scopes: keyboard_key_pressed::return#12 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$24 keyboard_key_pressed::return#12 +Not aliassing across scopes: keyboard_key_pressed::return#13 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::$27 keyboard_key_pressed::return#13 +Not aliassing across scopes: keyboard_get_keycode::ch#0 main::ch#2 +Not aliassing across scopes: keyboard_get_keycode::return#2 keyboard_get_keycode::return#0 +Not aliassing across scopes: main::key#0 keyboard_get_keycode::return#2 +Not aliassing across scopes: keyboard_key_pressed::key#5 main::key#0 +Not aliassing across scopes: keyboard_key_pressed::return#14 keyboard_key_pressed::return#0 +Not aliassing across scopes: main::pressed#1 keyboard_key_pressed::return#14 +Not aliassing across scopes: plot_chargen::pos#1 main::cur_pos#12 +Not aliassing across scopes: plot_chargen::ch#1 main::ch#2 +Not aliassing across scopes: plot_chargen::shift#1 main::shift#10 +Not aliassing across scopes: plot_chargen::pos#2 plot_chargen::pos#0 +Not aliassing across scopes: mul8u::a#1 plot_chargen::pos#2 +Not aliassing across scopes: mul8u::return#2 mul8u::res#2 +Not aliassing across scopes: plot_chargen::$8 mul8u::return#2 +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::chargen#0 +Multiple usages for variable. Not optimizing sub-constant (byte*) plot_chargen::sc#1 +OPTIMIZING CONTROL FLOW GRAPH +Inlining constant with var siblings (const word) mul8u::res#0 +Inlining constant with var siblings (const word) mul8u::res#0 +Inlining constant with var siblings (const word) mul8u::res#0 +Inlining constant with var siblings (const word) mul8u::mb#0 +Inlining constant with var siblings (const word) mul8u::mb#0 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#1 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#1 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#2 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#2 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#3 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#3 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#4 +Inlining constant with var siblings (const byte) keyboard_key_pressed::key#4 +Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const byte) main::cur_pos#0 +Inlining constant with var siblings (const byte) main::cur_pos#0 +Inlining constant with var siblings (const byte) main::cur_pos#0 +Inlining constant with var siblings (const byte) main::cur_pos#0 +Inlining constant with var siblings (const byte) main::cur_pos#0 +Inlining constant with different constant siblings (const byte) main::cur_pos#0 +Inlining constant with different constant siblings (const byte) main::cur_pos#0 +Inlining constant with different constant siblings (const byte) main::cur_pos#0 +Inlining constant with var siblings (const byte) main::cur_pos#1 +Inlining constant with var siblings (const byte) main::cur_pos#1 +Inlining constant with var siblings (const byte) main::cur_pos#1 +Inlining constant with var siblings (const byte) main::cur_pos#1 +Inlining constant with var siblings (const byte) main::cur_pos#1 +Inlining constant with different constant siblings (const byte) main::cur_pos#1 +Inlining constant with different constant siblings (const byte) main::cur_pos#1 +Inlining constant with different constant siblings (const byte) main::cur_pos#1 +Inlining constant with var siblings (const byte) main::cur_pos#2 +Inlining constant with var siblings (const byte) main::cur_pos#2 +Inlining constant with var siblings (const byte) main::cur_pos#2 +Inlining constant with var siblings (const byte) main::cur_pos#2 +Inlining constant with var siblings (const byte) main::cur_pos#2 +Inlining constant with different constant siblings (const byte) main::cur_pos#2 +Inlining constant with different constant siblings (const byte) main::cur_pos#2 +Inlining constant with different constant siblings (const byte) main::cur_pos#2 +Inlining constant with different constant siblings (const byte) main::cur_pos#2 +Inlining constant with var siblings (const byte) main::cur_pos#3 +Inlining constant with var siblings (const byte) main::cur_pos#3 +Inlining constant with var siblings (const byte) main::cur_pos#3 +Inlining constant with var siblings (const byte) main::cur_pos#3 +Inlining constant with var siblings (const byte) main::cur_pos#3 +Inlining constant with different constant siblings (const byte) main::cur_pos#3 +Inlining constant with different constant siblings (const byte) main::cur_pos#3 +Inlining constant with different constant siblings (const byte) main::cur_pos#3 +Inlining constant with different constant siblings (const byte) main::cur_pos#3 +Inlining constant with var siblings (const byte) main::cur_pos#4 +Inlining constant with var siblings (const byte) main::cur_pos#4 +Inlining constant with var siblings (const byte) main::cur_pos#4 +Inlining constant with var siblings (const byte) main::cur_pos#4 +Inlining constant with var siblings (const byte) main::cur_pos#4 +Inlining constant with different constant siblings (const byte) main::cur_pos#4 +Inlining constant with different constant siblings (const byte) main::cur_pos#4 +Inlining constant with different constant siblings (const byte) main::cur_pos#4 +Inlining constant with different constant siblings (const byte) main::cur_pos#4 +Inlining constant with var siblings (const byte) main::shift#1 +Inlining constant with different constant siblings (const byte) main::shift#1 +Inlining constant with var siblings (const byte) main::shift#2 +Inlining constant with different constant siblings (const byte) main::shift#2 +Inlining constant with var siblings (const byte) main::ch#0 +Inlining constant with var siblings (const byte) main::ch#0 +Inlining constant with var siblings (const byte) main::pressed#0 +Inlining constant with var siblings (const byte) main::pressed#0 +Inlining constant with var siblings (const byte*) main::sc#0 +Inlining constant with var siblings (const byte*) main::sc#0 +Inlining constant with var siblings (const string) print_str_at::str#0 +Inlining constant with var siblings (const string) print_str_at::str#0 +Inlining constant with var siblings (const string) print_str_at::str#0 +Inlining constant with var siblings (const string) print_str_at::str#1 +Inlining constant with var siblings (const string) print_str_at::str#1 +Inlining constant with var siblings (const string) print_str_at::str#1 +Inlining constant with var siblings (const string) print_str_at::str#2 +Inlining constant with var siblings (const string) print_str_at::str#2 +Inlining constant with var siblings (const string) print_str_at::str#2 +Inlining constant with var siblings (const string) print_str_at::str#3 +Inlining constant with var siblings (const string) print_str_at::str#3 +Inlining constant with var siblings (const string) print_str_at::str#3 +Inlining constant with var siblings (const byte*) print_str_at::at#0 +Inlining constant with var siblings (const byte*) print_str_at::at#0 +Inlining constant with var siblings (const byte*) print_str_at::at#0 +Inlining constant with different constant siblings (const byte*) print_str_at::at#0 +Inlining constant with different constant siblings (const byte*) print_str_at::at#0 +Inlining constant with different constant siblings (const byte*) print_str_at::at#0 +Inlining constant with var siblings (const byte*) print_str_at::at#1 +Inlining constant with var siblings (const byte*) print_str_at::at#1 +Inlining constant with var siblings (const byte*) print_str_at::at#1 +Inlining constant with different constant siblings (const byte*) print_str_at::at#1 +Inlining constant with different constant siblings (const byte*) print_str_at::at#1 +Inlining constant with different constant siblings (const byte*) print_str_at::at#1 +Inlining constant with var siblings (const byte*) print_str_at::at#2 +Inlining constant with var siblings (const byte*) print_str_at::at#2 +Inlining constant with var siblings (const byte*) print_str_at::at#2 +Inlining constant with different constant siblings (const byte*) print_str_at::at#2 +Inlining constant with different constant siblings (const byte*) print_str_at::at#2 +Inlining constant with different constant siblings (const byte*) print_str_at::at#2 +Inlining constant with var siblings (const byte*) print_str_at::at#3 +Inlining constant with var siblings (const byte*) print_str_at::at#3 +Inlining constant with var siblings (const byte*) print_str_at::at#3 +Inlining constant with different constant siblings (const byte*) print_str_at::at#3 +Inlining constant with different constant siblings (const byte*) print_str_at::at#3 +Inlining constant with different constant siblings (const byte*) print_str_at::at#3 +Inlining constant with var siblings (const byte) plot_chargen::ch#0 +Inlining constant with var siblings (const byte) plot_chargen::ch#0 +Inlining constant with var siblings (const byte) plot_chargen::shift#0 +Inlining constant with var siblings (const byte) plot_chargen::shift#0 +Inlining constant with var siblings (const byte) plot_chargen::y#0 +Inlining constant with var siblings (const byte) plot_chargen::y#0 +Inlining constant with var siblings (const byte) plot_chargen::x#0 +Inlining constant with var siblings (const byte) plot_chargen::x#0 +Inlining constant with var siblings (const byte) plot_chargen::c#0 +Inlining constant with different constant siblings (const byte) plot_chargen::c#0 +Inlining constant with var siblings (const byte) plot_chargen::c#1 +Inlining constant with different constant siblings (const byte) plot_chargen::c#1 +Constant inlined print_str_at::str#1 = (const string) main::str1 +Constant inlined main::shift#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined print_str_at::str#2 = (const string) main::str2 +Constant inlined print_str_at::at#3 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 30 +Constant inlined print_str_at::str#3 = (const string) main::str3 +Constant inlined print_str_at::at#2 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 20 +Constant inlined plot_chargen::c#0 = (byte) '.' +Constant inlined print_str_at::at#1 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 10 +Constant inlined plot_chargen::c#1 = (byte) '*' +Constant inlined print_str_at::at#0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined print_str_at::str#0 = (const string) main::str +Constant inlined main::$10 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined main::shift#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined plot_chargen::$7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined plot_chargen::$6 = (const byte*) SCREEN#0 +Constant inlined plot_chargen::shift#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined main::ch#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_F1#0 +Constant inlined plot_chargen::ch#0 = (byte/signed byte/word/signed word/dword/signed dword) 32 +Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_F3#0 +Constant inlined keyboard_key_pressed::key#4 = (const byte) KEY_LSHIFT#0 +Constant inlined mul8u::mb#0 = ((word))(const byte) mul8u::b#0 +Constant inlined keyboard_key_pressed::key#2 = (const byte) KEY_F5#0 +Constant inlined keyboard_key_pressed::key#3 = (const byte) KEY_F7#0 +Constant inlined main::sc#0 = (const byte*) SCREEN#0 +Constant inlined main::cur_pos#3 = (byte/signed byte/word/signed word/dword/signed dword) 2 +Constant inlined mul8u::res#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined main::cur_pos#4 = (byte/signed byte/word/signed word/dword/signed dword) 3 +Constant inlined main::cur_pos#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined main::cur_pos#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined main::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000 +Constant inlined main::cur_pos#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined main::$4 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined plot_chargen::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined main::$7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined main::pressed#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined plot_chargen::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Succesful SSA optimization Pass2ConstantInlining +Block Sequence Planned @begin @12 @end main main::@1 main::@13 main::@25 main::@26 main::@27 main::@2 main::@29 main::@3 main::@30 main::@15 main::@4 main::@31 main::@16 main::@5 main::@32 main::@17 main::@6 main::@33 main::@18 main::@7 main::@34 main::@19 main::@9 main::@10 main::@35 main::@21 main::@36 main::@11 main::@22 main::@12 main::@23 main::@return plot_chargen plot_chargen::@5 plot_chargen::@1 plot_chargen::@9 plot_chargen::@2 plot_chargen::@3 plot_chargen::@6 plot_chargen::@4 plot_chargen::@7 plot_chargen::@8 plot_chargen::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 +Added new block during phi lifting main::@38(between main::@1 and main::@1) +Added new block during phi lifting main::@39(between main::@29 and main::@2) +Added new block during phi lifting main::@40(between main::@23 and main::@3) +Added new block during phi lifting main::@41(between main::@30 and main::@4) +Added new block during phi lifting main::@42(between main::@31 and main::@5) +Added new block during phi lifting main::@43(between main::@32 and main::@6) +Added new block during phi lifting main::@44(between main::@33 and main::@7) +Added new block during phi lifting main::@45(between main::@12 and main::@10) +Added new block during phi lifting plot_chargen::@10(between plot_chargen and plot_chargen::@1) +Added new block during phi lifting plot_chargen::@11(between plot_chargen::@7 and plot_chargen::@2) +Added new block during phi lifting plot_chargen::@12(between plot_chargen::@4 and plot_chargen::@3) +Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4) +Block Sequence Planned @begin @12 @end main main::@1 main::@13 main::@25 main::@26 main::@27 main::@2 main::@29 main::@3 main::@30 main::@15 main::@4 main::@31 main::@16 main::@5 main::@32 main::@17 main::@6 main::@33 main::@18 main::@7 main::@34 main::@19 main::@9 main::@10 main::@35 main::@21 main::@36 main::@11 main::@22 main::@12 main::@23 main::@return main::@40 main::@45 main::@44 main::@43 main::@42 main::@41 main::@39 main::@38 plot_chargen plot_chargen::@5 plot_chargen::@1 plot_chargen::@9 plot_chargen::@2 plot_chargen::@3 plot_chargen::@6 plot_chargen::@4 plot_chargen::@7 plot_chargen::@8 plot_chargen::@return plot_chargen::@11 plot_chargen::@12 plot_chargen::@10 mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 mul8u::@10 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @12 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@13 +Adding NOP phi() at start of main::@25 +Adding NOP phi() at start of main::@26 +Adding NOP phi() at start of main::@27 +Adding NOP phi() at start of main::@15 +Adding NOP phi() at start of main::@16 +Adding NOP phi() at start of main::@17 +Adding NOP phi() at start of main::@18 +Adding NOP phi() at start of main::@19 +Adding NOP phi() at start of plot_chargen::@6 +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to print_str_at:10 print_str_at:12 print_str_at:14 print_str_at:16 plot_chargen:20 keyboard_key_pressed:24 keyboard_key_pressed:30 keyboard_key_pressed:36 keyboard_key_pressed:42 keyboard_key_pressed:48 keyboard_get_keycode:56 keyboard_key_pressed:62 plot_chargen:74 +Calls in [plot_chargen] to mul8u:98 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:146 + +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 29 initial phi equivalence classes +Coalesced [19] plot_chargen::pos#5 ← plot_chargen::pos#0 +Coalesced [61] keyboard_key_pressed::key#8 ← keyboard_key_pressed::key#5 +Coalesced [65] main::pressed#4 ← main::pressed#1 +Coalesced [71] plot_chargen::ch#3 ← plot_chargen::ch#1 +Coalesced [72] plot_chargen::shift#3 ← plot_chargen::shift#1 +Coalesced [73] plot_chargen::pos#6 ← plot_chargen::pos#1 +Coalesced [79] main::cur_pos#27 ← main::cur_pos#12 +Coalesced [80] main::ch#10 ← main::ch#1 +Coalesced [81] main::cur_pos#31 ← main::cur_pos#18 +Coalesced [82] main::cur_pos#30 ← main::cur_pos#20 +Coalesced [83] main::cur_pos#29 ← main::cur_pos#22 +Coalesced (already) [84] main::cur_pos#28 ← main::cur_pos#24 +Coalesced [85] main::i#4 ← main::i#1 +Coalesced [86] main::sc#3 ← main::sc#1 +Coalesced [94] plot_chargen::chargen#11 ← plot_chargen::chargen#1 +Coalesced [102] plot_chargen::sc#9 ← plot_chargen::sc#0 +Coalesced [105] plot_chargen::bits#5 ← plot_chargen::bits#0 +Coalesced [106] plot_chargen::sc#10 ← plot_chargen::sc#7 +Coalesced [123] plot_chargen::y#7 ← plot_chargen::y#1 +Coalesced [124] plot_chargen::sc#8 ← plot_chargen::sc#2 +Coalesced [125] plot_chargen::bits#6 ← plot_chargen::bits#1 +Coalesced [126] plot_chargen::sc#11 ← plot_chargen::sc#1 +Coalesced [127] plot_chargen::x#5 ← plot_chargen::x#1 +Coalesced [128] plot_chargen::chargen#10 ← plot_chargen::chargen#0 +Coalesced [129] mul8u::a#7 ← mul8u::a#1 +Coalesced [136] mul8u::res#9 ← mul8u::res#1 +Coalesced [140] mul8u::a#8 ← mul8u::a#0 +Coalesced [141] mul8u::res#7 ← mul8u::res#6 +Coalesced [142] mul8u::mb#6 ← mul8u::mb#1 +Coalesced (already) [143] mul8u::res#8 ← mul8u::res#2 +Coalesced [158] print_str_at::str#8 ← print_str_at::str#7 +Coalesced [159] print_str_at::at#8 ← print_str_at::at#7 +Coalesced [166] print_str_at::str#9 ← print_str_at::str#4 +Coalesced [167] print_str_at::at#9 ← print_str_at::at#4 +Coalesced down to 21 phi equivalence classes +Culled Empty Block (label) main::@15 +Culled Empty Block (label) main::@16 +Culled Empty Block (label) main::@17 +Culled Empty Block (label) main::@18 +Not culling empty block because it shares successor with its predecessor. (label) main::@19 +Culled Empty Block (label) main::@40 +Culled Empty Block (label) main::@45 +Not culling empty block because it shares successor with its predecessor. (label) main::@44 +Not culling empty block because it shares successor with its predecessor. (label) main::@43 +Not culling empty block because it shares successor with its predecessor. (label) main::@42 +Not culling empty block because it shares successor with its predecessor. (label) main::@41 +Culled Empty Block (label) main::@39 +Culled Empty Block (label) main::@38 +Not culling empty block because it shares successor with its predecessor. (label) plot_chargen::@6 +Culled Empty Block (label) plot_chargen::@11 +Culled Empty Block (label) plot_chargen::@12 +Culled Empty Block (label) plot_chargen::@10 +Culled Empty Block (label) mul8u::@10 +Block Sequence Planned @begin @12 @end main main::@1 main::@13 main::@25 main::@26 main::@27 main::@2 main::@29 main::@3 main::@30 main::@4 main::@31 main::@5 main::@32 main::@6 main::@33 main::@7 main::@34 main::@19 main::@9 main::@10 main::@35 main::@21 main::@36 main::@11 main::@22 main::@12 main::@23 main::@return main::@44 main::@43 main::@42 main::@41 plot_chargen plot_chargen::@5 plot_chargen::@1 plot_chargen::@9 plot_chargen::@2 plot_chargen::@3 plot_chargen::@6 plot_chargen::@4 plot_chargen::@7 plot_chargen::@8 plot_chargen::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @12 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@13 +Adding NOP phi() at start of main::@25 +Adding NOP phi() at start of main::@26 +Adding NOP phi() at start of main::@27 +Adding NOP phi() at start of main::@19 +Adding NOP phi() at start of main::@44 +Adding NOP phi() at start of main::@43 +Adding NOP phi() at start of main::@42 +Adding NOP phi() at start of main::@41 +Adding NOP phi() at start of plot_chargen::@6 +Adding NOP phi() at start of mul8u +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:@12 +@12: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @12 + [3] phi() [ ] ( ) +main: scope:[main] from @12 + [4] phi() [ ] ( main:2 [ ] ) + 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 ) [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) + [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) + [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) + [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) + to:main::@13 +main::@13: scope:[main] from main::@1 + [9] phi() [ ] ( main:2 [ ] ) + [10] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@25 +main::@25: scope:[main] from main::@13 + [11] phi() [ ] ( main:2 [ ] ) + [12] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@26 +main::@26: scope:[main] from main::@25 + [13] phi() [ ] ( main:2 [ ] ) + [14] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@27 +main::@27: scope:[main] from main::@26 + [15] phi() [ ] ( main:2 [ ] ) + [16] call print_str_at param-assignment [ ] ( main:2 [ ] ) + to:main::@2 +main::@2: scope:[main] from main::@27 main::@29 + [17] (byte) main::i#2 ← phi( main::@27/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@29/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 [ main::i#2 plot_chargen::pos#0 ] ( main:2 [ main::i#2 plot_chargen::pos#0 ] ) + [19] call plot_chargen param-assignment [ main::i#2 ] ( main:2 [ main::i#2 ] ) + to:main::@29 +main::@29: scope:[main] from main::@2 + [20] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + to:main::@3 +main::@3: scope:[main] from main::@23 main::@29 + [22] (byte) main::cur_pos#24 ← phi( main::@29/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@23/(byte) main::cur_pos#12 ) [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) + [23] call keyboard_key_pressed param-assignment [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ) + [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ) + to:main::@30 +main::@30: scope:[main] from main::@3 + [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 [ main::cur_pos#24 main::$15 ] ( main:2 [ main::cur_pos#24 main::$15 ] ) + [26] if((byte~) main::$15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@41 [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) + to:main::@4 +main::@4: scope:[main] from main::@30 main::@41 + [27] (byte) main::cur_pos#22 ← phi( main::@30/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@41/(byte) main::cur_pos#24 ) [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) + [28] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ) + [29] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ( main:2 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ) + to:main::@31 +main::@31: scope:[main] from main::@4 + [30] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 [ main::cur_pos#22 main::$18 ] ( main:2 [ main::cur_pos#22 main::$18 ] ) + [31] if((byte~) main::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@42 [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) + to:main::@5 +main::@5: scope:[main] from main::@31 main::@42 + [32] (byte) main::cur_pos#20 ← phi( main::@31/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@42/(byte) main::cur_pos#22 ) [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) + [33] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ) + [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ( main:2 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ) + to:main::@32 +main::@32: scope:[main] from main::@5 + [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 [ main::cur_pos#20 main::$21 ] ( main:2 [ main::cur_pos#20 main::$21 ] ) + [36] if((byte~) main::$21==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@43 [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) + to:main::@6 +main::@6: scope:[main] from main::@32 main::@43 + [37] (byte) main::cur_pos#18 ← phi( main::@32/(byte/signed byte/word/signed word/dword/signed dword) 2 main::@43/(byte) main::cur_pos#20 ) [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) + [38] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ) + [39] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ( main:2 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ) + to:main::@33 +main::@33: scope:[main] from main::@6 + [40] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 [ main::cur_pos#18 main::$24 ] ( main:2 [ main::cur_pos#18 main::$24 ] ) + [41] if((byte~) main::$24==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@44 [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) + to:main::@7 +main::@7: scope:[main] from main::@33 main::@44 + [42] (byte) main::cur_pos#12 ← phi( main::@33/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@44/(byte) main::cur_pos#18 ) [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + [43] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ) + [44] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ) + to:main::@34 +main::@34: scope:[main] from main::@7 + [45] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 [ main::cur_pos#12 main::$27 ] ( main:2 [ main::cur_pos#12 main::$27 ] ) + [46] if((byte~) main::$27==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@9 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + to:main::@19 +main::@19: scope:[main] from main::@34 + [47] phi() [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + to:main::@9 +main::@9: scope:[main] from main::@19 main::@34 + [48] (byte) main::shift#10 ← phi( main::@19/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@34/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ main::cur_pos#12 main::shift#10 ] ( main:2 [ main::cur_pos#12 main::shift#10 ] ) + to:main::@10 +main::@10: scope:[main] from main::@12 main::@9 + [49] (byte) main::ch#2 ← phi( main::@12/(byte) main::ch#1 main::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + [50] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ) + [51] call keyboard_get_keycode param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + [52] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ) + to:main::@35 +main::@35: scope:[main] from main::@10 + [53] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) + [54] if((byte) main::key#0==(byte/signed byte/word/signed word/dword/signed dword) 63) goto main::@11 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) + to:main::@21 +main::@21: scope:[main] from main::@35 + [55] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ) + [56] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ) + [57] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ) + to:main::@36 +main::@36: scope:[main] from main::@21 + [58] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ) + to:main::@11 +main::@11: scope:[main] from main::@35 main::@36 + [59] (byte) main::pressed#2 ← phi( main::@35/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@36/(byte) main::pressed#1 ) [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#2 ] ) + [60] if((byte) main::pressed#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@12 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + to:main::@22 +main::@22: scope:[main] from main::@11 + [61] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#12 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ) + [62] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ) + [63] (byte) plot_chargen::shift#1 ← (byte) main::shift#10 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ) + [64] call plot_chargen param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + to:main::@12 +main::@12: scope:[main] from main::@11 main::@22 + [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) + [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto main::@10 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) + to:main::@23 +main::@23: scope:[main] from main::@12 + [67] if(true) goto main::@3 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) + to:main::@return +main::@return: scope:[main] from main::@23 + [68] return [ ] ( main:2 [ ] ) + to:@return +main::@44: scope:[main] from main::@33 + [69] phi() [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) + to:main::@7 +main::@43: scope:[main] from main::@32 + [70] phi() [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) + to:main::@6 +main::@42: scope:[main] from main::@31 + [71] phi() [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) + to:main::@5 +main::@41: scope:[main] from main::@30 + [72] phi() [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) + to:main::@4 +plot_chargen: scope:[plot_chargen] from main::@2 main::@22 + [73] (byte) plot_chargen::pos#2 ← phi( main::@2/(byte) plot_chargen::pos#0 main::@22/(byte) plot_chargen::pos#1 ) [ plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ) + [73] (byte) plot_chargen::shift#2 ← phi( main::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@22/(byte) plot_chargen::shift#1 ) [ plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ) + [73] (byte) plot_chargen::ch#2 ← phi( main::@2/(byte/signed byte/word/signed word/dword/signed dword) 32 main::@22/(byte) plot_chargen::ch#1 ) [ plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 ] ) + asm { sei } + [75] (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) + [76] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) + [77] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) + [78] if((byte) plot_chargen::shift#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@1 [ plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) + to:plot_chargen::@5 +plot_chargen::@5: scope:[plot_chargen] from plot_chargen + [79] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word/signed word/dword/signed dword) 4096 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) + to:plot_chargen::@1 +plot_chargen::@1: scope:[plot_chargen] from plot_chargen plot_chargen::@5 + [80] (byte*) plot_chargen::chargen#5 ← phi( plot_chargen/(byte*) plot_chargen::chargen#0 plot_chargen::@5/(byte*) plot_chargen::chargen#1 ) [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) + [81] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) + [82] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 [ plot_chargen::chargen#5 mul8u::a#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::a#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#1 ] ) + [83] call mul8u param-assignment [ plot_chargen::chargen#5 mul8u::res#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + [84] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) + to:plot_chargen::@9 +plot_chargen::@9: scope:[plot_chargen] from plot_chargen::@1 + [85] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) + [86] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) + to:plot_chargen::@2 +plot_chargen::@2: scope:[plot_chargen] from plot_chargen::@7 plot_chargen::@9 + [87] (byte*) plot_chargen::sc#7 ← phi( plot_chargen::@7/(byte*) plot_chargen::sc#2 plot_chargen::@9/(byte*) plot_chargen::sc#0 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ) + [87] (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 ] ) + [88] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) + to:plot_chargen::@3 +plot_chargen::@3: scope:[plot_chargen] from plot_chargen::@2 plot_chargen::@4 + [89] (byte) plot_chargen::x#2 ← phi( plot_chargen::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 plot_chargen::@4/(byte) plot_chargen::x#1 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [89] (byte*) plot_chargen::sc#3 ← phi( plot_chargen::@2/(byte*) plot_chargen::sc#7 plot_chargen::@4/(byte*) plot_chargen::sc#1 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [89] (byte) plot_chargen::bits#2 ← phi( plot_chargen::@2/(byte) plot_chargen::bits#0 plot_chargen::@4/(byte) plot_chargen::bits#1 ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [90] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) + [91] if((byte~) plot_chargen::$10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@4 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + to:plot_chargen::@6 +plot_chargen::@6: scope:[plot_chargen] from plot_chargen::@3 + [92] phi() [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + to:plot_chargen::@4 +plot_chargen::@4: scope:[plot_chargen] from plot_chargen::@3 plot_chargen::@6 + [93] (byte) plot_chargen::c#2 ← phi( plot_chargen::@3/(byte) '.' plot_chargen::@6/(byte) '*' ) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::c#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::c#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::c#2 ] ) + [94] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) + [95] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ) + [96] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ) + [97] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) + [98] if((byte) plot_chargen::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) + to:plot_chargen::@7 +plot_chargen::@7: scope:[plot_chargen] from plot_chargen::@4 + [99] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) 32 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) + [100] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) + [101] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) + to:plot_chargen::@8 +plot_chargen::@8: scope:[plot_chargen] from plot_chargen::@7 + [102] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + asm { cli } + to:plot_chargen::@return +plot_chargen::@return: scope:[plot_chargen] from plot_chargen::@8 + [104] return [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + to:@return +mul8u: scope:[mul8u] from plot_chargen::@1 + [105] phi() [ mul8u::a#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#1 ] ) + to:mul8u::@1 +mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 + [106] (word) mul8u::mb#2 ← phi( mul8u/((word))(const byte) mul8u::b#0 mul8u::@4/(word) mul8u::mb#1 ) [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + [106] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 ) [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + [106] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@4/(byte) mul8u::a#0 ) [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + [107] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + to:mul8u::@return +mul8u::@return: scope:[mul8u] from mul8u::@1 + [108] return [ mul8u::res#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + to:@return +mul8u::@2: scope:[mul8u] from mul8u::@1 + [109] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) + [110] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) + to:mul8u::@7 +mul8u::@7: scope:[mul8u] from mul8u::@2 + [111] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) + to:mul8u::@4 +mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7 + [112] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 ) [ mul8u::a#2 mul8u::mb#2 mul8u::res#6 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#6 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#6 ] ) + [113] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ) + [114] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ) + to:mul8u::@1 +keyboard_key_pressed: scope:[keyboard_key_pressed] from main::@21 main::@3 main::@4 main::@5 main::@6 main::@7 + [115] (byte) keyboard_key_pressed::key#6 ← phi( main::@21/(byte) keyboard_key_pressed::key#5 main::@3/(const byte) KEY_F1#0 main::@4/(const byte) KEY_F3#0 main::@5/(const byte) KEY_F5#0 main::@6/(const byte) KEY_F7#0 main::@7/(const byte) KEY_LSHIFT#0 ) [ keyboard_key_pressed::key#6 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) + [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ) + [117] call keyboard_matrix_read param-assignment [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ) + to:keyboard_key_pressed::@2 +keyboard_key_pressed::@2: scope:[keyboard_key_pressed] from keyboard_key_pressed + [119] (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_matrix_read::return#2 [ keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ) + [120] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ) + [121] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$1 & *((const byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) + to:keyboard_key_pressed::@return +keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_pressed::@2 + [122] return [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) + to:@return +keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed + [123] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) + [124] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + to:keyboard_matrix_read::@return +keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read + [125] return [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + to:@return +keyboard_get_keycode: scope:[keyboard_get_keycode] from main::@10 + [126] (byte) keyboard_get_keycode::return#0 ← *((const byte[]) keyboard_char_keycodes#0 + (byte) keyboard_get_keycode::ch#0) [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + to:keyboard_get_keycode::@return +keyboard_get_keycode::@return: scope:[keyboard_get_keycode] from keyboard_get_keycode + [127] return [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + to:@return +print_str_at: scope:[print_str_at] from main::@13 main::@25 main::@26 main::@27 + [128] (byte*) print_str_at::at#7 ← phi( main::@13/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 main::@25/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 10 main::@26/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 20 main::@27/(const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 30 ) [ print_str_at::str#7 print_str_at::at#7 ] ( main:2::print_str_at:10 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:12 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:14 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:16 [ print_str_at::str#7 print_str_at::at#7 ] ) + [128] (byte*) print_str_at::str#7 ← phi( main::@13/(const string) main::str main::@25/(const string) main::str1 main::@26/(const string) main::str2 main::@27/(const string) main::str3 ) [ print_str_at::str#7 print_str_at::at#7 ] ( main:2::print_str_at:10 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:12 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:14 [ print_str_at::str#7 print_str_at::at#7 ] main:2::print_str_at:16 [ print_str_at::str#7 print_str_at::at#7 ] ) + to:print_str_at::@1 +print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 + [129] (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 ) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + [129] (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 ) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + [130] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + to:print_str_at::@return +print_str_at::@return: scope:[print_str_at] from print_str_at::@1 + [131] return [ ] ( main:2::print_str_at:10 [ ] main:2::print_str_at:12 [ ] main:2::print_str_at:14 [ ] main:2::print_str_at:16 [ ] ) + to:@return +print_str_at::@2: scope:[print_str_at] from print_str_at::@1 + [132] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) + [133] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 [ print_str_at::str#5 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#4 ] ) + [134] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 [ print_str_at::str#4 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#4 print_str_at::at#4 ] ) + to:print_str_at::@1 + +DOMINATORS +@begin dominated by @begin +@12 dominated by @begin @12 +@end dominated by @end @begin @12 +main dominated by main @begin @12 +main::@1 dominated by main main::@1 @begin @12 +main::@13 dominated by main main::@1 @begin @12 main::@13 +main::@25 dominated by main main::@1 @begin main::@25 @12 main::@13 +main::@26 dominated by main main::@1 @begin main::@26 main::@25 @12 main::@13 +main::@27 dominated by main main::@1 @begin main::@27 main::@26 main::@25 @12 main::@13 +main::@2 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 main::@13 +main::@29 dominated by main main::@1 main::@2 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@3 dominated by main main::@1 main::@2 main::@3 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@30 dominated by main main::@1 main::@2 main::@3 main::@30 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@4 dominated by main main::@1 main::@2 main::@3 main::@4 main::@30 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@31 dominated by main main::@1 main::@2 main::@3 main::@4 main::@31 main::@30 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@5 dominated by main main::@1 main::@2 main::@5 main::@3 main::@4 main::@31 main::@30 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@32 dominated by main main::@1 main::@2 main::@5 main::@3 main::@4 main::@31 main::@30 @begin main::@32 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@6 dominated by main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 @begin main::@32 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@33 dominated by main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@7 dominated by main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@34 dominated by main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@19 dominated by main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@19 main::@13 +main::@9 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@10 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@10 main::@13 +main::@35 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@10 main::@13 +main::@21 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@21 main::@27 main::@29 main::@26 main::@25 @12 main::@10 main::@13 +main::@36 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@36 main::@21 main::@27 main::@29 main::@26 main::@25 @12 main::@10 main::@13 +main::@11 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@11 main::@10 main::@13 +main::@22 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@22 main::@27 main::@29 main::@26 main::@25 @12 main::@11 main::@10 main::@13 +main::@12 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@11 main::@10 main::@13 main::@12 +main::@23 dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@27 main::@29 main::@23 main::@26 main::@25 @12 main::@11 main::@10 main::@13 main::@12 +main::@return dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@35 main::@34 main::@return main::@27 main::@29 main::@23 main::@26 main::@25 @12 main::@11 main::@10 main::@13 main::@12 +main::@44 dominated by main::@44 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 main::@30 main::@33 @begin main::@32 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@43 dominated by main::@43 main main::@1 main::@2 main::@5 main::@3 main::@4 main::@31 main::@30 @begin main::@32 main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@42 dominated by main::@42 main main::@1 main::@2 main::@3 main::@4 main::@31 main::@30 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +main::@41 dominated by main::@41 main main::@1 main::@2 main::@3 main::@30 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 +plot_chargen dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 main::@13 plot_chargen +plot_chargen::@5 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@5 main::@13 plot_chargen +plot_chargen::@1 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 main::@13 plot_chargen plot_chargen::@1 +plot_chargen::@9 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 main::@13 plot_chargen plot_chargen::@1 +plot_chargen::@2 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 main::@13 plot_chargen plot_chargen::@2 plot_chargen::@1 +plot_chargen::@3 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 main::@13 plot_chargen plot_chargen::@3 plot_chargen::@2 plot_chargen::@1 +plot_chargen::@6 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 plot_chargen::@6 main::@13 plot_chargen plot_chargen::@3 plot_chargen::@2 plot_chargen::@1 +plot_chargen::@4 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 plot_chargen::@4 main::@13 plot_chargen plot_chargen::@3 plot_chargen::@2 plot_chargen::@1 +plot_chargen::@7 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 plot_chargen::@7 plot_chargen::@4 main::@13 plot_chargen plot_chargen::@3 plot_chargen::@2 plot_chargen::@1 +plot_chargen::@8 dominated by main main::@1 main::@2 @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 plot_chargen::@8 plot_chargen::@7 plot_chargen::@4 main::@13 plot_chargen plot_chargen::@3 plot_chargen::@2 plot_chargen::@1 +plot_chargen::@return dominated by main main::@1 main::@2 plot_chargen::@return @begin main::@27 main::@26 main::@25 @12 plot_chargen::@9 plot_chargen::@8 plot_chargen::@7 plot_chargen::@4 main::@13 plot_chargen plot_chargen::@3 plot_chargen::@2 plot_chargen::@1 +mul8u dominated by main main::@1 main::@2 @begin mul8u main::@27 main::@26 main::@25 @12 main::@13 plot_chargen plot_chargen::@1 +mul8u::@1 dominated by main main::@1 main::@2 @begin mul8u main::@27 main::@26 main::@25 @12 main::@13 plot_chargen plot_chargen::@1 mul8u::@1 +mul8u::@return dominated by main main::@1 main::@2 @begin mul8u main::@27 main::@26 main::@25 @12 main::@13 mul8u::@return plot_chargen plot_chargen::@1 mul8u::@1 +mul8u::@2 dominated by main main::@1 main::@2 @begin mul8u main::@27 main::@26 main::@25 @12 main::@13 plot_chargen plot_chargen::@1 mul8u::@2 mul8u::@1 +mul8u::@7 dominated by main main::@1 main::@2 @begin mul8u main::@27 main::@26 main::@25 @12 main::@13 mul8u::@7 plot_chargen plot_chargen::@1 mul8u::@2 mul8u::@1 +mul8u::@4 dominated by main main::@1 main::@2 @begin mul8u main::@27 main::@26 main::@25 @12 main::@13 plot_chargen plot_chargen::@1 mul8u::@2 mul8u::@1 mul8u::@4 +keyboard_key_pressed dominated by main main::@1 main::@2 main::@3 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 keyboard_key_pressed +keyboard_key_pressed::@2 dominated by main main::@1 main::@2 keyboard_key_pressed::@2 main::@3 @begin main::@27 main::@29 main::@26 main::@25 @12 main::@13 keyboard_key_pressed +keyboard_key_pressed::@return dominated by main main::@1 main::@2 keyboard_key_pressed::@2 main::@3 @begin main::@27 main::@29 main::@26 main::@25 keyboard_key_pressed::@return @12 main::@13 keyboard_key_pressed +keyboard_matrix_read dominated by main main::@1 main::@2 main::@3 @begin keyboard_matrix_read main::@27 main::@29 main::@26 main::@25 @12 main::@13 keyboard_key_pressed +keyboard_matrix_read::@return dominated by main main::@1 main::@2 main::@3 @begin keyboard_matrix_read main::@27 main::@29 main::@26 main::@25 @12 main::@13 keyboard_matrix_read::@return keyboard_key_pressed +keyboard_get_keycode dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 keyboard_get_keycode main::@31 main::@30 main::@33 @begin main::@32 main::@34 main::@27 main::@29 main::@26 main::@25 @12 main::@10 main::@13 +keyboard_get_keycode::@return dominated by main::@9 main::@7 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 keyboard_get_keycode main::@31 main::@30 main::@33 @begin main::@32 main::@34 keyboard_get_keycode::@return main::@27 main::@29 main::@26 main::@25 @12 main::@10 main::@13 +print_str_at dominated by main main::@1 @begin print_str_at @12 main::@13 +print_str_at::@1 dominated by main main::@1 @begin print_str_at @12 print_str_at::@1 main::@13 +print_str_at::@return dominated by main main::@1 @begin print_str_at @12 print_str_at::@1 main::@13 print_str_at::@return +print_str_at::@2 dominated by main main::@1 @begin print_str_at @12 print_str_at::@1 print_str_at::@2 main::@13 + +NATURAL LOOPS +Found back edge: Loop head: main::@1 tails: main::@1 blocks: null +Found back edge: Loop head: main::@2 tails: main::@29 blocks: null +Found back edge: Loop head: main::@10 tails: main::@12 blocks: null +Found back edge: Loop head: main::@3 tails: main::@23 blocks: null +Found back edge: Loop head: plot_chargen::@3 tails: plot_chargen::@4 blocks: null +Found back edge: Loop head: plot_chargen::@2 tails: plot_chargen::@7 blocks: null +Found back edge: Loop head: mul8u::@1 tails: mul8u::@4 blocks: null +Found back edge: Loop head: print_str_at::@1 tails: print_str_at::@2 blocks: null +Populated: Loop head: main::@1 tails: main::@1 blocks: main::@1 +Populated: Loop head: main::@2 tails: main::@29 blocks: main::@29 main::@2 +Populated: Loop head: main::@10 tails: main::@12 blocks: main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 +Populated: Loop head: main::@3 tails: main::@23 blocks: main::@23 main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 main::@9 main::@19 main::@34 main::@7 main::@33 main::@44 main::@6 main::@32 main::@43 main::@5 main::@31 main::@42 main::@4 main::@30 main::@41 main::@3 +Populated: Loop head: plot_chargen::@3 tails: plot_chargen::@4 blocks: plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 +Populated: Loop head: plot_chargen::@2 tails: plot_chargen::@7 blocks: plot_chargen::@7 plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 plot_chargen::@2 +Populated: Loop head: mul8u::@1 tails: mul8u::@4 blocks: mul8u::@4 mul8u::@2 mul8u::@7 mul8u::@1 +Populated: Loop head: print_str_at::@1 tails: print_str_at::@2 blocks: print_str_at::@2 print_str_at::@1 +Loop head: main::@1 tails: main::@1 blocks: main::@1 +Loop head: main::@2 tails: main::@29 blocks: main::@29 main::@2 +Loop head: main::@10 tails: main::@12 blocks: main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 +Loop head: main::@3 tails: main::@23 blocks: main::@23 main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 main::@9 main::@19 main::@34 main::@7 main::@33 main::@44 main::@6 main::@32 main::@43 main::@5 main::@31 main::@42 main::@4 main::@30 main::@41 main::@3 +Loop head: plot_chargen::@3 tails: plot_chargen::@4 blocks: plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 +Loop head: plot_chargen::@2 tails: plot_chargen::@7 blocks: plot_chargen::@7 plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 plot_chargen::@2 +Loop head: mul8u::@1 tails: mul8u::@4 blocks: mul8u::@4 mul8u::@2 mul8u::@7 mul8u::@1 +Loop head: print_str_at::@1 tails: print_str_at::@2 blocks: print_str_at::@2 print_str_at::@1 + +NATURAL LOOPS WITH DEPTH +Found 0 loops in scope [] +Found 4 loops in scope [main] + Loop head: main::@1 tails: main::@1 blocks: main::@1 + Loop head: main::@2 tails: main::@29 blocks: main::@29 main::@2 + Loop head: main::@10 tails: main::@12 blocks: main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 + Loop head: main::@3 tails: main::@23 blocks: main::@23 main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 main::@9 main::@19 main::@34 main::@7 main::@33 main::@44 main::@6 main::@32 main::@43 main::@5 main::@31 main::@42 main::@4 main::@30 main::@41 main::@3 +Found 1 loops in scope [print_str_at] + Loop head: print_str_at::@1 tails: print_str_at::@2 blocks: print_str_at::@2 print_str_at::@1 +Found 2 loops in scope [plot_chargen] + Loop head: plot_chargen::@3 tails: plot_chargen::@4 blocks: plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 + Loop head: plot_chargen::@2 tails: plot_chargen::@7 blocks: plot_chargen::@7 plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 plot_chargen::@2 +Found 0 loops in scope [keyboard_key_pressed] +Found 0 loops in scope [keyboard_get_keycode] +Found 1 loops in scope [mul8u] + Loop head: mul8u::@1 tails: mul8u::@4 blocks: mul8u::@4 mul8u::@2 mul8u::@7 mul8u::@1 +Found 0 loops in scope [keyboard_matrix_read] +Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1 +Loop head: main::@2 tails: main::@29 blocks: main::@29 main::@2 depth: 1 +Loop head: main::@10 tails: main::@12 blocks: main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 depth: 2 +Loop head: main::@3 tails: main::@23 blocks: main::@23 main::@12 main::@11 main::@22 main::@35 main::@36 main::@10 main::@21 main::@9 main::@19 main::@34 main::@7 main::@33 main::@44 main::@6 main::@32 main::@43 main::@5 main::@31 main::@42 main::@4 main::@30 main::@41 main::@3 depth: 1 +Loop head: plot_chargen::@3 tails: plot_chargen::@4 blocks: plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 depth: 4 +Loop head: plot_chargen::@2 tails: plot_chargen::@7 blocks: plot_chargen::@7 plot_chargen::@4 plot_chargen::@3 plot_chargen::@6 plot_chargen::@2 depth: 3 +Loop head: mul8u::@1 tails: mul8u::@4 blocks: mul8u::@4 mul8u::@2 mul8u::@7 mul8u::@1 depth: 3 +Loop head: print_str_at::@1 tails: print_str_at::@2 blocks: print_str_at::@2 print_str_at::@1 depth: 1 + + +VARIABLE REGISTER WEIGHTS +(byte*) CHARGEN +(byte*) CIA1_PORT_A +(byte*) CIA1_PORT_B +(byte) KEY_0 +(byte) KEY_1 +(byte) KEY_2 +(byte) KEY_3 +(byte) KEY_4 +(byte) KEY_5 +(byte) KEY_6 +(byte) KEY_7 +(byte) KEY_8 +(byte) KEY_9 +(byte) KEY_A +(byte) KEY_ARROW_LEFT +(byte) KEY_ARROW_UP +(byte) KEY_ASTERISK +(byte) KEY_AT +(byte) KEY_B +(byte) KEY_C +(byte) KEY_COLON +(byte) KEY_COMMA +(byte) KEY_D +(byte) KEY_DOT +(byte) KEY_E +(byte) KEY_EQUALS +(byte) KEY_F +(byte) KEY_F1 +(byte) KEY_F3 +(byte) KEY_F5 +(byte) KEY_F7 +(byte) KEY_G +(byte) KEY_H +(byte) KEY_I +(byte) KEY_J +(byte) KEY_K +(byte) KEY_L +(byte) KEY_LSHIFT +(byte) KEY_M +(byte) KEY_MINUS +(byte) KEY_N +(byte) KEY_O +(byte) KEY_P +(byte) KEY_PLUS +(byte) KEY_POUND +(byte) KEY_Q +(byte) KEY_R +(byte) KEY_S +(byte) KEY_SEMICOLON +(byte) KEY_SLASH +(byte) KEY_SPACE +(byte) KEY_T +(byte) KEY_U +(byte) KEY_V +(byte) KEY_W +(byte) KEY_X +(byte) KEY_Y +(byte) KEY_Z +(byte*) PROCPORT +(byte*) SCREEN +(byte[]) keyboard_char_keycodes +(byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) +(byte) keyboard_get_keycode::ch +(byte) keyboard_get_keycode::ch#0 103.0 +(byte) keyboard_get_keycode::return +(byte) keyboard_get_keycode::return#0 34.33333333333333 +(byte) keyboard_get_keycode::return#2 202.0 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$1 2.0 +(byte~) keyboard_key_pressed::$2 4.0 +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::key#5 202.0 +(byte) keyboard_key_pressed::key#6 20.999999999999996 +(byte) keyboard_key_pressed::return +(byte) keyboard_key_pressed::return#0 19.75 +(byte) keyboard_key_pressed::return#10 22.0 +(byte) keyboard_key_pressed::return#11 22.0 +(byte) keyboard_key_pressed::return#12 22.0 +(byte) keyboard_key_pressed::return#13 22.0 +(byte) keyboard_key_pressed::return#14 202.0 +(byte) keyboard_key_pressed::return#2 22.0 +(byte[]) keyboard_matrix_col_bitmask +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +(byte) keyboard_matrix_read::return +(byte) keyboard_matrix_read::return#0 1.3333333333333333 +(byte) keyboard_matrix_read::return#2 4.0 +(byte) keyboard_matrix_read::row_pressed_bits +(byte) keyboard_matrix_read::rowid +(byte) keyboard_matrix_read::rowid#0 4.0 +(byte[8]) keyboard_matrix_row_bitmask +(void()) main() +(byte~) main::$15 22.0 +(byte~) main::$18 22.0 +(byte~) main::$21 22.0 +(byte~) main::$24 22.0 +(byte~) main::$27 22.0 +(byte) main::ch +(byte) main::ch#1 151.5 +(byte) main::ch#2 25.25 +(byte) main::cur_pos +(byte) main::cur_pos#12 4.730769230769231 +(byte) main::cur_pos#18 3.6666666666666665 +(byte) main::cur_pos#20 3.6666666666666665 +(byte) main::cur_pos#22 3.6666666666666665 +(byte) main::cur_pos#24 3.6666666666666665 +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#2 11.0 +(byte) main::key +(byte) main::key#0 151.5 +(byte) main::pressed +(byte) main::pressed#1 202.0 +(byte) main::pressed#2 202.0 +(byte*) main::sc +(byte*) main::sc#1 16.5 +(byte*) main::sc#2 16.5 +(byte) main::shift +(byte) main::shift#10 5.315789473684211 +(word()) mul8u((byte) mul8u::a , (byte) mul8u::b) +(byte~) mul8u::$1 2002.0 +(byte) mul8u::a +(byte) mul8u::a#0 1001.0 +(byte) mul8u::a#1 2.0 +(byte) mul8u::a#2 667.6666666666667 +(byte) mul8u::b +(word) mul8u::mb +(word) mul8u::mb#1 2002.0 +(word) mul8u::mb#2 429.0 +(word) mul8u::res +(word) mul8u::res#1 2002.0 +(word) mul8u::res#2 500.83333333333337 +(word) mul8u::res#6 1001.0 +(word) mul8u::return +(word) mul8u::return#2 4.0 +(void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift) +(word~) plot_chargen::$0 4.0 +(word~) plot_chargen::$1 4.0 +(byte~) plot_chargen::$10 20002.0 +(word~) plot_chargen::$8 4.0 +(byte) plot_chargen::bits +(byte) plot_chargen::bits#0 2002.0 +(byte) plot_chargen::bits#1 6667.333333333333 +(byte) plot_chargen::bits#2 4429.142857142857 +(byte) plot_chargen::c +(byte) plot_chargen::c#2 10001.0 +(byte) plot_chargen::ch +(byte) plot_chargen::ch#1 101.0 +(byte) plot_chargen::ch#2 51.5 +(byte*) plot_chargen::chargen +(byte*) plot_chargen::chargen#0 3.0 +(byte*) plot_chargen::chargen#1 4.0 +(byte*) plot_chargen::chargen#5 45.68181818181818 +(byte) plot_chargen::pos +(byte) plot_chargen::pos#0 22.0 +(byte) plot_chargen::pos#1 67.33333333333333 +(byte) plot_chargen::pos#2 12.666666666666664 +(byte*) plot_chargen::sc +(byte*) plot_chargen::sc#0 4.0 +(byte*) plot_chargen::sc#1 5250.75 +(byte*) plot_chargen::sc#2 667.3333333333334 +(byte*) plot_chargen::sc#3 5167.333333333333 +(byte*) plot_chargen::sc#7 1002.0 +(byte) plot_chargen::shift +(byte) plot_chargen::shift#1 202.0 +(byte) plot_chargen::shift#2 20.599999999999998 +(byte) plot_chargen::x +(byte) plot_chargen::x#1 15001.5 +(byte) plot_chargen::x#2 2500.25 +(byte) plot_chargen::y +(byte) plot_chargen::y#1 1501.5 +(byte) plot_chargen::y#2 231.0 +(void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at) +(byte*) print_str_at::at +(byte*) print_str_at::at#4 11.0 +(byte*) print_str_at::at#5 11.666666666666666 +(byte*) print_str_at::at#7 2.0 +(byte*) print_str_at::str +(byte*) print_str_at::str#4 22.0 +(byte*) print_str_at::str#5 11.5 +(byte*) print_str_at::str#7 2.0 + +Initial phi equivalence classes +[ main::sc#2 main::sc#1 ] +[ main::i#2 main::i#1 ] +[ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +[ main::shift#10 ] +[ main::ch#2 main::ch#1 ] +[ main::pressed#2 main::pressed#1 ] +[ plot_chargen::ch#2 plot_chargen::ch#1 ] +[ plot_chargen::shift#2 plot_chargen::shift#1 ] +[ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] +[ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] +[ plot_chargen::y#2 plot_chargen::y#1 ] +[ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +[ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] +[ plot_chargen::x#2 plot_chargen::x#1 ] +[ plot_chargen::c#2 ] +[ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +[ mul8u::mb#2 mul8u::mb#1 ] +[ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] +[ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] +[ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Added variable keyboard_key_pressed::return#2 to zero page equivalence class [ keyboard_key_pressed::return#2 ] +Added variable main::$15 to zero page equivalence class [ main::$15 ] +Added variable keyboard_key_pressed::return#10 to zero page equivalence class [ keyboard_key_pressed::return#10 ] +Added variable main::$18 to zero page equivalence class [ main::$18 ] +Added variable keyboard_key_pressed::return#11 to zero page equivalence class [ keyboard_key_pressed::return#11 ] +Added variable main::$21 to zero page equivalence class [ main::$21 ] +Added variable keyboard_key_pressed::return#12 to zero page equivalence class [ keyboard_key_pressed::return#12 ] +Added variable main::$24 to zero page equivalence class [ main::$24 ] +Added variable keyboard_key_pressed::return#13 to zero page equivalence class [ keyboard_key_pressed::return#13 ] +Added variable main::$27 to zero page equivalence class [ main::$27 ] +Added variable keyboard_get_keycode::ch#0 to zero page equivalence class [ keyboard_get_keycode::ch#0 ] +Added variable keyboard_get_keycode::return#2 to zero page equivalence class [ keyboard_get_keycode::return#2 ] +Added variable main::key#0 to zero page equivalence class [ main::key#0 ] +Added variable keyboard_key_pressed::return#14 to zero page equivalence class [ keyboard_key_pressed::return#14 ] +Added variable plot_chargen::$0 to zero page equivalence class [ plot_chargen::$0 ] +Added variable plot_chargen::$1 to zero page equivalence class [ plot_chargen::$1 ] +Added variable mul8u::return#2 to zero page equivalence class [ mul8u::return#2 ] +Added variable plot_chargen::$8 to zero page equivalence class [ plot_chargen::$8 ] +Added variable plot_chargen::$10 to zero page equivalence class [ plot_chargen::$10 ] +Added variable mul8u::$1 to zero page equivalence class [ mul8u::$1 ] +Added variable keyboard_matrix_read::rowid#0 to zero page equivalence class [ keyboard_matrix_read::rowid#0 ] +Added variable keyboard_matrix_read::return#2 to zero page equivalence class [ keyboard_matrix_read::return#2 ] +Added variable keyboard_key_pressed::$1 to zero page equivalence class [ keyboard_key_pressed::$1 ] +Added variable keyboard_key_pressed::$2 to zero page equivalence class [ keyboard_key_pressed::$2 ] +Added variable keyboard_key_pressed::return#0 to zero page equivalence class [ keyboard_key_pressed::return#0 ] +Added variable keyboard_matrix_read::return#0 to zero page equivalence class [ keyboard_matrix_read::return#0 ] +Added variable keyboard_get_keycode::return#0 to zero page equivalence class [ keyboard_get_keycode::return#0 ] +Complete equivalence classes +[ main::sc#2 main::sc#1 ] +[ main::i#2 main::i#1 ] +[ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +[ main::shift#10 ] +[ main::ch#2 main::ch#1 ] +[ main::pressed#2 main::pressed#1 ] +[ plot_chargen::ch#2 plot_chargen::ch#1 ] +[ plot_chargen::shift#2 plot_chargen::shift#1 ] +[ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] +[ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] +[ plot_chargen::y#2 plot_chargen::y#1 ] +[ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +[ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] +[ plot_chargen::x#2 plot_chargen::x#1 ] +[ plot_chargen::c#2 ] +[ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +[ mul8u::mb#2 mul8u::mb#1 ] +[ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] +[ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] +[ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +[ keyboard_key_pressed::return#2 ] +[ main::$15 ] +[ keyboard_key_pressed::return#10 ] +[ main::$18 ] +[ keyboard_key_pressed::return#11 ] +[ main::$21 ] +[ keyboard_key_pressed::return#12 ] +[ main::$24 ] +[ keyboard_key_pressed::return#13 ] +[ main::$27 ] +[ keyboard_get_keycode::ch#0 ] +[ keyboard_get_keycode::return#2 ] +[ main::key#0 ] +[ keyboard_key_pressed::return#14 ] +[ plot_chargen::$0 ] +[ plot_chargen::$1 ] +[ mul8u::return#2 ] +[ plot_chargen::$8 ] +[ plot_chargen::$10 ] +[ mul8u::$1 ] +[ keyboard_matrix_read::rowid#0 ] +[ keyboard_matrix_read::return#2 ] +[ keyboard_key_pressed::$1 ] +[ keyboard_key_pressed::$2 ] +[ keyboard_key_pressed::return#0 ] +[ keyboard_matrix_read::return#0 ] +[ keyboard_get_keycode::return#0 ] +Allocated zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] +Allocated zp ZP_BYTE:4 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +Allocated zp ZP_BYTE:6 [ main::shift#10 ] +Allocated zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] +Allocated zp ZP_BYTE:8 [ main::pressed#2 main::pressed#1 ] +Allocated zp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] +Allocated zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] +Allocated zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] +Allocated zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] +Allocated zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] +Allocated zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +Allocated zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] +Allocated zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] +Allocated zp ZP_BYTE:19 [ plot_chargen::c#2 ] +Allocated zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +Allocated zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +Allocated zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] +Allocated zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] +Allocated zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] +Allocated zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Allocated zp ZP_BYTE:30 [ keyboard_key_pressed::return#2 ] +Allocated zp ZP_BYTE:31 [ main::$15 ] +Allocated zp ZP_BYTE:32 [ keyboard_key_pressed::return#10 ] +Allocated zp ZP_BYTE:33 [ main::$18 ] +Allocated zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] +Allocated zp ZP_BYTE:35 [ main::$21 ] +Allocated zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] +Allocated zp ZP_BYTE:37 [ main::$24 ] +Allocated zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] +Allocated zp ZP_BYTE:39 [ main::$27 ] +Allocated zp ZP_BYTE:40 [ keyboard_get_keycode::ch#0 ] +Allocated zp ZP_BYTE:41 [ keyboard_get_keycode::return#2 ] +Allocated zp ZP_BYTE:42 [ main::key#0 ] +Allocated zp ZP_BYTE:43 [ keyboard_key_pressed::return#14 ] +Allocated zp ZP_WORD:44 [ plot_chargen::$0 ] +Allocated zp ZP_WORD:46 [ plot_chargen::$1 ] +Allocated zp ZP_WORD:48 [ mul8u::return#2 ] +Allocated zp ZP_WORD:50 [ plot_chargen::$8 ] +Allocated zp ZP_BYTE:52 [ plot_chargen::$10 ] +Allocated zp ZP_BYTE:53 [ mul8u::$1 ] +Allocated zp ZP_BYTE:54 [ keyboard_matrix_read::rowid#0 ] +Allocated zp ZP_BYTE:55 [ keyboard_matrix_read::return#2 ] +Allocated zp ZP_BYTE:56 [ keyboard_key_pressed::$1 ] +Allocated zp ZP_BYTE:57 [ keyboard_key_pressed::$2 ] +Allocated zp ZP_BYTE:58 [ keyboard_key_pressed::return#0 ] +Allocated zp ZP_BYTE:59 [ keyboard_matrix_read::return#0 ] +Allocated zp ZP_BYTE:60 [ keyboard_get_keycode::return#0 ] + +INITIAL ASM +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label CIA1_PORT_A = $dc00 + .label CIA1_PORT_B = $dc01 + .const KEY_F7 = 3 + .const KEY_F1 = 4 + .const KEY_F3 = 5 + .const KEY_F5 = 6 + .const KEY_3 = 8 + .const KEY_W = 9 + .const KEY_A = $a + .const KEY_4 = $b + .const KEY_Z = $c + .const KEY_S = $d + .const KEY_E = $e + .const KEY_LSHIFT = $f + .const KEY_5 = $10 + .const KEY_R = $11 + .const KEY_D = $12 + .const KEY_6 = $13 + .const KEY_C = $14 + .const KEY_F = $15 + .const KEY_T = $16 + .const KEY_X = $17 + .const KEY_7 = $18 + .const KEY_Y = $19 + .const KEY_G = $1a + .const KEY_8 = $1b + .const KEY_B = $1c + .const KEY_H = $1d + .const KEY_U = $1e + .const KEY_V = $1f + .const KEY_9 = $20 + .const KEY_I = $21 + .const KEY_J = $22 + .const KEY_0 = $23 + .const KEY_M = $24 + .const KEY_K = $25 + .const KEY_O = $26 + .const KEY_N = $27 + .const KEY_PLUS = $28 + .const KEY_P = $29 + .const KEY_L = $2a + .const KEY_MINUS = $2b + .const KEY_DOT = $2c + .const KEY_COLON = $2d + .const KEY_AT = $2e + .const KEY_COMMA = $2f + .const KEY_POUND = $30 + .const KEY_ASTERISK = $31 + .const KEY_SEMICOLON = $32 + .const KEY_EQUALS = $35 + .const KEY_ARROW_UP = $36 + .const KEY_SLASH = $37 + .const KEY_1 = $38 + .const KEY_ARROW_LEFT = $39 + .const KEY_2 = $3b + .const KEY_SPACE = $3c + .const KEY_Q = $3e + .label SCREEN = $400 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @12 [phi:@begin->@12] +b12_from_bbegin: + jmp b12 +//SEG4 @12 +b12: +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @12 to main [phi:@12->main] +main_from_b12: + jsr main +//SEG7 [3] phi from @12 to @end [phi:@12->@end] +bend_from_b12: + jmp bend +//SEG8 @end +bend: +//SEG9 main +main: { + .label _15 = $1f + .label _18 = $21 + .label _21 = $23 + .label _24 = $25 + .label _27 = $27 + .label sc = 2 + .label i = 4 + .label key = $2a + .label pressed = 8 + .label ch = 7 + .label cur_pos = 5 + .label shift = 6 + //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG11 [5] phi (byte*) main::sc#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta sc+1 + jmp b1 + //SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + //SEG13 [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@1->main::@1#0] -- register_copy + jmp b1 + //SEG14 main::@1 + b1: + //SEG15 [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG16 [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG17 [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) -- pbuz1_lt_pbuc1_then_la1 + lda sc+1 + cmp #>SCREEN+$3e8 + bcc b1_from_b1 + bne !+ + lda sc + cmp #main::@13] + b13_from_b1: + jmp b13 + //SEG19 main::@13 + b13: + //SEG20 [10] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG21 [128] phi from main::@13 to print_str_at [phi:main::@13->print_str_at] + print_str_at_from_b13: + //SEG22 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@13->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1 + sta print_str_at.at+1 + //SEG23 [128] phi (byte*) print_str_at::str#7 = (const string) main::str [phi:main::@13->print_str_at#1] -- pbuz1=pbuc1 + lda #str + sta print_str_at.str+1 + jsr print_str_at + //SEG24 [11] phi from main::@13 to main::@25 [phi:main::@13->main::@25] + b25_from_b13: + jmp b25 + //SEG25 main::@25 + b25: + //SEG26 [12] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG27 [128] phi from main::@25 to print_str_at [phi:main::@25->print_str_at] + print_str_at_from_b25: + //SEG28 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 10 [phi:main::@25->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$a + sta print_str_at.at+1 + //SEG29 [128] phi (byte*) print_str_at::str#7 = (const string) main::str1 [phi:main::@25->print_str_at#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str_at.str+1 + jsr print_str_at + //SEG30 [13] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + b26_from_b25: + jmp b26 + //SEG31 main::@26 + b26: + //SEG32 [14] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG33 [128] phi from main::@26 to print_str_at [phi:main::@26->print_str_at] + print_str_at_from_b26: + //SEG34 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 20 [phi:main::@26->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$14 + sta print_str_at.at+1 + //SEG35 [128] phi (byte*) print_str_at::str#7 = (const string) main::str2 [phi:main::@26->print_str_at#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str_at.str+1 + jsr print_str_at + //SEG36 [15] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + b27_from_b26: + jmp b27 + //SEG37 main::@27 + b27: + //SEG38 [16] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG39 [128] phi from main::@27 to print_str_at [phi:main::@27->print_str_at] + print_str_at_from_b27: + //SEG40 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 30 [phi:main::@27->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$1e + sta print_str_at.at+1 + //SEG41 [128] phi (byte*) print_str_at::str#7 = (const string) main::str3 [phi:main::@27->print_str_at#1] -- pbuz1=pbuc1 + lda #str3 + sta print_str_at.str+1 + jsr print_str_at + //SEG42 [17] phi from main::@27 to main::@2 [phi:main::@27->main::@2] + b2_from_b27: + //SEG43 [17] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@27->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b2 + //SEG44 [17] phi from main::@29 to main::@2 [phi:main::@29->main::@2] + b2_from_b29: + //SEG45 [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@29->main::@2#0] -- register_copy + jmp b2 + //SEG46 main::@2 + b2: + //SEG47 [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 [ main::i#2 plot_chargen::pos#0 ] ( main:2 [ main::i#2 plot_chargen::pos#0 ] ) -- vbuz1=vbuz2 + lda i + sta plot_chargen.pos + //SEG48 [19] call plot_chargen param-assignment [ main::i#2 ] ( main:2 [ main::i#2 ] ) + //SEG49 [73] phi from main::@2 to plot_chargen [phi:main::@2->plot_chargen] + plot_chargen_from_b2: + //SEG50 [73] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#0 [phi:main::@2->plot_chargen#0] -- register_copy + //SEG51 [73] phi (byte) plot_chargen::shift#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@2->plot_chargen#1] -- vbuz1=vbuc1 + lda #0 + sta plot_chargen.shift + //SEG52 [73] phi (byte) plot_chargen::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 32 [phi:main::@2->plot_chargen#2] -- vbuz1=vbuc1 + lda #$20 + sta plot_chargen.ch + jsr plot_chargen + jmp b29 + //SEG53 main::@29 + b29: + //SEG54 [20] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG55 [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #4 + bne b2_from_b29 + //SEG56 [22] phi from main::@29 to main::@3 [phi:main::@29->main::@3] + b3_from_b29: + //SEG57 [22] phi (byte) main::cur_pos#24 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@29->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta cur_pos + jmp b3 + //SEG58 [22] phi from main::@23 to main::@3 [phi:main::@23->main::@3] + b3_from_b23: + //SEG59 [22] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#12 [phi:main::@23->main::@3#0] -- register_copy + jmp b3 + //SEG60 main::@3 + b3: + //SEG61 [23] call keyboard_key_pressed param-assignment [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ) + //SEG62 [115] phi from main::@3 to keyboard_key_pressed [phi:main::@3->keyboard_key_pressed] + keyboard_key_pressed_from_b3: + //SEG63 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1#0 [phi:main::@3->keyboard_key_pressed#0] -- vbuz1=vbuc1 + lda #KEY_F1 + sta keyboard_key_pressed.key + jsr keyboard_key_pressed + //SEG64 [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return + sta keyboard_key_pressed.return_2 + jmp b30 + //SEG65 main::@30 + b30: + //SEG66 [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 [ main::cur_pos#24 main::$15 ] ( main:2 [ main::cur_pos#24 main::$15 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return_2 + sta _15 + //SEG67 [26] if((byte~) main::$15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@41 [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) -- vbuz1_eq_0_then_la1 + lda _15 + beq b41_from_b30 + //SEG68 [27] phi from main::@30 to main::@4 [phi:main::@30->main::@4] + b4_from_b30: + //SEG69 [27] phi (byte) main::cur_pos#22 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@30->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta cur_pos + jmp b4 + //SEG70 main::@4 + b4: + //SEG71 [28] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ) + //SEG72 [115] phi from main::@4 to keyboard_key_pressed [phi:main::@4->keyboard_key_pressed] + keyboard_key_pressed_from_b4: + //SEG73 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3#0 [phi:main::@4->keyboard_key_pressed#0] -- vbuz1=vbuc1 + lda #KEY_F3 + sta keyboard_key_pressed.key + jsr keyboard_key_pressed + //SEG74 [29] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ( main:2 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return + sta keyboard_key_pressed.return_10 + jmp b31 + //SEG75 main::@31 + b31: + //SEG76 [30] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 [ main::cur_pos#22 main::$18 ] ( main:2 [ main::cur_pos#22 main::$18 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return_10 + sta _18 + //SEG77 [31] if((byte~) main::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@42 [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) -- vbuz1_eq_0_then_la1 + lda _18 + beq b42_from_b31 + //SEG78 [32] phi from main::@31 to main::@5 [phi:main::@31->main::@5] + b5_from_b31: + //SEG79 [32] phi (byte) main::cur_pos#20 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@31->main::@5#0] -- vbuz1=vbuc1 + lda #1 + sta cur_pos + jmp b5 + //SEG80 main::@5 + b5: + //SEG81 [33] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ) + //SEG82 [115] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + keyboard_key_pressed_from_b5: + //SEG83 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5#0 [phi:main::@5->keyboard_key_pressed#0] -- vbuz1=vbuc1 + lda #KEY_F5 + sta keyboard_key_pressed.key + jsr keyboard_key_pressed + //SEG84 [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ( main:2 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return + sta keyboard_key_pressed.return_11 + jmp b32 + //SEG85 main::@32 + b32: + //SEG86 [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 [ main::cur_pos#20 main::$21 ] ( main:2 [ main::cur_pos#20 main::$21 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return_11 + sta _21 + //SEG87 [36] if((byte~) main::$21==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@43 [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) -- vbuz1_eq_0_then_la1 + lda _21 + beq b43_from_b32 + //SEG88 [37] phi from main::@32 to main::@6 [phi:main::@32->main::@6] + b6_from_b32: + //SEG89 [37] phi (byte) main::cur_pos#18 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:main::@32->main::@6#0] -- vbuz1=vbuc1 + lda #2 + sta cur_pos + jmp b6 + //SEG90 main::@6 + b6: + //SEG91 [38] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ) + //SEG92 [115] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] + keyboard_key_pressed_from_b6: + //SEG93 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7#0 [phi:main::@6->keyboard_key_pressed#0] -- vbuz1=vbuc1 + lda #KEY_F7 + sta keyboard_key_pressed.key + jsr keyboard_key_pressed + //SEG94 [39] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ( main:2 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return + sta keyboard_key_pressed.return_12 + jmp b33 + //SEG95 main::@33 + b33: + //SEG96 [40] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 [ main::cur_pos#18 main::$24 ] ( main:2 [ main::cur_pos#18 main::$24 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return_12 + sta _24 + //SEG97 [41] if((byte~) main::$24==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@44 [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) -- vbuz1_eq_0_then_la1 + lda _24 + beq b44_from_b33 + //SEG98 [42] phi from main::@33 to main::@7 [phi:main::@33->main::@7] + b7_from_b33: + //SEG99 [42] phi (byte) main::cur_pos#12 = (byte/signed byte/word/signed word/dword/signed dword) 3 [phi:main::@33->main::@7#0] -- vbuz1=vbuc1 + lda #3 + sta cur_pos + jmp b7 + //SEG100 main::@7 + b7: + //SEG101 [43] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ) + //SEG102 [115] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed] + keyboard_key_pressed_from_b7: + //SEG103 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT#0 [phi:main::@7->keyboard_key_pressed#0] -- vbuz1=vbuc1 + lda #KEY_LSHIFT + sta keyboard_key_pressed.key + jsr keyboard_key_pressed + //SEG104 [44] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return + sta keyboard_key_pressed.return_13 + jmp b34 + //SEG105 main::@34 + b34: + //SEG106 [45] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 [ main::cur_pos#12 main::$27 ] ( main:2 [ main::cur_pos#12 main::$27 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return_13 + sta _27 + //SEG107 [46] if((byte~) main::$27==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@9 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) -- vbuz1_eq_0_then_la1 + lda _27 + beq b9_from_b34 + //SEG108 [47] phi from main::@34 to main::@19 [phi:main::@34->main::@19] + b19_from_b34: + jmp b19 + //SEG109 main::@19 + b19: + //SEG110 [48] phi from main::@19 to main::@9 [phi:main::@19->main::@9] + b9_from_b19: + //SEG111 [48] phi (byte) main::shift#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@19->main::@9#0] -- vbuz1=vbuc1 + lda #1 + sta shift + jmp b9 + //SEG112 [48] phi from main::@34 to main::@9 [phi:main::@34->main::@9] + b9_from_b34: + //SEG113 [48] phi (byte) main::shift#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@34->main::@9#0] -- vbuz1=vbuc1 + lda #0 + sta shift + jmp b9 + //SEG114 main::@9 + b9: + //SEG115 [49] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + b10_from_b9: + //SEG116 [49] phi (byte) main::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@9->main::@10#0] -- vbuz1=vbuc1 + lda #0 + sta ch + jmp b10 + //SEG117 [49] phi from main::@12 to main::@10 [phi:main::@12->main::@10] + b10_from_b12: + //SEG118 [49] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@12->main::@10#0] -- register_copy + jmp b10 + //SEG119 main::@10 + b10: + //SEG120 [50] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ) -- vbuz1=vbuz2 + lda ch + sta keyboard_get_keycode.ch + //SEG121 [51] call keyboard_get_keycode param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + jsr keyboard_get_keycode + //SEG122 [52] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ) -- vbuz1=vbuz2 + lda keyboard_get_keycode.return + sta keyboard_get_keycode.return_2 + jmp b35 + //SEG123 main::@35 + b35: + //SEG124 [53] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) -- vbuz1=vbuz2 + lda keyboard_get_keycode.return_2 + sta key + //SEG125 [54] if((byte) main::key#0==(byte/signed byte/word/signed word/dword/signed dword) 63) goto main::@11 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) -- vbuz1_eq_vbuc1_then_la1 + lda key + cmp #$3f + beq b11_from_b35 + jmp b21 + //SEG126 main::@21 + b21: + //SEG127 [55] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ) -- vbuz1=vbuz2 + lda key + sta keyboard_key_pressed.key + //SEG128 [56] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ) + //SEG129 [115] phi from main::@21 to keyboard_key_pressed [phi:main::@21->keyboard_key_pressed] + keyboard_key_pressed_from_b21: + //SEG130 [115] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@21->keyboard_key_pressed#0] -- register_copy + jsr keyboard_key_pressed + //SEG131 [57] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return + sta keyboard_key_pressed.return_14 + jmp b36 + //SEG132 main::@36 + b36: + //SEG133 [58] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ) -- vbuz1=vbuz2 + lda keyboard_key_pressed.return_14 + sta pressed + //SEG134 [59] phi from main::@36 to main::@11 [phi:main::@36->main::@11] + b11_from_b36: + //SEG135 [59] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@36->main::@11#0] -- register_copy + jmp b11 + //SEG136 [59] phi from main::@35 to main::@11 [phi:main::@35->main::@11] + b11_from_b35: + //SEG137 [59] phi (byte) main::pressed#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@35->main::@11#0] -- vbuz1=vbuc1 + lda #0 + sta pressed + jmp b11 + //SEG138 main::@11 + b11: + //SEG139 [60] if((byte) main::pressed#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@12 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) -- vbuz1_eq_0_then_la1 + lda pressed + beq b12 + jmp b22 + //SEG140 main::@22 + b22: + //SEG141 [61] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#12 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ) -- vbuz1=vbuz2 + lda cur_pos + sta plot_chargen.pos + //SEG142 [62] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ) -- vbuz1=vbuz2 + lda ch + sta plot_chargen.ch + //SEG143 [63] (byte) plot_chargen::shift#1 ← (byte) main::shift#10 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ) -- vbuz1=vbuz2 + lda shift + sta plot_chargen.shift + //SEG144 [64] call plot_chargen param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + //SEG145 [73] phi from main::@22 to plot_chargen [phi:main::@22->plot_chargen] + plot_chargen_from_b22: + //SEG146 [73] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#1 [phi:main::@22->plot_chargen#0] -- register_copy + //SEG147 [73] phi (byte) plot_chargen::shift#2 = (byte) plot_chargen::shift#1 [phi:main::@22->plot_chargen#1] -- register_copy + //SEG148 [73] phi (byte) plot_chargen::ch#2 = (byte) plot_chargen::ch#1 [phi:main::@22->plot_chargen#2] -- register_copy + jsr plot_chargen + jmp b12 + //SEG149 main::@12 + b12: + //SEG150 [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) -- vbuz1=_inc_vbuz1 + inc ch + //SEG151 [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto main::@10 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ch + cmp #$40 + bne b10_from_b12 + jmp b23 + //SEG152 main::@23 + b23: + //SEG153 [67] if(true) goto main::@3 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) -- true_then_la1 + jmp b3_from_b23 + jmp breturn + //SEG154 main::@return + breturn: + //SEG155 [68] return [ ] ( main:2 [ ] ) + rts + //SEG156 [69] phi from main::@33 to main::@44 [phi:main::@33->main::@44] + b44_from_b33: + jmp b44 + //SEG157 main::@44 + b44: + //SEG158 [42] phi from main::@44 to main::@7 [phi:main::@44->main::@7] + b7_from_b44: + //SEG159 [42] phi (byte) main::cur_pos#12 = (byte) main::cur_pos#18 [phi:main::@44->main::@7#0] -- register_copy + jmp b7 + //SEG160 [70] phi from main::@32 to main::@43 [phi:main::@32->main::@43] + b43_from_b32: + jmp b43 + //SEG161 main::@43 + b43: + //SEG162 [37] phi from main::@43 to main::@6 [phi:main::@43->main::@6] + b6_from_b43: + //SEG163 [37] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@43->main::@6#0] -- register_copy + jmp b6 + //SEG164 [71] phi from main::@31 to main::@42 [phi:main::@31->main::@42] + b42_from_b31: + jmp b42 + //SEG165 main::@42 + b42: + //SEG166 [32] phi from main::@42 to main::@5 [phi:main::@42->main::@5] + b5_from_b42: + //SEG167 [32] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@42->main::@5#0] -- register_copy + jmp b5 + //SEG168 [72] phi from main::@30 to main::@41 [phi:main::@30->main::@41] + b41_from_b30: + jmp b41 + //SEG169 main::@41 + b41: + //SEG170 [27] phi from main::@41 to main::@4 [phi:main::@41->main::@4] + b4_from_b41: + //SEG171 [27] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@41->main::@4#0] -- register_copy + jmp b4 + str: .text "f1@" + str1: .text "f3@" + str2: .text "f5@" + str3: .text "f7@" +} +//SEG172 plot_chargen +plot_chargen: { + .label _0 = $2c + .label _1 = $2e + .label _8 = $32 + .label _10 = $34 + .label pos = $b + .label ch = 9 + .label shift = $a + .label chargen = $c + .label sc = $10 + .label bits = $f + .label x = $12 + .label y = $e + .label c = $13 + //SEG173 asm { sei } + sei + //SEG174 [75] (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) -- vwuz1=_word_vbuz2 + lda ch + sta _0 + lda #0 + sta _0+1 + //SEG175 [76] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) -- vwuz1=vwuz2_rol_3 + lda _0 + asl + sta _1 + lda _0+1 + rol + sta _1+1 + asl _1 + rol _1+1 + asl _1 + rol _1+1 + //SEG176 [77] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) -- pbuz1=pbuc1_plus_vwuz2 + lda _1 + clc + adc #CHARGEN + sta chargen+1 + //SEG177 [78] if((byte) plot_chargen::shift#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@1 [ plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) -- vbuz1_eq_0_then_la1 + lda shift + beq b1_from_plot_chargen + jmp b5 + //SEG178 plot_chargen::@5 + b5: + //SEG179 [79] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word/signed word/dword/signed dword) 4096 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 + clc + lda chargen + adc #<$1000 + sta chargen + lda chargen+1 + adc #>$1000 + sta chargen+1 + //SEG180 [80] phi from plot_chargen plot_chargen::@5 to plot_chargen::@1 [phi:plot_chargen/plot_chargen::@5->plot_chargen::@1] + b1_from_plot_chargen: + b1_from_b5: + //SEG181 [80] phi (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@5->plot_chargen::@1#0] -- register_copy + jmp b1 + //SEG182 plot_chargen::@1 + b1: + //SEG183 [81] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) -- _deref_pbuc1=vbuc2 + lda #$32 + sta PROCPORT + //SEG184 [82] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 [ plot_chargen::chargen#5 mul8u::a#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::a#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#1 ] ) -- vbuz1=vbuz2 + lda pos + sta mul8u.a + //SEG185 [83] call mul8u param-assignment [ plot_chargen::chargen#5 mul8u::res#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + //SEG186 [105] phi from plot_chargen::@1 to mul8u [phi:plot_chargen::@1->mul8u] + mul8u_from_b1: + jsr mul8u + //SEG187 [84] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) -- vwuz1=vwuz2 + lda mul8u.res + sta mul8u.return + lda mul8u.res+1 + sta mul8u.return+1 + jmp b9 + //SEG188 plot_chargen::@9 + b9: + //SEG189 [85] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) -- vwuz1=vwuz2 + lda mul8u.return + sta _8 + lda mul8u.return+1 + sta _8+1 + //SEG190 [86] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) -- pbuz1=pbuc1_plus_vwuz2 + lda _8 + clc + adc #SCREEN+$28+1 + sta sc+1 + //SEG191 [87] phi from plot_chargen::@9 to plot_chargen::@2 [phi:plot_chargen::@9->plot_chargen::@2] + b2_from_b9: + //SEG192 [87] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@9->plot_chargen::@2#0] -- register_copy + //SEG193 [87] phi (byte) plot_chargen::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plot_chargen::@9->plot_chargen::@2#1] -- vbuz1=vbuc1 + lda #0 + sta y + jmp b2 + //SEG194 [87] phi from plot_chargen::@7 to plot_chargen::@2 [phi:plot_chargen::@7->plot_chargen::@2] + b2_from_b7: + //SEG195 [87] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@2#0] -- register_copy + //SEG196 [87] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@2#1] -- register_copy + jmp b2 + //SEG197 plot_chargen::@2 + b2: + //SEG198 [88] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) -- vbuz1=pbuz2_derefidx_vbuz3 + ldy y + lda (chargen),y + sta bits + //SEG199 [89] phi from plot_chargen::@2 to plot_chargen::@3 [phi:plot_chargen::@2->plot_chargen::@3] + b3_from_b2: + //SEG200 [89] phi (byte) plot_chargen::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plot_chargen::@2->plot_chargen::@3#0] -- vbuz1=vbuc1 + lda #0 + sta x + //SEG201 [89] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@2->plot_chargen::@3#1] -- register_copy + //SEG202 [89] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@2->plot_chargen::@3#2] -- register_copy + jmp b3 + //SEG203 [89] phi from plot_chargen::@4 to plot_chargen::@3 [phi:plot_chargen::@4->plot_chargen::@3] + b3_from_b4: + //SEG204 [89] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@4->plot_chargen::@3#0] -- register_copy + //SEG205 [89] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@4->plot_chargen::@3#1] -- register_copy + //SEG206 [89] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@4->plot_chargen::@3#2] -- register_copy + jmp b3 + //SEG207 plot_chargen::@3 + b3: + //SEG208 [90] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda #$80 + and bits + sta _10 + //SEG209 [91] if((byte~) plot_chargen::$10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@4 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) -- vbuz1_eq_0_then_la1 + lda _10 + beq b4_from_b3 + //SEG210 [92] phi from plot_chargen::@3 to plot_chargen::@6 [phi:plot_chargen::@3->plot_chargen::@6] + b6_from_b3: + jmp b6 + //SEG211 plot_chargen::@6 + b6: + //SEG212 [93] phi from plot_chargen::@6 to plot_chargen::@4 [phi:plot_chargen::@6->plot_chargen::@4] + b4_from_b6: + //SEG213 [93] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@4#0] -- vbuz1=vbuc1 + lda #'*' + sta c + jmp b4 + //SEG214 [93] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4] + b4_from_b3: + //SEG215 [93] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuz1=vbuc1 + lda #'.' + sta c + jmp b4 + //SEG216 plot_chargen::@4 + b4: + //SEG217 [94] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) -- _deref_pbuz1=vbuz2 + lda c + ldy #0 + sta (sc),y + //SEG218 [95] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG219 [96] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ) -- vbuz1=vbuz1_rol_1 + asl bits + //SEG220 [97] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) -- vbuz1=_inc_vbuz1 + inc x + //SEG221 [98] if((byte) plot_chargen::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda x + cmp #8 + bne b3_from_b4 + jmp b7 + //SEG222 plot_chargen::@7 + b7: + //SEG223 [99] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) 32 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda sc + clc + adc #$20 + sta sc + bcc !+ + inc sc+1 + !: + //SEG224 [100] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) -- vbuz1=_inc_vbuz1 + inc y + //SEG225 [101] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda y + cmp #8 + bne b2_from_b7 + jmp b8 + //SEG226 plot_chargen::@8 + b8: + //SEG227 [102] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) -- _deref_pbuc1=vbuc2 + lda #$37 + sta PROCPORT + //SEG228 asm { cli } + cli + jmp breturn + //SEG229 plot_chargen::@return + breturn: + //SEG230 [104] return [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + rts +} +//SEG231 mul8u +mul8u: { + .const b = $a + .label _1 = $35 + .label a = $14 + .label mb = $17 + .label res = $15 + .label return = $30 + //SEG232 [106] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + b1_from_mul8u: + //SEG233 [106] phi (word) mul8u::mb#2 = ((word))(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + lda #b + sta mb+1 + //SEG234 [106] phi (word) mul8u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + lda #<0 + sta res + lda #>0 + sta res+1 + //SEG235 [106] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy + jmp b1 + //SEG236 mul8u::@1 + b1: + //SEG237 [107] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) -- vbuz1_neq_0_then_la1 + lda a + bne b2 + jmp breturn + //SEG238 mul8u::@return + breturn: + //SEG239 [108] return [ mul8u::res#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + rts + //SEG240 mul8u::@2 + b2: + //SEG241 [109] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and a + sta _1 + //SEG242 [110] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) -- vbuz1_eq_0_then_la1 + lda _1 + beq b4_from_b2 + jmp b7 + //SEG243 mul8u::@7 + b7: + //SEG244 [111] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 + lda res + clc + adc mb + sta res + lda res+1 + adc mb+1 + sta res+1 + //SEG245 [112] phi from mul8u::@2 mul8u::@7 to mul8u::@4 [phi:mul8u::@2/mul8u::@7->mul8u::@4] + b4_from_b2: + b4_from_b7: + //SEG246 [112] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@7->mul8u::@4#0] -- register_copy + jmp b4 + //SEG247 mul8u::@4 + b4: + //SEG248 [113] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ) -- vbuz1=vbuz1_ror_1 + lsr a + //SEG249 [114] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ) -- vwuz1=vwuz1_rol_1 + asl mb + rol mb+1 + //SEG250 [106] phi from mul8u::@4 to mul8u::@1 [phi:mul8u::@4->mul8u::@1] + b1_from_b4: + //SEG251 [106] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@4->mul8u::@1#0] -- register_copy + //SEG252 [106] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@4->mul8u::@1#1] -- register_copy + //SEG253 [106] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@4->mul8u::@1#2] -- register_copy + jmp b1 +} +//SEG254 keyboard_key_pressed +keyboard_key_pressed: { + .label _1 = $38 + .label _2 = $39 + .label return = $3a + .label return_2 = $1e + .label key = $19 + .label return_10 = $20 + .label return_11 = $22 + .label return_12 = $24 + .label return_13 = $26 + .label return_14 = $2b + //SEG255 [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ) -- vbuz1=vbuz2_ror_3 + lda key + lsr + lsr + lsr + sta keyboard_matrix_read.rowid + //SEG256 [117] call keyboard_matrix_read param-assignment [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + jsr keyboard_matrix_read + //SEG257 [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ) -- vbuz1=vbuz2 + lda keyboard_matrix_read.return + sta keyboard_matrix_read.return_2 + jmp b2 + //SEG258 keyboard_key_pressed::@2 + b2: + //SEG259 [119] (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_matrix_read::return#2 [ keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ) -- vbuz1=vbuz2 + lda keyboard_matrix_read.return_2 + sta _1 + //SEG260 [120] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda #7 + and key + sta _2 + //SEG261 [121] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$1 & *((const byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 + lda _1 + ldy _2 + and keyboard_matrix_col_bitmask,y + sta return + jmp breturn + //SEG262 keyboard_key_pressed::@return + breturn: + //SEG263 [122] return [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) + rts +} +//SEG264 keyboard_matrix_read +keyboard_matrix_read: { + .label return = $3b + .label rowid = $36 + .label return_2 = $37 + //SEG265 [123] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + ldy rowid + lda keyboard_matrix_row_bitmask,y + sta CIA1_PORT_A + //SEG266 [124] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1_PORT_B + eor #$ff + sta return + jmp breturn + //SEG267 keyboard_matrix_read::@return + breturn: + //SEG268 [125] return [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + rts +} +//SEG269 keyboard_get_keycode +keyboard_get_keycode: { + .label return = $3c + .label ch = $28 + .label return_2 = $29 + //SEG270 [126] (byte) keyboard_get_keycode::return#0 ← *((const byte[]) keyboard_char_keycodes#0 + (byte) keyboard_get_keycode::ch#0) [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy ch + lda keyboard_char_keycodes,y + sta return + jmp breturn + //SEG271 keyboard_get_keycode::@return + breturn: + //SEG272 [127] return [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + rts +} +//SEG273 print_str_at +print_str_at: { + .label at = $1c + .label str = $1a + //SEG274 [129] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1] + b1_from_print_str_at: + b1_from_b2: + //SEG275 [129] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy + //SEG276 [129] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy + jmp b1 + //SEG277 print_str_at::@1 + b1: + //SEG278 [130] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG279 print_str_at::@return + breturn: + //SEG280 [131] return [ ] ( main:2::print_str_at:10 [ ] main:2::print_str_at:12 [ ] main:2::print_str_at:14 [ ] main:2::print_str_at:16 [ ] ) + rts + //SEG281 print_str_at::@2 + b2: + //SEG282 [132] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (at),y + //SEG283 [133] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 [ print_str_at::str#5 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#4 ] ) -- pbuz1=_inc_pbuz1 + inc at + bne !+ + inc at+1 + !: + //SEG284 [134] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 [ print_str_at::str#4 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#4 print_str_at::at#4 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 + keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [75] (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::shift#10 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] +Statement [76] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) always clobbers reg byte a +Statement [77] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) always clobbers reg byte a +Statement [79] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word/signed word/dword/signed dword) 4096 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) always clobbers reg byte a +Statement [81] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) always clobbers reg byte a +Statement [84] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [85] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) always clobbers reg byte a +Statement [86] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a +Statement [88] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] +Statement [90] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] +Statement [94] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::shift#10 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] +Statement [99] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) 32 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a +Statement [102] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) always clobbers reg byte a +Statement [109] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +Statement [111] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [120] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ keyboard_key_pressed::$1 ] +Statement [121] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$1 & *((const byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) always clobbers reg byte a +Statement [123] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] +Statement [124] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [130] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [132] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) always clobbers reg byte a +Statement [75] (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) always clobbers reg byte a +Statement [76] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) always clobbers reg byte a +Statement [77] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) always clobbers reg byte a +Statement [79] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word/signed word/dword/signed dword) 4096 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) always clobbers reg byte a +Statement [81] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) always clobbers reg byte a +Statement [84] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) always clobbers reg byte a +Statement [85] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) always clobbers reg byte a +Statement [86] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) always clobbers reg byte a +Statement [88] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) always clobbers reg byte a reg byte y +Statement [90] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) always clobbers reg byte a +Statement [94] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) always clobbers reg byte y +Statement [99] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) 32 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) always clobbers reg byte a +Statement [102] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) always clobbers reg byte a +Statement [109] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [111] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ) always clobbers reg byte a +Statement [120] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ) always clobbers reg byte a +Statement [121] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$1 & *((const byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) always clobbers reg byte a +Statement [123] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) always clobbers reg byte a +Statement [124] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a +Statement [130] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Statement [132] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) always clobbers reg byte a reg byte y +Potential registers zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x , +Potential registers zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] : zp ZP_BYTE:5 , reg byte x , +Potential registers zp ZP_BYTE:6 [ main::shift#10 ] : zp ZP_BYTE:6 , reg byte x , +Potential registers zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] : zp ZP_BYTE:7 , reg byte x , +Potential registers zp ZP_BYTE:8 [ main::pressed#2 main::pressed#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] : zp ZP_WORD:12 , +Potential registers zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] : zp ZP_BYTE:14 , reg byte x , +Potential registers zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] : zp ZP_BYTE:15 , reg byte x , +Potential registers zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] : zp ZP_BYTE:18 , reg byte x , +Potential registers zp ZP_BYTE:19 [ plot_chargen::c#2 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp ZP_WORD:21 , +Potential registers zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] : zp ZP_WORD:23 , +Potential registers zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] : zp ZP_WORD:26 , +Potential registers zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] : zp ZP_WORD:28 , +Potential registers zp ZP_BYTE:30 [ keyboard_key_pressed::return#2 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:31 [ main::$15 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ keyboard_key_pressed::return#10 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:33 [ main::$18 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:35 [ main::$21 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:37 [ main::$24 ] : zp ZP_BYTE:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:39 [ main::$27 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:40 [ keyboard_get_keycode::ch#0 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:41 [ keyboard_get_keycode::return#2 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:42 [ main::key#0 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:43 [ keyboard_key_pressed::return#14 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:44 [ plot_chargen::$0 ] : zp ZP_WORD:44 , +Potential registers zp ZP_WORD:46 [ plot_chargen::$1 ] : zp ZP_WORD:46 , +Potential registers zp ZP_WORD:48 [ mul8u::return#2 ] : zp ZP_WORD:48 , +Potential registers zp ZP_WORD:50 [ plot_chargen::$8 ] : zp ZP_WORD:50 , +Potential registers zp ZP_BYTE:52 [ plot_chargen::$10 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:53 [ mul8u::$1 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:54 [ keyboard_matrix_read::rowid#0 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:55 [ keyboard_matrix_read::return#2 ] : zp ZP_BYTE:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:56 [ keyboard_key_pressed::$1 ] : zp ZP_BYTE:56 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:57 [ keyboard_key_pressed::$2 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:58 [ keyboard_key_pressed::return#0 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:59 [ keyboard_matrix_read::return#0 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:60 [ keyboard_get_keycode::return#0 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plot_chargen] 20,002: zp ZP_BYTE:52 [ plot_chargen::$10 ] 17,501.75: zp ZP_BYTE:18 [ plot_chargen::x#2 plot_chargen::x#1 ] 13,098.48: zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] 12,091.42: zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] 10,001: zp ZP_BYTE:19 [ plot_chargen::c#2 ] 1,732.5: zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] 222.6: zp ZP_BYTE:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] 152.5: zp ZP_BYTE:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] 102: zp ZP_BYTE:11 [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] 52.68: zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] 4: zp ZP_WORD:44 [ plot_chargen::$0 ] 4: zp ZP_WORD:46 [ plot_chargen::$1 ] 4: zp ZP_WORD:50 [ plot_chargen::$8 ] +Uplift Scope [mul8u] 3,503.83: zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,431: zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] 2,002: zp ZP_BYTE:53 [ mul8u::$1 ] 1,670.67: zp ZP_BYTE:20 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp ZP_WORD:48 [ mul8u::return#2 ] +Uplift Scope [main] 404: zp ZP_BYTE:8 [ main::pressed#2 main::pressed#1 ] 176.75: zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] 151.5: zp ZP_BYTE:42 [ main::key#0 ] 33: zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] 27.5: zp ZP_BYTE:4 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:31 [ main::$15 ] 22: zp ZP_BYTE:33 [ main::$18 ] 22: zp ZP_BYTE:35 [ main::$21 ] 22: zp ZP_BYTE:37 [ main::$24 ] 22: zp ZP_BYTE:39 [ main::$27 ] 19.4: zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] 5.32: zp ZP_BYTE:6 [ main::shift#10 ] +Uplift Scope [keyboard_key_pressed] 223: zp ZP_BYTE:25 [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] 202: zp ZP_BYTE:43 [ keyboard_key_pressed::return#14 ] 22: zp ZP_BYTE:30 [ keyboard_key_pressed::return#2 ] 22: zp ZP_BYTE:32 [ keyboard_key_pressed::return#10 ] 22: zp ZP_BYTE:34 [ keyboard_key_pressed::return#11 ] 22: zp ZP_BYTE:36 [ keyboard_key_pressed::return#12 ] 22: zp ZP_BYTE:38 [ keyboard_key_pressed::return#13 ] 19.75: zp ZP_BYTE:58 [ keyboard_key_pressed::return#0 ] 4: zp ZP_BYTE:57 [ keyboard_key_pressed::$2 ] 2: zp ZP_BYTE:56 [ keyboard_key_pressed::$1 ] +Uplift Scope [keyboard_get_keycode] 202: zp ZP_BYTE:41 [ keyboard_get_keycode::return#2 ] 103: zp ZP_BYTE:40 [ keyboard_get_keycode::ch#0 ] 34.33: zp ZP_BYTE:60 [ keyboard_get_keycode::return#0 ] +Uplift Scope [print_str_at] 35.5: zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] 24.67: zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Uplift Scope [keyboard_matrix_read] 4: zp ZP_BYTE:54 [ keyboard_matrix_read::rowid#0 ] 4: zp ZP_BYTE:55 [ keyboard_matrix_read::return#2 ] 1.33: zp ZP_BYTE:59 [ keyboard_matrix_read::return#0 ] +Uplift Scope [] + +Uplifting [plot_chargen] best 814744 combination reg byte a [ plot_chargen::$10 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] reg byte y [ plot_chargen::shift#2 plot_chargen::shift#1 ] reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] reg byte x [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp ZP_WORD:44 [ plot_chargen::$0 ] zp ZP_WORD:46 [ plot_chargen::$1 ] zp ZP_WORD:50 [ plot_chargen::$8 ] +Uplifting [mul8u] best 809741 combination zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:23 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp ZP_WORD:48 [ mul8u::return#2 ] +Uplift attempts [main] 10000/262144 (limiting to 10000) +Uplifting [main] best 807981 combination reg byte a [ main::pressed#2 main::pressed#1 ] zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] reg byte a [ main::key#0 ] zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] zp ZP_BYTE:4 [ main::i#2 main::i#1 ] reg byte a [ main::$15 ] reg byte a [ main::$18 ] reg byte a [ main::$21 ] reg byte a [ main::$24 ] zp ZP_BYTE:39 [ main::$27 ] zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] zp ZP_BYTE:6 [ main::shift#10 ] +Limited combination testing to 10000 combinations of 262144 possible. +Uplift attempts [keyboard_key_pressed] 10000/589824 (limiting to 10000) +Uplifting [keyboard_key_pressed] best 806964 combination reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] reg byte a [ keyboard_key_pressed::return#14 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#10 ] reg byte a [ keyboard_key_pressed::return#11 ] reg byte a [ keyboard_key_pressed::return#12 ] reg byte a [ keyboard_key_pressed::return#13 ] zp ZP_BYTE:58 [ keyboard_key_pressed::return#0 ] zp ZP_BYTE:57 [ keyboard_key_pressed::$2 ] zp ZP_BYTE:56 [ keyboard_key_pressed::$1 ] +Limited combination testing to 10000 combinations of 589824 possible. +Uplifting [keyboard_get_keycode] best 805758 combination reg byte a [ keyboard_get_keycode::return#2 ] reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] +Uplifting [print_str_at] best 805758 combination zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Uplifting [keyboard_matrix_read] best 805742 combination reg byte a [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [] best 805742 combination +Attempting to uplift remaining variables inzp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +Uplifting [plot_chargen] best 805742 combination zp ZP_BYTE:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] +Uplifting [plot_chargen] best 805742 combination zp ZP_BYTE:14 [ plot_chargen::y#2 plot_chargen::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] +Uplifting [main] best 805742 combination zp ZP_BYTE:7 [ main::ch#2 main::ch#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::i#2 main::i#1 ] +Uplifting [main] best 805742 combination zp ZP_BYTE:4 [ main::i#2 main::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:39 [ main::$27 ] +Uplifting [main] best 805702 combination reg byte a [ main::$27 ] +Attempting to uplift remaining variables inzp ZP_BYTE:58 [ keyboard_key_pressed::return#0 ] +Uplifting [keyboard_key_pressed] best 805249 combination reg byte a [ keyboard_key_pressed::return#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +Uplifting [main] best 805249 combination zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::shift#10 ] +Uplifting [main] best 805249 combination zp ZP_BYTE:6 [ main::shift#10 ] +Attempting to uplift remaining variables inzp ZP_BYTE:57 [ keyboard_key_pressed::$2 ] +Uplifting [keyboard_key_pressed] best 805245 combination reg byte a [ keyboard_key_pressed::$2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:56 [ keyboard_key_pressed::$1 ] +Uplifting [keyboard_key_pressed] best 805243 combination reg byte y [ keyboard_key_pressed::$1 ] +Coalescing zero page register with common assignment [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 ] ] with [ zp ZP_WORD:46 [ plot_chargen::$1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 ] ] with [ zp ZP_WORD:50 [ plot_chargen::$8 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp ZP_WORD:48 [ mul8u::return#2 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 ] ] with [ zp ZP_WORD:44 [ plot_chargen::$0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$8 ] ] with [ zp ZP_WORD:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] ] with [ zp ZP_WORD:12 [ plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ] ] +Coalescing zero page register [ zp ZP_WORD:2 [ main::sc#2 main::sc#1 plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 ] ] with [ zp ZP_WORD:26 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] ] +Coalescing zero page register [ zp ZP_BYTE:4 [ main::i#2 main::i#1 ] ] with [ zp ZP_BYTE:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] ] +Coalescing zero page register [ zp ZP_WORD:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$8 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp ZP_WORD:28 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] ] +Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:5 [ main::shift#10 ] +Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ main::ch#2 main::ch#1 ] +Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:7 [ plot_chargen::y#2 plot_chargen::y#1 ] +Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:8 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +Allocated (was zp ZP_WORD:16) zp ZP_WORD:9 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$8 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Allocated (was zp ZP_WORD:23) zp ZP_WORD:11 [ mul8u::mb#2 mul8u::mb#1 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label CIA1_PORT_A = $dc00 + .label CIA1_PORT_B = $dc01 + .const KEY_F7 = 3 + .const KEY_F1 = 4 + .const KEY_F3 = 5 + .const KEY_F5 = 6 + .const KEY_3 = 8 + .const KEY_W = 9 + .const KEY_A = $a + .const KEY_4 = $b + .const KEY_Z = $c + .const KEY_S = $d + .const KEY_E = $e + .const KEY_LSHIFT = $f + .const KEY_5 = $10 + .const KEY_R = $11 + .const KEY_D = $12 + .const KEY_6 = $13 + .const KEY_C = $14 + .const KEY_F = $15 + .const KEY_T = $16 + .const KEY_X = $17 + .const KEY_7 = $18 + .const KEY_Y = $19 + .const KEY_G = $1a + .const KEY_8 = $1b + .const KEY_B = $1c + .const KEY_H = $1d + .const KEY_U = $1e + .const KEY_V = $1f + .const KEY_9 = $20 + .const KEY_I = $21 + .const KEY_J = $22 + .const KEY_0 = $23 + .const KEY_M = $24 + .const KEY_K = $25 + .const KEY_O = $26 + .const KEY_N = $27 + .const KEY_PLUS = $28 + .const KEY_P = $29 + .const KEY_L = $2a + .const KEY_MINUS = $2b + .const KEY_DOT = $2c + .const KEY_COLON = $2d + .const KEY_AT = $2e + .const KEY_COMMA = $2f + .const KEY_POUND = $30 + .const KEY_ASTERISK = $31 + .const KEY_SEMICOLON = $32 + .const KEY_EQUALS = $35 + .const KEY_ARROW_UP = $36 + .const KEY_SLASH = $37 + .const KEY_1 = $38 + .const KEY_ARROW_LEFT = $39 + .const KEY_2 = $3b + .const KEY_SPACE = $3c + .const KEY_Q = $3e + .label SCREEN = $400 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @12 [phi:@begin->@12] +b12_from_bbegin: + jmp b12 +//SEG4 @12 +b12: +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @12 to main [phi:@12->main] +main_from_b12: + jsr main +//SEG7 [3] phi from @12 to @end [phi:@12->@end] +bend_from_b12: + jmp bend +//SEG8 @end +bend: +//SEG9 main +main: { + .label sc = 2 + .label i = 4 + .label ch = 6 + .label cur_pos = 4 + .label shift = 5 + //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG11 [5] phi (byte*) main::sc#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta sc+1 + jmp b1 + //SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + //SEG13 [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@1->main::@1#0] -- register_copy + jmp b1 + //SEG14 main::@1 + b1: + //SEG15 [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG16 [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG17 [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) -- pbuz1_lt_pbuc1_then_la1 + lda sc+1 + cmp #>SCREEN+$3e8 + bcc b1_from_b1 + bne !+ + lda sc + cmp #main::@13] + b13_from_b1: + jmp b13 + //SEG19 main::@13 + b13: + //SEG20 [10] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG21 [128] phi from main::@13 to print_str_at [phi:main::@13->print_str_at] + print_str_at_from_b13: + //SEG22 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@13->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1 + sta print_str_at.at+1 + //SEG23 [128] phi (byte*) print_str_at::str#7 = (const string) main::str [phi:main::@13->print_str_at#1] -- pbuz1=pbuc1 + lda #str + sta print_str_at.str+1 + jsr print_str_at + //SEG24 [11] phi from main::@13 to main::@25 [phi:main::@13->main::@25] + b25_from_b13: + jmp b25 + //SEG25 main::@25 + b25: + //SEG26 [12] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG27 [128] phi from main::@25 to print_str_at [phi:main::@25->print_str_at] + print_str_at_from_b25: + //SEG28 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 10 [phi:main::@25->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$a + sta print_str_at.at+1 + //SEG29 [128] phi (byte*) print_str_at::str#7 = (const string) main::str1 [phi:main::@25->print_str_at#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str_at.str+1 + jsr print_str_at + //SEG30 [13] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + b26_from_b25: + jmp b26 + //SEG31 main::@26 + b26: + //SEG32 [14] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG33 [128] phi from main::@26 to print_str_at [phi:main::@26->print_str_at] + print_str_at_from_b26: + //SEG34 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 20 [phi:main::@26->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$14 + sta print_str_at.at+1 + //SEG35 [128] phi (byte*) print_str_at::str#7 = (const string) main::str2 [phi:main::@26->print_str_at#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str_at.str+1 + jsr print_str_at + //SEG36 [15] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + b27_from_b26: + jmp b27 + //SEG37 main::@27 + b27: + //SEG38 [16] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG39 [128] phi from main::@27 to print_str_at [phi:main::@27->print_str_at] + print_str_at_from_b27: + //SEG40 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 30 [phi:main::@27->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$1e + sta print_str_at.at+1 + //SEG41 [128] phi (byte*) print_str_at::str#7 = (const string) main::str3 [phi:main::@27->print_str_at#1] -- pbuz1=pbuc1 + lda #str3 + sta print_str_at.str+1 + jsr print_str_at + //SEG42 [17] phi from main::@27 to main::@2 [phi:main::@27->main::@2] + b2_from_b27: + //SEG43 [17] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@27->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b2 + //SEG44 [17] phi from main::@29 to main::@2 [phi:main::@29->main::@2] + b2_from_b29: + //SEG45 [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@29->main::@2#0] -- register_copy + jmp b2 + //SEG46 main::@2 + b2: + //SEG47 [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 [ main::i#2 plot_chargen::pos#0 ] ( main:2 [ main::i#2 plot_chargen::pos#0 ] ) -- vbuxx=vbuz1 + ldx i + //SEG48 [19] call plot_chargen param-assignment [ main::i#2 ] ( main:2 [ main::i#2 ] ) + //SEG49 [73] phi from main::@2 to plot_chargen [phi:main::@2->plot_chargen] + plot_chargen_from_b2: + //SEG50 [73] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#0 [phi:main::@2->plot_chargen#0] -- register_copy + //SEG51 [73] phi (byte) plot_chargen::shift#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@2->plot_chargen#1] -- vbuyy=vbuc1 + ldy #0 + //SEG52 [73] phi (byte) plot_chargen::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 32 [phi:main::@2->plot_chargen#2] -- vbuaa=vbuc1 + lda #$20 + jsr plot_chargen + jmp b29 + //SEG53 main::@29 + b29: + //SEG54 [20] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG55 [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #4 + bne b2_from_b29 + //SEG56 [22] phi from main::@29 to main::@3 [phi:main::@29->main::@3] + b3_from_b29: + //SEG57 [22] phi (byte) main::cur_pos#24 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@29->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta cur_pos + jmp b3 + //SEG58 [22] phi from main::@23 to main::@3 [phi:main::@23->main::@3] + b3_from_b23: + //SEG59 [22] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#12 [phi:main::@23->main::@3#0] -- register_copy + jmp b3 + //SEG60 main::@3 + b3: + //SEG61 [23] call keyboard_key_pressed param-assignment [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ) + //SEG62 [115] phi from main::@3 to keyboard_key_pressed [phi:main::@3->keyboard_key_pressed] + keyboard_key_pressed_from_b3: + //SEG63 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1#0 [phi:main::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F1 + jsr keyboard_key_pressed + //SEG64 [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ) + // (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + jmp b30 + //SEG65 main::@30 + b30: + //SEG66 [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 [ main::cur_pos#24 main::$15 ] ( main:2 [ main::cur_pos#24 main::$15 ] ) + // (byte~) main::$15 = (byte) keyboard_key_pressed::return#2 // register copy reg byte a + //SEG67 [26] if((byte~) main::$15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@41 [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b41_from_b30 + //SEG68 [27] phi from main::@30 to main::@4 [phi:main::@30->main::@4] + b4_from_b30: + //SEG69 [27] phi (byte) main::cur_pos#22 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@30->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta cur_pos + jmp b4 + //SEG70 main::@4 + b4: + //SEG71 [28] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ) + //SEG72 [115] phi from main::@4 to keyboard_key_pressed [phi:main::@4->keyboard_key_pressed] + keyboard_key_pressed_from_b4: + //SEG73 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3#0 [phi:main::@4->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F3 + jsr keyboard_key_pressed + //SEG74 [29] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ( main:2 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ) + // (byte) keyboard_key_pressed::return#10 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + jmp b31 + //SEG75 main::@31 + b31: + //SEG76 [30] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 [ main::cur_pos#22 main::$18 ] ( main:2 [ main::cur_pos#22 main::$18 ] ) + // (byte~) main::$18 = (byte) keyboard_key_pressed::return#10 // register copy reg byte a + //SEG77 [31] if((byte~) main::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@42 [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b42_from_b31 + //SEG78 [32] phi from main::@31 to main::@5 [phi:main::@31->main::@5] + b5_from_b31: + //SEG79 [32] phi (byte) main::cur_pos#20 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@31->main::@5#0] -- vbuz1=vbuc1 + lda #1 + sta cur_pos + jmp b5 + //SEG80 main::@5 + b5: + //SEG81 [33] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ) + //SEG82 [115] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + keyboard_key_pressed_from_b5: + //SEG83 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5#0 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F5 + jsr keyboard_key_pressed + //SEG84 [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ( main:2 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ) + // (byte) keyboard_key_pressed::return#11 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + jmp b32 + //SEG85 main::@32 + b32: + //SEG86 [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 [ main::cur_pos#20 main::$21 ] ( main:2 [ main::cur_pos#20 main::$21 ] ) + // (byte~) main::$21 = (byte) keyboard_key_pressed::return#11 // register copy reg byte a + //SEG87 [36] if((byte~) main::$21==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@43 [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b43_from_b32 + //SEG88 [37] phi from main::@32 to main::@6 [phi:main::@32->main::@6] + b6_from_b32: + //SEG89 [37] phi (byte) main::cur_pos#18 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:main::@32->main::@6#0] -- vbuz1=vbuc1 + lda #2 + sta cur_pos + jmp b6 + //SEG90 main::@6 + b6: + //SEG91 [38] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ) + //SEG92 [115] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] + keyboard_key_pressed_from_b6: + //SEG93 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7#0 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F7 + jsr keyboard_key_pressed + //SEG94 [39] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ( main:2 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ) + // (byte) keyboard_key_pressed::return#12 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + jmp b33 + //SEG95 main::@33 + b33: + //SEG96 [40] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 [ main::cur_pos#18 main::$24 ] ( main:2 [ main::cur_pos#18 main::$24 ] ) + // (byte~) main::$24 = (byte) keyboard_key_pressed::return#12 // register copy reg byte a + //SEG97 [41] if((byte~) main::$24==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@44 [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b44_from_b33 + //SEG98 [42] phi from main::@33 to main::@7 [phi:main::@33->main::@7] + b7_from_b33: + //SEG99 [42] phi (byte) main::cur_pos#12 = (byte/signed byte/word/signed word/dword/signed dword) 3 [phi:main::@33->main::@7#0] -- vbuz1=vbuc1 + lda #3 + sta cur_pos + jmp b7 + //SEG100 main::@7 + b7: + //SEG101 [43] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ) + //SEG102 [115] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed] + keyboard_key_pressed_from_b7: + //SEG103 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT#0 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_LSHIFT + jsr keyboard_key_pressed + //SEG104 [44] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ) + // (byte) keyboard_key_pressed::return#13 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + jmp b34 + //SEG105 main::@34 + b34: + //SEG106 [45] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 [ main::cur_pos#12 main::$27 ] ( main:2 [ main::cur_pos#12 main::$27 ] ) + // (byte~) main::$27 = (byte) keyboard_key_pressed::return#13 // register copy reg byte a + //SEG107 [46] if((byte~) main::$27==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@9 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b9_from_b34 + //SEG108 [47] phi from main::@34 to main::@19 [phi:main::@34->main::@19] + b19_from_b34: + jmp b19 + //SEG109 main::@19 + b19: + //SEG110 [48] phi from main::@19 to main::@9 [phi:main::@19->main::@9] + b9_from_b19: + //SEG111 [48] phi (byte) main::shift#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@19->main::@9#0] -- vbuz1=vbuc1 + lda #1 + sta shift + jmp b9 + //SEG112 [48] phi from main::@34 to main::@9 [phi:main::@34->main::@9] + b9_from_b34: + //SEG113 [48] phi (byte) main::shift#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@34->main::@9#0] -- vbuz1=vbuc1 + lda #0 + sta shift + jmp b9 + //SEG114 main::@9 + b9: + //SEG115 [49] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + b10_from_b9: + //SEG116 [49] phi (byte) main::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@9->main::@10#0] -- vbuz1=vbuc1 + lda #0 + sta ch + jmp b10 + //SEG117 [49] phi from main::@12 to main::@10 [phi:main::@12->main::@10] + b10_from_b12: + //SEG118 [49] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@12->main::@10#0] -- register_copy + jmp b10 + //SEG119 main::@10 + b10: + //SEG120 [50] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ) -- vbuxx=vbuz1 + ldx ch + //SEG121 [51] call keyboard_get_keycode param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + jsr keyboard_get_keycode + //SEG122 [52] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ) + // (byte) keyboard_get_keycode::return#2 = (byte) keyboard_get_keycode::return#0 // register copy reg byte a + jmp b35 + //SEG123 main::@35 + b35: + //SEG124 [53] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) + // (byte) main::key#0 = (byte) keyboard_get_keycode::return#2 // register copy reg byte a + //SEG125 [54] if((byte) main::key#0==(byte/signed byte/word/signed word/dword/signed dword) 63) goto main::@11 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) -- vbuaa_eq_vbuc1_then_la1 + cmp #$3f + beq b11_from_b35 + jmp b21 + //SEG126 main::@21 + b21: + //SEG127 [55] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ) -- vbuxx=vbuaa + tax + //SEG128 [56] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ) + //SEG129 [115] phi from main::@21 to keyboard_key_pressed [phi:main::@21->keyboard_key_pressed] + keyboard_key_pressed_from_b21: + //SEG130 [115] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@21->keyboard_key_pressed#0] -- register_copy + jsr keyboard_key_pressed + //SEG131 [57] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ) + // (byte) keyboard_key_pressed::return#14 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + jmp b36 + //SEG132 main::@36 + b36: + //SEG133 [58] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ) + // (byte) main::pressed#1 = (byte) keyboard_key_pressed::return#14 // register copy reg byte a + //SEG134 [59] phi from main::@36 to main::@11 [phi:main::@36->main::@11] + b11_from_b36: + //SEG135 [59] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@36->main::@11#0] -- register_copy + jmp b11 + //SEG136 [59] phi from main::@35 to main::@11 [phi:main::@35->main::@11] + b11_from_b35: + //SEG137 [59] phi (byte) main::pressed#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@35->main::@11#0] -- vbuaa=vbuc1 + lda #0 + jmp b11 + //SEG138 main::@11 + b11: + //SEG139 [60] if((byte) main::pressed#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@12 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b12 + jmp b22 + //SEG140 main::@22 + b22: + //SEG141 [61] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#12 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ) -- vbuxx=vbuz1 + ldx cur_pos + //SEG142 [62] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ) -- vbuaa=vbuz1 + lda ch + //SEG143 [63] (byte) plot_chargen::shift#1 ← (byte) main::shift#10 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ) -- vbuyy=vbuz1 + ldy shift + //SEG144 [64] call plot_chargen param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + //SEG145 [73] phi from main::@22 to plot_chargen [phi:main::@22->plot_chargen] + plot_chargen_from_b22: + //SEG146 [73] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#1 [phi:main::@22->plot_chargen#0] -- register_copy + //SEG147 [73] phi (byte) plot_chargen::shift#2 = (byte) plot_chargen::shift#1 [phi:main::@22->plot_chargen#1] -- register_copy + //SEG148 [73] phi (byte) plot_chargen::ch#2 = (byte) plot_chargen::ch#1 [phi:main::@22->plot_chargen#2] -- register_copy + jsr plot_chargen + jmp b12 + //SEG149 main::@12 + b12: + //SEG150 [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) -- vbuz1=_inc_vbuz1 + inc ch + //SEG151 [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto main::@10 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ch + cmp #$40 + bne b10_from_b12 + jmp b23 + //SEG152 main::@23 + b23: + //SEG153 [67] if(true) goto main::@3 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) -- true_then_la1 + jmp b3_from_b23 + jmp breturn + //SEG154 main::@return + breturn: + //SEG155 [68] return [ ] ( main:2 [ ] ) + rts + //SEG156 [69] phi from main::@33 to main::@44 [phi:main::@33->main::@44] + b44_from_b33: + jmp b44 + //SEG157 main::@44 + b44: + //SEG158 [42] phi from main::@44 to main::@7 [phi:main::@44->main::@7] + b7_from_b44: + //SEG159 [42] phi (byte) main::cur_pos#12 = (byte) main::cur_pos#18 [phi:main::@44->main::@7#0] -- register_copy + jmp b7 + //SEG160 [70] phi from main::@32 to main::@43 [phi:main::@32->main::@43] + b43_from_b32: + jmp b43 + //SEG161 main::@43 + b43: + //SEG162 [37] phi from main::@43 to main::@6 [phi:main::@43->main::@6] + b6_from_b43: + //SEG163 [37] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@43->main::@6#0] -- register_copy + jmp b6 + //SEG164 [71] phi from main::@31 to main::@42 [phi:main::@31->main::@42] + b42_from_b31: + jmp b42 + //SEG165 main::@42 + b42: + //SEG166 [32] phi from main::@42 to main::@5 [phi:main::@42->main::@5] + b5_from_b42: + //SEG167 [32] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@42->main::@5#0] -- register_copy + jmp b5 + //SEG168 [72] phi from main::@30 to main::@41 [phi:main::@30->main::@41] + b41_from_b30: + jmp b41 + //SEG169 main::@41 + b41: + //SEG170 [27] phi from main::@41 to main::@4 [phi:main::@41->main::@4] + b4_from_b41: + //SEG171 [27] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@41->main::@4#0] -- register_copy + jmp b4 + str: .text "f1@" + str1: .text "f3@" + str2: .text "f5@" + str3: .text "f7@" +} +//SEG172 plot_chargen +plot_chargen: { + .label _0 = 2 + .label _1 = 2 + .label _8 = 9 + .label chargen = 2 + .label sc = 9 + .label bits = 8 + .label y = 7 + //SEG173 asm { sei } + sei + //SEG174 [75] (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) -- vwuz1=_word_vbuaa + sta _0 + lda #0 + sta _0+1 + //SEG175 [76] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) -- vwuz1=vwuz1_rol_3 + asl _1 + rol _1+1 + asl _1 + rol _1+1 + asl _1 + rol _1+1 + //SEG176 [77] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) -- pbuz1=pbuc1_plus_vwuz1 + clc + lda chargen + adc #CHARGEN + sta chargen+1 + //SEG177 [78] if((byte) plot_chargen::shift#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@1 [ plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) -- vbuyy_eq_0_then_la1 + cpy #0 + beq b1_from_plot_chargen + jmp b5 + //SEG178 plot_chargen::@5 + b5: + //SEG179 [79] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word/signed word/dword/signed dword) 4096 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 + clc + lda chargen + adc #<$1000 + sta chargen + lda chargen+1 + adc #>$1000 + sta chargen+1 + //SEG180 [80] phi from plot_chargen plot_chargen::@5 to plot_chargen::@1 [phi:plot_chargen/plot_chargen::@5->plot_chargen::@1] + b1_from_plot_chargen: + b1_from_b5: + //SEG181 [80] phi (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@5->plot_chargen::@1#0] -- register_copy + jmp b1 + //SEG182 plot_chargen::@1 + b1: + //SEG183 [81] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) -- _deref_pbuc1=vbuc2 + lda #$32 + sta PROCPORT + //SEG184 [82] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 [ plot_chargen::chargen#5 mul8u::a#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::a#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#1 ] ) + // (byte) mul8u::a#1 = (byte) plot_chargen::pos#2 // register copy reg byte x + //SEG185 [83] call mul8u param-assignment [ plot_chargen::chargen#5 mul8u::res#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + //SEG186 [105] phi from plot_chargen::@1 to mul8u [phi:plot_chargen::@1->mul8u] + mul8u_from_b1: + jsr mul8u + //SEG187 [84] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) + // (word) mul8u::return#2 = (word) mul8u::res#2 // register copy zp ZP_WORD:9 + jmp b9 + //SEG188 plot_chargen::@9 + b9: + //SEG189 [85] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) + // (word~) plot_chargen::$8 = (word) mul8u::return#2 // register copy zp ZP_WORD:9 + //SEG190 [86] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) -- pbuz1=pbuc1_plus_vwuz1 + clc + lda sc + adc #SCREEN+$28+1 + sta sc+1 + //SEG191 [87] phi from plot_chargen::@9 to plot_chargen::@2 [phi:plot_chargen::@9->plot_chargen::@2] + b2_from_b9: + //SEG192 [87] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@9->plot_chargen::@2#0] -- register_copy + //SEG193 [87] phi (byte) plot_chargen::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plot_chargen::@9->plot_chargen::@2#1] -- vbuz1=vbuc1 + lda #0 + sta y + jmp b2 + //SEG194 [87] phi from plot_chargen::@7 to plot_chargen::@2 [phi:plot_chargen::@7->plot_chargen::@2] + b2_from_b7: + //SEG195 [87] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@2#0] -- register_copy + //SEG196 [87] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@2#1] -- register_copy + jmp b2 + //SEG197 plot_chargen::@2 + b2: + //SEG198 [88] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) -- vbuz1=pbuz2_derefidx_vbuz3 + ldy y + lda (chargen),y + sta bits + //SEG199 [89] phi from plot_chargen::@2 to plot_chargen::@3 [phi:plot_chargen::@2->plot_chargen::@3] + b3_from_b2: + //SEG200 [89] phi (byte) plot_chargen::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plot_chargen::@2->plot_chargen::@3#0] -- vbuxx=vbuc1 + ldx #0 + //SEG201 [89] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@2->plot_chargen::@3#1] -- register_copy + //SEG202 [89] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@2->plot_chargen::@3#2] -- register_copy + jmp b3 + //SEG203 [89] phi from plot_chargen::@4 to plot_chargen::@3 [phi:plot_chargen::@4->plot_chargen::@3] + b3_from_b4: + //SEG204 [89] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@4->plot_chargen::@3#0] -- register_copy + //SEG205 [89] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@4->plot_chargen::@3#1] -- register_copy + //SEG206 [89] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@4->plot_chargen::@3#2] -- register_copy + jmp b3 + //SEG207 plot_chargen::@3 + b3: + //SEG208 [90] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) -- vbuaa=vbuz1_band_vbuc1 + lda #$80 + and bits + //SEG209 [91] if((byte~) plot_chargen::$10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@4 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b4_from_b3 + //SEG210 [92] phi from plot_chargen::@3 to plot_chargen::@6 [phi:plot_chargen::@3->plot_chargen::@6] + b6_from_b3: + jmp b6 + //SEG211 plot_chargen::@6 + b6: + //SEG212 [93] phi from plot_chargen::@6 to plot_chargen::@4 [phi:plot_chargen::@6->plot_chargen::@4] + b4_from_b6: + //SEG213 [93] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@4#0] -- vbuaa=vbuc1 + lda #'*' + jmp b4 + //SEG214 [93] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4] + b4_from_b3: + //SEG215 [93] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuaa=vbuc1 + lda #'.' + jmp b4 + //SEG216 plot_chargen::@4 + b4: + //SEG217 [94] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (sc),y + //SEG218 [95] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG219 [96] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ) -- vbuz1=vbuz1_rol_1 + asl bits + //SEG220 [97] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG221 [98] if((byte) plot_chargen::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne b3_from_b4 + jmp b7 + //SEG222 plot_chargen::@7 + b7: + //SEG223 [99] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) 32 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda sc + clc + adc #$20 + sta sc + bcc !+ + inc sc+1 + !: + //SEG224 [100] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) -- vbuz1=_inc_vbuz1 + inc y + //SEG225 [101] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda y + cmp #8 + bne b2_from_b7 + jmp b8 + //SEG226 plot_chargen::@8 + b8: + //SEG227 [102] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) -- _deref_pbuc1=vbuc2 + lda #$37 + sta PROCPORT + //SEG228 asm { cli } + cli + jmp breturn + //SEG229 plot_chargen::@return + breturn: + //SEG230 [104] return [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + rts +} +//SEG231 mul8u +mul8u: { + .const b = $a + .label mb = $b + .label res = 9 + .label return = 9 + //SEG232 [106] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + b1_from_mul8u: + //SEG233 [106] phi (word) mul8u::mb#2 = ((word))(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + lda #b + sta mb+1 + //SEG234 [106] phi (word) mul8u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + lda #<0 + sta res + lda #>0 + sta res+1 + //SEG235 [106] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy + jmp b1 + //SEG236 mul8u::@1 + b1: + //SEG237 [107] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) -- vbuxx_neq_0_then_la1 + cpx #0 + bne b2 + jmp breturn + //SEG238 mul8u::@return + breturn: + //SEG239 [108] return [ mul8u::res#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + rts + //SEG240 mul8u::@2 + b2: + //SEG241 [109] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + //SEG242 [110] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b4_from_b2 + jmp b7 + //SEG243 mul8u::@7 + b7: + //SEG244 [111] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 + lda res + clc + adc mb + sta res + lda res+1 + adc mb+1 + sta res+1 + //SEG245 [112] phi from mul8u::@2 mul8u::@7 to mul8u::@4 [phi:mul8u::@2/mul8u::@7->mul8u::@4] + b4_from_b2: + b4_from_b7: + //SEG246 [112] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@7->mul8u::@4#0] -- register_copy + jmp b4 + //SEG247 mul8u::@4 + b4: + //SEG248 [113] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ) -- vbuxx=vbuxx_ror_1 + txa + lsr + tax + //SEG249 [114] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ) -- vwuz1=vwuz1_rol_1 + asl mb + rol mb+1 + //SEG250 [106] phi from mul8u::@4 to mul8u::@1 [phi:mul8u::@4->mul8u::@1] + b1_from_b4: + //SEG251 [106] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@4->mul8u::@1#0] -- register_copy + //SEG252 [106] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@4->mul8u::@1#1] -- register_copy + //SEG253 [106] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@4->mul8u::@1#2] -- register_copy + jmp b1 +} +//SEG254 keyboard_key_pressed +keyboard_key_pressed: { + //SEG255 [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ) -- vbuaa=vbuxx_ror_3 + txa + lsr + lsr + lsr + //SEG256 [117] call keyboard_matrix_read param-assignment [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + jsr keyboard_matrix_read + //SEG257 [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ) + // (byte) keyboard_matrix_read::return#2 = (byte) keyboard_matrix_read::return#0 // register copy reg byte a + jmp b2 + //SEG258 keyboard_key_pressed::@2 + b2: + //SEG259 [119] (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_matrix_read::return#2 [ keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ) -- vbuyy=vbuaa + tay + //SEG260 [120] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #7 + //SEG261 [121] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$1 & *((const byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) -- vbuaa=vbuyy_band_pbuc1_derefidx_vbuaa + tax + tya + and keyboard_matrix_col_bitmask,x + jmp breturn + //SEG262 keyboard_key_pressed::@return + breturn: + //SEG263 [122] return [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) + rts +} +//SEG264 keyboard_matrix_read +keyboard_matrix_read: { + //SEG265 [123] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) -- _deref_pbuc1=pbuc2_derefidx_vbuaa + tay + lda keyboard_matrix_row_bitmask,y + sta CIA1_PORT_A + //SEG266 [124] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1_PORT_B + eor #$ff + jmp breturn + //SEG267 keyboard_matrix_read::@return + breturn: + //SEG268 [125] return [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + rts +} +//SEG269 keyboard_get_keycode +keyboard_get_keycode: { + //SEG270 [126] (byte) keyboard_get_keycode::return#0 ← *((const byte[]) keyboard_char_keycodes#0 + (byte) keyboard_get_keycode::ch#0) [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx + lda keyboard_char_keycodes,x + jmp breturn + //SEG271 keyboard_get_keycode::@return + breturn: + //SEG272 [127] return [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + rts +} +//SEG273 print_str_at +print_str_at: { + .label at = 9 + .label str = 2 + //SEG274 [129] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1] + b1_from_print_str_at: + b1_from_b2: + //SEG275 [129] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy + //SEG276 [129] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy + jmp b1 + //SEG277 print_str_at::@1 + b1: + //SEG278 [130] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG279 print_str_at::@return + breturn: + //SEG280 [131] return [ ] ( main:2::print_str_at:10 [ ] main:2::print_str_at:12 [ ] main:2::print_str_at:14 [ ] main:2::print_str_at:16 [ ] ) + rts + //SEG281 print_str_at::@2 + b2: + //SEG282 [132] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (at),y + //SEG283 [133] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 [ print_str_at::str#5 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#4 ] ) -- pbuz1=_inc_pbuz1 + inc at + bne !+ + inc at+1 + !: + //SEG284 [134] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 [ print_str_at::str#4 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#4 print_str_at::at#4 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 + keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b12 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b13 +Removing instruction jmp b25 +Removing instruction jmp b26 +Removing instruction jmp b27 +Removing instruction jmp b2 +Removing instruction jmp b29 +Removing instruction jmp b3 +Removing instruction jmp b30 +Removing instruction jmp b4 +Removing instruction jmp b31 +Removing instruction jmp b5 +Removing instruction jmp b32 +Removing instruction jmp b6 +Removing instruction jmp b33 +Removing instruction jmp b7 +Removing instruction jmp b34 +Removing instruction jmp b19 +Removing instruction jmp b9 +Removing instruction jmp b10 +Removing instruction jmp b35 +Removing instruction jmp b21 +Removing instruction jmp b36 +Removing instruction jmp b11 +Removing instruction jmp b22 +Removing instruction jmp b12 +Removing instruction jmp b23 +Removing instruction jmp breturn +Removing instruction jmp b44 +Removing instruction jmp b43 +Removing instruction jmp b42 +Removing instruction jmp b41 +Removing instruction jmp b5 +Removing instruction jmp b1 +Removing instruction jmp b9 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b6 +Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b8 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b7 +Removing instruction jmp b4 +Removing instruction jmp b2 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #>0 +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b2_from_b29 with b2 +Replacing label b41_from_b30 with b41 +Replacing label b42_from_b31 with b42 +Replacing label b43_from_b32 with b43 +Replacing label b44_from_b33 with b44 +Replacing label b10_from_b12 with b10 +Replacing label b3_from_b23 with b3 +Replacing label b1_from_plot_chargen with b1 +Replacing label b3_from_b4 with b3 +Replacing label b2_from_b7 with b2 +Replacing label b4_from_b2 with b4 +Replacing label b1_from_b2 with b1 +Removing instruction bbegin: +Removing instruction b12_from_bbegin: +Removing instruction main_from_b12: +Removing instruction bend_from_b12: +Removing instruction b1_from_b1: +Removing instruction b13_from_b1: +Removing instruction print_str_at_from_b13: +Removing instruction b25_from_b13: +Removing instruction print_str_at_from_b25: +Removing instruction b26_from_b25: +Removing instruction print_str_at_from_b26: +Removing instruction b27_from_b26: +Removing instruction print_str_at_from_b27: +Removing instruction b2_from_b29: +Removing instruction b3_from_b23: +Removing instruction keyboard_key_pressed_from_b3: +Removing instruction keyboard_key_pressed_from_b4: +Removing instruction keyboard_key_pressed_from_b5: +Removing instruction keyboard_key_pressed_from_b6: +Removing instruction keyboard_key_pressed_from_b7: +Removing instruction b19_from_b34: +Removing instruction b9_from_b19: +Removing instruction b10_from_b9: +Removing instruction b10_from_b12: +Removing instruction b44_from_b33: +Removing instruction b7_from_b44: +Removing instruction b43_from_b32: +Removing instruction b6_from_b43: +Removing instruction b42_from_b31: +Removing instruction b5_from_b42: +Removing instruction b41_from_b30: +Removing instruction b4_from_b41: +Removing instruction b1_from_plot_chargen: +Removing instruction b1_from_b5: +Removing instruction b2_from_b7: +Removing instruction b3_from_b4: +Removing instruction b6_from_b3: +Removing instruction b4_from_b6: +Removing instruction b4_from_b2: +Removing instruction b4_from_b7: +Removing instruction b1_from_print_str_at: +Removing instruction b1_from_b2: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction b12: +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction b13: +Removing instruction b25: +Removing instruction b26: +Removing instruction b27: +Removing instruction b2_from_b27: +Removing instruction plot_chargen_from_b2: +Removing instruction b29: +Removing instruction b3_from_b29: +Removing instruction b30: +Removing instruction b4_from_b30: +Removing instruction b31: +Removing instruction b5_from_b31: +Removing instruction b32: +Removing instruction b6_from_b32: +Removing instruction b33: +Removing instruction b7_from_b33: +Removing instruction b34: +Removing instruction b19: +Removing instruction b35: +Removing instruction b21: +Removing instruction keyboard_key_pressed_from_b21: +Removing instruction b36: +Removing instruction b11_from_b36: +Removing instruction b22: +Removing instruction plot_chargen_from_b22: +Removing instruction b23: +Removing instruction breturn: +Removing instruction b5: +Removing instruction mul8u_from_b1: +Removing instruction b9: +Removing instruction b2_from_b9: +Removing instruction b3_from_b2: +Removing instruction b6: +Removing instruction b7: +Removing instruction b8: +Removing instruction breturn: +Removing instruction b1_from_mul8u: +Removing instruction breturn: +Removing instruction b7: +Removing instruction b1_from_b4: +Removing instruction b2: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to b4 in beq b41 +Skipping double jump to b5 in beq b42 +Skipping double jump to b6 in beq b43 +Skipping double jump to b7 in beq b44 +Succesful ASM optimization Pass5DoubleJumpElimination +Removing unreachable instruction rts +Succesful ASM optimization Pass5UnreachableCodeElimination +Relabelling long label b9_from_b34 to b8 +Relabelling long label b11_from_b35 to b13 +Relabelling long label b4_from_b3 to b5 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b10 +Removing instruction jmp b2 +Removing instruction jmp b3 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction b44: +Removing instruction b43: +Removing instruction b42: +Removing instruction b41: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction jmp b7 +Removing unreachable instruction jmp b6 +Removing unreachable instruction jmp b5 +Removing unreachable instruction jmp b4 +Succesful ASM optimization Pass5UnreachableCodeElimination + +FINAL SYMBOL TABLE +(label) @12 +(label) @begin +(label) @end +(byte*) CHARGEN +(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248 +(byte*) CIA1_PORT_A +(const byte*) CIA1_PORT_A#0 CIA1_PORT_A = ((byte*))(word/dword/signed dword) 56320 +(byte*) CIA1_PORT_B +(const byte*) CIA1_PORT_B#0 CIA1_PORT_B = ((byte*))(word/dword/signed dword) 56321 +(byte) KEY_0 +(const byte) KEY_0#0 KEY_0 = (byte/signed byte/word/signed word/dword/signed dword) 35 +(byte) KEY_1 +(const byte) KEY_1#0 KEY_1 = (byte/signed byte/word/signed word/dword/signed dword) 56 +(byte) KEY_2 +(const byte) KEY_2#0 KEY_2 = (byte/signed byte/word/signed word/dword/signed dword) 59 +(byte) KEY_3 +(const byte) KEY_3#0 KEY_3 = (byte/signed byte/word/signed word/dword/signed dword) 8 +(byte) KEY_4 +(const byte) KEY_4#0 KEY_4 = (byte/signed byte/word/signed word/dword/signed dword) 11 +(byte) KEY_5 +(const byte) KEY_5#0 KEY_5 = (byte/signed byte/word/signed word/dword/signed dword) 16 +(byte) KEY_6 +(const byte) KEY_6#0 KEY_6 = (byte/signed byte/word/signed word/dword/signed dword) 19 +(byte) KEY_7 +(const byte) KEY_7#0 KEY_7 = (byte/signed byte/word/signed word/dword/signed dword) 24 +(byte) KEY_8 +(const byte) KEY_8#0 KEY_8 = (byte/signed byte/word/signed word/dword/signed dword) 27 +(byte) KEY_9 +(const byte) KEY_9#0 KEY_9 = (byte/signed byte/word/signed word/dword/signed dword) 32 +(byte) KEY_A +(const byte) KEY_A#0 KEY_A = (byte/signed byte/word/signed word/dword/signed dword) 10 +(byte) KEY_ARROW_LEFT +(const byte) KEY_ARROW_LEFT#0 KEY_ARROW_LEFT = (byte/signed byte/word/signed word/dword/signed dword) 57 +(byte) KEY_ARROW_UP +(const byte) KEY_ARROW_UP#0 KEY_ARROW_UP = (byte/signed byte/word/signed word/dword/signed dword) 54 +(byte) KEY_ASTERISK +(const byte) KEY_ASTERISK#0 KEY_ASTERISK = (byte/signed byte/word/signed word/dword/signed dword) 49 +(byte) KEY_AT +(const byte) KEY_AT#0 KEY_AT = (byte/signed byte/word/signed word/dword/signed dword) 46 +(byte) KEY_B +(const byte) KEY_B#0 KEY_B = (byte/signed byte/word/signed word/dword/signed dword) 28 +(byte) KEY_C +(const byte) KEY_C#0 KEY_C = (byte/signed byte/word/signed word/dword/signed dword) 20 +(byte) KEY_COLON +(const byte) KEY_COLON#0 KEY_COLON = (byte/signed byte/word/signed word/dword/signed dword) 45 +(byte) KEY_COMMA +(const byte) KEY_COMMA#0 KEY_COMMA = (byte/signed byte/word/signed word/dword/signed dword) 47 +(byte) KEY_D +(const byte) KEY_D#0 KEY_D = (byte/signed byte/word/signed word/dword/signed dword) 18 +(byte) KEY_DOT +(const byte) KEY_DOT#0 KEY_DOT = (byte/signed byte/word/signed word/dword/signed dword) 44 +(byte) KEY_E +(const byte) KEY_E#0 KEY_E = (byte/signed byte/word/signed word/dword/signed dword) 14 +(byte) KEY_EQUALS +(const byte) KEY_EQUALS#0 KEY_EQUALS = (byte/signed byte/word/signed word/dword/signed dword) 53 +(byte) KEY_F +(const byte) KEY_F#0 KEY_F = (byte/signed byte/word/signed word/dword/signed dword) 21 +(byte) KEY_F1 +(const byte) KEY_F1#0 KEY_F1 = (byte/signed byte/word/signed word/dword/signed dword) 4 +(byte) KEY_F3 +(const byte) KEY_F3#0 KEY_F3 = (byte/signed byte/word/signed word/dword/signed dword) 5 +(byte) KEY_F5 +(const byte) KEY_F5#0 KEY_F5 = (byte/signed byte/word/signed word/dword/signed dword) 6 +(byte) KEY_F7 +(const byte) KEY_F7#0 KEY_F7 = (byte/signed byte/word/signed word/dword/signed dword) 3 +(byte) KEY_G +(const byte) KEY_G#0 KEY_G = (byte/signed byte/word/signed word/dword/signed dword) 26 +(byte) KEY_H +(const byte) KEY_H#0 KEY_H = (byte/signed byte/word/signed word/dword/signed dword) 29 +(byte) KEY_I +(const byte) KEY_I#0 KEY_I = (byte/signed byte/word/signed word/dword/signed dword) 33 +(byte) KEY_J +(const byte) KEY_J#0 KEY_J = (byte/signed byte/word/signed word/dword/signed dword) 34 +(byte) KEY_K +(const byte) KEY_K#0 KEY_K = (byte/signed byte/word/signed word/dword/signed dword) 37 +(byte) KEY_L +(const byte) KEY_L#0 KEY_L = (byte/signed byte/word/signed word/dword/signed dword) 42 +(byte) KEY_LSHIFT +(const byte) KEY_LSHIFT#0 KEY_LSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 15 +(byte) KEY_M +(const byte) KEY_M#0 KEY_M = (byte/signed byte/word/signed word/dword/signed dword) 36 +(byte) KEY_MINUS +(const byte) KEY_MINUS#0 KEY_MINUS = (byte/signed byte/word/signed word/dword/signed dword) 43 +(byte) KEY_N +(const byte) KEY_N#0 KEY_N = (byte/signed byte/word/signed word/dword/signed dword) 39 +(byte) KEY_O +(const byte) KEY_O#0 KEY_O = (byte/signed byte/word/signed word/dword/signed dword) 38 +(byte) KEY_P +(const byte) KEY_P#0 KEY_P = (byte/signed byte/word/signed word/dword/signed dword) 41 +(byte) KEY_PLUS +(const byte) KEY_PLUS#0 KEY_PLUS = (byte/signed byte/word/signed word/dword/signed dword) 40 +(byte) KEY_POUND +(const byte) KEY_POUND#0 KEY_POUND = (byte/signed byte/word/signed word/dword/signed dword) 48 +(byte) KEY_Q +(const byte) KEY_Q#0 KEY_Q = (byte/signed byte/word/signed word/dword/signed dword) 62 +(byte) KEY_R +(const byte) KEY_R#0 KEY_R = (byte/signed byte/word/signed word/dword/signed dword) 17 +(byte) KEY_S +(const byte) KEY_S#0 KEY_S = (byte/signed byte/word/signed word/dword/signed dword) 13 +(byte) KEY_SEMICOLON +(const byte) KEY_SEMICOLON#0 KEY_SEMICOLON = (byte/signed byte/word/signed word/dword/signed dword) 50 +(byte) KEY_SLASH +(const byte) KEY_SLASH#0 KEY_SLASH = (byte/signed byte/word/signed word/dword/signed dword) 55 +(byte) KEY_SPACE +(const byte) KEY_SPACE#0 KEY_SPACE = (byte/signed byte/word/signed word/dword/signed dword) 60 +(byte) KEY_T +(const byte) KEY_T#0 KEY_T = (byte/signed byte/word/signed word/dword/signed dword) 22 +(byte) KEY_U +(const byte) KEY_U#0 KEY_U = (byte/signed byte/word/signed word/dword/signed dword) 30 +(byte) KEY_V +(const byte) KEY_V#0 KEY_V = (byte/signed byte/word/signed word/dword/signed dword) 31 +(byte) KEY_W +(const byte) KEY_W#0 KEY_W = (byte/signed byte/word/signed word/dword/signed dword) 9 +(byte) KEY_X +(const byte) KEY_X#0 KEY_X = (byte/signed byte/word/signed word/dword/signed dword) 23 +(byte) KEY_Y +(const byte) KEY_Y#0 KEY_Y = (byte/signed byte/word/signed word/dword/signed dword) 25 +(byte) KEY_Z +(const byte) KEY_Z#0 KEY_Z = (byte/signed byte/word/signed word/dword/signed dword) 12 +(byte*) PROCPORT +(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1 +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 +(byte[]) keyboard_char_keycodes +(const byte[]) keyboard_char_keycodes#0 keyboard_char_keycodes = { (const byte) KEY_AT#0, (const byte) KEY_A#0, (const byte) KEY_B#0, (const byte) KEY_C#0, (const byte) KEY_D#0, (const byte) KEY_E#0, (const byte) KEY_F#0, (const byte) KEY_G#0, (const byte) KEY_H#0, (const byte) KEY_I#0, (const byte) KEY_J#0, (const byte) KEY_K#0, (const byte) KEY_L#0, (const byte) KEY_M#0, (const byte) KEY_N#0, (const byte) KEY_O#0, (const byte) KEY_P#0, (const byte) KEY_Q#0, (const byte) KEY_R#0, (const byte) KEY_S#0, (const byte) KEY_T#0, (const byte) KEY_U#0, (const byte) KEY_V#0, (const byte) KEY_W#0, (const byte) KEY_X#0, (const byte) KEY_Y#0, (const byte) KEY_Z#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_POUND#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_ARROW_UP#0, (const byte) KEY_ARROW_LEFT#0, (const byte) KEY_SPACE#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_ASTERISK#0, (const byte) KEY_PLUS#0, (const byte) KEY_COMMA#0, (const byte) KEY_MINUS#0, (const byte) KEY_DOT#0, (const byte) KEY_SLASH#0, (const byte) KEY_0#0, (const byte) KEY_1#0, (const byte) KEY_2#0, (const byte) KEY_3#0, (const byte) KEY_4#0, (const byte) KEY_5#0, (const byte) KEY_6#0, (const byte) KEY_7#0, (const byte) KEY_8#0, (const byte) KEY_9#0, (const byte) KEY_COLON#0, (const byte) KEY_SEMICOLON#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_EQUALS#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63 } +(byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) +(label) keyboard_get_keycode::@return +(byte) keyboard_get_keycode::ch +(byte) keyboard_get_keycode::ch#0 reg byte x 103.0 +(byte) keyboard_get_keycode::return +(byte) keyboard_get_keycode::return#0 reg byte a 34.33333333333333 +(byte) keyboard_get_keycode::return#2 reg byte a 202.0 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$1 reg byte y 2.0 +(byte~) keyboard_key_pressed::$2 reg byte a 4.0 +(label) keyboard_key_pressed::@2 +(label) keyboard_key_pressed::@return +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::key#5 reg byte x 202.0 +(byte) keyboard_key_pressed::key#6 reg byte x 20.999999999999996 +(byte) keyboard_key_pressed::return +(byte) keyboard_key_pressed::return#0 reg byte a 19.75 +(byte) keyboard_key_pressed::return#10 reg byte a 22.0 +(byte) keyboard_key_pressed::return#11 reg byte a 22.0 +(byte) keyboard_key_pressed::return#12 reg byte a 22.0 +(byte) keyboard_key_pressed::return#13 reg byte a 22.0 +(byte) keyboard_key_pressed::return#14 reg byte a 202.0 +(byte) keyboard_key_pressed::return#2 reg byte a 22.0 +(byte[]) keyboard_matrix_col_bitmask +(const byte[]) keyboard_matrix_col_bitmask#0 keyboard_matrix_col_bitmask = { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/word/signed word/dword/signed dword) 128 } +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +(label) keyboard_matrix_read::@return +(byte) keyboard_matrix_read::return +(byte) keyboard_matrix_read::return#0 reg byte a 1.3333333333333333 +(byte) keyboard_matrix_read::return#2 reg byte a 4.0 +(byte) keyboard_matrix_read::row_pressed_bits +(byte) keyboard_matrix_read::rowid +(byte) keyboard_matrix_read::rowid#0 reg byte a 4.0 +(byte[8]) keyboard_matrix_row_bitmask +(const byte[8]) keyboard_matrix_row_bitmask#0 keyboard_matrix_row_bitmask = { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 } +(void()) main() +(byte~) main::$15 reg byte a 22.0 +(byte~) main::$18 reg byte a 22.0 +(byte~) main::$21 reg byte a 22.0 +(byte~) main::$24 reg byte a 22.0 +(byte~) main::$27 reg byte a 22.0 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@19 +(label) main::@2 +(label) main::@21 +(label) main::@22 +(label) main::@23 +(label) main::@25 +(label) main::@26 +(label) main::@27 +(label) main::@29 +(label) main::@3 +(label) main::@30 +(label) main::@31 +(label) main::@32 +(label) main::@33 +(label) main::@34 +(label) main::@35 +(label) main::@36 +(label) main::@4 +(label) main::@41 +(label) main::@42 +(label) main::@43 +(label) main::@44 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@9 +(label) main::@return +(byte) main::ch +(byte) main::ch#1 ch zp ZP_BYTE:6 151.5 +(byte) main::ch#2 ch zp ZP_BYTE:6 25.25 +(byte) main::cur_pos +(byte) main::cur_pos#12 cur_pos zp ZP_BYTE:4 4.730769230769231 +(byte) main::cur_pos#18 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::cur_pos#20 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::cur_pos#22 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::cur_pos#24 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::i +(byte) main::i#1 i zp ZP_BYTE:4 16.5 +(byte) main::i#2 i zp ZP_BYTE:4 11.0 +(byte) main::key +(byte) main::key#0 reg byte a 151.5 +(byte) main::pressed +(byte) main::pressed#1 reg byte a 202.0 +(byte) main::pressed#2 reg byte a 202.0 +(byte*) main::sc +(byte*) main::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) main::sc#2 sc zp ZP_WORD:2 16.5 +(byte) main::shift +(byte) main::shift#10 shift zp ZP_BYTE:5 5.315789473684211 +(const string) main::str str = (string) "f1@" +(const string) main::str1 str1 = (string) "f3@" +(const string) main::str2 str2 = (string) "f5@" +(const string) main::str3 str3 = (string) "f7@" +(word()) mul8u((byte) mul8u::a , (byte) mul8u::b) +(byte~) mul8u::$1 reg byte a 2002.0 +(label) mul8u::@1 +(label) mul8u::@2 +(label) mul8u::@4 +(label) mul8u::@7 +(label) mul8u::@return +(byte) mul8u::a +(byte) mul8u::a#0 reg byte x 1001.0 +(byte) mul8u::a#1 reg byte x 2.0 +(byte) mul8u::a#2 reg byte x 667.6666666666667 +(byte) mul8u::b +(const byte) mul8u::b#0 b = (byte/signed byte/word/signed word/dword/signed dword) 10 +(word) mul8u::mb +(word) mul8u::mb#1 mb zp ZP_WORD:11 2002.0 +(word) mul8u::mb#2 mb zp ZP_WORD:11 429.0 +(word) mul8u::res +(word) mul8u::res#1 res zp ZP_WORD:9 2002.0 +(word) mul8u::res#2 res zp ZP_WORD:9 500.83333333333337 +(word) mul8u::res#6 res zp ZP_WORD:9 1001.0 +(word) mul8u::return +(word) mul8u::return#2 return zp ZP_WORD:9 4.0 +(void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift) +(word~) plot_chargen::$0 $0 zp ZP_WORD:2 4.0 +(word~) plot_chargen::$1 $1 zp ZP_WORD:2 4.0 +(byte~) plot_chargen::$10 reg byte a 20002.0 +(word~) plot_chargen::$8 $8 zp ZP_WORD:9 4.0 +(label) plot_chargen::@1 +(label) plot_chargen::@2 +(label) plot_chargen::@3 +(label) plot_chargen::@4 +(label) plot_chargen::@5 +(label) plot_chargen::@6 +(label) plot_chargen::@7 +(label) plot_chargen::@8 +(label) plot_chargen::@9 +(label) plot_chargen::@return +(byte) plot_chargen::bits +(byte) plot_chargen::bits#0 bits zp ZP_BYTE:8 2002.0 +(byte) plot_chargen::bits#1 bits zp ZP_BYTE:8 6667.333333333333 +(byte) plot_chargen::bits#2 bits zp ZP_BYTE:8 4429.142857142857 +(byte) plot_chargen::c +(byte) plot_chargen::c#2 reg byte a 10001.0 +(byte) plot_chargen::ch +(byte) plot_chargen::ch#1 reg byte a 101.0 +(byte) plot_chargen::ch#2 reg byte a 51.5 +(byte*) plot_chargen::chargen +(byte*) plot_chargen::chargen#0 chargen zp ZP_WORD:2 3.0 +(byte*) plot_chargen::chargen#1 chargen zp ZP_WORD:2 4.0 +(byte*) plot_chargen::chargen#5 chargen zp ZP_WORD:2 45.68181818181818 +(byte) plot_chargen::pos +(byte) plot_chargen::pos#0 reg byte x 22.0 +(byte) plot_chargen::pos#1 reg byte x 67.33333333333333 +(byte) plot_chargen::pos#2 reg byte x 12.666666666666664 +(byte*) plot_chargen::sc +(byte*) plot_chargen::sc#0 sc zp ZP_WORD:9 4.0 +(byte*) plot_chargen::sc#1 sc zp ZP_WORD:9 5250.75 +(byte*) plot_chargen::sc#2 sc zp ZP_WORD:9 667.3333333333334 +(byte*) plot_chargen::sc#3 sc zp ZP_WORD:9 5167.333333333333 +(byte*) plot_chargen::sc#7 sc zp ZP_WORD:9 1002.0 +(byte) plot_chargen::shift +(byte) plot_chargen::shift#1 reg byte y 202.0 +(byte) plot_chargen::shift#2 reg byte y 20.599999999999998 +(byte) plot_chargen::x +(byte) plot_chargen::x#1 reg byte x 15001.5 +(byte) plot_chargen::x#2 reg byte x 2500.25 +(byte) plot_chargen::y +(byte) plot_chargen::y#1 y zp ZP_BYTE:7 1501.5 +(byte) plot_chargen::y#2 y zp ZP_BYTE:7 231.0 +(void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at) +(label) print_str_at::@1 +(label) print_str_at::@2 +(label) print_str_at::@return +(byte*) print_str_at::at +(byte*) print_str_at::at#4 at zp ZP_WORD:9 11.0 +(byte*) print_str_at::at#5 at zp ZP_WORD:9 11.666666666666666 +(byte*) print_str_at::at#7 at zp ZP_WORD:9 2.0 +(byte*) print_str_at::str +(byte*) print_str_at::str#4 str zp ZP_WORD:2 22.0 +(byte*) print_str_at::str#5 str zp ZP_WORD:2 11.5 +(byte*) print_str_at::str#7 str zp ZP_WORD:2 2.0 + +zp ZP_WORD:2 [ main::sc#2 main::sc#1 plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] +zp ZP_BYTE:4 [ main::i#2 main::i#1 main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +zp ZP_BYTE:5 [ main::shift#10 ] +zp ZP_BYTE:6 [ main::ch#2 main::ch#1 ] +reg byte a [ main::pressed#2 main::pressed#1 ] +reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] +reg byte y [ plot_chargen::shift#2 plot_chargen::shift#1 ] +reg byte x [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] +zp ZP_BYTE:7 [ plot_chargen::y#2 plot_chargen::y#1 ] +zp ZP_BYTE:8 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +zp ZP_WORD:9 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$8 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] +reg byte a [ plot_chargen::c#2 ] +reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +zp ZP_WORD:11 [ mul8u::mb#2 mul8u::mb#1 ] +reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] +reg byte a [ keyboard_key_pressed::return#2 ] +reg byte a [ main::$15 ] +reg byte a [ keyboard_key_pressed::return#10 ] +reg byte a [ main::$18 ] +reg byte a [ keyboard_key_pressed::return#11 ] +reg byte a [ main::$21 ] +reg byte a [ keyboard_key_pressed::return#12 ] +reg byte a [ main::$24 ] +reg byte a [ keyboard_key_pressed::return#13 ] +reg byte a [ main::$27 ] +reg byte x [ keyboard_get_keycode::ch#0 ] +reg byte a [ keyboard_get_keycode::return#2 ] +reg byte a [ main::key#0 ] +reg byte a [ keyboard_key_pressed::return#14 ] +reg byte a [ plot_chargen::$10 ] +reg byte a [ mul8u::$1 ] +reg byte a [ keyboard_matrix_read::rowid#0 ] +reg byte a [ keyboard_matrix_read::return#2 ] +reg byte y [ keyboard_key_pressed::$1 ] +reg byte a [ keyboard_key_pressed::$2 ] +reg byte a [ keyboard_key_pressed::return#0 ] +reg byte a [ keyboard_matrix_read::return#0 ] +reg byte a [ keyboard_get_keycode::return#0 ] + + +FINAL ASSEMBLER +Score: 628899 + +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label CIA1_PORT_A = $dc00 + .label CIA1_PORT_B = $dc01 + .const KEY_F7 = 3 + .const KEY_F1 = 4 + .const KEY_F3 = 5 + .const KEY_F5 = 6 + .const KEY_3 = 8 + .const KEY_W = 9 + .const KEY_A = $a + .const KEY_4 = $b + .const KEY_Z = $c + .const KEY_S = $d + .const KEY_E = $e + .const KEY_LSHIFT = $f + .const KEY_5 = $10 + .const KEY_R = $11 + .const KEY_D = $12 + .const KEY_6 = $13 + .const KEY_C = $14 + .const KEY_F = $15 + .const KEY_T = $16 + .const KEY_X = $17 + .const KEY_7 = $18 + .const KEY_Y = $19 + .const KEY_G = $1a + .const KEY_8 = $1b + .const KEY_B = $1c + .const KEY_H = $1d + .const KEY_U = $1e + .const KEY_V = $1f + .const KEY_9 = $20 + .const KEY_I = $21 + .const KEY_J = $22 + .const KEY_0 = $23 + .const KEY_M = $24 + .const KEY_K = $25 + .const KEY_O = $26 + .const KEY_N = $27 + .const KEY_PLUS = $28 + .const KEY_P = $29 + .const KEY_L = $2a + .const KEY_MINUS = $2b + .const KEY_DOT = $2c + .const KEY_COLON = $2d + .const KEY_AT = $2e + .const KEY_COMMA = $2f + .const KEY_POUND = $30 + .const KEY_ASTERISK = $31 + .const KEY_SEMICOLON = $32 + .const KEY_EQUALS = $35 + .const KEY_ARROW_UP = $36 + .const KEY_SLASH = $37 + .const KEY_1 = $38 + .const KEY_ARROW_LEFT = $39 + .const KEY_2 = $3b + .const KEY_SPACE = $3c + .const KEY_Q = $3e + .label SCREEN = $400 +//SEG2 @begin +//SEG3 [1] phi from @begin to @12 [phi:@begin->@12] +//SEG4 @12 +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @12 to main [phi:@12->main] + jsr main +//SEG7 [3] phi from @12 to @end [phi:@12->@end] +//SEG8 @end +//SEG9 main +main: { + .label sc = 2 + .label i = 4 + .label ch = 6 + .label cur_pos = 4 + .label shift = 5 + //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] + //SEG11 [5] phi (byte*) main::sc#2 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta sc+1 + //SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + //SEG13 [5] phi (byte*) main::sc#2 = (byte*) main::sc#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG14 main::@1 + b1: + //SEG15 [6] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG16 [7] (byte*) main::sc#1 ← ++ (byte*) main::sc#2 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG17 [8] if((byte*) main::sc#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::sc#1 ] ( main:2 [ main::sc#1 ] ) -- pbuz1_lt_pbuc1_then_la1 + lda sc+1 + cmp #>SCREEN+$3e8 + bcc b1 + bne !+ + lda sc + cmp #main::@13] + //SEG19 main::@13 + //SEG20 [10] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG21 [128] phi from main::@13 to print_str_at [phi:main::@13->print_str_at] + //SEG22 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@13->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1 + sta print_str_at.at+1 + //SEG23 [128] phi (byte*) print_str_at::str#7 = (const string) main::str [phi:main::@13->print_str_at#1] -- pbuz1=pbuc1 + lda #str + sta print_str_at.str+1 + jsr print_str_at + //SEG24 [11] phi from main::@13 to main::@25 [phi:main::@13->main::@25] + //SEG25 main::@25 + //SEG26 [12] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG27 [128] phi from main::@25 to print_str_at [phi:main::@25->print_str_at] + //SEG28 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 10 [phi:main::@25->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$a + sta print_str_at.at+1 + //SEG29 [128] phi (byte*) print_str_at::str#7 = (const string) main::str1 [phi:main::@25->print_str_at#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str_at.str+1 + jsr print_str_at + //SEG30 [13] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + //SEG31 main::@26 + //SEG32 [14] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG33 [128] phi from main::@26 to print_str_at [phi:main::@26->print_str_at] + //SEG34 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 20 [phi:main::@26->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$14 + sta print_str_at.at+1 + //SEG35 [128] phi (byte*) print_str_at::str#7 = (const string) main::str2 [phi:main::@26->print_str_at#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str_at.str+1 + jsr print_str_at + //SEG36 [15] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + //SEG37 main::@27 + //SEG38 [16] call print_str_at param-assignment [ ] ( main:2 [ ] ) + //SEG39 [128] phi from main::@27 to print_str_at [phi:main::@27->print_str_at] + //SEG40 [128] phi (byte*) print_str_at::at#7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 30 [phi:main::@27->print_str_at#0] -- pbuz1=pbuc1 + lda #SCREEN+1+$1e + sta print_str_at.at+1 + //SEG41 [128] phi (byte*) print_str_at::str#7 = (const string) main::str3 [phi:main::@27->print_str_at#1] -- pbuz1=pbuc1 + lda #str3 + sta print_str_at.str+1 + jsr print_str_at + //SEG42 [17] phi from main::@27 to main::@2 [phi:main::@27->main::@2] + //SEG43 [17] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@27->main::@2#0] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG44 [17] phi from main::@29 to main::@2 [phi:main::@29->main::@2] + //SEG45 [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@29->main::@2#0] -- register_copy + //SEG46 main::@2 + b2: + //SEG47 [18] (byte) plot_chargen::pos#0 ← (byte) main::i#2 [ main::i#2 plot_chargen::pos#0 ] ( main:2 [ main::i#2 plot_chargen::pos#0 ] ) -- vbuxx=vbuz1 + ldx i + //SEG48 [19] call plot_chargen param-assignment [ main::i#2 ] ( main:2 [ main::i#2 ] ) + //SEG49 [73] phi from main::@2 to plot_chargen [phi:main::@2->plot_chargen] + //SEG50 [73] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#0 [phi:main::@2->plot_chargen#0] -- register_copy + //SEG51 [73] phi (byte) plot_chargen::shift#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@2->plot_chargen#1] -- vbuyy=vbuc1 + ldy #0 + //SEG52 [73] phi (byte) plot_chargen::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 32 [phi:main::@2->plot_chargen#2] -- vbuaa=vbuc1 + lda #$20 + jsr plot_chargen + //SEG53 main::@29 + //SEG54 [20] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG55 [21] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #4 + bne b2 + //SEG56 [22] phi from main::@29 to main::@3 [phi:main::@29->main::@3] + //SEG57 [22] phi (byte) main::cur_pos#24 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@29->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta cur_pos + //SEG58 [22] phi from main::@23 to main::@3 [phi:main::@23->main::@3] + //SEG59 [22] phi (byte) main::cur_pos#24 = (byte) main::cur_pos#12 [phi:main::@23->main::@3#0] -- register_copy + //SEG60 main::@3 + b3: + //SEG61 [23] call keyboard_key_pressed param-assignment [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] ) + //SEG62 [115] phi from main::@3 to keyboard_key_pressed [phi:main::@3->keyboard_key_pressed] + //SEG63 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F1#0 [phi:main::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F1 + jsr keyboard_key_pressed + //SEG64 [24] (byte) keyboard_key_pressed::return#2 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ( main:2 [ main::cur_pos#24 keyboard_key_pressed::return#2 ] ) + // (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + //SEG65 main::@30 + //SEG66 [25] (byte~) main::$15 ← (byte) keyboard_key_pressed::return#2 [ main::cur_pos#24 main::$15 ] ( main:2 [ main::cur_pos#24 main::$15 ] ) + // (byte~) main::$15 = (byte) keyboard_key_pressed::return#2 // register copy reg byte a + //SEG67 [26] if((byte~) main::$15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@41 [ main::cur_pos#24 ] ( main:2 [ main::cur_pos#24 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b4 + //SEG68 [27] phi from main::@30 to main::@4 [phi:main::@30->main::@4] + //SEG69 [27] phi (byte) main::cur_pos#22 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@30->main::@4#0] -- vbuz1=vbuc1 + lda #0 + sta cur_pos + //SEG70 main::@4 + b4: + //SEG71 [28] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#22 ] ) + //SEG72 [115] phi from main::@4 to keyboard_key_pressed [phi:main::@4->keyboard_key_pressed] + //SEG73 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F3#0 [phi:main::@4->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F3 + jsr keyboard_key_pressed + //SEG74 [29] (byte) keyboard_key_pressed::return#10 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ( main:2 [ main::cur_pos#22 keyboard_key_pressed::return#10 ] ) + // (byte) keyboard_key_pressed::return#10 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + //SEG75 main::@31 + //SEG76 [30] (byte~) main::$18 ← (byte) keyboard_key_pressed::return#10 [ main::cur_pos#22 main::$18 ] ( main:2 [ main::cur_pos#22 main::$18 ] ) + // (byte~) main::$18 = (byte) keyboard_key_pressed::return#10 // register copy reg byte a + //SEG77 [31] if((byte~) main::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@42 [ main::cur_pos#22 ] ( main:2 [ main::cur_pos#22 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b5 + //SEG78 [32] phi from main::@31 to main::@5 [phi:main::@31->main::@5] + //SEG79 [32] phi (byte) main::cur_pos#20 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@31->main::@5#0] -- vbuz1=vbuc1 + lda #1 + sta cur_pos + //SEG80 main::@5 + b5: + //SEG81 [33] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#20 ] ) + //SEG82 [115] phi from main::@5 to keyboard_key_pressed [phi:main::@5->keyboard_key_pressed] + //SEG83 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F5#0 [phi:main::@5->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F5 + jsr keyboard_key_pressed + //SEG84 [34] (byte) keyboard_key_pressed::return#11 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ( main:2 [ main::cur_pos#20 keyboard_key_pressed::return#11 ] ) + // (byte) keyboard_key_pressed::return#11 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + //SEG85 main::@32 + //SEG86 [35] (byte~) main::$21 ← (byte) keyboard_key_pressed::return#11 [ main::cur_pos#20 main::$21 ] ( main:2 [ main::cur_pos#20 main::$21 ] ) + // (byte~) main::$21 = (byte) keyboard_key_pressed::return#11 // register copy reg byte a + //SEG87 [36] if((byte~) main::$21==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@43 [ main::cur_pos#20 ] ( main:2 [ main::cur_pos#20 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b6 + //SEG88 [37] phi from main::@32 to main::@6 [phi:main::@32->main::@6] + //SEG89 [37] phi (byte) main::cur_pos#18 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:main::@32->main::@6#0] -- vbuz1=vbuc1 + lda #2 + sta cur_pos + //SEG90 main::@6 + b6: + //SEG91 [38] call keyboard_key_pressed param-assignment [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ( main:2 [ keyboard_key_pressed::return#0 main::cur_pos#18 ] ) + //SEG92 [115] phi from main::@6 to keyboard_key_pressed [phi:main::@6->keyboard_key_pressed] + //SEG93 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_F7#0 [phi:main::@6->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_F7 + jsr keyboard_key_pressed + //SEG94 [39] (byte) keyboard_key_pressed::return#12 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ( main:2 [ main::cur_pos#18 keyboard_key_pressed::return#12 ] ) + // (byte) keyboard_key_pressed::return#12 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + //SEG95 main::@33 + //SEG96 [40] (byte~) main::$24 ← (byte) keyboard_key_pressed::return#12 [ main::cur_pos#18 main::$24 ] ( main:2 [ main::cur_pos#18 main::$24 ] ) + // (byte~) main::$24 = (byte) keyboard_key_pressed::return#12 // register copy reg byte a + //SEG97 [41] if((byte~) main::$24==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@44 [ main::cur_pos#18 ] ( main:2 [ main::cur_pos#18 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b7 + //SEG98 [42] phi from main::@33 to main::@7 [phi:main::@33->main::@7] + //SEG99 [42] phi (byte) main::cur_pos#12 = (byte/signed byte/word/signed word/dword/signed dword) 3 [phi:main::@33->main::@7#0] -- vbuz1=vbuc1 + lda #3 + sta cur_pos + //SEG100 main::@7 + b7: + //SEG101 [43] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] ) + //SEG102 [115] phi from main::@7 to keyboard_key_pressed [phi:main::@7->keyboard_key_pressed] + //SEG103 [115] phi (byte) keyboard_key_pressed::key#6 = (const byte) KEY_LSHIFT#0 [phi:main::@7->keyboard_key_pressed#0] -- vbuxx=vbuc1 + ldx #KEY_LSHIFT + jsr keyboard_key_pressed + //SEG104 [44] (byte) keyboard_key_pressed::return#13 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#13 ] ) + // (byte) keyboard_key_pressed::return#13 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + //SEG105 main::@34 + //SEG106 [45] (byte~) main::$27 ← (byte) keyboard_key_pressed::return#13 [ main::cur_pos#12 main::$27 ] ( main:2 [ main::cur_pos#12 main::$27 ] ) + // (byte~) main::$27 = (byte) keyboard_key_pressed::return#13 // register copy reg byte a + //SEG107 [46] if((byte~) main::$27==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@9 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b8 + //SEG108 [47] phi from main::@34 to main::@19 [phi:main::@34->main::@19] + //SEG109 main::@19 + //SEG110 [48] phi from main::@19 to main::@9 [phi:main::@19->main::@9] + //SEG111 [48] phi (byte) main::shift#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:main::@19->main::@9#0] -- vbuz1=vbuc1 + lda #1 + sta shift + jmp b9 + //SEG112 [48] phi from main::@34 to main::@9 [phi:main::@34->main::@9] + b8: + //SEG113 [48] phi (byte) main::shift#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@34->main::@9#0] -- vbuz1=vbuc1 + lda #0 + sta shift + //SEG114 main::@9 + b9: + //SEG115 [49] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + //SEG116 [49] phi (byte) main::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@9->main::@10#0] -- vbuz1=vbuc1 + lda #0 + sta ch + //SEG117 [49] phi from main::@12 to main::@10 [phi:main::@12->main::@10] + //SEG118 [49] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@12->main::@10#0] -- register_copy + //SEG119 main::@10 + b10: + //SEG120 [50] (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::ch#0 ] ) -- vbuxx=vbuz1 + ldx ch + //SEG121 [51] call keyboard_get_keycode param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + jsr keyboard_get_keycode + //SEG122 [52] (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#2 ] ) + // (byte) keyboard_get_keycode::return#2 = (byte) keyboard_get_keycode::return#0 // register copy reg byte a + //SEG123 main::@35 + //SEG124 [53] (byte) main::key#0 ← (byte) keyboard_get_keycode::return#2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) + // (byte) main::key#0 = (byte) keyboard_get_keycode::return#2 // register copy reg byte a + //SEG125 [54] if((byte) main::key#0==(byte/signed byte/word/signed word/dword/signed dword) 63) goto main::@11 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::key#0 ] ) -- vbuaa_eq_vbuc1_then_la1 + cmp #$3f + beq b13 + //SEG126 main::@21 + //SEG127 [55] (byte) keyboard_key_pressed::key#5 ← (byte) main::key#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#5 ] ) -- vbuxx=vbuaa + tax + //SEG128 [56] call keyboard_key_pressed param-assignment [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 keyboard_key_pressed::return#0 main::shift#10 main::ch#2 ] ) + //SEG129 [115] phi from main::@21 to keyboard_key_pressed [phi:main::@21->keyboard_key_pressed] + //SEG130 [115] phi (byte) keyboard_key_pressed::key#6 = (byte) keyboard_key_pressed::key#5 [phi:main::@21->keyboard_key_pressed#0] -- register_copy + jsr keyboard_key_pressed + //SEG131 [57] (byte) keyboard_key_pressed::return#14 ← (byte) keyboard_key_pressed::return#0 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#14 ] ) + // (byte) keyboard_key_pressed::return#14 = (byte) keyboard_key_pressed::return#0 // register copy reg byte a + //SEG132 main::@36 + //SEG133 [58] (byte) main::pressed#1 ← (byte) keyboard_key_pressed::return#14 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 main::pressed#1 ] ) + // (byte) main::pressed#1 = (byte) keyboard_key_pressed::return#14 // register copy reg byte a + //SEG134 [59] phi from main::@36 to main::@11 [phi:main::@36->main::@11] + //SEG135 [59] phi (byte) main::pressed#2 = (byte) main::pressed#1 [phi:main::@36->main::@11#0] -- register_copy + jmp b11 + //SEG136 [59] phi from main::@35 to main::@11 [phi:main::@35->main::@11] + b13: + //SEG137 [59] phi (byte) main::pressed#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@35->main::@11#0] -- vbuaa=vbuc1 + lda #0 + //SEG138 main::@11 + b11: + //SEG139 [60] if((byte) main::pressed#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@12 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b12 + //SEG140 main::@22 + //SEG141 [61] (byte) plot_chargen::pos#1 ← (byte) main::cur_pos#12 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 ] ) -- vbuxx=vbuz1 + ldx cur_pos + //SEG142 [62] (byte) plot_chargen::ch#1 ← (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 ] ) -- vbuaa=vbuz1 + lda ch + //SEG143 [63] (byte) plot_chargen::shift#1 ← (byte) main::shift#10 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#1 plot_chargen::ch#1 plot_chargen::shift#1 ] ) -- vbuyy=vbuz1 + ldy shift + //SEG144 [64] call plot_chargen param-assignment [ main::cur_pos#12 main::shift#10 main::ch#2 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + //SEG145 [73] phi from main::@22 to plot_chargen [phi:main::@22->plot_chargen] + //SEG146 [73] phi (byte) plot_chargen::pos#2 = (byte) plot_chargen::pos#1 [phi:main::@22->plot_chargen#0] -- register_copy + //SEG147 [73] phi (byte) plot_chargen::shift#2 = (byte) plot_chargen::shift#1 [phi:main::@22->plot_chargen#1] -- register_copy + //SEG148 [73] phi (byte) plot_chargen::ch#2 = (byte) plot_chargen::ch#1 [phi:main::@22->plot_chargen#2] -- register_copy + jsr plot_chargen + //SEG149 main::@12 + b12: + //SEG150 [65] (byte) main::ch#1 ← ++ (byte) main::ch#2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) -- vbuz1=_inc_vbuz1 + inc ch + //SEG151 [66] if((byte) main::ch#1!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto main::@10 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ( main:2 [ main::cur_pos#12 main::shift#10 main::ch#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ch + cmp #$40 + bne b10 + //SEG152 main::@23 + //SEG153 [67] if(true) goto main::@3 [ main::cur_pos#12 ] ( main:2 [ main::cur_pos#12 ] ) -- true_then_la1 + jmp b3 + //SEG154 main::@return + //SEG155 [68] return [ ] ( main:2 [ ] ) + //SEG156 [69] phi from main::@33 to main::@44 [phi:main::@33->main::@44] + //SEG157 main::@44 + //SEG158 [42] phi from main::@44 to main::@7 [phi:main::@44->main::@7] + //SEG159 [42] phi (byte) main::cur_pos#12 = (byte) main::cur_pos#18 [phi:main::@44->main::@7#0] -- register_copy + //SEG160 [70] phi from main::@32 to main::@43 [phi:main::@32->main::@43] + //SEG161 main::@43 + //SEG162 [37] phi from main::@43 to main::@6 [phi:main::@43->main::@6] + //SEG163 [37] phi (byte) main::cur_pos#18 = (byte) main::cur_pos#20 [phi:main::@43->main::@6#0] -- register_copy + //SEG164 [71] phi from main::@31 to main::@42 [phi:main::@31->main::@42] + //SEG165 main::@42 + //SEG166 [32] phi from main::@42 to main::@5 [phi:main::@42->main::@5] + //SEG167 [32] phi (byte) main::cur_pos#20 = (byte) main::cur_pos#22 [phi:main::@42->main::@5#0] -- register_copy + //SEG168 [72] phi from main::@30 to main::@41 [phi:main::@30->main::@41] + //SEG169 main::@41 + //SEG170 [27] phi from main::@41 to main::@4 [phi:main::@41->main::@4] + //SEG171 [27] phi (byte) main::cur_pos#22 = (byte) main::cur_pos#24 [phi:main::@41->main::@4#0] -- register_copy + str: .text "f1@" + str1: .text "f3@" + str2: .text "f5@" + str3: .text "f7@" +} +//SEG172 plot_chargen +plot_chargen: { + .label _0 = 2 + .label _1 = 2 + .label _8 = 9 + .label chargen = 2 + .label sc = 9 + .label bits = 8 + .label y = 7 + //SEG173 asm { sei } + sei + //SEG174 [75] (word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$0 ] ) -- vwuz1=_word_vbuaa + sta _0 + lda #0 + sta _0+1 + //SEG175 [76] (word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::$1 ] ) -- vwuz1=vwuz1_rol_3 + asl _1 + rol _1+1 + asl _1 + rol _1+1 + asl _1 + rol _1+1 + //SEG176 [77] (byte*) plot_chargen::chargen#0 ← (const byte*) CHARGEN#0 + (word~) plot_chargen::$1 [ plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::shift#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) -- pbuz1=pbuc1_plus_vwuz1 + clc + lda chargen + adc #CHARGEN + sta chargen+1 + //SEG177 [78] if((byte) plot_chargen::shift#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@1 [ plot_chargen::pos#2 plot_chargen::chargen#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#0 ] ) -- vbuyy_eq_0_then_la1 + cpy #0 + beq b1 + //SEG178 plot_chargen::@5 + //SEG179 [79] (byte*) plot_chargen::chargen#1 ← (byte*) plot_chargen::chargen#0 + (word/signed word/dword/signed dword) 4096 [ plot_chargen::pos#2 plot_chargen::chargen#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 + clc + lda chargen + adc #<$1000 + sta chargen + lda chargen+1 + adc #>$1000 + sta chargen+1 + //SEG180 [80] phi from plot_chargen plot_chargen::@5 to plot_chargen::@1 [phi:plot_chargen/plot_chargen::@5->plot_chargen::@1] + //SEG181 [80] phi (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#0 [phi:plot_chargen/plot_chargen::@5->plot_chargen::@1#0] -- register_copy + //SEG182 plot_chargen::@1 + b1: + //SEG183 [81] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 50 [ plot_chargen::pos#2 plot_chargen::chargen#5 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::pos#2 plot_chargen::chargen#5 ] ) -- _deref_pbuc1=vbuc2 + lda #$32 + sta PROCPORT + //SEG184 [82] (byte) mul8u::a#1 ← (byte) plot_chargen::pos#2 [ plot_chargen::chargen#5 mul8u::a#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::a#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#1 ] ) + // (byte) mul8u::a#1 = (byte) plot_chargen::pos#2 // register copy reg byte x + //SEG185 [83] call mul8u param-assignment [ plot_chargen::chargen#5 mul8u::res#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + //SEG186 [105] phi from plot_chargen::@1 to mul8u [phi:plot_chargen::@1->mul8u] + jsr mul8u + //SEG187 [84] (word) mul8u::return#2 ← (word) mul8u::res#2 [ plot_chargen::chargen#5 mul8u::return#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 mul8u::return#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::return#2 ] ) + // (word) mul8u::return#2 = (word) mul8u::res#2 // register copy zp ZP_WORD:9 + //SEG188 plot_chargen::@9 + //SEG189 [85] (word~) plot_chargen::$8 ← (word) mul8u::return#2 [ plot_chargen::chargen#5 plot_chargen::$8 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::$8 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::$8 ] ) + // (word~) plot_chargen::$8 = (word) mul8u::return#2 // register copy zp ZP_WORD:9 + //SEG190 [86] (byte*) plot_chargen::sc#0 ← (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 1 + (word~) plot_chargen::$8 [ plot_chargen::chargen#5 plot_chargen::sc#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::sc#0 ] ) -- pbuz1=pbuc1_plus_vwuz1 + clc + lda sc + adc #SCREEN+$28+1 + sta sc+1 + //SEG191 [87] phi from plot_chargen::@9 to plot_chargen::@2 [phi:plot_chargen::@9->plot_chargen::@2] + //SEG192 [87] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#0 [phi:plot_chargen::@9->plot_chargen::@2#0] -- register_copy + //SEG193 [87] phi (byte) plot_chargen::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plot_chargen::@9->plot_chargen::@2#1] -- vbuz1=vbuc1 + lda #0 + sta y + //SEG194 [87] phi from plot_chargen::@7 to plot_chargen::@2 [phi:plot_chargen::@7->plot_chargen::@2] + //SEG195 [87] phi (byte*) plot_chargen::sc#7 = (byte*) plot_chargen::sc#2 [phi:plot_chargen::@7->plot_chargen::@2#0] -- register_copy + //SEG196 [87] phi (byte) plot_chargen::y#2 = (byte) plot_chargen::y#1 [phi:plot_chargen::@7->plot_chargen::@2#1] -- register_copy + //SEG197 plot_chargen::@2 + b2: + //SEG198 [88] (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#5 + (byte) plot_chargen::y#2) [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#7 plot_chargen::bits#0 ] ) -- vbuz1=pbuz2_derefidx_vbuz3 + ldy y + lda (chargen),y + sta bits + //SEG199 [89] phi from plot_chargen::@2 to plot_chargen::@3 [phi:plot_chargen::@2->plot_chargen::@3] + //SEG200 [89] phi (byte) plot_chargen::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plot_chargen::@2->plot_chargen::@3#0] -- vbuxx=vbuc1 + ldx #0 + //SEG201 [89] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#7 [phi:plot_chargen::@2->plot_chargen::@3#1] -- register_copy + //SEG202 [89] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#0 [phi:plot_chargen::@2->plot_chargen::@3#2] -- register_copy + //SEG203 [89] phi from plot_chargen::@4 to plot_chargen::@3 [phi:plot_chargen::@4->plot_chargen::@3] + //SEG204 [89] phi (byte) plot_chargen::x#2 = (byte) plot_chargen::x#1 [phi:plot_chargen::@4->plot_chargen::@3#0] -- register_copy + //SEG205 [89] phi (byte*) plot_chargen::sc#3 = (byte*) plot_chargen::sc#1 [phi:plot_chargen::@4->plot_chargen::@3#1] -- register_copy + //SEG206 [89] phi (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#1 [phi:plot_chargen::@4->plot_chargen::@3#2] -- register_copy + //SEG207 plot_chargen::@3 + b3: + //SEG208 [90] (byte~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (byte/word/signed word/dword/signed dword) 128 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 plot_chargen::$10 ] ) -- vbuaa=vbuz1_band_vbuc1 + lda #$80 + and bits + //SEG209 [91] if((byte~) plot_chargen::$10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@4 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b5 + //SEG210 [92] phi from plot_chargen::@3 to plot_chargen::@6 [phi:plot_chargen::@3->plot_chargen::@6] + //SEG211 plot_chargen::@6 + //SEG212 [93] phi from plot_chargen::@6 to plot_chargen::@4 [phi:plot_chargen::@6->plot_chargen::@4] + //SEG213 [93] phi (byte) plot_chargen::c#2 = (byte) '*' [phi:plot_chargen::@6->plot_chargen::@4#0] -- vbuaa=vbuc1 + lda #'*' + jmp b4 + //SEG214 [93] phi from plot_chargen::@3 to plot_chargen::@4 [phi:plot_chargen::@3->plot_chargen::@4] + b5: + //SEG215 [93] phi (byte) plot_chargen::c#2 = (byte) '.' [phi:plot_chargen::@3->plot_chargen::@4#0] -- vbuaa=vbuc1 + lda #'.' + //SEG216 plot_chargen::@4 + b4: + //SEG217 [94] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::sc#3 plot_chargen::x#2 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (sc),y + //SEG218 [95] (byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#2 plot_chargen::x#2 plot_chargen::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG219 [96] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::x#2 plot_chargen::bits#1 plot_chargen::sc#1 ] ) -- vbuz1=vbuz1_rol_1 + asl bits + //SEG220 [97] (byte) plot_chargen::x#1 ← ++ (byte) plot_chargen::x#2 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG221 [98] if((byte) plot_chargen::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@3 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::bits#1 plot_chargen::sc#1 plot_chargen::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne b3 + //SEG222 plot_chargen::@7 + //SEG223 [99] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte/signed byte/word/signed word/dword/signed dword) 32 [ plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#2 plot_chargen::sc#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda sc + clc + adc #$20 + sta sc + bcc !+ + inc sc+1 + !: + //SEG224 [100] (byte) plot_chargen::y#1 ← ++ (byte) plot_chargen::y#2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) -- vbuz1=_inc_vbuz1 + inc y + //SEG225 [101] if((byte) plot_chargen::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto plot_chargen::@2 [ plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ( main:2::plot_chargen:19 [ main::i#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 plot_chargen::y#1 plot_chargen::sc#2 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda y + cmp #8 + bne b2 + //SEG226 plot_chargen::@8 + //SEG227 [102] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) 55 [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) -- _deref_pbuc1=vbuc2 + lda #$37 + sta PROCPORT + //SEG228 asm { cli } + cli + //SEG229 plot_chargen::@return + //SEG230 [104] return [ ] ( main:2::plot_chargen:19 [ main::i#2 ] main:2::plot_chargen:64 [ main::cur_pos#12 main::shift#10 main::ch#2 ] ) + rts +} +//SEG231 mul8u +mul8u: { + .const b = $a + .label mb = $b + .label res = 9 + .label return = 9 + //SEG232 [106] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + //SEG233 [106] phi (word) mul8u::mb#2 = ((word))(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + lda #b + sta mb+1 + //SEG234 [106] phi (word) mul8u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + lda #<0 + sta res + sta res+1 + //SEG235 [106] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy + //SEG236 mul8u::@1 + b1: + //SEG237 [107] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) -- vbuxx_neq_0_then_la1 + cpx #0 + bne b2 + //SEG238 mul8u::@return + //SEG239 [108] return [ mul8u::res#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 ] ) + rts + //SEG240 mul8u::@2 + b2: + //SEG241 [109] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + //SEG242 [110] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b4 + //SEG243 mul8u::@7 + //SEG244 [111] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 + lda res + clc + adc mb + sta res + lda res+1 + adc mb+1 + sta res+1 + //SEG245 [112] phi from mul8u::@2 mul8u::@7 to mul8u::@4 [phi:mul8u::@2/mul8u::@7->mul8u::@4] + //SEG246 [112] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@7->mul8u::@4#0] -- register_copy + //SEG247 mul8u::@4 + b4: + //SEG248 [113] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::mb#2 mul8u::a#0 mul8u::res#6 ] ) -- vbuxx=vbuxx_ror_1 + txa + lsr + tax + //SEG249 [114] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ( main:2::plot_chargen:19::mul8u:83 [ main::i#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] main:2::plot_chargen:64::mul8u:83 [ main::cur_pos#12 main::shift#10 main::ch#2 plot_chargen::chargen#5 mul8u::a#0 mul8u::res#6 mul8u::mb#1 ] ) -- vwuz1=vwuz1_rol_1 + asl mb + rol mb+1 + //SEG250 [106] phi from mul8u::@4 to mul8u::@1 [phi:mul8u::@4->mul8u::@1] + //SEG251 [106] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@4->mul8u::@1#0] -- register_copy + //SEG252 [106] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@4->mul8u::@1#1] -- register_copy + //SEG253 [106] phi (byte) mul8u::a#2 = (byte) mul8u::a#0 [phi:mul8u::@4->mul8u::@1#2] -- register_copy + jmp b1 +} +//SEG254 keyboard_key_pressed +keyboard_key_pressed: { + //SEG255 [116] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::key#6 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::rowid#0 ] ) -- vbuaa=vbuxx_ror_3 + txa + lsr + lsr + lsr + //SEG256 [117] call keyboard_matrix_read param-assignment [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + jsr keyboard_matrix_read + //SEG257 [118] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 [ keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#2 ] ) + // (byte) keyboard_matrix_read::return#2 = (byte) keyboard_matrix_read::return#0 // register copy reg byte a + //SEG258 keyboard_key_pressed::@2 + //SEG259 [119] (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_matrix_read::return#2 [ keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_key_pressed::$1 ] ) -- vbuyy=vbuaa + tay + //SEG260 [120] (byte~) keyboard_key_pressed::$2 ← (byte) keyboard_key_pressed::key#6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::$1 keyboard_key_pressed::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #7 + //SEG261 [121] (byte) keyboard_key_pressed::return#0 ← (byte~) keyboard_key_pressed::$1 & *((const byte[]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_key_pressed::$2) [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) -- vbuaa=vbuyy_band_pbuc1_derefidx_vbuaa + tax + tya + and keyboard_matrix_col_bitmask,x + //SEG262 keyboard_key_pressed::@return + //SEG263 [122] return [ keyboard_key_pressed::return#0 ] ( main:2::keyboard_key_pressed:23 [ main::cur_pos#24 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:28 [ main::cur_pos#22 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:38 [ main::cur_pos#18 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:43 [ main::cur_pos#12 keyboard_key_pressed::return#0 ] main:2::keyboard_key_pressed:56 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::return#0 ] ) + rts +} +//SEG264 keyboard_matrix_read +keyboard_matrix_read: { + //SEG265 [123] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 ] ) -- _deref_pbuc1=pbuc2_derefidx_vbuaa + tay + lda keyboard_matrix_row_bitmask,y + sta CIA1_PORT_A + //SEG266 [124] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1_PORT_B + eor #$ff + //SEG267 keyboard_matrix_read::@return + //SEG268 [125] return [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:23::keyboard_matrix_read:117 [ main::cur_pos#24 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:28::keyboard_matrix_read:117 [ main::cur_pos#22 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:33::keyboard_matrix_read:117 [ main::cur_pos#20 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:38::keyboard_matrix_read:117 [ main::cur_pos#18 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:43::keyboard_matrix_read:117 [ main::cur_pos#12 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] main:2::keyboard_key_pressed:56::keyboard_matrix_read:117 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_key_pressed::key#6 keyboard_matrix_read::return#0 ] ) + rts +} +//SEG269 keyboard_get_keycode +keyboard_get_keycode: { + //SEG270 [126] (byte) keyboard_get_keycode::return#0 ← *((const byte[]) keyboard_char_keycodes#0 + (byte) keyboard_get_keycode::ch#0) [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) -- vbuaa=pbuc1_derefidx_vbuxx + lda keyboard_char_keycodes,x + //SEG271 keyboard_get_keycode::@return + //SEG272 [127] return [ keyboard_get_keycode::return#0 ] ( main:2::keyboard_get_keycode:51 [ main::cur_pos#12 main::shift#10 main::ch#2 keyboard_get_keycode::return#0 ] ) + rts +} +//SEG273 print_str_at +print_str_at: { + .label at = 9 + .label str = 2 + //SEG274 [129] phi from print_str_at print_str_at::@2 to print_str_at::@1 [phi:print_str_at/print_str_at::@2->print_str_at::@1] + //SEG275 [129] phi (byte*) print_str_at::at#5 = (byte*) print_str_at::at#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#0] -- register_copy + //SEG276 [129] phi (byte*) print_str_at::str#5 = (byte*) print_str_at::str#7 [phi:print_str_at/print_str_at::@2->print_str_at::@1#1] -- register_copy + //SEG277 print_str_at::@1 + b1: + //SEG278 [130] if(*((byte*) print_str_at::str#5)!=(byte) '@') goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + //SEG279 print_str_at::@return + //SEG280 [131] return [ ] ( main:2::print_str_at:10 [ ] main:2::print_str_at:12 [ ] main:2::print_str_at:14 [ ] main:2::print_str_at:16 [ ] ) + rts + //SEG281 print_str_at::@2 + b2: + //SEG282 [132] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#5 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + sta (at),y + //SEG283 [133] (byte*) print_str_at::at#4 ← ++ (byte*) print_str_at::at#5 [ print_str_at::str#5 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#5 print_str_at::at#4 ] ) -- pbuz1=_inc_pbuz1 + inc at + bne !+ + inc at+1 + !: + //SEG284 [134] (byte*) print_str_at::str#4 ← ++ (byte*) print_str_at::str#5 [ print_str_at::str#4 print_str_at::at#4 ] ( main:2::print_str_at:10 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:12 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:14 [ print_str_at::str#4 print_str_at::at#4 ] main:2::print_str_at:16 [ print_str_at::str#4 print_str_at::at#4 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1 +} + keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f + keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80 + keyboard_char_keycodes: .byte KEY_AT, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, $3f, KEY_POUND, $3f, KEY_ARROW_UP, KEY_ARROW_LEFT, KEY_SPACE, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, $3f, KEY_ASTERISK, KEY_PLUS, KEY_COMMA, KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_COLON, KEY_SEMICOLON, $3f, KEY_EQUALS, $3f, $3f + diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.sym b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.sym new file mode 100644 index 000000000..629f56f7b --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.sym @@ -0,0 +1,345 @@ +(label) @12 +(label) @begin +(label) @end +(byte*) CHARGEN +(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248 +(byte*) CIA1_PORT_A +(const byte*) CIA1_PORT_A#0 CIA1_PORT_A = ((byte*))(word/dword/signed dword) 56320 +(byte*) CIA1_PORT_B +(const byte*) CIA1_PORT_B#0 CIA1_PORT_B = ((byte*))(word/dword/signed dword) 56321 +(byte) KEY_0 +(const byte) KEY_0#0 KEY_0 = (byte/signed byte/word/signed word/dword/signed dword) 35 +(byte) KEY_1 +(const byte) KEY_1#0 KEY_1 = (byte/signed byte/word/signed word/dword/signed dword) 56 +(byte) KEY_2 +(const byte) KEY_2#0 KEY_2 = (byte/signed byte/word/signed word/dword/signed dword) 59 +(byte) KEY_3 +(const byte) KEY_3#0 KEY_3 = (byte/signed byte/word/signed word/dword/signed dword) 8 +(byte) KEY_4 +(const byte) KEY_4#0 KEY_4 = (byte/signed byte/word/signed word/dword/signed dword) 11 +(byte) KEY_5 +(const byte) KEY_5#0 KEY_5 = (byte/signed byte/word/signed word/dword/signed dword) 16 +(byte) KEY_6 +(const byte) KEY_6#0 KEY_6 = (byte/signed byte/word/signed word/dword/signed dword) 19 +(byte) KEY_7 +(const byte) KEY_7#0 KEY_7 = (byte/signed byte/word/signed word/dword/signed dword) 24 +(byte) KEY_8 +(const byte) KEY_8#0 KEY_8 = (byte/signed byte/word/signed word/dword/signed dword) 27 +(byte) KEY_9 +(const byte) KEY_9#0 KEY_9 = (byte/signed byte/word/signed word/dword/signed dword) 32 +(byte) KEY_A +(const byte) KEY_A#0 KEY_A = (byte/signed byte/word/signed word/dword/signed dword) 10 +(byte) KEY_ARROW_LEFT +(const byte) KEY_ARROW_LEFT#0 KEY_ARROW_LEFT = (byte/signed byte/word/signed word/dword/signed dword) 57 +(byte) KEY_ARROW_UP +(const byte) KEY_ARROW_UP#0 KEY_ARROW_UP = (byte/signed byte/word/signed word/dword/signed dword) 54 +(byte) KEY_ASTERISK +(const byte) KEY_ASTERISK#0 KEY_ASTERISK = (byte/signed byte/word/signed word/dword/signed dword) 49 +(byte) KEY_AT +(const byte) KEY_AT#0 KEY_AT = (byte/signed byte/word/signed word/dword/signed dword) 46 +(byte) KEY_B +(const byte) KEY_B#0 KEY_B = (byte/signed byte/word/signed word/dword/signed dword) 28 +(byte) KEY_C +(const byte) KEY_C#0 KEY_C = (byte/signed byte/word/signed word/dword/signed dword) 20 +(byte) KEY_COLON +(const byte) KEY_COLON#0 KEY_COLON = (byte/signed byte/word/signed word/dword/signed dword) 45 +(byte) KEY_COMMA +(const byte) KEY_COMMA#0 KEY_COMMA = (byte/signed byte/word/signed word/dword/signed dword) 47 +(byte) KEY_D +(const byte) KEY_D#0 KEY_D = (byte/signed byte/word/signed word/dword/signed dword) 18 +(byte) KEY_DOT +(const byte) KEY_DOT#0 KEY_DOT = (byte/signed byte/word/signed word/dword/signed dword) 44 +(byte) KEY_E +(const byte) KEY_E#0 KEY_E = (byte/signed byte/word/signed word/dword/signed dword) 14 +(byte) KEY_EQUALS +(const byte) KEY_EQUALS#0 KEY_EQUALS = (byte/signed byte/word/signed word/dword/signed dword) 53 +(byte) KEY_F +(const byte) KEY_F#0 KEY_F = (byte/signed byte/word/signed word/dword/signed dword) 21 +(byte) KEY_F1 +(const byte) KEY_F1#0 KEY_F1 = (byte/signed byte/word/signed word/dword/signed dword) 4 +(byte) KEY_F3 +(const byte) KEY_F3#0 KEY_F3 = (byte/signed byte/word/signed word/dword/signed dword) 5 +(byte) KEY_F5 +(const byte) KEY_F5#0 KEY_F5 = (byte/signed byte/word/signed word/dword/signed dword) 6 +(byte) KEY_F7 +(const byte) KEY_F7#0 KEY_F7 = (byte/signed byte/word/signed word/dword/signed dword) 3 +(byte) KEY_G +(const byte) KEY_G#0 KEY_G = (byte/signed byte/word/signed word/dword/signed dword) 26 +(byte) KEY_H +(const byte) KEY_H#0 KEY_H = (byte/signed byte/word/signed word/dword/signed dword) 29 +(byte) KEY_I +(const byte) KEY_I#0 KEY_I = (byte/signed byte/word/signed word/dword/signed dword) 33 +(byte) KEY_J +(const byte) KEY_J#0 KEY_J = (byte/signed byte/word/signed word/dword/signed dword) 34 +(byte) KEY_K +(const byte) KEY_K#0 KEY_K = (byte/signed byte/word/signed word/dword/signed dword) 37 +(byte) KEY_L +(const byte) KEY_L#0 KEY_L = (byte/signed byte/word/signed word/dword/signed dword) 42 +(byte) KEY_LSHIFT +(const byte) KEY_LSHIFT#0 KEY_LSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 15 +(byte) KEY_M +(const byte) KEY_M#0 KEY_M = (byte/signed byte/word/signed word/dword/signed dword) 36 +(byte) KEY_MINUS +(const byte) KEY_MINUS#0 KEY_MINUS = (byte/signed byte/word/signed word/dword/signed dword) 43 +(byte) KEY_N +(const byte) KEY_N#0 KEY_N = (byte/signed byte/word/signed word/dword/signed dword) 39 +(byte) KEY_O +(const byte) KEY_O#0 KEY_O = (byte/signed byte/word/signed word/dword/signed dword) 38 +(byte) KEY_P +(const byte) KEY_P#0 KEY_P = (byte/signed byte/word/signed word/dword/signed dword) 41 +(byte) KEY_PLUS +(const byte) KEY_PLUS#0 KEY_PLUS = (byte/signed byte/word/signed word/dword/signed dword) 40 +(byte) KEY_POUND +(const byte) KEY_POUND#0 KEY_POUND = (byte/signed byte/word/signed word/dword/signed dword) 48 +(byte) KEY_Q +(const byte) KEY_Q#0 KEY_Q = (byte/signed byte/word/signed word/dword/signed dword) 62 +(byte) KEY_R +(const byte) KEY_R#0 KEY_R = (byte/signed byte/word/signed word/dword/signed dword) 17 +(byte) KEY_S +(const byte) KEY_S#0 KEY_S = (byte/signed byte/word/signed word/dword/signed dword) 13 +(byte) KEY_SEMICOLON +(const byte) KEY_SEMICOLON#0 KEY_SEMICOLON = (byte/signed byte/word/signed word/dword/signed dword) 50 +(byte) KEY_SLASH +(const byte) KEY_SLASH#0 KEY_SLASH = (byte/signed byte/word/signed word/dword/signed dword) 55 +(byte) KEY_SPACE +(const byte) KEY_SPACE#0 KEY_SPACE = (byte/signed byte/word/signed word/dword/signed dword) 60 +(byte) KEY_T +(const byte) KEY_T#0 KEY_T = (byte/signed byte/word/signed word/dword/signed dword) 22 +(byte) KEY_U +(const byte) KEY_U#0 KEY_U = (byte/signed byte/word/signed word/dword/signed dword) 30 +(byte) KEY_V +(const byte) KEY_V#0 KEY_V = (byte/signed byte/word/signed word/dword/signed dword) 31 +(byte) KEY_W +(const byte) KEY_W#0 KEY_W = (byte/signed byte/word/signed word/dword/signed dword) 9 +(byte) KEY_X +(const byte) KEY_X#0 KEY_X = (byte/signed byte/word/signed word/dword/signed dword) 23 +(byte) KEY_Y +(const byte) KEY_Y#0 KEY_Y = (byte/signed byte/word/signed word/dword/signed dword) 25 +(byte) KEY_Z +(const byte) KEY_Z#0 KEY_Z = (byte/signed byte/word/signed word/dword/signed dword) 12 +(byte*) PROCPORT +(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1 +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 +(byte[]) keyboard_char_keycodes +(const byte[]) keyboard_char_keycodes#0 keyboard_char_keycodes = { (const byte) KEY_AT#0, (const byte) KEY_A#0, (const byte) KEY_B#0, (const byte) KEY_C#0, (const byte) KEY_D#0, (const byte) KEY_E#0, (const byte) KEY_F#0, (const byte) KEY_G#0, (const byte) KEY_H#0, (const byte) KEY_I#0, (const byte) KEY_J#0, (const byte) KEY_K#0, (const byte) KEY_L#0, (const byte) KEY_M#0, (const byte) KEY_N#0, (const byte) KEY_O#0, (const byte) KEY_P#0, (const byte) KEY_Q#0, (const byte) KEY_R#0, (const byte) KEY_S#0, (const byte) KEY_T#0, (const byte) KEY_U#0, (const byte) KEY_V#0, (const byte) KEY_W#0, (const byte) KEY_X#0, (const byte) KEY_Y#0, (const byte) KEY_Z#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_POUND#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_ARROW_UP#0, (const byte) KEY_ARROW_LEFT#0, (const byte) KEY_SPACE#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_ASTERISK#0, (const byte) KEY_PLUS#0, (const byte) KEY_COMMA#0, (const byte) KEY_MINUS#0, (const byte) KEY_DOT#0, (const byte) KEY_SLASH#0, (const byte) KEY_0#0, (const byte) KEY_1#0, (const byte) KEY_2#0, (const byte) KEY_3#0, (const byte) KEY_4#0, (const byte) KEY_5#0, (const byte) KEY_6#0, (const byte) KEY_7#0, (const byte) KEY_8#0, (const byte) KEY_9#0, (const byte) KEY_COLON#0, (const byte) KEY_SEMICOLON#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_EQUALS#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63 } +(byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) +(label) keyboard_get_keycode::@return +(byte) keyboard_get_keycode::ch +(byte) keyboard_get_keycode::ch#0 reg byte x 103.0 +(byte) keyboard_get_keycode::return +(byte) keyboard_get_keycode::return#0 reg byte a 34.33333333333333 +(byte) keyboard_get_keycode::return#2 reg byte a 202.0 +(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) +(byte~) keyboard_key_pressed::$1 reg byte y 2.0 +(byte~) keyboard_key_pressed::$2 reg byte a 4.0 +(label) keyboard_key_pressed::@2 +(label) keyboard_key_pressed::@return +(byte) keyboard_key_pressed::key +(byte) keyboard_key_pressed::key#5 reg byte x 202.0 +(byte) keyboard_key_pressed::key#6 reg byte x 20.999999999999996 +(byte) keyboard_key_pressed::return +(byte) keyboard_key_pressed::return#0 reg byte a 19.75 +(byte) keyboard_key_pressed::return#10 reg byte a 22.0 +(byte) keyboard_key_pressed::return#11 reg byte a 22.0 +(byte) keyboard_key_pressed::return#12 reg byte a 22.0 +(byte) keyboard_key_pressed::return#13 reg byte a 22.0 +(byte) keyboard_key_pressed::return#14 reg byte a 202.0 +(byte) keyboard_key_pressed::return#2 reg byte a 22.0 +(byte[]) keyboard_matrix_col_bitmask +(const byte[]) keyboard_matrix_col_bitmask#0 keyboard_matrix_col_bitmask = { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/word/signed word/dword/signed dword) 128 } +(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) +(label) keyboard_matrix_read::@return +(byte) keyboard_matrix_read::return +(byte) keyboard_matrix_read::return#0 reg byte a 1.3333333333333333 +(byte) keyboard_matrix_read::return#2 reg byte a 4.0 +(byte) keyboard_matrix_read::row_pressed_bits +(byte) keyboard_matrix_read::rowid +(byte) keyboard_matrix_read::rowid#0 reg byte a 4.0 +(byte[8]) keyboard_matrix_row_bitmask +(const byte[8]) keyboard_matrix_row_bitmask#0 keyboard_matrix_row_bitmask = { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 } +(void()) main() +(byte~) main::$15 reg byte a 22.0 +(byte~) main::$18 reg byte a 22.0 +(byte~) main::$21 reg byte a 22.0 +(byte~) main::$24 reg byte a 22.0 +(byte~) main::$27 reg byte a 22.0 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@19 +(label) main::@2 +(label) main::@21 +(label) main::@22 +(label) main::@23 +(label) main::@25 +(label) main::@26 +(label) main::@27 +(label) main::@29 +(label) main::@3 +(label) main::@30 +(label) main::@31 +(label) main::@32 +(label) main::@33 +(label) main::@34 +(label) main::@35 +(label) main::@36 +(label) main::@4 +(label) main::@41 +(label) main::@42 +(label) main::@43 +(label) main::@44 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@9 +(label) main::@return +(byte) main::ch +(byte) main::ch#1 ch zp ZP_BYTE:6 151.5 +(byte) main::ch#2 ch zp ZP_BYTE:6 25.25 +(byte) main::cur_pos +(byte) main::cur_pos#12 cur_pos zp ZP_BYTE:4 4.730769230769231 +(byte) main::cur_pos#18 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::cur_pos#20 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::cur_pos#22 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::cur_pos#24 cur_pos zp ZP_BYTE:4 3.6666666666666665 +(byte) main::i +(byte) main::i#1 i zp ZP_BYTE:4 16.5 +(byte) main::i#2 i zp ZP_BYTE:4 11.0 +(byte) main::key +(byte) main::key#0 reg byte a 151.5 +(byte) main::pressed +(byte) main::pressed#1 reg byte a 202.0 +(byte) main::pressed#2 reg byte a 202.0 +(byte*) main::sc +(byte*) main::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) main::sc#2 sc zp ZP_WORD:2 16.5 +(byte) main::shift +(byte) main::shift#10 shift zp ZP_BYTE:5 5.315789473684211 +(const string) main::str str = (string) "f1@" +(const string) main::str1 str1 = (string) "f3@" +(const string) main::str2 str2 = (string) "f5@" +(const string) main::str3 str3 = (string) "f7@" +(word()) mul8u((byte) mul8u::a , (byte) mul8u::b) +(byte~) mul8u::$1 reg byte a 2002.0 +(label) mul8u::@1 +(label) mul8u::@2 +(label) mul8u::@4 +(label) mul8u::@7 +(label) mul8u::@return +(byte) mul8u::a +(byte) mul8u::a#0 reg byte x 1001.0 +(byte) mul8u::a#1 reg byte x 2.0 +(byte) mul8u::a#2 reg byte x 667.6666666666667 +(byte) mul8u::b +(const byte) mul8u::b#0 b = (byte/signed byte/word/signed word/dword/signed dword) 10 +(word) mul8u::mb +(word) mul8u::mb#1 mb zp ZP_WORD:11 2002.0 +(word) mul8u::mb#2 mb zp ZP_WORD:11 429.0 +(word) mul8u::res +(word) mul8u::res#1 res zp ZP_WORD:9 2002.0 +(word) mul8u::res#2 res zp ZP_WORD:9 500.83333333333337 +(word) mul8u::res#6 res zp ZP_WORD:9 1001.0 +(word) mul8u::return +(word) mul8u::return#2 return zp ZP_WORD:9 4.0 +(void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift) +(word~) plot_chargen::$0 $0 zp ZP_WORD:2 4.0 +(word~) plot_chargen::$1 $1 zp ZP_WORD:2 4.0 +(byte~) plot_chargen::$10 reg byte a 20002.0 +(word~) plot_chargen::$8 $8 zp ZP_WORD:9 4.0 +(label) plot_chargen::@1 +(label) plot_chargen::@2 +(label) plot_chargen::@3 +(label) plot_chargen::@4 +(label) plot_chargen::@5 +(label) plot_chargen::@6 +(label) plot_chargen::@7 +(label) plot_chargen::@8 +(label) plot_chargen::@9 +(label) plot_chargen::@return +(byte) plot_chargen::bits +(byte) plot_chargen::bits#0 bits zp ZP_BYTE:8 2002.0 +(byte) plot_chargen::bits#1 bits zp ZP_BYTE:8 6667.333333333333 +(byte) plot_chargen::bits#2 bits zp ZP_BYTE:8 4429.142857142857 +(byte) plot_chargen::c +(byte) plot_chargen::c#2 reg byte a 10001.0 +(byte) plot_chargen::ch +(byte) plot_chargen::ch#1 reg byte a 101.0 +(byte) plot_chargen::ch#2 reg byte a 51.5 +(byte*) plot_chargen::chargen +(byte*) plot_chargen::chargen#0 chargen zp ZP_WORD:2 3.0 +(byte*) plot_chargen::chargen#1 chargen zp ZP_WORD:2 4.0 +(byte*) plot_chargen::chargen#5 chargen zp ZP_WORD:2 45.68181818181818 +(byte) plot_chargen::pos +(byte) plot_chargen::pos#0 reg byte x 22.0 +(byte) plot_chargen::pos#1 reg byte x 67.33333333333333 +(byte) plot_chargen::pos#2 reg byte x 12.666666666666664 +(byte*) plot_chargen::sc +(byte*) plot_chargen::sc#0 sc zp ZP_WORD:9 4.0 +(byte*) plot_chargen::sc#1 sc zp ZP_WORD:9 5250.75 +(byte*) plot_chargen::sc#2 sc zp ZP_WORD:9 667.3333333333334 +(byte*) plot_chargen::sc#3 sc zp ZP_WORD:9 5167.333333333333 +(byte*) plot_chargen::sc#7 sc zp ZP_WORD:9 1002.0 +(byte) plot_chargen::shift +(byte) plot_chargen::shift#1 reg byte y 202.0 +(byte) plot_chargen::shift#2 reg byte y 20.599999999999998 +(byte) plot_chargen::x +(byte) plot_chargen::x#1 reg byte x 15001.5 +(byte) plot_chargen::x#2 reg byte x 2500.25 +(byte) plot_chargen::y +(byte) plot_chargen::y#1 y zp ZP_BYTE:7 1501.5 +(byte) plot_chargen::y#2 y zp ZP_BYTE:7 231.0 +(void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at) +(label) print_str_at::@1 +(label) print_str_at::@2 +(label) print_str_at::@return +(byte*) print_str_at::at +(byte*) print_str_at::at#4 at zp ZP_WORD:9 11.0 +(byte*) print_str_at::at#5 at zp ZP_WORD:9 11.666666666666666 +(byte*) print_str_at::at#7 at zp ZP_WORD:9 2.0 +(byte*) print_str_at::str +(byte*) print_str_at::str#4 str zp ZP_WORD:2 22.0 +(byte*) print_str_at::str#5 str zp ZP_WORD:2 11.5 +(byte*) print_str_at::str#7 str zp ZP_WORD:2 2.0 + +zp ZP_WORD:2 [ main::sc#2 main::sc#1 plot_chargen::chargen#5 plot_chargen::chargen#0 plot_chargen::chargen#1 plot_chargen::$1 plot_chargen::$0 print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] +zp ZP_BYTE:4 [ main::i#2 main::i#1 main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#12 ] +zp ZP_BYTE:5 [ main::shift#10 ] +zp ZP_BYTE:6 [ main::ch#2 main::ch#1 ] +reg byte a [ main::pressed#2 main::pressed#1 ] +reg byte a [ plot_chargen::ch#2 plot_chargen::ch#1 ] +reg byte y [ plot_chargen::shift#2 plot_chargen::shift#1 ] +reg byte x [ plot_chargen::pos#2 plot_chargen::pos#0 plot_chargen::pos#1 ] +zp ZP_BYTE:7 [ plot_chargen::y#2 plot_chargen::y#1 ] +zp ZP_BYTE:8 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] +zp ZP_WORD:9 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#2 plot_chargen::sc#0 plot_chargen::sc#1 plot_chargen::$8 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] +reg byte a [ plot_chargen::c#2 ] +reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +zp ZP_WORD:11 [ mul8u::mb#2 mul8u::mb#1 ] +reg byte x [ keyboard_key_pressed::key#6 keyboard_key_pressed::key#5 ] +reg byte a [ keyboard_key_pressed::return#2 ] +reg byte a [ main::$15 ] +reg byte a [ keyboard_key_pressed::return#10 ] +reg byte a [ main::$18 ] +reg byte a [ keyboard_key_pressed::return#11 ] +reg byte a [ main::$21 ] +reg byte a [ keyboard_key_pressed::return#12 ] +reg byte a [ main::$24 ] +reg byte a [ keyboard_key_pressed::return#13 ] +reg byte a [ main::$27 ] +reg byte x [ keyboard_get_keycode::ch#0 ] +reg byte a [ keyboard_get_keycode::return#2 ] +reg byte a [ main::key#0 ] +reg byte a [ keyboard_key_pressed::return#14 ] +reg byte a [ plot_chargen::$10 ] +reg byte a [ mul8u::$1 ] +reg byte a [ keyboard_matrix_read::rowid#0 ] +reg byte a [ keyboard_matrix_read::return#2 ] +reg byte y [ keyboard_key_pressed::$1 ] +reg byte a [ keyboard_key_pressed::$2 ] +reg byte a [ keyboard_key_pressed::return#0 ] +reg byte a [ keyboard_matrix_read::return#0 ] +reg byte a [ keyboard_get_keycode::return#0 ]